@kilnci/cli 0.1.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 (130) hide show
  1. package/bin/kiln.js +5 -0
  2. package/dist/base-command.d.ts +21 -0
  3. package/dist/base-command.d.ts.map +1 -0
  4. package/dist/base-command.js +30 -0
  5. package/dist/base-command.js.map +1 -0
  6. package/dist/client.d.ts +166 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +321 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commands/artifacts.d.ts +17 -0
  11. package/dist/commands/artifacts.d.ts.map +1 -0
  12. package/dist/commands/artifacts.js +96 -0
  13. package/dist/commands/artifacts.js.map +1 -0
  14. package/dist/commands/build.d.ts +15 -0
  15. package/dist/commands/build.d.ts.map +1 -0
  16. package/dist/commands/build.js +79 -0
  17. package/dist/commands/build.js.map +1 -0
  18. package/dist/commands/cancel.d.ts +10 -0
  19. package/dist/commands/cancel.d.ts.map +1 -0
  20. package/dist/commands/cancel.js +27 -0
  21. package/dist/commands/cancel.js.map +1 -0
  22. package/dist/commands/login.d.ts +18 -0
  23. package/dist/commands/login.d.ts.map +1 -0
  24. package/dist/commands/login.js +188 -0
  25. package/dist/commands/login.js.map +1 -0
  26. package/dist/commands/logout.d.ts +7 -0
  27. package/dist/commands/logout.d.ts.map +1 -0
  28. package/dist/commands/logout.js +17 -0
  29. package/dist/commands/logout.js.map +1 -0
  30. package/dist/commands/logs.d.ts +18 -0
  31. package/dist/commands/logs.d.ts.map +1 -0
  32. package/dist/commands/logs.js +139 -0
  33. package/dist/commands/logs.js.map +1 -0
  34. package/dist/commands/org/create.d.ts +13 -0
  35. package/dist/commands/org/create.d.ts.map +1 -0
  36. package/dist/commands/org/create.js +39 -0
  37. package/dist/commands/org/create.js.map +1 -0
  38. package/dist/commands/org/delete.d.ts +13 -0
  39. package/dist/commands/org/delete.d.ts.map +1 -0
  40. package/dist/commands/org/delete.js +44 -0
  41. package/dist/commands/org/delete.js.map +1 -0
  42. package/dist/commands/org/gitlab/remove.d.ts +13 -0
  43. package/dist/commands/org/gitlab/remove.d.ts.map +1 -0
  44. package/dist/commands/org/gitlab/remove.js +51 -0
  45. package/dist/commands/org/gitlab/remove.js.map +1 -0
  46. package/dist/commands/org/gitlab/setup.d.ts +17 -0
  47. package/dist/commands/org/gitlab/setup.d.ts.map +1 -0
  48. package/dist/commands/org/gitlab/setup.js +83 -0
  49. package/dist/commands/org/gitlab/setup.js.map +1 -0
  50. package/dist/commands/org/gitlab/show.d.ts +10 -0
  51. package/dist/commands/org/gitlab/show.d.ts.map +1 -0
  52. package/dist/commands/org/gitlab/show.js +54 -0
  53. package/dist/commands/org/gitlab/show.js.map +1 -0
  54. package/dist/commands/org/gitlab/sync.d.ts +10 -0
  55. package/dist/commands/org/gitlab/sync.d.ts.map +1 -0
  56. package/dist/commands/org/gitlab/sync.js +38 -0
  57. package/dist/commands/org/gitlab/sync.js.map +1 -0
  58. package/dist/commands/org/index.d.ts +11 -0
  59. package/dist/commands/org/index.d.ts.map +1 -0
  60. package/dist/commands/org/index.js +46 -0
  61. package/dist/commands/org/index.js.map +1 -0
  62. package/dist/commands/org/repos/disable.d.ts +11 -0
  63. package/dist/commands/org/repos/disable.d.ts.map +1 -0
  64. package/dist/commands/org/repos/disable.js +32 -0
  65. package/dist/commands/org/repos/disable.js.map +1 -0
  66. package/dist/commands/org/repos/enable.d.ts +11 -0
  67. package/dist/commands/org/repos/enable.d.ts.map +1 -0
  68. package/dist/commands/org/repos/enable.js +32 -0
  69. package/dist/commands/org/repos/enable.js.map +1 -0
  70. package/dist/commands/org/repos.d.ts +14 -0
  71. package/dist/commands/org/repos.d.ts.map +1 -0
  72. package/dist/commands/org/repos.js +54 -0
  73. package/dist/commands/org/repos.js.map +1 -0
  74. package/dist/commands/status.d.ts +17 -0
  75. package/dist/commands/status.d.ts.map +1 -0
  76. package/dist/commands/status.js +73 -0
  77. package/dist/commands/status.js.map +1 -0
  78. package/dist/commands/workers/create.d.ts +15 -0
  79. package/dist/commands/workers/create.d.ts.map +1 -0
  80. package/dist/commands/workers/create.js +74 -0
  81. package/dist/commands/workers/create.js.map +1 -0
  82. package/dist/commands/workers/delete.d.ts +13 -0
  83. package/dist/commands/workers/delete.d.ts.map +1 -0
  84. package/dist/commands/workers/delete.js +40 -0
  85. package/dist/commands/workers/delete.js.map +1 -0
  86. package/dist/commands/workers/index.d.ts +10 -0
  87. package/dist/commands/workers/index.d.ts.map +1 -0
  88. package/dist/commands/workers/index.js +42 -0
  89. package/dist/commands/workers/index.js.map +1 -0
  90. package/dist/commands/workers/logs.d.ts +11 -0
  91. package/dist/commands/workers/logs.d.ts.map +1 -0
  92. package/dist/commands/workers/logs.js +54 -0
  93. package/dist/commands/workers/logs.js.map +1 -0
  94. package/dist/commands/workers/revoke.d.ts +10 -0
  95. package/dist/commands/workers/revoke.d.ts.map +1 -0
  96. package/dist/commands/workers/revoke.js +27 -0
  97. package/dist/commands/workers/revoke.js.map +1 -0
  98. package/dist/commands/workers/start.d.ts +19 -0
  99. package/dist/commands/workers/start.d.ts.map +1 -0
  100. package/dist/commands/workers/start.js +329 -0
  101. package/dist/commands/workers/start.js.map +1 -0
  102. package/dist/commands/workers/status.d.ts +7 -0
  103. package/dist/commands/workers/status.d.ts.map +1 -0
  104. package/dist/commands/workers/status.js +75 -0
  105. package/dist/commands/workers/status.js.map +1 -0
  106. package/dist/commands/workers/stop.d.ts +10 -0
  107. package/dist/commands/workers/stop.d.ts.map +1 -0
  108. package/dist/commands/workers/stop.js +79 -0
  109. package/dist/commands/workers/stop.js.map +1 -0
  110. package/dist/commands/workers/token.d.ts +13 -0
  111. package/dist/commands/workers/token.d.ts.map +1 -0
  112. package/dist/commands/workers/token.js +38 -0
  113. package/dist/commands/workers/token.js.map +1 -0
  114. package/dist/config.d.ts +38 -0
  115. package/dist/config.d.ts.map +1 -0
  116. package/dist/config.js +68 -0
  117. package/dist/config.js.map +1 -0
  118. package/dist/formatters.d.ts +42 -0
  119. package/dist/formatters.d.ts.map +1 -0
  120. package/dist/formatters.js +194 -0
  121. package/dist/formatters.js.map +1 -0
  122. package/dist/index.d.ts +4 -0
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +5 -0
  125. package/dist/index.js.map +1 -0
  126. package/dist/lib/workers-helpers.d.ts +20 -0
  127. package/dist/lib/workers-helpers.d.ts.map +1 -0
  128. package/dist/lib/workers-helpers.js +51 -0
  129. package/dist/lib/workers-helpers.js.map +1 -0
  130. package/package.json +56 -0
