curatedreels-deploy 1.0.1

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.
@@ -0,0 +1,363 @@
1
+ /**
2
+ * Vercel API Client
3
+ *
4
+ * Deploys Next.js applications to Vercel using CLI for pre-built deployments
5
+ */
6
+ import fetch from 'node-fetch';
7
+ import { readdir, readFile, stat, writeFile } from 'fs/promises';
8
+ import { join, resolve } from 'path';
9
+ import { exec } from 'child_process';
10
+ import { promisify } from 'util';
11
+ const execAsync = promisify(exec);
12
+ export class VercelClient {
13
+ token;
14
+ teamId;
15
+ baseUrl = 'https://api.vercel.com';
16
+ constructor(token, teamId) {
17
+ this.token = token;
18
+ this.teamId = teamId;
19
+ }
20
+ /**
21
+ * Deploy a project to Vercel using CLI pre-built deployment
22
+ */
23
+ async deploy(options) {
24
+ // Step 1: Create or get project and set env vars
25
+ const projectId = await this.ensureProject(options.projectName);
26
+ await this.setEnvironmentVariables(projectId, options.envVars);
27
+ // Step 2: Build the app locally and deploy using Vercel CLI
28
+ const deploymentUrl = await this.deployWithCLI(options);
29
+ return deploymentUrl;
30
+ }
31
+ /**
32
+ * Deploy using Vercel CLI with pre-built output
33
+ */
34
+ async deployWithCLI(options) {
35
+ const bundlePath = resolve(options.bundlePath);
36
+ // Check if there's a .next folder (pre-built) or source files
37
+ const hasNextBuild = await stat(join(bundlePath, '.next')).catch(() => null);
38
+ // Create vercel.json configuration
39
+ const vercelConfig = {
40
+ name: options.projectName,
41
+ framework: options.framework === 'nextjs' ? 'nextjs' : null
42
+ };
43
+ await writeFile(join(bundlePath, 'vercel.json'), JSON.stringify(vercelConfig, null, 2));
44
+ // Build command if no .next exists
45
+ let buildCmd = '';
46
+ if (!hasNextBuild) {
47
+ // Need to build first
48
+ buildCmd = `cd "${bundlePath}" && npm install && npm run build && `;
49
+ }
50
+ // Deploy using Vercel CLI
51
+ const teamArg = this.teamId ? `--scope ${this.teamId}` : '';
52
+ const cmd = `${buildCmd}cd "${bundlePath}" && npx vercel deploy --token ${this.token} ${teamArg} --yes --prod 2>&1`;
53
+ try {
54
+ const { stdout, stderr } = await execAsync(cmd, {
55
+ timeout: 600000, // 10 minute timeout
56
+ maxBuffer: 50 * 1024 * 1024, // 50MB buffer
57
+ env: {
58
+ ...process.env,
59
+ VERCEL_ORG_ID: this.teamId || undefined,
60
+ ...options.envVars
61
+ }
62
+ });
63
+ // Extract deployment URL from output
64
+ const output = stdout + stderr;
65
+ const urlMatch = output.match(/https:\/\/[^\s]+\.vercel\.app/);
66
+ if (urlMatch) {
67
+ return urlMatch[0];
68
+ }
69
+ // If no URL found, check for production URL
70
+ const prodUrlMatch = output.match(/Production: (https:\/\/[^\s]+)/);
71
+ if (prodUrlMatch) {
72
+ return prodUrlMatch[1];
73
+ }
74
+ throw new Error(`Could not extract deployment URL from output: ${output.slice(0, 500)}`);
75
+ }
76
+ catch (error) {
77
+ throw new Error(`Vercel CLI deployment failed: ${error.message}`);
78
+ }
79
+ }
80
+ /**
81
+ * Ensure project exists (create if not)
82
+ */
83
+ async ensureProject(name) {
84
+ // Try to get existing project
85
+ try {
86
+ const project = await this.getProject(name);
87
+ return project.id;
88
+ }
89
+ catch {
90
+ // Project doesn't exist, create it
91
+ return await this.createProject(name);
92
+ }
93
+ }
94
+ /**
95
+ * Get project by name
96
+ */
97
+ async getProject(name) {
98
+ const url = this.buildUrl('/v9/projects/' + encodeURIComponent(name));
99
+ const response = await fetch(url, {
100
+ headers: this.getHeaders()
101
+ });
102
+ if (!response.ok) {
103
+ throw new Error(`Project not found: ${name}`);
104
+ }
105
+ return await response.json();
106
+ }
107
+ /**
108
+ * Create a new project
109
+ */
110
+ async createProject(name) {
111
+ const url = this.buildUrl('/v10/projects');
112
+ const response = await fetch(url, {
113
+ method: 'POST',
114
+ headers: this.getHeaders(),
115
+ body: JSON.stringify({
116
+ name,
117
+ framework: 'nextjs'
118
+ })
119
+ });
120
+ if (!response.ok) {
121
+ const error = await response.text();
122
+ throw new Error(`Failed to create project: ${error}`);
123
+ }
124
+ const project = await response.json();
125
+ return project.id;
126
+ }
127
+ /**
128
+ * Collect all files from bundle directory
129
+ */
130
+ async collectFiles(bundlePath) {
131
+ const files = [];
132
+ const { resolve } = await import('path');
133
+ const normalizedBase = resolve(bundlePath);
134
+ async function walk(dir) {
135
+ const entries = await readdir(dir, { withFileTypes: true });
136
+ for (const entry of entries) {
137
+ const fullPath = join(dir, entry.name);
138
+ if (entry.isDirectory()) {
139
+ // Skip node_modules, .git, and macOS resource forks
140
+ if (entry.name === 'node_modules' || entry.name === '.git' || entry.name.startsWith('._')) {
141
+ continue;
142
+ }
143
+ await walk(fullPath);
144
+ }
145
+ else {
146
+ // Skip macOS resource fork files (._*)
147
+ if (entry.name.startsWith('._')) {
148
+ continue;
149
+ }
150
+ const normalizedFull = resolve(fullPath);
151
+ const relativePath = normalizedFull.slice(normalizedBase.length + 1);
152
+ const content = await readFile(fullPath);
153
+ files.push({
154
+ file: relativePath,
155
+ data: content.toString('base64'),
156
+ encoding: 'base64'
157
+ });
158
+ }
159
+ }
160
+ }
161
+ await walk(bundlePath);
162
+ return files;
163
+ }
164
+ /**
165
+ * Create a deployment
166
+ */
167
+ async createDeployment(options) {
168
+ const url = this.buildUrl('/v13/deployments');
169
+ // Log file count for debugging
170
+ console.log(`Uploading ${options.files.length} files to Vercel...`);
171
+ const pkgFile = options.files.find(f => f.file === 'package.json');
172
+ if (pkgFile) {
173
+ console.log(' - package.json found');
174
+ }
175
+ else {
176
+ console.log(' - WARNING: package.json NOT found!');
177
+ console.log(' - Files:', options.files.slice(0, 5).map(f => f.file).join(', '), '...');
178
+ }
179
+ // Convert env vars to Vercel format for deployment
180
+ const env = options.envVars || {};
181
+ const response = await fetch(url, {
182
+ method: 'POST',
183
+ headers: this.getHeaders(),
184
+ body: JSON.stringify({
185
+ name: options.name,
186
+ project: options.projectId,
187
+ files: options.files,
188
+ projectSettings: {
189
+ framework: 'nextjs'
190
+ },
191
+ target: 'production',
192
+ env
193
+ })
194
+ });
195
+ if (!response.ok) {
196
+ const error = await response.text();
197
+ throw new Error(`Deployment failed: ${error}`);
198
+ }
199
+ const deployment = await response.json();
200
+ // Wait for deployment to be ready
201
+ await this.waitForDeployment(deployment.id);
202
+ return deployment.url;
203
+ }
204
+ /**
205
+ * Wait for deployment to complete
206
+ */
207
+ async waitForDeployment(deploymentId) {
208
+ const maxAttempts = 120; // 10 minutes
209
+ const interval = 5000; // 5 seconds
210
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
211
+ const url = this.buildUrl(`/v13/deployments/${deploymentId}`);
212
+ const response = await fetch(url, {
213
+ headers: this.getHeaders()
214
+ });
215
+ if (!response.ok) {
216
+ throw new Error('Failed to check deployment status');
217
+ }
218
+ const deployment = await response.json();
219
+ if (deployment.readyState === 'READY') {
220
+ return;
221
+ }
222
+ if (deployment.readyState === 'ERROR') {
223
+ throw new Error('Deployment failed on Vercel');
224
+ }
225
+ await new Promise(resolve => setTimeout(resolve, interval));
226
+ }
227
+ throw new Error('Deployment timeout');
228
+ }
229
+ /**
230
+ * Set environment variables for a project
231
+ */
232
+ async setEnvironmentVariables(projectId, envVars) {
233
+ for (const [key, value] of Object.entries(envVars)) {
234
+ await this.createEnvironmentVariable(projectId, key, value);
235
+ }
236
+ }
237
+ /**
238
+ * Create or update a single environment variable
239
+ */
240
+ async createEnvironmentVariable(projectId, key, value) {
241
+ const url = this.buildUrl(`/v10/projects/${projectId}/env`);
242
+ const response = await fetch(url, {
243
+ method: 'POST',
244
+ headers: this.getHeaders(),
245
+ body: JSON.stringify({
246
+ key,
247
+ value,
248
+ type: 'encrypted',
249
+ target: ['production', 'preview', 'development']
250
+ })
251
+ });
252
+ if (!response.ok) {
253
+ const error = await response.text();
254
+ // If env var already exists, try to update it
255
+ if (error.includes('ENV_CONFLICT') || response.status === 409) {
256
+ await this.updateEnvironmentVariable(projectId, key, value);
257
+ return;
258
+ }
259
+ throw new Error(`Failed to set env var ${key}: ${error}`);
260
+ }
261
+ }
262
+ /**
263
+ * Update an existing environment variable
264
+ */
265
+ async updateEnvironmentVariable(projectId, key, value) {
266
+ // First get the env var ID
267
+ const listUrl = this.buildUrl(`/v10/projects/${projectId}/env`);
268
+ const listResponse = await fetch(listUrl, {
269
+ headers: this.getHeaders()
270
+ });
271
+ if (!listResponse.ok) {
272
+ throw new Error(`Failed to list env vars for update: ${await listResponse.text()}`);
273
+ }
274
+ const data = await listResponse.json();
275
+ const envVar = data.envs.find(e => e.key === key);
276
+ if (!envVar) {
277
+ throw new Error(`Env var ${key} not found for update`);
278
+ }
279
+ // Update the env var
280
+ const updateUrl = this.buildUrl(`/v10/projects/${projectId}/env/${envVar.id}`);
281
+ const updateResponse = await fetch(updateUrl, {
282
+ method: 'PATCH',
283
+ headers: this.getHeaders(),
284
+ body: JSON.stringify({
285
+ value,
286
+ type: 'encrypted',
287
+ target: ['production', 'preview', 'development']
288
+ })
289
+ });
290
+ if (!updateResponse.ok) {
291
+ const error = await updateResponse.text();
292
+ throw new Error(`Failed to update env var ${key}: ${error}`);
293
+ }
294
+ }
295
+ /**
296
+ * Update existing environment variables
297
+ */
298
+ async updateEnvironmentVariables(projectName, envVars) {
299
+ const project = await this.getProject(projectName);
300
+ await this.setEnvironmentVariables(project.id, envVars);
301
+ // Trigger redeployment to apply new env vars
302
+ await this.triggerRedeployment(project.id);
303
+ }
304
+ /**
305
+ * Trigger a redeployment
306
+ */
307
+ async triggerRedeployment(projectId) {
308
+ const url = this.buildUrl(`/v13/deployments`);
309
+ // Get latest deployment and redeploy it
310
+ const deploymentsUrl = this.buildUrl(`/v6/deployments?projectId=${projectId}&limit=1`);
311
+ const deploymentsResponse = await fetch(deploymentsUrl, {
312
+ headers: this.getHeaders()
313
+ });
314
+ const deployments = await deploymentsResponse.json();
315
+ if (deployments.deployments && deployments.deployments[0]) {
316
+ const latestDeployment = deployments.deployments[0];
317
+ await fetch(url, {
318
+ method: 'POST',
319
+ headers: this.getHeaders(),
320
+ body: JSON.stringify({
321
+ deploymentId: latestDeployment.uid,
322
+ target: 'production'
323
+ })
324
+ });
325
+ }
326
+ }
327
+ /**
328
+ * Add a custom domain to a project
329
+ */
330
+ async addDomain(projectName, domain) {
331
+ const project = await this.getProject(projectName);
332
+ const url = this.buildUrl(`/v10/projects/${project.id}/domains`);
333
+ const response = await fetch(url, {
334
+ method: 'POST',
335
+ headers: this.getHeaders(),
336
+ body: JSON.stringify({ name: domain })
337
+ });
338
+ if (!response.ok && response.status !== 409) {
339
+ const error = await response.text();
340
+ throw new Error(`Failed to add domain: ${error}`);
341
+ }
342
+ }
343
+ /**
344
+ * Build API URL with team parameter
345
+ */
346
+ buildUrl(path) {
347
+ const url = new URL(path, this.baseUrl);
348
+ if (this.teamId) {
349
+ url.searchParams.set('teamId', this.teamId);
350
+ }
351
+ return url.toString();
352
+ }
353
+ /**
354
+ * Get request headers
355
+ */
356
+ getHeaders() {
357
+ return {
358
+ 'Authorization': `Bearer ${this.token}`,
359
+ 'Content-Type': 'application/json'
360
+ };
361
+ }
362
+ }
363
+ //# sourceMappingURL=vercel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../src/clients/vercel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CuratedReels Deployment CLI
4
+ *
5
+ * White-label deployment tool that deploys CuratedReels to customer's
6
+ * infrastructure without exposing source code.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
package/dist/index.js ADDED
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CuratedReels Deployment CLI
4
+ *
5
+ * White-label deployment tool that deploys CuratedReels to customer's
6
+ * infrastructure without exposing source code.
7
+ */
8
+ import prompts from 'prompts';
9
+ import chalk from 'chalk';
10
+ import ora from 'ora';
11
+ import { DeploymentOrchestrator } from './orchestrator.js';
12
+ import { verifyLicense, mockVerifyLicense } from './services/license.js';
13
+ import { collectCredentials } from './utils/credentials.js';
14
+ import { downloadBundles, mockDownloadBundles } from './services/bundles.js';
15
+ const VERSION = '1.0.0';
16
+ // Check if running in CI mode with env vars
17
+ const isEnvMode = process.env.DEPLOY_CLI_ENV_MODE === 'true';
18
+ /**
19
+ * Get credentials from environment variables (for CI/testing)
20
+ */
21
+ function getEnvCredentials() {
22
+ const required = ['PROJECT_NAME', 'VERCEL_TOKEN', 'DENO_TOKEN', 'MONGODB_URI', 'TELEGRAM_BOT_TOKEN'];
23
+ const missing = required.filter(key => !process.env[key]);
24
+ if (missing.length > 0) {
25
+ return null;
26
+ }
27
+ return {
28
+ projectName: process.env.PROJECT_NAME,
29
+ vercelToken: process.env.VERCEL_TOKEN,
30
+ vercelTeamId: process.env.VERCEL_TEAM_ID,
31
+ denoToken: process.env.DENO_TOKEN,
32
+ denoOrg: process.env.DENO_ORG,
33
+ mongodbUri: process.env.MONGODB_URI,
34
+ telegramBotToken: process.env.TELEGRAM_BOT_TOKEN,
35
+ telegramGroupId: process.env.TELEGRAM_GROUP_ID,
36
+ cloudinaryCloudName: process.env.CLOUDINARY_CLOUD_NAME,
37
+ cloudinaryApiKey: process.env.CLOUDINARY_API_KEY,
38
+ cloudinaryApiSecret: process.env.CLOUDINARY_API_SECRET,
39
+ youtubeApiKey: process.env.YOUTUBE_API_KEY,
40
+ customDomain: process.env.CUSTOM_DOMAIN,
41
+ };
42
+ }
43
+ async function showWelcome() {
44
+ console.log(chalk.cyan.bold('\n🎯 CuratedReels Deployment CLI'));
45
+ console.log(chalk.gray(` Version ${VERSION}\n`));
46
+ console.log(chalk.white(' Deploy CuratedReels to your infrastructure'));
47
+ console.log(chalk.gray(' - Vercel (Frontend + CMS)'));
48
+ console.log(chalk.gray(' - Deno Deploy (Bot)'));
49
+ console.log(chalk.gray(' - MongoDB Atlas (Database)\n'));
50
+ }
51
+ async function verifyLicenseKey() {
52
+ let licenseKey;
53
+ if (isEnvMode && process.env.LICENSE_KEY) {
54
+ licenseKey = process.env.LICENSE_KEY;
55
+ }
56
+ else {
57
+ const response = await prompts({
58
+ type: 'password',
59
+ name: 'licenseKey',
60
+ message: 'Enter your CuratedReels license key:',
61
+ validate: (value) => value.length > 10 || 'License key is too short'
62
+ });
63
+ licenseKey = response.licenseKey;
64
+ }
65
+ if (!licenseKey) {
66
+ console.log(chalk.red('\n❌ License key is required'));
67
+ process.exit(1);
68
+ }
69
+ const spinner = ora('Verifying license...').start();
70
+ try {
71
+ // Use mock verification in development
72
+ const verify = process.env.NODE_ENV === 'development' ? mockVerifyLicense : verifyLicense;
73
+ const isValid = await verify(licenseKey);
74
+ if (!isValid) {
75
+ spinner.fail('Invalid license key');
76
+ console.log(chalk.yellow('\nπŸ’‘ Purchase a license at: https://curatedreels.com/pricing'));
77
+ process.exit(1);
78
+ }
79
+ spinner.succeed('License verified');
80
+ return licenseKey;
81
+ }
82
+ catch (error) {
83
+ spinner.fail('License verification failed');
84
+ console.error(chalk.red(`\n❌ Error: ${error instanceof Error ? error.message : String(error)}`));
85
+ process.exit(1);
86
+ }
87
+ }
88
+ async function confirmDeployment() {
89
+ if (isEnvMode) {
90
+ // Skip confirmation in env mode
91
+ return;
92
+ }
93
+ const { confirm } = await prompts({
94
+ type: 'confirm',
95
+ name: 'confirm',
96
+ message: 'Ready to deploy CuratedReels to your infrastructure?',
97
+ initial: true
98
+ });
99
+ if (!confirm) {
100
+ console.log(chalk.yellow('\n⏸️ Deployment cancelled'));
101
+ process.exit(0);
102
+ }
103
+ }
104
+ async function main() {
105
+ try {
106
+ await showWelcome();
107
+ // Step 1: Verify license
108
+ console.log(chalk.bold('\nπŸ“ Step 1: License Verification'));
109
+ const licenseKey = await verifyLicenseKey();
110
+ // Step 2: Collect credentials
111
+ console.log(chalk.bold('\nπŸ” Step 2: Infrastructure Credentials'));
112
+ let credentials;
113
+ if (isEnvMode) {
114
+ const envCreds = getEnvCredentials();
115
+ if (!envCreds) {
116
+ console.log(chalk.red('\n❌ Missing required environment variables'));
117
+ console.log(chalk.gray('Required: PROJECT_NAME, VERCEL_TOKEN, DENO_TOKEN, MONGODB_URI, TELEGRAM_BOT_TOKEN'));
118
+ process.exit(1);
119
+ }
120
+ credentials = envCreds;
121
+ console.log(chalk.green('βœ” Using credentials from environment variables'));
122
+ }
123
+ else {
124
+ credentials = await collectCredentials();
125
+ }
126
+ // Step 3: Download bundles
127
+ console.log(chalk.bold('\nπŸ“¦ Step 3: Downloading Deployment Bundles'));
128
+ // Use mock bundles only if explicitly set, otherwise download real bundles
129
+ const useMockBundles = process.env.MOCK_BUNDLES === 'true';
130
+ const download = useMockBundles ? mockDownloadBundles : downloadBundles;
131
+ await download(licenseKey);
132
+ // Step 4: Confirm deployment
133
+ await confirmDeployment();
134
+ // Step 5: Deploy
135
+ console.log(chalk.bold('\nπŸš€ Step 4: Deploying to Your Infrastructure\n'));
136
+ const orchestrator = new DeploymentOrchestrator(credentials, licenseKey);
137
+ await orchestrator.deploy();
138
+ // Success!
139
+ console.log(chalk.green.bold('\nβœ… Deployment Complete!\n'));
140
+ console.log(chalk.white('Your CuratedReels instance is live:\n'));
141
+ console.log(chalk.cyan(` πŸ“± Frontend: ${orchestrator.frontendUrl}`));
142
+ console.log(chalk.cyan(` βš™οΈ Admin: ${orchestrator.cmsUrl}/admin`));
143
+ console.log(chalk.cyan(` πŸ€– Bot: ${orchestrator.botUrl}\n`));
144
+ console.log(chalk.white('Next steps:'));
145
+ console.log(chalk.gray(' 1. Add bot to Telegram: t.me/YourBotName'));
146
+ console.log(chalk.gray(' 2. Login to admin panel'));
147
+ console.log(chalk.gray(' 3. Configure your groups\n'));
148
+ console.log(chalk.white('Resources:'));
149
+ console.log(chalk.gray(' πŸ“š Documentation: https://docs.curatedreels.com'));
150
+ console.log(chalk.gray(' πŸ’¬ Support: support@curatedreels.com\n'));
151
+ }
152
+ catch (error) {
153
+ console.error(chalk.red(`\n❌ Deployment failed:`));
154
+ console.error(chalk.red(` ${error instanceof Error ? error.message : String(error)}\n`));
155
+ console.log(chalk.yellow('πŸ’‘ Need help? Contact support@curatedreels.com\n'));
156
+ process.exit(1);
157
+ }
158
+ }
159
+ // Handle SIGINT (Ctrl+C)
160
+ process.on('SIGINT', () => {
161
+ console.log(chalk.yellow('\n\n⏸️ Deployment interrupted'));
162
+ process.exit(0);
163
+ });
164
+ main();
165
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Deployment Orchestrator
3
+ *
4
+ * Coordinates deployment to all customer infrastructure:
5
+ * - Vercel (Frontend + CMS)
6
+ * - Deno Deploy (Bot)
7
+ * - MongoDB Atlas (Database)
8
+ */
9
+ import type { DeploymentCredentials } from './utils/credentials.js';
10
+ export declare class DeploymentOrchestrator {
11
+ private credentials;
12
+ private licenseKey;
13
+ private vercel;
14
+ private deno;
15
+ frontendUrl: string;
16
+ cmsUrl: string;
17
+ botUrl: string;
18
+ constructor(credentials: DeploymentCredentials, licenseKey: string);
19
+ /**
20
+ * Main deployment flow
21
+ */
22
+ deploy(): Promise<void>;
23
+ /**
24
+ * Deploy and configure MongoDB
25
+ */
26
+ private deployMongoDB;
27
+ /**
28
+ * Deploy CMS to Vercel
29
+ */
30
+ private deployCMS;
31
+ /**
32
+ * Deploy Frontend to Vercel
33
+ */
34
+ private deployFrontend;
35
+ /**
36
+ * Deploy Bot to Deno Deploy
37
+ */
38
+ private deployBot;
39
+ /**
40
+ * Register deployment with license server
41
+ */
42
+ private registerDeployment;
43
+ }
44
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAOnE,qBAAa,sBAAsB;IAS3B,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,UAAU;IATtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,IAAI,CAAY;IAEjB,WAAW,EAAE,MAAM,CAAK;IACxB,MAAM,EAAE,MAAM,CAAK;IACnB,MAAM,EAAE,MAAM,CAAK;gBAGd,WAAW,EAAE,qBAAqB,EAClC,UAAU,EAAE,MAAM;IAM9B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B7B;;OAEG;YACW,aAAa;IAY3B;;OAEG;YACW,SAAS;IA2CvB;;OAEG;YACW,cAAc;IAuC5B;;OAEG;YACW,SAAS;IAuCvB;;OAEG;YACW,kBAAkB;CAiBnC"}