@nordicsemiconductor/pc-nrfconnect-shared 149.0.0 → 151.0.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.
Files changed (64) hide show
  1. package/Changelog.md +45 -1
  2. package/ipc/infrastructure/mainToRenderer.ts +4 -0
  3. package/main/index.ts +4 -1
  4. package/nrfutil/sandbox.ts +10 -6
  5. package/package.json +2 -2
  6. package/src/App/App.test.tsx +11 -2
  7. package/src/App/App.tsx +3 -3
  8. package/src/Device/DeviceSelector/DeviceSelector.test.tsx +13 -0
  9. package/src/Device/DeviceSelector/DeviceSelector.tsx +6 -6
  10. package/src/Device/deviceLister.ts +4 -4
  11. package/src/ErrorBoundary/ErrorBoundary.test.tsx +5 -5
  12. package/src/ErrorBoundary/ErrorBoundary.tsx +14 -13
  13. package/src/Overlay/overlay.scss +6 -7
  14. package/src/Parsers/shellParser.ts +3 -3
  15. package/src/index.ts +2 -2
  16. package/src/telemetry/TelemetryMetadata.ts +9 -0
  17. package/src/telemetry/TelemetrySender.ts +80 -0
  18. package/src/telemetry/TelemetrySenderInMain.ts +80 -0
  19. package/src/telemetry/TelemetrySenderInRenderer.ts +86 -0
  20. package/src/telemetry/flatObject.test.ts +37 -0
  21. package/src/telemetry/flatObject.ts +19 -0
  22. package/src/telemetry/simplifyDevice.ts +20 -0
  23. package/src/telemetry/telemetry.ts +97 -0
  24. package/src/utils/persistentStore.ts +7 -7
  25. package/src/utils/systemReport.ts +1 -1
  26. package/src/utils/useHotKey.ts +2 -2
  27. package/typings/generated/ipc/infrastructure/mainToRenderer.d.ts +1 -0
  28. package/typings/generated/ipc/infrastructure/mainToRenderer.d.ts.map +1 -1
  29. package/typings/generated/main/index.d.ts +1 -1
  30. package/typings/generated/main/index.d.ts.map +1 -1
  31. package/typings/generated/nrfutil/sandbox.d.ts.map +1 -1
  32. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts +1 -1
  33. package/typings/generated/src/ErrorBoundary/ErrorBoundary.d.ts.map +1 -1
  34. package/typings/generated/src/index.d.ts +2 -2
  35. package/typings/generated/src/index.d.ts.map +1 -1
  36. package/typings/generated/src/telemetry/TelemetryMetadata.d.ts +4 -0
  37. package/typings/generated/src/telemetry/TelemetryMetadata.d.ts.map +1 -0
  38. package/typings/generated/src/telemetry/TelemetrySender.d.ts +24 -0
  39. package/typings/generated/src/telemetry/TelemetrySender.d.ts.map +1 -0
  40. package/typings/generated/src/telemetry/TelemetrySenderInMain.d.ts +15 -0
  41. package/typings/generated/src/telemetry/TelemetrySenderInMain.d.ts.map +1 -0
  42. package/typings/generated/src/telemetry/TelemetrySenderInRenderer.d.ts +15 -0
  43. package/typings/generated/src/telemetry/TelemetrySenderInRenderer.d.ts.map +1 -0
  44. package/typings/generated/src/telemetry/flatObject.d.ts +4 -0
  45. package/typings/generated/src/telemetry/flatObject.d.ts.map +1 -0
  46. package/typings/generated/src/telemetry/flatObject.test.d.ts +2 -0
  47. package/typings/generated/src/telemetry/flatObject.test.d.ts.map +1 -0
  48. package/typings/generated/src/{utils/usageDataCommon.d.ts → telemetry/simplifyDevice.d.ts} +2 -14
  49. package/typings/generated/src/telemetry/simplifyDevice.d.ts.map +1 -0
  50. package/typings/generated/src/telemetry/telemetry.d.ts +16 -0
  51. package/typings/generated/src/telemetry/telemetry.d.ts.map +1 -0
  52. package/typings/generated/src/utils/persistentStore.d.ts +4 -4
  53. package/typings/generated/src/utils/persistentStore.d.ts.map +1 -1
  54. package/src/utils/usageData.ts +0 -117
  55. package/src/utils/usageDataCommon.ts +0 -59
  56. package/src/utils/usageDataMain.ts +0 -119
  57. package/src/utils/usageDataRenderer.ts +0 -137
  58. package/typings/generated/src/utils/usageData.d.ts +0 -16
  59. package/typings/generated/src/utils/usageData.d.ts.map +0 -1
  60. package/typings/generated/src/utils/usageDataCommon.d.ts.map +0 -1
  61. package/typings/generated/src/utils/usageDataMain.d.ts +0 -10
  62. package/typings/generated/src/utils/usageDataMain.d.ts.map +0 -1
  63. package/typings/generated/src/utils/usageDataRenderer.d.ts +0 -10
  64. package/typings/generated/src/utils/usageDataRenderer.d.ts.map +0 -1
