@cavuno/board 1.34.0 → 1.35.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.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # @cavuno/board
2
2
 
3
3
  Typed, isomorphic client for the [Cavuno](https://cavuno.com) Board API —
4
- the headless toolkit for building fully-custom job-board frontends. Zero
4
+ the headless toolkit for building fully custom job board frontends. Zero
5
5
  dependencies; runs in the browser, Node ≥ 20, and Cloudflare Workers.
6
6
 
7
7
  You bring the framework and own the layout; the SDK brings the job board:
@@ -12,14 +12,14 @@ contract.
12
12
 
13
13
  ## Building with a coding agent
14
14
 
15
- The package ships an agent skill corpus that teaches Claude Code (or any
16
- SKILL.md-compatible agent) how to wire a board correctly — client setup,
15
+ The package ships an Agent Skills corpus for Codex, Claude Code, Cursor, and
16
+ other compatible coding agents. It teaches them how to wire a board correctly — client setup,
17
17
  auth and session ownership, pagination, gating, error handling, and a
18
18
  runtime smoke test:
19
19
 
20
20
  ```bash
21
- npm install @cavuno/board
22
- npx cavuno-board setup # copies version-matched skills into .claude/skills and/or .agents/skills
21
+ npm install @cavuno/board # or: pnpm add / yarn add / bun add
22
+ npx @cavuno/board setup # copies version-matched Agent Skills
23
23
  ```
24
24
 
25
25
  Then ask your agent: *"set up my Cavuno board"* — it reads the
@@ -33,8 +33,7 @@ never works from stale docs.
33
33
  import { createBoardClient } from '@cavuno/board';
34
34
 
35
35
  const board = createBoardClient({
36
- baseUrl: process.env.PUBLIC_CAVUNO_API_URL!, // https://api.cavuno.com
37
- board: process.env.PUBLIC_CAVUNO_BOARD!, // pk_… publishable key
36
+ board: process.env.PUBLIC_CAVUNO_BOARD!, // pk_… publishable key
38
37
  });
39
38
 
40
39
  const { name, theme, features } = await board.context();
@@ -80,7 +79,7 @@ SDK doesn't cover yet.
80
79
 
81
80
  ## Docs
82
81
 
83
- - API reference & guides: https://cavuno.com/docs/api
82
+ - SDK guides and reference: https://cavuno.com/docs/sdk
84
83
  - The OpenAPI document: `GET https://api.cavuno.com/v1/openapi.json`
85
84
  - Reference starter (TanStack Start on Cloudflare Workers):
86
85
  https://github.com/wollemiahq/cavuno-board-starter
package/dist/bin.mjs CHANGED
@@ -1,5 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ // src/constants.ts
4
+ var DEFAULT_CAVUNO_API_URL = "https://api.cavuno.com";
5
+
3
6
  // src/skills.ts
4
7
  import { readFileSync } from "fs";
5
8
  import { dirname, resolve } from "path";
@@ -538,7 +541,11 @@ async function checkBoardResolves(fetchImpl, env) {
538
541
  context: parsed
539
542
  };
540
543
  }
