@microsoft/managed-apps-cli 0.5.0 → 0.7.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 (192) hide show
  1. package/README.md +65 -24
  2. package/dist/ArgumentProvider.d.ts +10 -2
  3. package/dist/ArgumentProvider.d.ts.map +1 -1
  4. package/dist/ArgumentProvider.js +11 -2
  5. package/dist/ArgumentProvider.js.map +1 -1
  6. package/dist/Authentication/ActiveAccountStore.d.ts +24 -0
  7. package/dist/Authentication/ActiveAccountStore.d.ts.map +1 -0
  8. package/dist/Authentication/ActiveAccountStore.js +54 -0
  9. package/dist/Authentication/ActiveAccountStore.js.map +1 -0
  10. package/dist/Authentication/EnvironmentVariableAuthenticationProvider.d.ts +26 -0
  11. package/dist/Authentication/EnvironmentVariableAuthenticationProvider.d.ts.map +1 -0
  12. package/dist/Authentication/EnvironmentVariableAuthenticationProvider.js +31 -0
  13. package/dist/Authentication/EnvironmentVariableAuthenticationProvider.js.map +1 -0
  14. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts +57 -3
  15. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -1
  16. package/dist/Authentication/NodeMsalAuthenticationProvider.js +187 -27
  17. package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -1
  18. package/dist/Cli.d.ts.map +1 -1
  19. package/dist/Cli.js +74 -23
  20. package/dist/Cli.js.map +1 -1
  21. package/dist/CliUtils.d.ts +2 -8
  22. package/dist/CliUtils.d.ts.map +1 -1
  23. package/dist/CliUtils.js.map +1 -1
  24. package/dist/Constants/CommandRegistry.d.ts.map +1 -1
  25. package/dist/Constants/CommandRegistry.js +32 -6
  26. package/dist/Constants/CommandRegistry.js.map +1 -1
  27. package/dist/Constants/HelpStrings.d.ts +39 -3
  28. package/dist/Constants/HelpStrings.d.ts.map +1 -1
  29. package/dist/Constants/HelpStrings.js +63 -10
  30. package/dist/Constants/HelpStrings.js.map +1 -1
  31. package/dist/Constants.d.ts +2 -0
  32. package/dist/Constants.d.ts.map +1 -1
  33. package/dist/Constants.js +2 -0
  34. package/dist/Constants.js.map +1 -1
  35. package/dist/Errors/GitHubErrorMap.d.ts +39 -0
  36. package/dist/Errors/GitHubErrorMap.d.ts.map +1 -0
  37. package/dist/Errors/GitHubErrorMap.js +187 -0
  38. package/dist/Errors/GitHubErrorMap.js.map +1 -0
  39. package/dist/HttpClient/CliHttpClient.d.ts +8 -3
  40. package/dist/HttpClient/CliHttpClient.d.ts.map +1 -1
  41. package/dist/HttpClient/CliHttpClient.js +33 -13
  42. package/dist/HttpClient/CliHttpClient.js.map +1 -1
  43. package/dist/Logger/ConsoleWriter.d.ts.map +1 -1
  44. package/dist/Logger/ConsoleWriter.js +7 -7
  45. package/dist/Logger/ConsoleWriter.js.map +1 -1
  46. package/dist/Middletier/FunctionsBundler.d.ts +17 -0
  47. package/dist/Middletier/FunctionsBundler.d.ts.map +1 -0
  48. package/dist/Middletier/FunctionsBundler.js +165 -0
  49. package/dist/Middletier/FunctionsBundler.js.map +1 -0
  50. package/dist/Middletier/PackFunctions.d.ts +52 -0
  51. package/dist/Middletier/PackFunctions.d.ts.map +1 -0
  52. package/dist/Middletier/PackFunctions.js +122 -0
  53. package/dist/Middletier/PackFunctions.js.map +1 -0
  54. package/dist/Types/Cli.types.d.ts +42 -1
  55. package/dist/Types/Cli.types.d.ts.map +1 -1
  56. package/dist/Types/Command.types.d.ts +1 -1
  57. package/dist/Types/Command.types.d.ts.map +1 -1
  58. package/dist/Utils/ConsoleOutput.d.ts +6 -0
  59. package/dist/Utils/ConsoleOutput.d.ts.map +1 -1
  60. package/dist/Utils/ConsoleOutput.js +23 -12
  61. package/dist/Utils/ConsoleOutput.js.map +1 -1
  62. package/dist/Utils/EnvVars.d.ts +1 -1
  63. package/dist/Utils/EnvVars.d.ts.map +1 -1
  64. package/dist/Utils/EnvVars.js.map +1 -1
  65. package/dist/Utils/EnvironmentRoutingUtils.d.ts +8 -0
  66. package/dist/Utils/EnvironmentRoutingUtils.d.ts.map +1 -0
  67. package/dist/Utils/EnvironmentRoutingUtils.js +45 -0
  68. package/dist/Utils/EnvironmentRoutingUtils.js.map +1 -0
  69. package/dist/Utils/GitHubDcfFlow.d.ts +59 -0
  70. package/dist/Utils/GitHubDcfFlow.d.ts.map +1 -0
  71. package/dist/Utils/GitHubDcfFlow.js +165 -0
  72. package/dist/Utils/GitHubDcfFlow.js.map +1 -0
  73. package/dist/Utils/GitUtils.d.ts +5 -0
  74. package/dist/Utils/GitUtils.d.ts.map +1 -1
  75. package/dist/Utils/GitUtils.js +15 -0
  76. package/dist/Utils/GitUtils.js.map +1 -1
  77. package/dist/Utils/Paging.d.ts.map +1 -1
  78. package/dist/Utils/Paging.js +4 -4
  79. package/dist/Utils/Paging.js.map +1 -1
  80. package/dist/Utils/RepoUrl.d.ts +13 -0
  81. package/dist/Utils/RepoUrl.d.ts.map +1 -0
  82. package/dist/Utils/RepoUrl.js +6 -0
  83. package/dist/Utils/RepoUrl.js.map +1 -0
  84. package/dist/Utils/Spinner.d.ts +9 -1
  85. package/dist/Utils/Spinner.d.ts.map +1 -1
  86. package/dist/Utils/Spinner.js +25 -5
  87. package/dist/Utils/Spinner.js.map +1 -1
  88. package/dist/Verbs/AddAction.d.ts.map +1 -1
  89. package/dist/Verbs/AddAction.js +12 -41
  90. package/dist/Verbs/AddAction.js.map +1 -1
  91. package/dist/Verbs/AddConnector.d.ts +24 -0
  92. package/dist/Verbs/AddConnector.d.ts.map +1 -0
  93. package/dist/Verbs/AddConnector.js +156 -0
  94. package/dist/Verbs/AddConnector.js.map +1 -0
  95. package/dist/Verbs/AddConnectorFlows.d.ts +72 -0
  96. package/dist/Verbs/AddConnectorFlows.d.ts.map +1 -0
  97. package/dist/Verbs/AddConnectorFlows.js +198 -0
  98. package/dist/Verbs/AddConnectorFlows.js.map +1 -0
  99. package/dist/Verbs/AddDataSource.js +1 -1
  100. package/dist/Verbs/AddDataSource.js.map +1 -1
  101. package/dist/Verbs/AddFlow.d.ts.map +1 -1
  102. package/dist/Verbs/AddFlow.js +3 -2
  103. package/dist/Verbs/AddFlow.js.map +1 -1
  104. package/dist/Verbs/AddTable.d.ts.map +1 -1
  105. package/dist/Verbs/AddTable.js +15 -100
  106. package/dist/Verbs/AddTable.js.map +1 -1
  107. package/dist/Verbs/AuthStatus.d.ts.map +1 -1
  108. package/dist/Verbs/AuthStatus.js +34 -6
  109. package/dist/Verbs/AuthStatus.js.map +1 -1
  110. package/dist/Verbs/AuthSwitch.d.ts +6 -0
  111. package/dist/Verbs/AuthSwitch.d.ts.map +1 -0
  112. package/dist/Verbs/AuthSwitch.js +67 -0
  113. package/dist/Verbs/AuthSwitch.js.map +1 -0
  114. package/dist/Verbs/ConnectorHelpers.d.ts +54 -1
  115. package/dist/Verbs/ConnectorHelpers.d.ts.map +1 -1
  116. package/dist/Verbs/ConnectorHelpers.js +217 -16
  117. package/dist/Verbs/ConnectorHelpers.js.map +1 -1
  118. package/dist/Verbs/CreateMaafApp.d.ts +26 -1
  119. package/dist/Verbs/CreateMaafApp.d.ts.map +1 -1
  120. package/dist/Verbs/CreateMaafApp.js +310 -135
  121. package/dist/Verbs/CreateMaafApp.js.map +1 -1
  122. package/dist/Verbs/DeployMaafApp.d.ts.map +1 -1
  123. package/dist/Verbs/DeployMaafApp.js +4 -0
  124. package/dist/Verbs/DeployMaafApp.js.map +1 -1
  125. package/dist/Verbs/Dev.js +5 -5
  126. package/dist/Verbs/Dev.js.map +1 -1
  127. package/dist/Verbs/FindDataverseApi.js +15 -15
  128. package/dist/Verbs/FindDataverseApi.js.map +1 -1
  129. package/dist/Verbs/GetSettings.d.ts +1 -1
  130. package/dist/Verbs/GetSettings.js +1 -1
  131. package/dist/Verbs/Init.d.ts.map +1 -1
  132. package/dist/Verbs/Init.js +129 -61
  133. package/dist/Verbs/Init.js.map +1 -1
  134. package/dist/Verbs/ListConnectors.d.ts.map +1 -1
  135. package/dist/Verbs/ListConnectors.js +4 -2
  136. package/dist/Verbs/ListConnectors.js.map +1 -1
  137. package/dist/Verbs/ListDatasets.d.ts.map +1 -1
  138. package/dist/Verbs/ListDatasets.js +5 -0
  139. package/dist/Verbs/ListDatasets.js.map +1 -1
  140. package/dist/Verbs/ListSqlStoredProcedures.d.ts.map +1 -1
  141. package/dist/Verbs/ListSqlStoredProcedures.js +5 -0
  142. package/dist/Verbs/ListSqlStoredProcedures.js.map +1 -1
  143. package/dist/Verbs/ListTables.d.ts.map +1 -1
  144. package/dist/Verbs/ListTables.js +5 -0
  145. package/dist/Verbs/ListTables.js.map +1 -1
  146. package/dist/Verbs/Login.d.ts.map +1 -1
  147. package/dist/Verbs/Login.js +16 -13
  148. package/dist/Verbs/Login.js.map +1 -1
  149. package/dist/Verbs/Logout.d.ts.map +1 -1
  150. package/dist/Verbs/Logout.js +19 -13
  151. package/dist/Verbs/Logout.js.map +1 -1
  152. package/dist/Verbs/MaafAppPermissions.d.ts +26 -6
  153. package/dist/Verbs/MaafAppPermissions.d.ts.map +1 -1
  154. package/dist/Verbs/MaafAppPermissions.js +193 -28
  155. package/dist/Verbs/MaafAppPermissions.js.map +1 -1
  156. package/dist/Verbs/Pack.d.ts +6 -6
  157. package/dist/Verbs/Pack.d.ts.map +1 -1
  158. package/dist/Verbs/Pack.js +80 -12
  159. package/dist/Verbs/Pack.js.map +1 -1
  160. package/dist/Verbs/RefreshDataSource.d.ts.map +1 -1
  161. package/dist/Verbs/RefreshDataSource.js +4 -3
  162. package/dist/Verbs/RefreshDataSource.js.map +1 -1
  163. package/dist/Verbs/RefreshGitAuth.d.ts +6 -0
  164. package/dist/Verbs/RefreshGitAuth.d.ts.map +1 -0
  165. package/dist/Verbs/RefreshGitAuth.js +153 -0
  166. package/dist/Verbs/RefreshGitAuth.js.map +1 -0
  167. package/dist/Verbs/RemoveFlow.d.ts.map +1 -1
  168. package/dist/Verbs/RemoveFlow.js +4 -3
  169. package/dist/Verbs/RemoveFlow.js.map +1 -1
  170. package/dist/Verbs/SetSetting.d.ts +1 -1
  171. package/dist/Verbs/SetSetting.js +1 -1
  172. package/dist/Verbs/VerbConstants.d.ts +72 -16
  173. package/dist/Verbs/VerbConstants.d.ts.map +1 -1
  174. package/dist/Verbs/VerbConstants.js +64 -16
  175. package/dist/Verbs/VerbConstants.js.map +1 -1
  176. package/dist/Verbs/index.d.ts +3 -0
  177. package/dist/Verbs/index.d.ts.map +1 -1
  178. package/dist/Verbs/index.js +3 -0
  179. package/dist/Verbs/index.js.map +1 -1
  180. package/package.json +8 -8
  181. package/dist/Authentication/OrchardAuthenticationProvider.d.ts +0 -13
  182. package/dist/Authentication/OrchardAuthenticationProvider.d.ts.map +0 -1
  183. package/dist/Authentication/OrchardAuthenticationProvider.js +0 -30
  184. package/dist/Authentication/OrchardAuthenticationProvider.js.map +0 -1
  185. package/dist/HttpClient/OrchardProxy.d.ts +0 -11
  186. package/dist/HttpClient/OrchardProxy.d.ts.map +0 -1
  187. package/dist/HttpClient/OrchardProxy.js +0 -25
  188. package/dist/HttpClient/OrchardProxy.js.map +0 -1
  189. package/dist/HttpClient/Proxy.d.ts +0 -7
  190. package/dist/HttpClient/Proxy.d.ts.map +0 -1
  191. package/dist/HttpClient/Proxy.js +0 -5
  192. package/dist/HttpClient/Proxy.js.map +0 -1
