@cavuno/board 4.8.0 → 4.10.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 (49) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/{_spec-DePC7a05.d.mts → _spec-BwUP7Wni.d.mts} +100 -1
  3. package/dist/{_spec-DePC7a05.d.ts → _spec-BwUP7Wni.d.ts} +100 -1
  4. package/dist/bin.mjs +174 -19
  5. package/dist/{blog-DbFr4VPW.d.mts → blog-C_xXYOxc.d.mts} +1 -1
  6. package/dist/{blog-ummlt6Uq.d.ts → blog-DC4BfQqF.d.ts} +1 -1
  7. package/dist/{board-zWyHbyi4.d.ts → board-CG8rDGTY.d.mts} +5 -3
  8. package/dist/{board-DxTMBgIf.d.mts → board-zdQ875ck.d.ts} +5 -3
  9. package/dist/{breadcrumbs-P4qh0zML.d.mts → breadcrumbs-BK7AqNp2.d.mts} +2 -2
  10. package/dist/{breadcrumbs-kbmspmfk.d.ts → breadcrumbs-qs9DC0yh.d.ts} +2 -2
  11. package/dist/browser/cavuno-board.global.min.js +1 -1
  12. package/dist/{chunk-IWWPHFK2.mjs → chunk-XEJWXRLK.mjs} +10 -0
  13. package/dist/doctor.d.mts +3 -1
  14. package/dist/doctor.d.ts +3 -1
  15. package/dist/doctor.js +169 -17
  16. package/dist/doctor.mjs +169 -17
  17. package/dist/filters.d.mts +2 -2
  18. package/dist/filters.d.ts +2 -2
  19. package/dist/format.d.mts +4 -4
  20. package/dist/format.d.ts +4 -4
  21. package/dist/index.d.mts +118 -24
  22. package/dist/index.d.ts +118 -24
  23. package/dist/index.js +127 -9
  24. package/dist/index.mjs +118 -10
  25. package/dist/{jobs-twt5TO9l.d.ts → jobs-B-uO7ffG.d.ts} +1 -1
  26. package/dist/{jobs-DTLDt57G.d.mts → jobs-BToqhRuU.d.mts} +1 -1
  27. package/dist/{search-f2UNlTfv.d.mts → search-CvwKD0Va.d.mts} +1 -1
  28. package/dist/{search-CHD6peIl.d.ts → search-Sl9-xi1z.d.ts} +1 -1
  29. package/dist/seo-B9b2AkSE.d.mts +12 -0
  30. package/dist/seo-D1Vc_0HF.d.ts +12 -0
  31. package/dist/seo-files.d.mts +36 -0
  32. package/dist/seo-files.d.ts +36 -0
  33. package/dist/seo-files.js +102 -0
  34. package/dist/seo-files.mjs +81 -0
  35. package/dist/seo.d.mts +6 -6
  36. package/dist/seo.d.ts +6 -6
  37. package/dist/server.d.mts +6 -5
  38. package/dist/server.d.ts +6 -5
  39. package/dist/server.mjs +1 -1
  40. package/dist/sitemap.d.mts +6 -5
  41. package/dist/sitemap.d.ts +6 -5
  42. package/dist/suggest.d.mts +2 -2
  43. package/dist/suggest.d.ts +2 -2
  44. package/package.json +11 -1
  45. package/skills/cavuno-board-account/SKILL.md +3 -1
  46. package/skills/cavuno-board-filters/SKILL.md +17 -3
  47. package/skills/cavuno-board-setup/SKILL.md +1 -0
  48. package/skills/cavuno-board-talent-access/SKILL.md +149 -0
  49. package/skills/manifest.json +8 -1
package/dist/index.d.ts CHANGED
@@ -1,12 +1,13 @@
1
- import { S as Schemas, c as components } from './_spec-DePC7a05.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-CHD6peIl.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-CHD6peIl.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-zWyHbyi4.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-zWyHbyi4.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-twt5TO9l.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-twt5TO9l.js';
8
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-ummlt6Uq.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-ummlt6Uq.js';
1
+ import { S as Schemas, c as components } from './_spec-BwUP7Wni.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-Sl9-xi1z.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-Sl9-xi1z.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-zdQ875ck.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 PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-zdQ875ck.js';
6
+ export { B as BoardSeo } from './seo-D1Vc_0HF.js';
7
+ 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-B-uO7ffG.js';
8
+ 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-B-uO7ffG.js';
9
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-DC4BfQqF.js';
10
+ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-DC4BfQqF.js';
10
11
 
11
12
  /**
12
13
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -19,7 +20,7 @@ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts,
19
20
  * `unknown_error` is SDK-synthesized when a response carries no parseable
20
21
  * envelope.
21
22
  */
