@cavuno/board 2.0.0 → 2.0.2

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 (84) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/CONTRIBUTING.md +25 -0
  3. package/LICENSE +21 -0
  4. package/README.md +12 -7
  5. package/SECURITY.md +28 -0
  6. package/TRADEMARKS.md +16 -0
  7. package/dist/_spec-sW85fuvT.d.mts +2731 -0
  8. package/dist/_spec-sW85fuvT.d.ts +2731 -0
  9. package/dist/bin.mjs +16 -348
  10. package/dist/{board-B8tJGX4i.d.ts → board-DKXyxwNN.d.ts} +2 -2
  11. package/dist/{board-DmRuCA8m.d.mts → board-QFeHT4UN.d.mts} +2 -2
  12. package/dist/doctor.d.mts +6 -19
  13. package/dist/doctor.d.ts +6 -19
  14. package/dist/doctor.js +16 -344
  15. package/dist/doctor.mjs +15 -343
  16. package/dist/filters.d.mts +5 -5
  17. package/dist/filters.d.ts +5 -5
  18. package/dist/format.d.mts +17 -19
  19. package/dist/format.d.ts +17 -19
  20. package/dist/go.d.mts +2 -2
  21. package/dist/go.d.ts +2 -2
  22. package/dist/go.js +1 -1
  23. package/dist/go.mjs +1 -1
  24. package/dist/index.d.mts +16 -18
  25. package/dist/index.d.ts +16 -18
  26. package/dist/index.js +39 -28
  27. package/dist/index.mjs +39 -28
  28. package/dist/{jobs-BEYJY97F.d.ts → jobs-CuRzTDb1.d.mts} +15 -13
  29. package/dist/{jobs-DJiISpqX.d.mts → jobs-DTnCZGtb.d.ts} +15 -13
  30. package/dist/paths.d.mts +6 -6
  31. package/dist/paths.d.ts +6 -6
  32. package/dist/paths.js +1 -1
  33. package/dist/paths.mjs +1 -1
  34. package/dist/roles-vY0AXhoc.d.mts +3 -3
  35. package/dist/roles-vY0AXhoc.d.ts +3 -3
  36. package/dist/route-contract.d.mts +16 -16
  37. package/dist/route-contract.d.ts +16 -16
  38. package/dist/route-contract.js +1 -1
  39. package/dist/route-contract.mjs +1 -1
  40. package/dist/{salaries-D6q7h1J6.d.ts → salaries-BOpR51Ny.d.mts} +3 -3
  41. package/dist/{salaries-B_Xb5k2s.d.mts → salaries-QoNpzRCT.d.ts} +3 -3
  42. package/dist/{search-CnOIZEuc.d.ts → search-B5ROY6PK.d.ts} +2 -2
  43. package/dist/{search-uC_ijbdu.d.mts → search-f93nrSg3.d.mts} +2 -2
  44. package/dist/seo.d.mts +17 -18
  45. package/dist/seo.d.ts +17 -18
  46. package/dist/server.d.mts +14 -32
  47. package/dist/server.d.ts +14 -32
  48. package/dist/sitemap.d.mts +7 -7
  49. package/dist/sitemap.d.ts +7 -7
  50. package/dist/sitemap.js +4 -2
  51. package/dist/sitemap.mjs +4 -2
  52. package/dist/skills.d.mts +1 -1
  53. package/dist/skills.d.ts +1 -1
  54. package/dist/skills.js +1 -1
  55. package/dist/suggest.d.mts +2 -2
  56. package/dist/suggest.d.ts +2 -2
  57. package/dist/theme.d.mts +10 -13
  58. package/dist/theme.d.ts +10 -13
  59. package/dist/theme.js +1 -1
  60. package/dist/theme.mjs +1 -1
  61. package/dist/{ui-copy-CKfFTtLk.d.mts → ui-copy-CL-VN1xb.d.mts} +2 -3
  62. package/dist/{ui-copy-CKfFTtLk.d.ts → ui-copy-CL-VN1xb.d.ts} +2 -3
  63. package/dist/well-known.d.mts +3 -3
  64. package/dist/well-known.d.ts +3 -3
  65. package/dist/well-known.js +1 -1
  66. package/dist/well-known.mjs +1 -1
  67. package/package.json +46 -38
  68. package/skills/cavuno-board-client/SKILL.md +1 -2
  69. package/skills/cavuno-board-filters/SKILL.md +2 -2
  70. package/skills/cavuno-board-format/SKILL.md +1 -1
  71. package/skills/cavuno-board-i18n/SKILL.md +3 -4
  72. package/skills/cavuno-board-job-posting/SKILL.md +1 -1
  73. package/skills/cavuno-board-messaging/SKILL.md +2 -3
  74. package/skills/cavuno-board-paywall/SKILL.md +1 -1
  75. package/skills/cavuno-board-salaries/SKILL.md +1 -1
  76. package/skills/cavuno-board-seo/SKILL.md +4 -6
  77. package/skills/cavuno-board-server/SKILL.md +1 -1
  78. package/skills/cavuno-board-setup/SKILL.md +2 -1
  79. package/skills/cavuno-board-sitemap/SKILL.md +1 -1
  80. package/skills/cavuno-board-smoke-test/SKILL.md +4 -13
  81. package/skills/flavors/tanstack-start/SKILL.md +1 -2
  82. package/skills/manifest.json +1 -1
  83. package/dist/_spec-C7vqY_b3.d.mts +0 -5202
  84. package/dist/_spec-C7vqY_b3.d.ts +0 -5202
