@robotical/webapp-types 3.16.12 → 3.16.15
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/src/application/RAFTs/RAFT.js +21 -10
- package/dist-types/src/utils/analytics-device-info.d.ts +15 -0
- package/dist-types/src/utils/analytics-device-info.js +110 -0
- package/dist-types/src/wrapper-app/utils/device-info.d.ts +1 -1
- package/dist-types/src/wrapper-app/utils/device-info.js +7 -5
- package/package.json +1 -1
|
@@ -41,6 +41,7 @@ import { RaftConnEvent, RaftPublishEvent, } from "@robotical/raftjs";
|
|
|
41
41
|
import Logger from "../../services/logger/Logger";
|
|
42
42
|
import randomHashGenerator from "../../utils/helpers/randomHashGenerator";
|
|
43
43
|
import { addRobotNameToSerialNumber, isSerialNumberRegistered } from "../../utils/warranty-service/warranty-service-utils";
|
|
44
|
+
import { buildAnalyticsDeviceInfo } from "../../utils/analytics-device-info";
|
|
44
45
|
var SHOW_LOGS = true;
|
|
45
46
|
var TAG = "RAFT";
|
|
46
47
|
var RAFT = /** @class */ (function () {
|
|
@@ -340,10 +341,11 @@ var RAFT = /** @class */ (function () {
|
|
|
340
341
|
return [3 /*break*/, 6];
|
|
341
342
|
case 1:
|
|
342
343
|
new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () {
|
|
343
|
-
var robotId, raftType, raftName, raftSerialNumber, deviceInfo, sessionId, deviceId;
|
|
344
|
+
var robotId, raftType, raftName, raftSerialNumber, deviceInfo, _a, sessionId, deviceId, analyticsDeviceInfo, analyticsFacade;
|
|
344
345
|
var _this = this;
|
|
345
|
-
|
|
346
|
-
|
|
346
|
+
var _b;
|
|
347
|
+
return __generator(this, function (_c) {
|
|
348
|
+
switch (_c.label) {
|
|
347
349
|
case 0:
|
|
348
350
|
robotId = this.id;
|
|
349
351
|
raftType = this.type;
|
|
@@ -357,15 +359,24 @@ var RAFT = /** @class */ (function () {
|
|
|
357
359
|
});
|
|
358
360
|
window.applicationManager.AnalyticsFacade.setRaftType(raftType);
|
|
359
361
|
window.applicationManager.AnalyticsFacade.setRobotId(robotId);
|
|
360
|
-
if (!!window.applicationManager.analyticsSessionId) return [3 /*break*/,
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
362
|
+
if (!!window.applicationManager.analyticsSessionId) return [3 /*break*/, 4];
|
|
363
|
+
if (!((_b = window.applicationManager.deviceInfo) !== null && _b !== void 0)) return [3 /*break*/, 1];
|
|
364
|
+
_a = _b;
|
|
365
|
+
return [3 /*break*/, 3];
|
|
366
|
+
case 1: return [4 /*yield*/, window.wrapperCommunicator.sendMessageAndWait(AppSentMessage.GET_DEVICE_INFO, {})];
|
|
367
|
+
case 2:
|
|
368
|
+
_a = _c.sent();
|
|
369
|
+
_c.label = 3;
|
|
370
|
+
case 3:
|
|
371
|
+
deviceInfo = _a;
|
|
372
|
+
window.applicationManager.deviceInfo = deviceInfo;
|
|
364
373
|
sessionId = randomHashGenerator();
|
|
365
374
|
deviceId = deviceInfo.deviceId;
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
375
|
+
analyticsDeviceInfo = buildAnalyticsDeviceInfo(deviceInfo);
|
|
376
|
+
analyticsFacade = window.applicationManager.AnalyticsFacade;
|
|
377
|
+
analyticsFacade.startSession(sessionId, deviceId, robotId, raftType, analyticsDeviceInfo);
|
|
378
|
+
_c.label = 4;
|
|
379
|
+
case 4:
|
|
369
380
|
resolve(void 0);
|
|
370
381
|
return [2 /*return*/];
|
|
371
382
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { UserDeviceInfo } from "../types/userDeviceInfo";
|
|
2
|
+
export type AnalyticsAppRuntimeValue = "web-app" | "phone-app" | "unknown";
|
|
3
|
+
export type AnalyticsDeviceFormFactorValue = "desktop" | "tablet" | "phone" | "unknown";
|
|
4
|
+
export type AnalyticsDevicePlatformValue = "web-desktop" | "web-tablet" | "web-phone" | "ipad" | "ios-phone" | "android-tablet" | "android-phone" | "unknown";
|
|
5
|
+
export type AnalyticsDeviceInfoPayload = {
|
|
6
|
+
runtime: AnalyticsAppRuntimeValue;
|
|
7
|
+
platform: AnalyticsDevicePlatformValue;
|
|
8
|
+
formFactor: AnalyticsDeviceFormFactorValue;
|
|
9
|
+
osName: string;
|
|
10
|
+
osVersionMajor?: string;
|
|
11
|
+
browserName?: string;
|
|
12
|
+
browserVersionMajor?: string;
|
|
13
|
+
appVersion?: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function buildAnalyticsDeviceInfo(deviceInfo: Partial<UserDeviceInfo> | undefined, runningInPhoneApp?: boolean): AnalyticsDeviceInfoPayload;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import isPhoneApp from "./phone-app-communication/is-phone-app";
|
|
2
|
+
var UNKNOWN_OS_NAME = "Unknown";
|
|
3
|
+
export function buildAnalyticsDeviceInfo(deviceInfo, runningInPhoneApp) {
|
|
4
|
+
if (runningInPhoneApp === void 0) { runningInPhoneApp = isPhoneApp(); }
|
|
5
|
+
var runtime = runningInPhoneApp ? "phone-app" : "web-app";
|
|
6
|
+
var osName = normalizeOSName(deviceInfo === null || deviceInfo === void 0 ? void 0 : deviceInfo.systemName);
|
|
7
|
+
var isTablet = (deviceInfo === null || deviceInfo === void 0 ? void 0 : deviceInfo.isTablet) === true;
|
|
8
|
+
var platform = getDevicePlatform(runtime, osName, isTablet);
|
|
9
|
+
var formFactor = getFormFactor(platform, isTablet);
|
|
10
|
+
var parsedBrowser = runtime === "web-app" ? parseBrowser(deviceInfo === null || deviceInfo === void 0 ? void 0 : deviceInfo.version) : {};
|
|
11
|
+
return removeUndefinedFields({
|
|
12
|
+
runtime: runtime,
|
|
13
|
+
platform: platform,
|
|
14
|
+
formFactor: formFactor,
|
|
15
|
+
osName: osName,
|
|
16
|
+
osVersionMajor: parseMajorVersion(deviceInfo === null || deviceInfo === void 0 ? void 0 : deviceInfo.systemVersion),
|
|
17
|
+
browserName: parsedBrowser.browserName,
|
|
18
|
+
browserVersionMajor: parsedBrowser.browserVersionMajor,
|
|
19
|
+
appVersion: normalizeOptionalString(deviceInfo === null || deviceInfo === void 0 ? void 0 : deviceInfo.appVersion),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function getDevicePlatform(runtime, osName, isTablet) {
|
|
23
|
+
var isIOS = osName === "iOS" || osName === "iPadOS";
|
|
24
|
+
var isAndroid = osName === "Android";
|
|
25
|
+
if (runtime === "phone-app") {
|
|
26
|
+
if (isIOS && isTablet)
|
|
27
|
+
return "ipad";
|
|
28
|
+
if (isIOS)
|
|
29
|
+
return "ios-phone";
|
|
30
|
+
if (isAndroid && isTablet)
|
|
31
|
+
return "android-tablet";
|
|
32
|
+
if (isAndroid)
|
|
33
|
+
return "android-phone";
|
|
34
|
+
return "unknown";
|
|
35
|
+
}
|
|
36
|
+
if (runtime === "web-app") {
|
|
37
|
+
if (isTablet)
|
|
38
|
+
return "web-tablet";
|
|
39
|
+
if (isIOS || isAndroid)
|
|
40
|
+
return "web-phone";
|
|
41
|
+
if (osName === "Windows" || osName === "MacOS" || osName === "Linux")
|
|
42
|
+
return "web-desktop";
|
|
43
|
+
return "unknown";
|
|
44
|
+
}
|
|
45
|
+
return "unknown";
|
|
46
|
+
}
|
|
47
|
+
function getFormFactor(platform, isTablet) {
|
|
48
|
+
if (platform === "web-desktop")
|
|
49
|
+
return "desktop";
|
|
50
|
+
if (platform === "web-tablet" || platform === "ipad" || platform === "android-tablet")
|
|
51
|
+
return "tablet";
|
|
52
|
+
if (platform === "web-phone" || platform === "ios-phone" || platform === "android-phone")
|
|
53
|
+
return "phone";
|
|
54
|
+
if (isTablet)
|
|
55
|
+
return "tablet";
|
|
56
|
+
return "unknown";
|
|
57
|
+
}
|
|
58
|
+
function normalizeOSName(value) {
|
|
59
|
+
var normalized = normalizeOptionalString(value);
|
|
60
|
+
if (!normalized)
|
|
61
|
+
return UNKNOWN_OS_NAME;
|
|
62
|
+
var lower = normalized.toLowerCase();
|
|
63
|
+
if (lower.includes("ipad"))
|
|
64
|
+
return "iPadOS";
|
|
65
|
+
if (lower.includes("ios") || lower.includes("iphone"))
|
|
66
|
+
return "iOS";
|
|
67
|
+
if (lower.includes("android"))
|
|
68
|
+
return "Android";
|
|
69
|
+
if (lower.includes("windows"))
|
|
70
|
+
return "Windows";
|
|
71
|
+
if (lower.includes("mac"))
|
|
72
|
+
return "MacOS";
|
|
73
|
+
if (lower.includes("linux"))
|
|
74
|
+
return "Linux";
|
|
75
|
+
return normalized;
|
|
76
|
+
}
|
|
77
|
+
function parseMajorVersion(value) {
|
|
78
|
+
var normalized = normalizeOptionalString(value);
|
|
79
|
+
var match = normalized === null || normalized === void 0 ? void 0 : normalized.match(/\d+/);
|
|
80
|
+
return match === null || match === void 0 ? void 0 : match[0];
|
|
81
|
+
}
|
|
82
|
+
function parseBrowser(value) {
|
|
83
|
+
var normalized = normalizeOptionalString(value);
|
|
84
|
+
if (!normalized || normalized.toLowerCase() === "unknown browser") {
|
|
85
|
+
return {};
|
|
86
|
+
}
|
|
87
|
+
var match = normalized.match(/^([a-z]+)[\s/]+(\d+)/i);
|
|
88
|
+
if (!match) {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
browserName: match[1].toLowerCase(),
|
|
93
|
+
browserVersionMajor: match[2],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function normalizeOptionalString(value) {
|
|
97
|
+
if (typeof value !== "string")
|
|
98
|
+
return undefined;
|
|
99
|
+
var trimmed = value.trim();
|
|
100
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
101
|
+
}
|
|
102
|
+
function removeUndefinedFields(value) {
|
|
103
|
+
return Object.entries(value).reduce(function (acc, _a) {
|
|
104
|
+
var key = _a[0], entryValue = _a[1];
|
|
105
|
+
if (entryValue !== undefined) {
|
|
106
|
+
acc[key] = entryValue;
|
|
107
|
+
}
|
|
108
|
+
return acc;
|
|
109
|
+
}, {});
|
|
110
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const getOrGenerateDeviceId: () => string;
|
|
2
|
-
export declare const getOSName: () => "Windows" | "
|
|
2
|
+
export declare const getOSName: () => "Windows" | "Android" | "iOS" | "MacOS" | "Linux" | "Unknown OS";
|
|
3
3
|
export declare const getBrowserVersion: () => string;
|
|
4
4
|
export declare const isTablet: () => boolean;
|
|
@@ -13,16 +13,17 @@ export var getOrGenerateDeviceId = function () {
|
|
|
13
13
|
};
|
|
14
14
|
export var getOSName = function () {
|
|
15
15
|
var userAgent = navigator.userAgent;
|
|
16
|
+
var isIPadOSBrowser = navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1;
|
|
16
17
|
if (userAgent.includes("Windows"))
|
|
17
18
|
return "Windows";
|
|
19
|
+
if (userAgent.includes("Android"))
|
|
20
|
+
return "Android";
|
|
21
|
+
if (/iPad|iPhone|iPod/i.test(userAgent) || userAgent.includes("like Mac") || isIPadOSBrowser)
|
|
22
|
+
return "iOS";
|
|
18
23
|
if (userAgent.includes("Mac"))
|
|
19
24
|
return "MacOS";
|
|
20
25
|
if (userAgent.includes("Linux"))
|
|
21
26
|
return "Linux";
|
|
22
|
-
if (userAgent.includes("Android"))
|
|
23
|
-
return "Android";
|
|
24
|
-
if (userAgent.includes("like Mac"))
|
|
25
|
-
return "iOS";
|
|
26
27
|
return "Unknown OS";
|
|
27
28
|
};
|
|
28
29
|
export var getBrowserVersion = function () {
|
|
@@ -31,5 +32,6 @@ export var getBrowserVersion = function () {
|
|
|
31
32
|
return match[1] ? "".concat(match[1], " ").concat(match[2]) : "Unknown Browser";
|
|
32
33
|
};
|
|
33
34
|
export var isTablet = function () {
|
|
34
|
-
|
|
35
|
+
var isIPadOSBrowser = navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1;
|
|
36
|
+
return isIPadOSBrowser || /iPad|Tablet|Android(?!.*Mobile)/i.test(navigator.userAgent);
|
|
35
37
|
};
|