@sembix/cli 1.2.1 → 1.4.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 (205) hide show
  1. package/COMMANDS.md +1522 -0
  2. package/QUICKSTART.md +829 -0
  3. package/README.md +1976 -309
  4. package/USAGE-EXAMPLES.md +872 -0
  5. package/config.example.yaml +3 -0
  6. package/dist/commands/configure.d.ts.map +1 -1
  7. package/dist/commands/configure.js +172 -2
  8. package/dist/commands/configure.js.map +1 -1
  9. package/dist/commands/index.d.ts +10 -0
  10. package/dist/commands/index.d.ts.map +1 -0
  11. package/dist/commands/index.js +11 -0
  12. package/dist/commands/index.js.map +1 -0
  13. package/dist/commands/login.d.ts +19 -0
  14. package/dist/commands/login.d.ts.map +1 -0
  15. package/dist/commands/login.js +118 -0
  16. package/dist/commands/login.js.map +1 -0
  17. package/dist/commands/logout.d.ts +21 -0
  18. package/dist/commands/logout.d.ts.map +1 -0
  19. package/dist/commands/logout.js +66 -0
  20. package/dist/commands/logout.js.map +1 -0
  21. package/dist/commands/profile-project.d.ts +14 -0
  22. package/dist/commands/profile-project.d.ts.map +1 -0
  23. package/dist/commands/profile-project.js +123 -0
  24. package/dist/commands/profile-project.js.map +1 -0
  25. package/dist/commands/profile.d.ts +26 -0
  26. package/dist/commands/profile.d.ts.map +1 -0
  27. package/dist/commands/profile.js +177 -0
  28. package/dist/commands/profile.js.map +1 -0
  29. package/dist/commands/project.d.ts +16 -0
  30. package/dist/commands/project.d.ts.map +1 -0
  31. package/dist/commands/project.js +153 -0
  32. package/dist/commands/project.js.map +1 -0
  33. package/dist/commands/setup.js +3 -0
  34. package/dist/commands/setup.js.map +1 -1
  35. package/dist/commands/workflow.d.ts +91 -0
  36. package/dist/commands/workflow.d.ts.map +1 -0
  37. package/dist/commands/workflow.js +1201 -0
  38. package/dist/commands/workflow.js.map +1 -0
  39. package/dist/config-schema.d.ts +26 -0
  40. package/dist/config-schema.d.ts.map +1 -1
  41. package/dist/config-schema.js +24 -1
  42. package/dist/config-schema.js.map +1 -1
  43. package/dist/config.d.ts +4 -0
  44. package/dist/config.d.ts.map +1 -1
  45. package/dist/config.js +23 -2
  46. package/dist/config.js.map +1 -1
  47. package/dist/index.js +324 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/prompts/environment-setup.d.ts.map +1 -1
  50. package/dist/prompts/environment-setup.js +12 -0
  51. package/dist/prompts/environment-setup.js.map +1 -1
  52. package/dist/prompts/project-selection.d.ts +8 -0
  53. package/dist/prompts/project-selection.d.ts.map +1 -0
  54. package/dist/prompts/project-selection.js +132 -0
  55. package/dist/prompts/project-selection.js.map +1 -0
  56. package/dist/prompts/workflow-inputs.d.ts +10 -0
  57. package/dist/prompts/workflow-inputs.d.ts.map +1 -0
  58. package/dist/prompts/workflow-inputs.js +71 -0
  59. package/dist/prompts/workflow-inputs.js.map +1 -0
  60. package/dist/prompts/workflow-selection.d.ts +8 -0
  61. package/dist/prompts/workflow-selection.d.ts.map +1 -0
  62. package/dist/prompts/workflow-selection.js +147 -0
  63. package/dist/prompts/workflow-selection.js.map +1 -0
  64. package/dist/sembix-cli-1.4.0.tgz +0 -0
  65. package/dist/services/cognito-auth.d.ts +92 -0
  66. package/dist/services/cognito-auth.d.ts.map +1 -0
  67. package/dist/services/cognito-auth.js +319 -0
  68. package/dist/services/cognito-auth.js.map +1 -0
  69. package/dist/services/studio-api-client.d.ts +127 -0
  70. package/dist/services/studio-api-client.d.ts.map +1 -0
  71. package/dist/services/studio-api-client.js +291 -0
  72. package/dist/services/studio-api-client.js.map +1 -0
  73. package/dist/types/studio.d.ts +82 -0
  74. package/dist/types/studio.d.ts.map +1 -0
  75. package/dist/types/studio.js +7 -0
  76. package/dist/types/studio.js.map +1 -0
  77. package/dist/types.d.ts +286 -0
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/types.js +5 -0
  80. package/dist/types.js.map +1 -1
  81. package/dist/utils/browser-auth.d.ts +45 -0
  82. package/dist/utils/browser-auth.d.ts.map +1 -0
  83. package/dist/utils/browser-auth.js +168 -0
  84. package/dist/utils/browser-auth.js.map +1 -0
  85. package/dist/utils/cognito-auth.d.ts +3 -0
  86. package/dist/utils/cognito-auth.d.ts.map +1 -0
  87. package/dist/utils/cognito-auth.js +3 -0
  88. package/dist/utils/cognito-auth.js.map +1 -0
  89. package/dist/utils/config-file.d.ts +40 -0
  90. package/dist/utils/config-file.d.ts.map +1 -1
  91. package/dist/utils/config-file.js +158 -4
  92. package/dist/utils/config-file.js.map +1 -1
  93. package/dist/utils/config-loader.d.ts.map +1 -1
  94. package/dist/utils/config-loader.js +15 -2
  95. package/dist/utils/config-loader.js.map +1 -1
  96. package/dist/utils/environment.d.ts +22 -0
  97. package/dist/utils/environment.d.ts.map +1 -0
  98. package/dist/utils/environment.js +39 -0
  99. package/dist/utils/environment.js.map +1 -0
  100. package/dist/utils/error-handler.d.ts +53 -0
  101. package/dist/utils/error-handler.d.ts.map +1 -0
  102. package/dist/utils/error-handler.js +174 -0
  103. package/dist/utils/error-handler.js.map +1 -0
  104. package/dist/utils/fuzzy-match.d.ts +31 -0
  105. package/dist/utils/fuzzy-match.d.ts.map +1 -0
  106. package/dist/utils/fuzzy-match.js +138 -0
  107. package/dist/utils/fuzzy-match.js.map +1 -0
  108. package/dist/utils/input-parser.d.ts +14 -0
  109. package/dist/utils/input-parser.d.ts.map +1 -0
  110. package/dist/utils/input-parser.js +34 -0
  111. package/dist/utils/input-parser.js.map +1 -0
  112. package/dist/utils/output.d.ts +55 -0
  113. package/dist/utils/output.d.ts.map +1 -0
  114. package/dist/utils/output.js +80 -0
  115. package/dist/utils/output.js.map +1 -0
  116. package/dist/utils/recent-workflows.d.ts +37 -0
  117. package/dist/utils/recent-workflows.d.ts.map +1 -0
  118. package/dist/utils/recent-workflows.js +172 -0
  119. package/dist/utils/recent-workflows.js.map +1 -0
  120. package/dist/utils/studio-api-client.d.ts +3 -0
  121. package/dist/utils/studio-api-client.d.ts.map +1 -0
  122. package/dist/utils/studio-api-client.js +3 -0
  123. package/dist/utils/studio-api-client.js.map +1 -0
  124. package/dist/utils/studio-api.d.ts +53 -0
  125. package/dist/utils/studio-api.d.ts.map +1 -0
  126. package/dist/utils/studio-api.js +102 -0
  127. package/dist/utils/studio-api.js.map +1 -0
  128. package/dist/utils/studio-config.d.ts +74 -0
  129. package/dist/utils/studio-config.d.ts.map +1 -0
  130. package/dist/utils/studio-config.js +213 -0
  131. package/dist/utils/studio-config.js.map +1 -0
  132. package/dist/utils/token-manager.d.ts +4 -0
  133. package/dist/utils/token-manager.d.ts.map +1 -0
  134. package/dist/utils/token-manager.js +3 -0
  135. package/dist/utils/token-manager.js.map +1 -0
  136. package/dist/utils/ui.d.ts +55 -1
  137. package/dist/utils/ui.d.ts.map +1 -1
  138. package/dist/utils/ui.js +151 -2
  139. package/dist/utils/ui.js.map +1 -1
  140. package/package.json +4 -1
  141. package/dist/__tests__/config-schema.test.d.ts +0 -2
  142. package/dist/__tests__/config-schema.test.d.ts.map +0 -1
  143. package/dist/__tests__/config-schema.test.js +0 -471
  144. package/dist/__tests__/config-schema.test.js.map +0 -1
  145. package/dist/__tests__/config.test.d.ts +0 -2
  146. package/dist/__tests__/config.test.d.ts.map +0 -1
  147. package/dist/__tests__/config.test.js +0 -75
  148. package/dist/__tests__/config.test.js.map +0 -1
  149. package/dist/__tests__/integration/configure.test.d.ts +0 -2
  150. package/dist/__tests__/integration/configure.test.d.ts.map +0 -1
  151. package/dist/__tests__/integration/configure.test.js +0 -247
  152. package/dist/__tests__/integration/configure.test.js.map +0 -1
  153. package/dist/__tests__/integration/fixtures/configs.d.ts +0 -477
  154. package/dist/__tests__/integration/fixtures/configs.d.ts.map +0 -1
  155. package/dist/__tests__/integration/fixtures/configs.js +0 -175
  156. package/dist/__tests__/integration/fixtures/configs.js.map +0 -1
  157. package/dist/__tests__/integration/helpers/cli-runner.d.ts +0 -63
  158. package/dist/__tests__/integration/helpers/cli-runner.d.ts.map +0 -1
  159. package/dist/__tests__/integration/helpers/cli-runner.js +0 -152
  160. package/dist/__tests__/integration/helpers/cli-runner.js.map +0 -1
  161. package/dist/__tests__/integration/helpers/command-runner.d.ts +0 -53
  162. package/dist/__tests__/integration/helpers/command-runner.d.ts.map +0 -1
  163. package/dist/__tests__/integration/helpers/command-runner.js +0 -117
  164. package/dist/__tests__/integration/helpers/command-runner.js.map +0 -1
  165. package/dist/__tests__/integration/studio-create.test.d.ts +0 -2
  166. package/dist/__tests__/integration/studio-create.test.d.ts.map +0 -1
  167. package/dist/__tests__/integration/studio-create.test.js +0 -209
  168. package/dist/__tests__/integration/studio-create.test.js.map +0 -1
  169. package/dist/__tests__/integration/studio-update.test.d.ts +0 -2
  170. package/dist/__tests__/integration/studio-update.test.d.ts.map +0 -1
  171. package/dist/__tests__/integration/studio-update.test.js +0 -166
  172. package/dist/__tests__/integration/studio-update.test.js.map +0 -1
  173. package/dist/commands/__tests__/configure.test.d.ts +0 -2
  174. package/dist/commands/__tests__/configure.test.d.ts.map +0 -1
  175. package/dist/commands/__tests__/configure.test.js +0 -229
  176. package/dist/commands/__tests__/configure.test.js.map +0 -1
  177. package/dist/prompts/__tests__/environment-setup.test.d.ts +0 -2
  178. package/dist/prompts/__tests__/environment-setup.test.d.ts.map +0 -1
  179. package/dist/prompts/__tests__/environment-setup.test.js +0 -206
  180. package/dist/prompts/__tests__/environment-setup.test.js.map +0 -1
  181. package/dist/prompts/__tests__/hub-integration.test.d.ts +0 -2
  182. package/dist/prompts/__tests__/hub-integration.test.d.ts.map +0 -1
  183. package/dist/prompts/__tests__/hub-integration.test.js +0 -126
  184. package/dist/prompts/__tests__/hub-integration.test.js.map +0 -1
  185. package/dist/prompts/__tests__/prompt-helpers.test.d.ts +0 -2
  186. package/dist/prompts/__tests__/prompt-helpers.test.d.ts.map +0 -1
  187. package/dist/prompts/__tests__/prompt-helpers.test.js +0 -235
  188. package/dist/prompts/__tests__/prompt-helpers.test.js.map +0 -1
  189. package/dist/sembix-cli-1.2.1.tgz +0 -0
  190. package/dist/utils/__tests__/config-file.test.d.ts +0 -2
  191. package/dist/utils/__tests__/config-file.test.d.ts.map +0 -1
  192. package/dist/utils/__tests__/config-file.test.js +0 -218
  193. package/dist/utils/__tests__/config-file.test.js.map +0 -1
  194. package/dist/utils/__tests__/config-loader.test.d.ts +0 -2
  195. package/dist/utils/__tests__/config-loader.test.d.ts.map +0 -1
  196. package/dist/utils/__tests__/config-loader.test.js +0 -325
  197. package/dist/utils/__tests__/config-loader.test.js.map +0 -1
  198. package/dist/utils/__tests__/github.test.d.ts +0 -2
  199. package/dist/utils/__tests__/github.test.d.ts.map +0 -1
  200. package/dist/utils/__tests__/github.test.js +0 -282
  201. package/dist/utils/__tests__/github.test.js.map +0 -1
  202. package/dist/utils/__tests__/ui.test.d.ts +0 -2
  203. package/dist/utils/__tests__/ui.test.d.ts.map +0 -1
  204. package/dist/utils/__tests__/ui.test.js +0 -256
  205. package/dist/utils/__tests__/ui.test.js.map +0 -1
