@saplo/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.
- package/README.md +112 -0
- package/bin/dev.js +5 -0
- package/bin/run.js +5 -0
- package/dist/commands/deploy.d.ts +13 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +206 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/domain/add.d.ts +13 -0
- package/dist/commands/domain/add.d.ts.map +1 -0
- package/dist/commands/domain/add.js +44 -0
- package/dist/commands/domain/add.js.map +1 -0
- package/dist/commands/domain/ls.d.ts +10 -0
- package/dist/commands/domain/ls.d.ts.map +1 -0
- package/dist/commands/domain/ls.js +32 -0
- package/dist/commands/domain/ls.js.map +1 -0
- package/dist/commands/domain/rm.d.ts +13 -0
- package/dist/commands/domain/rm.d.ts.map +1 -0
- package/dist/commands/domain/rm.js +29 -0
- package/dist/commands/domain/rm.js.map +1 -0
- package/dist/commands/env/index.d.ts +10 -0
- package/dist/commands/env/index.d.ts.map +1 -0
- package/dist/commands/env/index.js +34 -0
- package/dist/commands/env/index.js.map +1 -0
- package/dist/commands/env/pull.d.ts +12 -0
- package/dist/commands/env/pull.d.ts.map +1 -0
- package/dist/commands/env/pull.js +62 -0
- package/dist/commands/env/pull.js.map +1 -0
- package/dist/commands/env/rm.d.ts +14 -0
- package/dist/commands/env/rm.d.ts.map +1 -0
- package/dist/commands/env/rm.js +36 -0
- package/dist/commands/env/rm.js.map +1 -0
- package/dist/commands/env/set.d.ts +14 -0
- package/dist/commands/env/set.d.ts.map +1 -0
- package/dist/commands/env/set.js +47 -0
- package/dist/commands/env/set.js.map +1 -0
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +144 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +10 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +86 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.d.ts +12 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +83 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logs.d.ts +13 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +63 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/open.d.ts +10 -0
- package/dist/commands/open.d.ts.map +1 -0
- package/dist/commands/open.js +42 -0
- package/dist/commands/open.js.map +1 -0
- package/dist/commands/rollback.d.ts +16 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +51 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/status.d.ts +10 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +63 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/whoami.d.ts +7 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +26 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +68 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +117 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +74 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/detect.d.ts +9 -0
- package/dist/lib/detect.d.ts.map +1 -0
- package/dist/lib/detect.js +293 -0
- package/dist/lib/detect.js.map +1 -0
- package/dist/lib/packager.d.ts +18 -0
- package/dist/lib/packager.d.ts.map +1 -0
- package/dist/lib/packager.js +139 -0
- package/dist/lib/packager.js.map +1 -0
- package/dist/lib/saplo-config.d.ts +50 -0
- package/dist/lib/saplo-config.d.ts.map +1 -0
- package/dist/lib/saplo-config.js +203 -0
- package/dist/lib/saplo-config.js.map +1 -0
- package/dist/lib/ws-logs.d.ts +6 -0
- package/dist/lib/ws-logs.d.ts.map +1 -0
- package/dist/lib/ws-logs.js +112 -0
- package/dist/lib/ws-logs.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import { writeFileSync, existsSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { api } from '../../lib/api.js';
|
|
6
|
+
import { requireToken, requireProjectConfig } from '../../lib/config.js';
|
|
7
|
+
export default class EnvPull extends Command {
|
|
8
|
+
static description = 'Pull environment variables into a local .env file';
|
|
9
|
+
static examples = [
|
|
10
|
+
'<%= config.bin %> env pull',
|
|
11
|
+
'<%= config.bin %> env pull --output .env.local',
|
|
12
|
+
];
|
|
13
|
+
static flags = {
|
|
14
|
+
'app-id': Flags.integer({
|
|
15
|
+
char: 'a',
|
|
16
|
+
description: 'Application ID (overrides .saplo/project.json)',
|
|
17
|
+
}),
|
|
18
|
+
output: Flags.string({
|
|
19
|
+
char: 'o',
|
|
20
|
+
description: 'Output file path',
|
|
21
|
+
default: '.env.local',
|
|
22
|
+
}),
|
|
23
|
+
force: Flags.boolean({
|
|
24
|
+
char: 'f',
|
|
25
|
+
description: 'Overwrite existing file',
|
|
26
|
+
default: false,
|
|
27
|
+
}),
|
|
28
|
+
};
|
|
29
|
+
async run() {
|
|
30
|
+
const { flags } = await this.parse(EnvPull);
|
|
31
|
+
requireToken();
|
|
32
|
+
const appId = flags['app-id'] ?? requireProjectConfig().app_id;
|
|
33
|
+
const outputPath = join(process.cwd(), flags.output);
|
|
34
|
+
if (existsSync(outputPath) && !flags.force) {
|
|
35
|
+
this.error(`File ${flags.output} already exists. Use --force to overwrite.`);
|
|
36
|
+
}
|
|
37
|
+
const vars = await api.getEnvVars(appId);
|
|
38
|
+
const nonSecret = vars.filter((v) => !v.is_secret && v.value !== undefined);
|
|
39
|
+
const lines = [
|
|
40
|
+
'# Generated by saplo env pull',
|
|
41
|
+
`# App ID: ${appId}`,
|
|
42
|
+
`# Date: ${new Date().toISOString()}`,
|
|
43
|
+
'',
|
|
44
|
+
...nonSecret.map((v) => `${v.key}=${v.value ?? ''}`),
|
|
45
|
+
'',
|
|
46
|
+
];
|
|
47
|
+
if (vars.some((v) => v.is_secret)) {
|
|
48
|
+
lines.push('# The following variables are secrets and were not included:');
|
|
49
|
+
for (const v of vars.filter((v) => v.is_secret)) {
|
|
50
|
+
lines.push(`# ${v.key}=`);
|
|
51
|
+
}
|
|
52
|
+
lines.push('');
|
|
53
|
+
}
|
|
54
|
+
writeFileSync(outputPath, lines.join('\n'), 'utf-8');
|
|
55
|
+
this.log(chalk.green(`Wrote ${nonSecret.length} variable(s) to ${flags.output}`));
|
|
56
|
+
if (vars.some((v) => v.is_secret)) {
|
|
57
|
+
this.log(chalk.yellow(`Secrets were skipped (${vars.filter((v) => v.is_secret).length} vars). Set them manually.`));
|
|
58
|
+
}
|
|
59
|
+
this.log(chalk.dim(`Make sure ${flags.output} is in your .gitignore!`));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../../src/commands/env/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,SAAS,CAAA;AACjD,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,YAAY,EAAE,oBAAoB,EAAC,MAAM,qBAAqB,CAAA;AAEtE,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAU,WAAW,GAAG,mDAAmD,CAAA;IAEjF,MAAM,CAAU,QAAQ,GAAG;QACzB,4BAA4B;QAC5B,gDAAgD;KACjD,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACtB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,gDAAgD;SAC9D,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,kBAAkB;YAC/B,OAAO,EAAE,YAAY;SACtB,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,yBAAyB;YACtC,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACzC,YAAY,EAAE,CAAA;QAEd,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,EAAE,CAAC,MAAM,CAAA;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QAEpD,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,MAAM,4CAA4C,CAAC,CAAA;QAC9E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;QAE3E,MAAM,KAAK,GAAG;YACZ,+BAA+B;YAC/B,aAAa,KAAK,EAAE;YACpB,WAAW,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;YACrC,EAAE;YACF,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACpD,EAAE;SACH,CAAA;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;YAC1E,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;YAC3B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;QAED,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;QAEpD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC,MAAM,mBAAmB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACjF,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,4BAA4B,CAAC,CAAC,CAAA;QACrH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,MAAM,yBAAyB,CAAC,CAAC,CAAA;IACzE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class EnvRm extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static strict: boolean;
|
|
6
|
+
static args: {
|
|
7
|
+
key: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
'app-id': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=rm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rm.d.ts","sourceRoot":"","sources":["../../../src/commands/env/rm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAc,MAAM,aAAa,CAAA;AAKhD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,OAAgB,WAAW,SAAmC;IAE9D,OAAgB,QAAQ,WAGvB;IAED,OAAgB,MAAM,UAAQ;IAE9B,OAAgB,IAAI;;MAKnB;IAED,OAAgB,KAAK;;MAKpB;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAc3B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { api } from '../../lib/api.js';
|
|
4
|
+
import { requireToken, requireProjectConfig } from '../../lib/config.js';
|
|
5
|
+
export default class EnvRm extends Command {
|
|
6
|
+
static description = 'Remove an environment variable';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> env rm MY_VAR',
|
|
9
|
+
'<%= config.bin %> env rm KEY1 KEY2',
|
|
10
|
+
];
|
|
11
|
+
static strict = false;
|
|
12
|
+
static args = {
|
|
13
|
+
key: Args.string({
|
|
14
|
+
description: 'Variable name(s) to remove',
|
|
15
|
+
required: true,
|
|
16
|
+
}),
|
|
17
|
+
};
|
|
18
|
+
static flags = {
|
|
19
|
+
'app-id': Flags.integer({
|
|
20
|
+
char: 'a',
|
|
21
|
+
description: 'Application ID (overrides .saplo/project.json)',
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
async run() {
|
|
25
|
+
const { argv, flags } = await this.parse(EnvRm);
|
|
26
|
+
requireToken();
|
|
27
|
+
const appId = flags['app-id'] ?? requireProjectConfig().app_id;
|
|
28
|
+
const keys = argv;
|
|
29
|
+
for (const key of keys) {
|
|
30
|
+
await api.deleteEnvVar(appId, key);
|
|
31
|
+
}
|
|
32
|
+
this.log(chalk.green(`Removed: ${keys.join(', ')}`));
|
|
33
|
+
this.log(chalk.dim('Changes take effect on next deploy.'));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=rm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rm.js","sourceRoot":"","sources":["../../../src/commands/env/rm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,YAAY,EAAE,oBAAoB,EAAC,MAAM,qBAAqB,CAAA;AAEtE,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAU,WAAW,GAAG,gCAAgC,CAAA;IAE9D,MAAM,CAAU,QAAQ,GAAG;QACzB,iCAAiC;QACjC,oCAAoC;KACrC,CAAA;IAED,MAAM,CAAU,MAAM,GAAG,KAAK,CAAA;IAE9B,MAAM,CAAU,IAAI,GAAG;QACrB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;YACf,WAAW,EAAE,4BAA4B;YACzC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACtB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,gDAAgD;SAC9D,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC7C,YAAY,EAAE,CAAA;QAEd,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,EAAE,CAAC,MAAM,CAAA;QAC9D,MAAM,IAAI,GAAG,IAAgB,CAAA;QAE7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACpC,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACpD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAA;IAC5D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class EnvSet extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static strict: boolean;
|
|
6
|
+
static args: {
|
|
7
|
+
vars: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
8
|
+
};
|
|
9
|
+
static flags: {
|
|
10
|
+
'app-id': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/commands/env/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAc,MAAM,aAAa,CAAA;AAKhD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,OAAgB,WAAW,SAA0C;IAErE,OAAgB,QAAQ,WAIvB;IAED,OAAgB,MAAM,UAAQ;IAE9B,OAAgB,IAAI;;MAKnB;IAED,OAAgB,KAAK;;MAKpB;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB3B"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Command, Args, Flags } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { api } from '../../lib/api.js';
|
|
4
|
+
import { requireToken, requireProjectConfig } from '../../lib/config.js';
|
|
5
|
+
export default class EnvSet extends Command {
|
|
6
|
+
static description = 'Set one or more environment variables';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> env set KEY=value',
|
|
9
|
+
'<%= config.bin %> env set KEY1=value1 KEY2=value2',
|
|
10
|
+
'<%= config.bin %> env set DATABASE_URL=postgres://...',
|
|
11
|
+
];
|
|
12
|
+
static strict = false;
|
|
13
|
+
static args = {
|
|
14
|
+
vars: Args.string({
|
|
15
|
+
description: 'KEY=value pairs',
|
|
16
|
+
required: true,
|
|
17
|
+
}),
|
|
18
|
+
};
|
|
19
|
+
static flags = {
|
|
20
|
+
'app-id': Flags.integer({
|
|
21
|
+
char: 'a',
|
|
22
|
+
description: 'Application ID (overrides .saplo/project.json)',
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
async run() {
|
|
26
|
+
const { argv, flags } = await this.parse(EnvSet);
|
|
27
|
+
requireToken();
|
|
28
|
+
const appId = flags['app-id'] ?? requireProjectConfig().app_id;
|
|
29
|
+
const vars = {};
|
|
30
|
+
for (const arg of argv) {
|
|
31
|
+
const eqIdx = arg.indexOf('=');
|
|
32
|
+
if (eqIdx === -1) {
|
|
33
|
+
this.error(`Invalid format: "${arg}". Use KEY=value`);
|
|
34
|
+
}
|
|
35
|
+
const key = arg.slice(0, eqIdx);
|
|
36
|
+
const value = arg.slice(eqIdx + 1);
|
|
37
|
+
if (!key)
|
|
38
|
+
this.error(`Empty key in: "${arg}"`);
|
|
39
|
+
vars[key] = value;
|
|
40
|
+
}
|
|
41
|
+
await api.setEnvVars(appId, vars);
|
|
42
|
+
const keys = Object.keys(vars);
|
|
43
|
+
this.log(chalk.green(`Set ${keys.length} variable${keys.length === 1 ? '' : 's'}: ${keys.join(', ')}`));
|
|
44
|
+
this.log(chalk.dim('Changes take effect on next deploy.'));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/commands/env/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,GAAG,EAAC,MAAM,kBAAkB,CAAA;AACpC,OAAO,EAAC,YAAY,EAAE,oBAAoB,EAAC,MAAM,qBAAqB,CAAA;AAEtE,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,OAAO;IACzC,MAAM,CAAU,WAAW,GAAG,uCAAuC,CAAA;IAErE,MAAM,CAAU,QAAQ,GAAG;QACzB,qCAAqC;QACrC,mDAAmD;QACnD,uDAAuD;KACxD,CAAA;IAED,MAAM,CAAU,MAAM,GAAG,KAAK,CAAA;IAE9B,MAAM,CAAU,IAAI,GAAG;QACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,iBAAiB;YAC9B,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACtB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,gDAAgD;SAC9D,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC9C,YAAY,EAAE,CAAA;QAEd,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,EAAE,CAAC,MAAM,CAAA;QAE9D,MAAM,IAAI,GAA2B,EAAE,CAAA;QACvC,KAAK,MAAM,GAAG,IAAI,IAAgB,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC9B,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,kBAAkB,CAAC,CAAA;YACvD,CAAC;YACD,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;YAClC,IAAI,CAAC,GAAG;gBAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAA;YAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACnB,CAAC;QAED,MAAM,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAEjC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACvG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAA;IAC5D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Init extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
stack: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
name: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
'app-id': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
force: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAQ,MAAM,aAAa,CAAA;AAiB1C,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,OAAgB,WAAW,SAAyD;IAEpF,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;;;;MAkBpB;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiH3B"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import { existsSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { createInterface } from 'node:readline';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { generateSaploYaml } from '../lib/saplo-config.js';
|
|
7
|
+
import { detectProject, detectStack } from '../lib/detect.js';
|
|
8
|
+
import { saveProjectConfig } from '../lib/config.js';
|
|
9
|
+
const STACKS = ['nextjs', 'react', 'vue', 'nuxt', 'sveltekit', 'django', 'static', 'docker', 'node', 'astro', 'angular'];
|
|
10
|
+
async function prompt(rl, question) {
|
|
11
|
+
return new Promise((resolve) => {
|
|
12
|
+
rl.question(question, (answer) => resolve(answer.trim()));
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
export default class Init extends Command {
|
|
16
|
+
static description = 'Initialize a new saplo.yaml in the current directory';
|
|
17
|
+
static examples = [
|
|
18
|
+
'<%= config.bin %> <%= command.id %>',
|
|
19
|
+
'<%= config.bin %> <%= command.id %> --stack nextjs --name my-app',
|
|
20
|
+
];
|
|
21
|
+
static flags = {
|
|
22
|
+
stack: Flags.string({
|
|
23
|
+
char: 's',
|
|
24
|
+
description: `Stack type (${STACKS.join(', ')})`,
|
|
25
|
+
options: STACKS,
|
|
26
|
+
}),
|
|
27
|
+
name: Flags.string({
|
|
28
|
+
char: 'n',
|
|
29
|
+
description: 'Application name (slug)',
|
|
30
|
+
}),
|
|
31
|
+
'app-id': Flags.integer({
|
|
32
|
+
description: 'Link to existing application ID',
|
|
33
|
+
}),
|
|
34
|
+
force: Flags.boolean({
|
|
35
|
+
char: 'f',
|
|
36
|
+
description: 'Overwrite existing saplo.yaml',
|
|
37
|
+
default: false,
|
|
38
|
+
}),
|
|
39
|
+
};
|
|
40
|
+
async run() {
|
|
41
|
+
const { flags } = await this.parse(Init);
|
|
42
|
+
const cwd = process.cwd();
|
|
43
|
+
const yamlPath = join(cwd, 'saplo.yaml');
|
|
44
|
+
if (existsSync(yamlPath) && !flags.force) {
|
|
45
|
+
this.error('saplo.yaml already exists. Use --force to overwrite.');
|
|
46
|
+
}
|
|
47
|
+
this.log('');
|
|
48
|
+
this.log(chalk.bold('Saplo init wizard'));
|
|
49
|
+
this.log(chalk.dim('Press Enter to accept default values.'));
|
|
50
|
+
this.log('');
|
|
51
|
+
// Tryb interaktywny tylko gdy stdin jest terminalem. Bez TTY (CI, pipe,
|
|
52
|
+
// agent) NIE pytamy - uzywamy flag i autodetekcji, zeby init nie wisial.
|
|
53
|
+
const interactive = Boolean(process.stdin.isTTY);
|
|
54
|
+
const rl = interactive
|
|
55
|
+
? createInterface({ input: process.stdin, output: process.stdout })
|
|
56
|
+
: null;
|
|
57
|
+
try {
|
|
58
|
+
// Determine name
|
|
59
|
+
const dirName = cwd.split('/').pop() ?? 'my-app';
|
|
60
|
+
const defaultName = dirName.toLowerCase().replace(/[^a-z0-9-]/g, '-').replace(/^-|-$/g, '') || 'my-app';
|
|
61
|
+
let name = flags.name;
|
|
62
|
+
if (!name) {
|
|
63
|
+
if (rl) {
|
|
64
|
+
name = await prompt(rl, `App name [${defaultName}]: `);
|
|
65
|
+
}
|
|
66
|
+
if (!name)
|
|
67
|
+
name = defaultName;
|
|
68
|
+
}
|
|
69
|
+
// Validate name
|
|
70
|
+
if (!/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(name)) {
|
|
71
|
+
this.error('Name must be a lowercase slug (letters, numbers, hyphens only)');
|
|
72
|
+
}
|
|
73
|
+
// Determine stack - najpierw sprobuj auto-wykryc z plikow projektu
|
|
74
|
+
let stack = flags.stack;
|
|
75
|
+
if (!stack) {
|
|
76
|
+
const detected = detectStack(cwd);
|
|
77
|
+
if (rl) {
|
|
78
|
+
this.log('Available stacks:');
|
|
79
|
+
STACKS.forEach((s, i) => {
|
|
80
|
+
const mark = s === detected ? chalk.green(' <- wykryto') : '';
|
|
81
|
+
this.log(` ${i + 1}. ${s}${mark}`);
|
|
82
|
+
});
|
|
83
|
+
const defaultIdx = detected ? STACKS.indexOf(detected) : 0;
|
|
84
|
+
const choice = await prompt(rl, `Select stack [${defaultIdx + 1}]: `);
|
|
85
|
+
const idx = choice ? parseInt(choice, 10) - 1 : defaultIdx;
|
|
86
|
+
stack = STACKS[idx] ?? detected ?? 'nextjs';
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Bez TTY: uzyj autodetekcji, fallback na nextjs.
|
|
90
|
+
stack = detected ?? 'nextjs';
|
|
91
|
+
this.log(chalk.dim(`Stack (auto): ${stack}`));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// App ID - pytamy tylko interaktywnie; bez TTY zostaje pusty (utworzy
|
|
95
|
+
// sie przy `saplo deploy`, ktore samo zaklada aplikacje).
|
|
96
|
+
let appId = flags['app-id'];
|
|
97
|
+
if (!appId && rl) {
|
|
98
|
+
const appIdStr = await prompt(rl, 'App ID (leave blank to create later): ');
|
|
99
|
+
if (appIdStr && /^\d+$/.test(appIdStr)) {
|
|
100
|
+
appId = parseInt(appIdStr, 10);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
rl?.close();
|
|
104
|
+
// Autodetekcja - skanuje katalog i generuje gotowy config dla stacka
|
|
105
|
+
const detection = detectProject(cwd, stack);
|
|
106
|
+
const config = {
|
|
107
|
+
name,
|
|
108
|
+
stack,
|
|
109
|
+
app_id: appId,
|
|
110
|
+
...detection.config,
|
|
111
|
+
};
|
|
112
|
+
const yaml = generateSaploYaml(config);
|
|
113
|
+
writeFileSync(yamlPath, yaml, 'utf-8');
|
|
114
|
+
this.log('');
|
|
115
|
+
this.log(chalk.green('Created saplo.yaml'));
|
|
116
|
+
if (detection.notes.length > 0) {
|
|
117
|
+
this.log('');
|
|
118
|
+
this.log(chalk.bold('Wykryto:'));
|
|
119
|
+
for (const note of detection.notes) {
|
|
120
|
+
this.log(` ${chalk.dim('-')} ${note}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
this.log('');
|
|
124
|
+
this.log(chalk.bold('Next steps:'));
|
|
125
|
+
if (!appId) {
|
|
126
|
+
this.log(` 1. Create your app at ${chalk.cyan('https://panel.saplo.pl')}`);
|
|
127
|
+
this.log(` 2. Run ${chalk.cyan('saplo link')} to connect this directory to your app`);
|
|
128
|
+
this.log(` 3. Run ${chalk.cyan('saplo deploy')} to deploy`);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// Save project config
|
|
132
|
+
saveProjectConfig({ app_id: appId, app_name: name });
|
|
133
|
+
this.log(` 1. Review ${chalk.cyan('saplo.yaml')} and adjust settings`);
|
|
134
|
+
this.log(` 2. Run ${chalk.cyan('saplo deploy')} to deploy`);
|
|
135
|
+
}
|
|
136
|
+
this.log('');
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
rl?.close();
|
|
140
|
+
throw err;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
//# 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,10 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Link extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
'app-id': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
};
|
|
8
|
+
run(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAQ,MAAM,aAAa,CAAA;AAY1C,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,OAAgB,WAAW,SAAgE;IAE3F,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;MAKpB;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiE3B"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import { createInterface } from 'node:readline';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { api } from '../lib/api.js';
|
|
5
|
+
import { requireToken, saveProjectConfig, getProjectConfig } from '../lib/config.js';
|
|
6
|
+
async function prompt(rl, question) {
|
|
7
|
+
return new Promise((resolve) => {
|
|
8
|
+
rl.question(question, (answer) => resolve(answer.trim()));
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export default class Link extends Command {
|
|
12
|
+
static description = 'Link the current directory to an existing Saplo application';
|
|
13
|
+
static examples = [
|
|
14
|
+
'<%= config.bin %> <%= command.id %>',
|
|
15
|
+
'<%= config.bin %> <%= command.id %> --app-id 42',
|
|
16
|
+
];
|
|
17
|
+
static flags = {
|
|
18
|
+
'app-id': Flags.integer({
|
|
19
|
+
char: 'a',
|
|
20
|
+
description: 'Application ID to link to',
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
async run() {
|
|
24
|
+
const { flags } = await this.parse(Link);
|
|
25
|
+
requireToken();
|
|
26
|
+
const existing = getProjectConfig();
|
|
27
|
+
if (existing) {
|
|
28
|
+
this.log(chalk.dim(`Currently linked to app #${existing.app_id} (${existing.app_name ?? 'unknown'})`));
|
|
29
|
+
}
|
|
30
|
+
let appId = flags['app-id'];
|
|
31
|
+
if (!appId) {
|
|
32
|
+
// Fetch available apps and let user pick
|
|
33
|
+
this.log(chalk.dim('Fetching your applications...'));
|
|
34
|
+
let apps;
|
|
35
|
+
try {
|
|
36
|
+
apps = await api.listApplications();
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
this.error(err.message);
|
|
40
|
+
}
|
|
41
|
+
if (apps.length === 0) {
|
|
42
|
+
this.error('No applications found. Create one at https://panel.saplo.pl');
|
|
43
|
+
}
|
|
44
|
+
this.log('');
|
|
45
|
+
this.log(chalk.bold('Your applications:'));
|
|
46
|
+
apps.forEach((app, i) => {
|
|
47
|
+
const status = app.status === 'running' ? chalk.green(app.status) : chalk.yellow(app.status);
|
|
48
|
+
this.log(` ${i + 1}. [${app.id}] ${chalk.bold(app.name)} (${app.stack}) - ${status}`);
|
|
49
|
+
});
|
|
50
|
+
this.log('');
|
|
51
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
52
|
+
try {
|
|
53
|
+
const choice = await prompt(rl, 'Select application number: ');
|
|
54
|
+
const idx = parseInt(choice, 10) - 1;
|
|
55
|
+
if (isNaN(idx) || idx < 0 || idx >= apps.length) {
|
|
56
|
+
rl.close();
|
|
57
|
+
this.error('Invalid selection');
|
|
58
|
+
}
|
|
59
|
+
appId = apps[idx].id;
|
|
60
|
+
const selected = apps[idx];
|
|
61
|
+
rl.close();
|
|
62
|
+
saveProjectConfig({ app_id: appId, app_name: selected.name });
|
|
63
|
+
this.log('');
|
|
64
|
+
this.log(chalk.green(`Linked to ${chalk.bold(selected.name)} (ID: ${appId})`));
|
|
65
|
+
this.log(chalk.dim(`Saved to .saplo/project.json`));
|
|
66
|
+
this.log('');
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
rl.close();
|
|
70
|
+
throw err;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Direct link by ID
|
|
75
|
+
try {
|
|
76
|
+
const app = await api.getApplication(appId);
|
|
77
|
+
saveProjectConfig({ app_id: appId, app_name: app.name });
|
|
78
|
+
this.log(chalk.green(`Linked to ${chalk.bold(app.name)} (ID: ${appId})`));
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
this.error(`Failed to link: ${err.message}`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/commands/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAC,eAAe,EAAC,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,GAAG,EAAc,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,kBAAkB,CAAA;AAElF,KAAK,UAAU,MAAM,CAAC,EAAsC,EAAE,QAAgB;IAC5E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,MAAM,CAAU,WAAW,GAAG,6DAA6D,CAAA;IAE3F,MAAM,CAAU,QAAQ,GAAG;QACzB,qCAAqC;QACrC,iDAAiD;KAClD,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACtB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,2BAA2B;SACzC,CAAC;KACH,CAAA;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAC,KAAK,EAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACtC,YAAY,EAAE,CAAA;QAEd,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAA;QACnC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC,CAAA;QACxG,CAAC;QAED,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;QAE3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,yCAAyC;YACzC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAA;YACpD,IAAI,IAAmB,CAAA;YACvB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAA;YACrC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAA;YACpC,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAA;YAC3E,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;YAC1C,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;gBACtB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBAC5F,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,OAAO,MAAM,EAAE,CAAC,CAAA;YACxF,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEZ,MAAM,EAAE,GAAG,eAAe,CAAC,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAC,CAAC,CAAA;YAC1E,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,6BAA6B,CAAC,CAAA;gBAC9D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;gBACpC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChD,EAAE,CAAC,KAAK,EAAE,CAAA;oBACV,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;gBACjC,CAAC;gBACD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAA;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;gBAC1B,EAAE,CAAC,KAAK,EAAE,CAAA;gBAEV,iBAAiB,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAC,CAAC,CAAA;gBAC3D,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAA;gBAC9E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAA;gBACnD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,EAAE,CAAC,KAAK,EAAE,CAAA;gBACV,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oBAAoB;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;gBAC3C,iBAAiB,CAAC,EAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC,CAAA;gBACtD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,GAAG,CAAC,CAAC,CAAA;YAC3E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;YACzD,CAAC;QACH,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Login extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
token: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
7
|
+
'api-url': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
};
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
private promptToken;
|
|
11
|
+
}
|
|
12
|
+
//# 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,EAAC,OAAO,EAAQ,MAAM,aAAa,CAAA;AAK1C,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,OAAgB,WAAW,SAA+C;IAE1E,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;;MASpB;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAwDZ,WAAW;CAe1B"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Command, Flags } from '@oclif/core';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { createApiClient } from '../lib/api.js';
|
|
4
|
+
import { saveGlobalConfig, getGlobalConfig } from '../lib/config.js';
|
|
5
|
+
export default class Login extends Command {
|
|
6
|
+
static description = 'Authenticate with Saplo using an API token';
|
|
7
|
+
static examples = [
|
|
8
|
+
'<%= config.bin %> <%= command.id %>',
|
|
9
|
+
'<%= config.bin %> <%= command.id %> --token saplo_live_abc123',
|
|
10
|
+
];
|
|
11
|
+
static flags = {
|
|
12
|
+
token: Flags.string({
|
|
13
|
+
char: 't',
|
|
14
|
+
description: 'API token (non-interactive mode)',
|
|
15
|
+
}),
|
|
16
|
+
'api-url': Flags.string({
|
|
17
|
+
description: 'Override API URL (default: https://api.saplo.pl)',
|
|
18
|
+
hidden: true,
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
21
|
+
async run() {
|
|
22
|
+
const { flags } = await this.parse(Login);
|
|
23
|
+
const apiUrl = flags['api-url'];
|
|
24
|
+
if (apiUrl) {
|
|
25
|
+
saveGlobalConfig({ api_url: apiUrl });
|
|
26
|
+
}
|
|
27
|
+
let token = flags.token;
|
|
28
|
+
if (!token) {
|
|
29
|
+
// Interactive flow: instruct user to get token from panel
|
|
30
|
+
const config = getGlobalConfig();
|
|
31
|
+
const panelUrl = config.api_url
|
|
32
|
+
.replace('api.', 'panel.')
|
|
33
|
+
.replace('/api/v1', '');
|
|
34
|
+
this.log('');
|
|
35
|
+
this.log(chalk.bold('Log in to Saplo'));
|
|
36
|
+
this.log('');
|
|
37
|
+
this.log('1. Open your browser and go to:');
|
|
38
|
+
this.log(` ${chalk.cyan(`${panelUrl}/cli-auth`)}`);
|
|
39
|
+
this.log('');
|
|
40
|
+
this.log('2. Log in to your account if prompted.');
|
|
41
|
+
this.log('3. Copy the token shown on the page.');
|
|
42
|
+
this.log('');
|
|
43
|
+
// Read token from stdin
|
|
44
|
+
token = await this.promptToken();
|
|
45
|
+
}
|
|
46
|
+
if (!token || !token.trim()) {
|
|
47
|
+
this.error('No token provided.');
|
|
48
|
+
}
|
|
49
|
+
const trimmed = token.trim();
|
|
50
|
+
// Validate via whoami
|
|
51
|
+
this.log(chalk.dim('Verifying token...'));
|
|
52
|
+
try {
|
|
53
|
+
const client = createApiClient(trimmed);
|
|
54
|
+
const whoami = await client.get('/api/v1/auth/whoami').then((r) => r.data);
|
|
55
|
+
saveGlobalConfig({ token: trimmed });
|
|
56
|
+
this.log('');
|
|
57
|
+
this.log(chalk.green('Logged in successfully!'));
|
|
58
|
+
this.log(` User: ${chalk.bold(whoami.user)}`);
|
|
59
|
+
this.log(` Token: ${whoami.token_name}`);
|
|
60
|
+
this.log(` Scopes: ${whoami.scopes.join(', ')}`);
|
|
61
|
+
this.log('');
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
this.error(`Token verification failed: ${err.message}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async promptToken() {
|
|
68
|
+
process.stdout.write('Paste your token here: ');
|
|
69
|
+
return new Promise((resolve) => {
|
|
70
|
+
const chunks = [];
|
|
71
|
+
process.stdin.resume();
|
|
72
|
+
process.stdin.setEncoding('utf-8');
|
|
73
|
+
process.stdin.on('data', (chunk) => {
|
|
74
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
75
|
+
if (chunk.toString().includes('\n')) {
|
|
76
|
+
process.stdin.pause();
|
|
77
|
+
resolve(chunks.join('').trim());
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# 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,13 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Logs extends Command {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: string[];
|
|
5
|
+
static flags: {
|
|
6
|
+
follow: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
7
|
+
deployment: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
8
|
+
'app-id': import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
9
|
+
tail: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
10
|
+
};
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAQ,MAAM,aAAa,CAAA;AAM1C,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,OAAO;IACvC,OAAgB,WAAW,SAAqD;IAEhF,OAAgB,QAAQ,WAIvB;IAED,OAAgB,KAAK;;;;;MAmBpB;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgC3B"}
|