@microsoft/managed-apps-cli 0.9.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +23 -43
  2. package/dist/ArgumentProvider.d.ts.map +1 -1
  3. package/dist/ArgumentProvider.js +3 -0
  4. package/dist/ArgumentProvider.js.map +1 -1
  5. package/dist/Authentication/NodeMsalAuthenticationProvider.js +20 -1
  6. package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -1
  7. package/dist/Cli.d.ts.map +1 -1
  8. package/dist/Cli.js +12 -2
  9. package/dist/Cli.js.map +1 -1
  10. package/dist/Constants/CommandRegistry.d.ts.map +1 -1
  11. package/dist/Constants/CommandRegistry.js +5 -24
  12. package/dist/Constants/CommandRegistry.js.map +1 -1
  13. package/dist/Constants/HelpStrings.d.ts +8 -7
  14. package/dist/Constants/HelpStrings.d.ts.map +1 -1
  15. package/dist/Constants/HelpStrings.js +78 -73
  16. package/dist/Constants/HelpStrings.js.map +1 -1
  17. package/dist/Constants.d.ts +1 -1
  18. package/dist/Constants.d.ts.map +1 -1
  19. package/dist/Constants.js +4 -9
  20. package/dist/Constants.js.map +1 -1
  21. package/dist/Errors/GitHubErrorMap.d.ts +43 -14
  22. package/dist/Errors/GitHubErrorMap.d.ts.map +1 -1
  23. package/dist/Errors/GitHubErrorMap.js +188 -147
  24. package/dist/Errors/GitHubErrorMap.js.map +1 -1
  25. package/dist/Logger/CliLogger.d.ts +1 -0
  26. package/dist/Logger/CliLogger.d.ts.map +1 -1
  27. package/dist/Logger/CliLogger.js +5 -3
  28. package/dist/Logger/CliLogger.js.map +1 -1
  29. package/dist/Types/Argument.types.d.ts +1 -0
  30. package/dist/Types/Argument.types.d.ts.map +1 -1
  31. package/dist/Utils/DcfRecovery.d.ts +7 -7
  32. package/dist/Utils/DcfRecovery.d.ts.map +1 -1
  33. package/dist/Utils/DcfRecovery.js +17 -37
  34. package/dist/Utils/DcfRecovery.js.map +1 -1
  35. package/dist/Utils/DownloadTemplate.d.ts +45 -0
  36. package/dist/Utils/DownloadTemplate.d.ts.map +1 -0
  37. package/dist/Utils/DownloadTemplate.js +159 -0
  38. package/dist/Utils/DownloadTemplate.js.map +1 -0
  39. package/dist/Utils/EnvVars.d.ts +1 -1
  40. package/dist/Utils/EnvVars.d.ts.map +1 -1
  41. package/dist/Utils/GitVersionChecker.d.ts +38 -0
  42. package/dist/Utils/GitVersionChecker.d.ts.map +1 -0
  43. package/dist/Utils/GitVersionChecker.js +61 -0
  44. package/dist/Utils/GitVersionChecker.js.map +1 -0
  45. package/dist/Utils/MaafAppConfig.d.ts +22 -0
  46. package/dist/Utils/MaafAppConfig.d.ts.map +1 -0
  47. package/dist/Utils/MaafAppConfig.js +32 -0
  48. package/dist/Utils/MaafAppConfig.js.map +1 -0
  49. package/dist/Utils/NodeVersionChecker.d.ts +3 -6
  50. package/dist/Utils/NodeVersionChecker.d.ts.map +1 -1
  51. package/dist/Utils/NodeVersionChecker.js +9 -26
  52. package/dist/Utils/NodeVersionChecker.js.map +1 -1
  53. package/dist/Utils/Paging.d.ts +5 -0
  54. package/dist/Utils/Paging.d.ts.map +1 -1
  55. package/dist/Utils/Paging.js +29 -0
  56. package/dist/Utils/Paging.js.map +1 -1
  57. package/dist/Utils/PinCli.d.ts +28 -0
  58. package/dist/Utils/PinCli.d.ts.map +1 -0
  59. package/dist/Utils/PinCli.js +58 -0
  60. package/dist/Utils/PinCli.js.map +1 -0
  61. package/dist/Utils/RepoOption.d.ts +35 -0
  62. package/dist/Utils/RepoOption.d.ts.map +1 -0
  63. package/dist/Utils/RepoOption.js +36 -0
  64. package/dist/Utils/RepoOption.js.map +1 -0
  65. package/dist/Utils/Spinner.d.ts.map +1 -1
  66. package/dist/Utils/Spinner.js +3 -0
  67. package/dist/Utils/Spinner.js.map +1 -1
  68. package/dist/Verbs/AddAction.js +6 -6
  69. package/dist/Verbs/AddAction.js.map +1 -1
  70. package/dist/Verbs/AddConnector.d.ts +5 -3
  71. package/dist/Verbs/AddConnector.d.ts.map +1 -1
  72. package/dist/Verbs/AddConnector.js +45 -11
  73. package/dist/Verbs/AddConnector.js.map +1 -1
  74. package/dist/Verbs/AddConnectorFlows.d.ts +27 -14
  75. package/dist/Verbs/AddConnectorFlows.d.ts.map +1 -1
  76. package/dist/Verbs/AddConnectorFlows.js +70 -20
  77. package/dist/Verbs/AddConnectorFlows.js.map +1 -1
  78. package/dist/Verbs/AddDataSource.d.ts +3 -4
  79. package/dist/Verbs/AddDataSource.d.ts.map +1 -1
  80. package/dist/Verbs/AddDataSource.js +9 -20
  81. package/dist/Verbs/AddDataSource.js.map +1 -1
  82. package/dist/Verbs/AddTable.js +6 -6
  83. package/dist/Verbs/AddTable.js.map +1 -1
  84. package/dist/Verbs/AuthStatus.d.ts.map +1 -1
  85. package/dist/Verbs/AuthStatus.js +7 -4
  86. package/dist/Verbs/AuthStatus.js.map +1 -1
  87. package/dist/Verbs/BuildMaafApp.js +1 -1
  88. package/dist/Verbs/BuildMaafApp.js.map +1 -1
  89. package/dist/Verbs/ConnectorHelpers.d.ts +3 -4
  90. package/dist/Verbs/ConnectorHelpers.d.ts.map +1 -1
  91. package/dist/Verbs/ConnectorHelpers.js +8 -9
  92. package/dist/Verbs/ConnectorHelpers.js.map +1 -1
  93. package/dist/Verbs/CreateMaafApp.d.ts +0 -29
  94. package/dist/Verbs/CreateMaafApp.d.ts.map +1 -1
  95. package/dist/Verbs/CreateMaafApp.js +100 -171
  96. package/dist/Verbs/CreateMaafApp.js.map +1 -1
  97. package/dist/Verbs/DeleteDataSource.js +6 -6
  98. package/dist/Verbs/DeleteDataSource.js.map +1 -1
  99. package/dist/Verbs/DeployMaafApp.d.ts.map +1 -1
  100. package/dist/Verbs/DeployMaafApp.js +4 -4
  101. package/dist/Verbs/DeployMaafApp.js.map +1 -1
  102. package/dist/Verbs/Dev.js +1 -1
  103. package/dist/Verbs/Dev.js.map +1 -1
  104. package/dist/Verbs/GetMaafBuildStatus.d.ts.map +1 -1
  105. package/dist/Verbs/GetMaafBuildStatus.js +52 -3
  106. package/dist/Verbs/GetMaafBuildStatus.js.map +1 -1
  107. package/dist/Verbs/GetSettings.js +1 -1
  108. package/dist/Verbs/GetSettings.js.map +1 -1
  109. package/dist/Verbs/Init.d.ts.map +1 -1
  110. package/dist/Verbs/Init.js +166 -58
  111. package/dist/Verbs/Init.js.map +1 -1
  112. package/dist/Verbs/ListConnectorActions.js +12 -9
  113. package/dist/Verbs/ListConnectorActions.js.map +1 -1
  114. package/dist/Verbs/ListConnectors.js +2 -2
  115. package/dist/Verbs/ListConnectors.js.map +1 -1
  116. package/dist/Verbs/ListMaafApps.js +3 -3
  117. package/dist/Verbs/ListMaafApps.js.map +1 -1
  118. package/dist/Verbs/MaafAppPermissions.js +2 -2
  119. package/dist/Verbs/MaafAppPermissions.js.map +1 -1
  120. package/dist/Verbs/RefreshDataSource.js +1 -1
  121. package/dist/Verbs/RefreshDataSource.js.map +1 -1
  122. package/dist/Verbs/RefreshGitAuth.d.ts.map +1 -1
  123. package/dist/Verbs/RefreshGitAuth.js +3 -15
  124. package/dist/Verbs/RefreshGitAuth.js.map +1 -1
  125. package/dist/Verbs/SetSetting.js +2 -2
  126. package/dist/Verbs/SetSetting.js.map +1 -1
  127. package/dist/Verbs/ShowMaafApp.js +2 -2
  128. package/dist/Verbs/ShowMaafApp.js.map +1 -1
  129. package/dist/Verbs/VerbConstants.d.ts +19 -22
  130. package/dist/Verbs/VerbConstants.d.ts.map +1 -1
  131. package/dist/Verbs/VerbConstants.js +19 -22
  132. package/dist/Verbs/VerbConstants.js.map +1 -1
  133. package/package.json +10 -8
