@microsoft/apps-cli 0.0.1 → 0.4.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 +281 -1
- package/dist/ArgumentProvider.d.ts +102 -0
- package/dist/ArgumentProvider.d.ts.map +1 -0
- package/dist/ArgumentProvider.js +376 -0
- package/dist/ArgumentProvider.js.map +1 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts +18 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.js +99 -0
- package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -0
- package/dist/Authentication/OrchardAuthenticationProvider.d.ts +13 -0
- package/dist/Authentication/OrchardAuthenticationProvider.d.ts.map +1 -0
- package/dist/Authentication/OrchardAuthenticationProvider.js +30 -0
- package/dist/Authentication/OrchardAuthenticationProvider.js.map +1 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts +23 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts.map +1 -0
- package/dist/Authentication/ServicePrincipalAuthenticationProvider.js +60 -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 +7 -0
- 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 +95 -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 +76 -0
- package/dist/CliSettings.js.map +1 -0
- package/dist/CliUtils.d.ts +92 -0
- package/dist/CliUtils.d.ts.map +1 -0
- package/dist/CliUtils.js +218 -0
- package/dist/CliUtils.js.map +1 -0
- package/dist/Constants/CliConstants.d.ts +6 -0
- package/dist/Constants/CliConstants.d.ts.map +1 -0
- package/dist/Constants/CliConstants.js +6 -0
- package/dist/Constants/CliConstants.js.map +1 -0
- package/dist/Constants/CommandRegistry.d.ts +23 -0
- package/dist/Constants/CommandRegistry.d.ts.map +1 -0
- package/dist/Constants/CommandRegistry.js +197 -0
- package/dist/Constants/CommandRegistry.js.map +1 -0
- package/dist/Constants/HelpStrings.d.ts +329 -0
- package/dist/Constants/HelpStrings.d.ts.map +1 -0
- package/dist/Constants/HelpStrings.js +451 -0
- package/dist/Constants/HelpStrings.js.map +1 -0
- package/dist/Constants.d.ts +10 -0
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +18 -0
- package/dist/Constants.js.map +1 -0
- package/dist/Errors/CliError.d.ts +5 -0
- package/dist/Errors/CliError.d.ts.map +1 -0
- package/dist/Errors/CliError.js +7 -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 +24 -0
- package/dist/HttpClient/CliHttpClient.d.ts.map +1 -0
- package/dist/HttpClient/CliHttpClient.js +122 -0
- package/dist/HttpClient/CliHttpClient.js.map +1 -0
- package/dist/HttpClient/OrchardProxy.d.ts +11 -0
- package/dist/HttpClient/OrchardProxy.d.ts.map +1 -0
- package/dist/HttpClient/OrchardProxy.js +25 -0
- package/dist/HttpClient/OrchardProxy.js.map +1 -0
- package/dist/HttpClient/Proxy.d.ts +7 -0
- package/dist/HttpClient/Proxy.d.ts.map +1 -0
- package/dist/HttpClient/Proxy.js +5 -0
- package/dist/HttpClient/Proxy.js.map +1 -0
- package/dist/Logger/CliLogger.d.ts +35 -0
- package/dist/Logger/CliLogger.d.ts.map +1 -0
- package/dist/Logger/CliLogger.js +237 -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 +19 -0
- package/dist/Logger/LoggerSettings.d.ts.map +1 -0
- package/dist/Logger/LoggerSettings.js +114 -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 +129 -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 +27 -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 +32 -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/Command.types.d.ts +52 -0
- package/dist/Types/Command.types.d.ts.map +1 -0
- package/dist/Types/Command.types.js +8 -0
- package/dist/Types/Command.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 +19 -0
- package/dist/Utils/BuildVerbDescriptionTable.d.ts.map +1 -0
- package/dist/Utils/BuildVerbDescriptionTable.js +87 -0
- package/dist/Utils/BuildVerbDescriptionTable.js.map +1 -0
- package/dist/Utils/ConsoleOutput.d.ts +80 -0
- package/dist/Utils/ConsoleOutput.d.ts.map +1 -0
- package/dist/Utils/ConsoleOutput.js +151 -0
- package/dist/Utils/ConsoleOutput.js.map +1 -0
- package/dist/Utils/DetectPackageManager.d.ts +9 -0
- package/dist/Utils/DetectPackageManager.d.ts.map +1 -0
- package/dist/Utils/DetectPackageManager.js +24 -0
- package/dist/Utils/DetectPackageManager.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/Utils/EnvVars.d.ts +17 -0
- package/dist/Utils/EnvVars.d.ts.map +1 -0
- package/dist/Utils/EnvVars.js +38 -0
- package/dist/Utils/EnvVars.js.map +1 -0
- package/dist/Utils/GitCredentialConfig.d.ts +12 -0
- package/dist/Utils/GitCredentialConfig.d.ts.map +1 -0
- package/dist/Utils/GitCredentialConfig.js +32 -0
- package/dist/Utils/GitCredentialConfig.js.map +1 -0
- package/dist/Utils/GitUtils.d.ts +22 -0
- package/dist/Utils/GitUtils.d.ts.map +1 -0
- package/dist/Utils/GitUtils.js +35 -0
- package/dist/Utils/GitUtils.js.map +1 -0
- package/dist/Utils/Paging.d.ts +23 -0
- package/dist/Utils/Paging.d.ts.map +1 -0
- package/dist/Utils/Paging.js +67 -0
- package/dist/Utils/Paging.js.map +1 -0
- package/dist/Utils/ReadPackageJson.d.ts +9 -0
- package/dist/Utils/ReadPackageJson.d.ts.map +1 -0
- package/dist/Utils/ReadPackageJson.js +13 -0
- package/dist/Utils/ReadPackageJson.js.map +1 -0
- package/dist/Utils/ResolveCommand.d.ts +26 -0
- package/dist/Utils/ResolveCommand.d.ts.map +1 -0
- package/dist/Utils/ResolveCommand.js +62 -0
- package/dist/Utils/ResolveCommand.js.map +1 -0
- package/dist/Utils/RunCommand.d.ts +13 -0
- package/dist/Utils/RunCommand.d.ts.map +1 -0
- package/dist/Utils/RunCommand.js +35 -0
- package/dist/Utils/RunCommand.js.map +1 -0
- package/dist/Utils/Spinner.d.ts +15 -0
- package/dist/Utils/Spinner.d.ts.map +1 -0
- package/dist/Utils/Spinner.js +71 -0
- package/dist/Utils/Spinner.js.map +1 -0
- package/dist/Utils/zipBuildArtifact.d.ts +35 -0
- package/dist/Utils/zipBuildArtifact.d.ts.map +1 -0
- package/dist/Utils/zipBuildArtifact.js +100 -0
- package/dist/Utils/zipBuildArtifact.js.map +1 -0
- package/dist/Verbs/AddAction.d.ts +6 -0
- package/dist/Verbs/AddAction.d.ts.map +1 -0
- package/dist/Verbs/AddAction.js +87 -0
- package/dist/Verbs/AddAction.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 +174 -0
- package/dist/Verbs/AddDataSource.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 +67 -0
- package/dist/Verbs/AddFlow.js.map +1 -0
- package/dist/Verbs/AddTable.d.ts +6 -0
- package/dist/Verbs/AddTable.d.ts.map +1 -0
- package/dist/Verbs/AddTable.js +163 -0
- package/dist/Verbs/AddTable.js.map +1 -0
- package/dist/Verbs/AuthStatus.d.ts +6 -0
- package/dist/Verbs/AuthStatus.d.ts.map +1 -0
- package/dist/Verbs/AuthStatus.js +18 -0
- package/dist/Verbs/AuthStatus.js.map +1 -0
- package/dist/Verbs/BuildMaafApp.d.ts +6 -0
- package/dist/Verbs/BuildMaafApp.d.ts.map +1 -0
- package/dist/Verbs/BuildMaafApp.js +97 -0
- package/dist/Verbs/BuildMaafApp.js.map +1 -0
- package/dist/Verbs/ConnectorHelpers.d.ts +37 -0
- package/dist/Verbs/ConnectorHelpers.d.ts.map +1 -0
- package/dist/Verbs/ConnectorHelpers.js +116 -0
- package/dist/Verbs/ConnectorHelpers.js.map +1 -0
- package/dist/Verbs/CreateMaafApp.d.ts +25 -0
- package/dist/Verbs/CreateMaafApp.d.ts.map +1 -0
- package/dist/Verbs/CreateMaafApp.js +565 -0
- package/dist/Verbs/CreateMaafApp.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 +106 -0
- package/dist/Verbs/DeleteDataSource.js.map +1 -0
- package/dist/Verbs/DeleteMaafApp.d.ts +23 -0
- package/dist/Verbs/DeleteMaafApp.d.ts.map +1 -0
- package/dist/Verbs/DeleteMaafApp.js +99 -0
- package/dist/Verbs/DeleteMaafApp.js.map +1 -0
- package/dist/Verbs/DeployMaafApp.d.ts +6 -0
- package/dist/Verbs/DeployMaafApp.d.ts.map +1 -0
- package/dist/Verbs/DeployMaafApp.js +96 -0
- package/dist/Verbs/DeployMaafApp.js.map +1 -0
- package/dist/Verbs/Dev.d.ts +6 -0
- package/dist/Verbs/Dev.d.ts.map +1 -0
- package/dist/Verbs/Dev.js +214 -0
- package/dist/Verbs/Dev.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/GetMaafApp.d.ts +6 -0
- package/dist/Verbs/GetMaafApp.d.ts.map +1 -0
- package/dist/Verbs/GetMaafApp.js +60 -0
- package/dist/Verbs/GetMaafApp.js.map +1 -0
- package/dist/Verbs/GetMaafBuildStatus.d.ts +6 -0
- package/dist/Verbs/GetMaafBuildStatus.d.ts.map +1 -0
- package/dist/Verbs/GetMaafBuildStatus.js +68 -0
- package/dist/Verbs/GetMaafBuildStatus.js.map +1 -0
- package/dist/Verbs/GetSettings.d.ts +12 -0
- package/dist/Verbs/GetSettings.d.ts.map +1 -0
- package/dist/Verbs/GetSettings.js +48 -0
- package/dist/Verbs/GetSettings.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 +172 -0
- package/dist/Verbs/Init.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 +70 -0
- package/dist/Verbs/ListConnectionReferences.js.map +1 -0
- package/dist/Verbs/ListConnectorActions.d.ts +6 -0
- package/dist/Verbs/ListConnectorActions.d.ts.map +1 -0
- package/dist/Verbs/ListConnectorActions.js +79 -0
- package/dist/Verbs/ListConnectorActions.js.map +1 -0
- package/dist/Verbs/ListConnectors.d.ts +6 -0
- package/dist/Verbs/ListConnectors.d.ts.map +1 -0
- package/dist/Verbs/ListConnectors.js +66 -0
- package/dist/Verbs/ListConnectors.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 +66 -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/ListMaafApps.d.ts +71 -0
- package/dist/Verbs/ListMaafApps.d.ts.map +1 -0
- package/dist/Verbs/ListMaafApps.js +168 -0
- package/dist/Verbs/ListMaafApps.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/Login.d.ts +6 -0
- package/dist/Verbs/Login.d.ts.map +1 -0
- package/dist/Verbs/Login.js +28 -0
- package/dist/Verbs/Login.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/MaafAppPermissions.d.ts +23 -0
- package/dist/Verbs/MaafAppPermissions.d.ts.map +1 -0
- package/dist/Verbs/MaafAppPermissions.js +278 -0
- package/dist/Verbs/MaafAppPermissions.js.map +1 -0
- package/dist/Verbs/Pack.d.ts +38 -0
- package/dist/Verbs/Pack.d.ts.map +1 -0
- package/dist/Verbs/Pack.js +106 -0
- package/dist/Verbs/Pack.js.map +1 -0
- package/dist/Verbs/PushMaafApp.d.ts +6 -0
- package/dist/Verbs/PushMaafApp.d.ts.map +1 -0
- package/dist/Verbs/PushMaafApp.js +145 -0
- package/dist/Verbs/PushMaafApp.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 +72 -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 +99 -0
- package/dist/Verbs/RemoveFlow.js.map +1 -0
- package/dist/Verbs/SetSetting.d.ts +12 -0
- package/dist/Verbs/SetSetting.d.ts.map +1 -0
- package/dist/Verbs/SetSetting.js +142 -0
- package/dist/Verbs/SetSetting.js.map +1 -0
- package/dist/Verbs/ShareMaafApp.d.ts +12 -0
- package/dist/Verbs/ShareMaafApp.d.ts.map +1 -0
- package/dist/Verbs/ShareMaafApp.js +14 -0
- package/dist/Verbs/ShareMaafApp.js.map +1 -0
- package/dist/Verbs/ShowMaafApp.d.ts +94 -0
- package/dist/Verbs/ShowMaafApp.d.ts.map +1 -0
- package/dist/Verbs/ShowMaafApp.js +216 -0
- package/dist/Verbs/ShowMaafApp.js.map +1 -0
- package/dist/Verbs/TelemetrySettings.d.ts +8 -0
- package/dist/Verbs/TelemetrySettings.d.ts.map +1 -0
- package/dist/Verbs/TelemetrySettings.js +104 -0
- package/dist/Verbs/TelemetrySettings.js.map +1 -0
- package/dist/Verbs/UnshareMaafApp.d.ts +12 -0
- package/dist/Verbs/UnshareMaafApp.d.ts.map +1 -0
- package/dist/Verbs/UnshareMaafApp.js +14 -0
- package/dist/Verbs/UnshareMaafApp.js.map +1 -0
- package/dist/Verbs/VerbConstants.d.ts +433 -0
- package/dist/Verbs/VerbConstants.d.ts.map +1 -0
- package/dist/Verbs/VerbConstants.js +403 -0
- package/dist/Verbs/VerbConstants.js.map +1 -0
- package/dist/Verbs/index.d.ts +40 -0
- package/dist/Verbs/index.d.ts.map +1 -0
- package/dist/Verbs/index.js +40 -0
- package/dist/Verbs/index.js.map +1 -0
- package/package.json +43 -3
package/dist/FS/CliFs.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
export class CliFS {
|
|
4
|
+
cwd;
|
|
5
|
+
constructor(config) {
|
|
6
|
+
// Normalize and validate cwd
|
|
7
|
+
this.cwd = path.resolve(config.cwd);
|
|
8
|
+
if (!fs.existsSync(this.cwd)) {
|
|
9
|
+
throw new Error(`Current working directory does not exist: ${this.cwd}`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
async rmdir(dirPath) {
|
|
13
|
+
const normalizedPath = this.validateWritePath(dirPath);
|
|
14
|
+
await fs.promises.rm(normalizedPath, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Normalize and resolve a path within the VFS context
|
|
18
|
+
*/
|
|
19
|
+
normalizePath(inputPath) {
|
|
20
|
+
if (path.isAbsolute(inputPath)) {
|
|
21
|
+
return path.resolve(inputPath);
|
|
22
|
+
}
|
|
23
|
+
return path.resolve(this.cwd, inputPath);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validate path for read access
|
|
27
|
+
*/
|
|
28
|
+
validateReadPath(inputPath) {
|
|
29
|
+
const normalizedPath = this.normalizePath(inputPath);
|
|
30
|
+
return normalizedPath;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Validate path for write access
|
|
34
|
+
*/
|
|
35
|
+
validateWritePath(inputPath) {
|
|
36
|
+
const normalizedPath = this.normalizePath(inputPath);
|
|
37
|
+
return normalizedPath;
|
|
38
|
+
}
|
|
39
|
+
// VFS Interface Implementation
|
|
40
|
+
getCwd() {
|
|
41
|
+
return this.cwd;
|
|
42
|
+
}
|
|
43
|
+
getAbsolutePath(relativePath) {
|
|
44
|
+
return this.normalizePath(relativePath);
|
|
45
|
+
}
|
|
46
|
+
async readFile(inputPath, encoding = 'utf-8') {
|
|
47
|
+
const normalizedPath = this.validateReadPath(inputPath);
|
|
48
|
+
try {
|
|
49
|
+
return await fs.promises.readFile(normalizedPath, encoding);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error instanceof Error) {
|
|
53
|
+
if (error.code === 'ENOENT') {
|
|
54
|
+
throw new Error(`File not found: ${normalizedPath}`);
|
|
55
|
+
}
|
|
56
|
+
throw new Error(`Failed to read file: ${error.message}`);
|
|
57
|
+
}
|
|
58
|
+
throw new Error('Unknown error occurred while reading file');
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async writeFile(inputPath, content, options = {}) {
|
|
62
|
+
const normalizedPath = this.validateWritePath(inputPath);
|
|
63
|
+
const { createDirectories = true, encoding = 'utf-8' } = options;
|
|
64
|
+
// Create parent directories if needed
|
|
65
|
+
if (createDirectories) {
|
|
66
|
+
const parentDir = path.dirname(normalizedPath);
|
|
67
|
+
if (!fs.existsSync(parentDir)) {
|
|
68
|
+
await fs.promises.mkdir(parentDir, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
await fs.promises.writeFile(normalizedPath, content, { encoding });
|
|
72
|
+
}
|
|
73
|
+
async appendFile(inputPath, content) {
|
|
74
|
+
const normalizedPath = this.validateWritePath(inputPath);
|
|
75
|
+
await fs.promises.appendFile(normalizedPath, content, 'utf-8');
|
|
76
|
+
}
|
|
77
|
+
async readdir(inputPath) {
|
|
78
|
+
const normalizedPath = this.validateReadPath(inputPath);
|
|
79
|
+
return await fs.promises.readdir(normalizedPath);
|
|
80
|
+
}
|
|
81
|
+
async mkdir(inputPath, options = {}) {
|
|
82
|
+
const normalizedPath = this.validateWritePath(inputPath);
|
|
83
|
+
await fs.promises.mkdir(normalizedPath, options);
|
|
84
|
+
}
|
|
85
|
+
async exists(inputPath) {
|
|
86
|
+
const normalizedPath = this.normalizePath(inputPath);
|
|
87
|
+
// Don't check permissions for existence checks - just normalize the path
|
|
88
|
+
try {
|
|
89
|
+
await fs.promises.stat(normalizedPath);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async stat(inputPath) {
|
|
97
|
+
const normalizedPath = this.validateReadPath(inputPath);
|
|
98
|
+
const stats = await fs.promises.stat(normalizedPath);
|
|
99
|
+
return {
|
|
100
|
+
isFile: () => stats.isFile(),
|
|
101
|
+
isDirectory: () => stats.isDirectory(),
|
|
102
|
+
size: stats.size,
|
|
103
|
+
mtime: stats.mtime,
|
|
104
|
+
ctime: stats.ctime,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
async isFile(inputPath) {
|
|
108
|
+
const stats = await this.stat(inputPath);
|
|
109
|
+
return stats.isFile();
|
|
110
|
+
}
|
|
111
|
+
async isDirectory(inputPath) {
|
|
112
|
+
const stats = await this.stat(inputPath);
|
|
113
|
+
return stats.isDirectory();
|
|
114
|
+
}
|
|
115
|
+
// Path operation methods (delegate to Node.js path module)
|
|
116
|
+
resolve(...paths) {
|
|
117
|
+
return path.resolve(...paths);
|
|
118
|
+
}
|
|
119
|
+
join(...paths) {
|
|
120
|
+
return path.join(...paths);
|
|
121
|
+
}
|
|
122
|
+
relative(from, to) {
|
|
123
|
+
return path.relative(from, to);
|
|
124
|
+
}
|
|
125
|
+
basename(inputPath) {
|
|
126
|
+
return path.basename(inputPath);
|
|
127
|
+
}
|
|
128
|
+
dirname(inputPath) {
|
|
129
|
+
return path.dirname(inputPath);
|
|
130
|
+
}
|
|
131
|
+
unlink(inputPath) {
|
|
132
|
+
const normalizedPath = this.validateWritePath(inputPath);
|
|
133
|
+
return fs.promises.unlink(normalizedPath);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=CliFs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliFs.js","sourceRoot":"","sources":["../../src/FS/CliFs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import type { IHttpClient, RequestConfig, Response as HttpClientResponse } from '@microsoft/apps-actions';
|
|
5
|
+
import type { IAuthenticationProvider } from '../Types/Cli.types.js';
|
|
6
|
+
import type { IURLProxy } from './Proxy.js';
|
|
7
|
+
export declare class CliHttpClient implements IHttpClient {
|
|
8
|
+
private _authenticationProvider;
|
|
9
|
+
private _urlProxies;
|
|
10
|
+
private _inflight;
|
|
11
|
+
private _spinner;
|
|
12
|
+
constructor(_authenticationProvider: IAuthenticationProvider, _urlProxies?: IURLProxy[]);
|
|
13
|
+
get<T = unknown>(url: string, config?: RequestConfig): Promise<HttpClientResponse<T>>;
|
|
14
|
+
post<T = unknown>(url: string, config?: RequestConfig): Promise<HttpClientResponse<T>>;
|
|
15
|
+
patch<T = unknown>(url: string, config?: RequestConfig): Promise<HttpClientResponse<T>>;
|
|
16
|
+
put<T = unknown>(url: string, config?: RequestConfig): Promise<HttpClientResponse<T>>;
|
|
17
|
+
delete<T = void>(url: string, config?: RequestConfig): Promise<HttpClientResponse<T>>;
|
|
18
|
+
private _sendRequestAsync;
|
|
19
|
+
private _startSpinner;
|
|
20
|
+
private _stopSpinner;
|
|
21
|
+
private _parseResponse;
|
|
22
|
+
private _transformHeaders;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=CliHttpClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliHttpClient.d.ts","sourceRoot":"","sources":["../../src/HttpClient/CliHttpClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,QAAQ,IAAI,kBAAkB,EAC/B,MAAM,yBAAyB,CAAC;AAMjC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,qBAAa,aAAc,YAAW,WAAW;IAK7C,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,WAAW;IALrB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAoB;gBAG1B,uBAAuB,EAAE,uBAAuB,EAChD,WAAW,GAAE,SAAS,EAAO;IAG1B,GAAG,CAAC,CAAC,GAAG,OAAO,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAGpB,IAAI,CAAC,CAAC,GAAG,OAAO,EAC3B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAGpB,KAAK,CAAC,CAAC,GAAG,OAAO,EAC5B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAGpB,GAAG,CAAC,CAAC,GAAG,OAAO,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAGpB,MAAM,CAAC,CAAC,GAAG,IAAI,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAInB,iBAAiB;IAsE/B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;YAON,cAAc;YAkBd,iBAAiB;CAOhC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { encodeBody, HttpClientError, parseServerErrorCode } from '@microsoft/apps-common/services';
|
|
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
|
+
import { CliSpinner } from '../Utils/Spinner.js';
|
|
10
|
+
export class CliHttpClient {
|
|
11
|
+
_authenticationProvider;
|
|
12
|
+
_urlProxies;
|
|
13
|
+
_inflight = 0;
|
|
14
|
+
_spinner = new CliSpinner();
|
|
15
|
+
constructor(_authenticationProvider, _urlProxies = []) {
|
|
16
|
+
this._authenticationProvider = _authenticationProvider;
|
|
17
|
+
this._urlProxies = _urlProxies;
|
|
18
|
+
}
|
|
19
|
+
async get(url, config) {
|
|
20
|
+
return this._sendRequestAsync(url, 'GET', config);
|
|
21
|
+
}
|
|
22
|
+
async post(url, config) {
|
|
23
|
+
return this._sendRequestAsync(url, 'POST', config);
|
|
24
|
+
}
|
|
25
|
+
async patch(url, config) {
|
|
26
|
+
return this._sendRequestAsync(url, 'PATCH', config);
|
|
27
|
+
}
|
|
28
|
+
async put(url, config) {
|
|
29
|
+
return this._sendRequestAsync(url, 'PUT', config);
|
|
30
|
+
}
|
|
31
|
+
async delete(url, config) {
|
|
32
|
+
return this._sendRequestAsync(url, 'DELETE', config);
|
|
33
|
+
}
|
|
34
|
+
async _sendRequestAsync(url, method, config) {
|
|
35
|
+
this._startSpinner();
|
|
36
|
+
try {
|
|
37
|
+
const headers = config?.headers || {};
|
|
38
|
+
if (config?.authResource) {
|
|
39
|
+
const token = await this._authenticationProvider.getAccessTokenForResource(config.authResource);
|
|
40
|
+
headers.Authorization = `Bearer ${token}`;
|
|
41
|
+
}
|
|
42
|
+
if (config?.contentType) {
|
|
43
|
+
headers['Content-Type'] = config.contentType;
|
|
44
|
+
}
|
|
45
|
+
else if (!headers['Content-Type']) {
|
|
46
|
+
headers['Content-Type'] = 'application/json';
|
|
47
|
+
}
|
|
48
|
+
headers[MS_CLIENT_REQUESTID] = randomUUID();
|
|
49
|
+
const bodyContent = encodeBody(config?.body, headers['Content-Type']);
|
|
50
|
+
const requestOptions = {
|
|
51
|
+
method,
|
|
52
|
+
headers,
|
|
53
|
+
body: bodyContent,
|
|
54
|
+
};
|
|
55
|
+
for (const proxy of this._urlProxies) {
|
|
56
|
+
url = await proxy.proxy(url);
|
|
57
|
+
}
|
|
58
|
+
const response = await fetch(url, requestOptions);
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
const correlationId = response.headers.get('x-ms-correlation-id');
|
|
61
|
+
const correlationSuffix = correlationId ? ` (correlation ID: ${correlationId})` : '';
|
|
62
|
+
const errorBody = await response.text();
|
|
63
|
+
throw new HttpClientError(`HTTP error status: ${response.status} for ${method} ${url}${correlationSuffix}: ${errorBody}`, {
|
|
64
|
+
status: response.status,
|
|
65
|
+
code: parseServerErrorCode(errorBody),
|
|
66
|
+
body: errorBody,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const data = await this._parseResponse(response);
|
|
70
|
+
return {
|
|
71
|
+
data,
|
|
72
|
+
status: response.status,
|
|
73
|
+
headers: await this._transformHeaders(response.headers),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
throw enhanceNetworkError(error, method, url);
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
this._stopSpinner();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
_startSpinner() {
|
|
84
|
+
this._inflight++;
|
|
85
|
+
if (this._inflight === 1 && getSettings().interactive) {
|
|
86
|
+
this._spinner.start();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
_stopSpinner() {
|
|
90
|
+
this._inflight--;
|
|
91
|
+
if (this._inflight === 0 && getSettings().interactive) {
|
|
92
|
+
this._spinner.stop();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async _parseResponse(response) {
|
|
96
|
+
const contentType = response.headers.get('content-type');
|
|
97
|
+
const responseText = await response.text();
|
|
98
|
+
// Handle empty responses or non-JSON content
|
|
99
|
+
if (!responseText || responseText.trim() === '') {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
else if (contentType && contentType.includes('application/json')) {
|
|
103
|
+
try {
|
|
104
|
+
return JSON.parse(responseText);
|
|
105
|
+
}
|
|
106
|
+
catch (parseError) {
|
|
107
|
+
throw new Error(`Failed to parse JSON response: ${parseError}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
return responseText;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async _transformHeaders(headers) {
|
|
115
|
+
const result = {};
|
|
116
|
+
headers.forEach((value, key) => {
|
|
117
|
+
result[key] = value;
|
|
118
|
+
});
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# 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,11 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { type Region } from '@microsoft/apps-common/services';
|
|
5
|
+
import type { IURLProxy } from './Proxy.js';
|
|
6
|
+
export declare class OrchardProxy implements IURLProxy {
|
|
7
|
+
private _resourceList;
|
|
8
|
+
constructor(region: Region);
|
|
9
|
+
proxy(url: string): Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=OrchardProxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrchardProxy.d.ts","sourceRoot":"","sources":["../../src/HttpClient/OrchardProxy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,MAAM,EAA+B,MAAM,iCAAiC,CAAC;AAG3F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,qBAAa,YAAa,YAAW,SAAS;IAC5C,OAAO,CAAC,aAAa,CAAa;gBACtB,MAAM,EAAE,MAAM;IAGb,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAcjD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { RESOURCE_MAP } from '@microsoft/apps-common/services';
|
|
5
|
+
import { getCliEnvVar } from '../Utils/EnvVars.js';
|
|
6
|
+
export class OrchardProxy {
|
|
7
|
+
_resourceList;
|
|
8
|
+
constructor(region) {
|
|
9
|
+
this._resourceList = RESOURCE_MAP[region];
|
|
10
|
+
}
|
|
11
|
+
async proxy(url) {
|
|
12
|
+
const origin = new URL(url).origin;
|
|
13
|
+
const match = this._resourceList.find((r) => r.pattern.test(origin));
|
|
14
|
+
if (match) {
|
|
15
|
+
const prefix = match.type === 'apihub'
|
|
16
|
+
? getCliEnvVar('CONFIG_PROXY_APIHUB_URL')
|
|
17
|
+
: getCliEnvVar('CONFIG_PROXY_PPAPI_URL');
|
|
18
|
+
if (prefix) {
|
|
19
|
+
return `${prefix}${prefix.endsWith('/') ? '' : '/'}${url}`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return url;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=OrchardProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OrchardProxy.js","sourceRoot":"","sources":["../../src/HttpClient/OrchardProxy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAA8B,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,MAAM,OAAO,YAAY;IACf,aAAa,CAAa;IAClC,YAAY,MAAc;QACxB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IACM,KAAK,CAAC,KAAK,CAAC,GAAW;QAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,QAAQ;gBACrB,CAAC,CAAC,YAAY,CAAC,yBAAyB,CAAC;gBACzC,CAAC,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Proxy.d.ts","sourceRoot":"","sources":["../../src/HttpClient/Proxy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Proxy.js","sourceRoot":"","sources":["../../src/HttpClient/Proxy.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import type { IHttpClient } from '@microsoft/apps-actions';
|
|
5
|
+
import type { ILogger, ScenarioTracker } from '@microsoft/apps-common/telemetry';
|
|
6
|
+
import type { CliSettings, IAuthenticationProvider } from '../Types/Cli.types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Logger implementation for the CLI
|
|
9
|
+
* The logger depends on the CLISettings, HttpClient and authenticationProvider to initialize the OneDS writer
|
|
10
|
+
*/
|
|
11
|
+
export declare class CliLogger implements ILogger {
|
|
12
|
+
private _telemetryWriters;
|
|
13
|
+
private _oneDSConfig?;
|
|
14
|
+
private constructor();
|
|
15
|
+
static create(cliSettings: CliSettings, httpClient: IHttpClient): Promise<CliLogger>;
|
|
16
|
+
/**
|
|
17
|
+
* Initialize OneDS telemetry after authentication is ready.
|
|
18
|
+
* Must be called after authenticationProvider.initAsync() completes.
|
|
19
|
+
*/
|
|
20
|
+
initializeTelemetry(authenticationProvider: IAuthenticationProvider): Promise<void>;
|
|
21
|
+
setCustomDimension(_key: string, _value: string): void;
|
|
22
|
+
trackActivityEvent(eventName: string, eventData?: object): void;
|
|
23
|
+
trackErrorEvent(eventName: string, eventData?: object): void;
|
|
24
|
+
trackScenario(eventName: string, eventData?: object): ScenarioTracker;
|
|
25
|
+
trackVerboseEvent(_name: string, _properties?: object): void;
|
|
26
|
+
setDefaultProperty(_name: string, _value: string): void;
|
|
27
|
+
identifyUser(_identity: {
|
|
28
|
+
userId?: string;
|
|
29
|
+
tenantId?: string;
|
|
30
|
+
}): void;
|
|
31
|
+
get sessionId(): string | undefined;
|
|
32
|
+
set sessionId(_value: string);
|
|
33
|
+
flush(): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
//# 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,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAIjF,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EAExB,MAAM,oBAAoB,CAAC;AA2F5B;;;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;IAiCrB;;;OAGG;IACU,mBAAmB,CAAC,sBAAsB,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDzF,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,eAAe;IAqBrE,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5D,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIvD,YAAY,CAAC,SAAS,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI5E,IAAW,SAAS,IAAI,MAAM,GAAG,SAAS,CAEzC;IAED,IAAW,SAAS,CAAC,MAAM,EAAE,MAAM,EAElC;IAEM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { getEnvironmentByName, initializePlayerServices } from '@microsoft/apps-actions';
|
|
5
|
+
import { Clouds, cloudToRegion } from '@microsoft/apps-common/services';
|
|
6
|
+
import { randomUUID } from 'crypto';
|
|
7
|
+
import packageJson from '../../package.json' with { type: 'json' };
|
|
8
|
+
import { printError } from '../Utils/ConsoleOutput.js';
|
|
9
|
+
import { ConsoleWriter } from './ConsoleWriter.js';
|
|
10
|
+
import { EUGeoRegions } from './Constants.js';
|
|
11
|
+
import { resolveUserTelemetrySettings } from './LoggerSettings.js';
|
|
12
|
+
import { OneDSWriter } from './OneDSWriter.js';
|
|
13
|
+
function stringifyErrorWithStack(error) {
|
|
14
|
+
if (!error)
|
|
15
|
+
return undefined;
|
|
16
|
+
if (error instanceof Error) {
|
|
17
|
+
return error.stack ?? `${error.name}: ${error.message}`;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
return JSON.stringify(error);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return String(error);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Utility method to create a ScenarioTracker
|
|
28
|
+
*
|
|
29
|
+
* @param {ITelemetryWriter[]} telemetryWriters
|
|
30
|
+
* @param {string} name
|
|
31
|
+
* @param {object} [data]
|
|
32
|
+
* @returns {ScenarioTracker}
|
|
33
|
+
*/
|
|
34
|
+
function createScenarioLogger(telemetryWriters, name, data) {
|
|
35
|
+
const scenarioGuid = randomUUID();
|
|
36
|
+
const _start = Date.now();
|
|
37
|
+
try {
|
|
38
|
+
telemetryWriters.forEach((writer) => writer.startScenario(name, { scenarioGuid, ...data, scenarioStartTime: _start }));
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
42
|
+
}
|
|
43
|
+
const base = {
|
|
44
|
+
complete: (completeData) => {
|
|
45
|
+
try {
|
|
46
|
+
telemetryWriters.forEach((writer) => writer.completeScenario(name, {
|
|
47
|
+
scenarioGuid,
|
|
48
|
+
elapsedTime: Date.now() - _start,
|
|
49
|
+
totalElapsedTime: Date.now() - _start,
|
|
50
|
+
...completeData,
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
failure: (error, failureData) => {
|
|
58
|
+
try {
|
|
59
|
+
telemetryWriters.forEach((writer) => writer.scenarioFailed(name, {
|
|
60
|
+
scenarioGuid,
|
|
61
|
+
elapsedTime: Date.now() - _start,
|
|
62
|
+
totalElapsedTime: Date.now() - _start,
|
|
63
|
+
error: stringifyErrorWithStack(error),
|
|
64
|
+
...failureData,
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
completeWithError: (dataWithErr) => {
|
|
72
|
+
try {
|
|
73
|
+
telemetryWriters.forEach((writer) => writer.scenarioCompletedWithError(name, {
|
|
74
|
+
scenarioGuid,
|
|
75
|
+
elapsedTime: Date.now() - _start,
|
|
76
|
+
totalElapsedTime: Date.now() - _start,
|
|
77
|
+
...dataWithErr,
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
return base;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Logger implementation for the CLI
|
|
89
|
+
* The logger depends on the CLISettings, HttpClient and authenticationProvider to initialize the OneDS writer
|
|
90
|
+
*/
|
|
91
|
+
export class CliLogger {
|
|
92
|
+
_telemetryWriters = [];
|
|
93
|
+
_oneDSConfig;
|
|
94
|
+
constructor(telemetryWriters) {
|
|
95
|
+
this._telemetryWriters = telemetryWriters;
|
|
96
|
+
}
|
|
97
|
+
static async create(cliSettings, httpClient) {
|
|
98
|
+
const environmentId = cliSettings.appConfig?.environmentId;
|
|
99
|
+
const configCloud = cliSettings.appConfig?.cloud;
|
|
100
|
+
const region = configCloud && Clouds.includes(configCloud)
|
|
101
|
+
? cloudToRegion(configCloud)
|
|
102
|
+
: undefined;
|
|
103
|
+
const appId = cliSettings.appConfig?.appId;
|
|
104
|
+
const sessionId = randomUUID();
|
|
105
|
+
const telemetryWriters = [];
|
|
106
|
+
const userTelemetrySettings = resolveUserTelemetrySettings();
|
|
107
|
+
if (userTelemetrySettings.console) {
|
|
108
|
+
telemetryWriters.push(new ConsoleWriter());
|
|
109
|
+
}
|
|
110
|
+
const instance = new CliLogger(telemetryWriters);
|
|
111
|
+
if (userTelemetrySettings.remote && region && environmentId) {
|
|
112
|
+
// Store config for deferred initialization via initializeTelemetry()
|
|
113
|
+
instance._oneDSConfig = {
|
|
114
|
+
sessionId,
|
|
115
|
+
region,
|
|
116
|
+
environmentId,
|
|
117
|
+
appId,
|
|
118
|
+
httpClient,
|
|
119
|
+
cliSettings,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return instance;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Initialize OneDS telemetry after authentication is ready.
|
|
126
|
+
* Must be called after authenticationProvider.initAsync() completes.
|
|
127
|
+
*/
|
|
128
|
+
async initializeTelemetry(authenticationProvider) {
|
|
129
|
+
if (!this._oneDSConfig) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const { sessionId, region, environmentId, appId, httpClient, cliSettings } = this._oneDSConfig;
|
|
133
|
+
this._oneDSConfig = undefined;
|
|
134
|
+
try {
|
|
135
|
+
// Initialize player services to get environment metadata
|
|
136
|
+
initializePlayerServices({
|
|
137
|
+
httpClient,
|
|
138
|
+
environmentName: cliSettings.appConfig?.environmentId || 'default',
|
|
139
|
+
region: (() => {
|
|
140
|
+
const c = cliSettings.appConfig?.cloud;
|
|
141
|
+
return c && Clouds.includes(c)
|
|
142
|
+
? cloudToRegion(c)
|
|
143
|
+
: cloudToRegion('public');
|
|
144
|
+
})(),
|
|
145
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
146
|
+
});
|
|
147
|
+
const metadata = await getEnvironmentByName(environmentId);
|
|
148
|
+
let telemetryLocation = 'global';
|
|
149
|
+
if (metadata?.properties?.location && EUGeoRegions.has(metadata.properties.location)) {
|
|
150
|
+
telemetryLocation = 'eu';
|
|
151
|
+
}
|
|
152
|
+
this._telemetryWriters.push(new OneDSWriter(sessionId, region, telemetryLocation, environmentId, appId ?? '', metadata?.properties?.cluster?.geoShortName, packageJson.version, cliSettings.source));
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
printError(`CliLogger: failed to initialize OneDS telemetry writer: ${String(error)}`);
|
|
156
|
+
}
|
|
157
|
+
if (authenticationProvider.getUserTenantId()) {
|
|
158
|
+
// At this point if the auth provider has fetched a token, we can set the tenantId dimension
|
|
159
|
+
this.setCustomDimension('tenantId', authenticationProvider.getUserTenantId());
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
setCustomDimension(_key, _value) {
|
|
163
|
+
try {
|
|
164
|
+
if (!_key || !_value) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
this._telemetryWriters.forEach((writer) => {
|
|
168
|
+
writer.setCustomDimension(_key, _value);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
trackActivityEvent(eventName, eventData) {
|
|
176
|
+
try {
|
|
177
|
+
if (this._telemetryWriters.length === 0) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
this._telemetryWriters.forEach((writer) => writer.trackActivityEvent(eventName, eventData));
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
trackErrorEvent(eventName, eventData) {
|
|
187
|
+
try {
|
|
188
|
+
if (this._telemetryWriters.length === 0) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
this._telemetryWriters.forEach((writer) => writer.trackErrorEvent(eventName, eventData));
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
trackScenario(eventName, eventData) {
|
|
198
|
+
try {
|
|
199
|
+
if (this._telemetryWriters.length === 0) {
|
|
200
|
+
// Return a no-op scenario so callers don't have to check telemetry state
|
|
201
|
+
return {
|
|
202
|
+
complete: () => undefined,
|
|
203
|
+
failure: () => undefined,
|
|
204
|
+
completeWithError: () => undefined,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
return createScenarioLogger(this._telemetryWriters, eventName, eventData);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// No-op. Telemetry failures should not block CLI operations
|
|
211
|
+
return {
|
|
212
|
+
complete: () => undefined,
|
|
213
|
+
failure: () => undefined,
|
|
214
|
+
completeWithError: () => undefined,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
trackVerboseEvent(_name, _properties) {
|
|
219
|
+
// Verbose events are intentionally suppressed in the CLI logger
|
|
220
|
+
}
|
|
221
|
+
setDefaultProperty(_name, _value) {
|
|
222
|
+
// No-op — CLI does not use default telemetry properties
|
|
223
|
+
}
|
|
224
|
+
identifyUser(_identity) {
|
|
225
|
+
// No-op — CLI identifies users via setCustomDimension
|
|
226
|
+
}
|
|
227
|
+
get sessionId() {
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
230
|
+
set sessionId(_value) {
|
|
231
|
+
// No-op
|
|
232
|
+
}
|
|
233
|
+
flush() {
|
|
234
|
+
return Promise.all(this._telemetryWriters.map((writer) => writer.flush())).then(() => undefined);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=CliLogger.js.map
|