@microsoft/power-apps-cli 0.9.1 → 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 (202) hide show
  1. package/README.md +81 -10
  2. package/dist/ArgumentProvider.d.ts +61 -0
  3. package/dist/ArgumentProvider.d.ts.map +1 -0
  4. package/dist/ArgumentProvider.js +247 -0
  5. package/dist/ArgumentProvider.js.map +1 -0
  6. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts +17 -0
  7. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -0
  8. package/dist/Authentication/NodeMsalAuthenticationProvider.js +91 -0
  9. package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -0
  10. package/dist/Authentication/PacCliAuthenticationProvider.d.ts +15 -0
  11. package/dist/Authentication/PacCliAuthenticationProvider.d.ts.map +1 -0
  12. package/dist/Authentication/PacCliAuthenticationProvider.js +51 -0
  13. package/dist/Authentication/PacCliAuthenticationProvider.js.map +1 -0
  14. package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts +20 -0
  15. package/dist/Authentication/ServicePrincipalAuthenticationProvider.d.ts.map +1 -0
  16. package/dist/Authentication/ServicePrincipalAuthenticationProvider.js +51 -0
  17. package/dist/Authentication/ServicePrincipalAuthenticationProvider.js.map +1 -0
  18. package/dist/Bin.d.ts +6 -0
  19. package/dist/Bin.d.ts.map +1 -0
  20. package/dist/Bin.js +2 -3357
  21. package/dist/Bin.js.map +1 -0
  22. package/dist/Cli.d.ts +2 -0
  23. package/dist/Cli.d.ts.map +1 -0
  24. package/dist/Cli.js +131 -0
  25. package/dist/Cli.js.map +1 -0
  26. package/dist/CliSettings.d.ts +14 -0
  27. package/dist/CliSettings.d.ts.map +1 -0
  28. package/dist/CliSettings.js +70 -0
  29. package/dist/CliSettings.js.map +1 -0
  30. package/dist/CliUtils.d.ts +21 -0
  31. package/dist/CliUtils.d.ts.map +1 -0
  32. package/dist/CliUtils.js +92 -0
  33. package/dist/CliUtils.js.map +1 -0
  34. package/dist/Constants/HelpStrings.d.ts +168 -0
  35. package/dist/Constants/HelpStrings.d.ts.map +1 -0
  36. package/dist/Constants/HelpStrings.js +216 -0
  37. package/dist/Constants/HelpStrings.js.map +1 -0
  38. package/dist/Constants/VerbRegistry.d.ts +79 -0
  39. package/dist/Constants/VerbRegistry.d.ts.map +1 -0
  40. package/dist/Constants/VerbRegistry.js +46 -0
  41. package/dist/Constants/VerbRegistry.js.map +1 -0
  42. package/dist/Constants.d.ts +10 -0
  43. package/dist/Constants.d.ts.map +1 -0
  44. package/dist/Constants.js +12 -0
  45. package/dist/Constants.js.map +1 -0
  46. package/dist/Errors/CliError.d.ts +11 -0
  47. package/dist/Errors/CliError.d.ts.map +1 -0
  48. package/dist/Errors/CliError.js +16 -0
  49. package/dist/Errors/CliError.js.map +1 -0
  50. package/dist/FS/CliFs.d.ts +41 -0
  51. package/dist/FS/CliFs.d.ts.map +1 -0
  52. package/dist/FS/CliFs.js +136 -0
  53. package/dist/FS/CliFs.js.map +1 -0
  54. package/dist/HttpClient/CliHttpClient.d.ts +21 -0
  55. package/dist/HttpClient/CliHttpClient.d.ts.map +1 -0
  56. package/dist/HttpClient/CliHttpClient.js +118 -0
  57. package/dist/HttpClient/CliHttpClient.js.map +1 -0
  58. package/dist/Logger/CliLogger.d.ts +27 -0
  59. package/dist/Logger/CliLogger.d.ts.map +1 -0
  60. package/dist/Logger/CliLogger.js +222 -0
  61. package/dist/Logger/CliLogger.js.map +1 -0
  62. package/dist/Logger/ConsoleWriter.d.ts +15 -0
  63. package/dist/Logger/ConsoleWriter.d.ts.map +1 -0
  64. package/dist/Logger/ConsoleWriter.js +45 -0
  65. package/dist/Logger/ConsoleWriter.js.map +1 -0
  66. package/dist/Logger/Constants.d.ts +6 -0
  67. package/dist/Logger/Constants.d.ts.map +1 -0
  68. package/dist/Logger/Constants.js +15 -0
  69. package/dist/Logger/Constants.js.map +1 -0
  70. package/dist/Logger/LoggerSettings.d.ts +18 -0
  71. package/dist/Logger/LoggerSettings.d.ts.map +1 -0
  72. package/dist/Logger/LoggerSettings.js +100 -0
  73. package/dist/Logger/LoggerSettings.js.map +1 -0
  74. package/dist/Logger/OneDSWriter.d.ts +22 -0
  75. package/dist/Logger/OneDSWriter.d.ts.map +1 -0
  76. package/dist/Logger/OneDSWriter.js +137 -0
  77. package/dist/Logger/OneDSWriter.js.map +1 -0
  78. package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts +5 -0
  79. package/dist/Logger/Scrubber/ScrubCustomDimensions.d.ts.map +1 -0
  80. package/dist/Logger/Scrubber/ScrubCustomDimensions.js +46 -0
  81. package/dist/Logger/Scrubber/ScrubCustomDimensions.js.map +1 -0
  82. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts +27 -0
  83. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.d.ts.map +1 -0
  84. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js +168 -0
  85. package/dist/Logger/Scrubber/ScrubCustomDimensionsConfig.js.map +1 -0
  86. package/dist/Logger/Scrubber/ScrubUtils.d.ts +8 -0
  87. package/dist/Logger/Scrubber/ScrubUtils.d.ts.map +1 -0
  88. package/dist/Logger/Scrubber/ScrubUtils.js +34 -0
  89. package/dist/Logger/Scrubber/ScrubUtils.js.map +1 -0
  90. package/dist/Types/Argument.types.d.ts +20 -0
  91. package/dist/Types/Argument.types.d.ts.map +1 -0
  92. package/dist/Types/Argument.types.js +5 -0
  93. package/dist/Types/Argument.types.js.map +1 -0
  94. package/dist/Types/Cli.types.d.ts +35 -0
  95. package/dist/Types/Cli.types.d.ts.map +1 -0
  96. package/dist/Types/Cli.types.js +5 -0
  97. package/dist/Types/Cli.types.js.map +1 -0
  98. package/dist/Types/Datasource.types.d.ts +43 -0
  99. package/dist/Types/Datasource.types.d.ts.map +1 -0
  100. package/dist/Types/Datasource.types.js +5 -0
  101. package/dist/Types/Datasource.types.js.map +1 -0
  102. package/dist/Types/LoggerTypes.types.d.ts +17 -0
  103. package/dist/Types/LoggerTypes.types.d.ts.map +1 -0
  104. package/dist/Types/LoggerTypes.types.js +5 -0
  105. package/dist/Types/LoggerTypes.types.js.map +1 -0
  106. package/dist/Utils/BuildVerbDescriptionTable.d.ts +9 -0
  107. package/dist/Utils/BuildVerbDescriptionTable.d.ts.map +1 -0
  108. package/dist/Utils/BuildVerbDescriptionTable.js +29 -0
  109. package/dist/Utils/BuildVerbDescriptionTable.js.map +1 -0
  110. package/dist/Utils/ConsoleOutput.d.ts +39 -0
  111. package/dist/Utils/ConsoleOutput.d.ts.map +1 -0
  112. package/dist/Utils/ConsoleOutput.js +111 -0
  113. package/dist/Utils/ConsoleOutput.js.map +1 -0
  114. package/dist/Utils/EnhanceNetworkError.d.ts +14 -0
  115. package/dist/Utils/EnhanceNetworkError.d.ts.map +1 -0
  116. package/dist/Utils/EnhanceNetworkError.js +59 -0
  117. package/dist/Utils/EnhanceNetworkError.js.map +1 -0
  118. package/dist/Verbs/AddDataSource.d.ts +19 -0
  119. package/dist/Verbs/AddDataSource.d.ts.map +1 -0
  120. package/dist/Verbs/AddDataSource.js +157 -0
  121. package/dist/Verbs/AddDataSource.js.map +1 -0
  122. package/dist/Verbs/AddDataverseApi.d.ts +13 -0
  123. package/dist/Verbs/AddDataverseApi.d.ts.map +1 -0
  124. package/dist/Verbs/AddDataverseApi.js +67 -0
  125. package/dist/Verbs/AddDataverseApi.js.map +1 -0
  126. package/dist/Verbs/AddFlow.d.ts +12 -0
  127. package/dist/Verbs/AddFlow.d.ts.map +1 -0
  128. package/dist/Verbs/AddFlow.js +66 -0
  129. package/dist/Verbs/AddFlow.js.map +1 -0
  130. package/dist/Verbs/DeleteDataSource.d.ts +6 -0
  131. package/dist/Verbs/DeleteDataSource.d.ts.map +1 -0
  132. package/dist/Verbs/DeleteDataSource.js +108 -0
  133. package/dist/Verbs/DeleteDataSource.js.map +1 -0
  134. package/dist/Verbs/FindDataverseApi.d.ts +12 -0
  135. package/dist/Verbs/FindDataverseApi.d.ts.map +1 -0
  136. package/dist/Verbs/FindDataverseApi.js +101 -0
  137. package/dist/Verbs/FindDataverseApi.js.map +1 -0
  138. package/dist/Verbs/Init.d.ts +6 -0
  139. package/dist/Verbs/Init.d.ts.map +1 -0
  140. package/dist/Verbs/Init.js +146 -0
  141. package/dist/Verbs/Init.js.map +1 -0
  142. package/dist/Verbs/ListCodeApps.d.ts +6 -0
  143. package/dist/Verbs/ListCodeApps.d.ts.map +1 -0
  144. package/dist/Verbs/ListCodeApps.js +31 -0
  145. package/dist/Verbs/ListCodeApps.js.map +1 -0
  146. package/dist/Verbs/ListConnectionReferences.d.ts +6 -0
  147. package/dist/Verbs/ListConnectionReferences.d.ts.map +1 -0
  148. package/dist/Verbs/ListConnectionReferences.js +80 -0
  149. package/dist/Verbs/ListConnectionReferences.js.map +1 -0
  150. package/dist/Verbs/ListDatasets.d.ts +6 -0
  151. package/dist/Verbs/ListDatasets.d.ts.map +1 -0
  152. package/dist/Verbs/ListDatasets.js +83 -0
  153. package/dist/Verbs/ListDatasets.js.map +1 -0
  154. package/dist/Verbs/ListEnvironmentVariables.d.ts +14 -0
  155. package/dist/Verbs/ListEnvironmentVariables.d.ts.map +1 -0
  156. package/dist/Verbs/ListEnvironmentVariables.js +82 -0
  157. package/dist/Verbs/ListEnvironmentVariables.js.map +1 -0
  158. package/dist/Verbs/ListFlows.d.ts +13 -0
  159. package/dist/Verbs/ListFlows.d.ts.map +1 -0
  160. package/dist/Verbs/ListFlows.js +88 -0
  161. package/dist/Verbs/ListFlows.js.map +1 -0
  162. package/dist/Verbs/ListSqlStoredProcedures.d.ts +6 -0
  163. package/dist/Verbs/ListSqlStoredProcedures.d.ts.map +1 -0
  164. package/dist/Verbs/ListSqlStoredProcedures.js +84 -0
  165. package/dist/Verbs/ListSqlStoredProcedures.js.map +1 -0
  166. package/dist/Verbs/ListTables.d.ts +6 -0
  167. package/dist/Verbs/ListTables.d.ts.map +1 -0
  168. package/dist/Verbs/ListTables.js +95 -0
  169. package/dist/Verbs/ListTables.js.map +1 -0
  170. package/dist/Verbs/Logout.d.ts +6 -0
  171. package/dist/Verbs/Logout.d.ts.map +1 -0
  172. package/dist/Verbs/Logout.js +28 -0
  173. package/dist/Verbs/Logout.js.map +1 -0
  174. package/dist/Verbs/Push.d.ts +6 -0
  175. package/dist/Verbs/Push.d.ts.map +1 -0
  176. package/dist/Verbs/Push.js +108 -0
  177. package/dist/Verbs/Push.js.map +1 -0
  178. package/dist/Verbs/RefreshDataSource.d.ts +6 -0
  179. package/dist/Verbs/RefreshDataSource.d.ts.map +1 -0
  180. package/dist/Verbs/RefreshDataSource.js +70 -0
  181. package/dist/Verbs/RefreshDataSource.js.map +1 -0
  182. package/dist/Verbs/RemoveFlow.d.ts +12 -0
  183. package/dist/Verbs/RemoveFlow.d.ts.map +1 -0
  184. package/dist/Verbs/RemoveFlow.js +98 -0
  185. package/dist/Verbs/RemoveFlow.js.map +1 -0
  186. package/dist/Verbs/Run.d.ts +6 -0
  187. package/dist/Verbs/Run.d.ts.map +1 -0
  188. package/dist/Verbs/Run.js +122 -0
  189. package/dist/Verbs/Run.js.map +1 -0
  190. package/dist/Verbs/TelemetrySettings.d.ts +12 -0
  191. package/dist/Verbs/TelemetrySettings.d.ts.map +1 -0
  192. package/dist/Verbs/TelemetrySettings.js +158 -0
  193. package/dist/Verbs/TelemetrySettings.js.map +1 -0
  194. package/dist/Verbs/VerbConstants.d.ts +203 -0
  195. package/dist/Verbs/VerbConstants.d.ts.map +1 -0
  196. package/dist/Verbs/VerbConstants.js +201 -0
  197. package/dist/Verbs/VerbConstants.js.map +1 -0
  198. package/dist/Verbs/index.d.ts +22 -0
  199. package/dist/Verbs/index.d.ts.map +1 -0
  200. package/dist/Verbs/index.js +22 -0
  201. package/dist/Verbs/index.js.map +1 -0
  202. package/package.json +5 -5