@@ -20,26 +20,26 @@ const CONNECTION_CREATION_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
20
20
  const PROTOCOL_VERSION = '1';
21
21
  /**
22
22
  * Preflight step shared by `app add action` and `app add table`. Fetches the
23
- * connector and effective DLP policy in parallel, then enforces the policy.
23
+ * connector and effective connector policy in parallel, then enforces the policy.
24
24
  *
25
25
  * Failure modes:
26
26
  * - tenantId missing: surfaces a `DlpSkippedNoTenantId` telemetry event and a
27
27
  * user-visible warning, then degrades to "allow all" so the verb can still
28
28
  * proceed (the alternative — failing — would block users in auth states
29
29
  * where tenant resolution legitimately can't happen).
30
- * - DLP fetch error: relies on `getEffectiveConnectorDataPolicyAsync`'s own
30
+ * - Policy fetch error: relies on `getEffectiveConnectorDataPolicyAsync`'s own
31
31
  * `scenario.failure` telemetry; we only print a user warning and degrade
32
32
  * to "allow all" rather than re-emitting a duplicate error event.
33
33
  *
34
34
  * Throws `NotFoundError` when the connector itself cannot be found, and
35
- * `UsageError` when the connector is blocked by DLP.
35
+ * `UsageError` when the connector is blocked by the effective connector policy.
36
36
  */
