@cavuno/board 4.13.0 → 4.15.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.
Files changed (38) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/{_spec-mFq9K67X.d.mts → _spec-DdWB8z1Z.d.mts} +60 -0
  3. package/dist/{_spec-mFq9K67X.d.ts → _spec-DdWB8z1Z.d.ts} +60 -0
  4. package/dist/{blog-BJF7uypj.d.ts → blog-B7xorPBw.d.ts} +1 -1
  5. package/dist/{blog-ClPGMp-z.d.mts → blog-DopIQsKV.d.mts} +1 -1
  6. package/dist/{board-Po58Sn65.d.ts → board-Bpnqn4Rg.d.ts} +2 -2
  7. package/dist/{board-CkYDc1Lz.d.mts → board-CkgTW4cC.d.mts} +2 -2
  8. package/dist/{breadcrumbs-BSP53mOY.d.mts → breadcrumbs-CAppxMoS.d.mts} +2 -2
  9. package/dist/{breadcrumbs-BZzQwS8O.d.ts → breadcrumbs-DelEqbSz.d.ts} +2 -2
  10. package/dist/browser/cavuno-board.global.min.js +1 -1
  11. package/dist/{chunk-XEJWXRLK.mjs → chunk-W73BOGOQ.mjs} +4 -0
  12. package/dist/filters.d.mts +2 -2
  13. package/dist/filters.d.ts +2 -2
  14. package/dist/format.d.mts +4 -4
  15. package/dist/format.d.ts +4 -4
  16. package/dist/index.d.mts +117 -13
  17. package/dist/index.d.ts +117 -13
  18. package/dist/index.js +145 -1
  19. package/dist/index.mjs +142 -2
  20. package/dist/{jobs-hZ3Kezhg.d.ts → jobs-CExc4QdI.d.ts} +1 -1
  21. package/dist/{jobs-BWpm-Jf0.d.mts → jobs-Dq0TTcRf.d.mts} +1 -1
  22. package/dist/{search-DSLK6Cch.d.ts → search-CZOec95V.d.ts} +1 -1
  23. package/dist/{search-DRIGekdi.d.mts → search-D6hau3d4.d.mts} +1 -1
  24. package/dist/{seo-CMNJMZcT.d.ts → seo-C1hFa0-v.d.ts} +1 -1
  25. package/dist/{seo-D9wvr1nK.d.mts → seo-CJSwd_ss.d.mts} +1 -1
  26. package/dist/seo-files.d.mts +2 -2
  27. package/dist/seo-files.d.ts +2 -2
  28. package/dist/seo.d.mts +6 -6
  29. package/dist/seo.d.ts +6 -6
  30. package/dist/server.d.mts +6 -6
  31. package/dist/server.d.ts +6 -6
  32. package/dist/server.mjs +1 -1
  33. package/dist/sitemap.d.mts +6 -6
  34. package/dist/sitemap.d.ts +6 -6
  35. package/dist/suggest.d.mts +2 -2
  36. package/dist/suggest.d.ts +2 -2
  37. package/package.json +1 -1
  38. 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.15.0 — 2026-08-30
7
+
8
+ - **LinkedIn conversion IDs on `board.context().analytics`**: five nullable
9
+ Campaign Manager conversion IDs for direct Insight Tag installs (without
10
+ GTM): `linkedInConversionSignUpId`, `linkedInConversionLoginId`,
11
+ `linkedInConversionApplyClickId`, `linkedInConversionApplySubmitId`,
12
+ `linkedInConversionJobAlertSubscribeId`. Use with `linkedInPartnerId` to
13
+ fire `lintrk('track', { conversion_id })` for the same moments as the
14
+ hosted board. Leave null when LinkedIn conversions are fired only via GTM.
15
+ Meta still needs only `metaPixelId`; GTM still needs only `gtmId`.
16
+
17
+ ## 4.14.0 — 2026-08-29
18
+
19
+ - **Talent lists**: `board.me.companies.talentLists` (`list` / `create` /
20
+ `update` / `remove`). Company-owned saved predicates over the talent
21
+ directory. `filters` reuse the frozen `/talent` query (`q`, `skill`,
22
+ `jobSearchStatus`, `languages`, `openToRelocate`, `place`, `sort`,
23
+ `seniority`, `permitCountry`, `interestedRole`). Optional `job` binds a
24
+ list to one company job; pass `job: null` on update to unbind. Approved
25
+ members share the same lists.
26
+ - **Sourced candidates**: `board.me.companies.sourcedCandidates` (`list` /
27
+ `add` / `remove` / `convert`). Per-job membership rail. Saving a candidate
28
+ always writes here. `convert` creates a pipeline application with source
29
+ `sourced` (hidden from the candidate until they apply themselves).
30
+ `stage: 'applied'` aliases to `review`. A board without a native pipeline
31
+ raises `sourced_convert_unavailable` (409). `add` is idempotent
32
+ (`created: false` on a second save).
33
+ - **Error codes**: `talent_list_not_found`, `sourced_candidate_not_found`,
34
+ and `sourced_convert_unavailable` join `BOARD_API_ERROR_CODES`.
35
+ - **`board.auth.verifyWorkEmail({ token })`**: confirm an employer
36
+ work-email token without a session (`POST /auth/verify-work-email`).
37
+ `board.me.companies.workEmail.confirm(slug, { token })` is deprecated —
38
+ `slug` is ignored; the token alone identifies the membership.
39
+ - **OAuth employer sign-up**: `getOAuthAuthorizationUrl(provider, { role:
40
+ 'employer' })` creates an employer profile for a new user. The role is
41
+ fixed at authorize time and cannot be changed on the callback. Defaults
42
+ to `candidate`.
43
+
6
44
  ## 4.13.0 — 2026-08-28
