flingit 0.0.12 → 0.0.13
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 +8 -1
- package/dist/cli/commands/db.d.ts +11 -0
- package/dist/cli/commands/db.d.ts.map +1 -1
- package/dist/cli/commands/db.js +60 -48
- package/dist/cli/commands/db.js.map +1 -1
- package/dist/cli/commands/dev.d.ts +9 -0
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +96 -100
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/feedback.d.ts +23 -0
- package/dist/cli/commands/feedback.d.ts.map +1 -1
- package/dist/cli/commands/feedback.js +60 -73
- package/dist/cli/commands/feedback.js.map +1 -1
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +96 -107
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/launch.d.ts +11 -1
- package/dist/cli/commands/launch.d.ts.map +1 -1
- package/dist/cli/commands/launch.js +32 -36
- package/dist/cli/commands/launch.js.map +1 -1
- package/dist/cli/commands/login.d.ts +30 -0
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +71 -58
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/logs.d.ts +39 -0
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +121 -90
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/onboard.d.ts +1 -1
- package/dist/cli/commands/onboard.d.ts.map +1 -1
- package/dist/cli/commands/onboard.js +94 -41
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts +43 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -1
- package/dist/cli/commands/plugin.js +229 -211
- package/dist/cli/commands/plugin.js.map +1 -1
- package/dist/cli/commands/project.d.ts +27 -0
- package/dist/cli/commands/project.d.ts.map +1 -1
- package/dist/cli/commands/project.js +101 -85
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/push.d.ts +39 -0
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +152 -118
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/storage.d.ts +32 -0
- package/dist/cli/commands/storage.d.ts.map +1 -1
- package/dist/cli/commands/storage.js +180 -140
- package/dist/cli/commands/storage.js.map +1 -1
- package/dist/cli/commands/tunnel.d.ts +41 -0
- package/dist/cli/commands/tunnel.d.ts.map +1 -0
- package/dist/cli/commands/tunnel.js +210 -0
- package/dist/cli/commands/tunnel.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +15 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.js +82 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/index.js +35 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/cli-io-impl.d.ts +64 -0
- package/dist/cli/utils/cli-io-impl.d.ts.map +1 -0
- package/dist/cli/utils/cli-io-impl.js +521 -0
- package/dist/cli/utils/cli-io-impl.js.map +1 -0
- package/dist/cli/utils/cli-io.d.ts +350 -0
- package/dist/cli/utils/cli-io.d.ts.map +1 -0
- package/dist/cli/utils/cli-io.js +13 -0
- package/dist/cli/utils/cli-io.js.map +1 -0
- package/dist/cli/utils/config.d.ts +60 -2
- package/dist/cli/utils/config.d.ts.map +1 -1
- package/dist/cli/utils/config.js +158 -37
- package/dist/cli/utils/config.js.map +1 -1
- package/dist/cli/utils/project.d.ts +60 -0
- package/dist/cli/utils/project.d.ts.map +1 -1
- package/dist/cli/utils/project.js +112 -2
- package/dist/cli/utils/project.js.map +1 -1
- package/dist/cli/utils/prompt-new-project.d.ts +1 -1
- package/dist/cli/utils/prompt-new-project.d.ts.map +1 -1
- package/dist/cli/utils/registry.d.ts +2 -2
- package/dist/cli/utils/registry.d.ts.map +1 -1
- package/dist/cli/utils/registry.js +13 -3
- package/dist/cli/utils/registry.js.map +1 -1
- package/dist/runtime/log.d.ts.map +1 -1
- package/dist/runtime/log.js +8 -4
- package/dist/runtime/log.js.map +1 -1
- package/dist/runtime/storage.js +1 -1
- package/dist/runtime/storage.js.map +1 -1
- package/package.json +3 -2
- package/templates/default/CLAUDE.md +1 -0
- package/templates/default/skills/fling/.hash +1 -0
- package/templates/default/skills/fling/SKILL.md +12 -4
- /package/templates/default/skills/{discord/SKILL.md → fling/DISCORD.md} +0 -0
|
@@ -2,94 +2,107 @@
|
|
|
2
2
|
* fling login - Store API token for the Fling platform
|
|
3
3
|
*/
|
|
4
4
|
import { Command } from "commander";
|
|
5
|
-
import { createInterface } from "node:readline";
|
|
6
5
|
import { setToken, isLoggedIn, clearToken, setApiUrl, platformFetch } from "../utils/config.js";
|
|
6
|
+
import { consoleIO, processIO, createSimplePromptIO } from "../utils/cli-io-impl.js";
|
|
7
|
+
// ═══════════════════════════════════════════════════════
|
|
8
|
+
// DEFAULT IMPLEMENTATIONS
|
|
9
|
+
// ═══════════════════════════════════════════════════════
|
|
10
|
+
export function createDefaultLoginDeps() {
|
|
11
|
+
return {
|
|
12
|
+
console: consoleIO,
|
|
13
|
+
process: processIO,
|
|
14
|
+
user: createSimplePromptIO(processIO),
|
|
15
|
+
token: {
|
|
16
|
+
setToken,
|
|
17
|
+
clearToken,
|
|
18
|
+
setApiUrl,
|
|
19
|
+
},
|
|
20
|
+
isLoggedIn,
|
|
21
|
+
platformFetch,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export const defaultLoginDeps = createDefaultLoginDeps();
|
|
25
|
+
// ═══════════════════════════════════════════════════════
|
|
26
|
+
// CORE FUNCTIONS (with DI)
|
|
27
|
+
// ═══════════════════════════════════════════════════════
|
|
7
28
|
/**
|
|
8
|
-
*
|
|
29
|
+
* Run the login command.
|
|
30
|
+
* Exported for testing with injected dependencies.
|
|
9
31
|
*/
|
|
10
|
-
async function
|
|
11
|
-
const rl = createInterface({
|
|
12
|
-
input: process.stdin,
|
|
13
|
-
output: process.stdout,
|
|
14
|
-
});
|
|
15
|
-
return new Promise((resolve) => {
|
|
16
|
-
rl.question(question, (answer) => {
|
|
17
|
-
rl.close();
|
|
18
|
-
resolve(answer);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
export const loginCommand = new Command("login")
|
|
23
|
-
.description("Log in to the Fling platform with your API token")
|
|
24
|
-
.argument("[token]", "API token starting with 'usr_' (will prompt if not provided)")
|
|
25
|
-
.option("--api-url <url>", "Override API endpoint (internal/testing use only)")
|
|
26
|
-
.addHelpText("after", `
|
|
27
|
-
Getting your token:
|
|
28
|
-
Your API token is available in your Fling dashboard after registration.
|
|
29
|
-
Tokens start with 'usr_' (e.g., usr_abc123...).
|
|
30
|
-
|
|
31
|
-
What it does:
|
|
32
|
-
- Validates the token with the Fling platform
|
|
33
|
-
- Stores the token in ~/.fling/token for future commands
|
|
34
|
-
|
|
35
|
-
If you don't have an account yet:
|
|
36
|
-
fling register <invite-token>
|
|
37
|
-
|
|
38
|
-
Examples:
|
|
39
|
-
fling login Prompt for token interactively
|
|
40
|
-
fling login usr_abc123... Log in with token directly
|
|
41
|
-
`)
|
|
42
|
-
.action(async (tokenArg, options) => {
|
|
32
|
+
export async function runLogin(tokenArg, options, deps = defaultLoginDeps) {
|
|
43
33
|
// Check if already logged in
|
|
44
|
-
if (isLoggedIn()) {
|
|
45
|
-
const answer = await prompt("Already logged in. Replace existing token? (y/N) ");
|
|
34
|
+
if (deps.isLoggedIn()) {
|
|
35
|
+
const answer = await deps.user.prompt("Already logged in. Replace existing token? (y/N) ");
|
|
46
36
|
if (answer.toLowerCase() !== "y") {
|
|
47
|
-
console.log("Cancelled.");
|
|
37
|
+
deps.console.log("Cancelled.");
|
|
48
38
|
return;
|
|
49
39
|
}
|
|
50
|
-
clearToken();
|
|
40
|
+
deps.token.clearToken();
|
|
51
41
|
}
|
|
52
42
|
// Get token
|
|
53
|
-
const token = tokenArg ?? (await prompt("API token: "));
|
|
43
|
+
const token = tokenArg ?? (await deps.user.prompt("API token: "));
|
|
54
44
|
if (!token) {
|
|
55
|
-
console.error("Token is required.");
|
|
56
|
-
process.exit(1);
|
|
45
|
+
deps.console.error("Token is required.");
|
|
46
|
+
deps.process.exit(1);
|
|
57
47
|
}
|
|
58
48
|
// Validate token format
|
|
59
49
|
if (!token.startsWith("usr_")) {
|
|
60
|
-
console.error("Invalid token format. Token must start with 'usr_'.");
|
|
61
|
-
process.exit(1);
|
|
50
|
+
deps.console.error("Invalid token format. Token must start with 'usr_'.");
|
|
51
|
+
deps.process.exit(1);
|
|
62
52
|
}
|
|
63
53
|
// Set API URL if provided
|
|
64
54
|
if (options.apiUrl) {
|
|
65
|
-
setApiUrl(options.apiUrl);
|
|
55
|
+
deps.token.setApiUrl(options.apiUrl);
|
|
66
56
|
}
|
|
67
57
|
// Store token
|
|
68
|
-
setToken(token);
|
|
58
|
+
deps.token.setToken(token);
|
|
69
59
|
// Verify token by calling /me
|
|
70
|
-
console.log("Verifying token...");
|
|
60
|
+
deps.console.log("Verifying token...");
|
|
71
61
|
try {
|
|
72
|
-
const response = await platformFetch("/me");
|
|
62
|
+
const response = await deps.platformFetch("/me");
|
|
73
63
|
const data = (await response.json());
|
|
74
64
|
if (!response.ok) {
|
|
75
|
-
clearToken();
|
|
76
|
-
console.error(`Login failed: ${data.error ?? "Invalid token"}`);
|
|
77
|
-
process.exit(1);
|
|
65
|
+
deps.token.clearToken();
|
|
66
|
+
deps.console.error(`Login failed: ${data.error ?? "Invalid token"}`);
|
|
67
|
+
deps.process.exit(1);
|
|
78
68
|
}
|
|
79
69
|
const project = data.projects?.[0];
|
|
80
|
-
console.log(`\nLogged in as ${data.user?.name} (${data.user?.email})`);
|
|
70
|
+
deps.console.log(`\nLogged in as ${data.user?.name} (${data.user?.email})`);
|
|
81
71
|
if (project) {
|
|
82
|
-
console.log(`Project: ${project.slug}`);
|
|
83
|
-
console.log(`URL: ${project.url}`);
|
|
72
|
+
deps.console.log(`Project: ${project.slug}`);
|
|
73
|
+
deps.console.log(`URL: ${project.url}`);
|
|
84
74
|
}
|
|
85
75
|
else {
|
|
86
|
-
console.log("\nNo projects yet. Run 'fling push' to deploy your first project.");
|
|
76
|
+
deps.console.log("\nNo projects yet. Run 'fling push' to deploy your first project.");
|
|
87
77
|
}
|
|
88
78
|
}
|
|
89
79
|
catch (error) {
|
|
90
|
-
clearToken();
|
|
91
|
-
console.error(`Login failed: ${error instanceof Error ? error.message : "Network error"}`);
|
|
92
|
-
process.exit(1);
|
|
80
|
+
deps.token.clearToken();
|
|
81
|
+
deps.console.error(`Login failed: ${error instanceof Error ? error.message : "Network error"}`);
|
|
82
|
+
deps.process.exit(1);
|
|
93
83
|
}
|
|
84
|
+
}
|
|
85
|
+
export const loginCommand = new Command("login")
|
|
86
|
+
.description("Log in to the Fling platform with your API token")
|
|
87
|
+
.argument("[token]", "API token starting with 'usr_' (will prompt if not provided)")
|
|
88
|
+
.option("--api-url <url>", "Override API endpoint (internal/testing use only)")
|
|
89
|
+
.addHelpText("after", `
|
|
90
|
+
Getting your token:
|
|
91
|
+
Your API token is available in your Fling dashboard after registration.
|
|
92
|
+
Tokens start with 'usr_' (e.g., usr_abc123...).
|
|
93
|
+
|
|
94
|
+
What it does:
|
|
95
|
+
- Validates the token with the Fling platform
|
|
96
|
+
- Stores the token in ~/.fling/token for future commands
|
|
97
|
+
|
|
98
|
+
If you don't have an account yet:
|
|
99
|
+
fling register <invite-token>
|
|
100
|
+
|
|
101
|
+
Examples:
|
|
102
|
+
fling login Prompt for token interactively
|
|
103
|
+
fling login usr_abc123... Log in with token directly
|
|
104
|
+
`)
|
|
105
|
+
.action(async (tokenArg, options) => {
|
|
106
|
+
await runLogin(tokenArg, options);
|
|
94
107
|
});
|
|
95
108
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,5 +8,44 @@
|
|
|
8
8
|
* With --prod: deployed worker logs (requires login)
|
|
9
9
|
*/
|
|
10
10
|
import { Command } from "commander";
|
|
11
|
+
import { type PlatformFetchFn } from "../utils/config.js";
|
|
12
|
+
import { type TargetEnv } from "../utils/environment.js";
|
|
13
|
+
import { type ConsoleIO, type ProcessIO, type FileIO, type DatabaseIO } from "../utils/cli-io.js";
|
|
14
|
+
/**
|
|
15
|
+
* Timer operations.
|
|
16
|
+
*/
|
|
17
|
+
export interface LogsTimerIO {
|
|
18
|
+
setInterval(callback: () => void, ms: number): void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Combined dependencies for logs command.
|
|
22
|
+
*/
|
|
23
|
+
export interface LogsDeps {
|
|
24
|
+
console: ConsoleIO;
|
|
25
|
+
process: ProcessIO;
|
|
26
|
+
file: FileIO;
|
|
27
|
+
database: DatabaseIO;
|
|
28
|
+
timer: LogsTimerIO;
|
|
29
|
+
platformFetch: PlatformFetchFn;
|
|
30
|
+
getProjectName: (cwd?: string) => string;
|
|
31
|
+
getTargetEnv: (command: Command) => TargetEnv;
|
|
32
|
+
requireProdAuth: (env: TargetEnv) => void;
|
|
33
|
+
}
|
|
34
|
+
export declare const defaultLogsDeps: LogsDeps;
|
|
35
|
+
interface LogsOptions {
|
|
36
|
+
level?: string;
|
|
37
|
+
since?: string;
|
|
38
|
+
cron?: string;
|
|
39
|
+
follow?: boolean;
|
|
40
|
+
limit: string;
|
|
41
|
+
search?: string;
|
|
42
|
+
ray?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Run the logs command.
|
|
46
|
+
* Exported for testing with injected dependencies.
|
|
47
|
+
*/
|
|
48
|
+
export declare function runLogs(options: LogsOptions, command: Command, deps?: LogsDeps): Promise<void>;
|
|
11
49
|
export declare const logsCommand: Command;
|
|
50
|
+
export {};
|
|
12
51
|
//# sourceMappingURL=logs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAExF,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAQlG;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;IACnB,aAAa,EAAE,eAAe,CAAC;IAC/B,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC;IAC9C,eAAe,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;CAC3C;AAMD,eAAO,MAAM,eAAe,EAAE,QAc7B,CAAC;AAEF,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAiBD;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE,QAA0B,GAC/B,OAAO,CAAC,IAAI,CAAC,CAiIf;AAED,eAAO,MAAM,WAAW,SAuCpB,CAAC"}
|
|
@@ -8,71 +8,61 @@
|
|
|
8
8
|
* With --prod: deployed worker logs (requires login)
|
|
9
9
|
*/
|
|
10
10
|
import { Command } from "commander";
|
|
11
|
-
import Database from "better-sqlite3";
|
|
12
|
-
import { existsSync } from "node:fs";
|
|
13
11
|
import { join } from "node:path";
|
|
14
12
|
import { parseDuration } from "../utils/duration.js";
|
|
15
13
|
import { platformFetch } from "../utils/config.js";
|
|
16
14
|
import { getTargetEnv, requireProdAuth } from "../utils/environment.js";
|
|
17
15
|
import { getProjectName } from "../utils/project-name.js";
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
fling logs -f Follow local logs in real-time
|
|
47
|
-
fling logs -c daily-cleanup Logs from specific cron job
|
|
48
|
-
fling --prod logs Last 50 production logs
|
|
49
|
-
fling --prod logs --search payment Search for "payment" in prod logs
|
|
50
|
-
fling --prod logs -l error -s 2d Prod errors from last 2 days
|
|
51
|
-
fling --prod logs --ray abc12345 Logs from specific invocation
|
|
52
|
-
`)
|
|
53
|
-
.action(async (options, command) => {
|
|
54
|
-
const env = getTargetEnv(command);
|
|
16
|
+
import { consoleIO, processIO, databaseIO, fileIO } from "../utils/cli-io-impl.js";
|
|
17
|
+
// ═══════════════════════════════════════════════════════
|
|
18
|
+
// DEFAULT IMPLEMENTATIONS
|
|
19
|
+
// ═══════════════════════════════════════════════════════
|
|
20
|
+
export const defaultLogsDeps = {
|
|
21
|
+
console: consoleIO,
|
|
22
|
+
process: processIO,
|
|
23
|
+
file: fileIO,
|
|
24
|
+
database: databaseIO,
|
|
25
|
+
timer: {
|
|
26
|
+
setInterval: (callback, ms) => {
|
|
27
|
+
setInterval(callback, ms);
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
platformFetch,
|
|
31
|
+
getProjectName,
|
|
32
|
+
getTargetEnv,
|
|
33
|
+
requireProdAuth,
|
|
34
|
+
};
|
|
35
|
+
// ═══════════════════════════════════════════════════════
|
|
36
|
+
// CORE FUNCTIONS (with DI)
|
|
37
|
+
// ═══════════════════════════════════════════════════════
|
|
38
|
+
/**
|
|
39
|
+
* Run the logs command.
|
|
40
|
+
* Exported for testing with injected dependencies.
|
|
41
|
+
*/
|
|
42
|
+
export async function runLogs(options, command, deps = defaultLogsDeps) {
|
|
43
|
+
const env = deps.getTargetEnv(command);
|
|
55
44
|
// Handle deployed logs mode
|
|
56
45
|
if (env === "prod") {
|
|
57
|
-
requireProdAuth(env);
|
|
58
|
-
await queryDeployedLogs(options);
|
|
46
|
+
deps.requireProdAuth(env);
|
|
47
|
+
await queryDeployedLogs(options, deps);
|
|
59
48
|
return;
|
|
60
49
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
console.error("
|
|
64
|
-
|
|
50
|
+
const dbPath = join(deps.process.cwd(), ".fling", "data", "local.db");
|
|
51
|
+
if (!deps.file.exists(dbPath)) {
|
|
52
|
+
deps.console.error("No logs found. Database does not exist.");
|
|
53
|
+
deps.console.error("Run 'fling dev' to start the server and generate logs.");
|
|
54
|
+
deps.process.exit(1);
|
|
65
55
|
}
|
|
66
|
-
const db =
|
|
56
|
+
const db = deps.database.open(dbPath, { readonly: true });
|
|
67
57
|
// Check if logs table exists
|
|
68
58
|
const tableExists = db
|
|
69
59
|
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='_fling_logs'")
|
|
70
60
|
.get();
|
|
71
61
|
if (!tableExists) {
|
|
72
|
-
console.error("No logs found. The logs table does not exist yet.");
|
|
73
|
-
console.error("Run 'fling dev' to start the server and generate logs.");
|
|
62
|
+
deps.console.error("No logs found. The logs table does not exist yet.");
|
|
63
|
+
deps.console.error("Run 'fling dev' to start the server and generate logs.");
|
|
74
64
|
db.close();
|
|
75
|
-
process.exit(1);
|
|
65
|
+
deps.process.exit(1);
|
|
76
66
|
}
|
|
77
67
|
// Build query
|
|
78
68
|
const conditions = [];
|
|
@@ -80,8 +70,8 @@ Examples:
|
|
|
80
70
|
if (options.level) {
|
|
81
71
|
const validLevels = ["debug", "info", "warn", "error"];
|
|
82
72
|
if (!validLevels.includes(options.level)) {
|
|
83
|
-
console.error(`Invalid level: ${options.level}. Must be one of: ${validLevels.join(", ")}`);
|
|
84
|
-
process.exit(1);
|
|
73
|
+
deps.console.error(`Invalid level: ${options.level}. Must be one of: ${validLevels.join(", ")}`);
|
|
74
|
+
deps.process.exit(1);
|
|
85
75
|
}
|
|
86
76
|
conditions.push("level = ?");
|
|
87
77
|
params.push(options.level);
|
|
@@ -94,8 +84,8 @@ Examples:
|
|
|
94
84
|
params.push(sinceTime);
|
|
95
85
|
}
|
|
96
86
|
catch (error) {
|
|
97
|
-
console.error(error.message);
|
|
98
|
-
process.exit(1);
|
|
87
|
+
deps.console.error(error.message);
|
|
88
|
+
deps.process.exit(1);
|
|
99
89
|
}
|
|
100
90
|
}
|
|
101
91
|
if (options.cron) {
|
|
@@ -109,31 +99,31 @@ Examples:
|
|
|
109
99
|
let lastId = 0;
|
|
110
100
|
// Initial fetch
|
|
111
101
|
const initialQuery = `
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
102
|
+
SELECT * FROM _fling_logs
|
|
103
|
+
${whereClause}
|
|
104
|
+
ORDER BY id DESC
|
|
105
|
+
LIMIT ?
|
|
106
|
+
`;
|
|
117
107
|
const initialLogs = db
|
|
118
108
|
.prepare(initialQuery)
|
|
119
109
|
.all(...params, limit);
|
|
120
110
|
initialLogs.reverse().forEach((log) => {
|
|
121
|
-
printLog(log);
|
|
111
|
+
printLog(log, deps);
|
|
122
112
|
lastId = Math.max(lastId, log.id);
|
|
123
113
|
});
|
|
124
114
|
// Poll loop
|
|
125
115
|
const pollQuery = `
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
console.log("\nFollowing logs (Ctrl+C to stop)...\n");
|
|
131
|
-
setInterval(() => {
|
|
116
|
+
SELECT * FROM _fling_logs
|
|
117
|
+
${whereClause ? whereClause + " AND" : "WHERE"} id > ?
|
|
118
|
+
ORDER BY id ASC
|
|
119
|
+
`;
|
|
120
|
+
deps.console.log("\nFollowing logs (Ctrl+C to stop)...\n");
|
|
121
|
+
deps.timer.setInterval(() => {
|
|
132
122
|
const newLogs = db
|
|
133
123
|
.prepare(pollQuery)
|
|
134
124
|
.all(...params, lastId);
|
|
135
125
|
newLogs.forEach((log) => {
|
|
136
|
-
printLog(log);
|
|
126
|
+
printLog(log, deps);
|
|
137
127
|
lastId = Math.max(lastId, log.id);
|
|
138
128
|
});
|
|
139
129
|
}, 1000);
|
|
@@ -141,22 +131,61 @@ Examples:
|
|
|
141
131
|
else {
|
|
142
132
|
// One-shot mode
|
|
143
133
|
const query = `
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
134
|
+
SELECT * FROM _fling_logs
|
|
135
|
+
${whereClause}
|
|
136
|
+
ORDER BY timestamp DESC
|
|
137
|
+
LIMIT ?
|
|
138
|
+
`;
|
|
149
139
|
const logs = db.prepare(query).all(...params, limit);
|
|
150
140
|
if (logs.length === 0) {
|
|
151
|
-
console.log("No logs found matching the criteria.");
|
|
141
|
+
deps.console.log("No logs found matching the criteria.");
|
|
152
142
|
}
|
|
153
143
|
else {
|
|
154
|
-
logs.reverse().forEach(
|
|
144
|
+
logs.reverse().forEach((log) => {
|
|
145
|
+
printLog(log, deps);
|
|
146
|
+
});
|
|
155
147
|
}
|
|
156
148
|
db.close();
|
|
157
149
|
}
|
|
150
|
+
}
|
|
151
|
+
export const logsCommand = new Command("logs")
|
|
152
|
+
.description("View application logs (local or production)")
|
|
153
|
+
.option("-l, --level <level>", "Filter by log level (debug, info, warn, error)")
|
|
154
|
+
.option("-s, --since <duration>", "Show logs from last duration (e.g., 1h, 30m, 2d)")
|
|
155
|
+
.option("-c, --cron <name>", "Filter logs from specific cron job (local only)")
|
|
156
|
+
.option("-f, --follow", "Follow log output in real-time (local only)")
|
|
157
|
+
.option("-n, --limit <count>", "Number of logs to show", "50")
|
|
158
|
+
.option("--search <text>", "Full-text search in log messages (prod only)")
|
|
159
|
+
.option("--ray <id>", "Filter by Ray ID / invocation ID (prod only)")
|
|
160
|
+
.addHelpText("after", `
|
|
161
|
+
Environment:
|
|
162
|
+
By default, shows logs from local SQLite database.
|
|
163
|
+
Use --prod flag to fetch logs from deployed worker.
|
|
164
|
+
|
|
165
|
+
Duration format for --since:
|
|
166
|
+
1h = 1 hour, 30m = 30 minutes, 2d = 2 days
|
|
167
|
+
|
|
168
|
+
Feature availability:
|
|
169
|
+
Local only: --cron (filter by cron job), --follow (real-time)
|
|
170
|
+
Prod only: --search (full-text search), --ray (filter by invocation)
|
|
171
|
+
|
|
172
|
+
Examples:
|
|
173
|
+
fling logs Last 50 local logs
|
|
174
|
+
fling logs -n 100 Last 100 local logs
|
|
175
|
+
fling logs -l error Only error logs
|
|
176
|
+
fling logs -s 1h Logs from last hour
|
|
177
|
+
fling logs -l warn -s 30m Warnings from last 30 minutes
|
|
178
|
+
fling logs -f Follow local logs in real-time
|
|
179
|
+
fling logs -c daily-cleanup Logs from specific cron job
|
|
180
|
+
fling --prod logs Last 50 production logs
|
|
181
|
+
fling --prod logs --search payment Search for "payment" in prod logs
|
|
182
|
+
fling --prod logs -l error -s 2d Prod errors from last 2 days
|
|
183
|
+
fling --prod logs --ray abc12345 Logs from specific invocation
|
|
184
|
+
`)
|
|
185
|
+
.action(async (options, command) => {
|
|
186
|
+
await runLogs(options, command);
|
|
158
187
|
});
|
|
159
|
-
function printLog(entry) {
|
|
188
|
+
function printLog(entry, deps) {
|
|
160
189
|
const levelColors = {
|
|
161
190
|
debug: "\x1b[90m", // gray
|
|
162
191
|
info: "\x1b[36m", // cyan
|
|
@@ -184,13 +213,13 @@ function printLog(entry) {
|
|
|
184
213
|
output += ` ${entry.data}`;
|
|
185
214
|
}
|
|
186
215
|
}
|
|
187
|
-
console.log(output);
|
|
216
|
+
deps.console.log(output);
|
|
188
217
|
}
|
|
189
218
|
/**
|
|
190
219
|
* Query logs from the deployed worker via the platform API.
|
|
191
220
|
* Auth is checked by requireProdAuth before this is called.
|
|
192
221
|
*/
|
|
193
|
-
async function queryDeployedLogs(options) {
|
|
222
|
+
async function queryDeployedLogs(options, deps) {
|
|
194
223
|
// Build query params
|
|
195
224
|
const params = new URLSearchParams();
|
|
196
225
|
if (options.since) {
|
|
@@ -199,8 +228,8 @@ async function queryDeployedLogs(options) {
|
|
|
199
228
|
if (options.level) {
|
|
200
229
|
const validLevels = ["debug", "info", "warn", "error"];
|
|
201
230
|
if (!validLevels.includes(options.level)) {
|
|
202
|
-
console.error(`Invalid level: ${options.level}. Must be one of: ${validLevels.join(", ")}`);
|
|
203
|
-
process.exit(1);
|
|
231
|
+
deps.console.error(`Invalid level: ${options.level}. Must be one of: ${validLevels.join(", ")}`);
|
|
232
|
+
deps.process.exit(1);
|
|
204
233
|
}
|
|
205
234
|
params.set("level", options.level);
|
|
206
235
|
}
|
|
@@ -214,39 +243,41 @@ async function queryDeployedLogs(options) {
|
|
|
214
243
|
params.set("limit", options.limit);
|
|
215
244
|
}
|
|
216
245
|
try {
|
|
217
|
-
const projectName = getProjectName();
|
|
246
|
+
const projectName = deps.getProjectName();
|
|
218
247
|
const queryString = params.toString();
|
|
219
248
|
const path = `/project/${encodeURIComponent(projectName)}/logs${queryString ? `?${queryString}` : ""}`;
|
|
220
|
-
const response = await platformFetch(path);
|
|
249
|
+
const response = await deps.platformFetch(path);
|
|
221
250
|
const data = (await response.json());
|
|
222
251
|
if (!response.ok) {
|
|
223
|
-
console.error(`Failed to fetch logs: ${data.error ?? "Unknown error"}`);
|
|
224
|
-
process.exit(1);
|
|
252
|
+
deps.console.error(`Failed to fetch logs: ${data.error ?? "Unknown error"}`);
|
|
253
|
+
deps.process.exit(1);
|
|
225
254
|
}
|
|
226
255
|
if (data.error) {
|
|
227
|
-
console.error(`Warning: ${data.error}`);
|
|
256
|
+
deps.console.error(`Warning: ${data.error}`);
|
|
228
257
|
}
|
|
229
258
|
if (data.logs.length === 0) {
|
|
230
|
-
console.log("No logs found matching the criteria.");
|
|
259
|
+
deps.console.log("No logs found matching the criteria.");
|
|
231
260
|
if (!options.since) {
|
|
232
|
-
console.log("Tip: Logs are retained for 3 days (free) or 7 days (paid).");
|
|
261
|
+
deps.console.log("Tip: Logs are retained for 3 days (free) or 7 days (paid).");
|
|
233
262
|
}
|
|
234
263
|
return;
|
|
235
264
|
}
|
|
236
265
|
// Sort logs by timestamp (oldest first) and print
|
|
237
266
|
data.logs
|
|
238
267
|
.sort((a, b) => a.timestamp - b.timestamp)
|
|
239
|
-
.forEach(
|
|
268
|
+
.forEach((log) => {
|
|
269
|
+
printDeployedLog(log, deps);
|
|
270
|
+
});
|
|
240
271
|
}
|
|
241
272
|
catch (error) {
|
|
242
|
-
console.error(
|
|
243
|
-
process.exit(1);
|
|
273
|
+
deps.console.error(`Error fetching logs: ${error.message}`);
|
|
274
|
+
deps.process.exit(1);
|
|
244
275
|
}
|
|
245
276
|
}
|
|
246
277
|
/**
|
|
247
278
|
* Print a deployed log entry with colors.
|
|
248
279
|
*/
|
|
249
|
-
function printDeployedLog(entry) {
|
|
280
|
+
function printDeployedLog(entry, deps) {
|
|
250
281
|
const levelColors = {
|
|
251
282
|
debug: "\x1b[90m", // gray
|
|
252
283
|
info: "\x1b[36m", // cyan
|
|
@@ -263,6 +294,6 @@ function printDeployedLog(entry) {
|
|
|
263
294
|
if (entry.rayId) {
|
|
264
295
|
output += ` ${dim}[ray:${entry.rayId}]${reset}`;
|
|
265
296
|
}
|
|
266
|
-
console.log(output);
|
|
297
|
+
deps.console.log(output);
|
|
267
298
|
}
|
|
268
299
|
//# sourceMappingURL=logs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* fling onboard - Interactive onboarding for first-time users
|
|
3
3
|
*/
|
|
4
4
|
import { Command } from "commander";
|
|
5
|
-
import type { OnboardingIO } from "../utils/
|
|
5
|
+
import type { OnboardingIO } from "../utils/cli-io.js";
|
|
6
6
|
/**
|
|
7
7
|
* Result from the onboarding flow.
|
|
8
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/onboard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/onboard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4SD,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AA4EhB;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAG5B;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,EAAE,GAAE,YAAkC,EACtC,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAmF3B;AAED,eAAO,MAAM,cAAc,SA0BvB,CAAC"}
|