@@ -0,0 +1,319 @@
1
+ import { createServer } from 'http';
2
+ import { randomBytes, createHash } from 'crypto';
3
+ import { saveTokens, loadTokens, isTokenValid } from '../utils/studio-config.js';
4
+ /**
5
+ * CognitoAuthService handles OAuth 2.0 Authorization Code flow with PKCE
6
+ * for Cognito authentication. It manages the browser-based login flow,
7
+ * token exchange, and token refresh operations.
8
+ */
9
+ export class CognitoAuthService {
10
+ profile;
11
+ constructor(profile) {
12
+ this.profile = profile;
13
+ }
14
+ /**
15
+ * Initiates the OAuth login flow by starting a local callback server,
16
+ * generating PKCE parameters, and exchanging the authorization code for tokens.
17
+ *
18
+ * @returns Promise resolving to authentication tokens
19
+ * @throws Error if authentication fails or times out
20
+ */
21
+ async initiateLogin() {
22
+ // Generate PKCE parameters for secure OAuth flow
23
+ const { verifier, challenge } = this.generatePKCE();
24
+ // Start local HTTP server to receive OAuth callback
25
+ const { port, codePromise } = await this.startLocalServer();
26
+ // Build authorization URL
27
+ const redirectUri = `http://localhost:${port}/callback`;
28
+ const state = randomBytes(16).toString('base64url');
29
+ const authUrl = this.buildAuthorizationUrl(redirectUri, challenge, state);
30
+ // Display instructions to user
31
+ console.log('\nOpening browser for authentication...');
32
+ console.log(`If browser doesn't open automatically, visit:\n${authUrl}\n`);
33
+ try {
34
+ // Attempt to open browser (best effort)
35
+ await this.openBrowser(authUrl);
36
+ }
37
+ catch {
38
+ // Browser opening failed, user will use manual URL
39
+ console.log('Could not open browser automatically. Please use the URL above.');
40
+ }
41
+ // Wait for OAuth callback with authorization code (5 minute timeout)
42
+ const code = await Promise.race([
43
+ codePromise,
44
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Authentication timeout after 5 minutes')), 300000))
45
+ ]);
46
+ // Exchange authorization code for tokens
47
+ const tokenSet = await this.exchangeCodeForTokens(code, verifier, redirectUri);
48
+ // Convert to StudioAuthTokens format and calculate expiry
49
+ const expiresAt = new Date(Date.now() + tokenSet.expires_in * 1000).toISOString();
50
+ const tokens = {
51
+ accessToken: tokenSet.access_token,
52
+ idToken: tokenSet.id_token,
53
+ refreshToken: tokenSet.refresh_token,
54
+ expiresAt
55
+ };
56
+ // Store tokens securely
57
+ await saveTokens(this.profile.name, tokens);
58
+ return tokens;
59
+ }
60
+ /**
61
+ * Refreshes expired access tokens using the refresh token.
62
+ *
63
+ * @param refreshToken - The refresh token from previous authentication
64
+ * @returns Promise resolving to new authentication tokens
65
+ * @throws Error if token refresh fails
66
+ */
67
+ async refreshTokens(refreshToken) {
68
+ const tokenEndpoint = `${this.profile.cognitoDomain}/oauth2/token`;
69
+ const params = new URLSearchParams({
70
+ grant_type: 'refresh_token',
71
+ client_id: this.profile.cognitoClientId,
72
+ refresh_token: refreshToken
73
+ });
74
+ const response = await fetch(tokenEndpoint, {
75
+ method: 'POST',
76
+ headers: {
77
+ 'Content-Type': 'application/x-www-form-urlencoded'
78
+ },
79
+ body: params.toString()
80
+ });
81
+ if (!response.ok) {
82
+ const errorText = await response.text();
83
+ throw new Error(`Token refresh failed: ${response.statusText}. ${errorText}`);
84
+ }
85
+ const tokenSet = await response.json();
86
+ // Calculate new expiry time
87
+ const expiresAt = new Date(Date.now() + tokenSet.expires_in * 1000).toISOString();
88
+ const tokens = {
89
+ accessToken: tokenSet.access_token,
90
+ idToken: tokenSet.id_token,
91
+ refreshToken: tokenSet.refresh_token || refreshToken, // Use new refresh token if provided, otherwise keep existing
92
+ expiresAt
93
+ };
94
+ // Update stored tokens
95
+ await saveTokens(this.profile.name, tokens);
96
+ return tokens;
97
+ }
98
+ /**
99
+ * Authenticates using OAuth 2.0 Client Credentials flow
100
+ * Used for machine-to-machine authentication (CI/CD)
101
+ *
102
+ * @param clientId - M2M client ID
103
+ * @param clientSecret - M2M client secret
104
+ * @returns Promise resolving to authentication tokens
105
+ * @throws Error if authentication fails
106
+ */
107
+ async authenticateWithClientCredentials(clientId, clientSecret) {
108
+ const tokenEndpoint = `${this.profile.cognitoDomain}/oauth2/token`;
109
+ const params = new URLSearchParams({
110
+ grant_type: 'client_credentials',
111
+ client_id: clientId,
112
+ client_secret: clientSecret,
113
+ scope: 'sembix-api/projects.read sembix-api/workflows.read sembix-api/workflows.execute'
114
+ });
115
+ const response = await fetch(tokenEndpoint, {
116
+ method: 'POST',
117
+ headers: {
118
+ 'Content-Type': 'application/x-www-form-urlencoded'
119
+ },
120
+ body: params.toString()
121
+ });
122
+ if (!response.ok) {
123
+ const errorText = await response.text();
124
+ throw new Error(`Client credentials authentication failed: ${response.statusText}. ${errorText}`);
125
+ }
126
+ const tokenSet = await response.json();
127
+ // Validate response
128
+ if (!tokenSet.access_token) {
129
+ throw new Error('Invalid token response: missing access_token');
130
+ }
131
+ // Client credentials flow doesn't return id_token or refresh_token
132
+ return {
133
+ accessToken: tokenSet.access_token,
134
+ idToken: '', // Not provided in client credentials
135
+ refreshToken: '', // Not provided in client credentials
136
+ expiresAt: new Date(Date.now() + tokenSet.expires_in * 1000).toISOString()
137
+ };
138
+ }
139
+ /**
140
+ * Generates PKCE code verifier and challenge for secure OAuth flow.
141
+ * Uses SHA256 hashing as required by OAuth 2.0 PKCE specification.
142
+ *
143
+ * @returns Object containing base64url-encoded verifier and challenge
144
+ */
145
+ generatePKCE() {
146
+ // Generate cryptographically secure random verifier (43-128 characters)
147
+ const verifier = randomBytes(32).toString('base64url');
148
+ // Create SHA256 hash of verifier for challenge
149
+ const challenge = createHash('sha256')
150
+ .update(verifier)
151
+ .digest('base64url');
152
+ return { verifier, challenge };
153
+ }
154
+ /**
155
+ * Starts a temporary HTTP server on localhost to receive OAuth callback.
156
+ * Finds an available port in the range 3000-9000.
157
+ *
158
+ * @returns Promise resolving to server port and a promise for the authorization code
159
+ */
160
+ async startLocalServer() {
161
+ return new Promise((resolve, reject) => {
162
+ let codeResolver;
163
+ let codeRejector;
164
+ const codePromise = new Promise((res, rej) => {
165
+ codeResolver = res;
166
+ codeRejector = rej;
167
+ });
168
+ const server = createServer((req, res) => {
169
+ const url = new URL(req.url || '', `http://localhost`);
170
+ if (url.pathname === '/callback') {
171
+ const code = url.searchParams.get('code');
172
+ const error = url.searchParams.get('error');
173
+ if (error) {
174
+ const errorDescription = url.searchParams.get('error_description') || error;
175
+ res.writeHead(400, { 'Content-Type': 'text/html' });
176
+ res.end(`<html><body><h1>Authentication Failed</h1><p>${errorDescription}</p></body></html>`);
177
+ codeRejector(new Error(`OAuth error: ${errorDescription}`));
178
+ server.close();
179
+ return;
180
+ }
181
+ if (!code) {
182
+ res.writeHead(400, { 'Content-Type': 'text/html' });
183
+ res.end('<html><body><h1>Authentication Failed</h1><p>No authorization code received</p></body></html>');
184
+ codeRejector(new Error('No authorization code received'));
185
+ server.close();
186
+ return;
187
+ }
188
+ // Success response
189
+ res.writeHead(200, { 'Content-Type': 'text/html' });
190
+ res.end('<html><body><h1>Authentication Successful</h1><p>You can close this window and return to the CLI.</p></body></html>');
191
+ codeResolver(code);
192
+ server.close();
193
+ }
194
+ else {
195
+ res.writeHead(404);
196
+ res.end('Not Found');
197
+ }
198
+ });
199
+ // Try to find an available port in range 3000-9000
200
+ const tryPort = (port) => {
201
+ server.listen(port, 'localhost', () => {
202
+ resolve({ port, codePromise });
203
+ });
204
+ server.on('error', (err) => {
205
+ if (err.code === 'EADDRINUSE' && port < 9000) {
206
+ // Port in use, try next one
207
+ tryPort(port + 1);
208
+ }
209
+ else {
210
+ reject(new Error(`Failed to start callback server: ${err.message}`));
211
+ }
212
+ });
213
+ };
214
+ tryPort(3000);
215
+ });
216
+ }
217
+ /**
218
+ * Builds the Cognito authorization URL with PKCE parameters.
219
+ *
220
+ * @param redirectUri - Callback URL for OAuth flow
221
+ * @param codeChallenge - PKCE code challenge
222
+ * @param state - Random state parameter for CSRF protection
223
+ * @returns Complete authorization URL
224
+ */
225
+ buildAuthorizationUrl(redirectUri, codeChallenge, state) {
226
+ const params = new URLSearchParams({
227
+ response_type: 'code',
228
+ client_id: this.profile.cognitoClientId,
229
+ redirect_uri: redirectUri,
230
+ code_challenge: codeChallenge,
231
+ code_challenge_method: 'S256',
232
+ state,
233
+ scope: 'openid email' // OpenID Connect scopes for CLI authentication
234
+ });
235
+ return `${this.profile.cognitoDomain}/oauth2/authorize?${params.toString()}`;
236
+ }
237
+ /**
238
+ * Exchanges authorization code for access tokens via Cognito token endpoint.
239
+ *
240
+ * @param code - Authorization code from OAuth callback
241
+ * @param codeVerifier - PKCE code verifier
242
+ * @param redirectUri - Must match the redirect_uri used in authorization request
243
+ * @returns Promise resolving to token set
244
+ * @throws Error if token exchange fails
245
+ */
246
+ async exchangeCodeForTokens(code, codeVerifier, redirectUri) {
247
+ const tokenEndpoint = `${this.profile.cognitoDomain}/oauth2/token`;
248
+ const params = new URLSearchParams({
249
+ grant_type: 'authorization_code',
250
+ client_id: this.profile.cognitoClientId,
251
+ code,
252
+ code_verifier: codeVerifier,
253
+ redirect_uri: redirectUri
254
+ });
255
+ const response = await fetch(tokenEndpoint, {
256
+ method: 'POST',
257
+ headers: {
258
+ 'Content-Type': 'application/x-www-form-urlencoded'
259
+ },
260
+ body: params.toString()
261
+ });
262
+ if (!response.ok) {
263
+ const errorText = await response.text();
264
+ throw new Error(`Token exchange failed: ${response.statusText}. ${errorText}`);
265
+ }
266
+ const tokenSet = await response.json();
267
+ // Validate required fields
268
+ if (!tokenSet.access_token || !tokenSet.id_token || !tokenSet.refresh_token) {
269
+ throw new Error('Invalid token response: missing required tokens');
270
+ }
271
+ return tokenSet;
272
+ }
273
+ /**
274
+ * Attempts to open the authorization URL in the default browser.
275
+ * Uses platform-specific commands (open on macOS, start on Windows, xdg-open on Linux).
276
+ *
277
+ * @param url - URL to open
278
+ * @throws Error if browser cannot be opened (non-fatal, user can use manual URL)
279
+ */
280
+ async openBrowser(url) {
281
+ const { exec } = await import('child_process');
282
+ const { promisify } = await import('util');
283
+ const execAsync = promisify(exec);
284
+ const platform = process.platform;
285
+ let command;
286
+ switch (platform) {
287
+ case 'darwin':
288
+ command = `open "${url}"`;
289
+ break;
290
+ case 'win32':
291
+ command = `start "" "${url}"`;
292
+ break;
293
+ default: // Linux and others
294
+ command = `xdg-open "${url}"`;
295
+ break;
296
+ }
297
+ await execAsync(command);
298
+ }
299
+ }
300
+ /**
301
+ * Validates if a token is still valid based on expiration time.
302
+ *
303
+ * @param tokens - Authentication tokens to validate
304
+ * @returns true if token is valid, false if expired
305
+ */
306
+ export function validateToken(tokens) {
307
+ return isTokenValid(tokens);
308
+ }
309
+ /**
310
+ * Loads stored tokens for a profile.
311
+ *
312
+ * @param profileName - Name of the profile
313
+ * @returns Promise resolving to tokens or null if not found
314
+ */
315
+ export async function getStoredTokens(profileName) {
316
+ const tokens = await loadTokens(profileName);
317
+ return tokens ?? null;
318
+ }
319
+ //# sourceMappingURL=cognito-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cognito-auth.js","sourceRoot":"","sources":["../../src/services/cognito-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import type { StudioProfile, StudioAuthTokens, Project, ProjectSearchParams, ProjectListResponse, Workflow, WorkflowSearchParams, WorkflowListResponse, WorkflowTemplate, WorkflowTemplateSearchParams, WorkflowTemplateListResponse, StartWorkflowConfiguration, WorkflowStartResponse, FetchWorkflowRunResponse, FetchWorkflowRunListItem, SearchParams } from '../types.js';
2
+ /**
3
+ * Client for interacting with Sembix Studio API endpoints.
4
+ * Handles authenticated requests, automatic token refresh, and error handling.
5
+ */
6
+ export declare class StudioApiClient {
7
+ private profile;
8
+ private tokens;
9
+ private cognitoService;
10
+ constructor(profile: StudioProfile, tokens: StudioAuthTokens);
11
+ /**
12
+ * Search for projects by name or IDs.
13
+ * @param params - Search parameters (projectName, projectIds)
14
+ * @returns Promise resolving to project list response
15
+ */
16
+ searchProjects(params?: ProjectSearchParams): Promise<ProjectListResponse>;
17
+ /**
18
+ * Get a specific project by ID.
19
+ * Note: API doesn't have a direct GET endpoint, so we search with projectIds filter.
20
+ * @param projectId - The project ID
21
+ * @returns Promise resolving to project or null if not found
22
+ */
23
+ getProject(projectId: string): Promise<Project | null>;
24
+ /**
25
+ * List workflows with optional filters.
26
+ * @param params - Filter parameters (projectId, workflowId, workflowTemplateIds, parentWorkflowId)
27
+ * @returns Promise resolving to workflow list response
28
+ */
29
+ listWorkflows(params?: WorkflowSearchParams): Promise<WorkflowListResponse>;
30
+ /**
31
+ * Get a specific workflow by ID.
32
+ * @param projectId - The project ID
33
+ * @param workflowId - The workflow ID
34
+ * @returns Promise resolving to workflow details
35
+ */
36
+ getWorkflow(projectId: string, workflowId: string): Promise<Workflow>;
37
+ /**
38
+ * Find a workflow by name within a project.
39
+ * Searches all workflows in the project and returns the first match.
40
+ * API returns only parent workflows by default (unless parentWorkflowId is specified).
41
+ * @param projectId - The project ID
42
+ * @param workflowName - The workflow name (case-insensitive)
43
+ * @returns Promise resolving to workflow or null if not found
44
+ */
45
+ findWorkflowByName(projectId: string, workflowName: string): Promise<Workflow | null>;
46
+ /**
47
+ * Resolves a parent workflow to its published child workflow with the highest version.
48
+ * This is required because workflow lists show parent workflows, but you must start child workflows.
49
+ * @param projectId - The project ID
50
+ * @param parentWorkflowId - The parent workflow ID to resolve
51
+ * @returns Promise resolving to the published child workflow with highest version
52
+ * @throws Error if no published children found
53
+ */
54
+ resolveToPublishedChild(projectId: string, parentWorkflowId: string): Promise<Workflow>;
55
+ /**
56
+ * Start a workflow execution.
57
+ * @param projectId - The project ID
58
+ * @param workflowId - The workflow ID
59
+ * @param startConfiguration - Workflow start configuration with input variables
60
+ * @returns Promise resolving to workflow start response with runId and taskArn
61
+ */
62
+ startWorkflow(projectId: string, workflowId: string, startConfiguration: StartWorkflowConfiguration): Promise<WorkflowStartResponse>;
63
+ /**
64
+ * Get details of a specific workflow run.
65
+ * @param workflowId - The workflow ID
66
+ * @param runId - The run ID
67
+ * @returns Promise resolving to workflow run details
68
+ */
69
+ getWorkflowRun(workflowId: string, runId: string): Promise<FetchWorkflowRunResponse>;
70
+ /**
71
+ * Search workflow runs with optional filters.
72
+ * @param params - Search parameters for filtering and pagination
73
+ * @returns Promise resolving to list of workflow runs
74
+ */
75
+ searchWorkflowRuns(params: SearchParams): Promise<FetchWorkflowRunListItem>;
76
+ /**
77
+ * Stop a running workflow.
78
+ * @param projectId - The project ID
79
+ * @param workflowId - The workflow ID
80
+ * @param runId - The run ID to stop
81
+ * @returns Promise resolving when workflow is stopped
82
+ */
83
+ stopWorkflowRun(projectId: string, workflowId: string, runId: string): Promise<void>;
84
+ /**
85
+ * Get a specific workflow template by ID.
86
+ * @param projectId - The project ID
87
+ * @param templateId - The workflow template ID
88
+ * @returns Promise resolving to template details
89
+ */
90
+ getWorkflowTemplate(projectId: string, templateId: string): Promise<WorkflowTemplate>;
91
+ /**
92
+ * List workflow templates with optional filters.
93
+ * @param params - Filter parameters (templateIds, category, tags)
94
+ * @returns Promise resolving to template list response
95
+ */
96
+ listWorkflowTemplates(params?: WorkflowTemplateSearchParams): Promise<WorkflowTemplateListResponse>;
97
+ /**
98
+ * Get workflow template for a specific workflow.
99
+ * Convenience method that fetches workflow and then its template.
100
+ * @param projectId - The project ID
101
+ * @param workflowId - The workflow ID
102
+ * @returns Promise resolving to template details or null if workflow has no template
103
+ */
104
+ getWorkflowTemplateForWorkflow(projectId: string, workflowId: string): Promise<WorkflowTemplate | null>;
105
+ /**
106
+ * Make an authenticated HTTP request to the Studio API.
107
+ * Handles token refresh on 401 responses and retries the request.
108
+ * @param method - HTTP method
109
+ * @param path - API endpoint path
110
+ * @param body - Optional request body
111
+ * @param queryParams - Optional query parameters
112
+ * @returns Promise resolving to parsed response
113
+ */
114
+ private _makeRequest;
115
+ /**
116
+ * Handle HTTP response, parsing JSON or throwing errors.
117
+ * @param response - Fetch response object
118
+ * @returns Promise resolving to parsed response body
119
+ */
120
+ private _handleResponse;
121
+ /**
122
+ * Refresh authentication tokens and update stored tokens.
123
+ * @throws Error if token refresh fails
124
+ */
125
+ private _refreshTokensAndRetry;
126
+ }
127
+ //# sourceMappingURL=studio-api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studio-api-client.d.ts","sourceRoot":"","sources":["../../src/services/studio-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,OAAO,EACP,mBAAmB,EACnB,mBAAmB,EACnB,QAAQ,EACR,oBAAoB,EACpB,oBAAoB,EACpB,gBAAgB,EAChB,4BAA4B,EAC5B,4BAA4B,EAC5B,0BAA0B,EAC1B,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,YAAY,EACb,MAAM,aAAa,CAAC;AAKrB;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,cAAc,CAAqB;gBAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB;IAM5D;;;;OAIG;IACG,cAAc,CAAC,MAAM,GAAE,mBAAwB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIpF;;;;;OAKG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAK5D;;;;OAIG;IACG,aAAa,CAAC,MAAM,GAAE,oBAAyB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIrF;;;;;OAKG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAK3E;;;;;;;OAOG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAa3F;;;;;;;OAOG;IACG,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IA4B7F;;;;;;OAMG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,0BAA0B,GAC7C,OAAO,CAAC,qBAAqB,CAAC;IAMjC;;;;;OAKG;IACG,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,wBAAwB,CAAC;IAKpC;;;;OAIG;IACG,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAKjF;;;;;;OAMG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;OAKG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAK3F;;;;OAIG;IACG,qBAAqB,CAAC,MAAM,GAAE,4BAAiC,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAI7G;;;;;;OAMG;IACG,8BAA8B,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAQ7G;;;;;;;;OAQG;YACW,YAAY;IA6D1B;;;;OAIG;YACW,eAAe;IAmC7B;;;OAGG;YACW,sBAAsB;CAmBrC"}