package/README.md CHANGED
@@ -63,16 +63,16 @@ npx power-apps init [options]
63
63
 
64
64
  **Options:**
65
65
 
66
- | Option | Alias | Description | Default |
67
- | -------------------- | ----- | ----------------------------------------------------- | ----------------------- |
68
- | `--environment-id` | `-e` | Environment ID to connect to | |
69
- | `--cloud` | | Cloud instance to use (e.g., prod, test, etc.) | `prod` |
70
- | `--display-name` | `-n` | Display name for the app | |
71
- | `--description` | `-d` | App description | _(empty)_ |
72
- | `--build-path` | `-b` | Build output path | `./dist` |
73
- | `--file-entry-point` | `-f` | Entry point file for the app | `index.html` |
74
- | `--app-url` | `-a` | Local URL where the app is hosted | `http://localhost:3000` |
75
- | `--logo-path` | `-l` | Path to the app logo file | `Default` |
66
+ | Option | Alias | Description | Default |
67
+ | -------------------- | ----- | ---------------------------------------------- | ----------------------- |
68
+ | `--environment-id` | `-e` | Environment ID to connect to | |
69
+ | `--cloud` | | Cloud instance to use (e.g., prod, test, etc.) | `prod` |
70
+ | `--display-name` | `-n` | Display name for the app | |
71
+ | `--description` | `-d` | App description | _(empty)_ |
72
+ | `--build-path` | `-b` | Build output path | `./dist` |
73
+ | `--file-entry-point` | `-f` | Entry point file for the app | `index.html` |
74
+ | `--app-url` | `-a` | Local URL where the app is hosted | `http://localhost:3000` |
75
+ | `--logo-path` | `-l` | Path to the app logo file | `Default` |
76
76
 
