@microsoft/power-apps-cli 0.9.1 → 0.10.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/README.md +81 -10
- package/dist/ArgumentProvider.d.ts +61 -0
- package/dist/ArgumentProvider.d.ts.map +1 -0
- package/dist/ArgumentProvider.js +247 -0
- package/dist/ArgumentProvider.js.map +1 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts +17 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.js +91 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -0
- package/dist/Authentication/PacCliAuthenticationProvider.d.ts +15 -0
- package/dist/Authentication/PacCliAuthenticationProvider.d.ts.map +1 -0
- package/dist/Authentication/PacCliAuthenticationProvider.js +51 -0
- package/dist/Authentication/PacCliAuthenticationProvider.js.map +1 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts +20 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts.map +1 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.js +51 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.js.map +1 -0
- package/dist/Bin.d.ts +6 -0
- package/dist/Bin.d.ts.map +1 -0
- package/dist/Bin.js +2 -3357
- package/dist/Bin.js.map +1 -0
- package/dist/Cli.d.ts +2 -0
- package/dist/Cli.d.ts.map +1 -0
- package/dist/Cli.js +131 -0
- package/dist/Cli.js.map +1 -0
- package/dist/CliSettings.d.ts +14 -0
- package/dist/CliSettings.d.ts.map +1 -0
- package/dist/CliSettings.js +70 -0
- package/dist/CliSettings.js.map +1 -0
- package/dist/CliUtils.d.ts +21 -0
- package/dist/CliUtils.d.ts.map +1 -0
- package/dist/CliUtils.js +92 -0
- package/dist/CliUtils.js.map +1 -0
- package/dist/Constants/HelpStrings.d.ts +168 -0
- package/dist/Constants/HelpStrings.d.ts.map +1 -0
- package/dist/Constants/HelpStrings.js +216 -0
- package/dist/Constants/HelpStrings.js.map +1 -0
- package/dist/Constants/VerbRegistry.d.ts +79 -0
- package/dist/Constants/VerbRegistry.d.ts.map +1 -0
- package/dist/Constants/VerbRegistry.js +46 -0
- package/dist/Constants/VerbRegistry.js.map +1 -0
- package/dist/Constants.d.ts +10 -0
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +12 -0
- package/dist/Constants.js.map +1 -0
- package/dist/Errors/CliError.d.ts +11 -0
- package/dist/Errors/CliError.d.ts.map +1 -0
- package/dist/Errors/CliError.js +16 -0
- package/dist/Errors/CliError.js.map +1 -0
- package/dist/FS/CliFs.d.ts +41 -0
- package/dist/FS/CliFs.d.ts.map +1 -0
- package/dist/FS/CliFs.js +136 -0
- package/dist/FS/CliFs.js.map +1 -0
- package/dist/HttpClient/CliHttpClient.d.ts +21 -0
- package/dist/HttpClient/CliHttpClient.d.ts.map +1 -0
- package/dist/HttpClient/CliHttpClient.js +118 -0
- package/dist/HttpClient/CliHttpClient.js.map +1 -0
- package/dist/Logger/CliLogger.d.ts +27 -0
- package/dist/Logger/CliLogger.d.ts.map +1 -0
- package/dist/Logger/CliLogger.js +222 -0
- package/dist/Logger/CliLogger.js.map +1 -0
- package/dist/Logger/ConsoleWriter.d.ts +15 -0
- package/dist/Logger/ConsoleWriter.d.ts.map +1 -0
- package/dist/Logger/ConsoleWriter.js +45 -0
- package/dist/Logger/ConsoleWriter.js.map +1 -0
- package/dist/Logger/Constants.d.ts +6 -0
- package/dist/Logger/Constants.d.ts.map +1 -0
- package/dist/Logger/Constants.js +15 -0
- package/dist/Logger/Constants.js.map +1 -0
- package/dist/Logger/LoggerSettings.d.ts +18 -0
- package/dist/Logger/LoggerSettings.d.ts.map +1 -0
- package/dist/Logger/LoggerSettings.js +100 -0
- package/dist/Logger/LoggerSettings.js.map +1 -0
- package/dist/Logger/OneDSWriter.d.ts +22 -0
- package/dist/Logger/OneDSWriter.d.ts.map +1 -0
- package/dist/Logger/OneDSWriter.js +137 -0
- package/dist/Logger/OneDSWriter.js.map +1 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts +5 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts.map +1 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensions.js +46 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensions.js.map +1 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts +27 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts.map +1 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js +168 -0
- package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js.map +1 -0
- package/dist/Logger/Scrubber/ScrubUtils.d.ts +8 -0
- package/dist/Logger/Scrubber/ScrubUtils.d.ts.map +1 -0
- package/dist/Logger/Scrubber/ScrubUtils.js +34 -0
- package/dist/Logger/Scrubber/ScrubUtils.js.map +1 -0
- package/dist/Types/Argument.types.d.ts +20 -0
- package/dist/Types/Argument.types.d.ts.map +1 -0
- package/dist/Types/Argument.types.js +5 -0
- package/dist/Types/Argument.types.js.map +1 -0
- package/dist/Types/Cli.types.d.ts +35 -0
- package/dist/Types/Cli.types.d.ts.map +1 -0
- package/dist/Types/Cli.types.js +5 -0
- package/dist/Types/Cli.types.js.map +1 -0
- package/dist/Types/Datasource.types.d.ts +43 -0
- package/dist/Types/Datasource.types.d.ts.map +1 -0
- package/dist/Types/Datasource.types.js +5 -0
- package/dist/Types/Datasource.types.js.map +1 -0
- package/dist/Types/LoggerTypes.types.d.ts +17 -0
- package/dist/Types/LoggerTypes.types.d.ts.map +1 -0
- package/dist/Types/LoggerTypes.types.js +5 -0
- package/dist/Types/LoggerTypes.types.js.map +1 -0
- package/dist/Utils/BuildVerbDescriptionTable.d.ts +9 -0
- package/dist/Utils/BuildVerbDescriptionTable.d.ts.map +1 -0
- package/dist/Utils/BuildVerbDescriptionTable.js +29 -0
- package/dist/Utils/BuildVerbDescriptionTable.js.map +1 -0
- package/dist/Utils/ConsoleOutput.d.ts +39 -0
- package/dist/Utils/ConsoleOutput.d.ts.map +1 -0
- package/dist/Utils/ConsoleOutput.js +111 -0
- package/dist/Utils/ConsoleOutput.js.map +1 -0
- package/dist/Utils/EnhanceNetworkError.d.ts +14 -0
- package/dist/Utils/EnhanceNetworkError.d.ts.map +1 -0
- package/dist/Utils/EnhanceNetworkError.js +59 -0
- package/dist/Utils/EnhanceNetworkError.js.map +1 -0
- package/dist/Verbs/AddDataSource.d.ts +19 -0
- package/dist/Verbs/AddDataSource.d.ts.map +1 -0
- package/dist/Verbs/AddDataSource.js +157 -0
- package/dist/Verbs/AddDataSource.js.map +1 -0
- package/dist/Verbs/AddDataverseApi.d.ts +13 -0
- package/dist/Verbs/AddDataverseApi.d.ts.map +1 -0
- package/dist/Verbs/AddDataverseApi.js +67 -0
- package/dist/Verbs/AddDataverseApi.js.map +1 -0
- package/dist/Verbs/AddFlow.d.ts +12 -0
- package/dist/Verbs/AddFlow.d.ts.map +1 -0
- package/dist/Verbs/AddFlow.js +66 -0
- package/dist/Verbs/AddFlow.js.map +1 -0
- package/dist/Verbs/DeleteDataSource.d.ts +6 -0
- package/dist/Verbs/DeleteDataSource.d.ts.map +1 -0
- package/dist/Verbs/DeleteDataSource.js +108 -0
- package/dist/Verbs/DeleteDataSource.js.map +1 -0
- package/dist/Verbs/FindDataverseApi.d.ts +12 -0
- package/dist/Verbs/FindDataverseApi.d.ts.map +1 -0
- package/dist/Verbs/FindDataverseApi.js +101 -0
- package/dist/Verbs/FindDataverseApi.js.map +1 -0
- package/dist/Verbs/Init.d.ts +6 -0
- package/dist/Verbs/Init.d.ts.map +1 -0
- package/dist/Verbs/Init.js +146 -0
- package/dist/Verbs/Init.js.map +1 -0
- package/dist/Verbs/ListCodeApps.d.ts +6 -0
- package/dist/Verbs/ListCodeApps.d.ts.map +1 -0
- package/dist/Verbs/ListCodeApps.js +31 -0
- package/dist/Verbs/ListCodeApps.js.map +1 -0
- package/dist/Verbs/ListConnectionReferences.d.ts +6 -0
- package/dist/Verbs/ListConnectionReferences.d.ts.map +1 -0
- package/dist/Verbs/ListConnectionReferences.js +80 -0
- package/dist/Verbs/ListConnectionReferences.js.map +1 -0
- package/dist/Verbs/ListDatasets.d.ts +6 -0
- package/dist/Verbs/ListDatasets.d.ts.map +1 -0
- package/dist/Verbs/ListDatasets.js +83 -0
- package/dist/Verbs/ListDatasets.js.map +1 -0
- package/dist/Verbs/ListEnvironmentVariables.d.ts +14 -0
- package/dist/Verbs/ListEnvironmentVariables.d.ts.map +1 -0
- package/dist/Verbs/ListEnvironmentVariables.js +82 -0
- package/dist/Verbs/ListEnvironmentVariables.js.map +1 -0
- package/dist/Verbs/ListFlows.d.ts +13 -0
- package/dist/Verbs/ListFlows.d.ts.map +1 -0
- package/dist/Verbs/ListFlows.js +88 -0
- package/dist/Verbs/ListFlows.js.map +1 -0
- package/dist/Verbs/ListSqlStoredProcedures.d.ts +6 -0
- package/dist/Verbs/ListSqlStoredProcedures.d.ts.map +1 -0
- package/dist/Verbs/ListSqlStoredProcedures.js +84 -0
- package/dist/Verbs/ListSqlStoredProcedures.js.map +1 -0
- package/dist/Verbs/ListTables.d.ts +6 -0
- package/dist/Verbs/ListTables.d.ts.map +1 -0
- package/dist/Verbs/ListTables.js +95 -0
- package/dist/Verbs/ListTables.js.map +1 -0
- package/dist/Verbs/Logout.d.ts +6 -0
- package/dist/Verbs/Logout.d.ts.map +1 -0
- package/dist/Verbs/Logout.js +28 -0
- package/dist/Verbs/Logout.js.map +1 -0
- package/dist/Verbs/Push.d.ts +6 -0
- package/dist/Verbs/Push.d.ts.map +1 -0
- package/dist/Verbs/Push.js +108 -0
- package/dist/Verbs/Push.js.map +1 -0
- package/dist/Verbs/RefreshDataSource.d.ts +6 -0
- package/dist/Verbs/RefreshDataSource.d.ts.map +1 -0
- package/dist/Verbs/RefreshDataSource.js +70 -0
- package/dist/Verbs/RefreshDataSource.js.map +1 -0
- package/dist/Verbs/RemoveFlow.d.ts +12 -0
- package/dist/Verbs/RemoveFlow.d.ts.map +1 -0
- package/dist/Verbs/RemoveFlow.js +98 -0
- package/dist/Verbs/RemoveFlow.js.map +1 -0
- package/dist/Verbs/Run.d.ts +6 -0
- package/dist/Verbs/Run.d.ts.map +1 -0
- package/dist/Verbs/Run.js +122 -0
- package/dist/Verbs/Run.js.map +1 -0
- package/dist/Verbs/TelemetrySettings.d.ts +12 -0
- package/dist/Verbs/TelemetrySettings.d.ts.map +1 -0
- package/dist/Verbs/TelemetrySettings.js +158 -0
- package/dist/Verbs/TelemetrySettings.js.map +1 -0
- package/dist/Verbs/VerbConstants.d.ts +203 -0
- package/dist/Verbs/VerbConstants.d.ts.map +1 -0
- package/dist/Verbs/VerbConstants.js +201 -0
- package/dist/Verbs/VerbConstants.js.map +1 -0
- package/dist/Verbs/index.d.ts +22 -0
- package/dist/Verbs/index.d.ts.map +1 -0
- package/dist/Verbs/index.js +22 -0
- package/dist/Verbs/index.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { spinner } from '@clack/prompts';
|
|
5
|
+
import { randomUUID } from 'crypto';
|
|
6
|
+
import { getSettings } from '../CliSettings.js';
|
|
7
|
+
import { MS_CLIENT_REQUESTID } from '../Constants.js';
|
|
8
|
+
import { enhanceNetworkError } from '../Utils/EnhanceNetworkError.js';
|
|
9
|
+
export class CliHttpClient {
|
|
10
|
+
_authenticationProvider;
|
|
11
|
+
_inflight = 0;
|
|
12
|
+
_spinner = spinner();
|
|
13
|
+
constructor(_authenticationProvider) {
|
|
14
|
+
this._authenticationProvider = _authenticationProvider;
|
|
15
|
+
}
|
|
16
|
+
async get(url, config) {
|
|
17
|
+
return this._sendRequestAsync(url, 'GET', config);
|
|
18
|
+
}
|
|
19
|
+
async post(url, config) {
|
|
20
|
+
return this._sendRequestAsync(url, 'POST', config);
|
|
21
|
+
}
|
|
22
|
+
async patch(url, config) {
|
|
23
|
+
return this._sendRequestAsync(url, 'PATCH', config);
|
|
24
|
+
}
|
|
25
|
+
async put(url, config) {
|
|
26
|
+
return this._sendRequestAsync(url, 'PUT', config);
|
|
27
|
+
}
|
|
28
|
+
async _sendRequestAsync(url, method, config) {
|
|
29
|
+
this._startSpinner();
|
|
30
|
+
try {
|
|
31
|
+
const headers = config?.headers || {};
|
|
32
|
+
if (config?.authResource) {
|
|
33
|
+
const token = await this._authenticationProvider.getAccessTokenForResource(config.authResource);
|
|
34
|
+
headers.Authorization = `Bearer ${token}`;
|
|
35
|
+
}
|
|
36
|
+
if (!headers['Content-Type']) {
|
|
37
|
+
headers['Content-Type'] = 'application/json';
|
|
38
|
+
}
|
|
39
|
+
headers[MS_CLIENT_REQUESTID] = randomUUID();
|
|
40
|
+
// Only JSON.stringify if body is not already a string and Content-Type is JSON
|
|
41
|
+
let bodyContent;
|
|
42
|
+
if (config?.body !== undefined) {
|
|
43
|
+
const isJsonContentType = headers['Content-Type'] === 'application/json';
|
|
44
|
+
bodyContent =
|
|
45
|
+
typeof config.body === 'string' && !isJsonContentType
|
|
46
|
+
? config.body
|
|
47
|
+
: JSON.stringify(config.body);
|
|
48
|
+
}
|
|
49
|
+
const requestOptions = {
|
|
50
|
+
method,
|
|
51
|
+
headers,
|
|
52
|
+
// Only include body if it exists
|
|
53
|
+
body: bodyContent,
|
|
54
|
+
};
|
|
55
|
+
const response = await fetch(url, requestOptions);
|
|
56
|
+
if (!response.ok) {
|
|
57
|
+
throw new Error(`HTTP error status: ${response.status} for ${method} ${url}: ${await response.text()}`);
|
|
58
|
+
}
|
|
59
|
+
const data = await this._parseResponse(response);
|
|
60
|
+
return {
|
|
61
|
+
data,
|
|
62
|
+
status: response.status,
|
|
63
|
+
headers: await this._transformHeaders(response.headers),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
throw enhanceNetworkError(error, method, url);
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
this._stopSpinner();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
_startSpinner() {
|
|
74
|
+
this._inflight++;
|
|
75
|
+
if (this._inflight === 1 && getSettings().interactive) {
|
|
76
|
+
this._spinner.start('Loading...');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
_stopSpinner() {
|
|
80
|
+
this._inflight--;
|
|
81
|
+
if (this._inflight === 0 && getSettings().interactive) {
|
|
82
|
+
this._spinner.stop('');
|
|
83
|
+
// Workaround for @clack/core bug: block() sets stdin to raw mode
|
|
84
|
+
// but the unblock function skips restoring it on Windows.
|
|
85
|
+
// Without this, Ctrl+C won't generate SIGINT after the spinner runs.
|
|
86
|
+
if (process.stdin.isTTY && process.stdin.setRawMode) {
|
|
87
|
+
process.stdin.setRawMode(false);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async _parseResponse(response) {
|
|
92
|
+
const contentType = response.headers.get('content-type');
|
|
93
|
+
const responseText = await response.text();
|
|
94
|
+
// Handle empty responses or non-JSON content
|
|
95
|
+
if (!responseText || responseText.trim() === '') {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
else if (contentType && contentType.includes('application/json')) {
|
|
99
|
+
try {
|
|
100
|
+
return JSON.parse(responseText);
|
|
101
|
+
}
|
|
102
|
+
catch (parseError) {
|
|
103
|
+
throw new Error(`Failed to parse JSON response: ${parseError}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
return responseText;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async _transformHeaders(headers) {
|
|
111
|
+
const result = {};
|
|
112
|
+
headers.forEach((value, key) => {
|
|
113
|
+
result[key] = value;
|
|
114
|
+
});
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=CliHttpClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliHttpClient.js","sourceRoot":"","sources":["../../src/HttpClient/CliHttpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import type { IHttpClient, ILogger, Scenario } from '@microsoft/power-apps-actions';
|
|
5
|
+
import type { CliSettings, IAuthenticationProvider } from '../Types/Cli.types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Logger implementation for the CLI
|
|
8
|
+
* The logger depends on the CLISettings, HttpClient and authenticationProvider to initialize the OneDS writer
|
|
9
|
+
*/
|
|
10
|
+
export declare class CliLogger implements ILogger {
|
|
11
|
+
private _telemetryWriters;
|
|
12
|
+
private _oneDSConfig?;
|
|
13
|
+
private constructor();
|
|
14
|
+
static create(cliSettings: CliSettings, httpClient: IHttpClient): Promise<CliLogger>;
|
|
15
|
+
/**
|
|
16
|
+
* Initialize OneDS telemetry after authentication is ready.
|
|
17
|
+
* Must be called after authenticationProvider.initAsync() completes.
|
|
18
|
+
*/
|
|
19
|
+
initializeTelemetry(authenticationProvider: IAuthenticationProvider): Promise<void>;
|
|
20
|
+
setCustomDimension(_key: string, _value: string): void;
|
|
21
|
+
trackActivityEvent(eventName: string, eventData?: object): void;
|
|
22
|
+
trackErrorEvent(eventName: string, eventData?: object): void;
|
|
23
|
+
trackScenario(eventName: string, eventData?: object): Scenario;
|
|
24
|
+
stringifyError(err: unknown): string | null | undefined;
|
|
25
|
+
flush(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=CliLogger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliLogger.d.ts","sourceRoot":"","sources":["../../src/Logger/CliLogger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAMpF,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EAExB,MAAM,oBAAoB,CAAC;AAqF5B;;;GAGG;AACH,qBAAa,SAAU,YAAW,OAAO;IACvC,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,YAAY,CAAC,CAOnB;IAEF,OAAO;WAIa,MAAM,CACxB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,WAAW,GACtB,OAAO,CAAC,SAAS,CAAC;IAoCrB;;;OAGG;IACU,mBAAmB,CAAC,sBAAsB,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CzF,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAatD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAW/D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAW5D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ;IAuB9D,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAcvD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { getEnvironmentByName, initializePlayerServices } from '@microsoft/power-apps-actions';
|
|
5
|
+
import { randomUUID } from 'crypto';
|
|
6
|
+
import packageJson from '../../package.json' with { type: 'json' };
|
|
7
|
+
import { printError } from '../Utils/ConsoleOutput.js';
|
|
8
|
+
import { ConsoleWriter } from './ConsoleWriter.js';
|
|
9
|
+
import { EUGeoRegions } from './Constants.js';
|
|
10
|
+
import { resolveUserTelemetrySettings } from './LoggerSettings.js';
|
|
11
|
+
import { OneDSWriter } from './OneDSWriter.js';
|
|
12
|
+
/**
|
|
13
|
+
* Utility method to create a Scenario
|
|
14
|
+
*
|
|
15
|
+
* @param {ITelemetryWriter[]} telemetryWriters
|
|
16
|
+
* @param {string} name
|
|
17
|
+
* @param {object} [data]
|
|
18
|
+
* @returns {Scenario}
|
|
19
|
+
*/
|
|
20
|
+
function createScenarioLogger(telemetryWriters, name, data) {
|
|
21
|
+
const scenarioGuid = randomUUID();
|
|
22
|
+
const _start = Date.now();
|
|
23
|
+
try {
|
|
24
|
+
telemetryWriters.forEach((writer) => writer.startScenario(name, { scenarioGuid, ...data, scenarioStartTime: _start }));
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
28
|
+
}
|
|
29
|
+
const base = {
|
|
30
|
+
scenarioId: scenarioGuid,
|
|
31
|
+
complete: (completeData) => {
|
|
32
|
+
try {
|
|
33
|
+
telemetryWriters.forEach((writer) => writer.completeScenario(name, {
|
|
34
|
+
scenarioGuid,
|
|
35
|
+
elapsedTime: Date.now() - _start,
|
|
36
|
+
totalElapsedTime: Date.now() - _start,
|
|
37
|
+
...completeData,
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
failure: (failureData) => {
|
|
45
|
+
try {
|
|
46
|
+
telemetryWriters.forEach((writer) => writer.scenarioFailed(name, {
|
|
47
|
+
scenarioGuid,
|
|
48
|
+
elapsedTime: Date.now() - _start,
|
|
49
|
+
totalElapsedTime: Date.now() - _start,
|
|
50
|
+
...failureData,
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
completeWithError: (dataWithErr) => {
|
|
58
|
+
try {
|
|
59
|
+
telemetryWriters.forEach((writer) => writer.scenarioCompletedWithError(name, {
|
|
60
|
+
scenarioGuid,
|
|
61
|
+
elapsedTime: Date.now() - _start,
|
|
62
|
+
totalElapsedTime: Date.now() - _start,
|
|
63
|
+
...dataWithErr,
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
base._start = _start;
|
|
72
|
+
return base;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Logger implementation for the CLI
|
|
76
|
+
* The logger depends on the CLISettings, HttpClient and authenticationProvider to initialize the OneDS writer
|
|
77
|
+
*/
|
|
78
|
+
export class CliLogger {
|
|
79
|
+
_telemetryWriters = [];
|
|
80
|
+
_oneDSConfig;
|
|
81
|
+
constructor(telemetryWriters) {
|
|
82
|
+
this._telemetryWriters = telemetryWriters;
|
|
83
|
+
}
|
|
84
|
+
static async create(cliSettings, httpClient) {
|
|
85
|
+
const environmentId = cliSettings.appConfig?.environmentId;
|
|
86
|
+
const region = cliSettings.appConfig?.region;
|
|
87
|
+
const appId = cliSettings.appConfig?.appId;
|
|
88
|
+
const sessionId = randomUUID();
|
|
89
|
+
const telemetryWriters = [];
|
|
90
|
+
const userTelemetrySettings = resolveUserTelemetrySettings();
|
|
91
|
+
const addConsoleWriter = () => telemetryWriters.push(new ConsoleWriter());
|
|
92
|
+
if (userTelemetrySettings.consoleOnly) {
|
|
93
|
+
addConsoleWriter();
|
|
94
|
+
return new CliLogger(telemetryWriters);
|
|
95
|
+
}
|
|
96
|
+
if (userTelemetrySettings.outputToConsole) {
|
|
97
|
+
addConsoleWriter();
|
|
98
|
+
}
|
|
99
|
+
const instance = new CliLogger(telemetryWriters);
|
|
100
|
+
if (userTelemetrySettings.enabled && region && environmentId) {
|
|
101
|
+
// Store config for deferred initialization via initializeTelemetry()
|
|
102
|
+
instance._oneDSConfig = {
|
|
103
|
+
sessionId,
|
|
104
|
+
region,
|
|
105
|
+
environmentId,
|
|
106
|
+
appId,
|
|
107
|
+
httpClient,
|
|
108
|
+
cliSettings,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return instance;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Initialize OneDS telemetry after authentication is ready.
|
|
115
|
+
* Must be called after authenticationProvider.initAsync() completes.
|
|
116
|
+
*/
|
|
117
|
+
async initializeTelemetry(authenticationProvider) {
|
|
118
|
+
if (!this._oneDSConfig) {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const { sessionId, region, environmentId, appId, httpClient, cliSettings } = this._oneDSConfig;
|
|
122
|
+
this._oneDSConfig = undefined;
|
|
123
|
+
try {
|
|
124
|
+
// Initialize player services to get environment metadata
|
|
125
|
+
initializePlayerServices({
|
|
126
|
+
httpClient,
|
|
127
|
+
environmentName: cliSettings.appConfig?.environmentId || 'default',
|
|
128
|
+
region: cliSettings.appConfig?.region || 'prod',
|
|
129
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
130
|
+
});
|
|
131
|
+
const metadata = await getEnvironmentByName(environmentId);
|
|
132
|
+
let telemetryLocation = 'global';
|
|
133
|
+
if (metadata?.properties?.location && EUGeoRegions.has(metadata.properties.location)) {
|
|
134
|
+
telemetryLocation = 'eu';
|
|
135
|
+
}
|
|
136
|
+
this._telemetryWriters.push(new OneDSWriter(sessionId, region, telemetryLocation, environmentId, appId ?? '', metadata?.properties?.cluster?.geoShortName, packageJson.version, cliSettings.source));
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
printError(`CliLogger: failed to initialize OneDS telemetry writer: ${String(error)}`);
|
|
140
|
+
}
|
|
141
|
+
if (authenticationProvider.getUserTenantId()) {
|
|
142
|
+
// At this point if the auth provider has fetched a token, we can set the tenantId dimension
|
|
143
|
+
this.setCustomDimension('tenantId', authenticationProvider.getUserTenantId());
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
setCustomDimension(_key, _value) {
|
|
147
|
+
try {
|
|
148
|
+
if (!_key || !_value) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
this._telemetryWriters.forEach((writer) => {
|
|
152
|
+
writer.setCustomDimension(_key, _value);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
trackActivityEvent(eventName, eventData) {
|
|
160
|
+
try {
|
|
161
|
+
if (this._telemetryWriters.length === 0) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
this._telemetryWriters.forEach((writer) => writer.trackActivityEvent(eventName, eventData));
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
trackErrorEvent(eventName, eventData) {
|
|
171
|
+
try {
|
|
172
|
+
if (this._telemetryWriters.length === 0) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
this._telemetryWriters.forEach((writer) => writer.trackErrorEvent(eventName, eventData));
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
trackScenario(eventName, eventData) {
|
|
182
|
+
try {
|
|
183
|
+
if (this._telemetryWriters.length === 0) {
|
|
184
|
+
// Return a no-op scenario so callers don't have to check telemetry state
|
|
185
|
+
return {
|
|
186
|
+
scenarioId: 'disabled',
|
|
187
|
+
complete: () => undefined,
|
|
188
|
+
failure: () => undefined,
|
|
189
|
+
completeWithError: () => undefined,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
return createScenarioLogger(this._telemetryWriters, eventName, eventData);
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
196
|
+
return {
|
|
197
|
+
scenarioId: 'error',
|
|
198
|
+
complete: () => undefined,
|
|
199
|
+
failure: () => undefined,
|
|
200
|
+
completeWithError: () => undefined,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
stringifyError(err) {
|
|
205
|
+
if (!err) {
|
|
206
|
+
return undefined;
|
|
207
|
+
}
|
|
208
|
+
if (err instanceof Error) {
|
|
209
|
+
return `${err.name}: ${err.message}${err.stack ? '\n' + err.stack : ''}`;
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
return JSON.stringify(err);
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
return String(err);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
flush() {
|
|
219
|
+
return Promise.all(this._telemetryWriters.map((writer) => writer.flush())).then(() => undefined);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=CliLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliLogger.js","sourceRoot":"","sources":["../../src/Logger/CliLogger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import type { ITelemetryWriter } from '../Types/LoggerTypes.types.js';
|
|
5
|
+
export declare class ConsoleWriter implements ITelemetryWriter {
|
|
6
|
+
trackActivityEvent(eventName: string, eventData?: object): void;
|
|
7
|
+
trackErrorEvent(eventName: string, eventData?: object): void;
|
|
8
|
+
startScenario(scenarioName: string, startData?: object): void;
|
|
9
|
+
completeScenario(scenarioName: string, completeData?: object): void;
|
|
10
|
+
scenarioFailed(scenarioName: string, failureData?: object): void;
|
|
11
|
+
scenarioCompletedWithError(scenarioName: string, completeWithErrorData?: object): void;
|
|
12
|
+
flush(): void;
|
|
13
|
+
setCustomDimension(_key: string, _value: string): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=ConsoleWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleWriter.d.ts","sourceRoot":"","sources":["../../src/Logger/ConsoleWriter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAoBnE,qBAAa,aAAc,YAAW,gBAAgB;IAC7C,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAI/D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5D,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7D,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAInE,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhE,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI;IAItF,KAAK,IAAI,IAAI;IAIb,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAG9D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
|
+
// Logger function factory
|
|
7
|
+
function loggerFn(color, log = console.log.bind(console)) {
|
|
8
|
+
return (scenarioName, ...data) => {
|
|
9
|
+
const time = new Date().toISOString().split('T')[1];
|
|
10
|
+
const prefix = `${chalk.gray(time)}: [${color(scenarioName)}]: `;
|
|
11
|
+
log(prefix, ...data);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
const activity = loggerFn(chalk.white.bold);
|
|
15
|
+
const scenario = loggerFn(chalk.cyan.bold);
|
|
16
|
+
const error = loggerFn(chalk.red.bold, console.error.bind(console));
|
|
17
|
+
const warn = loggerFn(chalk.yellow.bold);
|
|
18
|
+
export class ConsoleWriter {
|
|
19
|
+
trackActivityEvent(eventName, eventData) {
|
|
20
|
+
activity(eventName, eventData || {});
|
|
21
|
+
}
|
|
22
|
+
trackErrorEvent(eventName, eventData) {
|
|
23
|
+
error(eventName, eventData || {});
|
|
24
|
+
}
|
|
25
|
+
startScenario(scenarioName, startData) {
|
|
26
|
+
scenario(`[scenario:start] ${scenarioName}`, startData || {});
|
|
27
|
+
}
|
|
28
|
+
completeScenario(scenarioName, completeData) {
|
|
29
|
+
scenario(`[scenario:complete] ${scenarioName}`, completeData || {});
|
|
30
|
+
}
|
|
31
|
+
scenarioFailed(scenarioName, failureData) {
|
|
32
|
+
error(`[scenario:failure] ${scenarioName}`, failureData || {});
|
|
33
|
+
}
|
|
34
|
+
scenarioCompletedWithError(scenarioName, completeWithErrorData) {
|
|
35
|
+
warn(`[scenario:completeWithError] ${scenarioName}`, completeWithErrorData || {});
|
|
36
|
+
}
|
|
37
|
+
flush() {
|
|
38
|
+
// No-op for console writer
|
|
39
|
+
}
|
|
40
|
+
setCustomDimension(_key, _value) {
|
|
41
|
+
// No-op for console writer
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
45
|
+
//# sourceMappingURL=ConsoleWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleWriter.js","sourceRoot":"","sources":["../../src/Logger/ConsoleWriter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,uDAAuD;AACvD,0BAA0B;AAC1B,SAAS,QAAQ,CACf,KAAkB,EAClB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;IAE/B,OAAO,CAAC,YAAoB,EAAE,GAAG,IAAW,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;QACjE,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAEzC,MAAM,OAAO,aAAa;IACjB,kBAAkB,CAAC,SAAiB,EAAE,SAAkB;QAC7D,QAAQ,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAEM,eAAe,CAAC,SAAiB,EAAE,SAAkB;QAC1D,KAAK,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAEM,aAAa,CAAC,YAAoB,EAAE,SAAkB;QAC3D,QAAQ,CAAC,oBAAoB,YAAY,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAEM,gBAAgB,CAAC,YAAoB,EAAE,YAAqB;QACjE,QAAQ,CAAC,uBAAuB,YAAY,EAAE,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IAEM,cAAc,CAAC,YAAoB,EAAE,WAAoB;QAC9D,KAAK,CAAC,sBAAsB,YAAY,EAAE,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAEM,0BAA0B,CAAC,YAAoB,EAAE,qBAA8B;QACpF,IAAI,CAAC,gCAAgC,YAAY,EAAE,EAAE,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAEM,KAAK;QACV,2BAA2B;IAC7B,CAAC;IAEM,kBAAkB,CAAC,IAAY,EAAE,MAAc;QACpD,2BAA2B;IAC7B,CAAC;CACF;AACD,sDAAsD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constants.d.ts","sourceRoot":"","sources":["../../src/Logger/Constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,eAAO,MAAM,YAAY,aAUvB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
export const EUGeoRegions = new Set([
|
|
5
|
+
'europe',
|
|
6
|
+
'france',
|
|
7
|
+
'germany',
|
|
8
|
+
'italy',
|
|
9
|
+
'poland',
|
|
10
|
+
'norway',
|
|
11
|
+
'sweden',
|
|
12
|
+
'switzerland',
|
|
13
|
+
'unitedkingdom',
|
|
14
|
+
]);
|
|
15
|
+
//# sourceMappingURL=Constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../src/Logger/Constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS;IAC1C,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,eAAe;CAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import type { UserTelemetrySettings } from '../Types/Cli.types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Resolves the effective user telemetry settings by merging defaults, user config file, and environment overrides.
|
|
7
|
+
*
|
|
8
|
+
* Resolution priority (highest to lowest):
|
|
9
|
+
* 1. Environment variable overrides:
|
|
10
|
+
* - POWERAPPS_CLI_TELEMETRY=0/false/no/off forces `enabled: false`
|
|
11
|
+
* - PAC_CLI_TELEMETRY_OPTOUT or PAC CLI usersettings.json `telemetryEnabled: false` forces `enabled: false`
|
|
12
|
+
* 2. PowerApps CLI user settings file (~/.powerapps-cli/settings.json)
|
|
13
|
+
* 3. Default values: `{ enabled: true, consoleOnly: false, outputToConsole: false }`
|
|
14
|
+
*
|
|
15
|
+
* @returns Resolved telemetry configuration with enabled, consoleOnly, and outputToConsole flags
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveUserTelemetrySettings(): UserTelemetrySettings;
|
|
18
|
+
//# sourceMappingURL=LoggerSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoggerSettings.d.ts","sourceRoot":"","sources":["../../src/Logger/LoggerSettings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAkEhE;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,IAAI,qBAAqB,CAiCpE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { CLI_CONFIG_DIRECTORY, USER_SETTINGS_FILE } from '../Constants.js';
|
|
7
|
+
import { printWarning } from '../Utils/ConsoleOutput.js';
|
|
8
|
+
/**
|
|
9
|
+
* Checks if a string represents a truthy value (1, true, yes, on).
|
|
10
|
+
*/
|
|
11
|
+
function isTruthy(value) {
|
|
12
|
+
if (!value) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const normalized = value.trim().toLowerCase();
|
|
16
|
+
return normalized === '1' || normalized === 'true' || normalized === 'yes' || normalized === 'on';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Checks if a string represents a falsy value (0, false, no, off).
|
|
20
|
+
*/
|
|
21
|
+
function isFalsy(value) {
|
|
22
|
+
if (!value) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const normalized = value.trim().toLowerCase();
|
|
26
|
+
return (normalized === '0' || normalized === 'false' || normalized === 'no' || normalized === 'off');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Determines whether PAC CLI telemetry is enabled by checking environment variables and PAC CLI config.
|
|
30
|
+
*
|
|
31
|
+
* Checks in order:
|
|
32
|
+
* 1. PAC_CLI_TELEMETRY_OPTOUT environment variable (if truthy, returns false)
|
|
33
|
+
* 2. PAC CLI usersettings.json file in %LOCALAPPDATA%\Microsoft\PowerAppsCli
|
|
34
|
+
*
|
|
35
|
+
* @returns `false` if explicitly disabled, `true` if explicitly enabled, `undefined` if not configured
|
|
36
|
+
*/
|
|
37
|
+
function isPacCliTelemetryEnabled() {
|
|
38
|
+
if (isTruthy(process.env.PAC_CLI_TELEMETRY_OPTOUT)) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
const localAppData = process.env.LOCALAPPDATA;
|
|
42
|
+
if (!localAppData) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const userSettingsPath = path.join(localAppData, 'Microsoft', 'PowerAppsCli', 'usersettings.json');
|
|
46
|
+
if (!fs.existsSync(userSettingsPath)) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const raw = fs.readFileSync(userSettingsPath, 'utf-8');
|
|
51
|
+
const parsed = JSON.parse(raw);
|
|
52
|
+
return typeof parsed.telemetryEnabled === 'boolean' ? parsed.telemetryEnabled : undefined;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
printWarning(`Failed to read PAC CLI telemetry settings: ${error.message}`);
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Resolves the effective user telemetry settings by merging defaults, user config file, and environment overrides.
|
|
61
|
+
*
|
|
62
|
+
* Resolution priority (highest to lowest):
|
|
63
|
+
* 1. Environment variable overrides:
|
|
64
|
+
* - POWERAPPS_CLI_TELEMETRY=0/false/no/off forces `enabled: false`
|
|
65
|
+
* - PAC_CLI_TELEMETRY_OPTOUT or PAC CLI usersettings.json `telemetryEnabled: false` forces `enabled: false`
|
|
66
|
+
* 2. PowerApps CLI user settings file (~/.powerapps-cli/settings.json)
|
|
67
|
+
* 3. Default values: `{ enabled: true, consoleOnly: false, outputToConsole: false }`
|
|
68
|
+
*
|
|
69
|
+
* @returns Resolved telemetry configuration with enabled, consoleOnly, and outputToConsole flags
|
|
70
|
+
*/
|
|
71
|
+
export function resolveUserTelemetrySettings() {
|
|
72
|
+
const resolved = {
|
|
73
|
+
enabled: true,
|
|
74
|
+
consoleOnly: false,
|
|
75
|
+
outputToConsole: false,
|
|
76
|
+
};
|
|
77
|
+
const cliUserSettingsPath = path.join(CLI_CONFIG_DIRECTORY, USER_SETTINGS_FILE);
|
|
78
|
+
if (fs.existsSync(cliUserSettingsPath)) {
|
|
79
|
+
try {
|
|
80
|
+
const fileContents = fs.readFileSync(cliUserSettingsPath, 'utf-8');
|
|
81
|
+
const parsed = JSON.parse(fileContents);
|
|
82
|
+
resolved.enabled = parsed.enabled ?? resolved.enabled;
|
|
83
|
+
resolved.consoleOnly = parsed.consoleOnly ?? resolved.consoleOnly;
|
|
84
|
+
resolved.outputToConsole = parsed.outputToConsole ?? resolved.outputToConsole;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
printWarning(`Failed to read CLI telemetry settings: ${error.message}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (process.env.POWERAPPS_CLI_TELEMETRY !== undefined &&
|
|
91
|
+
isFalsy(process.env.POWERAPPS_CLI_TELEMETRY)) {
|
|
92
|
+
resolved.enabled = false;
|
|
93
|
+
}
|
|
94
|
+
const pacCliSetting = isPacCliTelemetryEnabled();
|
|
95
|
+
if (typeof pacCliSetting === 'boolean' && pacCliSetting === false) {
|
|
96
|
+
resolved.enabled = false;
|
|
97
|
+
}
|
|
98
|
+
return resolved;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=LoggerSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoggerSettings.js","sourceRoot":"","sources":["../../src/Logger/LoggerSettings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import type { Region } from '@microsoft/power-apps-common/services';
|
|
5
|
+
import { type TelemetryLocation } from '@microsoft/power-apps-common/telemetry';
|
|
6
|
+
import type { ITelemetryWriter } from '../Types/LoggerTypes.types.js';
|
|
7
|
+
export declare class OneDSWriter implements ITelemetryWriter {
|
|
8
|
+
private _provider;
|
|
9
|
+
private _sequenceNumber;
|
|
10
|
+
constructor(sessionId: string, region: Region, telemetryLocation: TelemetryLocation, environmentId: string, appId: string, geoLocation: string | undefined, cliVersion: string, cliSource: string);
|
|
11
|
+
trackActivityEvent(operationName: string, eventData?: object): void;
|
|
12
|
+
trackErrorEvent(operationName: string, eventData?: object): void;
|
|
13
|
+
startScenario(scenarioName: string, startData?: object): void;
|
|
14
|
+
completeScenario(scenarioName: string, completeData?: object): void;
|
|
15
|
+
scenarioFailed(scenarioName: string, failureData?: object): void;
|
|
16
|
+
scenarioCompletedWithError(scenarioName: string, completeWithErrorData?: object): void;
|
|
17
|
+
flush(): void;
|
|
18
|
+
setCustomDimension(_key: string, _value: string): void;
|
|
19
|
+
private static readonly _EVENT_PREFIX;
|
|
20
|
+
private _trackEvent;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=OneDSWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OneDSWriter.d.ts","sourceRoot":"","sources":["../../src/Logger/OneDSWriter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,wCAAwC,CAAC;AAGhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAgBnE,qBAAa,WAAY,YAAW,gBAAgB;IAClD,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,eAAe,CAAa;gBAGlC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM;IAoDZ,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAOnE,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAOhE,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ7D,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IASnE,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAShE,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI;IAStF,KAAK,IAAI,IAAI;IAIb,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAEvD,OAAO,CAAC,WAAW;CA0BpB"}
|