@cavuno/board 2.0.0 → 2.0.2
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/CHANGELOG.md +26 -0
- package/CONTRIBUTING.md +25 -0
- package/LICENSE +21 -0
- package/README.md +12 -7
- package/SECURITY.md +28 -0
- package/TRADEMARKS.md +16 -0
- package/dist/_spec-sW85fuvT.d.mts +2731 -0
- package/dist/_spec-sW85fuvT.d.ts +2731 -0
- package/dist/bin.mjs +16 -348
- package/dist/{board-B8tJGX4i.d.ts → board-DKXyxwNN.d.ts} +2 -2
- package/dist/{board-DmRuCA8m.d.mts → board-QFeHT4UN.d.mts} +2 -2
- package/dist/doctor.d.mts +6 -19
- package/dist/doctor.d.ts +6 -19
- package/dist/doctor.js +16 -344
- package/dist/doctor.mjs +15 -343
- package/dist/filters.d.mts +5 -5
- package/dist/filters.d.ts +5 -5
- package/dist/format.d.mts +17 -19
- package/dist/format.d.ts +17 -19
- package/dist/go.d.mts +2 -2
- package/dist/go.d.ts +2 -2
- package/dist/go.js +1 -1
- package/dist/go.mjs +1 -1
- package/dist/index.d.mts +16 -18
- package/dist/index.d.ts +16 -18
- package/dist/index.js +39 -28
- package/dist/index.mjs +39 -28
- package/dist/{jobs-BEYJY97F.d.ts → jobs-CuRzTDb1.d.mts} +15 -13
- package/dist/{jobs-DJiISpqX.d.mts → jobs-DTnCZGtb.d.ts} +15 -13
- package/dist/paths.d.mts +6 -6
- package/dist/paths.d.ts +6 -6
- package/dist/paths.js +1 -1
- package/dist/paths.mjs +1 -1
- package/dist/roles-vY0AXhoc.d.mts +3 -3
- package/dist/roles-vY0AXhoc.d.ts +3 -3
- package/dist/route-contract.d.mts +16 -16
- package/dist/route-contract.d.ts +16 -16
- package/dist/route-contract.js +1 -1
- package/dist/route-contract.mjs +1 -1
- package/dist/{salaries-D6q7h1J6.d.ts → salaries-BOpR51Ny.d.mts} +3 -3
- package/dist/{salaries-B_Xb5k2s.d.mts → salaries-QoNpzRCT.d.ts} +3 -3
- package/dist/{search-CnOIZEuc.d.ts → search-B5ROY6PK.d.ts} +2 -2
- package/dist/{search-uC_ijbdu.d.mts → search-f93nrSg3.d.mts} +2 -2
- package/dist/seo.d.mts +17 -18
- package/dist/seo.d.ts +17 -18
- package/dist/server.d.mts +14 -32
- package/dist/server.d.ts +14 -32
- package/dist/sitemap.d.mts +7 -7
- package/dist/sitemap.d.ts +7 -7
- package/dist/sitemap.js +4 -2
- package/dist/sitemap.mjs +4 -2
- package/dist/skills.d.mts +1 -1
- package/dist/skills.d.ts +1 -1
- package/dist/skills.js +1 -1
- package/dist/suggest.d.mts +2 -2
- package/dist/suggest.d.ts +2 -2
- package/dist/theme.d.mts +10 -13
- package/dist/theme.d.ts +10 -13
- package/dist/theme.js +1 -1
- package/dist/theme.mjs +1 -1
- package/dist/{ui-copy-CKfFTtLk.d.mts → ui-copy-CL-VN1xb.d.mts} +2 -3
- package/dist/{ui-copy-CKfFTtLk.d.ts → ui-copy-CL-VN1xb.d.ts} +2 -3
- package/dist/well-known.d.mts +3 -3
- package/dist/well-known.d.ts +3 -3
- package/dist/well-known.js +1 -1
- package/dist/well-known.mjs +1 -1
- package/package.json +46 -38
- package/skills/cavuno-board-client/SKILL.md +1 -2
- package/skills/cavuno-board-filters/SKILL.md +2 -2
- package/skills/cavuno-board-format/SKILL.md +1 -1
- package/skills/cavuno-board-i18n/SKILL.md +3 -4
- package/skills/cavuno-board-job-posting/SKILL.md +1 -1
- package/skills/cavuno-board-messaging/SKILL.md +2 -3
- package/skills/cavuno-board-paywall/SKILL.md +1 -1
- package/skills/cavuno-board-salaries/SKILL.md +1 -1
- package/skills/cavuno-board-seo/SKILL.md +4 -6
- package/skills/cavuno-board-server/SKILL.md +1 -1
- package/skills/cavuno-board-setup/SKILL.md +2 -1
- package/skills/cavuno-board-sitemap/SKILL.md +1 -1
- package/skills/cavuno-board-smoke-test/SKILL.md +4 -13
- package/skills/flavors/tanstack-start/SKILL.md +1 -2
- package/skills/manifest.json +1 -1
- package/dist/_spec-C7vqY_b3.d.mts +0 -5202
- package/dist/_spec-C7vqY_b3.d.ts +0 -5202
package/dist/index.mjs
CHANGED
|
@@ -265,12 +265,24 @@ async function clearSession(storage) {
|
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
// src/version.ts
|
|
268
|
-
var SDK_VERSION = "2.0.
|
|
268
|
+
var SDK_VERSION = "2.0.2";
|
|
269
269
|
|
|
270
270
|
// src/client.ts
|
|
271
271
|
function isRawBody(body) {
|
|
272
272
|
return typeof body === "string" || body instanceof URLSearchParams || typeof FormData !== "undefined" && body instanceof FormData || typeof Blob !== "undefined" && body instanceof Blob || body instanceof ArrayBuffer || typeof ReadableStream !== "undefined" && body instanceof ReadableStream;
|
|
273
273
|
}
|
|
274
|
+
function redactUrlForLog(value) {
|
|
275
|
+
try {
|
|
276
|
+
const url = new URL(value);
|
|
277
|
+
for (const key of new Set(url.searchParams.keys())) {
|
|
278
|
+
url.searchParams.delete(key);
|
|
279
|
+
url.searchParams.set(key, "[REDACTED]");
|
|
280
|
+
}
|
|
281
|
+
return url.toString();
|
|
282
|
+
} catch {
|
|
283
|
+
return value.replace(/([?&][^=&#]+)=([^&#]*)/g, "$1=[REDACTED]");
|
|
284
|
+
}
|
|
285
|
+
}
|
|
274
286
|
var BoardClient = class {
|
|
275
287
|
storage;
|
|
276
288
|
basePath;
|
|
@@ -322,9 +334,10 @@ var BoardClient = class {
|
|
|
322
334
|
init: { ...passthrough, method, headers, body: serializedBody }
|
|
323
335
|
};
|
|
324
336
|
if (this.options.onRequest) req = await this.options.onRequest(req);
|
|
325
|
-
|
|
337
|
+
const logUrl = redactUrlForLog(req.url);
|
|
338
|
+
this.options.logger?.debug(`${method} ${logUrl}`);
|
|
326
339
|
const res = await globalThis.fetch(req.url, req.init);
|
|
327
|
-
this.options.logger?.debug(`${res.status} ${method} ${
|
|
340
|
+
this.options.logger?.debug(`${res.status} ${method} ${logUrl}`);
|
|
328
341
|
if (this.options.onResponse)
|
|
329
342
|
await this.options.onResponse(res.clone(), req);
|
|
330
343
|
if (res.status === 204) return void 0;
|
|
@@ -350,7 +363,7 @@ var BoardClient = class {
|
|
|
350
363
|
raw: parsed
|
|
351
364
|
});
|
|
352
365
|
this.options.logger?.error(
|
|
353
|
-
`${error.status} ${error.code} ${method} ${
|
|
366
|
+
`${error.status} ${error.code} ${method} ${logUrl}`
|
|
354
367
|
);
|
|
355
368
|
throw error;
|
|
356
369
|
}
|
|
@@ -1005,7 +1018,7 @@ function jobsNamespace(client) {
|
|
|
1005
1018
|
);
|
|
1006
1019
|
},
|
|
1007
1020
|
/**
|
|
1008
|
-
* Apply to a job natively
|
|
1021
|
+
* Apply to a job natively. Optional auth: a signed-in candidate
|
|
1009
1022
|
* applies from their profile (omit name/email); a guest supplies them
|
|
1010
1023
|
* (allowed only when the board permits applications without sign-up).
|
|
1011
1024
|
* Idempotent — a repeat apply returns the existing application.
|
|
@@ -1103,8 +1116,8 @@ function meNamespace(client) {
|
|
|
1103
1116
|
return client.fetch("/me", { ...options, method: "DELETE" });
|
|
1104
1117
|
},
|
|
1105
1118
|
/**
|
|
1106
|
-
* The authenticated candidate's own account self-service
|
|
1107
|
-
* `profile.*` is the lean profile singleton +
|
|
1119
|
+
* The authenticated candidate's own account self-service.
|
|
1120
|
+
* `profile.*` is the lean profile singleton + its
|
|
1108
1121
|
* experience / education / skills / languages collections + avatar.
|
|
1109
1122
|
*/
|
|
1110
1123
|
profile: {
|
|
@@ -1252,7 +1265,7 @@ function meNamespace(client) {
|
|
|
1252
1265
|
},
|
|
1253
1266
|
/**
|
|
1254
1267
|
* Signed-in notification preferences + the anonymous email-link
|
|
1255
|
-
* unsubscribe branch
|
|
1268
|
+
* unsubscribe branch.
|
|
1256
1269
|
*/
|
|
1257
1270
|
notificationPreferences: {
|
|
1258
1271
|
/** List every notification channel + its subscribed state. */
|
|
@@ -1282,7 +1295,7 @@ function meNamespace(client) {
|
|
|
1282
1295
|
}
|
|
1283
1296
|
},
|
|
1284
1297
|
/**
|
|
1285
|
-
* The authenticated board user's employer facet
|
|
1298
|
+
* The authenticated board user's employer facet:
|
|
1286
1299
|
* claiming/creating a company, the work-email verification state machine,
|
|
1287
1300
|
* and editing the company profile. A board user becomes an employer by
|
|
1288
1301
|
* claiming a company — the same identity can also be a candidate.
|
|
@@ -1427,8 +1440,7 @@ function meNamespace(client) {
|
|
|
1427
1440
|
}
|
|
1428
1441
|
},
|
|
1429
1442
|
/**
|
|
1430
|
-
* Manage the jobs of a company I am an approved member of
|
|
1431
|
-
* ADR-0052). Every method is scoped to the company `slug`. New jobs are
|
|
1443
|
+
* Manage the jobs of a company I am an approved member of . Every method is scoped to the company `slug`. New jobs are
|
|
1432
1444
|
* created as held drafts — publishing is `publish` (within a live paid
|
|
1433
1445
|
* window) or the paid-post checkout flow.
|
|
1434
1446
|
*/
|
|
@@ -1528,7 +1540,7 @@ function meNamespace(client) {
|
|
|
1528
1540
|
);
|
|
1529
1541
|
},
|
|
1530
1542
|
/**
|
|
1531
|
-
* Pay for / publish a held draft
|
|
1543
|
+
* Pay for / publish a held draft. Select billing: a paid plan
|
|
1532
1544
|
* returns `{ status: 'checkout', checkoutUrl }` (send the buyer there;
|
|
1533
1545
|
* the webhook publishes on payment); a free / bundle / subscription plan
|
|
1534
1546
|
* publishes immediately (`status: 'published'`); an invoice plan emails a
|
|
@@ -1569,10 +1581,10 @@ function meNamespace(client) {
|
|
|
1569
1581
|
},
|
|
1570
1582
|
/**
|
|
1571
1583
|
* The read-only reporting funnel that backs the hosted employer jobs
|
|
1572
|
-
* table
|
|
1584
|
+
* table: per-job views / apply clicks / native applications,
|
|
1573
1585
|
* plus a daily views+apply-clicks time-series for a chart. Membership-
|
|
1574
|
-
* scoped; never cached. Analytics degrade to zeroes
|
|
1575
|
-
*
|
|
1586
|
+
* scoped; never cached. Analytics degrade to zeroes when reporting data
|
|
1587
|
+
* is temporarily unavailable, so a `0` means
|
|
1576
1588
|
* "no activity" OR "analytics briefly unavailable".
|
|
1577
1589
|
*/
|
|
1578
1590
|
jobStats: {
|
|
@@ -1609,7 +1621,7 @@ function meNamespace(client) {
|
|
|
1609
1621
|
}
|
|
1610
1622
|
},
|
|
1611
1623
|
/**
|
|
1612
|
-
* Company-profile page views
|
|
1624
|
+
* Company-profile page views for the employer dashboard's
|
|
1613
1625
|
* "profile views" metric — visits to the company profile page ITSELF
|
|
1614
1626
|
* (`/companies/{slug}`, tab subpaths and bots excluded), NOT job details.
|
|
1615
1627
|
* Membership-scoped; never cached; degrades to `0` / an empty series on
|
|
@@ -1648,7 +1660,7 @@ function meNamespace(client) {
|
|
|
1648
1660
|
},
|
|
1649
1661
|
/**
|
|
1650
1662
|
* The applicant pipeline (ATS) for a company I am an approved member of
|
|
1651
|
-
*
|
|
1663
|
+
* Reads return the full pipeline (job
|
|
1652
1664
|
* header + stage rail + applicants with timelines); the move/reject/note
|
|
1653
1665
|
* writes resolve void — re-read the pipeline for fresh state, mirroring
|
|
1654
1666
|
* the hosted portal's single reactive query.
|
|
@@ -1799,7 +1811,7 @@ function meNamespace(client) {
|
|
|
1799
1811
|
}
|
|
1800
1812
|
},
|
|
1801
1813
|
/**
|
|
1802
|
-
* The viewer's talent entitlement on this board
|
|
1814
|
+
* The viewer's talent entitlement on this board — "does this
|
|
1803
1815
|
* employer have talent access?" for gating a Message-vs-upsell CTA.
|
|
1804
1816
|
* Candidates and unaffiliated viewers get `hasTalentAccess: false`.
|
|
1805
1817
|
*
|
|
@@ -1818,7 +1830,7 @@ function meNamespace(client) {
|
|
|
1818
1830
|
}
|
|
1819
1831
|
},
|
|
1820
1832
|
/**
|
|
1821
|
-
* The authenticated board user's job-alert preferences
|
|
1833
|
+
* The authenticated board user's job-alert preferences —
|
|
1822
1834
|
* a collection (up to 10). Creating one is active immediately (no
|
|
1823
1835
|
* double opt-in — the authenticated action is the consent). There is no
|
|
1824
1836
|
* pause: `remove` is the only way to stop an alert.
|
|
@@ -1892,7 +1904,7 @@ function meNamespace(client) {
|
|
|
1892
1904
|
}
|
|
1893
1905
|
},
|
|
1894
1906
|
/**
|
|
1895
|
-
* The authenticated candidate's applications
|
|
1907
|
+
* The authenticated candidate's applications. Apply itself lives
|
|
1896
1908
|
* on the job (`board.jobs.apply` — it is optional-auth); these manage the
|
|
1897
1909
|
* applications the candidate has already submitted, keyed by `applicationId`.
|
|
1898
1910
|
*/
|
|
@@ -1948,7 +1960,7 @@ function meNamespace(client) {
|
|
|
1948
1960
|
}
|
|
1949
1961
|
},
|
|
1950
1962
|
/**
|
|
1951
|
-
* The candidate's resume
|
|
1963
|
+
* The candidate's resume. `upload` starts an async parse that
|
|
1952
1964
|
* auto-populates the profile — it returns `parseStatus: 'parsing'`; poll
|
|
1953
1965
|
* `retrieve()` until `parsed`/`failed`, then re-read `profile.*`.
|
|
1954
1966
|
*/
|
|
@@ -2039,7 +2051,7 @@ function meNamespace(client) {
|
|
|
2039
2051
|
}
|
|
2040
2052
|
},
|
|
2041
2053
|
/**
|
|
2042
|
-
* The authenticated board user's messaging inbox
|
|
2054
|
+
* The authenticated board user's messaging inbox.
|
|
2043
2055
|
* The v1 surface is polled REST — there is no realtime primitive; poll
|
|
2044
2056
|
* `list` / `listMessages` / `unreadCount` on an interval (3–5s is the
|
|
2045
2057
|
* reference cadence) for near-live updates.
|
|
@@ -2177,7 +2189,7 @@ function meNamespace(client) {
|
|
|
2177
2189
|
);
|
|
2178
2190
|
},
|
|
2179
2191
|
/**
|
|
2180
|
-
* The existing employer↔candidate conversation id (or null).
|
|
2192
|
+
* The existing employer↔candidate conversation id (or null).
|
|
2181
2193
|
* talent-contact helper — route to an existing thread instead of opening
|
|
2182
2194
|
* a composer.
|
|
2183
2195
|
*
|
|
@@ -2192,7 +2204,7 @@ function meNamespace(client) {
|
|
|
2192
2204
|
}
|
|
2193
2205
|
},
|
|
2194
2206
|
/**
|
|
2195
|
-
* Blocking
|
|
2207
|
+
* Blocking: list / add / remove blocks + a status check.
|
|
2196
2208
|
*/
|
|
2197
2209
|
blocks: {
|
|
2198
2210
|
/**
|
|
@@ -2230,7 +2242,7 @@ function meNamespace(client) {
|
|
|
2230
2242
|
);
|
|
2231
2243
|
},
|
|
2232
2244
|
/**
|
|
2233
|
-
* Whether I've blocked a user
|
|
2245
|
+
* Whether I've blocked a user.
|
|
2234
2246
|
*
|
|
2235
2247
|
* @example
|
|
2236
2248
|
* const { blocked } = await board.me.blocks.status(boardUserId);
|
|
@@ -2243,7 +2255,7 @@ function meNamespace(client) {
|
|
|
2243
2255
|
}
|
|
2244
2256
|
},
|
|
2245
2257
|
/**
|
|
2246
|
-
* Message-scoped actions
|
|
2258
|
+
* Message-scoped actions: edit / unsend your own messages
|
|
2247
2259
|
* (15-minute window), and report a message addressed to you.
|
|
2248
2260
|
*/
|
|
2249
2261
|
messages: {
|
|
@@ -2289,8 +2301,7 @@ function meNamespace(client) {
|
|
|
2289
2301
|
}
|
|
2290
2302
|
},
|
|
2291
2303
|
/**
|
|
2292
|
-
* The candidate job-access paywall — the authenticated money flow (
|
|
2293
|
-
* ADR-0056). Enumerate offers publicly with `board.paywall.offers()`, then
|
|
2304
|
+
* The candidate job-access paywall — the authenticated money flow . Enumerate offers publicly with `board.paywall.offers()`, then
|
|
2294
2305
|
* `checkout` here; poll `retrieveCheckout` until complete and confirm with
|
|
2295
2306
|
* `grant`. The SDK stays Stripe-agnostic — `checkout` returns a mount kit
|
|
2296
2307
|
* and the frontend brings `@stripe/stripe-js`.
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { S as Schemas } from './_spec-
|
|
1
|
+
import { S as Schemas } from './_spec-sW85fuvT.mjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Optional pagination metadata returned by Board API list operations.
|
|
5
|
+
* These fields are intentionally defined at the public SDK boundary because
|
|
6
|
+
* individual response schemas expose them inline rather than through a shared
|
|
7
|
+
* OpenAPI component.
|
|
7
8
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
interface OffsetPagination {
|
|
10
|
+
count?: number;
|
|
11
|
+
limit?: number;
|
|
12
|
+
offset?: number;
|
|
13
|
+
gatedCount?: number;
|
|
14
|
+
}
|
|
13
15
|
/** @deprecated Use `OffsetPagination`. */
|
|
14
16
|
type StorefrontPagination = OffsetPagination;
|
|
15
17
|
/** @deprecated Use `OffsetPagination`. */
|
|
@@ -33,7 +35,7 @@ type SearchEnvelope<T> = OffsetPagination & {
|
|
|
33
35
|
type PublicJob = Schemas['PublicJob'];
|
|
34
36
|
type PublicJobCard = Schemas['PublicJobCard'];
|
|
35
37
|
/**
|
|
36
|
-
* A job's opaque, display-only custom-field values
|
|
38
|
+
* A job's opaque, display-only custom-field values, keyed by each
|
|
37
39
|
* field's `key`. Resolve labels via the board's `CustomFieldDefinition`s
|
|
38
40
|
* (`board.context().customFields`).
|
|
39
41
|
*/
|
|
@@ -44,13 +46,13 @@ type OfficeLocation = Schemas['JobOfficeLocation'];
|
|
|
44
46
|
type RemoteOption = NonNullable<PublicJob['remoteOption']>;
|
|
45
47
|
type EmploymentType = NonNullable<PublicJob['employmentType']>;
|
|
46
48
|
type Seniority = NonNullable<PublicJob['seniority']>;
|
|
47
|
-
/** Candidate-facing result ordering
|
|
49
|
+
/** Candidate-facing result ordering; `relevance` is the default. */
|
|
48
50
|
type JobSort = NonNullable<Schemas['PublicSearchJobsBody']['sort']>;
|
|
49
51
|
type EducationRequirement = PublicJob['educationRequirements'][number];
|
|
50
52
|
type RemotePermit = PublicJob['remotePermits'][number];
|
|
51
53
|
type RemoteTimezone = PublicJob['remoteTimezones'][number];
|
|
52
54
|
/**
|
|
53
|
-
* Derived suggestion on a browse list
|
|
55
|
+
* Derived suggestion on a browse list: jobs surface `category`
|
|
54
56
|
* and `skill` terms; the companies list surfaces `market` terms.
|
|
55
57
|
*/
|
|
56
58
|
interface RelatedSearch {
|
|
@@ -83,7 +85,7 @@ type JobsListQuery = {
|
|
|
83
85
|
remoteOption?: RemoteOption[];
|
|
84
86
|
employmentType?: EmploymentType[];
|
|
85
87
|
seniority?: Seniority[];
|
|
86
|
-
/** Result ordering
|
|
88
|
+
/** Result ordering. Absent ⇒ `relevance` (the featured-ranked browse). */
|
|
87
89
|
sort?: JobSort;
|
|
88
90
|
/** Place slug for a geo radius search; unresolvable slugs are ignored. */
|
|
89
91
|
location?: string;
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { S as Schemas } from './_spec-
|
|
1
|
+
import { S as Schemas } from './_spec-sW85fuvT.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Optional pagination metadata returned by Board API list operations.
|
|
5
|
+
* These fields are intentionally defined at the public SDK boundary because
|
|
6
|
+
* individual response schemas expose them inline rather than through a shared
|
|
7
|
+
* OpenAPI component.
|
|
7
8
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
interface OffsetPagination {
|
|
10
|
+
count?: number;
|
|
11
|
+
limit?: number;
|
|
12
|
+
offset?: number;
|
|
13
|
+
gatedCount?: number;
|
|
14
|
+
}
|
|
13
15
|
/** @deprecated Use `OffsetPagination`. */
|
|
14
16
|
type StorefrontPagination = OffsetPagination;
|
|
15
17
|
/** @deprecated Use `OffsetPagination`. */
|
|
@@ -33,7 +35,7 @@ type SearchEnvelope<T> = OffsetPagination & {
|
|
|
33
35
|
type PublicJob = Schemas['PublicJob'];
|
|
34
36
|
type PublicJobCard = Schemas['PublicJobCard'];
|
|
35
37
|
/**
|
|
36
|
-
* A job's opaque, display-only custom-field values
|
|
38
|
+
* A job's opaque, display-only custom-field values, keyed by each
|
|
37
39
|
* field's `key`. Resolve labels via the board's `CustomFieldDefinition`s
|
|
38
40
|
* (`board.context().customFields`).
|
|
39
41
|
*/
|
|
@@ -44,13 +46,13 @@ type OfficeLocation = Schemas['JobOfficeLocation'];
|
|
|
44
46
|
type RemoteOption = NonNullable<PublicJob['remoteOption']>;
|
|
45
47
|
type EmploymentType = NonNullable<PublicJob['employmentType']>;
|
|
46
48
|
type Seniority = NonNullable<PublicJob['seniority']>;
|
|
47
|
-
/** Candidate-facing result ordering
|
|
49
|
+
/** Candidate-facing result ordering; `relevance` is the default. */
|
|
48
50
|
type JobSort = NonNullable<Schemas['PublicSearchJobsBody']['sort']>;
|
|
49
51
|
type EducationRequirement = PublicJob['educationRequirements'][number];
|
|
50
52
|
type RemotePermit = PublicJob['remotePermits'][number];
|
|
51
53
|
type RemoteTimezone = PublicJob['remoteTimezones'][number];
|
|
52
54
|
/**
|
|
53
|
-
* Derived suggestion on a browse list
|
|
55
|
+
* Derived suggestion on a browse list: jobs surface `category`
|
|
54
56
|
* and `skill` terms; the companies list surfaces `market` terms.
|
|
55
57
|
*/
|
|
56
58
|
interface RelatedSearch {
|
|
@@ -83,7 +85,7 @@ type JobsListQuery = {
|
|
|
83
85
|
remoteOption?: RemoteOption[];
|
|
84
86
|
employmentType?: EmploymentType[];
|
|
85
87
|
seniority?: Seniority[];
|
|
86
|
-
/** Result ordering
|
|
88
|
+
/** Result ordering. Absent ⇒ `relevance` (the featured-ranked browse). */
|
|
87
89
|
sort?: JobSort;
|
|
88
90
|
/** Place slug for a geo radius search; unresolvable slugs are ignored. */
|
|
89
91
|
location?: string;
|
package/dist/paths.d.mts
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Each `*Path` returns an absolute path (leading slash, no origin);
|
|
8
8
|
* `boardUrl(origin, path)` prefixes a board origin. Pure, isomorphic,
|
|
9
|
-
* zero-dependency — safe to import in
|
|
9
|
+
* zero-dependency — safe to import in server runtimes, on the edge,
|
|
10
10
|
* and in the browser.
|
|
11
11
|
*
|
|
12
12
|
* These paths mirror the hosted board's indexed URLs exactly (migration
|
|
13
13
|
* parity). Do NOT change a pattern here without updating the hosted board
|
|
14
14
|
* and the sitemap golden tests in lockstep — the structure is a locked
|
|
15
|
-
* cross-surface contract
|
|
15
|
+
* cross-surface contract.
|
|
16
16
|
*/
|
|
17
17
|
/** Job detail — the canonical, indexed job URL. Requires BOTH slugs. */
|
|
18
18
|
declare function jobDetailPath(companySlug: string, jobSlug: string): string;
|
|
@@ -63,7 +63,7 @@ declare const BOARD_PATHS: {
|
|
|
63
63
|
readonly talent: "/talent";
|
|
64
64
|
readonly employers: "/employers";
|
|
65
65
|
/**
|
|
66
|
-
* Alert-email surfaces
|
|
66
|
+
* Alert-email surfaces. Promoted out of raw literals in
|
|
67
67
|
* the job-alerts composer so /go indirection and email composition share
|
|
68
68
|
* one definition.
|
|
69
69
|
*/
|
|
@@ -71,8 +71,8 @@ declare const BOARD_PATHS: {
|
|
|
71
71
|
readonly alertsConfirm: "/alerts/confirm";
|
|
72
72
|
};
|
|
73
73
|
/**
|
|
74
|
-
* Email `/go` indirection paths
|
|
75
|
-
*
|
|
74
|
+
* Email `/go` indirection paths. Pure builders so
|
|
75
|
+
* Server-side email composers can emit structure-independent links without
|
|
76
76
|
* importing `@cavuno/board/go` (handler code is not safe in that runtime).
|
|
77
77
|
*
|
|
78
78
|
* Shapes match the hosted handler + SDK `createGoHandler` contracts:
|
|
@@ -80,7 +80,7 @@ declare const BOARD_PATHS: {
|
|
|
80
80
|
* /go/alerts-manage
|
|
81
81
|
* /go/alerts-confirm
|
|
82
82
|
*
|
|
83
|
-
* No encoding — callers pass opaque
|
|
83
|
+
* No encoding — callers pass opaque Cavuno ids / static role segments that
|
|
84
84
|
* are already URL-safe path segments. Query strings are composed by the
|
|
85
85
|
* caller (tokens must ride through verbatim).
|
|
86
86
|
*/
|
package/dist/paths.d.ts
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Each `*Path` returns an absolute path (leading slash, no origin);
|
|
8
8
|
* `boardUrl(origin, path)` prefixes a board origin. Pure, isomorphic,
|
|
9
|
-
* zero-dependency — safe to import in
|
|
9
|
+
* zero-dependency — safe to import in server runtimes, on the edge,
|
|
10
10
|
* and in the browser.
|
|
11
11
|
*
|
|
12
12
|
* These paths mirror the hosted board's indexed URLs exactly (migration
|
|
13
13
|
* parity). Do NOT change a pattern here without updating the hosted board
|
|
14
14
|
* and the sitemap golden tests in lockstep — the structure is a locked
|
|
15
|
-
* cross-surface contract
|
|
15
|
+
* cross-surface contract.
|
|
16
16
|
*/
|
|
17
17
|
/** Job detail — the canonical, indexed job URL. Requires BOTH slugs. */
|
|
18
18
|
declare function jobDetailPath(companySlug: string, jobSlug: string): string;
|
|
@@ -63,7 +63,7 @@ declare const BOARD_PATHS: {
|
|
|
63
63
|
readonly talent: "/talent";
|
|
64
64
|
readonly employers: "/employers";
|
|
65
65
|
/**
|
|
66
|
-
* Alert-email surfaces
|
|
66
|
+
* Alert-email surfaces. Promoted out of raw literals in
|
|
67
67
|
* the job-alerts composer so /go indirection and email composition share
|
|
68
68
|
* one definition.
|
|
69
69
|
*/
|
|
@@ -71,8 +71,8 @@ declare const BOARD_PATHS: {
|
|
|
71
71
|
readonly alertsConfirm: "/alerts/confirm";
|
|
72
72
|
};
|
|
73
73
|
/**
|
|
74
|
-
* Email `/go` indirection paths
|
|
75
|
-
*
|
|
74
|
+
* Email `/go` indirection paths. Pure builders so
|
|
75
|
+
* Server-side email composers can emit structure-independent links without
|
|
76
76
|
* importing `@cavuno/board/go` (handler code is not safe in that runtime).
|
|
77
77
|
*
|
|
78
78
|
* Shapes match the hosted handler + SDK `createGoHandler` contracts:
|
|
@@ -80,7 +80,7 @@ declare const BOARD_PATHS: {
|
|
|
80
80
|
* /go/alerts-manage
|
|
81
81
|
* /go/alerts-confirm
|
|
82
82
|
*
|
|
83
|
-
* No encoding — callers pass opaque
|
|
83
|
+
* No encoding — callers pass opaque Cavuno ids / static role segments that
|
|
84
84
|
* are already URL-safe path segments. Query strings are composed by the
|
|
85
85
|
* caller (tokens must ride through verbatim).
|
|
86
86
|
*/
|
package/dist/paths.js
CHANGED
|
@@ -97,7 +97,7 @@ var BOARD_PATHS = {
|
|
|
97
97
|
talent: "/talent",
|
|
98
98
|
employers: "/employers",
|
|
99
99
|
/**
|
|
100
|
-
* Alert-email surfaces
|
|
100
|
+
* Alert-email surfaces. Promoted out of raw literals in
|
|
101
101
|
* the job-alerts composer so /go indirection and email composition share
|
|
102
102
|
* one definition.
|
|
103
103
|
*/
|
package/dist/paths.mjs
CHANGED
|
@@ -56,7 +56,7 @@ var BOARD_PATHS = {
|
|
|
56
56
|
talent: "/talent",
|
|
57
57
|
employers: "/employers",
|
|
58
58
|
/**
|
|
59
|
-
* Alert-email surfaces
|
|
59
|
+
* Alert-email surfaces. Promoted out of raw literals in
|
|
60
60
|
* the job-alerts composer so /go indirection and email composition share
|
|
61
61
|
* one definition.
|
|
62
62
|
*/
|
|
@@ -51,7 +51,7 @@ type ValidateManifestResult = {
|
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
|
-
* Role vocabulary for the per-board route manifest
|
|
54
|
+
* Role vocabulary for the per-board route manifest.
|
|
55
55
|
*
|
|
56
56
|
* Parameterized roles mirror the helpers in `../paths`; static roles mirror
|
|
57
57
|
* `BOARD_PATHS` keys; `alertsManage` / `alertsConfirm` are promoted out of
|
|
@@ -67,7 +67,7 @@ type RouteRole = 'jobDetail' | 'jobsCategory' | 'jobsSkill' | 'jobsLocation' | '
|
|
|
67
67
|
* Empty arrays = static / zero-param roles (never inferred by signature).
|
|
68
68
|
*/
|
|
69
69
|
declare const ROLE_PARAM_REGISTRY: Record<RouteRole, readonly string[]>;
|
|
70
|
-
/** Email-emitting roles — a missing one blocks publish
|
|
70
|
+
/** Email-emitting roles — a missing one blocks publish. */
|
|
71
71
|
declare const REQUIRED_ROLES: readonly RouteRole[];
|
|
72
72
|
/** All known roles (stable iteration order = registry key order). */
|
|
73
73
|
declare const ALL_ROLES: readonly RouteRole[];
|
|
@@ -75,7 +75,7 @@ declare function isRouteRole(value: string): value is RouteRole;
|
|
|
75
75
|
/**
|
|
76
76
|
* Identity manifest reproducing the current canonical structure from the
|
|
77
77
|
* paths module. Built by calling helpers with `:param` placeholders so the
|
|
78
|
-
* templates stay locked to the helpers
|
|
78
|
+
* templates stay locked to the helpers.
|
|
79
79
|
*/
|
|
80
80
|
declare const CANONICAL_MANIFEST: ManifestV1;
|
|
81
81
|
|
package/dist/roles-vY0AXhoc.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ type ValidateManifestResult = {
|
|
|
51
51
|
};
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
|
-
* Role vocabulary for the per-board route manifest
|
|
54
|
+
* Role vocabulary for the per-board route manifest.
|
|
55
55
|
*
|
|
56
56
|
* Parameterized roles mirror the helpers in `../paths`; static roles mirror
|
|
57
57
|
* `BOARD_PATHS` keys; `alertsManage` / `alertsConfirm` are promoted out of
|
|
@@ -67,7 +67,7 @@ type RouteRole = 'jobDetail' | 'jobsCategory' | 'jobsSkill' | 'jobsLocation' | '
|
|
|
67
67
|
* Empty arrays = static / zero-param roles (never inferred by signature).
|
|
68
68
|
*/
|
|
69
69
|
declare const ROLE_PARAM_REGISTRY: Record<RouteRole, readonly string[]>;
|
|
70
|
-
/** Email-emitting roles — a missing one blocks publish
|
|
70
|
+
/** Email-emitting roles — a missing one blocks publish. */
|
|
71
71
|
declare const REQUIRED_ROLES: readonly RouteRole[];
|
|
72
72
|
/** All known roles (stable iteration order = registry key order). */
|
|
73
73
|
declare const ALL_ROLES: readonly RouteRole[];
|
|
@@ -75,7 +75,7 @@ declare function isRouteRole(value: string): value is RouteRole;
|
|
|
75
75
|
/**
|
|
76
76
|
* Identity manifest reproducing the current canonical structure from the
|
|
77
77
|
* paths module. Built by calling helpers with `:param` placeholders so the
|
|
78
|
-
* templates stay locked to the helpers
|
|
78
|
+
* templates stay locked to the helpers.
|
|
79
79
|
*/
|
|
80
80
|
declare const CANONICAL_MANIFEST: ManifestV1;
|
|
81
81
|
|
|
@@ -11,13 +11,13 @@ declare function classifyRoutes(routes: RouteEntry[], markers?: ReadonlyMap<stri
|
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Classify routes and emit a ManifestV1 plus publish-gate signals.
|
|
14
|
-
* Assigned templates are self-validated via checkRoleTemplate
|
|
14
|
+
* Assigned templates are self-validated via checkRoleTemplate;
|
|
15
15
|
* failing required roles land in blockingMissing; failing optionals warn.
|
|
16
16
|
*/
|
|
17
17
|
declare function compileManifest(routes: RouteEntry[], markers?: ReadonlyMap<string, RouteRole>): CompileResult;
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* — compile a ManifestV1 from a workspace file tree already in
|
|
21
21
|
* memory (candidate verification). Pure: no IO.
|
|
22
22
|
*/
|
|
23
23
|
|
|
@@ -36,7 +36,7 @@ declare function compileManifestFromTree(files: ReadonlyArray<TreeFile>): Compil
|
|
|
36
36
|
* Tolerant parse of `export const cavunoPage = '<role>'` (single or double
|
|
37
37
|
* quotes; optional `as const`). Accepts camelCase roles and their kebab-case
|
|
38
38
|
* aliases (`job-detail` → `jobDetail`). Returns null when absent or when the
|
|
39
|
-
* string is not a known RouteRole
|
|
39
|
+
* string is not a known RouteRole.
|
|
40
40
|
*/
|
|
41
41
|
declare function extractCavunoPageMarker(contents: string): RouteRole | null;
|
|
42
42
|
|
|
@@ -70,7 +70,7 @@ declare function checkRoleTemplate(role: RouteRole, template: string): ValidateM
|
|
|
70
70
|
declare function validateManifest(value: unknown): ValidateManifestResult;
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
|
-
* Platform resolution overlay
|
|
73
|
+
* Platform resolution overlay.
|
|
74
74
|
*
|
|
75
75
|
* Pure + isomorphic: role + params + precedence layers → board path.
|
|
76
76
|
* Imports only sibling route-contract / paths modules.
|
|
@@ -92,7 +92,7 @@ declare function createBoardLinkResolver(layers: readonly ManifestLayer[]): {
|
|
|
92
92
|
};
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
*
|
|
95
|
+
* — pure history path matching for hosted rename 301s.
|
|
96
96
|
*
|
|
97
97
|
* Segment-wise matcher (no RegExp construction from templates). Templates
|
|
98
98
|
* are validated at write time but stay defensive here: any segment that
|
|
@@ -131,7 +131,7 @@ type HistoryMatchResult = {
|
|
|
131
131
|
declare function matchPathAgainstHistory(entries: readonly HistoryMatchEntry[], pathname: string): HistoryMatchResult | null;
|
|
132
132
|
|
|
133
133
|
/**
|
|
134
|
-
*
|
|
134
|
+
* — shared types for the route-derivation adapter registry.
|
|
135
135
|
*/
|
|
136
136
|
type DerivedRoute = {
|
|
137
137
|
path: string;
|
|
@@ -151,7 +151,7 @@ type FrameworkId = 'tanstack' | 'next' | 'astro' | 'sveltekit' | 'nuxt' | 'react
|
|
|
151
151
|
*
|
|
152
152
|
* The marker-less TanStack heuristic (any src/routes/*.tsx|jsx) runs LAST
|
|
153
153
|
* among framework checks so a Next/Astro/SvelteKit/Nuxt repo with a stray
|
|
154
|
-
* src/routes helper is never misclassified
|
|
154
|
+
* src/routes helper is never misclassified.
|
|
155
155
|
*/
|
|
156
156
|
|
|
157
157
|
declare function detectFramework(paths: string[]): FrameworkId | null;
|
|
@@ -159,8 +159,8 @@ declare function detectFramework(paths: string[]): FrameworkId | null;
|
|
|
159
159
|
/**
|
|
160
160
|
* react-router pure parsers over provided FILE CONTENTS.
|
|
161
161
|
*
|
|
162
|
-
* Content-fetch is intentionally
|
|
163
|
-
*
|
|
162
|
+
* Content-fetch is intentionally not supported into the navigator UI —
|
|
163
|
+
* only exposes these functions; UI wiring is a future release.
|
|
164
164
|
*/
|
|
165
165
|
|
|
166
166
|
/**
|
|
@@ -177,7 +177,7 @@ declare function parseReactRouterRoutes(contents: string[]): DerivedRoute[];
|
|
|
177
177
|
|
|
178
178
|
/**
|
|
179
179
|
* TanStack Start / TanStack Router file-based route conventions under
|
|
180
|
-
* `src/routes/`. Behavior preserved exactly from the
|
|
180
|
+
* `src/routes/`. Behavior preserved exactly from the parser.
|
|
181
181
|
*
|
|
182
182
|
* - `index` → parent path (`src/routes/index.tsx` → `/`)
|
|
183
183
|
* - dots nest (`jobs.index.tsx` → `/jobs`)
|
|
@@ -208,7 +208,7 @@ declare function parseNextRoutes(paths: string[]): DerivedRoute[];
|
|
|
208
208
|
* when the tree has astro.config.* and no src/pages/ (srcDir-customized).
|
|
209
209
|
* Page extensions: .astro / .md / .mdx / .html.
|
|
210
210
|
* Skip _-prefixed and .../api/. Index collapses.
|
|
211
|
-
* [param]→:param, [...slug]→*, [[...slug]]
|
|
211
|
+
* [param]→:param, [...slug]→*, [[...slug]]→*.
|
|
212
212
|
*/
|
|
213
213
|
|
|
214
214
|
declare function parseAstroRoutes(paths: string[]): DerivedRoute[];
|
|
@@ -217,7 +217,7 @@ declare function parseAstroRoutes(paths: string[]): DerivedRoute[];
|
|
|
217
217
|
* SvelteKit file-based routing: src/routes/.../+page.svelte
|
|
218
218
|
* and layout-reset +page@*.svelte only.
|
|
219
219
|
* (group) stripped, [param]→:param, [[...rest]]→*, dynamic ⇒ navigable false.
|
|
220
|
-
* +page.ts / +page.server.ts are load modules and derive nothing
|
|
220
|
+
* +page.ts / +page.server.ts are load modules and derive nothing.
|
|
221
221
|
*/
|
|
222
222
|
|
|
223
223
|
declare function parseSvelteKitRoutes(paths: string[]): DerivedRoute[];
|
|
@@ -231,7 +231,7 @@ declare function parseSvelteKitRoutes(paths: string[]): DerivedRoute[];
|
|
|
231
231
|
declare function parseNuxtRoutes(paths: string[]): DerivedRoute[];
|
|
232
232
|
|
|
233
233
|
/**
|
|
234
|
-
*
|
|
234
|
+
* — framework adapter registry entry.
|
|
235
235
|
*
|
|
236
236
|
* Detects the framework from a path listing, dispatches to the matching
|
|
237
237
|
* pure parser, returns DerivedRoute[] (path + navigable). Unknown → [].
|
|
@@ -239,18 +239,18 @@ declare function parseNuxtRoutes(paths: string[]): DerivedRoute[];
|
|
|
239
239
|
* react-router content parsers are exported for later UI wiring; the
|
|
240
240
|
* path-only deriveRoutes entry returns [] for react-router-only trees.
|
|
241
241
|
*
|
|
242
|
-
*
|
|
242
|
+
*enumerateRouteEntries keeps sourcePath for marker harvest +
|
|
243
243
|
* compileManifest; deriveRoutes strips it so the navigator contract is
|
|
244
244
|
* unchanged (path + navigable only).
|
|
245
245
|
*/
|
|
246
246
|
|
|
247
247
|
/**
|
|
248
|
-
* Navigator contract: path + navigable only
|
|
248
|
+
* Navigator contract: path + navigable only.
|
|
249
249
|
* sourcePath is intentionally stripped so existing equality fixtures hold.
|
|
250
250
|
*/
|
|
251
251
|
declare function deriveRoutes(paths: string[]): DerivedRoute[];
|
|
252
252
|
/**
|
|
253
|
-
*
|
|
253
|
+
* compile path: URL template + sourcePath for marker harvest.
|
|
254
254
|
*/
|
|
255
255
|
declare function enumerateRouteEntries(paths: string[]): RouteEntry[];
|
|
256
256
|
|