@cavuno/board 4.2.0 → 4.3.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/CHANGELOG.md CHANGED
@@ -3,6 +3,20 @@
3
3
  This changelog records changes that affect Board API compatibility, exported
4
4
  types, runtime behavior, or supported integration patterns.
5
5
 
6
+ ## 4.3.0 — 2026-08-07
7
+
8
+ - **`CompanyPublic.salarySampleCount`**: number of jobs that contribute to a
9
+ company's salary aggregates on the board (`0` when there is no usable
10
+ sample). Prefer this over fetching the full company-salary document just to
11
+ gate a Salaries tab or empty state. Distinct from `publishedJobCount` (open
12
+ roles without pay data stay at 0 here).
13
+ - **`GET …/companies/{slug}/salaries/summary`** and
14
+ `board.companies.salaries.summary(slug)`: lightweight profile teaser —
15
+ overall pay numbers, top categories by sample size, `sampleCount`, and
16
+ `currency` as `CompanySalarySummary`. Skips seniority, competitors,
17
+ locations, and logo joins from the full `CompanySalary` document. Format
18
+ currency ranges and multi-locale UI strings in the app.
19
+
6
20
  ## 4.2.0 — 2026-08-06
7
21
 
8
22
  - **Board logo + favicon pack on `board.context()`**: public board context now
@@ -449,6 +449,8 @@ interface components {
449
449
  jobCount: number;
450
450
  /** @description Number of currently-published, non-expired jobs at this company. */
451
451
  publishedJobCount: number;
452
+ /** @description Number of jobs that contribute to this company's salary aggregates on the board (the salary sample size). `0` when there is no usable salary data — prefer this over fetching the full company-salary document just to decide whether to show a Salaries tab. Not the same as `publishedJobCount` (open roles without pay data stay at 0 here). */
453
+ salarySampleCount: number;
452
454
  links: components["schemas"]["PublicCompanyLinks"];
453
455
  };
