@microsoft/managed-apps-cli 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +42 -6
  2. package/dist/ArgumentProvider.d.ts +11 -0
  3. package/dist/ArgumentProvider.d.ts.map +1 -1
  4. package/dist/ArgumentProvider.js +61 -19
  5. package/dist/ArgumentProvider.js.map +1 -1
  6. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts +16 -0
  7. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -1
  8. package/dist/Authentication/NodeMsalAuthenticationProvider.js +58 -6
  9. package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -1
  10. package/dist/Cli.d.ts.map +1 -1
  11. package/dist/Cli.js +23 -7
  12. package/dist/Cli.js.map +1 -1
  13. package/dist/CliSettings.d.ts +2 -2
  14. package/dist/CliSettings.d.ts.map +1 -1
  15. package/dist/CliSettings.js +3 -4
  16. package/dist/CliSettings.js.map +1 -1
  17. package/dist/CliUtils.d.ts +25 -8
  18. package/dist/CliUtils.d.ts.map +1 -1
  19. package/dist/CliUtils.js +19 -23
  20. package/dist/CliUtils.js.map +1 -1
  21. package/dist/Constants/CommandRegistry.d.ts.map +1 -1
  22. package/dist/Constants/CommandRegistry.js +28 -1
  23. package/dist/Constants/CommandRegistry.js.map +1 -1
  24. package/dist/Constants/HelpStrings.d.ts +55 -5
  25. package/dist/Constants/HelpStrings.d.ts.map +1 -1
  26. package/dist/Constants/HelpStrings.js +113 -42
  27. package/dist/Constants/HelpStrings.js.map +1 -1
  28. package/dist/Constants.d.ts +1 -1
  29. package/dist/Constants.d.ts.map +1 -1
  30. package/dist/Constants.js +5 -2
  31. package/dist/Constants.js.map +1 -1
  32. package/dist/Errors/GitHubErrorMap.d.ts.map +1 -1
  33. package/dist/Errors/GitHubErrorMap.js +18 -11
  34. package/dist/Errors/GitHubErrorMap.js.map +1 -1
  35. package/dist/FS/CliFs.d.ts.map +1 -1
  36. package/dist/FS/CliFs.js.map +1 -1
  37. package/dist/HttpClient/CliHttpClient.d.ts +30 -0
  38. package/dist/HttpClient/CliHttpClient.d.ts.map +1 -1
  39. package/dist/HttpClient/CliHttpClient.js +136 -1
  40. package/dist/HttpClient/CliHttpClient.js.map +1 -1
  41. package/dist/Logger/CliLogger.d.ts +50 -8
  42. package/dist/Logger/CliLogger.d.ts.map +1 -1
  43. package/dist/Logger/CliLogger.js +92 -37
  44. package/dist/Logger/CliLogger.js.map +1 -1
  45. package/dist/Logger/ConsoleWriter.d.ts +5 -0
  46. package/dist/Logger/ConsoleWriter.d.ts.map +1 -1
  47. package/dist/Logger/ConsoleWriter.js +22 -14
  48. package/dist/Logger/ConsoleWriter.js.map +1 -1
  49. package/dist/Middletier/FunctionsBundler.js +5 -1
  50. package/dist/Middletier/FunctionsBundler.js.map +1 -1
  51. package/dist/Middletier/PackFunctions.d.ts +5 -4
  52. package/dist/Middletier/PackFunctions.d.ts.map +1 -1
  53. package/dist/Middletier/PackFunctions.js +8 -7
  54. package/dist/Middletier/PackFunctions.js.map +1 -1
  55. package/dist/Types/Cli.types.d.ts +1 -1
  56. package/dist/Types/Cli.types.d.ts.map +1 -1
  57. package/dist/Types/Command.types.d.ts +14 -3
  58. package/dist/Types/Command.types.d.ts.map +1 -1
  59. package/dist/Types/Command.types.js +4 -0
  60. package/dist/Types/Command.types.js.map +1 -1
  61. package/dist/Utils/BuildPolling.d.ts +18 -0
  62. package/dist/Utils/BuildPolling.d.ts.map +1 -0
  63. package/dist/Utils/BuildPolling.js +63 -0
  64. package/dist/Utils/BuildPolling.js.map +1 -0
  65. package/dist/Utils/BuildVerbDescriptionTable.d.ts +11 -1
  66. package/dist/Utils/BuildVerbDescriptionTable.d.ts.map +1 -1
  67. package/dist/Utils/BuildVerbDescriptionTable.js +73 -17
  68. package/dist/Utils/BuildVerbDescriptionTable.js.map +1 -1
  69. package/dist/Utils/DcfRecovery.d.ts +84 -0
  70. package/dist/Utils/DcfRecovery.d.ts.map +1 -0
  71. package/dist/Utils/DcfRecovery.js +266 -0
  72. package/dist/Utils/DcfRecovery.js.map +1 -0
  73. package/dist/Utils/EnhanceNetworkError.d.ts.map +1 -1
  74. package/dist/Utils/EnhanceNetworkError.js +2 -0
  75. package/dist/Utils/EnhanceNetworkError.js.map +1 -1
  76. package/dist/Utils/EnvVars.d.ts +1 -1
  77. package/dist/Utils/EnvVars.d.ts.map +1 -1
  78. package/dist/Utils/EnvVars.js.map +1 -1
  79. package/dist/Utils/RepoUrl.d.ts +11 -6
  80. package/dist/Utils/RepoUrl.d.ts.map +1 -1
  81. package/dist/Utils/RepoUrl.js +1 -1
  82. package/dist/Utils/RepoUrl.js.map +1 -1
  83. package/dist/Utils/ResolveCommand.d.ts +37 -1
  84. package/dist/Utils/ResolveCommand.d.ts.map +1 -1
  85. package/dist/Utils/ResolveCommand.js +97 -20
  86. package/dist/Utils/ResolveCommand.js.map +1 -1
  87. package/dist/Verbs/AddConnector.d.ts.map +1 -1
  88. package/dist/Verbs/AddConnector.js.map +1 -1
  89. package/dist/Verbs/AddConnectorFlows.d.ts.map +1 -1
  90. package/dist/Verbs/AddConnectorFlows.js +2 -2
  91. package/dist/Verbs/AddConnectorFlows.js.map +1 -1
  92. package/dist/Verbs/BuildMaafApp.d.ts.map +1 -1
  93. package/dist/Verbs/BuildMaafApp.js +98 -22
  94. package/dist/Verbs/BuildMaafApp.js.map +1 -1
  95. package/dist/Verbs/ConnectorHelpers.d.ts.map +1 -1
  96. package/dist/Verbs/ConnectorHelpers.js.map +1 -1
  97. package/dist/Verbs/CreateMaafApp.d.ts +54 -5
  98. package/dist/Verbs/CreateMaafApp.d.ts.map +1 -1
  99. package/dist/Verbs/CreateMaafApp.js +238 -238
  100. package/dist/Verbs/CreateMaafApp.js.map +1 -1
  101. package/dist/Verbs/DeployMaafApp.d.ts.map +1 -1
  102. package/dist/Verbs/DeployMaafApp.js +48 -20
  103. package/dist/Verbs/DeployMaafApp.js.map +1 -1
  104. package/dist/Verbs/GetMaafBuildStatus.d.ts.map +1 -1
  105. package/dist/Verbs/GetMaafBuildStatus.js +66 -17
  106. package/dist/Verbs/GetMaafBuildStatus.js.map +1 -1
  107. package/dist/Verbs/GetSettings.d.ts.map +1 -1
  108. package/dist/Verbs/GetSettings.js +9 -18
  109. package/dist/Verbs/GetSettings.js.map +1 -1
  110. package/dist/Verbs/Init.d.ts.map +1 -1
  111. package/dist/Verbs/Init.js +63 -46
  112. package/dist/Verbs/Init.js.map +1 -1
  113. package/dist/Verbs/ListFlows.d.ts.map +1 -1
  114. package/dist/Verbs/ListFlows.js +1 -2
  115. package/dist/Verbs/ListFlows.js.map +1 -1
  116. package/dist/Verbs/MaafAppPermissions.d.ts +12 -6
  117. package/dist/Verbs/MaafAppPermissions.d.ts.map +1 -1
  118. package/dist/Verbs/MaafAppPermissions.js +208 -66
  119. package/dist/Verbs/MaafAppPermissions.js.map +1 -1
  120. package/dist/Verbs/PlayMaafApp.d.ts +22 -0
  121. package/dist/Verbs/PlayMaafApp.d.ts.map +1 -0
  122. package/dist/Verbs/PlayMaafApp.js +147 -0
  123. package/dist/Verbs/PlayMaafApp.js.map +1 -0
  124. package/dist/Verbs/RefreshDataSource.d.ts.map +1 -1
  125. package/dist/Verbs/RefreshDataSource.js.map +1 -1
  126. package/dist/Verbs/RefreshGitAuth.d.ts.map +1 -1
  127. package/dist/Verbs/RefreshGitAuth.js +31 -16
  128. package/dist/Verbs/RefreshGitAuth.js.map +1 -1
  129. package/dist/Verbs/SetSetting.d.ts.map +1 -1
  130. package/dist/Verbs/SetSetting.js +39 -49
  131. package/dist/Verbs/SetSetting.js.map +1 -1
  132. package/dist/Verbs/ShareLinkCreate.d.ts +23 -0
  133. package/dist/Verbs/ShareLinkCreate.d.ts.map +1 -0
  134. package/dist/Verbs/ShareLinkCreate.js +73 -0
  135. package/dist/Verbs/ShareLinkCreate.js.map +1 -0
  136. package/dist/Verbs/ShareLinkList.d.ts +16 -0
  137. package/dist/Verbs/ShareLinkList.d.ts.map +1 -0
  138. package/dist/Verbs/ShareLinkList.js +84 -0
  139. package/dist/Verbs/ShareLinkList.js.map +1 -0
  140. package/dist/Verbs/ShareLinkRevoke.d.ts +22 -0
  141. package/dist/Verbs/ShareLinkRevoke.d.ts.map +1 -0
  142. package/dist/Verbs/ShareLinkRevoke.js +137 -0
  143. package/dist/Verbs/ShareLinkRevoke.js.map +1 -0
  144. package/dist/Verbs/VerbConstants.d.ts +113 -16
  145. package/dist/Verbs/VerbConstants.d.ts.map +1 -1
  146. package/dist/Verbs/VerbConstants.js +102 -24
  147. package/dist/Verbs/VerbConstants.js.map +1 -1
  148. package/dist/Verbs/index.d.ts +4 -0
  149. package/dist/Verbs/index.d.ts.map +1 -1
  150. package/dist/Verbs/index.js +4 -0
  151. package/dist/Verbs/index.js.map +1 -1
  152. package/package.json +5 -5
