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.
- package/README.md +86 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +148 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/check.d.ts +15 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +107 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/delete.d.ts +6 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +107 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/deploy.d.ts +9 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +275 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/login.d.ts +4 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +34 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +15 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/logs.d.ts +6 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +129 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/poll.d.ts +10 -0
- package/dist/commands/poll.d.ts.map +1 -0
- package/dist/commands/poll.js +72 -0
- package/dist/commands/poll.js.map +1 -0
- package/dist/commands/projects.d.ts +5 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +49 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/register.d.ts +5 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +46 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/trigger.d.ts +11 -0
- package/dist/commands/trigger.d.ts.map +1 -0
- package/dist/commands/trigger.js +52 -0
- package/dist/commands/trigger.js.map +1 -0
- package/dist/config/runtime.d.ts +18 -0
- package/dist/config/runtime.d.ts.map +1 -0
- package/dist/config/runtime.js +32 -0
- package/dist/config/runtime.js.map +1 -0
- package/dist/services/auth.d.ts +18 -0
- package/dist/services/auth.d.ts.map +1 -0
- package/dist/services/auth.js +122 -0
- package/dist/services/auth.js.map +1 -0
- package/dist/services/builder.d.ts +4 -0
- package/dist/services/builder.d.ts.map +1 -0
- package/dist/services/builder.js +89 -0
- package/dist/services/builder.js.map +1 -0
- package/dist/services/controlPlane.d.ts +16 -0
- package/dist/services/controlPlane.d.ts.map +1 -0
- package/dist/services/controlPlane.js +155 -0
- package/dist/services/controlPlane.js.map +1 -0
- package/dist/services/deployer.d.ts +2 -0
- package/dist/services/deployer.d.ts.map +1 -0
- package/dist/services/deployer.js +49 -0
- package/dist/services/deployer.js.map +1 -0
- package/dist/services/project.d.ts +9 -0
- package/dist/services/project.d.ts.map +1 -0
- package/dist/services/project.js +29 -0
- package/dist/services/project.js.map +1 -0
- package/dist/services/sourceUploader.d.ts +9 -0
- package/dist/services/sourceUploader.d.ts.map +1 -0
- package/dist/services/sourceUploader.js +250 -0
- package/dist/services/sourceUploader.js.map +1 -0
- package/dist/services/uploader.d.ts +2 -0
- package/dist/services/uploader.d.ts.map +1 -0
- package/dist/services/uploader.js +59 -0
- package/dist/services/uploader.js.map +1 -0
- package/dist/types/deployment.d.ts +43 -0
- package/dist/types/deployment.d.ts.map +1 -0
- package/dist/types/deployment.js +6 -0
- package/dist/types/deployment.js.map +1 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config.d.ts +17 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +85 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/credentials.d.ts +16 -0
- package/dist/utils/credentials.d.ts.map +1 -0
- package/dist/utils/credentials.js +72 -0
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/debug.d.ts +7 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +21 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/input.d.ts +3 -0
- package/dist/utils/input.d.ts.map +1 -0
- package/dist/utils/input.js +94 -0
- package/dist/utils/input.js.map +1 -0
- package/dist/utils/loader.d.ts +22 -0
- package/dist/utils/loader.d.ts.map +1 -0
- package/dist/utils/loader.js +139 -0
- package/dist/utils/loader.js.map +1 -0
- package/dist/utils/normalizer.d.ts +10 -0
- package/dist/utils/normalizer.d.ts.map +1 -0
- package/dist/utils/normalizer.js +115 -0
- package/dist/utils/normalizer.js.map +1 -0
- package/dist/utils/safety.d.ts +18 -0
- package/dist/utils/safety.d.ts.map +1 -0
- package/dist/utils/safety.js +140 -0
- package/dist/utils/safety.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|