@cavuno/board 4.21.0 → 4.22.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 (43) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/{_spec-CyNKpM_j.d.mts → _spec-p1bcDr9R.d.mts} +7 -0
  3. package/dist/{_spec-CyNKpM_j.d.ts → _spec-p1bcDr9R.d.ts} +7 -0
  4. package/dist/bin.mjs +58 -2
  5. package/dist/{blog-BNIqGayD.d.mts → blog-CsI8GdJS.d.mts} +1 -1
  6. package/dist/{blog-CRvaDyzJ.d.ts → blog-DB4YIfn4.d.ts} +1 -1
  7. package/dist/{board-mn3GVbrC.d.mts → board-CuIyeFsj.d.mts} +2 -2
  8. package/dist/{board-CXNxSlUB.d.ts → board-Dq9gD7qr.d.ts} +2 -2
  9. package/dist/{breadcrumbs-Bi4LHNAF.d.mts → breadcrumbs-B_WTKaIk.d.mts} +2 -2
  10. package/dist/{breadcrumbs-Crk6Q69T.d.ts → breadcrumbs-CyCZ8N8_.d.ts} +2 -2
  11. package/dist/browser/cavuno-board.global.min.js +1 -1
  12. package/dist/{chunk-RORHD4WQ.mjs → chunk-DP2ZZZEO.mjs} +9 -1
  13. package/dist/doctor.js +58 -2
  14. package/dist/doctor.mjs +58 -2
  15. package/dist/filters.d.mts +2 -2
  16. package/dist/filters.d.ts +2 -2
  17. package/dist/format.d.mts +4 -4
  18. package/dist/format.d.ts +4 -4
  19. package/dist/index.d.mts +42 -13
  20. package/dist/index.d.ts +42 -13
  21. package/dist/index.js +48 -1
  22. package/dist/index.mjs +43 -2
  23. package/dist/{jobs-CALE3I8I.d.mts → jobs-Bv12BcSA.d.mts} +1 -1
  24. package/dist/{jobs-CSWXqLZR.d.ts → jobs-C-sBPgNp.d.ts} +1 -1
  25. package/dist/{search-B_hwS-xu.d.mts → search-CNeOnhWb.d.mts} +1 -1
  26. package/dist/{search-BRCbe1Nm.d.ts → search-W28d76OJ.d.ts} +1 -1
  27. package/dist/{seo-CS4lrG20.d.mts → seo-BGHJcfev.d.mts} +1 -1
  28. package/dist/{seo-D1u-RmLQ.d.ts → seo-DAHd1ngs.d.ts} +1 -1
  29. package/dist/seo-files.d.mts +2 -2
  30. package/dist/seo-files.d.ts +2 -2
  31. package/dist/seo.d.mts +6 -6
  32. package/dist/seo.d.ts +6 -6
  33. package/dist/server.d.mts +6 -6
  34. package/dist/server.d.ts +6 -6
  35. package/dist/server.mjs +1 -1
  36. package/dist/sitemap.d.mts +6 -6
  37. package/dist/sitemap.d.ts +6 -6
  38. package/dist/sitemap.mjs +1 -1
  39. package/dist/suggest.d.mts +2 -2
  40. package/dist/suggest.d.ts +2 -2
  41. package/package.json +1 -1
  42. package/skills/cavuno-board-companies/SKILL.md +6 -0
  43. package/skills/manifest.json +1 -1
package/dist/doctor.js CHANGED
@@ -416,6 +416,7 @@ var READ = {
416
416
  home: record("read.home", 2),
417
417
  jobs: record("read.jobs", 2),
418
418
  jsonld: record("read.jsonld", 2),
419
+ boardIdentity: record("read.boardIdentity", 2),
419
420
  sitemap: record("read.sitemap", 2),
420
421
  robots: record("read.robots", 2),
421
422
  adsTxt: record("read.adsTxt", 2),
@@ -455,6 +456,55 @@ async function probeJobsAndJsonLd(fetchImpl, base) {
455
456
  )
456
457
  ];
457
458
  }
