@cavuno/board 1.40.0 → 1.42.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 (48) hide show
  1. package/dist/{_spec-DRbgPIlN.d.mts → _spec-LdkTxfx0.d.mts} +55 -0
  2. package/dist/{_spec-DRbgPIlN.d.ts → _spec-LdkTxfx0.d.ts} +55 -0
  3. package/dist/{board-DCiNpgFf.d.mts → board-Cs93Lf23.d.mts} +1 -1
  4. package/dist/{board-BxPUtrOl.d.ts → board-FxC9Wdhi.d.ts} +1 -1
  5. package/dist/filters.d.mts +2 -2
  6. package/dist/filters.d.ts +2 -2
  7. package/dist/format.d.mts +3 -3
  8. package/dist/format.d.ts +3 -3
  9. package/dist/go.d.mts +65 -0
  10. package/dist/go.d.ts +65 -0
  11. package/dist/go.js +130 -0
  12. package/dist/go.mjs +107 -0
  13. package/dist/index.d.mts +44 -10
  14. package/dist/index.d.ts +44 -10
  15. package/dist/index.js +42 -1
  16. package/dist/index.mjs +42 -1
  17. package/dist/{jobs-DhePKSRe.d.mts → jobs-BtazrWfv.d.mts} +1 -1
  18. package/dist/{jobs-DAGAVHQL.d.ts → jobs-TIAPH3Ol.d.ts} +1 -1
  19. package/dist/paths.d.mts +25 -1
  20. package/dist/paths.d.ts +25 -1
  21. package/dist/paths.js +20 -1
  22. package/dist/paths.mjs +20 -1
  23. package/dist/roles-vY0AXhoc.d.mts +82 -0
  24. package/dist/roles-vY0AXhoc.d.ts +82 -0
  25. package/dist/route-contract.d.mts +257 -0
  26. package/dist/route-contract.d.ts +257 -0
  27. package/dist/route-contract.js +1131 -0
  28. package/dist/route-contract.mjs +1108 -0
  29. package/dist/{salaries-cqb78kg0.d.ts → salaries-BEAqkaFt.d.ts} +2 -2
  30. package/dist/{salaries-D6SUVMmt.d.mts → salaries-CB9Ve4kS.d.mts} +2 -2
  31. package/dist/{search-BalPAS0P.d.ts → search-DWmHHXn8.d.ts} +1 -1
  32. package/dist/{search-DYUQzCq_.d.mts → search-YhoVpXFY.d.mts} +1 -1
  33. package/dist/seo.d.mts +4 -4
  34. package/dist/seo.d.ts +4 -4
  35. package/dist/server.d.mts +5 -5
  36. package/dist/server.d.ts +5 -5
  37. package/dist/sitemap.d.mts +5 -5
  38. package/dist/sitemap.d.ts +5 -5
  39. package/dist/sitemap.js +8 -1
  40. package/dist/sitemap.mjs +8 -1
  41. package/dist/suggest.d.mts +2 -2
  42. package/dist/suggest.d.ts +2 -2
  43. package/dist/well-known.d.mts +113 -0
  44. package/dist/well-known.d.ts +113 -0
  45. package/dist/well-known.js +561 -0
  46. package/dist/well-known.mjs +538 -0
  47. package/package.json +31 -1
  48. package/skills/manifest.json +1 -1
package/dist/index.d.mts CHANGED
@@ -1,11 +1,11 @@
1
- import { S as Schemas, c as components } from './_spec-DRbgPIlN.mjs';
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-DYUQzCq_.mjs';
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-DYUQzCq_.mjs';
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-DCiNpgFf.mjs';
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-DhePKSRe.mjs';
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-DhePKSRe.mjs';
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-D6SUVMmt.mjs';
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-D6SUVMmt.mjs';
1
+ import { S as Schemas, c as components } from './_spec-LdkTxfx0.mjs';
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-YhoVpXFY.mjs';
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-YhoVpXFY.mjs';
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-Cs93Lf23.mjs';
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-BtazrWfv.mjs';
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-BtazrWfv.mjs';
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-CB9Ve4kS.mjs';
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-CB9Ve4kS.mjs';
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.40.0";
144
+ declare const SDK_VERSION = "1.42.0";
145
145
 
146
146
  type SavedJob = Schemas['SavedJob'];