@@ -1,7 +1,8 @@
1
1
  /*!
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  */
4
- import type { Api } from '@microsoft/managed-apps-actions';
4
+ import type { Api, EffectiveConnectorDataPolicy } from '@microsoft/managed-apps-actions';
5
+ import type { Region } from '@microsoft/managed-apps-common/services';
5
6
  import type { ArgumentProvider } from '../ArgumentProvider.js';
6
7
  /**
7
8
  * Preflight step shared by `app add action` and `app add table`. Fetches the
@@ -22,6 +23,7 @@ import type { ArgumentProvider } from '../ArgumentProvider.js';
22
23
  export declare function runConnectorDlpPreflightAsync(argumentProvider: ArgumentProvider, apiId: string): Promise<{
23
24
  connector: Api;
24
25
  tenantId: string | undefined;
26
+ policy: EffectiveConnectorDataPolicy;
25
27
  }>;
26
28
  /**
27
29
  * Resolves a connection for a connector. In interactive mode, lists the
@@ -34,4 +36,55 @@ export declare function resolveConnectionInteractivelyAsync(options: {
34
36
  apiId: string;
35
37
  connector: Api;
36
38
  }): Promise<string>;
39
+ /**
40
+ * Best-effort request that the calling application be added to a connection's
41
+ * API Hubs ACL via the Power Platform user-consent endpoint. The server reads
42
+ * the calling app's `appid` from the bearer token, and the gateway resolves
43
+ * tenant + environment from the auth context and its routing config — so the
44
+ * CLI only needs to supply connector + connection identifiers, no body.
45
+ *
46
+ * Gating: requires the opt-in feature flag
47
+ * `MS_CLI_ENABLE_CONNECTOR_USER_CONSENT=true` (off by default while the
48
+ * consent endpoint is rolling out). When the flag is unset, the call is
49
+ * silently skipped — no warning, no telemetry, no HTTP traffic.
50
+ *
51
+ * Failure modes:
52
+ * - HTTP 403: emits a permission-specific warning explaining that the tenant
53
+ * admin must grant the calling app the
54
+ * `Connectivity.Connections.UserConsent` delegated permission, then returns.
55
+ * - Any other HTTP / network error: surfaces a generic warning and returns.
56
+ * The underlying `ConnectivityService` already records its own
57
+ * `scenario.failure` telemetry, so this helper doesn't re-emit a duplicate
58
+ * error event.
59
+ *
60
+ * Silent on success: a 200 OK does not guarantee the ACL was modified (the
61
+ * server has feature-gated silent-skip paths), so the success path emits no
62
+ * user-facing message.
63
+ *
64
+ * Never throws.
65
+ */
66
+ export declare function requestCliUserConsentAsync(opts: {
67
+ apiId: string;
68
+ connectionId: string;
69
+ }): Promise<void>;
70
+ type ConnectionServerConfig = {
71
+ connectorName: string;
72
+ environmentId: string;
73
+ region: Region;
74
+ };
75
+ type ConnectionResult = {
76
+ status: 'created' | 'cancelled' | 'error';
77
+ connectionId?: string;
78
+ connectionName?: string;
79
+ displayName?: string;
80
+ errorMessage?: string;
81
+ };
82
+ /**
83
+ * Starts a local HTTP server, opens the maaf-player connection page in the
84
+ * browser, and waits for a callback with the result. Uses the same pattern
85
+ * as an OAuth authorization code flow: nonce for CSRF, protocol version for
86
+ * drift detection, and a timeout for cleanup.
87
+ */
88
+ export declare function startConnectionServerAsync(config: ConnectionServerConfig): Promise<ConnectionResult>;
89
+ export {};
37
90
  //# sourceMappingURL=ConnectorHelpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectorHelpers.d.ts","sourceRoot":"","sources":["../../src/Verbs/ConnectorHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAgC,MAAM,iCAAiC,CAAC;AASzF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAc5D;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,6BAA6B,CACjD,gBAAgB,EAAE,gBAAgB,EAClC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,SAAS,EAAE,GAAG,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CA6C3D;AAED;;;;;GAKG;AACH,wBAAsB,mCAAmC,CAAC,OAAO,EAAE;IACjE,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,GAAG,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsDlB"}