459
+ async function probeBoardIdentity(fetchImpl, robotsBody, env) {
460
+ if (!env?.apiUrl || !env.boardKey) {
461
+ return READ.boardIdentity(
462
+ "skip",
463
+ "not probed \u2014 env checks failed (see the env.* failures)"
464
+ );
465
+ }
466
+ const advertised = robotsBody?.match(/^Sitemap:\s*(\S+)/im)?.[1] ?? null;
467
+ if (advertised === null) {
468
+ return READ.boardIdentity(
469
+ "skip",
470
+ "not probed \u2014 robots.txt advertises no Sitemap: URL to compare (see read.robots)"
471
+ );
472
+ }
473
+ const board = await probe(
474
+ fetchImpl,
475
+ `${apiBase(env.apiUrl)}/v1/boards/${encodeURIComponent(env.boardKey)}`
476
+ );
477
+ let expected = null;
478
+ try {
479
+ const parsed = JSON.parse(board.body);
480
+ if (typeof parsed.primaryDomain === "string")
481
+ expected = parsed.primaryDomain;
482
+ } catch {
483
+ }
484
+ if (expected === null) {
485
+ return READ.boardIdentity(
486
+ "skip",
487
+ `could not read this board's domain to compare (HTTP ${board.status})`
488
+ );
489
+ }
490
+ let served;
491
+ try {
492
+ served = new URL(advertised).host;
493
+ } catch {
494
+ return READ.boardIdentity(
495
+ "skip",
496
+ `robots.txt Sitemap: is not an absolute URL (${advertised})`
497
+ );
498
+ }
499
+ const bare = (host) => host.replace(/^www\./, "").toLowerCase();
500
+ if (bare(served) === bare(expected)) {
501
+ return READ.boardIdentity("pass", `serving this board (${expected})`);
502
+ }
503
+ return READ.boardIdentity(
504
+ "warn",
505
+ `robots.txt advertises ${served}, but board ${env.boardKey} is ${expected} \u2014 either this deployment is bound to a DIFFERENT board (check CAVUNO_BOARD in the deployed environment) or this board's canonical base and custom domain differ.`
506
+ );
507
+ }
458
508
  function onFrontend(base, locUrl) {
459
509
  try {
460
510
  const parsed = new URL(locUrl);
@@ -580,7 +630,7 @@ function scoreOAuthCallback(probed) {
580
630
  `${broken.map((p) => `/api/board-auth/oauth/${p}/callback \u2192 HTTP ${probed[p].status}`).join(", ")} \u2014 only matters if you registered this domain's callback with the provider: forward the path to cavuno.com, or register https://cavuno.com/api/board-auth/oauth/{provider}/callback instead`
581
631
  );
582
632
  }
583
- async function runReadProbes(fetchImpl, frontendUrl, seo) {
633
+ async function runReadProbes(fetchImpl, frontendUrl, seo, env) {
584
634
  const base = frontendUrl.replace(/\/$/, "");
585
635
  const home = await probe(fetchImpl, base);
586
636
  const jobsAndJsonLd = await probeJobsAndJsonLd(fetchImpl, base);
@@ -598,12 +648,18 @@ async function runReadProbes(fetchImpl, frontendUrl, seo) {
598
648
  `${base}/api/board-auth/oauth/linkedin/callback`
599
649
  )
600
650
  };
651
+ const boardIdentity = await probeBoardIdentity(
652
+ fetchImpl,
653
+ robots.ok ? robots.body : null,
654
+ env
655
+ );
601
656
  return [
602
657
  home.ok && /<(html|body|div|main)[\s>]/i.test(home.body) ? READ.home("pass", "home renders") : READ.home(
603
658
  "fail",
604
659
  home.ok ? "home returned 200 but no HTML document \u2014 captive portal or empty shell?" : `home HTTP ${home.status}`
605
660
  ),
606
661
  ...jobsAndJsonLd,
662
+ boardIdentity,
607
663
  sitemap,
608
664
  scoreRobots(robots, seo),
609
665
  scoreOptionalTextFile({
@@ -777,7 +833,7 @@ async function runDoctor(options) {
777
833
  results.push(...checkCookieCodecConformance(projectRoot));
778
834
  results.push(checkAnalyticsSurface(projectRoot));
779
835
  results.push(
780
- ...options.frontendUrl ? await runReadProbes(fetchImpl, options.frontendUrl, seo) : skipReadProbes("no --frontend <url> given")
836
+ ...options.frontendUrl ? await runReadProbes(fetchImpl, options.frontendUrl, seo, env) : skipReadProbes("no --frontend <url> given")
781
837
  );
782
838
  return { results, summary: summarize(results) };
783
839
  }
package/dist/doctor.mjs CHANGED
@@ -386,6 +386,7 @@ var READ = {
386
386
  home: record("read.home", 2),
387
387
  jobs: record("read.jobs", 2),
388
388
  jsonld: record("read.jsonld", 2),
389
+ boardIdentity: record("read.boardIdentity", 2),
389
390
  sitemap: record("read.sitemap", 2),
390
391
  robots: record("read.robots", 2),
391
392
  adsTxt: record("read.adsTxt", 2),
@@ -425,6 +426,55 @@ async function probeJobsAndJsonLd(fetchImpl, base) {
425
426
  )
426
427
  ];
427
428
  }
429
+ async function probeBoardIdentity(fetchImpl, robotsBody, env) {
430
+ if (!env?.apiUrl || !env.boardKey) {
431
+ return READ.boardIdentity(
432
+ "skip",
433
+ "not probed \u2014 env checks failed (see the env.* failures)"
434
+ );
435
+ }
436
+ const advertised = robotsBody?.match(/^Sitemap:\s*(\S+)/im)?.[1] ?? null;
437
+ if (advertised === null) {
438
+ return READ.boardIdentity(
439
+ "skip",
440
+ "not probed \u2014 robots.txt advertises no Sitemap: URL to compare (see read.robots)"
441
+ );
442
+ }
443
+ const board = await probe(
444
+ fetchImpl,
445
+ `${apiBase(env.apiUrl)}/v1/boards/${encodeURIComponent(env.boardKey)}`
446
+ );
447
+ let expected = null;
448
+ try {
449
+ const parsed = JSON.parse(board.body);
450
+ if (typeof parsed.primaryDomain === "string")
451
+ expected = parsed.primaryDomain;
452
+ } catch {
453
+ }
454
+ if (expected === null) {
455
+ return READ.boardIdentity(
456
+ "skip",
457
+ `could not read this board's domain to compare (HTTP ${board.status})`
458
+ );
459
+ }
460
+ let served;
461
+ try {
462
+ served = new URL(advertised).host;
463
+ } catch {
464
+ return READ.boardIdentity(
465
+ "skip",
466
+ `robots.txt Sitemap: is not an absolute URL (${advertised})`
467
+ );
468
+ }
469
+ const bare = (host) => host.replace(/^www\./, "").toLowerCase();
470
+ if (bare(served) === bare(expected)) {
471
+ return READ.boardIdentity("pass", `serving this board (${expected})`);
472
+ }
473
+ return READ.boardIdentity(
474
+ "warn",
475
+ `robots.txt advertises ${served}, but board ${env.boardKey} is ${expected} \u2014 either this deployment is bound to a DIFFERENT board (check CAVUNO_BOARD in the deployed environment) or this board's canonical base and custom domain differ.`
476
+ );
477
+ }
428
478
  function onFrontend(base, locUrl) {
429
479
  try {
430
480
  const parsed = new URL(locUrl);
@@ -550,7 +600,7 @@ function scoreOAuthCallback(probed) {
550
600
  `${broken.map((p) => `/api/board-auth/oauth/${p}/callback \u2192 HTTP ${probed[p].status}`).join(", ")} \u2014 only matters if you registered this domain's callback with the provider: forward the path to cavuno.com, or register https://cavuno.com/api/board-auth/oauth/{provider}/callback instead`
551
601
  );
552
602
  }
553
- async function runReadProbes(fetchImpl, frontendUrl, seo) {
603
+ async function runReadProbes(fetchImpl, frontendUrl, seo, env) {
554
604
  const base = frontendUrl.replace(/\/$/, "");
555
605
  const home = await probe(fetchImpl, base);
556
606
  const jobsAndJsonLd = await probeJobsAndJsonLd(fetchImpl, base);
@@ -568,12 +618,18 @@ async function runReadProbes(fetchImpl, frontendUrl, seo) {
568
618
  `${base}/api/board-auth/oauth/linkedin/callback`
569
619
  )
570
620
  };
621
+ const boardIdentity = await probeBoardIdentity(
622
+ fetchImpl,
623
+ robots.ok ? robots.body : null,
624
+ env
625
+ );
571
626
  return [
572
627
  home.ok && /<(html|body|div|main)[\s>]/i.test(home.body) ? READ.home("pass", "home renders") : READ.home(
573
628
  "fail",
574
629
  home.ok ? "home returned 200 but no HTML document \u2014 captive portal or empty shell?" : `home HTTP ${home.status}`
575
630
  ),
576
631
  ...jobsAndJsonLd,
632
+ boardIdentity,
577
633
  sitemap,
578
634
  scoreRobots(robots, seo),
579
635
  scoreOptionalTextFile({
@@ -747,7 +803,7 @@ async function runDoctor(options) {
747
803
  results.push(...checkCookieCodecConformance(projectRoot));
748
804
  results.push(checkAnalyticsSurface(projectRoot));
749
805
  results.push(
750
- ...options.frontendUrl ? await runReadProbes(fetchImpl, options.frontendUrl, seo) : skipReadProbes("no --frontend <url> given")
806
+ ...options.frontendUrl ? await runReadProbes(fetchImpl, options.frontendUrl, seo, env) : skipReadProbes("no --frontend <url> given")
751
807
  );
752
808
  return { results, summary: summarize(results) };
753
809
  }
@@ -1,5 +1,5 @@
1
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-CALE3I8I.mjs';
2
- import './_spec-CyNKpM_j.mjs';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-Bv12BcSA.mjs';
2
+ import './_spec-p1bcDr9R.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-CSWXqLZR.js';
2
- import './_spec-CyNKpM_j.js';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-C-sBPgNp.js';
2
+ import './_spec-p1bcDr9R.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-Bi4LHNAF.mjs';
2
- import { C as CustomFieldDefinition } from './board-mn3GVbrC.mjs';
3
- import { C as CustomFieldValues } from './jobs-CALE3I8I.mjs';
4
- import './_spec-CyNKpM_j.mjs';
1
+ export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-B_WTKaIk.mjs';
2
+ import { C as CustomFieldDefinition } from './board-CuIyeFsj.mjs';
3
+ import { C as CustomFieldValues } from './jobs-Bv12BcSA.mjs';
4
+ import './_spec-p1bcDr9R.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-Crk6Q69T.js';
2
- import { C as CustomFieldDefinition } from './board-CXNxSlUB.js';
3
- import { C as CustomFieldValues } from './jobs-CSWXqLZR.js';
4
- import './_spec-CyNKpM_j.js';
1
+ export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-CyCZ8N8_.js';
2
+ import { C as CustomFieldDefinition } from './board-Dq9gD7qr.js';
3
+ import { C as CustomFieldValues } from './jobs-C-sBPgNp.js';
4
+ import './_spec-p1bcDr9R.js';
5
5
 
6
6
  /**
7
7
  * Date display helpers in the board language (required leading parameter,
package/dist/index.d.mts CHANGED
@@ -1,13 +1,13 @@
1
- import { S as Schemas, c as components } from './_spec-CyNKpM_j.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-B_hwS-xu.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-B_hwS-xu.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-mn3GVbrC.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 PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as PublicCompanyMembership, x as SalaryCompany, y as SalaryLocation, z as SalarySkill, A as SalaryTitle, B as SkillLocationSalary, D as SkillLocationsIndex, S as SkillSalaryDetail, E as TitleLocationSalary, F as TitleLocationsIndex, T as TitleSalaryDetail } from './board-mn3GVbrC.mjs';
6
- export { B as BoardSeo } from './seo-CS4lrG20.mjs';
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-CALE3I8I.mjs';
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-CALE3I8I.mjs';
9
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-BNIqGayD.mjs';
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-BNIqGayD.mjs';
1
+ import { S as Schemas, c as components } from './_spec-p1bcDr9R.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-CNeOnhWb.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-CNeOnhWb.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-CuIyeFsj.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 PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as PublicCompanyMembership, x as SalaryCompany, y as SalaryLocation, z as SalarySkill, A as SalaryTitle, B as SkillLocationSalary, D as SkillLocationsIndex, S as SkillSalaryDetail, E as TitleLocationSalary, F as TitleLocationsIndex, T as TitleSalaryDetail } from './board-CuIyeFsj.mjs';
6
+ export { B as BoardSeo } from './seo-BGHJcfev.mjs';
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-Bv12BcSA.mjs';
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-Bv12BcSA.mjs';
9
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-CsI8GdJS.mjs';
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-CsI8GdJS.mjs';
11
11
 
12
12
  /**
13
13
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -20,7 +20,7 @@ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts,
20
20
  * `unknown_error` is SDK-synthesized when a response carries no parseable
21
21
  * envelope.
22
22
  */
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_account_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", "membership_required", "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", "talent_list_not_found", "sourced_candidate_not_found", "sourced_convert_unavailable", "candidate_paywall_access_required", "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
+ 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_account_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_free_email_website", "employer_company_name_taken", "employer_company_not_found", "employer_job_not_found", "employer_job_slug_taken", "employer_jobs_quota_exceeded", "membership_required", "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", "talent_list_not_found", "sourced_candidate_not_found", "sourced_convert_unavailable", "candidate_paywall_access_required", "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", "membership_plan_not_found", "membership_seat_taken", "job_posting_logo_lookup_unavailable", "job_posting_logo_not_found", "job_posting_rejected"];
24
24
  /**
25
25
  * The known code set plus open string — new codes ship additively within v1,
26
26
  * so exhaustive narrowing is intentionally impossible.
@@ -80,6 +80,13 @@ declare function isForbidden(e: unknown): e is BoardApiError;
80
80
  declare function isValidationError(e: unknown): e is BoardApiError;
81
81
  declare function isRateLimited(e: unknown): e is BoardApiError;
82
82
  declare function isConflict(e: unknown): e is BoardApiError;
83
+ /**
84
+ * Create/update rejected because the company website is a free / consumer
85
+ * email provider domain (`employer_free_email_website`). Distinct from a
86
+ * generic 409 conflict — callers should prompt for a real company website
87
+ * (or omit website), not retry the same domain.
88
+ */
89
+ declare function isFreeEmailWebsiteError(e: unknown): e is BoardApiError;
83
90
 
84
91
  /** The minimal page shape every v1 list/search envelope satisfies. */
85
92
  interface PageShape {
@@ -143,7 +150,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
143
150
  * constant because the package is platform-neutral and cannot read
144
151
  * package.json at runtime.
145
152
  */
146
- declare const SDK_VERSION = "4.21.0";
153
+ declare const SDK_VERSION = "4.22.0";
147
154
 
148
155
  type SavedJob = Schemas['SavedJob'];
149
156
  type SavedJobsListQuery = {
@@ -367,6 +374,15 @@ type TalentAccessCheckoutBody = Schemas['TalentAccessCheckoutBody'];
367
374
  type TalentAccessCheckoutSession = Schemas['AccessCheckoutSession'];
368
375
  /** Polled state of a talent-access checkout session (`board.me.talentAccess.retrieveCheckout`). */
369
376
  type TalentAccessCheckoutSessionState = Schemas['AccessCheckoutSessionState'];
377
+ /** Body for `board.me.companies.startMembershipCheckout`. */
378
+ type MembershipCheckoutBody = Schemas['MembershipCheckoutBody'];
379
+ /**
380
+ * Connected-account mount kit from `board.me.companies.startMembershipCheckout`
381
+ * — same generated schema as talent-access checkout (`origin: membership`).
382
+ */
383
+ type MembershipCheckoutSession = Schemas['AccessCheckoutSession'];
384
+ /** Polled state of a membership checkout session (`board.me.companies.retrieveMembershipCheckout`). */
385
+ type MembershipCheckoutSessionState = Schemas['AccessCheckoutSessionState'];
370
386
  /** Result of `board.me.talentAccess.unlock`. */
371
387
  type TalentUnlock = Schemas['TalentUnlock'];
372
388
  /** Body for `board.me.talentAccess.unlock`. */
@@ -1922,6 +1938,19 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1922
1938
  updateMemberRole(slug: string, memberId: string, body: UpdateCompanyMemberRoleBody, options?: FetchOptions): Promise<void>;
1923
1939
  removeMember(slug: string, memberId: string, options?: FetchOptions): Promise<void>;
1924
1940
  leave(slug: string, options?: FetchOptions): Promise<void>;
1941
+ startMembershipCheckout(slug: string, body: MembershipCheckoutBody, options?: FetchOptions): Promise<{
1942
+ object: "checkout_session";
1943
+ sessionId: string;
1944
+ clientSecret: string;
1945
+ stripeAccountId: string;
1946
+ publishableKey: string;
1947
+ offerType: "recurring" | "lifetime";
1948
+ }>;
1949
+ retrieveMembershipCheckout(slug: string, sessionId: string, options?: FetchOptions): Promise<{
1950
+ object: "checkout_session_state";
1951
+ status: "open" | "complete" | "expired";
1952
+ clientSecret: string | null;
1953
+ }>;
1925
1954
  listInvites(slug: string, options?: FetchOptions): Promise<ListEnvelope<{
1926
1955
  id: string;
1927
1956
  object: "company_member_invite";
@@ -3504,4 +3533,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3504
3533
  };
3505
3534
  type BoardSdk = ReturnType<typeof createBoardClient>;
3506
3535
 
3507
- export { type AcceptCompanyMemberInviteBody, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type AddSourcedCandidateBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyAction, type ApplyApprovalPlan, type ApplyApprovalReceipt, type ApplyBody, type ApplyDecisionState, 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 BoardSitemapBucketSummary, type BoardSitemapIndex, 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 ConvertSourcedCandidateBody, type CreateApplyApprovalBody, type CreateApplyIntentBody, type CreateBoardClientOptions, type CreateCompanyBody, type CreateCompanyMemberInviteBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type CreateTalentListBody, 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 SitemapEntriesEnvelope, type SitemapEntriesQuery, type SitemapEntry, type SourcedCandidate, 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 TalentList, type TalentListFilters, 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 UpdateTalentListBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isNotFound, isOwnMessage, isRateLimited, isSafeApplicationUrl, isUnauthorized, isValidationError, lastOwnMessageId, paginate, resolveApplyAction, resolveApplyDecision };
3536
+ export { type AcceptCompanyMemberInviteBody, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type AddSourcedCandidateBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyAction, type ApplyApprovalPlan, type ApplyApprovalReceipt, type ApplyBody, type ApplyDecisionState, 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 BoardSitemapBucketSummary, type BoardSitemapIndex, 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 ConvertSourcedCandidateBody, type CreateApplyApprovalBody, type CreateApplyIntentBody, type CreateBoardClientOptions, type CreateCompanyBody, type CreateCompanyMemberInviteBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type CreateTalentListBody, 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 MembershipCheckoutBody, type MembershipCheckoutSession, type MembershipCheckoutSessionState, 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 SitemapEntriesEnvelope, type SitemapEntriesQuery, type SitemapEntry, type SourcedCandidate, 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 TalentList, type TalentListFilters, 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 UpdateTalentListBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isFreeEmailWebsiteError, isNotFound, isOwnMessage, isRateLimited, isSafeApplicationUrl, isUnauthorized, isValidationError, lastOwnMessageId, paginate, resolveApplyAction, resolveApplyDecision };
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- import { S as Schemas, c as components } from './_spec-CyNKpM_j.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-BRCbe1Nm.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-BRCbe1Nm.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-CXNxSlUB.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 PublicCompanyMembership, x as SalaryCompany, y as SalaryLocation, z as SalarySkill, A as SalaryTitle, B as SkillLocationSalary, D as SkillLocationsIndex, S as SkillSalaryDetail, E as TitleLocationSalary, F as TitleLocationsIndex, T as TitleSalaryDetail } from './board-CXNxSlUB.js';
6
- export { B as BoardSeo } from './seo-D1u-RmLQ.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-CSWXqLZR.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-CSWXqLZR.js';
9
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-CRvaDyzJ.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-CRvaDyzJ.js';
1
+ import { S as Schemas, c as components } from './_spec-p1bcDr9R.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-W28d76OJ.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-W28d76OJ.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-Dq9gD7qr.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 PublicCompanyMembership, x as SalaryCompany, y as SalaryLocation, z as SalarySkill, A as SalaryTitle, B as SkillLocationSalary, D as SkillLocationsIndex, S as SkillSalaryDetail, E as TitleLocationSalary, F as TitleLocationsIndex, T as TitleSalaryDetail } from './board-Dq9gD7qr.js';
6
+ export { B as BoardSeo } from './seo-DAHd1ngs.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-C-sBPgNp.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-C-sBPgNp.js';
9
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-DB4YIfn4.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-DB4YIfn4.js';
11
11
 
12
12
  /**
13
13
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -20,7 +20,7 @@ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts,
20
20
  * `unknown_error` is SDK-synthesized when a response carries no parseable
21
21
  * envelope.
22
22
  */
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_account_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", "membership_required", "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", "talent_list_not_found", "sourced_candidate_not_found", "sourced_convert_unavailable", "candidate_paywall_access_required", "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
+ 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_account_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_free_email_website", "employer_company_name_taken", "employer_company_not_found", "employer_job_not_found", "employer_job_slug_taken", "employer_jobs_quota_exceeded", "membership_required", "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", "talent_list_not_found", "sourced_candidate_not_found", "sourced_convert_unavailable", "candidate_paywall_access_required", "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", "membership_plan_not_found", "membership_seat_taken", "job_posting_logo_lookup_unavailable", "job_posting_logo_not_found", "job_posting_rejected"];
24
24
  /**
25
25
  * The known code set plus open string — new codes ship additively within v1,
26
26
  * so exhaustive narrowing is intentionally impossible.
@@ -80,6 +80,13 @@ declare function isForbidden(e: unknown): e is BoardApiError;
80
80
  declare function isValidationError(e: unknown): e is BoardApiError;
81
81
  declare function isRateLimited(e: unknown): e is BoardApiError;
82
82
  declare function isConflict(e: unknown): e is BoardApiError;
83
+ /**
84
+ * Create/update rejected because the company website is a free / consumer
85
+ * email provider domain (`employer_free_email_website`). Distinct from a
86
+ * generic 409 conflict — callers should prompt for a real company website
87
+ * (or omit website), not retry the same domain.
88
+ */
89
+ declare function isFreeEmailWebsiteError(e: unknown): e is BoardApiError;
83
90
 
84
91
  /** The minimal page shape every v1 list/search envelope satisfies. */
85
92
  interface PageShape {
@@ -143,7 +150,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
143
150
  * constant because the package is platform-neutral and cannot read
144
151
  * package.json at runtime.
145
152
  */
146
- declare const SDK_VERSION = "4.21.0";
153
+ declare const SDK_VERSION = "4.22.0";
147
154
 
148
155
  type SavedJob = Schemas['SavedJob'];
149
156
  type SavedJobsListQuery = {
@@ -367,6 +374,15 @@ type TalentAccessCheckoutBody = Schemas['TalentAccessCheckoutBody'];
367
374
  type TalentAccessCheckoutSession = Schemas['AccessCheckoutSession'];
368
375
  /** Polled state of a talent-access checkout session (`board.me.talentAccess.retrieveCheckout`). */
369
376
  type TalentAccessCheckoutSessionState = Schemas['AccessCheckoutSessionState'];
377
+ /** Body for `board.me.companies.startMembershipCheckout`. */
378
+ type MembershipCheckoutBody = Schemas['MembershipCheckoutBody'];
379
+ /**
380
+ * Connected-account mount kit from `board.me.companies.startMembershipCheckout`
381
+ * — same generated schema as talent-access checkout (`origin: membership`).
382
+ */
383
+ type MembershipCheckoutSession = Schemas['AccessCheckoutSession'];
384
+ /** Polled state of a membership checkout session (`board.me.companies.retrieveMembershipCheckout`). */
385
+ type MembershipCheckoutSessionState = Schemas['AccessCheckoutSessionState'];
370
386
  /** Result of `board.me.talentAccess.unlock`. */
371
387
  type TalentUnlock = Schemas['TalentUnlock'];
372
388
  /** Body for `board.me.talentAccess.unlock`. */
@@ -1922,6 +1938,19 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1922
1938
  updateMemberRole(slug: string, memberId: string, body: UpdateCompanyMemberRoleBody, options?: FetchOptions): Promise<void>;
1923
1939
  removeMember(slug: string, memberId: string, options?: FetchOptions): Promise<void>;
1924
1940
  leave(slug: string, options?: FetchOptions): Promise<void>;
1941
+ startMembershipCheckout(slug: string, body: MembershipCheckoutBody, options?: FetchOptions): Promise<{
1942
+ object: "checkout_session";
1943
+ sessionId: string;
1944
+ clientSecret: string;
1945
+ stripeAccountId: string;
1946
+ publishableKey: string;
1947
+ offerType: "recurring" | "lifetime";
1948
+ }>;
1949
+ retrieveMembershipCheckout(slug: string, sessionId: string, options?: FetchOptions): Promise<{
1950
+ object: "checkout_session_state";
1951
+ status: "open" | "complete" | "expired";
1952
+ clientSecret: string | null;
1953
+ }>;
1925
1954
  listInvites(slug: string, options?: FetchOptions): Promise<ListEnvelope<{
1926
1955
  id: string;
1927
1956
  object: "company_member_invite";
@@ -3504,4 +3533,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3504
3533
  };
3505
3534
  type BoardSdk = ReturnType<typeof createBoardClient>;
3506
3535
 
3507
- export { type AcceptCompanyMemberInviteBody, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type AddSourcedCandidateBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyAction, type ApplyApprovalPlan, type ApplyApprovalReceipt, type ApplyBody, type ApplyDecisionState, 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 BoardSitemapBucketSummary, type BoardSitemapIndex, 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 ConvertSourcedCandidateBody, type CreateApplyApprovalBody, type CreateApplyIntentBody, type CreateBoardClientOptions, type CreateCompanyBody, type CreateCompanyMemberInviteBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type CreateTalentListBody, 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 SitemapEntriesEnvelope, type SitemapEntriesQuery, type SitemapEntry, type SourcedCandidate, 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 TalentList, type TalentListFilters, 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 UpdateTalentListBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isNotFound, isOwnMessage, isRateLimited, isSafeApplicationUrl, isUnauthorized, isValidationError, lastOwnMessageId, paginate, resolveApplyAction, resolveApplyDecision };
3536
+ export { type AcceptCompanyMemberInviteBody, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type AddSourcedCandidateBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyAction, type ApplyApprovalPlan, type ApplyApprovalReceipt, type ApplyBody, type ApplyDecisionState, 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 BoardSitemapBucketSummary, type BoardSitemapIndex, 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 ConvertSourcedCandidateBody, type CreateApplyApprovalBody, type CreateApplyIntentBody, type CreateBoardClientOptions, type CreateCompanyBody, type CreateCompanyMemberInviteBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type CreateTalentListBody, 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 MembershipCheckoutBody, type MembershipCheckoutSession, type MembershipCheckoutSessionState, 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 SitemapEntriesEnvelope, type SitemapEntriesQuery, type SitemapEntry, type SourcedCandidate, 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 TalentList, type TalentListFilters, 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 UpdateTalentListBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isFreeEmailWebsiteError, isNotFound, isOwnMessage, isRateLimited, isSafeApplicationUrl, isUnauthorized, isValidationError, lastOwnMessageId, paginate, resolveApplyAction, resolveApplyDecision };
package/dist/index.js CHANGED
@@ -33,6 +33,7 @@ __export(src_exports, {
33
33
  isColdRule: () => isColdRule,
34
34
  isConflict: () => isConflict,
35
35
  isForbidden: () => isForbidden,
36
+ isFreeEmailWebsiteError: () => isFreeEmailWebsiteError,
36
37
  isNotFound: () => isNotFound,
37
38
  isOwnMessage: () => isOwnMessage,
38
39
  isRateLimited: () => isRateLimited,
@@ -152,6 +153,7 @@ var BOARD_API_ERROR_CODES = [
152
153
  "employer_ats_unprocessable",
153
154
  "employer_checkout_failed",
154
155
  "employer_company_exists",
156
+ "employer_free_email_website",
155
157
  "employer_company_name_taken",
156
158
  "employer_company_not_found",
157
159
  "employer_job_not_found",
@@ -194,6 +196,9 @@ var BOARD_API_ERROR_CODES = [
194
196
  "talent_access_required",
195
197
  "messaging_talent_access_required",
196
198
  "stripe_not_connected",
199
+ // Employer membership checkout
200
+ "membership_plan_not_found",
201
+ "membership_seat_taken",
197
202
  // Public job posting
198
203
  "job_posting_logo_lookup_unavailable",
199
204
  "job_posting_logo_not_found",
@@ -242,6 +247,9 @@ function isRateLimited(e) {
242
247
  function isConflict(e) {
243
248
  return isBoardApiError(e) && e.status === 409;
244
249
  }
250
+ function isFreeEmailWebsiteError(e) {
251
+ return isBoardApiError(e) && e.status === 422 && e.code === "employer_free_email_website";
252
+ }
245
253
 
246
254
  // src/query.ts
247
255
  function toSearchParams(query) {
@@ -350,7 +358,7 @@ async function clearSession(storage) {
350
358
  }
351
359
 
352
360
  // src/version.ts
353
- var SDK_VERSION = "4.21.0";
361
+ var SDK_VERSION = "4.22.0";
354
362
 
355
363
  // src/client.ts
356
364
  function isRawBody(body) {
@@ -1650,6 +1658,45 @@ function meNamespace(client) {
1650
1658
  { ...options, method: "DELETE" }
1651
1659
  );
1652
1660
  },
1661
+ /**
1662
+ * Start embedded Stripe checkout that buys a public membership (or
1663
+ * employer_service) plan for a company I approved-manage. Returns the
1664
+ * connected-account mount kit: initialise Stripe.js with
1665
+ * `publishableKey` and `{ stripeAccount: stripeAccountId }`, then mount
1666
+ * `clientSecret`. The plan is granted to the company by webhook once the
1667
+ * session completes — poll `retrieveMembershipCheckout`, then re-read
1668
+ * the company or `board.employers.memberships.list()`. 404
1669
+ * `membership_plan_not_found` for a plan that is not a public priced
1670
+ * membership on this board; 409 `membership_seat_taken` when the company
1671
+ * already holds one (or has an invoice pending).
1672
+ *
1673
+ * @example
1674
+ * const kit = await board.me.companies.startMembershipCheckout('acme', {
1675
+ * planId,
1676
+ * returnPath: '/memberships',
1677
+ * colorMode: 'light',
1678
+ * });
1679
+ */
1680
+ startMembershipCheckout(slug, body, options) {
1681
+ return client.fetch(
1682
+ `/me/companies/${encodeURIComponent(slug)}/membership/checkout`,
1683
+ { ...options, method: "POST", body }
1684
+ );
1685
+ },
1686
+ /**
1687
+ * Poll a membership checkout session started for this company: `open`
1688
+ * (re-mountable via `clientSecret`), `complete`, or `expired`. A session
1689
+ * minted for another company is 404 `paywall_invalid_checkout_session`.
1690
+ *
1691
+ * @example
1692
+ * const s = await board.me.companies.retrieveMembershipCheckout('acme', kit.sessionId);
1693
+ */
1694
+ retrieveMembershipCheckout(slug, sessionId, options) {
1695
+ return client.fetch(
1696
+ `/me/companies/${encodeURIComponent(slug)}/membership/checkout/${encodeURIComponent(sessionId)}`,
1697
+ options
1698
+ );
1699
+ },
1653
1700
  /**
1654
1701
  * List pending member invites for a company I belong to.
1655
1702
  *