147
147
  type SavedJobsListQuery = {
@@ -280,6 +280,25 @@ type EmployerJobsListQuery = {
280
280
  /** 1–200 (default 200). */
281
281
  limit?: number;
282
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
+ };
283
302
  /** A job's full applicant pipeline (job header + stage rail + applicants). */
284
303
  type EmployerPipeline = Schemas['EmployerPipeline'];
285
304
  /** One applicant on a job's pipeline, with its activity timeline. */
@@ -1856,6 +1875,21 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1856
1875
  renewsAt: string | null;
1857
1876
  }>>;
1858
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
+ };
1859
1893
  applicants: {
1860
1894
  list(slug: string, query: EmployerPipelineQuery, options?: FetchOptions): Promise<{
1861
1895
  object: "employer_pipeline";
@@ -2968,4 +3002,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2968
3002
  };
2969
3003
  type BoardSdk = ReturnType<typeof createBoardClient>;
2970
3004
 
2971
- 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 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 };
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.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { S as Schemas, c as components } from './_spec-DRbgPIlN.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-BalPAS0P.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-BalPAS0P.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-BxPUtrOl.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-DAGAVHQL.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-DAGAVHQL.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-cqb78kg0.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-cqb78kg0.js';
1
+ import { S as Schemas, c as components } from './_spec-LdkTxfx0.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-DWmHHXn8.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-DWmHHXn8.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-FxC9Wdhi.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-TIAPH3Ol.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-TIAPH3Ol.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-BEAqkaFt.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-BEAqkaFt.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.40.0";
144
+ declare const SDK_VERSION = "1.42.0";
145
145
 
146
146
  type SavedJob = Schemas['SavedJob'];
147
147
  type SavedJobsListQuery = {
@@ -280,6 +280,25 @@ type EmployerJobsListQuery = {
280
280
  /** 1–200 (default 200). */
281
281
  limit?: number;
282
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
+ };
283
302
  /** A job's full applicant pipeline (job header + stage rail + applicants). */
284
303
  type EmployerPipeline = Schemas['EmployerPipeline'];
285
304
  /** One applicant on a job's pipeline, with its activity timeline. */
@@ -1856,6 +1875,21 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1856
1875
  renewsAt: string | null;
1857
1876
  }>>;
1858
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
+ };
1859
1893
  applicants: {
1860
1894
  list(slug: string, query: EmployerPipelineQuery, options?: FetchOptions): Promise<{
1861
1895
  object: "employer_pipeline";
@@ -2968,4 +3002,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2968
3002
  };
2969
3003
  type BoardSdk = ReturnType<typeof createBoardClient>;
2970
3004
 
2971
- 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 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 };
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.40.0";
315
+ var SDK_VERSION = "1.42.0";
316
316
 
317
317
  // src/client.ts
318
318
  function isRawBody(body) {
@@ -1614,6 +1614,47 @@ function meNamespace(client) {
1614
1614
  );
1615
1615
  }
1616
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
+ },
1617
1658
  /**
1618
1659
  * The applicant pipeline (ATS) for a company I am an approved member of
1619
1660
  * (doc 35 / ADR-0052 / ADR-0004). Reads return the full pipeline (job
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.40.0";
268
+ var SDK_VERSION = "1.42.0";
269
269
 
270
270
  // src/client.ts
271
271
  function isRawBody(body) {
@@ -1567,6 +1567,47 @@ function meNamespace(client) {
1567
1567
  );
1568
1568
  }
1569
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
+ },
1570
1611
  /**
1571
1612
  * The applicant pipeline (ATS) for a company I am an approved member of
1572
1613
  * (doc 35 / ADR-0052 / ADR-0004). Reads return the full pipeline (job
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DRbgPIlN.mjs';
1
+ import { S as Schemas } from './_spec-LdkTxfx0.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-DRbgPIlN.js';
1
+ import { S as Schemas } from './_spec-LdkTxfx0.js';
2
2
 
3
3
  /**
4
4
  * Stripe-shaped success envelopes (`01-conventions.md` §5.1). The
package/dist/paths.d.mts CHANGED
@@ -62,11 +62,35 @@ declare const BOARD_PATHS: {
62
62
  readonly impressum: "/impressum";
63
63
  readonly talent: "/talent";
64
64
  readonly employers: "/employers";
65
+ /**
66
+ * Alert-email surfaces (ADR-0090 D1/D4). Promoted out of raw literals in
67
+ * the job-alerts composer so /go indirection and email composition share
68
+ * one definition.
69
+ */
70
+ readonly alertsManage: "/alerts/manage";
71
+ readonly alertsConfirm: "/alerts/confirm";
65
72
  };
