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,275 @@
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.runDeploy = runDeploy;
7
+ /**
8
+ * Run the deploy command
9
+ */
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const inquirer_1 = __importDefault(require("inquirer"));
12
+ const loader_1 = require("../utils/loader");
13
+ const normalizer_1 = require("../utils/normalizer");
14
+ const safety_1 = require("../utils/safety");
15
+ const config_1 = require("../utils/config");
16
+ const controlPlane_1 = require("../services/controlPlane");
17
+ const sourceUploader_1 = require("../services/sourceUploader");
18
+ const auth_1 = require("../services/auth");
19
+ const project_1 = require("../services/project");
20
+ function printSafetyResults(findings) {
21
+ const blockingIssues = findings.filter((f) => f.severity === 'block');
22
+ const warnings = findings.filter((f) => f.severity === 'warn');
23
+ const passed = findings.filter((f) => f.severity === 'pass' || (!f.severity));
24
+ console.log(chalk_1.default.bold('\n📋 Safety Check Results:\n'));
25
+ if (blockingIssues.length > 0) {
26
+ console.log(chalk_1.default.red(`[ERROR] Failed: ${blockingIssues.length} blocking issue(s)`));
27
+ for (const issue of blockingIssues) {
28
+ console.log(chalk_1.default.red(` • ${issue.method} ${issue.route}`));
29
+ console.log(` ${issue.message}`);
30
+ }
31
+ }
32
+ if (warnings.length > 0) {
33
+ console.log(chalk_1.default.yellow(`[WARN] Warnings: ${warnings.length} issue(s)`));
34
+ for (const warn of warnings) {
35
+ console.log(chalk_1.default.yellow(` • ${warn.method} ${warn.route}`));
36
+ console.log(` ${warn.message}`);
37
+ }
38
+ }
39
+ if (passed.length > 0) {
40
+ console.log(chalk_1.default.green(`[PASS] Passed: ${passed.length} check(s)`));
41
+ }
42
+ if (blockingIssues.length > 0) {
43
+ console.log(chalk_1.default.bold('\n💡 How to fix:'));
44
+ console.log(' - Declare authentication in OpenAPI specification');
45
+ console.log(' - OR explicitly mark routes as public (x-public + x-reason)');
46
+ }
47
+ }
48
+ function printSuccess(url, safetySkipped) {
49
+ if (!safetySkipped) {
50
+ console.log(chalk_1.default.green('[OK] Safety checks completed'));
51
+ }
52
+ console.log(chalk_1.default.green('[OK] Build completed'));
53
+ console.log(chalk_1.default.green('[OK] Upload completed'));
54
+ console.log(chalk_1.default.green('[OK] Deployment live\n'));
55
+ console.log('API URL:');
56
+ console.log(chalk_1.default.cyan(url));
57
+ }
58
+ async function runDeploy(options = {}) {
59
+ // Use --source parameter, or fall back to --project, or default to current directory
60
+ const projectRoot = options.source || options.project || '.';
61
+ try {
62
+ // Step 0: Verify authentication with control plane
63
+ console.log(chalk_1.default.bold('\n→ Verifying authentication...\n'));
64
+ const authResult = await (0, auth_1.verifyAuthentication)();
65
+ if (!authResult) {
66
+ console.log(chalk_1.default.red('\n[AUTH ERROR] Authentication required to deploy\n'));
67
+ console.log(chalk_1.default.gray('Please login first:'));
68
+ console.log(chalk_1.default.cyan(' dispatch login\n'));
69
+ console.log(chalk_1.default.gray('Get your access code from: https://usedp.xyz/dashboard\n'));
70
+ return 1;
71
+ }
72
+ if (!authResult.user.is_active) {
73
+ console.log(chalk_1.default.red('\n[ACCOUNT ERROR] Your account is not active\n'));
74
+ console.log(chalk_1.default.gray('Please contact support for assistance.\n'));
75
+ return 1;
76
+ }
77
+ console.log(chalk_1.default.green(`[AUTH] Authenticated as ${authResult.user.email || authResult.user.id}`));
78
+ if (authResult.user.tier) {
79
+ console.log(chalk_1.default.gray(` Tier: ${authResult.user.tier}\n`));
80
+ }
81
+ else {
82
+ console.log();
83
+ }
84
+ // Step 1: Load project config
85
+ console.log(chalk_1.default.bold('→ Loading project configuration...\n'));
86
+ const config = (0, config_1.loadConfig)(projectRoot);
87
+ (0, config_1.validateConfig)(config);
88
+ // Validate architecture
89
+ const architecture = options.architecture || config.architecture;
90
+ if (architecture && architecture !== 'x86_64') {
91
+ console.log(chalk_1.default.red('\n[ARCH ERROR] Only x86_64 architecture is currently supported\n'));
92
+ console.log(chalk_1.default.gray('ARM64 support is coming soon.\n'));
93
+ return 1;
94
+ }
95
+ // Step 1.5: Interactive project selection
96
+ console.log(chalk_1.default.bold('→ Selecting project...\n'));
97
+ const projects = await (0, project_1.listProjects)();
98
+ let selectedProjectId;
99
+ let selectedProjectName;
100
+ if (projects.length === 0) {
101
+ // No existing projects - create new one
102
+ console.log(chalk_1.default.gray('No existing projects found.\n'));
103
+ const { projectName } = await inquirer_1.default.prompt([
104
+ {
105
+ type: 'input',
106
+ name: 'projectName',
107
+ message: 'Enter project name:',
108
+ default: config.projectName,
109
+ validate: (input) => {
110
+ if (!input || !input.trim()) {
111
+ return 'Project name cannot be empty';
112
+ }
113
+ return true;
114
+ }
115
+ }
116
+ ]);
117
+ console.log(chalk_1.default.gray(`\nCreating new project "${projectName}"...\n`));
118
+ const newProject = await (0, project_1.createProject)(projectName);
119
+ selectedProjectId = newProject.id;
120
+ selectedProjectName = projectName;
121
+ console.log(chalk_1.default.green(`[OK] Project created\n`));
122
+ }
123
+ else {
124
+ // User has existing projects - show selection
125
+ const choices = [
126
+ ...projects.map(p => ({
127
+ name: `${p.name} (update existing)`,
128
+ value: { type: 'existing', id: p.id, name: p.name }
129
+ })),
130
+ {
131
+ name: chalk_1.default.green('+ Create new project'),
132
+ value: { type: 'new' }
133
+ }
134
+ ];
135
+ const { selection } = await inquirer_1.default.prompt([
136
+ {
137
+ type: 'list',
138
+ name: 'selection',
139
+ message: 'Select a project:',
140
+ choices
141
+ }
142
+ ]);
143
+ if (selection.type === 'existing') {
144
+ selectedProjectId = selection.id;
145
+ selectedProjectName = selection.name;
146
+ console.log(chalk_1.default.gray(`\nUpdating project "${selectedProjectName}"\n`));
147
+ }
148
+ else {
149
+ // Creating new project
150
+ const { projectName } = await inquirer_1.default.prompt([
151
+ {
152
+ type: 'input',
153
+ name: 'projectName',
154
+ message: 'Enter new project name:',
155
+ default: config.projectName,
156
+ validate: (input) => {
157
+ if (!input || !input.trim()) {
158
+ return 'Project name cannot be empty';
159
+ }
160
+ return true;
161
+ }
162
+ }
163
+ ]);
164
+ console.log(chalk_1.default.gray(`\nCreating new project "${projectName}"...\n`));
165
+ const newProject = await (0, project_1.createProject)(projectName);
166
+ selectedProjectId = newProject.id;
167
+ selectedProjectName = projectName;
168
+ console.log(chalk_1.default.green(`[OK] Project created\n`));
169
+ }
170
+ }
171
+ console.log(`Project: ${selectedProjectName}`);
172
+ // Step 2: Safety Checks
173
+ console.log(chalk_1.default.bold('→ Running safety checks...\n'));
174
+ let spec;
175
+ let findings = [];
176
+ let safetySkipped = false;
177
+ try {
178
+ spec = (0, loader_1.loadOpenAPISpec)(projectRoot);
179
+ const operations = (0, normalizer_1.normalizeOpenAPISpec)(spec);
180
+ findings = (0, safety_1.evaluateOperations)(operations);
181
+ // Always print safety results
182
+ printSafetyResults(findings);
183
+ const safe = (0, safety_1.isDeploymentSafe)(findings);
184
+ if (!safe) {
185
+ console.log(chalk_1.default.red('\n[SECURITY ERROR] Deployment blocked due to security issues\n'));
186
+ console.log(chalk_1.default.gray('Fix the security issues above or remove openapi.yaml to skip safety checks.\n'));
187
+ return 1;
188
+ }
189
+ }
190
+ catch (e) {
191
+ if (e.message.includes('No OpenAPI specification found')) {
192
+ console.log(chalk_1.default.yellow('[WARN] No OpenAPI spec found. Skipping safety checks.'));
193
+ safetySkipped = true;
194
+ spec = {};
195
+ }
196
+ else {
197
+ throw e;
198
+ }
199
+ }
200
+ console.log();
201
+ if (options.dryRun) {
202
+ console.log(chalk_1.default.blue('ℹ Dry run mode - stopping before deployment'));
203
+ return 0;
204
+ }
205
+ // Step 3: Upload Source Code (Cloud Build)
206
+ console.log(chalk_1.default.bold('→ Uploading source code...\n'));
207
+ // Create deployment first to get upload URL
208
+ const deployment = await (0, controlPlane_1.createDeployment)({
209
+ projectId: selectedProjectId,
210
+ projectName: selectedProjectName,
211
+ runtime: config.runtime,
212
+ openApiSpec: spec,
213
+ safetyFindings: findings,
214
+ handler: config.handler,
215
+ architecture: options.architecture || config.architecture,
216
+ });
217
+ console.log(chalk_1.default.green(`[OK] Deployment created: ${deployment.deploymentId}\n`));
218
+ // Upload source code to presigned URL
219
+ if (deployment.uploadUrl) {
220
+ const sourceZip = await (0, sourceUploader_1.uploadSourceCode)(projectRoot, selectedProjectName, deployment.deploymentId, authResult.user.tier);
221
+ // Upload to S3 via presigned URL
222
+ const uploadResponse = await fetch(deployment.uploadUrl, {
223
+ method: 'PUT',
224
+ body: sourceZip,
225
+ headers: {
226
+ 'Content-Type': 'application/zip',
227
+ },
228
+ });
229
+ if (!uploadResponse.ok) {
230
+ throw new Error(`Failed to upload source code: ${uploadResponse.statusText}`);
231
+ }
232
+ console.log(chalk_1.default.green('[OK] Source code uploaded\n'));
233
+ }
234
+ console.log(chalk_1.default.bold('→ Build queued (cloud build in progress)...\n'));
235
+ // Step 7: Poll for completion
236
+ console.log(chalk_1.default.bold('→ Waiting for deployment...\n'));
237
+ const finalStatus = await (0, controlPlane_1.waitForDeployment)(deployment.deploymentId);
238
+ // Step 8: Finalize
239
+ console.log();
240
+ if (finalStatus.status === 'live' && finalStatus.url) {
241
+ printSuccess(finalStatus.url, safetySkipped);
242
+ return 0;
243
+ }
244
+ else if (finalStatus.status === 'blocked') {
245
+ printSafetyResults(finalStatus.findings || findings);
246
+ return 1;
247
+ }
248
+ else if (finalStatus.status === 'failed') {
249
+ console.log(chalk_1.default.red('[DEPLOY ERROR] Deployment failed'));
250
+ return 1;
251
+ }
252
+ else {
253
+ console.log(chalk_1.default.red(`[STATUS ERROR] Unexpected status: ${finalStatus.status}`));
254
+ return 1;
255
+ }
256
+ }
257
+ catch (error) {
258
+ console.log();
259
+ console.log(chalk_1.default.red('[ERROR] Deployment failed\n'));
260
+ if (error.message.includes('No OpenAPI specification found')) {
261
+ console.log(chalk_1.default.red('Error: No OpenAPI spec found'));
262
+ }
263
+ else {
264
+ console.log(chalk_1.default.yellow('Error details:'));
265
+ console.log(error.message);
266
+ // Show stack trace in debug mode
267
+ if (process.env.DEBUG) {
268
+ console.log('\nStack trace:');
269
+ console.log(error.stack);
270
+ }
271
+ }
272
+ return 1;
273
+ }
274
+ }
275
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function runLogin(options: {
2
+ code?: string;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAKA,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,iBA4BxD"}
@@ -0,0 +1,34 @@
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.runLogin = runLogin;
7
+ const auth_1 = require("../services/auth");
8
+ const input_1 = require("../utils/input");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ async function runLogin(options) {
11
+ let accessCode = options.code;
12
+ console.log(chalk_1.default.blue('\n🔐 Dispatch Login\n'));
13
+ console.log(chalk_1.default.gray('Get your access code from: https://usedp.xyz/dashboard\n'));
14
+ if (!accessCode) {
15
+ accessCode = await (0, input_1.askQuestion)('Access Code: ');
16
+ }
17
+ if (!accessCode) {
18
+ console.error(chalk_1.default.red('\n❌ Access code is required.'));
19
+ console.log(chalk_1.default.gray('Visit https://usedp.xyz/dashboard to generate your access code.'));
20
+ process.exit(1);
21
+ }
22
+ console.log(chalk_1.default.gray('\n⏳ Verifying access code...'));
23
+ const success = await (0, auth_1.loginWithAccessCode)(accessCode.trim());
24
+ if (success) {
25
+ console.log(chalk_1.default.green('✅ Successfully logged in!'));
26
+ console.log(chalk_1.default.gray('Credentials saved to ~/.dispatch/credentials.json\n'));
27
+ }
28
+ else {
29
+ console.error(chalk_1.default.red('\n❌ Login failed. Invalid or expired access code.\n'));
30
+ console.log(chalk_1.default.gray('Visit https://usedp.xyz/dashboard to generate a new access code.'));
31
+ process.exit(1);
32
+ }
33
+ }
34
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":";;;;;AAKA,4BA4BC;AAhCD,2CAAuD;AACvD,0CAA6C;AAC7C,kDAA0B;AAEnB,KAAK,UAAU,QAAQ,CAAC,OAA0B;IACvD,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAE9B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;IAEpF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,MAAM,IAAA,mBAAW,EAAC,eAAe,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,MAAM,IAAA,0BAAmB,EAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAE7D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC,CAAC;QAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runLogout(): Promise<void>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,kBAO9B"}
@@ -0,0 +1,15 @@
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.runLogout = runLogout;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const credentials_1 = require("../utils/credentials");
9
+ async function runLogout() {
10
+ console.log(chalk_1.default.blue('\n👋 Dispatch Logout\n'));
11
+ (0, credentials_1.clearCredentials)();
12
+ console.log(chalk_1.default.green('✅ Successfully logged out!'));
13
+ console.log(chalk_1.default.gray('Your credentials have been removed.\n'));
14
+ }
15
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":";;;;;AAGA,8BAOC;AAVD,kDAA0B;AAC1B,sDAAwD;AAEjD,KAAK,UAAU,SAAS;IAC7B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAElD,IAAA,8BAAgB,GAAE,CAAC;IAEnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface LogsOptions {
2
+ project: string;
3
+ }
4
+ export declare function runLogs(options: LogsOptions): Promise<number>;
5
+ export {};
6
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAQA,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAiInE"}
@@ -0,0 +1,129 @@
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.runLogs = runLogs;
7
+ const path_1 = __importDefault(require("path"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const js_yaml_1 = __importDefault(require("js-yaml"));
10
+ const inquirer_1 = __importDefault(require("inquirer"));
11
+ const auth_1 = require("../services/auth");
12
+ const project_1 = require("../services/project");
13
+ const controlPlane_1 = require("../services/controlPlane");
14
+ async function runLogs(options) {
15
+ try {
16
+ console.log('→ Verifying authentication...');
17
+ console.log();
18
+ // Verify authentication
19
+ const userInfo = await (0, auth_1.verifyAuthentication)();
20
+ if (!userInfo) {
21
+ console.error('❌ Not authenticated. Please run "dispatch login" first.');
22
+ return 1;
23
+ }
24
+ console.log(`✓ Authenticated as ${userInfo.user.email}`);
25
+ console.log(` Tier: ${userInfo.user.tier}`);
26
+ console.log();
27
+ // Try to load project configuration (optional)
28
+ const projectRoot = path_1.default.resolve(options.project);
29
+ const configPath = path_1.default.join(projectRoot, 'dispatch.yaml');
30
+ let config = null;
31
+ if (fs_1.default.existsSync(configPath)) {
32
+ try {
33
+ const configContent = fs_1.default.readFileSync(configPath, 'utf8');
34
+ config = js_yaml_1.default.load(configContent);
35
+ console.log('→ Current directory project detected');
36
+ console.log(`Current project: ${config.projectName}`);
37
+ console.log();
38
+ }
39
+ catch (error) {
40
+ console.log('→ Found dispatch.yaml but could not parse it');
41
+ console.log();
42
+ }
43
+ }
44
+ else {
45
+ console.log('→ No dispatch.yaml found in current directory');
46
+ console.log();
47
+ }
48
+ // Get user's projects
49
+ console.log('→ Selecting project...');
50
+ console.log();
51
+ const projects = await (0, project_1.listProjects)();
52
+ if (projects.length === 0) {
53
+ console.error('[ERROR] No projects found. Deploy a project first.');
54
+ return 1;
55
+ }
56
+ // Check if current folder has a project that matches
57
+ const currentProjectName = config?.projectName;
58
+ // Create choices with current project highlighted
59
+ const choices = projects.map(p => {
60
+ const isCurrentProject = currentProjectName && p.name === currentProjectName;
61
+ return {
62
+ name: isCurrentProject ? `${p.name} (current project)` : p.name,
63
+ value: p,
64
+ short: p.name
65
+ };
66
+ });
67
+ // Always show selection, even if there's only one project
68
+ const { project: selectedProject } = await inquirer_1.default.prompt([
69
+ {
70
+ type: 'list',
71
+ name: 'project',
72
+ message: 'Select a project to view logs:',
73
+ choices: choices,
74
+ pageSize: Math.min(10, projects.length)
75
+ }
76
+ ]);
77
+ console.log();
78
+ console.log(`Project: ${selectedProject.name}`);
79
+ // Get deployments for this project
80
+ console.log('→ Fetching deployments...');
81
+ const deployments = await (0, controlPlane_1.authFetch)(`/deployments/${selectedProject.id}`);
82
+ if (!deployments || !deployments.deployments || deployments.deployments.length === 0) {
83
+ console.error('[ERROR] No deployments found for this project.');
84
+ return 1;
85
+ }
86
+ // Show recent deployments
87
+ const recentDeployments = deployments.deployments
88
+ .slice(0, 10)
89
+ .map((d) => ({
90
+ name: `${d.id.slice(0, 8)} - ${d.status} (${new Date(d.created_at).toLocaleString()})`,
91
+ value: d,
92
+ short: d.id.slice(0, 8)
93
+ }));
94
+ const { deployment } = await inquirer_1.default.prompt([
95
+ {
96
+ type: 'list',
97
+ name: 'deployment',
98
+ message: 'Select a deployment to view logs:',
99
+ choices: recentDeployments,
100
+ pageSize: Math.min(10, recentDeployments.length)
101
+ }
102
+ ]);
103
+ console.log();
104
+ console.log(`Deployment: ${deployment.id}`);
105
+ console.log(`Status: ${deployment.status}`);
106
+ console.log(`Created: ${new Date(deployment.created_at).toLocaleString()}`);
107
+ console.log();
108
+ // Show build logs
109
+ if (deployment.build_logs) {
110
+ console.log('[BUILD LOGS]:');
111
+ console.log('─'.repeat(80));
112
+ console.log(deployment.build_logs);
113
+ console.log('─'.repeat(80));
114
+ }
115
+ else {
116
+ console.log('ℹ️ No build logs available for this deployment.');
117
+ console.log(' Build logs are only available for deployments made with the updated worker.');
118
+ }
119
+ return 0;
120
+ }
121
+ catch (error) {
122
+ console.error('❌ Failed to fetch logs\n');
123
+ console.error('Error details:');
124
+ console.error(error.message);
125
+ console.error();
126
+ return 1;
127
+ }
128
+ }
129
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Command } from 'commander';
2
+ interface PollOptions {
3
+ debug?: boolean;
4
+ interval?: number;
5
+ maxAttempts?: number;
6
+ }
7
+ export declare function runPoll(deploymentId: string, options: PollOptions): Promise<void>;
8
+ export declare const pollCommand: Command;
9
+ export {};
10
+ //# sourceMappingURL=poll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../../src/commands/poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,iBA2DvE;AAED,eAAO,MAAM,WAAW,SAYpB,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pollCommand = void 0;
4
+ exports.runPoll = runPoll;
5
+ const commander_1 = require("commander");
6
+ const controlPlane_1 = require("../services/controlPlane");
7
+ const debug_1 = require("../utils/debug");
8
+ async function runPoll(deploymentId, options) {
9
+ try {
10
+ console.log(`[POLL] Polling deployment status: ${deploymentId}`);
11
+ const interval = options.interval || 2000;
12
+ const maxAttempts = options.maxAttempts || 120;
13
+ let lastStatus = '';
14
+ const getStatusMessage = (status) => {
15
+ switch (status) {
16
+ case 'pending': return '[QUEUE] Queuing deployment';
17
+ case 'building': return '[BUILD] Building artifact';
18
+ case 'iam-setup': return '[IAM] Setting up IAM role';
19
+ case 'lambda-deploying': return '[DEPLOY] Deploying Lambda function';
20
+ case 'lambda-verifying': return '[VERIFY] Verifying Lambda deployment';
21
+ case 'api-setup': return '[API] Setting up API Gateway';
22
+ case 'api-verifying': return '[VERIFY] Verifying API Gateway';
23
+ case 'finalizing': return '[FINAL] Performing final checks';
24
+ case 'deploying': return '[DEPLOY] Finalizing deployment';
25
+ case 'live': return '[SUCCESS] Deployment complete';
26
+ case 'failed': return '[ERROR] Deployment failed';
27
+ default: return `[STATUS] ${status}`;
28
+ }
29
+ };
30
+ for (let i = 0; i < maxAttempts; i++) {
31
+ const status = await (0, controlPlane_1.pollDeploymentStatus)(deploymentId);
32
+ (0, debug_1.debugLog)(`Poll attempt ${i + 1}: status="${status.status}", url="${status.url}"`);
33
+ // Show status change messages
34
+ if (status.status !== lastStatus) {
35
+ const message = getStatusMessage(status.status);
36
+ console.log(message);
37
+ lastStatus = status.status;
38
+ }
39
+ if (status.status === 'live') {
40
+ console.log(`\n[SUCCESS] Deployment complete!`);
41
+ if (status.url) {
42
+ console.log(`[URL] Live URL: ${status.url}`);
43
+ }
44
+ return;
45
+ }
46
+ if (status.status === 'failed') {
47
+ console.log(`\n💥 Deployment failed`);
48
+ process.exit(1);
49
+ }
50
+ await new Promise(resolve => setTimeout(resolve, interval));
51
+ }
52
+ console.log(`\n⏱️ Polling timed out after ${maxAttempts} attempts`);
53
+ }
54
+ catch (error) {
55
+ console.error('❌ Failed to poll deployment:', error);
56
+ process.exit(1);
57
+ }
58
+ }
59
+ exports.pollCommand = new commander_1.Command('poll')
60
+ .description('Poll deployment status with progressive updates')
61
+ .argument('<deployment-id>', 'Deployment ID to poll')
62
+ .option('--debug', 'Enable debug logging')
63
+ .option('-i, --interval <ms>', 'Polling interval in milliseconds', '2000')
64
+ .option('-m, --max-attempts <num>', 'Maximum polling attempts', '120')
65
+ .action((deploymentId, options) => {
66
+ runPoll(deploymentId, {
67
+ ...options,
68
+ interval: parseInt(options.interval),
69
+ maxAttempts: parseInt(options.maxAttempts)
70
+ });
71
+ });
72
+ //# sourceMappingURL=poll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/commands/poll.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ interface ProjectsOptions {
2
+ }
3
+ export declare function runProjects(action: string, options?: ProjectsOptions): Promise<number>;
4
+ export {};
5
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"AAOA,UAAU,eAAe;CAExB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyChG"}