7
45
 
8
46
  - **`board.context().contact.legalName`**: the operating company's registered
@@ -63,6 +63,10 @@ interface components {
63
63
  /** @description The note text. */
64
64
  body: string;
65
65
  };
66
+ AddSourcedCandidateBody: {
67
+ job: string;
68
+ candidateBoardUserId: string;
69
+ };
66
70
  Alert: {
67
71
  /** @description Job-alert preference ID. Also the path key. */
68
72
  id: string;
@@ -674,6 +678,9 @@ interface components {
674
678
  object: "conversation_ref";
675
679
  conversationId: string | null;
676
680
  };
681
+ ConvertSourcedCandidateBody: {
682
+ stage: string;
683
+ };
677
684
  CreateApplyApprovalBody: {
678
685
  sessionKey: string;
679
686
  };
@@ -819,6 +826,11 @@ interface components {
819
826
  /** @description The stage label. */
820
827
  label: string;
821
828
  };
829
+ CreateTalentListBody: {
830
+ name: string;
831
+ filters?: components["schemas"]["TalentListFilters"];
832
+ job?: string;
833
+ };
822
834
  CustomFieldDefinition: {
823
835
  /** @description Immutable per-board slug used as the key in a job’s `customFieldValues`. */
824
836
  key: string;
@@ -1834,6 +1846,16 @@ interface components {
1834
1846
  gtmId: string | null;
1835
1847
  metaPixelId: string | null;
1836
1848
  linkedInPartnerId: string | null;
1849
+ /** @description LinkedIn Campaign Manager conversion ID for account creation (`sign_up`). Null when unset. Used with a direct Insight Tag install (`linkedInPartnerId`); leave null when LinkedIn conversions are fired only via GTM. */
1850
+ linkedInConversionSignUpId: string | null;
1851
+ /** @description LinkedIn Campaign Manager conversion ID for successful sign-in (`login`). Null when unset. */
1852
+ linkedInConversionLoginId: string | null;
1853
+ /** @description LinkedIn Campaign Manager conversion ID for opening the apply flow (`apply_click`). Null when unset. */
1854
+ linkedInConversionApplyClickId: string | null;
1855
+ /** @description LinkedIn Campaign Manager conversion ID for a successful native application (`apply_submit`). Null when unset. */
1856
+ linkedInConversionApplySubmitId: string | null;
1857
+ /** @description LinkedIn Campaign Manager conversion ID for job-alert subscription (`job_alert_subscribe`). Null when unset. */
1858
+ linkedInConversionJobAlertSubscribeId: string | null;
1837
1859
  cookieConsentRequired: boolean;
1838
1860
  };
1839
1861
  /** @description Public AdSense switch + publisher id from board advertising settings. Not the slot map (Puck/Cavuno placements) and not `ads.txt` (`board.seo()`). */
@@ -2560,6 +2582,14 @@ interface components {
2560
2582
  boardMedianMax: number | null;
2561
2583
  currency: string;
2562
2584
  };
2585
+ SourcedCandidate: {
2586
+ id: string;
2587
+ /** @enum {string} */
2588
+ object: "sourced_candidate";
2589
+ candidate: components["schemas"]["TalentDirectoryEntry"];
2590
+ sourcedAt: number;
2591
+ sourcedBy: string;
2592
+ };
2563
2593
  StartAboutApplicationBody: {
2564
2594
  applicationId: string;
2565
2595
  body: string;
@@ -2674,6 +2704,31 @@ interface components {
2674
2704
  endDate: string | null;
2675
2705
  }[];
2676
2706
  };
2707
+ TalentList: {
2708
+ id: string;
2709
+ /** @enum {string} */
2710
+ object: "talent_list";
2711
+ name: string;
2712
+ filters: components["schemas"]["TalentListFilters"];
2713
+ jobId: string | null;
2714
+ createdBy: string;
2715
+ createdAt: number;
2716
+ updatedAt: number;
2717
+ };
2718
+ TalentListFilters: {
2719
+ q?: string;
2720
+ skill?: string;
2721
+ /** @enum {string} */
2722
+ jobSearchStatus?: "actively_looking" | "open_to_offers" | "not_looking";
2723
+ languages?: string[];
2724
+ openToRelocate?: boolean;
2725
+ place?: string;
2726
+ /** @enum {string} */
2727
+ sort?: "relevance" | "newest";
2728
+ seniority?: string;
2729
+ permitCountry?: string;
2730
+ interestedRole?: string;
2731
+ };
2677
2732
  TalentProfile: {
2678
2733
  /** @enum {string} */
2679
2734
  object: "talent_profile";
@@ -3017,6 +3072,11 @@ interface components {
3017
3072
  UpdateSkillsBody: {
3018
3073
  skills: string[];
3019
3074
  };
3075
+ UpdateTalentListBody: {
3076
+ name?: string;
3077
+ filters?: components["schemas"]["TalentListFilters"];
3078
+ job?: string | unknown;
3079
+ };
3020
3080
  VerifyEmailOtpBody: {
3021
3081
  code: string;
3022
3082
  };
@@ -63,6 +63,10 @@ interface components {
63
63
  /** @description The note text. */
64
64
  body: string;
65
65
  };
66
+ AddSourcedCandidateBody: {
67
+ job: string;
68
+ candidateBoardUserId: string;
69
+ };
66
70
  Alert: {
67
71
  /** @description Job-alert preference ID. Also the path key. */
68
72
  id: string;
@@ -674,6 +678,9 @@ interface components {
674
678
  object: "conversation_ref";
675
679
  conversationId: string | null;
676
680
  };
681
+ ConvertSourcedCandidateBody: {
682
+ stage: string;
683
+ };
677
684
  CreateApplyApprovalBody: {
678
685
  sessionKey: string;
679
686
  };
@@ -819,6 +826,11 @@ interface components {
819
826
  /** @description The stage label. */
820
827
  label: string;
821
828
  };
829
+ CreateTalentListBody: {
830
+ name: string;
831
+ filters?: components["schemas"]["TalentListFilters"];
832
+ job?: string;
833
+ };
822
834
  CustomFieldDefinition: {
823
835
  /** @description Immutable per-board slug used as the key in a job’s `customFieldValues`. */
824
836
  key: string;
@@ -1834,6 +1846,16 @@ interface components {
1834
1846
  gtmId: string | null;
1835
1847
  metaPixelId: string | null;
1836
1848
  linkedInPartnerId: string | null;
1849
+ /** @description LinkedIn Campaign Manager conversion ID for account creation (`sign_up`). Null when unset. Used with a direct Insight Tag install (`linkedInPartnerId`); leave null when LinkedIn conversions are fired only via GTM. */
1850
+ linkedInConversionSignUpId: string | null;
1851
+ /** @description LinkedIn Campaign Manager conversion ID for successful sign-in (`login`). Null when unset. */
1852
+ linkedInConversionLoginId: string | null;
1853
+ /** @description LinkedIn Campaign Manager conversion ID for opening the apply flow (`apply_click`). Null when unset. */
1854
+ linkedInConversionApplyClickId: string | null;
1855
+ /** @description LinkedIn Campaign Manager conversion ID for a successful native application (`apply_submit`). Null when unset. */
1856
+ linkedInConversionApplySubmitId: string | null;
1857
+ /** @description LinkedIn Campaign Manager conversion ID for job-alert subscription (`job_alert_subscribe`). Null when unset. */
1858
+ linkedInConversionJobAlertSubscribeId: string | null;
1837
1859
  cookieConsentRequired: boolean;
1838
1860
  };
1839
1861
  /** @description Public AdSense switch + publisher id from board advertising settings. Not the slot map (Puck/Cavuno placements) and not `ads.txt` (`board.seo()`). */
@@ -2560,6 +2582,14 @@ interface components {
2560
2582
  boardMedianMax: number | null;
2561
2583
  currency: string;
2562
2584
  };
2585
+ SourcedCandidate: {
2586
+ id: string;
2587
+ /** @enum {string} */
2588
+ object: "sourced_candidate";
2589
+ candidate: components["schemas"]["TalentDirectoryEntry"];
2590
+ sourcedAt: number;
2591
+ sourcedBy: string;
2592
+ };
2563
2593
  StartAboutApplicationBody: {
2564
2594
  applicationId: string;
2565
2595
  body: string;
@@ -2674,6 +2704,31 @@ interface components {
2674
2704
  endDate: string | null;
2675
2705
  }[];
2676
2706
  };
2707
+ TalentList: {
2708
+ id: string;
2709
+ /** @enum {string} */
2710
+ object: "talent_list";
2711
+ name: string;
2712
+ filters: components["schemas"]["TalentListFilters"];
2713
+ jobId: string | null;
2714
+ createdBy: string;
2715
+ createdAt: number;
2716
+ updatedAt: number;
2717
+ };
2718
+ TalentListFilters: {
2719
+ q?: string;
2720
+ skill?: string;
2721
+ /** @enum {string} */
2722
+ jobSearchStatus?: "actively_looking" | "open_to_offers" | "not_looking";
2723
+ languages?: string[];
2724
+ openToRelocate?: boolean;
2725
+ place?: string;
2726
+ /** @enum {string} */
2727
+ sort?: "relevance" | "newest";
2728
+ seniority?: string;
2729
+ permitCountry?: string;
2730
+ interestedRole?: string;
2731
+ };
2677
2732
  TalentProfile: {
2678
2733
  /** @enum {string} */
2679
2734
  object: "talent_profile";
@@ -3017,6 +3072,11 @@ interface components {
3017
3072
  UpdateSkillsBody: {
3018
3073
  skills: string[];
3019
3074
  };
3075
+ UpdateTalentListBody: {
3076
+ name?: string;
3077
+ filters?: components["schemas"]["TalentListFilters"];
3078
+ job?: string | unknown;
3079
+ };
3020
3080
  VerifyEmailOtpBody: {
3021
3081
  code: string;
3022
3082
  };
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-mFq9K67X.js';
1
+ import { S as Schemas } from './_spec-DdWB8z1Z.js';
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-mFq9K67X.mjs';
1
+ import { S as Schemas } from './_spec-DdWB8z1Z.mjs';
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-mFq9K67X.js';
2
- import { L as ListEnvelope, m as RelatedSearch } from './jobs-hZ3Kezhg.js';
1
+ import { S as Schemas } from './_spec-DdWB8z1Z.js';
2
+ import { L as ListEnvelope, m as RelatedSearch } from './jobs-CExc4QdI.js';
3
3
 
4
4
  type PublicCompany = Schemas['CompanyPublic'];
5
5
  /** A market (sector) a company operates in — name + its source slug. */
@@ -1,5 +1,5 @@
1
- import { S as Schemas } from './_spec-mFq9K67X.mjs';
2
- import { L as ListEnvelope, m as RelatedSearch } from './jobs-BWpm-Jf0.mjs';
1
+ import { S as Schemas } from './_spec-DdWB8z1Z.mjs';
2
+ import { L as ListEnvelope, m as RelatedSearch } from './jobs-Dq0TTcRf.mjs';
3
3
 
4
4
  type PublicCompany = Schemas['CompanyPublic'];
5
5
  /** A market (sector) a company operates in — name + its source slug. */
@@ -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-CkYDc1Lz.mjs';
2
- import { P as PublicJob } from './jobs-BWpm-Jf0.mjs';
1
+ import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-CkgTW4cC.mjs';
2
+ import { P as PublicJob } from './jobs-Dq0TTcRf.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-Po58Sn65.js';
2
- import { P as PublicJob } from './jobs-hZ3Kezhg.js';
1
+ import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-Bpnqn4Rg.js';
2
+ import { P as PublicJob } from './jobs-CExc4QdI.js';
3
3
 
4
4
  /**
5
5
  * Wire enum for `salaryTimeframe`. Defined here (not re-exported from any