454
456
  CompanyPublicDetail: components["schemas"]["CompanyPublic"] & {
@@ -515,6 +517,28 @@ interface components {
515
517
  boardP75Max: number | null;
516
518
  currency: string;
517
519
  };
520
+ CompanySalarySummary: {
521
+ /** @enum {string} */
522
+ object: "company_salary_summary";
523
+ companyName: string;
524
+ companySlug: string;
525
+ overallSalary: {
526
+ avgMin: number;
527
+ avgMax: number;
528
+ jobCount: number;
529
+ } | null;
530
+ /** @description Top job categories at the company by sample size (capped; full list is on CompanySalary.byCategory). Category names/slugs are board-language localized. */
531
+ topCategories: {
532
+ categorySlug: string;
533
+ categoryName: string;
534
+ avgSalaryMin: number;
535
+ avgSalaryMax: number;
536
+ jobCount: number;
537
+ }[];
538
+ /** @description Jobs contributing to this company's salary aggregates (same meaning as CompanyPublic.salarySampleCount / overallSalary.jobCount). */
539
+ sampleCount: number;
540
+ currency: string;
541
+ };
518
542
  CompanySuggestion: {
519
543
  /** @enum {string} */
520
544
  object: "suggestion";
@@ -449,6 +449,8 @@ interface components {
449
449
  jobCount: number;
450
450
  /** @description Number of currently-published, non-expired jobs at this company. */
451
451
  publishedJobCount: number;
452
+ /** @description Number of jobs that contribute to this company's salary aggregates on the board (the salary sample size). `0` when there is no usable salary data — prefer this over fetching the full company-salary document just to decide whether to show a Salaries tab. Not the same as `publishedJobCount` (open roles without pay data stay at 0 here). */
453
+ salarySampleCount: number;
452
454
  links: components["schemas"]["PublicCompanyLinks"];
453
455
  };
454
456
  CompanyPublicDetail: components["schemas"]["CompanyPublic"] & {
@@ -515,6 +517,28 @@ interface components {
515
517
  boardP75Max: number | null;
516
518
  currency: string;
517
519
  };
520
+ CompanySalarySummary: {
521
+ /** @enum {string} */
522
+ object: "company_salary_summary";
523
+ companyName: string;
524
+ companySlug: string;
525
+ overallSalary: {
526
+ avgMin: number;
527
+ avgMax: number;
528
+ jobCount: number;
529
+ } | null;
530
+ /** @description Top job categories at the company by sample size (capped; full list is on CompanySalary.byCategory). Category names/slugs are board-language localized. */
531
+ topCategories: {
532
+ categorySlug: string;
533
+ categoryName: string;
534
+ avgSalaryMin: number;
535
+ avgSalaryMax: number;
536
+ jobCount: number;
537
+ }[];
538
+ /** @description Jobs contributing to this company's salary aggregates (same meaning as CompanyPublic.salarySampleCount / overallSalary.jobCount). */
539
+ sampleCount: number;
540
+ currency: string;
541
+ };
518
542
  CompanySuggestion: {
519
543
  /** @enum {string} */
520
544
  object: "suggestion";
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-BnoxU-iR.mjs';
1
+ import { S as Schemas } from './_spec-CT7rWhQ-.mjs';
2
2
 
3
3
  /** Author shape embedded on posts (no `object` discriminator). */
4
4
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-BnoxU-iR.js';
1
+ import { S as Schemas } from './_spec-CT7rWhQ-.js';
2
2
 
3
3
  /** Author shape embedded on posts (no `object` discriminator). */
4
4
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -1,5 +1,5 @@
1
- import { S as Schemas } from './_spec-BnoxU-iR.mjs';
2
- import { L as ListEnvelope, m as RelatedSearch } from './jobs-aTp9uC3a.mjs';
1
+ import { S as Schemas } from './_spec-CT7rWhQ-.mjs';
2
+ import { L as ListEnvelope, m as RelatedSearch } from './jobs-CZUpStJ3.mjs';
3
3
 
4
4
  type PublicCompany = Schemas['CompanyPublic'];
5
5
  /** A market (sector) a company operates in — name + its source slug. */
@@ -12,6 +12,13 @@ type PublicCompanyDetail = Schemas['CompanyPublicDetail'];
12
12
  * Names are board-language localized; the company slug/name are not.
13
13
  */
14
14
  type CompanySalary = Schemas['CompanySalary'];
15
+ /**
16
+ * Lightweight company salary teaser for profile / overview UIs: overall pay
17
+ * numbers, top categories, currency, and sampleCount. Prefer over
18
+ * `CompanySalary` when you only need a teaser. Format ranges and multi-locale
19
+ * UI strings in the app.
20
+ */
21
+ type CompanySalarySummary = Schemas['CompanySalarySummary'];
15
22
  /**
16
23
  * A company's salary for one job category: the category's source + board-language
17
24
  * canonical slug, by-seniority vs the board-category baseline, and competitors in
@@ -102,4 +109,4 @@ type CustomFieldDefinition = Schemas['CustomFieldDefinition'];
102
109
  type CustomFieldType = CustomFieldDefinition['type'];
103
110
  type CustomFieldOption = Schemas['CustomFieldOption'];
104
111
 
105
- export type { TitleLocationsIndex as A, CustomFieldDefinition as C, LocationSalaryDetail as L, PublicBoard as P, SkillSalaryDetail as S, TitleSalaryDetail as T, CompanyCategorySalary as a, CompanySalary as b, CompaniesListQuery as c, CompanyListEnvelope as d, CompaniesSearchBody as e, CompanyJobsListQuery as f, CompanySimilarQuery as g, CompanyMarketsListQuery as h, SalaryDetailQuery as i, CompanyMarket as j, CompanyMarketRef as k, CustomFieldOption as l, CustomFieldType as m, LocationSkillsIndex as n, LocationTitlesIndex as o, PublicBoardAnalytics as p, PublicBoardFeatures as q, PublicCompany as r, PublicCompanyDetail as s, SalaryCompany as t, SalaryLocation as u, SalarySkill as v, SalaryTitle as w, SkillLocationSalary as x, SkillLocationsIndex as y, TitleLocationSalary as z };
112
+ export type { TitleLocationSalary as A, TitleLocationsIndex as B, CustomFieldDefinition as C, LocationSalaryDetail as L, PublicBoard as P, SkillSalaryDetail as S, TitleSalaryDetail as T, CompanyCategorySalary as a, CompanySalary as b, CompaniesListQuery as c, CompanyListEnvelope as d, CompaniesSearchBody as e, CompanyJobsListQuery as f, CompanySimilarQuery as g, CompanyMarketsListQuery as h, SalaryDetailQuery as i, CompanyMarket as j, CompanyMarketRef as k, CompanySalarySummary as l, CustomFieldOption as m, CustomFieldType as n, LocationSkillsIndex as o, LocationTitlesIndex as p, PublicBoardAnalytics as q, PublicBoardFeatures as r, PublicCompany as s, PublicCompanyDetail as t, SalaryCompany as u, SalaryLocation as v, SalarySkill as w, SalaryTitle as x, SkillLocationSalary as y, SkillLocationsIndex as z };
@@ -1,5 +1,5 @@
1
- import { S as Schemas } from './_spec-BnoxU-iR.js';
2
- import { L as ListEnvelope, m as RelatedSearch } from './jobs-B8DNWEir.js';
1
+ import { S as Schemas } from './_spec-CT7rWhQ-.js';
2
+ import { L as ListEnvelope, m as RelatedSearch } from './jobs-Cf7J5vJe.js';
3
3
 
4
4
  type PublicCompany = Schemas['CompanyPublic'];
5
5
  /** A market (sector) a company operates in — name + its source slug. */
@@ -12,6 +12,13 @@ type PublicCompanyDetail = Schemas['CompanyPublicDetail'];
12
12
  * Names are board-language localized; the company slug/name are not.
13
13
  */
14
14
  type CompanySalary = Schemas['CompanySalary'];
15
+ /**
16
+ * Lightweight company salary teaser for profile / overview UIs: overall pay
17
+ * numbers, top categories, currency, and sampleCount. Prefer over
18
+ * `CompanySalary` when you only need a teaser. Format ranges and multi-locale
19
+ * UI strings in the app.
20
+ */
21
+ type CompanySalarySummary = Schemas['CompanySalarySummary'];
15
22
  /**
16
23
  * A company's salary for one job category: the category's source + board-language
17
24
  * canonical slug, by-seniority vs the board-category baseline, and competitors in
@@ -102,4 +109,4 @@ type CustomFieldDefinition = Schemas['CustomFieldDefinition'];
102
109
  type CustomFieldType = CustomFieldDefinition['type'];
103
110
  type CustomFieldOption = Schemas['CustomFieldOption'];
104
111
 
105
- export type { TitleLocationsIndex as A, CustomFieldDefinition as C, LocationSalaryDetail as L, PublicBoard as P, SkillSalaryDetail as S, TitleSalaryDetail as T, CompanyCategorySalary as a, CompanySalary as b, CompaniesListQuery as c, CompanyListEnvelope as d, CompaniesSearchBody as e, CompanyJobsListQuery as f, CompanySimilarQuery as g, CompanyMarketsListQuery as h, SalaryDetailQuery as i, CompanyMarket as j, CompanyMarketRef as k, CustomFieldOption as l, CustomFieldType as m, LocationSkillsIndex as n, LocationTitlesIndex as o, PublicBoardAnalytics as p, PublicBoardFeatures as q, PublicCompany as r, PublicCompanyDetail as s, SalaryCompany as t, SalaryLocation as u, SalarySkill as v, SalaryTitle as w, SkillLocationSalary as x, SkillLocationsIndex as y, TitleLocationSalary as z };
112
+ export type { TitleLocationSalary as A, TitleLocationsIndex as B, CustomFieldDefinition as C, LocationSalaryDetail as L, PublicBoard as P, SkillSalaryDetail as S, TitleSalaryDetail as T, CompanyCategorySalary as a, CompanySalary as b, CompaniesListQuery as c, CompanyListEnvelope as d, CompaniesSearchBody as e, CompanyJobsListQuery as f, CompanySimilarQuery as g, CompanyMarketsListQuery as h, SalaryDetailQuery as i, CompanyMarket as j, CompanyMarketRef as k, CompanySalarySummary as l, CustomFieldOption as m, CustomFieldType as n, LocationSkillsIndex as o, LocationTitlesIndex as p, PublicBoardAnalytics as q, PublicBoardFeatures as r, PublicCompany as s, PublicCompanyDetail as t, SalaryCompany as u, SalaryLocation as v, SalarySkill as w, SalaryTitle as x, SkillLocationSalary as y, SkillLocationsIndex as z };
@@ -1,5 +1,5 @@
1
- import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-CvBkK7my.mjs';
2
- import { P as PublicJob } from './jobs-aTp9uC3a.mjs';
1
+ import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-BLwReKB8.mjs';
2
+ import { P as PublicJob } from './jobs-CZUpStJ3.mjs';
3
3
 
4
4
  /**
5
5
  * Wire enum for `salaryTimeframe`. Defined here (not re-exported from any
@@ -1,5 +1,5 @@
1
- import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-4vXzYDL3.js';
2
- import { P as PublicJob } from './jobs-B8DNWEir.js';
1
+ import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-O990tPTt.js';
2
+ import { P as PublicJob } from './jobs-Cf7J5vJe.js';
3
3
 
4
4
  /**
5
5
  * Wire enum for `salaryTimeframe`. Defined here (not re-exported from any
@@ -1,5 +1,5 @@
1
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-aTp9uC3a.mjs';
2
- import './_spec-BnoxU-iR.mjs';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-CZUpStJ3.mjs';
2
+ import './_spec-CT7rWhQ-.mjs';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
package/dist/filters.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-B8DNWEir.js';
2
- import './_spec-BnoxU-iR.js';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-Cf7J5vJe.js';
2
+ import './_spec-CT7rWhQ-.js';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
package/dist/format.d.mts CHANGED
@@ -1,7 +1,7 @@
1
- export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-Cz1sFqtV.mjs';
2
- import { C as CustomFieldDefinition } from './board-CvBkK7my.mjs';
3
- import { C as CustomFieldValues } from './jobs-aTp9uC3a.mjs';
4
- import './_spec-BnoxU-iR.mjs';
1
+ export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-CQjU_wHB.mjs';
2
+ import { C as CustomFieldDefinition } from './board-BLwReKB8.mjs';
3
+ import { C as CustomFieldValues } from './jobs-CZUpStJ3.mjs';
4
+ import './_spec-CT7rWhQ-.mjs';
5
5
 
6
6
  /**
7
7
  * Date display helpers in the board language (required leading parameter,
package/dist/format.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-Blf_rsux.js';
2
- import { C as CustomFieldDefinition } from './board-4vXzYDL3.js';
3
- import { C as CustomFieldValues } from './jobs-B8DNWEir.js';
4
- import './_spec-BnoxU-iR.js';
1
+ export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-ClvafKXZ.js';
2
+ import { C as CustomFieldDefinition } from './board-O990tPTt.js';
3
+ import { C as CustomFieldValues } from './jobs-Cf7J5vJe.js';
4
+ import './_spec-CT7rWhQ-.js';
5
5
 
6
6
  /**
7
7
  * Date display helpers in the board language (required leading parameter,
package/dist/index.d.mts CHANGED
@@ -1,12 +1,12 @@
1
- import { S as Schemas, c as components } from './_spec-BnoxU-iR.mjs';
2
- import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-Cs7d8y1k.mjs';
3
- export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-Cs7d8y1k.mjs';
4
- import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-CvBkK7my.mjs';
5
- export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, C as CustomFieldDefinition, l as CustomFieldOption, m as CustomFieldType, L as LocationSalaryDetail, n as LocationSkillsIndex, o as LocationTitlesIndex, P as PublicBoard, p as PublicBoardAnalytics, q as PublicBoardFeatures, r as PublicCompany, s as PublicCompanyDetail, t as SalaryCompany, u as SalaryLocation, v as SalarySkill, w as SalaryTitle, x as SkillLocationSalary, y as SkillLocationsIndex, S as SkillSalaryDetail, z as TitleLocationSalary, A as TitleLocationsIndex, T as TitleSalaryDetail } from './board-CvBkK7my.mjs';
6
- import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-aTp9uC3a.mjs';
7
- export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-aTp9uC3a.mjs';
8
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-DoAOCg-d.mjs';
9
- export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-DoAOCg-d.mjs';
1
+ import { S as Schemas, c as components } from './_spec-CT7rWhQ-.mjs';
2
+ import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-CHLEpKE5.mjs';
3
+ export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-CHLEpKE5.mjs';
4
+ import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-BLwReKB8.mjs';
5
+ export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAnalytics, r as PublicBoardFeatures, s as PublicCompany, t as PublicCompanyDetail, u as SalaryCompany, v as SalaryLocation, w as SalarySkill, x as SalaryTitle, y as SkillLocationSalary, z as SkillLocationsIndex, S as SkillSalaryDetail, A as TitleLocationSalary, B as TitleLocationsIndex, T as TitleSalaryDetail } from './board-BLwReKB8.mjs';
6
+ import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-CZUpStJ3.mjs';
7
+ export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-CZUpStJ3.mjs';
8
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-CJda3-Ab.mjs';
9
+ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-CJda3-Ab.mjs';
10
10
 
11
11
  /**
12
12
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -142,7 +142,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
142
142
  * constant because the package is platform-neutral and cannot read
143
143
  * package.json at runtime.
144
144
  */
145
- declare const SDK_VERSION = "4.2.0";
145
+ declare const SDK_VERSION = "4.3.0";
146
146
 
147
147
  type SavedJob = Schemas['SavedJob'];
148
148
  type SavedJobsListQuery = {
@@ -964,6 +964,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
964
964
  description: string | null;
965
965
  jobCount: number;
966
966
  publishedJobCount: number;
967
+ salarySampleCount: number;
967
968
  links: components["schemas"]["PublicCompanyLinks"];
968
969
  } & {
969
970
  markets: components["schemas"]["CompanyMarketRef"][];
@@ -979,6 +980,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
979
980
  description: string | null;
980
981
  jobCount: number;
981
982
  publishedJobCount: number;
983
+ salarySampleCount: number;
982
984
  links: components["schemas"]["PublicCompanyLinks"];
983
985
  }>>;
984
986
  listJobs(companySlug: string, query?: CompanyJobsListQuery, options?: FetchOptions): Promise<JobCardListEnvelope>;
@@ -993,6 +995,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
993
995
  description: string | null;
994
996
  jobCount: number;
995
997
  publishedJobCount: number;
998
+ salarySampleCount: number;
996
999
  links: components["schemas"]["PublicCompanyLinks"];
997
1000
  }>>;
998
1001
  markets: ((query?: CompanyMarketsListQuery, options?: FetchOptions) => Promise<ListEnvelope<{
@@ -1070,6 +1073,25 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1070
1073
  boardP75Max: number | null;
1071
1074
  currency: string;
1072
1075
  }>) & {
1076
+ summary(companySlug: string, options?: FetchOptions): Promise<{
1077
+ object: "company_salary_summary";
1078
+ companyName: string;
1079
+ companySlug: string;
1080
+ overallSalary: {
1081
+ avgMin: number;
1082
+ avgMax: number;
1083
+ jobCount: number;
1084
+ } | null;
1085
+ topCategories: {
1086
+ categorySlug: string;
1087
+ categoryName: string;
1088
+ avgSalaryMin: number;
1089
+ avgSalaryMax: number;
1090
+ jobCount: number;
1091
+ }[];
1092
+ sampleCount: number;
1093
+ currency: string;
1094
+ }>;
1073
1095
  category(companySlug: string, categorySlug: string, query?: SalaryDetailQuery, options?: FetchOptions): Promise<{
1074
1096
  object: "company_category_salary";
1075
1097
  categorySourceSlug: string;
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import { S as Schemas, c as components } from './_spec-BnoxU-iR.js';
2
- import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-Cskh-neW.js';
3
- export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-Cskh-neW.js';
4
- import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-4vXzYDL3.js';
5
- export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, C as CustomFieldDefinition, l as CustomFieldOption, m as CustomFieldType, L as LocationSalaryDetail, n as LocationSkillsIndex, o as LocationTitlesIndex, P as PublicBoard, p as PublicBoardAnalytics, q as PublicBoardFeatures, r as PublicCompany, s as PublicCompanyDetail, t as SalaryCompany, u as SalaryLocation, v as SalarySkill, w as SalaryTitle, x as SkillLocationSalary, y as SkillLocationsIndex, S as SkillSalaryDetail, z as TitleLocationSalary, A as TitleLocationsIndex, T as TitleSalaryDetail } from './board-4vXzYDL3.js';
6
- import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-B8DNWEir.js';
7
- export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-B8DNWEir.js';
8
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-D-PYhejB.js';
9
- export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-D-PYhejB.js';
1
+ import { S as Schemas, c as components } from './_spec-CT7rWhQ-.js';
2
+ import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-YWruydKJ.js';
3
+ export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-YWruydKJ.js';
4
+ import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-O990tPTt.js';
5
+ export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAnalytics, r as PublicBoardFeatures, s as PublicCompany, t as PublicCompanyDetail, u as SalaryCompany, v as SalaryLocation, w as SalarySkill, x as SalaryTitle, y as SkillLocationSalary, z as SkillLocationsIndex, S as SkillSalaryDetail, A as TitleLocationSalary, B as TitleLocationsIndex, T as TitleSalaryDetail } from './board-O990tPTt.js';
6
+ import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-Cf7J5vJe.js';
7
+ export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-Cf7J5vJe.js';
8
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-DOBig1Wh.js';
9
+ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-DOBig1Wh.js';
10
10
 
11
11
  /**
12
12
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -142,7 +142,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
142
142
  * constant because the package is platform-neutral and cannot read
143
143
  * package.json at runtime.
144
144
  */
145
- declare const SDK_VERSION = "4.2.0";
145
+ declare const SDK_VERSION = "4.3.0";
146
146
 
147
147
  type SavedJob = Schemas['SavedJob'];
148
148
  type SavedJobsListQuery = {
@@ -964,6 +964,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
964
964
  description: string | null;
965
965
  jobCount: number;
966
966
  publishedJobCount: number;
967
+ salarySampleCount: number;
967
968
  links: components["schemas"]["PublicCompanyLinks"];
968
969
  } & {
969
970
  markets: components["schemas"]["CompanyMarketRef"][];
@@ -979,6 +980,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
979
980
  description: string | null;
980
981
  jobCount: number;
981
982
  publishedJobCount: number;
983
+ salarySampleCount: number;
982
984
  links: components["schemas"]["PublicCompanyLinks"];
983
985
  }>>;
984
986
  listJobs(companySlug: string, query?: CompanyJobsListQuery, options?: FetchOptions): Promise<JobCardListEnvelope>;
@@ -993,6 +995,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
993
995
  description: string | null;
994
996
  jobCount: number;
995
997
  publishedJobCount: number;
998
+ salarySampleCount: number;
996
999
  links: components["schemas"]["PublicCompanyLinks"];
997
1000
  }>>;
998
1001
  markets: ((query?: CompanyMarketsListQuery, options?: FetchOptions) => Promise<ListEnvelope<{
@@ -1070,6 +1073,25 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1070
1073
  boardP75Max: number | null;
1071
1074
  currency: string;
1072
1075
  }>) & {
1076
+ summary(companySlug: string, options?: FetchOptions): Promise<{
1077
+ object: "company_salary_summary";
1078
+ companyName: string;
1079
+ companySlug: string;
1080
+ overallSalary: {
1081
+ avgMin: number;
1082
+ avgMax: number;
1083
+ jobCount: number;
1084
+ } | null;
1085
+ topCategories: {
1086
+ categorySlug: string;
1087
+ categoryName: string;
1088
+ avgSalaryMin: number;
1089
+ avgSalaryMax: number;
1090
+ jobCount: number;
1091
+ }[];
1092
+ sampleCount: number;
1093
+ currency: string;
1094
+ }>;
1073
1095
  category(companySlug: string, categorySlug: string, query?: SalaryDetailQuery, options?: FetchOptions): Promise<{
1074
1096
  object: "company_category_salary";
1075
1097
  categorySourceSlug: string;
package/dist/index.js CHANGED
@@ -312,7 +312,7 @@ async function clearSession(storage) {
312
312
  }
313
313
 
314
314
  // src/version.ts
315
- var SDK_VERSION = "4.2.0";
315
+ var SDK_VERSION = "4.3.0";
316
316
 
317
317
  // src/client.ts
318
318
  function isRawBody(body) {
@@ -776,6 +776,12 @@ function companiesNamespace(client) {
776
776
  options
777
777
  ),
778
778
  {
779
+ summary(companySlug, options) {
780
+ return client.fetch(
781
+ `/companies/${encodeURIComponent(companySlug)}/salaries/summary`,
782
+ options
783
+ );
784
+ },
779
785
  category(companySlug, categorySlug, query, options) {
780
786
  return client.fetch(
781
787
  `/companies/${encodeURIComponent(companySlug)}/salaries/${encodeURIComponent(categorySlug)}`,
package/dist/index.mjs CHANGED
@@ -39,7 +39,7 @@ function toSearchParams(query) {
39
39
  }
40
40
 
41
41
  // src/version.ts
42
- var SDK_VERSION = "4.2.0";
42
+ var SDK_VERSION = "4.3.0";
43
43
 
44
44
  // src/client.ts
45
45
  function isRawBody(body) {
@@ -503,6 +503,12 @@ function companiesNamespace(client) {
503
503
  options
504
504
  ),
505
505
  {
506
+ summary(companySlug, options) {
507
+ return client.fetch(
508
+ `/companies/${encodeURIComponent(companySlug)}/salaries/summary`,
509
+ options
510
+ );
511
+ },
506
512
  category(companySlug, categorySlug, query, options) {
507
513
  return client.fetch(
508
514
  `/companies/${encodeURIComponent(companySlug)}/salaries/${encodeURIComponent(categorySlug)}`,
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-BnoxU-iR.mjs';
1
+ import { S as Schemas } from './_spec-CT7rWhQ-.mjs';
2
2
 
3
3
  /**
4
4
  * Optional pagination metadata returned by Board API list operations.
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-BnoxU-iR.js';
1
+ import { S as Schemas } from './_spec-CT7rWhQ-.js';
2
2
 
3
3
  /**
4
4
  * Optional pagination metadata returned by Board API list operations.
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-BnoxU-iR.mjs';
1
+ import { S as Schemas } from './_spec-CT7rWhQ-.mjs';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-BnoxU-iR.js';
1
+ import { S as Schemas } from './_spec-CT7rWhQ-.js';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
package/dist/seo.d.mts CHANGED
@@ -1,9 +1,9 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-DoAOCg-d.mjs';
2
- import { e as JsonLdObject } from './breadcrumbs-Cz1sFqtV.mjs';
3
- export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-Cz1sFqtV.mjs';
4
- import './_spec-BnoxU-iR.mjs';
5
- import './board-CvBkK7my.mjs';
6
- import './jobs-aTp9uC3a.mjs';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-CJda3-Ab.mjs';
2
+ import { e as JsonLdObject } from './breadcrumbs-CQjU_wHB.mjs';
3
+ export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-CQjU_wHB.mjs';
4
+ import './_spec-CT7rWhQ-.mjs';
5
+ import './board-BLwReKB8.mjs';
6
+ import './jobs-CZUpStJ3.mjs';
7
7
 
8
8
  /**
9
9
  * Blog structured data on the `@cavuno/board` wire types, transcribed from
package/dist/seo.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-D-PYhejB.js';
2
- import { e as JsonLdObject } from './breadcrumbs-Blf_rsux.js';
3
- export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-Blf_rsux.js';
4
- import './_spec-BnoxU-iR.js';
5
- import './board-4vXzYDL3.js';
6
- import './jobs-B8DNWEir.js';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-DOBig1Wh.js';
2
+ import { e as JsonLdObject } from './breadcrumbs-ClvafKXZ.js';
3
+ export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-ClvafKXZ.js';
4
+ import './_spec-CT7rWhQ-.js';
5
+ import './board-O990tPTt.js';
6
+ import './jobs-Cf7J5vJe.js';
7
7
 
8
8
  /**
9
9
  * Blog structured data on the `@cavuno/board` wire types, transcribed from
package/dist/server.d.mts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './_spec-BnoxU-iR.mjs';
3
- import './search-Cs7d8y1k.mjs';
4
- import './board-CvBkK7my.mjs';
5
- import './jobs-aTp9uC3a.mjs';
6
- import './blog-DoAOCg-d.mjs';
2
+ import './_spec-CT7rWhQ-.mjs';
3
+ import './search-CHLEpKE5.mjs';
4
+ import './board-BLwReKB8.mjs';
5
+ import './jobs-CZUpStJ3.mjs';
6
+ import './blog-CJda3-Ab.mjs';
7
7
 
8
8
  /**
9
9
  * Session cookie codec — pure (no framework imports, no node imports) so it
package/dist/server.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './_spec-BnoxU-iR.js';
3
- import './search-Cskh-neW.js';
4
- import './board-4vXzYDL3.js';
5
- import './jobs-B8DNWEir.js';
6
- import './blog-D-PYhejB.js';
2
+ import './_spec-CT7rWhQ-.js';
3
+ import './search-YWruydKJ.js';
4
+ import './board-O990tPTt.js';
5
+ import './jobs-Cf7J5vJe.js';
6
+ import './blog-DOBig1Wh.js';
7
7
 
8
8
  /**
9
9
  * Session cookie codec — pure (no framework imports, no node imports) so it
@@ -1,9 +1,9 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './_spec-BnoxU-iR.mjs';
3
- import './search-Cs7d8y1k.mjs';
4
- import './board-CvBkK7my.mjs';
5
- import './jobs-aTp9uC3a.mjs';
6
- import './blog-DoAOCg-d.mjs';
2
+ import './_spec-CT7rWhQ-.mjs';
3
+ import './search-CHLEpKE5.mjs';
4
+ import './board-BLwReKB8.mjs';
5
+ import './jobs-CZUpStJ3.mjs';
6
+ import './blog-CJda3-Ab.mjs';
7
7
 
8
8
  /**
9
9
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
package/dist/sitemap.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './_spec-BnoxU-iR.js';
3
- import './search-Cskh-neW.js';
4
- import './board-4vXzYDL3.js';
5
- import './jobs-B8DNWEir.js';
6
- import './blog-D-PYhejB.js';
2
+ import './_spec-CT7rWhQ-.js';
3
+ import './search-YWruydKJ.js';
4
+ import './board-O990tPTt.js';
5
+ import './jobs-Cf7J5vJe.js';
6
+ import './blog-DOBig1Wh.js';
7
7
 
8
8
  /**
9
9
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
@@ -1,5 +1,5 @@
1
- import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-Cs7d8y1k.mjs';
2
- import './_spec-BnoxU-iR.mjs';
1
+ import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-CHLEpKE5.mjs';
2
+ import './_spec-CT7rWhQ-.mjs';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/suggest` — framework-agnostic headless search-suggest
package/dist/suggest.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-Cskh-neW.js';
2
- import './_spec-BnoxU-iR.js';
1
+ import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-YWruydKJ.js';
2
+ import './_spec-CT7rWhQ-.js';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/suggest` — framework-agnostic headless search-suggest
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cavuno/board",
3
- "version": "4.2.0",
3
+ "version": "4.3.0",
4
4
  "description": "Build custom job boards and careers pages with Cavuno’s TypeScript SDK.",
5
5
  "keywords": [
6
6
  "api-client",
@@ -80,12 +80,23 @@ the current company, and ranks by open roles. Fetch `retrieve` before reading
80
80
 
81
81
  ## Render company salaries
82
82
 
83
- `companies.salaries` is callable and carries `.category`. The overview returns
84
- `CompanySalary`: nullable `overallSalary`, `bySeniority` rows with board
85
- comparison `diffPercent`, `competitors`, `topLocations`, `byCategory`,
86
- board-wide baselines, and `currency`.
83
+ `companies.salaries` is callable and carries `.summary` and `.category`.
84
+
85
+ For a profile / overview teaser, prefer `.summary` — it returns
86
+ `CompanySalarySummary` (overall numbers, top categories, `sampleCount`,
87
+ `currency`) without seniority, competitors, locations, or logos. Format
88
+ currency ranges and multi-locale UI strings in the app.
89
+
90
+ The full overview returns `CompanySalary`: nullable `overallSalary`,
91
+ `bySeniority` rows with board comparison `diffPercent`, `competitors`,
92
+ `topLocations`, `byCategory`, board-wide baselines, and `currency`.
87
93
 
88
94
  ```ts snippet
95
+ const teaser = await board.companies.salaries.summary('acme');
96
+ teaser.overallSalary;
97
+ teaser.topCategories;
98
+ teaser.sampleCount;
99
+
89
100
  const overview = await board.companies.salaries('acme');
90
101
  overview.bySeniority[0]?.diffPercent;
91
102
 
@@ -97,11 +108,12 @@ category.categorySourceSlug;
97
108
  category.categoryCanonicalSlug;
98
109
  ```
99
110
 
100
- Pass `{ locale }` for board-language category names. Company identity remains
101
- untranslated. The API returns both the immutable English
111
+ Pass `{ locale }` for board-language category names on `.category`. Company
112
+ identity remains untranslated. The API returns both the immutable English
102
113
  `categorySourceSlug` and the board-language `categoryCanonicalSlug`; the host
103
114
  route issues a 308 when the inbound category slug differs from the canonical
104
- one.
115
+ one. Gate a Salaries tab with `company.salarySampleCount > 0` from
116
+ `companies.retrieve` rather than fetching salary documents just for presence.
105
117
 
106
118
  ## Completion gate
107
119
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.2.0",
2
+ "version": "4.3.0",
3
3
  "skills": [
4
4
  {
5
5
  "name": "cavuno-board-account",