@cavuno/board 1.39.0 → 1.41.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 (37) hide show
  1. package/dist/{_spec-DxC1ze93.d.mts → _spec-l_596ZwW.d.mts} +373 -0
  2. package/dist/{_spec-DxC1ze93.d.ts → _spec-l_596ZwW.d.ts} +373 -0
  3. package/dist/bin.mjs +242 -18
  4. package/dist/{board-RfZEAJse.d.ts → board-BzK5j73O.d.ts} +1 -1
  5. package/dist/{board-CqYibYUA.d.mts → board-CyHA6rRP.d.mts} +1 -1
  6. package/dist/doctor.js +238 -14
  7. package/dist/doctor.mjs +238 -14
  8. package/dist/filters.d.mts +2 -2
  9. package/dist/filters.d.ts +2 -2
  10. package/dist/format.d.mts +3 -3
  11. package/dist/format.d.ts +3 -3
  12. package/dist/index.d.mts +89 -10
  13. package/dist/index.d.ts +89 -10
  14. package/dist/index.js +91 -1
  15. package/dist/index.mjs +91 -1
  16. package/dist/{jobs-DPPA1Nev.d.mts → jobs-BhthvMkA.d.mts} +1 -1
  17. package/dist/{jobs-CLLIvtMc.d.ts → jobs-CXudz1Y4.d.ts} +1 -1
  18. package/dist/{salaries-DK4RnJnw.d.ts → salaries-ByBuHCLH.d.ts} +2 -2
  19. package/dist/{salaries-Rb5h_eVZ.d.mts → salaries-Dr_Zugal.d.mts} +2 -2
  20. package/dist/{search-CqBa1Qc4.d.mts → search-CrIlXSJP.d.mts} +1 -1
  21. package/dist/{search-DBoMM-gE.d.ts → search-DZrq-k76.d.ts} +1 -1
  22. package/dist/seo.d.mts +4 -4
  23. package/dist/seo.d.ts +4 -4
  24. package/dist/server.d.mts +56 -6
  25. package/dist/server.d.ts +56 -6
  26. package/dist/server.js +41 -0
  27. package/dist/server.mjs +41 -0
  28. package/dist/sitemap.d.mts +5 -5
  29. package/dist/sitemap.d.ts +5 -5
  30. package/dist/suggest.d.mts +2 -2
  31. package/dist/suggest.d.ts +2 -2
  32. package/dist/theme.d.mts +49 -1
  33. package/dist/theme.d.ts +49 -1
  34. package/dist/theme.js +60 -26
  35. package/dist/theme.mjs +60 -26
  36. package/package.json +1 -1
  37. package/skills/manifest.json +1 -1
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { S as Schemas, c as components } from './_spec-DxC1ze93.js';
2
- import { F as FetchOptions, c as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, d as BoardClient, a as SearchSuggestQuery } from './search-DBoMM-gE.js';
3
- export { e as ACCESS_TOKEN_KEY, f as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, g as CustomStorage, R as REFRESH_TOKEN_KEY, b as SuggestResult, S as SuggestionItem, T as TermSuggestion } from './search-DBoMM-gE.js';
4
- export { C as CustomFieldDefinition, a as CustomFieldOption, b as CustomFieldType, P as PublicBoard, c as PublicBoardAnalytics, d as PublicBoardFeatures, e as PublicBoardTheme } from './board-RfZEAJse.js';
5
- import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, b as JobsListQuery, c as JobCardListEnvelope, d as JobsSearchBody, e as JobCardSearchEnvelope, f as JobsSimilarQuery, g as SearchEnvelope } from './jobs-CLLIvtMc.js';
6
- export { h as CustomFieldValue, C as CustomFieldValues, i as EducationRequirement, j as JobCatalogPagination, k as JobCompany, J as JobSort, O as OfficeLocation, l as OffsetPagination, P as PublicJob, a as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-CLLIvtMc.js';
7
- import { b as CompaniesListQuery, c as CompanyListEnvelope, d as CompaniesSearchBody, e as CompanyJobsListQuery, f as CompanySimilarQuery, g as CompanyMarketsListQuery, h as SalaryDetailQuery, i as BlogPostsListQuery, j as BlogSimilarQuery, k as BlogSearchBody } from './salaries-DK4RnJnw.js';
8
- export { B as BlogAuthorEmbed, l as BlogTagEmbed, C as CompanyCategorySalary, m as CompanyMarket, n as CompanyMarketRef, a as CompanySalary, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, q as PublicBlogAdjacentPosts, r as PublicBlogAuthor, s as PublicBlogPost, P as PublicBlogPostSummary, t as PublicBlogTag, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, D as SkillLocationsIndex, S as SkillSalaryDetail, E as TitleLocationSalary, F as TitleLocationsIndex, T as TitleSalaryDetail } from './salaries-DK4RnJnw.js';
1
+ import { S as Schemas, c as components } from './_spec-l_596ZwW.js';
2
+ import { F as FetchOptions, c as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, d as BoardClient, a as SearchSuggestQuery } from './search-DZrq-k76.js';
3
+ export { e as ACCESS_TOKEN_KEY, f as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, g as CustomStorage, R as REFRESH_TOKEN_KEY, b as SuggestResult, S as SuggestionItem, T as TermSuggestion } from './search-DZrq-k76.js';
4
+ export { C as CustomFieldDefinition, a as CustomFieldOption, b as CustomFieldType, P as PublicBoard, c as PublicBoardAnalytics, d as PublicBoardFeatures, e as PublicBoardTheme } from './board-BzK5j73O.js';
5
+ import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, b as JobsListQuery, c as JobCardListEnvelope, d as JobsSearchBody, e as JobCardSearchEnvelope, f as JobsSimilarQuery, g as SearchEnvelope } from './jobs-CXudz1Y4.js';
6
+ export { h as CustomFieldValue, C as CustomFieldValues, i as EducationRequirement, j as JobCatalogPagination, k as JobCompany, J as JobSort, O as OfficeLocation, l as OffsetPagination, P as PublicJob, a as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-CXudz1Y4.js';
7
+ import { b as CompaniesListQuery, c as CompanyListEnvelope, d as CompaniesSearchBody, e as CompanyJobsListQuery, f as CompanySimilarQuery, g as CompanyMarketsListQuery, h as SalaryDetailQuery, i as BlogPostsListQuery, j as BlogSimilarQuery, k as BlogSearchBody } from './salaries-ByBuHCLH.js';
8
+ export { B as BlogAuthorEmbed, l as BlogTagEmbed, C as CompanyCategorySalary, m as CompanyMarket, n as CompanyMarketRef, a as CompanySalary, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, q as PublicBlogAdjacentPosts, r as PublicBlogAuthor, s as PublicBlogPost, P as PublicBlogPostSummary, t as PublicBlogTag, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, D as SkillLocationsIndex, S as SkillSalaryDetail, E as TitleLocationSalary, F as TitleLocationsIndex, T as TitleSalaryDetail } from './salaries-ByBuHCLH.js';
9
9
 
10
10
  /**
11
11
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -141,7 +141,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
141
141
  * constant because the package is platform-neutral and cannot read
142
142
  * package.json at runtime.
143
143
  */
144
- declare const SDK_VERSION = "1.39.0";
144
+ declare const SDK_VERSION = "1.41.0";
145
145
 
146
146
  type SavedJob = Schemas['SavedJob'];
147
147
  type SavedJobsListQuery = {
@@ -257,6 +257,12 @@ type CreateCompanyBody = Schemas['CreateCompanyBody'];
257
257
  type UpdateEmployerCompanyBody = Schemas['UpdateEmployerCompanyBody'];
258
258
  type SendWorkEmailBody = Schemas['SendWorkEmailBody'];
259
259
  type ConfirmWorkEmailBody = Schemas['ConfirmWorkEmailBody'];
260
+ /**
261
+ * The viewer's per-employer talent entitlement from
262
+ * `board.me.talentAccess.retrieve` — the talent-CTA signal (sourced from the
263
+ * same subscription/credit-pack truth the talent paywall enforces).
264
+ */
265
+ type TalentAccess = Schemas['TalentAccess'];
260
266
  /** Query for `board.me.companies.search`. */
261
267
  type EmployerCompanySearchQuery = {
262
268
  q: string;
@@ -274,6 +280,25 @@ type EmployerJobsListQuery = {
274
280
  /** 1–200 (default 200). */
275
281
  limit?: number;
276
282
  };
283
+ /**
284
+ * One job's reporting funnel from `board.me.companies.jobStats.retrieve`.
285
+ * `views` / `applyClicks` degrade to `0` on a Tinybird outage (the endpoint
286
+ * never fails on analytics), so a `0` is "no activity" OR "analytics briefly
287
+ * unavailable". `applications` is `null` for an external-apply job.
288
+ */
289
+ type EmployerJobStat = Schemas['EmployerJobStat'];
290
+ /**
291
+ * One daily bucket from `board.me.companies.jobStats.timeseries`, aggregated
292
+ * across the company's jobs. Zero-filled over the window, ascending by date.
293
+ */
294
+ type EmployerJobStatsPoint = Schemas['EmployerJobStatsPoint'];
295
+ /** Query for `board.me.companies.jobStats.timeseries`. */
296
+ type EmployerJobStatsTimeseriesQuery = {
297
+ /** Inclusive window start (ISO 8601). Defaults to 30 days before `until`. */
298
+ since?: string;
299
+ /** Exclusive window end (ISO 8601). Defaults to now. */
300
+ until?: string;
301
+ };
277
302
  /** A job's full applicant pipeline (job header + stage rail + applicants). */
278
303
  type EmployerPipeline = Schemas['EmployerPipeline'];
279
304
  /** One applicant on a job's pipeline, with its activity timeline. */
@@ -657,6 +682,8 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
657
682
  publicJobSubmission: boolean;
658
683
  candidatePaywall: boolean;
659
684
  impressum: boolean;
685
+ nativeApplications: boolean;
686
+ messaging: boolean;
660
687
  };
661
688
  talentDirectoryVisibility: "off" | "public" | "employers_only";
662
689
  analytics: {
@@ -1506,6 +1533,19 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1506
1533
  };
1507
1534
  }>;
1508
1535
  cancelClaim(slug: string, options?: FetchOptions): Promise<void>;
1536
+ retrieve(slug: string, options?: FetchOptions): Promise<{
1537
+ id: string;
1538
+ object: "employer_company";
1539
+ name: string;
1540
+ slug: string;
1541
+ website: string | null;
1542
+ description: string | null;
1543
+ summary: string | null;
1544
+ xUrl: string | null;
1545
+ linkedinUrl: string | null;
1546
+ facebookUrl: string | null;
1547
+ logoUrl: string | null;
1548
+ }>;
1509
1549
  update(slug: string, body: UpdateEmployerCompanyBody, options?: FetchOptions): Promise<{
1510
1550
  id: string;
1511
1551
  object: "employer_company";
@@ -1519,6 +1559,19 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1519
1559
  facebookUrl: string | null;
1520
1560
  logoUrl: string | null;
1521
1561
  }>;
1562
+ uploadLogo(slug: string, file: Blob, options?: FetchOptions): Promise<{
1563
+ id: string;
1564
+ object: "employer_company";
1565
+ name: string;
1566
+ slug: string;
1567
+ website: string | null;
1568
+ description: string | null;
1569
+ summary: string | null;
1570
+ xUrl: string | null;
1571
+ linkedinUrl: string | null;
1572
+ facebookUrl: string | null;
1573
+ logoUrl: string | null;
1574
+ }>;
1522
1575
  workEmail: {
1523
1576
  verify(slug: string, body: SendWorkEmailBody, options?: FetchOptions): Promise<{
1524
1577
  id: string;
@@ -1822,6 +1875,21 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1822
1875
  renewsAt: string | null;
1823
1876
  }>>;
1824
1877
  };
1878
+ jobStats: {
1879
+ retrieve(slug: string, options?: FetchOptions): Promise<ListEnvelope<{
1880
+ object: "employer_job_stat";
1881
+ jobId: string;
1882
+ views: number;
1883
+ applyClicks: number;
1884
+ applications: number | null;
1885
+ }>>;
1886
+ timeseries(slug: string, query?: EmployerJobStatsTimeseriesQuery, options?: FetchOptions): Promise<ListEnvelope<{
1887
+ object: "employer_job_stats_point";
1888
+ date: string;
1889
+ views: number;
1890
+ applyClicks: number;
1891
+ }>>;
1892
+ };
1825
1893
  applicants: {
1826
1894
  list(slug: string, query: EmployerPipelineQuery, options?: FetchOptions): Promise<{
1827
1895
  object: "employer_pipeline";
@@ -1846,6 +1914,15 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1846
1914
  reorder(slug: string, body: ReorderPipelineStagesBody, options?: FetchOptions): Promise<void>;
1847
1915
  };
1848
1916
  };
1917
+ talentAccess: {
1918
+ retrieve(options?: FetchOptions): Promise<{
1919
+ object: "talent_access";
1920
+ isEmployer: boolean;
1921
+ paywallActive: boolean;
1922
+ hasTalentAccess: boolean;
1923
+ hasUnlimitedUnlocks: boolean;
1924
+ }>;
1925
+ };
1849
1926
  alerts: {
1850
1927
  list(options?: FetchOptions): Promise<ListEnvelope<{
1851
1928
  id: string;
@@ -2883,6 +2960,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2883
2960
  title: string;
2884
2961
  companyName: string;
2885
2962
  companyUrl: string | null;
2963
+ companyLogoUrl: string | null;
2886
2964
  location: string | null;
2887
2965
  employmentType: string | null;
2888
2966
  locationType: string | null;
@@ -2895,6 +2973,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2895
2973
  education: {
2896
2974
  institutionName: string;
2897
2975
  institutionUrl: string | null;
2976
+ institutionLogoUrl: string | null;
2898
2977
  degree: string | null;
2899
2978
  fieldOfStudy: string | null;
2900
2979
  grade: string | null;
@@ -2923,4 +3002,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2923
3002
  };
2924
3003
  type BoardSdk = ReturnType<typeof createBoardClient>;
2925
3004
 
2926
- export { 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 ApplyBody, Awaitable, BOARD_API_ERROR_CODES, type Block, type BlockStatus, type BlockUserBody, type BlockedUser, BlogPostsListQuery, BlogSearchBody, BlogSimilarQuery, type BoardAccessGrant, BoardApiError, type BoardApiErrorCode, type BoardAuthSession, BoardClient, BoardRequest, type BoardSdk, type BoardSeo, type BoardUser, type BulkMoveApplicantsBody, type BulkRejectApplicantsBody, type CandidateAvatar, type CandidateEducation, type CandidateExperience, type CandidateLanguage, type CandidateProfile, type CandidateSkill, type ClaimableCompany, CompaniesListQuery, CompaniesSearchBody, CompanyJobsListQuery, CompanyListEnvelope, CompanyMarketsListQuery, type CompanyMembership, CompanySimilarQuery, type ConfirmWorkEmailBody, type ConsumeMagicLinkBody, type Conversation, type ConversationArchive, type ConversationDetail, type ConversationRef, type ConversationsListQuery, type CreateBoardClientOptions, type CreateCompanyBody, 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 EmployerJobSummary, type EmployerJobsListQuery, type EmployerPipeline, type EmployerPipelineQuery, type EmployerPipelineStage, 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, type LegalEntity, type LegalPageType, ListEnvelope, Logger, type LoginBody, type LogoutBody, 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 PublicLegalPage, type PublicPlace, type PublicTaxonomyTerm, type ReadReceipt, type RedirectResolution, type RefreshBody, type RegisterBody, RemoteOption, type RemotePermitTaxonomyEntry, type ReorderPipelineStagesBody, type ReplyBody, type ReportBody, 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 SuggestionsListQuery, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TaxonomyGeo, type TaxonomyListQuery, type TaxonomyResolution, type ThreadMessagesQuery, type UnreadCount, type UnsubscribeBody, type UpdateApplicationFactsBody, type UpdateCandidateProfileBody, type UpdateEducationBody, type UpdateEmployerCompanyBody, type UpdateEmployerJobBody, type UpdateExperienceBody, type UpdateLanguagesBody, type UpdateNotificationPreferenceBody, type UpdatePipelineStageBody, type UpdateSkillsBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isNotFound, isOwnMessage, isRateLimited, isSafeApplicationUrl, isUnauthorized, isValidationError, lastOwnMessageId, paginate, resolveApplyAction };
3005
+ export { 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 ApplyBody, Awaitable, BOARD_API_ERROR_CODES, type Block, type BlockStatus, type BlockUserBody, type BlockedUser, BlogPostsListQuery, BlogSearchBody, BlogSimilarQuery, type BoardAccessGrant, BoardApiError, type BoardApiErrorCode, type BoardAuthSession, BoardClient, BoardRequest, type BoardSdk, type BoardSeo, type BoardUser, type BulkMoveApplicantsBody, type BulkRejectApplicantsBody, type CandidateAvatar, type CandidateEducation, type CandidateExperience, type CandidateLanguage, type CandidateProfile, type CandidateSkill, type ClaimableCompany, CompaniesListQuery, CompaniesSearchBody, CompanyJobsListQuery, CompanyListEnvelope, CompanyMarketsListQuery, type CompanyMembership, CompanySimilarQuery, type ConfirmWorkEmailBody, type ConsumeMagicLinkBody, type Conversation, type ConversationArchive, type ConversationDetail, type ConversationRef, type ConversationsListQuery, type CreateBoardClientOptions, type CreateCompanyBody, 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, 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, type LegalEntity, type LegalPageType, ListEnvelope, Logger, type LoginBody, type LogoutBody, 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 PublicLegalPage, type PublicPlace, type PublicTaxonomyTerm, type ReadReceipt, type RedirectResolution, type RefreshBody, type RegisterBody, RemoteOption, type RemotePermitTaxonomyEntry, type ReorderPipelineStagesBody, type ReplyBody, type ReportBody, 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 SuggestionsListQuery, type TalentAccess, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TaxonomyGeo, type TaxonomyListQuery, type TaxonomyResolution, type ThreadMessagesQuery, type UnreadCount, type UnsubscribeBody, type UpdateApplicationFactsBody, type UpdateCandidateProfileBody, type UpdateEducationBody, type UpdateEmployerCompanyBody, type UpdateEmployerJobBody, type UpdateExperienceBody, type UpdateLanguagesBody, type UpdateNotificationPreferenceBody, type UpdatePipelineStageBody, type UpdateSkillsBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isNotFound, isOwnMessage, isRateLimited, isSafeApplicationUrl, isUnauthorized, isValidationError, lastOwnMessageId, paginate, resolveApplyAction };
package/dist/index.js CHANGED
@@ -312,7 +312,7 @@ async function clearSession(storage) {
312
312
  }
313
313
 
314
314
  // src/version.ts
315
- var SDK_VERSION = "1.39.0";
315
+ var SDK_VERSION = "1.41.0";
316
316
 
317
317
  // src/client.ts
318
318
  function isRawBody(body) {
@@ -1398,6 +1398,20 @@ function meNamespace(client) {
1398
1398
  { ...options, method: "DELETE" }
1399
1399
  );
1400
1400
  },
1401
+ /**
1402
+ * Retrieve my full editable company profile (summary, socials, logo,
1403
+ * description) — the read half of `update`, for pre-populating an edit
1404
+ * form. Requires an approved membership.
1405
+ *
1406
+ * @example
1407
+ * const company = await board.me.companies.retrieve('acme');
1408
+ */
1409
+ retrieve(slug, options) {
1410
+ return client.fetch(
1411
+ `/me/companies/${encodeURIComponent(slug)}`,
1412
+ options
1413
+ );
1414
+ },
1401
1415
  /**
1402
1416
  * Edit my company profile (merge-patch — omitted fields stay
1403
1417
  * unchanged). Requires an approved membership. Returns the company.
@@ -1411,6 +1425,22 @@ function meNamespace(client) {
1411
1425
  { ...options, method: "PATCH", body }
1412
1426
  );
1413
1427
  },
1428
+ /**
1429
+ * Upload + attach my company logo (JPEG/PNG/WebP/GIF, ≤2 MB) via a single
1430
+ * multipart POST. Requires an approved membership. Returns the updated
1431
+ * company with its new `logoUrl`.
1432
+ *
1433
+ * @example
1434
+ * const company = await board.me.companies.uploadLogo('acme', file);
1435
+ */
1436
+ uploadLogo(slug, file, options) {
1437
+ const form = new FormData();
1438
+ form.append("file", file);
1439
+ return client.fetch(
1440
+ `/me/companies/${encodeURIComponent(slug)}/logo`,
1441
+ { ...options, method: "POST", body: form }
1442
+ );
1443
+ },
1414
1444
  /** The work-email verification state machine for a pending claim. */
1415
1445
  workEmail: {
1416
1446
  /**
@@ -1584,6 +1614,47 @@ function meNamespace(client) {
1584
1614
  );
1585
1615
  }
1586
1616
  },
1617
+ /**
1618
+ * The read-only reporting funnel that backs the hosted employer jobs
1619
+ * table (doc 35): per-job views / apply clicks / native applications,
1620
+ * plus a daily views+apply-clicks time-series for a chart. Membership-
1621
+ * scoped; never cached. Analytics degrade to zeroes on a Tinybird
1622
+ * outage — the reads never fail on an analytics problem, so a `0` means
1623
+ * "no activity" OR "analytics briefly unavailable".
1624
+ */
1625
+ jobStats: {
1626
+ /**
1627
+ * Per-job stats across ALL of a company's jobs, one row per job.
1628
+ *
1629
+ * @example
1630
+ * const { data } = await board.me.companies.jobStats.retrieve('acme');
1631
+ * for (const s of data) {
1632
+ * console.log(s.jobId, s.views, s.applyClicks, s.applications);
1633
+ * }
1634
+ */
1635
+ retrieve(slug, options) {
1636
+ return client.fetch(
1637
+ `/me/companies/${encodeURIComponent(slug)}/job-stats`,
1638
+ options
1639
+ );
1640
+ },
1641
+ /**
1642
+ * Daily buckets of views + apply clicks aggregated across the
1643
+ * company's jobs, to power a chart. Zero-filled over `[since, until]`
1644
+ * (default: last 30 days), ascending by date.
1645
+ *
1646
+ * @example
1647
+ * const { data } = await board.me.companies.jobStats.timeseries('acme', {
1648
+ * since: '2026-06-01T00:00:00Z',
1649
+ * });
1650
+ */
1651
+ timeseries(slug, query, options) {
1652
+ return client.fetch(
1653
+ `/me/companies/${encodeURIComponent(slug)}/job-stats/timeseries`,
1654
+ { ...options, query }
1655
+ );
1656
+ }
1657
+ },
1587
1658
  /**
1588
1659
  * The applicant pipeline (ATS) for a company I am an approved member of
1589
1660
  * (doc 35 / ADR-0052 / ADR-0004). Reads return the full pipeline (job
@@ -1736,6 +1807,25 @@ function meNamespace(client) {
1736
1807
  }
1737
1808
  }
1738
1809
  },
1810
+ /**
1811
+ * The viewer's talent entitlement on this board (CAV-243) — "does this
1812
+ * employer have talent access?" for gating a Message-vs-upsell CTA.
1813
+ * Candidates and unaffiliated viewers get `hasTalentAccess: false`.
1814
+ *
1815
+ * @example
1816
+ * const { hasTalentAccess } = await board.me.talentAccess.retrieve();
1817
+ */
1818
+ talentAccess: {
1819
+ /**
1820
+ * Retrieve the viewer's talent entitlement. Never cache — per-user.
1821
+ *
1822
+ * @example
1823
+ * const access = await board.me.talentAccess.retrieve();
1824
+ */
1825
+ retrieve(options) {
1826
+ return client.fetch("/me/talent-access", options);
1827
+ }
1828
+ },
1739
1829
  /**
1740
1830
  * The authenticated board user's job-alert preferences (ADR-0053) —
1741
1831
  * a collection (up to 10). Creating one is active immediately (no
package/dist/index.mjs CHANGED
@@ -265,7 +265,7 @@ async function clearSession(storage) {
265
265
  }
266
266
 
267
267
  // src/version.ts
268
- var SDK_VERSION = "1.39.0";
268
+ var SDK_VERSION = "1.41.0";
269
269
 
270
270
  // src/client.ts
271
271
  function isRawBody(body) {
@@ -1351,6 +1351,20 @@ function meNamespace(client) {
1351
1351
  { ...options, method: "DELETE" }
1352
1352
  );
1353
1353
  },
1354
+ /**
1355
+ * Retrieve my full editable company profile (summary, socials, logo,
1356
+ * description) — the read half of `update`, for pre-populating an edit
1357
+ * form. Requires an approved membership.
1358
+ *
1359
+ * @example
1360
+ * const company = await board.me.companies.retrieve('acme');
1361
+ */
1362
+ retrieve(slug, options) {
1363
+ return client.fetch(
1364
+ `/me/companies/${encodeURIComponent(slug)}`,
1365
+ options
1366
+ );
1367
+ },
1354
1368
  /**
1355
1369
  * Edit my company profile (merge-patch — omitted fields stay
1356
1370
  * unchanged). Requires an approved membership. Returns the company.
@@ -1364,6 +1378,22 @@ function meNamespace(client) {
1364
1378
  { ...options, method: "PATCH", body }
1365
1379
  );
1366
1380
  },
1381
+ /**
1382
+ * Upload + attach my company logo (JPEG/PNG/WebP/GIF, ≤2 MB) via a single
1383
+ * multipart POST. Requires an approved membership. Returns the updated
1384
+ * company with its new `logoUrl`.
1385
+ *
1386
+ * @example
1387
+ * const company = await board.me.companies.uploadLogo('acme', file);
1388
+ */
1389
+ uploadLogo(slug, file, options) {
1390
+ const form = new FormData();
1391
+ form.append("file", file);
1392
+ return client.fetch(
1393
+ `/me/companies/${encodeURIComponent(slug)}/logo`,
1394
+ { ...options, method: "POST", body: form }
1395
+ );
1396
+ },
1367
1397
  /** The work-email verification state machine for a pending claim. */
1368
1398
  workEmail: {
1369
1399
  /**
@@ -1537,6 +1567,47 @@ function meNamespace(client) {
1537
1567
  );
1538
1568
  }
1539
1569
  },
1570
+ /**
1571
+ * The read-only reporting funnel that backs the hosted employer jobs
1572
+ * table (doc 35): per-job views / apply clicks / native applications,
1573
+ * plus a daily views+apply-clicks time-series for a chart. Membership-
1574
+ * scoped; never cached. Analytics degrade to zeroes on a Tinybird
1575
+ * outage — the reads never fail on an analytics problem, so a `0` means
1576
+ * "no activity" OR "analytics briefly unavailable".
1577
+ */
1578
+ jobStats: {
1579
+ /**
1580
+ * Per-job stats across ALL of a company's jobs, one row per job.
1581
+ *
1582
+ * @example
1583
+ * const { data } = await board.me.companies.jobStats.retrieve('acme');
1584
+ * for (const s of data) {
1585
+ * console.log(s.jobId, s.views, s.applyClicks, s.applications);
1586
+ * }
1587
+ */
1588
+ retrieve(slug, options) {
1589
+ return client.fetch(
1590
+ `/me/companies/${encodeURIComponent(slug)}/job-stats`,
1591
+ options
1592
+ );
1593
+ },
1594
+ /**
1595
+ * Daily buckets of views + apply clicks aggregated across the
1596
+ * company's jobs, to power a chart. Zero-filled over `[since, until]`
1597
+ * (default: last 30 days), ascending by date.
1598
+ *
1599
+ * @example
1600
+ * const { data } = await board.me.companies.jobStats.timeseries('acme', {
1601
+ * since: '2026-06-01T00:00:00Z',
1602
+ * });
1603
+ */
1604
+ timeseries(slug, query, options) {
1605
+ return client.fetch(
1606
+ `/me/companies/${encodeURIComponent(slug)}/job-stats/timeseries`,
1607
+ { ...options, query }
1608
+ );
1609
+ }
1610
+ },
1540
1611
  /**
1541
1612
  * The applicant pipeline (ATS) for a company I am an approved member of
1542
1613
  * (doc 35 / ADR-0052 / ADR-0004). Reads return the full pipeline (job
@@ -1689,6 +1760,25 @@ function meNamespace(client) {
1689
1760
  }
1690
1761
  }
1691
1762
  },
1763
+ /**
1764
+ * The viewer's talent entitlement on this board (CAV-243) — "does this
1765
+ * employer have talent access?" for gating a Message-vs-upsell CTA.
1766
+ * Candidates and unaffiliated viewers get `hasTalentAccess: false`.
1767
+ *
1768
+ * @example
1769
+ * const { hasTalentAccess } = await board.me.talentAccess.retrieve();
1770
+ */
1771
+ talentAccess: {
1772
+ /**
1773
+ * Retrieve the viewer's talent entitlement. Never cache — per-user.
1774
+ *
1775
+ * @example
1776
+ * const access = await board.me.talentAccess.retrieve();
1777
+ */
1778
+ retrieve(options) {
1779
+ return client.fetch("/me/talent-access", options);
1780
+ }
1781
+ },
1692
1782
  /**
1693
1783
  * The authenticated board user's job-alert preferences (ADR-0053) —
1694
1784
  * a collection (up to 10). Creating one is active immediately (no
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DxC1ze93.mjs';
1
+ import { S as Schemas } from './_spec-l_596ZwW.mjs';
2
2
 
3
3
  /**
4
4
  * Stripe-shaped success envelopes (`01-conventions.md` §5.1). The
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DxC1ze93.js';
1
+ import { S as Schemas } from './_spec-l_596ZwW.js';
2
2
 
3
3
  /**
4
4
  * Stripe-shaped success envelopes (`01-conventions.md` §5.1). The
@@ -1,5 +1,5 @@
1
- import { S as Schemas } from './_spec-DxC1ze93.js';
2
- import { L as ListEnvelope, m as RelatedSearch } from './jobs-CLLIvtMc.js';
1
+ import { S as Schemas } from './_spec-l_596ZwW.js';
2
+ import { L as ListEnvelope, m as RelatedSearch } from './jobs-CXudz1Y4.js';
3
3
 
4
4
  /** Author shape embedded on posts (no `object` discriminator). */
5
5
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -1,5 +1,5 @@
1
- import { S as Schemas } from './_spec-DxC1ze93.mjs';
2
- import { L as ListEnvelope, m as RelatedSearch } from './jobs-DPPA1Nev.mjs';
1
+ import { S as Schemas } from './_spec-l_596ZwW.mjs';
2
+ import { L as ListEnvelope, m as RelatedSearch } from './jobs-BhthvMkA.mjs';
3
3
 
4
4
  /** Author shape embedded on posts (no `object` discriminator). */
5
5
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DxC1ze93.mjs';
1
+ import { S as Schemas } from './_spec-l_596ZwW.mjs';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DxC1ze93.js';
1
+ import { S as Schemas } from './_spec-l_596ZwW.js';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
package/dist/seo.d.mts CHANGED
@@ -1,8 +1,8 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-Rb5h_eVZ.mjs';
2
- import { P as PublicBoard } from './board-CqYibYUA.mjs';
3
- import { P as PublicJob } from './jobs-DPPA1Nev.mjs';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-Dr_Zugal.mjs';
2
+ import { P as PublicBoard } from './board-CyHA6rRP.mjs';
3
+ import { P as PublicJob } from './jobs-BhthvMkA.mjs';
4
4
  import { B as BoardLabelOverrides } from './ui-copy-CKfFTtLk.mjs';
5
- import './_spec-DxC1ze93.mjs';
5
+ import './_spec-l_596ZwW.mjs';
6
6
 
7
7
  /**
8
8
  * Google for Jobs `JobPosting` structured data on the `@cavuno/board` wire
package/dist/seo.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-DK4RnJnw.js';
2
- import { P as PublicBoard } from './board-RfZEAJse.js';
3
- import { P as PublicJob } from './jobs-CLLIvtMc.js';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-ByBuHCLH.js';
2
+ import { P as PublicBoard } from './board-BzK5j73O.js';
3
+ import { P as PublicJob } from './jobs-CXudz1Y4.js';
4
4
  import { B as BoardLabelOverrides } from './ui-copy-CKfFTtLk.js';
5
- import './_spec-DxC1ze93.js';
5
+ import './_spec-l_596ZwW.js';
6
6
 
7
7
  /**
8
8
  * Google for Jobs `JobPosting` structured data on the `@cavuno/board` wire
package/dist/server.d.mts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './_spec-DxC1ze93.mjs';
3
- import './search-CqBa1Qc4.mjs';
4
- import './board-CqYibYUA.mjs';
5
- import './jobs-DPPA1Nev.mjs';
6
- import './salaries-Rb5h_eVZ.mjs';
2
+ import './_spec-l_596ZwW.mjs';
3
+ import './search-CrIlXSJP.mjs';
4
+ import './board-CyHA6rRP.mjs';
5
+ import './jobs-BhthvMkA.mjs';
6
+ import './salaries-Dr_Zugal.mjs';
7
7
 
8
8
  /**
9
9
  * Session cookie codec — pure (no framework imports, no node imports) so it
@@ -77,6 +77,56 @@ declare function safeRedirectPath(path: string | undefined | null, defaultPath?:
77
77
  */
78
78
  declare function currentPathFromReferer(referer: string | null): string;
79
79
 
80
+ /**
81
+ * MIG-10 (added scope) — keep `<slug>.cavuno.app` live after a custom-domain
82
+ * cutover by 308-redirecting to the board's canonical custom domain.
83
+ *
84
+ * ## Where this lives (DEVIATION LOUDLY)
85
+ * **Serving-side, not the dispatch edge.** Production hostname→worker
86
+ * routing is the WFP dispatch Worker's KV map (`hostname → workerName`
87
+ * only — see `docs/recipes/ops/wfp-dispatch-custom-domain.md` and
88
+ * `createWfpReleaseDeploy` / `deterministicWorkerName`). That edge has
89
+ * **no board domain data** (no Convex, no primaryDomain). Inventing a
90
+ * second edge datastore for canonical hosts is forbidden by the ticket.
91
+ *
92
+ * Data source: the board's public context already carries
93
+ * `primaryDomain: string | null` (`GET /v1/boards/:id` via
94
+ * `serializeBoardContext`). The starter loads context for every request
95
+ * (theme, features, analytics) — reuse that field. When `primaryDomain`
96
+ * is set, a request whose Host is a `*.cavuno.app` serving host 308s to
97
+ * `https://<primaryDomain><path+query>` in **one hop**. Domainless boards
98
+ * (`primaryDomain === null`) keep **serving** from cavuno.app (no redirect).
99
+ *
100
+ * Wire this helper into the starter's root middleware / entry (the
101
+ * migration starter's host check) with `Response.redirect(url, 308)`.
102
+ * Pure so unit tests pin behaviour without a Worker runtime.
103
+ *
104
+ * Pattern: Vercel `*.vercel.app` / GitHub `github.io` permanent fallback
105
+ * origin — SEO-neutral 308 to the canonical production host.
106
+ */
107
+ /**
108
+ * True when the request host is a cavuno.app board-serving host
109
+ * (slug or board-hash subdomain), not the apex and not a preview host
110
+ * we deliberately leave alone.
111
+ */
112
+ declare function isCavunoAppServingHost(hostname: string): boolean;
113
+ /**
114
+ * When a custom-domain board is hit on its cavuno.app fallback origin,
115
+ * return the one-hop 308 Location to the canonical custom domain.
116
+ * Domainless boards (no primaryDomain) return null — serve in place.
117
+ */
118
+ declare function getCavunoAppCanonicalRedirectUrl(params: {
119
+ currentHost: string | null;
120
+ /**
121
+ * From `board.context().primaryDomain` — the board's active primary
122
+ * custom domain hostname, or null when domainless.
123
+ */
124
+ primaryDomain: string | null | undefined;
125
+ /** Full request URL or path+query; path+query is preserved on the hop. */
126
+ requestUrl?: string | null;
127
+ defaultPath?: string;
128
+ }): string | null;
129
+
80
130
  /**
81
131
  * Single-flight session refresh — dedupes concurrent refreshes for the same
82
132
  * session WITHIN one process/isolate (the rotation race, ADR-0057 wart #4,
@@ -111,4 +161,4 @@ declare function currentPathFromReferer(referer: string | null): string;
111
161
  */
112
162
  declare function createSessionRefresher(board: Pick<BoardSdk, 'auth' | 'client'>): (session: BoardSession) => Promise<BoardSession | null>;
113
163
 
114
- export { BOARD_ACCESS_COOKIE_NAME, type BoardSession, SESSION_COOKIE_NAME, clearGrantCookie, clearSessionCookie, createSessionRefresher, currentPathFromReferer, grantCookieName, isExpiringSoon, parseGrantCookie, parseSessionCookie, safeRedirectPath, serializeGrantCookie, serializeSessionCookie, sessionCookieName };
164
+ export { BOARD_ACCESS_COOKIE_NAME, type BoardSession, SESSION_COOKIE_NAME, clearGrantCookie, clearSessionCookie, createSessionRefresher, currentPathFromReferer, getCavunoAppCanonicalRedirectUrl, grantCookieName, isCavunoAppServingHost, isExpiringSoon, parseGrantCookie, parseSessionCookie, safeRedirectPath, serializeGrantCookie, serializeSessionCookie, sessionCookieName };