@cavuno/board 4.11.0 → 4.13.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 (41) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/{_spec-Ck02NvUF.d.mts → _spec-mFq9K67X.d.mts} +25 -1
  3. package/dist/{_spec-Ck02NvUF.d.ts → _spec-mFq9K67X.d.ts} +25 -1
  4. package/dist/{blog-ClwNmr_N.d.ts → blog-BJF7uypj.d.ts} +1 -1
  5. package/dist/{blog-CZUXieNu.d.mts → blog-ClPGMp-z.d.mts} +1 -1
  6. package/dist/{board-wHyyyAhT.d.mts → board-CkYDc1Lz.d.mts} +2 -2
  7. package/dist/{board-6XZx1x5M.d.ts → board-Po58Sn65.d.ts} +2 -2
  8. package/dist/{breadcrumbs-DJjtyjlf.d.mts → breadcrumbs-BSP53mOY.d.mts} +18 -6
  9. package/dist/{breadcrumbs-CPaEpS6h.d.ts → breadcrumbs-BZzQwS8O.d.ts} +18 -6
  10. package/dist/browser/cavuno-board.global.min.js +1 -1
  11. package/dist/{chunk-6454IFHS.mjs → chunk-OPMJ6YH5.mjs} +6 -3
  12. package/dist/filters.d.mts +2 -2
  13. package/dist/filters.d.ts +2 -2
  14. package/dist/format.d.mts +4 -4
  15. package/dist/format.d.ts +4 -4
  16. package/dist/format.mjs +1 -1
  17. package/dist/index.d.mts +86 -19
  18. package/dist/index.d.ts +86 -19
  19. package/dist/index.js +20 -6
  20. package/dist/index.mjs +20 -6
  21. package/dist/{jobs-iG5udM2R.d.mts → jobs-BWpm-Jf0.d.mts} +1 -1
  22. package/dist/{jobs-3BAwXBxR.d.ts → jobs-hZ3Kezhg.d.ts} +1 -1
  23. package/dist/{search-5DzB-OrD.d.mts → search-DRIGekdi.d.mts} +1 -1
  24. package/dist/{search-kfabRi5l.d.ts → search-DSLK6Cch.d.ts} +1 -1
  25. package/dist/{seo-DndU15zg.d.ts → seo-CMNJMZcT.d.ts} +1 -1
  26. package/dist/{seo-C_Mt1i-Y.d.mts → seo-D9wvr1nK.d.mts} +1 -1
  27. package/dist/seo-files.d.mts +2 -2
  28. package/dist/seo-files.d.ts +2 -2
  29. package/dist/seo.d.mts +6 -6
  30. package/dist/seo.d.ts +6 -6
  31. package/dist/seo.js +6 -3
  32. package/dist/seo.mjs +1 -1
  33. package/dist/server.d.mts +6 -6
  34. package/dist/server.d.ts +6 -6
  35. package/dist/sitemap.d.mts +6 -6
  36. package/dist/sitemap.d.ts +6 -6
  37. package/dist/suggest.d.mts +2 -2
  38. package/dist/suggest.d.ts +2 -2
  39. package/package.json +1 -1
  40. package/skills/cavuno-board-seo/JOB_AND_BREADCRUMBS.md +5 -2
  41. package/skills/manifest.json +1 -1
@@ -444,6 +444,9 @@ function companyCategorySalaryJsonLd(d, options) {
444
444
  }
445
445
 
446
446
  // src/seo/job-posting.ts