77
77
  ---
78
78
 
@@ -261,6 +261,77 @@ npx power-apps list-flows [options]
261
261
 
262
262
  ---
263
263
 
264
+ ### `add-flow`
265
+
266
+ Add a cloud flow to the current Power Apps code app by flow ID. Fetches the flow metadata and swagger, updates `power.config` with connection references, and generates model services.
267
+
268
+ ```bash
269
+ npx power-apps add-flow --flow-id <flow-id>
270
+ ```
271
+
272
+ **Options:**
273
+
274
+ | Option | Alias | Description |
275
+ | ----------- | ----- | ----------------------------------------------- |
276
+ | `--flow-id` | `-f` | The unique identifier (GUID) of the flow to add |
277
+
278
+ **Example:**
279
+
280
+ ```bash
281
+ npx power-apps add-flow --flow-id 00000000-0000-0000-0000-000000000000
282
+ ```
283
+
284
+ ---
285
+
286
+ ### `find-dataverse-api`
287
+
288
+ Search Dataverse actions and functions in the environment by name.
289
+
290
+ ```bash
291
+ npx power-apps find-dataverse-api [options]
292
+ ```
293
+
294
+ **Options:**
295
+
296
+ | Option | Alias | Description |
297
+ | ---------- | ----- | -------------------------------------------------- |
298
+ | `--search` | `-s` | Search term to filter Dataverse operations by name |
299
+
300
+ **Examples:**
301
+
302
+ ```bash
303
+ npx power-apps find-dataverse-api --search "account"
304
+ npx power-apps find-dataverse-api --search "account" --json
305
+ ```
306
+
307
+ ---
308
+
309
+ ### `remove-flow`
310
+
311
+ Remove a cloud flow from the current Power Apps code app. Deletes the flow's connection references from `power.config`, removes the schema file, and regenerates model services.
312
+
313
+ ```bash
314
+ npx power-apps remove-flow [options]
315
+ ```
316
+
317
+ **Options:**
318
+
319
+ | Option | Alias | Description |
320
+ | ------------- | ----- | --------------------------------------------------------------------- |
321
+ | `--flow-name` | `-n` | The flow data source name to remove (as it appears in `power.config`) |
322
+ | `--flow-id` | `-f` | The flow resource ID (GUID) to remove — same ID used with `add-flow` |
323
+
324
+ Provide either `--flow-name` or `--flow-id`.
325
+
326
+ **Examples:**
327
+
328
+ ```bash
329
+ npx power-apps remove-flow --flow-name myFlow
330
+ npx power-apps remove-flow --flow-id 00000000-0000-0000-0000-000000000000
331
+ ```
332
+
333
+ ---
334
+
264
335
  ### `telemetry`