@@ -1,117 +0,0 @@
1
- /*
2
- * Copyright (c) 2105 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import si from 'systeminformation';
8
-
9
- import { packageJson } from './packageJson';
10
- import {
11
- deleteIsSendingUsageData,
12
- persistIsSendingUsageData,
13
- } from './persistentStore';
14
- import usageDataCommon, { Metadata } from './usageDataCommon';
15
- import usageDataMain from './usageDataMain';
16
- import usageDataRenderer from './usageDataRenderer';
17
-
18
- const getFriendlyAppName = () =>
19
- packageJson().name.replace('pc-nrfconnect-', '');
20
-
21
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
- const flattenObject = (obj?: any, parentKey?: string) => {
23
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
- let result: any = {};
25
-
26
- if (!obj) return result;
27
-
28
- Object.keys(obj).forEach(key => {
29
- const value = obj[key];
30
- const newKey = parentKey ? `${parentKey}.${key}` : key;
31
- if (typeof value === 'object') {
32
- result = { ...result, ...flattenObject(value, newKey) };
33
- } else {
34
- result[newKey] = value;
35
- }
36
- });
37
-
38
- return result;
39
- };
40
-
41
- const enable = () => {
42
- persistIsSendingUsageData(true);
43
- si.osInfo().then(({ platform, arch }) =>
44
- getUsageData().sendUsageData('Report OS info', { platform, arch })
45
- );
46
- getUsageData().sendUsageData('Data Usage Opt-In', undefined);
47
- usageDataCommon.getLogger()?.debug('Usage data has been enabled');
48
- };
49
-
50
- const disable = () => {
51
- getUsageData().sendUsageData('Data Usage Opt-Out', undefined, true);
52
- persistIsSendingUsageData(false);
53
- usageDataCommon.getLogger()?.debug('Usage data has been disabled');
54
- };
55
-
56
- const reset = () => {
57
- getUsageData().sendUsageData('Data Usage Opt-Reset', undefined, true);
58
- deleteIsSendingUsageData();
59
- usageDataCommon.getLogger()?.debug('Usage data setting has been reset');
60
- };
61
-
62
- const isRenderer = process && process.type === 'renderer';
63
-
64
- const getUsageData = () => {
65
- if (isRenderer) {
66
- return usageDataRenderer;
67
- }
68
-
69
- return usageDataMain;
70
- };
71
-
72
- const sendUsageData = async (
73
- action: string,
74
- metadata?: Metadata,
75
- forceSend?: boolean
76
- ) => {
77
- if (
78
- await getUsageData().sendUsageData(
79
- `${getFriendlyAppName()}: ${action}`,
80
- flattenObject(metadata),
81
- forceSend
82
- )
83
- ) {
84
- usageDataCommon
85
- .getLogger()
86
- ?.debug(`Sending usage data ${JSON.stringify(action)}`);
87
- }
88
- };
89
-
90
- const sendPageView = (pageName: string) =>
91
- getUsageData().sendPageView(`${getFriendlyAppName()} - ${pageName}`);
92
-
93
- const sendMetric = (name: string, average: number) =>
94
- getUsageData().sendMetric(name, average);
95
-
96
- const sendTrace = (message: string) => getUsageData().sendTrace(message);
97
-
98
- const sendErrorReport = (error: string | Error) => {
99
- usageDataCommon.getLogger()?.error(error);
100
- return getUsageData().sendErrorReport(
101
- typeof error === 'string' ? new Error(error) : error
102
- );
103
- };
104
-
105
- export default {
106
- setLogger: usageDataCommon.setLogger,
107
- disable,
108
- enable,
109
- isEnabled: usageDataCommon.isEnabled,
110
- reset,
111
- sendErrorReport,
112
- sendUsageData,
113
- sendPageView,
114
- sendMetric,
115
- sendTrace,
116
- enableTelemetry: usageDataCommon.enableTelemetry,
117
- };
@@ -1,59 +0,0 @@
1
- /*
2
- * Copyright (c) 2105 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import winston from 'winston';
8
-
9
- import { type Device } from '../Device/deviceSlice';
10
- import { getIsSendingUsageData } from './persistentStore';
11
-
12
- export const INSTRUMENTATION_KEY = '4b8b1a39-37c7-479e-a684-d4763c7c647c';
13
-
14
- let telemetryEnabled = false;
15
-
16
- const enableTelemetry = () => {
17
- telemetryEnabled = true;
18
- };
19
-
20
- let logger: winston.Logger | undefined;
21
- const setLogger = (log: winston.Logger) => {
22
- logger = log;
23
- };
24
-
25
- const getLogger = () => logger;
26
-
27
- export interface Metadata {
28
- [key: string]: unknown;
29
- }
30
-
31
- export const simplifyDeviceForLogging = (device: Device) => ({
32
- devkit: device.devkit,
33
- serialPorts: device.serialPorts,
34
- traits: device.traits,
35
- serialNumber: device.serialNumber,
36
- enumerationID: device.id,
37
- usb: {
38
- product: device.usb?.product,
39
- manufacturer: device.usb?.manufacturer,
40
- deviceDescriptor: device.usb?.device.descriptor,
41
- },
42
- });
43
-
44
- const isEnabled = () => {
45
- const isSendingUsageData = getShouldSendTelemetry();
46
- logger?.debug(`Usage data is ${isSendingUsageData}`);
47
- return isSendingUsageData;
48
- };
49
-
50
- const getShouldSendTelemetry = (forceSend?: boolean) =>
51
- (forceSend || getIsSendingUsageData()) && telemetryEnabled;
52
-
53
- export default {
54
- setLogger,
55
- getLogger,
56
- isEnabled,
57
- getShouldSendTelemetry,
58
- enableTelemetry,
59
- };
@@ -1,119 +0,0 @@
1
- /*
2
- * Copyright (c) 2105 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import { TelemetryClient } from 'applicationinsights';
8
-
9
- import { isDevelopment } from './environment';
10
- import { packageJson } from './packageJson';
11
- import usageDataCommon, {
12
- INSTRUMENTATION_KEY,
13
- Metadata,
14
- } from './usageDataCommon';
15
-
16
- let cachedInsights: TelemetryClient | undefined;
17
-
18
- const getInsights = (forceSend?: boolean) => {
19
- if (!usageDataCommon.getShouldSendTelemetry(forceSend)) return;
20
-
21
- if (cachedInsights) {
22
- return cachedInsights;
23
- }
24
-
25
- if (!cachedInsights) {
26
- cachedInsights = init();
27
- }
28
-
29
- return cachedInsights;
30
- };
31
-
32
- const init = () => {
33
- const appPackageJson = packageJson();
34
- const applicationName = appPackageJson.name;
35
- const applicationVersion = appPackageJson.version;
36
-
37
- const out = new TelemetryClient(INSTRUMENTATION_KEY);
38
- out.config.enableAutoCollectConsole = false;
39
- out.config.enableAutoCollectDependencies = false;
40
- out.config.enableAutoCollectExceptions = false;
41
- out.config.enableAutoCollectIncomingRequestAzureFunctions = false;
42
- out.config.enableAutoCollectHeartbeat = false;
43
- out.config.enableAutoCollectPerformance = false;
44
- out.config.enableAutoCollectPreAggregatedMetrics = false;
45
- out.config.enableAutoCollectRequests = false;
46
- out.config.enableAutoDependencyCorrelation = false;
47
-
48
- // Add app name and version to every event
49
- out.addTelemetryProcessor(envelope => {
50
- if (envelope.data.baseData?.properties.removeAllMetadata) {
51
- envelope.tags = [];
52
- envelope.data.baseData = { name: envelope.data?.baseData.name };
53
- } else {
54
- envelope.tags['ai.cloud.roleInstance'] = undefined; // remove PC name
55
- if (envelope.data.baseData) {
56
- envelope.data.baseData.properties = {
57
- applicationName,
58
- applicationVersion,
59
- isDevelopment,
60
- ...envelope.data.baseData.properties,
61
- };
62
- }
63
- }
64
-
65
- return true;
66
- });
67
-
68
- return out;
69
- };
70
-
71
- const sendUsageData = (
72
- action: string,
73
- metadata?: Metadata,
74
- forceSend?: boolean
75
- ) => {
76
- const result = getInsights(forceSend);
77
- if (result !== undefined) {
78
- result.trackEvent({
79
- name: action,
80
- properties: forceSend ? { removeAllMetadata: true } : metadata,
81
- });
82
- return true;
83
- }
84
-
85
- return false;
86
- };
87
-
88
- const sendPageView = (pageName: string) => {
89
- getInsights()?.trackPageView({
90
- name: pageName,
91
- });
92
- };
93
-
94
- const sendMetric = (name: string, value: number) => {
95
- getInsights()?.trackMetric({
96
- name,
97
- value,
98
- });
99
- };
100
-
101
- const sendTrace = (message: string) => {
102
- getInsights()?.trackTrace({
103
- message,
104
- });
105
- };
106
-
107
- const sendErrorReport = (error: Error) => {
108
- getInsights()?.trackException({
109
- exception: error,
110
- });
111
- };
112
-
113
- export default {
114
- sendErrorReport,
115
- sendUsageData,
116
- sendPageView,
117
- sendMetric,
118
- sendTrace,
119
- };
@@ -1,137 +0,0 @@
1
- /*
2
- * Copyright (c) 2105 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import { ApplicationInsights } from '@microsoft/applicationinsights-web';
8
-
9
- import appDetails from './appDetails';
10
- import { isDevelopment } from './environment';
11
- import { isLauncher, packageJson } from './packageJson';
12
- import { getUsageDataClientId } from './persistentStore';
13
- import usageDataCommon, {
14
- INSTRUMENTATION_KEY,
15
- Metadata,
16
- } from './usageDataCommon';
17
-
18
- let cachedInsights: ApplicationInsights | undefined;
19
-
20
- const getInsights = async (forceSend?: boolean) => {
21
- if (!usageDataCommon.getShouldSendTelemetry(forceSend)) return;
22
-
23
- if (cachedInsights) {
24
- return cachedInsights;
25
- }
26
-
27
- if (!cachedInsights) {
28
- cachedInsights = await init();
29
- }
30
-
31
- return cachedInsights;
32
- };
33
-
34
- // We experienced that apps sometimes freeze when closing the window
35
- // until the telemetry events are sent.
36
- const isRenderer = process && process.type === 'renderer';
37
- if (isRenderer) {
38
- window.addEventListener('beforeunload', async () => {
39
- (await getInsights())?.flush();
40
- });
41
- }
42
-
43
- const init = async () => {
44
- const applicationName = packageJson().name;
45
- const applicationVersion = packageJson().version;
46
- const source = isLauncher() ? undefined : (await appDetails()).source;
47
-
48
- const accountId = getUsageDataClientId();
49
-
50
- const out = new ApplicationInsights({
51
- config: {
52
- instrumentationKey: INSTRUMENTATION_KEY,
53
- accountId, // to hide with removeAllMetadata
54
- isStorageUseDisabled: true, // fix issue with duplicate events being sent https://github.com/microsoft/ApplicationInsights-JS/issues/796
55
- namePrefix: applicationName, // fix issue with duplicate events being sent https://github.com/microsoft/ApplicationInsights-JS/issues/796
56
- },
57
- });
58
-
59
- out.loadAppInsights();
60
-
61
- // Add app name and version to every event
62
- out.addTelemetryInitializer(envelope => {
63
- if (envelope.data?.removeAllMetadata) {
64
- envelope.data = {};
65
- envelope.baseData = { name: envelope.baseData?.name };
66
- envelope.ext = {};
67
- envelope.tags = [];
68
- } else {
69
- const trace = {
70
- ...(envelope.ext?.trace ?? {}),
71
- name: applicationName,
72
- };
73
- envelope.ext = { ...envelope.ext, trace };
74
- envelope.data = {
75
- ...envelope.data,
76
- applicationName,
77
- applicationVersion,
78
- isDevelopment,
79
- source,
80
- };
81
- }
82
- });
83
-
84
- return out;
85
- };
86
-
87
- const sendUsageData = async (
88
- action: string,
89
- metadata?: Metadata,
90
- forceSend?: boolean
91
- ) => {
92
- const result = await getInsights(forceSend);
93
- if (result !== undefined) {
94
- result.trackEvent(
95
- {
96
- name: action,
97
- },
98
- forceSend ? { removeAllMetadata: true } : metadata
99
- );
100
- return true;
101
- }
102
-
103
- return false;
104
- };
105
-
106
- const sendPageView = async (pageName: string) => {
107
- (await getInsights())?.trackPageView({
108
- name: pageName,
109
- });
110
- };
111
-
112
- const sendMetric = async (name: string, average: number) => {
113
- (await getInsights())?.trackMetric({
114
- name,
115
- average,
116
- });
117
- };
118
-
119
- const sendTrace = async (message: string) => {
120
- (await getInsights())?.trackTrace({
121
- message,
122
- });
123
- };
124
-
125
- const sendErrorReport = async (error: Error) => {
126
- (await getInsights())?.trackException({
127
- exception: error,
128
- });
129
- };
130
-
131
- export default {
132
- sendErrorReport,
133
- sendUsageData,
134
- sendPageView,
135
- sendMetric,
136
- sendTrace,
137
- };
@@ -1,16 +0,0 @@
1
- import { Metadata } from './usageDataCommon';
2
- declare const _default: {
3
- setLogger: (log: import("winston").Logger) => void;
4
- disable: () => void;
5
- enable: () => void;
6
- isEnabled: () => boolean | undefined;
7
- reset: () => void;
8
- sendErrorReport: (error: string | Error) => void | Promise<void>;
9
- sendUsageData: (action: string, metadata?: Metadata | undefined, forceSend?: boolean | undefined) => Promise<void>;
10
- sendPageView: (pageName: string) => void | Promise<void>;
11
- sendMetric: (name: string, average: number) => void | Promise<void>;
12
- sendTrace: (message: string) => void | Promise<void>;
13
- enableTelemetry: () => void;
14
- };
15
- export default _default;
16
- //# sourceMappingURL=usageData.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usageData.d.ts","sourceRoot":"","sources":["../../../../src/utils/usageData.ts"],"names":[],"mappings":"AAaA,OAAwB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;;;;;;;;;;;;;;AA2F9D,wBAYE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"usageDataCommon.d.ts","sourceRoot":"","sources":["../../../../src/utils/usageDataCommon.ts"],"names":[],"mappings":"AAMA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,eAAO,MAAM,mBAAmB,yCAAyC,CAAC;AAe1E,MAAM,WAAW,QAAQ;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,wBAAwB,WAAY,MAAM;;;;;;;;;;;CAWrD,CAAC;;;;;;;;AAWH,wBAME"}
@@ -1,10 +0,0 @@
1
- import { Metadata } from './usageDataCommon';
2
- declare const _default: {
3
- sendErrorReport: (error: Error) => void;
4
- sendUsageData: (action: string, metadata?: Metadata | undefined, forceSend?: boolean | undefined) => boolean;
5
- sendPageView: (pageName: string) => void;
6
- sendMetric: (name: string, value: number) => void;
7
- sendTrace: (message: string) => void;
8
- };
9
- export default _default;
10
- //# sourceMappingURL=usageDataMain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usageDataMain.d.ts","sourceRoot":"","sources":["../../../../src/utils/usageDataMain.ts"],"names":[],"mappings":"AAUA,OAAwB,EAEpB,QAAQ,EACX,MAAM,mBAAmB,CAAC;;;;;;;;AAmG3B,wBAME"}
@@ -1,10 +0,0 @@
1
- import { Metadata } from './usageDataCommon';
2
- declare const _default: {
3
- sendErrorReport: (error: Error) => Promise<void>;
4
- sendUsageData: (action: string, metadata?: Metadata | undefined, forceSend?: boolean | undefined) => Promise<boolean>;
5
- sendPageView: (pageName: string) => Promise<void>;
6
- sendMetric: (name: string, average: number) => Promise<void>;
7
- sendTrace: (message: string) => Promise<void>;
8
- };
9
- export default _default;
10
- //# sourceMappingURL=usageDataRenderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usageDataRenderer.d.ts","sourceRoot":"","sources":["../../../../src/utils/usageDataRenderer.ts"],"names":[],"mappings":"AAYA,OAAwB,EAEpB,QAAQ,EACX,MAAM,mBAAmB,CAAC;;;;;;;;AAmH3B,wBAME"}