22
- declare const BOARD_API_ERROR_CODES: readonly ["internal_error", "validation_bad_request", "validation_payload_too_large", "rate_limited", "rate_limit_unavailable", "search_unavailable", "too_many_filter_values", "pagination_invalid_cursor", "pagination_offset_too_large", "auth_unauthenticated", "auth_forbidden", "plan_upgrade_required", "unknown_error", "boards_not_found", "board_page_not_found", "board_auth_email_taken", "board_auth_invalid_credentials", "board_auth_invalid_token", "board_auth_registration_disabled", "board_auth_token_expired", "invalid_current_password", "no_password", "same_email", "email_taken", "invalid_token", "board_password_required", "board_password_invalid", "jobs_not_found", "jobs_invalid_filter", "categories_not_found", "skills_not_found", "places_not_found", "companies_not_found", "company_markets_not_found", "company_salary_not_found", "company_category_salary_not_found", "salaries_title_not_found", "salaries_skill_not_found", "salaries_location_not_found", "salaries_title_location_not_found", "salaries_skill_location_not_found", "blog_post_not_found", "blog_author_not_found", "blog_tag_not_found", "talent_not_found", "talent_directory_not_found", "talent_directory_restricted", "job_alert_not_found", "job_alerts_disabled", "candidate_alert_limit_reached", "candidate_alert_not_found", "candidate_entry_not_found", "candidate_handle_taken", "candidate_job_not_found", "resume_invalid_file", "resume_upload_forbidden", "applications_external_apply_only", "applications_country_not_allowed", "applications_guest_not_allowed", "applications_job_not_found", "applications_not_found", "applications_resume_invalid_file", "applications_unprocessable", "messaging_application_not_found", "messaging_application_not_linked", "messaging_blocked", "messaging_cannot_block_self", "messaging_cold_rule", "messaging_conversation_not_found", "messaging_disabled", "messaging_edit_window_expired", "messaging_message_deleted", "messaging_message_not_found", "messaging_not_author", "messaging_not_participant", "messaging_not_permitted", "messaging_not_recipient", "messaging_rate_limited", "messaging_recipient_not_found", "messaging_recipient_not_open", "messaging_unsend_window_expired", "employer_applicant_not_found", "employer_ats_unprocessable", "employer_checkout_failed", "employer_company_exists", "employer_company_name_taken", "employer_company_not_found", "employer_job_not_found", "employer_job_slug_taken", "employer_jobs_quota_exceeded", "employer_not_member", "employer_payment_required", "employer_pipeline_stage_not_found", "employer_member_not_found", "employer_invite_not_found", "not_company_admin", "not_company_member", "company_deletion_disabled", "last_admin", "already_member", "already_invited", "invalid_email", "invite_email_mismatch", "candidate_role", "job_not_published", "paywall_already_active", "paywall_disabled", "paywall_invalid_checkout_session", "paywall_no_candidate_profile", "paywall_no_recurring_subscription", "paywall_offer_not_found", "job_posting_logo_lookup_unavailable", "job_posting_logo_not_found", "job_posting_rejected"];
23
+ declare const BOARD_API_ERROR_CODES: readonly ["internal_error", "validation_bad_request", "validation_payload_too_large", "rate_limited", "rate_limit_unavailable", "search_unavailable", "too_many_filter_values", "pagination_invalid_cursor", "pagination_offset_too_large", "auth_unauthenticated", "auth_forbidden", "plan_upgrade_required", "unknown_error", "boards_not_found", "board_page_not_found", "board_auth_email_taken", "board_auth_invalid_credentials", "board_auth_invalid_token", "board_auth_registration_disabled", "board_auth_token_expired", "invalid_current_password", "no_password", "same_email", "email_taken", "invalid_token", "board_password_required", "board_password_invalid", "jobs_not_found", "jobs_invalid_filter", "categories_not_found", "skills_not_found", "places_not_found", "companies_not_found", "company_markets_not_found", "company_salary_not_found", "company_category_salary_not_found", "salaries_title_not_found", "salaries_skill_not_found", "salaries_location_not_found", "salaries_title_location_not_found", "salaries_skill_location_not_found", "blog_post_not_found", "blog_author_not_found", "blog_tag_not_found", "talent_not_found", "talent_directory_not_found", "talent_directory_restricted", "job_recommendations_not_found", "recommended_talent_not_found", "job_alert_not_found", "job_alerts_disabled", "candidate_alert_limit_reached", "candidate_alert_not_found", "candidate_entry_not_found", "candidate_handle_taken", "candidate_job_not_found", "candidate_notification_preference_paused", "resume_invalid_file", "resume_upload_forbidden", "applications_external_apply_only", "applications_country_not_allowed", "applications_guest_not_allowed", "applications_job_not_found", "applications_not_found", "applications_resume_invalid_file", "applications_unprocessable", "messaging_application_not_found", "messaging_application_not_linked", "messaging_blocked", "messaging_cannot_block_self", "messaging_cold_rule", "messaging_conversation_not_found", "messaging_disabled", "messaging_edit_window_expired", "messaging_message_deleted", "messaging_message_not_found", "messaging_not_author", "messaging_not_participant", "messaging_not_permitted", "messaging_not_recipient", "messaging_rate_limited", "messaging_recipient_not_found", "messaging_recipient_not_open", "messaging_unsend_window_expired", "employer_applicant_not_found", "employer_ats_unprocessable", "employer_checkout_failed", "employer_company_exists", "employer_company_name_taken", "employer_company_not_found", "employer_job_not_found", "employer_job_slug_taken", "employer_jobs_quota_exceeded", "employer_not_member", "employer_payment_required", "employer_pipeline_stage_not_found", "employer_member_not_found", "employer_invite_not_found", "not_company_admin", "not_company_member", "company_deletion_disabled", "last_admin", "already_member", "already_invited", "invalid_email", "invite_email_mismatch", "candidate_role", "job_not_published", "paywall_already_active", "paywall_disabled", "paywall_invalid_checkout_session", "paywall_no_candidate_profile", "paywall_no_recurring_subscription", "paywall_offer_not_found", "talent_access_unavailable", "company_required", "already_on_plan", "talent_access_required", "messaging_talent_access_required", "stripe_not_connected", "job_posting_logo_lookup_unavailable", "job_posting_logo_not_found", "job_posting_rejected"];
23
24
  /**
24
25
  * The known code set plus open string — new codes ship additively within v1,
25
26
  * so exhaustive narrowing is intentionally impossible.
@@ -142,7 +143,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
142
143
  * constant because the package is platform-neutral and cannot read
143
144
  * package.json at runtime.
144
145
  */
