@profullstack/agenticjobs 0.3.0 → 0.4.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.
- package/dist/cli/index.d.ts +9 -1
- package/dist/cli/index.js +87 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/client/client.d.ts +16 -0
- package/dist/client/client.js +8 -0
- package/dist/client/client.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/core/applications.js +4 -1
- package/dist/core/applications.js.map +1 -1
- package/dist/core/candidates.d.ts +42 -0
- package/dist/core/candidates.js +143 -0
- package/dist/core/candidates.js.map +1 -0
- package/dist/core/import-job.d.ts +36 -0
- package/dist/core/import-job.js +221 -0
- package/dist/core/import-job.js.map +1 -0
- package/dist/core/jobs.d.ts +29 -0
- package/dist/core/jobs.js +101 -31
- package/dist/core/jobs.js.map +1 -1
- package/dist/core/resumes.d.ts +23 -1
- package/dist/core/resumes.js +86 -9
- package/dist/core/resumes.js.map +1 -1
- package/dist/directory/fetch.d.ts +11 -1
- package/dist/directory/fetch.js +23 -8
- package/dist/directory/fetch.js.map +1 -1
- package/dist/markup/resume.js +7 -1
- package/dist/markup/resume.js.map +1 -1
- package/dist/schema/job.d.ts +13 -10
- package/dist/schema/job.js.map +1 -1
- package/dist/schema/query.js +8 -4
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/text.d.ts +12 -1
- package/dist/schema/text.js +14 -3
- package/dist/schema/text.js.map +1 -1
- package/dist/server/routes/api.js +183 -18
- package/dist/server/routes/api.js.map +1 -1
- package/dist/server/routes/discovery.js +162 -1
- package/dist/server/routes/discovery.js.map +1 -1
- package/dist/server/routes/pages.js +30 -1
- package/dist/server/routes/pages.js.map +1 -1
- package/dist/views/candidates.d.ts +47 -0
- package/dist/views/candidates.js +21 -0
- package/dist/views/candidates.js.map +1 -0
- package/dist/views/jobs.d.ts +13 -0
- package/dist/views/jobs.js +35 -10
- package/dist/views/jobs.js.map +1 -1
- package/dist/views/layout.js +2 -2
- package/dist/views/layout.js.map +1 -1
- package/dist/views/me.js +3 -1
- package/dist/views/me.js.map +1 -1
- package/dist/views/post.js +1 -1
- package/dist/views/post.js.map +1 -1
- package/docs/openjob.md +16 -9
- package/migrations/0006_board_only_applications.sql +34 -0
- package/migrations/0007_public_resumes.sql +24 -0
- package/migrations/0008_backfill_public_slugs.sql +57 -0
- package/migrations/0009_shorten_runaway_slugs.sql +21 -0
- package/package.json +1 -1
- package/web/public/app.css +45 -2
- package/web/public/sw.js +29 -5
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning a job posting somewhere else into a listing here.
|
|
3
|
+
*
|
|
4
|
+
* This is what a URL is for now: applications are taken on the board, so a
|
|
5
|
+
* link to a job elsewhere is a source to import, never a destination to send
|
|
6
|
+
* an applicant to.
|
|
7
|
+
*
|
|
8
|
+
* Two paths, in this order:
|
|
9
|
+
*
|
|
10
|
+
* 1. **schema.org JobPosting in JSON-LD.** Most boards emit it, Google asks
|
|
11
|
+
* for it, and it is structured, so it is worth trying first and worth
|
|
12
|
+
* trusting when it is there.
|
|
13
|
+
* 2. **The page itself.** og:title and the readable text. Everything a page
|
|
14
|
+
* does not say stays unset rather than being guessed at.
|
|
15
|
+
*
|
|
16
|
+
* An import is always a DRAFT. Extraction from a page nobody designed for it
|
|
17
|
+
* is approximate, and this board's whole seam is that a machine prepares and a
|
|
18
|
+
* person releases. A silently published import would be a scraped listing on a
|
|
19
|
+
* board whose pitch is that nothing here is scraped.
|
|
20
|
+
*/
|
|
21
|
+
import { type EmploymentType, type Workplace } from '../schema/job.ts';
|
|
22
|
+
export interface ImportedJob {
|
|
23
|
+
title: string;
|
|
24
|
+
description: string;
|
|
25
|
+
sourceUrl: string;
|
|
26
|
+
employmentType?: EmploymentType;
|
|
27
|
+
workplace?: Workplace;
|
|
28
|
+
location?: string;
|
|
29
|
+
/** Which path produced this, so the caller can say so rather than imply more. */
|
|
30
|
+
via: 'jsonld' | 'page';
|
|
31
|
+
/** What could not be read, in words a person can act on. */
|
|
32
|
+
warnings: string[];
|
|
33
|
+
}
|
|
34
|
+
export declare class JobImportProblem extends Error {
|
|
35
|
+
}
|
|
36
|
+
export declare function extractJob(html: string, sourceUrl: string): ImportedJob;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning a job posting somewhere else into a listing here.
|
|
3
|
+
*
|
|
4
|
+
* This is what a URL is for now: applications are taken on the board, so a
|
|
5
|
+
* link to a job elsewhere is a source to import, never a destination to send
|
|
6
|
+
* an applicant to.
|
|
7
|
+
*
|
|
8
|
+
* Two paths, in this order:
|
|
9
|
+
*
|
|
10
|
+
* 1. **schema.org JobPosting in JSON-LD.** Most boards emit it, Google asks
|
|
11
|
+
* for it, and it is structured, so it is worth trying first and worth
|
|
12
|
+
* trusting when it is there.
|
|
13
|
+
* 2. **The page itself.** og:title and the readable text. Everything a page
|
|
14
|
+
* does not say stays unset rather than being guessed at.
|
|
15
|
+
*
|
|
16
|
+
* An import is always a DRAFT. Extraction from a page nobody designed for it
|
|
17
|
+
* is approximate, and this board's whole seam is that a machine prepares and a
|
|
18
|
+
* person releases. A silently published import would be a scraped listing on a
|
|
19
|
+
* board whose pitch is that nothing here is scraped.
|
|
20
|
+
*/
|
|
21
|
+
import { EMPLOYMENT_TYPES, WORKPLACES } from "../schema/job.js";
|
|
22
|
+
export class JobImportProblem extends Error {
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Elements whose contents are never the job.
|
|
26
|
+
*
|
|
27
|
+
* The first group carries no readable text at all. The second is site
|
|
28
|
+
* furniture: a page without a <main> falls back to the whole <body>, and
|
|
29
|
+
* without this the listing ends up carrying "Back to gigs", the view counter,
|
|
30
|
+
* a testimonials block and an advertisement. That is what happened on the
|
|
31
|
+
* first real import, so this is not hypothetical tidying.
|
|
32
|
+
*/
|
|
33
|
+
const DEAD = /<(script|style|template|noscript|svg|nav|header|footer|aside|form|button|select)[^>]*>[\s\S]*?<\/\1>/gi;
|
|
34
|
+
function stripTags(html) {
|
|
35
|
+
return html
|
|
36
|
+
.replace(DEAD, ' ')
|
|
37
|
+
.replace(/<br\s*\/?>/gi, '\n')
|
|
38
|
+
.replace(/<\/(p|div|li|h[1-6]|tr)>/gi, '\n')
|
|
39
|
+
.replace(/<li[^>]*>/gi, '- ')
|
|
40
|
+
.replace(/<[^>]+>/g, ' ');
|
|
41
|
+
}
|
|
42
|
+
/** The five named entities plus numeric ones; enough for text nobody will re-parse. */
|
|
43
|
+
function decode(text) {
|
|
44
|
+
return text
|
|
45
|
+
.replace(/&(#x?[0-9a-f]+|[a-z]+);/gi, (whole, body) => {
|
|
46
|
+
const named = {
|
|
47
|
+
amp: '&',
|
|
48
|
+
lt: '<',
|
|
49
|
+
gt: '>',
|
|
50
|
+
quot: '"',
|
|
51
|
+
apos: "'",
|
|
52
|
+
nbsp: ' ',
|
|
53
|
+
'#39': "'",
|
|
54
|
+
};
|
|
55
|
+
const key = body.toLowerCase();
|
|
56
|
+
if (named[key] !== undefined)
|
|
57
|
+
return named[key];
|
|
58
|
+
if (body.startsWith('#x') || body.startsWith('#X')) {
|
|
59
|
+
const code = Number.parseInt(body.slice(2), 16);
|
|
60
|
+
return Number.isFinite(code) ? String.fromCodePoint(code) : whole;
|
|
61
|
+
}
|
|
62
|
+
if (body.startsWith('#')) {
|
|
63
|
+
const code = Number.parseInt(body.slice(1), 10);
|
|
64
|
+
return Number.isFinite(code) ? String.fromCodePoint(code) : whole;
|
|
65
|
+
}
|
|
66
|
+
return whole;
|
|
67
|
+
})
|
|
68
|
+
.replace(/ /g, ' ');
|
|
69
|
+
}
|
|
70
|
+
function tidy(text) {
|
|
71
|
+
return decode(text)
|
|
72
|
+
.split('\n')
|
|
73
|
+
.map((line) => line.replace(/[ \t]+/g, ' ').trim())
|
|
74
|
+
.filter((line, index, lines) => line !== '' || lines[index - 1] !== '')
|
|
75
|
+
.join('\n')
|
|
76
|
+
.trim();
|
|
77
|
+
}
|
|
78
|
+
function metaContent(html, key) {
|
|
79
|
+
// Attribute order varies, so both orders are tried rather than assumed.
|
|
80
|
+
const patterns = [
|
|
81
|
+
new RegExp(`<meta[^>]+(?:property|name)=["']${key}["'][^>]+content=["']([^"']*)["']`, 'i'),
|
|
82
|
+
new RegExp(`<meta[^>]+content=["']([^"']*)["'][^>]+(?:property|name)=["']${key}["']`, 'i'),
|
|
83
|
+
];
|
|
84
|
+
for (const pattern of patterns) {
|
|
85
|
+
const found = pattern.exec(html)?.[1];
|
|
86
|
+
if (found !== undefined && found.trim() !== '')
|
|
87
|
+
return decode(found.trim());
|
|
88
|
+
}
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
/** JSON-LD blocks, including the @graph wrapper a lot of CMSes emit. */
|
|
92
|
+
function jsonLdNodes(html) {
|
|
93
|
+
const nodes = [];
|
|
94
|
+
const blocks = html.matchAll(/<script[^>]+type=["']application\/ld\+json["'][^>]*>([\s\S]*?)<\/script>/gi);
|
|
95
|
+
for (const block of blocks) {
|
|
96
|
+
let parsed;
|
|
97
|
+
try {
|
|
98
|
+
parsed = JSON.parse(decode(block[1] ?? ''));
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// A malformed block is not a reason to abandon the import; there is
|
|
102
|
+
// usually more than one and the page still has readable text.
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const queue = Array.isArray(parsed) ? [...parsed] : [parsed];
|
|
106
|
+
while (queue.length > 0) {
|
|
107
|
+
const node = queue.shift();
|
|
108
|
+
if (typeof node !== 'object' || node === null)
|
|
109
|
+
continue;
|
|
110
|
+
const record = node;
|
|
111
|
+
const graph = record['@graph'];
|
|
112
|
+
if (Array.isArray(graph))
|
|
113
|
+
queue.push(...graph);
|
|
114
|
+
nodes.push(record);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return nodes;
|
|
118
|
+
}
|
|
119
|
+
function typeOf(node) {
|
|
120
|
+
const raw = node['@type'];
|
|
121
|
+
if (typeof raw === 'string')
|
|
122
|
+
return [raw];
|
|
123
|
+
if (Array.isArray(raw))
|
|
124
|
+
return raw.filter((t) => typeof t === 'string');
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
/** schema.org spells it MONTHLY, PART_TIME and so on. */
|
|
128
|
+
function employmentTypeOf(value) {
|
|
129
|
+
const raw = Array.isArray(value) ? value[0] : value;
|
|
130
|
+
if (typeof raw !== 'string')
|
|
131
|
+
return undefined;
|
|
132
|
+
const normalised = raw.toLowerCase().replace(/_/g, '-').trim();
|
|
133
|
+
return EMPLOYMENT_TYPES.includes(normalised)
|
|
134
|
+
? normalised
|
|
135
|
+
: undefined;
|
|
136
|
+
}
|
|
137
|
+
function workplaceOf(node) {
|
|
138
|
+
const remote = node['jobLocationType'];
|
|
139
|
+
if (typeof remote === 'string' && remote.toUpperCase().includes('TELECOMMUTE'))
|
|
140
|
+
return 'remote';
|
|
141
|
+
const raw = node['workplace'];
|
|
142
|
+
if (typeof raw === 'string' && WORKPLACES.includes(raw.toLowerCase())) {
|
|
143
|
+
return raw.toLowerCase();
|
|
144
|
+
}
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
function locationOf(node) {
|
|
148
|
+
const place = Array.isArray(node['jobLocation']) ? node['jobLocation'][0] : node['jobLocation'];
|
|
149
|
+
if (typeof place !== 'object' || place === null)
|
|
150
|
+
return undefined;
|
|
151
|
+
const address = place['address'];
|
|
152
|
+
if (typeof address === 'string')
|
|
153
|
+
return address;
|
|
154
|
+
if (typeof address !== 'object' || address === null)
|
|
155
|
+
return undefined;
|
|
156
|
+
const parts = ['addressLocality', 'addressRegion', 'addressCountry']
|
|
157
|
+
.map((key) => address[key])
|
|
158
|
+
.filter((part) => typeof part === 'string' && part.trim() !== '');
|
|
159
|
+
return parts.length === 0 ? undefined : parts.join(', ');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The readable body of a page, without the furniture.
|
|
163
|
+
*
|
|
164
|
+
* Not a reader-mode implementation: it takes `<main>` or `<article>` when the
|
|
165
|
+
* page marks one, because a page that says where its content is should be
|
|
166
|
+
* believed, and otherwise the whole body. The result is a person's starting
|
|
167
|
+
* point, which is why the import is a draft.
|
|
168
|
+
*/
|
|
169
|
+
function readableText(html) {
|
|
170
|
+
const main = /<main[^>]*>([\s\S]*?)<\/main>/i.exec(html)?.[1] ??
|
|
171
|
+
/<article[^>]*>([\s\S]*?)<\/article>/i.exec(html)?.[1] ??
|
|
172
|
+
/<body[^>]*>([\s\S]*?)<\/body>/i.exec(html)?.[1] ??
|
|
173
|
+
html;
|
|
174
|
+
return tidy(stripTags(main));
|
|
175
|
+
}
|
|
176
|
+
/** A page title usually carries the site name; the listing should not. */
|
|
177
|
+
function trimSiteName(title) {
|
|
178
|
+
return title.split(/\s+[|·—–]\s+/)[0]?.trim() || title.trim();
|
|
179
|
+
}
|
|
180
|
+
export function extractJob(html, sourceUrl) {
|
|
181
|
+
const warnings = [];
|
|
182
|
+
const posting = jsonLdNodes(html).find((node) => typeOf(node).includes('JobPosting'));
|
|
183
|
+
if (posting !== undefined) {
|
|
184
|
+
const title = typeof posting['title'] === 'string' ? posting['title'].trim() : '';
|
|
185
|
+
const rawDescription = typeof posting['description'] === 'string' ? posting['description'] : '';
|
|
186
|
+
const description = tidy(stripTags(rawDescription));
|
|
187
|
+
if (title !== '' && description !== '') {
|
|
188
|
+
const employmentType = employmentTypeOf(posting['employmentType']);
|
|
189
|
+
const workplace = workplaceOf(posting);
|
|
190
|
+
const location = locationOf(posting);
|
|
191
|
+
if (employmentType === undefined)
|
|
192
|
+
warnings.push('No employment type in the posting.');
|
|
193
|
+
if (workplace === undefined)
|
|
194
|
+
warnings.push('No workplace, so it was left unset.');
|
|
195
|
+
return {
|
|
196
|
+
title,
|
|
197
|
+
description,
|
|
198
|
+
sourceUrl,
|
|
199
|
+
via: 'jsonld',
|
|
200
|
+
warnings,
|
|
201
|
+
...(employmentType === undefined ? {} : { employmentType }),
|
|
202
|
+
...(workplace === undefined ? {} : { workplace }),
|
|
203
|
+
...(location === undefined ? {} : { location }),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
warnings.push('The page had a JobPosting but it was missing a title or a description.');
|
|
207
|
+
}
|
|
208
|
+
const title = trimSiteName(metaContent(html, 'og:title') ??
|
|
209
|
+
decode(/<h1[^>]*>([\s\S]*?)<\/h1>/i.exec(html)?.[1]?.replace(/<[^>]+>/g, '') ?? '') ??
|
|
210
|
+
decode(/<title[^>]*>([\s\S]*?)<\/title>/i.exec(html)?.[1] ?? ''));
|
|
211
|
+
if (title === '')
|
|
212
|
+
throw new JobImportProblem('That page has no title, so there is nothing to import.');
|
|
213
|
+
const body = readableText(html);
|
|
214
|
+
const description = body === '' ? (metaContent(html, 'og:description') ?? '') : body;
|
|
215
|
+
if (description === '') {
|
|
216
|
+
throw new JobImportProblem('That page has no readable text, so there is nothing to import.');
|
|
217
|
+
}
|
|
218
|
+
warnings.push('That page publishes no JobPosting data, so this was read off the page itself. Check every field before publishing.');
|
|
219
|
+
return { title, description, sourceUrl, via: 'page', warnings };
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=import-job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-job.js","sourceRoot":"","sources":["../../src/core/import-job.ts"],"names":[],"mappings":"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"}
|
package/dist/core/jobs.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ interface JobRow {
|
|
|
29
29
|
agent_policy: string;
|
|
30
30
|
apply_via: string;
|
|
31
31
|
apply_url: string | null;
|
|
32
|
+
apply_source_url: string | null;
|
|
32
33
|
apply_email: string | null;
|
|
33
34
|
apply_schema: ApplySchema | null;
|
|
34
35
|
status: string;
|
|
@@ -73,6 +74,8 @@ export interface JobInput {
|
|
|
73
74
|
agentPolicy: AgentPolicy;
|
|
74
75
|
apply: ApplyMethod;
|
|
75
76
|
expiresAt: string | null;
|
|
77
|
+
/** Where this listing was imported from, if it was. Provenance, not a destination. */
|
|
78
|
+
sourceUrl: string | null;
|
|
76
79
|
}
|
|
77
80
|
/**
|
|
78
81
|
* Turn whatever a form, an API client or a model sent into a job we are
|
|
@@ -84,6 +87,32 @@ export declare function normaliseInput(input: Record<string, unknown>, orgId: st
|
|
|
84
87
|
export declare function normaliseApplySchema(input: unknown): ApplySchema | null;
|
|
85
88
|
export declare function createJob(pool: pg.Pool, input: JobInput): Promise<Job>;
|
|
86
89
|
export declare function setStatus(pool: pg.Pool, id: string, status: JobStatus): Promise<Job | null>;
|
|
90
|
+
/**
|
|
91
|
+
* Refresh a listing from a re-import.
|
|
92
|
+
*
|
|
93
|
+
* Only the fields an import can actually supply are touched, and only when the
|
|
94
|
+
* new value is present: a re-import that could not read a location must not
|
|
95
|
+
* erase one a person typed in. Status is untouched, so refreshing a published
|
|
96
|
+
* listing does not unpublish it and refreshing a draft does not publish it.
|
|
97
|
+
*/
|
|
98
|
+
export declare function updateJobFromImport(pool: pg.Pool, id: string, fields: {
|
|
99
|
+
title?: string;
|
|
100
|
+
description?: string;
|
|
101
|
+
employmentType?: EmploymentType;
|
|
102
|
+
workplace?: Workplace;
|
|
103
|
+
location?: string;
|
|
104
|
+
sourceUrl?: string;
|
|
105
|
+
}): Promise<Job | null>;
|
|
106
|
+
/**
|
|
107
|
+
* Rewrite a listing's content.
|
|
108
|
+
*
|
|
109
|
+
* Takes the same shape `createJob` takes, so an edit cannot put a listing into
|
|
110
|
+
* a state a post could not have created. Slug, status and org are untouched:
|
|
111
|
+
* the slug is the listing's public URL and editing must not break links to it.
|
|
112
|
+
*/
|
|
113
|
+
export declare function editJob(pool: pg.Pool, id: string, input: JobInput): Promise<Job | null>;
|
|
114
|
+
/** The listing imported from this URL, if there is one. */
|
|
115
|
+
export declare function getJobBySourceUrl(pool: pg.Pool, url: string): Promise<Job | null>;
|
|
87
116
|
export declare function countJobs(pool: pg.Pool): Promise<{
|
|
88
117
|
open: number;
|
|
89
118
|
total: number;
|
package/dist/core/jobs.js
CHANGED
|
@@ -11,7 +11,8 @@ const SELECT = `
|
|
|
11
11
|
select j.id, j.slug, j.title, j.description, j.employment_type, j.workplace, j.seniority,
|
|
12
12
|
j.location, j.remote_regions, j.salary_min, j.salary_max, j.salary_currency,
|
|
13
13
|
j.salary_period, j.salary_equity, j.tags, j.stack, j.requirements, j.responsibilities,
|
|
14
|
-
j.agent_policy, j.apply_via, j.apply_url, j.apply_email, j.apply_schema,
|
|
14
|
+
j.agent_policy, j.apply_via, j.apply_url, j.apply_email, j.apply_schema,
|
|
15
|
+
j.apply_source_url, j.status,
|
|
15
16
|
j.published_at, j.expires_at, j.created_at, j.updated_at,
|
|
16
17
|
o.id as org_id, o.slug as org_slug, o.name as org_name, o.website as org_website,
|
|
17
18
|
o.logo_url as org_logo_url, o.description as org_description,
|
|
@@ -30,13 +31,16 @@ function toOrganisation(row) {
|
|
|
30
31
|
createdAt: row.org_created_at,
|
|
31
32
|
};
|
|
32
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Every job is applied to here.
|
|
36
|
+
*
|
|
37
|
+
* Rows written before offsite applications were removed still carry
|
|
38
|
+
* `apply_via = 'url'` or `'email'`, and they read back as board applications:
|
|
39
|
+
* the migration rewrites the column, and this is what makes a row the
|
|
40
|
+
* migration has not reached yet safe to serve. The board's own form is the one
|
|
41
|
+
* target that cannot go missing.
|
|
42
|
+
*/
|
|
33
43
|
function toApplyMethod(row) {
|
|
34
|
-
if (row.apply_via === 'url' && row.apply_url)
|
|
35
|
-
return { via: 'url', url: row.apply_url };
|
|
36
|
-
if (row.apply_via === 'email' && row.apply_email)
|
|
37
|
-
return { via: 'email', email: row.apply_email };
|
|
38
|
-
// A job whose declared method lost its target still has to be applicable,
|
|
39
|
-
// and the board's own form is the one target that cannot go missing.
|
|
40
44
|
return { via: 'board', schema: row.apply_schema ?? DEFAULT_APPLY_SCHEMA };
|
|
41
45
|
}
|
|
42
46
|
export function toJob(row) {
|
|
@@ -170,7 +174,8 @@ export function normaliseInput(input, orgId) {
|
|
|
170
174
|
const title = clean(input['title'], 140);
|
|
171
175
|
if (title.length < 3)
|
|
172
176
|
return 'A title of at least 3 characters is required.';
|
|
173
|
-
|
|
177
|
+
// Markdown, so the line breaks are the structure and must survive.
|
|
178
|
+
const description = clean(input['description'], 20_000, { multiline: true });
|
|
174
179
|
if (description.length < 20)
|
|
175
180
|
return 'A description of at least 20 characters is required.';
|
|
176
181
|
const employmentType = isEmploymentType(input['employmentType'])
|
|
@@ -209,28 +214,20 @@ export function normaliseInput(input, orgId) {
|
|
|
209
214
|
agentPolicy,
|
|
210
215
|
apply,
|
|
211
216
|
expiresAt: date(input['expiresAt']),
|
|
217
|
+
// Set by the importer, never by a poster: it records where a listing was
|
|
218
|
+
// read from, and a hand-typed one was read from nowhere.
|
|
219
|
+
sourceUrl: null,
|
|
212
220
|
};
|
|
213
221
|
}
|
|
214
222
|
function normaliseApply(input) {
|
|
223
|
+
// Applications happen here. A listing that points somewhere else is a link
|
|
224
|
+
// to a job rather than a job, and an agent cannot complete a form it cannot
|
|
225
|
+
// reach. Refused with the reason rather than silently rewritten to `board`,
|
|
226
|
+
// because an employer who asked for an offsite link and got a board form
|
|
227
|
+
// without being told would find out from the applications.
|
|
215
228
|
const via = clean(input['applyVia'], 10) || 'board';
|
|
216
|
-
if (via
|
|
217
|
-
|
|
218
|
-
try {
|
|
219
|
-
const parsed = new URL(url);
|
|
220
|
-
if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {
|
|
221
|
-
return 'An application link must be http or https.';
|
|
222
|
-
}
|
|
223
|
-
return { via: 'url', url: parsed.toString() };
|
|
224
|
-
}
|
|
225
|
-
catch {
|
|
226
|
-
return 'That application link is not a URL.';
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
if (via === 'email') {
|
|
230
|
-
const email = clean(input['applyEmail'], 200).toLowerCase();
|
|
231
|
-
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email))
|
|
232
|
-
return 'That application address is not valid.';
|
|
233
|
-
return { via: 'email', email };
|
|
229
|
+
if (via !== 'board') {
|
|
230
|
+
return 'Applications are taken on this board. Import a job from a URL instead of linking out to one.';
|
|
234
231
|
}
|
|
235
232
|
const schema = input['applySchema'];
|
|
236
233
|
if (schema !== undefined && schema !== null) {
|
|
@@ -320,9 +317,9 @@ export async function createJob(pool, input) {
|
|
|
320
317
|
slug, org_id, title, description, employment_type, workplace, seniority, location,
|
|
321
318
|
remote_regions, salary_min, salary_max, salary_currency, salary_period, salary_equity,
|
|
322
319
|
tags, stack, requirements, responsibilities, agent_policy, apply_via, apply_url,
|
|
323
|
-
apply_email, apply_schema, expires_at, status
|
|
320
|
+
apply_email, apply_schema, apply_source_url, expires_at, status
|
|
324
321
|
) values (
|
|
325
|
-
$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,'draft'
|
|
322
|
+
$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,'draft'
|
|
326
323
|
) returning id`, [
|
|
327
324
|
slug,
|
|
328
325
|
input.orgId,
|
|
@@ -344,9 +341,10 @@ export async function createJob(pool, input) {
|
|
|
344
341
|
input.responsibilities,
|
|
345
342
|
input.agentPolicy,
|
|
346
343
|
input.apply.via,
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
344
|
+
null,
|
|
345
|
+
null,
|
|
346
|
+
JSON.stringify(input.apply.schema),
|
|
347
|
+
input.sourceUrl,
|
|
350
348
|
input.expiresAt,
|
|
351
349
|
]);
|
|
352
350
|
const id = result.rows[0]?.id;
|
|
@@ -367,6 +365,78 @@ export async function setStatus(pool, id, status) {
|
|
|
367
365
|
where id = $1`, [id, status]);
|
|
368
366
|
return getJobById(pool, id);
|
|
369
367
|
}
|
|
368
|
+
/**
|
|
369
|
+
* Refresh a listing from a re-import.
|
|
370
|
+
*
|
|
371
|
+
* Only the fields an import can actually supply are touched, and only when the
|
|
372
|
+
* new value is present: a re-import that could not read a location must not
|
|
373
|
+
* erase one a person typed in. Status is untouched, so refreshing a published
|
|
374
|
+
* listing does not unpublish it and refreshing a draft does not publish it.
|
|
375
|
+
*/
|
|
376
|
+
export async function updateJobFromImport(pool, id, fields) {
|
|
377
|
+
await pool.query(`update jobs
|
|
378
|
+
set title = coalesce($2, title),
|
|
379
|
+
description = coalesce($3, description),
|
|
380
|
+
employment_type = coalesce($4, employment_type),
|
|
381
|
+
workplace = coalesce($5, workplace),
|
|
382
|
+
location = coalesce($6, location),
|
|
383
|
+
apply_source_url = coalesce($7, apply_source_url),
|
|
384
|
+
updated_at = now()
|
|
385
|
+
where id = $1`, [
|
|
386
|
+
id,
|
|
387
|
+
fields.title ?? null,
|
|
388
|
+
fields.description ?? null,
|
|
389
|
+
fields.employmentType ?? null,
|
|
390
|
+
fields.workplace ?? null,
|
|
391
|
+
fields.location ?? null,
|
|
392
|
+
fields.sourceUrl ?? null,
|
|
393
|
+
]);
|
|
394
|
+
return getJobById(pool, id);
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Rewrite a listing's content.
|
|
398
|
+
*
|
|
399
|
+
* Takes the same shape `createJob` takes, so an edit cannot put a listing into
|
|
400
|
+
* a state a post could not have created. Slug, status and org are untouched:
|
|
401
|
+
* the slug is the listing's public URL and editing must not break links to it.
|
|
402
|
+
*/
|
|
403
|
+
export async function editJob(pool, id, input) {
|
|
404
|
+
await pool.query(`update jobs
|
|
405
|
+
set title = $2, description = $3, employment_type = $4, workplace = $5,
|
|
406
|
+
seniority = $6, location = $7, remote_regions = $8,
|
|
407
|
+
salary_min = $9, salary_max = $10, salary_currency = $11,
|
|
408
|
+
salary_period = $12, salary_equity = $13,
|
|
409
|
+
tags = $14, stack = $15, requirements = $16, responsibilities = $17,
|
|
410
|
+
agent_policy = $18, expires_at = $19, updated_at = now()
|
|
411
|
+
where id = $1`, [
|
|
412
|
+
id,
|
|
413
|
+
input.title,
|
|
414
|
+
input.description,
|
|
415
|
+
input.employmentType,
|
|
416
|
+
input.workplace,
|
|
417
|
+
input.seniority,
|
|
418
|
+
input.location,
|
|
419
|
+
input.remoteRegions,
|
|
420
|
+
input.salaryMin,
|
|
421
|
+
input.salaryMax,
|
|
422
|
+
input.salaryCurrency,
|
|
423
|
+
input.salaryPeriod,
|
|
424
|
+
input.salaryEquity,
|
|
425
|
+
input.tags,
|
|
426
|
+
input.stack,
|
|
427
|
+
input.requirements,
|
|
428
|
+
input.responsibilities,
|
|
429
|
+
input.agentPolicy,
|
|
430
|
+
input.expiresAt,
|
|
431
|
+
]);
|
|
432
|
+
return getJobById(pool, id);
|
|
433
|
+
}
|
|
434
|
+
/** The listing imported from this URL, if there is one. */
|
|
435
|
+
export async function getJobBySourceUrl(pool, url) {
|
|
436
|
+
const result = await pool.query(`select id from jobs where apply_source_url = $1 order by created_at desc limit 1`, [url]);
|
|
437
|
+
const id = result.rows[0]?.id;
|
|
438
|
+
return id === undefined ? null : getJobById(pool, id);
|
|
439
|
+
}
|
|
370
440
|
export async function countJobs(pool) {
|
|
371
441
|
const result = await pool.query(`select
|
|
372
442
|
count(*) filter (
|
package/dist/core/jobs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/core/jobs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../src/core/jobs.ts"],"names":[],"mappings":"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"}
|
package/dist/core/resumes.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export interface Resume {
|
|
|
19
19
|
markdown: string;
|
|
20
20
|
parsed: OpenResume | null;
|
|
21
21
|
visibility: Visibility;
|
|
22
|
+
/** The board-wide address, minted when a resume is first shared. */
|
|
23
|
+
publicSlug: string | null;
|
|
22
24
|
sourceName: string | null;
|
|
23
25
|
createdAt: string;
|
|
24
26
|
updatedAt: string;
|
|
@@ -26,7 +28,27 @@ export interface Resume {
|
|
|
26
28
|
export declare function listResumes(pool: pg.Pool, userId: string): Promise<Resume[]>;
|
|
27
29
|
export declare function getResume(pool: pg.Pool, userId: string, slug: string): Promise<Resume | null>;
|
|
28
30
|
export declare function getResumeById(pool: pg.Pool, id: string): Promise<Resume | null>;
|
|
29
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Give a shared resume a board-wide address, once.
|
|
33
|
+
*
|
|
34
|
+
* Named after the person, because the point of a candidate page is that it
|
|
35
|
+
* carries their name. Falls back to the resume's own title, and then to a
|
|
36
|
+
* random suffix, so a resume with no name in it is still addressable.
|
|
37
|
+
*
|
|
38
|
+
* The slug is minted on first share and then kept even if the resume is made
|
|
39
|
+
* private again and shared later: a URL that someone has already sent to an
|
|
40
|
+
* employer must not come back pointing at a different person.
|
|
41
|
+
*/
|
|
42
|
+
export declare function ensurePublicSlug(pool: pg.Pool, resume: Resume): Promise<string | null>;
|
|
43
|
+
/** The directory: resumes their owner chose to list. */
|
|
44
|
+
export declare function listPublicResumes(pool: pg.Pool, limit?: number): Promise<Resume[]>;
|
|
45
|
+
/**
|
|
46
|
+
* One candidate page.
|
|
47
|
+
*
|
|
48
|
+
* Serves `link` as well as `public`, which is the difference between the two:
|
|
49
|
+
* a link resume is reachable by anyone holding the URL and is not listed.
|
|
50
|
+
*/
|
|
51
|
+
export declare function getPublicResume(pool: pg.Pool, publicSlug: string): Promise<Resume | null>;
|
|
30
52
|
export declare function getSharedResume(pool: pg.Pool, id: string): Promise<Resume | null>;
|
|
31
53
|
export interface SaveResume {
|
|
32
54
|
title?: string;
|