@cavuno/board 1.34.0 → 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 +25 -10
- package/dist/{board-DgDC0T4g.d.mts → board-Be8dY9Ba.d.mts} +1 -1
- package/dist/{board-Id19Yg8-.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 +16 -16
- package/dist/index.d.ts +16 -16
- package/dist/index.js +6 -3
- package/dist/index.mjs +6 -3
- package/dist/{jobs-IIJtDgzX.d.mts → jobs-BFLMDNEN.d.mts} +56 -27
- package/dist/{jobs-IIJtDgzX.d.ts → jobs-BFLMDNEN.d.ts} +56 -27
- package/dist/{salaries-CL_00fNX.d.ts → salaries-negE75t8.d.ts} +4 -4
- package/dist/{salaries-BfEEEOHj.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/package.json +1 -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
|
@@ -84,7 +84,7 @@ interface components {
|
|
|
84
84
|
object: "alert";
|
|
85
85
|
label: string | null;
|
|
86
86
|
/** @enum {string} */
|
|
87
|
-
frequency: "
|
|
87
|
+
frequency: "weekly";
|
|
88
88
|
isActive: boolean;
|
|
89
89
|
filters: {
|
|
90
90
|
jobFunctions: string[];
|
|
@@ -104,7 +104,7 @@ interface components {
|
|
|
104
104
|
AlertBody: {
|
|
105
105
|
label?: string;
|
|
106
106
|
/** @enum {string} */
|
|
107
|
-
frequency: "
|
|
107
|
+
frequency: "weekly";
|
|
108
108
|
jobFunctions?: string[];
|
|
109
109
|
seniorityLevels?: string[];
|
|
110
110
|
remoteOptions?: string[];
|
|
@@ -1019,6 +1019,10 @@ interface components {
|
|
|
1019
1019
|
* @enum {string}
|
|
1020
1020
|
*/
|
|
1021
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[];
|
|
1022
1026
|
/** @description Whether the job appears in featured slots on the public board. */
|
|
1023
1027
|
isFeatured?: boolean;
|
|
1024
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. */
|
|
@@ -1441,6 +1445,10 @@ interface components {
|
|
|
1441
1445
|
* @enum {string}
|
|
1442
1446
|
*/
|
|
1443
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[];
|
|
1444
1452
|
/** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
|
|
1445
1453
|
educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
|
|
1446
1454
|
/** @description Minimum required experience, expressed in months. */
|
|
@@ -1646,6 +1654,10 @@ interface components {
|
|
|
1646
1654
|
* @enum {string}
|
|
1647
1655
|
*/
|
|
1648
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[];
|
|
1649
1661
|
/** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
|
|
1650
1662
|
educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
|
|
1651
1663
|
/** @description Minimum required experience, expressed in months. */
|
|
@@ -1996,6 +2008,10 @@ interface components {
|
|
|
1996
2008
|
createdAt: string;
|
|
1997
2009
|
/** @description Time at which the job was last updated. ISO 8601 datetime. */
|
|
1998
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[];
|
|
1999
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. */
|
|
2000
2016
|
externalId: string | null;
|
|
2001
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. */
|
|
@@ -2214,6 +2230,16 @@ interface components {
|
|
|
2214
2230
|
subscribed: boolean;
|
|
2215
2231
|
updatedAt: number | null;
|
|
2216
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
|
+
};
|
|
2217
2243
|
/** @description Error envelope, populated once the operation reaches `failed`. `null` otherwise. */
|
|
2218
2244
|
OperationErrorEnvelope: {
|
|
2219
2245
|
/** @description Machine-readable error code. */
|
|
@@ -2699,7 +2725,8 @@ interface components {
|
|
|
2699
2725
|
preferences: {
|
|
2700
2726
|
id: string;
|
|
2701
2727
|
label: string | null;
|
|
2702
|
-
|
|
2728
|
+
/** @enum {string} */
|
|
2729
|
+
frequency: "weekly";
|
|
2703
2730
|
isActive: boolean;
|
|
2704
2731
|
filters: {
|
|
2705
2732
|
jobFunctions?: string[];
|
|
@@ -2847,7 +2874,7 @@ interface components {
|
|
|
2847
2874
|
*/
|
|
2848
2875
|
limit?: number;
|
|
2849
2876
|
/**
|
|
2850
|
-
* @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.
|
|
2851
2878
|
* @example 0
|
|
2852
2879
|
*/
|
|
2853
2880
|
offset?: number;
|
|
@@ -3073,6 +3100,10 @@ interface components {
|
|
|
3073
3100
|
employmentType?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
|
|
3074
3101
|
/** @description Only return jobs at any of the given seniority levels. Up to 10 values. */
|
|
3075
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[];
|
|
3076
3107
|
/** @description Range filter on the job's `publishedAt` timestamp. */
|
|
3077
3108
|
publishedAt?: {
|
|
3078
3109
|
/**
|
|
@@ -3771,6 +3802,10 @@ interface components {
|
|
|
3771
3802
|
* @enum {string}
|
|
3772
3803
|
*/
|
|
3773
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[];
|
|
3774
3809
|
/** @description Whether the job appears in featured slots on the public board. */
|
|
3775
3810
|
isFeatured?: boolean;
|
|
3776
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. */
|
|
@@ -3882,35 +3917,29 @@ type Schemas = components['schemas'];
|
|
|
3882
3917
|
* fields.
|
|
3883
3918
|
*/
|
|
3884
3919
|
/**
|
|
3885
|
-
*
|
|
3886
|
-
*
|
|
3887
|
-
* 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.
|
|
3888
3922
|
*/
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
offset?: number;
|
|
3896
|
-
/** Items hidden behind the candidate paywall for the current viewer; absent/0 when entitled. */
|
|
3897
|
-
gatedCount?: number;
|
|
3898
|
-
}
|
|
3899
|
-
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 & {
|
|
3900
3929
|
object: 'list';
|
|
3901
3930
|
url: string;
|
|
3902
3931
|
hasMore: boolean;
|
|
3903
3932
|
/** `null` when `hasMore` is false — always present, never undefined. */
|
|
3904
3933
|
nextCursor: string | null;
|
|
3905
3934
|
data: T[];
|
|
3906
|
-
}
|
|
3907
|
-
|
|
3935
|
+
};
|
|
3936
|
+
type SearchEnvelope<T> = OffsetPagination & {
|
|
3908
3937
|
object: 'search_result';
|
|
3909
3938
|
url: string;
|
|
3910
3939
|
hasMore: boolean;
|
|
3911
3940
|
nextCursor: string | null;
|
|
3912
3941
|
data: T[];
|
|
3913
|
-
}
|
|
3942
|
+
};
|
|
3914
3943
|
|
|
3915
3944
|
type PublicJob = Schemas['PublicJob'];
|
|
3916
3945
|
type PublicJobCard = Schemas['PublicJobCard'];
|
|
@@ -3941,17 +3970,17 @@ interface RelatedSearch {
|
|
|
3941
3970
|
term: string;
|
|
3942
3971
|
count: number;
|
|
3943
3972
|
}
|
|
3944
|
-
/** The browse list envelope — `PublicJobCard`s +
|
|
3945
|
-
|
|
3973
|
+
/** The browse list envelope — `PublicJobCard`s + job catalog pagination + `relatedSearches`. */
|
|
3974
|
+
type JobCardListEnvelope = ListEnvelope<PublicJobCard> & {
|
|
3946
3975
|
relatedSearches?: RelatedSearch[];
|
|
3947
|
-
}
|
|
3948
|
-
/** The search envelope — `PublicJobCard`s +
|
|
3976
|
+
};
|
|
3977
|
+
/** The search envelope — `PublicJobCard`s + job catalog pagination. */
|
|
3949
3978
|
type JobCardSearchEnvelope = SearchEnvelope<PublicJobCard>;
|
|
3950
3979
|
type JobsListQuery = {
|
|
3951
3980
|
cursor?: string;
|
|
3952
3981
|
/** 1–100. */
|
|
3953
3982
|
limit?: number;
|
|
3954
|
-
/**
|
|
3983
|
+
/** Job catalog page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
|
|
3955
3984
|
offset?: number;
|
|
3956
3985
|
/** Repeated param (up to 10) — OR-matched. Repeat `companyId` per value. */
|
|
3957
3986
|
companyId?: string[];
|
|
@@ -3977,4 +4006,4 @@ type JobsSimilarQuery = {
|
|
|
3977
4006
|
};
|
|
3978
4007
|
type JobsSearchBody = Schemas['PublicSearchJobsBody'];
|
|
3979
4008
|
|
|
3980
|
-
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 };
|
|
@@ -84,7 +84,7 @@ interface components {
|
|
|
84
84
|
object: "alert";
|
|
85
85
|
label: string | null;
|
|
86
86
|
/** @enum {string} */
|
|
87
|
-
frequency: "
|
|
87
|
+
frequency: "weekly";
|
|
88
88
|
isActive: boolean;
|
|
89
89
|
filters: {
|
|
90
90
|
jobFunctions: string[];
|
|
@@ -104,7 +104,7 @@ interface components {
|
|
|
104
104
|
AlertBody: {
|
|
105
105
|
label?: string;
|
|
106
106
|
/** @enum {string} */
|
|
107
|
-
frequency: "
|
|
107
|
+
frequency: "weekly";
|
|
108
108
|
jobFunctions?: string[];
|
|
109
109
|
seniorityLevels?: string[];
|
|
110
110
|
remoteOptions?: string[];
|
|
@@ -1019,6 +1019,10 @@ interface components {
|
|
|
1019
1019
|
* @enum {string}
|
|
1020
1020
|
*/
|
|
1021
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[];
|
|
1022
1026
|
/** @description Whether the job appears in featured slots on the public board. */
|
|
1023
1027
|
isFeatured?: boolean;
|
|
1024
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. */
|
|
@@ -1441,6 +1445,10 @@ interface components {
|
|
|
1441
1445
|
* @enum {string}
|
|
1442
1446
|
*/
|
|
1443
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[];
|
|
1444
1452
|
/** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
|
|
1445
1453
|
educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
|
|
1446
1454
|
/** @description Minimum required experience, expressed in months. */
|
|
@@ -1646,6 +1654,10 @@ interface components {
|
|
|
1646
1654
|
* @enum {string}
|
|
1647
1655
|
*/
|
|
1648
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[];
|
|
1649
1661
|
/** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
|
|
1650
1662
|
educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
|
|
1651
1663
|
/** @description Minimum required experience, expressed in months. */
|
|
@@ -1996,6 +2008,10 @@ interface components {
|
|
|
1996
2008
|
createdAt: string;
|
|
1997
2009
|
/** @description Time at which the job was last updated. ISO 8601 datetime. */
|
|
1998
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[];
|
|
1999
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. */
|
|
2000
2016
|
externalId: string | null;
|
|
2001
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. */
|
|
@@ -2214,6 +2230,16 @@ interface components {
|
|
|
2214
2230
|
subscribed: boolean;
|
|
2215
2231
|
updatedAt: number | null;
|
|
2216
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
|
+
};
|
|
2217
2243
|
/** @description Error envelope, populated once the operation reaches `failed`. `null` otherwise. */
|
|
2218
2244
|
OperationErrorEnvelope: {
|
|
2219
2245
|
/** @description Machine-readable error code. */
|
|
@@ -2699,7 +2725,8 @@ interface components {
|
|
|
2699
2725
|
preferences: {
|
|
2700
2726
|
id: string;
|
|
2701
2727
|
label: string | null;
|
|
2702
|
-
|
|
2728
|
+
/** @enum {string} */
|
|
2729
|
+
frequency: "weekly";
|
|
2703
2730
|
isActive: boolean;
|
|
2704
2731
|
filters: {
|
|
2705
2732
|
jobFunctions?: string[];
|
|
@@ -2847,7 +2874,7 @@ interface components {
|
|
|
2847
2874
|
*/
|
|
2848
2875
|
limit?: number;
|
|
2849
2876
|
/**
|
|
2850
|
-
* @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.
|
|
2851
2878
|
* @example 0
|
|
2852
2879
|
*/
|
|
2853
2880
|
offset?: number;
|
|
@@ -3073,6 +3100,10 @@ interface components {
|
|
|
3073
3100
|
employmentType?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
|
|
3074
3101
|
/** @description Only return jobs at any of the given seniority levels. Up to 10 values. */
|
|
3075
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[];
|
|
3076
3107
|
/** @description Range filter on the job's `publishedAt` timestamp. */
|
|
3077
3108
|
publishedAt?: {
|
|
3078
3109
|
/**
|
|
@@ -3771,6 +3802,10 @@ interface components {
|
|
|
3771
3802
|
* @enum {string}
|
|
3772
3803
|
*/
|
|
3773
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[];
|
|
3774
3809
|
/** @description Whether the job appears in featured slots on the public board. */
|
|
3775
3810
|
isFeatured?: boolean;
|
|
3776
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. */
|
|
@@ -3882,35 +3917,29 @@ type Schemas = components['schemas'];
|
|
|
3882
3917
|
* fields.
|
|
3883
3918
|
*/
|
|
3884
3919
|
/**
|
|
3885
|
-
*
|
|
3886
|
-
*
|
|
3887
|
-
* 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.
|
|
3888
3922
|
*/
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3892
|
-
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
offset?: number;
|
|
3896
|
-
/** Items hidden behind the candidate paywall for the current viewer; absent/0 when entitled. */
|
|
3897
|
-
gatedCount?: number;
|
|
3898
|
-
}
|
|
3899
|
-
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 & {
|
|
3900
3929
|
object: 'list';
|
|
3901
3930
|
url: string;
|
|
3902
3931
|
hasMore: boolean;
|
|
3903
3932
|
/** `null` when `hasMore` is false — always present, never undefined. */
|
|
3904
3933
|
nextCursor: string | null;
|
|
3905
3934
|
data: T[];
|
|
3906
|
-
}
|
|
3907
|
-
|
|
3935
|
+
};
|
|
3936
|
+
type SearchEnvelope<T> = OffsetPagination & {
|
|
3908
3937
|
object: 'search_result';
|
|
3909
3938
|
url: string;
|
|
3910
3939
|
hasMore: boolean;
|
|
3911
3940
|
nextCursor: string | null;
|
|
3912
3941
|
data: T[];
|
|
3913
|
-
}
|
|
3942
|
+
};
|
|
3914
3943
|
|
|
3915
3944
|
type PublicJob = Schemas['PublicJob'];
|
|
3916
3945
|
type PublicJobCard = Schemas['PublicJobCard'];
|
|
@@ -3941,17 +3970,17 @@ interface RelatedSearch {
|
|
|
3941
3970
|
term: string;
|
|
3942
3971
|
count: number;
|
|
3943
3972
|
}
|
|
3944
|
-
/** The browse list envelope — `PublicJobCard`s +
|
|
3945
|
-
|
|
3973
|
+
/** The browse list envelope — `PublicJobCard`s + job catalog pagination + `relatedSearches`. */
|
|
3974
|
+
type JobCardListEnvelope = ListEnvelope<PublicJobCard> & {
|
|
3946
3975
|
relatedSearches?: RelatedSearch[];
|
|
3947
|
-
}
|
|
3948
|
-
/** The search envelope — `PublicJobCard`s +
|
|
3976
|
+
};
|
|
3977
|
+
/** The search envelope — `PublicJobCard`s + job catalog pagination. */
|
|
3949
3978
|
type JobCardSearchEnvelope = SearchEnvelope<PublicJobCard>;
|
|
3950
3979
|
type JobsListQuery = {
|
|
3951
3980
|
cursor?: string;
|
|
3952
3981
|
/** 1–100. */
|
|
3953
3982
|
limit?: number;
|
|
3954
|
-
/**
|
|
3983
|
+
/** Job catalog page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
|
|
3955
3984
|
offset?: number;
|
|
3956
3985
|
/** Repeated param (up to 10) — OR-matched. Repeat `companyId` per value. */
|
|
3957
3986
|
companyId?: string[];
|
|
@@ -3977,4 +4006,4 @@ type JobsSimilarQuery = {
|
|
|
3977
4006
|
};
|
|
3978
4007
|
type JobsSearchBody = Schemas['PublicSearchJobsBody'];
|
|
3979
4008
|
|
|
3980
|
-
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 };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { b as Schemas, L as ListEnvelope,
|
|
1
|
+
import { b as Schemas, L as ListEnvelope, o as RelatedSearch } from './jobs-BFLMDNEN.js';
|
|
2
2
|
|
|
3
3
|
/** Author shape embedded on posts (no `object` discriminator). */
|
|
4
4
|
type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
|
|
@@ -44,9 +44,9 @@ type CompanySalary = Schemas['CompanySalary'];
|
|
|
44
44
|
*/
|
|
45
45
|
type CompanyCategorySalary = Schemas['CompanyCategorySalary'];
|
|
46
46
|
/** The companies browse list — `PublicCompany`s + `market` `relatedSearches`. */
|
|
47
|
-
|
|
47
|
+
type CompanyListEnvelope = ListEnvelope<PublicCompany> & {
|
|
48
48
|
relatedSearches?: RelatedSearch[];
|
|
49
|
-
}
|
|
49
|
+
};
|
|
50
50
|
type CompaniesListQuery = {
|
|
51
51
|
cursor?: string;
|
|
52
52
|
/** Scope to a single market (sector) by slug. Unknown slugs 404. */
|
|
@@ -54,7 +54,7 @@ type CompaniesListQuery = {
|
|
|
54
54
|
/** 1–100. */
|
|
55
55
|
limit?: number;
|
|
56
56
|
/**
|
|
57
|
-
*
|
|
57
|
+
* Company catalog page offset (companies to skip); takes precedence over
|
|
58
58
|
* `cursor`. Pair with the response `count` to page in parallel.
|
|
59
59
|
*/
|
|
60
60
|
offset?: number;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { b as Schemas, L as ListEnvelope,
|
|
1
|
+
import { b as Schemas, L as ListEnvelope, o as RelatedSearch } from './jobs-BFLMDNEN.mjs';
|
|
2
2
|
|
|
3
3
|
/** Author shape embedded on posts (no `object` discriminator). */
|
|
4
4
|
type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
|
|
@@ -44,9 +44,9 @@ type CompanySalary = Schemas['CompanySalary'];
|
|
|
44
44
|
*/
|
|
45
45
|
type CompanyCategorySalary = Schemas['CompanyCategorySalary'];
|
|
46
46
|
/** The companies browse list — `PublicCompany`s + `market` `relatedSearches`. */
|
|
47
|
-
|
|
47
|
+
type CompanyListEnvelope = ListEnvelope<PublicCompany> & {
|
|
48
48
|
relatedSearches?: RelatedSearch[];
|
|
49
|
-
}
|
|
49
|
+
};
|
|
50
50
|
type CompaniesListQuery = {
|
|
51
51
|
cursor?: string;
|
|
52
52
|
/** Scope to a single market (sector) by slug. Unknown slugs 404. */
|
|
@@ -54,7 +54,7 @@ type CompaniesListQuery = {
|
|
|
54
54
|
/** 1–100. */
|
|
55
55
|
limit?: number;
|
|
56
56
|
/**
|
|
57
|
-
*
|
|
57
|
+
* Company catalog page offset (companies to skip); takes precedence over
|
|
58
58
|
* `cursor`. Pair with the response `count` to page in parallel.
|
|
59
59
|
*/
|
|
60
60
|
offset?: number;
|
package/dist/seo.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-
|
|
2
|
-
import { P as PublicBoard } from './board-
|
|
3
|
-
import { P as PublicJob } from './jobs-
|
|
1
|
+
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-pO_vGORE.mjs';
|
|
2
|
+
import { P as PublicBoard } from './board-Be8dY9Ba.mjs';
|
|
3
|
+
import { P as PublicJob } from './jobs-BFLMDNEN.mjs';
|
|
4
4
|
import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
package/dist/seo.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-
|
|
2
|
-
import { P as PublicBoard } from './board-
|
|
3
|
-
import { P as PublicJob } from './jobs-
|
|
1
|
+
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-negE75t8.js';
|
|
2
|
+
import { P as PublicBoard } from './board-DsRbgz_D.js';
|
|
3
|
+
import { P as PublicJob } from './jobs-BFLMDNEN.js';
|
|
4
4
|
import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.js';
|
|
5
5
|
|
|
6
6
|
/**
|
package/dist/server.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BoardSdk } from './index.mjs';
|
|
2
|
-
import './jobs-
|
|
3
|
-
import './board-
|
|
4
|
-
import './salaries-
|
|
2
|
+
import './jobs-BFLMDNEN.mjs';
|
|
3
|
+
import './board-Be8dY9Ba.mjs';
|
|
4
|
+
import './salaries-pO_vGORE.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Session cookie codec — pure (no framework imports, no node imports) so it
|
package/dist/server.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BoardSdk } from './index.js';
|
|
2
|
-
import './jobs-
|
|
3
|
-
import './board-
|
|
4
|
-
import './salaries-
|
|
2
|
+
import './jobs-BFLMDNEN.js';
|
|
3
|
+
import './board-DsRbgz_D.js';
|
|
4
|
+
import './salaries-negE75t8.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Session cookie codec — pure (no framework imports, no node imports) so it
|
package/dist/sitemap.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BoardSdk } from './index.mjs';
|
|
2
|
-
import './jobs-
|
|
3
|
-
import './board-
|
|
4
|
-
import './salaries-
|
|
2
|
+
import './jobs-BFLMDNEN.mjs';
|
|
3
|
+
import './board-Be8dY9Ba.mjs';
|
|
4
|
+
import './salaries-pO_vGORE.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Sitemap primitives — the pure XML + bucket-filename logic behind a board
|
package/dist/sitemap.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BoardSdk } from './index.js';
|
|
2
|
-
import './jobs-
|
|
3
|
-
import './board-
|
|
4
|
-
import './salaries-
|
|
2
|
+
import './jobs-BFLMDNEN.js';
|
|
3
|
+
import './board-DsRbgz_D.js';
|
|
4
|
+
import './salaries-negE75t8.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Sitemap primitives — the pure XML + bucket-filename logic behind a board
|
package/package.json
CHANGED
|
@@ -49,7 +49,6 @@ import { createBoardClient } from '@cavuno/board';
|
|
|
49
49
|
// Browser/SPA: 'local' persists the pair across tabs + reloads via
|
|
50
50
|
// localStorage; 'session' scopes it to the tab; 'memory' drops it on reload.
|
|
51
51
|
const board = createBoardClient({
|
|
52
|
-
baseUrl: 'https://api.cavuno.com',
|
|
53
52
|
board: 'pk_a8f3...',
|
|
54
53
|
auth: { storage: 'local' },
|
|
55
54
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cavuno-board-client
|
|
3
|
-
description: Create and configure the @cavuno/board client —
|
|
3
|
+
description: Create and configure the @cavuno/board client — the pk_ board identifier, optional API-origin override, global headers, hooks, per-call FetchOptions, and the rule that keeps one shared instance safe under SSR.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# The Board API client
|
|
@@ -23,7 +23,6 @@ description: Create and configure the @cavuno/board client — baseUrl and the p
|
|
|
23
23
|
import { createBoardClient } from '@cavuno/board';
|
|
24
24
|
|
|
25
25
|
const board = createBoardClient({
|
|
26
|
-
baseUrl: 'https://api.cavuno.com',
|
|
27
26
|
board: 'pk_a8f3...', // pk_ key (preferred) | boards_ id | slug
|
|
28
27
|
});
|
|
29
28
|
```
|
|
@@ -34,7 +33,6 @@ Use the `pk_…` publishable key for `board`, not the slug: the slug is operator
|
|
|
34
33
|
|
|
35
34
|
```ts no-check
|
|
36
35
|
const board = createBoardClient({
|
|
37
|
-
baseUrl: process.env.PUBLIC_CAVUNO_API_URL!,
|
|
38
36
|
board: process.env.PUBLIC_CAVUNO_BOARD!,
|
|
39
37
|
globalHeaders: { 'Accept-Language': 'en' },
|
|
40
38
|
onRequest: async (req) => req, // mutate/replace the request (locale, URL rewrite)
|
|
@@ -69,7 +67,6 @@ import { createBoardClient } from '@cavuno/board';
|
|
|
69
67
|
|
|
70
68
|
// Safe: shared, stateless. Per-user token rides per call.
|
|
71
69
|
export const board = createBoardClient({
|
|
72
|
-
baseUrl: process.env.PUBLIC_CAVUNO_API_URL!,
|
|
73
70
|
board: process.env.PUBLIC_CAVUNO_BOARD!,
|
|
74
71
|
});
|
|
75
72
|
```
|
|
@@ -28,7 +28,7 @@ Only the methods and fields shown here exist. There is no pause/suspend: deactiv
|
|
|
28
28
|
const sub = await board.jobAlerts.subscribe({
|
|
29
29
|
email: 'ada@example.com',
|
|
30
30
|
consent: true,
|
|
31
|
-
frequency: 'weekly', //
|
|
31
|
+
frequency: 'weekly', // the only supported cadence
|
|
32
32
|
filters: { jobFunctions: ['engineering'], remoteOptions: ['remote'], placeSlugs: ['berlin'] },
|
|
33
33
|
});
|
|
34
34
|
sub.status; // 'created' | 'duplicate'
|
|
@@ -67,7 +67,7 @@ await board.jobAlerts.updatePreference({
|
|
|
67
67
|
subscriptionId,
|
|
68
68
|
preferenceId: pref.id,
|
|
69
69
|
token,
|
|
70
|
-
frequency: '
|
|
70
|
+
frequency: 'weekly', // required — restate even if unchanged
|
|
71
71
|
filters: pref.filters, // round-trip stored filters you aren't editing
|
|
72
72
|
});
|
|
73
73
|
```
|
|
@@ -94,7 +94,7 @@ await board.me.alerts.remove(alert.id); // 204 → void; the only way to stop an
|
|
|
94
94
|
```ts snippet
|
|
95
95
|
const current = await board.me.alerts.retrieve(alertId);
|
|
96
96
|
await board.me.alerts.update(alertId, {
|
|
97
|
-
frequency: '
|
|
97
|
+
frequency: 'weekly',
|
|
98
98
|
jobFunctions: current.filters.jobFunctions,
|
|
99
99
|
seniorityLevels: current.filters.seniorityLevels,
|
|
100
100
|
remoteOptions: current.filters.remoteOptions,
|
|
@@ -112,4 +112,5 @@ await board.me.alerts.update(alertId, {
|
|
|
112
112
|
- [ ] Manage page reads `subscription` + `token` from the email link's query string; writes send `subscriptionId` in the body.
|
|
113
113
|
- [ ] Editing one preference field leaves the others intact (full-replace round-trip, both surfaces).
|
|
114
114
|
- [ ] Alert UI only promises filtering on job function / place / remote option.
|
|
115
|
+
- [ ] Alert UI offers weekly cadence only and never sends a legacy daily value.
|
|
115
116
|
- [ ] Alert surfaces are hidden when `features.jobAlerts` is false.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cavuno-board-jobs
|
|
3
|
-
description: Browse, search, and render jobs with the @cavuno/board SDK — jobs.list, jobs.search, jobs.retrieve, jobs.similar. Covers the slim card vs full job shapes,
|
|
3
|
+
description: Browse, search, and render jobs with the @cavuno/board SDK — jobs.list, jobs.search, jobs.retrieve, jobs.similar. Covers the slim card vs full job shapes, catalog pagination (count/limit/offset + opaque cursor), filters, and the candidate-paywall gatedCount.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Jobs: browse, search, detail
|
|
@@ -19,7 +19,7 @@ The highest-traffic surface. Listing and search return slim `PublicJobCard`s; th
|
|
|
19
19
|
|
|
20
20
|
## List and render cards
|
|
21
21
|
|
|
22
|
-
`jobs.list` returns a `JobCardListEnvelope`:
|
|
22
|
+
`jobs.list` returns a `JobCardListEnvelope`: catalog pagination fields plus `data: PublicJobCard[]` and optional `relatedSearches`.
|
|
23
23
|
|
|
24
24
|
```ts snippet
|
|
25
25
|
const page = await board.jobs.list({ limit: 20, seniority: ['senior', 'lead'] });
|