@@ -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":"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,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC7E,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,YAAY,CAAC,IAAI,MAAM,2BAA2B,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,UAAU,CAAC,sBAAsB,OAAO,CAAC,cAAc,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,SAAS,CAAC,kBAAkB,eAAe,wBAAwB,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,gBAAkC;IAC5D,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrE,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,gBAAgB,CAAC,UAAU,CAAC;QAC1B;YACE,KAAK,EAAE;gBACL,GAAG,EAAE,0BAA0B,CAAC,cAAc,CAAC,IAAI;gBACnD,KAAK,EAAE,0BAA0B,CAAC,cAAc,CAAC,KAAK;aACvD;YACD,GAAG,EAAE,0BAA0B,CAAC,cAAc,CAAC,MAAM;YACrD,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc;YAC3D,wBAAwB,EAAE,IAAI;YAC9B,YAAY,EAAE,KAAK,IAAI,EAAE;gBACvB,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC;oBACxC,OAAO,EAAE,oEAAoE;iBAC9E,CAAC,CAAC;gBACH,IAAI,aAAa,EAAE,CAAC;oBAClB,OAAO,MAAM,UAAU,CAAC;wBACtB,OAAO,EAAE,0BAA0B,CAAC,cAAc,CAAC,aAAa;qBACjE,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1 +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"}
1
+ {"version":3,"file":"RefreshGitAuth.d.ts","sourceRoot":"","sources":["../../src/Verbs/RefreshGitAuth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAW5D,wBAAsB,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0H3F"}
@@ -2,11 +2,12 @@
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  */
4
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.
5
+ * `git auth refresh` verb: bind the caller's GitHub identity to a GitHub repo
6
+ * (a `*.ghe.com` tenant URL or `github.com`) by running the GitHub Device Code
7
+ * Flow through the Managed Apps GitHub App. The verb owns argument parsing,
8
+ * display selection (console vs NDJSON), browser launching policy, and error
9
+ * mapping; the action layer (`authenticateForRepoAsync`) owns the DCF state
10
+ * machine itself.
10
11
  */
11
12
  import { authenticateForRepoAsync, GrsServerError, } from '@microsoft/managed-apps-actions';
12
13
  import { computeRepoHash } from '@microsoft/managed-apps-common/utils/RepoHash';
@@ -16,8 +17,8 @@ import { HelpStrings } from '../Constants/HelpStrings.js';
16
17
  import { UsageError } from '../Errors/CliError.js';
17
18
  import { mapGitHubServerErrorToCliError } from '../Errors/GitHubErrorMap.js';
18
19
  import { printJsonSuccess, printSuccess } from '../Utils/ConsoleOutput.js';
19
- import { ConsoleGitHubDcfDisplay, JsonGitHubDcfDisplay, } from '../Utils/GitHubDcfFlow.js';
20
- import { parseGitHubRepoUrl } from '../Utils/RepoUrl.js';
20
+ import { ConsoleGitHubDcfDisplay, JsonGitHubDcfDisplay } from '../Utils/GitHubDcfFlow.js';
21
+ import { parseRemoteUrl } from '../Utils/RepoUrl.js';
21
22
  import { GitAuthRefreshArguments } from './VerbConstants.js';
22
23
  export async function refreshGitAuthAsync(argumentProvider) {
23
24
  createOptionSchema(argumentProvider);
@@ -43,14 +44,22 @@ export async function refreshGitAuthAsync(argumentProvider) {
43
44
  const repoUrl = await argumentProvider.getOption(GitAuthRefreshArguments.Repo.name);
44
45
  if (!repoUrl) {
45
46
  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
+ '(e.g. --repo https://contoso.ghe.com/contoso/my-app).');
47
48
  }
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);
49
+ // Best-effort generic URL split: used only for PII-safe telemetry shaping
50
+ // (host + repoHash) and to normalize the URL we forward to the actions
51
+ // layer. The CLI no longer performs scheme/host/shape validation — the
52
+ // server is the sole authoritative validator, and the actions layer also
53
+ // forwards untouched URLs (it only requires a non-empty host so it can
54
+ // compose an OAuth base URI). On parse failure we still emit
55
+ // Git.Auth.Refresh.Start with empty repoHost/repoHash (preserving the
56
+ // property keys for downstream Kusto consumers) and forward the unmodified
57
+ // URL to the actions layer.
58
+ const { host, owner, repo } = parseRemoteUrl(repoUrl);
59
+ const repoHash = owner && repo ? computeRepoHash(owner, repo) : '';
60
+ // Emit Git.Auth.Refresh.Start. Properties are PII-safe (host is the parsed
61
+ // string and repoHash is a truncated SHA256 — see computeRepoHash). When the
62
+ // URL fails to parse, both fields are emitted as empty strings.
54
63
  getCliLogger().trackActivityEvent('Git.Auth.Refresh.Start', {
55
64
  repoHost: host,
56
65
  repoHash,
@@ -70,9 +79,15 @@ export async function refreshGitAuthAsync(argumentProvider) {
70
79
  controller.abort();
71
80
  };
72
81
  process.once('SIGINT', onSigint);
82
+ // When parse succeeded, normalize the URL to a canonical https://host/owner/repo
83
+ // shape; otherwise pass the user-supplied URL through to the server unchanged.
84
+ const normalizedRemoteUrl = host && owner && repo ? `https://${host}/${owner}/${repo}` : repoUrl;
85
+ // Likewise, the success message uses owner/repo when known and falls back
86
+ // to the raw URL otherwise.
87
+ const repoLabel = owner && repo ? `${owner}/${repo}` : repoUrl;
73
88
  try {
74
89
  const result = await authenticateForRepoAsync({
75
- remoteUrl: `https://${host}/${owner}/${repo}`,
90
+ remoteUrl: normalizedRemoteUrl,
76
91
  tenantId,
77
92
  logger: getCliLogger(),
78
93
  display,
@@ -90,7 +105,7 @@ export async function refreshGitAuthAsync(argumentProvider) {
90
105
  else {
91
106
  // "expires around" wording (vs. "valid until") signals that the timestamp
92
107
  // is approximate — the server may revise it via TTL config changes (D16).
93
- printSuccess(`Authenticated as ${result.githubLogin} for ${owner}/${repo}.`);
108
+ printSuccess(`Authenticated as ${result.githubLogin} for ${repoLabel}.`);
94
109
  printSuccess(`Mapping established; expires around ${result.mappingExpiresAt}.`);
95
110
  }
96
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RefreshGitAuth.js","sourceRoot":"","sources":["../../src/Verbs/RefreshGitAuth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RefreshGitAuth.js","sourceRoot":"","sources":["../../src/Verbs/RefreshGitAuth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;GAOG;AAEH,OAAO,EACL,wBAAwB,EAExB,cAAc,GACf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,+CAA+C,CAAC;AAGhF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,gBAAkC;IAC1E,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACrC,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAEjC,2EAA2E;IAC3E,0EAA0E;IAC1E,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAC;IACnF,CAAC;IAED,8EAA8E;IAC9E,sEAAsE;IACtE,2EAA2E;IAC3E,0EAA0E;IAC1E,yEAAyE;IACzE,wCAAwC;IACxC,MAAM,aAAa,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;IAC1D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,UAAU,CAClB,6FAA6F;YAC3F,qEAAqE,CACxE,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAS,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAClB,+EAA+E;YAC7E,uDAAuD,CAC1D,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,uEAAuE;IACvE,uEAAuE;IACvE,yEAAyE;IACzE,uEAAuE;IACvE,6DAA6D;IAC7D,sEAAsE;IACtE,2EAA2E;IAC3E,4BAA4B;IAC5B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,2EAA2E;IAC3E,6EAA6E;IAC7E,gEAAgE;IAChE,YAAY,EAAE,CAAC,kBAAkB,CAAC,wBAAwB,EAAE;QAC1D,QAAQ,EAAE,IAAI;QACd,QAAQ;KACT,CAAC,CAAC;IAEH,wEAAwE;IACxE,sEAAsE;IACtE,MAAM,WAAW,GACf,CAAC,MAAM,gBAAgB,CAAC,SAAS,CAC/B,uBAAuB,CAAC,WAAW,CAAC,SAAS;IAC7C,kBAAkB,CAAC,IAAI,CACxB,CAAC,IAAI,KAAK,CAAC;IAEd,MAAM,MAAM,GAAG,gBAAgB,CAAC,UAAU,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAExD,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,6EAA6E;IAC7E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEjC,iFAAiF;IACjF,+EAA+E;IAC/E,MAAM,mBAAmB,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACjG,0EAA0E;IAC1E,4BAA4B;IAC5B,MAAM,SAAS,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAE/D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC;YAC5C,SAAS,EAAE,mBAAmB;YAC9B,QAAQ;YACR,MAAM,EAAE,YAAY,EAAE;YACtB,OAAO;YACP,0EAA0E;YAC1E,gDAAgD;YAChD,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,MAAM,EAAE,CAAC;YACX,gBAAgB,CAAC;gBACf,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;aAC1C,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,0EAA0E;YAC1E,0EAA0E;YAC1E,YAAY,CAAC,oBAAoB,MAAM,CAAC,WAAW,QAAQ,SAAS,GAAG,CAAC,CAAC;YACzE,YAAY,CAAC,uCAAuC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,8BAA8B,CAC3C;gBACE,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CACtC,CAAC;YACF,IAAI,MAAM;gBAAE,MAAM,MAAM,CAAC;QAC3B,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,IAA+C;IACrE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,IAAI,oBAAoB,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,uBAAuB,CAAC;IACjC,CAAC;IACD,oEAAoE;IACpE,kFAAkF;IAClF,OAAO;QACL,GAAG,uBAAuB;QAC1B,mBAAmB,EAAE,SAAS;KAC/B,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,gBAAkC;IAC5D,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpE,gBAAgB,CAAC,UAAU,CAAC;QAC1B,yBAAyB,CAAC;YACxB,KAAK,EAAE;gBACL,GAAG,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI;gBACtC,KAAK,EAAE,uBAAuB,CAAC,IAAI,CAAC,KAAK;aAC1C;YACD,GAAG,EAAE,uBAAuB,CAAC,IAAI,CAAC,MAAM;YACxC,OAAO,EAAE,uBAAuB,CAAC,IAAI,CAAC,aAAa;YACnD,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI;SACvD,CAAC;KACH,CAAC,CAAC;IACH,gBAAgB,CAAC,SAAS,CAAC;QACzB,KAAK,EAAE,EAAE,GAAG,EAAE,uBAAuB,CAAC,WAAW,CAAC,IAAI,EAAE;QACxD,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW;KAC9D,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SetSetting.d.ts","sourceRoot":"","sources":["../../src/Verbs/SetSetting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAgD5D;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFvF"}
1
+ {"version":3,"file":"SetSetting.d.ts","sourceRoot":"","sources":["../../src/Verbs/SetSetting.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAgD5D;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EvF"}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { APP_SETTINGS_DEFINITIONS, readRepoConfig, settingNameToOptionKey, writeRepoConfig, } from '@microsoft/managed-apps-actions';
5
5
  import { AppConfigFileName } from '@microsoft/managed-apps-common/config';
6
- import { getCliLogger, getSettings } from '../CliSettings.js';
6
+ import { getSettings } from '../CliSettings.js';
7
7
  import { CLI_BINARY_NAME } from '../Constants/CliConstants.js';
8
8
  import { HelpStrings } from '../Constants/HelpStrings.js';
9
9
  import { UsageError } from '../Errors/CliError.js';
@@ -68,60 +68,50 @@ export async function setSettingAsync(argumentProvider) {
68
68
  }
69
69
  createOptionSchema(argumentProvider);
70
70
  await argumentProvider.runVerb();
71
- const logger = getCliLogger();
72
- const scenario = logger.trackScenario('SetSetting');
73
- try {
74
- // Collect and validate all provided settings before writing anything (atomic).
75
- const updates = {};
76
- const invalidSettings = [];
77
- for (const def of APP_SETTINGS_DEFINITIONS) {
78
- const optionKey = settingNameToOptionKey(def.name);
79
- // ignorePrompt = true: settings are never prompted for interactively
80
- const rawValue = await argumentProvider.getOption(optionKey, true);
81
- if (rawValue === undefined) {
82
- continue;
71
+ // Collect and validate all provided settings before writing anything (atomic).
72
+ const updates = {};
73
+ const invalidSettings = [];
74
+ for (const def of APP_SETTINGS_DEFINITIONS) {
75
+ const optionKey = settingNameToOptionKey(def.name);
76
+ // ignorePrompt = true: settings are never prompted for interactively
77
+ const rawValue = await argumentProvider.getOption(optionKey, true);
78
+ if (rawValue === undefined) {
79
+ continue;
80
+ }
81
+ if (def.type === 'boolean') {
82
+ if (rawValue !== 'true' && rawValue !== 'false') {
83
+ invalidSettings.push(def.name);
83
84
  }
84
- if (def.type === 'boolean') {
85
- if (rawValue !== 'true' && rawValue !== 'false') {
86
- invalidSettings.push(def.name);
87
- }
88
- else {
89
- updates[def.configKey] = rawValue === 'true';
90
- }
85
+ else {
86
+ updates[def.configKey] = rawValue === 'true';
91
87
  }
92
88
  }
93
- if (invalidSettings.length > 0) {
94
- throw new UsageError(ERR_INVALID);
95
- }
96
- if (Object.keys(updates).length === 0) {
97
- printInfo(`No settings provided. Use --<setting> <value> to update a setting, e.g. --show-header false.`);
98
- printInfo(`Run "npx ${CLI_BINARY_NAME} app get-settings" to see available settings.`);
99
- scenario.complete();
100
- return;
101
- }
102
- // Read config fresh, merge updates, write back atomically.
103
- const config = await readRepoConfig(cliSettings.fileConfig.appConfigPath);
104
- config.appSettings = { ...(config.appSettings ?? {}), ...updates };
105
- await writeRepoConfig(cliSettings.fileConfig.appConfigPath, config);
106
- scenario.complete();
107
- // Print confirmation summary.
108
- const jsonMode = argumentProvider.isJsonMode();
109
- if (jsonMode) {
110
- printJsonSuccess({ settings: updates });
111
- }
112
- else {
113
- for (const def of APP_SETTINGS_DEFINITIONS) {
114
- const value = updates[def.configKey];
115
- if (value !== undefined) {
116
- printInfo(`${def.name} = ${value}`);
117
- }
89
+ }
90
+ if (invalidSettings.length > 0) {
91
+ throw new UsageError(ERR_INVALID);
92
+ }
93
+ if (Object.keys(updates).length === 0) {
94
+ printInfo(`No settings provided. Use --<setting> <value> to update a setting, e.g. --show-header false.`);
95
+ printInfo(`Run "npx ${CLI_BINARY_NAME} app get-settings" to see available settings.`);
96
+ return;
97
+ }
98
+ // Read config fresh, merge updates, write back atomically.
99
+ const config = await readRepoConfig(cliSettings.fileConfig.appConfigPath);
100
+ config.appSettings = { ...(config.appSettings ?? {}), ...updates };
101
+ await writeRepoConfig(cliSettings.fileConfig.appConfigPath, config);
102
+ // Print confirmation summary.
103
+ const jsonMode = argumentProvider.isJsonMode();
104
+ if (jsonMode) {
105
+ printJsonSuccess({ settings: updates });
106
+ }
107
+ else {
108
+ for (const def of APP_SETTINGS_DEFINITIONS) {
109
+ const value = updates[def.configKey];
110
+ if (value !== undefined) {
111
+ printInfo(`${def.name} = ${value}`);
118
112
  }
119
113
  }
120
114
  }
121
- catch (error) {
122
- scenario.failure({ error: error instanceof Error ? error.message : String(error) });
123
- throw error;
124
- }
125
115
  }
126
116
  // Values must be valid CliEnvVarName members — TypeScript enforces this at compile time.
127
117
  // When a new entry is added to APP_SETTINGS_DEFINITIONS, add a corresponding entry here.
@@ -1 +1 @@
1
- {"version":3,"file":"SetSetting.js","sourceRoot":"","sources":["../../src/Verbs/SetSetting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SetSetting.js","sourceRoot":"","sources":["../../src/Verbs/SetSetting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { ArgumentProvider } from '../ArgumentProvider.js';
5
+ /**
6
+ * Implements `ms app share link create` — creates a tenant-wide share link for
7
+ * the current MAAF app.
8
+ *
9
+ * Pipeline:
10
+ * 1. Register option schema and run the verb (so `--help` works without a project).
11
+ * 2. Resolve `environmentId` (`--environment-id` flag wins; otherwise config)
12
+ * and `tenantId` from auth.
13
+ * 3. Resolve `appName` (config-first, `--app` override).
14
+ * 4. Call the action and emit either a JSON envelope or a human-readable success
15
+ * with the share link URL on its own line so it copies cleanly.
16
+ *
17
+ * `resolveEnvironmentId` and `resolveAppNameAsync` each throw a config-pointing
18
+ * `UsageError` when neither the corresponding flag nor `ms.config.json` is
19
+ * present, so the verb runs cleanly from a directory without config when both
20
+ * `--app` and `--environment-id` are supplied explicitly.
21
+ */
22
+ export declare function shareLinkCreateAsync(argumentProvider: ArgumentProvider): Promise<void>;
23
+ //# sourceMappingURL=ShareLinkCreate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareLinkCreate.d.ts","sourceRoot":"","sources":["../../src/Verbs/ShareLinkCreate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAQ5D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,oBAAoB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B5F"}
@@ -0,0 +1,73 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { createShareLinkAsync } from '@microsoft/managed-apps-actions';
5
+ import { getCliLogger } from '../CliSettings.js';
6
+ import { resolveAppNameAsync, resolveEnvironmentId } from '../CliUtils.js';
7
+ import { HelpStrings } from '../Constants/HelpStrings.js';
8
+ import { UsageError } from '../Errors/CliError.js';
9
+ import { printInfo, printJsonSuccess, printSuccess } from '../Utils/ConsoleOutput.js';
10
+ import { ShareLinkCreateArguments } from './VerbConstants.js';
11
+ /**
12
+ * Implements `ms app share link create` — creates a tenant-wide share link for
13
+ * the current MAAF app.
14
+ *
15
+ * Pipeline:
16
+ * 1. Register option schema and run the verb (so `--help` works without a project).
17
+ * 2. Resolve `environmentId` (`--environment-id` flag wins; otherwise config)
18
+ * and `tenantId` from auth.
19
+ * 3. Resolve `appName` (config-first, `--app` override).
20
+ * 4. Call the action and emit either a JSON envelope or a human-readable success
21
+ * with the share link URL on its own line so it copies cleanly.
22
+ *
23
+ * `resolveEnvironmentId` and `resolveAppNameAsync` each throw a config-pointing
24
+ * `UsageError` when neither the corresponding flag nor `ms.config.json` is
25
+ * present, so the verb runs cleanly from a directory without config when both
26
+ * `--app` and `--environment-id` are supplied explicitly.
27
+ */
28
+ export async function shareLinkCreateAsync(argumentProvider) {
29
+ configureOptionSchema(argumentProvider);
30
+ await argumentProvider.runVerb();
31
+ const environmentId = await resolveEnvironmentId(argumentProvider);
32
+ const tenantId = await argumentProvider.getTenantIdAsync();
33
+ if (!tenantId) {
34
+ throw new UsageError('Unable to determine tenant ID. Ensure you are logged in.');
35
+ }
36
+ const appName = await resolveAppNameAsync(argumentProvider);
37
+ const result = await createShareLinkAsync({
38
+ tenantId,
39
+ environmentId,
40
+ logger: getCliLogger(),
41
+ actionsParams: { appName },
42
+ });
43
+ if (argumentProvider.isJsonMode()) {
44
+ printJsonSuccess({ appName, ...result });
45
+ return;
46
+ }
47
+ printSuccess(`Share link created for '${appName}' (id: ${result.appShareLinkId}). Anyone in your tenant who opens this link will be granted Microsoft App Reader access. Share URL:`);
48
+ printInfo(result.shareLinkUrl);
49
+ }
50
+ function configureOptionSchema(argumentProvider) {
51
+ argumentProvider.setDescription(HelpStrings.app.shareLink.create.description);
52
+ argumentProvider.addExamples(HelpStrings.app.shareLink.create.examples);
53
+ argumentProvider.addOptions([
54
+ {
55
+ flags: {
56
+ key: ShareLinkCreateArguments.AppName.name,
57
+ },
58
+ env: ShareLinkCreateArguments.AppName.envVar,
59
+ description: HelpStrings.app.shareLink.create.options.app,
60
+ optionalInNonInteractive: true,
61
+ },
62
+ {
63
+ flags: {
64
+ key: ShareLinkCreateArguments.EnvironmentId.name,
65
+ alias: ShareLinkCreateArguments.EnvironmentId.alias,
66
+ },
67
+ env: ShareLinkCreateArguments.EnvironmentId.envVar,
68
+ description: HelpStrings.app.shareLink.create.options.environmentId,
69
+ optionalInNonInteractive: true,
70
+ },
71
+ ]);
72
+ }
73
+ //# sourceMappingURL=ShareLinkCreate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareLinkCreate.js","sourceRoot":"","sources":["../../src/Verbs/ShareLinkCreate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGvE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,gBAAkC;IAC3E,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IACxC,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAEjC,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;QACxC,QAAQ;QACR,aAAa;QACb,MAAM,EAAE,YAAY,EAAE;QACtB,aAAa,EAAE,EAAE,OAAO,EAAE;KAC3B,CAAC,CAAC;IAEH,IAAI,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC;QAClC,gBAAgB,CAAC,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,YAAY,CACV,2BAA2B,OAAO,UAAU,MAAM,CAAC,cAAc,sGAAsG,CACxK,CAAC;IACF,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,qBAAqB,CAAC,gBAAkC;IAC/D,gBAAgB,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9E,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxE,gBAAgB,CAAC,UAAU,CAAC;QAC1B;YACE,KAAK,EAAE;gBACL,GAAG,EAAE,wBAAwB,CAAC,OAAO,CAAC,IAAI;aAC3C;YACD,GAAG,EAAE,wBAAwB,CAAC,OAAO,CAAC,MAAM;YAC5C,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;YACzD,wBAAwB,EAAE,IAAI;SAC/B;QACD;YACE,KAAK,EAAE;gBACL,GAAG,EAAE,wBAAwB,CAAC,aAAa,CAAC,IAAI;gBAChD,KAAK,EAAE,wBAAwB,CAAC,aAAa,CAAC,KAAK;aACpD;YACD,GAAG,EAAE,wBAAwB,CAAC,aAAa,CAAC,MAAM;YAClD,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa;YACnE,wBAAwB,EAAE,IAAI;SAC/B;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { ArgumentProvider } from '../ArgumentProvider.js';
5
+ /**
6
+ * Implements `ms app share link list` — lists every share link issued for the
7
+ * current MAAF app. The server emits no pagination cursor today, so `value` is
8
+ * the complete set.
9
+ *
10
+ * `resolveEnvironmentId` and `resolveAppNameAsync` each throw a config-pointing
11
+ * `UsageError` when neither the corresponding flag nor `ms.config.json` is
12
+ * present, so the verb runs cleanly from a directory without config when both
13
+ * `--app` and `--environment-id` are supplied explicitly.
14
+ */
15
+ export declare function shareLinkListAsync(argumentProvider: ArgumentProvider): Promise<void>;
16
+ //# sourceMappingURL=ShareLinkList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareLinkList.d.ts","sourceRoot":"","sources":["../../src/Verbs/ShareLinkList.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAQ5D;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C1F"}
@@ -0,0 +1,84 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { listShareLinksAsync } from '@microsoft/managed-apps-actions';
5
+ import { getCliLogger } from '../CliSettings.js';
6
+ import { resolveAppNameAsync, resolveEnvironmentId } from '../CliUtils.js';
7
+ import { HelpStrings } from '../Constants/HelpStrings.js';
8
+ import { UsageError } from '../Errors/CliError.js';
9
+ import { printJsonSuccess, printTable } from '../Utils/ConsoleOutput.js';
10
+ import { ShareLinkListArguments } from './VerbConstants.js';
11
+ /**
12
+ * Implements `ms app share link list` — lists every share link issued for the
13
+ * current MAAF app. The server emits no pagination cursor today, so `value` is
14
+ * the complete set.
15
+ *
16
+ * `resolveEnvironmentId` and `resolveAppNameAsync` each throw a config-pointing
17
+ * `UsageError` when neither the corresponding flag nor `ms.config.json` is
18
+ * present, so the verb runs cleanly from a directory without config when both
19
+ * `--app` and `--environment-id` are supplied explicitly.
20
+ */
21
+ export async function shareLinkListAsync(argumentProvider) {
22
+ configureOptionSchema(argumentProvider);
23
+ await argumentProvider.runVerb();
24
+ const environmentId = await resolveEnvironmentId(argumentProvider);
25
+ const tenantId = await argumentProvider.getTenantIdAsync();
26
+ if (!tenantId) {
27
+ throw new UsageError('Unable to determine tenant ID. Ensure you are logged in.');
28
+ }
29
+ const appName = await resolveAppNameAsync(argumentProvider);
30
+ const result = await listShareLinksAsync({
31
+ tenantId,
32
+ environmentId,
33
+ logger: getCliLogger(),
34
+ actionsParams: { appName },
35
+ });
36
+ if (argumentProvider.isJsonMode()) {
37
+ printJsonSuccess({ appName, ...result });
38
+ return;
39
+ }
40
+ // URL is intentionally omitted from the human-readable table — M365 deep
41
+ // links can exceed 100 chars and wrap ugly. Users who need the URL can run
42
+ // `--json` (returns every field) or re-`create` the link.
43
+ printTable({
44
+ title: `Share links for '${appName}'`,
45
+ columns: [
46
+ { header: 'LINK ID' },
47
+ { header: 'ROLE' },
48
+ { header: 'REDEEMERS' },
49
+ { header: 'CREATED BY', maxWidth: 36 },
50
+ ],
51
+ rows: result.value.map((link) => [
52
+ link.appShareLinkId,
53
+ link.maafAppRoleName,
54
+ String(link.redeemedPrincipalIds.length),
55
+ link.createdByObjectId,
56
+ ]),
57
+ emptyMessage: `No share links issued for '${appName}'.`,
58
+ totalLabel: 'link(s)',
59
+ });
60
+ }
61
+ function configureOptionSchema(argumentProvider) {
62
+ argumentProvider.setDescription(HelpStrings.app.shareLink.list.description);
63
+ argumentProvider.addExamples(HelpStrings.app.shareLink.list.examples);
64
+ argumentProvider.addOptions([
65
+ {
66
+ flags: {
67
+ key: ShareLinkListArguments.AppName.name,
68
+ },
69
+ env: ShareLinkListArguments.AppName.envVar,
70
+ description: HelpStrings.app.shareLink.list.options.app,
71
+ optionalInNonInteractive: true,
72
+ },
73
+ {
74
+ flags: {
75
+ key: ShareLinkListArguments.EnvironmentId.name,
76
+ alias: ShareLinkListArguments.EnvironmentId.alias,
77
+ },
78
+ env: ShareLinkListArguments.EnvironmentId.envVar,
79
+ description: HelpStrings.app.shareLink.list.options.environmentId,
80
+ optionalInNonInteractive: true,
81
+ },
82
+ ]);
83
+ }
84
+ //# sourceMappingURL=ShareLinkList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareLinkList.js","sourceRoot":"","sources":["../../src/Verbs/ShareLinkList.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { ArgumentProvider } from '../ArgumentProvider.js';
5
+ /**
6
+ * Implements `ms app share link revoke` — revokes a previously-issued share
7
+ * link by id. The server attempts to remove the `MicrosoftAppReader` role for
8
+ * every prior redeemer before tearing down the link record; individual revoke
9
+ * failures are logged server-side but do not block the link's deletion.
10
+ *
11
+ * `404 AppShareLinkNotFound` is surfaced as a clean warning rather than an
12
+ * error — mirrors `ms app delete`'s "did not exist" handling. Any other 404
13
+ * (wrong route, wrong app, wrong environment) propagates so the caller sees
14
+ * the real failure.
15
+ *
16
+ * `resolveEnvironmentId` and `resolveAppNameAsync` each throw a config-pointing
17
+ * `UsageError` when neither the corresponding flag nor `ms.config.json` is
18
+ * present, so the verb runs cleanly from a directory without config when both
19
+ * `--app` and `--environment-id` are supplied explicitly.
20
+ */
21
+ export declare function shareLinkRevokeAsync(argumentProvider: ArgumentProvider): Promise<void>;
22
+ //# sourceMappingURL=ShareLinkRevoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShareLinkRevoke.d.ts","sourceRoot":"","sources":["../../src/Verbs/ShareLinkRevoke.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAQ5D;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5F"}