73
+ /**
74
+ * Email `/go` indirection paths (ADR-0090 D4 / LNK-05). Pure builders so
75
+ * Convex email composers can emit structure-independent links without
76
+ * importing `@cavuno/board/go` (handler code is not safe in that runtime).
77
+ *
78
+ * Shapes match the hosted handler + SDK `createGoHandler` contracts:
79
+ * /go/job/<immutableId>
80
+ * /go/alerts-manage
81
+ * /go/alerts-confirm
82
+ *
83
+ * No encoding — callers pass opaque Convex ids / static role segments that
84
+ * are already URL-safe path segments. Query strings are composed by the
85
+ * caller (tokens must ride through verbatim).
86
+ */
87
+ declare function goJobPath(jobId: string): string;
88
+ declare function goAlertsManagePath(): string;
89
+ declare function goAlertsConfirmPath(): string;
66
90
  /**
67
91
  * Prefix a board-relative path with the board origin. A trailing slash on
68
92
  * the origin is tolerated (stripped) so callers need not normalise first.
69
93
  */
70
94
  declare function boardUrl(origin: string, path: string): string;
71
95
 
72
- export { BOARD_PATHS, blogAuthorPath, blogPostPath, blogTagPath, boardUrl, companyMarketPath, companyPath, companySalaryPath, jobDetailPath, jobsCategoryPath, jobsLocationPath, jobsSkillPath, salaryLocationPath, salarySkillPath, salaryTitlePath };
96
+ export { BOARD_PATHS, blogAuthorPath, blogPostPath, blogTagPath, boardUrl, companyMarketPath, companyPath, companySalaryPath, goAlertsConfirmPath, goAlertsManagePath, goJobPath, jobDetailPath, jobsCategoryPath, jobsLocationPath, jobsSkillPath, salaryLocationPath, salarySkillPath, salaryTitlePath };
package/dist/paths.d.ts CHANGED
@@ -62,11 +62,35 @@ declare const BOARD_PATHS: {
62
62
  readonly impressum: "/impressum";
63
63
  readonly talent: "/talent";
64
64
  readonly employers: "/employers";
65
+ /**
66
+ * Alert-email surfaces (ADR-0090 D1/D4). Promoted out of raw literals in
67
+ * the job-alerts composer so /go indirection and email composition share
68
+ * one definition.
69
+ */
70
+ readonly alertsManage: "/alerts/manage";
71
+ readonly alertsConfirm: "/alerts/confirm";
65
72
  };
73
+ /**
74
+ * Email `/go` indirection paths (ADR-0090 D4 / LNK-05). Pure builders so
75
+ * Convex email composers can emit structure-independent links without
76
+ * importing `@cavuno/board/go` (handler code is not safe in that runtime).
77
+ *
78
+ * Shapes match the hosted handler + SDK `createGoHandler` contracts:
79
+ * /go/job/<immutableId>
80
+ * /go/alerts-manage
81
+ * /go/alerts-confirm
82
+ *
83
+ * No encoding — callers pass opaque Convex ids / static role segments that
84
+ * are already URL-safe path segments. Query strings are composed by the
85
+ * caller (tokens must ride through verbatim).
86
+ */
87
+ declare function goJobPath(jobId: string): string;
88
+ declare function goAlertsManagePath(): string;
89
+ declare function goAlertsConfirmPath(): string;
66
90
  /**
67
91
  * Prefix a board-relative path with the board origin. A trailing slash on
68
92
  * the origin is tolerated (stripped) so callers need not normalise first.
69
93
  */
70
94
  declare function boardUrl(origin: string, path: string): string;
71
95
 
