@profullstack/agenticjobs 0.9.0 → 0.11.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/README.md +23 -1
- package/dist/cli/args.js +28 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/index.js +247 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/client/client.d.ts +36 -0
- package/dist/client/client.js +54 -12
- package/dist/client/client.js.map +1 -1
- package/dist/client/fanout.js +7 -1
- package/dist/client/fanout.js.map +1 -1
- package/dist/config.d.ts +13 -1
- package/dist/config.js +4 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agentwriter.d.ts +79 -0
- package/dist/core/agentwriter.js +343 -0
- package/dist/core/agentwriter.js.map +1 -0
- package/dist/core/candidates.js +30 -1
- package/dist/core/candidates.js.map +1 -1
- package/dist/core/capacity-alert.d.ts +84 -0
- package/dist/core/capacity-alert.js +144 -0
- package/dist/core/capacity-alert.js.map +1 -0
- package/dist/core/capacity.d.ts +96 -0
- package/dist/core/capacity.js +182 -0
- package/dist/core/capacity.js.map +1 -0
- package/dist/core/import-job.js +18 -7
- package/dist/core/import-job.js.map +1 -1
- package/dist/core/import.js +9 -8
- package/dist/core/import.js.map +1 -1
- package/dist/core/jobs.js +12 -2
- package/dist/core/jobs.js.map +1 -1
- package/dist/core/orgs.d.ts +39 -0
- package/dist/core/orgs.js +69 -0
- package/dist/core/orgs.js.map +1 -1
- package/dist/directory/federate.js +2 -4
- package/dist/directory/federate.js.map +1 -1
- package/dist/directory/fetch.d.ts +1 -1
- package/dist/markup/resume.js +66 -1
- package/dist/markup/resume.js.map +1 -1
- package/dist/mcp/server.js +5 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/stdio.js +3 -2
- package/dist/mcp/stdio.js.map +1 -1
- package/dist/mcp/tools.js +1 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/schema/jsonld.js +1 -8
- package/dist/schema/jsonld.js.map +1 -1
- package/dist/schema/salary.d.ts +5 -0
- package/dist/schema/salary.js +15 -0
- package/dist/schema/salary.js.map +1 -0
- package/dist/schema/text.js +7 -3
- package/dist/schema/text.js.map +1 -1
- package/dist/server/routes/api.js +63 -1
- package/dist/server/routes/api.js.map +1 -1
- package/dist/server/routes/discovery.js +56 -0
- package/dist/server/routes/discovery.js.map +1 -1
- package/dist/server/routes/openapi.js +17 -1
- package/dist/server/routes/openapi.js.map +1 -1
- package/dist/server/routes/pages.js +44 -4
- package/dist/server/routes/pages.js.map +1 -1
- package/dist/views/candidates.d.ts +7 -0
- package/dist/views/candidates.js +2 -1
- package/dist/views/candidates.js.map +1 -1
- package/dist/views/docs.js +38 -3
- package/dist/views/docs.js.map +1 -1
- package/dist/views/post.d.ts +4 -0
- package/dist/views/post.js +1 -1
- package/dist/views/post.js.map +1 -1
- package/docs/openjob.md +5 -0
- package/docs/openresume.md +36 -0
- package/migrations/0013_agent_drafts.sql +19 -0
- package/package.json +15 -17
- package/web/public/app.css +11 -3
- package/web/public/sw.js +1 -1
package/dist/client/client.d.ts
CHANGED
|
@@ -36,6 +36,18 @@ export declare class BoardClient {
|
|
|
36
36
|
setToken(token: string | null): void;
|
|
37
37
|
hasToken(): boolean;
|
|
38
38
|
request<T>(method: 'GET' | 'POST' | 'PATCH' | 'DELETE', path: string, body?: unknown): Promise<T>;
|
|
39
|
+
/**
|
|
40
|
+
* Same as `request`, but keeps the HTTP status.
|
|
41
|
+
*
|
|
42
|
+
* Create endpoints answer 201. The stdio MCP host used to report every
|
|
43
|
+
* success as 200, so `apply_to_job` / `post_job` treated a successful write
|
|
44
|
+
* as a failure.
|
|
45
|
+
*/
|
|
46
|
+
requestWithStatus<T>(method: 'GET' | 'POST' | 'PATCH' | 'DELETE', path: string, body?: unknown): Promise<{
|
|
47
|
+
status: number;
|
|
48
|
+
body: T;
|
|
49
|
+
}>;
|
|
50
|
+
private requestOnce;
|
|
39
51
|
describe(): Promise<InstanceDescriptor>;
|
|
40
52
|
search(query: Partial<JobQuery>): Promise<JobPage<Job> & {
|
|
41
53
|
query: JobQuery;
|
|
@@ -77,7 +89,31 @@ export declare class BoardClient {
|
|
|
77
89
|
saveResume(markdown: string, options?: {
|
|
78
90
|
slug?: string;
|
|
79
91
|
title?: string;
|
|
92
|
+
visibility?: string;
|
|
80
93
|
}): Promise<unknown>;
|
|
94
|
+
/** Change only a resume's visibility, leaving the document alone. */
|
|
95
|
+
setResumeVisibility(slug: string, visibility: string): Promise<{
|
|
96
|
+
resume: {
|
|
97
|
+
slug: string;
|
|
98
|
+
visibility: string;
|
|
99
|
+
publicSlug: string | null;
|
|
100
|
+
};
|
|
101
|
+
}>;
|
|
102
|
+
deleteResume(slug: string): Promise<{
|
|
103
|
+
ok: boolean;
|
|
104
|
+
}>;
|
|
105
|
+
/** The employers this account belongs to, which is not the public list. */
|
|
106
|
+
myOrgs(): Promise<Organisation[]>;
|
|
107
|
+
createOrg(input: Record<string, unknown>): Promise<{
|
|
108
|
+
org: Organisation;
|
|
109
|
+
}>;
|
|
110
|
+
updateOrg(slug: string, input: Record<string, unknown>): Promise<{
|
|
111
|
+
org: Organisation;
|
|
112
|
+
}>;
|
|
113
|
+
deleteOrg(slug: string): Promise<{
|
|
114
|
+
ok: boolean;
|
|
115
|
+
deleted: string;
|
|
116
|
+
}>;
|
|
81
117
|
postJob(input: Record<string, unknown>): Promise<{
|
|
82
118
|
job: Job;
|
|
83
119
|
}>;
|
package/dist/client/client.js
CHANGED
|
@@ -44,6 +44,31 @@ export class BoardClient {
|
|
|
44
44
|
return this.token !== null && this.token !== '';
|
|
45
45
|
}
|
|
46
46
|
async request(method, path, body) {
|
|
47
|
+
const { body: parsed } = await this.requestWithStatus(method, path, body);
|
|
48
|
+
return parsed;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Same as `request`, but keeps the HTTP status.
|
|
52
|
+
*
|
|
53
|
+
* Create endpoints answer 201. The stdio MCP host used to report every
|
|
54
|
+
* success as 200, so `apply_to_job` / `post_job` treated a successful write
|
|
55
|
+
* as a failure.
|
|
56
|
+
*/
|
|
57
|
+
async requestWithStatus(method, path, body) {
|
|
58
|
+
try {
|
|
59
|
+
return await this.requestOnce(method, path, body);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
// A hosted board that has been idle can miss a single client timeout
|
|
63
|
+
// (curl's default 15s from a distant region, #36) and then answer in
|
|
64
|
+
// about a second. GET is safe to repeat; POST is not.
|
|
65
|
+
if (method === 'GET' && error instanceof ApiError && error.code === 'timeout') {
|
|
66
|
+
return this.requestOnce(method, path, body);
|
|
67
|
+
}
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async requestOnce(method, path, body) {
|
|
47
72
|
const controller = new AbortController();
|
|
48
73
|
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
49
74
|
try {
|
|
@@ -66,15 +91,13 @@ export class BoardClient {
|
|
|
66
91
|
catch {
|
|
67
92
|
// A board that answers HTML where JSON was asked for is usually a
|
|
68
93
|
// proxy or a login wall, and saying so beats "unexpected token <".
|
|
69
|
-
|
|
70
|
-
throw new ApiError(`${this.server} answered ${response.status} with something that is not JSON. Is that a board?`, response.status);
|
|
71
|
-
}
|
|
94
|
+
throw new ApiError(`${this.server} answered ${response.status} with something that is not JSON. Is that a board?`, response.status);
|
|
72
95
|
}
|
|
73
96
|
if (!response.ok) {
|
|
74
97
|
const error = parsed?.error;
|
|
75
98
|
throw new ApiError(error?.message ?? `${this.server} answered ${response.status}.`, response.status, error?.code ?? 'error', error?.fields ?? []);
|
|
76
99
|
}
|
|
77
|
-
return parsed;
|
|
100
|
+
return { status: response.status, body: parsed };
|
|
78
101
|
}
|
|
79
102
|
catch (error) {
|
|
80
103
|
if (error instanceof ApiError)
|
|
@@ -129,16 +152,35 @@ export class BoardClient {
|
|
|
129
152
|
return this.request('GET', '/api/v1/resumes');
|
|
130
153
|
}
|
|
131
154
|
async saveResume(markdown, options = {}) {
|
|
132
|
-
|
|
133
|
-
return this.request('PATCH', `/api/v1/resumes/${encodeURIComponent(options.slug)}`, {
|
|
134
|
-
markdown,
|
|
135
|
-
...(options.title === undefined ? {} : { title: options.title }),
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
return this.request('POST', '/api/v1/resumes', {
|
|
155
|
+
const body = {
|
|
139
156
|
markdown,
|
|
140
157
|
...(options.title === undefined ? {} : { title: options.title }),
|
|
141
|
-
|
|
158
|
+
...(options.visibility === undefined ? {} : { visibility: options.visibility }),
|
|
159
|
+
};
|
|
160
|
+
if (options.slug !== undefined) {
|
|
161
|
+
return this.request('PATCH', `/api/v1/resumes/${encodeURIComponent(options.slug)}`, body);
|
|
162
|
+
}
|
|
163
|
+
return this.request('POST', '/api/v1/resumes', body);
|
|
164
|
+
}
|
|
165
|
+
/** Change only a resume's visibility, leaving the document alone. */
|
|
166
|
+
async setResumeVisibility(slug, visibility) {
|
|
167
|
+
return this.request('PATCH', `/api/v1/resumes/${encodeURIComponent(slug)}`, { visibility });
|
|
168
|
+
}
|
|
169
|
+
async deleteResume(slug) {
|
|
170
|
+
return this.request('DELETE', `/api/v1/resumes/${encodeURIComponent(slug)}`);
|
|
171
|
+
}
|
|
172
|
+
/** The employers this account belongs to, which is not the public list. */
|
|
173
|
+
async myOrgs() {
|
|
174
|
+
return (await this.me()).orgs;
|
|
175
|
+
}
|
|
176
|
+
async createOrg(input) {
|
|
177
|
+
return this.request('POST', '/api/v1/orgs', input);
|
|
178
|
+
}
|
|
179
|
+
async updateOrg(slug, input) {
|
|
180
|
+
return this.request('PATCH', `/api/v1/orgs/${encodeURIComponent(slug)}`, input);
|
|
181
|
+
}
|
|
182
|
+
async deleteOrg(slug) {
|
|
183
|
+
return this.request('DELETE', `/api/v1/orgs/${encodeURIComponent(slug)}`);
|
|
142
184
|
}
|
|
143
185
|
async postJob(input) {
|
|
144
186
|
return this.request('POST', '/api/v1/jobs', input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client/fanout.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* nowhere. Same guarantees - parallel, per-board timeout, a board that fails
|
|
8
8
|
* is named rather than silently dropped.
|
|
9
9
|
*/
|
|
10
|
+
import { annualisedTopSalary } from "../schema/salary.js";
|
|
10
11
|
import { BoardClient } from "./client.js";
|
|
11
12
|
import { loadConfig } from "./config.js";
|
|
12
13
|
export function configuredBoards() {
|
|
@@ -56,7 +57,12 @@ export async function searchEverywhere(boards, query, options = {}) {
|
|
|
56
57
|
}));
|
|
57
58
|
// Each board sorted its own page; "newest" across three boards is none of
|
|
58
59
|
// those orders, so it is redone here.
|
|
59
|
-
|
|
60
|
+
if (query.sort === 'salary') {
|
|
61
|
+
jobs.sort((a, b) => annualisedTopSalary(b.job.salary) - annualisedTopSalary(a.job.salary));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
jobs.sort((a, b) => published(b.job) - published(a.job));
|
|
65
|
+
}
|
|
60
66
|
return {
|
|
61
67
|
jobs,
|
|
62
68
|
sources,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fanout.js","sourceRoot":"","sources":["../../src/client/fanout.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAoB,MAAM,aAAa,CAAC;AAyB3D,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAqB,EACrB,KAAwB,EACxB,UAAkC,EAAE;IAEpC,MAAM,OAAO,GAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QACxC,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,EAAE,EAAE,CAAC;QACL,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC,CAAC;IACJ,MAAM,IAAI,GAAgB,EAAE,CAAC;IAE7B,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE;gBAC3C,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;aAC7E,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC;oBACR,GAAG;oBACH,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS,EAAE,MAAM,CAAC,IAAI;oBACtB,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE;iBACxC,CAAC,CAAC;YACL,CAAC;YACD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACjC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1B,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,0EAA0E;IAC1E,sCAAsC;IACtC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"fanout.js","sourceRoot":"","sources":["../../src/client/fanout.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -22,6 +22,18 @@ export interface Config {
|
|
|
22
22
|
/** Resend API key, or null to print sign-in links instead of sending them. */
|
|
23
23
|
resendApiKey: string | null;
|
|
24
24
|
mailFrom: string;
|
|
25
|
+
/**
|
|
26
|
+
* Model keys for agent-assisted drafting on the post form.
|
|
27
|
+
*
|
|
28
|
+
* Whichever is set turns the feature on; neither leaves it off and absent
|
|
29
|
+
* from the page rather than present and broken. Two providers because this
|
|
30
|
+
* is software other people self-host, and a board that only works if you
|
|
31
|
+
* bank with one vendor is not self-hostable.
|
|
32
|
+
*/
|
|
33
|
+
anthropicApiKey: string | null;
|
|
34
|
+
openaiApiKey: string | null;
|
|
35
|
+
/** Overrides the per-provider default model. */
|
|
36
|
+
writerModel: string | null;
|
|
25
37
|
version: string;
|
|
26
38
|
}
|
|
27
39
|
/**
|
|
@@ -35,7 +47,7 @@ export interface Config {
|
|
|
35
47
|
export declare function sameOrigin(a: string | null, b: string | null): boolean;
|
|
36
48
|
export declare function loadConfig(env?: NodeJS.ProcessEnv): Config;
|
|
37
49
|
/** Kept in step with package.json by the release script. */
|
|
38
|
-
export declare const VERSION = "0.
|
|
50
|
+
export declare const VERSION = "0.11.0";
|
|
39
51
|
export declare const SOFTWARE_NAME = "agenticjobs";
|
|
40
52
|
/**
|
|
41
53
|
* Tokens are stored as a hash of what was handed out, so this is the only
|
package/dist/config.js
CHANGED
|
@@ -75,11 +75,14 @@ export function loadConfig(env = process.env) {
|
|
|
75
75
|
isDirectory: flag(env['DIRECTORY']),
|
|
76
76
|
resendApiKey: env['RESEND_API_KEY']?.trim() || null,
|
|
77
77
|
mailFrom: env['MAIL_FROM']?.trim() || defaultMailFrom(publicUrl, boardName),
|
|
78
|
+
anthropicApiKey: env['ANTHROPIC_API_KEY']?.trim() || null,
|
|
79
|
+
openaiApiKey: env['OPENAI_API_KEY']?.trim() || null,
|
|
80
|
+
writerModel: env['WRITER_MODEL']?.trim() || null,
|
|
78
81
|
version: env['npm_package_version']?.trim() || VERSION,
|
|
79
82
|
};
|
|
80
83
|
}
|
|
81
84
|
/** Kept in step with package.json by the release script. */
|
|
82
|
-
export const VERSION = '0.
|
|
85
|
+
export const VERSION = '0.11.0';
|
|
83
86
|
export const SOFTWARE_NAME = 'agenticjobs';
|
|
84
87
|
/**
|
|
85
88
|
* Tokens are stored as a hash of what was handed out, so this is the only
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning a sentence into a draft listing.
|
|
3
|
+
*
|
|
4
|
+
* The board's thesis is agents hiring agents with a person in control at both
|
|
5
|
+
* ends, and this is that seam on the employer side for somebody who does not
|
|
6
|
+
* have an agent of their own. It fills the form and stops. Nothing is saved,
|
|
7
|
+
* nothing is published, and the person who asked reads every word before the
|
|
8
|
+
* listing exists. A model writing straight into the database would be the one
|
|
9
|
+
* shape this board has said it will not ship.
|
|
10
|
+
*
|
|
11
|
+
* Two providers, because this is MIT software other people self-host and a
|
|
12
|
+
* board that only works if you bank with one vendor is not self-hostable. The
|
|
13
|
+
* key that is set decides; when neither is set the feature is simply absent
|
|
14
|
+
* from the page rather than present and broken.
|
|
15
|
+
*
|
|
16
|
+
* Written against the two REST APIs directly rather than either vendor SDK.
|
|
17
|
+
* One dependency per provider to fill in a form is a poor trade for a package
|
|
18
|
+
* that reads a .docx by unzipping it by hand, and the request shapes here are
|
|
19
|
+
* small enough to read in full.
|
|
20
|
+
*/
|
|
21
|
+
import type pg from 'pg';
|
|
22
|
+
import type { Config } from '../config.ts';
|
|
23
|
+
/** The model was asked and could not answer. Never fatal to the page. */
|
|
24
|
+
export declare class AgentWriterProblem extends Error {
|
|
25
|
+
}
|
|
26
|
+
export type WriterProvider = 'anthropic' | 'openai';
|
|
27
|
+
/**
|
|
28
|
+
* Which provider this instance can use, or null for none.
|
|
29
|
+
*
|
|
30
|
+
* Anthropic first when both are set, for no better reason than that a board
|
|
31
|
+
* with both keys has to pick one and a coin flip at request time would make
|
|
32
|
+
* the same brief produce different listings.
|
|
33
|
+
*/
|
|
34
|
+
export declare function writerProvider(config: Config): WriterProvider | null;
|
|
35
|
+
interface Context {
|
|
36
|
+
boardName: string;
|
|
37
|
+
orgName: string | null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A brief, expanded into values the post form can be rendered with.
|
|
41
|
+
*
|
|
42
|
+
* Returns form values rather than a job, because the next thing that happens
|
|
43
|
+
* is that a person looks at them. They go through the same `normaliseInput`
|
|
44
|
+
* every other posting path goes through when the form is finally submitted,
|
|
45
|
+
* so nothing here can put a listing into a state a hand-typed one could not
|
|
46
|
+
* reach.
|
|
47
|
+
*/
|
|
48
|
+
export declare function draftListing(brief: string, context: Context, config: Config, fetchImpl?: typeof fetch): Promise<Record<string, string>>;
|
|
49
|
+
/**
|
|
50
|
+
* The model's JSON, reduced to form values this board will accept.
|
|
51
|
+
*
|
|
52
|
+
* Everything is checked against the same lists the form's own selects are
|
|
53
|
+
* built from, and anything unrecognised is dropped rather than corrected. A
|
|
54
|
+
* model that invents an employment type should leave that field blank for a
|
|
55
|
+
* person to fill in, not have its answer bent into the nearest legal value:
|
|
56
|
+
* the second one looks like the employer chose it.
|
|
57
|
+
*
|
|
58
|
+
* Exported because this is the part worth testing, and testing it needs no
|
|
59
|
+
* network and no key.
|
|
60
|
+
*/
|
|
61
|
+
export declare function fieldsFromModelJson(raw: string): Record<string, string>;
|
|
62
|
+
/**
|
|
63
|
+
* How many drafts this account has asked for in the last hour.
|
|
64
|
+
*
|
|
65
|
+
* The ceiling is per account rather than per board: one employer writing four
|
|
66
|
+
* listings in an afternoon is the use case, and a shared board-wide limit
|
|
67
|
+
* would let one of them lock out everybody else.
|
|
68
|
+
*/
|
|
69
|
+
export declare const DRAFTS_PER_HOUR = 10;
|
|
70
|
+
export declare function recentDraftCount(pool: pg.Pool, userId: string): Promise<number>;
|
|
71
|
+
/**
|
|
72
|
+
* Recorded before the model is called, not after.
|
|
73
|
+
*
|
|
74
|
+
* A request that fails still cost the board something and still came from
|
|
75
|
+
* somebody, so counting only the successes would leave the cheapest way to
|
|
76
|
+
* burn the key uncounted.
|
|
77
|
+
*/
|
|
78
|
+
export declare function recordDraft(pool: pg.Pool, userId: string): Promise<void>;
|
|
79
|
+
export {};
|