1
+ {"version":3,"file":"ConnectorHelpers.d.ts","sourceRoot":"","sources":["../../src/Verbs/ConnectorHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAUzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAKtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAiB5D;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,6BAA6B,CACjD,gBAAgB,EAAE,gBAAgB,EAClC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IACT,SAAS,EAAE,GAAG,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,4BAA4B,CAAC;CACtC,CAAC,CA6CD;AAED;;;;;GAKG;AACH,wBAAsB,mCAAmC,CAAC,OAAO,EAAE;IACjE,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,GAAG,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4FlB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,0BAA0B,CAAC,IAAI,EAAE;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhB;AAMD,KAAK,sBAAsB,GAAG;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CAqH3B"}
@@ -1,17 +1,23 @@
1
1
  /*!
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  */
4
- import { createConnectionAsync, getConnectorAsync, getEffectiveConnectorDataPolicyAsync, getPlayerServiceConfig, listConnectionsForConnectorAsync, } from '@microsoft/managed-apps-actions';
4
+ import { createConnectionAsync, getConnectorAsync, getEffectiveConnectorDataPolicyAsync, getPlayerServiceConfig, isSsoOnlyConnector, listConnectionsForConnectorAsync, requestConnectionUserConsentAsync, } from '@microsoft/managed-apps-actions';
5
+ import { createMaafConnectionUrl, HttpClientError } from '@microsoft/managed-apps-common/services';
6
+ import * as http from 'http';
7
+ import open from 'open';
5
8
  import { getCliLogger, getSettings } from '../CliSettings.js';
6
9
  import { promptSelect } from '../CliUtils.js';
7
10
  import { CLI_BINARY_NAME } from '../Constants/CliConstants.js';
8
- import { NotFoundError, UsageError } from '../Errors/CliError.js';
9
- import { printTable, printWarning } from '../Utils/ConsoleOutput.js';
11
+ import { AppError, NotFoundError, UsageError } from '../Errors/CliError.js';
12
+ import { printInfo, printSuccess, printTable, printWarning } from '../Utils/ConsoleOutput.js';
13
+ import { getCliEnvVarBool } from '../Utils/EnvVars.js';
10
14
  const ALLOW_ALL_POLICY = {
11
15
  defaultBehavior: 'Allow',
12
16
  allowedConnectors: [],
13
17
  };
14
18
  const CREATE_NEW_CONNECTION = '__create__';
19
+ const CONNECTION_CREATION_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
20
+ const PROTOCOL_VERSION = '1';
15
21
  /**
16
22
  * Preflight step shared by `app add action` and `app add table`. Fetches the
17
23
  * connector and effective DLP policy in parallel, then enforces the policy.
@@ -57,7 +63,7 @@ export async function runConnectorDlpPreflightAsync(argumentProvider, apiId) {
57
63
  if (isBlocked) {
58
64
  throw new UsageError(`Connector '${connector.properties.displayName ?? apiId}' is blocked by your organization's DLP policy.`);
59
65
  }
60
- return { connector, tenantId };
66
+ return { connector, tenantId, policy };
61
67
  }
62
68
  /**
63
69
  * Resolves a connection for a connector. In interactive mode, lists the
@@ -96,21 +102,216 @@ export async function resolveConnectionInteractivelyAsync(options) {
96
102
  options: choices,
97
103
  });
98
104
  if (selected === CREATE_NEW_CONNECTION) {
99
- const newConnection = await createConnectionAsync({
100
- vfs: cliFs,
101
- authProvider,
105
+ // Only attempt SSO when the connector has a single auth type that is SSO-eligible.
106
+ // Connectors with multiple auth types need the browser flow so the user can choose.
107
+ if (isSsoOnlyConnector(connector)) {
108
+ try {
109
+ const newConnection = await createConnectionAsync({
110
+ vfs: cliFs,
111
+ authProvider,
112
+ region: playerServiceConfig.region,
113
+ environmentName: playerServiceConfig.environmentName,
114
+ actionsParams: { connectorId: apiId },
115
+ localFilePaths: {
116
+ appConfigPath: fileConfig.appConfigPath,
117
+ schemaPath: fileConfig.schemaPath,
118
+ codeGenPath: fileConfig.codeGenPath,
119
+ },
120
+ logger,
121
+ });
122
+ return newConnection.name;
123
+ }
124
+ catch (ssoError) {
125
+ printWarning(`Silent connection creation failed: ${ssoError instanceof Error ? ssoError.message : String(ssoError)}`);
126
+ printInfo('Falling back to browser-based connection creation...\n');
127
+ }
128
+ }
129
+ else {
130
+ printInfo('This connector requires manual interaction. Opening browser for connection creation...\n');
131
+ }
132
+ // Browser-based fallback: open the maaf-player connection dialog
133
+ const connectorName = apiId.startsWith('shared_') ? apiId : `shared_${apiId}`;
134
+ const result = await startConnectionServerAsync({
135
+ connectorName,
136
+ environmentId: playerServiceConfig.environmentName,
102
137
  region: playerServiceConfig.region,
103
- environmentName: playerServiceConfig.environmentName,
104
- actionsParams: { connectorId: apiId },
105
- localFilePaths: {
106
- appConfigPath: fileConfig.appConfigPath,
107
- schemaPath: fileConfig.schemaPath,
108
- codeGenPath: fileConfig.codeGenPath,
109
- },
110
- logger,
111
138
  });
112
- return newConnection.name;
139
+ if (result.status === 'created' && result.connectionName) {
140
+ printSuccess('Connection created successfully!');
141
+ if (result.displayName) {
142
+ printInfo(` Display Name: ${result.displayName}`);
143
+ }
144
+ printInfo(` Connection ID: ${result.connectionName}`);
145
+ return result.connectionName;
146
+ }
147
+ else if (result.status === 'error') {
148
+ throw new AppError(result.errorMessage ?? 'Connection creation failed in the browser.');
149
+ }
150
+ else {
151
+ throw new UsageError('Connection creation was cancelled.');
152
+ }
113
153
  }
114
154
  return selected;
115
155
  }
156
+ /**
157
+ * Best-effort request that the calling application be added to a connection's
158
+ * API Hubs ACL via the Power Platform user-consent endpoint. The server reads
159
+ * the calling app's `appid` from the bearer token, and the gateway resolves
160
+ * tenant + environment from the auth context and its routing config — so the
161
+ * CLI only needs to supply connector + connection identifiers, no body.
162
+ *
163
+ * Gating: requires the opt-in feature flag
164
+ * `MS_CLI_ENABLE_CONNECTOR_USER_CONSENT=true` (off by default while the
165
+ * consent endpoint is rolling out). When the flag is unset, the call is
166
+ * silently skipped — no warning, no telemetry, no HTTP traffic.
167
+ *
168
+ * Failure modes:
169
+ * - HTTP 403: emits a permission-specific warning explaining that the tenant
170
+ * admin must grant the calling app the
171
+ * `Connectivity.Connections.UserConsent` delegated permission, then returns.
172
+ * - Any other HTTP / network error: surfaces a generic warning and returns.
173
+ * The underlying `ConnectivityService` already records its own
174
+ * `scenario.failure` telemetry, so this helper doesn't re-emit a duplicate
175
+ * error event.
176
+ *
177
+ * Silent on success: a 200 OK does not guarantee the ACL was modified (the
178
+ * server has feature-gated silent-skip paths), so the success path emits no
179
+ * user-facing message.
180
+ *
181
+ * Never throws.
182
+ */
183
+ export async function requestCliUserConsentAsync(opts) {
184
+ if (!getCliEnvVarBool('ENABLE_CONNECTOR_USER_CONSENT')) {
185
+ return;
186
+ }
187
+ const { apiId, connectionId } = opts;
188
+ const logger = getCliLogger();
189
+ const scenario = logger.trackScenario('ConnectorUserConsent', { apiId, connectionId });
190
+ try {
191
+ await requestConnectionUserConsentAsync(apiId, connectionId, logger);
192
+ scenario.complete();
193
+ }
194
+ catch (error) {
195
+ if (error instanceof HttpClientError && error.status === 403) {
196
+ scenario.failure(error);
197
+ printWarning(`Could not request user consent on connection '${connectionId}' (HTTP 403). ` +
198
+ `The data source was added, but later calls against this connection may fail until ` +
199
+ `your tenant admin grants the calling application the ` +
200
+ `'Connectivity.Connections.UserConsent' delegated permission.`);
201
+ return;
202
+ }
203
+ scenario.failure(error);
204
+ const message = error instanceof Error ? error.message : String(error);
205
+ printWarning(`Could not request user consent on connection '${connectionId}': ${message}. ` +
206
+ `The data source was added, but later calls against this connection may fail.`);
207
+ }
208
+ }
209
+ /**
210
+ * Starts a local HTTP server, opens the maaf-player connection page in the
211
+ * browser, and waits for a callback with the result. Uses the same pattern
212
+ * as an OAuth authorization code flow: nonce for CSRF, protocol version for
213
+ * drift detection, and a timeout for cleanup.
214
+ */
215
+ export async function startConnectionServerAsync(config) {
216
+ const { connectorName, environmentId, region } = config;
217
+ const nonce = crypto.randomUUID();
218
+ return new Promise((resolve, reject) => {
219
+ const server = http.createServer((req, res) => {
220
+ const url = new URL(req.url ?? '/', `http://localhost`);
221
+ if (url.pathname === '/callback' && req.method === 'GET') {
222
+ const queryNonce = url.searchParams.get('nonce');
223
+ if (queryNonce !== nonce) {
224
+ res.writeHead(403, { 'Content-Type': 'text/html; charset=utf-8' });
225
+ res.end('<html><body><h2>Connection request verification failed. Please run the CLI command again.</h2></body></html>');
226
+ cleanup();
227
+ resolve({ status: 'cancelled' });
228
+ return;
229
+ }
230
+ const callbackVersion = url.searchParams.get('v');
231
+ if (callbackVersion !== PROTOCOL_VERSION) {
232
+ printWarning(`Warning: callback protocol version mismatch (expected ${PROTOCOL_VERSION}, got ${callbackVersion ?? 'none'}). Update the CLI to the latest version.`);
233
+ }
234
+ const status = url.searchParams.get('status');
235
+ const errorMessage = url.searchParams.get('message') ?? undefined;
236
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
237
+ let tabHtml;
238
+ if (status === 'created') {
239
+ tabHtml =
240
+ '<html><body><h2>Connection created! You can close this tab.</h2></body></html>';
241
+ }
242
+ else if (status === 'error') {
243
+ const safeMessage = errorMessage
244
+ ? errorMessage.replace(/[&<>"']/g, (c) => `&#${c.charCodeAt(0)};`)
245
+ : '';
246
+ tabHtml = safeMessage
247
+ ? `<html><body><h2>Connection creation failed. You can close this tab.</h2><p>${safeMessage}</p></body></html>`
248
+ : '<html><body><h2>Connection creation failed. You can close this tab.</h2></body></html>';
249
+ }
250
+ else {
251
+ tabHtml =
252
+ '<html><body><h2>Connection creation cancelled. You can close this tab.</h2></body></html>';
253
+ }
254
+ res.end(tabHtml);
255
+ cleanup();
256
+ if (status === 'created') {
257
+ resolve({
258
+ status: 'created',
259
+ connectionId: url.searchParams.get('connectionId') ?? undefined,
260
+ connectionName: url.searchParams.get('connectionName') ?? undefined,
261
+ displayName: url.searchParams.get('displayName') ?? undefined,
262
+ });
263
+ }
264
+ else if (status === 'error') {
265
+ resolve({ status: 'error', errorMessage });
266
+ }
267
+ else {
268
+ resolve({ status: 'cancelled' });
269
+ }
270
+ return;
271
+ }
272
+ res.writeHead(404);
273
+ res.end('Not found');
274
+ });
275
+ // Listen on port 0 to let the OS assign an available port
276
+ server.listen(0, 'localhost', async () => {
277
+ const address = server.address();
278
+ const port = typeof address === 'object' && address ? address.port : 0;
279
+ const callbackUrl = `http://localhost:${port}/callback`;
280
+ const playerUrl = createMaafConnectionUrl(region, environmentId, {
281
+ connector: connectorName,
282
+ callbackUrl,
283
+ nonce,
284
+ protocolVersion: PROTOCOL_VERSION,
285
+ });
286
+ printInfo(`Opening browser at ${playerUrl}`);
287
+ try {
288
+ await open(playerUrl, { wait: false });
289
+ }
290
+ catch {
291
+ printInfo(`Could not open browser automatically. Please navigate to:\n ${playerUrl}`);
292
+ }
293
+ printInfo('Waiting for connection creation... (press Ctrl+C to cancel)\n');
294
+ });
295
+ server.on('error', (error) => {
296
+ cleanup();
297
+ reject(error);
298
+ });
299
+ const timeoutId = setTimeout(() => {
300
+ printInfo('\nConnection creation timed out after 10 minutes.');
301
+ cleanup();
302
+ resolve({ status: 'cancelled' });
303
+ }, CONNECTION_CREATION_TIMEOUT_MS);
304
+ const sigintHandler = () => {
305
+ printInfo('\nCancelling...');
306
+ cleanup();
307
+ resolve({ status: 'cancelled' });
308
+ };
309
+ function cleanup() {
310
+ clearTimeout(timeoutId);
311
+ process.off('SIGINT', sigintHandler);
312
+ server.close();
313
+ }
314
+ process.on('SIGINT', sigintHandler);
315
+ });
316
+ }
116
317
  //# sourceMappingURL=ConnectorHelpers.js.map
@@ -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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"}
@@ -3,6 +3,17 @@
3
3
  */
4
4
  import { type RepoType } from '@microsoft/managed-apps-common/config';
5
5
  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 Enterprise repo 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
+ */
6
17
  interface RepoSelection {
7
18
  repoType: RepoType;
8
19
  remoteUrl: string | undefined;
@@ -13,8 +24,23 @@ interface RepoSelection {
13
24
  * - `none` (case-insensitive) → `none` (no GRS, no local setup)
14
25
  * - any other non-empty value → `github` (external GHE binding, value flows through as
15
26
  * `remoteUrl` to the action and the eventual git clone)
27
+ *
28
+ * Runtime invariant: `remoteUrl` is set iff `repoType === 'github'`. Consumers
29
+ * branch on `repoType` and assert `remoteUrl!` at github use sites — see
30
+ * `RepoSelection` for why narrowing is not automatic.
16
31
  */
17
32
  export declare function parseRepoOption(rawRepoValue: string | undefined): RepoSelection;
33
+ /**
34
+ * Creates a new MAAF app and (where applicable) sets up local source control.
35
+ *
36
+ * Three repo flows, selected by `--repo`:
37
+ * - `native` (default): server auto-provisions a GRS repo; local clone happens via GCM.
38
+ * - `github`: external GHE Cloud binding. Clones the user's repo locally. On the first
39
+ * `createAsync` call, a missing/expired server-side GitHub identity mapping is
40
+ * recoverable in-band: a single inline DCF run + exactly one `createAsync` retry.
41
+ * Any other error — or a second mapping failure after DCF — is a hard fail.
42
+ * - `none`: no git binding at all (just the server record + template + ms.config.json).
43
+ */
18
44
  export declare function createMaafAppAsync(argumentProvider: ArgumentProvider): Promise<void>;
19
45
  interface CloneRepoOptions {
20
46
  directory: string;
@@ -52,7 +78,6 @@ export declare function ensureGitInstalled(): void;
52
78
  export declare function ensureTemplateSourceValid(source: string): void;
53
79
  export declare function ensureTargetDirectoryEmpty(appDir: string): void;
54
80
  export declare function ensureRepoTargetDirectoryEmpty(appDir: string): void;
55
- export declare function ensureNoExistingConfig(appDir: string): void;
56
81
  export declare function ensureTargetDirectoryWritable(appDir: string): void;
57
82
  export {};
58
83
  //# sourceMappingURL=CreateMaafApp.d.ts.map
@@ -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;AAezF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAsB5D,UAAU,aAAa;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAQ/E;AAED,wBAAsB,kBAAkB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsU1F;AAsDD,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,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAc3D;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;AAWH,OAAO,EAAqB,KAAK,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAOzF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAgC5D;;;;;;;;;;GAUG;AACH,UAAU,aAAa;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;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,CAmZ1F;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,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA8BlE"}