37
37
  export async function runConnectorDlpPreflightAsync(argumentProvider, apiId) {
38
38
  const logger = getCliLogger();
39
39
  const tenantId = await argumentProvider.getTenantIdAsync();
40
40
  if (!tenantId) {
41
41
  logger.trackErrorEvent('DlpSkippedNoTenantId', { apiId });
42
- printWarning(`Could not resolve tenant ID; skipping DLP policy check. Sign in with '${CLI_BINARY_NAME} auth login' for full enforcement.`);
42
+ printWarning(`Could not resolve tenant ID; skipping connector policy check. Sign in with '${CLI_BINARY_NAME} auth login' for full enforcement.`);
43
43
  }
44
44
  const [connector, policy] = await Promise.all([
45
45
  getConnectorAsync(apiId, logger),
@@ -48,7 +48,7 @@ export async function runConnectorDlpPreflightAsync(argumentProvider, apiId) {
48
48
  // GovernanceService already records `scenario.failure` internally,
49
49
  // so we don't re-emit telemetry here — just surface the warning
50
50
  // and degrade to allow-all.
51
- printWarning('Could not verify DLP policy; proceeding without enforcement.');
51
+ printWarning('Could not verify connector policy; proceeding without enforcement.');
52
52
  return ALLOW_ALL_POLICY;
53
53
  })
54
54
  : Promise.resolve(ALLOW_ALL_POLICY),
@@ -61,7 +61,7 @@ export async function runConnectorDlpPreflightAsync(argumentProvider, apiId) {
61
61
  const blockedSet = new Set((policy.blockedConnectors ?? []).map((e) => e.connectorId.toLowerCase()));
62
62
  const isBlocked = policy.defaultBehavior === 'Block' ? !allowedMap.has(shortName) : blockedSet.has(shortName);
63
63
  if (isBlocked) {
64
- throw new UsageError(`Connector '${connector.properties.displayName ?? apiId}' is blocked by your organization's DLP policy.`);
64
+ throw new UsageError(`Connector '${connector.properties.displayName ?? apiId}' is blocked by your organization's connector policy.`);
65
65
  }
66
66
  return { connector, tenantId, policy };
67
67
  }
@@ -133,7 +133,6 @@ export async function resolveConnectionInteractivelyAsync(options) {
133
133
  const connectorName = apiId.startsWith('shared_') ? apiId : `shared_${apiId}`;
134
134
  const result = await startConnectionServerAsync({
135
135
  connectorName,
136
- environmentId: playerServiceConfig.environmentName,
137
136
  region: playerServiceConfig.region,
138
137
  });
139
138
  if (result.status === 'created' && result.connectionName) {
@@ -213,7 +212,7 @@ export async function requestCliUserConsentAsync(opts) {
213
212
  * drift detection, and a timeout for cleanup.
214
213
  */
215
214
  export async function startConnectionServerAsync(config) {
216
- const { connectorName, environmentId, region } = config;
215
+ const { connectorName, region } = config;
217
216
  const nonce = crypto.randomUUID();
218
217
  return new Promise((resolve, reject) => {
219
218
  const server = http.createServer((req, res) => {
@@ -277,7 +276,7 @@ export async function startConnectionServerAsync(config) {
277
276
  const address = server.address();
278
277
  const port = typeof address === 'object' && address ? address.port : 0;
279
278
  const callbackUrl = `http://localhost:${port}/callback`;
280
- const playerUrl = createMaafConnectionUrl(region, environmentId, {
279
+ const playerUrl = createMaafConnectionUrl(region, {
281
280
  connector: connectorName,
282
281
  callbackUrl,
283
282
  nonce,
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectorHelpers.js","sourceRoot":"","sources":["../../src/Verbs/ConnectorHelpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConnectorHelpers.js","sourceRoot":"","sources":["../../src/Verbs/ConnectorHelpers.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,7 @@
1
1
  /*!
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  */
4
- import { type RepoType } from '@microsoft/managed-apps-common/config';
5
4
  import type { ArgumentProvider } from '../ArgumentProvider.js';
6
- /**
7
- * Result of parsing the `--repo` flag value.
8
- *
9
- * - `native` (default): MAAF auto-provisions a platform-managed git repo, no remote URL.
10
- * - `none`: source-control-free; no platform-managed repo, no remote URL.
11
- * - `github`: bound to an external GitHub repo (`*.ghe.com` or `github.com`) at `remoteUrl`.
12
- *
13
- * `remoteUrl` is populated only when `repoType === 'github'`. This is a flat
14
- * interface (not a discriminated union), so `if (repoType === 'github')` does NOT
15
- * auto-narrow `remoteUrl` to `string`; github-branch use sites assert `remoteUrl!`.
16
- */
17
- interface RepoSelection {
18
- repoType: RepoType;
19
- remoteUrl: string | undefined;
20
- }
21
5
  /**
22
6
  * Result of `commitAndPushScaffoldAsync`. Carried into the `--json` success
23
7
  * envelope (as the `push` field) so automation can distinguish three states:
@@ -29,18 +13,6 @@ interface PushOutcome {
29
13
  error?: Record<string, unknown>;
30
14
  retryCommand?: string;
31
15
  }
32
- /**
33
- * Maps the raw `--repo` flag value to a `(repoType, remoteUrl)` pair.
34
- * - omitted / empty → `native` (default GRS-backed flow)
35
- * - `none` (case-insensitive) → `none` (no GRS, no local setup)
36
- * - any other non-empty value → `github` (external GitHub binding — `*.ghe.com` or `github.com`;
37
- * value flows through as `remoteUrl` to the action and the eventual git clone)
38
- *
39
- * Runtime invariant: `remoteUrl` is set iff `repoType === 'github'`. Consumers
40
- * branch on `repoType` and assert `remoteUrl!` at github use sites — see
41
- * `RepoSelection` for why narrowing is not automatic.
42
- */
43
- export declare function parseRepoOption(rawRepoValue: string | undefined): RepoSelection;
44
16
  /**
45
17
  * Creates a new MAAF app and (where applicable) sets up local source control.
46
18
  *
@@ -103,7 +75,6 @@ interface InitLocalRepoOptions {
103
75
  }
104
76
  export declare function initLocalRepo({ directory, gitUrl, loginAuthority, authResource, jsonMode, }: InitLocalRepoOptions): void;
105
77
  export declare function buildOrphanedAppRecoveryHint(serverAppId: string, environmentId: string): string;
106
- export declare function ensureGitInstalled(): void;
107
78
  export declare function ensureTemplateSourceValid(source: string): void;
108
79
  export declare function ensureTargetDirectoryEmpty(appDir: string): void;
109
80
  export declare function ensureRepoTargetDirectoryEmpty(appDir: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"CreateMaafApp.d.ts","sourceRoot":"","sources":["../../src/Verbs/CreateMaafApp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAQzF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA6B5D;;;;;;;;;;GAUG;AACH,UAAU,aAAa;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;GAKG;AACH,UAAU,WAAW;IACnB,OAAO,EAAE,OAAO,CAAC;IAKjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAQ/E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6X1F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,WAAW,CAAC,CAwCtB;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,gBAAgB,GAAG,IAAI,CAYxE;AAED,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,MAAM,EACN,cAAc,EACd,YAAY,EACZ,QAAgB,GACjB,EAAE,oBAAoB,GAAG,IAAI,CA4E7B;AASD,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAM/F;AAQD,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC;AA2DD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA2B9D;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAc/D;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAanE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAmD/D;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA8BlE"}
1
+ {"version":3,"file":"CreateMaafApp.d.ts","sourceRoot":"","sources":["../../src/Verbs/CreateMaafApp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA2B5D;;;;;GAKG;AACH,UAAU,WAAW;IACnB,OAAO,EAAE,OAAO,CAAC;IAKjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqa1F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,WAAW,CAAC,CAwCtB;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,gBAAgB,GAAG,IAAI,CAYxE;AAED,UAAU,oBAAoB;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,MAAM,EACN,cAAc,EACd,YAAY,EACZ,QAAgB,GACjB,EAAE,oBAAoB,GAAG,IAAI,CA4E7B;AASD,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAM/F;AASD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO9D;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAc/D;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAanE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAmD/D;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA8BlE"}
@@ -6,7 +6,6 @@ import { AppConfigFileName } from '@microsoft/managed-apps-common/config';
6
6
  import { regionToCloudSafe } from '@microsoft/managed-apps-common/services';
7
7
  import { execFileSync } from 'child_process';
8
8
  import * as fs from 'fs';
9
- import { downloadTemplate } from 'giget';
10
9
  import * as os from 'os';
11
10
  import * as path from 'path';
12
11
  import { getCliLogger, getSettings } from '../CliSettings.js';
@@ -14,40 +13,18 @@ import { createDefaultStringOption, resolveEnvironmentId } from '../CliUtils.js'
14
13
  import { CLI_BINARY_NAME } from '../Constants/CliConstants.js';
15
14
  import { HelpStrings } from '../Constants/HelpStrings.js';
16
15
  import { AppError, ConfigurationError, UsageError } from '../Errors/CliError.js';
17
- import { printInfo, printJsonLine, printJsonSuccess, printSuccess, printWarning, } from '../Utils/ConsoleOutput.js';
16
+ import { printError, printInfo, printJsonLine, printJsonSuccess, printSuccess, printWarning, } from '../Utils/ConsoleOutput.js';
18
17
  import { withGitHubDcfRecoveryAsync } from '../Utils/DcfRecovery.js';
18
+ import { downloadTemplate, parseGithubTemplate } from '../Utils/DownloadTemplate.js';
19
19
  import { startPdeRoutingAsync } from '../Utils/EnvironmentRoutingUtils.js';
20
20
  import { buildGcmConfig } from '../Utils/GitCredentialConfig.js';
21
+ import { ensureGitInstalled } from '../Utils/GitVersionChecker.js';
22
+ import { buildMaafAppConfig } from '../Utils/MaafAppConfig.js';
23
+ import { pinCliIntoAppPackageJson } from '../Utils/PinCli.js';
24
+ import { parseRepoOption } from '../Utils/RepoOption.js';
25
+ import { CliSpinner } from '../Utils/Spinner.js';
21
26
  import { CreateMaafAppArguments } from './VerbConstants.js';
22
27
  const DEFAULT_TEMPLATE = 'github:microsoft/Managed-Apps/templates/vite8';
23
- /**
24
- * Sentinel value for `--repo` that selects the no-source-control flow: just create the
25
- * server-side app record, write `ms.config.json` with `repoType: 'none'`, and skip every
26
- * local-setup step (git init/clone, template overlay, GCM config) plus the server-side
27
- * GRS auto-provisioning. Comparison is case-insensitive — `none`, `None`, `NONE` all
28
- * select this flow. Any other non-empty `--repo` value is treated as a remote URL.
29
- */
30
- const REPO_NONE_SENTINEL = 'none';
31
- /**
32
- * Maps the raw `--repo` flag value to a `(repoType, remoteUrl)` pair.
33
- * - omitted / empty → `native` (default GRS-backed flow)
34
- * - `none` (case-insensitive) → `none` (no GRS, no local setup)
35
- * - any other non-empty value → `github` (external GitHub binding — `*.ghe.com` or `github.com`;
36
- * value flows through as `remoteUrl` to the action and the eventual git clone)
37
- *
38
- * Runtime invariant: `remoteUrl` is set iff `repoType === 'github'`. Consumers
39
- * branch on `repoType` and assert `remoteUrl!` at github use sites — see
40
- * `RepoSelection` for why narrowing is not automatic.
41
- */
42
- export function parseRepoOption(rawRepoValue) {
43
- if (rawRepoValue === undefined || rawRepoValue === '') {
44
- return { repoType: 'native', remoteUrl: undefined };
45
- }
46
- if (rawRepoValue.trim().toLowerCase() === REPO_NONE_SENTINEL) {
47
- return { repoType: 'none', remoteUrl: undefined };
48
- }
49
- return { repoType: 'github', remoteUrl: rawRepoValue };
50
- }
51
28
  /**
52
29
  * Creates a new MAAF app and (where applicable) sets up local source control.
53
30
  *
@@ -124,43 +101,60 @@ export async function createMaafAppAsync(argumentProvider) {
124
101
  // wipe local files). To bind a non-empty directory to a MAAF app, use `ms app
125
102
  // init` instead.
126
103
  //
127
- // --repo none path: no git, no clone ms.config.json and the template are
128
- // written locally. The preflight reduces to (1) target dir must be writable
129
- // so the config and template writes won't fail post-create, and (2) the dir
130
- // must be empty (template scaffolding requires a clean target, same as the
131
- // other flows).
104
+ // --repo none path: no source-control git (no `git init`, no `git clone` of a
105
+ // user-supplied remote). Git itself is still required, because the template
106
+ // download is a sparse `git clone` of the github-hosted template repo
107
+ // hence `ensureGitInstalled` runs unconditionally below.
132
108
  // ──────────────────────────────────────────────────────────────────────────
133
- if (!jsonMode) {
109
+ const usePreflightSpinner = !jsonMode && process.stdout.isTTY;
110
+ if (!jsonMode && !usePreflightSpinner) {
134
111
  printInfo('Running preflight checks...');
135
112
  }
136
- // --repo none is incompatible with --repository-id: the former opts out of any
137
- // platform-managed git binding, the latter forces one. Fail fast before any
138
- // server call so we don't half-bind the app.
139
- if (repoType === 'none' && repositoryId) {
140
- throw new UsageError("'--repo none' is incompatible with '--repository-id'. " +
141
- "Use '--repo none' for an app with no git binding, or omit '--repo' (or pass a repo URL) to use a backing repository.");
142
- }
143
- ensureTemplateSourceValid(template);
144
- if (repoType !== 'none') {
113
+ // Spinner runs only in TTY interactive mode; --json keeps stdout clean and
114
+ // non-TTY (CI, piped output) uses plain prose so log files stay readable.
115
+ // Most preflight checks are sync, so the spinner frame can pause while a
116
+ // check runs; we still update the status label before each check so users
117
+ // always see the current step. The try/finally guarantees we restore the
118
+ // cursor even if a preflight check throws.
119
+ const preflightSpinner = usePreflightSpinner ? new CliSpinner() : null;
120
+ preflightSpinner?.start('Running preflight checks...');
121
+ try {
122
+ // --repo none is incompatible with --repository-id: the former opts out of any
123
+ // platform-managed git binding, the latter forces one. Fail fast before any
124
+ // server call so we don't half-bind the app.
125
+ if (repoType === 'none' && repositoryId) {
126
+ throw new UsageError("'--repo none' is incompatible with '--repository-id'. " +
127
+ "Use '--repo none' for an app with no git binding, or omit '--repo' (or pass a repo URL) to use a backing repository.");
128
+ }
129
+ preflightSpinner?.update('Validating template source...');
130
+ ensureTemplateSourceValid(template);
131
+ preflightSpinner?.update('Checking git installation...');
145
132
  ensureGitInstalled();
133
+ preflightSpinner?.update('Verifying target directory is writable...');
134
+ ensureTargetDirectoryWritable(appDir);
135
+ if (repoType === 'github') {
136
+ // RepoSelection is a flat interface (not a discriminated union), so `remoteUrl`
137
+ // doesn't auto-narrow to `string` here even though the github branch guarantees it.
138
+ preflightSpinner?.update('Verifying target directory is empty...');
139
+ ensureRepoTargetDirectoryEmpty(appDir);
140
+ // Pre-network: cheap partial clone into a temp dir + ls-tree HEAD to detect
141
+ // a non-empty remote before createAsync runs. Catches the rejection case
142
+ // without leaving an orphaned server-side app or scaffolded files in
143
+ // appDir. Cheapest probe shape: --depth=1 --filter=blob:none --no-checkout
144
+ // pulls refs + the tip commit + its tree(s) only (no blob bytes, no working
145
+ // tree). On any probe error (network, auth, server doesn't support partial
146
+ // clone, etc.) we swallow and let the subsequent cloneRepo emit its
147
+ // friendlier error — see ensureExternalRepoIsEmpty for the rationale.
148
+ preflightSpinner?.update(`Verifying ${remoteUrl} is empty...`);
149
+ ensureExternalRepoIsEmpty(remoteUrl);
150
+ }
151
+ else {
152
+ preflightSpinner?.update('Verifying target directory is empty...');
153
+ ensureTargetDirectoryEmpty(appDir);
154
+ }
146
155
  }
147
- ensureTargetDirectoryWritable(appDir);
148
- if (repoType === 'github') {
149
- // RepoSelection is a flat interface (not a discriminated union), so `remoteUrl`
150
- // doesn't auto-narrow to `string` here even though the github branch guarantees it.
151
- ensureRepoTargetDirectoryEmpty(appDir);
152
- // Pre-network: cheap partial clone into a temp dir + ls-tree HEAD to detect
153
- // a non-empty remote before createAsync runs. Catches the rejection case
154
- // without leaving an orphaned server-side app or scaffolded files in
155
- // appDir. Cheapest probe shape: --depth=1 --filter=blob:none --no-checkout
156
- // pulls refs + the tip commit + its tree(s) only (no blob bytes, no working
157
- // tree). On any probe error (network, auth, server doesn't support partial
158
- // clone, etc.) we swallow and let the subsequent cloneRepo emit its
159
- // friendlier error — see ensureExternalRepoIsEmpty for the rationale.
160
- ensureExternalRepoIsEmpty(remoteUrl);
161
- }
162
- else {
163
- ensureTargetDirectoryEmpty(appDir);
156
+ finally {
157
+ preflightSpinner?.stop();
164
158
  }
165
159
  // ─── End preflight ────────────────────────────────────────────────────────
166
160
  // The debug env-var override (MS_CLI_MAAF_DEBUG_ENVIRONMENT_ID) is honored by ArgumentProvider
@@ -186,7 +180,23 @@ export async function createMaafAppAsync(argumentProvider) {
186
180
  /* ignorePrompt */ true);
187
181
  // Explicit branch keeps the non-null read of routingEnvPromise reachable only when
188
182
  // preResolvedEnvironmentId is undefined — i.e. exactly when routingEnvPromise is defined.
189
- const environmentId = preResolvedEnvironmentId ?? (await routingEnvPromise);
183
+ let environmentId = preResolvedEnvironmentId ?? '';
184
+ try {
185
+ if (!preResolvedEnvironmentId) {
186
+ environmentId = await routingEnvPromise;
187
+ }
188
+ }
189
+ catch (error) {
190
+ if (error instanceof AppError) {
191
+ throw error;
192
+ }
193
+ const detail = error instanceof Error ? error.message : String(error);
194
+ printError(`Failed to resolve a developer environment.\n\n` +
195
+ ` ${detail}\n\n` +
196
+ `To retry, run the same command again. ` +
197
+ `Alternatively, pass --environment-id <id> to use a known environment.`);
198
+ throw error;
199
+ }
190
200
  updateEnvironmentName(environmentId);
191
201
  // Re-check the directory invariant right before the server call. The same
192
202
  // check ran in preflight, but the routing-env resolution between then and
@@ -319,27 +329,33 @@ export async function createMaafAppAsync(argumentProvider) {
319
329
  if (!jsonMode) {
320
330
  printInfo(`Fetching template '${template}' into ${appDir}...`);
321
331
  }
322
- await downloadTemplate(template, { dir: appDir, force: true });
323
- const config = {
332
+ downloadTemplate(template, { dir: appDir });
333
+ // Pin the scaffolding CLI into the app so a later package install provides a
334
+ // project-local `ms` — which `npx ms` / `pnpm exec` / `bun x` resolve ahead of
335
+ // any globally-installed CLI — at the exact version the app was created with.
336
+ // Runs for every repo flow (the template, and therefore its package.json,
337
+ // lands via downloadTemplate above regardless of `--repo`).
338
+ pinCliIntoAppPackageJson(appDir, jsonMode);
339
+ const config = buildMaafAppConfig({
324
340
  appId: app.id,
325
341
  appDisplayName: app.displayName,
326
342
  description: app.description,
327
343
  environmentId: app.environmentId,
344
+ repoType,
345
+ cloud: argumentProvider.getCloud(),
346
+ buildPath,
347
+ buildCommand,
348
+ buildEntryPoint,
328
349
  // Only the `native` flow has a platform-managed git binding. `github` tracks
329
350
  // external binding server-side via `externalRepo`, and `none` intentionally has
330
351
  // no platform-managed binding. Omit `repositoryId` for both so downstream verbs
331
352
  // key off `repoType` instead of a placeholder value.
332
- ...(repoType === 'native' && { repositoryId: app.repositoryId }),
333
- repoType,
353
+ repositoryId: repoType === 'native' ? app.repositoryId : undefined,
334
354
  // externalRepoUrl is persisted only for github-bound apps so that post-create verbs
335
355
  // (build, deploy) know which GitHub host to authenticate against during inline DCF
336
356
  // recovery without re-prompting the user for the URL.
337
- ...(repoType === 'github' && { externalRepoUrl: remoteUrl }),
338
- cloud: argumentProvider.getCloud(),
339
- buildPath: buildPath ?? './dist',
340
- buildCommand: buildCommand ?? 'npm run build',
341
- buildEntryPoint: buildEntryPoint ?? 'index.html',
342
- };
357
+ externalRepoUrl: repoType === 'github' ? remoteUrl : undefined,
358
+ });
343
359
  await writeRepoConfig(path.join(appDir, AppConfigFileName), config);
344
360
  // Auto commit + push for git-backed flows (native + github). The `none` flow
345
361
  // has no remote, so it's skipped. Push failure is non-fatal — see the warning
@@ -543,108 +559,21 @@ export function initLocalRepo({ directory, gitUrl, loginAuthority, authResource,
543
559
  export function buildOrphanedAppRecoveryHint(serverAppId, environmentId) {
544
560
  return (`The server app is still in environment ${environmentId} (id: ${serverAppId}).\n` +
545
561
  `If you want to clean it up before retrying, run the following command:\n` +
546
- ` npx ${CLI_BINARY_NAME} app delete --app ${serverAppId} --environment-id ${environmentId} --force`);
562
+ ` ${CLI_BINARY_NAME} app delete --app ${serverAppId} --environment-id ${environmentId} --force`);
547
563
  }
548
564
  // ─── Preflight helpers ──────────────────────────────────────────────────────
549
565
  // All checks below run before any server call so a local misconfiguration
550
- // (missing git, bad template source, unwritable directory) fails fast and
551
- // never leaves an orphaned MAAF app + GRS repo on the server.
566
+ // (bad template source, unwritable directory, …) fails fast and never leaves
567
+ // an orphaned MAAF app + GRS repo on the server. The git presence + version
568
+ // check lives in `Utils/GitVersionChecker.ts`.
552
569
  // ────────────────────────────────────────────────────────────────────────────
553
- export function ensureGitInstalled() {
554
- try {
555
- execFileSync('git', ['--version'], { stdio: ['ignore', 'ignore', 'ignore'] });
556
- }
557
- catch {
558
- throw new ConfigurationError("'git' is required but was not found on PATH. Install git from https://git-scm.com/ and retry.");
559
- }
560
- }
561
- // Known giget provider prefixes. Used only for a *soft* "did you mean?" warning —
562
- // not a hard reject, so adding a new giget provider doesn't silently fail
563
- // preflight here. Sourced from giget's docs (github, gitlab, bitbucket, sourcehut,
564
- // http, https) as of the version pinned in package.json. Update opportunistically
565
- // when bumping giget; a stale entry only suppresses one warning, never blocks
566
- // a valid template.
567
- const KNOWN_GIGET_PROVIDERS = new Set([
568
- 'github',
569
- 'gitlab',
570
- 'bitbucket',
571
- 'sourcehut',
572
- 'http',
573
- 'https',
574
- ]);
575
- // Single-edit Damerau-Levenshtein distance, capped at 1: returns true iff `a`
576
- // is one substitution, one insertion, one deletion, or one adjacent
577
- // transposition away from `b`. Used to pick the closest known provider for a
578
- // "did you mean?" hint without pulling in a dependency.
579
- function isOneEditAway(a, b) {
580
- if (a === b)
581
- return false;
582
- if (Math.abs(a.length - b.length) > 1)
583
- return false;
584
- if (a.length === b.length) {
585
- let diff = 0;
586
- let transposition = null;
587
- for (let i = 0; i < a.length; i++) {
588
- if (a[i] !== b[i]) {
589
- diff++;
590
- if (transposition === null)
591
- transposition = i;
592
- if (diff > 2)
593
- return false;
594
- }
595
- }
596
- if (diff <= 1)
597
- return true;
598
- if (diff === 2 && transposition !== null) {
599
- // Adjacent swap: gihub vs github, swap positions transposition and transposition+1.
600
- return a[transposition] === b[transposition + 1] && a[transposition + 1] === b[transposition];
601
- }
602
- return false;
603
- }
604
- // One insertion or deletion away. Walk both strings; allow one skip.
605
- const [shorter, longer] = a.length < b.length ? [a, b] : [b, a];
606
- let i = 0;
607
- let j = 0;
608
- let skipped = false;
609
- while (i < shorter.length && j < longer.length) {
610
- if (shorter[i] === longer[j]) {
611
- i++;
612
- j++;
613
- continue;
614
- }
615
- if (skipped)
616
- return false;
617
- skipped = true;
618
- j++;
619
- }
620
- return true;
621
- }
622
570
  export function ensureTemplateSourceValid(source) {
623
- // Hard validation: only enforce non-empty. Any further structural validation
624
- // (provider name, URL shape, registry lookup) is giget's responsibility —
625
- // duplicating its provider list locally goes stale silently when giget adds
626
- // support for a new provider, turning a valid template into a misleading
627
- // "unknown provider" error at preflight.
628
- if (!source) {
629
- throw new UsageError('Template source is empty. Use --template to specify one.');
630
- }
631
- // Soft validation: if the source looks like `<prefix>:<rest>` but the prefix
632
- // is one edit away from a known giget provider (e.g. `gihub:` → `github:`),
633
- // warn but proceed. giget will produce the authoritative error if the
634
- // prefix is genuinely invalid; for the common typo case we surface the fix
635
- // before the network round-trip. No hard-fail keeps this forward-compatible
636
- // with new giget providers — a stale `KNOWN_GIGET_PROVIDERS` set only
637
- // suppresses a warning, it never blocks a valid template.
638
- const prefixMatch = /^([a-z][a-z0-9+.-]*):/i.exec(source);
639
- if (!prefixMatch)
640
- return;
641
- const prefix = prefixMatch[1].toLowerCase();
642
- if (KNOWN_GIGET_PROVIDERS.has(prefix))
643
- return;
644
- const suggestion = [...KNOWN_GIGET_PROVIDERS].find((known) => isOneEditAway(prefix, known));
645
- if (suggestion) {
646
- printWarning(`Template source '${source}' uses an unrecognized provider prefix '${prefix}:'. Did you mean '${suggestion}:'?`);
647
- }
571
+ // Delegates to the github-only parser in DownloadTemplate. The parser throws
572
+ // `UsageError` for any unsupported shape (non-`github:` prefix, malformed
573
+ // URL, missing owner/repo) which is what preflight wants: surface the
574
+ // problem before any server call. We discard the parsed result; the real
575
+ // download path re-parses at call time.
576
+ parseGithubTemplate(source);
648
577
  }
649
578
  export function ensureTargetDirectoryEmpty(appDir) {
650
579
  // Scaffolding into a non-empty directory would mix the template with the
@@ -670,7 +599,7 @@ export function ensureRepoTargetDirectoryEmpty(appDir) {
670
599
  return;
671
600
  const entries = fs.readdirSync(appDir);
672
601
  if (entries.length > 0) {
673
- throw new UsageError(`'${appDir}' is not empty. --repo requires an empty target directory; specify an empty directory as the first argument or move to one before running.`);
602
+ throw new UsageError(`'${appDir}' is not empty. --repo requires an empty target directory; specify an empty directory as the first argument, move to one before running, or run 'ms app init' to bind an existing project to a new app.`);
674
603
  }
675
604
  }
676
605
  /**