dispatch-deploy 1.0.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 (114) hide show
  1. package/README.md +86 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +148 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/check.d.ts +15 -0
  7. package/dist/commands/check.d.ts.map +1 -0
  8. package/dist/commands/check.js +107 -0
  9. package/dist/commands/check.js.map +1 -0
  10. package/dist/commands/delete.d.ts +6 -0
  11. package/dist/commands/delete.d.ts.map +1 -0
  12. package/dist/commands/delete.js +107 -0
  13. package/dist/commands/delete.js.map +1 -0
  14. package/dist/commands/deploy.d.ts +9 -0
  15. package/dist/commands/deploy.d.ts.map +1 -0
  16. package/dist/commands/deploy.js +275 -0
  17. package/dist/commands/deploy.js.map +1 -0
  18. package/dist/commands/login.d.ts +4 -0
  19. package/dist/commands/login.d.ts.map +1 -0
  20. package/dist/commands/login.js +34 -0
  21. package/dist/commands/login.js.map +1 -0
  22. package/dist/commands/logout.d.ts +2 -0
  23. package/dist/commands/logout.d.ts.map +1 -0
  24. package/dist/commands/logout.js +15 -0
  25. package/dist/commands/logout.js.map +1 -0
  26. package/dist/commands/logs.d.ts +6 -0
  27. package/dist/commands/logs.d.ts.map +1 -0
  28. package/dist/commands/logs.js +129 -0
  29. package/dist/commands/logs.js.map +1 -0
  30. package/dist/commands/poll.d.ts +10 -0
  31. package/dist/commands/poll.d.ts.map +1 -0
  32. package/dist/commands/poll.js +72 -0
  33. package/dist/commands/poll.js.map +1 -0
  34. package/dist/commands/projects.d.ts +5 -0
  35. package/dist/commands/projects.d.ts.map +1 -0
  36. package/dist/commands/projects.js +49 -0
  37. package/dist/commands/projects.js.map +1 -0
  38. package/dist/commands/register.d.ts +5 -0
  39. package/dist/commands/register.d.ts.map +1 -0
  40. package/dist/commands/register.js +46 -0
  41. package/dist/commands/register.js.map +1 -0
  42. package/dist/commands/trigger.d.ts +11 -0
  43. package/dist/commands/trigger.d.ts.map +1 -0
  44. package/dist/commands/trigger.js +52 -0
  45. package/dist/commands/trigger.js.map +1 -0
  46. package/dist/config/runtime.d.ts +18 -0
  47. package/dist/config/runtime.d.ts.map +1 -0
  48. package/dist/config/runtime.js +32 -0
  49. package/dist/config/runtime.js.map +1 -0
  50. package/dist/services/auth.d.ts +18 -0
  51. package/dist/services/auth.d.ts.map +1 -0
  52. package/dist/services/auth.js +122 -0
  53. package/dist/services/auth.js.map +1 -0
  54. package/dist/services/builder.d.ts +4 -0
  55. package/dist/services/builder.d.ts.map +1 -0
  56. package/dist/services/builder.js +89 -0
  57. package/dist/services/builder.js.map +1 -0
  58. package/dist/services/controlPlane.d.ts +16 -0
  59. package/dist/services/controlPlane.d.ts.map +1 -0
  60. package/dist/services/controlPlane.js +155 -0
  61. package/dist/services/controlPlane.js.map +1 -0
  62. package/dist/services/deployer.d.ts +2 -0
  63. package/dist/services/deployer.d.ts.map +1 -0
  64. package/dist/services/deployer.js +49 -0
  65. package/dist/services/deployer.js.map +1 -0
  66. package/dist/services/project.d.ts +9 -0
  67. package/dist/services/project.d.ts.map +1 -0
  68. package/dist/services/project.js +29 -0
  69. package/dist/services/project.js.map +1 -0
  70. package/dist/services/sourceUploader.d.ts +9 -0
  71. package/dist/services/sourceUploader.d.ts.map +1 -0
  72. package/dist/services/sourceUploader.js +250 -0
  73. package/dist/services/sourceUploader.js.map +1 -0
  74. package/dist/services/uploader.d.ts +2 -0
  75. package/dist/services/uploader.d.ts.map +1 -0
  76. package/dist/services/uploader.js +59 -0
  77. package/dist/services/uploader.js.map +1 -0
  78. package/dist/types/deployment.d.ts +43 -0
  79. package/dist/types/deployment.d.ts.map +1 -0
  80. package/dist/types/deployment.js +6 -0
  81. package/dist/types/deployment.js.map +1 -0
  82. package/dist/types.d.ts +53 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +7 -0
  85. package/dist/types.js.map +1 -0
  86. package/dist/utils/config.d.ts +17 -0
  87. package/dist/utils/config.d.ts.map +1 -0
  88. package/dist/utils/config.js +85 -0
  89. package/dist/utils/config.js.map +1 -0
  90. package/dist/utils/credentials.d.ts +16 -0
  91. package/dist/utils/credentials.d.ts.map +1 -0
  92. package/dist/utils/credentials.js +72 -0
  93. package/dist/utils/credentials.js.map +1 -0
  94. package/dist/utils/debug.d.ts +7 -0
  95. package/dist/utils/debug.d.ts.map +1 -0
  96. package/dist/utils/debug.js +21 -0
  97. package/dist/utils/debug.js.map +1 -0
  98. package/dist/utils/input.d.ts +3 -0
  99. package/dist/utils/input.d.ts.map +1 -0
  100. package/dist/utils/input.js +94 -0
  101. package/dist/utils/input.js.map +1 -0
  102. package/dist/utils/loader.d.ts +22 -0
  103. package/dist/utils/loader.d.ts.map +1 -0
  104. package/dist/utils/loader.js +139 -0
  105. package/dist/utils/loader.js.map +1 -0
  106. package/dist/utils/normalizer.d.ts +10 -0
  107. package/dist/utils/normalizer.d.ts.map +1 -0
  108. package/dist/utils/normalizer.js +115 -0
  109. package/dist/utils/normalizer.js.map +1 -0
  110. package/dist/utils/safety.d.ts +18 -0
  111. package/dist/utils/safety.d.ts.map +1 -0
  112. package/dist/utils/safety.js +140 -0
  113. package/dist/utils/safety.js.map +1 -0
  114. package/package.json +70 -0
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runProjects = runProjects;
7
+ /**
8
+ * Projects command - List and manage projects
9
+ */
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const project_1 = require("../services/project");
12
+ const auth_1 = require("../services/auth");
13
+ async function runProjects(action, options = {}) {
14
+ try {
15
+ console.log(chalk_1.default.bold('📋 Dispatch Projects\n'));
16
+ // Verify authentication
17
+ const authResult = await (0, auth_1.verifyAuthentication)();
18
+ if (!authResult || !authResult.authenticated) {
19
+ console.log(chalk_1.default.red('❌ Not logged in. Run: dispatch login'));
20
+ return 1;
21
+ }
22
+ if (action === 'list') {
23
+ console.log(chalk_1.default.gray('Loading your projects...\n'));
24
+ const projects = await (0, project_1.listProjects)();
25
+ if (projects.length === 0) {
26
+ console.log(chalk_1.default.yellow('No projects found.'));
27
+ console.log(chalk_1.default.gray('Create your first project by running: dispatch deploy --project <name>'));
28
+ return 0;
29
+ }
30
+ console.log(chalk_1.default.bold(`Found ${projects.length} project${projects.length === 1 ? '' : 's'}:\n`));
31
+ projects.forEach((project, index) => {
32
+ console.log(chalk_1.default.green(` ${index + 1}. ${project.name}`));
33
+ console.log(chalk_1.default.gray(` ID: ${project.id}`));
34
+ console.log(chalk_1.default.gray(` Created: ${new Date(project.created_at).toLocaleDateString()}\n`));
35
+ });
36
+ return 0;
37
+ }
38
+ else {
39
+ console.log(chalk_1.default.red(`❌ Unknown action: ${action}`));
40
+ console.log(chalk_1.default.gray('Available actions: list'));
41
+ return 1;
42
+ }
43
+ }
44
+ catch (error) {
45
+ console.log(chalk_1.default.red(`❌ Error: ${error.message}`));
46
+ return 1;
47
+ }
48
+ }
49
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":";;;;;AAWA,kCAyCC;AApDD;;GAEG;AACH,kDAA0B;AAC1B,iDAAmD;AACnD,2CAAwD;AAMjD,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,UAA2B,EAAE;IAC7E,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAElD,wBAAwB;QACxB,MAAM,UAAU,GAAG,MAAM,IAAA,2BAAoB,GAAE,CAAC;QAChD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,MAAM,IAAA,sBAAY,GAAE,CAAC;YAEtC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC,CAAC;gBAClG,OAAO,CAAC,CAAC;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,WAAW,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAElG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC;YAClG,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,CAAC;QACX,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC;QACX,CAAC;IAEH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function runRegister(options: {
2
+ email?: string;
3
+ password?: string;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,iBA4C/E"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runRegister = runRegister;
7
+ const auth_1 = require("../services/auth");
8
+ const input_1 = require("../utils/input");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ async function runRegister(options) {
11
+ let email = options.email;
12
+ let password = options.password;
13
+ console.log(chalk_1.default.blue('\n📝 Dispatch Registration\n'));
14
+ if (!email) {
15
+ email = await (0, input_1.askQuestion)('Email: ');
16
+ }
17
+ if (!password) {
18
+ password = await (0, input_1.askPassword)('Password (min 6 characters): ');
19
+ // Ask for confirmation
20
+ const confirmPassword = await (0, input_1.askPassword)('Confirm password: ');
21
+ if (password !== confirmPassword) {
22
+ console.error(chalk_1.default.red('\n❌ Passwords do not match.'));
23
+ process.exit(1);
24
+ }
25
+ }
26
+ if (!email || !password) {
27
+ console.error(chalk_1.default.red('\n❌ Email and password are required.'));
28
+ process.exit(1);
29
+ }
30
+ if (password.length < 6) {
31
+ console.error(chalk_1.default.red('\n❌ Password must be at least 6 characters long.'));
32
+ process.exit(1);
33
+ }
34
+ console.log(chalk_1.default.gray('\n⏳ Creating account...'));
35
+ const success = await (0, auth_1.registerUser)(email.trim(), password.trim());
36
+ if (success) {
37
+ console.log(chalk_1.default.green('✅ Account created successfully!'));
38
+ console.log(chalk_1.default.yellow('📧 Please check your email to confirm your account.'));
39
+ console.log(chalk_1.default.gray('After confirming, run: dispatch login\n'));
40
+ }
41
+ else {
42
+ console.error(chalk_1.default.red('\n❌ Registration failed. Email may already be in use.\n'));
43
+ process.exit(1);
44
+ }
45
+ }
46
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":";;;;;AAKA,kCA4CC;AAhDD,2CAAgD;AAChD,0CAA0D;AAC1D,kDAA0B;AAEnB,KAAK,UAAU,WAAW,CAAC,OAA8C;IAC9E,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1B,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAExD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,MAAM,IAAA,mBAAW,EAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,MAAM,IAAA,mBAAW,EAAC,+BAA+B,CAAC,CAAC;QAE9D,uBAAuB;QACvB,MAAM,eAAe,GAAG,MAAM,IAAA,mBAAW,EAAC,oBAAoB,CAAC,CAAC;QAEhE,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAY,EAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAElE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Command } from 'commander';
2
+ interface TriggerOptions {
3
+ deploymentId: string;
4
+ projectName: string;
5
+ s3Key?: string;
6
+ debug?: boolean;
7
+ }
8
+ export declare function runTrigger(deploymentId: string, options: TriggerOptions): Promise<void>;
9
+ export declare const triggerCommand: Command;
10
+ export {};
11
+ //# sourceMappingURL=trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/commands/trigger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,UAAU,cAAc;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,iBA8C7E;AAED,eAAO,MAAM,cAAc,SAMN,CAAC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.triggerCommand = void 0;
4
+ exports.runTrigger = runTrigger;
5
+ const commander_1 = require("commander");
6
+ const debug_1 = require("../utils/debug");
7
+ const runtime_1 = require("../config/runtime");
8
+ async function runTrigger(deploymentId, options) {
9
+ try {
10
+ console.log(`🚀 Manually triggering deployment execution for: ${deploymentId}`);
11
+ const CONTROL_PLANE_URL = (0, runtime_1.getControlPlaneUrl)();
12
+ // Note: This is a development/internal command that requires control plane access
13
+ console.log('⚠️ This is an internal development command');
14
+ console.log(' For production use: dispatch deploy (which handles execution automatically)');
15
+ const payload = {
16
+ deployment_id: deploymentId,
17
+ project_name: options.projectName,
18
+ s3_key: options.s3Key || `artifacts/${options.projectName}/${deploymentId}.zip`
19
+ };
20
+ (0, debug_1.debugLog)('Triggering deployment with payload:', JSON.stringify(payload, null, 2));
21
+ // For production CLI, all deployment execution is handled automatically by the control plane
22
+ // This command is mainly for development/testing scenarios
23
+ const response = await fetch(`${CONTROL_PLANE_URL}/internal/execute-deployment`, {
24
+ method: 'POST',
25
+ headers: {
26
+ 'Content-Type': 'application/json'
27
+ },
28
+ body: JSON.stringify(payload)
29
+ });
30
+ if (!response.ok) {
31
+ const errorBody = await response.text();
32
+ throw new Error(`HTTP ${response.status}: ${errorBody}`);
33
+ }
34
+ const result = await response.json();
35
+ console.log('✅ Deployment execution triggered successfully!');
36
+ (0, debug_1.debugLog)('Response:', JSON.stringify(result, null, 2));
37
+ console.log(`\n📊 Now watch your deployment progress with:`);
38
+ console.log(` dispatch poll ${deploymentId}`);
39
+ }
40
+ catch (error) {
41
+ console.error('❌ Failed to trigger deployment:', error);
42
+ process.exit(1);
43
+ }
44
+ }
45
+ exports.triggerCommand = new commander_1.Command('trigger')
46
+ .description('Manually trigger deployment execution (for testing)')
47
+ .argument('<deployment-id>', 'Deployment ID to trigger')
48
+ .requiredOption('-p, --project-name <name>', 'Project name')
49
+ .option('-s, --s3-key <key>', 'S3 artifact key (auto-generated if not provided)')
50
+ .option('--debug', 'Enable debug logging')
51
+ .action(runTrigger);
52
+ //# sourceMappingURL=trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/commands/trigger.ts"],"names":[],"mappings":";;;AAWA,gCA8CC;AAzDD,yCAAoC;AACpC,0CAA0C;AAC1C,+CAAuD;AAShD,KAAK,UAAU,UAAU,CAAC,YAAoB,EAAE,OAAuB;IAC5E,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,oDAAoD,YAAY,EAAE,CAAC,CAAC;QAIhF,MAAM,iBAAiB,GAAG,IAAA,4BAAkB,GAAE,CAAC;QAE/C,kFAAkF;QAClF,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;QAE9F,MAAM,OAAO,GAAG;YACd,aAAa,EAAE,YAAY;YAC3B,YAAY,EAAE,OAAO,CAAC,WAAW;YACjC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,aAAa,OAAO,CAAC,WAAW,IAAI,YAAY,MAAM;SAChF,CAAC;QAEF,IAAA,gBAAQ,EAAC,qCAAqC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAElF,6FAA6F;QAC7F,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,iBAAiB,8BAA8B,EAAE;YAC/E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,IAAA,gBAAQ,EAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,oBAAoB,YAAY,EAAE,CAAC,CAAC;IAElD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAEY,QAAA,cAAc,GAAG,IAAI,mBAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,qDAAqD,CAAC;KAClE,QAAQ,CAAC,iBAAiB,EAAE,0BAA0B,CAAC;KACvD,cAAc,CAAC,2BAA2B,EAAE,cAAc,CAAC;KAC3D,MAAM,CAAC,oBAAoB,EAAE,kDAAkD,CAAC;KAChF,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;KACzC,MAAM,CAAC,UAAU,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Runtime configuration for CLI
3
+ * This gets configuration at runtime instead of using hardcoded .env files
4
+ */
5
+ export interface RuntimeConfig {
6
+ controlPlaneUrl: string;
7
+ isProduction: boolean;
8
+ }
9
+ /**
10
+ * Get runtime configuration
11
+ * Uses environment variables or defaults to production API
12
+ */
13
+ export declare function getRuntimeConfig(): RuntimeConfig;
14
+ /**
15
+ * Get control plane URL
16
+ */
17
+ export declare function getControlPlaneUrl(): string;
18
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAchD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ /**
3
+ * Runtime configuration for CLI
4
+ * This gets configuration at runtime instead of using hardcoded .env files
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getRuntimeConfig = getRuntimeConfig;
8
+ exports.getControlPlaneUrl = getControlPlaneUrl;
9
+ /**
10
+ * Get runtime configuration
11
+ * Uses environment variables or defaults to production API
12
+ */
13
+ function getRuntimeConfig() {
14
+ // Allow override via environment variable (for development)
15
+ const envUrl = process.env.DISPATCH_API_URL;
16
+ // Default to production API
17
+ const controlPlaneUrl = envUrl || 'https://api.usedp.xyz/';
18
+ // Detect if running against production
19
+ const isProduction = !envUrl || controlPlaneUrl.includes('api.usedp.xyz');
20
+ return {
21
+ controlPlaneUrl: controlPlaneUrl.replace(/\/$/, ''),
22
+ isProduction
23
+ };
24
+ }
25
+ /**
26
+ * Get control plane URL
27
+ */
28
+ function getControlPlaneUrl() {
29
+ const config = getRuntimeConfig();
30
+ return config.controlPlaneUrl;
31
+ }
32
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/config/runtime.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAWH,4CAcC;AAKD,gDAGC;AA1BD;;;GAGG;AACH,SAAgB,gBAAgB;IAC9B,4DAA4D;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAE5C,4BAA4B;IAC5B,MAAM,eAAe,GAAG,MAAM,IAAI,wBAAwB,CAAC;IAE3D,uCAAuC;IACvC,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE1E,OAAO;QACL,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACnD,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB;IAChC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,OAAO,MAAM,CAAC,eAAe,CAAC;AAChC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare function loginWithAccessCode(accessCode: string): Promise<boolean>;
2
+ export declare function getValidToken(): Promise<string | null>;
3
+ interface VerifyResponse {
4
+ authenticated: boolean;
5
+ user: {
6
+ id: string;
7
+ email?: string;
8
+ tier?: string;
9
+ is_active: boolean;
10
+ };
11
+ }
12
+ /**
13
+ * Verify authentication with control plane
14
+ * This validates the token and ensures the user account is valid and active
15
+ */
16
+ export declare function verifyAuthentication(): Promise<VerifyResponse | null>;
17
+ export {};
18
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"AAiBA,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgD9E;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmB5D;AAED,UAAU,cAAc;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAsD3E"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loginWithAccessCode = loginWithAccessCode;
4
+ exports.getValidToken = getValidToken;
5
+ exports.verifyAuthentication = verifyAuthentication;
6
+ const credentials_1 = require("../utils/credentials");
7
+ const debug_1 = require("../utils/debug");
8
+ const runtime_1 = require("../config/runtime");
9
+ const getControlPlane = () => (0, runtime_1.getControlPlaneUrl)();
10
+ async function loginWithAccessCode(accessCode) {
11
+ try {
12
+ console.log('🔍 Verifying access code with control plane...');
13
+ (0, debug_1.debugLog)(`Control Plane URL: ${getControlPlane()}`);
14
+ const response = await fetch(`${getControlPlane()}/auth/login`, {
15
+ method: 'POST',
16
+ headers: {
17
+ 'Content-Type': 'application/json',
18
+ },
19
+ body: JSON.stringify({
20
+ access_code: accessCode,
21
+ }),
22
+ });
23
+ if (!response.ok) {
24
+ const errorData = await response.json().catch(() => ({}));
25
+ console.error('❌ Login failed:', errorData.error || response.statusText);
26
+ if (errorData.details) {
27
+ console.error(' Details:', errorData.details);
28
+ }
29
+ if (errorData.hint) {
30
+ console.error(' Hint:', errorData.hint);
31
+ }
32
+ console.error(' Status:', response.status);
33
+ return false;
34
+ }
35
+ const data = await response.json();
36
+ (0, debug_1.debugLog)('Access code verified, saving credentials...');
37
+ // Save credentials
38
+ (0, credentials_1.saveCredentials)({
39
+ accessToken: data.access_token,
40
+ refreshToken: data.refresh_token,
41
+ expiresAt: Date.now() + (data.expires_in * 1000),
42
+ user: {
43
+ id: data.user.id,
44
+ email: data.user.email,
45
+ tier: data.user.tier,
46
+ },
47
+ });
48
+ return true;
49
+ }
50
+ catch (error) {
51
+ console.error('❌ Error during login:', error);
52
+ return false;
53
+ }
54
+ }
55
+ async function getValidToken() {
56
+ const creds = (0, credentials_1.getCredentials)();
57
+ if (!creds) {
58
+ console.error('❌ Not logged in. Please run: dispatch login');
59
+ return null;
60
+ }
61
+ // For now, we'll use simple token expiration without refresh
62
+ // The access code model means users just re-login when token expires
63
+ const isExpired = creds.expiresAt < Date.now();
64
+ if (isExpired) {
65
+ console.error('❌ Session expired. Please login again: dispatch login');
66
+ (0, credentials_1.clearCredentials)();
67
+ return null;
68
+ }
69
+ return creds.accessToken;
70
+ }
71
+ /**
72
+ * Verify authentication with control plane
73
+ * This validates the token and ensures the user account is valid and active
74
+ */
75
+ async function verifyAuthentication() {
76
+ const token = await getValidToken();
77
+ if (!token) {
78
+ return null;
79
+ }
80
+ try {
81
+ const response = await fetch(`${getControlPlane()}/auth/verify`, {
82
+ method: 'GET',
83
+ headers: {
84
+ 'Authorization': `Bearer ${token}`,
85
+ 'Content-Type': 'application/json',
86
+ },
87
+ });
88
+ if (!response.ok) {
89
+ const errorData = await response.json().catch(() => ({}));
90
+ if (response.status === 401) {
91
+ console.error('❌ Session invalid or expired. Please login again: dispatch login');
92
+ (0, credentials_1.clearCredentials)();
93
+ return null;
94
+ }
95
+ if (response.status === 403) {
96
+ console.error('❌ Account is not active. Please contact support.');
97
+ return null;
98
+ }
99
+ console.error('❌ Authentication verification failed:', errorData.error || response.statusText);
100
+ return null;
101
+ }
102
+ const data = await response.json();
103
+ // Update local credentials with latest user info
104
+ const creds = (0, credentials_1.getCredentials)();
105
+ if (creds && data.user) {
106
+ (0, credentials_1.saveCredentials)({
107
+ ...creds,
108
+ user: {
109
+ id: data.user.id,
110
+ email: data.user.email,
111
+ tier: data.user.tier,
112
+ },
113
+ });
114
+ }
115
+ return data;
116
+ }
117
+ catch (error) {
118
+ console.error('❌ Error verifying authentication:', error);
119
+ return null;
120
+ }
121
+ }
122
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/services/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { BuildArtifact } from '../types/deployment';
2
+ export declare function buildArtifact(projectPath: string): Promise<BuildArtifact>;
3
+ export declare function cleanBuildArtifacts(projectRoot: string): Promise<void>;
4
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/services/builder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAYpD,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA2C/E;AAED,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5E"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.buildArtifact = buildArtifact;
37
+ exports.cleanBuildArtifacts = cleanBuildArtifacts;
38
+ const path = __importStar(require("path"));
39
+ const child_process_1 = require("child_process");
40
+ /**
41
+ * LEGACY/DEVELOPMENT SERVICE
42
+ * This service is for local development only.
43
+ * Production CLI uses cloud builds via control plane - no local building required.
44
+ */
45
+ // Build script location - only used for development
46
+ const BUILD_SCRIPT = process.env.DISPATCH_BUILD_SCRIPT ||
47
+ path.join(__dirname, '..', '..', '..', 'dispatch-build-system', 'scripts', 'auto_build.py');
48
+ async function buildArtifact(projectPath) {
49
+ console.log(`Building artifact...`);
50
+ return new Promise((resolve, reject) => {
51
+ const pythonProcess = (0, child_process_1.spawn)('python', [
52
+ BUILD_SCRIPT,
53
+ '--project-root', path.resolve(projectPath)
54
+ ]);
55
+ let stdout = '';
56
+ pythonProcess.stdout.on('data', (data) => {
57
+ stdout += data.toString();
58
+ });
59
+ pythonProcess.stderr.on('data', (data) => {
60
+ // Pass build logs to stderr so user sees them but they don't corrupt stdout capture
61
+ process.stderr.write(data);
62
+ });
63
+ pythonProcess.on('close', (code) => {
64
+ if (code !== 0) {
65
+ reject(new Error(`Build failed with code ${code}`));
66
+ return;
67
+ }
68
+ try {
69
+ // Find JSON in the last line of stdout
70
+ const lines = stdout.trim().split('\n');
71
+ const lastLine = lines[lines.length - 1];
72
+ const result = JSON.parse(lastLine);
73
+ resolve({
74
+ zipPath: result.artifact_path,
75
+ size: result.artifact_size_bytes,
76
+ hash: result.hash || 'nohash'
77
+ });
78
+ }
79
+ catch (e) {
80
+ reject(new Error(`Failed to parse build output: ${e.message}\nOutput: ${stdout}`));
81
+ }
82
+ });
83
+ });
84
+ }
85
+ async function cleanBuildArtifacts(projectRoot) {
86
+ console.log('Cleaning build artifacts...');
87
+ // Implementation omitted for now
88
+ }
89
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/services/builder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,sCA2CC;AAED,kDAGC;AA9DD,2CAA6B;AAC7B,iDAAsC;AAGtC;;;;GAIG;AAEH,oDAAoD;AACpD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB;IACpD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,uBAAuB,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AAEvF,KAAK,UAAU,aAAa,CAAC,WAAmB;IACrD,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAEpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,aAAa,GAAG,IAAA,qBAAK,EAAC,QAAQ,EAAE;YAClC,YAAY;YACZ,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;SAC9C,CAAC,CAAC;QAEH,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACrC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACrC,oFAAoF;YACpF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC,CAAC;gBACpD,OAAO;YACX,CAAC;YAED,IAAI,CAAC;gBACD,uCAAuC;gBACvC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAEpC,OAAO,CAAC;oBACJ,OAAO,EAAE,MAAM,CAAC,aAAa;oBAC7B,IAAI,EAAE,MAAM,CAAC,mBAAmB;oBAChC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,QAAQ;iBAChC,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,OAAO,aAAa,MAAM,EAAE,CAAC,CAAC,CAAC;YACvF,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IAC3D,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC3C,iCAAiC;AACnC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { DeploymentRequest, DeploymentResponse, DeploymentStatus } from '../types/deployment';
2
+ export declare function authFetch(path: string, options?: RequestInit): Promise<unknown>;
3
+ /**
4
+ * Create a new deployment
5
+ *
6
+ * For cloud builds: POST /deploy without s3_key, control plane enqueues build job
7
+ */
8
+ export declare function createDeployment(request: DeploymentRequest): Promise<DeploymentResponse>;
9
+ export declare function pollDeploymentStatus(deploymentId: string): Promise<DeploymentStatus>;
10
+ /**
11
+ * Poll deployment until completion
12
+ * Cloud builds take longer (building + deploying), so increase timeout
13
+ */
14
+ export declare function waitForDeployment(deploymentId: string, maxAttempts?: number, // 4 minutes (for build + deploy)
15
+ intervalMs?: number): Promise<DeploymentStatus>;
16
+ //# sourceMappingURL=controlPlane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controlPlane.d.ts","sourceRoot":"","sources":["../../src/services/controlPlane.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAU7B,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,oBAmCtE;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CA0B7B;AAED,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAS3B;AAID;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,WAAW,GAAE,MAAY,EAAE,iCAAiC;AAC5D,UAAU,GAAE,MAAa,GACxB,OAAO,CAAC,gBAAgB,CAAC,CA6E3B"}