@pushto/cli 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +4 -0
- package/bin/pushto.js +2 -0
- package/dist/commands/deploy.d.ts +2 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +46 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +50 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +87 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logs.d.ts +2 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +21 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +48 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +2 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +17 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +14 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +19 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/resolve-slug.d.ts +7 -0
- package/dist/lib/resolve-slug.d.ts.map +1 -0
- package/dist/lib/resolve-slug.js +24 -0
- package/dist/lib/resolve-slug.js.map +1 -0
- package/package.json +28 -0
- package/src/commands/deploy.ts +125 -0
- package/src/commands/doctor.ts +160 -0
- package/src/commands/domain.ts +54 -0
- package/src/commands/env.ts +128 -0
- package/src/commands/init.ts +65 -0
- package/src/commands/login.ts +97 -0
- package/src/commands/logs.ts +24 -0
- package/src/commands/open.ts +27 -0
- package/src/commands/rollback.ts +43 -0
- package/src/commands/status.ts +58 -0
- package/src/index.ts +88 -0
- package/src/lib/api.ts +20 -0
- package/src/lib/config.ts +30 -0
- package/src/lib/resolve-slug.ts +23 -0
- package/tsconfig.json +8 -0
package/bin/pushto.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,MAAM,QAAa,OAAO,CAAC,IAAI,CAoD3C,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { getToken } from '../lib/config';
|
|
4
|
+
import { api } from '../lib/api';
|
|
5
|
+
import { resolveSlug } from '../lib/resolve-slug';
|
|
6
|
+
export const deploy = async () => {
|
|
7
|
+
const token = getToken();
|
|
8
|
+
if (!token) {
|
|
9
|
+
console.log(chalk.red('> not logged in.'));
|
|
10
|
+
console.log(chalk.dim(' run ') + chalk.cyan('pushto login') + chalk.dim(' first.'));
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
const slug = resolveSlug();
|
|
14
|
+
if (!slug) {
|
|
15
|
+
console.log(chalk.red('> no project here.'));
|
|
16
|
+
console.log(chalk.dim(' run ') + chalk.cyan('pushto init <name>') + chalk.dim(' to get started.'));
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
const spinner = ora('connecting...').start();
|
|
20
|
+
try {
|
|
21
|
+
// Verify the project exists
|
|
22
|
+
const res = await api(`/cli/projects/${slug}`);
|
|
23
|
+
if (!res.ok) {
|
|
24
|
+
const data = (await res.json());
|
|
25
|
+
spinner.fail(chalk.red(`> ${data.error ?? "can't find that project."}`));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const project = (await res.json());
|
|
29
|
+
spinner.text = `deploying ${project.name}...`;
|
|
30
|
+
// TODO: Phase 2 — zip project files, upload to build service,
|
|
31
|
+
// stream build logs via SSE, update status to LIVE
|
|
32
|
+
// For now: acknowledge the project is linked and ready
|
|
33
|
+
spinner.info(chalk.yellow(`> ${project.name} is linked and ready.`));
|
|
34
|
+
console.log();
|
|
35
|
+
console.log(chalk.dim(' the build engine is coming soon. when it lands,'));
|
|
36
|
+
console.log(chalk.dim(' this exact command will deploy your project to'));
|
|
37
|
+
console.log(chalk.cyan(` ${slug}.pushto.host`));
|
|
38
|
+
console.log();
|
|
39
|
+
console.log(chalk.dim(' you\'re early. that\'s a good thing.'));
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
spinner.fail(chalk.red('> could not reach pushto.host. check your internet.'));
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
//# 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 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,IAAI,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAyDrD,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { getToken, setProjectSlug } from '../lib/config';
|
|
6
|
+
import { api } from '../lib/api';
|
|
7
|
+
export const init = async (name) => {
|
|
8
|
+
const token = getToken();
|
|
9
|
+
if (!token) {
|
|
10
|
+
console.log(chalk.red('> not logged in.'));
|
|
11
|
+
console.log(chalk.dim(' run ') + chalk.cyan('pushto login') + chalk.dim(' first.'));
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
const slug = name
|
|
15
|
+
.toLowerCase()
|
|
16
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
17
|
+
.replace(/-+/g, '-')
|
|
18
|
+
.replace(/^-|-$/g, '');
|
|
19
|
+
if (slug.length < 3) {
|
|
20
|
+
console.log(chalk.red('> name too short. needs at least 3 characters.'));
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
const spinner = ora('creating project...').start();
|
|
24
|
+
try {
|
|
25
|
+
const res = await api('/cli/projects', {
|
|
26
|
+
method: 'POST',
|
|
27
|
+
body: JSON.stringify({ name, slug }),
|
|
28
|
+
});
|
|
29
|
+
const data = (await res.json());
|
|
30
|
+
if (!res.ok) {
|
|
31
|
+
spinner.fail(chalk.red(`> ${data.error ?? 'something went wrong.'}`));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
// Write .pushto file in current directory
|
|
35
|
+
const pushtoConfig = { slug, projectId: data.project?.id };
|
|
36
|
+
fs.writeFileSync(path.join(process.cwd(), '.pushto'), JSON.stringify(pushtoConfig, null, 2) + '\n');
|
|
37
|
+
// Also store globally so bare `pushto` works from this dir
|
|
38
|
+
setProjectSlug(slug);
|
|
39
|
+
spinner.succeed(chalk.green(`> ${slug} is ready.`));
|
|
40
|
+
console.log(chalk.dim(` ${data.message ?? 'project created.'}`));
|
|
41
|
+
console.log();
|
|
42
|
+
console.log(chalk.dim(' deploy anytime with just: ') + chalk.cyan('pushto'));
|
|
43
|
+
console.log(chalk.dim(' your url will be: ') + chalk.cyan(`${slug}.pushto.host`));
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
spinner.fail(chalk.red('> could not reach pushto.host. check your internet.'));
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CA2F1C,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import http from 'node:http';
|
|
3
|
+
import { setToken, config } from '../lib/config';
|
|
4
|
+
import { api } from '../lib/api';
|
|
5
|
+
export const login = async () => {
|
|
6
|
+
const baseUrl = config.get('apiUrl');
|
|
7
|
+
// Start a local server to receive the callback
|
|
8
|
+
const server = http.createServer((req, res) => {
|
|
9
|
+
// Handle CORS preflight
|
|
10
|
+
if (req.method === 'OPTIONS') {
|
|
11
|
+
res.writeHead(200, {
|
|
12
|
+
'Access-Control-Allow-Origin': '*',
|
|
13
|
+
'Access-Control-Allow-Methods': 'POST, OPTIONS',
|
|
14
|
+
'Access-Control-Allow-Headers': 'Content-Type',
|
|
15
|
+
});
|
|
16
|
+
res.end();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (req.method === 'POST' && req.url === '/callback') {
|
|
20
|
+
let body = '';
|
|
21
|
+
req.on('data', (chunk) => (body += chunk));
|
|
22
|
+
req.on('end', async () => {
|
|
23
|
+
res.writeHead(200, {
|
|
24
|
+
'Content-Type': 'application/json',
|
|
25
|
+
'Access-Control-Allow-Origin': '*',
|
|
26
|
+
});
|
|
27
|
+
res.end(JSON.stringify({ ok: true }));
|
|
28
|
+
try {
|
|
29
|
+
const { access_token } = JSON.parse(body);
|
|
30
|
+
if (!access_token) {
|
|
31
|
+
console.log(chalk.red('\n> auth failed. no token received.'));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
setToken(access_token);
|
|
35
|
+
// Verify the token
|
|
36
|
+
const meRes = await api('/cli/me');
|
|
37
|
+
if (meRes.ok) {
|
|
38
|
+
const me = (await meRes.json());
|
|
39
|
+
console.log(chalk.green(`\n> logged in as ${me.email}`));
|
|
40
|
+
console.log(chalk.dim(` tier: ${me.tier.toLowerCase()}`));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(chalk.green('\n> logged in.'));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
console.log(chalk.green('\n> logged in.'));
|
|
48
|
+
}
|
|
49
|
+
server.close();
|
|
50
|
+
process.exit(0);
|
|
51
|
+
});
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
res.writeHead(404);
|
|
55
|
+
res.end();
|
|
56
|
+
});
|
|
57
|
+
// Listen on a random available port
|
|
58
|
+
server.listen(0, () => {
|
|
59
|
+
const port = server.address().port;
|
|
60
|
+
const authUrl = `${baseUrl}/cli/auth?port=${port}`;
|
|
61
|
+
console.log(chalk.dim('> opening browser to log you in...'));
|
|
62
|
+
console.log(chalk.dim(` if it doesn't open, go to: `) + chalk.cyan(authUrl));
|
|
63
|
+
// Open browser
|
|
64
|
+
const open = (url) => {
|
|
65
|
+
const { execSync } = require('node:child_process');
|
|
66
|
+
const cmd = process.platform === 'darwin'
|
|
67
|
+
? `open "${url}"`
|
|
68
|
+
: process.platform === 'win32'
|
|
69
|
+
? `start "${url}"`
|
|
70
|
+
: `xdg-open "${url}"`;
|
|
71
|
+
try {
|
|
72
|
+
execSync(cmd, { stdio: 'ignore' });
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// User will see the URL in the console
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
open(authUrl);
|
|
79
|
+
// Timeout after 2 minutes
|
|
80
|
+
setTimeout(() => {
|
|
81
|
+
console.log(chalk.red('\n> login timed out. try again.'));
|
|
82
|
+
server.close();
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}, 120_000);
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
//# 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 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,IAAI,QAAa,OAAO,CAAC,IAAI,CAmBzC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getToken } from '../lib/config';
|
|
3
|
+
import { resolveSlug } from '../lib/resolve-slug';
|
|
4
|
+
export const logs = async () => {
|
|
5
|
+
const token = getToken();
|
|
6
|
+
if (!token) {
|
|
7
|
+
console.log(chalk.red('> not logged in.'));
|
|
8
|
+
console.log(chalk.dim(' run ') + chalk.cyan('pushto login') + chalk.dim(' first.'));
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
const slug = resolveSlug();
|
|
12
|
+
if (!slug) {
|
|
13
|
+
console.log(chalk.red('> no project here. run pushto init first.'));
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.dim(`> streaming logs for ${slug}...`));
|
|
17
|
+
console.log(chalk.dim(' (ctrl+c to stop)\n'));
|
|
18
|
+
// TODO: Phase 3 — SSE connection to log stream API
|
|
19
|
+
console.log(chalk.yellow('> log streaming coming soon. deploy first, then we\'ll show you everything.'));
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IAC5C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,IAAI,KAAK,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAE/C,mDAAmD;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6EAA6E,CAAC,CAAC,CAAC;AAC3G,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,MAAM,QAAa,OAAO,CAAC,IAAI,CA0C3C,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getToken } from '../lib/config';
|
|
3
|
+
import { api } from '../lib/api';
|
|
4
|
+
import { resolveSlug } from '../lib/resolve-slug';
|
|
5
|
+
const STATUS_COLORS = {
|
|
6
|
+
CREATED: chalk.dim,
|
|
7
|
+
BUILDING: chalk.yellow,
|
|
8
|
+
DEPLOYING: chalk.yellow,
|
|
9
|
+
LIVE: chalk.green,
|
|
10
|
+
SLEEPING: chalk.cyan,
|
|
11
|
+
FAILED: chalk.red,
|
|
12
|
+
SUSPENDED: chalk.red,
|
|
13
|
+
};
|
|
14
|
+
export const status = async () => {
|
|
15
|
+
const token = getToken();
|
|
16
|
+
if (!token) {
|
|
17
|
+
console.log(chalk.red('> not logged in.'));
|
|
18
|
+
console.log(chalk.dim(' run ') + chalk.cyan('pushto login') + chalk.dim(' first.'));
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
const slug = resolveSlug();
|
|
22
|
+
if (!slug) {
|
|
23
|
+
console.log(chalk.red('> no project here.'));
|
|
24
|
+
console.log(chalk.dim(' run ') + chalk.cyan('pushto init <name>') + chalk.dim(' first.'));
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const res = await api(`/cli/projects/${slug}`);
|
|
29
|
+
if (!res.ok) {
|
|
30
|
+
const data = (await res.json());
|
|
31
|
+
console.log(chalk.red(`> ${data.error ?? 'something went wrong.'}`));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
const project = (await res.json());
|
|
35
|
+
const colorFn = STATUS_COLORS[project.status] ?? chalk.dim;
|
|
36
|
+
console.log(chalk.green(`> ${project.name}`));
|
|
37
|
+
console.log(chalk.dim(' status: ') + colorFn(project.status.toLowerCase()));
|
|
38
|
+
console.log(chalk.dim(' url: ') + chalk.cyan(`${project.subdomain}.pushto.host`));
|
|
39
|
+
if (project.customDomain) {
|
|
40
|
+
console.log(chalk.dim(' domain: ') + chalk.cyan(project.customDomain));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
console.log(chalk.red('> could not reach pushto.host. check your internet.'));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { init } from './commands/init';
|
|
5
|
+
import { deploy } from './commands/deploy';
|
|
6
|
+
import { login } from './commands/login';
|
|
7
|
+
import { logs } from './commands/logs';
|
|
8
|
+
import { status } from './commands/status';
|
|
9
|
+
const program = new Command();
|
|
10
|
+
program
|
|
11
|
+
.name('pushto')
|
|
12
|
+
.description(chalk.green('pushto') + chalk.dim(' — deploy from your terminal. no yaml. no drama.'))
|
|
13
|
+
.version('0.0.1')
|
|
14
|
+
.action(async () => {
|
|
15
|
+
// bare `pushto` command = deploy
|
|
16
|
+
await deploy();
|
|
17
|
+
});
|
|
18
|
+
program
|
|
19
|
+
.command('init <name>')
|
|
20
|
+
.description('create a new project')
|
|
21
|
+
.action(async (name) => {
|
|
22
|
+
await init(name);
|
|
23
|
+
});
|
|
24
|
+
program
|
|
25
|
+
.command('login')
|
|
26
|
+
.description('authenticate with pushto.host')
|
|
27
|
+
.action(async () => {
|
|
28
|
+
await login();
|
|
29
|
+
});
|
|
30
|
+
program
|
|
31
|
+
.command('logs')
|
|
32
|
+
.description('stream logs from your project')
|
|
33
|
+
.action(async () => {
|
|
34
|
+
await logs();
|
|
35
|
+
});
|
|
36
|
+
program
|
|
37
|
+
.command('status')
|
|
38
|
+
.description('check your project status')
|
|
39
|
+
.action(async () => {
|
|
40
|
+
await status();
|
|
41
|
+
});
|
|
42
|
+
program.parse();
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;KAClG,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,iCAAiC;IACjC,MAAM,MAAM,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7B,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,KAAK,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAI,EAAE,CAAC;AACf,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG,GAAU,MAAM,MAAM,EAAE,UAAS,WAAgB,KAAG,OAAO,CAAC,QAAQ,CAiBnF,CAAC"}
|
package/dist/lib/api.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { config, getToken } from './config';
|
|
2
|
+
export const api = async (path, options = {}) => {
|
|
3
|
+
const baseUrl = config.get('apiUrl');
|
|
4
|
+
const token = getToken();
|
|
5
|
+
const headers = {
|
|
6
|
+
'Content-Type': 'application/json',
|
|
7
|
+
...(options.headers ?? {}),
|
|
8
|
+
};
|
|
9
|
+
if (token) {
|
|
10
|
+
headers['Authorization'] = `Bearer ${token}`;
|
|
11
|
+
}
|
|
12
|
+
return fetch(`${baseUrl}/api${path}`, {
|
|
13
|
+
...options,
|
|
14
|
+
headers,
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,EAAE,IAAY,EAAE,UAAuB,EAAE,EAAqB,EAAE;IACtF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,GAAG,CAAE,OAAO,CAAC,OAAkC,IAAI,EAAE,CAAC;KACvD,CAAC;IAEF,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,OAAO,OAAO,IAAI,EAAE,EAAE;QACpC,GAAG,OAAO;QACV,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import Conf from 'conf';
|
|
2
|
+
interface PushtoConfig {
|
|
3
|
+
token?: string;
|
|
4
|
+
apiUrl: string;
|
|
5
|
+
projectSlug?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const config: Conf<PushtoConfig>;
|
|
8
|
+
export declare const getToken: () => string | undefined;
|
|
9
|
+
export declare const setToken: (token: string) => void;
|
|
10
|
+
export declare const clearToken: () => void;
|
|
11
|
+
export declare const getProjectSlug: () => string | undefined;
|
|
12
|
+
export declare const setProjectSlug: (slug: string) => void;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,MAAM,oBAKjB,CAAC;AAEH,eAAO,MAAM,QAAQ,QAAO,MAAM,GAAG,SAAgC,CAAC;AAEtE,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,KAAG,IAExC,CAAC;AAEF,eAAO,MAAM,UAAU,QAAO,IAE7B,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,MAAM,GAAG,SAAsC,CAAC;AAElF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,KAAG,IAE7C,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Conf from 'conf';
|
|
2
|
+
export const config = new Conf({
|
|
3
|
+
projectName: 'pushto',
|
|
4
|
+
defaults: {
|
|
5
|
+
apiUrl: 'https://pushto.host',
|
|
6
|
+
},
|
|
7
|
+
});
|
|
8
|
+
export const getToken = () => config.get('token');
|
|
9
|
+
export const setToken = (token) => {
|
|
10
|
+
config.set('token', token);
|
|
11
|
+
};
|
|
12
|
+
export const clearToken = () => {
|
|
13
|
+
config.delete('token');
|
|
14
|
+
};
|
|
15
|
+
export const getProjectSlug = () => config.get('projectSlug');
|
|
16
|
+
export const setProjectSlug = (slug) => {
|
|
17
|
+
config.set('projectSlug', slug);
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAe;IAC3C,WAAW,EAAE,QAAQ;IACrB,QAAQ,EAAE;QACR,MAAM,EAAE,qBAAqB;KAC9B;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAuB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAQ,EAAE;IAC9C,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAS,EAAE;IACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAuB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAElF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAQ,EAAE;IACnD,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-slug.d.ts","sourceRoot":"","sources":["../../src/lib/resolve-slug.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,WAAW,QAAO,MAAM,GAAG,SAavC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { getProjectSlug } from './config';
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the project slug from:
|
|
6
|
+
* 1. .pushto file in the current directory
|
|
7
|
+
* 2. Global config (last `pushto init`)
|
|
8
|
+
*/
|
|
9
|
+
export const resolveSlug = () => {
|
|
10
|
+
// Check for .pushto file in cwd
|
|
11
|
+
const pushtoFile = path.join(process.cwd(), '.pushto');
|
|
12
|
+
try {
|
|
13
|
+
const content = fs.readFileSync(pushtoFile, 'utf-8');
|
|
14
|
+
const parsed = JSON.parse(content);
|
|
15
|
+
if (parsed.slug)
|
|
16
|
+
return parsed.slug;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// No .pushto file or invalid JSON — fall through
|
|
20
|
+
}
|
|
21
|
+
// Fall back to global config
|
|
22
|
+
return getProjectSlug();
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=resolve-slug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-slug.js","sourceRoot":"","sources":["../../src/lib/resolve-slug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAuB,EAAE;IAClD,gCAAgC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;IAED,6BAA6B;IAC7B,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@pushto/cli",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Deploy to pushto.host from your terminal",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"pushto": "./bin/pushto.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc --noEmit",
|
|
11
|
+
"dev": "tsx src/index.ts",
|
|
12
|
+
"lint": "tsc --noEmit"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@pushto/shared": "workspace:*",
|
|
16
|
+
"archiver": "^7.0.1",
|
|
17
|
+
"chalk": "^5.4.0",
|
|
18
|
+
"commander": "^13.0.0",
|
|
19
|
+
"conf": "^13.0.0",
|
|
20
|
+
"ora": "^8.1.0"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/archiver": "^7.0.0",
|
|
24
|
+
"@types/node": "^22.10.0",
|
|
25
|
+
"tsx": "^4.19.0",
|
|
26
|
+
"typescript": "^5.7.0"
|
|
27
|
+
}
|
|
28
|
+
}
|