@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.
Files changed (92) hide show
  1. package/README.md +40 -15
  2. package/dist/Authentication/EnvironmentVariableAuthenticationProvider.d.ts +26 -0
  3. package/dist/Authentication/EnvironmentVariableAuthenticationProvider.d.ts.map +1 -0
  4. package/dist/Authentication/EnvironmentVariableAuthenticationProvider.js +31 -0
  5. package/dist/Authentication/EnvironmentVariableAuthenticationProvider.js.map +1 -0
  6. package/dist/Cli.d.ts.map +1 -1
  7. package/dist/Cli.js +68 -22
  8. package/dist/Cli.js.map +1 -1
  9. package/dist/Constants/CommandRegistry.d.ts.map +1 -1
  10. package/dist/Constants/CommandRegistry.js +16 -1
  11. package/dist/Constants/CommandRegistry.js.map +1 -1
  12. package/dist/Constants/HelpStrings.d.ts +14 -0
  13. package/dist/Constants/HelpStrings.d.ts.map +1 -1
  14. package/dist/Constants/HelpStrings.js +24 -2
  15. package/dist/Constants/HelpStrings.js.map +1 -1
  16. package/dist/Constants.d.ts +2 -0
  17. package/dist/Constants.d.ts.map +1 -1
  18. package/dist/Constants.js +2 -0
  19. package/dist/Constants.js.map +1 -1
  20. package/dist/Errors/GitHubErrorMap.d.ts +39 -0
  21. package/dist/Errors/GitHubErrorMap.d.ts.map +1 -0
  22. package/dist/Errors/GitHubErrorMap.js +182 -0
  23. package/dist/Errors/GitHubErrorMap.js.map +1 -0
  24. package/dist/HttpClient/CliHttpClient.d.ts +8 -3
  25. package/dist/HttpClient/CliHttpClient.d.ts.map +1 -1
  26. package/dist/HttpClient/CliHttpClient.js +33 -13
  27. package/dist/HttpClient/CliHttpClient.js.map +1 -1
  28. package/dist/Types/Command.types.d.ts +1 -1
  29. package/dist/Types/Command.types.d.ts.map +1 -1
  30. package/dist/Utils/ConsoleOutput.d.ts +6 -0
  31. package/dist/Utils/ConsoleOutput.d.ts.map +1 -1
  32. package/dist/Utils/ConsoleOutput.js +8 -0
  33. package/dist/Utils/ConsoleOutput.js.map +1 -1
  34. package/dist/Utils/EnvVars.d.ts +1 -1
  35. package/dist/Utils/EnvVars.d.ts.map +1 -1
  36. package/dist/Utils/EnvVars.js.map +1 -1
  37. package/dist/Utils/GitHubDcfFlow.d.ts +60 -0
  38. package/dist/Utils/GitHubDcfFlow.d.ts.map +1 -0
  39. package/dist/Utils/GitHubDcfFlow.js +166 -0
  40. package/dist/Utils/GitHubDcfFlow.js.map +1 -0
  41. package/dist/Utils/RepoUrl.d.ts +13 -0
  42. package/dist/Utils/RepoUrl.d.ts.map +1 -0
  43. package/dist/Utils/RepoUrl.js +6 -0
  44. package/dist/Utils/RepoUrl.js.map +1 -0
  45. package/dist/Verbs/AddFlow.d.ts.map +1 -1
  46. package/dist/Verbs/AddFlow.js +3 -2
  47. package/dist/Verbs/AddFlow.js.map +1 -1
  48. package/dist/Verbs/CreateMaafApp.d.ts +0 -1
  49. package/dist/Verbs/CreateMaafApp.d.ts.map +1 -1
  50. package/dist/Verbs/CreateMaafApp.js +19 -60
  51. package/dist/Verbs/CreateMaafApp.js.map +1 -1
  52. package/dist/Verbs/FindDataverseApi.js +15 -15
  53. package/dist/Verbs/FindDataverseApi.js.map +1 -1
  54. package/dist/Verbs/GetSettings.d.ts +1 -1
  55. package/dist/Verbs/GetSettings.js +1 -1
  56. package/dist/Verbs/MaafAppPermissions.d.ts +26 -6
  57. package/dist/Verbs/MaafAppPermissions.d.ts.map +1 -1
  58. package/dist/Verbs/MaafAppPermissions.js +189 -28
  59. package/dist/Verbs/MaafAppPermissions.js.map +1 -1
  60. package/dist/Verbs/RefreshDataSource.d.ts.map +1 -1
  61. package/dist/Verbs/RefreshDataSource.js +4 -3
  62. package/dist/Verbs/RefreshDataSource.js.map +1 -1
  63. package/dist/Verbs/RefreshGitAuth.d.ts +6 -0
  64. package/dist/Verbs/RefreshGitAuth.d.ts.map +1 -0
  65. package/dist/Verbs/RefreshGitAuth.js +153 -0
  66. package/dist/Verbs/RefreshGitAuth.js.map +1 -0
  67. package/dist/Verbs/RemoveFlow.d.ts.map +1 -1
  68. package/dist/Verbs/RemoveFlow.js +4 -3
  69. package/dist/Verbs/RemoveFlow.js.map +1 -1
  70. package/dist/Verbs/SetSetting.d.ts +1 -1
  71. package/dist/Verbs/SetSetting.js +1 -1
  72. package/dist/Verbs/VerbConstants.d.ts +22 -0
  73. package/dist/Verbs/VerbConstants.d.ts.map +1 -1
  74. package/dist/Verbs/VerbConstants.js +25 -0
  75. package/dist/Verbs/VerbConstants.js.map +1 -1
  76. package/dist/Verbs/index.d.ts +1 -0
  77. package/dist/Verbs/index.d.ts.map +1 -1
  78. package/dist/Verbs/index.js +1 -0
  79. package/dist/Verbs/index.js.map +1 -1
  80. package/package.json +4 -4
  81. package/dist/Authentication/OrchardAuthenticationProvider.d.ts +0 -13
  82. package/dist/Authentication/OrchardAuthenticationProvider.d.ts.map +0 -1
  83. package/dist/Authentication/OrchardAuthenticationProvider.js +0 -30
  84. package/dist/Authentication/OrchardAuthenticationProvider.js.map +0 -1
  85. package/dist/HttpClient/OrchardProxy.d.ts +0 -11
  86. package/dist/HttpClient/OrchardProxy.d.ts.map +0 -1
  87. package/dist/HttpClient/OrchardProxy.js +0 -25
  88. package/dist/HttpClient/OrchardProxy.js.map +0 -1
  89. package/dist/HttpClient/Proxy.d.ts +0 -7
  90. package/dist/HttpClient/Proxy.d.ts.map +0 -1
  91. package/dist/HttpClient/Proxy.js +0 -5
  92. 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