72
- export { BOARD_PATHS, blogAuthorPath, blogPostPath, blogTagPath, boardUrl, companyMarketPath, companyPath, companySalaryPath, jobDetailPath, jobsCategoryPath, jobsLocationPath, jobsSkillPath, salaryLocationPath, salarySkillPath, salaryTitlePath };
96
+ export { BOARD_PATHS, blogAuthorPath, blogPostPath, blogTagPath, boardUrl, companyMarketPath, companyPath, companySalaryPath, goAlertsConfirmPath, goAlertsManagePath, goJobPath, jobDetailPath, jobsCategoryPath, jobsLocationPath, jobsSkillPath, salaryLocationPath, salarySkillPath, salaryTitlePath };
package/dist/paths.js CHANGED
@@ -28,6 +28,9 @@ __export(paths_exports, {
28
28
  companyMarketPath: () => companyMarketPath,
29
29
  companyPath: () => companyPath,
30
30
  companySalaryPath: () => companySalaryPath,
31
+ goAlertsConfirmPath: () => goAlertsConfirmPath,
32
+ goAlertsManagePath: () => goAlertsManagePath,
33
+ goJobPath: () => goJobPath,
31
34
  jobDetailPath: () => jobDetailPath,
32
35
  jobsCategoryPath: () => jobsCategoryPath,
33
36
  jobsLocationPath: () => jobsLocationPath,
@@ -92,8 +95,24 @@ var BOARD_PATHS = {
92
95
  cookiePolicy: "/cookie-policy",
93
96
  impressum: "/impressum",
94
97
  talent: "/talent",
95
- employers: "/employers"
98
+ employers: "/employers",
99
+ /**
100
+ * Alert-email surfaces (ADR-0090 D1/D4). Promoted out of raw literals in
101
+ * the job-alerts composer so /go indirection and email composition share
102
+ * one definition.
103
+ */
104
+ alertsManage: "/alerts/manage",
105
+ alertsConfirm: "/alerts/confirm"
96
106
  };
107
+ function goJobPath(jobId) {
108
+ return `/go/job/${jobId}`;
109
+ }
110
+ function goAlertsManagePath() {
111
+ return "/go/alerts-manage";
112
+ }
113
+ function goAlertsConfirmPath() {
114
+ return "/go/alerts-confirm";
115
+ }
97
116
  function boardUrl(origin, path) {
98
117
  return `${origin.replace(/\/+$/, "")}${path}`;
99
118
  }
package/dist/paths.mjs CHANGED
@@ -54,8 +54,24 @@ var BOARD_PATHS = {
54
54
  cookiePolicy: "/cookie-policy",
55
55
  impressum: "/impressum",
56
56
  talent: "/talent",
57
- employers: "/employers"
57
+ employers: "/employers",
58
+ /**
59
+ * Alert-email surfaces (ADR-0090 D1/D4). Promoted out of raw literals in
60
+ * the job-alerts composer so /go indirection and email composition share
61
+ * one definition.
62
+ */
63
+ alertsManage: "/alerts/manage",
64
+ alertsConfirm: "/alerts/confirm"
58
65
  };
66
+ function goJobPath(jobId) {
67
+ return `/go/job/${jobId}`;
68
+ }
69
+ function goAlertsManagePath() {
70
+ return "/go/alerts-manage";
71
+ }
72
+ function goAlertsConfirmPath() {
73
+ return "/go/alerts-confirm";
74
+ }
59
75
  function boardUrl(origin, path) {
60
76
  return `${origin.replace(/\/+$/, "")}${path}`;
61
77
  }
@@ -68,6 +84,9 @@ export {
68
84
  companyMarketPath,
69
85
  companyPath,
70
86
  companySalaryPath,
87
+ goAlertsConfirmPath,
88
+ goAlertsManagePath,
89
+ goJobPath,
71
90
  jobDetailPath,
72
91
  jobsCategoryPath,
73
92
  jobsLocationPath,
@@ -0,0 +1,82 @@
1
+ /**
2
+ * One discovered route. `template` uses URLPattern `:param` syntax
3
+ * (e.g. `/companies/:companySlug/jobs/:jobSlug`). Callers on other
4
+ * runtimes instantiate matchers; this module only emits strings.
5
+ */
6
+ type RouteEntry = {
7
+ template: string;
8
+ /** Absolute or project-relative source path — keys the marker map. */
9
+ sourcePath?: string;
10
+ };
11
+ /** Versioned role → template map. Additive schema evolution only. */
12
+ type ManifestV1 = {
13
+ version: 1;
14
+ roles: Partial<Record<RouteRole, string>>;
15
+ };
16
+ type Ambiguity = {
17
+ role: RouteRole;
18
+ candidates: RouteEntry[];
19
+ };
20
+ type ClassifyResult = {
21
+ assignments: Partial<Record<RouteRole, RouteEntry>>;
22
+ ambiguities: Ambiguity[];
23
+ missingRequired: RouteRole[];
24
+ };
25
+ type CompileResult = {
26
+ manifest: ManifestV1;
27
+ blockingMissing: RouteRole[];
28
+ warnings: string[];
29
+ ambiguities: Ambiguity[];
30
+ };
31
+ type ValidateManifestError = {
32
+ code: 'invalid_shape' | 'invalid_version' | 'unknown_role' | 'unregistered_param' | 'missing_entity_param' | 'static_has_params' | 'invalid_template'
33
+ /** Protocol-relative or double-slash path (open redirect / SSRF shape). */
34
+ | 'template_double_slash'
35
+ /** '.' or '..' path segments. */
36
+ | 'template_dot_segment'
37
+ /** Query string or fragment in a path template. */
38
+ | 'template_query_or_fragment'
39
+ /** Characters outside the allowed path/token charset. */
40
+ | 'template_illegal_charset';
41
+ message: string;
42
+ role?: string;
43
+ token?: string;
44
+ };
45
+ type ValidateManifestResult = {
46
+ ok: true;
47
+ manifest: ManifestV1;
48
+ } | {
49
+ ok: false;
50
+ errors: ValidateManifestError[];
51
+ };
52
+
53
+ /**
54
+ * Role vocabulary for the per-board route manifest (ADR-0090 D1).
55
+ *
56
+ * Parameterized roles mirror the helpers in `../paths`; static roles mirror
57
+ * `BOARD_PATHS` keys; `alertsManage` / `alertsConfirm` are promoted out of
58
+ * raw literals in the job-alerts composer.
59
+ *
60
+ * Pure + isomorphic — imports only the sibling paths module.
61
+ */
62
+
63
+ /** Every role the compiler can assign. */
64
+ type RouteRole = 'jobDetail' | 'jobsCategory' | 'jobsSkill' | 'jobsLocation' | 'company' | 'companyMarket' | 'companySalary' | 'salaryTitle' | 'salarySkill' | 'salaryLocation' | 'blogPost' | 'blogTag' | 'blogAuthor' | 'home' | 'jobs' | 'companies' | 'salaries' | 'salaryCompanies' | 'salaryTitles' | 'salarySkills' | 'salaryLocations' | 'blog' | 'about' | 'privacyPolicy' | 'termsOfService' | 'cookiePolicy' | 'impressum' | 'talent' | 'employers' | 'alertsManage' | 'alertsConfirm';
65
+ /**
66
+ * Exact param-name set per role, derived from each helper's signature.
67
+ * Empty arrays = static / zero-param roles (never inferred by signature).
68
+ */
69
+ declare const ROLE_PARAM_REGISTRY: Record<RouteRole, readonly string[]>;
70
+ /** Email-emitting roles — a missing one blocks publish (ADR-0090 D1/D6). */
71
+ declare const REQUIRED_ROLES: readonly RouteRole[];
72
+ /** All known roles (stable iteration order = registry key order). */
73
+ declare const ALL_ROLES: readonly RouteRole[];
74
+ declare function isRouteRole(value: string): value is RouteRole;
75
+ /**
76
+ * Identity manifest reproducing the current canonical structure from the
77
+ * paths module. Built by calling helpers with `:param` placeholders so the
78
+ * templates stay locked to the helpers (ADR-0070 / ADR-0090).
79
+ */
80
+ declare const CANONICAL_MANIFEST: ManifestV1;
81
+
82
+ export { ALL_ROLES as A, type ClassifyResult as C, type ManifestV1 as M, type RouteEntry as R, type ValidateManifestError as V, type RouteRole as a, type CompileResult as b, type ValidateManifestResult as c, type Ambiguity as d, CANONICAL_MANIFEST as e, REQUIRED_ROLES as f, ROLE_PARAM_REGISTRY as g, isRouteRole as i };
@@ -0,0 +1,82 @@
1
+ /**
2
+ * One discovered route. `template` uses URLPattern `:param` syntax
3
+ * (e.g. `/companies/:companySlug/jobs/:jobSlug`). Callers on other
4
+ * runtimes instantiate matchers; this module only emits strings.
5
+ */
6
+ type RouteEntry = {
7
+ template: string;
8
+ /** Absolute or project-relative source path — keys the marker map. */
9
+ sourcePath?: string;
10
+ };
11
+ /** Versioned role → template map. Additive schema evolution only. */
12
+ type ManifestV1 = {
13
+ version: 1;
14
+ roles: Partial<Record<RouteRole, string>>;
15
+ };
16
+ type Ambiguity = {
17
+ role: RouteRole;
18
+ candidates: RouteEntry[];
19
+ };
20
+ type ClassifyResult = {
21
+ assignments: Partial<Record<RouteRole, RouteEntry>>;
22
+ ambiguities: Ambiguity[];
23
+ missingRequired: RouteRole[];
24
+ };
25
+ type CompileResult = {
26
+ manifest: ManifestV1;
27
+ blockingMissing: RouteRole[];
28
+ warnings: string[];
29
+ ambiguities: Ambiguity[];
30
+ };
31
+ type ValidateManifestError = {
32
+ code: 'invalid_shape' | 'invalid_version' | 'unknown_role' | 'unregistered_param' | 'missing_entity_param' | 'static_has_params' | 'invalid_template'
33
+ /** Protocol-relative or double-slash path (open redirect / SSRF shape). */
34
+ | 'template_double_slash'
35
+ /** '.' or '..' path segments. */
36
+ | 'template_dot_segment'
37
+ /** Query string or fragment in a path template. */
38
+ | 'template_query_or_fragment'
39
+ /** Characters outside the allowed path/token charset. */
40
+ | 'template_illegal_charset';
41
+ message: string;
42
+ role?: string;
43
+ token?: string;
44
+ };
45
+ type ValidateManifestResult = {
46
+ ok: true;
47
+ manifest: ManifestV1;
48
+ } | {
49
+ ok: false;
50
+ errors: ValidateManifestError[];
51
+ };
52
+
53
+ /**
54
+ * Role vocabulary for the per-board route manifest (ADR-0090 D1).
55
+ *
56
+ * Parameterized roles mirror the helpers in `../paths`; static roles mirror
57
+ * `BOARD_PATHS` keys; `alertsManage` / `alertsConfirm` are promoted out of
58
+ * raw literals in the job-alerts composer.
59
+ *
60
+ * Pure + isomorphic — imports only the sibling paths module.
61
+ */
62
+
63
+ /** Every role the compiler can assign. */
64
+ type RouteRole = 'jobDetail' | 'jobsCategory' | 'jobsSkill' | 'jobsLocation' | 'company' | 'companyMarket' | 'companySalary' | 'salaryTitle' | 'salarySkill' | 'salaryLocation' | 'blogPost' | 'blogTag' | 'blogAuthor' | 'home' | 'jobs' | 'companies' | 'salaries' | 'salaryCompanies' | 'salaryTitles' | 'salarySkills' | 'salaryLocations' | 'blog' | 'about' | 'privacyPolicy' | 'termsOfService' | 'cookiePolicy' | 'impressum' | 'talent' | 'employers' | 'alertsManage' | 'alertsConfirm';
65
+ /**
66
+ * Exact param-name set per role, derived from each helper's signature.
67
+ * Empty arrays = static / zero-param roles (never inferred by signature).
68
+ */
69
+ declare const ROLE_PARAM_REGISTRY: Record<RouteRole, readonly string[]>;
70
+ /** Email-emitting roles — a missing one blocks publish (ADR-0090 D1/D6). */
71
+ declare const REQUIRED_ROLES: readonly RouteRole[];
72
+ /** All known roles (stable iteration order = registry key order). */
73
+ declare const ALL_ROLES: readonly RouteRole[];
74
+ declare function isRouteRole(value: string): value is RouteRole;
75
+ /**
76
+ * Identity manifest reproducing the current canonical structure from the
77
+ * paths module. Built by calling helpers with `:param` placeholders so the
78
+ * templates stay locked to the helpers (ADR-0070 / ADR-0090).
79
+ */
80
+ declare const CANONICAL_MANIFEST: ManifestV1;
81
+
82
+ export { ALL_ROLES as A, type ClassifyResult as C, type ManifestV1 as M, type RouteEntry as R, type ValidateManifestError as V, type RouteRole as a, type CompileResult as b, type ValidateManifestResult as c, type Ambiguity as d, CANONICAL_MANIFEST as e, REQUIRED_ROLES as f, ROLE_PARAM_REGISTRY as g, isRouteRole as i };