flingit 0.0.5 → 0.0.7
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 +18 -21
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +7 -2
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/onboard.d.ts +11 -3
- package/dist/cli/commands/onboard.d.ts.map +1 -1
- package/dist/cli/commands/onboard.js +148 -51
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/tun.d.ts +13 -0
- package/dist/cli/commands/tun.d.ts.map +1 -0
- package/dist/cli/commands/tun.js +188 -0
- package/dist/cli/commands/tun.js.map +1 -0
- package/dist/cli/deploy/bundler.d.ts.map +1 -1
- package/dist/cli/deploy/bundler.js +1 -0
- package/dist/cli/deploy/bundler.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/loaders/register-wasm.d.ts +12 -0
- package/dist/cli/loaders/register-wasm.d.ts.map +1 -0
- package/dist/cli/loaders/register-wasm.js +19 -0
- package/dist/cli/loaders/register-wasm.js.map +1 -0
- package/dist/cli/loaders/wasm-hooks.d.ts +54 -0
- package/dist/cli/loaders/wasm-hooks.d.ts.map +1 -0
- package/dist/cli/loaders/wasm-hooks.js +56 -0
- package/dist/cli/loaders/wasm-hooks.js.map +1 -0
- package/dist/cli/utils/onboarding-io-impl.d.ts +12 -0
- package/dist/cli/utils/onboarding-io-impl.d.ts.map +1 -0
- package/dist/cli/utils/onboarding-io-impl.js +85 -0
- package/dist/cli/utils/onboarding-io-impl.js.map +1 -0
- package/dist/cli/utils/onboarding-io.d.ts +60 -0
- package/dist/cli/utils/onboarding-io.d.ts.map +1 -0
- package/dist/cli/utils/onboarding-io.js +9 -0
- package/dist/cli/utils/onboarding-io.js.map +1 -0
- package/package.json +2 -1
- package/templates/default/skills/fling/SKILL.md +15 -0
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
## What is Fling?
|
|
8
8
|
|
|
9
|
-
Fling
|
|
9
|
+
Fling is the fastest way from Claude Code to deployed software.
|
|
10
10
|
|
|
11
11
|
> "I want a podcast feed that picks randomly between Hard Fork and The Daily each day, and gives me one episode per day."
|
|
12
12
|
|
|
@@ -24,26 +24,9 @@ That's it. This creates a project at `~/fling`, sets up the environment, and ope
|
|
|
24
24
|
|
|
25
25
|
Requires Node.js 22 or later.
|
|
26
26
|
|
|
27
|
-
### Global Install (Optional)
|
|
28
|
-
|
|
29
|
-
If you prefer a global command:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
npm install -g flingit
|
|
33
|
-
fling
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### Returning to Your Project
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
npx flingit
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Opens Claude Code in your existing project. Continue where you left off.
|
|
43
|
-
|
|
44
27
|
## How It Works
|
|
45
28
|
|
|
46
|
-
Fling provides four primitives that Claude uses to build your tools:
|
|
29
|
+
Fling provides four primitives (more to come) that Claude uses to build your tools:
|
|
47
30
|
|
|
48
31
|
| Primitive | What it does |
|
|
49
32
|
|-----------|--------------|
|
|
@@ -52,7 +35,7 @@ Fling provides four primitives that Claude uses to build your tools:
|
|
|
52
35
|
| **Database** | Store and query data (SQLite) |
|
|
53
36
|
| **Secrets** | Manage API keys and credentials |
|
|
54
37
|
|
|
55
|
-
Everything works locally during development. When you're ready,
|
|
38
|
+
Everything works locally during development. When you're ready, just tell Claude Code to deploys to production.
|
|
56
39
|
|
|
57
40
|
## Design Philosophy
|
|
58
41
|
|
|
@@ -60,10 +43,20 @@ Everything works locally during development. When you're ready, `fling push` dep
|
|
|
60
43
|
|
|
61
44
|
2. **Standard tools over custom abstractions** — Hono for HTTP, SQLite for data, standard cron syntax. Claude already knows these.
|
|
62
45
|
|
|
63
|
-
3. **Local-first development** — Everything works
|
|
46
|
+
3. **Local-first development** — Everything works and can be tested locally.
|
|
64
47
|
|
|
65
48
|
4. **Fail fast** — Missing secrets throw. Invalid syntax throws. Obvious errors help Claude debug.
|
|
66
49
|
|
|
50
|
+
## Running Fling From Source
|
|
51
|
+
|
|
52
|
+
To run fling from this repo, just do
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm run cli
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
That's the equivalent of running `npx flingit`. It will also do the onboarding flow and create a Fling project, but the `flingit` dependency there will point to your local package instead of the public package on NPM.
|
|
59
|
+
|
|
67
60
|
## Publishing
|
|
68
61
|
|
|
69
62
|
The package is published to npm as `flingit`. The `prepublishOnly` script runs lint, typecheck, build, and tests automatically.
|
|
@@ -82,4 +75,8 @@ npm pack --dry-run
|
|
|
82
75
|
|
|
83
76
|
- [ARCHITECTURE.md](./ARCHITECTURE.md) — How Fling works internally (CLI commands, runtime API, platform)
|
|
84
77
|
- [API.md](./API.md) — Platform HTTP API reference
|
|
78
|
+
- [DEPLOYMENT.md](./DEPLOYMENT.md) — How the Fling platform deploys
|
|
79
|
+
- [SCRIPTS.md](./SCRIPTS.md) — All the scripts in this repo
|
|
80
|
+
- [CLI.md](./CLI.md) — All the commands provided by the CLI
|
|
81
|
+
- [SMOKE-TEST.md](./SMOKE-TEST.md) — What the smoke-test tests
|
|
85
82
|
- [SPEC.md](./SPEC.md) — Original product specification
|
|
@@ -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;AA+BpC,eAAO,MAAM,WAAW,SAkKpB,CAAC"}
|
|
@@ -23,6 +23,7 @@ export const logsCommand = new Command("logs")
|
|
|
23
23
|
.option("-f, --follow", "Follow log output in real-time (local only)")
|
|
24
24
|
.option("-n, --limit <count>", "Number of logs to show", "50")
|
|
25
25
|
.option("--search <text>", "Full-text search in log messages (prod only)")
|
|
26
|
+
.option("--ray <id>", "Filter by Ray ID / invocation ID (prod only)")
|
|
26
27
|
.addHelpText("after", `
|
|
27
28
|
Environment:
|
|
28
29
|
By default, shows logs from local SQLite database.
|
|
@@ -33,7 +34,7 @@ Duration format for --since:
|
|
|
33
34
|
|
|
34
35
|
Feature availability:
|
|
35
36
|
Local only: --cron (filter by cron job), --follow (real-time)
|
|
36
|
-
Prod only: --search (full-text search)
|
|
37
|
+
Prod only: --search (full-text search), --ray (filter by invocation)
|
|
37
38
|
|
|
38
39
|
Examples:
|
|
39
40
|
fling logs Last 50 local logs
|
|
@@ -46,6 +47,7 @@ Examples:
|
|
|
46
47
|
fling --prod logs Last 50 production logs
|
|
47
48
|
fling --prod logs --search payment Search for "payment" in prod logs
|
|
48
49
|
fling --prod logs -l error -s 2d Prod errors from last 2 days
|
|
50
|
+
fling --prod logs --ray abc12345 Logs from specific invocation
|
|
49
51
|
`)
|
|
50
52
|
.action(async (options, command) => {
|
|
51
53
|
const env = getTargetEnv(command);
|
|
@@ -204,6 +206,9 @@ async function queryDeployedLogs(options) {
|
|
|
204
206
|
if (options.search) {
|
|
205
207
|
params.set("search", options.search);
|
|
206
208
|
}
|
|
209
|
+
if (options.ray) {
|
|
210
|
+
params.set("rayId", options.ray);
|
|
211
|
+
}
|
|
207
212
|
if (options.limit) {
|
|
208
213
|
params.set("limit", options.limit);
|
|
209
214
|
}
|
|
@@ -254,7 +259,7 @@ function printDeployedLog(entry) {
|
|
|
254
259
|
const timestamp = new Date(entry.timestamp).toISOString();
|
|
255
260
|
let output = `${dim}${timestamp}${reset} ${color}${levelPadded}${reset} ${entry.message}`;
|
|
256
261
|
if (entry.rayId) {
|
|
257
|
-
output += ` ${dim}[ray:${entry.rayId
|
|
262
|
+
output += ` ${dim}[ray:${entry.rayId}]${reset}`;
|
|
258
263
|
}
|
|
259
264
|
console.log(output);
|
|
260
265
|
}
|
|
@@ -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,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +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/onboarding-io.js";
|
|
5
6
|
/**
|
|
6
7
|
* Result from the onboarding flow.
|
|
7
8
|
*/
|
|
@@ -9,9 +10,18 @@ export interface OnboardingResult {
|
|
|
9
10
|
authenticated: boolean;
|
|
10
11
|
setupProject: boolean;
|
|
11
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* Options for running onboarding (mostly for testing).
|
|
15
|
+
*/
|
|
16
|
+
export interface OnboardingOptions {
|
|
17
|
+
apiUrl?: string;
|
|
18
|
+
configDir?: string;
|
|
19
|
+
flingHome?: string;
|
|
20
|
+
}
|
|
12
21
|
export type CredentialResult = "authenticated" | "skipped" | "failed" | "cancelled";
|
|
13
22
|
/**
|
|
14
23
|
* Prompt the user to authenticate.
|
|
24
|
+
* This is the public API that creates its own context using defaults.
|
|
15
25
|
*/
|
|
16
26
|
export declare function promptCredentials(options?: {
|
|
17
27
|
message?: string;
|
|
@@ -22,8 +32,6 @@ export declare function promptCredentials(options?: {
|
|
|
22
32
|
* This can be called programmatically (from launch.ts) or via the command.
|
|
23
33
|
* Returns whether the user authenticated and whether to set up the default project.
|
|
24
34
|
*/
|
|
25
|
-
export declare function runOnboarding(options?:
|
|
26
|
-
apiUrl?: string;
|
|
27
|
-
}): Promise<OnboardingResult>;
|
|
35
|
+
export declare function runOnboarding(io?: OnboardingIO, options?: OnboardingOptions): Promise<OnboardingResult>;
|
|
28
36
|
export declare const onboardCommand: Command;
|
|
29
37
|
//# sourceMappingURL=onboard.d.ts.map
|
|
@@ -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;
|
|
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,2BAA2B,CAAC;AAK9D;;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;AAgOD,MAAM,MAAM,gBAAgB,GACxB,eAAe,GACf,SAAS,GACT,QAAQ,GACR,WAAW,CAAC;AAuEhB;;;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,CAiF3B;AAED,eAAO,MAAM,cAAc,SA0BvB,CAAC"}
|
|
@@ -2,15 +2,73 @@
|
|
|
2
2
|
* fling onboard - Interactive onboarding for first-time users
|
|
3
3
|
*/
|
|
4
4
|
import { Command } from "commander";
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { homedir } from "node:os";
|
|
7
7
|
import { normalizeInviteToken } from "../utils/token.js";
|
|
8
|
+
import { defaultOnboardingIO } from "../utils/onboarding-io-impl.js";
|
|
9
|
+
const DEFAULT_API_URL = "https://api.justdeployit.dev";
|
|
10
|
+
/**
|
|
11
|
+
* Create the onboarding context from options.
|
|
12
|
+
*/
|
|
13
|
+
function createContext(io, options) {
|
|
14
|
+
const configDir = options?.configDir ?? join(homedir(), ".fling");
|
|
15
|
+
const tokenFile = join(configDir, "token");
|
|
16
|
+
const apiUrlFile = join(configDir, "api-url");
|
|
17
|
+
const flingHome = options?.flingHome ?? join(homedir(), "fling");
|
|
18
|
+
return {
|
|
19
|
+
io,
|
|
20
|
+
paths: { tokenFile, apiUrlFile, configDir, flingHome },
|
|
21
|
+
getApiUrl() {
|
|
22
|
+
const envUrl = process.env["FLING_API_URL"];
|
|
23
|
+
if (envUrl)
|
|
24
|
+
return envUrl;
|
|
25
|
+
if (options?.apiUrl)
|
|
26
|
+
return options.apiUrl;
|
|
27
|
+
const stored = io.file.read(apiUrlFile);
|
|
28
|
+
if (stored)
|
|
29
|
+
return stored;
|
|
30
|
+
return DEFAULT_API_URL;
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if user is logged in (token file exists and is non-empty).
|
|
36
|
+
*/
|
|
37
|
+
function isLoggedIn(ctx) {
|
|
38
|
+
const token = ctx.io.file.read(ctx.paths.tokenFile);
|
|
39
|
+
return token !== null && token.length > 0;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Save the auth token.
|
|
43
|
+
*/
|
|
44
|
+
function setToken(ctx, token) {
|
|
45
|
+
if (!ctx.io.file.exists(ctx.paths.configDir)) {
|
|
46
|
+
ctx.io.file.mkdir(ctx.paths.configDir);
|
|
47
|
+
}
|
|
48
|
+
ctx.io.file.write(ctx.paths.tokenFile, token, 0o600);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Save the API URL override.
|
|
52
|
+
*/
|
|
53
|
+
function setApiUrl(ctx, url) {
|
|
54
|
+
if (!ctx.io.file.exists(ctx.paths.configDir)) {
|
|
55
|
+
ctx.io.file.mkdir(ctx.paths.configDir);
|
|
56
|
+
}
|
|
57
|
+
ctx.io.file.write(ctx.paths.apiUrlFile, url);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if a directory is a Fling project root.
|
|
61
|
+
*/
|
|
62
|
+
function isFlingProject(ctx, dir) {
|
|
63
|
+
return ctx.io.file.exists(join(dir, ".claude", "skills", "fling"));
|
|
64
|
+
}
|
|
8
65
|
/**
|
|
9
66
|
* Handle the API token login flow.
|
|
10
67
|
* Returns true if authentication succeeded, or the symbol if cancelled.
|
|
11
68
|
*/
|
|
12
|
-
async function handleApiTokenFlow() {
|
|
13
|
-
const
|
|
69
|
+
async function handleApiTokenFlow(ctx) {
|
|
70
|
+
const { io } = ctx;
|
|
71
|
+
const token = await io.user.password({
|
|
14
72
|
message: "Paste your token",
|
|
15
73
|
validate: (value) => {
|
|
16
74
|
if (!value)
|
|
@@ -20,30 +78,31 @@ async function handleApiTokenFlow() {
|
|
|
20
78
|
return undefined;
|
|
21
79
|
},
|
|
22
80
|
});
|
|
23
|
-
if (
|
|
81
|
+
if (io.user.isCancel(token))
|
|
24
82
|
return token;
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
// Verify token by calling /me
|
|
28
|
-
const s = p.spinner();
|
|
83
|
+
// Verify token by calling /me (don't save until verification succeeds)
|
|
84
|
+
const s = io.user.spinner();
|
|
29
85
|
s.start("Verifying token...");
|
|
30
86
|
try {
|
|
31
|
-
const
|
|
87
|
+
const apiUrl = ctx.getApiUrl();
|
|
88
|
+
const response = await io.network.fetch(`${apiUrl}/me`, {
|
|
89
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
90
|
+
});
|
|
32
91
|
const data = (await response.json());
|
|
33
92
|
if (!response.ok) {
|
|
34
|
-
clearToken();
|
|
35
93
|
s.stop(`Login failed: ${data.error ?? "Invalid token"}`, 1);
|
|
36
94
|
return false;
|
|
37
95
|
}
|
|
96
|
+
// Only save token after successful verification
|
|
97
|
+
setToken(ctx, token);
|
|
38
98
|
const project = data.projects?.[0];
|
|
39
99
|
s.stop(`Logged in as ${data.user?.name} (${data.user?.email})`);
|
|
40
100
|
if (project) {
|
|
41
|
-
|
|
101
|
+
io.user.log.info(`Project: ${project.slug}\n URL: ${project.url}`);
|
|
42
102
|
}
|
|
43
103
|
return true;
|
|
44
104
|
}
|
|
45
105
|
catch (error) {
|
|
46
|
-
clearToken();
|
|
47
106
|
s.stop(`Login failed: ${error instanceof Error ? error.message : "Network error"}`, 1);
|
|
48
107
|
return false;
|
|
49
108
|
}
|
|
@@ -52,8 +111,9 @@ async function handleApiTokenFlow() {
|
|
|
52
111
|
* Handle the invite token registration flow.
|
|
53
112
|
* Returns true if registration succeeded, or the symbol if cancelled.
|
|
54
113
|
*/
|
|
55
|
-
async function handleInviteFlow() {
|
|
56
|
-
const
|
|
114
|
+
async function handleInviteFlow(ctx) {
|
|
115
|
+
const { io } = ctx;
|
|
116
|
+
const inviteTokenRaw = await io.user.text({
|
|
57
117
|
message: "Paste your token",
|
|
58
118
|
placeholder: "inv_...",
|
|
59
119
|
validate: (value) => {
|
|
@@ -62,10 +122,10 @@ async function handleInviteFlow() {
|
|
|
62
122
|
return undefined;
|
|
63
123
|
},
|
|
64
124
|
});
|
|
65
|
-
if (
|
|
125
|
+
if (io.user.isCancel(inviteTokenRaw))
|
|
66
126
|
return inviteTokenRaw;
|
|
67
127
|
const inviteToken = normalizeInviteToken(inviteTokenRaw);
|
|
68
|
-
const email = await
|
|
128
|
+
const email = await io.user.text({
|
|
69
129
|
message: "Email",
|
|
70
130
|
validate: (value) => {
|
|
71
131
|
if (!value)
|
|
@@ -73,9 +133,9 @@ async function handleInviteFlow() {
|
|
|
73
133
|
return undefined;
|
|
74
134
|
},
|
|
75
135
|
});
|
|
76
|
-
if (
|
|
136
|
+
if (io.user.isCancel(email))
|
|
77
137
|
return email;
|
|
78
|
-
const name = await
|
|
138
|
+
const name = await io.user.text({
|
|
79
139
|
message: "Name",
|
|
80
140
|
validate: (value) => {
|
|
81
141
|
if (!value)
|
|
@@ -83,13 +143,14 @@ async function handleInviteFlow() {
|
|
|
83
143
|
return undefined;
|
|
84
144
|
},
|
|
85
145
|
});
|
|
86
|
-
if (
|
|
146
|
+
if (io.user.isCancel(name))
|
|
87
147
|
return name;
|
|
88
148
|
// Register via API
|
|
89
|
-
const s =
|
|
149
|
+
const s = io.user.spinner();
|
|
90
150
|
s.start("Registering...");
|
|
91
151
|
try {
|
|
92
|
-
const
|
|
152
|
+
const apiUrl = ctx.getApiUrl();
|
|
153
|
+
const response = await io.network.fetch(`${apiUrl}/me`, {
|
|
93
154
|
method: "POST",
|
|
94
155
|
headers: {
|
|
95
156
|
Authorization: `Bearer ${inviteToken}`,
|
|
@@ -107,7 +168,7 @@ async function handleInviteFlow() {
|
|
|
107
168
|
return false;
|
|
108
169
|
}
|
|
109
170
|
// Store the user token
|
|
110
|
-
setToken(data.token);
|
|
171
|
+
setToken(ctx, data.token);
|
|
111
172
|
s.stop(`Welcome to Fling, ${data.name}!`);
|
|
112
173
|
return true;
|
|
113
174
|
}
|
|
@@ -117,22 +178,27 @@ async function handleInviteFlow() {
|
|
|
117
178
|
}
|
|
118
179
|
}
|
|
119
180
|
/**
|
|
120
|
-
*
|
|
181
|
+
* Internal version of promptCredentials that uses context.
|
|
121
182
|
*/
|
|
122
|
-
|
|
183
|
+
async function promptCredentialsInternal(ctx, options) {
|
|
184
|
+
const { io } = ctx;
|
|
123
185
|
let step = "credential-choice";
|
|
124
186
|
for (;;) {
|
|
125
187
|
switch (step) {
|
|
126
188
|
case "credential-choice": {
|
|
127
|
-
const choice = await
|
|
189
|
+
const choice = await io.user.select({
|
|
128
190
|
message: options?.message ?? "Would you like to connect your Fling account?",
|
|
129
191
|
options: [
|
|
130
192
|
{ value: "invite", label: "I have an invite link/token" },
|
|
131
193
|
{ value: "api-token", label: "I have an API token" },
|
|
132
|
-
{
|
|
194
|
+
{
|
|
195
|
+
value: "skip",
|
|
196
|
+
label: "Skip for now",
|
|
197
|
+
hint: "local development only",
|
|
198
|
+
},
|
|
133
199
|
],
|
|
134
200
|
});
|
|
135
|
-
if (
|
|
201
|
+
if (io.user.isCancel(choice)) {
|
|
136
202
|
return "cancelled";
|
|
137
203
|
}
|
|
138
204
|
if (choice === "invite") {
|
|
@@ -147,8 +213,8 @@ export async function promptCredentials(options) {
|
|
|
147
213
|
break;
|
|
148
214
|
}
|
|
149
215
|
case "api-token": {
|
|
150
|
-
const result = await handleApiTokenFlow();
|
|
151
|
-
if (
|
|
216
|
+
const result = await handleApiTokenFlow(ctx);
|
|
217
|
+
if (io.user.isCancel(result)) {
|
|
152
218
|
step = "credential-choice";
|
|
153
219
|
}
|
|
154
220
|
else if (!result) {
|
|
@@ -160,8 +226,8 @@ export async function promptCredentials(options) {
|
|
|
160
226
|
break;
|
|
161
227
|
}
|
|
162
228
|
case "invite-flow": {
|
|
163
|
-
const result = await handleInviteFlow();
|
|
164
|
-
if (
|
|
229
|
+
const result = await handleInviteFlow(ctx);
|
|
230
|
+
if (io.user.isCancel(result)) {
|
|
165
231
|
step = "credential-choice";
|
|
166
232
|
}
|
|
167
233
|
else if (!result) {
|
|
@@ -175,53 +241,84 @@ export async function promptCredentials(options) {
|
|
|
175
241
|
}
|
|
176
242
|
}
|
|
177
243
|
}
|
|
244
|
+
/**
|
|
245
|
+
* Prompt the user to authenticate.
|
|
246
|
+
* This is the public API that creates its own context using defaults.
|
|
247
|
+
*/
|
|
248
|
+
export async function promptCredentials(options) {
|
|
249
|
+
const ctx = createContext(defaultOnboardingIO);
|
|
250
|
+
return promptCredentialsInternal(ctx, options);
|
|
251
|
+
}
|
|
178
252
|
/**
|
|
179
253
|
* Run the interactive onboarding flow.
|
|
180
254
|
*
|
|
181
255
|
* This can be called programmatically (from launch.ts) or via the command.
|
|
182
256
|
* Returns whether the user authenticated and whether to set up the default project.
|
|
183
257
|
*/
|
|
184
|
-
export async function runOnboarding(options) {
|
|
258
|
+
export async function runOnboarding(io = defaultOnboardingIO, options) {
|
|
259
|
+
const ctx = createContext(io, options);
|
|
185
260
|
// Set API URL if provided
|
|
186
261
|
if (options?.apiUrl) {
|
|
187
|
-
setApiUrl(options.apiUrl);
|
|
262
|
+
setApiUrl(ctx, options.apiUrl);
|
|
188
263
|
}
|
|
189
|
-
|
|
264
|
+
io.user.intro("Welcome to Fling!");
|
|
190
265
|
// Check if already logged in
|
|
191
|
-
|
|
192
|
-
|
|
266
|
+
const wasLoggedIn = isLoggedIn(ctx);
|
|
267
|
+
if (wasLoggedIn) {
|
|
268
|
+
const replace = await io.user.confirm({
|
|
193
269
|
message: "You're already logged in. Replace existing token?",
|
|
194
270
|
initialValue: false,
|
|
195
271
|
});
|
|
196
|
-
if (
|
|
197
|
-
|
|
272
|
+
if (io.user.isCancel(replace) || !replace) {
|
|
273
|
+
io.user.outro("Keeping existing credentials.");
|
|
198
274
|
return { authenticated: true, setupProject: true };
|
|
199
275
|
}
|
|
200
|
-
|
|
276
|
+
// Don't clear the old token yet - keep it until new auth succeeds.
|
|
277
|
+
// This way if new auth fails, the user still has their old credentials.
|
|
201
278
|
}
|
|
202
|
-
const credResult = await
|
|
279
|
+
const credResult = await promptCredentialsInternal(ctx, {
|
|
280
|
+
message: "How would you like to onboard?",
|
|
281
|
+
});
|
|
203
282
|
if (credResult === "cancelled" || credResult === "failed") {
|
|
204
|
-
|
|
283
|
+
io.user.cancel("Onboarding cancelled.");
|
|
205
284
|
return { authenticated: false, setupProject: false };
|
|
206
285
|
}
|
|
207
286
|
if (credResult === "skipped") {
|
|
208
|
-
|
|
209
|
-
|
|
287
|
+
io.user.log.info("No problem! You can still use Fling for local development.");
|
|
288
|
+
io.user.log.message("To deploy later, run:\n" +
|
|
210
289
|
" fling onboard - Interactive setup\n" +
|
|
211
290
|
" fling login <token> - If you have an API token\n" +
|
|
212
291
|
" fling register <inv> - If you have an invite link");
|
|
213
292
|
}
|
|
214
293
|
const authenticated = credResult === "authenticated";
|
|
215
|
-
//
|
|
216
|
-
const
|
|
294
|
+
// Check if ~/fling already exists
|
|
295
|
+
const flingHome = ctx.paths.flingHome;
|
|
296
|
+
if (io.file.exists(flingHome)) {
|
|
297
|
+
if (isFlingProject(ctx, flingHome)) {
|
|
298
|
+
// ~/fling exists and is a Fling project - skip creation and launch Claude Code there
|
|
299
|
+
io.user.outro("Opening your existing Fling project at ~/fling");
|
|
300
|
+
return { authenticated, setupProject: true };
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
// ~/fling exists but is not a Fling project - explain and finish
|
|
304
|
+
io.user.log.warn("~/fling exists but is not a Fling project.");
|
|
305
|
+
io.user.log.message("To create a Fling project elsewhere, run:\n" +
|
|
306
|
+
" mkdir ~/my-project && cd ~/my-project\n" +
|
|
307
|
+
" fling init");
|
|
308
|
+
io.user.outro("Onboarding complete.");
|
|
309
|
+
return { authenticated, setupProject: false };
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
// ~/fling doesn't exist - ask about project directory
|
|
313
|
+
const setupProject = await io.user.confirm({
|
|
217
314
|
message: "Create your Fling project at ~/fling?",
|
|
218
315
|
initialValue: true,
|
|
219
316
|
});
|
|
220
|
-
if (
|
|
221
|
-
|
|
317
|
+
if (io.user.isCancel(setupProject)) {
|
|
318
|
+
io.user.cancel("Onboarding cancelled.");
|
|
222
319
|
return { authenticated, setupProject: false };
|
|
223
320
|
}
|
|
224
|
-
|
|
321
|
+
io.user.outro("You're all set!");
|
|
225
322
|
return { authenticated, setupProject };
|
|
226
323
|
}
|
|
227
324
|
export const onboardCommand = new Command("onboard")
|
|
@@ -245,7 +342,7 @@ Alternatives:
|
|
|
245
342
|
Examples:
|
|
246
343
|
fling onboard Start interactive setup
|
|
247
344
|
`)
|
|
248
|
-
.action(async (
|
|
249
|
-
await runOnboarding(
|
|
345
|
+
.action(async (opts) => {
|
|
346
|
+
await runOnboarding(defaultOnboardingIO, opts.apiUrl ? { apiUrl: opts.apiUrl } : undefined);
|
|
250
347
|
});
|
|
251
348
|
//# sourceMappingURL=onboard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../../src/cli/commands/onboard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../../src/cli/commands/onboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fling tun - Expose local development server via Cloudflare Tunnel
|
|
3
|
+
*
|
|
4
|
+
* Uses cloudflared (Cloudflare's tunnel daemon) for high-performance,
|
|
5
|
+
* concurrent request handling. The platform provisions tunnel credentials
|
|
6
|
+
* and DNS records; the CLI runs cloudflared with the provided token.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* fling tun 3000 # Tunnel localhost:3000
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from "commander";
|
|
12
|
+
export declare const tunCommand: Command;
|
|
13
|
+
//# sourceMappingURL=tun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tun.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,UAAU,SAyFnB,CAAC"}
|