- * Implements `ms app share` and `ms app unshare` — adds or removes the
9
- * `Microsoft App Reader` role for AAD principals (users or groups) at the app
10
- * scope.
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) and tenantId.
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. Call `modifyPermissionsAsync` with `put` or `delete` populated based on
20
- * `mode`, then emit JSON or a human summary.
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;AAeH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAS5D,4EAA4E;AAC5E,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,CAAC;AAuBzD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,8BAA8B,CAClD,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyGf"}
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, modifyPermissionsAsync, resolvePrincipalByEmailAsync, } from '@microsoft/managed-apps-actions';
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 the
16
- * `Microsoft App Reader` role for AAD principals (users or groups) at the app
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) and tenantId.
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. Call `modifyPermissionsAsync` with `put` or `delete` populated based on
27
- * `mode`, then emit JSON or a human summary.
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 entries = refs.map(toPermissionEntry);
64
- const result = await modifyPermissionsAsync({
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
- const _assertNoCollision = true;
76
- void _assertNoCollision;
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
- ...result,
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, result);
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 toPermissionEntry(ref) {
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 the spec says `delete`
246
- * is not populated on the response and may be omitted or null.
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(appName, mode, inputCount, result) {
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 play the app.`);
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 play permissions for ${inputCount} ${pluralize('principal', inputCount)} on '${appName}'.`);
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;AAO5D,wBAAsB,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C9F"}
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
- console.log(`'${dsName}' refreshed successfully.`);
38
+ printSuccess(`'${dsName}' refreshed successfully.`);
38
39
  }
39
40
  for (const failure of result.failed) {
40
- console.error(`Failed to refresh '${failure.dataSourceName}': ${failure.error}`);
41
+ printError(`Failed to refresh '${failure.dataSourceName}': ${failure.error}`);
41
42
  }
42
43
  if (result.succeeded.length > 0 && result.failed.length === 0) {
43
- console.log(`Hint: Run 'npx ${CLI_BINARY_NAME} run' to test locally, or 'npx ${CLI_BINARY_NAME} push' to deploy.`);
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":"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"}
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;AAO5D;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CvF"}
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"}
@@ -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
- console.log(`\nFlow "${flowIdentifier}" was not found in ms.config.`);
51
+ printInfo(`\nFlow "${flowIdentifier}" was not found in ms.config.`);
51
52
  }
52
53
  else if (result.success) {
53
- console.log(`\nFlow "${flowIdentifier}" removed successfully.`);
54
+ printSuccess(`\nFlow "${flowIdentifier}" removed successfully.`);
54
55
  }
55
56
  else {
56
- console.error(`\nFailed to remove flow: ${result.error}`);
57
+ printError(`\nFailed to remove flow: ${result.error}`);
57
58
  }
58
59
  }
59
60
  function createOptionSchema(argumentProvider) {