@robotical/webapp-types 3.20.0 → 3.21.0
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/dist-types/package.json +151 -0
- package/dist-types/src/application/ApplicationManager/ApplicationManager.js +32 -25
- package/dist-types/src/application/RAFTs/Marty/CalibrationManager.js +3 -2
- package/dist-types/src/application/RAFTs/Marty/Marty.js +2 -1
- package/dist-types/src/application/RAFTs/Marty/MartyAddonsManager.js +5 -4
- package/dist-types/src/application/RAFTs/Marty/notifications-manager/RICNotificationsManager.js +6 -5
- package/dist-types/src/application/RAFTs/RaftWifiManager.js +7 -6
- package/dist-types/src/components/modals/LEDLightsOrQRVerificationModal/index.js +4 -1
- package/dist-types/src/i18n.js +4 -1
- package/dist-types/src/services/logger/Logger.js +3 -0
- package/dist-types/src/services/observability/Observability.d.ts +5 -0
- package/dist-types/src/services/observability/Observability.js +190 -0
- package/dist-types/src/services/observability/sanitizeTelemetry.d.ts +7 -0
- package/dist-types/src/services/observability/sanitizeTelemetry.js +136 -0
- package/dist-types/src/utils/feedback/submitFeedback.js +18 -22
- package/dist-types/src/utils/warranty-service/warranty-service-utils.js +9 -8
- package/dist-types/src/wrapper-app/WrapperAppManager.js +21 -20
- package/dist-types/src/wrapper-app/connectors/ConnectorFactory.js +2 -1
- package/dist-types/src/wrapper-app/utils/localStorageUtils.js +3 -3
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
8
8
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
9
|
};
|
|
10
10
|
import { AppSentMessage } from "../../types/communication-between-apps/wrapper-communication";
|
|
11
|
+
import { addLoggerWarningBreadcrumb, captureLoggerError, } from "../observability/Observability";
|
|
11
12
|
var SHOW_LOGS_GLOBAL = true;
|
|
12
13
|
var ONLY_SHOW_VIP_LOGS = false;
|
|
13
14
|
var Logger = /** @class */ (function () {
|
|
@@ -25,6 +26,7 @@ var Logger = /** @class */ (function () {
|
|
|
25
26
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
26
27
|
messages[_i - 2] = arguments[_i];
|
|
27
28
|
}
|
|
29
|
+
captureLoggerError(tag, messages);
|
|
28
30
|
SHOW_LOGS_GLOBAL && !ONLY_SHOW_VIP_LOGS && SHOW_LOGS && console.error.apply(console, __spreadArray(['\x1b[31m%s\x1b[0m', "ERROR: ".concat(tag)], messages, false)); // Red color for error logs
|
|
29
31
|
};
|
|
30
32
|
Logger.debug = function (SHOW_LOGS, tag) {
|
|
@@ -39,6 +41,7 @@ var Logger = /** @class */ (function () {
|
|
|
39
41
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
40
42
|
messages[_i - 2] = arguments[_i];
|
|
41
43
|
}
|
|
44
|
+
addLoggerWarningBreadcrumb(tag, messages);
|
|
42
45
|
SHOW_LOGS_GLOBAL && !ONLY_SHOW_VIP_LOGS && SHOW_LOGS && console.warn.apply(console, __spreadArray(['\x1b[33m%s\x1b[0m', "WARN: ".concat(tag)], messages, false)); // Yellow color for warning logs
|
|
43
46
|
};
|
|
44
47
|
Logger.phoneAppLog = function (SHOW_LOGS, tag) {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type AppRuntime = "web-app" | "phone-webview";
|
|
2
|
+
export declare function initializeObservability(): boolean;
|
|
3
|
+
export declare function isObservabilityTransportUrl(url: string): boolean;
|
|
4
|
+
export declare function captureLoggerError(tag: string, messages: unknown[]): void;
|
|
5
|
+
export declare function addLoggerWarningBreadcrumb(tag: string, messages: unknown[]): void;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import * as Sentry from "@sentry/react";
|
|
13
|
+
import packageInfo from "../../../package.json";
|
|
14
|
+
import isPhoneApp from "../../utils/phone-app-communication/is-phone-app";
|
|
15
|
+
import { getSafeErrorType, redactTelemetryText, sanitizeTelemetryValue, } from "./sanitizeTelemetry";
|
|
16
|
+
var appVersion = packageInfo.version;
|
|
17
|
+
var getRuntime = function () {
|
|
18
|
+
try {
|
|
19
|
+
return isPhoneApp() ? "phone-webview" : "web-app";
|
|
20
|
+
}
|
|
21
|
+
catch (_a) {
|
|
22
|
+
return "web-app";
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
var getSafeAppSnapshot = function () {
|
|
26
|
+
var applicationManager = window.applicationManager;
|
|
27
|
+
var connectedRafts = (applicationManager === null || applicationManager === void 0 ? void 0 : applicationManager.connectedRafts)
|
|
28
|
+
? Object.values(applicationManager.connectedRafts)
|
|
29
|
+
: [];
|
|
30
|
+
var connectedRaftTypes = Array.from(new Set(connectedRafts
|
|
31
|
+
.map(function (raft) { return raft === null || raft === void 0 ? void 0 : raft.type; })
|
|
32
|
+
.filter(function (type) { return type !== undefined; })
|
|
33
|
+
.map(function (type) { return String(type); })));
|
|
34
|
+
var deviceInfo = applicationManager === null || applicationManager === void 0 ? void 0 : applicationManager.deviceInfo;
|
|
35
|
+
return sanitizeTelemetryValue({
|
|
36
|
+
appVersion: appVersion,
|
|
37
|
+
runtime: getRuntime(),
|
|
38
|
+
route: window.location.pathname,
|
|
39
|
+
online: navigator.onLine,
|
|
40
|
+
language: navigator.language,
|
|
41
|
+
viewport: {
|
|
42
|
+
width: window.innerWidth,
|
|
43
|
+
height: window.innerHeight,
|
|
44
|
+
devicePixelRatio: window.devicePixelRatio || 1,
|
|
45
|
+
},
|
|
46
|
+
connectedRaftCount: connectedRafts.length,
|
|
47
|
+
connectedRaftTypes: connectedRaftTypes,
|
|
48
|
+
wrapper: deviceInfo
|
|
49
|
+
? {
|
|
50
|
+
appVersion: deviceInfo.appVersion,
|
|
51
|
+
buildNumber: deviceInfo.buildNumber,
|
|
52
|
+
systemName: deviceInfo.systemName,
|
|
53
|
+
systemVersion: deviceInfo.systemVersion,
|
|
54
|
+
}
|
|
55
|
+
: undefined,
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
var sanitizeEvent = function (event) {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
var eventWithPrivateData = event;
|
|
61
|
+
delete eventWithPrivateData.user;
|
|
62
|
+
delete eventWithPrivateData.request;
|
|
63
|
+
(_b = (_a = eventWithPrivateData.exception) === null || _a === void 0 ? void 0 : _a.values) === null || _b === void 0 ? void 0 : _b.forEach(function (exception) {
|
|
64
|
+
if (exception.type) {
|
|
65
|
+
exception.type = getSafeErrorType(exception.type);
|
|
66
|
+
}
|
|
67
|
+
if (exception.value) {
|
|
68
|
+
exception.value = "[REDACTED]";
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
return sanitizeTelemetryValue(eventWithPrivateData);
|
|
72
|
+
};
|
|
73
|
+
export function initializeObservability() {
|
|
74
|
+
var _a;
|
|
75
|
+
var dsn = (_a = process.env.REACT_APP_SENTRY_DSN) === null || _a === void 0 ? void 0 : _a.trim();
|
|
76
|
+
if (!dsn || Sentry.isInitialized()) {
|
|
77
|
+
return Sentry.isInitialized();
|
|
78
|
+
}
|
|
79
|
+
Sentry.init({
|
|
80
|
+
dsn: dsn,
|
|
81
|
+
environment: process.env.REACT_APP_SENTRY_ENVIRONMENT || process.env.NODE_ENV,
|
|
82
|
+
release: process.env.REACT_APP_SENTRY_RELEASE || "marty-web-app@".concat(appVersion),
|
|
83
|
+
sendDefaultPii: false,
|
|
84
|
+
attachStacktrace: true,
|
|
85
|
+
maxBreadcrumbs: 75,
|
|
86
|
+
integrations: [
|
|
87
|
+
Sentry.breadcrumbsIntegration({
|
|
88
|
+
console: false,
|
|
89
|
+
dom: false,
|
|
90
|
+
fetch: false,
|
|
91
|
+
history: false,
|
|
92
|
+
sentry: false,
|
|
93
|
+
xhr: false,
|
|
94
|
+
}),
|
|
95
|
+
],
|
|
96
|
+
beforeBreadcrumb: function (breadcrumb) {
|
|
97
|
+
return sanitizeTelemetryValue(breadcrumb);
|
|
98
|
+
},
|
|
99
|
+
beforeSend: function (event) {
|
|
100
|
+
event.tags = __assign(__assign({}, event.tags), { app_runtime: getRuntime(), app_version: appVersion });
|
|
101
|
+
event.contexts = __assign(__assign({}, event.contexts), { app_snapshot: getSafeAppSnapshot() });
|
|
102
|
+
return sanitizeEvent(event);
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
Sentry.setTags({
|
|
106
|
+
app_runtime: getRuntime(),
|
|
107
|
+
app_version: appVersion,
|
|
108
|
+
});
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
export function isObservabilityTransportUrl(url) {
|
|
112
|
+
var _a;
|
|
113
|
+
var dsn = (_a = process.env.REACT_APP_SENTRY_DSN) === null || _a === void 0 ? void 0 : _a.trim();
|
|
114
|
+
if (!dsn)
|
|
115
|
+
return false;
|
|
116
|
+
try {
|
|
117
|
+
return new URL(url, window.location.href).hostname === new URL(dsn).hostname;
|
|
118
|
+
}
|
|
119
|
+
catch (_b) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
var serializeLogArguments = function (messages) {
|
|
124
|
+
return messages.map(function (message) { return sanitizeTelemetryValue(message); });
|
|
125
|
+
};
|
|
126
|
+
var getLogMessage = function (messages) {
|
|
127
|
+
var message = messages
|
|
128
|
+
.map(function (item) {
|
|
129
|
+
if (item instanceof Error)
|
|
130
|
+
return getSafeErrorType(item);
|
|
131
|
+
if (typeof item === "string")
|
|
132
|
+
return item;
|
|
133
|
+
try {
|
|
134
|
+
return JSON.stringify(sanitizeTelemetryValue(item));
|
|
135
|
+
}
|
|
136
|
+
catch (_a) {
|
|
137
|
+
return String(item);
|
|
138
|
+
}
|
|
139
|
+
})
|
|
140
|
+
.join(" ")
|
|
141
|
+
.trim();
|
|
142
|
+
return redactTelemetryText(message || "Unknown error");
|
|
143
|
+
};
|
|
144
|
+
export function captureLoggerError(tag, messages) {
|
|
145
|
+
if (!Sentry.isInitialized())
|
|
146
|
+
return;
|
|
147
|
+
try {
|
|
148
|
+
var error_1 = messages.find(function (message) { return message instanceof Error; });
|
|
149
|
+
var safeTag_1 = redactTelemetryText(tag).slice(0, 100);
|
|
150
|
+
var safeMessage_1 = getLogMessage(messages);
|
|
151
|
+
Sentry.withScope(function (scope) {
|
|
152
|
+
scope.setLevel("error");
|
|
153
|
+
scope.setTag("logger_tag", safeTag_1);
|
|
154
|
+
scope.setContext("logger", {
|
|
155
|
+
message: safeMessage_1,
|
|
156
|
+
arguments: serializeLogArguments(messages),
|
|
157
|
+
});
|
|
158
|
+
scope.setContext("app_snapshot", getSafeAppSnapshot());
|
|
159
|
+
if (error_1) {
|
|
160
|
+
Sentry.captureException(error_1);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
Sentry.captureMessage("".concat(safeTag_1, ": ").concat(safeMessage_1), "error");
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
catch (_a) {
|
|
168
|
+
// Monitoring must never interrupt the application path it observes.
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export function addLoggerWarningBreadcrumb(tag, messages) {
|
|
172
|
+
if (!Sentry.isInitialized())
|
|
173
|
+
return;
|
|
174
|
+
try {
|
|
175
|
+
var safeTag = redactTelemetryText(tag).slice(0, 100);
|
|
176
|
+
Sentry.addBreadcrumb({
|
|
177
|
+
category: "app.warning",
|
|
178
|
+
level: "warning",
|
|
179
|
+
message: "".concat(safeTag, ": ").concat(getLogMessage(messages)),
|
|
180
|
+
data: {
|
|
181
|
+
loggerTag: safeTag,
|
|
182
|
+
route: window.location.pathname,
|
|
183
|
+
runtime: getRuntime(),
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
catch (_a) {
|
|
188
|
+
// Monitoring must never interrupt the application path it observes.
|
|
189
|
+
}
|
|
190
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const isSensitiveTelemetryKey: (key: string) => boolean;
|
|
2
|
+
export declare const getSafeErrorType: (value: unknown) => string;
|
|
3
|
+
export declare const getSafeErrorMetadata: (error: unknown) => {
|
|
4
|
+
errorType: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function redactTelemetryText(value: string): string;
|
|
7
|
+
export declare function sanitizeTelemetryValue(value: unknown, depth?: number, seen?: WeakSet<object>): unknown;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
var REDACTED = "[REDACTED]";
|
|
2
|
+
var MAX_DEPTH = 12;
|
|
3
|
+
var MAX_ARRAY_ITEMS = 100;
|
|
4
|
+
var MAX_OBJECT_KEYS = 100;
|
|
5
|
+
var MAX_STRING_LENGTH = 4000;
|
|
6
|
+
var SAFE_ERROR_TYPES = new Set([
|
|
7
|
+
"AbortError",
|
|
8
|
+
"AggregateError",
|
|
9
|
+
"DOMException",
|
|
10
|
+
"Error",
|
|
11
|
+
"EvalError",
|
|
12
|
+
"NetworkError",
|
|
13
|
+
"NotAllowedError",
|
|
14
|
+
"RangeError",
|
|
15
|
+
"ReferenceError",
|
|
16
|
+
"SecurityError",
|
|
17
|
+
"SyntaxError",
|
|
18
|
+
"TimeoutError",
|
|
19
|
+
"TypeError",
|
|
20
|
+
"URIError",
|
|
21
|
+
]);
|
|
22
|
+
var SENSITIVE_KEYS = new Set([
|
|
23
|
+
"authorization",
|
|
24
|
+
"authtoken",
|
|
25
|
+
"base64",
|
|
26
|
+
"bleaddress",
|
|
27
|
+
"bssid",
|
|
28
|
+
"cookie",
|
|
29
|
+
"cookies",
|
|
30
|
+
"credential",
|
|
31
|
+
"credentials",
|
|
32
|
+
"connectionlocator",
|
|
33
|
+
"dataurl",
|
|
34
|
+
"deviceid",
|
|
35
|
+
"devicename",
|
|
36
|
+
"email",
|
|
37
|
+
"filecontents",
|
|
38
|
+
"friendlyname",
|
|
39
|
+
"ipaddress",
|
|
40
|
+
"locator",
|
|
41
|
+
"macaddress",
|
|
42
|
+
"password",
|
|
43
|
+
"passphrase",
|
|
44
|
+
"raftid",
|
|
45
|
+
"robotid",
|
|
46
|
+
"secret",
|
|
47
|
+
"serial",
|
|
48
|
+
"serialno",
|
|
49
|
+
"serialnumber",
|
|
50
|
+
"ssid",
|
|
51
|
+
"streamcontents",
|
|
52
|
+
"token",
|
|
53
|
+
"username",
|
|
54
|
+
"wifipassword",
|
|
55
|
+
"wifimac",
|
|
56
|
+
"wifiusername",
|
|
57
|
+
]);
|
|
58
|
+
var normalizeKey = function (key) {
|
|
59
|
+
return key.replace(/[^a-z0-9]/gi, "").toLowerCase();
|
|
60
|
+
};
|
|
61
|
+
export var isSensitiveTelemetryKey = function (key) {
|
|
62
|
+
return SENSITIVE_KEYS.has(normalizeKey(key));
|
|
63
|
+
};
|
|
64
|
+
export var getSafeErrorType = function (value) {
|
|
65
|
+
var errorType = value instanceof Error ? value.name : value;
|
|
66
|
+
return typeof errorType === "string" && SAFE_ERROR_TYPES.has(errorType)
|
|
67
|
+
? errorType
|
|
68
|
+
: "Error";
|
|
69
|
+
};
|
|
70
|
+
export var getSafeErrorMetadata = function (error) { return ({
|
|
71
|
+
errorType: error instanceof Error ? getSafeErrorType(error) : typeof error,
|
|
72
|
+
}); };
|
|
73
|
+
export function redactTelemetryText(value) {
|
|
74
|
+
var redacted = value
|
|
75
|
+
.replace(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi, REDACTED)
|
|
76
|
+
.replace(/\b(password|passphrase|token|authorization|cookie|secret|ssid|serial(?:\s*(?:number|no))?|device\s*id|device\s*name|robot\s*id|robot\s*name|raft(?:\s+with)?\s*id|mac\s*address|ble\s*address)\s*(?::|=|\s)\s*[^\s,;]+/gi, function (_match, label) { return "".concat(label, ": ").concat(REDACTED); })
|
|
77
|
+
.replace(/\bWi-?Fi\s+network\s+[^\s,;]+/gi, "Wi-Fi network ".concat(REDACTED))
|
|
78
|
+
.replace(/https:\/\/hooks\.slack\.com\/services\/[^\s"']+/gi, REDACTED)
|
|
79
|
+
.replace(/([?&][^=&#\s]+)=([^&#\s]*)/g, "$1=".concat(REDACTED))
|
|
80
|
+
.replace(/\b[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\b/gi, REDACTED)
|
|
81
|
+
.replace(/\b(?:[0-9a-f]{2}:){5}[0-9a-f]{2}\b/gi, REDACTED);
|
|
82
|
+
return redacted.length > MAX_STRING_LENGTH
|
|
83
|
+
? "".concat(redacted.slice(0, MAX_STRING_LENGTH), "\u2026")
|
|
84
|
+
: redacted;
|
|
85
|
+
}
|
|
86
|
+
export function sanitizeTelemetryValue(value, depth, seen) {
|
|
87
|
+
if (depth === void 0) { depth = 0; }
|
|
88
|
+
if (seen === void 0) { seen = new WeakSet(); }
|
|
89
|
+
if (typeof value === "string") {
|
|
90
|
+
return redactTelemetryText(value);
|
|
91
|
+
}
|
|
92
|
+
if (value === null ||
|
|
93
|
+
value === undefined ||
|
|
94
|
+
typeof value === "boolean" ||
|
|
95
|
+
typeof value === "number") {
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
if (typeof value === "bigint" || typeof value === "symbol") {
|
|
99
|
+
return String(value);
|
|
100
|
+
}
|
|
101
|
+
if (typeof value === "function") {
|
|
102
|
+
return "[Function]";
|
|
103
|
+
}
|
|
104
|
+
if (depth >= MAX_DEPTH) {
|
|
105
|
+
return "[Truncated]";
|
|
106
|
+
}
|
|
107
|
+
if (value instanceof Error) {
|
|
108
|
+
return {
|
|
109
|
+
name: getSafeErrorType(value),
|
|
110
|
+
message: REDACTED,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (value instanceof Date) {
|
|
114
|
+
return value.toISOString();
|
|
115
|
+
}
|
|
116
|
+
if (typeof value !== "object") {
|
|
117
|
+
return redactTelemetryText(String(value));
|
|
118
|
+
}
|
|
119
|
+
if (seen.has(value)) {
|
|
120
|
+
return "[Circular]";
|
|
121
|
+
}
|
|
122
|
+
seen.add(value);
|
|
123
|
+
if (Array.isArray(value)) {
|
|
124
|
+
return value
|
|
125
|
+
.slice(0, MAX_ARRAY_ITEMS)
|
|
126
|
+
.map(function (item) { return sanitizeTelemetryValue(item, depth + 1, seen); });
|
|
127
|
+
}
|
|
128
|
+
var sanitized = {};
|
|
129
|
+
for (var _i = 0, _a = Object.entries(value).slice(0, MAX_OBJECT_KEYS); _i < _a.length; _i++) {
|
|
130
|
+
var _b = _a[_i], key = _b[0], item = _b[1];
|
|
131
|
+
sanitized[key] = isSensitiveTelemetryKey(key)
|
|
132
|
+
? REDACTED
|
|
133
|
+
: sanitizeTelemetryValue(item, depth + 1, seen);
|
|
134
|
+
}
|
|
135
|
+
return sanitized;
|
|
136
|
+
}
|
|
@@ -46,6 +46,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
import Logger from "../../services/logger/Logger";
|
|
49
|
+
import { getSafeErrorMetadata } from "../../services/observability/sanitizeTelemetry";
|
|
49
50
|
import { FEEDBACK_REQUIRES_ROBOT_CONNECTION_MESSAGE, getActiveFeedbackRobotConnection, isRobotConnectionRequiredForFeedbackSource, } from "./feedbackConnectionEligibility";
|
|
50
51
|
import randomHashGenerator from "../helpers/randomHashGenerator";
|
|
51
52
|
import isPhoneApp from "../phone-app-communication/is-phone-app";
|
|
@@ -241,7 +242,7 @@ export function createFeedbackRecord(input) {
|
|
|
241
242
|
export function submitFeedback(input) {
|
|
242
243
|
var _a, _b;
|
|
243
244
|
return __awaiter(this, void 0, void 0, function () {
|
|
244
|
-
var requiresRobotConnection, robotConnection, record, feedbackId, firebaseUpdates, _i, _c, screenshot, firebaseResponse,
|
|
245
|
+
var requiresRobotConnection, robotConnection, record, feedbackId, firebaseUpdates, _i, _c, screenshot, firebaseResponse, slackDelivered, slackResponse, error_1;
|
|
245
246
|
var _d;
|
|
246
247
|
return __generator(this, function (_e) {
|
|
247
248
|
switch (_e.label) {
|
|
@@ -273,17 +274,14 @@ export function submitFeedback(input) {
|
|
|
273
274
|
})];
|
|
274
275
|
case 1:
|
|
275
276
|
firebaseResponse = _e.sent();
|
|
276
|
-
if (
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
Logger.error(SHOW_LOGS, TAG, "Failed to submit feedback to Firebase: ".concat(firebaseResponse.status, " ").concat(errorText));
|
|
281
|
-
throw new Error("Failed to submit feedback");
|
|
282
|
-
case 3:
|
|
277
|
+
if (!firebaseResponse.ok) {
|
|
278
|
+
Logger.error(SHOW_LOGS, TAG, "Failed to submit feedback to Firebase", { status: firebaseResponse.status });
|
|
279
|
+
throw new Error("Failed to submit feedback");
|
|
280
|
+
}
|
|
283
281
|
slackDelivered = true;
|
|
284
|
-
_e.label =
|
|
285
|
-
case
|
|
286
|
-
_e.trys.push([
|
|
282
|
+
_e.label = 2;
|
|
283
|
+
case 2:
|
|
284
|
+
_e.trys.push([2, 4, , 5]);
|
|
287
285
|
return [4 /*yield*/, fetch(WEB_APP_FEEDBACK_SLACK_WEBHOOK_URL, {
|
|
288
286
|
method: "POST",
|
|
289
287
|
headers: {
|
|
@@ -291,20 +289,18 @@ export function submitFeedback(input) {
|
|
|
291
289
|
},
|
|
292
290
|
body: JSON.stringify({ text: record.text }),
|
|
293
291
|
})];
|
|
294
|
-
case
|
|
292
|
+
case 3:
|
|
295
293
|
slackResponse = _e.sent();
|
|
296
|
-
if (
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
case 7: return [3 /*break*/, 9];
|
|
302
|
-
case 8:
|
|
294
|
+
if (!slackResponse.ok) {
|
|
295
|
+
throw new Error("Failed Slack response with status ".concat(slackResponse.status));
|
|
296
|
+
}
|
|
297
|
+
return [3 /*break*/, 5];
|
|
298
|
+
case 4:
|
|
303
299
|
error_1 = _e.sent();
|
|
304
300
|
slackDelivered = false;
|
|
305
|
-
Logger.error(SHOW_LOGS, TAG, "Failed to submit feedback to Slack", error_1);
|
|
306
|
-
return [3 /*break*/,
|
|
307
|
-
case
|
|
301
|
+
Logger.error(SHOW_LOGS, TAG, "Failed to submit feedback to Slack", getSafeErrorMetadata(error_1));
|
|
302
|
+
return [3 /*break*/, 5];
|
|
303
|
+
case 5: return [2 /*return*/, {
|
|
308
304
|
record: record,
|
|
309
305
|
slackDelivered: slackDelivered,
|
|
310
306
|
}];
|
|
@@ -35,6 +35,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
37
|
import Logger from "../../services/logger/Logger";
|
|
38
|
+
import { getSafeErrorMetadata } from "../../services/observability/sanitizeTelemetry";
|
|
38
39
|
import { getOnboardingCookie, isOnboardingCookieExpired } from "./cookies";
|
|
39
40
|
import WarranyFacade from "@robotical/appv2-warranty-service-lib";
|
|
40
41
|
var SHOW_LOGS = true;
|
|
@@ -62,7 +63,7 @@ export function shouldShowOnboardingModal(serialNo) {
|
|
|
62
63
|
case 3: return [3 /*break*/, 5];
|
|
63
64
|
case 4:
|
|
64
65
|
error_1 = _a.sent();
|
|
65
|
-
Logger.error(SHOW_LOGS, TAG, "Error checking if should
|
|
66
|
+
Logger.error(SHOW_LOGS, TAG, "Error checking if onboarding should be shown", getSafeErrorMetadata(error_1));
|
|
66
67
|
// Don't show the modal if there was an error (probably no internet connection)
|
|
67
68
|
return [2 /*return*/, false];
|
|
68
69
|
case 5: return [2 /*return*/, shouldShowModal];
|
|
@@ -108,7 +109,7 @@ export function registerUser(email, establishment, serialNumbers) {
|
|
|
108
109
|
return [2 /*return*/, WarranyFacade.registerUser(email, establishment, serialNumbers)];
|
|
109
110
|
}
|
|
110
111
|
catch (error) {
|
|
111
|
-
Logger.error(SHOW_LOGS, TAG, "Error registering user
|
|
112
|
+
Logger.error(SHOW_LOGS, TAG, "Error registering user", getSafeErrorMetadata(error));
|
|
112
113
|
return [2 /*return*/, false];
|
|
113
114
|
}
|
|
114
115
|
return [2 /*return*/];
|
|
@@ -129,7 +130,7 @@ export function isUserRegistered(email) {
|
|
|
129
130
|
case 2: return [2 /*return*/, !!(_a.sent())];
|
|
130
131
|
case 3:
|
|
131
132
|
error_2 = _a.sent();
|
|
132
|
-
Logger.error(SHOW_LOGS, TAG, "Error checking if user is registered
|
|
133
|
+
Logger.error(SHOW_LOGS, TAG, "Error checking if user is registered", getSafeErrorMetadata(error_2));
|
|
133
134
|
return [2 /*return*/, false];
|
|
134
135
|
case 4: return [2 /*return*/];
|
|
135
136
|
}
|
|
@@ -152,7 +153,7 @@ export function getUserGivenEmail(email) {
|
|
|
152
153
|
return [2 /*return*/, user];
|
|
153
154
|
case 3:
|
|
154
155
|
error_3 = _a.sent();
|
|
155
|
-
Logger.error(SHOW_LOGS, TAG, "Error getting user
|
|
156
|
+
Logger.error(SHOW_LOGS, TAG, "Error getting user", getSafeErrorMetadata(error_3));
|
|
156
157
|
return [2 /*return*/, null];
|
|
157
158
|
case 4: return [2 /*return*/];
|
|
158
159
|
}
|
|
@@ -166,7 +167,7 @@ export var isSerialNumberRegistered = function (serialNo) { return __awaiter(voi
|
|
|
166
167
|
return [2 /*return*/, WarranyFacade.isSerialNumberRegistered(serialNo)];
|
|
167
168
|
}
|
|
168
169
|
catch (error) {
|
|
169
|
-
Logger.error(SHOW_LOGS, TAG, "Error checking if serial number is registered
|
|
170
|
+
Logger.error(SHOW_LOGS, TAG, "Error checking if serial number is registered", getSafeErrorMetadata(error));
|
|
170
171
|
return [2 /*return*/, false];
|
|
171
172
|
}
|
|
172
173
|
return [2 /*return*/];
|
|
@@ -190,7 +191,7 @@ export var createTicket = function (serialNo, title, description, robotName, rob
|
|
|
190
191
|
case 4: return [2 /*return*/, false];
|
|
191
192
|
case 5:
|
|
192
193
|
error_4 = _a.sent();
|
|
193
|
-
Logger.error(SHOW_LOGS, TAG, "Error creating ticket
|
|
194
|
+
Logger.error(SHOW_LOGS, TAG, "Error creating ticket", getSafeErrorMetadata(error_4));
|
|
194
195
|
return [2 /*return*/, false];
|
|
195
196
|
case 6: return [2 /*return*/];
|
|
196
197
|
}
|
|
@@ -211,7 +212,7 @@ export var getEmailGivenSerialNumber = function (serialNo) { return __awaiter(vo
|
|
|
211
212
|
return [2 /*return*/, serialNumber === null || serialNumber === void 0 ? void 0 : serialNumber.email];
|
|
212
213
|
case 3:
|
|
213
214
|
error_5 = _a.sent();
|
|
214
|
-
Logger.error(SHOW_LOGS, TAG, "Error getting email
|
|
215
|
+
Logger.error(SHOW_LOGS, TAG, "Error getting email for serial number", getSafeErrorMetadata(error_5));
|
|
215
216
|
return [2 /*return*/, undefined];
|
|
216
217
|
case 4: return [2 /*return*/];
|
|
217
218
|
}
|
|
@@ -224,7 +225,7 @@ export var addRobotNameToSerialNumber = function (serialNo, name) { return __awa
|
|
|
224
225
|
return [2 /*return*/, WarranyFacade.addRobotNameToSerialNumber(serialNo, name)];
|
|
225
226
|
}
|
|
226
227
|
catch (error) {
|
|
227
|
-
Logger.error(SHOW_LOGS, TAG, "Error adding robot name to serial number
|
|
228
|
+
Logger.error(SHOW_LOGS, TAG, "Error adding robot name to serial number", getSafeErrorMetadata(error));
|
|
228
229
|
return [2 /*return*/, false];
|
|
229
230
|
}
|
|
230
231
|
return [2 /*return*/];
|