@@ -0,0 +1,96 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { Args, Flags } from '@oclif/core';
4
+ import { BaseCommand } from '../base-command.js';
5
+ import { formatStatus } from '../formatters.js';
6
+ export default class Artifacts extends BaseCommand {
7
+ static description = 'List or download build artifacts';
8
+ static examples = [
9
+ '<%= config.bin %> artifacts 11111111-1111-1111-1111-111111111111',
10
+ '<%= config.bin %> artifacts 11111111-1111-1111-1111-111111111111 --download',
11
+ '<%= config.bin %> artifacts 11111111-1111-1111-1111-111111111111 --download --output workspace.zip',
12
+ ];
13
+ static args = {
14
+ buildId: Args.string({
15
+ description: 'Build ID to get artifacts for',
16
+ required: true,
17
+ }),
18
+ };
19
+ static flags = {
20
+ download: Flags.boolean({
21
+ char: 'd',
22
+ description: 'Download workspace archive',
23
+ default: false,
24
+ }),
25
+ output: Flags.string({
26
+ char: 'o',
27
+ description: 'Output file path (default: build-<id>-workspace.zip)',
28
+ }),
29
+ };
30
+ async run() {
31
+ const { args, flags } = await this.parse(Artifacts);
32
+ this.requireAuth();
33
+ try {
34
+ const build = await this.client.getBuild(args.buildId);
35
+ this.log(`Build ${build.id} - Status: ${formatStatus(build.status)}\n`);
36
+ if (flags.download) {
37
+ await this.downloadWorkspace(args.buildId, flags.output);
38
+ }
39
+ else {
40
+ this.listArtifacts(build);
41
+ }
42
+ }
43
+ catch (error) {
44
+ this.handleError(error, 'get artifacts');
45
+ }
46
+ }
47
+ listArtifacts(build) {
48
+ const artifacts = build.artifacts;
49
+ if (!artifacts || (!artifacts.workspace && !artifacts.logs)) {
50
+ this.log('No artifacts available for this build.');
51
+ this.log('\nArtifacts are only stored for completed builds with artifact storage enabled.');
52
+ return;
53
+ }
54
+ this.log('Available artifacts:\n');
55
+ if (artifacts.workspace) {
56
+ this.log(` Workspace archive:`);
57
+ this.log(` Size: ${this.formatSize(artifacts.workspace.size)}`);
58
+ this.log(` Created: ${new Date(artifacts.workspace.createdAt).toLocaleString()}`);
59
+ this.log(` Download: kiln artifacts ${build.id} --download\n`);
60
+ }
61
+ if (artifacts.logs) {
62
+ this.log(` Build logs:`);
63
+ this.log(` Size: ${this.formatSize(artifacts.logs.size)}`);
64
+ this.log(` Created: ${new Date(artifacts.logs.createdAt).toLocaleString()}`);
65
+ this.log(` Download: kiln logs ${build.id} --download\n`);
66
+ }
67
+ }
68
+ async downloadWorkspace(buildId, outputPath) {
69
+ this.log('Fetching workspace download URL...');
70
+ try {
71
+ const downloadUrl = await this.client.getWorkspaceDownloadUrl(buildId);
72
+ this.log('Downloading workspace archive...');
73
+ const content = await this.client.downloadFile(downloadUrl);
74
+ const filename = outputPath || `build-${buildId.substring(0, 8)}-workspace.zip`;
75
+ const fullPath = path.resolve(filename);
76
+ fs.writeFileSync(fullPath, content);
77
+ this.log(`Workspace saved to: ${fullPath}`);
78
+ this.log(`Size: ${this.formatSize(content.length)}`);
79
+ }
80
+ catch (error) {
81
+ const message = error instanceof Error ? error.message : 'Unknown error';
82
+ if (message.includes('not available') || message.includes('404')) {
83
+ this.error('Workspace archive not available. Only successful builds have workspace archives.');
84
+ }
85
+ throw error;
86
+ }
87
+ }
88
+ formatSize(bytes) {
89
+ if (bytes < 1024)
90
+ return `${bytes} B`;
91
+ if (bytes < 1024 * 1024)
92
+ return `${(bytes / 1024).toFixed(1)} KB`;
93
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
94
+ }
95
+ }
96
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/commands/artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class Build extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ repositoryId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ branch: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ follow: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<void>;
13
+ private followLogs;
14
+ }
15
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW;IAC5C,OAAgB,WAAW,SAAoD;IAE/E,OAAgB,QAAQ,WAItB;IAEF,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;;MAUnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBnB,UAAU;CAiCzB"}
@@ -0,0 +1,79 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../base-command.js';
3
+ import { LogStreamClient } from '../client.js';
4
+ import { formatBuildDetails, formatLogLine } from '../formatters.js';
5
+ export default class Build extends BaseCommand {
6
+ static description = 'Create a new build for a registered repository';
7
+ static examples = [
8
+ '<%= config.bin %> build <repository-id>',
9
+ '<%= config.bin %> build <repository-id> --branch develop',
10
+ '<%= config.bin %> build <repository-id> --follow',
11
+ ];
12
+ static args = {
13
+ repositoryId: Args.string({
14
+ description: 'Repository ID (UUID) to build',
15
+ required: true,
16
+ }),
17
+ };
18
+ static flags = {
19
+ branch: Flags.string({
20
+ char: 'b',
21
+ description: 'Branch to build (defaults to repository default branch)',
22
+ }),
23
+ follow: Flags.boolean({
24
+ char: 'f',
25
+ description: 'Follow logs after creating build',
26
+ default: false,
27
+ }),
28
+ };
29
+ async run() {
30
+ const { args, flags } = await this.parse(Build);
31
+ this.requireAuth();
32
+ try {
33
+ const build = await this.client.createBuild({
34
+ repositoryId: args.repositoryId,
35
+ branch: flags.branch,
36
+ });
37
+ this.log(formatBuildDetails(build));
38
+ if (flags.follow) {
39
+ this.log('Following logs...\n');
40
+ await this.followLogs(build.id);
41
+ }
42
+ }
43
+ catch (error) {
44
+ this.handleError(error, 'create build');
45
+ }
46
+ }
47
+ async followLogs(buildId) {
48
+ return new Promise((resolve, reject) => {
49
+ const logClient = new LogStreamClient(this.appConfig);
50
+ logClient.connect(buildId, {
51
+ onLog: (log) => {
52
+ this.log(formatLogLine(log.timestamp, log.stream, log.line));
53
+ },
54
+ onStatus: (status) => {
55
+ this.log(`\nBuild status: ${status}`);
56
+ if (status === 'success' || status === 'failed' || status === 'cancelled') {
57
+ logClient.close();
58
+ resolve();
59
+ }
60
+ },
61
+ onError: (error) => {
62
+ this.error(`WebSocket error: ${error}`);
63
+ logClient.close();
64
+ reject(new Error(error));
65
+ },
66
+ onClose: () => {
67
+ resolve();
68
+ },
69
+ });
70
+ // Handle Ctrl+C
71
+ process.on('SIGINT', () => {
72
+ this.log('\nDisconnecting...');
73
+ logClient.close();
74
+ resolve();
75
+ });
76
+ });
77
+ }
78
+ }
79
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class Cancel extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ buildId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=cancel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,OAAgB,WAAW,SAA4B;IAEvD,OAAgB,QAAQ,WAEtB;IAEF,OAAgB,IAAI;;MAKlB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAWlC"}
@@ -0,0 +1,27 @@
1
+ import { Args } from '@oclif/core';
2
+ import chalk from 'chalk';
3
+ import { BaseCommand } from '../base-command.js';
4
+ export default class Cancel extends BaseCommand {
5
+ static description = 'Cancel a running build';
6
+ static examples = [
7
+ '<%= config.bin %> cancel 11111111-1111-1111-1111-111111111111',
8
+ ];
9
+ static args = {
10
+ buildId: Args.string({
11
+ description: 'Build ID to cancel',
12
+ required: true,
13
+ }),
14
+ };
15
+ async run() {
16
+ const { args } = await this.parse(Cancel);
17
+ this.requireAuth();
18
+ try {
19
+ await this.client.cancelBuild(args.buildId);
20
+ this.log(chalk.green(`Build ${args.buildId} has been cancelled.`));
21
+ }
22
+ catch (error) {
23
+ this.handleError(error, 'cancel build');
24
+ }
25
+ }
26
+ }
27
+ //# sourceMappingURL=cancel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW;IAC7C,MAAM,CAAU,WAAW,GAAG,wBAAwB,CAAC;IAEvD,MAAM,CAAU,QAAQ,GAAG;QACzB,+DAA+D;KAChE,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACrB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,oBAAoB;YACjC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Command } from '@oclif/core';
2
+ /**
3
+ * Normalize URL by ensuring it has a scheme and removing trailing slashes
4
+ */
5
+ export declare function normalizeUrl(url: string): string;
6
+ /**
7
+ * Generate a suggested token name based on hostname
8
+ */
9
+ export declare function generateTokenName(): string;
10
+ export default class Login extends Command {
11
+ static description: string;
12
+ static examples: string[];
13
+ static args: {
14
+ url: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAC;AAY5C;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C;AAuGD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,OAAgB,WAAW,SAA6B;IAExD,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,IAAI;;MAKlB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkElC"}
@@ -0,0 +1,188 @@
1
+ import { Command, Args } from '@oclif/core';
2
+ import { createServer } from 'http';
3
+ import { hostname } from 'os';
4
+ import open from 'open';
5
+ import { saveConfigFile, getConfigPath } from '../config.js';
6
+ /**
7
+ * Normalize URL by ensuring it has a scheme and removing trailing slashes
8
+ */
9
+ export function normalizeUrl(url) {
10
+ let normalized = url.trim();
11
+ // Add https:// if no scheme provided
12
+ if (!normalized.match(/^https?:\/\//)) {
13
+ normalized = `https://${normalized}`;
14
+ }
15
+ // Remove trailing slash
16
+ normalized = normalized.replace(/\/+$/, '');
17
+ return normalized;
18
+ }
19
+ /**
20
+ * Generate a suggested token name based on hostname
21
+ */
22
+ export function generateTokenName() {
23
+ const host = hostname().toLowerCase().replace(/\.local$/, '');
24
+ return `${host}-kiln-cli`;
25
+ }
26
+ /**
27
+ * Start a local HTTP server that listens for the callback POST request
28
+ * Returns a promise that resolves with the token or rejects on timeout
29
+ */
30
+ function startCallbackServer(port, timeoutMs) {
31
+ return new Promise((resolve, reject) => {
32
+ const server = createServer((req, res) => {
33
+ // Add CORS headers for browser requests
34
+ res.setHeader('Access-Control-Allow-Origin', '*');
35
+ res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
36
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
37
+ if (req.method === 'OPTIONS') {
38
+ res.writeHead(204);
39
+ res.end();
40
+ return;
41
+ }
42
+ if (req.method === 'POST' && req.url === '/callback') {
43
+ let body = '';
44
+ req.on('data', (chunk) => {
45
+ body += chunk.toString();
46
+ });
47
+ req.on('end', () => {
48
+ try {
49
+ const data = JSON.parse(body);
50
+ if (data.token) {
51
+ res.writeHead(200, { 'Content-Type': 'application/json' });
52
+ res.end(JSON.stringify({ success: true }));
53
+ clearTimeout(timeout);
54
+ resolve({ token: data.token, server });
55
+ }
56
+ else {
57
+ res.writeHead(400, { 'Content-Type': 'application/json' });
58
+ res.end(JSON.stringify({ error: 'Missing token' }));
59
+ }
60
+ }
61
+ catch {
62
+ res.writeHead(400, { 'Content-Type': 'application/json' });
63
+ res.end(JSON.stringify({ error: 'Invalid JSON' }));
64
+ }
65
+ });
66
+ }
67
+ else {
68
+ res.writeHead(404);
69
+ res.end();
70
+ }
71
+ });
72
+ const timeout = setTimeout(() => {
73
+ server.close();
74
+ reject(new Error('Timeout waiting for token'));
75
+ }, timeoutMs);
76
+ server.listen(port, '127.0.0.1', () => {
77
+ // Server started
78
+ });
79
+ server.on('error', (err) => {
80
+ clearTimeout(timeout);
81
+ reject(err);
82
+ });
83
+ });
84
+ }
85
+ /**
86
+ * Find an available port by letting the OS assign one
87
+ */
88
+ function findAvailablePort() {
89
+ return new Promise((resolve, reject) => {
90
+ const server = createServer();
91
+ server.listen(0, '127.0.0.1', () => {
92
+ const address = server.address();
93
+ if (address && typeof address === 'object') {
94
+ const port = address.port;
95
+ server.close(() => resolve(port));
96
+ }
97
+ else {
98
+ server.close(() => reject(new Error('Could not determine port')));
99
+ }
100
+ });
101
+ server.on('error', reject);
102
+ });
103
+ }
104
+ /**
105
+ * Verify the token by calling /api/me
106
+ */
107
+ async function verifyToken(url, token) {
108
+ const response = await fetch(`${url}/api/me`, {
109
+ headers: {
110
+ Authorization: `Bearer ${token}`,
111
+ },
112
+ });
113
+ if (!response.ok) {
114
+ throw new Error('Token verification failed');
115
+ }
116
+ return response.json();
117
+ }
118
+ export default class Login extends Command {
119
+ static description = 'Log in to a Kiln server';
120
+ static examples = [
121
+ '<%= config.bin %> login https://kiln.example.com',
122
+ '<%= config.bin %> login kiln.example.com',
123
+ ];
124
+ static args = {
125
+ url: Args.string({
126
+ description: 'Kiln server URL',
127
+ required: true,
128
+ }),
129
+ };
130
+ async run() {
131
+ const { args } = await this.parse(Login);
132
+ const url = normalizeUrl(args.url);
133
+ const tokenName = generateTokenName();
134
+ this.log(`\nConfiguring CLI for: ${url}\n`);
135
+ // Find an available port
136
+ let port;
137
+ try {
138
+ port = await findAvailablePort();
139
+ }
140
+ catch {
141
+ this.error('Could not find an available port for callback server');
142
+ }
143
+ const callbackUrl = `http://127.0.0.1:${port}/callback`;
144
+ const cliLoginUrl = `${url}/cli-login?callback=${encodeURIComponent(callbackUrl)}&name=${encodeURIComponent(tokenName)}`;
145
+ this.log('Opening browser for authentication...');
146
+ // Open browser
147
+ try {
148
+ await open(cliLoginUrl);
149
+ }
150
+ catch {
151
+ this.log(`Could not open browser automatically.`);
152
+ this.log(`Please open this URL manually: ${cliLoginUrl}`);
153
+ }
154
+ this.log('Waiting for token from Kiln UI...\n');
155
+ // Wait for callback with token (5 minute timeout)
156
+ let token;
157
+ let server;
158
+ try {
159
+ const result = await startCallbackServer(port, 5 * 60 * 1000);
160
+ token = result.token;
161
+ server = result.server;
162
+ }
163
+ catch (error) {
164
+ if (error instanceof Error && error.message === 'Timeout waiting for token') {
165
+ this.error('Timed out waiting for authentication. Please try again.');
166
+ }
167
+ throw error;
168
+ }
169
+ // Close the server
170
+ server.close();
171
+ // Verify the token
172
+ this.log('Verifying token...');
173
+ let user;
174
+ try {
175
+ user = await verifyToken(url, token);
176
+ }
177
+ catch {
178
+ this.error('Token verification failed. The token may be invalid.');
179
+ }
180
+ // Save configuration
181
+ saveConfigFile({ url, token });
182
+ const displayName = user.email || user.preferredUsername || user.name || 'unknown user';
183
+ this.log(`\n✓ Token received!`);
184
+ this.log(`✓ Logged in as: ${displayName}`);
185
+ this.log(`\nConfiguration saved to ${getConfigPath()}`);
186
+ }
187
+ }
188
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Logout extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,WAAW,SAAqD;IAEhF,OAAgB,QAAQ,WAAgC;IAE3C,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAUlC"}
@@ -0,0 +1,17 @@
1
+ import { Command } from '@oclif/core';
2
+ import { deleteConfigFile, getConfigPath } from '../config.js';
3
+ export default class Logout extends Command {
4
+ static description = 'Log out from Kiln and remove stored credentials';
5
+ static examples = ['<%= config.bin %> logout'];
6
+ async run() {
7
+ const configPath = getConfigPath();
8
+ const deleted = deleteConfigFile();
9
+ if (deleted) {
10
+ this.log(`Logged out. Configuration removed from ${configPath}`);
11
+ }
12
+ else {
13
+ this.log('No configuration file found. Already logged out.');
14
+ }
15
+ }
16
+ }
17
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAU,WAAW,GAAG,iDAAiD,CAAC;IAEhF,MAAM,CAAU,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAEjD,KAAK,CAAC,GAAG;QACd,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QAEnC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,CAAC,0CAA0C,UAAU,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class Logs extends BaseCommand {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ buildId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ follow: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ download: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ run(): Promise<void>;
14
+ private downloadLogs;
15
+ private formatSize;
16
+ private followLogs;
17
+ }
18
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW;IAC3C,OAAgB,WAAW,SAAqB;IAEhD,OAAgB,QAAQ,WAKtB;IAEF,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;;;MAenB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAwCnB,YAAY;IAuB1B,OAAO,CAAC,UAAU;YAMJ,UAAU;CAmCzB"}