@microsoft/managed-apps-cli 0.5.0 → 0.6.1
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 +40 -15
- package/dist/Authentication/EnvironmentVariableAuthenticationProvider.d.ts +26 -0
- package/dist/Authentication/EnvironmentVariableAuthenticationProvider.d.ts.map +1 -0
- package/dist/Authentication/EnvironmentVariableAuthenticationProvider.js +31 -0
- package/dist/Authentication/EnvironmentVariableAuthenticationProvider.js.map +1 -0
- package/dist/Cli.d.ts.map +1 -1
- package/dist/Cli.js +68 -22
- package/dist/Cli.js.map +1 -1
- package/dist/Constants/CommandRegistry.d.ts.map +1 -1
- package/dist/Constants/CommandRegistry.js +16 -1
- package/dist/Constants/CommandRegistry.js.map +1 -1
- package/dist/Constants/HelpStrings.d.ts +14 -0
- package/dist/Constants/HelpStrings.d.ts.map +1 -1
- package/dist/Constants/HelpStrings.js +24 -2
- package/dist/Constants/HelpStrings.js.map +1 -1
- package/dist/Constants.d.ts +2 -0
- package/dist/Constants.d.ts.map +1 -1
- package/dist/Constants.js +2 -0
- package/dist/Constants.js.map +1 -1
- package/dist/Errors/GitHubErrorMap.d.ts +39 -0
- package/dist/Errors/GitHubErrorMap.d.ts.map +1 -0
- package/dist/Errors/GitHubErrorMap.js +182 -0
- package/dist/Errors/GitHubErrorMap.js.map +1 -0
- package/dist/HttpClient/CliHttpClient.d.ts +8 -3
- package/dist/HttpClient/CliHttpClient.d.ts.map +1 -1
- package/dist/HttpClient/CliHttpClient.js +33 -13
- package/dist/HttpClient/CliHttpClient.js.map +1 -1
- package/dist/Types/Command.types.d.ts +1 -1
- package/dist/Types/Command.types.d.ts.map +1 -1
- package/dist/Utils/ConsoleOutput.d.ts +6 -0
- package/dist/Utils/ConsoleOutput.d.ts.map +1 -1
- package/dist/Utils/ConsoleOutput.js +8 -0
- package/dist/Utils/ConsoleOutput.js.map +1 -1
- package/dist/Utils/EnvVars.d.ts +1 -1
- package/dist/Utils/EnvVars.d.ts.map +1 -1
- package/dist/Utils/EnvVars.js.map +1 -1
- package/dist/Utils/GitHubDcfFlow.d.ts +60 -0
- package/dist/Utils/GitHubDcfFlow.d.ts.map +1 -0
- package/dist/Utils/GitHubDcfFlow.js +166 -0
- package/dist/Utils/GitHubDcfFlow.js.map +1 -0
- package/dist/Utils/RepoUrl.d.ts +13 -0
- package/dist/Utils/RepoUrl.d.ts.map +1 -0
- package/dist/Utils/RepoUrl.js +6 -0
- package/dist/Utils/RepoUrl.js.map +1 -0
- package/dist/Verbs/AddFlow.d.ts.map +1 -1
- package/dist/Verbs/AddFlow.js +3 -2
- package/dist/Verbs/AddFlow.js.map +1 -1
- package/dist/Verbs/CreateMaafApp.d.ts +0 -1
- package/dist/Verbs/CreateMaafApp.d.ts.map +1 -1
- package/dist/Verbs/CreateMaafApp.js +19 -60
- package/dist/Verbs/CreateMaafApp.js.map +1 -1
- package/dist/Verbs/FindDataverseApi.js +15 -15
- package/dist/Verbs/FindDataverseApi.js.map +1 -1
- package/dist/Verbs/GetSettings.d.ts +1 -1
- package/dist/Verbs/GetSettings.js +1 -1
- package/dist/Verbs/MaafAppPermissions.d.ts +26 -6
- package/dist/Verbs/MaafAppPermissions.d.ts.map +1 -1
- package/dist/Verbs/MaafAppPermissions.js +189 -28
- package/dist/Verbs/MaafAppPermissions.js.map +1 -1
- package/dist/Verbs/RefreshDataSource.d.ts.map +1 -1
- package/dist/Verbs/RefreshDataSource.js +4 -3
- package/dist/Verbs/RefreshDataSource.js.map +1 -1
- package/dist/Verbs/RefreshGitAuth.d.ts +6 -0
- package/dist/Verbs/RefreshGitAuth.d.ts.map +1 -0
- package/dist/Verbs/RefreshGitAuth.js +153 -0
- package/dist/Verbs/RefreshGitAuth.js.map +1 -0
- package/dist/Verbs/RemoveFlow.d.ts.map +1 -1
- package/dist/Verbs/RemoveFlow.js +4 -3
- package/dist/Verbs/RemoveFlow.js.map +1 -1
- package/dist/Verbs/SetSetting.d.ts +1 -1
- package/dist/Verbs/SetSetting.js +1 -1
- package/dist/Verbs/VerbConstants.d.ts +22 -0
- package/dist/Verbs/VerbConstants.d.ts.map +1 -1
- package/dist/Verbs/VerbConstants.js +25 -0
- package/dist/Verbs/VerbConstants.js.map +1 -1
- package/dist/Verbs/index.d.ts +1 -0
- package/dist/Verbs/index.d.ts.map +1 -1
- package/dist/Verbs/index.js +1 -0
- package/dist/Verbs/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/Authentication/OrchardAuthenticationProvider.d.ts +0 -13
- package/dist/Authentication/OrchardAuthenticationProvider.d.ts.map +0 -1
- package/dist/Authentication/OrchardAuthenticationProvider.js +0 -30
- package/dist/Authentication/OrchardAuthenticationProvider.js.map +0 -1
- package/dist/HttpClient/OrchardProxy.d.ts +0 -11
- package/dist/HttpClient/OrchardProxy.d.ts.map +0 -1
- package/dist/HttpClient/OrchardProxy.js +0 -25
- package/dist/HttpClient/OrchardProxy.js.map +0 -1
- package/dist/HttpClient/Proxy.d.ts +0 -7
- package/dist/HttpClient/Proxy.d.ts.map +0 -1
- package/dist/HttpClient/Proxy.js +0 -5
- package/dist/HttpClient/Proxy.js.map +0 -1
|
@@ -5,19 +5,39 @@ import type { ArgumentProvider } from '../ArgumentProvider.js';
|
|
|
5
5
|
/** Selects between the share (put) and unshare (delete) execution paths. */
|
|
6
6
|
export type MaafAppPermissionsMode = 'share' | 'unshare';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* Selects which access level the caller wants to grant/revoke:
|
|
9
|
+
*
|
|
10
|
+
* - `play` — read-only access to the MAAF app itself (the `MicrosoftAppReader`
|
|
11
|
+
* role granted at the app scope via PowerApps RP).
|
|
12
|
+
* - `edit` — read + write access to the underlying git repository (the
|
|
13
|
+
* `RepositoryContributor` role granted at the repo scope via GRS).
|
|
14
|
+
*
|
|
15
|
+
* Each invocation targets exactly one access level; the two scopes are
|
|
16
|
+
* independent.
|
|
17
|
+
*/
|
|
18
|
+
export type MaafAppAccessLevel = 'play' | 'edit';
|
|
19
|
+
/**
|
|
20
|
+
* Implements `ms app share` and `ms app unshare` — adds or removes role
|
|
21
|
+
* assignments for AAD principals (users or groups) at either the MAAF app
|
|
22
|
+
* scope (play access) or the GRS repository scope (edit access), driven by
|
|
23
|
+
* the `--access` flag.
|
|
11
24
|
*
|
|
12
25
|
* Pipeline:
|
|
13
26
|
* 1. Register option schema for the chosen mode and run the verb (so `--help`
|
|
14
27
|
* works outside an init'd project).
|
|
15
28
|
* 2. Require a loaded `ms.config.json`.
|
|
16
|
-
* 3. Resolve `environmentId` (`--environment-id` flag wins; otherwise from config)
|
|
29
|
+
* 3. Resolve `environmentId` (`--environment-id` flag wins; otherwise from config),
|
|
30
|
+
* tenantId, and the requested access level (`--access play|edit`, default `play`).
|
|
17
31
|
* 4. Read the comma-separated principals positional; resolve email-shaped inputs
|
|
18
32
|
* to AAD object ids via Graph, pass GUID-shaped inputs through unchanged.
|
|
19
|
-
* 5.
|
|
20
|
-
* `
|
|
33
|
+
* 5. Dispatch to the matching share/unshare path:
|
|
34
|
+
* - `play` → MAAF `modifyRoleAssignments` (`MicrosoftAppReader` at app scope).
|
|
35
|
+
* - `edit` → fetch the app's `repositoryId` then GRS `modifyRoleAssignments`
|
|
36
|
+
* (`RepositoryContributor` at repo scope).
|
|
37
|
+
* For unshare, paginate the matching list endpoint and pass through the
|
|
38
|
+
* full `RoleAssignment[]` records on `delete` (the strict wire contract
|
|
39
|
+
* requires `roleAssignmentId`, which only the list endpoint provides).
|
|
40
|
+
* 6. Emit JSON or a human summary.
|
|
21
41
|
*/
|
|
22
42
|
export declare function executeMaafAppPermissionsAsync(argumentProvider: ArgumentProvider, mode: MaafAppPermissionsMode): Promise<void>;
|
|
23
43
|
//# sourceMappingURL=MaafAppPermissions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaafAppPermissions.d.ts","sourceRoot":"","sources":["../../src/Verbs/MaafAppPermissions.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"MaafAppPermissions.d.ts","sourceRoot":"","sources":["../../src/Verbs/MaafAppPermissions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwBH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAS5D,4EAA4E;AAC5E,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,CAAC;AAuBjD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,8BAA8B,CAClD,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA+Ef"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import { MaafAppReaderRoleName,
|
|
4
|
+
import { GrsRepositoryContributorRoleName, infoAsync, MaafAppReaderRoleName, modifyGrsRoleAssignmentsAsync, modifyMaafRoleAssignmentsAsync, resolvePrincipalByEmailAsync, unshareGrsRepoByPrincipalsAsync, unshareMaafAppByPrincipalsAsync, } from '@microsoft/managed-apps-actions';
|
|
5
5
|
import { AppConfigFileName } from '@microsoft/managed-apps-common/config';
|
|
6
6
|
import { HttpClientError } from '@microsoft/managed-apps-common/services';
|
|
7
7
|
import { getCliLogger, getSettings } from '../CliSettings.js';
|
|
@@ -12,19 +12,27 @@ import { UsageError } from '../Errors/CliError.js';
|
|
|
12
12
|
import { printInfo, printJsonSuccess, printSuccess, printWarning } from '../Utils/ConsoleOutput.js';
|
|
13
13
|
import { ShareMaafAppArguments, UnshareMaafAppArguments } from './VerbConstants.js';
|
|
14
14
|
/**
|
|
15
|
-
* Implements `ms app share` and `ms app unshare` — adds or removes
|
|
16
|
-
*
|
|
17
|
-
* scope
|
|
15
|
+
* Implements `ms app share` and `ms app unshare` — adds or removes role
|
|
16
|
+
* assignments for AAD principals (users or groups) at either the MAAF app
|
|
17
|
+
* scope (play access) or the GRS repository scope (edit access), driven by
|
|
18
|
+
* the `--access` flag.
|
|
18
19
|
*
|
|
19
20
|
* Pipeline:
|
|
20
21
|
* 1. Register option schema for the chosen mode and run the verb (so `--help`
|
|
21
22
|
* works outside an init'd project).
|
|
22
23
|
* 2. Require a loaded `ms.config.json`.
|
|
23
|
-
* 3. Resolve `environmentId` (`--environment-id` flag wins; otherwise from config)
|
|
24
|
+
* 3. Resolve `environmentId` (`--environment-id` flag wins; otherwise from config),
|
|
25
|
+
* tenantId, and the requested access level (`--access play|edit`, default `play`).
|
|
24
26
|
* 4. Read the comma-separated principals positional; resolve email-shaped inputs
|
|
25
27
|
* to AAD object ids via Graph, pass GUID-shaped inputs through unchanged.
|
|
26
|
-
* 5.
|
|
27
|
-
* `
|
|
28
|
+
* 5. Dispatch to the matching share/unshare path:
|
|
29
|
+
* - `play` → MAAF `modifyRoleAssignments` (`MicrosoftAppReader` at app scope).
|
|
30
|
+
* - `edit` → fetch the app's `repositoryId` then GRS `modifyRoleAssignments`
|
|
31
|
+
* (`RepositoryContributor` at repo scope).
|
|
32
|
+
* For unshare, paginate the matching list endpoint and pass through the
|
|
33
|
+
* full `RoleAssignment[]` records on `delete` (the strict wire contract
|
|
34
|
+
* requires `roleAssignmentId`, which only the list endpoint provides).
|
|
35
|
+
* 6. Emit JSON or a human summary.
|
|
28
36
|
*/
|
|
29
37
|
export async function executeMaafAppPermissionsAsync(argumentProvider, mode) {
|
|
30
38
|
configureOptionSchema(argumentProvider, mode);
|
|
@@ -41,6 +49,7 @@ export async function executeMaafAppPermissionsAsync(argumentProvider, mode) {
|
|
|
41
49
|
throw new UsageError('Unable to determine tenant ID. Ensure you are logged in.');
|
|
42
50
|
}
|
|
43
51
|
const appName = await resolveAppNameAsync(argumentProvider);
|
|
52
|
+
const access = parseAccessLevel(await argumentProvider.getOption('access'));
|
|
44
53
|
const inputs = parseInputs(argumentProvider.getPositionalArg(0));
|
|
45
54
|
if (inputs.length === 0) {
|
|
46
55
|
throw new UsageError('Provide at least one principal as a comma-separated list (AAD object IDs or email addresses).');
|
|
@@ -60,29 +69,117 @@ export async function executeMaafAppPermissionsAsync(argumentProvider, mode) {
|
|
|
60
69
|
if (failures.length > 0) {
|
|
61
70
|
printWarning(formatFailures(failures));
|
|
62
71
|
}
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
tenantId,
|
|
66
|
-
environmentId,
|
|
67
|
-
logger: getCliLogger(),
|
|
68
|
-
actionsParams: {
|
|
69
|
-
appName,
|
|
70
|
-
put: mode === 'share' ? entries : [],
|
|
71
|
-
delete: mode === 'unshare' ? entries : [],
|
|
72
|
-
},
|
|
73
|
-
});
|
|
72
|
+
const dispatch = mode === 'share' ? shareDispatchAsync : unshareDispatchAsync;
|
|
73
|
+
const outcome = await dispatch({ tenantId, environmentId, appName, access, refs });
|
|
74
74
|
if (argumentProvider.isJsonMode()) {
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
// Envelope semantics for this verb: `success: true` means the modify call
|
|
76
|
+
// reached the RP and returned. When some inputs failed to resolve before
|
|
77
|
+
// the modify, `partialFailure` is `true` and `warnings` lists the
|
|
78
|
+
// unresolved entries. Consumers requiring full success must check both
|
|
79
|
+
// `success === true && partialFailure === false`. `warnings` is always
|
|
80
|
+
// present (empty array on full success) so consumers can treat its
|
|
81
|
+
// length uniformly. The server response is spread flat into the envelope
|
|
82
|
+
// (matching every other verb that emits JSON) instead of nested under a
|
|
83
|
+
// `result` key. For unshare we also include the action-layer bookkeeping
|
|
84
|
+
// (`revokedCount`, `revokedPrincipalCount`, `notFound`, `skipped`) that
|
|
85
|
+
// would otherwise only appear in the human summary — so automation gets
|
|
86
|
+
// the same fidelity as text mode.
|
|
77
87
|
printJsonSuccess({
|
|
78
|
-
|
|
88
|
+
access,
|
|
79
89
|
partialFailure: failures.length > 0,
|
|
90
|
+
...outcome.result,
|
|
91
|
+
...(mode === 'unshare' && {
|
|
92
|
+
revokedCount: outcome.revokedCount ?? 0,
|
|
93
|
+
revokedPrincipalCount: outcome.revokedPrincipalCount ?? 0,
|
|
94
|
+
notFound: (outcome.notFound ?? []).map(toJsonRef),
|
|
95
|
+
skipped: (outcome.skipped ?? []).map(toJsonRef),
|
|
96
|
+
}),
|
|
80
97
|
warnings: failures,
|
|
81
98
|
});
|
|
82
99
|
}
|
|
83
100
|
else {
|
|
84
|
-
printSummary(appName, mode, refs.length,
|
|
101
|
+
printSummary({ appName, mode, access, inputCount: refs.length, outcome });
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async function shareDispatchAsync(inputs) {
|
|
105
|
+
const { tenantId, environmentId, appName, access, refs } = inputs;
|
|
106
|
+
if (access === 'play') {
|
|
107
|
+
const entries = refs.map(toMaafPermissionEntry);
|
|
108
|
+
const result = await modifyMaafRoleAssignmentsAsync({
|
|
109
|
+
tenantId,
|
|
110
|
+
environmentId,
|
|
111
|
+
logger: getCliLogger(),
|
|
112
|
+
actionsParams: { appName, put: entries, delete: [] },
|
|
113
|
+
});
|
|
114
|
+
return { result };
|
|
115
|
+
}
|
|
116
|
+
const repoId = await resolveRepositoryIdAsync({ tenantId, environmentId, appName });
|
|
117
|
+
const entries = refs.map(toGrsPermissionEntry);
|
|
118
|
+
const result = await modifyGrsRoleAssignmentsAsync({
|
|
119
|
+
tenantId,
|
|
120
|
+
environmentId,
|
|
121
|
+
logger: getCliLogger(),
|
|
122
|
+
actionsParams: { repoId, put: entries, delete: [] },
|
|
123
|
+
});
|
|
124
|
+
return { result };
|
|
125
|
+
}
|
|
126
|
+
async function unshareDispatchAsync(inputs) {
|
|
127
|
+
const { tenantId, environmentId, appName, access, refs } = inputs;
|
|
128
|
+
const principalIds = refs.map((r) => r.id);
|
|
129
|
+
const refsByPrincipalId = new Map(refs.map((r) => [r.id, r]));
|
|
130
|
+
const actionResult = access === 'play'
|
|
131
|
+
? await unshareMaafAppByPrincipalsAsync({
|
|
132
|
+
tenantId,
|
|
133
|
+
environmentId,
|
|
134
|
+
logger: getCliLogger(),
|
|
135
|
+
actionsParams: { appName, principalIds },
|
|
136
|
+
})
|
|
137
|
+
: await (async () => {
|
|
138
|
+
const repoId = await resolveRepositoryIdAsync({ tenantId, environmentId, appName });
|
|
139
|
+
return unshareGrsRepoByPrincipalsAsync({
|
|
140
|
+
tenantId,
|
|
141
|
+
environmentId,
|
|
142
|
+
logger: getCliLogger(),
|
|
143
|
+
actionsParams: { repoId, principalIds },
|
|
144
|
+
});
|
|
145
|
+
})();
|
|
146
|
+
return {
|
|
147
|
+
result: actionResult.result,
|
|
148
|
+
revokedCount: actionResult.revokedCount,
|
|
149
|
+
revokedPrincipalCount: actionResult.revokedPrincipalCount,
|
|
150
|
+
notFound: actionResult.notFoundPrincipalIds.map((id) => refsByPrincipalId.get(id) ?? { id, input: id }),
|
|
151
|
+
skipped: actionResult.skippedNullRoleAssignments.map((s) => refsByPrincipalId.get(s.principalObjectId) ??
|
|
152
|
+
{ id: s.principalObjectId, input: s.principalObjectId }),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Fetches the app's `repositoryId` via the info action. Used by the `edit`
|
|
157
|
+
* access paths to drive the GRS repo-scope share/unshare endpoints.
|
|
158
|
+
*/
|
|
159
|
+
async function resolveRepositoryIdAsync(args) {
|
|
160
|
+
const app = await infoAsync({
|
|
161
|
+
tenantId: args.tenantId,
|
|
162
|
+
environmentId: args.environmentId,
|
|
163
|
+
logger: getCliLogger(),
|
|
164
|
+
actionsParams: { appName: args.appName },
|
|
165
|
+
});
|
|
166
|
+
if (!app.repositoryId) {
|
|
167
|
+
throw new UsageError(`App '${args.appName}' has no associated repository, so edit access cannot be modified.`);
|
|
168
|
+
}
|
|
169
|
+
return app.repositoryId;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Parses the `--access` flag value. Defaults to `'play'` when omitted so the
|
|
173
|
+
* verb keeps its pre-flag behaviour for callers that haven't migrated. Throws
|
|
174
|
+
* a `UsageError` on any other value — Commander.js doesn't enforce enum
|
|
175
|
+
* membership by default and we want a precise error message.
|
|
176
|
+
*/
|
|
177
|
+
function parseAccessLevel(raw) {
|
|
178
|
+
const value = (raw ?? 'play').trim().toLowerCase();
|
|
179
|
+
if (value === 'play' || value === 'edit') {
|
|
180
|
+
return value;
|
|
85
181
|
}
|
|
182
|
+
throw new UsageError(`Unknown --access value '${raw}'. Use 'play' (default — app access) or 'edit' (repository access).`);
|
|
86
183
|
}
|
|
87
184
|
/**
|
|
88
185
|
* Splits a comma-separated string into a deduplicated, trimmed list of inputs.
|
|
@@ -230,7 +327,7 @@ function looksLikeEmail(input) {
|
|
|
230
327
|
* (when the user supplied one) keeps the wire payload self-describing for server
|
|
231
328
|
* logs even though the response strips it.
|
|
232
329
|
*/
|
|
233
|
-
function
|
|
330
|
+
function toMaafPermissionEntry(ref) {
|
|
234
331
|
return {
|
|
235
332
|
name: ref.displayName ?? ref.input,
|
|
236
333
|
properties: {
|
|
@@ -239,23 +336,80 @@ function toPermissionEntry(ref) {
|
|
|
239
336
|
},
|
|
240
337
|
};
|
|
241
338
|
}
|
|
339
|
+
/**
|
|
340
|
+
* Builds a `GrsRepoPermission` from a resolved reference for the `edit` access
|
|
341
|
+
* path. Mirrors {@link toMaafPermissionEntry} — same `name` semantics, same
|
|
342
|
+
* principal id passthrough — but targets the `RepositoryContributor` role
|
|
343
|
+
* at the GRS repository scope. The GRS `GrsPrincipal` shape has no `email`
|
|
344
|
+
* field (PPAuthZ only consumes the object id), so the email is dropped here
|
|
345
|
+
* even when the user originally provided one.
|
|
346
|
+
*/
|
|
347
|
+
function toGrsPermissionEntry(ref) {
|
|
348
|
+
return {
|
|
349
|
+
name: ref.displayName ?? ref.input,
|
|
350
|
+
properties: {
|
|
351
|
+
roleName: GrsRepositoryContributorRoleName,
|
|
352
|
+
principal: { id: ref.id },
|
|
353
|
+
},
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Shapes a `ResolvedRef` for the JSON envelope's `notFound` / `skipped` arrays.
|
|
358
|
+
* Strips the internal `input` field (which echoes the user's literal entry —
|
|
359
|
+
* useful for stderr warnings, but redundant in structured JSON where consumers
|
|
360
|
+
* already have the original list) and exposes only `id` plus a friendly
|
|
361
|
+
* `label` (Graph displayName when available, else the input).
|
|
362
|
+
*/
|
|
363
|
+
function toJsonRef(ref) {
|
|
364
|
+
return { id: ref.id, label: ref.displayName ?? ref.input };
|
|
365
|
+
}
|
|
242
366
|
/**
|
|
243
367
|
* For share, the granted count comes from the server echo (the spec lets the
|
|
244
368
|
* server dedupe or treat 409 "already exists" as success and echo the entry).
|
|
245
|
-
* For unshare, the count comes from the request because
|
|
246
|
-
*
|
|
369
|
+
* For unshare, the count comes from the request because neither endpoint
|
|
370
|
+
* populates `delete` on the response.
|
|
371
|
+
*
|
|
372
|
+
* The wording varies by access mode:
|
|
373
|
+
* - `play` → "play the app" / "play permissions"
|
|
374
|
+
* - `edit` → "edit the app" / "edit permissions"
|
|
375
|
+
*
|
|
376
|
+
* When unshare matched no existing assignments for some principals, an info
|
|
377
|
+
* line follows the success summary naming them — these are silent no-ops
|
|
378
|
+
* (the principal had no assignment to revoke), not failures.
|
|
247
379
|
*/
|
|
248
|
-
function printSummary(
|
|
380
|
+
function printSummary(args) {
|
|
381
|
+
const { appName, mode, access, inputCount, outcome } = args;
|
|
382
|
+
const accessVerb = access === 'play' ? 'play' : 'edit';
|
|
249
383
|
if (mode === 'share') {
|
|
384
|
+
const result = outcome.result;
|
|
250
385
|
const grantedCount = result.put?.length ?? 0;
|
|
251
386
|
if (grantedCount === 0) {
|
|
252
387
|
printInfo('No changes were applied.');
|
|
253
388
|
return;
|
|
254
389
|
}
|
|
255
|
-
printSuccess(`Shared app '${appName}' with ${grantedCount} ${pluralize('principal', grantedCount)}. They can now
|
|
390
|
+
printSuccess(`Shared app '${appName}' with ${grantedCount} ${pluralize('principal', grantedCount)}. They can now ${accessVerb} the app.`);
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
const revokedCount = outcome.revokedCount ?? 0;
|
|
394
|
+
const revokedPrincipalCount = outcome.revokedPrincipalCount ?? revokedCount;
|
|
395
|
+
if (revokedPrincipalCount === 0) {
|
|
396
|
+
// Every requested principal was already without an assignment — emit info
|
|
397
|
+
// rather than "Revoked ... for 0 principals" which reads like an error.
|
|
398
|
+
printInfo(`No ${accessVerb} assignments to revoke on '${appName}' — none of the ${inputCount} ${pluralize('principal', inputCount)} had existing access.`);
|
|
256
399
|
return;
|
|
257
400
|
}
|
|
258
|
-
printSuccess(`Revoked
|
|
401
|
+
printSuccess(`Revoked ${accessVerb} permissions for ${revokedPrincipalCount} ${pluralize('principal', revokedPrincipalCount)} on '${appName}'.`);
|
|
402
|
+
if (outcome.notFound && outcome.notFound.length > 0) {
|
|
403
|
+
const labels = outcome.notFound.map((r) => r.displayName ?? r.input).join(', ');
|
|
404
|
+
printInfo(`${outcome.notFound.length} ${pluralize('principal', outcome.notFound.length)} had no existing ${accessVerb} access (no-op): ${labels}`);
|
|
405
|
+
}
|
|
406
|
+
if (outcome.skipped && outcome.skipped.length > 0) {
|
|
407
|
+
// Matched-by-principal but the role assignment carried a null
|
|
408
|
+
// `roleDefinitionName`, so the action couldn't safely classify it.
|
|
409
|
+
// Surface it instead of letting the unshare silently no-op.
|
|
410
|
+
const labels = outcome.skipped.map((r) => r.displayName ?? r.input).join(', ');
|
|
411
|
+
printInfo(`${outcome.skipped.length} ${pluralize('principal', outcome.skipped.length)} had a role assignment with an unknown role definition; ${accessVerb} access was not modified for: ${labels}. Investigate via the role-assignments API.`);
|
|
412
|
+
}
|
|
259
413
|
}
|
|
260
414
|
function pluralize(noun, count) {
|
|
261
415
|
return count === 1 ? noun : `${noun}s`;
|
|
@@ -273,6 +427,13 @@ function configureOptionSchema(argumentProvider, mode) {
|
|
|
273
427
|
description: help.options.app,
|
|
274
428
|
optionalInNonInteractive: true,
|
|
275
429
|
},
|
|
430
|
+
{
|
|
431
|
+
flags: { key: args.Access.name },
|
|
432
|
+
env: args.Access.envVar,
|
|
433
|
+
default: args.Access.defaultValue,
|
|
434
|
+
description: help.options.access,
|
|
435
|
+
optionalInNonInteractive: true,
|
|
436
|
+
},
|
|
276
437
|
]);
|
|
277
438
|
}
|
|
278
439
|
//# sourceMappingURL=MaafAppPermissions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaafAppPermissions.js","sourceRoot":"","sources":["../../src/Verbs/MaafAppPermissions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MaafAppPermissions.js","sourceRoot":"","sources":["../../src/Verbs/MaafAppPermissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefreshDataSource.d.ts","sourceRoot":"","sources":["../../src/Verbs/RefreshDataSource.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"RefreshDataSource.d.ts","sourceRoot":"","sources":["../../src/Verbs/RefreshDataSource.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAQ5D,wBAAsB,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C9F"}
|
|
@@ -6,6 +6,7 @@ import { getCliLogger, getSettings } from '../CliSettings.js';
|
|
|
6
6
|
import { promptConfirm, promptText } from '../CliUtils.js';
|
|
7
7
|
import { CLI_BINARY_NAME } from '../Constants/CliConstants.js';
|
|
8
8
|
import { HelpStrings } from '../Constants/HelpStrings.js';
|
|
9
|
+
import { printError, printInfo, printSuccess } from '../Utils/ConsoleOutput.js';
|
|
9
10
|
import { RefreshDataSourceArguments } from './VerbConstants.js';
|
|
10
11
|
export async function refreshDataSourceAsync(argumentProvider) {
|
|
11
12
|
const settings = getSettings();
|
|
@@ -34,13 +35,13 @@ export async function refreshDataSourceAsync(argumentProvider) {
|
|
|
34
35
|
};
|
|
35
36
|
const result = await refreshDataSourceActionsAsync(config);
|
|
36
37
|
for (const dsName of result.succeeded) {
|
|
37
|
-
|
|
38
|
+
printSuccess(`'${dsName}' refreshed successfully.`);
|
|
38
39
|
}
|
|
39
40
|
for (const failure of result.failed) {
|
|
40
|
-
|
|
41
|
+
printError(`Failed to refresh '${failure.dataSourceName}': ${failure.error}`);
|
|
41
42
|
}
|
|
42
43
|
if (result.succeeded.length > 0 && result.failed.length === 0) {
|
|
43
|
-
|
|
44
|
+
printInfo(`Hint: Run 'npx ${CLI_BINARY_NAME} run' to test locally.`);
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
47
|
function createOptionSchema(argumentProvider) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefreshDataSource.js","sourceRoot":"","sources":["../../src/Verbs/RefreshDataSource.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,sBAAsB,EACtB,sBAAsB,IAAI,6BAA6B,GACxD,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,gBAAkC;IAC7E,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;IACvC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACrC,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAEjC,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAC;IACrD,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,yBAAyB,EAAE,CAAC;IAE5E,MAAM,iBAAiB,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAS,gBAAgB,CAAC,CAAC;IACrF,MAAM,cAAc,GAAG,iBAAiB,IAAI,SAAS,CAAC;IAEtD,MAAM,MAAM,GAA6B;QACvC,GAAG,EAAE,KAAK;QACV,YAAY,EAAE,sBAAsB;QACpC,UAAU,EAAE,gBAAgB,CAAC,aAAa,EAAE;QAC5C,MAAM,EAAE,mBAAmB,CAAC,MAAM;QAClC,eAAe,EAAE,mBAAmB,CAAC,eAAe;QACpD,cAAc,EAAE;YACd,aAAa,EAAE,UAAU,CAAC,aAAa;YACvC,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,WAAW,EAAE,UAAU,CAAC,WAAW;SACpC;QACD,MAAM,EAAE,YAAY,EAAE;QACtB,aAAa,EAAE;YACb,cAAc;SACf;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAE3D,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACtC,
|
|
1
|
+
{"version":3,"file":"RefreshDataSource.js","sourceRoot":"","sources":["../../src/Verbs/RefreshDataSource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import type { ArgumentProvider } from '../ArgumentProvider.js';
|
|
5
|
+
export declare function refreshGitAuthAsync(argumentProvider: ArgumentProvider): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=RefreshGitAuth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RefreshGitAuth.d.ts","sourceRoot":"","sources":["../../src/Verbs/RefreshGitAuth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAc5D,wBAAsB,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2G3F"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* `git auth refresh` verb: bind the caller's GitHub identity to a `ghe.com` repo by
|
|
6
|
+
* running the GitHub Device Code Flow through the Managed Apps GitHub App. The
|
|
7
|
+
* verb owns argument parsing, display selection (console vs NDJSON), browser
|
|
8
|
+
* launching policy, and error mapping; the action layer
|
|
9
|
+
* (`authenticateForRepoAsync`) owns the DCF state machine itself.
|
|
10
|
+
*/
|
|
11
|
+
import { authenticateForRepoAsync, GrsServerError, } from '@microsoft/managed-apps-actions';
|
|
12
|
+
import { computeRepoHash } from '@microsoft/managed-apps-common/utils/RepoHash';
|
|
13
|
+
import { getCliLogger } from '../CliSettings.js';
|
|
14
|
+
import { createDefaultStringOption } from '../CliUtils.js';
|
|
15
|
+
import { HelpStrings } from '../Constants/HelpStrings.js';
|
|
16
|
+
import { UsageError } from '../Errors/CliError.js';
|
|
17
|
+
import { mapGitHubServerErrorToCliError } from '../Errors/GitHubErrorMap.js';
|
|
18
|
+
import { printJsonSuccess, printSuccess } from '../Utils/ConsoleOutput.js';
|
|
19
|
+
import { ConsoleGitHubDcfDisplay, JsonGitHubDcfDisplay, } from '../Utils/GitHubDcfFlow.js';
|
|
20
|
+
import { parseGitHubRepoUrl } from '../Utils/RepoUrl.js';
|
|
21
|
+
import { GitAuthRefreshArguments } from './VerbConstants.js';
|
|
22
|
+
export async function refreshGitAuthAsync(argumentProvider) {
|
|
23
|
+
createOptionSchema(argumentProvider);
|
|
24
|
+
await argumentProvider.runVerb();
|
|
25
|
+
// Precondition: ensure the user has an active AAD session (the action gets
|
|
26
|
+
// its bearer token via httpClient, but failing here gives a clearer error
|
|
27
|
+
// than a 401 mid-flight).
|
|
28
|
+
const tenantId = await argumentProvider.getTenantIdAsync();
|
|
29
|
+
if (!tenantId) {
|
|
30
|
+
throw new UsageError('Unable to determine tenant ID. Ensure you are logged in.');
|
|
31
|
+
}
|
|
32
|
+
// An env id is REQUIRED for ms git auth refresh: the GRS appframework path is
|
|
33
|
+
// env-scoped, so we surface a clear UsageError up-front rather than a
|
|
34
|
+
// defense-in-depth runtime throw from the wire layer. `getEnvironmentId()`
|
|
35
|
+
// resolves from `appConfig.environmentId` in ms.config.json, falling back
|
|
36
|
+
// to the `MS_CLI_MAAF_DEBUG_ENVIRONMENT_ID` debug env var (matches every
|
|
37
|
+
// sibling verb, e.g. Build/Deploy/Get).
|
|
38
|
+
const environmentId = argumentProvider.getEnvironmentId();
|
|
39
|
+
if (!environmentId) {
|
|
40
|
+
throw new UsageError("Environment id is required for ms git auth refresh. Set 'environmentId' in ms.config.json, " +
|
|
41
|
+
'or set the MS_CLI_MAAF_DEBUG_ENVIRONMENT_ID env var for debug runs.');
|
|
42
|
+
}
|
|
43
|
+
const repoUrl = await argumentProvider.getOption(GitAuthRefreshArguments.Repo.name);
|
|
44
|
+
if (!repoUrl) {
|
|
45
|
+
throw new UsageError('Argument repo is required. Use --repo or -r to specify the GitHub repository ' +
|
|
46
|
+
'(e.g. --repo contoso.ghe.com/contoso/my-app).');
|
|
47
|
+
}
|
|
48
|
+
// parseGitHubRepoUrl throws UsageError for hosts outside `*.ghe.com` and malformed input.
|
|
49
|
+
const { host, owner, repo } = parseGitHubRepoUrl(repoUrl);
|
|
50
|
+
// Emit Git.Auth.Refresh.Start once the verb knows it has a well-formed
|
|
51
|
+
// GHE-tenant target. Properties are PII-safe (host is the parsed string and
|
|
52
|
+
// repoHash is a truncated SHA256 — see computeRepoHash).
|
|
53
|
+
const repoHash = computeRepoHash(owner, repo);
|
|
54
|
+
getCliLogger().trackActivityEvent('Git.Auth.Refresh.Start', {
|
|
55
|
+
repoHost: host,
|
|
56
|
+
repoHash,
|
|
57
|
+
});
|
|
58
|
+
// Commander converts kebab-case flags to camelCase attribute names; the
|
|
59
|
+
// camelName constant keeps this lookup in sync with OpenBrowser.name.
|
|
60
|
+
const openBrowser = (await argumentProvider.getOption(GitAuthRefreshArguments.OpenBrowser.camelName,
|
|
61
|
+
/* ignorePrompt */ true)) ?? false;
|
|
62
|
+
const isJson = argumentProvider.isJsonMode();
|
|
63
|
+
const display = composeDisplay({ isJson, openBrowser });
|
|
64
|
+
// SIGINT plumbing: a Ctrl+C during the (potentially 15-minute) polling loop
|
|
65
|
+
// should drop us out cleanly with an "Authentication cancelled." message
|
|
66
|
+
// rather than leaving a dangling promise. The listener is added scoped to
|
|
67
|
+
// this verb run and removed in `finally` so background work doesn't leak it.
|
|
68
|
+
const controller = new AbortController();
|
|
69
|
+
const onSigint = () => {
|
|
70
|
+
controller.abort();
|
|
71
|
+
};
|
|
72
|
+
process.once('SIGINT', onSigint);
|
|
73
|
+
try {
|
|
74
|
+
const result = await authenticateForRepoAsync({
|
|
75
|
+
remoteUrl: `https://${host}/${owner}/${repo}`,
|
|
76
|
+
tenantId,
|
|
77
|
+
logger: getCliLogger(),
|
|
78
|
+
display,
|
|
79
|
+
// The display itself decides whether to launch a browser; the action just
|
|
80
|
+
// hands the URI to display.openVerificationUri.
|
|
81
|
+
skipBrowser: false,
|
|
82
|
+
signal: controller.signal,
|
|
83
|
+
});
|
|
84
|
+
if (isJson) {
|
|
85
|
+
printJsonSuccess({
|
|
86
|
+
githubLogin: result.githubLogin,
|
|
87
|
+
mappingExpiresAt: result.mappingExpiresAt,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// "expires around" wording (vs. "valid until") signals that the timestamp
|
|
92
|
+
// is approximate — the server may revise it via TTL config changes (D16).
|
|
93
|
+
printSuccess(`Authenticated as ${result.githubLogin} for ${owner}/${repo}.`);
|
|
94
|
+
printSuccess(`Mapping established; expires around ${result.mappingExpiresAt}.`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (error instanceof GrsServerError) {
|
|
99
|
+
const mapped = mapGitHubServerErrorToCliError({
|
|
100
|
+
code: error.code,
|
|
101
|
+
message: error.message,
|
|
102
|
+
status: error.status,
|
|
103
|
+
details: error.details,
|
|
104
|
+
}, { repoUrl, verb: 'git auth refresh' });
|
|
105
|
+
if (mapped)
|
|
106
|
+
throw mapped;
|
|
107
|
+
}
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
process.removeListener('SIGINT', onSigint);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Build the right {@link GitHubDcfDisplay} for the current invocation:
|
|
116
|
+
* - JSON mode → NDJSON events, never opens a browser.
|
|
117
|
+
* - Default → console output, browser launch suppressed.
|
|
118
|
+
* - `--open-browser` → console output + best-effort browser launch (TTY-gated).
|
|
119
|
+
*/
|
|
120
|
+
function composeDisplay(opts) {
|
|
121
|
+
if (opts.isJson) {
|
|
122
|
+
return new JsonGitHubDcfDisplay();
|
|
123
|
+
}
|
|
124
|
+
if (opts.openBrowser) {
|
|
125
|
+
return ConsoleGitHubDcfDisplay;
|
|
126
|
+
}
|
|
127
|
+
// Default: suppress the best-effort browser launch by replacing the
|
|
128
|
+
// openVerificationUri hook with a no-op. The user must opt in via --open-browser.
|
|
129
|
+
return {
|
|
130
|
+
...ConsoleGitHubDcfDisplay,
|
|
131
|
+
openVerificationUri: undefined,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function createOptionSchema(argumentProvider) {
|
|
135
|
+
argumentProvider.setDescription(HelpStrings.git.auth.refresh.description);
|
|
136
|
+
argumentProvider.addExamples(HelpStrings.git.auth.refresh.examples);
|
|
137
|
+
argumentProvider.addOptions([
|
|
138
|
+
createDefaultStringOption({
|
|
139
|
+
flags: {
|
|
140
|
+
key: GitAuthRefreshArguments.Repo.name,
|
|
141
|
+
alias: GitAuthRefreshArguments.Repo.alias,
|
|
142
|
+
},
|
|
143
|
+
env: GitAuthRefreshArguments.Repo.envVar,
|
|
144
|
+
message: GitAuthRefreshArguments.Repo.promptMessage,
|
|
145
|
+
description: HelpStrings.git.auth.refresh.options.repo,
|
|
146
|
+
}),
|
|
147
|
+
]);
|
|
148
|
+
argumentProvider.addSwitch({
|
|
149
|
+
flags: { key: GitAuthRefreshArguments.OpenBrowser.name },
|
|
150
|
+
description: HelpStrings.git.auth.refresh.options.openBrowser,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=RefreshGitAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RefreshGitAuth.js","sourceRoot":"","sources":["../../src/Verbs/RefreshGitAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoveFlow.d.ts","sourceRoot":"","sources":["../../src/Verbs/RemoveFlow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"RemoveFlow.d.ts","sourceRoot":"","sources":["../../src/Verbs/RemoveFlow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAQ5D;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CvF"}
|
package/dist/Verbs/RemoveFlow.js
CHANGED
|
@@ -6,6 +6,7 @@ import { getCliLogger, getSettings } from '../CliSettings.js';
|
|
|
6
6
|
import { promptConfirm, promptText } from '../CliUtils.js';
|
|
7
7
|
import { HelpStrings } from '../Constants/HelpStrings.js';
|
|
8
8
|
import { CliFS } from '../FS/CliFs.js';
|
|
9
|
+
import { printError, printInfo, printSuccess } from '../Utils/ConsoleOutput.js';
|
|
9
10
|
import { RemoveFlowArguments } from './VerbConstants.js';
|
|
10
11
|
/**
|
|
11
12
|
* Remove a cloud flow from the current app.
|
|
@@ -47,13 +48,13 @@ export async function removeFlowAsync(argumentProvider) {
|
|
|
47
48
|
const result = await removeFlowActionAsync(context);
|
|
48
49
|
const flowIdentifier = flowDataSourceName ?? flowId ?? '';
|
|
49
50
|
if (!result.found) {
|
|
50
|
-
|
|
51
|
+
printInfo(`\nFlow "${flowIdentifier}" was not found in ms.config.`);
|
|
51
52
|
}
|
|
52
53
|
else if (result.success) {
|
|
53
|
-
|
|
54
|
+
printSuccess(`\nFlow "${flowIdentifier}" removed successfully.`);
|
|
54
55
|
}
|
|
55
56
|
else {
|
|
56
|
-
|
|
57
|
+
printError(`\nFailed to remove flow: ${result.error}`);
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
60
|
function createOptionSchema(argumentProvider) {
|