447
+ function organizationName(job, board) {
448
+ return job.company?.name ?? board.legalName ?? board.contact?.legalName ?? board.name ?? null;
449
+ }
447
450
  var EDUCATION_TO_CREDENTIAL = {
448
451
  high_school: "high school",
449
452
  associate_degree: "associate degree",
@@ -750,13 +753,13 @@ function createJobPostingJsonLd({
750
753
  return jsonLd;
751
754
  }
752
755
  function createIdentifier(job, board) {
753
- const organizationName = job.company?.name ?? board.name ?? null;
756
+ const name = organizationName(job, board);
754
757
  const identifier = { "@type": "PropertyValue", value: job.id };
755
- if (organizationName) identifier.name = organizationName;
758
+ if (name) identifier.name = name;
756
759
  return identifier;
757
760
  }
758
761
  function createHiringOrganization(job, board) {
759
- const name = job.company?.name ?? board.name ?? null;
762
+ const name = organizationName(job, board);
760
763
  if (!name) return null;
761
764
  const organization = { "@type": "Organization", name };
762
765
  const website = job.company?.website ?? null;
@@ -1,5 +1,5 @@
1
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-iG5udM2R.mjs';
2
- import './_spec-Ck02NvUF.mjs';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-BWpm-Jf0.mjs';
2
+ import './_spec-mFq9K67X.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-3BAwXBxR.js';
2
- import './_spec-Ck02NvUF.js';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-hZ3Kezhg.js';
2
+ import './_spec-mFq9K67X.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-DJjtyjlf.mjs';
2
- import { C as CustomFieldDefinition } from './board-wHyyyAhT.mjs';
3
- import { C as CustomFieldValues } from './jobs-iG5udM2R.mjs';
4
- import './_spec-Ck02NvUF.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-BSP53mOY.mjs';
2
+ import { C as CustomFieldDefinition } from './board-CkYDc1Lz.mjs';
3
+ import { C as CustomFieldValues } from './jobs-BWpm-Jf0.mjs';
4
+ import './_spec-mFq9K67X.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-CPaEpS6h.js';
2
- import { C as CustomFieldDefinition } from './board-6XZx1x5M.js';
3
- import { C as CustomFieldValues } from './jobs-3BAwXBxR.js';
4
- import './_spec-Ck02NvUF.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-BZzQwS8O.js';
2
+ import { C as CustomFieldDefinition } from './board-Po58Sn65.js';
3
+ import { C as CustomFieldValues } from './jobs-hZ3Kezhg.js';
4
+ import './_spec-mFq9K67X.js';
5
5
 
6
6
  /**
7
7
  * Date display helpers in the board language (required leading parameter,
package/dist/format.mjs CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  formatSalaryStatRange,
6
6
  normalizeLocale,
7
7
  normalizeWebsiteUrl
8
- } from "./chunk-6454IFHS.mjs";
8
+ } from "./chunk-OPMJ6YH5.mjs";
9
9
  import "./chunk-BGKNXG4H.mjs";
10
10
 
11
11
  // src/format/dates.ts
package/dist/index.d.mts CHANGED
@@ -1,13 +1,13 @@
1
- import { S as Schemas, c as components } from './_spec-Ck02NvUF.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-5DzB-OrD.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-5DzB-OrD.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-wHyyyAhT.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 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-wHyyyAhT.mjs';
6
- export { B as BoardSeo } from './seo-C_Mt1i-Y.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-iG5udM2R.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-iG5udM2R.mjs';
9
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-CZUXieNu.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-CZUXieNu.mjs';
1
+ import { S as Schemas, c as components } from './_spec-mFq9K67X.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-DRIGekdi.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-DRIGekdi.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-CkYDc1Lz.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 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-CkYDc1Lz.mjs';
6
+ export { B as BoardSeo } from './seo-D9wvr1nK.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-BWpm-Jf0.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-BWpm-Jf0.mjs';
9
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-ClPGMp-z.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-ClPGMp-z.mjs';
11
11
 
12
12
  /**
13
13
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -143,7 +143,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
143
143
  * constant because the package is platform-neutral and cannot read
144
144
  * package.json at runtime.
145
145
  */
146
- declare const SDK_VERSION = "4.11.0";
146
+ declare const SDK_VERSION = "4.13.0";
147
147
 
148
148
  type SavedJob = Schemas['SavedJob'];
149
149
  type SavedJobsListQuery = {
@@ -441,21 +441,42 @@ declare function lastOwnMessageId(messages: Message[], counterpartyId: string):
441
441
  * The apply-decision ladder as a pure function — a core-entry
442
442
  * derive export like `messaging-derive`, so security/logic fixes ship via
443
443
  * the versioned package instead of re-copied registry files. Unit-testable
444
- * independent of React. Mirrors the hosted board's rule: an external
445
- * `applicationUrl`, when present, is the apply path for EVERYONE — it is
446
- * never gated behind auth or verification, so a signed-in-but-unverified
447
- * candidate is never worse off than an anonymous visitor.
444
+ * independent of React. Mirrors the hosted board's rule: past the
445
+ * registration wall an external `applicationUrl`, when present, is the
446
+ * apply path for EVERYONE — it is never gated behind verification, so a
447
+ * signed-in-but-unverified candidate is never worse off than an anonymous
448
+ * visitor. The wall itself gates every path including that external link,
449
+ * matching hosted `job-apply-button.tsx`.
448
450
  */
449
451
  type ApplyAction = {
450
452
  kind: 'external';
451
453
  url: string;
452
- } | {
454
+ }
455
+ /**
456
+ * `reason` says WHY sign-in is required, because callers gate on it:
457
+ * `'registration-wall'` outranks an external-applications-only board
458
+ * (a board with `nativeApplications: false` must still show the wall's
459
+ * sign-in CTA), whereas `'native-apply'` is collapsed away there.
460
+ * Optional — absent on the deprecated `resolveApplyAction` path.
461
+ */
462
+ | {
453
463
  kind: 'sign-in';
464
+ reason?: 'registration-wall' | 'native-apply';
454
465
  } | {
455
466
  kind: 'verify-email';
456
467
  } | {
457
468
  kind: 'native';
458
469
  jobSlug: string;
470
+ }
471
+ /**
472
+ * Anonymous guest apply — the visitor supplies name/email inline instead
473
+ * of registering. Only reachable when the board's registration wall is
474
+ * OFF and the caller set `allowGuestApply`, mirroring the hosted API,
475
+ * which rejects an anonymous apply only on a walled board.
476
+ */
477
+ | {
478
+ kind: 'guest';
479
+ jobSlug: string;
459
480
  } | {
460
481
  kind: 'applied';
461
482
  } | {
@@ -469,14 +490,46 @@ type ApplyAction = {
469
490
  * targets; anything else is treated as no external URL at all.
470
491
  */
471
492
  declare function isSafeApplicationUrl(url: string): boolean;
472
- declare function resolveApplyAction(state: {
493
+ interface ApplyDecisionState {
473
494
  jobSlug: string | null;
474
495
  applicationUrl: string | null;
475
496
  viewer: {
476
497
  emailVerified: boolean;
477
498
  } | null;
478
499
  applied: boolean;
479
- }): ApplyAction;
500
+ /**
501
+ * The board's `features.registrationWall`. When `true` the hosted board
502
+ * requires a signed-in candidate before ANY apply path — the external
503
+ * employer link included. When `false` an anonymous visitor may apply
504
+ * natively as a guest: `POST /jobs/:jobSlug/apply` accepts an
505
+ * unauthenticated caller who supplies name/email, and rejects a guest
506
+ * only when the wall is on.
507
+ *
508
+ * Sign-in — not verification — is the wall's bar, matching hosted: a
509
+ * signed-in-but-unverified candidate clears it.
510
+ */
511
+ registrationWall: boolean;
512
+ /**
513
+ * Does this UI have a guest-apply form to render? Opt-in, because the
514
+ * decision cannot know: a client with no form must keep getting
515
+ * `sign-in`, not a `guest` action it cannot present. Ignored when
516
+ * `registrationWall` is `true` — the wall always wins.
517
+ */
518
+ allowGuestApply?: boolean;
519
+ }
520
+ /**
521
+ * The full apply ladder including the registration wall. Prefer this over
522
+ * the deprecated `resolveApplyAction`, which cannot see the wall and so
523
+ * hands an anonymous visitor the external employer link on a walled board.
524
+ */
525
+ declare function resolveApplyDecision(state: ApplyDecisionState): ApplyAction;
526
+ /**
527
+ * @deprecated Wall-blind — use {@link resolveApplyDecision}, which takes
528
+ * the board's `features.registrationWall`. Kept as a one-line forward
529
+ * (`registrationWall: false`) so pinned callers keep their behaviour
530
+ * byte-for-byte; see docs/policy/removals.md.
531
+ */
532
+ declare function resolveApplyAction(state: Omit<ApplyDecisionState, 'registrationWall' | 'allowGuestApply'>): ApplyAction;
480
533
 
481
534
  type BoardUser = Schemas['BoardUser'];
482
535
  type BoardAuthSession = Schemas['BoardAuthSession'];
@@ -818,19 +871,33 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
818
871
  jobForm: {
819
872
  salary: {
820
873
  visible: boolean;
874
+ required: boolean;
875
+ minBound: number | null;
876
+ maxBound: number | null;
877
+ allowedCurrencies: string[] | null;
821
878
  };
822
879
  seniority: {
823
880
  visible: boolean;
881
+ required: boolean;
882
+ allowedOptions: string[];
824
883
  };
825
884
  location: {
826
885
  visible: boolean;
886
+ allowedCountries: string[] | null;
827
887
  };
828
888
  sponsorship: {
829
889
  visible: boolean;
830
890
  };
891
+ workArrangement: {
892
+ allowedOptions: string[];
893
+ };
894
+ employmentType: {
895
+ allowedOptions: string[];
896
+ };
831
897
  };
832
898
  contact: {
833
899
  email: string | null;
900
+ legalName: string | null;
834
901
  websiteUrl: string | null;
835
902
  xUrl: string | null;
836
903
  facebookUrl: string | null;
@@ -3288,4 +3355,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3288
3355
  };
3289
3356
  type BoardSdk = ReturnType<typeof createBoardClient>;
3290
3357
 
3291
- 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 };
3358
+ 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 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 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, resolveApplyDecision };
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- import { S as Schemas, c as components } from './_spec-Ck02NvUF.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-kfabRi5l.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-kfabRi5l.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-6XZx1x5M.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-6XZx1x5M.js';
6
- export { B as BoardSeo } from './seo-DndU15zg.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-3BAwXBxR.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-3BAwXBxR.js';
9
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-ClwNmr_N.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-ClwNmr_N.js';
1
+ import { S as Schemas, c as components } from './_spec-mFq9K67X.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-DSLK6Cch.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-DSLK6Cch.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-Po58Sn65.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-Po58Sn65.js';
6
+ export { B as BoardSeo } from './seo-CMNJMZcT.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-hZ3Kezhg.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-hZ3Kezhg.js';
9
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-BJF7uypj.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-BJF7uypj.js';
11
11
 
12
12
  /**
13
13
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -143,7 +143,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
143
143
  * constant because the package is platform-neutral and cannot read
144
144
  * package.json at runtime.
145
145
  */
146
- declare const SDK_VERSION = "4.11.0";
146
+ declare const SDK_VERSION = "4.13.0";
147
147
 
148
148
  type SavedJob = Schemas['SavedJob'];
149
149
  type SavedJobsListQuery = {
@@ -441,21 +441,42 @@ declare function lastOwnMessageId(messages: Message[], counterpartyId: string):
441
441
  * The apply-decision ladder as a pure function — a core-entry
442
442
  * derive export like `messaging-derive`, so security/logic fixes ship via
443
443
  * the versioned package instead of re-copied registry files. Unit-testable
444
- * independent of React. Mirrors the hosted board's rule: an external
445
- * `applicationUrl`, when present, is the apply path for EVERYONE — it is
446
- * never gated behind auth or verification, so a signed-in-but-unverified
447
- * candidate is never worse off than an anonymous visitor.
444
+ * independent of React. Mirrors the hosted board's rule: past the
445
+ * registration wall an external `applicationUrl`, when present, is the
446
+ * apply path for EVERYONE — it is never gated behind verification, so a
447
+ * signed-in-but-unverified candidate is never worse off than an anonymous
448
+ * visitor. The wall itself gates every path including that external link,
449
+ * matching hosted `job-apply-button.tsx`.
448
450
  */
449
451
  type ApplyAction = {
450
452
  kind: 'external';
451
453
  url: string;
452
- } | {
454
+ }
455
+ /**
456
+ * `reason` says WHY sign-in is required, because callers gate on it:
457
+ * `'registration-wall'` outranks an external-applications-only board
458
+ * (a board with `nativeApplications: false` must still show the wall's
459
+ * sign-in CTA), whereas `'native-apply'` is collapsed away there.
460
+ * Optional — absent on the deprecated `resolveApplyAction` path.
461
+ */
462
+ | {
453
463
  kind: 'sign-in';
464
+ reason?: 'registration-wall' | 'native-apply';
454
465
  } | {
455
466
  kind: 'verify-email';
456
467
  } | {
457
468
  kind: 'native';
458
469
  jobSlug: string;
470
+ }
471
+ /**
472
+ * Anonymous guest apply — the visitor supplies name/email inline instead
473
+ * of registering. Only reachable when the board's registration wall is
474
+ * OFF and the caller set `allowGuestApply`, mirroring the hosted API,
475
+ * which rejects an anonymous apply only on a walled board.
476
+ */
477
+ | {
478
+ kind: 'guest';
479
+ jobSlug: string;
459
480
  } | {
460
481
  kind: 'applied';
461
482
  } | {
@@ -469,14 +490,46 @@ type ApplyAction = {
469
490
  * targets; anything else is treated as no external URL at all.
470
491
  */
471
492
  declare function isSafeApplicationUrl(url: string): boolean;
472
- declare function resolveApplyAction(state: {
493
+ interface ApplyDecisionState {
473
494
  jobSlug: string | null;
474
495
  applicationUrl: string | null;
475
496
  viewer: {
476
497
  emailVerified: boolean;
477
498
  } | null;
478
499
  applied: boolean;
479
- }): ApplyAction;
500
+ /**
501
+ * The board's `features.registrationWall`. When `true` the hosted board
502
+ * requires a signed-in candidate before ANY apply path — the external
503
+ * employer link included. When `false` an anonymous visitor may apply
504
+ * natively as a guest: `POST /jobs/:jobSlug/apply` accepts an
505
+ * unauthenticated caller who supplies name/email, and rejects a guest
506
+ * only when the wall is on.
507
+ *
508
+ * Sign-in — not verification — is the wall's bar, matching hosted: a
509
+ * signed-in-but-unverified candidate clears it.
510
+ */
511
+ registrationWall: boolean;
512
+ /**
513
+ * Does this UI have a guest-apply form to render? Opt-in, because the
514
+ * decision cannot know: a client with no form must keep getting
515
+ * `sign-in`, not a `guest` action it cannot present. Ignored when
516
+ * `registrationWall` is `true` — the wall always wins.
517
+ */
518
+ allowGuestApply?: boolean;
519
+ }
520
+ /**
521
+ * The full apply ladder including the registration wall. Prefer this over
522
+ * the deprecated `resolveApplyAction`, which cannot see the wall and so
523
+ * hands an anonymous visitor the external employer link on a walled board.
524
+ */
525
+ declare function resolveApplyDecision(state: ApplyDecisionState): ApplyAction;
526
+ /**
527
+ * @deprecated Wall-blind — use {@link resolveApplyDecision}, which takes
528
+ * the board's `features.registrationWall`. Kept as a one-line forward
529
+ * (`registrationWall: false`) so pinned callers keep their behaviour
530
+ * byte-for-byte; see docs/policy/removals.md.
531
+ */
532
+ declare function resolveApplyAction(state: Omit<ApplyDecisionState, 'registrationWall' | 'allowGuestApply'>): ApplyAction;
480
533
 
481
534
  type BoardUser = Schemas['BoardUser'];
482
535
  type BoardAuthSession = Schemas['BoardAuthSession'];
@@ -818,19 +871,33 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
818
871
  jobForm: {
819
872
  salary: {
820
873
  visible: boolean;
874
+ required: boolean;
875
+ minBound: number | null;
876
+ maxBound: number | null;
877
+ allowedCurrencies: string[] | null;
821
878
  };
822
879
  seniority: {
823
880
  visible: boolean;
881
+ required: boolean;
882
+ allowedOptions: string[];
824
883
  };
825
884
  location: {
826
885
  visible: boolean;
886
+ allowedCountries: string[] | null;
827
887
  };
828
888
  sponsorship: {
829
889
  visible: boolean;
830
890
  };
891
+ workArrangement: {
892
+ allowedOptions: string[];
893
+ };
894
+ employmentType: {
895
+ allowedOptions: string[];
896
+ };
831
897
  };
832
898
  contact: {
833
899
  email: string | null;
900
+ legalName: string | null;
834
901
  websiteUrl: string | null;
835
902
  xUrl: string | null;
836
903
  facebookUrl: string | null;
@@ -3288,4 +3355,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3288
3355
  };
3289
3356
  type BoardSdk = ReturnType<typeof createBoardClient>;
3290
3357
 
3291
- 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 };
3358
+ 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 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 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, resolveApplyDecision };
package/dist/index.js CHANGED
@@ -41,7 +41,8 @@ __export(src_exports, {
41
41
  isValidationError: () => isValidationError,
42
42
  lastOwnMessageId: () => lastOwnMessageId,
43
43
  paginate: () => paginate,
44
- resolveApplyAction: () => resolveApplyAction
44
+ resolveApplyAction: () => resolveApplyAction,
45
+ resolveApplyDecision: () => resolveApplyDecision
45
46
  });
46
47
  module.exports = __toCommonJS(src_exports);
47
48
 
@@ -342,7 +343,7 @@ async function clearSession(storage) {
342
343
  }
343
344
 
344
345
  // src/version.ts
345
- var SDK_VERSION = "4.11.0";
346
+ var SDK_VERSION = "4.13.0";
346
347
 
347
348
  // src/client.ts
348
349
  function isRawBody(body) {
@@ -3213,16 +3214,29 @@ function isSafeApplicationUrl(url) {
3213
3214
  if (scheme === void 0) return true;
3214
3215
  return scheme === "http" || scheme === "https" || scheme === "mailto";
3215
3216
  }
3216
- function resolveApplyAction(state) {
3217
- if (state.applicationUrl && isSafeApplicationUrl(state.applicationUrl)) {
3218
- return { kind: "external", url: state.applicationUrl };
3217
+ function resolveApplyDecision(state) {
3218
+ const externalUrl = state.applicationUrl && isSafeApplicationUrl(state.applicationUrl) ? state.applicationUrl : null;
3219
+ if (!externalUrl && !state.jobSlug) return { kind: "none" };
3220
+ if (state.registrationWall && !state.viewer) {
3221
+ return { kind: "sign-in", reason: "registration-wall" };
3219
3222
  }
3223
+ if (externalUrl) return { kind: "external", url: externalUrl };
3220
3224
  if (!state.jobSlug) return { kind: "none" };
3221
- if (!state.viewer) return { kind: "sign-in" };
3225
+ if (!state.viewer) {
3226
+ return state.allowGuestApply ? { kind: "guest", jobSlug: state.jobSlug } : { kind: "sign-in", reason: "native-apply" };
3227
+ }
3222
3228
  if (!state.viewer.emailVerified) return { kind: "verify-email" };
3223
3229
  if (state.applied) return { kind: "applied" };
3224
3230
  return { kind: "native", jobSlug: state.jobSlug };
3225
3231
  }
3232
+ function resolveApplyAction(state) {
3233
+ const action = resolveApplyDecision({
3234
+ ...state,
3235
+ registrationWall: false,
3236
+ allowGuestApply: false
3237
+ });
3238
+ return action.kind === "sign-in" ? { kind: "sign-in" } : action;
3239
+ }
3226
3240
 
3227
3241
  // src/index.ts
3228
3242
  function createBoardClient(options) {
package/dist/index.mjs CHANGED
@@ -39,7 +39,7 @@ function toSearchParams(query) {
39
39
  }
40
40
 
41
41
  // src/version.ts
42
- var SDK_VERSION = "4.11.0";
42
+ var SDK_VERSION = "4.13.0";
43
43
 
44
44
  // src/client.ts
45
45
  function isRawBody(body) {
@@ -2880,16 +2880,29 @@ function isSafeApplicationUrl(url) {
2880
2880
  if (scheme === void 0) return true;
2881
2881
  return scheme === "http" || scheme === "https" || scheme === "mailto";
2882
2882
  }
2883
- function resolveApplyAction(state) {
2884
- if (state.applicationUrl && isSafeApplicationUrl(state.applicationUrl)) {
2885
- return { kind: "external", url: state.applicationUrl };
2883
+ function resolveApplyDecision(state) {
2884
+ const externalUrl = state.applicationUrl && isSafeApplicationUrl(state.applicationUrl) ? state.applicationUrl : null;
2885
+ if (!externalUrl && !state.jobSlug) return { kind: "none" };
2886
+ if (state.registrationWall && !state.viewer) {
2887
+ return { kind: "sign-in", reason: "registration-wall" };
2886
2888
  }
2889
+ if (externalUrl) return { kind: "external", url: externalUrl };
2887
2890
  if (!state.jobSlug) return { kind: "none" };
2888
- if (!state.viewer) return { kind: "sign-in" };
2891
+ if (!state.viewer) {
2892
+ return state.allowGuestApply ? { kind: "guest", jobSlug: state.jobSlug } : { kind: "sign-in", reason: "native-apply" };
2893
+ }
2889
2894
  if (!state.viewer.emailVerified) return { kind: "verify-email" };
2890
2895
  if (state.applied) return { kind: "applied" };
2891
2896
  return { kind: "native", jobSlug: state.jobSlug };
2892
2897
  }
2898
+ function resolveApplyAction(state) {
2899
+ const action = resolveApplyDecision({
2900
+ ...state,
2901
+ registrationWall: false,
2902
+ allowGuestApply: false
2903
+ });
2904
+ return action.kind === "sign-in" ? { kind: "sign-in" } : action;
2905
+ }
2893
2906
 
2894
2907
  // src/index.ts
2895
2908
  function createBoardClient(options) {
@@ -2971,5 +2984,6 @@ export {
2971
2984
  isValidationError,
2972
2985
  lastOwnMessageId,
2973
2986
  paginate,
2974
- resolveApplyAction
2987
+ resolveApplyAction,
2988
+ resolveApplyDecision
2975
2989
  };
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-Ck02NvUF.mjs';
1
+ import { S as Schemas } from './_spec-mFq9K67X.mjs';
2
2
 
3
3
  /**
4
4
  * Optional pagination metadata returned by Board API list operations.
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-Ck02NvUF.js';
1
+ import { S as Schemas } from './_spec-mFq9K67X.js';
2
2
 
3
3
  /**
4
4
  * Optional pagination metadata returned by Board API list operations.
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-Ck02NvUF.mjs';
1
+ import { S as Schemas } from './_spec-mFq9K67X.mjs';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-Ck02NvUF.js';
1
+ import { S as Schemas } from './_spec-mFq9K67X.js';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-Ck02NvUF.js';
1
+ import { S as Schemas } from './_spec-mFq9K67X.js';
2
2
 
3
3
  /**
4
4
  * The public SEO-infra payload (`board.seo()`) — platform infrastructure a
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-Ck02NvUF.mjs';
1
+ import { S as Schemas } from './_spec-mFq9K67X.mjs';
2
2
 
3
3
  /**
4
4
  * The public SEO-infra payload (`board.seo()`) — platform infrastructure a
@@ -1,5 +1,5 @@
1
- import { B as BoardSeo } from './seo-C_Mt1i-Y.mjs';
2
- import './_spec-Ck02NvUF.mjs';
1
+ import { B as BoardSeo } from './seo-D9wvr1nK.mjs';
2
+ import './_spec-mFq9K67X.mjs';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/seo-files` — platform-owned crawler/identity file bodies
@@ -1,5 +1,5 @@
1
- import { B as BoardSeo } from './seo-DndU15zg.js';
2
- import './_spec-Ck02NvUF.js';
1
+ import { B as BoardSeo } from './seo-CMNJMZcT.js';
2
+ import './_spec-mFq9K67X.js';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/seo-files` — platform-owned crawler/identity file bodies