@profullstack/agenticjobs 0.4.2 → 0.6.0

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 (51) hide show
  1. package/README.md +42 -4
  2. package/dist/cli/index.js +70 -1
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/client/client.d.ts +36 -0
  5. package/dist/client/client.js +22 -0
  6. package/dist/client/client.js.map +1 -1
  7. package/dist/config.d.ts +1 -1
  8. package/dist/config.js +1 -1
  9. package/dist/core/auth.js +4 -1
  10. package/dist/core/auth.js.map +1 -1
  11. package/dist/core/markdown-media.d.ts +51 -0
  12. package/dist/core/markdown-media.js +224 -0
  13. package/dist/core/markdown-media.js.map +1 -0
  14. package/dist/core/resumes.d.ts +12 -0
  15. package/dist/core/resumes.js +19 -0
  16. package/dist/core/resumes.js.map +1 -1
  17. package/dist/core/updates.d.ts +149 -0
  18. package/dist/core/updates.js +332 -0
  19. package/dist/core/updates.js.map +1 -0
  20. package/dist/directory/fetch.d.ts +1 -1
  21. package/dist/mcp/tools.js +79 -0
  22. package/dist/mcp/tools.js.map +1 -1
  23. package/dist/server/middleware.d.ts +11 -6
  24. package/dist/server/middleware.js +12 -7
  25. package/dist/server/middleware.js.map +1 -1
  26. package/dist/server/routes/api.js +167 -0
  27. package/dist/server/routes/api.js.map +1 -1
  28. package/dist/server/routes/discovery.js +261 -26
  29. package/dist/server/routes/discovery.js.map +1 -1
  30. package/dist/server/routes/openapi.js +105 -0
  31. package/dist/server/routes/openapi.js.map +1 -1
  32. package/dist/server/routes/pages.js +208 -9
  33. package/dist/server/routes/pages.js.map +1 -1
  34. package/dist/views/candidates.d.ts +3 -0
  35. package/dist/views/candidates.js +3 -2
  36. package/dist/views/candidates.js.map +1 -1
  37. package/dist/views/jobs.d.ts +40 -1
  38. package/dist/views/jobs.js +69 -4
  39. package/dist/views/jobs.js.map +1 -1
  40. package/dist/views/layout.js +2 -2
  41. package/dist/views/layout.js.map +1 -1
  42. package/dist/views/me.d.ts +11 -0
  43. package/dist/views/me.js +5 -2
  44. package/dist/views/me.js.map +1 -1
  45. package/dist/views/updates.d.ts +80 -0
  46. package/dist/views/updates.js +49 -0
  47. package/dist/views/updates.js.map +1 -0
  48. package/migrations/0010_updates_and_follows.sql +70 -0
  49. package/package.json +17 -15
  50. package/web/public/app.css +44 -0
  51. package/web/public/sw.js +1 -1
@@ -15,7 +15,8 @@ import { countJobs, searchJobs } from "../../core/jobs.js";
15
15
  import { listOrgs } from "../../core/orgs.js";
16
16
  import { listPublicResumes } from "../../core/resumes.js";
17
17
  import { tagsFrom, toCandidateSummary, withTags } from "../../core/candidates.js";
18
- import { parseQuery } from "../../schema/query.js";
18
+ import { listScoped, listUpdates, scopeFrom } from "../../core/updates.js";
19
+ import { parseQuery, queryToParams } from "../../schema/query.js";
19
20
  import { WELL_KNOWN_PATH } from "../../schema/instance.js";
20
21
  import { jobPostingJsonLd } from "../../schema/jsonld.js";
21
22
  import { escapeHtml } from "../../markup/escape.js";
@@ -34,6 +35,19 @@ const MIME = {
34
35
  '.txt': 'text/plain; charset=utf-8',
35
36
  '.json': 'application/json',
36
37
  };
