hacklab 0.22.2 → 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 -32
  229. package/dist/share-card.d.ts.map +0 -1
  230. package/dist/share-card.js +0 -420
  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 -77
  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,383 +0,0 @@
1
- import * as clack from '@clack/prompts';
2
- import { emitJsonError } from '../api-client.js';
3
- import { buildJobFields, JOB_FIELD_NAMES, JOB_FIELDS, normalizeJobFieldValue, } from '../job-fields.js';
4
- import { resolveCommand } from '../resolve-command.js';
5
- import { resolveAppUrl, unauthorizedHint } from '../session.js';
6
- import { bold, dim, displayWidth, error, hint, info, padEndTo, stripControl, success, } from '../ui.js';
7
- // `hacklab org jobs <list|view|post|close>` — a company's Job Shop listings.
8
- //
9
- // Nested under `org` because posting a listing is speaking for a company, and
10
- // which company you may speak for is exactly what `org access` decides. Both
11
- // roles on the access list reach these verbs: admins because they run the
12
- // company, recruiters because filling the job shop is the whole reason that
13
- // role exists.
14
- //
15
- // `post` cannot finish here. A listing is $1,000 and the terminal has no way
16
- // to take a card, so it creates the listing and hands back a Stripe checkout
17
- // URL. Until that is paid the listing sits in `pending_payment` and nobody
18
- // sees it; after payment a human reviews it before it goes live.
19
- export const JOBS_SUBCOMMANDS = ['list', 'view', 'post', 'close'];
20
- function printJson(data) {
21
- console.log(JSON.stringify({ schemaVersion: 1, ...data }, null, 2));
22
- }
23
- function fail(json, code, message) {
24
- if (json)
25
- emitJsonError(code, message);
26
- error(message);
27
- process.exit(1);
28
- }
29
- export function jobsUsage() {
30
- error('usage: hacklab org jobs [list|view|post|close]');
31
- info(` hacklab org jobs ${dim('[list] [--org <slug>] [--json]')} every listing you have posted`);
32
- info(` hacklab org jobs ${dim('view <id> [--org <slug>] [--json]')}`);
33
- info(` hacklab org jobs ${dim('post [--role "…"] [--description "…"] [--apply-url <url>] [--contact <email>] [--json]')}`);
34
- info(` hacklab org jobs ${dim('close <id> [--org <slug>] [--json]')}`);
35
- info(` fields: ${dim(JOB_FIELD_NAMES.map((n) => `--${n}`).join(', '))}`);
36
- hint('a listing costs $1,000 — post hands back a Stripe checkout link');
37
- process.exit(1);
38
- }
39
- /**
40
- * How a listing reads at a glance.
41
- *
42
- * Statuses are shown as what they mean to the person who paid, not as the
43
- * enum: `pending_payment` is "you never finished checkout", which is a very
44
- * different thing to do next than "we are still reading it".
45
- */
46
- export function jobStatusLabel(status, expiresAt) {
47
- if (status === 'active') {
48
- if (expiresAt && new Date(expiresAt).getTime() <= Date.now()) {
49
- return 'expired';
50
- }
51
- return 'live';
52
- }
53
- if (status === 'pending_payment')
54
- return 'unpaid';
55
- if (status === 'pending_review')
56
- return 'in review';
57
- if (status === 'rejected')
58
- return 'rejected';
59
- if (status === 'disputed')
60
- return 'disputed';
61
- if (status === 'closed')
62
- return 'closed';
63
- return status;
64
- }
65
- /** What the poster should do about a listing in this state, if anything. */
66
- export function jobStatusHint(job) {
67
- if (job.status === 'pending_payment') {
68
- return 'checkout was never completed — post it again to get a fresh link';
69
- }
70
- if (job.status === 'rejected') {
71
- return job.reviewNote ? `rejected: ${job.reviewNote}` : 'rejected';
72
- }
73
- return null;
74
- }
75
- // ---------------------------------------------------------------------------
76
- // HTTP
77
- async function request(session, method, query, body) {
78
- const url = new URL(`${resolveAppUrl(session)}/api/cli/org/jobs`);
79
- for (const [key, value] of Object.entries(query)) {
80
- url.searchParams.set(key, value);
81
- }
82
- let res;
83
- try {
84
- res = await fetch(url, {
85
- method,
86
- headers: {
87
- Authorization: `Bearer ${session.token}`,
88
- ...(body ? { 'Content-Type': 'application/json' } : {}),
89
- },
90
- ...(body ? { body: JSON.stringify(body) } : {}),
91
- });
92
- }
93
- catch (err) {
94
- return {
95
- ok: false,
96
- code: 'network',
97
- message: err instanceof Error ? err.message : String(err),
98
- };
99
- }
100
- const data = (await res.json().catch(() => null));
101
- if (res.ok)
102
- return { ok: true, data: data };
103
- const message = res.status === 401
104
- ? unauthorizedHint(session)
105
- : (data?.error ?? `request failed (${res.status})`);
106
- // The route names its own refusals, so unlike the access route there is
107
- // nothing to reverse-engineer from the message here.
108
- return { ok: false, code: data?.code ?? 'error', message };
109
- }
110
- /** What the caller can do about a refusal. Printed to stderr, never stdout. */
111
- export function jobsErrorHint(code) {
112
- if (code === 'forbidden') {
113
- return 'ask an admin for access: `hacklab org access grant <your handle> --role recruiter`';
114
- }
115
- if (code === 'org_not_found') {
116
- return '`hacklab org list` shows the companies you manage';
117
- }
118
- if (code === 'not_closable') {
119
- return 'only live listings can be closed — `hacklab org jobs list` shows their status';
120
- }
121
- return null;
122
- }
123
- function jobsFail(json, code, message) {
124
- if (json)
125
- emitJsonError(code, message);
126
- error(message);
127
- const tip = jobsErrorHint(code);
128
- if (tip)
129
- hint(tip);
130
- process.exit(1);
131
- }
132
- // ---------------------------------------------------------------------------
133
- // Verbs
134
- async function jobsList(target, args) {
135
- const json = args.includes('--json');
136
- const { session, org } = target;
137
- const result = await request(session, 'GET', { orgSlug: org.slug });
138
- if (!result.ok)
139
- jobsFail(json, result.code, result.message);
140
- if (json) {
141
- printJson(result.data);
142
- return;
143
- }
144
- const { jobs, yourRole } = result.data;
145
- console.log(` ${bold(org.name)} ${dim(`/o/${org.slug}`)} ${dim(`(${yourRole})`)}`);
146
- console.log('');
147
- if (jobs.length === 0) {
148
- info('no listings yet');
149
- info(`post one with ${dim('hacklab org jobs post')}`);
150
- return;
151
- }
152
- const rows = jobs.map((job) => ({
153
- title: stripControl(job.roleTitle),
154
- status: jobStatusLabel(job.status, job.expiresAt),
155
- id: job.id,
156
- tip: jobStatusHint(job),
157
- }));
158
- const titleWidth = Math.max(...rows.map((r) => displayWidth(r.title)));
159
- const statusWidth = Math.max(...rows.map((r) => displayWidth(r.status)));
160
- for (const row of rows) {
161
- console.log(` ${bold(padEndTo(row.title, titleWidth))} ${padEndTo(row.status, statusWidth)} ${dim(row.id)}`);
162
- if (row.tip)
163
- console.log(` ${dim(row.tip)}`);
164
- }
165
- }
166
- async function jobsView(target, args) {
167
- const json = args.includes('--json');
168
- const id = args.find((a) => !a.startsWith('-'));
169
- if (!id)
170
- fail(json, 'invalid_args', 'pass a listing id');
171
- const { session, org } = target;
172
- const result = await request(session, 'GET', { orgSlug: org.slug });
173
- if (!result.ok)
174
- jobsFail(json, result.code, result.message);
175
- const job = result.data.jobs.find((candidate) => candidate.id === id);
176
- if (!job) {
177
- fail(json, 'not_found', `no listing "${id}" on ${org.name}`);
178
- }
179
- if (json) {
180
- printJson({ organization: result.data.organization, job });
181
- return;
182
- }
183
- const meta = [
184
- job.remoteOnsite,
185
- job.salaryRange,
186
- job.beltRankMin != null && job.beltRankMin > 0
187
- ? `lv.${job.beltRankMin}+`
188
- : null,
189
- ].filter(Boolean);
190
- console.log(` ${bold(stripControl(job.roleTitle))}`);
191
- console.log(` ${dim(stripControl(job.companyName))}`);
192
- console.log('');
193
- console.log(` ${dim('status')} ${jobStatusLabel(job.status, job.expiresAt)}`);
194
- if (meta.length)
195
- console.log(` ${dim('about ')} ${meta.join(' · ')}`);
196
- console.log(` ${dim('apply ')} ${job.atsUrl}`);
197
- if (job.expiresAt) {
198
- console.log(` ${dim('until ')} ${new Date(job.expiresAt).toLocaleDateString()}`);
199
- }
200
- const tip = jobStatusHint(job);
201
- if (tip) {
202
- console.log('');
203
- info(tip);
204
- }
205
- if (job.status === 'active') {
206
- console.log('');
207
- info(dim(`${resolveAppUrl(session)}/jobshop/${job.id}`));
208
- }
209
- }
210
- async function jobsClose(target, args) {
211
- const json = args.includes('--json');
212
- const id = args.find((a) => !a.startsWith('-'));
213
- if (!id)
214
- fail(json, 'invalid_args', 'pass the id of the listing to close');
215
- const { session, org } = target;
216
- const result = await request(session, 'DELETE', {
217
- orgSlug: org.slug,
218
- jobId: id,
219
- });
220
- if (!result.ok)
221
- jobsFail(json, result.code, result.message);
222
- if (json) {
223
- printJson({
224
- organization: { id: org.id, name: org.name, slug: org.slug },
225
- job: result.data.job,
226
- });
227
- return;
228
- }
229
- success(`closed ${bold(stripControl(result.data.job.roleTitle))}`);
230
- info('it is off the shop — the listing fee is not refunded');
231
- }
232
- // ---------------------------------------------------------------------------
233
- // post
234
- /** Pull every `--<field> <value>` out of argv, leaving the rest. */
235
- export function extractJobOptions(args) {
236
- const options = {};
237
- const rest = [];
238
- for (let i = 0; i < args.length; i++) {
239
- const token = args[i];
240
- const name = token.startsWith('--') ? token.slice(2) : null;
241
- if (name && JOB_FIELD_NAMES.includes(name) && i + 1 < args.length) {
242
- options[name] = args[++i];
243
- continue;
244
- }
245
- rest.push(token);
246
- }
247
- return { options, rest };
248
- }
249
- /** True when argv carries any listing field, i.e. this is the agent path. */
250
- export function hasJobFlags(args) {
251
- return JOB_FIELD_NAMES.some((name) => args.includes(`--${name}`));
252
- }
253
- async function submitPost(target, fields, json) {
254
- const result = await request(target.session, 'POST', {}, { orgSlug: target.org.slug, fields });
255
- if (!result.ok)
256
- jobsFail(json, result.code, result.message);
257
- return result.data;
258
- }
259
- function reportPosted(target, result) {
260
- success(`created the listing for ${bold(target.org.name)}`);
261
- console.log('');
262
- info('pay to submit it for review:');
263
- console.log(` ${result.checkoutUrl ?? '(no checkout url returned)'}`);
264
- console.log('');
265
- info(dim('we review every posting before it goes live.'));
266
- }
267
- async function jobsPostDirect(target, args) {
268
- const json = args.includes('--json');
269
- const { options } = extractJobOptions(args.filter((a) => a !== '--json'));
270
- const built = buildJobFields(options, target.org.name);
271
- if (!built.ok)
272
- fail(json, 'invalid_fields', built.error);
273
- const result = await submitPost(target, built.fields, json);
274
- if (json) {
275
- printJson({
276
- organization: {
277
- id: target.org.id,
278
- name: target.org.name,
279
- slug: target.org.slug,
280
- },
281
- job: result.job,
282
- checkoutUrl: result.checkoutUrl,
283
- });
284
- return;
285
- }
286
- reportPosted(target, result);
287
- }
288
- /** Ask for one field, validating with the same rules the flags go through. */
289
- async function promptJobField(spec, initial) {
290
- if (spec.type === 'choice') {
291
- const picked = await clack.select({
292
- message: spec.label,
293
- options: [
294
- ...(spec.choices ?? []).map((choice) => ({
295
- value: choice,
296
- label: choice,
297
- })),
298
- ...(spec.required ? [] : [{ value: '', label: 'skip' }]),
299
- ],
300
- });
301
- return clack.isCancel(picked) ? picked : String(picked);
302
- }
303
- return clack.text({
304
- message: spec.required
305
- ? spec.label
306
- : `${spec.label} ${dim('(blank to skip)')}`,
307
- initialValue: initial,
308
- placeholder: spec.placeholder,
309
- validate: (value) => {
310
- const normalized = normalizeJobFieldValue(spec, value ?? '');
311
- return normalized.ok ? undefined : normalized.error;
312
- },
313
- });
314
- }
315
- async function jobsPostInteractive(target) {
316
- clack.intro(bold(`hacklab org jobs post — ${target.org.name}`));
317
- clack.log.info(`a listing costs ${bold('$1,000')} and is reviewed before it goes live`);
318
- const fields = {};
319
- for (const spec of JOB_FIELDS) {
320
- // Company name is the org you are posting as; asking would only create a
321
- // way for the listing and the company page to disagree.
322
- if (spec.key === 'companyName') {
323
- fields.companyName = target.org.name;
324
- continue;
325
- }
326
- const answer = await promptJobField(spec, '');
327
- if (clack.isCancel(answer)) {
328
- clack.outro(dim('cancelled — nothing was created, nothing was charged.'));
329
- return;
330
- }
331
- const normalized = normalizeJobFieldValue(spec, String(answer));
332
- // Validated at the prompt; a failure here can only be the skip case.
333
- if (!normalized.ok)
334
- continue;
335
- if (normalized.value !== null)
336
- fields[spec.key] = normalized.value;
337
- }
338
- const go = await clack.confirm({
339
- message: `create this listing and open checkout for $1,000?`,
340
- });
341
- if (clack.isCancel(go) || !go) {
342
- clack.outro(dim('cancelled — nothing was created, nothing was charged.'));
343
- return;
344
- }
345
- const spin = clack.spinner();
346
- spin.start('creating the listing');
347
- const result = await submitPost(target, fields, false);
348
- spin.stop('created the listing');
349
- reportPosted(target, result);
350
- clack.outro(dim('done.'));
351
- }
352
- // ---------------------------------------------------------------------------
353
- /**
354
- * Dispatch `org jobs <verb>`. The caller resolves the target org, because that
355
- * is the same `--org` / single-org resolution every other org verb uses.
356
- */
357
- export async function orgJobs(target, args) {
358
- const [subToken, ...rest] = args;
359
- // Bare `org jobs` (and `--json`) is the list — the cheapest read.
360
- if (!subToken || subToken.startsWith('-'))
361
- return jobsList(target, args);
362
- const resolved = resolveCommand(subToken, JOBS_SUBCOMMANDS);
363
- if (resolved.kind === 'ambiguous') {
364
- error(`ambiguous: org jobs ${subToken} (${resolved.matches.join(', ')})`);
365
- process.exit(1);
366
- }
367
- if (resolved.kind === 'unknown') {
368
- error(`unknown subcommand: org jobs ${subToken}`);
369
- jobsUsage();
370
- }
371
- if (resolved.name === 'list')
372
- return jobsList(target, rest);
373
- if (resolved.name === 'view')
374
- return jobsView(target, rest);
375
- if (resolved.name === 'close')
376
- return jobsClose(target, rest);
377
- if (resolved.name === 'post') {
378
- // Flags (or --json) make it non-interactive; bare `post` keeps the prompts.
379
- const direct = hasJobFlags(rest) || rest.includes('--json');
380
- return direct ? jobsPostDirect(target, rest) : jobsPostInteractive(target);
381
- }
382
- }
383
- //# sourceMappingURL=org-jobs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"org-jobs.js","sourceRoot":"","sources":["../../src/commands/org-jobs.ts"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- import { type OrgFieldSpec } from '../org-fields.js';
2
- declare const ORG_ROLES: readonly ["admin", "recruiter"];
3
- type OrgRole = (typeof ORG_ROLES)[number];
4
- type ClaimableOrg = {
5
- id: string;
6
- name: string;
7
- slug: string;
8
- ycBatch?: string | null;
9
- via?: 'member' | 'email' | 'both';
10
- };
11
- export declare function claimReason(via: ClaimableOrg['via']): string;
12
- export declare function slugify(name: string): string;
13
- export declare function displayValue(spec: Pick<OrgFieldSpec, 'type'>, value: unknown): string;
14
- type Claimant = {
15
- handle: string | null;
16
- displayName: string | null;
17
- email: string;
18
- role: OrgRole;
19
- grantedBy: string | null;
20
- since: string;
21
- isYou: boolean;
22
- };
23
- /**
24
- * Map an access-route refusal to a stable code.
25
- *
26
- * The route answers with a bare `{ error: "<sentence>" }` — no machine code —
27
- * and it reuses 404 for three different refusals. Classifying on the message is
28
- * the only way to tell them apart, and telling them apart is the point: "there
29
- * is no such account" and "that account doesn't control this org" send the
30
- * caller to completely different next steps. Unrecognized text falls back to a
31
- * generic code rather than guessing.
32
- */
33
- export declare function accessErrorCode(status: number, message: string): string;
34
- /** What the caller can do about a refusal. Printed to stderr, never stdout. */
35
- export declare function accessErrorHint(code: string): string | null;
36
- /** Pull `--flag <value>` out of argv; returns the value and the rest. */
37
- export declare function extractOption(args: string[], flag: string): {
38
- value: string | undefined;
39
- rest: string[];
40
- };
41
- /** Trim and drop a leading @, so `@marin` and `marin` both work. */
42
- export declare function normalizeHandle(raw: string): string;
43
- /** `@handle`, falling back to the email when there's no hacker profile yet. */
44
- export declare function claimantLabel(claimant: Pick<Claimant, 'handle' | 'email'>): string;
45
- /**
46
- * The "granted by" column.
47
- *
48
- * `grantedBy` is a raw user id — the route has no handle for it — so there is
49
- * nothing here to turn it into a name. It prints truncated: long enough to tell
50
- * two granters apart at a glance, short enough not to swamp the row. The full
51
- * value is in `--json`.
52
- */
53
- export declare function grantedByLabel(grantedBy: string | null): string;
54
- /** Read `--role`, defaulting to admin — the historical meaning of a grant. */
55
- export declare function parseRoleFlag(args: string[]): {
56
- ok: true;
57
- role: OrgRole;
58
- rest: string[];
59
- } | {
60
- ok: false;
61
- error: string;
62
- };
63
- /** "an admin" / "a recruiter" — the grammar differs, so it lives in one place. */
64
- export declare function roleArticle(role: OrgRole): string;
65
- export declare function org(args?: string[]): Promise<void>;
66
- export {};
67
- //# sourceMappingURL=org.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"org.d.ts","sourceRoot":"","sources":["../../src/commands/org.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,YAAY,EAGlB,MAAM,kBAAkB,CAAA;AA4CzB,QAAA,MAAM,SAAS,iCAAkC,CAAA;AACjD,KAAK,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAYzC,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAEvB,GAAG,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;CAClC,CAAA;AAgBD,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,MAAM,CAI5D;AAiBD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS5C;AAID,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,EAChC,KAAK,EAAE,OAAO,GACb,MAAM,CAQR;AAwFD,KAAK,QAAQ,GAAG;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,CAAA;IAGb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAeD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAavE;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB3D;AAgGD,yEAAyE;AACzE,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAW/C;AA4YD,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnD;AAcD,+EAA+E;AAC/E,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,GAC3C,MAAM,CAGR;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI/D;AA2DD,8EAA8E;AAC9E,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EAAE,GACb;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAW5E;AAqDD,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEjD;AA+eD,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC5D"}