145
- declare const SDK_VERSION = "4.8.0";
146
+ declare const SDK_VERSION = "4.10.0";
146
147
 
147
148
  type SavedJob = Schemas['SavedJob'];
148
149
  type SavedJobsListQuery = {
@@ -305,9 +306,32 @@ type AcceptCompanyMemberInviteBody = Schemas['AcceptCompanyMemberInviteBody'];
305
306
  /**
306
307
  * The viewer's per-employer talent entitlement from
307
308
  * `board.me.talentAccess.retrieve` — the talent-CTA signal (sourced from the
308
- * same subscription/credit-pack truth the talent paywall enforces).
309
+ * same subscription/credit-pack truth the talent paywall enforces), plus
310
+ * charging model and remaining unlock/message credits.
309
311
  */
310
312
  type TalentAccess = Schemas['TalentAccess'];
313
+ /** Per-candidate unlock/credit gate from `board.me.talentAccess.retrieveCandidate`. */
314
+ type TalentCandidateAccess = Schemas['TalentCandidateAccess'];
315
+ /** Body for `board.me.talentAccess.checkout`. */
316
+ type TalentAccessCheckoutBody = Schemas['TalentAccessCheckoutBody'];
317
+ /**
318
+ * Connected-account mount kit from `board.me.talentAccess.checkout` — same
319
+ * generated schema as candidate-access checkout (`origin: talent_access`).
320
+ */
321
+ type TalentAccessCheckoutSession = Schemas['AccessCheckoutSession'];
322
+ /** Polled state of a talent-access checkout session (`board.me.talentAccess.retrieveCheckout`). */
323
+ type TalentAccessCheckoutSessionState = Schemas['AccessCheckoutSessionState'];
324
+ /** Result of `board.me.talentAccess.unlock`. */
325
+ type TalentUnlock = Schemas['TalentUnlock'];
326
+ /** Body for `board.me.talentAccess.unlock`. */
327
+ type TalentUnlockBody = Schemas['TalentUnlockBody'];
328
+ /** Body for `board.me.talentAccess.upgrade`. */
329
+ type TalentAccessUpgradeBody = Schemas['TalentAccessUpgradeBody'];
330
+ /**
331
+ * Acknowledgement from `board.me.talentAccess.upgrade` — entitlement (new
332
+ * credit counters) lands via webhook; re-read `me.talentAccess.retrieve`.
333
+ */
334
+ type TalentAccessUpgrade = Schemas['TalentUpgrade'];
311
335
  /** Query for `board.me.companies.search`. */
312
336
  type EmployerCompanySearchQuery = {
313
337
  q: string;
@@ -388,6 +412,10 @@ type EmployerBillingOption = Schemas['EmployerBillingOption'];
388
412
  /** The result of `board.me.companies.jobs.checkout`. */
389
413
  type EmployerCheckout = Schemas['EmployerCheckout'];
390
414
  type EmployerCheckoutBody = Schemas['EmployerCheckoutBody'];
415
+ /** Optional body for `board.me.companies.billingPortal.create`. */
416
+ type CompanyBillingPortalBody = Schemas['CompanyBillingPortalBody'];
417
+ /** A minted company Stripe Customer Portal session (job posting + talent access). */
418
+ type CompanyBillingPortalSession = Schemas['CompanyBillingPortalSession'];
391
419
 
392
420
  /**
393
421
  * Pure derivations for a message thread — kept out of
@@ -468,15 +496,6 @@ type OAuthAuthorizationQuery = {
468
496
  type OAuthAuthorizationUrl = Schemas['BoardAuthOAuthAuthorizationUrl'];
469
497
  type OAuthExchangeBody = Schemas['BoardAuthOAuthExchangeBody'];
470
498
 
471
- /**
472
- * The public SEO-infra payload (`board.seo()`) — platform infrastructure a
473
- * headless frontend rebuilds `robots.txt` / `ads.txt` / `indexnow-key.txt`
474
- * (+ the Google site-verification `<meta>`) from, byte-identically to the
475
- * hosted board. Icons and `themeColor` left in 4.0.0; applications
476
- * own brand assets and presentation tokens.
477
- */
478
- type BoardSeo = Schemas['BoardSeo'];
479
-
480
499
  type EmbedJobsQuery = {
481
500
  /** Free-text search query, up to 200 characters. */
482
501
  q?: string;
@@ -689,6 +708,8 @@ type TaxonomyListQuery = {
689
708
  q?: string;
690
709
  cursor?: string;
691
710
  limit?: number;
711
+ /** `name` (default) or `jobCount` (highest published-job count first). */
712
+ sort?: 'name' | 'jobCount';
692
713
  };
693
714
  /**
694
715
  * Query for `taxonomy.places.list()`. Omit it (or `q`) for the full
@@ -740,10 +761,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
740
761
  client: BoardClient;
741
762
  /**
742
763
  * Board context — identity, brand (`logoUrl` + favicon `icons`), language,
743
- * features, and analytics.
764
+ * features, analytics, and AdSense (`ads.enabled` + `ads.clientId`).
765
+ * Per-placement slot ids are not on this resource.
744
766
  *
745
767
  * @example
746
- * const { name, language, logoUrl, icons } = await board.context();
768
+ * const { name, language, logoUrl, icons, ads } = await board.context();
747
769
  */
748
770
  context(options?: FetchOptions): Promise<{
749
771
  object: "public_board";
@@ -764,6 +786,8 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
764
786
  showCavunoBranding: boolean;
765
787
  features: {
766
788
  jobAlerts: boolean;
789
+ jobRecommendationsEnabled: boolean;
790
+ recommendedTalentEnabled: boolean;
767
791
  candidates: boolean;
768
792
  employers: boolean;
769
793
  blog: boolean;
@@ -783,9 +807,27 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
783
807
  linkedInPartnerId: string | null;
784
808
  cookieConsentRequired: boolean;
785
809
  };
810
+ ads: {
811
+ enabled: boolean;
812
+ clientId: string | null;
813
+ };
786
814
  customFields: {
787
815
  job: components["schemas"]["CustomFieldDefinition"][];
788
816
  };
817
+ jobForm: {
818
+ salary: {
819
+ visible: boolean;
820
+ };
821
+ seniority: {
822
+ visible: boolean;
823
+ };
824
+ location: {
825
+ visible: boolean;
826
+ };
827
+ sponsorship: {
828
+ visible: boolean;
829
+ };
830
+ };
789
831
  contact: {
790
832
  email: string | null;
791
833
  websiteUrl: string | null;
@@ -1580,12 +1622,14 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1580
1622
  object: "notification_preference";
1581
1623
  channel: "messageEmails" | "applicationEmails" | "recommendedJobEmails";
1582
1624
  subscribed: boolean;
1625
+ waitlisted: boolean;
1583
1626
  updatedAt: number | null;
1584
1627
  }>>;
1585
1628
  update(body: UpdateNotificationPreferenceBody, options?: FetchOptions): Promise<ListEnvelope<{
1586
1629
  object: "notification_preference";
1587
1630
  channel: "messageEmails" | "applicationEmails" | "recommendedJobEmails";
1588
1631
  subscribed: boolean;
1632
+ waitlisted: boolean;
1589
1633
  updatedAt: number | null;
1590
1634
  }>>;
1591
1635
  unsubscribeWithToken(body: UnsubscribeBody, options?: FetchOptions): Promise<void>;
@@ -1656,6 +1700,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1656
1700
  linkedinUrl: string | null;
1657
1701
  facebookUrl: string | null;
1658
1702
  logoUrl: string | null;
1703
+ deletionEnabled: boolean;
1659
1704
  }>;
1660
1705
  update(slug: string, body: UpdateEmployerCompanyBody, options?: FetchOptions): Promise<{
1661
1706
  id: string;
@@ -1669,6 +1714,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1669
1714
  linkedinUrl: string | null;
1670
1715
  facebookUrl: string | null;
1671
1716
  logoUrl: string | null;
1717
+ deletionEnabled: boolean;
1672
1718
  }>;
1673
1719
  delete(slug: string, options?: FetchOptions): Promise<void>;
1674
1720
  listMembers(slug: string, options?: FetchOptions): Promise<ListEnvelope<{
@@ -1711,6 +1757,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1711
1757
  linkedinUrl: string | null;
1712
1758
  facebookUrl: string | null;
1713
1759
  logoUrl: string | null;
1760
+ deletionEnabled: boolean;
1714
1761
  }>;
1715
1762
  workEmail: {
1716
1763
  verify(slug: string, body: SendWorkEmailBody, options?: FetchOptions): Promise<{
@@ -2015,6 +2062,12 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2015
2062
  renewsAt: string | null;
2016
2063
  }>>;
2017
2064
  };
2065
+ billingPortal: {
2066
+ create(slug: string, body?: CompanyBillingPortalBody, options?: FetchOptions): Promise<{
2067
+ object: "portal_session";
2068
+ url: string;
2069
+ }>;
2070
+ };
2018
2071
  jobStats: {
2019
2072
  retrieve(slug: string, options?: FetchOptions): Promise<ListEnvelope<{
2020
2073
  object: "employer_job_stat";
@@ -2078,6 +2131,44 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2078
2131
  paywallActive: boolean;
2079
2132
  hasTalentAccess: boolean;
2080
2133
  hasUnlimitedUnlocks: boolean;
2134
+ accessModel: "none" | "paid_messaging" | "paid_unlocks_and_messaging";
2135
+ companyId: string | null;
2136
+ unlockCreditsRemaining: number;
2137
+ messageCreditsRemaining: number;
2138
+ hasUnlimitedMessages: boolean;
2139
+ }>;
2140
+ retrieveCandidate(candidateId: string, options?: FetchOptions): Promise<{
2141
+ object: "talent_candidate_access";
2142
+ candidateId: string;
2143
+ companyId: string | null;
2144
+ alreadyUnlocked: boolean;
2145
+ unlockCreditsRemaining: number;
2146
+ messageCreditsRemaining: number;
2147
+ hasUnlimitedUnlocks: boolean;
2148
+ hasUnlimitedMessages: boolean;
2149
+ hasActiveTalentSubscription: boolean;
2150
+ }>;
2151
+ checkout(body: TalentAccessCheckoutBody, options?: FetchOptions): Promise<{
2152
+ object: "checkout_session";
2153
+ sessionId: string;
2154
+ clientSecret: string;
2155
+ stripeAccountId: string;
2156
+ publishableKey: string;
2157
+ offerType: "recurring" | "lifetime";
2158
+ }>;
2159
+ retrieveCheckout(sessionId: string, options?: FetchOptions): Promise<{
2160
+ object: "checkout_session_state";
2161
+ status: "open" | "complete" | "expired";
2162
+ clientSecret: string | null;
2163
+ }>;
2164
+ unlock(body: TalentUnlockBody, options?: FetchOptions): Promise<{
2165
+ object: "talent_unlock";
2166
+ alreadyUnlocked: boolean;
2167
+ unlockCreditsRemaining: number | null;
2168
+ }>;
2169
+ upgrade(body: TalentAccessUpgradeBody, options?: FetchOptions): Promise<{
2170
+ object: "talent_upgrade";
2171
+ ok: true;
2081
2172
  }>;
2082
2173
  };
2083
2174
  alerts: {
@@ -2488,6 +2579,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2488
2579
  sourceSlug: string;
2489
2580
  canonicalSlug: string;
2490
2581
  displayName: string;
2582
+ jobCount: number;
2491
2583
  }>>;
2492
2584
  resolve(slug: string, options?: FetchOptions): Promise<{
2493
2585
  object: "taxonomy_resolution";
@@ -2507,6 +2599,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2507
2599
  sourceSlug: string;
2508
2600
  canonicalSlug: string;
2509
2601
  displayName: string;
2602
+ jobCount: number;
2510
2603
  }>>;
2511
2604
  resolve(slug: string, options?: FetchOptions): Promise<{
2512
2605
  object: "taxonomy_resolution";
@@ -3134,6 +3227,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3134
3227
  list(query?: TalentDirectoryQuery, options?: FetchOptions): Promise<TalentDirectoryListEnvelope>;
3135
3228
  retrieve(handle: string, options?: FetchOptions): Promise<{
3136
3229
  object: "talent_profile";
3230
+ id: string;
3137
3231
  handle: string | null;
3138
3232
  displayName: string | null;
3139
3233
  headline: string | null;
@@ -3187,4 +3281,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3187
3281
  };
3188
3282
  type BoardSdk = ReturnType<typeof createBoardClient>;
3189
3283
 
3190
- export { type AcceptCompanyMemberInviteBody, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyAction, type ApplyApprovalPlan, type ApplyApprovalReceipt, type ApplyBody, type ApplyIntent, Awaitable, BOARD_API_ERROR_CODES, type Block, type BlockStatus, type BlockUserBody, type BlockedUser, BlogPostsListQuery, BlogSearchBody, BlogSimilarQuery, type BoardAccessGrant, BoardApiError, type BoardApiErrorCode, type BoardAuthSession, BoardClient, BoardRequest, type BoardSdk, type BoardSeo, type BoardUser, type BulkMoveApplicantsBody, type BulkRejectApplicantsBody, type CandidateAvatar, type CandidateEducation, type CandidateExperience, type CandidateLanguage, type CandidateProfile, type CandidateSkill, type ClaimableCompany, CompaniesListQuery, CompaniesSearchBody, CompanyJobsListQuery, CompanyListEnvelope, CompanyMarketsListQuery, type CompanyMember, type CompanyMemberInvite, type CompanyMemberInviteAcceptance, type CompanyMembership, CompanySimilarQuery, type ConfirmEmailChangeBody, type ConfirmWorkEmailBody, type ConsumeMagicLinkBody, type Conversation, type ConversationArchive, type ConversationDetail, type ConversationRef, type ConversationsListQuery, type CreateApplyApprovalBody, type CreateApplyIntentBody, type CreateBoardClientOptions, type CreateCompanyBody, type CreateCompanyMemberInviteBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type EditMessageBody, type EmbedJobsQuery, type EmployerApplicant, type EmployerBillingOption, type EmployerCheckout, type EmployerCheckoutBody, type EmployerCompany, type EmployerCompanySearchQuery, type EmployerJob, type EmployerJobStat, type EmployerJobStatsPoint, type EmployerJobStatsTimeseriesQuery, type EmployerJobSummary, type EmployerJobsListQuery, type EmployerPipeline, type EmployerPipelineQuery, type EmployerPipelineStage, type EmployerProfileStats, type EmployerProfileViewsPoint, type EmployerProfileViewsTimeseriesQuery, EmploymentType, FetchOptions, type FindExistingConversationQuery, type ForgotPasswordBody, type HandleAvailability, type JobAlertConfirmation, type JobAlertDeletePreferenceInput, type JobAlertFiltersInput, type JobAlertFrequency, type JobAlertManageQuery, type JobAlertManageResult, type JobAlertManageState, type JobAlertManageTokenInput, type JobAlertPreference, type JobAlertRemoteOption, type JobAlertResendResult, type JobAlertStoredFilters, type JobAlertSubscribeInput, type JobAlertSubscription, type JobAlertUpdatePreferenceInput, JobCardListEnvelope, JobCardSearchEnvelope, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, JobsListQuery, JobsSearchBody, JobsSimilarQuery, ListEnvelope, Logger, type LoginBody, type LogoutBody, type MarketingConsent, type Message, type ModerationReport, type MoveApplicantStageBody, type NotificationPreference, type OAuthAuthorizationQuery, type OAuthAuthorizationUrl, type OAuthExchangeBody, type OAuthProvider, type Paginator, type PaywallOffer, type PaywallOfferListEnvelope, type PlacesListQuery, type Plan, type PlanListEnvelope, type PlansListQuery, type PublicPlace, type PublicTaxonomyTerm, type ReadReceipt, type RecommendedJob, type RecommendedJobsListQuery, type RecommendedTalent, type RecommendedTalentListQuery, type RedirectResolution, type RefreshBody, type RegisterBody, RemoteOption, type RemotePermitTaxonomyEntry, type ReorderPipelineStagesBody, type ReplyBody, type ReportBody, type RequestEmailChangeBody, type RequestMagicLinkBody, type ResetPasswordBody, type Resume, type ResumeUploadOptions, SDK_VERSION, SalaryDetailQuery, type SalesLedPlan, type SalesLedPlanListEnvelope, type SaveJobBody, type SavedJob, type SavedJobsListQuery, SearchEnvelope, SearchSuggestQuery, type SendWorkEmailBody, Seniority, type StartAboutApplicationBody, type StartConversationBody, StorageMode, type TalentAccess, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TaxonomyGeo, type TaxonomyListQuery, type TaxonomyResolution, type ThreadMessagesQuery, type UnreadCount, type UnsubscribeBody, type UpdateApplicationFactsBody, type UpdateCandidateProfileBody, type UpdateCompanyMemberRoleBody, type UpdateEducationBody, type UpdateEmployerCompanyBody, type UpdateEmployerJobBody, type UpdateExperienceBody, type UpdateLanguagesBody, type UpdateNotificationPreferenceBody, type UpdatePasswordBody, type UpdatePipelineStageBody, type UpdateSkillsBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isNotFound, isOwnMessage, isRateLimited, isSafeApplicationUrl, isUnauthorized, isValidationError, lastOwnMessageId, paginate, resolveApplyAction };
3284
+ export { type AcceptCompanyMemberInviteBody, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyAction, type ApplyApprovalPlan, type ApplyApprovalReceipt, type ApplyBody, type ApplyIntent, Awaitable, BOARD_API_ERROR_CODES, type Block, type BlockStatus, type BlockUserBody, type BlockedUser, BlogPostsListQuery, BlogSearchBody, BlogSimilarQuery, type BoardAccessGrant, BoardApiError, type BoardApiErrorCode, type BoardAuthSession, BoardClient, BoardRequest, type BoardSdk, type BoardUser, type BulkMoveApplicantsBody, type BulkRejectApplicantsBody, type CandidateAvatar, type CandidateEducation, type CandidateExperience, type CandidateLanguage, type CandidateProfile, type CandidateSkill, type ClaimableCompany, CompaniesListQuery, CompaniesSearchBody, type CompanyBillingPortalBody, type CompanyBillingPortalSession, CompanyJobsListQuery, CompanyListEnvelope, CompanyMarketsListQuery, type CompanyMember, type CompanyMemberInvite, type CompanyMemberInviteAcceptance, type CompanyMembership, CompanySimilarQuery, type ConfirmEmailChangeBody, type ConfirmWorkEmailBody, type ConsumeMagicLinkBody, type Conversation, type ConversationArchive, type ConversationDetail, type ConversationRef, type ConversationsListQuery, type CreateApplyApprovalBody, type CreateApplyIntentBody, type CreateBoardClientOptions, type CreateCompanyBody, type CreateCompanyMemberInviteBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type EditMessageBody, type EmbedJobsQuery, type EmployerApplicant, type EmployerBillingOption, type EmployerCheckout, type EmployerCheckoutBody, type EmployerCompany, type EmployerCompanySearchQuery, type EmployerJob, type EmployerJobStat, type EmployerJobStatsPoint, type EmployerJobStatsTimeseriesQuery, type EmployerJobSummary, type EmployerJobsListQuery, type EmployerPipeline, type EmployerPipelineQuery, type EmployerPipelineStage, type EmployerProfileStats, type EmployerProfileViewsPoint, type EmployerProfileViewsTimeseriesQuery, EmploymentType, FetchOptions, type FindExistingConversationQuery, type ForgotPasswordBody, type HandleAvailability, type JobAlertConfirmation, type JobAlertDeletePreferenceInput, type JobAlertFiltersInput, type JobAlertFrequency, type JobAlertManageQuery, type JobAlertManageResult, type JobAlertManageState, type JobAlertManageTokenInput, type JobAlertPreference, type JobAlertRemoteOption, type JobAlertResendResult, type JobAlertStoredFilters, type JobAlertSubscribeInput, type JobAlertSubscription, type JobAlertUpdatePreferenceInput, JobCardListEnvelope, JobCardSearchEnvelope, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, JobsListQuery, JobsSearchBody, JobsSimilarQuery, ListEnvelope, Logger, type LoginBody, type LogoutBody, type MarketingConsent, type Message, type ModerationReport, type MoveApplicantStageBody, type NotificationPreference, type OAuthAuthorizationQuery, type OAuthAuthorizationUrl, type OAuthExchangeBody, type OAuthProvider, type Paginator, type PaywallOffer, type PaywallOfferListEnvelope, type PlacesListQuery, type Plan, type PlanListEnvelope, type PlansListQuery, type PublicPlace, type PublicTaxonomyTerm, type ReadReceipt, type RecommendedJob, type RecommendedJobsListQuery, type RecommendedTalent, type RecommendedTalentListQuery, type RedirectResolution, type RefreshBody, type RegisterBody, RemoteOption, type RemotePermitTaxonomyEntry, type ReorderPipelineStagesBody, type ReplyBody, type ReportBody, type RequestEmailChangeBody, type RequestMagicLinkBody, type ResetPasswordBody, type Resume, type ResumeUploadOptions, SDK_VERSION, SalaryDetailQuery, type SalesLedPlan, type SalesLedPlanListEnvelope, type SaveJobBody, type SavedJob, type SavedJobsListQuery, SearchEnvelope, SearchSuggestQuery, type SendWorkEmailBody, Seniority, type StartAboutApplicationBody, type StartConversationBody, StorageMode, type TalentAccess, type TalentAccessCheckoutBody, type TalentAccessCheckoutSession, type TalentAccessCheckoutSessionState, type TalentAccessUpgrade, type TalentAccessUpgradeBody, type TalentCandidateAccess, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TalentUnlock, type TalentUnlockBody, type TaxonomyGeo, type TaxonomyListQuery, type TaxonomyResolution, type ThreadMessagesQuery, type UnreadCount, type UnsubscribeBody, type UpdateApplicationFactsBody, type UpdateCandidateProfileBody, type UpdateCompanyMemberRoleBody, type UpdateEducationBody, type UpdateEmployerCompanyBody, type UpdateEmployerJobBody, type UpdateExperienceBody, type UpdateLanguagesBody, type UpdateNotificationPreferenceBody, type UpdatePasswordBody, type UpdatePipelineStageBody, type UpdateSkillsBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isNotFound, isOwnMessage, isRateLimited, isSafeApplicationUrl, isUnauthorized, isValidationError, lastOwnMessageId, paginate, resolveApplyAction };
package/dist/index.js CHANGED
@@ -104,6 +104,8 @@ var BOARD_API_ERROR_CODES = [
104
104
  "talent_not_found",
105
105
  "talent_directory_not_found",
106
106
  "talent_directory_restricted",
107
+ "job_recommendations_not_found",
108
+ "recommended_talent_not_found",
107
109
  // Job alerts (anonymous + authenticated)
108
110
  "job_alert_not_found",
109
111
  "job_alerts_disabled",
@@ -113,6 +115,7 @@ var BOARD_API_ERROR_CODES = [
113
115
  "candidate_entry_not_found",
114
116
  "candidate_handle_taken",
115
117
  "candidate_job_not_found",
118
+ "candidate_notification_preference_paused",
116
119
  "resume_invalid_file",
117
120
  "resume_upload_forbidden",
118
121
  // Applications
@@ -176,6 +179,13 @@ var BOARD_API_ERROR_CODES = [
176
179
  "paywall_no_candidate_profile",
177
180
  "paywall_no_recurring_subscription",
178
181
  "paywall_offer_not_found",
182
+ // Employer talent-access paywall
183
+ "talent_access_unavailable",
184
+ "company_required",
185
+ "already_on_plan",
186
+ "talent_access_required",
187
+ "messaging_talent_access_required",
188
+ "stripe_not_connected",
179
189
  // Public job posting
180
190
  "job_posting_logo_lookup_unavailable",
181
191
  "job_posting_logo_not_found",
@@ -332,7 +342,7 @@ async function clearSession(storage) {
332
342
  }
333
343
 
334
344
  // src/version.ts
335
- var SDK_VERSION = "4.8.0";
345
+ var SDK_VERSION = "4.10.0";
336
346
 
337
347
  // src/client.ts
338
348
  function isRawBody(body) {
@@ -1111,9 +1121,9 @@ function jobsNamespace(client) {
1111
1121
  );
1112
1122
  },
1113
1123
  /**
1114
- * Create an opaque external-apply intent. A compatible starter then makes
1115
- * its own board-local POST return a browser 303 to `gatewayUrl`; do not
1116
- * render this value as a crawlable link. Pass
1124
+ * Create an opaque external-apply intent. A compatible starter sends the
1125
+ * candidate's browser to `gatewayUrl` (or asks it for the canonical JSON
1126
+ * decision after a real Apply click); never render it as a crawlable link. Pass
1117
1127
  * `x-cavuno-board-capabilities: apply-gateway-v1` in `options.headers`;
1118
1128
  * legacy callers receive 404.
1119
1129
  */
@@ -1840,6 +1850,29 @@ function meNamespace(client) {
1840
1850
  );
1841
1851
  }
1842
1852
  },
1853
+ /**
1854
+ * Stripe Customer Portal for a company I am an approved member of.
1855
+ * Surfaces every subscription on the company's Stripe customer (job
1856
+ * posting + talent access). Not a talent-access portal — candidate
1857
+ * `me.access.portal` is a different buyer.
1858
+ */
1859
+ billingPortal: {
1860
+ /**
1861
+ * Mint a Stripe Customer Portal session. Optional `returnPath` is
1862
+ * resolved against the board origin.
1863
+ *
1864
+ * @example
1865
+ * const { url } = await board.me.companies.billingPortal.create('acme', {
1866
+ * returnPath: '/employers/billing',
1867
+ * });
1868
+ */
1869
+ create(slug, body, options) {
1870
+ return client.fetch(
1871
+ `/me/companies/${encodeURIComponent(slug)}/billing-portal`,
1872
+ { ...options, method: "POST", body }
1873
+ );
1874
+ }
1875
+ },
1843
1876
  /**
1844
1877
  * The read-only reporting funnel that backs the hosted employer jobs
1845
1878
  * table: per-job views / apply clicks / native applications,
@@ -2104,9 +2137,11 @@ function meNamespace(client) {
2104
2137
  }
2105
2138
  },
2106
2139
  /**
2107
- * The viewer's talent entitlement on this board — "does this
2108
- * employer have talent access?" for gating a Message-vs-upsell CTA.
2109
- * Candidates and unaffiliated viewers get `hasTalentAccess: false`.
2140
+ * The employer talent-access paywall — "does this employer have
2141
+ * talent access?" plus remaining company-scoped unlock/message credits
2142
+ * and the charging model. Candidates and unaffiliated viewers get
2143
+ * `hasTalentAccess: false`. Message credits spend inline on
2144
+ * `conversations.start` (no separate spend endpoint).
2110
2145
  *
2111
2146
  * @example
2112
2147
  * const { hasTalentAccess } = await board.me.talentAccess.retrieve();
@@ -2114,12 +2149,94 @@ function meNamespace(client) {
2114
2149
  talentAccess: {
2115
2150
  /**
2116
2151
  * Retrieve the viewer's talent entitlement. Never cache — per-user.
2152
+ * Credits are company-scoped; `companyId` is set when the viewer has
2153
+ * exactly one approved membership, otherwise `null` (pass `companyId`
2154
+ * on writes — `company_required` with more than one).
2117
2155
  *
2118
2156
  * @example
2119
2157
  * const access = await board.me.talentAccess.retrieve();
2120
2158
  */
2121
2159
  retrieve(options) {
2122
2160
  return client.fetch("/me/talent-access", options);
2161
+ },
2162
+ /**
2163
+ * Per-candidate unlock and credit state for the opaque `/p/{id}`
2164
+ * profile route. Named `/p/{handle}` is the share bypass.
2165
+ *
2166
+ * @example
2167
+ * const gate = await board.me.talentAccess.retrieveCandidate(candidateId);
2168
+ */
2169
+ retrieveCandidate(candidateId, options) {
2170
+ return client.fetch(
2171
+ `/me/talent-access/candidates/${encodeURIComponent(candidateId)}`,
2172
+ options
2173
+ );
2174
+ },
2175
+ /**
2176
+ * Start embedded checkout for a public `talent_access` plan and return
2177
+ * a connected-account mount kit. Same shape as candidate-access
2178
+ * checkout; session metadata is `origin: talent_access`. `companyId`
2179
+ * is required when the viewer has more than one approved membership
2180
+ * (`company_required`).
2181
+ *
2182
+ * @example
2183
+ * const kit = await board.me.talentAccess.checkout({
2184
+ * planId,
2185
+ * returnPath: '/employers',
2186
+ * colorMode: 'light',
2187
+ * });
2188
+ */
2189
+ checkout(body, options) {
2190
+ return client.fetch(
2191
+ "/me/talent-access/checkout",
2192
+ { ...options, method: "POST", body }
2193
+ );
2194
+ },
2195
+ /**
2196
+ * Poll a talent-access checkout session: `open` (re-mountable via
2197
+ * `clientSecret`), `complete`, or `expired`. The session must be
2198
+ * `origin: talent_access` for this board user.
2199
+ *
2200
+ * @example
2201
+ * const s = await board.me.talentAccess.retrieveCheckout(kit.sessionId);
2202
+ */
2203
+ retrieveCheckout(sessionId, options) {
2204
+ return client.fetch(
2205
+ `/me/talent-access/checkout/${encodeURIComponent(sessionId)}`,
2206
+ options
2207
+ );
2208
+ },
2209
+ /**
2210
+ * Spend one profile-unlock credit. Idempotent: already-unlocked
2211
+ * returns `{ alreadyUnlocked: true }` with no decrement. Credits are
2212
+ * company-scoped; `companyId` is required with multiple approved
2213
+ * memberships (`company_required`).
2214
+ *
2215
+ * @example
2216
+ * const unlock = await board.me.talentAccess.unlock({ candidateId });
2217
+ */
2218
+ unlock(body, options) {
2219
+ return client.fetch("/me/talent-access/unlocks", {
2220
+ ...options,
2221
+ method: "POST",
2222
+ body
2223
+ });
2224
+ },
2225
+ /**
2226
+ * Swap the company's primary talent_access subscription to `planId`
2227
+ * in place (prorated). Never a second checkout — Checkout would mint
2228
+ * a parallel subscription. Requires an existing talent_access sub.
2229
+ * `companyId` is required with multiple approved memberships.
2230
+ *
2231
+ * @example
2232
+ * await board.me.talentAccess.upgrade({ planId });
2233
+ */
2234
+ upgrade(body, options) {
2235
+ return client.fetch("/me/talent-access/upgrade", {
2236
+ ...options,
2237
+ method: "POST",
2238
+ body
2239
+ });
2123
2240
  }
2124
2241
  },
2125
2242
  /**
@@ -3127,10 +3244,11 @@ function createBoardClient(options) {
3127
3244
  client,
3128
3245
  /**
3129
3246
  * Board context — identity, brand (`logoUrl` + favicon `icons`), language,
3130
- * features, and analytics.
3247
+ * features, analytics, and AdSense (`ads.enabled` + `ads.clientId`).
3248
+ * Per-placement slot ids are not on this resource.
3131
3249
  *
3132
3250
  * @example
3133
- * const { name, language, logoUrl, icons } = await board.context();
3251
+ * const { name, language, logoUrl, icons, ads } = await board.context();
3134
3252
  */
3135
3253
  context(options2) {
3136
3254
  return client.fetch("", options2);