38
+ /**
39
+ * The querystring that identifies a filtered feed.
40
+ *
41
+ * Paging is deliberately dropped. limit and offset describe one response, not
42
+ * the search behind it, and a feed sets both itself, so leaving them in would
43
+ * hand two subscriptions to the same thing different identities.
44
+ */
45
+ function filterSearch(query) {
46
+ const params = queryToParams(query);
47
+ params.delete('limit');
48
+ params.delete('offset');
49
+ return params.toString();
50
+ }
37
51
  /**
38
52
  * The RSS envelope, written once.
39
53
  *
@@ -74,6 +88,53 @@ function rss(c, feed) {
74
88
  ].join('\n');
75
89
  return c.body(xml, 200, { 'content-type': 'application/rss+xml; charset=utf-8' });
76
90
  }
91
+ /**
92
+ * An update as a feed entry.
93
+ *
94
+ * The link an update carries is the interesting URL, but the guid has to be
95
+ * stable and ours: two employers linking the same launch post must not
96
+ * collapse into one item in a reader.
97
+ */
98
+ function updateEntry(update, publicUrl) {
99
+ const { author } = update;
100
+ return {
101
+ title: `${author.name}: ${update.body.slice(0, 80)}${update.body.length > 80 ? '...' : ''}`,
102
+ // Anchored on the board's own page rather than on the link the update
103
+ // carries, because the guid is this URL: two employers linking the same
104
+ // launch post must not collapse into one item in a reader.
105
+ url: `${publicUrl}/updates#${update.id}`,
106
+ at: update.createdAt,
107
+ body: update.link === null ? update.body : `${update.body} ${update.link}`,
108
+ category: 'Update',
109
+ };
110
+ }
111
+ /** What a scoped feed calls itself. */
112
+ function scopeTitle(scope, boardName) {
113
+ if (scope.kind === 'author')
114
+ return `${scope.name} on ${boardName}`;
115
+ return `${boardName} updates`;
116
+ }
117
+ /** The active filters in words, or null when nothing is filtered. */
118
+ function describeQuery(query) {
119
+ const parts = [];
120
+ if (query.q !== null)
121
+ parts.push(`"${query.q}"`);
122
+ if (query.workplace !== null)
123
+ parts.push(query.workplace);
124
+ if (query.employmentType !== null)
125
+ parts.push(query.employmentType);
126
+ if (query.seniority !== null)
127
+ parts.push(query.seniority);
128
+ if (query.agentPolicy !== null)
129
+ parts.push(`agents: ${query.agentPolicy}`);
130
+ if (query.tags.length > 0)
131
+ parts.push(query.tags.join(' + '));
132
+ if (query.salaryMin !== null)
133
+ parts.push(`from ${query.salaryMin}`);
134
+ if (query.org !== null)
135
+ parts.push(query.org);
136
+ return parts.length === 0 ? null : parts.join(', ');
137
+ }
77
138
  export function discoveryRoutes() {
78
139
  const routes = new Hono();
79
140
  routes.get('/assets/:file', async (c) => {
@@ -151,7 +212,11 @@ export function discoveryRoutes() {
151
212
  });
152
213
  routes.get('/jobs.rss', async (c) => {
153
214
  const { pool, config } = c.get('deps');
154
- const page = await searchJobs(pool, { ...parseQuery(new URLSearchParams()), limit: 100 });
215
+ // The same query the page takes. This built its query from an EMPTY
216
+ // URLSearchParams, so every filter a reader put in the address was thrown
217
+ // away and the feed answered with the whole board.
218
+ const query = { ...parseQuery(new URL(c.req.url).searchParams), limit: 100, offset: 0 };
219
+ const page = await searchJobs(pool, query);
155
220
  const items = page.items
156
221
  .map((job) => {
157
222
  const url = `${config.publicUrl}/jobs/${job.slug}`;
@@ -199,16 +264,22 @@ export function discoveryRoutes() {
199
264
  routes.get('/feed', async (c) => {
200
265
  const { pool, config } = c.get('deps');
201
266
  const url = new URL(c.req.url);
202
- const query = { ...parseQuery(url.searchParams), limit: 100, offset: 0 };
203
- const page = await searchJobs(pool, query);
204
- const tags = query.tags;
267
+ const requested = parseQuery(url.searchParams);
268
+ const page = await searchJobs(pool, { ...requested, limit: 100, offset: 0 });
269
+ // The feed has always *served* the whole query and then described itself by
270
+ // its tags alone. That is the worst half to get wrong: every narrowing of
271
+ // one tag claims the same rel=self, so a reader that dedupes on it, and
272
+ // they do, keeps whichever it saw first and quietly ignores the rest.
273
+ const search = filterSearch(requested);
274
+ const suffix = search === '' ? '' : `?${search}`;
275
+ const narrowed = describeQuery(requested);
205
276
  return rss(c, {
206
- title: tags.length === 0 ? `${config.boardName} jobs` : `${config.boardName} jobs: ${tags.join(', ')}`,
207
- link: tags.length === 0 ? config.publicUrl : `${config.publicUrl}/?tags=${encodeURIComponent(tags.join(','))}`,
208
- description: tags.length === 0
277
+ title: narrowed === null ? `${config.boardName} jobs` : `${config.boardName} jobs: ${narrowed}`,
278
+ link: search === '' ? config.publicUrl : `${config.publicUrl}/?${search}`,
279
+ description: narrowed === null
209
280
  ? config.boardTagline
210
- : `Jobs on ${config.boardName} tagged ${tags.join(', ')}.`,
211
- self: `${config.publicUrl}/feed${tags.length === 0 ? '' : `?tags=${encodeURIComponent(tags.join(','))}`}`,
281
+ : `Jobs on ${config.boardName} matching ${narrowed}.`,
282
+ self: `${config.publicUrl}/feed${suffix}`,
212
283
  entries: page.items.map((job) => ({
213
284
  title: `${job.title} at ${job.org.name}`,
214
285
  url: `${config.publicUrl}/jobs/${job.slug}`,
@@ -242,6 +313,58 @@ export function discoveryRoutes() {
242
313
  })),
243
314
  });
244
315
  });
316
+ /**
317
+ * Updates, filtered to one author: /updates/feed?org=acme
318
+ *
319
+ * Following an employer in a feed reader is the same thing as following
320
+ * them on the board, and neither needs an account.
321
+ */
322
+ routes.get('/updates/feed', async (c) => {
323
+ const { pool, config } = c.get('deps');
324
+ const url = new URL(c.req.url);
325
+ const scope = await scopeFrom(pool, url.searchParams);
326
+ const updates = await listScoped(pool, scope);
327
+ const query = url.search === '?' ? '' : url.search;
328
+ return rss(c, {
329
+ title: scopeTitle(scope, config.boardName),
330
+ link: scope.kind === 'author'
331
+ ? `${config.publicUrl}/${scope.author === 'employer' ? 'employers' : 'candidates'}/${scope.slug}`
332
+ : `${config.publicUrl}/updates`,
333
+ description: scope.kind === 'author'
334
+ ? `Updates from ${scope.name} on ${config.boardName}.`
335
+ : `News from the employers and candidates on ${config.boardName}.`,
336
+ self: `${config.publicUrl}/updates/feed${query}`,
337
+ entries: updates.map((update) => updateEntry(update, config.publicUrl)),
338
+ });
339
+ });
340
+ /** The same updates as Markdown, filtered the same way. */
341
+ routes.get('/updates.md', async (c) => {
342
+ const { pool, config } = c.get('deps');
343
+ const scope = await scopeFrom(pool, new URL(c.req.url).searchParams);
344
+ const updates = await listScoped(pool, scope);
345
+ const lines = [
346
+ `# ${scopeTitle(scope, config.boardName)}`,
347
+ '',
348
+ scope.kind === 'unknown'
349
+ ? `Nobody here is "${scope.slug}".`
350
+ : 'Short posts from the employers and candidates on this board. Everyone posting is a',
351
+ ...(scope.kind === 'unknown'
352
+ ? []
353
+ : ['real employer or a person with a resume here, and nobody may post more than five a day.']),
354
+ '',
355
+ `${updates.length} ${updates.length === 1 ? 'update' : 'updates'}.`,
356
+ '',
357
+ ];
358
+ for (const update of updates) {
359
+ const where = update.author.slug === null
360
+ ? null
361
+ : update.author.kind === 'employer'
362
+ ? `${config.publicUrl}/employers/${update.author.slug}`
363
+ : `${config.publicUrl}/candidates/${update.author.slug}`;
364
+ lines.push(`## ${update.author.name}`, '', `- Posted: ${new Date(update.createdAt).toISOString()}`, `- As: ${update.author.kind}`, ...(where === null ? [] : [`- Page: ${where}`]), ...(update.link === null ? [] : [`- Link: ${update.link}`]), '', update.body, '');
365
+ }
366
+ return c.text(lines.join('\n'), 200, { 'content-type': 'text/markdown; charset=utf-8' });
367
+ });
245
368
  /**
246
369
  * Everything the board publishes, in one feed.
247
370
  *
@@ -250,16 +373,36 @@ export function discoveryRoutes() {
250
373
  */
251
374
  routes.get('/feed.rss', async (c) => {
252
375
  const { pool, config } = c.get('deps');
253
- const [page, orgs, candidates] = await Promise.all([
254
- searchJobs(pool, { ...parseQuery(new URLSearchParams()), limit: 100 }),
376
+ // Everything, and still filterable: the same query the jobs surfaces take,
377
+ // with its tags also narrowing the people. An employer is neither a job
378
+ // nor a skill, so a filtered feed drops them rather than pretending a
379
+ // company matches "remote".
380
+ const url = new URL(c.req.url);
381
+ const query = parseQuery(url.searchParams);
382
+ const filtered = url.search !== '' && url.search !== '?';
383
+ // Tags are the only filter that means the same thing on both halves of the
384
+ // board. Workplace, employment type, seniority, agent policy, a salary
385
+ // floor and an employer are questions about a job, and a person cannot
386
+ // answer them, so asking one of them is asking for jobs: carrying every
387
+ // candidate through would answer a narrow question with the whole roster.
388
+ const jobsOnly = query.workplace !== null ||
389
+ query.employmentType !== null ||
390
+ query.seniority !== null ||
391
+ query.agentPolicy !== null ||
392
+ query.salaryMin !== null ||
393
+ query.org !== null ||
394
+ query.q !== null;
395
+ const [page, orgs, candidates, updates] = await Promise.all([
396
+ searchJobs(pool, { ...query, limit: 100, offset: 0 }),
255
397
  listOrgs(pool, 100),
256
398
  listPublicResumes(pool, 100),
399
+ listUpdates(pool, 100),
257
400
  ]);
258
401
  return rss(c, {
259
- title: config.boardName,
260
- link: config.publicUrl,
402
+ title: filtered ? `${config.boardName}: ${url.search.slice(1)}` : config.boardName,
403
+ link: config.publicUrl + url.search,
261
404
  description: config.boardTagline,
262
- self: `${config.publicUrl}/feed.rss`,
405
+ self: `${config.publicUrl}/feed.rss${url.search}`,
263
406
  entries: [
264
407
  ...page.items.map((job) => ({
265
408
  title: `${job.title} at ${job.org.name}`,
@@ -268,14 +411,22 @@ export function discoveryRoutes() {
268
411
  body: toPlainText(job.description, 500),
269
412
  category: 'Job',
270
413
  })),
271
- ...orgs.map((org) => ({
272
- title: `${org.name} is hiring on ${config.boardName}`,
273
- url: `${config.publicUrl}/employers/${org.slug}`,
274
- at: org.createdAt,
275
- body: org.description ?? `${org.name} posts its openings on ${config.boardName}.`,
276
- category: 'Employer',
277
- })),
278
- ...candidates.map(toCandidateSummary).map((summary) => ({
414
+ ...(filtered
415
+ ? []
416
+ : orgs.map((org) => ({
417
+ title: `${org.name} is hiring on ${config.boardName}`,
418
+ url: `${config.publicUrl}/employers/${org.slug}`,
419
+ at: org.createdAt,
420
+ body: org.description ?? `${org.name} posts its openings on ${config.boardName}.`,
421
+ category: 'Employer',
422
+ }))),
423
+ // An update is news rather than a listing, so it answers none of the
424
+ // filters either. Unfiltered, it is exactly what a reader following
425
+ // the whole board wants.
426
+ ...(filtered ? [] : updates.map((update) => updateEntry(update, config.publicUrl))),
427
+ ...(jobsOnly
428
+ ? []
429
+ : withTags(candidates.map(toCandidateSummary), query.tags)).map((summary) => ({
279
430
  title: `${summary.name} is looking`,
280
431
  url: `${config.publicUrl}/candidates/${summary.slug}`,
281
432
  at: summary.updatedAt,
@@ -317,6 +468,7 @@ export function discoveryRoutes() {
317
468
  '/',
318
469
  '/candidates',
319
470
  '/employers',
471
+ '/updates',
320
472
  '/docs',
321
473
  '/docs/openresume',
322
474
  '/docs/openjob',
@@ -351,9 +503,11 @@ export function discoveryRoutes() {
351
503
  '',
352
504
  `Sitemap: ${config.publicUrl}/sitemap.xml`,
353
505
  '',
354
- '# Feeds. Jobs and candidates take ?tags=a,b; feed.rss is everything.',
506
+ '# Feeds. Jobs and candidates take ?tags=a,b; updates take ?org= or',
507
+ '# ?candidate=; feed.rss is everything.',
355
508
  `# ${config.publicUrl}/feed`,
356
509
  `# ${config.publicUrl}/candidates/feed`,
510
+ `# ${config.publicUrl}/updates/feed`,
357
511
  `# ${config.publicUrl}/feed.rss`,
358
512
  '',
359
513
  ].join('\n'));
@@ -364,6 +518,63 @@ export function discoveryRoutes() {
364
518
  * The point of this board is that a model does not have to guess, so this
365
519
  * says plainly what is here, what is not, and which two endpoints matter.
366
520
  */
521
+ /**
522
+ * The same listings as Markdown.
523
+ *
524
+ * A model handed HTML has to strip a page apart to find the job; handed
525
+ * Markdown it has the document. This is the same query as every other
526
+ * listing surface, so a filter written once works in the browser, the feed,
527
+ * the JSON and here.
528
+ */
529
+ routes.get('/jobs.md', async (c) => {
530
+ const { pool, config } = c.get('deps');
531
+ const url = new URL(c.req.url);
532
+ const query = { ...parseQuery(url.searchParams), limit: 100, offset: 0 };
533
+ const page = await searchJobs(pool, query);
534
+ const said = describeQuery(query);
535
+ const lines = [
536
+ `# ${config.boardName}`,
537
+ '',
538
+ config.boardTagline,
539
+ '',
540
+ said === null ? `${page.total} open.` : `${page.total} matching ${said}.`,
541
+ '',
542
+ ];
543
+ for (const job of page.items) {
544
+ const where = [job.workplace, job.location].filter((part) => part !== null).join(', ');
545
+ const badges = [...job.tags, ...job.stack].filter((item, index, all) => all.findIndex((other) => other.toLowerCase() === item.toLowerCase()) === index);
546
+ lines.push(`## ${job.title}`, '', `- Employer: ${job.org.name}`, `- Where: ${where}`, `- Type: ${job.employmentType}`, `- Agents: ${job.agentPolicy}`, ...(badges.length === 0 ? [] : [`- Tags: ${badges.join(', ')}`]), `- Apply: ${config.publicUrl}/api/v1/jobs/${job.slug}/apply-schema`, `- Page: ${config.publicUrl}/jobs/${job.slug}`, '', toPlainText(job.description, 800), '');
547
+ }
548
+ if (page.items.length === 0) {
549
+ lines.push('Nothing matches. Every listing here was posted by its employer, so an empty');
550
+ lines.push('result means nobody has posted that job, not that a crawler missed it.', '');
551
+ }
552
+ return c.text(lines.join('\n'), 200, {
553
+ 'content-type': 'text/markdown; charset=utf-8',
554
+ });
555
+ });
556
+ /** The candidates, as Markdown, filtered by the same tags. */
557
+ routes.get('/candidates.md', async (c) => {
558
+ const { pool, config } = c.get('deps');
559
+ const tags = tagsFrom(new URL(c.req.url).searchParams);
560
+ const wanted = withTags((await listPublicResumes(pool, 100)).map(toCandidateSummary), tags);
561
+ const lines = [
562
+ `# ${config.boardName}: candidates`,
563
+ '',
564
+ 'People who published a resume here. Every one chose to be listed.',
565
+ '',
566
+ tags.length === 0
567
+ ? `${wanted.length} listed.`
568
+ : `${wanted.length} listing all of ${tags.join(', ')}.`,
569
+ '',
570
+ ];
571
+ for (const candidate of wanted) {
572
+ lines.push(`## ${candidate.name}`, '', ...(candidate.headline === null ? [] : [candidate.headline, '']), ...(candidate.location === null ? [] : [`- Where: ${candidate.location}`]), ...(candidate.skills.length === 0 ? [] : [`- Skills: ${candidate.skills.join(', ')}`]), `- Resume: ${config.publicUrl}/api/v1/candidates/${candidate.slug}`, `- Page: ${config.publicUrl}/candidates/${candidate.slug}`, '');
573
+ }
574
+ return c.text(lines.join('\n'), 200, {
575
+ 'content-type': 'text/markdown; charset=utf-8',
576
+ });
577
+ });
367
578
  routes.get('/llms.txt', async (c) => {
368
579
  const { pool, config } = c.get('deps');
369
580
  const counts = await countJobs(pool);
@@ -382,8 +593,32 @@ export function discoveryRoutes() {
382
593
  '',
383
594
  `- [Instance descriptor](${config.publicUrl}${WELL_KNOWN_PATH}): what this board is and where everything lives`,
384
595
  `- [OpenAPI](${config.publicUrl}/api/v1/openapi.json): every endpoint`,
385
- `- [Search](${config.publicUrl}/api/v1/jobs?q=): q, workplace, employmentType, seniority, agentPolicy, tag, salaryMin`,
386
- `- [Feed](${config.publicUrl}/jobs.json): the 100 most recent, as JSON Feed`,
596
+ `- [Search](${config.publicUrl}/api/v1/jobs?q=): q, workplace, employmentType, seniority, agentPolicy, tags, salaryMin, org, sort`,
597
+ '',
598
+ 'The same query works on every representation, so a filter written once',
599
+ 'can be read as whichever of these suits you:',
600
+ '',
601
+ `- JSON: ${config.publicUrl}/api/v1/jobs?workplace=remote&tags=javascript`,
602
+ `- Markdown: ${config.publicUrl}/jobs.md?workplace=remote&tags=javascript`,
603
+ `- RSS: ${config.publicUrl}/feed?workplace=remote&tags=javascript`,
604
+ `- JSON Feed: ${config.publicUrl}/jobs.json?workplace=remote&tags=javascript`,
605
+ `- HTML: ${config.publicUrl}/?workplace=remote&tags=javascript`,
606
+ '',
607
+ `People are the same, filtered by tag: ${config.publicUrl}/candidates.md?tags=javascript,`,
608
+ `with ${config.publicUrl}/api/v1/candidates and ${config.publicUrl}/candidates/feed alongside.`,
609
+ '',
610
+ '## Updates',
611
+ '',
612
+ 'Employers and candidates post short updates: hiring news, what shipped, who is free',
613
+ 'next. Every one is from a real employer or a person with a resume here, capped at five',
614
+ 'a day each, and carries at most one link.',
615
+ '',
616
+ `- JSON: ${config.publicUrl}/api/v1/updates`,
617
+ `- Markdown: ${config.publicUrl}/updates.md`,
618
+ `- RSS: ${config.publicUrl}/updates/feed`,
619
+ `- HTML: ${config.publicUrl}/updates`,
620
+ '',
621
+ 'One author at a time with ?org=slug or ?candidate=slug on any of them.',
387
622
  '',
388
623
  '## Applying',
389
624
  '',
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/server/routes/discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/server/routes/discovery.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@ export function openApiDocument(config) {
36
36
  { name: 'resumes', description: 'Markdown resumes, created and edited over the API.' },
37
37
  { name: 'candidates', description: 'People who published a resume here.' },
38
38
  { name: 'employers', description: 'The organisations a listing belongs to.' },
39
+ { name: 'updates', description: 'Short posts from employers and candidates, and following them.' },
39
40
  { name: 'auth', description: 'Device flow for terminals, magic links for browsers.' },
40
41
  { name: 'federation', description: 'The directory of instances, and search across them.' },
41
42
  ],
@@ -181,6 +182,110 @@ export function openApiDocument(config) {
181
182
  responses: { 200: ok('The candidate.'), 404: err() },
182
183
  },
183
184
  },
185
+ '/api/v1/updates': {
186
+ get: {
187
+ tags: ['updates'],
188
+ summary: 'Updates from employers and candidates. Public.',
189
+ description: 'Add ?org=slug or ?candidate=slug for one author. ?following=true is your own feed and is the only form that needs a credential. The same parameters read as Markdown at /updates.md and as RSS at /updates/feed.',
190
+ parameters: [
191
+ {
192
+ name: 'org',
193
+ in: 'query',
194
+ required: false,
195
+ schema: { type: 'string' },
196
+ description: "An employer's slug.",
197
+ },
198
+ {
199
+ name: 'candidate',
200
+ in: 'query',
201
+ required: false,
202
+ schema: { type: 'string' },
203
+ description: "A candidate's slug.",
204
+ },
205
+ {
206
+ name: 'following',
207
+ in: 'query',
208
+ required: false,
209
+ schema: { type: 'boolean' },
210
+ description: 'Only from who you follow. Needs a credential.',
211
+ },
212
+ ],
213
+ responses: { 200: ok('Updates.'), 401: err(), 404: err() },
214
+ },
215
+ post: {
216
+ tags: ['updates'],
217
+ summary: 'Post an update.',
218
+ description: 'With "org", as that employer, and only if you post for them. Without it, as yourself, which requires a published resume so the update has a page behind it. At most 600 characters and one link, five a day per author, and no two the same.',
219
+ security: [{ bearer: [] }],
220
+ requestBody: {
221
+ required: true,
222
+ content: {
223
+ 'application/json': {
224
+ schema: {
225
+ type: 'object',
226
+ required: ['body'],
227
+ properties: {
228
+ body: { type: 'string', maxLength: 600 },
229
+ link: { type: 'string', format: 'uri' },
230
+ org: { type: 'string', description: "Post as this employer instead of as yourself." },
231
+ },
232
+ },
233
+ },
234
+ },
235
+ },
236
+ responses: { 201: ok('The update.'), 400: err(), 401: err(), 403: err(), 404: err(), 429: err() },
237
+ },
238
+ },
239
+ '/api/v1/updates/{id}': {
240
+ delete: {
241
+ tags: ['updates'],
242
+ summary: 'Delete an update you posted.',
243
+ description: 'Yours, or any update by the employer you post for. Anything else is a 404 rather than a 403, because the two are the same fact to a caller who should not be able to tell them apart.',
244
+ security: [{ bearer: [] }],
245
+ parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],
246
+ responses: { 200: ok('Gone.'), 401: err(), 404: err() },
247
+ },
248
+ },
249
+ '/api/v1/orgs/{slug}/follow': {
250
+ post: {
251
+ tags: ['updates'],
252
+ summary: 'Follow an employer.',
253
+ security: [{ bearer: [] }],
254
+ parameters: [pathParam('slug')],
255
+ responses: { 200: ok('Whether you follow them, and how many do.'), 401: err(), 404: err() },
256
+ },
257
+ delete: {
258
+ tags: ['updates'],
259
+ summary: 'Stop following an employer.',
260
+ security: [{ bearer: [] }],
261
+ parameters: [pathParam('slug')],
262
+ responses: { 200: ok('Whether you follow them, and how many do.'), 401: err(), 404: err() },
263
+ },
264
+ },
265
+ '/api/v1/candidates/{slug}/follow': {
266
+ post: {
267
+ tags: ['updates'],
268
+ summary: 'Follow a candidate.',
269
+ security: [{ bearer: [] }],
270
+ parameters: [pathParam('slug')],
271
+ responses: { 200: ok('Whether you follow them, and how many do.'), 401: err(), 404: err() },
272
+ },
273
+ delete: {
274
+ tags: ['updates'],
275
+ summary: 'Stop following a candidate.',
276
+ security: [{ bearer: [] }],
277
+ parameters: [pathParam('slug')],
278
+ responses: { 200: ok('Whether you follow them, and how many do.'), 401: err(), 404: err() },
279
+ },
280
+ },
281
+ '/api/v1/me/following': {
282
+ get: {
283
+ tags: ['updates'],
284
+ summary: 'Who you follow.',
285
+ security: [{ bearer: [] }],
286
+ responses: { 200: ok('Employers and candidates you follow.'), 401: err() },
287
+ },
288
+ },
184
289
  '/api/v1/jobs/import': {
185
290
  post: {
186
291
  tags: ['jobs'],