hacklab 0.22.3 → 26.921.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.
Files changed (259) hide show
  1. package/README.md +23 -430
  2. package/dist/index.js +132 -23
  3. package/package.json +20 -42
  4. package/LICENSE +0 -21
  5. package/dist/agent-handoff.d.ts +0 -51
  6. package/dist/agent-handoff.d.ts.map +0 -1
  7. package/dist/agent-handoff.js +0 -91
  8. package/dist/agent-handoff.js.map +0 -1
  9. package/dist/api-client.d.ts +0 -18
  10. package/dist/api-client.d.ts.map +0 -1
  11. package/dist/api-client.js +0 -40
  12. package/dist/api-client.js.map +0 -1
  13. package/dist/belt.d.ts +0 -25
  14. package/dist/belt.d.ts.map +0 -1
  15. package/dist/belt.js +0 -113
  16. package/dist/belt.js.map +0 -1
  17. package/dist/card.d.ts +0 -66
  18. package/dist/card.d.ts.map +0 -1
  19. package/dist/card.js +0 -151
  20. package/dist/card.js.map +0 -1
  21. package/dist/cli.d.ts +0 -2
  22. package/dist/cli.d.ts.map +0 -1
  23. package/dist/cli.js +0 -238
  24. package/dist/cli.js.map +0 -1
  25. package/dist/commands/book.d.ts +0 -14
  26. package/dist/commands/book.d.ts.map +0 -1
  27. package/dist/commands/book.js +0 -90
  28. package/dist/commands/book.js.map +0 -1
  29. package/dist/commands/chat.d.ts +0 -36
  30. package/dist/commands/chat.d.ts.map +0 -1
  31. package/dist/commands/chat.js +0 -642
  32. package/dist/commands/chat.js.map +0 -1
  33. package/dist/commands/config.d.ts +0 -2
  34. package/dist/commands/config.d.ts.map +0 -1
  35. package/dist/commands/config.js +0 -84
  36. package/dist/commands/config.js.map +0 -1
  37. package/dist/commands/daemon.d.ts +0 -19
  38. package/dist/commands/daemon.d.ts.map +0 -1
  39. package/dist/commands/daemon.js +0 -72
  40. package/dist/commands/daemon.js.map +0 -1
  41. package/dist/commands/drop.d.ts +0 -12
  42. package/dist/commands/drop.d.ts.map +0 -1
  43. package/dist/commands/drop.js +0 -103
  44. package/dist/commands/drop.js.map +0 -1
  45. package/dist/commands/drops.d.ts +0 -9
  46. package/dist/commands/drops.d.ts.map +0 -1
  47. package/dist/commands/drops.js +0 -96
  48. package/dist/commands/drops.js.map +0 -1
  49. package/dist/commands/essay.d.ts +0 -40
  50. package/dist/commands/essay.d.ts.map +0 -1
  51. package/dist/commands/essay.js +0 -651
  52. package/dist/commands/essay.js.map +0 -1
  53. package/dist/commands/hackathon.d.ts +0 -2
  54. package/dist/commands/hackathon.d.ts.map +0 -1
  55. package/dist/commands/hackathon.js +0 -893
  56. package/dist/commands/hackathon.js.map +0 -1
  57. package/dist/commands/hacker.d.ts +0 -2
  58. package/dist/commands/hacker.d.ts.map +0 -1
  59. package/dist/commands/hacker.js +0 -87
  60. package/dist/commands/hacker.js.map +0 -1
  61. package/dist/commands/jobs.d.ts +0 -18
  62. package/dist/commands/jobs.d.ts.map +0 -1
  63. package/dist/commands/jobs.js +0 -138
  64. package/dist/commands/jobs.js.map +0 -1
  65. package/dist/commands/keys.d.ts +0 -2
  66. package/dist/commands/keys.d.ts.map +0 -1
  67. package/dist/commands/keys.js +0 -138
  68. package/dist/commands/keys.js.map +0 -1
  69. package/dist/commands/login.d.ts +0 -83
  70. package/dist/commands/login.d.ts.map +0 -1
  71. package/dist/commands/login.js +0 -236
  72. package/dist/commands/login.js.map +0 -1
  73. package/dist/commands/logout.d.ts +0 -2
  74. package/dist/commands/logout.d.ts.map +0 -1
  75. package/dist/commands/logout.js +0 -22
  76. package/dist/commands/logout.js.map +0 -1
  77. package/dist/commands/org-jobs.d.ts +0 -50
  78. package/dist/commands/org-jobs.d.ts.map +0 -1
  79. package/dist/commands/org-jobs.js +0 -383
  80. package/dist/commands/org-jobs.js.map +0 -1
  81. package/dist/commands/org.d.ts +0 -67
  82. package/dist/commands/org.d.ts.map +0 -1
  83. package/dist/commands/org.js +0 -1244
  84. package/dist/commands/org.js.map +0 -1
  85. package/dist/commands/ping.d.ts +0 -2
  86. package/dist/commands/ping.d.ts.map +0 -1
  87. package/dist/commands/ping.js +0 -50
  88. package/dist/commands/ping.js.map +0 -1
  89. package/dist/commands/profile.d.ts +0 -72
  90. package/dist/commands/profile.d.ts.map +0 -1
  91. package/dist/commands/profile.js +0 -672
  92. package/dist/commands/profile.js.map +0 -1
  93. package/dist/commands/project.d.ts +0 -2
  94. package/dist/commands/project.d.ts.map +0 -1
  95. package/dist/commands/project.js +0 -583
  96. package/dist/commands/project.js.map +0 -1
  97. package/dist/commands/referral.d.ts +0 -6
  98. package/dist/commands/referral.d.ts.map +0 -1
  99. package/dist/commands/referral.js +0 -93
  100. package/dist/commands/referral.js.map +0 -1
  101. package/dist/commands/rtfm.d.ts +0 -9
  102. package/dist/commands/rtfm.d.ts.map +0 -1
  103. package/dist/commands/rtfm.js +0 -114
  104. package/dist/commands/rtfm.js.map +0 -1
  105. package/dist/commands/scan.d.ts +0 -13
  106. package/dist/commands/scan.d.ts.map +0 -1
  107. package/dist/commands/scan.js +0 -286
  108. package/dist/commands/scan.js.map +0 -1
  109. package/dist/commands/scout.d.ts +0 -18
  110. package/dist/commands/scout.d.ts.map +0 -1
  111. package/dist/commands/scout.js +0 -232
  112. package/dist/commands/scout.js.map +0 -1
  113. package/dist/commands/setup-rail.d.ts +0 -58
  114. package/dist/commands/setup-rail.d.ts.map +0 -1
  115. package/dist/commands/setup-rail.js +0 -135
  116. package/dist/commands/setup-rail.js.map +0 -1
  117. package/dist/commands/setup.d.ts +0 -29
  118. package/dist/commands/setup.d.ts.map +0 -1
  119. package/dist/commands/setup.js +0 -442
  120. package/dist/commands/setup.js.map +0 -1
  121. package/dist/commands/sync.d.ts +0 -9
  122. package/dist/commands/sync.d.ts.map +0 -1
  123. package/dist/commands/sync.js +0 -345
  124. package/dist/commands/sync.js.map +0 -1
  125. package/dist/commands/update.d.ts +0 -2
  126. package/dist/commands/update.d.ts.map +0 -1
  127. package/dist/commands/update.js +0 -92
  128. package/dist/commands/update.js.map +0 -1
  129. package/dist/commands/whoami.d.ts +0 -2
  130. package/dist/commands/whoami.d.ts.map +0 -1
  131. package/dist/commands/whoami.js +0 -41
  132. package/dist/commands/whoami.js.map +0 -1
  133. package/dist/config.d.ts +0 -78
  134. package/dist/config.d.ts.map +0 -1
  135. package/dist/config.js +0 -93
  136. package/dist/config.js.map +0 -1
  137. package/dist/daily-sync.d.ts +0 -150
  138. package/dist/daily-sync.d.ts.map +0 -1
  139. package/dist/daily-sync.js +0 -665
  140. package/dist/daily-sync.js.map +0 -1
  141. package/dist/dossier.d.ts +0 -73
  142. package/dist/dossier.d.ts.map +0 -1
  143. package/dist/dossier.js +0 -141
  144. package/dist/dossier.js.map +0 -1
  145. package/dist/field-normalize.d.ts +0 -4
  146. package/dist/field-normalize.d.ts.map +0 -1
  147. package/dist/field-normalize.js +0 -8
  148. package/dist/field-normalize.js.map +0 -1
  149. package/dist/index.d.ts +0 -3
  150. package/dist/index.d.ts.map +0 -1
  151. package/dist/index.js.map +0 -1
  152. package/dist/job-fields.d.ts +0 -47
  153. package/dist/job-fields.d.ts.map +0 -1
  154. package/dist/job-fields.js +0 -148
  155. package/dist/job-fields.js.map +0 -1
  156. package/dist/machine.d.ts +0 -15
  157. package/dist/machine.d.ts.map +0 -1
  158. package/dist/machine.js +0 -64
  159. package/dist/machine.js.map +0 -1
  160. package/dist/org-fields.d.ts +0 -57
  161. package/dist/org-fields.d.ts.map +0 -1
  162. package/dist/org-fields.js +0 -167
  163. package/dist/org-fields.js.map +0 -1
  164. package/dist/posthog.d.ts +0 -38
  165. package/dist/posthog.d.ts.map +0 -1
  166. package/dist/posthog.js +0 -224
  167. package/dist/posthog.js.map +0 -1
  168. package/dist/project-fields.d.ts +0 -40
  169. package/dist/project-fields.d.ts.map +0 -1
  170. package/dist/project-fields.js +0 -79
  171. package/dist/project-fields.js.map +0 -1
  172. package/dist/prompt-consent.d.ts +0 -73
  173. package/dist/prompt-consent.d.ts.map +0 -1
  174. package/dist/prompt-consent.js +0 -191
  175. package/dist/prompt-consent.js.map +0 -1
  176. package/dist/prompt-stats.d.ts +0 -226
  177. package/dist/prompt-stats.d.ts.map +0 -1
  178. package/dist/prompt-stats.js +0 -561
  179. package/dist/prompt-stats.js.map +0 -1
  180. package/dist/referral.d.ts +0 -14
  181. package/dist/referral.d.ts.map +0 -1
  182. package/dist/referral.js +0 -28
  183. package/dist/referral.js.map +0 -1
  184. package/dist/registry.d.ts +0 -15
  185. package/dist/registry.d.ts.map +0 -1
  186. package/dist/registry.js +0 -180
  187. package/dist/registry.js.map +0 -1
  188. package/dist/resolve-command.d.ts +0 -20
  189. package/dist/resolve-command.d.ts.map +0 -1
  190. package/dist/resolve-command.js +0 -21
  191. package/dist/resolve-command.js.map +0 -1
  192. package/dist/scanners/antigravity.d.ts +0 -41
  193. package/dist/scanners/antigravity.d.ts.map +0 -1
  194. package/dist/scanners/antigravity.js +0 -210
  195. package/dist/scanners/antigravity.js.map +0 -1
  196. package/dist/scanners/github-copilot-telemetry.d.ts +0 -23
  197. package/dist/scanners/github-copilot-telemetry.d.ts.map +0 -1
  198. package/dist/scanners/github-copilot-telemetry.js +0 -220
  199. package/dist/scanners/github-copilot-telemetry.js.map +0 -1
  200. package/dist/scanners/github-copilot.d.ts +0 -68
  201. package/dist/scanners/github-copilot.d.ts.map +0 -1
  202. package/dist/scanners/github-copilot.js +0 -262
  203. package/dist/scanners/github-copilot.js.map +0 -1
  204. package/dist/scanners/incremental.d.ts +0 -282
  205. package/dist/scanners/incremental.d.ts.map +0 -1
  206. package/dist/scanners/incremental.js +0 -788
  207. package/dist/scanners/incremental.js.map +0 -1
  208. package/dist/scanners/index.d.ts +0 -116
  209. package/dist/scanners/index.d.ts.map +0 -1
  210. package/dist/scanners/index.js +0 -726
  211. package/dist/scanners/index.js.map +0 -1
  212. package/dist/scanners/sqlite.d.ts +0 -18
  213. package/dist/scanners/sqlite.d.ts.map +0 -1
  214. package/dist/scanners/sqlite.js +0 -63
  215. package/dist/scanners/sqlite.js.map +0 -1
  216. package/dist/scanners/util.d.ts +0 -112
  217. package/dist/scanners/util.d.ts.map +0 -1
  218. package/dist/scanners/util.js +0 -167
  219. package/dist/scanners/util.js.map +0 -1
  220. package/dist/session.d.ts +0 -106
  221. package/dist/session.d.ts.map +0 -1
  222. package/dist/session.js +0 -191
  223. package/dist/session.js.map +0 -1
  224. package/dist/share-card-colors.d.ts +0 -19
  225. package/dist/share-card-colors.d.ts.map +0 -1
  226. package/dist/share-card-colors.js +0 -36
  227. package/dist/share-card-colors.js.map +0 -1
  228. package/dist/share-card.d.ts +0 -31
  229. package/dist/share-card.d.ts.map +0 -1
  230. package/dist/share-card.js +0 -380
  231. package/dist/share-card.js.map +0 -1
  232. package/dist/share.d.ts +0 -17
  233. package/dist/share.d.ts.map +0 -1
  234. package/dist/share.js +0 -75
  235. package/dist/share.js.map +0 -1
  236. package/dist/sync.d.ts +0 -100
  237. package/dist/sync.d.ts.map +0 -1
  238. package/dist/sync.js +0 -304
  239. package/dist/sync.js.map +0 -1
  240. package/dist/ui.d.ts +0 -33
  241. package/dist/ui.d.ts.map +0 -1
  242. package/dist/ui.js +0 -127
  243. package/dist/ui.js.map +0 -1
  244. package/dist/utils/npmGlobal.d.ts +0 -30
  245. package/dist/utils/npmGlobal.d.ts.map +0 -1
  246. package/dist/utils/npmGlobal.js +0 -69
  247. package/dist/utils/npmGlobal.js.map +0 -1
  248. package/dist/utils/openBrowser.d.ts +0 -14
  249. package/dist/utils/openBrowser.d.ts.map +0 -1
  250. package/dist/utils/openBrowser.js +0 -47
  251. package/dist/utils/openBrowser.js.map +0 -1
  252. package/dist/utils/updateCheck.d.ts +0 -16
  253. package/dist/utils/updateCheck.d.ts.map +0 -1
  254. package/dist/utils/updateCheck.js +0 -111
  255. package/dist/utils/updateCheck.js.map +0 -1
  256. package/dist/utils/waitForEnter.d.ts +0 -12
  257. package/dist/utils/waitForEnter.d.ts.map +0 -1
  258. package/dist/utils/waitForEnter.js +0 -43
  259. package/dist/utils/waitForEnter.js.map +0 -1
