hacklab 0.0.2 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -3
- package/bin/ddd +19 -0
- package/dist/commands/brag.d.ts +3 -6
- package/dist/commands/brag.d.ts.map +1 -1
- package/dist/commands/brag.js +68 -299
- package/dist/commands/brag.js.map +1 -1
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +48 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/drop.d.ts +2 -0
- package/dist/commands/drop.d.ts.map +1 -0
- package/dist/commands/drop.js +29 -0
- package/dist/commands/drop.js.map +1 -0
- package/dist/commands/exam.d.ts +5 -0
- package/dist/commands/exam.d.ts.map +1 -0
- package/dist/commands/exam.js +224 -0
- package/dist/commands/exam.js.map +1 -0
- package/dist/commands/join.d.ts +10 -9
- package/dist/commands/join.d.ts.map +1 -1
- package/dist/commands/join.js +213 -285
- package/dist/commands/join.js.map +1 -1
- package/dist/commands/login.d.ts +1 -15
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +69 -133
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/scan-profile.d.ts +33 -0
- package/dist/commands/scan-profile.d.ts.map +1 -0
- package/dist/commands/scan-profile.js +279 -0
- package/dist/commands/scan-profile.js.map +1 -0
- package/dist/commands/sync.d.ts +2 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +55 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/whoami.d.ts +1 -3
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +10 -37
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +18 -0
- package/dist/config.js.map +1 -0
- package/dist/dd.d.ts +3 -0
- package/dist/dd.d.ts.map +1 -0
- package/dist/dd.js +28 -0
- package/dist/dd.js.map +1 -0
- package/dist/index.js +117 -112
- package/dist/index.js.map +1 -1
- package/dist/project-brag.d.ts +58 -0
- package/dist/project-brag.d.ts.map +1 -0
- package/dist/project-brag.js +270 -0
- package/dist/project-brag.js.map +1 -0
- package/dist/scanners/index.d.ts +24 -0
- package/dist/scanners/index.d.ts.map +1 -0
- package/dist/scanners/index.js +543 -0
- package/dist/scanners/index.js.map +1 -0
- package/dist/scanners/util.d.ts +83 -0
- package/dist/scanners/util.d.ts.map +1 -0
- package/dist/scanners/util.js +129 -0
- package/dist/scanners/util.js.map +1 -0
- package/dist/session.d.ts +17 -13
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +46 -155
- package/dist/session.js.map +1 -1
- package/dist/share-card.d.ts +29 -0
- package/dist/share-card.d.ts.map +1 -0
- package/dist/share-card.js +401 -0
- package/dist/share-card.js.map +1 -0
- package/dist/sync.d.ts +64 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +805 -0
- package/dist/sync.js.map +1 -0
- package/dist/ui.d.ts +10 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +21 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils/openBrowser.js.map +1 -1
- package/package.json +36 -29
- package/dist/api/client.d.ts +0 -150
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.js +0 -246
- package/dist/api/client.js.map +0 -1
- package/dist/commands/admin-waitlist.d.ts +0 -12
- package/dist/commands/admin-waitlist.d.ts.map +0 -1
- package/dist/commands/admin-waitlist.js +0 -96
- package/dist/commands/admin-waitlist.js.map +0 -1
- package/dist/commands/brag.utils.d.ts +0 -12
- package/dist/commands/brag.utils.d.ts.map +0 -1
- package/dist/commands/brag.utils.js +0 -43
- package/dist/commands/brag.utils.js.map +0 -1
- package/dist/commands/essay.d.ts +0 -18
- package/dist/commands/essay.d.ts.map +0 -1
- package/dist/commands/essay.js +0 -117
- package/dist/commands/essay.js.map +0 -1
- package/dist/commands/explore.d.ts +0 -9
- package/dist/commands/explore.d.ts.map +0 -1
- package/dist/commands/explore.js +0 -32
- package/dist/commands/explore.js.map +0 -1
- package/dist/commands/init.d.ts +0 -16
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -237
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/link.d.ts +0 -17
- package/dist/commands/link.d.ts.map +0 -1
- package/dist/commands/link.js +0 -36
- package/dist/commands/link.js.map +0 -1
- package/dist/commands/login.utils.d.ts +0 -3
- package/dist/commands/login.utils.d.ts.map +0 -1
- package/dist/commands/login.utils.js +0 -13
- package/dist/commands/login.utils.js.map +0 -1
- package/dist/commands/new.d.ts +0 -15
- package/dist/commands/new.d.ts.map +0 -1
- package/dist/commands/new.js +0 -172
- package/dist/commands/new.js.map +0 -1
- package/dist/commands/new.utils.d.ts +0 -7
- package/dist/commands/new.utils.d.ts.map +0 -1
- package/dist/commands/new.utils.js +0 -50
- package/dist/commands/new.utils.js.map +0 -1
- package/dist/commands/onboard.d.ts +0 -10
- package/dist/commands/onboard.d.ts.map +0 -1
- package/dist/commands/onboard.js +0 -93
- package/dist/commands/onboard.js.map +0 -1
- package/dist/commands/publish.d.ts +0 -8
- package/dist/commands/publish.d.ts.map +0 -1
- package/dist/commands/publish.js +0 -47
- package/dist/commands/publish.js.map +0 -1
- package/dist/commands/tui.d.ts +0 -12
- package/dist/commands/tui.d.ts.map +0 -1
- package/dist/commands/tui.js +0 -112
- package/dist/commands/tui.js.map +0 -1
- package/dist/help-format.d.ts +0 -4
- package/dist/help-format.d.ts.map +0 -1
- package/dist/help-format.js +0 -30
- package/dist/help-format.js.map +0 -1
- package/dist/lab/config.d.ts +0 -32
- package/dist/lab/config.d.ts.map +0 -1
- package/dist/lab/config.js +0 -148
- package/dist/lab/config.js.map +0 -1
- package/dist/lab/contentStatus.d.ts +0 -6
- package/dist/lab/contentStatus.d.ts.map +0 -1
- package/dist/lab/contentStatus.js +0 -19
- package/dist/lab/contentStatus.js.map +0 -1
- package/dist/ui/banner.d.ts +0 -2
- package/dist/ui/banner.d.ts.map +0 -1
- package/dist/ui/banner.js +0 -22
- package/dist/ui/banner.js.map +0 -1
- package/dist/utils/findRepoRoot.d.ts +0 -2
- package/dist/utils/findRepoRoot.d.ts.map +0 -1
- package/dist/utils/findRepoRoot.js +0 -17
- package/dist/utils/findRepoRoot.js.map +0 -1
- package/dist/utils/pathExists.d.ts +0 -2
- package/dist/utils/pathExists.d.ts.map +0 -1
- package/dist/utils/pathExists.js +0 -11
- package/dist/utils/pathExists.js.map +0 -1
package/dist/commands/join.js
CHANGED
|
@@ -1,314 +1,242 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
import { formatTokens, scanAllTools, } from '../scanners/index.js';
|
|
3
|
+
import { getAppUrl, loadSession } from '../session.js';
|
|
4
|
+
import { bold, dim, info } from '../ui.js';
|
|
5
|
+
import { login } from './login.js';
|
|
6
|
+
const TOOL_LABELS = {
|
|
7
|
+
claude_code: 'Claude Code',
|
|
8
|
+
codex: 'Codex',
|
|
9
|
+
cursor: 'Cursor',
|
|
10
|
+
openclaw: 'OpenClaw',
|
|
11
|
+
hermes: 'Hermes',
|
|
12
|
+
opencode: 'OpenCode',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* The hero command: the guided join ritual.
|
|
16
|
+
*
|
|
17
|
+
* scan → anonymous rank → pick username + fields → GitHub OAuth → claim
|
|
18
|
+
*
|
|
19
|
+
* Value (rank) is shown before any account exists; GitHub auth comes last.
|
|
20
|
+
* Each stage degrades on its own terms (see the per-stage handling below) so a
|
|
21
|
+
* network blip on the vanity rank never blocks the actual join.
|
|
22
|
+
*/
|
|
23
|
+
export async function join() {
|
|
24
|
+
clack.intro(bold('hacklab'));
|
|
25
|
+
const appUrl = getAppUrl();
|
|
26
|
+
// ── Stage 1: scan ────────────────────────────────────────────────────────
|
|
27
|
+
const spin = clack.spinner();
|
|
28
|
+
spin.start('scanning local AI tool usage');
|
|
29
|
+
let scan;
|
|
30
|
+
try {
|
|
31
|
+
scan = await scanAllTools();
|
|
25
32
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return currentDirectory;
|
|
33
|
+
catch (err) {
|
|
34
|
+
spin.stop('scan failed');
|
|
35
|
+
clack.cancel(`couldn't read local AI usage: ${err instanceof Error ? err.message : String(err)}`);
|
|
36
|
+
process.exit(1);
|
|
31
37
|
}
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
spin.stop('scan complete');
|
|
39
|
+
for (const [tool, total] of Object.entries(scan.toolTotals)) {
|
|
40
|
+
if (total > 0) {
|
|
41
|
+
info(`${(TOOL_LABELS[tool] ?? tool).padEnd(12)} ${formatTokens(total)} tokens`);
|
|
42
|
+
}
|
|
34
43
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
return pickDefaultBaseLocation(currentDirectory, homeDirectory, hasHomeGhDirectory);
|
|
43
|
-
}
|
|
44
|
-
async function promptForLabLocation(initialLocation) {
|
|
45
|
-
let selectedLocation = initialLocation;
|
|
46
|
-
while (true) {
|
|
47
|
-
const action = await select({
|
|
48
|
-
message: `create hq in ${selectedLocation}?`,
|
|
49
|
-
options: [
|
|
50
|
-
{
|
|
51
|
-
value: 'continue',
|
|
52
|
-
label: 'yes, continue',
|
|
53
|
-
},
|
|
54
|
-
{
|
|
55
|
-
value: 'change',
|
|
56
|
-
label: 'change location',
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
value: 'exit',
|
|
60
|
-
label: 'exit',
|
|
61
|
-
},
|
|
62
|
-
],
|
|
44
|
+
info(bold(`total: ${formatTokens(scan.grandTotal)} tokens`));
|
|
45
|
+
// Empty-scan branch: no hard floor gate, but nothing to rank — let the user
|
|
46
|
+
// decide whether to continue.
|
|
47
|
+
if (scan.grandTotal <= 0) {
|
|
48
|
+
const cont = await clack.confirm({
|
|
49
|
+
message: 'No AI token usage found on this machine. Sign up anyway? (you can sync usage later)',
|
|
50
|
+
initialValue: false,
|
|
63
51
|
});
|
|
64
|
-
if (isCancel(
|
|
65
|
-
|
|
66
|
-
process.exit(
|
|
52
|
+
if (clack.isCancel(cont) || !cont) {
|
|
53
|
+
clack.outro(dim('come back after some Claude Code / Codex / Cursor sessions.'));
|
|
54
|
+
process.exit(0);
|
|
67
55
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const pathInput = await text({
|
|
76
|
-
message: 'new location',
|
|
77
|
-
placeholder: selectedLocation,
|
|
56
|
+
}
|
|
57
|
+
// ── Stage 2: anonymous rank (best-effort; never blocks the join) ──────────
|
|
58
|
+
try {
|
|
59
|
+
const res = await fetch(`${appUrl}/api/rank/preview`, {
|
|
60
|
+
method: 'POST',
|
|
61
|
+
headers: { 'Content-Type': 'application/json' },
|
|
62
|
+
body: JSON.stringify({ totalTokens: scan.grandTotal }),
|
|
78
63
|
});
|
|
79
|
-
if (
|
|
80
|
-
|
|
81
|
-
|
|
64
|
+
if (res.ok) {
|
|
65
|
+
const { rank, ofTotal } = (await res.json());
|
|
66
|
+
clack.note(`${bold(`you'd be #${rank}`)} of ${ofTotal} hackers`, 'your rank');
|
|
82
67
|
}
|
|
83
|
-
selectedLocation = resolveWizardLocation(String(pathInput), selectedLocation);
|
|
84
68
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
69
|
+
catch {
|
|
70
|
+
// Rank is a hook, not a gate. Skip silently and continue the join.
|
|
71
|
+
}
|
|
72
|
+
// ── Stage 3: pick username + fields ───────────────────────────────────────
|
|
73
|
+
const username = await promptAvailableUsername(appUrl);
|
|
74
|
+
if (username === null) {
|
|
75
|
+
clack.outro(dim('cancelled.'));
|
|
76
|
+
process.exit(0);
|
|
77
|
+
}
|
|
78
|
+
const bio = await optionalText('one line — what are you building?');
|
|
79
|
+
const xRaw = await optionalText('x / twitter (handle or url, optional)');
|
|
80
|
+
const websiteRaw = await optionalText('website (optional)');
|
|
81
|
+
// ── Stage 4: GitHub OAuth (reuses the existing login flow) ────────────────
|
|
82
|
+
try {
|
|
83
|
+
await login();
|
|
89
84
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
let result = null;
|
|
108
|
-
while (!result) {
|
|
109
|
-
const handleInput = await text({
|
|
110
|
-
message: 'agent handle',
|
|
111
|
-
placeholder: 'my-agent',
|
|
112
|
-
validate: (value) => {
|
|
113
|
-
const normalized = normalizeAgentHandle(String(value));
|
|
114
|
-
if (!normalized) {
|
|
115
|
-
return 'handle is required.';
|
|
116
|
-
}
|
|
117
|
-
if (normalized.length < 2) {
|
|
118
|
-
return 'handle must be at least 2 characters.';
|
|
119
|
-
}
|
|
120
|
-
if (normalized.length > 80) {
|
|
121
|
-
return 'handle must be at most 80 characters.';
|
|
122
|
-
}
|
|
123
|
-
return undefined;
|
|
85
|
+
catch (err) {
|
|
86
|
+
clack.cancel(`GitHub sign-in failed: ${err instanceof Error ? err.message : String(err)}. run \`hacklab join\` again.`);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
const session = await loadSession();
|
|
90
|
+
if (!session) {
|
|
91
|
+
clack.cancel('GitHub sign-in did not complete. run `hacklab join` again.');
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
// ── Stage 5: claim (re-prompt username on a TOCTOU collision) ─────────────
|
|
95
|
+
let claimedHandle = username;
|
|
96
|
+
while (true) {
|
|
97
|
+
const res = await fetch(`${appUrl}/api/cli/claim`, {
|
|
98
|
+
method: 'POST',
|
|
99
|
+
headers: {
|
|
100
|
+
'Content-Type': 'application/json',
|
|
101
|
+
Authorization: `Bearer ${session.token}`,
|
|
124
102
|
},
|
|
103
|
+
body: JSON.stringify({
|
|
104
|
+
username: claimedHandle,
|
|
105
|
+
...(bio ? { bio } : {}),
|
|
106
|
+
...(normalizeXUrl(xRaw) ? { xUrl: normalizeXUrl(xRaw) } : {}),
|
|
107
|
+
...(normalizeWebsite(websiteRaw)
|
|
108
|
+
? { websiteUrl: normalizeWebsite(websiteRaw) }
|
|
109
|
+
: {}),
|
|
110
|
+
}),
|
|
125
111
|
});
|
|
126
|
-
if (
|
|
127
|
-
|
|
128
|
-
|
|
112
|
+
if (res.ok) {
|
|
113
|
+
const data = (await res.json());
|
|
114
|
+
claimedHandle = data.handle;
|
|
115
|
+
break;
|
|
129
116
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
});
|
|
135
|
-
if (isCancel(bioInput)) {
|
|
136
|
-
cancel('join cancelled.');
|
|
137
|
-
process.exit(1);
|
|
138
|
-
}
|
|
139
|
-
const avatarInput = await text({
|
|
140
|
-
message: 'profile pic url',
|
|
141
|
-
placeholder: 'https://...',
|
|
142
|
-
});
|
|
143
|
-
if (isCancel(avatarInput)) {
|
|
144
|
-
cancel('join cancelled.');
|
|
145
|
-
process.exit(1);
|
|
146
|
-
}
|
|
147
|
-
const bio = String(bioInput).trim();
|
|
148
|
-
const avatarUrl = String(avatarInput).trim();
|
|
149
|
-
try {
|
|
150
|
-
result = await createPublicCliAgent(appUrl, {
|
|
151
|
-
handle,
|
|
152
|
-
bio,
|
|
153
|
-
avatarUrl,
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
catch (error) {
|
|
157
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
158
|
-
if (message.toLowerCase().includes('handle') &&
|
|
159
|
-
message.toLowerCase().includes('taken')) {
|
|
160
|
-
note('handle is already taken. choose another one.', 'error');
|
|
161
|
-
continue;
|
|
162
|
-
}
|
|
163
|
-
if (message.toLowerCase().includes('invalid request payload')) {
|
|
164
|
-
note('invalid bio or profile pic url. try again.', 'error');
|
|
165
|
-
continue;
|
|
166
|
-
}
|
|
167
|
-
if (message.toLowerCase().includes('fetch failed')) {
|
|
168
|
-
cancel('cannot reach hacklab app. use `--app-url <url>`.');
|
|
117
|
+
if (res.status === 409) {
|
|
118
|
+
const reprompt = await promptAvailableUsername(appUrl, 'that name was just taken — pick another');
|
|
119
|
+
if (reprompt === null) {
|
|
120
|
+
clack.cancel('cancelled before claiming a handle.');
|
|
169
121
|
process.exit(1);
|
|
170
122
|
}
|
|
171
|
-
|
|
172
|
-
|
|
123
|
+
claimedHandle = reprompt;
|
|
124
|
+
continue;
|
|
173
125
|
}
|
|
126
|
+
const data = (await res.json().catch(() => null));
|
|
127
|
+
clack.cancel(data?.error ?? `claim failed (${res.status})`);
|
|
128
|
+
process.exit(1);
|
|
174
129
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
].join('\n'));
|
|
184
|
-
}
|
|
185
|
-
async function promptSetupAction() {
|
|
186
|
-
const value = await select({
|
|
187
|
-
message: 'set up your hq now?',
|
|
188
|
-
options: [
|
|
189
|
-
{
|
|
190
|
-
value: 'setup-now',
|
|
191
|
-
label: 'yes, set up hq now (recommended)',
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
value: 'skip',
|
|
195
|
-
label: 'skip for now',
|
|
130
|
+
// ── Stage 6: sync token totals to the claimed profile ─────────────────────
|
|
131
|
+
spin.start('syncing your usage');
|
|
132
|
+
try {
|
|
133
|
+
const res = await fetch(`${appUrl}/api/claim/sync`, {
|
|
134
|
+
method: 'POST',
|
|
135
|
+
headers: {
|
|
136
|
+
'Content-Type': 'application/json',
|
|
137
|
+
Authorization: `Bearer ${session.token}`,
|
|
196
138
|
},
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
139
|
+
body: JSON.stringify({
|
|
140
|
+
dailyTotals: scan.dailyTotals,
|
|
141
|
+
toolTotals: scan.toolTotals,
|
|
142
|
+
modelTotals: scan.modelTotals,
|
|
143
|
+
hourlyTotals: scan.hourlyTotals,
|
|
144
|
+
}),
|
|
145
|
+
});
|
|
146
|
+
if (res.ok) {
|
|
147
|
+
const r = (await res.json());
|
|
148
|
+
spin.stop('usage synced');
|
|
149
|
+
if (r.title && r.level != null) {
|
|
150
|
+
info(`${bold(r.title)} lv.${r.level}${r.beltColor ? ` (${r.beltColor} belt)` : ''}`);
|
|
151
|
+
}
|
|
152
|
+
if (r.rankAfter)
|
|
153
|
+
info(`rank: #${r.rankAfter}`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
spin.stop('usage sync deferred');
|
|
157
|
+
info(dim('your profile is live; usage will sync next run.'));
|
|
158
|
+
}
|
|
201
159
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const value = await select({
|
|
206
|
-
message: 'who are you?',
|
|
207
|
-
options: [
|
|
208
|
-
{
|
|
209
|
-
value: 'human',
|
|
210
|
-
label: 'human',
|
|
211
|
-
},
|
|
212
|
-
{
|
|
213
|
-
value: 'agent',
|
|
214
|
-
label: 'agent',
|
|
215
|
-
},
|
|
216
|
-
],
|
|
217
|
-
});
|
|
218
|
-
if (isCancel(value)) {
|
|
219
|
-
cancel('join cancelled.');
|
|
220
|
-
process.exit(1);
|
|
160
|
+
catch {
|
|
161
|
+
spin.stop('usage sync deferred');
|
|
162
|
+
info(dim('your profile is live; usage will sync next run.'));
|
|
221
163
|
}
|
|
222
|
-
|
|
164
|
+
const base = appUrl.replace(/\/$/, '');
|
|
165
|
+
clack.outro(`${bold('claimed.')} ${base}/${claimedHandle}`);
|
|
223
166
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
'- or run `hacklab link` in an existing repo',
|
|
248
|
-
].join('\n'));
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
const defaultBaseLocation = await getDefaultBaseLocation();
|
|
252
|
-
const baseLocation = await promptForLabLocation(defaultBaseLocation);
|
|
253
|
-
if (!baseLocation) {
|
|
254
|
-
outro([
|
|
255
|
-
'join complete.',
|
|
256
|
-
'hq setup skipped.',
|
|
257
|
-
'run `hacklab init` or `hacklab link` when ready.',
|
|
258
|
-
].join('\n'));
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
261
|
-
const suggestedRepoName = defaultRepoName(loginResult.nickname);
|
|
262
|
-
const repoNameInput = await text({
|
|
263
|
-
message: 'hq repo name',
|
|
264
|
-
placeholder: suggestedRepoName,
|
|
265
|
-
validate: (value) => {
|
|
266
|
-
const rawValue = String(value).trim();
|
|
267
|
-
if (!rawValue) {
|
|
268
|
-
return undefined;
|
|
269
|
-
}
|
|
270
|
-
const normalized = normalizeRepoName(rawValue);
|
|
271
|
-
if (!normalized) {
|
|
272
|
-
return 'repository name is required.';
|
|
273
|
-
}
|
|
274
|
-
if (normalized.length < 2) {
|
|
275
|
-
return 'repository name must be at least 2 characters.';
|
|
167
|
+
/**
|
|
168
|
+
* Prompt for a username and loop until it passes the availability check or the
|
|
169
|
+
* user cancels. Returns the chosen username, or null if cancelled.
|
|
170
|
+
*/
|
|
171
|
+
async function promptAvailableUsername(appUrl, firstMessage = 'pick your hacklab username') {
|
|
172
|
+
let message = firstMessage;
|
|
173
|
+
while (true) {
|
|
174
|
+
const value = await clack.text({
|
|
175
|
+
message,
|
|
176
|
+
placeholder: 'e.g. ada-lovelace',
|
|
177
|
+
});
|
|
178
|
+
if (clack.isCancel(value))
|
|
179
|
+
return null;
|
|
180
|
+
const candidate = String(value).trim();
|
|
181
|
+
let available = false;
|
|
182
|
+
let reason = 'could not check availability — try again';
|
|
183
|
+
try {
|
|
184
|
+
const res = await fetch(`${appUrl}/api/cli/username-available?u=${encodeURIComponent(candidate)}`);
|
|
185
|
+
if (res.ok) {
|
|
186
|
+
const data = (await res.json());
|
|
187
|
+
available = data.available;
|
|
188
|
+
if (!available && data.reason)
|
|
189
|
+
reason = data.reason;
|
|
276
190
|
}
|
|
277
|
-
if (
|
|
278
|
-
|
|
191
|
+
else if (res.status === 429) {
|
|
192
|
+
reason = 'too many checks — wait a moment and try again';
|
|
279
193
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
'run `hacklab init` or `hacklab link` when ready.',
|
|
288
|
-
].join('\n'));
|
|
289
|
-
return;
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// network error — fall through to re-prompt with the generic reason
|
|
197
|
+
}
|
|
198
|
+
if (available)
|
|
199
|
+
return candidate;
|
|
200
|
+
message = `${reason}\n pick your hacklab username`;
|
|
290
201
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
202
|
+
}
|
|
203
|
+
/** A clack text prompt that returns trimmed text, or undefined if empty/cancelled. */
|
|
204
|
+
async function optionalText(message) {
|
|
205
|
+
const value = await clack.text({ message, placeholder: '(optional)' });
|
|
206
|
+
if (clack.isCancel(value))
|
|
207
|
+
return undefined;
|
|
208
|
+
const trimmed = String(value).trim();
|
|
209
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
210
|
+
}
|
|
211
|
+
/** Discard a value that isn't a parseable URL, so an optional vanity field can
|
|
212
|
+
* never 400 the claim and abort the join at the final step. */
|
|
213
|
+
function asValidUrl(value) {
|
|
294
214
|
try {
|
|
295
|
-
|
|
215
|
+
return new URL(value).href;
|
|
296
216
|
}
|
|
297
217
|
catch {
|
|
298
|
-
|
|
299
|
-
process.exit(1);
|
|
300
|
-
}
|
|
301
|
-
const result = await initializeRepository(repoLocation, {
|
|
302
|
-
name: repoName,
|
|
303
|
-
});
|
|
304
|
-
if (result.status === 'already-initialized') {
|
|
305
|
-
note(`hq already initialized at ${repoLocation}`, 'hq');
|
|
218
|
+
return undefined;
|
|
306
219
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
220
|
+
}
|
|
221
|
+
/** Turn a handle or partial url into a full x.com url; undefined if blank/invalid. */
|
|
222
|
+
function normalizeXUrl(raw) {
|
|
223
|
+
if (!raw)
|
|
224
|
+
return undefined;
|
|
225
|
+
const v = raw.trim();
|
|
226
|
+
if (!v)
|
|
227
|
+
return undefined;
|
|
228
|
+
if (/^https?:\/\//i.test(v))
|
|
229
|
+
return asValidUrl(v);
|
|
230
|
+
const handle = v.replace(/^@/, '');
|
|
231
|
+
return asValidUrl(`https://x.com/${handle}`);
|
|
232
|
+
}
|
|
233
|
+
/** Ensure a website has a scheme; undefined if blank/invalid. */
|
|
234
|
+
function normalizeWebsite(raw) {
|
|
235
|
+
if (!raw)
|
|
236
|
+
return undefined;
|
|
237
|
+
const v = raw.trim();
|
|
238
|
+
if (!v)
|
|
239
|
+
return undefined;
|
|
240
|
+
return asValidUrl(/^https?:\/\//i.test(v) ? v : `https://${v}`);
|
|
313
241
|
}
|
|
314
242
|
//# sourceMappingURL=join.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join.js","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"join.js","sourceRoot":"","sources":["../../src/commands/join.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.d.ts
CHANGED
|
@@ -1,16 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
appUrl?: string;
|
|
3
|
-
token?: string;
|
|
4
|
-
nickname?: string;
|
|
5
|
-
mode?: 'login' | 'join';
|
|
6
|
-
showIntro?: boolean;
|
|
7
|
-
showSuccess?: boolean;
|
|
8
|
-
showAuthorizeUrlWhenOpened?: boolean;
|
|
9
|
-
};
|
|
10
|
-
export type LoginResult = {
|
|
11
|
-
email: string;
|
|
12
|
-
nickname?: string;
|
|
13
|
-
};
|
|
14
|
-
export declare function loginCommand(options?: LoginOptions): Promise<LoginResult>;
|
|
15
|
-
export {};
|
|
1
|
+
export declare function login(): Promise<void>;
|
|
16
2
|
//# sourceMappingURL=login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAMA,wBAAsB,KAAK,kBAiF1B"}
|