@cavuno/board 1.33.1 → 1.35.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 +7 -8
- package/dist/bin.mjs +91 -21
- package/dist/{board-BTVapQiL.d.mts → board-Be8dY9Ba.d.mts} +1 -1
- package/dist/{board-0yI5ZRJw.d.ts → board-DsRbgz_D.d.ts} +1 -1
- package/dist/filters.d.mts +1 -1
- package/dist/filters.d.ts +1 -1
- package/dist/format.d.mts +2 -2
- package/dist/format.d.ts +2 -2
- package/dist/index.d.mts +32 -16
- package/dist/index.d.ts +32 -16
- package/dist/index.js +6 -3
- package/dist/index.mjs +6 -3
- package/dist/{jobs-Di4AV-02.d.mts → jobs-BFLMDNEN.d.mts} +194 -29
- package/dist/{jobs-Di4AV-02.d.ts → jobs-BFLMDNEN.d.ts} +194 -29
- package/dist/paths.d.mts +72 -0
- package/dist/paths.d.ts +72 -0
- package/dist/paths.js +99 -0
- package/dist/paths.mjs +78 -0
- package/dist/{salaries-B-zJKjkk.d.ts → salaries-negE75t8.d.ts} +4 -4
- package/dist/{salaries-D-BGZpDC.d.mts → salaries-pO_vGORE.d.mts} +4 -4
- package/dist/seo.d.mts +3 -3
- package/dist/seo.d.ts +3 -3
- package/dist/server.d.mts +3 -3
- package/dist/server.d.ts +3 -3
- package/dist/sitemap.d.mts +3 -3
- package/dist/sitemap.d.ts +3 -3
- package/dist/sitemap.js +89 -29
- package/dist/sitemap.mjs +89 -29
- package/package.json +11 -1
- package/skills/cavuno-board-auth/SKILL.md +0 -1
- package/skills/cavuno-board-client/SKILL.md +1 -4
- package/skills/cavuno-board-job-alerts/SKILL.md +4 -3
- package/skills/cavuno-board-jobs/SKILL.md +2 -2
- package/skills/cavuno-board-setup/SKILL.md +6 -8
- package/skills/cavuno-board-smoke-test/SKILL.md +7 -6
- package/skills/cavuno-board-theme/SKILL.md +33 -45
- package/skills/flavors/tanstack-start/SKILL.md +0 -1
- package/skills/manifest.json +4 -4
|
@@ -60,6 +60,15 @@ interface components {
|
|
|
60
60
|
/** @description The note text. */
|
|
61
61
|
body: string;
|
|
62
62
|
};
|
|
63
|
+
AddCategoryAliasesBody: {
|
|
64
|
+
aliases: string[];
|
|
65
|
+
};
|
|
66
|
+
AddMarketAliasesBody: {
|
|
67
|
+
aliases: string[];
|
|
68
|
+
};
|
|
69
|
+
AddSkillAliasesBody: {
|
|
70
|
+
aliases: string[];
|
|
71
|
+
};
|
|
63
72
|
/** @description Links related to this resource. List responses only carry the `admin` URL because the public URL needs the company slug, which list-shape Convex projections do not fan out to. */
|
|
64
73
|
AdminOnlyResourceLinks: {
|
|
65
74
|
/**
|
|
@@ -75,7 +84,7 @@ interface components {
|
|
|
75
84
|
object: "alert";
|
|
76
85
|
label: string | null;
|
|
77
86
|
/** @enum {string} */
|
|
78
|
-
frequency: "
|
|
87
|
+
frequency: "weekly";
|
|
79
88
|
isActive: boolean;
|
|
80
89
|
filters: {
|
|
81
90
|
jobFunctions: string[];
|
|
@@ -95,7 +104,7 @@ interface components {
|
|
|
95
104
|
AlertBody: {
|
|
96
105
|
label?: string;
|
|
97
106
|
/** @enum {string} */
|
|
98
|
-
frequency: "
|
|
107
|
+
frequency: "weekly";
|
|
99
108
|
jobFunctions?: string[];
|
|
100
109
|
seniorityLevels?: string[];
|
|
101
110
|
remoteOptions?: string[];
|
|
@@ -554,6 +563,18 @@ interface components {
|
|
|
554
563
|
name: string;
|
|
555
564
|
jobSkillId: string | null;
|
|
556
565
|
};
|
|
566
|
+
Category: {
|
|
567
|
+
id: string;
|
|
568
|
+
/** @enum {string} */
|
|
569
|
+
object: "category";
|
|
570
|
+
name: string;
|
|
571
|
+
slug: string;
|
|
572
|
+
aliasSlugs: string[];
|
|
573
|
+
sourceLocale: string | null;
|
|
574
|
+
parentId: string | null;
|
|
575
|
+
createdAt: string;
|
|
576
|
+
children?: unknown[];
|
|
577
|
+
};
|
|
557
578
|
ClaimableCompany: {
|
|
558
579
|
id: string;
|
|
559
580
|
/** @enum {string} */
|
|
@@ -889,6 +910,13 @@ interface components {
|
|
|
889
910
|
/** @enum {string} */
|
|
890
911
|
status?: "draft" | "scheduled" | "published";
|
|
891
912
|
};
|
|
913
|
+
CreateCategoryBody: {
|
|
914
|
+
name: string;
|
|
915
|
+
slug?: string;
|
|
916
|
+
parentId?: string;
|
|
917
|
+
aliasSlugs?: string[];
|
|
918
|
+
sourceLocale?: string;
|
|
919
|
+
};
|
|
892
920
|
CreateCompanyBody: {
|
|
893
921
|
/** @description Public company website URL. Normalized to a canonical apex domain when stored. */
|
|
894
922
|
website?: string;
|
|
@@ -907,6 +935,12 @@ interface components {
|
|
|
907
935
|
/** @description URL-friendly slug for the company. Auto-generated from `name` when omitted. */
|
|
908
936
|
slug?: string;
|
|
909
937
|
};
|
|
938
|
+
CreateDomainBody: {
|
|
939
|
+
/** @description Hostname to bind to this board, for example jobs.acme.com. Labels may contain letters, numbers, and hyphens, and may not start or end with a hyphen. The API normalizes accepted hostnames to lowercase before writing. */
|
|
940
|
+
domain: string;
|
|
941
|
+
/** @enum {string} */
|
|
942
|
+
source?: "external";
|
|
943
|
+
};
|
|
910
944
|
CreateEducationBody: {
|
|
911
945
|
institutionName: string;
|
|
912
946
|
institutionUrl?: string;
|
|
@@ -985,6 +1019,10 @@ interface components {
|
|
|
985
1019
|
* @enum {string}
|
|
986
1020
|
*/
|
|
987
1021
|
salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
|
|
1022
|
+
/** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
|
|
1023
|
+
skills?: string[];
|
|
1024
|
+
/** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
|
|
1025
|
+
categories?: string[];
|
|
988
1026
|
/** @description Whether the job appears in featured slots on the public board. */
|
|
989
1027
|
isFeatured?: boolean;
|
|
990
1028
|
/** @description Job expiry as a Unix epoch in milliseconds. On create, omitted or `null` defaults to 30 days from creation. On PATCH, pass `null` to clear an existing expiry. Past timestamps remove the job from the public board. */
|
|
@@ -1105,12 +1143,24 @@ interface components {
|
|
|
1105
1143
|
};
|
|
1106
1144
|
colorMode?: string;
|
|
1107
1145
|
};
|
|
1146
|
+
CreateMarketBody: {
|
|
1147
|
+
name: string;
|
|
1148
|
+
slug?: string;
|
|
1149
|
+
aliasSlugs?: string[];
|
|
1150
|
+
sourceLocale?: string;
|
|
1151
|
+
};
|
|
1108
1152
|
CreatePipelineStageBody: {
|
|
1109
1153
|
/** @description The job whose pipeline gains the stage. */
|
|
1110
1154
|
jobId: string;
|
|
1111
1155
|
/** @description The stage label. */
|
|
1112
1156
|
label: string;
|
|
1113
1157
|
};
|
|
1158
|
+
CreateSkillBody: {
|
|
1159
|
+
name: string;
|
|
1160
|
+
slug?: string;
|
|
1161
|
+
aliasSlugs?: string[];
|
|
1162
|
+
sourceLocale?: string;
|
|
1163
|
+
};
|
|
1114
1164
|
CreateTagBody: {
|
|
1115
1165
|
/** @description URL-friendly slug for the tag. Auto-generated from `name` when omitted. */
|
|
1116
1166
|
slug?: string;
|
|
@@ -1153,6 +1203,33 @@ interface components {
|
|
|
1153
1203
|
/** @description Display label (authoring default; localized per board in the template). */
|
|
1154
1204
|
label: string;
|
|
1155
1205
|
};
|
|
1206
|
+
Domain: {
|
|
1207
|
+
id: string;
|
|
1208
|
+
/** @enum {string} */
|
|
1209
|
+
object: "domain";
|
|
1210
|
+
domain: string;
|
|
1211
|
+
status: string;
|
|
1212
|
+
source: string;
|
|
1213
|
+
/** @enum {string} */
|
|
1214
|
+
mode: "direct" | "edge";
|
|
1215
|
+
/** @enum {string|null} */
|
|
1216
|
+
connectionShape: "cname" | "apexRedirect" | null;
|
|
1217
|
+
/** @enum {string|null} */
|
|
1218
|
+
servedBy: "external" | null;
|
|
1219
|
+
dnsProvider: string | null;
|
|
1220
|
+
statusReason: string | null;
|
|
1221
|
+
verificationToken: string | null;
|
|
1222
|
+
verificationInstructions: components["schemas"]["DomainVerificationInstructions"];
|
|
1223
|
+
verifiedAt: string | null;
|
|
1224
|
+
isPrimary: boolean;
|
|
1225
|
+
createdAt: string | null;
|
|
1226
|
+
};
|
|
1227
|
+
DomainVerificationInstructions: {
|
|
1228
|
+
/** @enum {string} */
|
|
1229
|
+
method: "txt";
|
|
1230
|
+
name: string;
|
|
1231
|
+
expectedValue: string | null;
|
|
1232
|
+
};
|
|
1156
1233
|
DuplicateJobBody: Record<string, never>;
|
|
1157
1234
|
DynamicClientRegistrationRequest: {
|
|
1158
1235
|
/** @description Array of redirect URIs the client may use. Must be HTTPS, except for `http://localhost` URIs in development. At least one entry is required. */
|
|
@@ -1162,10 +1239,10 @@ interface components {
|
|
|
1162
1239
|
/** @description Space-separated list of scopes the client may request. When omitted, the client is registered for all scopes. */
|
|
1163
1240
|
scope?: string;
|
|
1164
1241
|
/**
|
|
1165
|
-
* @description OAuth token endpoint authentication method. Use `none` for public PKCE clients that cannot keep a client secret
|
|
1242
|
+
* @description OAuth token endpoint authentication method. Use `none` for public PKCE clients that cannot keep a client secret; use `client_secret_basic` or `client_secret_post` for confidential clients, which are issued a `client_secret`.
|
|
1166
1243
|
* @enum {string}
|
|
1167
1244
|
*/
|
|
1168
|
-
token_endpoint_auth_method?: "client_secret_basic" | "none";
|
|
1245
|
+
token_endpoint_auth_method?: "client_secret_basic" | "client_secret_post" | "none";
|
|
1169
1246
|
};
|
|
1170
1247
|
DynamicClientRegistrationResponse: {
|
|
1171
1248
|
/** @description Public OAuth client identifier. */
|
|
@@ -1368,6 +1445,10 @@ interface components {
|
|
|
1368
1445
|
* @enum {string}
|
|
1369
1446
|
*/
|
|
1370
1447
|
salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
|
|
1448
|
+
/** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
|
|
1449
|
+
skills?: string[];
|
|
1450
|
+
/** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
|
|
1451
|
+
categories?: string[];
|
|
1371
1452
|
/** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
|
|
1372
1453
|
educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
|
|
1373
1454
|
/** @description Minimum required experience, expressed in months. */
|
|
@@ -1573,6 +1654,10 @@ interface components {
|
|
|
1573
1654
|
* @enum {string}
|
|
1574
1655
|
*/
|
|
1575
1656
|
salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
|
|
1657
|
+
/** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
|
|
1658
|
+
skills?: string[];
|
|
1659
|
+
/** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
|
|
1660
|
+
categories?: string[];
|
|
1576
1661
|
/** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
|
|
1577
1662
|
educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
|
|
1578
1663
|
/** @description Minimum required experience, expressed in months. */
|
|
@@ -1923,6 +2008,10 @@ interface components {
|
|
|
1923
2008
|
createdAt: string;
|
|
1924
2009
|
/** @description Time at which the job was last updated. ISO 8601 datetime. */
|
|
1925
2010
|
updatedAt: string;
|
|
2011
|
+
/** @description Canonical skill slugs assigned to the job. */
|
|
2012
|
+
skills: string[];
|
|
2013
|
+
/** @description Canonical category slugs assigned to the job. */
|
|
2014
|
+
categories: string[];
|
|
1926
2015
|
/** @description External identifier supplied by the caller on create, used for deduplication via `GET /v1/jobs?externalId=...`. `null` when no external identifier was set. */
|
|
1927
2016
|
externalId: string | null;
|
|
1928
2017
|
/** @description Board-defined custom-field values for this job, keyed by the field `key` (the definitions are published at `GET /v1/settings/job-form`). Each value is returned as stored: a string (`short_text` / `long_text` / a `single_select` option key), a string array (`multi_select` option keys), a boolean, or a number. Always an object — `{}` when the job has no custom-field values, never `null` or a missing field. Only real values are stored, so this never contains `null` or empty values. */
|
|
@@ -2057,6 +2146,16 @@ interface components {
|
|
|
2057
2146
|
jobCount: number;
|
|
2058
2147
|
}[];
|
|
2059
2148
|
};
|
|
2149
|
+
Market: {
|
|
2150
|
+
id: string;
|
|
2151
|
+
/** @enum {string} */
|
|
2152
|
+
object: "market";
|
|
2153
|
+
name: string;
|
|
2154
|
+
slug: string;
|
|
2155
|
+
aliasSlugs: string[];
|
|
2156
|
+
sourceLocale: string | null;
|
|
2157
|
+
createdAt: string;
|
|
2158
|
+
};
|
|
2060
2159
|
MediaGet: components["schemas"]["MediaUpload"] & {
|
|
2061
2160
|
/** @description Time at which the file was uploaded. ISO 8601 datetime. */
|
|
2062
2161
|
uploadedAt: string;
|
|
@@ -2131,6 +2230,16 @@ interface components {
|
|
|
2131
2230
|
subscribed: boolean;
|
|
2132
2231
|
updatedAt: number | null;
|
|
2133
2232
|
};
|
|
2233
|
+
OffsetPagination: {
|
|
2234
|
+
/** @description Total number of results matching the query. */
|
|
2235
|
+
count?: number;
|
|
2236
|
+
/** @description The page size used for this response. */
|
|
2237
|
+
limit?: number;
|
|
2238
|
+
/** @description The number of results skipped before this page. */
|
|
2239
|
+
offset?: number;
|
|
2240
|
+
/** @description Jobs hidden behind the candidate paywall for the current viewer; absent or 0 for an entitled viewer. */
|
|
2241
|
+
gatedCount?: number;
|
|
2242
|
+
};
|
|
2134
2243
|
/** @description Error envelope, populated once the operation reaches `failed`. `null` otherwise. */
|
|
2135
2244
|
OperationErrorEnvelope: {
|
|
2136
2245
|
/** @description Machine-readable error code. */
|
|
@@ -2396,6 +2505,11 @@ interface components {
|
|
|
2396
2505
|
candidatePaywall: boolean;
|
|
2397
2506
|
impressum: boolean;
|
|
2398
2507
|
};
|
|
2508
|
+
/**
|
|
2509
|
+
* @description The tri-state behind `features.talentDirectory` (which is `visibility === 'public'`). Link /talent whenever this is not `'off'` — an employers-only directory renders a sign-in upsell for anonymous visitors, matching the hosted chrome.
|
|
2510
|
+
* @enum {string}
|
|
2511
|
+
*/
|
|
2512
|
+
talentDirectoryVisibility: "off" | "public" | "employers_only";
|
|
2399
2513
|
analytics: {
|
|
2400
2514
|
ga4MeasurementId: string | null;
|
|
2401
2515
|
gtmId: string | null;
|
|
@@ -2427,6 +2541,28 @@ interface components {
|
|
|
2427
2541
|
[key: string]: string;
|
|
2428
2542
|
};
|
|
2429
2543
|
};
|
|
2544
|
+
/** @description Footer/brand data the hosted board footer renders (description, contact, website + social links, navigation order). The brand/social URLs (`websiteUrl`, `facebookUrl`, `linkedinUrl`, `xUrl`) are sanitized to absolute http(s); `customLinks[].url` is served verbatim (see its own note). */
|
|
2545
|
+
footer: {
|
|
2546
|
+
/** @description Operator-written footer brand description. May carry a `{{board_name}}` placeholder — resolve it before rendering. When null, fall back to the label catalog's `footer.defaultDescription` template. */
|
|
2547
|
+
description: string | null;
|
|
2548
|
+
/** @description Public contact email for the footer About column (render as `mailto:`). */
|
|
2549
|
+
contactEmail: string | null;
|
|
2550
|
+
websiteUrl: string | null;
|
|
2551
|
+
/** @description X (Twitter) profile URL, normalized from the stored handle. */
|
|
2552
|
+
xUrl: string | null;
|
|
2553
|
+
facebookUrl: string | null;
|
|
2554
|
+
linkedinUrl: string | null;
|
|
2555
|
+
/** @description Operator-configured navigation order: system item ids (`home`, `companies`, `pricing`, `blog`) and `custom:<id>` refs into `customLinks`. Empty when the operator never reordered — render the system defaults. System items still gate on their feature flags (e.g. `blog` only when `features.blog`). */
|
|
2556
|
+
navigationOrder: string[];
|
|
2557
|
+
/** @description Operator-defined navigation links referenced from `navigationOrder` as `custom:<id>`; links not referenced there append after the system items (hosted-footer behavior). Each `url` is served verbatim (trimmed only) and may be a relative path (e.g. `/hub`) — unlike the brand/social URLs it is NOT run through http(s) sanitization (matching the hosted footer, which supports relative links), so a consumer MUST sanitize it before binding to an anchor href. */
|
|
2558
|
+
customLinks: {
|
|
2559
|
+
id: string;
|
|
2560
|
+
label: string;
|
|
2561
|
+
url: string;
|
|
2562
|
+
}[];
|
|
2563
|
+
};
|
|
2564
|
+
/** @description SHA-256 content hash of a MIGRATED board's canonical `tokens.css`, from the platform's synced theme snapshot (ADR-0065). `npx @cavuno/board doctor` compares it against the repo's tokens file and generated theme module to detect derivation drift. `null` for boards on the legacy runtime theme. */
|
|
2565
|
+
themeSnapshotHash: string | null;
|
|
2430
2566
|
};
|
|
2431
2567
|
PublicCompaniesSearchBody: {
|
|
2432
2568
|
/** @description Free-text search query matched against company name. Up to 200 characters. */
|
|
@@ -2589,7 +2725,8 @@ interface components {
|
|
|
2589
2725
|
preferences: {
|
|
2590
2726
|
id: string;
|
|
2591
2727
|
label: string | null;
|
|
2592
|
-
|
|
2728
|
+
/** @enum {string} */
|
|
2729
|
+
frequency: "weekly";
|
|
2593
2730
|
isActive: boolean;
|
|
2594
2731
|
filters: {
|
|
2595
2732
|
jobFunctions?: string[];
|
|
@@ -2737,7 +2874,7 @@ interface components {
|
|
|
2737
2874
|
*/
|
|
2738
2875
|
limit?: number;
|
|
2739
2876
|
/**
|
|
2740
|
-
* @description The number of jobs to skip — the
|
|
2877
|
+
* @description The number of jobs to skip — the job catalog page offset. Takes precedence over `cursor`. `offset + limit` may not exceed 10,000.
|
|
2741
2878
|
* @example 0
|
|
2742
2879
|
*/
|
|
2743
2880
|
offset?: number;
|
|
@@ -2963,6 +3100,10 @@ interface components {
|
|
|
2963
3100
|
employmentType?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
|
|
2964
3101
|
/** @description Only return jobs at any of the given seniority levels. Up to 10 values. */
|
|
2965
3102
|
seniority?: ("entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive")[];
|
|
3103
|
+
/** @description Only return jobs tagged with any of these canonical skill slugs. Up to 10 values. */
|
|
3104
|
+
skills?: string[];
|
|
3105
|
+
/** @description Only return jobs tagged with any of these canonical category slugs. Up to 10 values. */
|
|
3106
|
+
categories?: string[];
|
|
2966
3107
|
/** @description Range filter on the job's `publishedAt` timestamp. */
|
|
2967
3108
|
publishedAt?: {
|
|
2968
3109
|
/**
|
|
@@ -3043,6 +3184,16 @@ interface components {
|
|
|
3043
3184
|
/** @description Stripe billing-portal configuration ID used for self-serve plan management. Pass `null` to clear. */
|
|
3044
3185
|
jobAccessStripePortalConfigId?: string | unknown | unknown;
|
|
3045
3186
|
};
|
|
3187
|
+
Skill: {
|
|
3188
|
+
id: string;
|
|
3189
|
+
/** @enum {string} */
|
|
3190
|
+
object: "skill";
|
|
3191
|
+
name: string;
|
|
3192
|
+
slug: string;
|
|
3193
|
+
aliasSlugs: string[];
|
|
3194
|
+
sourceLocale: string | null;
|
|
3195
|
+
createdAt: string;
|
|
3196
|
+
};
|
|
3046
3197
|
SkillLocationSalary: {
|
|
3047
3198
|
/** @enum {string} */
|
|
3048
3199
|
object: "skill_location_salary";
|
|
@@ -3540,6 +3691,12 @@ interface components {
|
|
|
3540
3691
|
jobSearchStatusVisibleTo?: "everyone" | "employers_only";
|
|
3541
3692
|
openToRelocate?: boolean;
|
|
3542
3693
|
};
|
|
3694
|
+
UpdateCategoryBody: {
|
|
3695
|
+
name?: string;
|
|
3696
|
+
slug?: string;
|
|
3697
|
+
parentId?: string | unknown | unknown;
|
|
3698
|
+
sourceLocale?: string;
|
|
3699
|
+
};
|
|
3543
3700
|
UpdateCompanyBody: {
|
|
3544
3701
|
/** @description Public company website URL. Normalized to a canonical apex domain when stored. */
|
|
3545
3702
|
website?: string;
|
|
@@ -3645,6 +3802,10 @@ interface components {
|
|
|
3645
3802
|
* @enum {string}
|
|
3646
3803
|
*/
|
|
3647
3804
|
salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
|
|
3805
|
+
/** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
|
|
3806
|
+
skills?: string[];
|
|
3807
|
+
/** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
|
|
3808
|
+
categories?: string[];
|
|
3648
3809
|
/** @description Whether the job appears in featured slots on the public board. */
|
|
3649
3810
|
isFeatured?: boolean;
|
|
3650
3811
|
/** @description Job expiry as a Unix epoch in milliseconds. On create, omitted or `null` defaults to 30 days from creation. On PATCH, pass `null` to clear an existing expiry. Past timestamps remove the job from the public board. */
|
|
@@ -3681,6 +3842,11 @@ interface components {
|
|
|
3681
3842
|
proficiency: string;
|
|
3682
3843
|
}[];
|
|
3683
3844
|
};
|
|
3845
|
+
UpdateMarketBody: {
|
|
3846
|
+
name?: string;
|
|
3847
|
+
slug?: string;
|
|
3848
|
+
sourceLocale?: string;
|
|
3849
|
+
};
|
|
3684
3850
|
UpdateNotificationPreferenceBody: {
|
|
3685
3851
|
/** @enum {string} */
|
|
3686
3852
|
channel: "messageEmails" | "applicationEmails";
|
|
@@ -3690,6 +3856,11 @@ interface components {
|
|
|
3690
3856
|
label?: string;
|
|
3691
3857
|
hidden?: boolean;
|
|
3692
3858
|
};
|
|
3859
|
+
UpdateSkillBody: {
|
|
3860
|
+
name?: string;
|
|
3861
|
+
slug?: string;
|
|
3862
|
+
sourceLocale?: string;
|
|
3863
|
+
};
|
|
3693
3864
|
UpdateSkillsBody: {
|
|
3694
3865
|
skills: string[];
|
|
3695
3866
|
};
|
|
@@ -3746,35 +3917,29 @@ type Schemas = components['schemas'];
|
|
|
3746
3917
|
* fields.
|
|
3747
3918
|
*/
|
|
3748
3919
|
/**
|
|
3749
|
-
*
|
|
3750
|
-
*
|
|
3751
|
-
* every other list/search. `nextCursor` is preserved alongside (offset-encoded).
|
|
3920
|
+
* Optional offset-pagination metadata generated from the Board API contract.
|
|
3921
|
+
* `nextCursor` is preserved alongside for forward cursor iteration.
|
|
3752
3922
|
*/
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
offset?: number;
|
|
3760
|
-
/** Items hidden behind the candidate paywall for the current viewer; absent/0 when entitled. */
|
|
3761
|
-
gatedCount?: number;
|
|
3762
|
-
}
|
|
3763
|
-
interface ListEnvelope<T> extends StorefrontPagination {
|
|
3923
|
+
type OffsetPagination = Schemas['OffsetPagination'];
|
|
3924
|
+
/** @deprecated Use `OffsetPagination`. */
|
|
3925
|
+
type StorefrontPagination = OffsetPagination;
|
|
3926
|
+
/** @deprecated Use `OffsetPagination`. */
|
|
3927
|
+
type JobCatalogPagination = OffsetPagination;
|
|
3928
|
+
type ListEnvelope<T> = OffsetPagination & {
|
|
3764
3929
|
object: 'list';
|
|
3765
3930
|
url: string;
|
|
3766
3931
|
hasMore: boolean;
|
|
3767
3932
|
/** `null` when `hasMore` is false — always present, never undefined. */
|
|
3768
3933
|
nextCursor: string | null;
|
|
3769
3934
|
data: T[];
|
|
3770
|
-
}
|
|
3771
|
-
|
|
3935
|
+
};
|
|
3936
|
+
type SearchEnvelope<T> = OffsetPagination & {
|
|
3772
3937
|
object: 'search_result';
|
|
3773
3938
|
url: string;
|
|
3774
3939
|
hasMore: boolean;
|
|
3775
3940
|
nextCursor: string | null;
|
|
3776
3941
|
data: T[];
|
|
3777
|
-
}
|
|
3942
|
+
};
|
|
3778
3943
|
|
|
3779
3944
|
type PublicJob = Schemas['PublicJob'];
|
|
3780
3945
|
type PublicJobCard = Schemas['PublicJobCard'];
|
|
@@ -3805,17 +3970,17 @@ interface RelatedSearch {
|
|
|
3805
3970
|
term: string;
|
|
3806
3971
|
count: number;
|
|
3807
3972
|
}
|
|
3808
|
-
/** The browse list envelope — `PublicJobCard`s +
|
|
3809
|
-
|
|
3973
|
+
/** The browse list envelope — `PublicJobCard`s + job catalog pagination + `relatedSearches`. */
|
|
3974
|
+
type JobCardListEnvelope = ListEnvelope<PublicJobCard> & {
|
|
3810
3975
|
relatedSearches?: RelatedSearch[];
|
|
3811
|
-
}
|
|
3812
|
-
/** The search envelope — `PublicJobCard`s +
|
|
3976
|
+
};
|
|
3977
|
+
/** The search envelope — `PublicJobCard`s + job catalog pagination. */
|
|
3813
3978
|
type JobCardSearchEnvelope = SearchEnvelope<PublicJobCard>;
|
|
3814
3979
|
type JobsListQuery = {
|
|
3815
3980
|
cursor?: string;
|
|
3816
3981
|
/** 1–100. */
|
|
3817
3982
|
limit?: number;
|
|
3818
|
-
/**
|
|
3983
|
+
/** Job catalog page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
|
|
3819
3984
|
offset?: number;
|
|
3820
3985
|
/** Repeated param (up to 10) — OR-matched. Repeat `companyId` per value. */
|
|
3821
3986
|
companyId?: string[];
|
|
@@ -3841,4 +4006,4 @@ type JobsSimilarQuery = {
|
|
|
3841
4006
|
};
|
|
3842
4007
|
type JobsSearchBody = Schemas['PublicSearchJobsBody'];
|
|
3843
4008
|
|
|
3844
|
-
export type { CustomFieldValues as C, EmploymentType as E, JobSort as J, ListEnvelope as L, OfficeLocation as O, PublicJob as P, RemoteOption as R, Seniority as S, PublicJobCard as a, Schemas as b, components as c, JobsListQuery as d, JobCardListEnvelope as e, JobsSearchBody as f, JobCardSearchEnvelope as g, JobsSimilarQuery as h, SearchEnvelope as i, CustomFieldValue as j, EducationRequirement as k,
|
|
4009
|
+
export type { CustomFieldValues as C, EmploymentType as E, JobSort as J, ListEnvelope as L, OfficeLocation as O, PublicJob as P, RemoteOption as R, Seniority as S, PublicJobCard as a, Schemas as b, components as c, JobsListQuery as d, JobCardListEnvelope as e, JobsSearchBody as f, JobCardSearchEnvelope as g, JobsSimilarQuery as h, SearchEnvelope as i, CustomFieldValue as j, EducationRequirement as k, JobCatalogPagination as l, JobCompany as m, OffsetPagination as n, RelatedSearch as o, RemotePermit as p, RemoteTimezone as q, StorefrontPagination as r };
|
package/dist/paths.d.mts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical board URL paths — the single source of truth for a board's
|
|
3
|
+
* public URL structure. The sitemap generator (`src/sitemap/walker.ts`)
|
|
4
|
+
* and every consumer (starter navigation, platform emails) build URLs
|
|
5
|
+
* from these helpers, so the structure can never drift across surfaces.
|
|
6
|
+
*
|
|
7
|
+
* Each `*Path` returns an absolute path (leading slash, no origin);
|
|
8
|
+
* `boardUrl(origin, path)` prefixes a board origin. Pure, isomorphic,
|
|
9
|
+
* zero-dependency — safe to import in the Convex runtime, on the edge,
|
|
10
|
+
* and in the browser.
|
|
11
|
+
*
|
|
12
|
+
* These paths mirror the hosted board's indexed URLs exactly (migration
|
|
13
|
+
* parity). Do NOT change a pattern here without updating the hosted board
|
|
14
|
+
* and the sitemap golden tests in lockstep — the structure is a locked
|
|
15
|
+
* cross-surface contract (ADR-0070).
|
|
16
|
+
*/
|
|
17
|
+
/** Job detail — the canonical, indexed job URL. Requires BOTH slugs. */
|
|
18
|
+
declare function jobDetailPath(companySlug: string, jobSlug: string): string;
|
|
19
|
+
/** Category (keyword) job listing. */
|
|
20
|
+
declare function jobsCategoryPath(categorySlug: string): string;
|
|
21
|
+
/** Skill job listing. */
|
|
22
|
+
declare function jobsSkillPath(skillSlug: string): string;
|
|
23
|
+
/** Location job listing. */
|
|
24
|
+
declare function jobsLocationPath(placeSlug: string): string;
|
|
25
|
+
/** Company profile. */
|
|
26
|
+
declare function companyPath(companySlug: string): string;
|
|
27
|
+
/** Company market (sector) listing. */
|
|
28
|
+
declare function companyMarketPath(marketSlug: string): string;
|
|
29
|
+
/** A company's salary overview. */
|
|
30
|
+
declare function companySalaryPath(companySlug: string): string;
|
|
31
|
+
/** Salary page for a job title. */
|
|
32
|
+
declare function salaryTitlePath(titleSlug: string): string;
|
|
33
|
+
/** Salary page for a skill. */
|
|
34
|
+
declare function salarySkillPath(skillSlug: string): string;
|
|
35
|
+
/** Salary page for a location. */
|
|
36
|
+
declare function salaryLocationPath(placeSlug: string): string;
|
|
37
|
+
/** Blog post. */
|
|
38
|
+
declare function blogPostPath(postSlug: string): string;
|
|
39
|
+
/** Blog tag archive. */
|
|
40
|
+
declare function blogTagPath(tagSlug: string): string;
|
|
41
|
+
/** Blog author archive. */
|
|
42
|
+
declare function blogAuthorPath(authorSlug: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Static top-level board paths (indexed marketing + index surfaces). Kept
|
|
45
|
+
* here so the sitemap and consumers share one definition of the chrome
|
|
46
|
+
* routes too.
|
|
47
|
+
*/
|
|
48
|
+
declare const BOARD_PATHS: {
|
|
49
|
+
readonly home: "/";
|
|
50
|
+
readonly jobs: "/jobs";
|
|
51
|
+
readonly companies: "/companies";
|
|
52
|
+
readonly salaries: "/salaries";
|
|
53
|
+
readonly salaryCompanies: "/salaries/companies";
|
|
54
|
+
readonly salaryTitles: "/salaries/titles";
|
|
55
|
+
readonly salarySkills: "/salaries/skills";
|
|
56
|
+
readonly salaryLocations: "/salaries/locations";
|
|
57
|
+
readonly blog: "/blog";
|
|
58
|
+
readonly about: "/about";
|
|
59
|
+
readonly privacyPolicy: "/privacy-policy";
|
|
60
|
+
readonly termsOfService: "/terms-of-service";
|
|
61
|
+
readonly cookiePolicy: "/cookie-policy";
|
|
62
|
+
readonly impressum: "/impressum";
|
|
63
|
+
readonly talent: "/talent";
|
|
64
|
+
readonly employers: "/employers";
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Prefix a board-relative path with the board origin. A trailing slash on
|
|
68
|
+
* the origin is tolerated (stripped) so callers need not normalise first.
|
|
69
|
+
*/
|
|
70
|
+
declare function boardUrl(origin: string, path: string): string;
|
|
71
|
+
|
|
72
|
+
export { BOARD_PATHS, blogAuthorPath, blogPostPath, blogTagPath, boardUrl, companyMarketPath, companyPath, companySalaryPath, jobDetailPath, jobsCategoryPath, jobsLocationPath, jobsSkillPath, salaryLocationPath, salarySkillPath, salaryTitlePath };
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical board URL paths — the single source of truth for a board's
|
|
3
|
+
* public URL structure. The sitemap generator (`src/sitemap/walker.ts`)
|
|
4
|
+
* and every consumer (starter navigation, platform emails) build URLs
|
|
5
|
+
* from these helpers, so the structure can never drift across surfaces.
|
|
6
|
+
*
|
|
7
|
+
* Each `*Path` returns an absolute path (leading slash, no origin);
|
|
8
|
+
* `boardUrl(origin, path)` prefixes a board origin. Pure, isomorphic,
|
|
9
|
+
* zero-dependency — safe to import in the Convex runtime, on the edge,
|
|
10
|
+
* and in the browser.
|
|
11
|
+
*
|
|
12
|
+
* These paths mirror the hosted board's indexed URLs exactly (migration
|
|
13
|
+
* parity). Do NOT change a pattern here without updating the hosted board
|
|
14
|
+
* and the sitemap golden tests in lockstep — the structure is a locked
|
|
15
|
+
* cross-surface contract (ADR-0070).
|
|
16
|
+
*/
|
|
17
|
+
/** Job detail — the canonical, indexed job URL. Requires BOTH slugs. */
|
|
18
|
+
declare function jobDetailPath(companySlug: string, jobSlug: string): string;
|
|
19
|
+
/** Category (keyword) job listing. */
|
|
20
|
+
declare function jobsCategoryPath(categorySlug: string): string;
|
|
21
|
+
/** Skill job listing. */
|
|
22
|
+
declare function jobsSkillPath(skillSlug: string): string;
|
|
23
|
+
/** Location job listing. */
|
|
24
|
+
declare function jobsLocationPath(placeSlug: string): string;
|
|
25
|
+
/** Company profile. */
|
|
26
|
+
declare function companyPath(companySlug: string): string;
|
|
27
|
+
/** Company market (sector) listing. */
|
|
28
|
+
declare function companyMarketPath(marketSlug: string): string;
|
|
29
|
+
/** A company's salary overview. */
|
|
30
|
+
declare function companySalaryPath(companySlug: string): string;
|
|
31
|
+
/** Salary page for a job title. */
|
|
32
|
+
declare function salaryTitlePath(titleSlug: string): string;
|
|
33
|
+
/** Salary page for a skill. */
|
|
34
|
+
declare function salarySkillPath(skillSlug: string): string;
|
|
35
|
+
/** Salary page for a location. */
|
|
36
|
+
declare function salaryLocationPath(placeSlug: string): string;
|
|
37
|
+
/** Blog post. */
|
|
38
|
+
declare function blogPostPath(postSlug: string): string;
|
|
39
|
+
/** Blog tag archive. */
|
|
40
|
+
declare function blogTagPath(tagSlug: string): string;
|
|
41
|
+
/** Blog author archive. */
|
|
42
|
+
declare function blogAuthorPath(authorSlug: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Static top-level board paths (indexed marketing + index surfaces). Kept
|
|
45
|
+
* here so the sitemap and consumers share one definition of the chrome
|
|
46
|
+
* routes too.
|
|
47
|
+
*/
|
|
48
|
+
declare const BOARD_PATHS: {
|
|
49
|
+
readonly home: "/";
|
|
50
|
+
readonly jobs: "/jobs";
|
|
51
|
+
readonly companies: "/companies";
|
|
52
|
+
readonly salaries: "/salaries";
|
|
53
|
+
readonly salaryCompanies: "/salaries/companies";
|
|
54
|
+
readonly salaryTitles: "/salaries/titles";
|
|
55
|
+
readonly salarySkills: "/salaries/skills";
|
|
56
|
+
readonly salaryLocations: "/salaries/locations";
|
|
57
|
+
readonly blog: "/blog";
|
|
58
|
+
readonly about: "/about";
|
|
59
|
+
readonly privacyPolicy: "/privacy-policy";
|
|
60
|
+
readonly termsOfService: "/terms-of-service";
|
|
61
|
+
readonly cookiePolicy: "/cookie-policy";
|
|
62
|
+
readonly impressum: "/impressum";
|
|
63
|
+
readonly talent: "/talent";
|
|
64
|
+
readonly employers: "/employers";
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Prefix a board-relative path with the board origin. A trailing slash on
|
|
68
|
+
* the origin is tolerated (stripped) so callers need not normalise first.
|
|
69
|
+
*/
|
|
70
|
+
declare function boardUrl(origin: string, path: string): string;
|
|
71
|
+
|
|
72
|
+
export { BOARD_PATHS, blogAuthorPath, blogPostPath, blogTagPath, boardUrl, companyMarketPath, companyPath, companySalaryPath, jobDetailPath, jobsCategoryPath, jobsLocationPath, jobsSkillPath, salaryLocationPath, salarySkillPath, salaryTitlePath };
|