@@ -1,236 +0,0 @@
1
- import { clearSyncPaused } from '../daily-sync.js';
2
- import { captureEvent, identifyUser } from '../posthog.js';
3
- import { getAppUrl, resolveAppUrl, saveSession, } from '../session.js';
4
- import { bold, dim, link } from '../ui.js';
5
- import { openBrowser } from '../utils/openBrowser.js';
6
- import { waitForEnter } from '../utils/waitForEnter.js';
7
- /** DESIGN.md's reference block: dim label, bold code, blank beat, URL. */
8
- const plainDeviceCode = {
9
- show({ userCode, verificationUri }) {
10
- console.log(dim('copy code'));
11
- console.log(bold(userCode));
12
- console.log('');
13
- console.log(link(verificationUri));
14
- return '(press enter) ';
15
- },
16
- done() {
17
- // Nothing to undo: the block is meant to stay on screen.
18
- },
19
- };
20
- /**
21
- * Authenticate via hacklab's device flow and persist the session. The hacker
22
- * approves the code in a browser on hacklab.so, signing up on the spot if they
23
- * have no account yet — so anyone who gets past the poll has one. An unclaimed
24
- * handle is claimed as-is.
25
- *
26
- * The shared implementation behind both `hacklab login` and `hacklab setup` —
27
- * there is exactly one device flow (the code/URL beat with the parallel
28
- * Enter-wait ↔ poll race), and both front doors go through it. `claimAttempts`
29
- * is how hard the handle claim tries before giving up, `flow` tells the web
30
- * which command is claiming, and `deviceCode` swaps the code/URL presentation
31
- * without touching the race behind it.
32
- */
33
- export async function performLogin(opts = {}) {
34
- const appUrl = getAppUrl();
35
- const creds = await loginViaDevice(appUrl, opts.deviceCode);
36
- const outcome = await ensureHandleClaimed({
37
- token: creds.token,
38
- email: creds.email,
39
- handle: creds.handle,
40
- usernameClaimed: creds.usernameClaimed,
41
- appUrl,
42
- savedAt: new Date().toISOString(),
43
- expiresAt: creds.expiresAt,
44
- }, opts.claimAttempts, opts.flow);
45
- await saveSession(outcome.session);
46
- await clearSyncPaused();
47
- return outcome;
48
- }
49
- /**
50
- * Make sure the session's handle is actually claimed, resolving it from the
51
- * profile first when the device poll didn't send one. Pure: it returns the
52
- * updated session (the same object when nothing changed) and leaves persistence
53
- * to the caller, so it works both on a session that was just minted and on one
54
- * already sitting on disk from a half-finished signup.
55
- *
56
- * `flow` names the command doing the claiming for the web's benefit; it defaults
57
- * to the conservative `'login'`, which is the value that leaves onboarding
58
- * printing its manual prompt rather than promising a terminal that isn't there.
59
- */
60
- export async function ensureHandleClaimed(session, attempts = 1, flow = 'login') {
61
- if (session.handle && session.usernameClaimed) {
62
- return { session, claimFailed: false };
63
- }
64
- const appUrl = resolveAppUrl(session);
65
- let handle = session.handle;
66
- let usernameClaimed = session.usernameClaimed;
67
- if (!handle) {
68
- const me = await fetchMe(appUrl, session.token);
69
- handle = me?.handle ?? me?.githubUsername ?? undefined;
70
- if (me?.claimed != null)
71
- usernameClaimed = me.claimed;
72
- }
73
- if (!handle || usernameClaimed) {
74
- return {
75
- session: { ...session, handle, usernameClaimed },
76
- claimFailed: false,
77
- };
78
- }
79
- const claimed = await claimHandle(appUrl, session.token, handle, flow, attempts);
80
- return {
81
- session: {
82
- ...session,
83
- handle: claimed ?? handle,
84
- usernameClaimed: claimed ? true : usernameClaimed,
85
- },
86
- claimFailed: claimed === null,
87
- };
88
- }
89
- /**
90
- * `hacklab login` — the standalone re-authenticate command. A lost handle claim
91
- * stays quiet here (the account still works; the next login retries it); the
92
- * guided `setup` flow is the one that has to complain.
93
- */
94
- export async function login() {
95
- const { session } = await performLogin({ flow: 'login' });
96
- const { handle, email, appUrl, usernameClaimed } = session;
97
- console.log('');
98
- console.log(handle ? `signed in as @${handle}` : `signed in as ${email}`);
99
- if (handle) {
100
- await identifyUser(handle, {
101
- $set: { email, handle, app_url: appUrl },
102
- });
103
- await captureEvent(handle, 'cli_login_completed', {
104
- login_method: 'device_flow',
105
- username_claimed: usernameClaimed ?? false,
106
- });
107
- }
108
- }
109
- async function loginViaDevice(appUrl, render = plainDeviceCode) {
110
- let startRes;
111
- try {
112
- startRes = await fetch(`${appUrl}/api/cli/device/start`, {
113
- method: 'POST',
114
- signal: AbortSignal.timeout(15_000),
115
- });
116
- }
117
- catch {
118
- throw new Error(`could not reach ${appUrl} — is the server running?`);
119
- }
120
- if (startRes.status === 404) {
121
- throw new Error(`device login is not available on ${appUrl}`);
122
- }
123
- if (!startRes.ok) {
124
- throw new Error(`could not start device login (${startRes.status})`);
125
- }
126
- const start = (await startRes.json());
127
- // Show the code and URL first. Poll starts immediately so clicking the
128
- // link (instead of Enter) still finishes login. Enter only opens a browser.
129
- const openUrl = start.verificationUriComplete ?? start.verificationUri;
130
- const enterPrompt = render.show({
131
- userCode: start.userCode,
132
- verificationUri: openUrl,
133
- });
134
- const abort = new AbortController();
135
- if (!process.stdin.isTTY)
136
- void openBrowser(openUrl);
137
- const enter = waitForEnter(enterPrompt, abort.signal).then((pressed) => {
138
- if (pressed)
139
- void openBrowser(openUrl);
140
- return pressed;
141
- });
142
- try {
143
- return await pollDevice(appUrl, start.deviceCode, start.expiresIn, start.interval);
144
- }
145
- finally {
146
- abort.abort();
147
- render.done({ enterPressed: await enter });
148
- }
149
- }
150
- async function pollDevice(appUrl, deviceCode, expiresIn, interval) {
151
- const intervalMs = Math.max(1000, (Number(interval) || 5) * 1000);
152
- const deadline = Date.now() + (Number(expiresIn) || 900) * 1000;
153
- while (Date.now() < deadline) {
154
- let data = null;
155
- try {
156
- const res = await fetch(`${appUrl}/api/cli/device/poll`, {
157
- method: 'POST',
158
- headers: { 'Content-Type': 'application/json' },
159
- body: JSON.stringify({ deviceCode }),
160
- signal: AbortSignal.timeout(10_000),
161
- });
162
- if (res.status !== 429)
163
- data = await res.json().catch(() => null);
164
- }
165
- catch {
166
- // keep polling
167
- }
168
- const status = data?.status;
169
- if (status === 'approved' && data?.token && data.email) {
170
- return {
171
- token: data.token,
172
- email: data.email,
173
- handle: data.handle ?? data.login,
174
- usernameClaimed: data.usernameClaimed,
175
- expiresAt: data.expiresAt,
176
- };
177
- }
178
- if (status === 'denied') {
179
- throw new Error('authorization was denied in the browser.');
180
- }
181
- if (status === 'expired') {
182
- throw new Error('the code expired — run `hacklab login` again.');
183
- }
184
- await sleep(intervalMs);
185
- }
186
- throw new Error('login timed out — run `hacklab login` again.');
187
- }
188
- function sleep(ms) {
189
- return new Promise((resolve) => setTimeout(resolve, ms));
190
- }
191
- async function fetchMe(appUrl, token) {
192
- try {
193
- const res = await fetch(`${appUrl}/api/hackers/me?src=cli`, {
194
- headers: { Authorization: `Bearer ${token}` },
195
- signal: AbortSignal.timeout(10_000),
196
- });
197
- if (!res.ok)
198
- return null;
199
- return (await res.json());
200
- }
201
- catch {
202
- return null;
203
- }
204
- }
205
- /**
206
- * Claim `username` for this account, returning the claimed handle or null if
207
- * every attempt failed. `attempts > 1` retries — the claim is idempotent for the
208
- * owner, and a lost one leaves an account the web onboarding never sees finish.
209
- *
210
- * `flow` travels in the body so the flip of `username_claimed` and the reason
211
- * for it land in one request. A backend that predates the field ignores it —
212
- * unknown body keys are dropped — so there is nothing to negotiate here.
213
- */
214
- async function claimHandle(appUrl, token, username, flow, attempts = 1) {
215
- for (let i = 0; i < Math.max(1, attempts); i++) {
216
- try {
217
- const res = await fetch(`${appUrl}/api/cli/claim`, {
218
- method: 'POST',
219
- headers: {
220
- 'Content-Type': 'application/json',
221
- Authorization: `Bearer ${token}`,
222
- },
223
- body: JSON.stringify({ username, flow }),
224
- });
225
- if (res.ok) {
226
- const data = (await res.json());
227
- return data.handle ?? username;
228
- }
229
- }
230
- catch {
231
- // fall through to the next attempt
232
- }
233
- }
234
- return null;
235
- }
236
- //# sourceMappingURL=login.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare function logout(): Promise<void>;
2
- //# sourceMappingURL=logout.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAKA,wBAAsB,MAAM,kBAoB3B"}
@@ -1,22 +0,0 @@
1
- import { clearSyncPaused, uninstallDailySync } from '../daily-sync.js';
2
- import { captureEvent } from '../posthog.js';
3
- import { clearSession, loadSession } from '../session.js';
4
- import { dim, info, success } from '../ui.js';
5
- export async function logout() {
6
- // Read who we're logged in as first (for the confirmation), then clear.
7
- const session = await loadSession();
8
- const removed = await clearSession();
9
- // Tear down the daily background sync — it can't run without a session, and a
10
- // leftover schedule would just log failures forever. Best-effort, no output.
11
- await uninstallDailySync();
12
- await clearSyncPaused();
13
- if (!removed) {
14
- info('not logged in');
15
- return;
16
- }
17
- const who = session?.handle ?? session?.email;
18
- success(who ? `logged out (${who})` : 'logged out');
19
- info(dim('run `hacklab login` to sign back in'));
20
- await captureEvent(session?.handle, 'cli_logout');
21
- }
22
- //# sourceMappingURL=logout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAE7C,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,wEAAwE;IACxE,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAA;IAEpC,8EAA8E;IAC9E,6EAA6E;IAC7E,MAAM,kBAAkB,EAAE,CAAA;IAC1B,MAAM,eAAe,EAAE,CAAA;IAEvB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,CAAC,CAAA;QACrB,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IACnD,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAA;IAEhD,MAAM,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAA;AACnD,CAAC"}
@@ -1,50 +0,0 @@
1
- import { type Session } from '../session.js';
2
- export declare const JOBS_SUBCOMMANDS: readonly ["list", "view", "post", "close"];
3
- export type OrgJob = {
4
- id: string;
5
- roleTitle: string;
6
- companyName: string;
7
- status: string;
8
- salaryRange: string | null;
9
- remoteOnsite: string | null;
10
- beltRankMin: number | null;
11
- atsUrl: string;
12
- reviewNote: string | null;
13
- expiresAt: string | null;
14
- createdAt: string;
15
- };
16
- type Target = {
17
- session: Session;
18
- org: {
19
- id: string;
20
- name: string;
21
- slug: string;
22
- };
23
- };
24
- export declare function jobsUsage(): never;
25
- /**
26
- * How a listing reads at a glance.
27
- *
28
- * Statuses are shown as what they mean to the person who paid, not as the
29
- * enum: `pending_payment` is "you never finished checkout", which is a very
30
- * different thing to do next than "we are still reading it".
31
- */
32
- export declare function jobStatusLabel(status: string, expiresAt: string | null): string;
33
- /** What the poster should do about a listing in this state, if anything. */
34
- export declare function jobStatusHint(job: OrgJob): string | null;
35
- /** What the caller can do about a refusal. Printed to stderr, never stdout. */
36
- export declare function jobsErrorHint(code: string): string | null;
37
- /** Pull every `--<field> <value>` out of argv, leaving the rest. */
38
- export declare function extractJobOptions(args: string[]): {
39
- options: Record<string, string | undefined>;
40
- rest: string[];
41
- };
42
- /** True when argv carries any listing field, i.e. this is the agent path. */
43
- export declare function hasJobFlags(args: string[]): boolean;
44
- /**
45
- * Dispatch `org jobs <verb>`. The caller resolves the target org, because that
46
- * is the same `--org` / single-org resolution every other org verb uses.
47
- */
48
- export declare function orgJobs(target: Target, args: string[]): Promise<void>;
49
- export {};
50
- //# sourceMappingURL=org-jobs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"org-jobs.d.ts","sourceRoot":"","sources":["../../src/commands/org-jobs.ts"],"names":[],"mappings":"AAYA,OAAO,EAAiB,KAAK,OAAO,EAAoB,MAAM,eAAe,CAAA;AA0B7E,eAAO,MAAM,gBAAgB,4CAA6C,CAAA;AAE1E,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAUD,KAAK,MAAM,GAAG;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAChD,CAAA;AAcD,wBAAgB,SAAS,IAAI,KAAK,CAajC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,MAAM,CAaR;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQxD;AAkDD,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWzD;AAiID,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IACjD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC3C,IAAI,EAAE,MAAM,EAAE,CAAA;CACf,CAaA;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEnD;AA6HD;;;GAGG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB3E"}