@cavuno/board 4.1.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 +38 -0
- package/dist/{_spec-BZDv2dc5.d.mts → _spec-CT7rWhQ-.d.mts} +50 -3
- package/dist/{_spec-BZDv2dc5.d.ts → _spec-CT7rWhQ-.d.ts} +50 -3
- package/dist/{blog-DyDvyQrI.d.mts → blog-CJda3-Ab.d.mts} +1 -1
- package/dist/{blog-BHx6iH3Z.d.ts → blog-DOBig1Wh.d.ts} +1 -1
- package/dist/{board-BTEZ0uiI.d.ts → board-BLwReKB8.d.mts} +10 -3
- package/dist/{board-BF3Qao6J.d.mts → board-O990tPTt.d.ts} +10 -3
- package/dist/{breadcrumbs-icxRVydh.d.mts → breadcrumbs-CQjU_wHB.d.mts} +2 -2
- package/dist/{breadcrumbs-SGaWth6C.d.ts → breadcrumbs-ClvafKXZ.d.ts} +2 -2
- package/dist/filters.d.mts +2 -2
- package/dist/filters.d.ts +2 -2
- package/dist/format.d.mts +4 -4
- package/dist/format.d.ts +4 -4
- package/dist/index.d.mts +51 -15
- package/dist/index.d.ts +51 -15
- package/dist/index.js +13 -6
- package/dist/index.mjs +13 -6
- package/dist/{jobs-BX6d_sdd.d.mts → jobs-CZUpStJ3.d.mts} +1 -1
- package/dist/{jobs-BbLJfz1z.d.ts → jobs-Cf7J5vJe.d.ts} +1 -1
- package/dist/{search-OKrdAHv8.d.mts → search-CHLEpKE5.d.mts} +1 -1
- package/dist/{search-7B-mVRNA.d.ts → search-YWruydKJ.d.ts} +1 -1
- package/dist/seo.d.mts +6 -6
- package/dist/seo.d.ts +6 -6
- package/dist/server.d.mts +5 -5
- package/dist/server.d.ts +5 -5
- package/dist/sitemap.d.mts +5 -5
- package/dist/sitemap.d.ts +5 -5
- package/dist/suggest.d.mts +2 -2
- package/dist/suggest.d.ts +2 -2
- package/package.json +1 -1
- package/skills/cavuno-board-companies/SKILL.md +19 -7
- package/skills/cavuno-board-seo/SKILL.md +12 -0
- package/skills/manifest.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,44 @@
|
|
|
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
|
+
|
|
20
|
+
## 4.2.0 — 2026-08-06
|
|
21
|
+
|
|
22
|
+
- **Board logo + favicon pack on `board.context()`**: public board context now
|
|
23
|
+
includes `icons` next to `logoUrl` — absolute CDN URLs (or `null`) for
|
|
24
|
+
`ico`, `svg`, `appleTouch`, `icon192`, `icon512`, and `iconMaskable512`.
|
|
25
|
+
Derived from the operator logo (Settings → General upload / logo generator).
|
|
26
|
+
Brand identity, not SEO infra — `board.seo()` stays ads/IndexNow/GSV/
|
|
27
|
+
canonical/manifest.name only. Map `icons` into root-layout favicon `<link>`
|
|
28
|
+
tags. Operators set the logo in Cavuno; the API resolves the pack.
|
|
29
|
+
- **Card `summary` on jobs, companies, and talent**: list/card models gain a
|
|
30
|
+
server-derived plain-text `summary: string | null` — HTML stripped, entities
|
|
31
|
+
decoded, cut at a sentence boundary (or word boundary with `…`). The API does
|
|
32
|
+
the data cleaning; consumers decide how much of the string to show.
|
|
33
|
+
- `PublicJobCard.summary` — denormalized at write time on
|
|
34
|
+
`publicJobCardDocs` (backfill migration
|
|
35
|
+
`jobs/migrations:backfillPublicJobCardSummary`). Independent of the
|
|
36
|
+
existing `?fields=+description` opt-in, which keeps working as before.
|
|
37
|
+
- `CompanyPublic.summary` — derived from `description` at serialization for
|
|
38
|
+
list, search, and similar. Detail still ships the full HTML body.
|
|
39
|
+
- `TalentDirectoryEntry.summary` — derived from `bio` at serialization.
|
|
40
|
+
- **Deprecations** (still returned; prefer `summary` for card teasers):
|
|
41
|
+
- `CompanyPublic.description` on list/search/similar
|
|
42
|
+
- `TalentDirectoryEntry.bio`
|
|
43
|
+
|
|
6
44
|
## 4.1.0 — 2026-08-06
|
|
7
45
|
|
|
8
46
|
- **Salary null-clears on job PATCH** (operator `PATCH /v1/jobs/:id` and
|
|
@@ -438,12 +438,19 @@ interface components {
|
|
|
438
438
|
website: string | null;
|
|
439
439
|
/** @description URL of the company logo, or `null` if no logo is set. */
|
|
440
440
|
logoUrl: string | null;
|
|
441
|
-
/** @description
|
|
441
|
+
/** @description Plain-text card teaser: the operator-authored company summary when set, otherwise a derived teaser from the long-form description (HTML stripped, first sentence / word-boundary cut). `null` when neither yields anything. Prefer this over `description` for list/card renders. */
|
|
442
|
+
summary: string | null;
|
|
443
|
+
/**
|
|
444
|
+
* @deprecated
|
|
445
|
+
* @description Long-form description of the company (HTML), or `null` if not set. **Deprecated on list/search/similar responses** — prefer `summary` for card teasers. Still the full prose for detail pages (`GET …/companies/{slug}`).
|
|
446
|
+
*/
|
|
442
447
|
description: string | null;
|
|
443
448
|
/** @description Total number of public-facing jobs at this company. Currently mirrors `publishedJobCount`. */
|
|
444
449
|
jobCount: number;
|
|
445
450
|
/** @description Number of currently-published, non-expired jobs at this company. */
|
|
446
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;
|
|
447
454
|
links: components["schemas"]["PublicCompanyLinks"];
|
|
448
455
|
};
|
|
449
456
|
CompanyPublicDetail: components["schemas"]["CompanyPublic"] & {
|
|
@@ -510,6 +517,28 @@ interface components {
|
|
|
510
517
|
boardP75Max: number | null;
|
|
511
518
|
currency: string;
|
|
512
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
|
+
};
|
|
513
542
|
CompanySuggestion: {
|
|
514
543
|
/** @enum {string} */
|
|
515
544
|
object: "suggestion";
|
|
@@ -868,7 +897,7 @@ interface components {
|
|
|
868
897
|
*/
|
|
869
898
|
employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
|
|
870
899
|
/**
|
|
871
|
-
* @description Whether the role is on-site, hybrid, or fully remote.
|
|
900
|
+
* @description Whether the role is on-site, hybrid, or fully remote. **Never valid on its own:** `on_site` and `hybrid` require at least one `officeLocations` entry, and `remote` requires `remotePermits` (use `[{"type":"worldwide","value":"worldwide"}]` for anywhere; `remoteTimezones` then auto-derives on POST). Sending it alone returns `400`.
|
|
872
901
|
* @enum {string}
|
|
873
902
|
*/
|
|
874
903
|
remoteOption?: "on_site" | "hybrid" | "remote";
|
|
@@ -1113,7 +1142,7 @@ interface components {
|
|
|
1113
1142
|
*/
|
|
1114
1143
|
employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
|
|
1115
1144
|
/**
|
|
1116
|
-
* @description Whether the role is on-site, hybrid, or fully remote.
|
|
1145
|
+
* @description Whether the role is on-site, hybrid, or fully remote. **Never valid on its own:** `on_site` and `hybrid` require at least one `officeLocations` entry, and `remote` requires `remotePermits` (use `[{"type":"worldwide","value":"worldwide"}]` for anywhere; `remoteTimezones` then auto-derives on POST). Sending it alone returns `400`.
|
|
1117
1146
|
* @enum {string}
|
|
1118
1147
|
*/
|
|
1119
1148
|
remoteOption?: "on_site" | "hybrid" | "remote";
|
|
@@ -1665,7 +1694,17 @@ interface components {
|
|
|
1665
1694
|
name: string;
|
|
1666
1695
|
/** @description Board language (ISO code); defaults to "en". */
|
|
1667
1696
|
language: string;
|
|
1697
|
+
/** @description Absolute URL for the board logo, or null when unset. Operators set this under Settings → General (upload or logo generator); the website builder can manage it too. */
|
|
1668
1698
|
logoUrl: string | null;
|
|
1699
|
+
/** @description Absolute URLs for the favicon / app-icon pack derived from the board logo (null when a variant is unset). Brand identity next to `logoUrl` — build `<link rel="icon">` tags and the web-manifest icon list from these. Not SEO infra (`board.seo()`). */
|
|
1700
|
+
icons: {
|
|
1701
|
+
ico: string | null;
|
|
1702
|
+
svg: string | null;
|
|
1703
|
+
appleTouch: string | null;
|
|
1704
|
+
icon192: string | null;
|
|
1705
|
+
icon512: string | null;
|
|
1706
|
+
iconMaskable512: string | null;
|
|
1707
|
+
};
|
|
1669
1708
|
/** @description Active custom-domain hostname, or null. */
|
|
1670
1709
|
primaryDomain: string | null;
|
|
1671
1710
|
/** @description Whitelabel toggle (default `true`). Render the "Powered by Cavuno" badge unless `false`. */
|
|
@@ -1941,6 +1980,8 @@ interface components {
|
|
|
1941
1980
|
salaryCurrency: string | null;
|
|
1942
1981
|
salaryTimeframe: string | null;
|
|
1943
1982
|
isFeatured: boolean;
|
|
1983
|
+
/** @description Plain-text card teaser derived from the job description (HTML stripped, first sentence / word-boundary cut). `null` when there is nothing honest to show. Always present — independent of the `?fields=+description` opt-in for the long-form HTML body. Prefer this over requesting `+description` for list/card renders. */
|
|
1984
|
+
summary: string | null;
|
|
1944
1985
|
locationLabel: string | null;
|
|
1945
1986
|
/** @description Embedded company summary, or `null` if none is attached. */
|
|
1946
1987
|
company: {
|
|
@@ -2403,6 +2444,12 @@ interface components {
|
|
|
2403
2444
|
headline: string | null;
|
|
2404
2445
|
location: string | null;
|
|
2405
2446
|
avatarUrl: string | null;
|
|
2447
|
+
/** @description Plain-text card teaser derived from `bio` (HTML stripped, first sentence / word-boundary cut). `null` when there is nothing honest to show. Prefer this over `bio` for directory/card renders; cards still lead with `headline` when present. */
|
|
2448
|
+
summary: string | null;
|
|
2449
|
+
/**
|
|
2450
|
+
* @deprecated
|
|
2451
|
+
* @description Long-form candidate bio. **Deprecated on directory entries** — prefer `summary` for card teasers. Still the full prose on the talent profile detail (`GET …/talent/{handle}`).
|
|
2452
|
+
*/
|
|
2406
2453
|
bio: string | null;
|
|
2407
2454
|
jobSearchStatus: string | null;
|
|
2408
2455
|
skills: string[];
|
|
@@ -438,12 +438,19 @@ interface components {
|
|
|
438
438
|
website: string | null;
|
|
439
439
|
/** @description URL of the company logo, or `null` if no logo is set. */
|
|
440
440
|
logoUrl: string | null;
|
|
441
|
-
/** @description
|
|
441
|
+
/** @description Plain-text card teaser: the operator-authored company summary when set, otherwise a derived teaser from the long-form description (HTML stripped, first sentence / word-boundary cut). `null` when neither yields anything. Prefer this over `description` for list/card renders. */
|
|
442
|
+
summary: string | null;
|
|
443
|
+
/**
|
|
444
|
+
* @deprecated
|
|
445
|
+
* @description Long-form description of the company (HTML), or `null` if not set. **Deprecated on list/search/similar responses** — prefer `summary` for card teasers. Still the full prose for detail pages (`GET …/companies/{slug}`).
|
|
446
|
+
*/
|
|
442
447
|
description: string | null;
|
|
443
448
|
/** @description Total number of public-facing jobs at this company. Currently mirrors `publishedJobCount`. */
|
|
444
449
|
jobCount: number;
|
|
445
450
|
/** @description Number of currently-published, non-expired jobs at this company. */
|
|
446
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;
|
|
447
454
|
links: components["schemas"]["PublicCompanyLinks"];
|
|
448
455
|
};
|
|
449
456
|
CompanyPublicDetail: components["schemas"]["CompanyPublic"] & {
|
|
@@ -510,6 +517,28 @@ interface components {
|
|
|
510
517
|
boardP75Max: number | null;
|
|
511
518
|
currency: string;
|
|
512
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
|
+
};
|
|
513
542
|
CompanySuggestion: {
|
|
514
543
|
/** @enum {string} */
|
|
515
544
|
object: "suggestion";
|
|
@@ -868,7 +897,7 @@ interface components {
|
|
|
868
897
|
*/
|
|
869
898
|
employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
|
|
870
899
|
/**
|
|
871
|
-
* @description Whether the role is on-site, hybrid, or fully remote.
|
|
900
|
+
* @description Whether the role is on-site, hybrid, or fully remote. **Never valid on its own:** `on_site` and `hybrid` require at least one `officeLocations` entry, and `remote` requires `remotePermits` (use `[{"type":"worldwide","value":"worldwide"}]` for anywhere; `remoteTimezones` then auto-derives on POST). Sending it alone returns `400`.
|
|
872
901
|
* @enum {string}
|
|
873
902
|
*/
|
|
874
903
|
remoteOption?: "on_site" | "hybrid" | "remote";
|
|
@@ -1113,7 +1142,7 @@ interface components {
|
|
|
1113
1142
|
*/
|
|
1114
1143
|
employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
|
|
1115
1144
|
/**
|
|
1116
|
-
* @description Whether the role is on-site, hybrid, or fully remote.
|
|
1145
|
+
* @description Whether the role is on-site, hybrid, or fully remote. **Never valid on its own:** `on_site` and `hybrid` require at least one `officeLocations` entry, and `remote` requires `remotePermits` (use `[{"type":"worldwide","value":"worldwide"}]` for anywhere; `remoteTimezones` then auto-derives on POST). Sending it alone returns `400`.
|
|
1117
1146
|
* @enum {string}
|
|
1118
1147
|
*/
|
|
1119
1148
|
remoteOption?: "on_site" | "hybrid" | "remote";
|
|
@@ -1665,7 +1694,17 @@ interface components {
|
|
|
1665
1694
|
name: string;
|
|
1666
1695
|
/** @description Board language (ISO code); defaults to "en". */
|
|
1667
1696
|
language: string;
|
|
1697
|
+
/** @description Absolute URL for the board logo, or null when unset. Operators set this under Settings → General (upload or logo generator); the website builder can manage it too. */
|
|
1668
1698
|
logoUrl: string | null;
|
|
1699
|
+
/** @description Absolute URLs for the favicon / app-icon pack derived from the board logo (null when a variant is unset). Brand identity next to `logoUrl` — build `<link rel="icon">` tags and the web-manifest icon list from these. Not SEO infra (`board.seo()`). */
|
|
1700
|
+
icons: {
|
|
1701
|
+
ico: string | null;
|
|
1702
|
+
svg: string | null;
|
|
1703
|
+
appleTouch: string | null;
|
|
1704
|
+
icon192: string | null;
|
|
1705
|
+
icon512: string | null;
|
|
1706
|
+
iconMaskable512: string | null;
|
|
1707
|
+
};
|
|
1669
1708
|
/** @description Active custom-domain hostname, or null. */
|
|
1670
1709
|
primaryDomain: string | null;
|
|
1671
1710
|
/** @description Whitelabel toggle (default `true`). Render the "Powered by Cavuno" badge unless `false`. */
|
|
@@ -1941,6 +1980,8 @@ interface components {
|
|
|
1941
1980
|
salaryCurrency: string | null;
|
|
1942
1981
|
salaryTimeframe: string | null;
|
|
1943
1982
|
isFeatured: boolean;
|
|
1983
|
+
/** @description Plain-text card teaser derived from the job description (HTML stripped, first sentence / word-boundary cut). `null` when there is nothing honest to show. Always present — independent of the `?fields=+description` opt-in for the long-form HTML body. Prefer this over requesting `+description` for list/card renders. */
|
|
1984
|
+
summary: string | null;
|
|
1944
1985
|
locationLabel: string | null;
|
|
1945
1986
|
/** @description Embedded company summary, or `null` if none is attached. */
|
|
1946
1987
|
company: {
|
|
@@ -2403,6 +2444,12 @@ interface components {
|
|
|
2403
2444
|
headline: string | null;
|
|
2404
2445
|
location: string | null;
|
|
2405
2446
|
avatarUrl: string | null;
|
|
2447
|
+
/** @description Plain-text card teaser derived from `bio` (HTML stripped, first sentence / word-boundary cut). `null` when there is nothing honest to show. Prefer this over `bio` for directory/card renders; cards still lead with `headline` when present. */
|
|
2448
|
+
summary: string | null;
|
|
2449
|
+
/**
|
|
2450
|
+
* @deprecated
|
|
2451
|
+
* @description Long-form candidate bio. **Deprecated on directory entries** — prefer `summary` for card teasers. Still the full prose on the talent profile detail (`GET …/talent/{handle}`).
|
|
2452
|
+
*/
|
|
2406
2453
|
bio: string | null;
|
|
2407
2454
|
jobSearchStatus: string | null;
|
|
2408
2455
|
skills: string[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as Schemas } from './_spec-
|
|
2
|
-
import { L as ListEnvelope, m as RelatedSearch } from './jobs-
|
|
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 {
|
|
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-
|
|
2
|
-
import { L as ListEnvelope, m as RelatedSearch } from './jobs-
|
|
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 {
|
|
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-
|
|
2
|
-
import { P as PublicJob } from './jobs-
|
|
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-
|
|
2
|
-
import { P as PublicJob } from './jobs-
|
|
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
|
package/dist/filters.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-
|
|
2
|
-
import './_spec-
|
|
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-
|
|
2
|
-
import './_spec-
|
|
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-
|
|
2
|
-
import { C as CustomFieldDefinition } from './board-
|
|
3
|
-
import { C as CustomFieldValues } from './jobs-
|
|
4
|
-
import './_spec-
|
|
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-
|
|
2
|
-
import { C as CustomFieldDefinition } from './board-
|
|
3
|
-
import { C as CustomFieldValues } from './jobs-
|
|
4
|
-
import './_spec-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
-
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, C as CustomFieldDefinition,
|
|
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-
|
|
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-
|
|
8
|
-
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-
|
|
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-
|
|
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.
|
|
145
|
+
declare const SDK_VERSION = "4.3.0";
|
|
146
146
|
|
|
147
147
|
type SavedJob = Schemas['SavedJob'];
|
|
148
148
|
type SavedJobsListQuery = {
|
|
@@ -679,10 +679,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
679
679
|
*/
|
|
680
680
|
client: BoardClient;
|
|
681
681
|
/**
|
|
682
|
-
* Board context — identity,
|
|
682
|
+
* Board context — identity, brand (`logoUrl` + favicon `icons`), language,
|
|
683
|
+
* features, and analytics.
|
|
683
684
|
*
|
|
684
685
|
* @example
|
|
685
|
-
* const { name, language } = await board.context();
|
|
686
|
+
* const { name, language, logoUrl, icons } = await board.context();
|
|
686
687
|
*/
|
|
687
688
|
context(options?: FetchOptions): Promise<{
|
|
688
689
|
object: "public_board";
|
|
@@ -691,6 +692,14 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
691
692
|
name: string;
|
|
692
693
|
language: string;
|
|
693
694
|
logoUrl: string | null;
|
|
695
|
+
icons: {
|
|
696
|
+
ico: string | null;
|
|
697
|
+
svg: string | null;
|
|
698
|
+
appleTouch: string | null;
|
|
699
|
+
icon192: string | null;
|
|
700
|
+
icon512: string | null;
|
|
701
|
+
iconMaskable512: string | null;
|
|
702
|
+
};
|
|
694
703
|
primaryDomain: string | null;
|
|
695
704
|
showCavunoBranding: boolean;
|
|
696
705
|
features: {
|
|
@@ -726,9 +735,9 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
726
735
|
};
|
|
727
736
|
}>;
|
|
728
737
|
/**
|
|
729
|
-
* Board SEO infra — `ads.txt`, IndexNow key, Google site-verification,
|
|
730
|
-
*
|
|
731
|
-
* `
|
|
738
|
+
* Board SEO infra tokens — `ads.txt`, IndexNow key, Google site-verification,
|
|
739
|
+
* canonical base URL, and `manifest.name`. Favicon / app-icon URLs are
|
|
740
|
+
* brand identity on `board.context()` (`logoUrl` + `icons`).
|
|
732
741
|
*
|
|
733
742
|
* @example
|
|
734
743
|
* const { adsTxt, canonicalBase } = await board.seo();
|
|
@@ -821,6 +830,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
821
830
|
salaryCurrency: string | null;
|
|
822
831
|
salaryTimeframe: string | null;
|
|
823
832
|
isFeatured: boolean;
|
|
833
|
+
summary: string | null;
|
|
824
834
|
locationLabel: string | null;
|
|
825
835
|
company: {
|
|
826
836
|
slug: string;
|
|
@@ -920,6 +930,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
920
930
|
salaryCurrency: string | null;
|
|
921
931
|
salaryTimeframe: string | null;
|
|
922
932
|
isFeatured: boolean;
|
|
933
|
+
summary: string | null;
|
|
923
934
|
locationLabel: string | null;
|
|
924
935
|
company: {
|
|
925
936
|
slug: string;
|
|
@@ -949,9 +960,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
949
960
|
slug: string;
|
|
950
961
|
website: string | null;
|
|
951
962
|
logoUrl: string | null;
|
|
963
|
+
summary: string | null;
|
|
952
964
|
description: string | null;
|
|
953
965
|
jobCount: number;
|
|
954
966
|
publishedJobCount: number;
|
|
967
|
+
salarySampleCount: number;
|
|
955
968
|
links: components["schemas"]["PublicCompanyLinks"];
|
|
956
969
|
} & {
|
|
957
970
|
markets: components["schemas"]["CompanyMarketRef"][];
|
|
@@ -963,9 +976,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
963
976
|
slug: string;
|
|
964
977
|
website: string | null;
|
|
965
978
|
logoUrl: string | null;
|
|
979
|
+
summary: string | null;
|
|
966
980
|
description: string | null;
|
|
967
981
|
jobCount: number;
|
|
968
982
|
publishedJobCount: number;
|
|
983
|
+
salarySampleCount: number;
|
|
969
984
|
links: components["schemas"]["PublicCompanyLinks"];
|
|
970
985
|
}>>;
|
|
971
986
|
listJobs(companySlug: string, query?: CompanyJobsListQuery, options?: FetchOptions): Promise<JobCardListEnvelope>;
|
|
@@ -976,9 +991,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
976
991
|
slug: string;
|
|
977
992
|
website: string | null;
|
|
978
993
|
logoUrl: string | null;
|
|
994
|
+
summary: string | null;
|
|
979
995
|
description: string | null;
|
|
980
996
|
jobCount: number;
|
|
981
997
|
publishedJobCount: number;
|
|
998
|
+
salarySampleCount: number;
|
|
982
999
|
links: components["schemas"]["PublicCompanyLinks"];
|
|
983
1000
|
}>>;
|
|
984
1001
|
markets: ((query?: CompanyMarketsListQuery, options?: FetchOptions) => Promise<ListEnvelope<{
|
|
@@ -1056,6 +1073,25 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
1056
1073
|
boardP75Max: number | null;
|
|
1057
1074
|
currency: string;
|
|
1058
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
|
+
}>;
|
|
1059
1095
|
category(companySlug: string, categorySlug: string, query?: SalaryDetailQuery, options?: FetchOptions): Promise<{
|
|
1060
1096
|
object: "company_category_salary";
|
|
1061
1097
|
categorySourceSlug: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { S as Schemas, c as components } from './_spec-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
-
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, C as CustomFieldDefinition,
|
|
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-
|
|
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-
|
|
8
|
-
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-
|
|
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-
|
|
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.
|
|
145
|
+
declare const SDK_VERSION = "4.3.0";
|
|
146
146
|
|
|
147
147
|
type SavedJob = Schemas['SavedJob'];
|
|
148
148
|
type SavedJobsListQuery = {
|
|
@@ -679,10 +679,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
679
679
|
*/
|
|
680
680
|
client: BoardClient;
|
|
681
681
|
/**
|
|
682
|
-
* Board context — identity,
|
|
682
|
+
* Board context — identity, brand (`logoUrl` + favicon `icons`), language,
|
|
683
|
+
* features, and analytics.
|
|
683
684
|
*
|
|
684
685
|
* @example
|
|
685
|
-
* const { name, language } = await board.context();
|
|
686
|
+
* const { name, language, logoUrl, icons } = await board.context();
|
|
686
687
|
*/
|
|
687
688
|
context(options?: FetchOptions): Promise<{
|
|
688
689
|
object: "public_board";
|
|
@@ -691,6 +692,14 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
691
692
|
name: string;
|
|
692
693
|
language: string;
|
|
693
694
|
logoUrl: string | null;
|
|
695
|
+
icons: {
|
|
696
|
+
ico: string | null;
|
|
697
|
+
svg: string | null;
|
|
698
|
+
appleTouch: string | null;
|
|
699
|
+
icon192: string | null;
|
|
700
|
+
icon512: string | null;
|
|
701
|
+
iconMaskable512: string | null;
|
|
702
|
+
};
|
|
694
703
|
primaryDomain: string | null;
|
|
695
704
|
showCavunoBranding: boolean;
|
|
696
705
|
features: {
|
|
@@ -726,9 +735,9 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
726
735
|
};
|
|
727
736
|
}>;
|
|
728
737
|
/**
|
|
729
|
-
* Board SEO infra — `ads.txt`, IndexNow key, Google site-verification,
|
|
730
|
-
*
|
|
731
|
-
* `
|
|
738
|
+
* Board SEO infra tokens — `ads.txt`, IndexNow key, Google site-verification,
|
|
739
|
+
* canonical base URL, and `manifest.name`. Favicon / app-icon URLs are
|
|
740
|
+
* brand identity on `board.context()` (`logoUrl` + `icons`).
|
|
732
741
|
*
|
|
733
742
|
* @example
|
|
734
743
|
* const { adsTxt, canonicalBase } = await board.seo();
|
|
@@ -821,6 +830,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
821
830
|
salaryCurrency: string | null;
|
|
822
831
|
salaryTimeframe: string | null;
|
|
823
832
|
isFeatured: boolean;
|
|
833
|
+
summary: string | null;
|
|
824
834
|
locationLabel: string | null;
|
|
825
835
|
company: {
|
|
826
836
|
slug: string;
|
|
@@ -920,6 +930,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
920
930
|
salaryCurrency: string | null;
|
|
921
931
|
salaryTimeframe: string | null;
|
|
922
932
|
isFeatured: boolean;
|
|
933
|
+
summary: string | null;
|
|
923
934
|
locationLabel: string | null;
|
|
924
935
|
company: {
|
|
925
936
|
slug: string;
|
|
@@ -949,9 +960,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
949
960
|
slug: string;
|
|
950
961
|
website: string | null;
|
|
951
962
|
logoUrl: string | null;
|
|
963
|
+
summary: string | null;
|
|
952
964
|
description: string | null;
|
|
953
965
|
jobCount: number;
|
|
954
966
|
publishedJobCount: number;
|
|
967
|
+
salarySampleCount: number;
|
|
955
968
|
links: components["schemas"]["PublicCompanyLinks"];
|
|
956
969
|
} & {
|
|
957
970
|
markets: components["schemas"]["CompanyMarketRef"][];
|
|
@@ -963,9 +976,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
963
976
|
slug: string;
|
|
964
977
|
website: string | null;
|
|
965
978
|
logoUrl: string | null;
|
|
979
|
+
summary: string | null;
|
|
966
980
|
description: string | null;
|
|
967
981
|
jobCount: number;
|
|
968
982
|
publishedJobCount: number;
|
|
983
|
+
salarySampleCount: number;
|
|
969
984
|
links: components["schemas"]["PublicCompanyLinks"];
|
|
970
985
|
}>>;
|
|
971
986
|
listJobs(companySlug: string, query?: CompanyJobsListQuery, options?: FetchOptions): Promise<JobCardListEnvelope>;
|
|
@@ -976,9 +991,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
976
991
|
slug: string;
|
|
977
992
|
website: string | null;
|
|
978
993
|
logoUrl: string | null;
|
|
994
|
+
summary: string | null;
|
|
979
995
|
description: string | null;
|
|
980
996
|
jobCount: number;
|
|
981
997
|
publishedJobCount: number;
|
|
998
|
+
salarySampleCount: number;
|
|
982
999
|
links: components["schemas"]["PublicCompanyLinks"];
|
|
983
1000
|
}>>;
|
|
984
1001
|
markets: ((query?: CompanyMarketsListQuery, options?: FetchOptions) => Promise<ListEnvelope<{
|
|
@@ -1056,6 +1073,25 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
1056
1073
|
boardP75Max: number | null;
|
|
1057
1074
|
currency: string;
|
|
1058
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
|
+
}>;
|
|
1059
1095
|
category(companySlug: string, categorySlug: string, query?: SalaryDetailQuery, options?: FetchOptions): Promise<{
|
|
1060
1096
|
object: "company_category_salary";
|
|
1061
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.
|
|
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)}`,
|
|
@@ -2840,18 +2846,19 @@ function createBoardClient(options) {
|
|
|
2840
2846
|
*/
|
|
2841
2847
|
client,
|
|
2842
2848
|
/**
|
|
2843
|
-
* Board context — identity,
|
|
2849
|
+
* Board context — identity, brand (`logoUrl` + favicon `icons`), language,
|
|
2850
|
+
* features, and analytics.
|
|
2844
2851
|
*
|
|
2845
2852
|
* @example
|
|
2846
|
-
* const { name, language } = await board.context();
|
|
2853
|
+
* const { name, language, logoUrl, icons } = await board.context();
|
|
2847
2854
|
*/
|
|
2848
2855
|
context(options2) {
|
|
2849
2856
|
return client.fetch("", options2);
|
|
2850
2857
|
},
|
|
2851
2858
|
/**
|
|
2852
|
-
* Board SEO infra — `ads.txt`, IndexNow key, Google site-verification,
|
|
2853
|
-
*
|
|
2854
|
-
* `
|
|
2859
|
+
* Board SEO infra tokens — `ads.txt`, IndexNow key, Google site-verification,
|
|
2860
|
+
* canonical base URL, and `manifest.name`. Favicon / app-icon URLs are
|
|
2861
|
+
* brand identity on `board.context()` (`logoUrl` + `icons`).
|
|
2855
2862
|
*
|
|
2856
2863
|
* @example
|
|
2857
2864
|
* const { adsTxt, canonicalBase } = await board.seo();
|
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.
|
|
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)}`,
|
|
@@ -2537,18 +2543,19 @@ function createBoardClient(options) {
|
|
|
2537
2543
|
*/
|
|
2538
2544
|
client,
|
|
2539
2545
|
/**
|
|
2540
|
-
* Board context — identity,
|
|
2546
|
+
* Board context — identity, brand (`logoUrl` + favicon `icons`), language,
|
|
2547
|
+
* features, and analytics.
|
|
2541
2548
|
*
|
|
2542
2549
|
* @example
|
|
2543
|
-
* const { name, language } = await board.context();
|
|
2550
|
+
* const { name, language, logoUrl, icons } = await board.context();
|
|
2544
2551
|
*/
|
|
2545
2552
|
context(options2) {
|
|
2546
2553
|
return client.fetch("", options2);
|
|
2547
2554
|
},
|
|
2548
2555
|
/**
|
|
2549
|
-
* Board SEO infra — `ads.txt`, IndexNow key, Google site-verification,
|
|
2550
|
-
*
|
|
2551
|
-
* `
|
|
2556
|
+
* Board SEO infra tokens — `ads.txt`, IndexNow key, Google site-verification,
|
|
2557
|
+
* canonical base URL, and `manifest.name`. Favicon / app-icon URLs are
|
|
2558
|
+
* brand identity on `board.context()` (`logoUrl` + `icons`).
|
|
2552
2559
|
*
|
|
2553
2560
|
* @example
|
|
2554
2561
|
* const { adsTxt, canonicalBase } = await board.seo();
|
package/dist/seo.d.mts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-
|
|
2
|
-
import { e as JsonLdObject } from './breadcrumbs-
|
|
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-
|
|
4
|
-
import './_spec-
|
|
5
|
-
import './board-
|
|
6
|
-
import './jobs-
|
|
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-
|
|
2
|
-
import { e as JsonLdObject } from './breadcrumbs-
|
|
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-
|
|
4
|
-
import './_spec-
|
|
5
|
-
import './board-
|
|
6
|
-
import './jobs-
|
|
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-
|
|
3
|
-
import './search-
|
|
4
|
-
import './board-
|
|
5
|
-
import './jobs-
|
|
6
|
-
import './blog-
|
|
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-
|
|
3
|
-
import './search-
|
|
4
|
-
import './board-
|
|
5
|
-
import './jobs-
|
|
6
|
-
import './blog-
|
|
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
|
package/dist/sitemap.d.mts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { BoardSdk } from './index.mjs';
|
|
2
|
-
import './_spec-
|
|
3
|
-
import './search-
|
|
4
|
-
import './board-
|
|
5
|
-
import './jobs-
|
|
6
|
-
import './blog-
|
|
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-
|
|
3
|
-
import './search-
|
|
4
|
-
import './board-
|
|
5
|
-
import './jobs-
|
|
6
|
-
import './blog-
|
|
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
|
package/dist/suggest.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-
|
|
2
|
-
import './_spec-
|
|
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-
|
|
2
|
-
import './_spec-
|
|
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
|
@@ -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`.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
|
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
|
|
|
@@ -19,6 +19,18 @@ Read the matching reference completely before implementing that page:
|
|
|
19
19
|
|
|
20
20
|
For a page that combines branches, read every matching reference.
|
|
21
21
|
|
|
22
|
+
## Favicons and board logo
|
|
23
|
+
|
|
24
|
+
Brand identity — not SEO builders. Read them from `board.context()`:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
const { logoUrl, icons } = await board.context();
|
|
28
|
+
// logoUrl — board logo
|
|
29
|
+
// icons.ico / .svg / .appleTouch / .icon192 / .icon512 / .iconMaskable512
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`board.seo()` is infra tokens only (ads, IndexNow, verification, canonical base, optional `manifest.name`).
|
|
33
|
+
|
|
22
34
|
Sitemaps and robots.txt use `cavuno-board-sitemap`. The host app owns OG-image
|
|
23
35
|
generation and its route map. `listingHead` receives app-owned title and
|
|
24
36
|
meta description copy; the SDK never composes those sentences or joins
|
package/skills/manifest.json
CHANGED