265
336
 
266
337
  Manage telemetry settings.
@@ -0,0 +1,61 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { IHttpClient } from '@microsoft/power-apps-actions';
5
+ import type { CliLogger } from './Logger/CliLogger.js';
6
+ import type { CliOption } from './Types/Argument.types.js';
7
+ import type { Verb } from './Types/Cli.types.js';
8
+ import type { IAuthenticationProvider } from './Types/Cli.types.js';
9
+ export interface IArgumentProvider {
10
+ addOption(cliOption: CliOption): void;
11
+ addOptions(cliOptions: CliOption[]): void;
12
+ addSwitch(cliOption: CliOption): void;
13
+ addSwitches(cliOptions: CliOption[]): void;
14
+ runVerb(): Promise<void>;
15
+ getVerb(): Verb;
16
+ handleGlobalHelpOrFlagsAndExit(): void;
17
+ getOption<T>(key: string, ignorePrompt?: boolean): Promise<T>;
18
+ getAuthenticationProvider(): IAuthenticationProvider;
19
+ setDescription(description: string): void;
20
+ isJsonMode(): boolean;
21
+ addExamples(examples: string[]): void;
22
+ }
23
+ export declare class ArgumentProvider implements IArgumentProvider {
24
+ private _httpClient;
25
+ private _logger;
26
+ private _authenticationProvider;
27
+ private _environmentId;
28
+ private _region;
29
+ private _verb;
30
+ private _program;
31
+ private _options;
32
+ constructor(_httpClient: IHttpClient, _logger: CliLogger, _authenticationProvider: IAuthenticationProvider);
33
+ addSwitch(cliOption: CliOption): void;
34
+ addSwitches(cliOptions: CliOption[]): void;
35
+ addOption(cliOption: CliOption): void;
36
+ addOptions(cliOptions: CliOption[]): void;
37
+ runVerb(): Promise<void>;
38
+ handleGlobalHelpOrFlagsAndExit(): void;
39
+ getVerb(): Verb;
40
+ getOption<T>(key: string, ignorePrompt?: boolean): Promise<T>;
41
+ getAuthenticationProvider(): IAuthenticationProvider;
42
+ /**
43
+ * Sets the description for the current command context.
44
+ * This is used to display help information specific to the verb being executed.
45
+ *
46
+ * @param {string} description - The description to set for the program.
47
+ */
48
+ setDescription(description: string): void;
49
+ isJsonMode(): boolean;
50
+ addExamples(examples: string[]): void;
51
+ getEnvironmentId(): string | undefined;
52
+ private _getRequiredVariables;
53
+ /**
54
+ * @param {CliOption} cliOption
55
+ * @param {boolean} [hasValue=true] true if the option requires a value, false for a switch such as --help
56
+ */
57
+ private _createOption;
58
+ private _createFlags;
59
+ private _createSwitchFlags;
60
+ }
61
+ //# sourceMappingURL=ArgumentProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArgumentProvider.d.ts","sourceRoot":"","sources":["../src/ArgumentProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAcjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAS,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAIjE,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACtC,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC1C,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACtC,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,IAAI,CAAC;IAChB,8BAA8B,IAAI,IAAI,CAAC;IACvC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9D,yBAAyB,IAAI,uBAAuB,CAAC;IACrD,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,UAAU,IAAI,OAAO,CAAC;IACtB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACvC;AAED,qBAAa,gBAAiB,YAAW,iBAAiB;IAQtD,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,uBAAuB;IATjC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAiC;gBAGvC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,SAAS,EAClB,uBAAuB,EAAE,uBAAuB;IAgFnD,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIrC,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAI1C,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIrC,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAInC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B9B,8BAA8B;IAU9B,OAAO,IAAI,IAAI;IAOT,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAqCnE,yBAAyB,IAAI,uBAAuB;IAI3D;;;;;OAKG;IACI,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC,UAAU,IAAI,OAAO;IAIrB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAWrC,gBAAgB,IAAI,MAAM,GAAG,SAAS;YAI/B,qBAAqB;IAsBnC;;;OAGG;IACH,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,kBAAkB;CAI3B"}
@@ -0,0 +1,247 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { initializePlayerServices, updateEnvironmentName, updateRegion, } from '@microsoft/power-apps-actions';
5
+ import { Command } from 'commander';
6
+ import packageJson from '../package.json' with { type: 'json' };
7
+ import { getSettings } from './CliSettings.js';
8
+ import { createDefaultStringOption } from './CliUtils.js';
9
+ import { HelpStrings } from './Constants/HelpStrings.js';
10
+ import { UsageError } from './Errors/CliError.js';
11
+ import { buildVerbDescriptionTable } from './Utils/BuildVerbDescriptionTable.js';
12
+ import { GlobalArguments } from './Verbs/VerbConstants.js';
13
+ export class ArgumentProvider {
14
+ _httpClient;
15
+ _logger;
16
+ _authenticationProvider;
17
+ _environmentId;
18
+ _region;
19
+ _verb;
20
+ _program;
21
+ _options = {};
22
+ constructor(_httpClient, _logger, _authenticationProvider) {
23
+ this._httpClient = _httpClient;
24
+ this._logger = _logger;
25
+ this._authenticationProvider = _authenticationProvider;
26
+ this._verb = (process.argv[2] || process.env.VERB);
27
+ this._program = new Command();
28
+ // Add the --non-interactive switch as a global option
29
+ this._program.option('--non-interactive', 'Run in non-interactive mode (no prompts, all parameters must be provided via flags or environment variables)');
30
+ this._program.option('--json', 'Format output as JSON');
31
+ this._program.option('--no-color', 'Disable colored output');
32
+ // If a specific verb is detected (and it's not a flag like --help), we configure the program
33
+ // to behave as if that verb is the command itself (e.g., "power-apps-cli add-data-source").
34
+ // This allows us to display help specific to that verb (options, description) when --help is used,
35
+ // rather than showing the generic top-level help. We omit the [verb] argument definition here
36
+ // because the verb is already "consumed" into the program name for this execution context.
37
+ if (this._verb && !this._verb.startsWith('-')) {
38
+ this._program.name(`power-apps ${this._verb}`);
39
+ }
40
+ else {
41
+ this._program.name('power-apps');
42
+ this._program.usage('[option] [command] [<args>]');
43
+ }
44
+ this._program.version(packageJson.version, '-v, --version', 'output the current version');
45
+ this._program.description(HelpStrings.Global.ProgramDescription);
46
+ // Register custom help text to show verb table on global --help
47
+ // This uses Commander's addHelpText hook which runs when help is displayed
48
+ this._program.addHelpText('after', (_context) => {
49
+ // Only show verb table for global help (not verb-specific help)
50
+ if (!this._verb || this._verb.startsWith('-')) {
51
+ return '\n' + buildVerbDescriptionTable() + '\n';
52
+ }
53
+ return '';
54
+ });
55
+ const settings = getSettings();
56
+ this._environmentId = settings.appConfig?.environmentId;
57
+ this._region = settings.appConfig?.region;
58
+ if (!this._region) {
59
+ // Do not provide a prompt, default to prod
60
+ this.addOption({
61
+ flags: {
62
+ key: GlobalArguments.Cloud.name,
63
+ },
64
+ env: GlobalArguments.Cloud.envVar,
65
+ default: 'prod',
66
+ description: HelpStrings.Global.Cloud,
67
+ });
68
+ }
69
+ // If we do not have an environmentId, add an option to get one
70
+ if (!this._environmentId) {
71
+ this.addOption(createDefaultStringOption({
72
+ flags: {
73
+ key: GlobalArguments.EnvironmentId.name,
74
+ alias: GlobalArguments.EnvironmentId.alias,
75
+ },
76
+ env: GlobalArguments.EnvironmentId.envVar,
77
+ message: 'Please provide the environment ID:',
78
+ description: HelpStrings.Global.EnvironmentId,
79
+ }));
80
+ }
81
+ initializePlayerServices({
82
+ httpClient: this._httpClient,
83
+ logger: this._logger,
84
+ // Default region is 'prod' if not specified
85
+ region: this._region || 'prod',
86
+ // Do a temporary variable
87
+ environmentName: this._environmentId || 'default',
88
+ });
89
+ }
90
+ addSwitch(cliOption) {
91
+ this._createOption(cliOption, false);
92
+ }
93
+ addSwitches(cliOptions) {
94
+ cliOptions.forEach((cliOption) => this._createOption(cliOption, false));
95
+ }
96
+ addOption(cliOption) {
97
+ this._createOption(cliOption);
98
+ }
99
+ addOptions(cliOptions) {
100
+ cliOptions.forEach((cliOption) => this._createOption(cliOption));
101
+ }
102
+ async runVerb() {
103
+ // Commander needs to see only the verb-specific arguments, so strip the verb token
104
+ // when a verb was supplied explicitly; global flag paths skip this method entirely.
105
+ if (this._verb && !this._verb.startsWith('-') && process.argv[2] === this._verb) {
106
+ const args = [process.argv[0], process.argv[1], ...process.argv.slice(3)];
107
+ this._program.parse(args);
108
+ }
109
+ else {
110
+ this._program.parse();
111
+ }
112
+ await this._getRequiredVariables();
113
+ if (!this._region) {
114
+ throw new UsageError('Region is not set. Use --cloud or set the CLOUD_INSTANCE environment variable.');
115
+ }
116
+ await this._authenticationProvider.initAsync(this._region);
117
+ await this._logger.initializeTelemetry(this._authenticationProvider);
118
+ this._logger.trackActivityEvent('Initialize', {
119
+ verb: this._verb,
120
+ });
121
+ }
122
+ // Handles scenarios where only global flags (e.g., --help/--version) are provided.
123
+ // Returns 'help' when no verb is present, 'flag' when a flag verb needs Commander handling,
124
+ // and 'none' when execution should continue to verb-specific logic.
125
+ handleGlobalHelpOrFlagsAndExit() {
126
+ if (!this._verb) {
127
+ this._program.help(); // This will display help and exit
128
+ }
129
+ if (this._verb.startsWith('-')) {
130
+ this._program.parse(process.argv);
131
+ }
132
+ }
133
+ getVerb() {
134
+ if (!this._verb || this._verb.startsWith('-')) {
135
+ throw new UsageError('No command specified. Run "power-apps --help" for available commands.');
136
+ }
137
+ return this._verb;
138
+ }
139
+ async getOption(key, ignorePrompt) {
140
+ const settings = getSettings();
141
+ let value = this._program.getOptionValue(key);
142
+ const option = this._options[key];
143
+ // Fallback to environment variable if not provided via CLI
144
+ if (value === undefined && option && option.env) {
145
+ value = process.env[option.env];
146
+ }
147
+ // Fallback to default value if not provided via CLI or Env
148
+ if (value === undefined && option && option.default !== undefined) {
149
+ value = option.default;
150
+ }
151
+ if (!value && !ignorePrompt && option?.customPrompt) {
152
+ if (!settings.interactive) {
153
+ if (option.optionalInNonInteractive) {
154
+ // Option is optional — return undefined and let the actions layer handle it.
155
+ }
156
+ else {
157
+ const flagName = option.flags.key;
158
+ const alias = option.flags.alias;
159
+ const flagHint = alias ? `--${flagName} (-${alias})` : `--${flagName}`;
160
+ const envHint = option.env ? ` or environment variable (${option.env})` : '';
161
+ throw new UsageError(`Missing required option ${flagHint}${envHint}. In non-interactive mode, all parameters must be provided via flags or environment variables.`);
162
+ }
163
+ }
164
+ else {
165
+ value = await option.customPrompt();
166
+ }
167
+ }
168
+ // Option could be undefined by design, so just return it.
169
+ return value;
170
+ }
171
+ getAuthenticationProvider() {
172
+ return this._authenticationProvider;
173
+ }
174
+ /**
175
+ * Sets the description for the current command context.
176
+ * This is used to display help information specific to the verb being executed.
177
+ *
178
+ * @param {string} description - The description to set for the program.
179
+ */
180
+ setDescription(description) {
181
+ this._program.description(description);
182
+ }
183
+ isJsonMode() {
184
+ return this._program.opts().json === true;
185
+ }
186
+ addExamples(examples) {
187
+ if (!examples || examples.length === 0)
188
+ return;
189
+ this._program.addHelpText('after', () => {
190
+ const lines = ['', 'Examples:'];
191
+ examples.forEach((example) => {
192
+ lines.push(` $ ${example}`);
193
+ });
194
+ return lines.join('\n');
195
+ });
196
+ }
197
+ getEnvironmentId() {
198
+ return this._environmentId;
199
+ }
200
+ async _getRequiredVariables() {
201
+ // We always need a region and environmentId, which we usually get from the config.
202
+ // If there is no config we prompt for them, except for init/telemetry which manage their own state.
203
+ if (this._verb !== 'telemetry' && this._verb !== 'logout') {
204
+ if (!this._environmentId) {
205
+ const environmentId = await this.getOption('environmentId');
206
+ if (environmentId) {
207
+ this._environmentId = environmentId;
208
+ updateEnvironmentName(this._environmentId);
209
+ }
210
+ }
211
+ }
212
+ if (!this._region) {
213
+ const region = await this.getOption('cloud');
214
+ if (region) {
215
+ this._region = region;
216
+ updateRegion(region);
217
+ }
218
+ }
219
+ }
220
+ /**
221
+ * @param {CliOption} cliOption
222
+ * @param {boolean} [hasValue=true] true if the option requires a value, false for a switch such as --help
223
+ */
224
+ _createOption(cliOption, hasValue = true) {
225
+ const option = this._program.createOption(hasValue ? this._createFlags(cliOption.flags) : this._createSwitchFlags(cliOption.flags), cliOption.description);
226
+ // We do not set the env or default here because we want to handle it manually in getOption
227
+ // This allows us to hide the env variable from the help text
228
+ // Hide global options from help output when showing global help
229
+ // This prevents --environment-id and --cloud from showing up in the global help
230
+ if (!this._verb || this._verb.startsWith('-')) {
231
+ option.hideHelp();
232
+ }
233
+ this._program.addOption(option);
234
+ // Map to CliOption using Commander's camelCase attribute name so
235
+ // getOption('environmentId') finds the option registered as --environment-id.
236
+ this._options[option.attributeName()] = cliOption;
237
+ }
238
+ _createFlags(flags) {
239
+ const { key, alias } = flags;
240
+ return alias ? `-${alias}, --${key} <${key}>` : `--${key} <${key}>`;
241
+ }
242
+ _createSwitchFlags(flags) {
243
+ const { key, alias } = flags;
244
+ return alias ? `-${alias}, --${key}` : `--${key}`;
245
+ }
246
+ }
247
+ //# sourceMappingURL=ArgumentProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArgumentProvider.js","sourceRoot":"","sources":["../src/ArgumentProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { Region } from '@microsoft/power-apps-common/services';
5
+ import type { IAuthenticationProvider } from '../Types/Cli.types.js';
6
+ export declare class NodeMsalAuthenticationProvider implements IAuthenticationProvider {
7
+ private _msalClient;
8
+ private _tenantId;
9
+ private _region;
10
+ constructor();
11
+ initAsync(region: Region): Promise<void>;
12
+ getAccessTokenForResource(resource: string): Promise<string>;
13
+ getUserTenantId(): string | undefined;
14
+ private _acquireTokenInternal;
15
+ private _getInteractiveLoginRequest;
16
+ }
17
+ //# sourceMappingURL=NodeMsalAuthenticationProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeMsalAuthenticationProvider.d.ts","sourceRoot":"","sources":["../../src/Authentication/NodeMsalAuthenticationProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAKpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGlE,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAqB;;IAIvB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BxC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMlE,eAAe,IAAI,MAAM,GAAG,SAAS;YAI9B,qBAAqB;IAmCnC,OAAO,CAAC,2BAA2B;CAepC"}
@@ -0,0 +1,91 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { InteractionRequiredAuthError, PublicClientApplication } from '@azure/msal-node';
5
+ import open from 'open';
6
+ import { getAuthority } from '../CliUtils.js';
7
+ import { AUTH_CACHE_DIRECTORY } from '../Constants.js';
8
+ import { printError, printInfo } from '../Utils/ConsoleOutput.js';
9
+ export class NodeMsalAuthenticationProvider {
10
+ _msalClient;
11
+ _tenantId;
12
+ _region;
13
+ constructor() { }
14
+ async initAsync(region) {
15
+ this._region = region;
16
+ const { DataProtectionScope, PersistenceCachePlugin, PersistenceCreator } = await import('@azure/msal-node-extensions');
17
+ const persistenceConfiguration = {
18
+ cachePath: AUTH_CACHE_DIRECTORY + '/msal_cache.json',
19
+ dataProtectionScope: DataProtectionScope.CurrentUser,
20
+ serviceName: 'power-apps',
21
+ accountName: 'power-apps',
22
+ usePlaintextFileOnLinux: false,
23
+ };
24
+ const persistence = await PersistenceCreator.createPersistence(persistenceConfiguration);
25
+ const authConfig = {
26
+ auth: {
27
+ authority: getAuthority(this._region, this._tenantId),
28
+ clientId: '9cee029c-6210-4654-90bb-17e6e9d36617',
29
+ },
30
+ cache: {
31
+ cachePlugin: new PersistenceCachePlugin(persistence),
32
+ },
33
+ };
34
+ this._msalClient = new PublicClientApplication(authConfig);
35
+ }
36
+ async getAccessTokenForResource(resource) {
37
+ const result = await this._acquireTokenInternal(resource + '/.default');
38
+ this._tenantId = result.tenantId;
39
+ return result.accessToken;
40
+ }
41
+ getUserTenantId() {
42
+ return this._tenantId;
43
+ }
44
+ async _acquireTokenInternal(resource) {
45
+ if (!this._msalClient) {
46
+ throw new Error('Authentication not initialized yet');
47
+ }
48
+ const accounts = await this._msalClient.getTokenCache().getAllAccounts();
49
+ if (accounts.length === 1) {
50
+ const silentRequest = {
51
+ account: accounts[0],
52
+ scopes: [resource],
53
+ };
54
+ try {
55
+ const result = await this._msalClient.acquireTokenSilent(silentRequest);
56
+ return result;
57
+ }
58
+ catch (error) {
59
+ if (error instanceof InteractionRequiredAuthError) {
60
+ return this._msalClient.acquireTokenInteractive(this._getInteractiveLoginRequest(resource));
61
+ }
62
+ throw error;
63
+ }
64
+ }
65
+ else if (accounts.length > 1) {
66
+ accounts.forEach((account) => {
67
+ printInfo(account.username);
68
+ });
69
+ return Promise.reject('Multiple accounts found. Please use the logout command to remove existing accounts.');
70
+ }
71
+ else {
72
+ return this._msalClient.acquireTokenInteractive(this._getInteractiveLoginRequest(resource));
73
+ }
74
+ }
75
+ _getInteractiveLoginRequest(resource) {
76
+ const openBrowser = async (url) => {
77
+ try {
78
+ await open(url, { wait: false });
79
+ }
80
+ catch (error) {
81
+ printError(`Failed to open browser: ${String(error)}`);
82
+ }
83
+ };
84
+ return {
85
+ scopes: [resource],
86
+ openBrowser,
87
+ successTemplate: 'You can close this window now.',
88
+ };
89
+ }
90
+ }
91
+ //# sourceMappingURL=NodeMsalAuthenticationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeMsalAuthenticationProvider.js","sourceRoot":"","sources":["../../src/Authentication/NodeMsalAuthenticationProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,OAAO,8BAA8B;IACjC,WAAW,CAAsC;IACjD,SAAS,CAAqB;IAC9B,OAAO,CAAqB;IAEpC,gBAAsB,CAAC;IAEhB,KAAK,CAAC,SAAS,CAAC,MAAc;QACnC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,MAAM,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,GACvE,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QAC9C,MAAM,wBAAwB,GAAG;YAC/B,SAAS,EAAE,oBAAoB,GAAG,kBAAkB;YACpD,mBAAmB,EAAE,mBAAmB,CAAC,WAAW;YACpD,WAAW,EAAE,YAAY;YACzB,WAAW,EAAE,YAAY;YACzB,uBAAuB,EAAE,KAAK;SAC/B,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;QAEzF,MAAM,UAAU,GAAkB;YAChC,IAAI,EAAE;gBACJ,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;gBACrD,QAAQ,EAAE,sCAAsC;aACjD;YACD,KAAK,EAAE;gBACL,WAAW,EAAE,IAAI,sBAAsB,CAAC,WAAW,CAAC;aACrD;SACF,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,yBAAyB,CAAC,QAAgB;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,QAAgB;QAClD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,cAAc,EAAE,CAAC;QACzE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,aAAa,GAAG;gBACpB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACpB,MAAM,EAAE,CAAC,QAAQ,CAAC;aACnB,CAAC;YAEF,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;gBACxE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,4BAA4B,EAAE,CAAC;oBAClD,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAC7C,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAC3C,CAAC;gBACJ,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,CACnB,qFAAqF,CACtF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAEO,2BAA2B,CAAC,QAAgB;QAClD,MAAM,WAAW,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;YACvD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,UAAU,CAAC,2BAA2B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,CAAC,QAAQ,CAAC;YAClB,WAAW;YACX,eAAe,EAAE,gCAAgC;SAClD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { Region } from '@microsoft/power-apps-common/services';
5
+ import type { IAuthenticationProvider } from '../Types/Cli.types.js';
6
+ export declare class PacCliAuthenticationProvider implements IAuthenticationProvider {
7
+ private _tokenCache;
8
+ initAsync(_region: Region): Promise<void>;
9
+ getAccessTokenForResource(resource: string): Promise<string>;
10
+ getUserTenantId(): string | undefined;
11
+ private _getAccessTokenFromResourceInternal;
12
+ private _requestToken;
13
+ private _readStdIn;
14
+ }
15
+ //# sourceMappingURL=PacCliAuthenticationProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PacCliAuthenticationProvider.d.ts","sourceRoot":"","sources":["../../src/Authentication/PacCliAuthenticationProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAGpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,qBAAa,4BAA6B,YAAW,uBAAuB;IAC1E,OAAO,CAAC,WAAW,CAA8B;IAEpC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlE,eAAe,IAAI,MAAM,GAAG,SAAS;YAI9B,mCAAmC;IAgBjD,OAAO,CAAC,aAAa;YAIP,UAAU;CAqBzB"}
@@ -0,0 +1,51 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import * as readline from 'readline';
5
+ export class PacCliAuthenticationProvider {
6
+ _tokenCache = {};
7
+ async initAsync(_region) {
8
+ // no-op
9
+ }
10
+ async getAccessTokenForResource(resource) {
11
+ return this._getAccessTokenFromResourceInternal(resource);
12
+ }
13
+ getUserTenantId() {
14
+ return undefined;
15
+ }
16
+ async _getAccessTokenFromResourceInternal(resource) {
17
+ if (this._tokenCache[resource]) {
18
+ return this._tokenCache[resource];
19
+ }
20
+ this._requestToken(resource);
21
+ const token = await this._readStdIn();
22
+ if (!token) {
23
+ throw new Error('No token provided');
24
+ }
25
+ this._tokenCache[resource] = token;
26
+ return token;
27
+ }
28
+ _requestToken(resource) {
29
+ console.log('REQUEST_TOKEN ' + resource);
30
+ }
31
+ async _readStdIn() {
32
+ return new Promise((resolve, reject) => {
33
+ const rl = readline.createInterface({
34
+ input: process.stdin,
35
+ output: process.stdout,
36
+ terminal: false,
37
+ });
38
+ // Wait 10 seconds to get the token before throwing an error
39
+ const timeout = setTimeout(() => {
40
+ rl.close();
41
+ reject(new Error('Token input timeout: No token received within 10 seconds'));
42
+ }, 10000);
43
+ rl.once('line', (line) => {
44
+ clearTimeout(timeout);
45
+ rl.close();
46
+ resolve(line.trim());
47
+ });
48
+ });
49
+ }
50
+ }
51
+ //# sourceMappingURL=PacCliAuthenticationProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PacCliAuthenticationProvider.js","sourceRoot":"","sources":["../../src/Authentication/PacCliAuthenticationProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAIrC,MAAM,OAAO,4BAA4B;IAC/B,WAAW,GAA2B,EAAE,CAAC;IAE1C,KAAK,CAAC,SAAS,CAAC,OAAe;QACpC,QAAQ;IACV,CAAC;IAEM,KAAK,CAAC,yBAAyB,CAAC,QAAgB;QACrD,OAAO,IAAI,CAAC,mCAAmC,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAEM,eAAe;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,mCAAmC,CAAC,QAAgB;QAChE,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,aAAa,CAAC,QAAgB;QACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,4DAA4D;YAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC,CAAC;YAChF,CAAC,EAAE,KAAK,CAAC,CAAC;YAEV,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import type { Region } from '@microsoft/power-apps-common/services';
5
+ import type { IAuthenticationProvider } from '../Types/Cli.types.js';
6
+ /**
7
+ * note: This is meant for use in CI only since it hardcodes the authority & tenant ID.
8
+ */
9
+ export declare class ServicePrincipalAuthenticationProvider implements IAuthenticationProvider {
10
+ private _msalClient;
11
+ private _clientId;
12
+ private _clientSecret;
13
+ private _tenantId;
14
+ private _region;
15
+ constructor();
16
+ initAsync(region: Region): Promise<void>;
17
+ getAccessTokenForResource(resource: string): Promise<string>;
18
+ getUserTenantId(): string | undefined;
19
+ }
20
+ //# sourceMappingURL=ServicePrincipalAuthenticationProvider.d.ts.map