@zoho_apptics/apptics-js-sdk 1.0.1 → 2.0.0-beta
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 +87 -0
- package/LICENSE +13 -0
- package/README.md +747 -11
- package/dist/apptics.esm.min.js +3 -0
- package/dist/apptics.esm.min.js.map +1 -0
- package/dist/apptics.min.js +3 -0
- package/dist/apptics.min.js.map +1 -0
- package/dist/chunks/batch-BU_mTpm1.min.js +3 -0
- package/dist/chunks/batch-BU_mTpm1.min.js.map +1 -0
- package/dist/chunks/logs-Bea5zUW_.min.js +3 -0
- package/dist/chunks/logs-Bea5zUW_.min.js.map +1 -0
- package/dist/cjs/auto-init.d.ts +8 -0
- package/dist/cjs/auto-init.js +32 -0
- package/dist/cjs/core/attempts.d.ts +28 -0
- package/dist/cjs/core/attempts.js +113 -0
- package/dist/cjs/core/batch.d.ts +32 -0
- package/dist/cjs/core/batch.js +115 -0
- package/dist/cjs/core/callsite.d.ts +28 -0
- package/dist/cjs/core/callsite.js +93 -0
- package/dist/cjs/core/consent.d.ts +23 -0
- package/dist/cjs/core/consent.js +130 -0
- package/dist/cjs/core/constants.d.ts +212 -0
- package/dist/cjs/core/constants.js +299 -0
- package/dist/cjs/core/db.d.ts +40 -0
- package/dist/cjs/core/db.js +334 -0
- package/dist/cjs/core/debug.d.ts +22 -0
- package/dist/cjs/core/debug.js +88 -0
- package/dist/cjs/core/env.d.ts +28 -0
- package/dist/cjs/core/env.js +267 -0
- package/dist/cjs/core/framework-id.d.ts +1 -0
- package/dist/cjs/core/framework-id.js +9 -0
- package/dist/cjs/core/guard.d.ts +2 -0
- package/dist/cjs/core/guard.js +72 -0
- package/dist/cjs/core/hooks.d.ts +41 -0
- package/dist/cjs/core/hooks.js +23 -0
- package/dist/cjs/core/logger.d.ts +16 -0
- package/dist/cjs/core/logger.js +86 -0
- package/dist/cjs/core/state.d.ts +69 -0
- package/dist/cjs/core/state.js +78 -0
- package/dist/cjs/core/storage.d.ts +46 -0
- package/dist/cjs/core/storage.js +229 -0
- package/dist/cjs/core/transport.d.ts +83 -0
- package/dist/cjs/core/transport.js +441 -0
- package/dist/cjs/core/utils.d.ts +26 -0
- package/dist/cjs/core/utils.js +175 -0
- package/dist/cjs/core/validate.d.ts +18 -0
- package/dist/cjs/core/validate.js +233 -0
- package/dist/cjs/device/appversion.d.ts +20 -0
- package/dist/cjs/device/appversion.js +158 -0
- package/dist/cjs/device/index.d.ts +23 -0
- package/dist/cjs/device/index.js +372 -0
- package/dist/cjs/engagement/api-rules.d.ts +84 -0
- package/dist/cjs/engagement/api-rules.js +219 -0
- package/dist/cjs/engagement/auto-api.d.ts +7 -0
- package/dist/cjs/engagement/auto-api.js +200 -0
- package/dist/cjs/engagement/auto-screen.d.ts +16 -0
- package/dist/cjs/engagement/auto-screen.js +241 -0
- package/dist/cjs/engagement/defined-events.d.ts +23 -0
- package/dist/cjs/engagement/defined-events.js +58 -0
- package/dist/cjs/engagement/send.d.ts +6 -0
- package/dist/cjs/engagement/send.js +99 -0
- package/dist/cjs/engagement/session.d.ts +42 -0
- package/dist/cjs/engagement/session.js +327 -0
- package/dist/cjs/engagement/track.d.ts +56 -0
- package/dist/cjs/engagement/track.js +350 -0
- package/dist/cjs/errors/send.d.ts +6 -0
- package/dist/cjs/errors/send.js +73 -0
- package/dist/cjs/errors/track.d.ts +4 -0
- package/dist/cjs/errors/track.js +127 -0
- package/dist/cjs/feedback/controls.d.ts +31 -0
- package/dist/cjs/feedback/controls.js +286 -0
- package/dist/cjs/feedback/index.d.ts +8 -0
- package/dist/cjs/feedback/index.js +37 -0
- package/dist/cjs/feedback/logs.d.ts +40 -0
- package/dist/cjs/feedback/logs.js +202 -0
- package/dist/cjs/feedback/send.d.ts +25 -0
- package/dist/cjs/feedback/send.js +178 -0
- package/dist/cjs/feedback/template.d.ts +2 -0
- package/dist/cjs/feedback/template.js +162 -0
- package/dist/cjs/feedback/ui.d.ts +55 -0
- package/dist/cjs/feedback/ui.js +631 -0
- package/dist/cjs/heatmap/index.d.ts +16 -0
- package/dist/cjs/heatmap/index.js +22 -0
- package/dist/cjs/heatmap/send.d.ts +13 -0
- package/dist/cjs/heatmap/send.js +82 -0
- package/dist/cjs/heatmap/track.d.ts +4 -0
- package/dist/cjs/heatmap/track.js +377 -0
- package/dist/cjs/index.d.ts +68 -0
- package/dist/cjs/index.js +150 -0
- package/dist/cjs/lifecycle.d.ts +14 -0
- package/dist/cjs/lifecycle.js +538 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/remoteconfig/custom.d.ts +10 -0
- package/dist/cjs/remoteconfig/custom.js +78 -0
- package/dist/cjs/remoteconfig/evaluate.d.ts +24 -0
- package/dist/cjs/remoteconfig/evaluate.js +171 -0
- package/dist/cjs/remoteconfig/fetch.d.ts +24 -0
- package/dist/cjs/remoteconfig/fetch.js +214 -0
- package/dist/cjs/remoteconfig/index.d.ts +13 -0
- package/dist/cjs/remoteconfig/index.js +90 -0
- package/dist/cjs/remoteconfig/store.d.ts +18 -0
- package/dist/cjs/remoteconfig/store.js +98 -0
- package/dist/cjs/remotelog/gate.d.ts +11 -0
- package/dist/cjs/remotelog/gate.js +54 -0
- package/dist/cjs/remotelog/index.d.ts +25 -0
- package/dist/cjs/remotelog/index.js +55 -0
- package/dist/cjs/remotelog/logger.d.ts +28 -0
- package/dist/cjs/remotelog/logger.js +139 -0
- package/dist/cjs/remotelog/send.d.ts +13 -0
- package/dist/cjs/remotelog/send.js +153 -0
- package/dist/cjs/scheduler.d.ts +8 -0
- package/dist/cjs/scheduler.js +78 -0
- package/dist/cjs/types.d.ts +312 -0
- package/dist/cjs/user/index.d.ts +33 -0
- package/dist/cjs/user/index.js +178 -0
- package/dist/esm/auto-init.d.ts +8 -0
- package/dist/esm/auto-init.js +29 -0
- package/dist/esm/core/attempts.d.ts +28 -0
- package/dist/esm/core/attempts.js +106 -0
- package/dist/esm/core/batch.d.ts +32 -0
- package/dist/esm/core/batch.js +108 -0
- package/dist/esm/core/callsite.d.ts +28 -0
- package/dist/esm/core/callsite.js +89 -0
- package/dist/esm/core/consent.d.ts +23 -0
- package/dist/esm/core/consent.js +120 -0
- package/dist/esm/core/constants.d.ts +212 -0
- package/dist/esm/core/constants.js +277 -0
- package/dist/esm/core/db.d.ts +40 -0
- package/dist/esm/core/db.js +324 -0
- package/dist/esm/core/debug.d.ts +22 -0
- package/dist/esm/core/debug.js +81 -0
- package/dist/esm/core/env.d.ts +28 -0
- package/dist/esm/core/env.js +251 -0
- package/dist/esm/core/framework-id.d.ts +1 -0
- package/dist/esm/core/framework-id.js +7 -0
- package/dist/esm/core/guard.d.ts +2 -0
- package/dist/esm/core/guard.js +70 -0
- package/dist/esm/core/hooks.d.ts +41 -0
- package/dist/esm/core/hooks.js +21 -0
- package/dist/esm/core/logger.d.ts +16 -0
- package/dist/esm/core/logger.js +82 -0
- package/dist/esm/core/state.d.ts +69 -0
- package/dist/esm/core/state.js +73 -0
- package/dist/esm/core/storage.d.ts +46 -0
- package/dist/esm/core/storage.js +219 -0
- package/dist/esm/core/transport.d.ts +83 -0
- package/dist/esm/core/transport.js +425 -0
- package/dist/esm/core/utils.d.ts +26 -0
- package/dist/esm/core/utils.js +161 -0
- package/dist/esm/core/validate.d.ts +18 -0
- package/dist/esm/core/validate.js +226 -0
- package/dist/esm/device/appversion.d.ts +20 -0
- package/dist/esm/device/appversion.js +153 -0
- package/dist/esm/device/index.d.ts +23 -0
- package/dist/esm/device/index.js +362 -0
- package/dist/esm/engagement/api-rules.d.ts +84 -0
- package/dist/esm/engagement/api-rules.js +211 -0
- package/dist/esm/engagement/auto-api.d.ts +7 -0
- package/dist/esm/engagement/auto-api.js +198 -0
- package/dist/esm/engagement/auto-screen.d.ts +16 -0
- package/dist/esm/engagement/auto-screen.js +238 -0
- package/dist/esm/engagement/defined-events.d.ts +23 -0
- package/dist/esm/engagement/defined-events.js +55 -0
- package/dist/esm/engagement/send.d.ts +6 -0
- package/dist/esm/engagement/send.js +96 -0
- package/dist/esm/engagement/session.d.ts +42 -0
- package/dist/esm/engagement/session.js +315 -0
- package/dist/esm/engagement/track.d.ts +56 -0
- package/dist/esm/engagement/track.js +340 -0
- package/dist/esm/errors/send.d.ts +6 -0
- package/dist/esm/errors/send.js +70 -0
- package/dist/esm/errors/track.d.ts +4 -0
- package/dist/esm/errors/track.js +123 -0
- package/dist/esm/feedback/controls.d.ts +31 -0
- package/dist/esm/feedback/controls.js +280 -0
- package/dist/esm/feedback/index.d.ts +8 -0
- package/dist/esm/feedback/index.js +30 -0
- package/dist/esm/feedback/logs.d.ts +40 -0
- package/dist/esm/feedback/logs.js +188 -0
- package/dist/esm/feedback/send.d.ts +25 -0
- package/dist/esm/feedback/send.js +175 -0
- package/dist/esm/feedback/template.d.ts +2 -0
- package/dist/esm/feedback/template.js +159 -0
- package/dist/esm/feedback/ui.d.ts +55 -0
- package/dist/esm/feedback/ui.js +626 -0
- package/dist/esm/heatmap/index.d.ts +16 -0
- package/dist/esm/heatmap/index.js +17 -0
- package/dist/esm/heatmap/send.d.ts +13 -0
- package/dist/esm/heatmap/send.js +79 -0
- package/dist/esm/heatmap/track.d.ts +4 -0
- package/dist/esm/heatmap/track.js +374 -0
- package/dist/esm/index.d.ts +68 -0
- package/dist/esm/index.js +122 -0
- package/dist/esm/lifecycle.d.ts +14 -0
- package/dist/esm/lifecycle.js +534 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/remoteconfig/custom.d.ts +10 -0
- package/dist/esm/remoteconfig/custom.js +74 -0
- package/dist/esm/remoteconfig/evaluate.d.ts +24 -0
- package/dist/esm/remoteconfig/evaluate.js +166 -0
- package/dist/esm/remoteconfig/fetch.d.ts +24 -0
- package/dist/esm/remoteconfig/fetch.js +210 -0
- package/dist/esm/remoteconfig/index.d.ts +13 -0
- package/dist/esm/remoteconfig/index.js +85 -0
- package/dist/esm/remoteconfig/store.d.ts +18 -0
- package/dist/esm/remoteconfig/store.js +91 -0
- package/dist/esm/remotelog/gate.d.ts +11 -0
- package/dist/esm/remotelog/gate.js +48 -0
- package/dist/esm/remotelog/index.d.ts +25 -0
- package/dist/esm/remotelog/index.js +51 -0
- package/dist/esm/remotelog/logger.d.ts +28 -0
- package/dist/esm/remotelog/logger.js +136 -0
- package/dist/esm/remotelog/send.d.ts +13 -0
- package/dist/esm/remotelog/send.js +149 -0
- package/dist/esm/scheduler.d.ts +8 -0
- package/dist/esm/scheduler.js +74 -0
- package/dist/esm/types.d.ts +312 -0
- package/dist/esm/user/index.d.ts +33 -0
- package/dist/esm/user/index.js +170 -0
- package/dist/feedback.esm.min.js +3 -0
- package/dist/feedback.esm.min.js.map +1 -0
- package/dist/heatmap.esm.min.js +3 -0
- package/dist/heatmap.esm.min.js.map +1 -0
- package/dist/style.css +1 -0
- package/package.json +124 -7
- package/src/appticssdk.js +0 -3817
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/*! @zoho_apptics/apptics-js-sdk v2.0.0-beta | (c) Zoho Corporation Private Limited | see LICENSE */
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var state = require('../core/state.js');
|
|
5
|
+
var logger = require('../core/logger.js');
|
|
6
|
+
var utils = require('../core/utils.js');
|
|
7
|
+
var env = require('../core/env.js');
|
|
8
|
+
var transport = require('../core/transport.js');
|
|
9
|
+
var logs = require('./logs.js');
|
|
10
|
+
|
|
11
|
+
const SUCCESS_MESSAGE = 'Feedback sent successfully'; // no i18n
|
|
12
|
+
const FAILURE_MESSAGE = 'Something went wrong. Send feedback again'; // no i18n
|
|
13
|
+
/**
|
|
14
|
+
* Ids left out of dyninfo.txt.
|
|
15
|
+
*
|
|
16
|
+
* The file is read by a person looking at a report, and every one of these is a server-side id
|
|
17
|
+
* that the server already has from the request's own params and meta. Repeating them buries the
|
|
18
|
+
* four lines that actually describe the device - browser, OS, screen, timezone - in bookkeeping.
|
|
19
|
+
*/
|
|
20
|
+
const DYNINFO_EXCLUDED_KEYS = ['deviceid', 'anonymousid', 'aaid', 'apid', 'mapid', 'devicetypeid', 'osversionid', 'platformid', 'appversionid', 'appreleaseversionid', 'modelid', 'timezoneid', 'frameworkid', 'projectid', 'portalid', 'donottrackenabled']; // no i18n
|
|
21
|
+
/**
|
|
22
|
+
* Sends feedback to the Apptics API.
|
|
23
|
+
* Resolves with the outcome, or null when nothing was sent (disabled client or offline).
|
|
24
|
+
*/
|
|
25
|
+
function sendFeedbackData(obj) {
|
|
26
|
+
if (env.is_apptics_disabled()) {
|
|
27
|
+
return Promise.resolve(null);
|
|
28
|
+
}
|
|
29
|
+
if (navigator.onLine == false) {
|
|
30
|
+
logger.Console.warn('sendFeedbackData: No Network'); // no i18n
|
|
31
|
+
return Promise.resolve(null);
|
|
32
|
+
}
|
|
33
|
+
var _attachment = !utils.isEmpty(obj.attachment) ? obj.attachment : null;
|
|
34
|
+
var _attachment_count = _attachment ? _attachment.length : 0;
|
|
35
|
+
var _logsFiles = obj && obj.logsFiles ? obj.logsFiles : null;
|
|
36
|
+
var _logsFiles_count = _logsFiles && _logsFiles.length ? _logsFiles.length : 0;
|
|
37
|
+
var time = utils.nowMs();
|
|
38
|
+
// the stored files come first: logfilecount has to count the one we render ourselves.
|
|
39
|
+
// the battery reading is asked for alongside them rather than after, so the extra promise
|
|
40
|
+
// costs nothing - both are waited on once
|
|
41
|
+
return Promise.all([collectStoredFiles(obj), env.getBatteryPercent()]).then(function ([stored, battery]) {
|
|
42
|
+
var sendformdata = new FormData();
|
|
43
|
+
var feedinfoObj = {
|
|
44
|
+
networkstatus: env.getNetworkStatus(),
|
|
45
|
+
orientation: env.getOrientation(),
|
|
46
|
+
edge: env.getConnectionType(),
|
|
47
|
+
screenname: state._ZAP._current_screen.screen || '', // no i18n
|
|
48
|
+
sessionstarttime: state._ZAP._current_session.starttime || time,
|
|
49
|
+
report: obj.message,
|
|
50
|
+
type: obj.type,
|
|
51
|
+
source: 0,
|
|
52
|
+
attachmentcount: _attachment_count || 0,
|
|
53
|
+
logfilecount: _logsFiles_count + (stored.logFile ? 1 : 0),
|
|
54
|
+
happendat: time,
|
|
55
|
+
};
|
|
56
|
+
// quartzid, tag and ram are optional, and each is checked against a regex that cannot
|
|
57
|
+
// match an empty string - quartzid and tag against safe_string, ram against ram_rom
|
|
58
|
+
// ('512 MB'). Sending '' is not "leaving it out", it is a value that fails validation,
|
|
59
|
+
// and one refused key loses the whole submission. ram has no browser source at all, so
|
|
60
|
+
// it is never sent; the other two go only when there is something to send.
|
|
61
|
+
if (!utils.isEmpty(obj.quartzid)) {
|
|
62
|
+
feedinfoObj.quartzid = obj.quartzid; // no i18n
|
|
63
|
+
}
|
|
64
|
+
// battery is optional and typed int: sent only where the browser answered, since a
|
|
65
|
+
// missing reading and a flat battery are not the same thing
|
|
66
|
+
if (battery !== null) {
|
|
67
|
+
feedinfoObj.battery = battery; // no i18n
|
|
68
|
+
}
|
|
69
|
+
sendformdata.append('feedinfo', JSON.stringify({ feedinfo: feedinfoObj, meta: transport.getMetaObj() })); // no i18n
|
|
70
|
+
var ready = Promise.resolve();
|
|
71
|
+
if (_attachment && _attachment_count > 0 && _attachment_count <= 5) {
|
|
72
|
+
ready = readAttachments(_attachment).then(function (files) {
|
|
73
|
+
files.forEach(function (file) {
|
|
74
|
+
sendformdata.append('attachment', file); // no i18n
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
return ready.then(function () {
|
|
79
|
+
appendLogsAndDyninfo(sendformdata, _logsFiles, stored);
|
|
80
|
+
return readyToSendFeedback(sendformdata, stored.ids);
|
|
81
|
+
});
|
|
82
|
+
}).catch(function (err) {
|
|
83
|
+
logger.Console.error('sendFeedbackData: ' + err); // no i18n
|
|
84
|
+
return { ok: false, message: FAILURE_MESSAGE };
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function readAttachments(fileList) {
|
|
88
|
+
var reads = [];
|
|
89
|
+
for (let i = 0; i < fileList.length; i++) {
|
|
90
|
+
const file = fileList[i];
|
|
91
|
+
reads.push(new Promise(function (resolve, reject) {
|
|
92
|
+
const reader = new FileReader();
|
|
93
|
+
reader.onload = function (event) {
|
|
94
|
+
const fileContent = event.target.result;
|
|
95
|
+
resolve(new File([fileContent], 'image_' + (i + 1), { type: file.type })); // no i18n
|
|
96
|
+
};
|
|
97
|
+
reader.onerror = function () {
|
|
98
|
+
reject(reader.error);
|
|
99
|
+
};
|
|
100
|
+
reader.readAsArrayBuffer(file);
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
return Promise.all(reads);
|
|
104
|
+
}
|
|
105
|
+
/** The device info dump that goes in dyninfo.txt, or null when it can't be serialised. */
|
|
106
|
+
function deviceInfoText() {
|
|
107
|
+
try {
|
|
108
|
+
return JSON.stringify(utils.cloneMapExcludingKeys(state._ZAP._device_info, DYNINFO_EXCLUDED_KEYS) || {}, null, 2);
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
logger.Console.error('Failed to prepare dyninfo file', e); // no i18n
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Renders whatever addFeedbackLog() and addDiagnosticsInfo() left behind, honouring the flags. */
|
|
116
|
+
function collectStoredFiles(obj) {
|
|
117
|
+
var wantLog = obj.includeLog !== false;
|
|
118
|
+
var dyninfo = obj.includeDyninfo;
|
|
119
|
+
var wantDyninfo = dyninfo === true ? Promise.resolve(true)
|
|
120
|
+
: dyninfo === false ? Promise.resolve(false)
|
|
121
|
+
: logs.hasDiagnostics(); // unset: send it only because there is something to say
|
|
122
|
+
return Promise.all([
|
|
123
|
+
wantLog ? logs.toLogFile() : Promise.resolve(null),
|
|
124
|
+
wantDyninfo.then(function (wanted) {
|
|
125
|
+
return wanted ? logs.toDyninfoFile(deviceInfoText()) : null;
|
|
126
|
+
}),
|
|
127
|
+
]).then(function ([log, dyn]) {
|
|
128
|
+
return {
|
|
129
|
+
logFile: log ? log.file : null,
|
|
130
|
+
dyninfoFile: dyn ? dyn.file : null,
|
|
131
|
+
ids: (log ? log.ids : []).concat(dyn ? dyn.ids : []),
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
function appendLogsAndDyninfo(sendformdata, _logsFiles, stored) {
|
|
136
|
+
// logfile(s): console log text file(s) the caller passed in
|
|
137
|
+
if (_logsFiles && _logsFiles.length > 0) {
|
|
138
|
+
for (let i = 0; i < _logsFiles.length; i++) {
|
|
139
|
+
sendformdata.append('logfile', _logsFiles[i]); // no i18n
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// logfile: the addFeedbackLog() lines, as feedbacklog.txt
|
|
143
|
+
if (stored.logFile) {
|
|
144
|
+
sendformdata.append('logfile', stored.logFile); // no i18n
|
|
145
|
+
}
|
|
146
|
+
// dyninfo: addDiagnosticsInfo() entries plus the device info dump
|
|
147
|
+
if (stored.dyninfoFile) {
|
|
148
|
+
sendformdata.append('dyninfo', stored.dyninfoFile); // no i18n
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function readyToSendFeedback(data, sentIds) {
|
|
152
|
+
// requestToSendFeedback only resolves on success (postToApptics rejects anything else)
|
|
153
|
+
return requestToSendFeedback(data).then(function () {
|
|
154
|
+
state._ZAP._sending = false;
|
|
155
|
+
// only now, so entries added while this was in flight stay for the next submission
|
|
156
|
+
if (sentIds.length > 0) {
|
|
157
|
+
logs.log_transactions_remove(sentIds);
|
|
158
|
+
}
|
|
159
|
+
return { ok: true, message: SUCCESS_MESSAGE };
|
|
160
|
+
}).catch(function (err) {
|
|
161
|
+
state._ZAP._sending = false;
|
|
162
|
+
logger.Console.log('sendFeedbackData:' + err); // no i18n
|
|
163
|
+
return { ok: false, message: FAILURE_MESSAGE };
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
// Function to send feedback data to server
|
|
167
|
+
function requestToSendFeedback(_payload) {
|
|
168
|
+
var label = 'requestToFeedback'; // no i18n
|
|
169
|
+
var blocked = transport.rejectIfDisabled(label) || transport.rejectIfNoDeviceIds(label);
|
|
170
|
+
if (blocked) {
|
|
171
|
+
return blocked;
|
|
172
|
+
}
|
|
173
|
+
logger.Console.log(label + ': Feedback Payload size : ' + (utils.sizeof(_payload) / 1024)); // no i18n
|
|
174
|
+
return transport.postToApptics('feedback', _payload, transport.apiHeaders(), label); // no i18n
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
exports.requestToSendFeedback = requestToSendFeedback;
|
|
178
|
+
exports.sendFeedbackData = sendFeedbackData;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const feedbackUIHtml = "<div id=\"zasdkFeedbackconatiner\" class=\"zasdk-modal-content\">\n <div class=\"zasdk-header\">\n <h2 class=\"zasdk-title\">Share feedback</h2>\n <span id=\"appticsfeedbackclose\" class=\"zasdk-close\"><svg viewBox=\"0 0 24 24\" style=\" width: 20px; \"><path d=\"M19.92,19.08c.23.23.23.61,0,.85-.12.12-.27.18-.42.18s-.31-.06-.42-.18l-7.08-7.08-7.08,7.08c-.12.12-.27.18-.42.18s-.31-.06-.42-.18c-.23-.23-.23-.61,0-.85l7.08-7.08-7.08-7.08c-.23-.23-.23-.61,0-.85s.61-.23.85,0l7.08,7.08,7.08-7.08c.23-.23.61-.23.85,0s.23.61,0,.85l-7.08,7.08,7.08,7.08Z\"/></svg></span>\n </div>\n <div class=\"zasdk-feedback-types\" data-type=\"\">\n <div class=\"zasdk-feedback-type zasdk-selected\" data-type=\"bug\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-report\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M15.6,6.58c-.13-.37-.3-.7-.5-.97l1.23-1.18c.24-.23.25-.61.02-.85-.23-.24-.61-.25-.85-.02l-1.26,1.21c-.66-.45-1.37-.62-1.79-.68-.25-.04-.51-.04-.76-.02-.83.08-1.45.35-1.93.7l-1.22-1.2c-.24-.23-.62-.23-.85,0-.23.24-.23.62,0,.85l1.21,1.19c-.24.34-.41.68-.51.96-2.02,1.37-3.27,3.82-3.27,6.44,0,4.18,3.08,7.58,6.87,7.58s6.87-3.4,6.87-7.58c0-2.62-1.25-5.06-3.26-6.44ZM11.82,5.27c.15-.02.31-.01.47.01.69.1,1.86.48,2.26,1.9-.17.17-.51.44-1.14.65-1.08.36-2.31.28-3.36-.23-.24-.11-.44-.23-.6-.36,0-.01,0-.03.01-.04.18-.65.73-1.77,2.36-1.93ZM12,19.4c-3.12,0-5.67-2.86-5.67-6.38,0-1.98.82-3.82,2.19-5.02.26.25.59.48,1.01.68.78.38,1.65.57,2.5.57.6,0,1.19-.09,1.76-.28.88-.29,1.39-.7,1.67-1,1.38,1.2,2.21,3.06,2.21,5.05,0,3.52-2.54,6.38-5.67,6.38ZM9.12,9.86c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM9.12,11.99c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47ZM14.88,9.86c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM14.88,11.99c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47ZM12,14.49c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM12,16.62c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47Z\"/></svg></i>\n </div>\n <div>Bug</div>\n </div>\n <div class=\"zasdk-feedback-type\" data-type=\"feedback\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-reqest\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M6.69,9.25h10.81c.41,0,.75-.34.75-.75s-.34-.75-.75-.75H6.69c-.41,0-.75.34-.75.75s.34.75.75.75Z\"/><path d=\"M6.69,13.07h8.11c.41,0,.75-.34.75-.75s-.34-.75-.75-.75H6.69c-.41,0-.75.34-.75.75s.34.75.75.75Z\"/><path d=\"M20.72,5.17c0-.68-.55-1.23-1.23-1.23H4.48c-.68,0-1.23.55-1.23,1.23v11.84c0,.68.55,1.23,1.23,1.23h13.49l1.25,1.51c.17.2.41.31.67.31.1,0,.2-.02.3-.05.34-.13.57-.46.56-.83l-.03-14.01ZM19.22,17.39l-.17-.2c-.24-.29-.58-.45-.95-.45H4.75V5.44h14.47v11.95Z\"/></svg></i>\n </div>\n <div>Feedback</div>\n </div>\n <div class=\"zasdk-feedback-type\" data-type=\"help\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-help\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M12.45,16.47c-.33,0-.6-.27-.6-.6v-2.7c0-.43.25-.82.64-.99.95-.42,3.15-1.62,3.15-3.51,0-1.6-1.01-3.03-2.51-3.55-.95-.33-1.97-.28-2.87.16-.91.43-1.59,1.2-1.92,2.14-.11.31-.45.48-.77.37-.31-.11-.48-.45-.37-.77.44-1.25,1.34-2.25,2.54-2.83,1.2-.57,2.54-.65,3.79-.21,1.99.7,3.32,2.58,3.31,4.69,0,2.46-2.34,3.91-3.79,4.57v2.63c0,.33-.27.6-.6.6ZM13.21,19.1c0-.66-.54-1.2-1.2-1.2h-.03c-.66,0-1.19.54-1.19,1.2s.55,1.2,1.21,1.2,1.2-.54,1.2-1.2Z\"/></svg></i>\n </div>\n <div>Help</div>\n </div>\n <div class=\"zasdk-feedback-type\" data-type=\"report\">\n <div class=\"zasdk-iconcnt zasdkfeedback__icon-appreciate\">\n <i class=\"zasdkfeedback__icon\"><svg viewBox=\"0 0 24 24\"><path d=\"M20.47,16.72l-6.66-11.53c-.37-.65-1.07-1.05-1.81-1.05s-1.44.4-1.81,1.05l-6.66,11.53c-.37.65-.37,1.45,0,2.09.37.65,1.07,1.05,1.81,1.05h13.32c.75,0,1.44-.4,1.81-1.05.37-.64.37-1.45,0-2.09ZM19.17,18.06c-.11.18-.3.3-.51.3H5.34c-.21,0-.41-.11-.51-.3-.1-.18-.1-.41,0-.59l6.66-11.53h0c.11-.18.3-.3.51-.3s.41.11.51.3l6.66,11.53c.11.18.11.41,0,.59Z\"/><path d=\"M12.35,13.9s.37-4.72.37-4.72c.05-1.08-1.58-1.06-1.5.02l.48,4.71c.03.38.62.37.64,0Z\"/><path d=\"M11.97,15.06c-.52,0-.94.42-.94.94s.42.94.94.94.94-.42.94-.94-.42-.94-.94-.94Z\"/></svg></i>\n </div>\n <div>Report</div>\n </div>\n </div>\n <div id=\"zasdkFeedbackForm\" class=\"zasdk-form\">\n <label class=\"zasdkdesclbl\">User<span class=\"zasdkmadfeld\">*</span></label>\n <div id=\"zasdkEmailDropdown\" class=\"zasdk-custom-select\">\n <div id=\"zasdkEmailTrigger\" class=\"zasdk-select-trigger\">\n <span id=\"zasdkEmailLabel\" class=\"zasdk-select-label\">Anonymous</span>\n <svg class=\"zasdk-select-arrow\" viewBox=\"0 0 12 8\" width=\"12\" height=\"8\"><path d=\"M1 1l5 5 5-5\" stroke=\"#999\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg>\n </div>\n <div id=\"zasdkEmailPanel\" class=\"zasdk-select-panel\" style=\"display:none\">\n <ul id=\"zasdkEmailList\" class=\"zasdk-select-list\"></ul>\n </div>\n </div>\n <label class=\"zasdkdesclbl\" for=\"zasdkDescription\">Add details here<span class=\"zasdkmadfeld\">*</span> <span class=\"zaleftcharspan\"><span class=\"zaleftcharcnt\">5000</span><span class=\"zaleftchartxt\">character left</span></span></label>\n <textarea id=\"zasdkDescription\" name=\"description\" placeholder=\"Please provide more details for us to help you better.\" reqname=\"name\" maxlength=\"5000\"></textarea>\n <div id=\"zasdkreccheckcnt\" class=\"zasdkqz-container\">\n <div class=\"zasdkqz-checkbox-wrapper\">\n <input type=\"checkbox\" id=\"zasdkqz-consent\" class=\"zasdkqz-checkbox\">\n <label for=\"zasdkqz-consent\">By agreeing to record screen, I allow the collection of the required information for further analysis.</label>\n </div>\n <div id=\"zasdkqz-content\" class=\"zasdkqz-content\">\n <div class=\"zasdkqz-prop-content\">Data collected while screen recording.\n <div class=\"zasdk_rec_hdr_icon zasdk-tooltip-container zasdk_rec_hdr\">\n <i><svg viewBox=\"0 0 24 24\"><path d=\"M12,20.6c-4.74,0-8.6-3.86-8.6-8.6S7.26,3.4,12,3.4s8.6,3.86,8.6,8.6-3.86,8.6-8.6,8.6ZM12,4.6c-4.08,0-7.4,3.32-7.4,7.4s3.32,7.4,7.4,7.4,7.4-3.32,7.4-7.4-3.32-7.4-7.4-7.4ZM12.6,15.97v-4.91c0-.33-.27-.6-.6-.6s-.6.27-.6.6v4.91c0,.33.27.6.6.6s.6-.27.6-.6ZM12.61,9.03c0-.33-.27-.6-.6-.6h-.01c-.33,0-.59.27-.59.6s.28.6.61.6.6-.27.6-.6Z\"/></svg></i>\n <div class=\"zasdk-tooltip-top zasdk-prop-info\">\n <ul>\n <li>- A recording of the window or region specified.</li>\n <li>- Audio captured during recording. (You can mute or re-record)</li>\n <li>- IP address.</li>\n <li>- Browser console logs generated while recording.</li>\n <li>- Device details (screen resolution, OS, and browser version).</li>\n <li>- Client-side performance metrics (DNS lookup time, TCP connection time, etc.).</li>\n </ul>\n </div>\n </div>\n </div>\n <div id=\"zasdkqz_rec_button\" class=\"zasdkqz-button\">Start screen recording</div>\n </div>\n </div>\n <div id=\"editRecordedVideo\" class=\"zasdk_recordedClipArea\" style=\"\">\n <div id=\"recordScreenDesc\" class=\"zasdk_rec_hdr\"> Recorded Clip\n <div class=\"zasdk_rec_hdr_icon zasdk-tooltip-container\">\n <i><svg viewBox=\"0 0 24 24\"><path d=\"M12,20.6c-4.74,0-8.6-3.86-8.6-8.6S7.26,3.4,12,3.4s8.6,3.86,8.6,8.6-3.86,8.6-8.6,8.6ZM12,4.6c-4.08,0-7.4,3.32-7.4,7.4s3.32,7.4,7.4,7.4,7.4-3.32,7.4-7.4-3.32-7.4-7.4-7.4ZM12.6,15.97v-4.91c0-.33-.27-.6-.6-.6s-.6.27-.6.6v4.91c0,.33.27.6.6.6s.6-.27.6-.6ZM12.61,9.03c0-.33-.27-.6-.6-.6h-.01c-.33,0-.59.27-.59.6s.28.6.61.6.6-.27.6-.6Z\"/></svg></i>\n <div class=\"zasdk-tooltip\">This recording will be sent along with your feedback for further analysis.</div>\n </div>\n </div>\n <div class=\"zasdk_playEdit\">\n <div class=\"zasdk_clipAreaButtonCnt zasdk-tooltip-container\">\n <div id=\"preivewPlayButton\" class=\"zasdk_clipAreaButton\" title=\"Preview\">\n <svg viewBox=\"0 0 24 24\"><path d=\"M6.24,20.6c-.2,0-.39-.05-.57-.15-.38-.21-.62-.61-.62-1.05V4.59c0-.44.24-.84.62-1.05.38-.21.85-.19,1.22.04l11.52,7.41c.34.22.55.6.55,1,0,.41-.2.78-.55,1l-11.52,7.41c-.2.13-.42.19-.64.19ZM6.56,4.1l-.33.5v14.81s11.52-7.41,11.52-7.41L6.23,4.6l.33-.5Z\"/></svg>\n </div>\n <div class=\"zasdk-tooltip\">Preview</div>\n </div>\n <div class=\"zasdk_clipAreaButtonCnt zasdk-tooltip-container\">\n <div id=\"videoEditButton\" class=\"zasdk_clipAreaButton\">\n <svg id=\"Layer_2\" viewBox=\"0 0 24 24\"><path d=\"M20.6,7.18c0-.58-.23-1.13-.65-1.54l-1.53-1.51c-.83-.83-2.29-.83-3.12,0l-1.31,1.3h0S4.88,14.41,4.88,14.41c-.12.12-.21.27-.26.44l-1.19,4.4c-.09.34,0,.7.26.95.19.18.44.29.7.29.09,0,.17-.01.26-.04l4.44-1.2c.16-.05.31-.13.44-.25l8.54-8.43h0s1.88-1.86,1.88-1.86c.06-.06.12-.12.17-.19h0c.31-.39.48-.86.48-1.36ZM8.72,18.12l-4.03,1.09,1.08-3.98L13.97,7.12l2.88,2.97-8.13,8.03ZM17.71,9.25l-2.88-2.97,1.32-1.3c.38-.38,1.04-.38,1.43,0l1.53,1.51c.19.18.29.43.29.69,0,.22-.08.43-.21.6h0s-.04.05-.08.08l-1.4,1.39Z\"/></svg>\n </div>\n <div class=\"zasdk-tooltip\">Edit</div>\n </div>\n <div class=\"zasdk_clipAreaButtonCnt zasdk-tooltip-container\">\n <div id=\"videoDelButton\" class=\"zasdk_clipAreaButton\">\n <svg id=\"Layer_2\" viewBox=\"0 0 24 24\"><path d=\"M19.2,6.6h-3.4v-1c0-1.21-.99-2.2-2.2-2.2h-3.2c-1.21,0-2.2.99-2.2,2.2v1h-3.4c-.33,0-.6.27-.6.6s.27.6.6.6h1v10.6c0,1.21.99,2.2,2.2,2.2h8c1.21,0,2.2-.99,2.2-2.2V7.8h1c.33,0,.6-.27.6-.6s-.27-.6-.6-.6ZM9.4,5.6c0-.55.45-1,1-1h3.2c.55,0,1,.45,1,1v1h-5.2v-1ZM17,18.4c0,.55-.45,1-1,1h-8c-.55,0-1-.45-1-1V7.8h10v10.6ZM11,11.2v4.8c0,.33-.27.6-.6.6s-.6-.27-.6-.6v-4.8c0-.33.27-.6.6-.6s.6.27.6.6ZM14.2,11.2v4.8c0,.33-.27.6-.6.6s-.6-.27-.6-.6v-4.8c0-.33.27-.6.6-.6s.6.27.6.6Z\"/></svg>\n </div>\n <div class=\"zasdk-tooltip\">Delete</div>\n </div>\n </div>\n <div class=\"zasdk_videoPrev\">\n <video id=\"previewVideoElemId\" width=\"320\" height=\"240\" src=\"\"></video>\n </div>\n </div>\n\n <div class=\"zasdk-buttons\">\n <div class=\"zasdk-btncnt\">\n <div id=\"zasdkattachinfo\" class=\"zasdkattachinf\">Maximum 5 attachments with a total file size of 10MB is allowed</div>\n <input type=\"file\" id=\"zasdkFileInput\" class=\"zasdk-file-input\" multiple accept=\".png, .jpg, .txt\">\n <label id=\"zasdkAttachBtn\" class=\"zasdk-btn zasdk-attach-btn\" for=\"zasdkFileInput\">\n <svg id=\"Layer_2\" viewBox=\"0 0 24 24\" style=\" width: 25px; \"><path d=\"M12,20.6c-2.63,0-4.78-2.14-4.78-4.78V6.78c0-1.87,1.52-3.38,3.38-3.38s3.38,1.52,3.38,3.38v9.04c0,1.1-.9,1.99-2,1.99s-1.99-.89-1.99-1.99V7.48c0-.33.27-.6.6-.6h0c.33,0,.6.27.6.6v8.35c0,.44.35.79.79.79s.79-.36.79-.79V6.78c0-1.2-.98-2.18-2.18-2.18s-2.18.98-2.18,2.18v9.04c0,1.97,1.6,3.58,3.58,3.58s3.58-1.6,3.58-3.58V6.78c0-.33.27-.6.6-.6s.6.27.6.6v9.04c0,2.63-2.14,4.78-4.78,4.78Z\"/></svg>\n <span>Attachments</span>\n </label>\n <div id=\"zasdkfilesizeinfo\" class=\"zasdkfilesizeinf\"></div>\n <ul id=\"zasakfileList\" class=\"zasakfilelstcnt\"></ul>\n </div>\n </div>\n </div>\n <div class=\"zasdk-toggles-section\">\n <div class=\"zasdk-toggle-row\">\n <div class=\"zasdk-toggle-info\">\n <span class=\"zasdk-toggle-label\">Include System Logs</span>\n <span class=\"zasdk-view-link\" id=\"zasdkViewLogsBtn\">View</span>\n </div>\n <label class=\"zasdk-switch\">\n <input type=\"checkbox\" id=\"zasdkIncludeLogToggle\">\n <span class=\"zasdk-slider\"></span>\n </label>\n </div>\n <div class=\"zasdk-toggle-separator\"></div>\n <div class=\"zasdk-toggle-row\">\n <div class=\"zasdk-toggle-info\">\n <span class=\"zasdk-toggle-label\">Include Diagnostic Information</span>\n <span class=\"zasdk-view-link\" id=\"zasdkViewDiagBtn\">View</span>\n </div>\n <label class=\"zasdk-switch\">\n <input type=\"checkbox\" id=\"zasdkIncludeDiagToggle\">\n <span class=\"zasdk-slider\"></span>\n </label>\n </div>\n </div>\n <div class=\"zasdk_submit_btncnt\">\n <div id=\"zasdksubmitstatus\" class=\"zasdkstsmsg\" style=\"display:none;\" ></div>\n <div id=\"zasdk_submit_btnsubcnt\" class=\"zasdk_submit_btnsubcnt\">\n <input type=\"button\" id=\"zasdk_submit_btn\" class=\"zasdk-btn zasdk-send-btn zasdkbtndisableclr\" value=\"Send\">\n </div>\n </div>\n <div id=\"zasdkDataViewer\" class=\"zasdk-data-viewer\" style=\"display:none\">\n <div class=\"zasdk-viewer-hdr\">\n <span id=\"zasdkViewerClose\" class=\"zasdk-viewer-back\"><svg viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\"><path d=\"M15 19l-7-7 7-7\" stroke=\"#333\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></span>\n <span id=\"zasdkViewerTitle\" class=\"zasdk-viewer-title\"></span>\n </div>\n <pre id=\"zasdkViewerContent\" class=\"zasdk-viewer-content\"></pre>\n </div>\n </div>";
|
|
2
|
+
export declare const timerHtml = "<div id=\"zasdkrectimer\" class=\"zasdk-timer-container zasdk-tooltip-container\">\n <div class=\"zasdk-timer-control\" id=\"zasdkRecordButton\"><div class=\"zasdk-timer-stopcricle\"></div></div>\n <span class=\"zasdk-timer-display\" id=\"zasdkTimerDisplay\">05:00</span>\n <div class=\"zasdk-tooltip-top\">Stop Recording</div>\n </div>";
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/*! @zoho_apptics/apptics-js-sdk v2.0.0-beta | (c) Zoho Corporation Private Limited | see LICENSE */
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
// Feedback modal markup (moved from js/apptics.js).
|
|
5
|
+
const feedbackUIHtml = `<div id="zasdkFeedbackconatiner" class="zasdk-modal-content">
|
|
6
|
+
<div class="zasdk-header">
|
|
7
|
+
<h2 class="zasdk-title">Share feedback</h2>
|
|
8
|
+
<span id="appticsfeedbackclose" class="zasdk-close"><svg viewBox="0 0 24 24" style=" width: 20px; "><path d="M19.92,19.08c.23.23.23.61,0,.85-.12.12-.27.18-.42.18s-.31-.06-.42-.18l-7.08-7.08-7.08,7.08c-.12.12-.27.18-.42.18s-.31-.06-.42-.18c-.23-.23-.23-.61,0-.85l7.08-7.08-7.08-7.08c-.23-.23-.23-.61,0-.85s.61-.23.85,0l7.08,7.08,7.08-7.08c.23-.23.61-.23.85,0s.23.61,0,.85l-7.08,7.08,7.08,7.08Z"/></svg></span>
|
|
9
|
+
</div>
|
|
10
|
+
<div class="zasdk-feedback-types" data-type="">
|
|
11
|
+
<div class="zasdk-feedback-type zasdk-selected" data-type="bug">
|
|
12
|
+
<div class="zasdk-iconcnt zasdkfeedback__icon-report">
|
|
13
|
+
<i class="zasdkfeedback__icon"><svg viewBox="0 0 24 24"><path d="M15.6,6.58c-.13-.37-.3-.7-.5-.97l1.23-1.18c.24-.23.25-.61.02-.85-.23-.24-.61-.25-.85-.02l-1.26,1.21c-.66-.45-1.37-.62-1.79-.68-.25-.04-.51-.04-.76-.02-.83.08-1.45.35-1.93.7l-1.22-1.2c-.24-.23-.62-.23-.85,0-.23.24-.23.62,0,.85l1.21,1.19c-.24.34-.41.68-.51.96-2.02,1.37-3.27,3.82-3.27,6.44,0,4.18,3.08,7.58,6.87,7.58s6.87-3.4,6.87-7.58c0-2.62-1.25-5.06-3.26-6.44ZM11.82,5.27c.15-.02.31-.01.47.01.69.1,1.86.48,2.26,1.9-.17.17-.51.44-1.14.65-1.08.36-2.31.28-3.36-.23-.24-.11-.44-.23-.6-.36,0-.01,0-.03.01-.04.18-.65.73-1.77,2.36-1.93ZM12,19.4c-3.12,0-5.67-2.86-5.67-6.38,0-1.98.82-3.82,2.19-5.02.26.25.59.48,1.01.68.78.38,1.65.57,2.5.57.6,0,1.19-.09,1.76-.28.88-.29,1.39-.7,1.67-1,1.38,1.2,2.21,3.06,2.21,5.05,0,3.52-2.54,6.38-5.67,6.38ZM9.12,9.86c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM9.12,11.99c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47ZM14.88,9.86c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM14.88,11.99c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47ZM12,14.49c-.92,0-1.67.75-1.67,1.67s.75,1.67,1.67,1.67,1.67-.75,1.67-1.67-.75-1.67-1.67-1.67ZM12,16.62c-.26,0-.47-.21-.47-.47s.21-.47.47-.47.47.21.47.47-.21.47-.47.47Z"/></svg></i>
|
|
14
|
+
</div>
|
|
15
|
+
<div>Bug</div>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="zasdk-feedback-type" data-type="feedback">
|
|
18
|
+
<div class="zasdk-iconcnt zasdkfeedback__icon-reqest">
|
|
19
|
+
<i class="zasdkfeedback__icon"><svg viewBox="0 0 24 24"><path d="M6.69,9.25h10.81c.41,0,.75-.34.75-.75s-.34-.75-.75-.75H6.69c-.41,0-.75.34-.75.75s.34.75.75.75Z"/><path d="M6.69,13.07h8.11c.41,0,.75-.34.75-.75s-.34-.75-.75-.75H6.69c-.41,0-.75.34-.75.75s.34.75.75.75Z"/><path d="M20.72,5.17c0-.68-.55-1.23-1.23-1.23H4.48c-.68,0-1.23.55-1.23,1.23v11.84c0,.68.55,1.23,1.23,1.23h13.49l1.25,1.51c.17.2.41.31.67.31.1,0,.2-.02.3-.05.34-.13.57-.46.56-.83l-.03-14.01ZM19.22,17.39l-.17-.2c-.24-.29-.58-.45-.95-.45H4.75V5.44h14.47v11.95Z"/></svg></i>
|
|
20
|
+
</div>
|
|
21
|
+
<div>Feedback</div>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="zasdk-feedback-type" data-type="help">
|
|
24
|
+
<div class="zasdk-iconcnt zasdkfeedback__icon-help">
|
|
25
|
+
<i class="zasdkfeedback__icon"><svg viewBox="0 0 24 24"><path d="M12.45,16.47c-.33,0-.6-.27-.6-.6v-2.7c0-.43.25-.82.64-.99.95-.42,3.15-1.62,3.15-3.51,0-1.6-1.01-3.03-2.51-3.55-.95-.33-1.97-.28-2.87.16-.91.43-1.59,1.2-1.92,2.14-.11.31-.45.48-.77.37-.31-.11-.48-.45-.37-.77.44-1.25,1.34-2.25,2.54-2.83,1.2-.57,2.54-.65,3.79-.21,1.99.7,3.32,2.58,3.31,4.69,0,2.46-2.34,3.91-3.79,4.57v2.63c0,.33-.27.6-.6.6ZM13.21,19.1c0-.66-.54-1.2-1.2-1.2h-.03c-.66,0-1.19.54-1.19,1.2s.55,1.2,1.21,1.2,1.2-.54,1.2-1.2Z"/></svg></i>
|
|
26
|
+
</div>
|
|
27
|
+
<div>Help</div>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="zasdk-feedback-type" data-type="report">
|
|
30
|
+
<div class="zasdk-iconcnt zasdkfeedback__icon-appreciate">
|
|
31
|
+
<i class="zasdkfeedback__icon"><svg viewBox="0 0 24 24"><path d="M20.47,16.72l-6.66-11.53c-.37-.65-1.07-1.05-1.81-1.05s-1.44.4-1.81,1.05l-6.66,11.53c-.37.65-.37,1.45,0,2.09.37.65,1.07,1.05,1.81,1.05h13.32c.75,0,1.44-.4,1.81-1.05.37-.64.37-1.45,0-2.09ZM19.17,18.06c-.11.18-.3.3-.51.3H5.34c-.21,0-.41-.11-.51-.3-.1-.18-.1-.41,0-.59l6.66-11.53h0c.11-.18.3-.3.51-.3s.41.11.51.3l6.66,11.53c.11.18.11.41,0,.59Z"/><path d="M12.35,13.9s.37-4.72.37-4.72c.05-1.08-1.58-1.06-1.5.02l.48,4.71c.03.38.62.37.64,0Z"/><path d="M11.97,15.06c-.52,0-.94.42-.94.94s.42.94.94.94.94-.42.94-.94-.42-.94-.94-.94Z"/></svg></i>
|
|
32
|
+
</div>
|
|
33
|
+
<div>Report</div>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
<div id="zasdkFeedbackForm" class="zasdk-form">
|
|
37
|
+
<label class="zasdkdesclbl">User<span class="zasdkmadfeld">*</span></label>
|
|
38
|
+
<div id="zasdkEmailDropdown" class="zasdk-custom-select">
|
|
39
|
+
<div id="zasdkEmailTrigger" class="zasdk-select-trigger">
|
|
40
|
+
<span id="zasdkEmailLabel" class="zasdk-select-label">Anonymous</span>
|
|
41
|
+
<svg class="zasdk-select-arrow" viewBox="0 0 12 8" width="12" height="8"><path d="M1 1l5 5 5-5" stroke="#999" stroke-width="1.5" fill="none" stroke-linecap="round"/></svg>
|
|
42
|
+
</div>
|
|
43
|
+
<div id="zasdkEmailPanel" class="zasdk-select-panel" style="display:none">
|
|
44
|
+
<ul id="zasdkEmailList" class="zasdk-select-list"></ul>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
<label class="zasdkdesclbl" for="zasdkDescription">Add details here<span class="zasdkmadfeld">*</span> <span class="zaleftcharspan"><span class="zaleftcharcnt">5000</span><span class="zaleftchartxt">character left</span></span></label>
|
|
48
|
+
<textarea id="zasdkDescription" name="description" placeholder="Please provide more details for us to help you better." reqname="name" maxlength="5000"></textarea>
|
|
49
|
+
<div id="zasdkreccheckcnt" class="zasdkqz-container">
|
|
50
|
+
<div class="zasdkqz-checkbox-wrapper">
|
|
51
|
+
<input type="checkbox" id="zasdkqz-consent" class="zasdkqz-checkbox">
|
|
52
|
+
<label for="zasdkqz-consent">By agreeing to record screen, I allow the collection of the required information for further analysis.</label>
|
|
53
|
+
</div>
|
|
54
|
+
<div id="zasdkqz-content" class="zasdkqz-content">
|
|
55
|
+
<div class="zasdkqz-prop-content">Data collected while screen recording.
|
|
56
|
+
<div class="zasdk_rec_hdr_icon zasdk-tooltip-container zasdk_rec_hdr">
|
|
57
|
+
<i><svg viewBox="0 0 24 24"><path d="M12,20.6c-4.74,0-8.6-3.86-8.6-8.6S7.26,3.4,12,3.4s8.6,3.86,8.6,8.6-3.86,8.6-8.6,8.6ZM12,4.6c-4.08,0-7.4,3.32-7.4,7.4s3.32,7.4,7.4,7.4,7.4-3.32,7.4-7.4-3.32-7.4-7.4-7.4ZM12.6,15.97v-4.91c0-.33-.27-.6-.6-.6s-.6.27-.6.6v4.91c0,.33.27.6.6.6s.6-.27.6-.6ZM12.61,9.03c0-.33-.27-.6-.6-.6h-.01c-.33,0-.59.27-.59.6s.28.6.61.6.6-.27.6-.6Z"/></svg></i>
|
|
58
|
+
<div class="zasdk-tooltip-top zasdk-prop-info">
|
|
59
|
+
<ul>
|
|
60
|
+
<li>- A recording of the window or region specified.</li>
|
|
61
|
+
<li>- Audio captured during recording. (You can mute or re-record)</li>
|
|
62
|
+
<li>- IP address.</li>
|
|
63
|
+
<li>- Browser console logs generated while recording.</li>
|
|
64
|
+
<li>- Device details (screen resolution, OS, and browser version).</li>
|
|
65
|
+
<li>- Client-side performance metrics (DNS lookup time, TCP connection time, etc.).</li>
|
|
66
|
+
</ul>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
<div id="zasdkqz_rec_button" class="zasdkqz-button">Start screen recording</div>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
<div id="editRecordedVideo" class="zasdk_recordedClipArea" style="">
|
|
74
|
+
<div id="recordScreenDesc" class="zasdk_rec_hdr"> Recorded Clip
|
|
75
|
+
<div class="zasdk_rec_hdr_icon zasdk-tooltip-container">
|
|
76
|
+
<i><svg viewBox="0 0 24 24"><path d="M12,20.6c-4.74,0-8.6-3.86-8.6-8.6S7.26,3.4,12,3.4s8.6,3.86,8.6,8.6-3.86,8.6-8.6,8.6ZM12,4.6c-4.08,0-7.4,3.32-7.4,7.4s3.32,7.4,7.4,7.4,7.4-3.32,7.4-7.4-3.32-7.4-7.4-7.4ZM12.6,15.97v-4.91c0-.33-.27-.6-.6-.6s-.6.27-.6.6v4.91c0,.33.27.6.6.6s.6-.27.6-.6ZM12.61,9.03c0-.33-.27-.6-.6-.6h-.01c-.33,0-.59.27-.59.6s.28.6.61.6.6-.27.6-.6Z"/></svg></i>
|
|
77
|
+
<div class="zasdk-tooltip">This recording will be sent along with your feedback for further analysis.</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
<div class="zasdk_playEdit">
|
|
81
|
+
<div class="zasdk_clipAreaButtonCnt zasdk-tooltip-container">
|
|
82
|
+
<div id="preivewPlayButton" class="zasdk_clipAreaButton" title="Preview">
|
|
83
|
+
<svg viewBox="0 0 24 24"><path d="M6.24,20.6c-.2,0-.39-.05-.57-.15-.38-.21-.62-.61-.62-1.05V4.59c0-.44.24-.84.62-1.05.38-.21.85-.19,1.22.04l11.52,7.41c.34.22.55.6.55,1,0,.41-.2.78-.55,1l-11.52,7.41c-.2.13-.42.19-.64.19ZM6.56,4.1l-.33.5v14.81s11.52-7.41,11.52-7.41L6.23,4.6l.33-.5Z"/></svg>
|
|
84
|
+
</div>
|
|
85
|
+
<div class="zasdk-tooltip">Preview</div>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="zasdk_clipAreaButtonCnt zasdk-tooltip-container">
|
|
88
|
+
<div id="videoEditButton" class="zasdk_clipAreaButton">
|
|
89
|
+
<svg id="Layer_2" viewBox="0 0 24 24"><path d="M20.6,7.18c0-.58-.23-1.13-.65-1.54l-1.53-1.51c-.83-.83-2.29-.83-3.12,0l-1.31,1.3h0S4.88,14.41,4.88,14.41c-.12.12-.21.27-.26.44l-1.19,4.4c-.09.34,0,.7.26.95.19.18.44.29.7.29.09,0,.17-.01.26-.04l4.44-1.2c.16-.05.31-.13.44-.25l8.54-8.43h0s1.88-1.86,1.88-1.86c.06-.06.12-.12.17-.19h0c.31-.39.48-.86.48-1.36ZM8.72,18.12l-4.03,1.09,1.08-3.98L13.97,7.12l2.88,2.97-8.13,8.03ZM17.71,9.25l-2.88-2.97,1.32-1.3c.38-.38,1.04-.38,1.43,0l1.53,1.51c.19.18.29.43.29.69,0,.22-.08.43-.21.6h0s-.04.05-.08.08l-1.4,1.39Z"/></svg>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="zasdk-tooltip">Edit</div>
|
|
92
|
+
</div>
|
|
93
|
+
<div class="zasdk_clipAreaButtonCnt zasdk-tooltip-container">
|
|
94
|
+
<div id="videoDelButton" class="zasdk_clipAreaButton">
|
|
95
|
+
<svg id="Layer_2" viewBox="0 0 24 24"><path d="M19.2,6.6h-3.4v-1c0-1.21-.99-2.2-2.2-2.2h-3.2c-1.21,0-2.2.99-2.2,2.2v1h-3.4c-.33,0-.6.27-.6.6s.27.6.6.6h1v10.6c0,1.21.99,2.2,2.2,2.2h8c1.21,0,2.2-.99,2.2-2.2V7.8h1c.33,0,.6-.27.6-.6s-.27-.6-.6-.6ZM9.4,5.6c0-.55.45-1,1-1h3.2c.55,0,1,.45,1,1v1h-5.2v-1ZM17,18.4c0,.55-.45,1-1,1h-8c-.55,0-1-.45-1-1V7.8h10v10.6ZM11,11.2v4.8c0,.33-.27.6-.6.6s-.6-.27-.6-.6v-4.8c0-.33.27-.6.6-.6s.6.27.6.6ZM14.2,11.2v4.8c0,.33-.27.6-.6.6s-.6-.27-.6-.6v-4.8c0-.33.27-.6.6-.6s.6.27.6.6Z"/></svg>
|
|
96
|
+
</div>
|
|
97
|
+
<div class="zasdk-tooltip">Delete</div>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
<div class="zasdk_videoPrev">
|
|
101
|
+
<video id="previewVideoElemId" width="320" height="240" src=""></video>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div class="zasdk-buttons">
|
|
106
|
+
<div class="zasdk-btncnt">
|
|
107
|
+
<div id="zasdkattachinfo" class="zasdkattachinf">Maximum 5 attachments with a total file size of 10MB is allowed</div>
|
|
108
|
+
<input type="file" id="zasdkFileInput" class="zasdk-file-input" multiple accept=".png, .jpg, .txt">
|
|
109
|
+
<label id="zasdkAttachBtn" class="zasdk-btn zasdk-attach-btn" for="zasdkFileInput">
|
|
110
|
+
<svg id="Layer_2" viewBox="0 0 24 24" style=" width: 25px; "><path d="M12,20.6c-2.63,0-4.78-2.14-4.78-4.78V6.78c0-1.87,1.52-3.38,3.38-3.38s3.38,1.52,3.38,3.38v9.04c0,1.1-.9,1.99-2,1.99s-1.99-.89-1.99-1.99V7.48c0-.33.27-.6.6-.6h0c.33,0,.6.27.6.6v8.35c0,.44.35.79.79.79s.79-.36.79-.79V6.78c0-1.2-.98-2.18-2.18-2.18s-2.18.98-2.18,2.18v9.04c0,1.97,1.6,3.58,3.58,3.58s3.58-1.6,3.58-3.58V6.78c0-.33.27-.6.6-.6s.6.27.6.6v9.04c0,2.63-2.14,4.78-4.78,4.78Z"/></svg>
|
|
111
|
+
<span>Attachments</span>
|
|
112
|
+
</label>
|
|
113
|
+
<div id="zasdkfilesizeinfo" class="zasdkfilesizeinf"></div>
|
|
114
|
+
<ul id="zasakfileList" class="zasakfilelstcnt"></ul>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
<div class="zasdk-toggles-section">
|
|
119
|
+
<div class="zasdk-toggle-row">
|
|
120
|
+
<div class="zasdk-toggle-info">
|
|
121
|
+
<span class="zasdk-toggle-label">Include System Logs</span>
|
|
122
|
+
<span class="zasdk-view-link" id="zasdkViewLogsBtn">View</span>
|
|
123
|
+
</div>
|
|
124
|
+
<label class="zasdk-switch">
|
|
125
|
+
<input type="checkbox" id="zasdkIncludeLogToggle">
|
|
126
|
+
<span class="zasdk-slider"></span>
|
|
127
|
+
</label>
|
|
128
|
+
</div>
|
|
129
|
+
<div class="zasdk-toggle-separator"></div>
|
|
130
|
+
<div class="zasdk-toggle-row">
|
|
131
|
+
<div class="zasdk-toggle-info">
|
|
132
|
+
<span class="zasdk-toggle-label">Include Diagnostic Information</span>
|
|
133
|
+
<span class="zasdk-view-link" id="zasdkViewDiagBtn">View</span>
|
|
134
|
+
</div>
|
|
135
|
+
<label class="zasdk-switch">
|
|
136
|
+
<input type="checkbox" id="zasdkIncludeDiagToggle">
|
|
137
|
+
<span class="zasdk-slider"></span>
|
|
138
|
+
</label>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
<div class="zasdk_submit_btncnt">
|
|
142
|
+
<div id="zasdksubmitstatus" class="zasdkstsmsg" style="display:none;" ></div>
|
|
143
|
+
<div id="zasdk_submit_btnsubcnt" class="zasdk_submit_btnsubcnt">
|
|
144
|
+
<input type="button" id="zasdk_submit_btn" class="zasdk-btn zasdk-send-btn zasdkbtndisableclr" value="Send">
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
<div id="zasdkDataViewer" class="zasdk-data-viewer" style="display:none">
|
|
148
|
+
<div class="zasdk-viewer-hdr">
|
|
149
|
+
<span id="zasdkViewerClose" class="zasdk-viewer-back"><svg viewBox="0 0 24 24" width="20" height="20" fill="none"><path d="M15 19l-7-7 7-7" stroke="#333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></span>
|
|
150
|
+
<span id="zasdkViewerTitle" class="zasdk-viewer-title"></span>
|
|
151
|
+
</div>
|
|
152
|
+
<pre id="zasdkViewerContent" class="zasdk-viewer-content"></pre>
|
|
153
|
+
</div>
|
|
154
|
+
</div>`; // no i18n
|
|
155
|
+
const timerHtml = `<div id="zasdkrectimer" class="zasdk-timer-container zasdk-tooltip-container">
|
|
156
|
+
<div class="zasdk-timer-control" id="zasdkRecordButton"><div class="zasdk-timer-stopcricle"></div></div>
|
|
157
|
+
<span class="zasdk-timer-display" id="zasdkTimerDisplay">05:00</span>
|
|
158
|
+
<div class="zasdk-tooltip-top">Stop Recording</div>
|
|
159
|
+
</div>`; // no i18n
|
|
160
|
+
|
|
161
|
+
exports.feedbackUIHtml = feedbackUIHtml;
|
|
162
|
+
exports.timerHtml = timerHtml;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { FeedbackType } from '../types.js';
|
|
2
|
+
export declare function sendFeedback(feedbackType?: FeedbackType, feedbackMessage?: string, attachments?: FileList | File[] | null, logsFiles?: FileList | File[] | null, includeDyninfo?: boolean, includeLog?: boolean): Promise<void>;
|
|
3
|
+
export declare function feedbackOpen(type?: FeedbackType, message?: string, includeLog?: boolean, includeDyninfo?: boolean, attachments?: FileList | File[] | null, logFiles?: FileList | File[] | null, isAnonymous?: boolean): void;
|
|
4
|
+
export declare function feedbackClose(): void;
|
|
5
|
+
/** What feedbackOpen() may pre-set on the form. */
|
|
6
|
+
export interface FeedbackOpenOptions {
|
|
7
|
+
type?: FeedbackType;
|
|
8
|
+
message?: string;
|
|
9
|
+
includeLog?: boolean;
|
|
10
|
+
includeDyninfo?: boolean;
|
|
11
|
+
isAnonymous?: boolean;
|
|
12
|
+
attachments?: FileList | File[] | null;
|
|
13
|
+
logFiles?: FileList | File[] | null;
|
|
14
|
+
}
|
|
15
|
+
export interface FeedbackUI {
|
|
16
|
+
feedbackUIHtml: string;
|
|
17
|
+
timerHtml: string;
|
|
18
|
+
typeObj: Record<string, FeedbackType>;
|
|
19
|
+
uploadFileAry: File[];
|
|
20
|
+
fileInput: HTMLInputElement | null;
|
|
21
|
+
selectedFiles: DataTransfer | null;
|
|
22
|
+
isScaled: boolean;
|
|
23
|
+
isHidden: boolean;
|
|
24
|
+
timerDisplay: HTMLElement | null;
|
|
25
|
+
recordButton: HTMLElement | null;
|
|
26
|
+
TOTAL_TIME: number;
|
|
27
|
+
remainingTime: number;
|
|
28
|
+
isRecording: boolean;
|
|
29
|
+
timerInterval: ReturnType<typeof setInterval> | null;
|
|
30
|
+
uploadTotalSize: number;
|
|
31
|
+
MaxFileSize: number;
|
|
32
|
+
/** What the last feedbackOpen() asked for; the form reads it as it is built. */
|
|
33
|
+
_opts: FeedbackOpenOptions;
|
|
34
|
+
init(opts?: FeedbackOpenOptions): void;
|
|
35
|
+
updateLeftCount(): void;
|
|
36
|
+
handleStatusmsg(isSuccess?: boolean, stsmsg?: string): void;
|
|
37
|
+
handleErrorQuartzEvent(event: Event): void;
|
|
38
|
+
bindQuartzEvent(event: Event): void;
|
|
39
|
+
close(): void;
|
|
40
|
+
toggleWindowAnimation(): void;
|
|
41
|
+
fileAttachment(): void;
|
|
42
|
+
elementCreator<K extends keyof HTMLElementTagNameMap>(elType: K): HTMLElementTagNameMap[K];
|
|
43
|
+
fileLimitExceeded(limitReached: boolean, filesLengthReached?: boolean): void;
|
|
44
|
+
removeFileFromList(elem: HTMLElement): void;
|
|
45
|
+
formatFileSize(bytes: number): string;
|
|
46
|
+
toggleRecording(): void;
|
|
47
|
+
startRecording(): void;
|
|
48
|
+
stopRecording(): void;
|
|
49
|
+
submitRecording(): void;
|
|
50
|
+
updateTimer(): void;
|
|
51
|
+
updateDisplay(): void;
|
|
52
|
+
validateFeedbackField(): void;
|
|
53
|
+
getVisibleErrorCount(elements: NodeListOf<Element> | Element[]): number;
|
|
54
|
+
}
|
|
55
|
+
export declare const feedback: FeedbackUI;
|