flingit 0.0.40 → 0.0.41
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/dist/cli/commands/auth-shared.d.ts +63 -0
- package/dist/cli/commands/auth-shared.d.ts.map +1 -0
- package/dist/cli/commands/auth-shared.js +60 -0
- package/dist/cli/commands/auth-shared.js.map +1 -0
- package/dist/cli/commands/feedback.d.ts.map +1 -1
- package/dist/cli/commands/feedback.js +2 -1
- package/dist/cli/commands/feedback.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +13 -10
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/login.d.ts +59 -16
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +191 -58
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/onboard.js +4 -4
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts.map +1 -1
- package/dist/cli/commands/plugin.js +2 -1
- package/dist/cli/commands/plugin.js.map +1 -1
- package/dist/cli/commands/project.d.ts.map +1 -1
- package/dist/cli/commands/project.js +4 -3
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +2 -4
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/signup.d.ts +59 -0
- package/dist/cli/commands/signup.d.ts.map +1 -0
- package/dist/cli/commands/signup.js +140 -0
- package/dist/cli/commands/signup.js.map +1 -0
- package/dist/cli/commands/tunnel.d.ts.map +1 -1
- package/dist/cli/commands/tunnel.js +2 -1
- package/dist/cli/commands/tunnel.js.map +1 -1
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +2 -1
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/commands/whoami.d.ts.map +1 -1
- package/dist/cli/commands/whoami.js +2 -1
- package/dist/cli/commands/whoami.js.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/config.d.ts.map +1 -1
- package/dist/cli/utils/config.js +3 -2
- package/dist/cli/utils/config.js.map +1 -1
- package/dist/cli/utils/environment.d.ts.map +1 -1
- package/dist/cli/utils/environment.js +3 -2
- package/dist/cli/utils/environment.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +4 -4
- package/templates/default/CLAUDE.md +1 -1
- package/templates/default/dot-claude/skills/fling/.hash +1 -1
- package/templates/default/dot-claude/skills/fling/SKILL.md +22 -3
- package/dist/cli/commands/register.d.ts +0 -68
- package/dist/cli/commands/register.d.ts.map +0 -1
- package/dist/cli/commands/register.js +0 -157
- package/dist/cli/commands/register.js.map +0 -1
|
@@ -16,8 +16,9 @@ function defaultGetTargetEnv(command) {
|
|
|
16
16
|
function defaultRequireProdAuth(env) {
|
|
17
17
|
if (env === "prod" && !isLoggedIn()) {
|
|
18
18
|
console.error("Error: Not logged in - cannot access production environment.\n");
|
|
19
|
-
console.error("To
|
|
20
|
-
console.error(" fling login
|
|
19
|
+
console.error("To authenticate, run:");
|
|
20
|
+
console.error(" fling login Log in with an existing account");
|
|
21
|
+
console.error(" fling signup Create a new account\n");
|
|
21
22
|
console.error("To work with local environment instead, remove the --prod flag.");
|
|
22
23
|
process.exit(1);
|
|
23
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/cli/utils/environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACvC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,GAAc;IAC5C,IAAI,GAAG,KAAK,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/cli/utils/environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IACvC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,GAAc;IAC5C,IAAI,GAAG,KAAK,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAClF,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,IAAI,iBAAiB,GAAoC,mBAAmB,CAAC;AAC7E,IAAI,oBAAoB,GAA6B,sBAAsB,CAAC;AAE5E;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAc;IAC5C,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,EAAmC;IACjE,iBAAiB,GAAG,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAA4B;IAC7D,oBAAoB,GAAG,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,iBAAiB,GAAG,mBAAmB,CAAC;IACxC,oBAAoB,GAAG,sBAAsB,CAAC;AAChD,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flingit",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.0.41",
|
|
4
|
+
"description": "Small Software Platform - Build and deploy personal tools through conversation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=22.0.0"
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"croner": "^9.1.0",
|
|
77
77
|
"dotenv": "^17.2.3",
|
|
78
78
|
"esbuild": "^0.27.2",
|
|
79
|
-
"hono": "^4.
|
|
79
|
+
"hono": "^4.12.1",
|
|
80
80
|
"postal-mime": "^2.7.3",
|
|
81
81
|
"tsx": "^4.19.0",
|
|
82
82
|
"zod": "^3.25.76"
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
},
|
|
97
97
|
"keywords": [
|
|
98
98
|
"fling",
|
|
99
|
-
"
|
|
99
|
+
"small-software",
|
|
100
100
|
"platform",
|
|
101
101
|
"cloudflare",
|
|
102
102
|
"workers"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Fling Project
|
|
2
2
|
|
|
3
|
-
This is a Fling project - a
|
|
3
|
+
This is a Fling project - a Small Software platform for building and deploying personal tools with a React frontend, API backend, SQL database, storage, and more.
|
|
4
4
|
|
|
5
5
|
Read the `fling` skill in detail!
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
a5c510aa9c9c55f3cc1185b32e2f3894
|
|
@@ -5,7 +5,7 @@ description: Building and deploying this app easily to the internet. Use when th
|
|
|
5
5
|
|
|
6
6
|
# Fling
|
|
7
7
|
|
|
8
|
-
You are working on a Fling project - a
|
|
8
|
+
You are working on a Fling project - a Small Software platform for building and deploying personal tools with a React frontend and Hono API backend.
|
|
9
9
|
|
|
10
10
|
## IMPORTANT: Do NOT ask about deployment, hosting, or technology choices!
|
|
11
11
|
|
|
@@ -238,9 +238,27 @@ Slugs must be:
|
|
|
238
238
|
- Lowercase alphanumeric with optional hyphens
|
|
239
239
|
- Globally unique across all Fling projects
|
|
240
240
|
|
|
241
|
+
### Authentication
|
|
242
|
+
|
|
243
|
+
If the user isn't logged in (no token stored), help them authenticate:
|
|
244
|
+
|
|
245
|
+
**New user:** Sign up with email and name:
|
|
246
|
+
```bash
|
|
247
|
+
npm exec fling -- --cli signup --email user@example.com --name "User Name"
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Existing user:** Log in via magic link email:
|
|
251
|
+
```bash
|
|
252
|
+
npm exec fling -- --cli login --email user@example.com
|
|
253
|
+
```
|
|
254
|
+
After running login, tell the user to check their email and click the login link.
|
|
255
|
+
The CLI will wait until the link is clicked, then complete login automatically.
|
|
256
|
+
|
|
257
|
+
If the user prefers, they can run `fling signup` or `fling login` interactively themselves.
|
|
258
|
+
|
|
241
259
|
### Email Verification
|
|
242
260
|
|
|
243
|
-
After
|
|
261
|
+
After signing up, you must verify your email to deploy.
|
|
244
262
|
If `fling push` fails with "Email verification required":
|
|
245
263
|
|
|
246
264
|
1. Run `fling verify` to check verification status
|
|
@@ -374,5 +392,6 @@ When the fling CLI mentions that there is a new version available, strongly sugg
|
|
|
374
392
|
|
|
375
393
|
```bash
|
|
376
394
|
npm install flingit@latest
|
|
377
|
-
npm exec upgrade
|
|
395
|
+
npm exec fling upgrade # to upgrade this skill if needed
|
|
396
|
+
|
|
378
397
|
```
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* fling register - Create a new account using an invite token
|
|
3
|
-
*/
|
|
4
|
-
import { Command } from "commander";
|
|
5
|
-
import type { ConsoleIO, ProcessIO, SimplePromptIO } from "../utils/cli-io.js";
|
|
6
|
-
interface RegisterOptions {
|
|
7
|
-
apiUrl?: string;
|
|
8
|
-
email?: string;
|
|
9
|
-
name?: string;
|
|
10
|
-
}
|
|
11
|
-
interface RegisterResult {
|
|
12
|
-
id?: string;
|
|
13
|
-
name?: string;
|
|
14
|
-
email?: string;
|
|
15
|
-
token?: string;
|
|
16
|
-
project?: {
|
|
17
|
-
slug: string;
|
|
18
|
-
url: string;
|
|
19
|
-
};
|
|
20
|
-
error?: string;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Combined dependencies for register command.
|
|
24
|
-
*/
|
|
25
|
-
export interface RegisterDeps {
|
|
26
|
-
console: ConsoleIO;
|
|
27
|
-
process: ProcessIO;
|
|
28
|
-
user: SimplePromptIO;
|
|
29
|
-
isLoggedIn: () => boolean;
|
|
30
|
-
getApiUrl: () => string;
|
|
31
|
-
setApiUrl: (url: string) => void;
|
|
32
|
-
setToken: (token: string) => void;
|
|
33
|
-
normalizeInviteToken: (token: string) => string;
|
|
34
|
-
validateEmail: (raw: string) => {
|
|
35
|
-
valid: true;
|
|
36
|
-
email: string;
|
|
37
|
-
} | {
|
|
38
|
-
valid: false;
|
|
39
|
-
error: string;
|
|
40
|
-
};
|
|
41
|
-
registerUser: (apiUrl: string, inviteToken: string, email: string, name: string) => Promise<{
|
|
42
|
-
ok: boolean;
|
|
43
|
-
data: RegisterResult;
|
|
44
|
-
}>;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Register a new user account.
|
|
48
|
-
*
|
|
49
|
-
* @param apiUrl - API base URL
|
|
50
|
-
* @param inviteToken - Invite token with inv_ prefix
|
|
51
|
-
* @param email - User's email address
|
|
52
|
-
* @param name - User's display name
|
|
53
|
-
* @param fetchFn - Optional fetch function for dependency injection (defaults to global fetch)
|
|
54
|
-
*/
|
|
55
|
-
export declare function registerUser(apiUrl: string, inviteToken: string, email: string, name: string, fetchFn?: typeof fetch): Promise<{
|
|
56
|
-
ok: boolean;
|
|
57
|
-
data: RegisterResult;
|
|
58
|
-
}>;
|
|
59
|
-
export declare function createDefaultRegisterDeps(): RegisterDeps;
|
|
60
|
-
export declare const defaultRegisterDeps: RegisterDeps;
|
|
61
|
-
/**
|
|
62
|
-
* Run the register command.
|
|
63
|
-
* Exported for testing with injected dependencies.
|
|
64
|
-
*/
|
|
65
|
-
export declare function runRegister(inviteTokenArg: string | undefined, options: RegisterOptions, deps?: RegisterDeps): Promise<void>;
|
|
66
|
-
export declare const registerCommand: Command;
|
|
67
|
-
export {};
|
|
68
|
-
//# sourceMappingURL=register.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAO/E,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,cAAc;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAChD,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACjG,YAAY,EAAE,CACZ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;CACrD;AAMD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAYhD;AAMD,wBAAgB,yBAAyB,IAAI,YAAY,CAaxD;AAED,eAAO,MAAM,mBAAmB,cAA8B,CAAC;AAM/D;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,OAAO,EAAE,eAAe,EACxB,IAAI,GAAE,YAAkC,GACvC,OAAO,CAAC,IAAI,CAAC,CA4Ef;AAMD,eAAO,MAAM,eAAe,SA8BxB,CAAC"}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* fling register - Create a new account using an invite token
|
|
3
|
-
*/
|
|
4
|
-
import { Command } from "commander";
|
|
5
|
-
import { setToken, isLoggedIn, getApiUrl, setApiUrl } from "../utils/config.js";
|
|
6
|
-
import { normalizeInviteToken } from "../utils/token.js";
|
|
7
|
-
import { validateEmail } from "../utils/email.js";
|
|
8
|
-
import { consoleIO, processIO, createSimplePromptIO } from "../utils/cli-io-impl.js";
|
|
9
|
-
// ═══════════════════════════════════════════════════════
|
|
10
|
-
// CORE FUNCTIONS
|
|
11
|
-
// ═══════════════════════════════════════════════════════
|
|
12
|
-
/**
|
|
13
|
-
* Register a new user account.
|
|
14
|
-
*
|
|
15
|
-
* @param apiUrl - API base URL
|
|
16
|
-
* @param inviteToken - Invite token with inv_ prefix
|
|
17
|
-
* @param email - User's email address
|
|
18
|
-
* @param name - User's display name
|
|
19
|
-
* @param fetchFn - Optional fetch function for dependency injection (defaults to global fetch)
|
|
20
|
-
*/
|
|
21
|
-
export async function registerUser(apiUrl, inviteToken, email, name, fetchFn = fetch) {
|
|
22
|
-
const response = await fetchFn(`${apiUrl}/me`, {
|
|
23
|
-
method: "POST",
|
|
24
|
-
headers: {
|
|
25
|
-
"Authorization": `Bearer ${inviteToken}`,
|
|
26
|
-
"Content-Type": "application/json",
|
|
27
|
-
},
|
|
28
|
-
body: JSON.stringify({ email, name }),
|
|
29
|
-
});
|
|
30
|
-
const data = (await response.json());
|
|
31
|
-
return { ok: response.ok, data };
|
|
32
|
-
}
|
|
33
|
-
// ═══════════════════════════════════════════════════════
|
|
34
|
-
// DEFAULT IMPLEMENTATIONS
|
|
35
|
-
// ═══════════════════════════════════════════════════════
|
|
36
|
-
export function createDefaultRegisterDeps() {
|
|
37
|
-
return {
|
|
38
|
-
console: consoleIO,
|
|
39
|
-
process: processIO,
|
|
40
|
-
user: createSimplePromptIO(processIO),
|
|
41
|
-
isLoggedIn,
|
|
42
|
-
getApiUrl,
|
|
43
|
-
setApiUrl,
|
|
44
|
-
setToken,
|
|
45
|
-
normalizeInviteToken,
|
|
46
|
-
validateEmail,
|
|
47
|
-
registerUser,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
export const defaultRegisterDeps = createDefaultRegisterDeps();
|
|
51
|
-
// ═══════════════════════════════════════════════════════
|
|
52
|
-
// RUN FUNCTION (with DI)
|
|
53
|
-
// ═══════════════════════════════════════════════════════
|
|
54
|
-
/**
|
|
55
|
-
* Run the register command.
|
|
56
|
-
* Exported for testing with injected dependencies.
|
|
57
|
-
*/
|
|
58
|
-
export async function runRegister(inviteTokenArg, options, deps = defaultRegisterDeps) {
|
|
59
|
-
// Check if already logged in
|
|
60
|
-
if (deps.isLoggedIn()) {
|
|
61
|
-
deps.console.error("Already logged in. Use 'fling logout' first.");
|
|
62
|
-
deps.process.exit(1);
|
|
63
|
-
}
|
|
64
|
-
// Set API URL if provided
|
|
65
|
-
if (options.apiUrl) {
|
|
66
|
-
deps.setApiUrl(options.apiUrl);
|
|
67
|
-
}
|
|
68
|
-
// Get invite token
|
|
69
|
-
const inviteToken = inviteTokenArg ?? (await deps.user.prompt("Invite token: "));
|
|
70
|
-
if (!inviteToken) {
|
|
71
|
-
deps.console.error("Invite token is required.");
|
|
72
|
-
deps.process.exit(1);
|
|
73
|
-
}
|
|
74
|
-
// Normalize token format - auto-prepend inv_ if missing
|
|
75
|
-
const normalizedToken = deps.normalizeInviteToken(inviteToken);
|
|
76
|
-
// Get user details (from options or interactive prompt)
|
|
77
|
-
const rawEmail = options.email ?? (await deps.user.prompt("Email: "));
|
|
78
|
-
const emailResult = deps.validateEmail(rawEmail);
|
|
79
|
-
if (!emailResult.valid) {
|
|
80
|
-
deps.console.error(emailResult.error);
|
|
81
|
-
deps.process.exit(1);
|
|
82
|
-
}
|
|
83
|
-
const email = emailResult.email;
|
|
84
|
-
const name = options.name ?? (await deps.user.prompt("Name: "));
|
|
85
|
-
if (!name) {
|
|
86
|
-
deps.console.error("Name is required.");
|
|
87
|
-
deps.process.exit(1);
|
|
88
|
-
}
|
|
89
|
-
// Register via API (slug is auto-generated by the server)
|
|
90
|
-
deps.console.log("\nRegistering...");
|
|
91
|
-
try {
|
|
92
|
-
const { ok, data } = await deps.registerUser(deps.getApiUrl(), normalizedToken, email, name);
|
|
93
|
-
if (!ok) {
|
|
94
|
-
deps.console.error(`Registration failed: ${data.error ?? "Unknown error"}`);
|
|
95
|
-
deps.process.exit(1);
|
|
96
|
-
}
|
|
97
|
-
if (!data.token) {
|
|
98
|
-
deps.console.error("Registration failed: No token returned");
|
|
99
|
-
deps.process.exit(1);
|
|
100
|
-
}
|
|
101
|
-
// Store the user token
|
|
102
|
-
deps.setToken(data.token);
|
|
103
|
-
// Welcome message
|
|
104
|
-
deps.console.log(`\nWelcome to Fling, ${data.name}!`);
|
|
105
|
-
deps.console.log(`Email: ${data.email}`);
|
|
106
|
-
if (data.project) {
|
|
107
|
-
deps.console.log(`Project: ${data.project.slug}`);
|
|
108
|
-
deps.console.log(`URL: ${data.project.url}`);
|
|
109
|
-
}
|
|
110
|
-
deps.console.log("");
|
|
111
|
-
deps.console.log(`A verification email has been sent to ${data.email}.`);
|
|
112
|
-
deps.console.log(`Please click the link to verify your account within 24 hours.`);
|
|
113
|
-
deps.console.log(`\nRun 'fling init' to create your first app.`);
|
|
114
|
-
if (data.project) {
|
|
115
|
-
deps.console.log(`\nTip: To customize your URL, run: fling project slug:set my-custom-slug`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
deps.console.error(`Registration failed: ${error instanceof Error ? error.message : "Network error"}`);
|
|
120
|
-
deps.process.exit(1);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
// ═══════════════════════════════════════════════════════
|
|
124
|
-
// COMMAND
|
|
125
|
-
// ═══════════════════════════════════════════════════════
|
|
126
|
-
export const registerCommand = new Command("register")
|
|
127
|
-
.description("Create a new Fling account using an invite token")
|
|
128
|
-
.argument("[invite-token]", "Invite token (inv_ prefix optional, will prompt if not provided)")
|
|
129
|
-
.option("--api-url <url>", "Override API endpoint (internal/testing use only)")
|
|
130
|
-
.option("--email <email>", "Email address (for CI/scripts, skips prompt)")
|
|
131
|
-
.option("--name <name>", "Display name (for CI/scripts, skips prompt)")
|
|
132
|
-
.addHelpText("after", `
|
|
133
|
-
Getting an invite token:
|
|
134
|
-
Invite tokens are distributed by Fling administrators.
|
|
135
|
-
The 'inv_' prefix is optional - you can enter just the token value.
|
|
136
|
-
|
|
137
|
-
What it does:
|
|
138
|
-
- Creates a new Fling account with your email and name
|
|
139
|
-
- Creates your first project with an auto-generated slug (e.g. proj-abc123)
|
|
140
|
-
- Logs you in automatically (stores token in ~/.config/fling/token)
|
|
141
|
-
|
|
142
|
-
Non-interactive mode (for CI/scripts):
|
|
143
|
-
Provide --email and --name to skip all prompts.
|
|
144
|
-
|
|
145
|
-
Customizing your project URL:
|
|
146
|
-
Your project gets an auto-generated slug like proj-abc123.
|
|
147
|
-
To change it after registration: fling project slug:set my-custom-slug
|
|
148
|
-
|
|
149
|
-
Examples:
|
|
150
|
-
fling register Interactive registration
|
|
151
|
-
fling register xyz789... Provide invite token (inv_ prefix optional)
|
|
152
|
-
fling register xyz789... --email me@example.com --name "My Name"
|
|
153
|
-
`)
|
|
154
|
-
.action(async (inviteTokenArg, options) => {
|
|
155
|
-
await runRegister(inviteTokenArg, options);
|
|
156
|
-
});
|
|
157
|
-
//# sourceMappingURL=register.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"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"}
|