541
- var SKILL_ROOTS = [".claude/skills", ".agents/skills"];
544
+ var SKILL_ROOTS = [
545
+ ".claude/skills",
546
+ ".agents/skills",
547
+ ".cursor/skills"
548
+ ];
542
549
  function checkSkillsFreshness(projectRoot) {
543
550
  const roots = SKILL_ROOTS.map((root) => join2(projectRoot, root)).filter(
544
551
  (root) => existsSync2(root)
@@ -546,7 +553,7 @@ function checkSkillsFreshness(projectRoot) {
546
553
  if (roots.length === 0) {
547
554
  return STATIC_SKILLS(
548
555
  "skip",
549
- "no .claude/skills or .agents/skills directory \u2014 run `npx @cavuno/board setup` to install agent skills"
556
+ "no .claude/skills, .agents/skills, or .cursor/skills directory \u2014 run `npx @cavuno/board setup` to install agent skills"
550
557
  );
551
558
  }
552
559
  const corpus = loadSkillCorpus();
@@ -579,12 +586,16 @@ function checkSkillsFreshness(projectRoot) {
579
586
  }
580
587
  async function runDoctor(options) {
581
588
  const fetchImpl = options.fetchImpl ?? fetch;
589
+ const env = {
590
+ ...options.env,
591
+ apiUrl: options.env.apiUrl ?? DEFAULT_CAVUNO_API_URL
592
+ };
582
593
  const results = [];
583
- const envResults = checkEnv(options.env);
594
+ const envResults = checkEnv(env);
584
595
  results.push(...envResults);
585
596
  const envOk = envResults.every((r) => r.status === "pass");
586
- if (options.env.apiUrl) {
587
- const api = await checkApiReachable(fetchImpl, options.env.apiUrl);
597
+ if (env.apiUrl) {
598
+ const api = await checkApiReachable(fetchImpl, env.apiUrl);
588
599
  results.push(
589
600
  api ?? STATIC_API("skip", "API URL malformed \u2014 fix env.api-url first")
590
601
  );
@@ -593,7 +604,7 @@ async function runDoctor(options) {
593
604
  }
594
605
  let boardContext = null;
595
606
  if (envOk) {
596
- const resolved = await checkBoardResolves(fetchImpl, options.env);
607
+ const resolved = await checkBoardResolves(fetchImpl, env);
597
608
  boardContext = resolved.context;
598
609
  results.push(resolved.result);
599
610
  } else {
@@ -617,7 +628,7 @@ async function runDoctor(options) {
617
628
  } else {
618
629
  results.push(
619
630
  ...await runWriteProbes({
620
- env: options.env,
631
+ env,
621
632
  fetchImpl,
622
633
  resendApiKey: options.resendApiKey,
623
634
  nonce: options.writeProbeNonce,
@@ -646,8 +657,10 @@ function runSetup(cwd = process.cwd()) {
646
657
  (skill) => skill.category === "core" || skill.framework === framework
647
658
  );
648
659
  const roots = [
660
+ resolve2(cwd, ".agents", "skills"),
649
661
  resolve2(cwd, ".claude", "skills"),
650
- resolve2(cwd, ".agents", "skills")
662
+ resolve2(cwd, ".codex", "skills"),
663
+ resolve2(cwd, ".cursor", "skills")
651
664
  ];
652
665
  const existing = roots.filter((root) => existsSync3(root));
653
666
  const targetDirs = existing.length > 0 ? existing : [roots[0]];
@@ -725,11 +738,13 @@ function main() {
725
738
  );
726
739
  for (const name of result.copied) console.log(` - ${name}`);
727
740
  console.log("\nNext steps:");
728
- console.log(" 1. Set your environment variables:");
729
- console.log(" PUBLIC_CAVUNO_API_URL=https://api.cavuno.com");
741
+ console.log(" 1. Set your board publishable key:");
730
742
  console.log(
731
743
  " PUBLIC_CAVUNO_BOARD=pk_... # your board publishable key"
732
744
  );
745
+ console.log(
746
+ " # Optional API override: PUBLIC_CAVUNO_API_URL=https://api.cavuno.com"
747
+ );
733
748
  console.log(' 2. Ask your coding agent: "set up my Cavuno board".');
734
749
  console.log(" It reads the cavuno-board-setup skill first.");
735
750
  console.log(
@@ -1,4 +1,4 @@
1
- import { b as Schemas } from './jobs-IIJtDgzX.mjs';
1
+ import { b as Schemas } from './jobs-BFLMDNEN.mjs';
2
2
 
3
3
  type PublicBoard = Schemas['PublicBoardContext'];
4
4
  type PublicBoardFeatures = PublicBoard['features'];
@@ -1,4 +1,4 @@
1
- import { b as Schemas } from './jobs-IIJtDgzX.js';
1
+ import { b as Schemas } from './jobs-BFLMDNEN.js';
2
2
 
3
3
  type PublicBoard = Schemas['PublicBoardContext'];
4
4
  type PublicBoardFeatures = PublicBoard['features'];
@@ -1,5 +1,5 @@
1
1
  import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.mjs';
2
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-IIJtDgzX.mjs';
2
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-BFLMDNEN.mjs';
3
3
 
4
4
  declare const REMOTE_OPTIONS: readonly RemoteOption[];
5
5
  /**
package/dist/filters.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.js';
2
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-IIJtDgzX.js';
2
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-BFLMDNEN.js';
3
3
 
4
4
  declare const REMOTE_OPTIONS: readonly RemoteOption[];
5
5
  /**
package/dist/format.d.mts CHANGED
@@ -1,7 +1,7 @@
1
- import { P as PublicJob, a as PublicJobCard, C as CustomFieldValues } from './jobs-IIJtDgzX.mjs';
1
+ import { P as PublicJob, a as PublicJobCard, C as CustomFieldValues } from './jobs-BFLMDNEN.mjs';
2
2
  import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.mjs';
3
3
  export { A as AlertsCopy, a as ApplyCopy, b as BlogCopy, c as BreadcrumbsCopy, C as CopyLinkCopy, E as EntityCopy, F as FooterCopy, J as JobCardCopy, d as JobDetailCopy, e as JobSearchCopy, N as NavCopy, P as PUBLIC_LABEL_GROUPS, f as PaginationCopy, S as SalaryCopy, U as UiCopy, u as uiCopy } from './ui-copy-rlfoH9P3.mjs';
4
- import { C as CustomFieldDefinition } from './board-DgDC0T4g.mjs';
4
+ import { C as CustomFieldDefinition } from './board-Be8dY9Ba.mjs';
5
5
 
6
6
  /**
7
7
  * Date display helpers in the board language (required leading parameter,
package/dist/format.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { P as PublicJob, a as PublicJobCard, C as CustomFieldValues } from './jobs-IIJtDgzX.js';
1
+ import { P as PublicJob, a as PublicJobCard, C as CustomFieldValues } from './jobs-BFLMDNEN.js';
2
2
  import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.js';
3
3
  export { A as AlertsCopy, a as ApplyCopy, b as BlogCopy, c as BreadcrumbsCopy, C as CopyLinkCopy, E as EntityCopy, F as FooterCopy, J as JobCardCopy, d as JobDetailCopy, e as JobSearchCopy, N as NavCopy, P as PUBLIC_LABEL_GROUPS, f as PaginationCopy, S as SalaryCopy, U as UiCopy, u as uiCopy } from './ui-copy-rlfoH9P3.js';
4
- import { C as CustomFieldDefinition } from './board-Id19Yg8-.js';
4
+ import { C as CustomFieldDefinition } from './board-DsRbgz_D.js';
5
5
 
6
6
  /**
7
7
  * Date display helpers in the board language (required leading parameter,
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
- import { b as Schemas, R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, c as components, d as JobsListQuery, e as JobCardListEnvelope, f as JobsSearchBody, g as JobCardSearchEnvelope, h as JobsSimilarQuery, i as SearchEnvelope } from './jobs-IIJtDgzX.mjs';
2
- export { j as CustomFieldValue, C as CustomFieldValues, k as EducationRequirement, l as JobCompany, J as JobSort, O as OfficeLocation, P as PublicJob, a as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-IIJtDgzX.mjs';
3
- export { C as CustomFieldDefinition, a as CustomFieldOption, b as CustomFieldType, P as PublicBoard, c as PublicBoardAnalytics, d as PublicBoardFeatures, e as PublicBoardTheme } from './board-DgDC0T4g.mjs';
4
- 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-BfEEEOHj.mjs';
5
- 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-BfEEEOHj.mjs';
1
+ import { b as Schemas, R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, c as components, d as JobsListQuery, e as JobCardListEnvelope, f as JobsSearchBody, g as JobCardSearchEnvelope, h as JobsSimilarQuery, i as SearchEnvelope } from './jobs-BFLMDNEN.mjs';
2
+ export { j as CustomFieldValue, C as CustomFieldValues, k as EducationRequirement, l as JobCatalogPagination, m as JobCompany, J as JobSort, O as OfficeLocation, n as OffsetPagination, P as PublicJob, a as PublicJobCard, o as RelatedSearch, p as RemotePermit, q as RemoteTimezone, r as StorefrontPagination } from './jobs-BFLMDNEN.mjs';
3
+ export { C as CustomFieldDefinition, a as CustomFieldOption, b as CustomFieldType, P as PublicBoard, c as PublicBoardAnalytics, d as PublicBoardFeatures, e as PublicBoardTheme } from './board-Be8dY9Ba.mjs';
4
+ 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-pO_vGORE.mjs';
5
+ 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-pO_vGORE.mjs';
6
6
 
7
7
  type Awaitable<T> = T | Promise<T>;
8
8
  /**
@@ -176,7 +176,7 @@ interface Paginator<P extends PageShape> extends AsyncIterable<ItemOf<P>> {
176
176
  * an explicit sort/query — see the jobs skill.
177
177
  *
178
178
  * `offset` is honored for the FIRST page only and dropped afterwards: on
179
- * storefront reads `offset` takes precedence over `cursor`, so carrying it
179
+ * job catalog reads let `offset` take precedence over `cursor`, so carrying it
180
180
  * forward would re-serve the same page forever.
181
181
  *
182
182
  * @example
@@ -204,7 +204,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
204
204
  * constant because the package is platform-neutral and cannot read
205
205
  * package.json at runtime.
206
206
  */
207
- declare const SDK_VERSION = "1.34.0";
207
+ declare const SDK_VERSION = "1.35.0";
208
208
 
209
209
  type SavedJob = Schemas['SavedJob'];
210
210
  type SavedJobsListQuery = {
@@ -456,7 +456,7 @@ type EmbedJobsQuery = {
456
456
  cursor?: string;
457
457
  /** Default 8; values above the embed ceiling of 50 are clamped to 50. */
458
458
  limit?: number;
459
- /** Storefront page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
459
+ /** Job catalog page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
460
460
  offset?: number;
461
461
  /** Repeated param (up to 10) — OR-matched. Repeat `companyId` per value. */
462
462
  companyId?: string[];
@@ -547,7 +547,7 @@ type AccessCheckoutBody = Schemas['AccessCheckoutBody'];
547
547
  type AccessPortalBody = Schemas['AccessPortalBody'];
548
548
  type PaywallOfferListEnvelope = ListEnvelope<PaywallOffer>;
549
549
 
550
- type JobAlertFrequency = 'daily' | 'weekly';
550
+ type JobAlertFrequency = 'weekly';
551
551
  type JobAlertRemoteOption = 'on_site' | 'hybrid' | 'remote';
552
552
  /**
553
553
  * Alert filters a consumer can capture. Only `jobFunctions` (→ job categories),
@@ -646,7 +646,8 @@ type PlacesListQuery = {
646
646
  };
647
647
 
648
648
  interface CreateBoardClientOptions {
649
- baseUrl: string;
649
+ /** Cavuno API origin. Defaults to the production service. */
650
+ baseUrl?: string;
650
651
  /** Board identifier: `pk_…` key (provisioned default) | `boards_…` ID | slug. */
651
652
  board: string;
652
653
  auth?: {
@@ -669,7 +670,6 @@ interface CreateBoardClientOptions {
669
670
  * import { createBoardClient } from '@cavuno/board';
670
671
  *
671
672
  * const board = createBoardClient({
672
- * baseUrl: 'https://api.cavuno.com',
673
673
  * board: 'pk_a8f3…',
674
674
  * });
675
675
  * const { data } = await board.jobs.list({ limit: 20 });
@@ -1902,7 +1902,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1902
1902
  id: string;
1903
1903
  object: "alert";
1904
1904
  label: string | null;
1905
- frequency: "daily" | "weekly";
1905
+ frequency: "weekly";
1906
1906
  isActive: boolean;
1907
1907
  filters: {
1908
1908
  jobFunctions: string[];
@@ -1919,7 +1919,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1919
1919
  id: string;
1920
1920
  object: "alert";
1921
1921
  label: string | null;
1922
- frequency: "daily" | "weekly";
1922
+ frequency: "weekly";
1923
1923
  isActive: boolean;
1924
1924
  filters: {
1925
1925
  jobFunctions: string[];
@@ -1936,7 +1936,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1936
1936
  id: string;
1937
1937
  object: "alert";
1938
1938
  label: string | null;
1939
- frequency: "daily" | "weekly";
1939
+ frequency: "weekly";
1940
1940
  isActive: boolean;
1941
1941
  filters: {
1942
1942
  jobFunctions: string[];
@@ -1953,7 +1953,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1953
1953
  id: string;
1954
1954
  object: "alert";
1955
1955
  label: string | null;
1956
- frequency: "daily" | "weekly";
1956
+ frequency: "weekly";
1957
1957
  isActive: boolean;
1958
1958
  filters: {
1959
1959
  jobFunctions: string[];
@@ -2338,7 +2338,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2338
2338
  preferences: {
2339
2339
  id: string;
2340
2340
  label: string | null;
2341
- frequency: string;
2341
+ frequency: "weekly";
2342
2342
  isActive: boolean;
2343
2343
  filters: {
2344
2344
  jobFunctions?: string[];
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { b as Schemas, R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, c as components, d as JobsListQuery, e as JobCardListEnvelope, f as JobsSearchBody, g as JobCardSearchEnvelope, h as JobsSimilarQuery, i as SearchEnvelope } from './jobs-IIJtDgzX.js';
2
- export { j as CustomFieldValue, C as CustomFieldValues, k as EducationRequirement, l as JobCompany, J as JobSort, O as OfficeLocation, P as PublicJob, a as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-IIJtDgzX.js';
3
- export { C as CustomFieldDefinition, a as CustomFieldOption, b as CustomFieldType, P as PublicBoard, c as PublicBoardAnalytics, d as PublicBoardFeatures, e as PublicBoardTheme } from './board-Id19Yg8-.js';
4
- 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-CL_00fNX.js';
5
- 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-CL_00fNX.js';
1
+ import { b as Schemas, R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, c as components, d as JobsListQuery, e as JobCardListEnvelope, f as JobsSearchBody, g as JobCardSearchEnvelope, h as JobsSimilarQuery, i as SearchEnvelope } from './jobs-BFLMDNEN.js';
2
+ export { j as CustomFieldValue, C as CustomFieldValues, k as EducationRequirement, l as JobCatalogPagination, m as JobCompany, J as JobSort, O as OfficeLocation, n as OffsetPagination, P as PublicJob, a as PublicJobCard, o as RelatedSearch, p as RemotePermit, q as RemoteTimezone, r as StorefrontPagination } from './jobs-BFLMDNEN.js';
3
+ export { C as CustomFieldDefinition, a as CustomFieldOption, b as CustomFieldType, P as PublicBoard, c as PublicBoardAnalytics, d as PublicBoardFeatures, e as PublicBoardTheme } from './board-DsRbgz_D.js';
4
+ 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-negE75t8.js';
5
+ 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-negE75t8.js';
6
6
 
7
7
  type Awaitable<T> = T | Promise<T>;
8
8
  /**
@@ -176,7 +176,7 @@ interface Paginator<P extends PageShape> extends AsyncIterable<ItemOf<P>> {
176
176
  * an explicit sort/query — see the jobs skill.
177
177
  *
178
178
  * `offset` is honored for the FIRST page only and dropped afterwards: on
179
- * storefront reads `offset` takes precedence over `cursor`, so carrying it
179
+ * job catalog reads let `offset` take precedence over `cursor`, so carrying it
180
180
  * forward would re-serve the same page forever.
181
181
  *
182
182
  * @example
@@ -204,7 +204,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
204
204
  * constant because the package is platform-neutral and cannot read
205
205
  * package.json at runtime.
206
206
  */
207
- declare const SDK_VERSION = "1.34.0";
207
+ declare const SDK_VERSION = "1.35.0";
208
208
 
209
209
  type SavedJob = Schemas['SavedJob'];
210
210
  type SavedJobsListQuery = {
@@ -456,7 +456,7 @@ type EmbedJobsQuery = {
456
456
  cursor?: string;
457
457
  /** Default 8; values above the embed ceiling of 50 are clamped to 50. */
458
458
  limit?: number;
459
- /** Storefront page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
459
+ /** Job catalog page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
460
460
  offset?: number;
461
461
  /** Repeated param (up to 10) — OR-matched. Repeat `companyId` per value. */
462
462
  companyId?: string[];
@@ -547,7 +547,7 @@ type AccessCheckoutBody = Schemas['AccessCheckoutBody'];
547
547
  type AccessPortalBody = Schemas['AccessPortalBody'];
548
548
  type PaywallOfferListEnvelope = ListEnvelope<PaywallOffer>;
549
549
 
550
- type JobAlertFrequency = 'daily' | 'weekly';
550
+ type JobAlertFrequency = 'weekly';
551
551
  type JobAlertRemoteOption = 'on_site' | 'hybrid' | 'remote';
552
552
  /**
553
553
  * Alert filters a consumer can capture. Only `jobFunctions` (→ job categories),
@@ -646,7 +646,8 @@ type PlacesListQuery = {
646
646
  };
647
647
 
648
648
  interface CreateBoardClientOptions {
649
- baseUrl: string;
649
+ /** Cavuno API origin. Defaults to the production service. */
650
+ baseUrl?: string;
650
651
  /** Board identifier: `pk_…` key (provisioned default) | `boards_…` ID | slug. */
651
652
  board: string;
652
653
  auth?: {
@@ -669,7 +670,6 @@ interface CreateBoardClientOptions {
669
670
  * import { createBoardClient } from '@cavuno/board';
670
671
  *
671
672
  * const board = createBoardClient({
672
- * baseUrl: 'https://api.cavuno.com',
673
673
  * board: 'pk_a8f3…',
674
674
  * });
675
675
  * const { data } = await board.jobs.list({ limit: 20 });
@@ -1902,7 +1902,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1902
1902
  id: string;
1903
1903
  object: "alert";
1904
1904
  label: string | null;
1905
- frequency: "daily" | "weekly";
1905
+ frequency: "weekly";
1906
1906
  isActive: boolean;
1907
1907
  filters: {
1908
1908
  jobFunctions: string[];
@@ -1919,7 +1919,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1919
1919
  id: string;
1920
1920
  object: "alert";
1921
1921
  label: string | null;
1922
- frequency: "daily" | "weekly";
1922
+ frequency: "weekly";
1923
1923
  isActive: boolean;
1924
1924
  filters: {
1925
1925
  jobFunctions: string[];
@@ -1936,7 +1936,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1936
1936
  id: string;
1937
1937
  object: "alert";
1938
1938
  label: string | null;
1939
- frequency: "daily" | "weekly";
1939
+ frequency: "weekly";
1940
1940
  isActive: boolean;
1941
1941
  filters: {
1942
1942
  jobFunctions: string[];
@@ -1953,7 +1953,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1953
1953
  id: string;
1954
1954
  object: "alert";
1955
1955
  label: string | null;
1956
- frequency: "daily" | "weekly";
1956
+ frequency: "weekly";
1957
1957
  isActive: boolean;
1958
1958
  filters: {
1959
1959
  jobFunctions: string[];
@@ -2338,7 +2338,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2338
2338
  preferences: {
2339
2339
  id: string;
2340
2340
  label: string | null;
2341
- frequency: string;
2341
+ frequency: "weekly";
2342
2342
  isActive: boolean;
2343
2343
  filters: {
2344
2344
  jobFunctions?: string[];
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.34.0";
315
+ var SDK_VERSION = "1.35.0";
316
316
 
317
317
  // src/client.ts
318
318
  function isRawBody(body) {
@@ -403,6 +403,9 @@ var BoardClient = class {
403
403
  }
404
404
  };
405
405
 
406
+ // src/constants.ts
407
+ var DEFAULT_CAVUNO_API_URL = "https://api.cavuno.com";
408
+
406
409
  // src/namespaces/auth.ts
407
410
  function authNamespace(client) {
408
411
  async function persist(session) {
@@ -1798,7 +1801,7 @@ function meNamespace(client) {
1798
1801
  *
1799
1802
  * @example
1800
1803
  * await board.me.alerts.update(alertId, {
1801
- * frequency: 'daily',
1804
+ * frequency: 'weekly',
1802
1805
  * placeIds: ['ChIJ…'],
1803
1806
  * });
1804
1807
  */
@@ -2633,7 +2636,7 @@ function resolveApplyAction(state) {
2633
2636
  // src/index.ts
2634
2637
  function createBoardClient(options) {
2635
2638
  const client = new BoardClient({
2636
- baseUrl: options.baseUrl,
2639
+ baseUrl: options.baseUrl ?? DEFAULT_CAVUNO_API_URL,
2637
2640
  board: options.board,
2638
2641
  storage: resolveStorage(options.auth?.storage, options.board),
2639
2642
  globalHeaders: options.globalHeaders,
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.34.0";
268
+ var SDK_VERSION = "1.35.0";
269
269
 
270
270
  // src/client.ts
271
271
  function isRawBody(body) {
@@ -356,6 +356,9 @@ var BoardClient = class {
356
356
  }
357
357
  };
358
358
 
359
+ // src/constants.ts
360
+ var DEFAULT_CAVUNO_API_URL = "https://api.cavuno.com";
361
+
359
362
  // src/namespaces/auth.ts
360
363
  function authNamespace(client) {
361
364
  async function persist(session) {
@@ -1751,7 +1754,7 @@ function meNamespace(client) {
1751
1754
  *
1752
1755
  * @example
1753
1756
  * await board.me.alerts.update(alertId, {
1754
- * frequency: 'daily',
1757
+ * frequency: 'weekly',
1755
1758
  * placeIds: ['ChIJ…'],
1756
1759
  * });
1757
1760
  */
@@ -2586,7 +2589,7 @@ function resolveApplyAction(state) {
2586
2589
  // src/index.ts
2587
2590
  function createBoardClient(options) {
2588
2591
  const client = new BoardClient({
2589
- baseUrl: options.baseUrl,
2592
+ baseUrl: options.baseUrl ?? DEFAULT_CAVUNO_API_URL,
2590
2593
  board: options.board,
2591
2594
  storage: resolveStorage(options.auth?.storage, options.board),
2592
2595
  globalHeaders: options.globalHeaders,