package/dist/go.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Pure `/go` indirection for self-deployed SDK boards (LNK-04).
2
+ * Pure `/go` indirection for self-deployed SDK boards.
3
3
  *
4
4
  * Mirrors the hosted-app contract:
5
5
  * - `/go/job/<id>` → 302 to jobDetailPath(companySlug, jobSlug)
@@ -25,7 +25,7 @@ interface GoRedirectResult {
25
25
  *
26
26
  * When `lookupJob` is omitted, `/go/job/<id>` degrades to the jobs index
27
27
  * (safe, never 404). Pass a custom lookup when a data-plane endpoint lands
28
- * (see TODO(LNK-04-followup)).
28
+ * (see TODO).
29
29
  */
30
30
  type GoJobLookup = (jobId: string) => Promise<ResolvedJobSlugs | null> | ResolvedJobSlugs | null;
31
31
  interface CreateGoHandlerConfig {
package/dist/go.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Pure `/go` indirection for self-deployed SDK boards (LNK-04).
2
+ * Pure `/go` indirection for self-deployed SDK boards.
3
3
  *
4
4
  * Mirrors the hosted-app contract:
5
5
  * - `/go/job/<id>` → 302 to jobDetailPath(companySlug, jobSlug)
@@ -25,7 +25,7 @@ interface GoRedirectResult {
25
25
  *
26
26
  * When `lookupJob` is omitted, `/go/job/<id>` degrades to the jobs index
27
27
  * (safe, never 404). Pass a custom lookup when a data-plane endpoint lands
28
- * (see TODO(LNK-04-followup)).
28
+ * (see TODO).
29
29
  */
30
30
  type GoJobLookup = (jobId: string) => Promise<ResolvedJobSlugs | null> | ResolvedJobSlugs | null;
31
31
  interface CreateGoHandlerConfig {
package/dist/go.js CHANGED
@@ -48,7 +48,7 @@ var BOARD_PATHS = {
48
48
  talent: "/talent",
49
49
  employers: "/employers",
50
50
  /**
51
- * Alert-email surfaces (ADR-0090 D1/D4). Promoted out of raw literals in
51
+ * Alert-email surfaces. Promoted out of raw literals in
52
52
  * the job-alerts composer so /go indirection and email composition share
53
53
  * one definition.
54
54
  */
package/dist/go.mjs CHANGED
@@ -20,7 +20,7 @@ var BOARD_PATHS = {
20
20
  talent: "/talent",
21
21
  employers: "/employers",
22
22
  /**
23
- * Alert-email surfaces (ADR-0090 D1/D4). Promoted out of raw literals in
23
+ * Alert-email surfaces. Promoted out of raw literals in
24
24
  * the job-alerts composer so /go indirection and email composition share
25
25
  * one definition.
26
26
  */
package/dist/index.d.mts CHANGED
@@ -1,11 +1,11 @@
1
- import { S as Schemas, c as components } from './_spec-C7vqY_b3.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-uC_ijbdu.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-uC_ijbdu.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-DmRuCA8m.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-DJiISpqX.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-DJiISpqX.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-B_Xb5k2s.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-B_Xb5k2s.mjs';
1
+ import { S as Schemas, c as components } from './_spec-sW85fuvT.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-f93nrSg3.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-f93nrSg3.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-QFeHT4UN.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-CuRzTDb1.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-CuRzTDb1.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-BOpR51Ny.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-BOpR51Ny.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 = "2.0.0";
144
+ declare const SDK_VERSION = "2.0.2";
145
145
 
146
146
  type SavedJob = Schemas['SavedJob'];
147
147
  type SavedJobsListQuery = {
@@ -282,9 +282,9 @@ type EmployerJobsListQuery = {
282
282
  };
283
283
  /**
284
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.
285
+ * `views` / `applyClicks` degrade to `0` when reporting data is temporarily
286
+ * unavailable, so a `0` is "no activity" OR "analytics briefly unavailable".
287
+ * `applications` is `null` for an external-apply job.
288
288
  */
289
289
  type EmployerJobStat = Schemas['EmployerJobStat'];
290
290
  /**
@@ -345,7 +345,7 @@ type EmployerCheckout = Schemas['EmployerCheckout'];
345
345
  type EmployerCheckoutBody = Schemas['EmployerCheckoutBody'];
346
346
 
347
347
  /**
348
- * Pure derivations for a message thread (ADR-0057 decision 5) — kept out of
348
+ * Pure derivations for a message thread — kept out of
349
349
  * components so the fiddly bits (own-vs-counterparty, the cold-message rule,
350
350
  * the seen target) are unit-testable without a DOM. A message is "own" when
351
351
  * its author is not the counterparty (works even before the counterparty has
@@ -365,7 +365,7 @@ declare function isColdRule(messages: Message[], counterpartyId: string): boolea
365
365
  declare function lastOwnMessageId(messages: Message[], counterpartyId: string): string | null;
366
366
 
367
367
  /**
368
- * The apply-decision ladder (ADR-0054) as a pure function — a core-entry
368
+ * The apply-decision ladder as a pure function — a core-entry
369
369
  * derive export like `messaging-derive`, so security/logic fixes ship via
370
370
  * the versioned package instead of re-copied registry files. Unit-testable
371
371
  * independent of React. Mirrors the hosted board's rule: an external
@@ -465,7 +465,7 @@ type BoardAccessGrant = Schemas['BoardAccessGrant'];
465
465
  type RedirectResolution = Schemas['RedirectResolution'];
466
466
 
467
467
  /**
468
- * A board legal/about page (ADR-0039 transitional portable-prose field). The
468
+ * A board legal/about page. The
469
469
  * API serves owner-authored prose as portable HTML; the starter authors the
470
470
  * layout + JSON-LD. Impressum additionally carries structured legal-entity
471
471
  * facts and is gated by the board's `impressumEnabled` flag (404 when off).
@@ -598,7 +598,7 @@ type JobAlertDeletePreferenceInput = {
598
598
 
599
599
  /** A board plan for the job-submission wizard. The `id` is the `selectedPlan`. */
600
600
  type JobPostingPlan = Schemas['JobPostingPlan'];
601
- /** The body of `board.jobPosting.create(...)` — mirrors the Convex submitJob args. */
601
+ /** The body of `board.jobPosting.create(...)`. */
602
602
  type CreateJobPostingInput = Schemas['CreateJobPostingBody'];
603
603
  /**
604
604
  * The status-discriminated outcome of a submission: `checkout` (a Stripe
@@ -694,7 +694,6 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
694
694
  logoUrl: string | null;
695
695
  primaryDomain: string | null;
696
696
  showCavunoBranding: boolean;
697
- sandbox: boolean;
698
697
  features: {
699
698
  jobAlerts: boolean;
700
699
  candidates: boolean;
@@ -753,7 +752,6 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
753
752
  url: string;
754
753
  }[];
755
754
  };
756
- themeSnapshotHash: string | null;
757
755
  }>;
758
756
  /**
759
757
  * Board SEO infra — `ads.txt`, IndexNow key, Google site-verification, and
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { S as Schemas, c as components } from './_spec-C7vqY_b3.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-CnOIZEuc.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-CnOIZEuc.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-B8tJGX4i.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-BEYJY97F.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-BEYJY97F.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-D6q7h1J6.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-D6q7h1J6.js';
1
+ import { S as Schemas, c as components } from './_spec-sW85fuvT.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-B5ROY6PK.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-B5ROY6PK.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-DKXyxwNN.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-DTnCZGtb.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-DTnCZGtb.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-QoNpzRCT.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-QoNpzRCT.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 = "2.0.0";
144
+ declare const SDK_VERSION = "2.0.2";
145
145
 
146
146
  type SavedJob = Schemas['SavedJob'];
147
147
  type SavedJobsListQuery = {
@@ -282,9 +282,9 @@ type EmployerJobsListQuery = {
282
282
  };
283
283
  /**
284
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.
285
+ * `views` / `applyClicks` degrade to `0` when reporting data is temporarily
286
+ * unavailable, so a `0` is "no activity" OR "analytics briefly unavailable".
287
+ * `applications` is `null` for an external-apply job.
288
288
  */
289
289
  type EmployerJobStat = Schemas['EmployerJobStat'];
290
290
  /**
@@ -345,7 +345,7 @@ type EmployerCheckout = Schemas['EmployerCheckout'];
345
345
  type EmployerCheckoutBody = Schemas['EmployerCheckoutBody'];
346
346
 
347
347
  /**
348
- * Pure derivations for a message thread (ADR-0057 decision 5) — kept out of
348
+ * Pure derivations for a message thread — kept out of
349
349
  * components so the fiddly bits (own-vs-counterparty, the cold-message rule,
350
350
  * the seen target) are unit-testable without a DOM. A message is "own" when
351
351
  * its author is not the counterparty (works even before the counterparty has
@@ -365,7 +365,7 @@ declare function isColdRule(messages: Message[], counterpartyId: string): boolea
365
365
  declare function lastOwnMessageId(messages: Message[], counterpartyId: string): string | null;
366
366
 
367
367
  /**
368
- * The apply-decision ladder (ADR-0054) as a pure function — a core-entry
368
+ * The apply-decision ladder as a pure function — a core-entry
369
369
  * derive export like `messaging-derive`, so security/logic fixes ship via
370
370
  * the versioned package instead of re-copied registry files. Unit-testable
371
371
  * independent of React. Mirrors the hosted board's rule: an external
@@ -465,7 +465,7 @@ type BoardAccessGrant = Schemas['BoardAccessGrant'];
465
465
  type RedirectResolution = Schemas['RedirectResolution'];
466
466
 
467
467
  /**
468
- * A board legal/about page (ADR-0039 transitional portable-prose field). The
468
+ * A board legal/about page. The
469
469
  * API serves owner-authored prose as portable HTML; the starter authors the
470
470
  * layout + JSON-LD. Impressum additionally carries structured legal-entity
471
471
  * facts and is gated by the board's `impressumEnabled` flag (404 when off).
@@ -598,7 +598,7 @@ type JobAlertDeletePreferenceInput = {
598
598
 
599
599
  /** A board plan for the job-submission wizard. The `id` is the `selectedPlan`. */
600
600
  type JobPostingPlan = Schemas['JobPostingPlan'];
601
- /** The body of `board.jobPosting.create(...)` — mirrors the Convex submitJob args. */
601
+ /** The body of `board.jobPosting.create(...)`. */
602
602
  type CreateJobPostingInput = Schemas['CreateJobPostingBody'];
603
603
  /**
604
604
  * The status-discriminated outcome of a submission: `checkout` (a Stripe
@@ -694,7 +694,6 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
694
694
  logoUrl: string | null;
695
695
  primaryDomain: string | null;
696
696
  showCavunoBranding: boolean;
697
- sandbox: boolean;
698
697
  features: {
699
698
  jobAlerts: boolean;
700
699
  candidates: boolean;
@@ -753,7 +752,6 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
753
752
  url: string;
754
753
  }[];
755
754
  };
756
- themeSnapshotHash: string | null;
757
755
  }>;
758
756
  /**
759
757
  * Board SEO infra — `ads.txt`, IndexNow key, Google site-verification, and
package/dist/index.js CHANGED
@@ -312,12 +312,24 @@ async function clearSession(storage) {
312
312
  }
313
313
 
314
314
  // src/version.ts
315
- var SDK_VERSION = "2.0.0";
315
+ var SDK_VERSION = "2.0.2";
316
316
 
317
317
  // src/client.ts
318
318
  function isRawBody(body) {
319
319
  return typeof body === "string" || body instanceof URLSearchParams || typeof FormData !== "undefined" && body instanceof FormData || typeof Blob !== "undefined" && body instanceof Blob || body instanceof ArrayBuffer || typeof ReadableStream !== "undefined" && body instanceof ReadableStream;
320
320
  }
321
+ function redactUrlForLog(value) {
322
+ try {
323
+ const url = new URL(value);
324
+ for (const key of new Set(url.searchParams.keys())) {
325
+ url.searchParams.delete(key);
326
+ url.searchParams.set(key, "[REDACTED]");
327
+ }
328
+ return url.toString();
329
+ } catch {
330
+ return value.replace(/([?&][^=&#]+)=([^&#]*)/g, "$1=[REDACTED]");
331
+ }
332
+ }
321
333
  var BoardClient = class {
322
334
  storage;
323
335
  basePath;
@@ -369,9 +381,10 @@ var BoardClient = class {
369
381
  init: { ...passthrough, method, headers, body: serializedBody }
370
382
  };
371
383
  if (this.options.onRequest) req = await this.options.onRequest(req);
372
- this.options.logger?.debug(`${method} ${req.url}`);
384
+ const logUrl = redactUrlForLog(req.url);
385
+ this.options.logger?.debug(`${method} ${logUrl}`);
373
386
  const res = await globalThis.fetch(req.url, req.init);
374
- this.options.logger?.debug(`${res.status} ${method} ${req.url}`);
387
+ this.options.logger?.debug(`${res.status} ${method} ${logUrl}`);
375
388
  if (this.options.onResponse)
376
389
  await this.options.onResponse(res.clone(), req);
377
390
  if (res.status === 204) return void 0;
@@ -397,7 +410,7 @@ var BoardClient = class {
397
410
  raw: parsed
398
411
  });
399
412
  this.options.logger?.error(
400
- `${error.status} ${error.code} ${method} ${req.url}`
413
+ `${error.status} ${error.code} ${method} ${logUrl}`
401
414
  );
402
415
  throw error;
403
416
  }
@@ -1052,7 +1065,7 @@ function jobsNamespace(client) {
1052
1065
  );
1053
1066
  },
1054
1067
  /**
1055
- * Apply to a job natively (ADR-0054). Optional auth: a signed-in candidate
1068
+ * Apply to a job natively. Optional auth: a signed-in candidate
1056
1069
  * applies from their profile (omit name/email); a guest supplies them
1057
1070
  * (allowed only when the board permits applications without sign-up).
1058
1071
  * Idempotent — a repeat apply returns the existing application.
@@ -1150,8 +1163,8 @@ function meNamespace(client) {
1150
1163
  return client.fetch("/me", { ...options, method: "DELETE" });
1151
1164
  },
1152
1165
  /**
1153
- * The authenticated candidate's own account self-service (doc 32).
1154
- * `profile.*` is the lean profile singleton + (commit 2+) its
1166
+ * The authenticated candidate's own account self-service.
1167
+ * `profile.*` is the lean profile singleton + its
1155
1168
  * experience / education / skills / languages collections + avatar.
1156
1169
  */
1157
1170
  profile: {
@@ -1299,7 +1312,7 @@ function meNamespace(client) {
1299
1312
  },
1300
1313
  /**
1301
1314
  * Signed-in notification preferences + the anonymous email-link
1302
- * unsubscribe branch (doc 32).
1315
+ * unsubscribe branch.
1303
1316
  */
1304
1317
  notificationPreferences: {
1305
1318
  /** List every notification channel + its subscribed state. */
@@ -1329,7 +1342,7 @@ function meNamespace(client) {
1329
1342
  }
1330
1343
  },
1331
1344
  /**
1332
- * The authenticated board user's employer facet (doc 35 / ADR-0052):
1345
+ * The authenticated board user's employer facet:
1333
1346
  * claiming/creating a company, the work-email verification state machine,
1334
1347
  * and editing the company profile. A board user becomes an employer by
1335
1348
  * claiming a company — the same identity can also be a candidate.
@@ -1474,8 +1487,7 @@ function meNamespace(client) {
1474
1487
  }
1475
1488
  },
1476
1489
  /**
1477
- * Manage the jobs of a company I am an approved member of (doc 35 /
1478
- * ADR-0052). Every method is scoped to the company `slug`. New jobs are
1490
+ * Manage the jobs of a company I am an approved member of . Every method is scoped to the company `slug`. New jobs are
1479
1491
  * created as held drafts — publishing is `publish` (within a live paid
1480
1492
  * window) or the paid-post checkout flow.
1481
1493
  */
@@ -1575,7 +1587,7 @@ function meNamespace(client) {
1575
1587
  );
1576
1588
  },
1577
1589
  /**
1578
- * Pay for / publish a held draft (ADR-0031). Select billing: a paid plan
1590
+ * Pay for / publish a held draft. Select billing: a paid plan
1579
1591
  * returns `{ status: 'checkout', checkoutUrl }` (send the buyer there;
1580
1592
  * the webhook publishes on payment); a free / bundle / subscription plan
1581
1593
  * publishes immediately (`status: 'published'`); an invoice plan emails a
@@ -1616,10 +1628,10 @@ function meNamespace(client) {
1616
1628
  },
1617
1629
  /**
1618
1630
  * The read-only reporting funnel that backs the hosted employer jobs
1619
- * table (doc 35): per-job views / apply clicks / native applications,
1631
+ * table: per-job views / apply clicks / native applications,
1620
1632
  * 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
1633
+ * scoped; never cached. Analytics degrade to zeroes when reporting data
1634
+ * is temporarily unavailable, so a `0` means
1623
1635
  * "no activity" OR "analytics briefly unavailable".
1624
1636
  */
1625
1637
  jobStats: {
@@ -1656,7 +1668,7 @@ function meNamespace(client) {
1656
1668
  }
1657
1669
  },
1658
1670
  /**
1659
- * Company-profile page views (doc 35) for the employer dashboard's
1671
+ * Company-profile page views for the employer dashboard's
1660
1672
  * "profile views" metric — visits to the company profile page ITSELF
1661
1673
  * (`/companies/{slug}`, tab subpaths and bots excluded), NOT job details.
1662
1674
  * Membership-scoped; never cached; degrades to `0` / an empty series on
@@ -1695,7 +1707,7 @@ function meNamespace(client) {
1695
1707
  },
1696
1708
  /**
1697
1709
  * The applicant pipeline (ATS) for a company I am an approved member of
1698
- * (doc 35 / ADR-0052 / ADR-0004). Reads return the full pipeline (job
1710
+ * Reads return the full pipeline (job
1699
1711
  * header + stage rail + applicants with timelines); the move/reject/note
1700
1712
  * writes resolve void — re-read the pipeline for fresh state, mirroring
1701
1713
  * the hosted portal's single reactive query.
@@ -1846,7 +1858,7 @@ function meNamespace(client) {
1846
1858
  }
1847
1859
  },
1848
1860
  /**
1849
- * The viewer's talent entitlement on this board (CAV-243) — "does this
1861
+ * The viewer's talent entitlement on this board — "does this
1850
1862
  * employer have talent access?" for gating a Message-vs-upsell CTA.
1851
1863
  * Candidates and unaffiliated viewers get `hasTalentAccess: false`.
1852
1864
  *
@@ -1865,7 +1877,7 @@ function meNamespace(client) {
1865
1877
  }
1866
1878
  },
1867
1879
  /**
1868
- * The authenticated board user's job-alert preferences (ADR-0053) —
1880
+ * The authenticated board user's job-alert preferences —
1869
1881
  * a collection (up to 10). Creating one is active immediately (no
1870
1882
  * double opt-in — the authenticated action is the consent). There is no
1871
1883
  * pause: `remove` is the only way to stop an alert.
@@ -1939,7 +1951,7 @@ function meNamespace(client) {
1939
1951
  }
1940
1952
  },
1941
1953
  /**
1942
- * The authenticated candidate's applications (ADR-0054). Apply itself lives
1954
+ * The authenticated candidate's applications. Apply itself lives
1943
1955
  * on the job (`board.jobs.apply` — it is optional-auth); these manage the
1944
1956
  * applications the candidate has already submitted, keyed by `applicationId`.
1945
1957
  */
@@ -1995,7 +2007,7 @@ function meNamespace(client) {
1995
2007
  }
1996
2008
  },
1997
2009
  /**
1998
- * The candidate's resume (ADR-0055). `upload` starts an async parse that
2010
+ * The candidate's resume. `upload` starts an async parse that
1999
2011
  * auto-populates the profile — it returns `parseStatus: 'parsing'`; poll
2000
2012
  * `retrieve()` until `parsed`/`failed`, then re-read `profile.*`.
2001
2013
  */
@@ -2086,7 +2098,7 @@ function meNamespace(client) {
2086
2098
  }
2087
2099
  },
2088
2100
  /**
2089
- * The authenticated board user's messaging inbox (doc 34 / ADR-0053).
2101
+ * The authenticated board user's messaging inbox.
2090
2102
  * The v1 surface is polled REST — there is no realtime primitive; poll
2091
2103
  * `list` / `listMessages` / `unreadCount` on an interval (3–5s is the
2092
2104
  * reference cadence) for near-live updates.
@@ -2224,7 +2236,7 @@ function meNamespace(client) {
2224
2236
  );
2225
2237
  },
2226
2238
  /**
2227
- * The existing employer↔candidate conversation id (or null). Tier-3
2239
+ * The existing employer↔candidate conversation id (or null).
2228
2240
  * talent-contact helper — route to an existing thread instead of opening
2229
2241
  * a composer.
2230
2242
  *
@@ -2239,7 +2251,7 @@ function meNamespace(client) {
2239
2251
  }
2240
2252
  },
2241
2253
  /**
2242
- * Blocking (doc 34 §E): list / add / remove blocks + a Tier-3 status check.
2254
+ * Blocking: list / add / remove blocks + a status check.
2243
2255
  */
2244
2256
  blocks: {
2245
2257
  /**
@@ -2277,7 +2289,7 @@ function meNamespace(client) {
2277
2289
  );
2278
2290
  },
2279
2291
  /**
2280
- * Whether I've blocked a user (Tier-3 helper).
2292
+ * Whether I've blocked a user.
2281
2293
  *
2282
2294
  * @example
2283
2295
  * const { blocked } = await board.me.blocks.status(boardUserId);
@@ -2290,7 +2302,7 @@ function meNamespace(client) {
2290
2302
  }
2291
2303
  },
2292
2304
  /**
2293
- * Message-scoped actions (doc 34 §E): edit / unsend your own messages
2305
+ * Message-scoped actions: edit / unsend your own messages
2294
2306
  * (15-minute window), and report a message addressed to you.
2295
2307
  */
2296
2308
  messages: {
@@ -2336,8 +2348,7 @@ function meNamespace(client) {
2336
2348
  }
2337
2349
  },
2338
2350
  /**
2339
- * The candidate job-access paywall — the authenticated money flow (doc 36 /
2340
- * ADR-0056). Enumerate offers publicly with `board.paywall.offers()`, then
2351
+ * The candidate job-access paywall — the authenticated money flow . Enumerate offers publicly with `board.paywall.offers()`, then
2341
2352
  * `checkout` here; poll `retrieveCheckout` until complete and confirm with
2342
2353
  * `grant`. The SDK stays Stripe-agnostic — `checkout` returns a mount kit
2343
2354
  * and the frontend brings `@stripe/stripe-js`.