pax8-cta 0.1.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 (224) hide show
  1. package/LICENSE +200 -0
  2. package/README.md +659 -0
  3. package/demo-data/solutions/ProductQADemo_1_0_0_2_managed.zip +0 -0
  4. package/dist/commands/analyze.d.ts +28 -0
  5. package/dist/commands/analyze.d.ts.map +1 -0
  6. package/dist/commands/analyze.js +571 -0
  7. package/dist/commands/analyze.js.map +1 -0
  8. package/dist/commands/auth.d.ts +18 -0
  9. package/dist/commands/auth.d.ts.map +1 -0
  10. package/dist/commands/auth.js +171 -0
  11. package/dist/commands/auth.js.map +1 -0
  12. package/dist/commands/config.d.ts +34 -0
  13. package/dist/commands/config.d.ts.map +1 -0
  14. package/dist/commands/config.js +299 -0
  15. package/dist/commands/config.js.map +1 -0
  16. package/dist/commands/demo.d.ts +33 -0
  17. package/dist/commands/demo.d.ts.map +1 -0
  18. package/dist/commands/demo.js +362 -0
  19. package/dist/commands/demo.js.map +1 -0
  20. package/dist/commands/deploy.d.ts +18 -0
  21. package/dist/commands/deploy.d.ts.map +1 -0
  22. package/dist/commands/deploy.js +1186 -0
  23. package/dist/commands/deploy.js.map +1 -0
  24. package/dist/commands/deployments/helpers.d.ts +68 -0
  25. package/dist/commands/deployments/helpers.d.ts.map +1 -0
  26. package/dist/commands/deployments/helpers.js +414 -0
  27. package/dist/commands/deployments/helpers.js.map +1 -0
  28. package/dist/commands/deployments/index.d.ts +24 -0
  29. package/dist/commands/deployments/index.d.ts.map +1 -0
  30. package/dist/commands/deployments/index.js +47 -0
  31. package/dist/commands/deployments/index.js.map +1 -0
  32. package/dist/commands/deployments/list.d.ts +18 -0
  33. package/dist/commands/deployments/list.d.ts.map +1 -0
  34. package/dist/commands/deployments/list.js +97 -0
  35. package/dist/commands/deployments/list.js.map +1 -0
  36. package/dist/commands/deployments/show.d.ts +18 -0
  37. package/dist/commands/deployments/show.d.ts.map +1 -0
  38. package/dist/commands/deployments/show.js +81 -0
  39. package/dist/commands/deployments/show.js.map +1 -0
  40. package/dist/commands/deployments/undo.d.ts +18 -0
  41. package/dist/commands/deployments/undo.d.ts.map +1 -0
  42. package/dist/commands/deployments/undo.js +295 -0
  43. package/dist/commands/deployments/undo.js.map +1 -0
  44. package/dist/commands/export.d.ts +18 -0
  45. package/dist/commands/export.d.ts.map +1 -0
  46. package/dist/commands/export.js +133 -0
  47. package/dist/commands/export.js.map +1 -0
  48. package/dist/commands/import.d.ts +18 -0
  49. package/dist/commands/import.d.ts.map +1 -0
  50. package/dist/commands/import.js +129 -0
  51. package/dist/commands/import.js.map +1 -0
  52. package/dist/commands/init-config.d.ts +26 -0
  53. package/dist/commands/init-config.d.ts.map +1 -0
  54. package/dist/commands/init-config.js +123 -0
  55. package/dist/commands/init-config.js.map +1 -0
  56. package/dist/commands/init-validation.d.ts +47 -0
  57. package/dist/commands/init-validation.d.ts.map +1 -0
  58. package/dist/commands/init-validation.js +339 -0
  59. package/dist/commands/init-validation.js.map +1 -0
  60. package/dist/commands/init-wizard.d.ts +25 -0
  61. package/dist/commands/init-wizard.d.ts.map +1 -0
  62. package/dist/commands/init-wizard.js +433 -0
  63. package/dist/commands/init-wizard.js.map +1 -0
  64. package/dist/commands/init.d.ts +18 -0
  65. package/dist/commands/init.d.ts.map +1 -0
  66. package/dist/commands/init.js +46 -0
  67. package/dist/commands/init.js.map +1 -0
  68. package/dist/commands/resolve-url.d.ts +18 -0
  69. package/dist/commands/resolve-url.d.ts.map +1 -0
  70. package/dist/commands/resolve-url.js +126 -0
  71. package/dist/commands/resolve-url.js.map +1 -0
  72. package/dist/commands/setup.d.ts +18 -0
  73. package/dist/commands/setup.d.ts.map +1 -0
  74. package/dist/commands/setup.js +239 -0
  75. package/dist/commands/setup.js.map +1 -0
  76. package/dist/commands/solutions/drift-analysis.d.ts +73 -0
  77. package/dist/commands/solutions/drift-analysis.d.ts.map +1 -0
  78. package/dist/commands/solutions/drift-analysis.js +416 -0
  79. package/dist/commands/solutions/drift-analysis.js.map +1 -0
  80. package/dist/commands/solutions/drift.d.ts +32 -0
  81. package/dist/commands/solutions/drift.d.ts.map +1 -0
  82. package/dist/commands/solutions/drift.js +641 -0
  83. package/dist/commands/solutions/drift.js.map +1 -0
  84. package/dist/commands/solutions/fix-planner.d.ts +48 -0
  85. package/dist/commands/solutions/fix-planner.d.ts.map +1 -0
  86. package/dist/commands/solutions/fix-planner.js +43 -0
  87. package/dist/commands/solutions/fix-planner.js.map +1 -0
  88. package/dist/commands/solutions/helpers.d.ts +35 -0
  89. package/dist/commands/solutions/helpers.d.ts.map +1 -0
  90. package/dist/commands/solutions/helpers.js +54 -0
  91. package/dist/commands/solutions/helpers.js.map +1 -0
  92. package/dist/commands/solutions/index.d.ts +18 -0
  93. package/dist/commands/solutions/index.d.ts.map +1 -0
  94. package/dist/commands/solutions/index.js +30 -0
  95. package/dist/commands/solutions/index.js.map +1 -0
  96. package/dist/commands/solutions/list.d.ts +18 -0
  97. package/dist/commands/solutions/list.d.ts.map +1 -0
  98. package/dist/commands/solutions/list.js +174 -0
  99. package/dist/commands/solutions/list.js.map +1 -0
  100. package/dist/commands/solutions/remove.d.ts +18 -0
  101. package/dist/commands/solutions/remove.d.ts.map +1 -0
  102. package/dist/commands/solutions/remove.js +137 -0
  103. package/dist/commands/solutions/remove.js.map +1 -0
  104. package/dist/commands/solutions/risk-calculator.d.ts +33 -0
  105. package/dist/commands/solutions/risk-calculator.d.ts.map +1 -0
  106. package/dist/commands/solutions/risk-calculator.js +79 -0
  107. package/dist/commands/solutions/risk-calculator.js.map +1 -0
  108. package/dist/commands/solutions/show.d.ts +18 -0
  109. package/dist/commands/solutions/show.d.ts.map +1 -0
  110. package/dist/commands/solutions/show.js +165 -0
  111. package/dist/commands/solutions/show.js.map +1 -0
  112. package/dist/commands/status.d.ts +18 -0
  113. package/dist/commands/status.d.ts.map +1 -0
  114. package/dist/commands/status.js +573 -0
  115. package/dist/commands/status.js.map +1 -0
  116. package/dist/commands/telemetry.d.ts +18 -0
  117. package/dist/commands/telemetry.d.ts.map +1 -0
  118. package/dist/commands/telemetry.js +85 -0
  119. package/dist/commands/telemetry.js.map +1 -0
  120. package/dist/commands/tenants/health.d.ts +18 -0
  121. package/dist/commands/tenants/health.d.ts.map +1 -0
  122. package/dist/commands/tenants/health.js +172 -0
  123. package/dist/commands/tenants/health.js.map +1 -0
  124. package/dist/commands/tenants/helpers.d.ts +44 -0
  125. package/dist/commands/tenants/helpers.d.ts.map +1 -0
  126. package/dist/commands/tenants/helpers.js +72 -0
  127. package/dist/commands/tenants/helpers.js.map +1 -0
  128. package/dist/commands/tenants/index.d.ts +19 -0
  129. package/dist/commands/tenants/index.d.ts.map +1 -0
  130. package/dist/commands/tenants/index.js +39 -0
  131. package/dist/commands/tenants/index.js.map +1 -0
  132. package/dist/commands/tenants/inspect.d.ts +18 -0
  133. package/dist/commands/tenants/inspect.d.ts.map +1 -0
  134. package/dist/commands/tenants/inspect.js +176 -0
  135. package/dist/commands/tenants/inspect.js.map +1 -0
  136. package/dist/commands/tenants/list.d.ts +18 -0
  137. package/dist/commands/tenants/list.d.ts.map +1 -0
  138. package/dist/commands/tenants/list.js +144 -0
  139. package/dist/commands/tenants/list.js.map +1 -0
  140. package/dist/commands/tenants/manage.d.ts +20 -0
  141. package/dist/commands/tenants/manage.d.ts.map +1 -0
  142. package/dist/commands/tenants/manage.js +206 -0
  143. package/dist/commands/tenants/manage.js.map +1 -0
  144. package/dist/commands/tenants/show.d.ts +18 -0
  145. package/dist/commands/tenants/show.d.ts.map +1 -0
  146. package/dist/commands/tenants/show.js +191 -0
  147. package/dist/commands/tenants/show.js.map +1 -0
  148. package/dist/commands/validate.d.ts +18 -0
  149. package/dist/commands/validate.d.ts.map +1 -0
  150. package/dist/commands/validate.js +536 -0
  151. package/dist/commands/validate.js.map +1 -0
  152. package/dist/index.d.ts +19 -0
  153. package/dist/index.d.ts.map +1 -0
  154. package/dist/index.js +258 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/lib/auth.d.ts +51 -0
  157. package/dist/lib/auth.d.ts.map +1 -0
  158. package/dist/lib/auth.js +153 -0
  159. package/dist/lib/auth.js.map +1 -0
  160. package/dist/lib/banner.d.ts +19 -0
  161. package/dist/lib/banner.d.ts.map +1 -0
  162. package/dist/lib/banner.js +78 -0
  163. package/dist/lib/banner.js.map +1 -0
  164. package/dist/lib/command-wrapper.d.ts +56 -0
  165. package/dist/lib/command-wrapper.d.ts.map +1 -0
  166. package/dist/lib/command-wrapper.js +71 -0
  167. package/dist/lib/command-wrapper.js.map +1 -0
  168. package/dist/lib/credentials.d.ts +56 -0
  169. package/dist/lib/credentials.d.ts.map +1 -0
  170. package/dist/lib/credentials.js +146 -0
  171. package/dist/lib/credentials.js.map +1 -0
  172. package/dist/lib/demo-banner.d.ts +15 -0
  173. package/dist/lib/demo-banner.d.ts.map +1 -0
  174. package/dist/lib/demo-banner.js +33 -0
  175. package/dist/lib/demo-banner.js.map +1 -0
  176. package/dist/lib/error-handler.d.ts +51 -0
  177. package/dist/lib/error-handler.d.ts.map +1 -0
  178. package/dist/lib/error-handler.js +458 -0
  179. package/dist/lib/error-handler.js.map +1 -0
  180. package/dist/lib/errors.d.ts +61 -0
  181. package/dist/lib/errors.d.ts.map +1 -0
  182. package/dist/lib/errors.js +168 -0
  183. package/dist/lib/errors.js.map +1 -0
  184. package/dist/lib/formatters.d.ts +55 -0
  185. package/dist/lib/formatters.d.ts.map +1 -0
  186. package/dist/lib/formatters.js +163 -0
  187. package/dist/lib/formatters.js.map +1 -0
  188. package/dist/lib/graph-client.d.ts +74 -0
  189. package/dist/lib/graph-client.d.ts.map +1 -0
  190. package/dist/lib/graph-client.js +231 -0
  191. package/dist/lib/graph-client.js.map +1 -0
  192. package/dist/lib/input.d.ts +22 -0
  193. package/dist/lib/input.d.ts.map +1 -0
  194. package/dist/lib/input.js +120 -0
  195. package/dist/lib/input.js.map +1 -0
  196. package/dist/lib/interactive-wizard.d.ts +26 -0
  197. package/dist/lib/interactive-wizard.d.ts.map +1 -0
  198. package/dist/lib/interactive-wizard.js +550 -0
  199. package/dist/lib/interactive-wizard.js.map +1 -0
  200. package/dist/lib/oss-surface.d.ts +21 -0
  201. package/dist/lib/oss-surface.d.ts.map +1 -0
  202. package/dist/lib/oss-surface.js +29 -0
  203. package/dist/lib/oss-surface.js.map +1 -0
  204. package/dist/lib/output.d.ts +74 -0
  205. package/dist/lib/output.d.ts.map +1 -0
  206. package/dist/lib/output.js +156 -0
  207. package/dist/lib/output.js.map +1 -0
  208. package/dist/lib/picker.d.ts +75 -0
  209. package/dist/lib/picker.d.ts.map +1 -0
  210. package/dist/lib/picker.js +115 -0
  211. package/dist/lib/picker.js.map +1 -0
  212. package/dist/lib/repl.d.ts +19 -0
  213. package/dist/lib/repl.d.ts.map +1 -0
  214. package/dist/lib/repl.js +158 -0
  215. package/dist/lib/repl.js.map +1 -0
  216. package/dist/lib/spinner.d.ts +41 -0
  217. package/dist/lib/spinner.d.ts.map +1 -0
  218. package/dist/lib/spinner.js +126 -0
  219. package/dist/lib/spinner.js.map +1 -0
  220. package/dist/lib/telemetry.d.ts +96 -0
  221. package/dist/lib/telemetry.d.ts.map +1 -0
  222. package/dist/lib/telemetry.js +367 -0
  223. package/dist/lib/telemetry.js.map +1 -0
  224. package/package.json +68 -0
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * Microsoft Graph API client for managing Azure AD app registrations
18
+ */
19
+ export class GraphClient {
20
+ accessToken;
21
+ baseUrl = "https://graph.microsoft.com/v1.0";
22
+ constructor(config) {
23
+ this.accessToken = config.accessToken;
24
+ }
25
+ /**
26
+ * Create a new app registration in Azure AD
27
+ */
28
+ async createAppRegistration(displayName) {
29
+ const response = await fetch(`${this.baseUrl}/applications`, {
30
+ method: "POST",
31
+ headers: {
32
+ Authorization: `Bearer ${this.accessToken}`,
33
+ "Content-Type": "application/json",
34
+ },
35
+ body: JSON.stringify({
36
+ displayName,
37
+ signInAudience: "AzureADMultipleOrgs",
38
+ requiredResourceAccess: [
39
+ {
40
+ // Microsoft Graph
41
+ resourceAppId: "00000003-0000-0000-c000-000000000000",
42
+ resourceAccess: [
43
+ {
44
+ // User.Read (delegated)
45
+ id: "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
46
+ type: "Scope",
47
+ },
48
+ ],
49
+ },
50
+ ],
51
+ }),
52
+ });
53
+ if (!response.ok) {
54
+ const error = await response.text();
55
+ throw new Error(`Failed to create app registration: ${response.status} ${error}`);
56
+ }
57
+ const app = (await response.json());
58
+ return app;
59
+ }
60
+ /**
61
+ * Find existing app registration by display name
62
+ */
63
+ async findExistingApp(displayName) {
64
+ const response = await fetch(`${this.baseUrl}/applications?$filter=displayName eq '${encodeURIComponent(displayName)}'`, {
65
+ headers: {
66
+ Authorization: `Bearer ${this.accessToken}`,
67
+ },
68
+ });
69
+ if (!response.ok) {
70
+ const error = await response.text();
71
+ throw new Error(`Failed to search for app: ${response.status} ${error}`);
72
+ }
73
+ const data = (await response.json());
74
+ return data.value.length > 0 ? data.value[0] : null;
75
+ }
76
+ /**
77
+ * List all app registrations the user owns or has access to
78
+ */
79
+ async listAppRegistrations() {
80
+ const response = await fetch(`${this.baseUrl}/applications?$select=id,appId,displayName,signInAudience&$top=50&$orderby=displayName`, {
81
+ headers: {
82
+ Authorization: `Bearer ${this.accessToken}`,
83
+ },
84
+ });
85
+ if (!response.ok) {
86
+ const error = await response.text();
87
+ throw new Error(`Failed to list apps: ${response.status} ${error}`);
88
+ }
89
+ const data = (await response.json());
90
+ return data.value;
91
+ }
92
+ /**
93
+ * Add Dynamics CRM API permission to an app
94
+ */
95
+ async addDynamicsPermission(appObjectId) {
96
+ // First, get the current app to preserve existing permissions
97
+ const getResponse = await fetch(`${this.baseUrl}/applications/${appObjectId}`, {
98
+ headers: {
99
+ Authorization: `Bearer ${this.accessToken}`,
100
+ },
101
+ });
102
+ if (!getResponse.ok) {
103
+ throw new Error(`Failed to get app: ${getResponse.status}`);
104
+ }
105
+ const currentApp = (await getResponse.json());
106
+ // Add Dynamics CRM permission
107
+ const dynamicsResourceId = "00000007-0000-0000-c000-000000000000"; // Dynamics CRM
108
+ const userImpersonationId = "78ce3f0f-a1ce-49c2-8cde-64b5c0896db4"; // user_impersonation
109
+ const existingPermissions = currentApp.requiredResourceAccess || [];
110
+ // Check if Dynamics permission already exists
111
+ const dynamicsPermission = existingPermissions.find((p) => p.resourceAppId === dynamicsResourceId);
112
+ if (dynamicsPermission) {
113
+ // Add user_impersonation if not present
114
+ if (!dynamicsPermission.resourceAccess.find((ra) => ra.id === userImpersonationId)) {
115
+ dynamicsPermission.resourceAccess.push({
116
+ id: userImpersonationId,
117
+ type: "Scope",
118
+ });
119
+ }
120
+ }
121
+ else {
122
+ // Add new Dynamics CRM permission
123
+ existingPermissions.push({
124
+ resourceAppId: dynamicsResourceId,
125
+ resourceAccess: [
126
+ {
127
+ id: userImpersonationId,
128
+ type: "Scope",
129
+ },
130
+ ],
131
+ });
132
+ }
133
+ // Update the app
134
+ const patchResponse = await fetch(`${this.baseUrl}/applications/${appObjectId}`, {
135
+ method: "PATCH",
136
+ headers: {
137
+ Authorization: `Bearer ${this.accessToken}`,
138
+ "Content-Type": "application/json",
139
+ },
140
+ body: JSON.stringify({
141
+ requiredResourceAccess: existingPermissions,
142
+ }),
143
+ });
144
+ if (!patchResponse.ok) {
145
+ const error = await patchResponse.text();
146
+ throw new Error(`Failed to add Dynamics permission: ${patchResponse.status} ${error}`);
147
+ }
148
+ }
149
+ /**
150
+ * Grant admin consent for app permissions
151
+ * Note: This requires admin privileges and may not work for all users
152
+ */
153
+ async grantAdminConsent(appId) {
154
+ // Note: Admin consent typically requires interactive consent flow
155
+ // This is a placeholder - actual implementation would need OAuth consent URL
156
+ const consentUrl = `https://login.microsoftonline.com/organizations/v2.0/adminconsent?client_id=${appId}&scope=https://api.businesscentral.dynamics.com/.default`;
157
+ throw new Error(`Admin consent required. Please visit: ${consentUrl}\n\nOr ask your IT admin to grant consent.`);
158
+ }
159
+ /**
160
+ * Create a new client secret for the app
161
+ */
162
+ async createClientSecret(appObjectId, description, validityMonths = 24) {
163
+ const endDate = new Date();
164
+ endDate.setMonth(endDate.getMonth() + validityMonths);
165
+ const response = await fetch(`${this.baseUrl}/applications/${appObjectId}/addPassword`, {
166
+ method: "POST",
167
+ headers: {
168
+ Authorization: `Bearer ${this.accessToken}`,
169
+ "Content-Type": "application/json",
170
+ },
171
+ body: JSON.stringify({
172
+ passwordCredential: {
173
+ displayName: description,
174
+ endDateTime: endDate.toISOString(),
175
+ },
176
+ }),
177
+ });
178
+ if (!response.ok) {
179
+ const error = await response.text();
180
+ throw new Error(`Failed to create client secret: ${response.status} ${error}`);
181
+ }
182
+ const result = (await response.json());
183
+ return {
184
+ secretId: result.keyId,
185
+ secretText: result.secretText,
186
+ displayName: result.displayName,
187
+ endDateTime: result.endDateTime,
188
+ };
189
+ }
190
+ /**
191
+ * Get service principal for an app (needed for some operations)
192
+ */
193
+ async getServicePrincipal(appId) {
194
+ const response = await fetch(`${this.baseUrl}/servicePrincipals?$filter=appId eq '${appId}'`, {
195
+ headers: {
196
+ Authorization: `Bearer ${this.accessToken}`,
197
+ },
198
+ });
199
+ if (!response.ok) {
200
+ return null;
201
+ }
202
+ const data = (await response.json());
203
+ return data.value.length > 0 ? data.value[0] : null;
204
+ }
205
+ /**
206
+ * Create service principal for an app if it doesn't exist
207
+ */
208
+ async ensureServicePrincipal(appId) {
209
+ const existing = await this.getServicePrincipal(appId);
210
+ if (existing) {
211
+ return existing.id;
212
+ }
213
+ const response = await fetch(`${this.baseUrl}/servicePrincipals`, {
214
+ method: "POST",
215
+ headers: {
216
+ Authorization: `Bearer ${this.accessToken}`,
217
+ "Content-Type": "application/json",
218
+ },
219
+ body: JSON.stringify({
220
+ appId,
221
+ }),
222
+ });
223
+ if (!response.ok) {
224
+ const error = await response.text();
225
+ throw new Error(`Failed to create service principal: ${response.status} ${error}`);
226
+ }
227
+ const result = (await response.json());
228
+ return result.id;
229
+ }
230
+ }
231
+ //# sourceMappingURL=graph-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-client.js","sourceRoot":"","sources":["../../src/lib/graph-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Shared readline management.
3
+ *
4
+ * Node.js doesn't handle multiple readline interfaces on process.stdin well.
5
+ * This module provides a single, reusable readline so the REPL and
6
+ * interactive commands (like init) never fight over stdin.
7
+ */
8
+ /**
9
+ * Prompt the user for input. Safe to call from anywhere —
10
+ * reuses a single readline interface on process.stdin.
11
+ */
12
+ export declare function question(prompt: string): Promise<string>;
13
+ /**
14
+ * Prompt for sensitive input without echoing typed characters.
15
+ * Falls back to standard question() in non-interactive environments.
16
+ */
17
+ export declare function questionHidden(prompt: string): Promise<string>;
18
+ /**
19
+ * Close the shared readline (e.g. on exit).
20
+ */
21
+ export declare function closeInput(): void;
22
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/lib/input.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA4BH;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE9D;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2EpE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CASjC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Shared readline management.
3
+ *
4
+ * Node.js doesn't handle multiple readline interfaces on process.stdin well.
5
+ * This module provides a single, reusable readline so the REPL and
6
+ * interactive commands (like init) never fight over stdin.
7
+ */
8
+ import { createInterface } from "node:readline/promises";
9
+ let rl = null;
10
+ // A timer that keeps the event loop alive while readline exists.
11
+ // Necessary because libraries (ora, dynamic imports) can unref/pause
12
+ // stdin between prompts, letting Node.js exit prematurely.
13
+ let keepAlive = null;
14
+ function get() {
15
+ if (!rl) {
16
+ rl = createInterface({
17
+ input: process.stdin,
18
+ output: process.stdout,
19
+ });
20
+ keepAlive = setInterval(() => { }, 2_147_483_647); // max safe interval
21
+ rl.once("close", () => {
22
+ rl = null;
23
+ if (keepAlive) {
24
+ clearInterval(keepAlive);
25
+ keepAlive = null;
26
+ }
27
+ });
28
+ }
29
+ return rl;
30
+ }
31
+ /**
32
+ * Prompt the user for input. Safe to call from anywhere —
33
+ * reuses a single readline interface on process.stdin.
34
+ */
35
+ export async function question(prompt) {
36
+ return get().question(prompt);
37
+ }
38
+ /**
39
+ * Prompt for sensitive input without echoing typed characters.
40
+ * Falls back to standard question() in non-interactive environments.
41
+ */
42
+ export async function questionHidden(prompt) {
43
+ if (!process.stdin.isTTY ||
44
+ typeof process.stdin.setRawMode !== "function") {
45
+ return question(prompt);
46
+ }
47
+ // If readline is currently active, close it before raw hidden input.
48
+ // Otherwise readline listeners can still echo typed characters.
49
+ if (rl) {
50
+ closeInput();
51
+ }
52
+ const stdin = process.stdin;
53
+ const stdout = process.stdout;
54
+ const wasRaw = !!stdin.isRaw;
55
+ return new Promise((resolve, reject) => {
56
+ let value = "";
57
+ const cleanup = () => {
58
+ stdin.off("data", onData);
59
+ if (!wasRaw) {
60
+ stdin.setRawMode(false);
61
+ }
62
+ stdin.pause();
63
+ };
64
+ const onData = (chunk) => {
65
+ const input = chunk.toString("utf8");
66
+ if (input.startsWith("\u001b")) {
67
+ return; // Ignore escape sequences (arrow keys, etc.)
68
+ }
69
+ for (const char of input) {
70
+ // Enter/Return
71
+ if (char === "\r" || char === "\n") {
72
+ stdout.write("\n");
73
+ cleanup();
74
+ resolve(value);
75
+ return;
76
+ }
77
+ // Ctrl+C
78
+ if (char === "\u0003") {
79
+ cleanup();
80
+ reject(new Error("Input cancelled"));
81
+ return;
82
+ }
83
+ // Backspace/Delete
84
+ if (char === "\u007f" || char === "\b" || char === "\x08") {
85
+ if (value.length > 0) {
86
+ value = value.slice(0, -1);
87
+ }
88
+ continue;
89
+ }
90
+ value += char;
91
+ }
92
+ };
93
+ try {
94
+ stdout.write(prompt);
95
+ if (!wasRaw) {
96
+ stdin.setRawMode(true);
97
+ }
98
+ stdin.resume();
99
+ stdin.on("data", onData);
100
+ }
101
+ catch (error) {
102
+ cleanup();
103
+ reject(error);
104
+ }
105
+ });
106
+ }
107
+ /**
108
+ * Close the shared readline (e.g. on exit).
109
+ */
110
+ export function closeInput() {
111
+ if (rl) {
112
+ rl.close();
113
+ rl = null;
114
+ }
115
+ if (keepAlive) {
116
+ clearInterval(keepAlive);
117
+ keepAlive = null;
118
+ }
119
+ }
120
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/lib/input.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAiC,MAAM,wBAAwB,CAAC;AAExF,IAAI,EAAE,GAAuB,IAAI,CAAC;AAClC,iEAAiE;AACjE,qEAAqE;AACrE,2DAA2D;AAC3D,IAAI,SAAS,GAA0C,IAAI,CAAC;AAE5D,SAAS,GAAG;IACV,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,EAAE,GAAG,eAAe,CAAC;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QACH,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,oBAAoB;QACtE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YACpB,EAAE,GAAG,IAAI,CAAC;YACV,IAAI,SAAS,EAAE,CAAC;gBACd,aAAa,CAAC,SAAS,CAAC,CAAC;gBACzB,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc;IAC3C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc;IACjD,IACE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QACpB,OAAQ,OAAO,CAAC,KAA2B,CAAC,UAAU,KAAK,UAAU,EACrE,CAAC;QACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,qEAAqE;IACrE,gEAAgE;IAChE,IAAI,EAAE,EAAE,CAAC;QACP,UAAU,EAAE,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAA0B,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YACD,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,6CAA6C;YACvD,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,eAAe;gBACf,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBACnC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACnB,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,KAAK,CAAC,CAAC;oBACf,OAAO;gBACT,CAAC;gBAED,SAAS;gBACT,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,OAAO,EAAE,CAAC;oBACV,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBACrC,OAAO;gBACT,CAAC;gBAED,mBAAmB;gBACnB,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC1D,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACrB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC7B,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,KAAK,IAAI,IAAI,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YACD,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,GAAG,IAAI,CAAC;IACZ,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,aAAa,CAAC,SAAS,CAAC,CAAC;QACzB,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export interface WizardResult {
17
+ configPath: string;
18
+ clientId: string;
19
+ tenantId: string;
20
+ success: boolean;
21
+ }
22
+ /**
23
+ * Run the interactive setup wizard
24
+ */
25
+ export declare function runInteractiveWizard(configPath: string): Promise<WizardResult>;
26
+ //# sourceMappingURL=interactive-wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-wizard.d.ts","sourceRoot":"","sources":["../../src/lib/interactive-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAkED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAmhBpF"}