@cavuno/board 4.15.0 → 4.18.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 (45) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/{_spec-DdWB8z1Z.d.mts → _spec-Dk0TIRUc.d.mts} +19 -7
  3. package/dist/{_spec-DdWB8z1Z.d.ts → _spec-Dk0TIRUc.d.ts} +19 -7
  4. package/dist/analytics.d.mts +58 -0
  5. package/dist/analytics.d.ts +58 -0
  6. package/dist/analytics.js +222 -0
  7. package/dist/analytics.mjs +199 -0
  8. package/dist/bin.mjs +99 -26
  9. package/dist/{blog-B7xorPBw.d.ts → blog-1THfucKR.d.ts} +1 -1
  10. package/dist/{blog-DopIQsKV.d.mts → blog-C04NWTh_.d.mts} +1 -1
  11. package/dist/{board-Bpnqn4Rg.d.ts → board-CqeoQAa1.d.ts} +2 -2
  12. package/dist/{board-CkgTW4cC.d.mts → board-DIO9aFXx.d.mts} +2 -2
  13. package/dist/{breadcrumbs-DelEqbSz.d.ts → breadcrumbs-CCT1oC2-.d.ts} +2 -2
  14. package/dist/{breadcrumbs-CAppxMoS.d.mts → breadcrumbs-mE9Zsxlq.d.mts} +2 -2
  15. package/dist/browser/cavuno-board.global.min.js +1 -1
  16. package/dist/{chunk-W73BOGOQ.mjs → chunk-2WBQVVOB.mjs} +1 -0
  17. package/dist/doctor.js +93 -21
  18. package/dist/doctor.mjs +93 -21
  19. package/dist/filters.d.mts +2 -2
  20. package/dist/filters.d.ts +2 -2
  21. package/dist/format.d.mts +4 -4
  22. package/dist/format.d.ts +4 -4
  23. package/dist/index.d.mts +12 -12
  24. package/dist/index.d.ts +12 -12
  25. package/dist/index.js +6 -2
  26. package/dist/index.mjs +6 -3
  27. package/dist/{jobs-Dq0TTcRf.d.mts → jobs-CVmAWGtJ.d.mts} +1 -1
  28. package/dist/{jobs-CExc4QdI.d.ts → jobs-Dvv0vX8p.d.ts} +1 -1
  29. package/dist/{search-D6hau3d4.d.mts → search-BJ5myYaf.d.mts} +1 -1
  30. package/dist/{search-CZOec95V.d.ts → search-CcstbHOe.d.ts} +1 -1
  31. package/dist/{seo-C1hFa0-v.d.ts → seo-CWO6N-iE.d.ts} +1 -1
  32. package/dist/{seo-CJSwd_ss.d.mts → seo-Ds6tLMqU.d.mts} +1 -1
  33. package/dist/seo-files.d.mts +2 -2
  34. package/dist/seo-files.d.ts +2 -2
  35. package/dist/seo.d.mts +6 -6
  36. package/dist/seo.d.ts +6 -6
  37. package/dist/server.d.mts +6 -6
  38. package/dist/server.d.ts +6 -6
  39. package/dist/server.mjs +1 -1
  40. package/dist/sitemap.d.mts +6 -6
  41. package/dist/sitemap.d.ts +6 -6
  42. package/dist/suggest.d.mts +2 -2
  43. package/dist/suggest.d.ts +2 -2
  44. package/package.json +11 -1
  45. package/skills/manifest.json +1 -1
package/dist/doctor.mjs CHANGED
@@ -117,11 +117,83 @@ function summarize(results) {
117
117
  };
118
118
  }
119
119
 
120
- // src/doctor/cookie-conformance.ts
120
+ // src/doctor/analytics-surface.ts
121
121
  import { existsSync, readdirSync as readdirSync2, readFileSync as readFileSync2, statSync } from "fs";
122
122
  import { join, relative } from "path";
123
+ var ANALYTICS = record("static.analytics-surface", 1);
124
+ var SOURCE_EXT = /\.(ts|tsx|js|jsx|mjs|cjs|astro|svelte|vue|mdx)$/;
125
+ var TEST_FILE = /\.(?:test|spec)\./;
126
+ var FORBIDDEN = [
127
+ { id: "window.Tinybird", re: /\bwindow\.Tinybird\b/ },
128
+ { id: "@tinybirdco/flock", re: /@tinybirdco\/flock/ },
129
+ { id: "CAVUNO_TRACKER_TOKEN", re: /\bCAVUNO_TRACKER_TOKEN\b/ }
130
+ ];
131
+ var SCAN_ROOTS = ["src", "app", "apps"];
132
+ var SKIP_DIR_NAMES = /* @__PURE__ */ new Set([
133
+ "node_modules",
134
+ "dist",
135
+ ".git",
136
+ ".turbo",
137
+ "coverage",
138
+ "paraglide"
139
+ ]);
140
+ function walkFiles(root, out) {
141
+ if (!existsSync(root)) return;
142
+ for (const entry of readdirSync2(root)) {
143
+ if (SKIP_DIR_NAMES.has(entry)) continue;
144
+ const full = join(root, entry);
145
+ const st = statSync(full);
146
+ if (st.isDirectory()) {
147
+ walkFiles(full, out);
148
+ continue;
149
+ }
150
+ if (SOURCE_EXT.test(entry) && !TEST_FILE.test(entry)) {
151
+ out.push(full);
152
+ }
153
+ }
154
+ }
155
+ function checkAnalyticsSurface(projectRoot) {
156
+ const files = [];
157
+ for (const name of SCAN_ROOTS) {
158
+ walkFiles(join(projectRoot, name), files);
159
+ }
160
+ if (files.length === 0) {
161
+ return ANALYTICS(
162
+ "skip",
163
+ "no src/, app/, or apps/ tree to scan for analytics surface"
164
+ );
165
+ }
166
+ const hits = [];
167
+ for (const file of files) {
168
+ let text;
169
+ try {
170
+ text = readFileSync2(file, "utf8");
171
+ } catch {
172
+ continue;
173
+ }
174
+ for (const rule of FORBIDDEN) {
175
+ if (rule.re.test(text)) {
176
+ hits.push(`${relative(projectRoot, file)}:${rule.id}`);
177
+ }
178
+ }
179
+ }
180
+ if (hits.length === 0) {
181
+ return ANALYTICS(
182
+ "pass",
183
+ "no Tinybird-branded analytics APIs in app source"
184
+ );
185
+ }
186
+ return ANALYTICS(
187
+ "fail",
188
+ `use @cavuno/board/analytics + CAVUNO_BOARD only \u2014 found ${hits.slice(0, 8).join(", ")}${hits.length > 8 ? ` (+${hits.length - 8} more)` : ""}`
189
+ );
190
+ }
191
+
192
+ // src/doctor/cookie-conformance.ts
193
+ import { existsSync as existsSync2, readdirSync as readdirSync3, readFileSync as readFileSync3, statSync as statSync2 } from "fs";
194
+ import { join as join2, relative as relative2 } from "path";
123
195
  var COOKIE = record("static.cookie-codec", 1);
124
- var SOURCE_EXT = /\.(ts|tsx|js|jsx|mjs|cjs|astro|svelte|vue)$/;
196
+ var SOURCE_EXT2 = /\.(ts|tsx|js|jsx|mjs|cjs|astro|svelte|vue)$/;
125
197
  var REMEDIATION = "set cookies only through the SDK server cookie codec (buildCookie/buildClearCookie from @cavuno/board/server)";
126
198
  var SET_COOKIE_SINK = /set-cookie/i;
127
199
  var DOCUMENT_COOKIE_ASSIGN = /document\.cookie\s*\+?=(?!=)/i;
@@ -224,23 +296,23 @@ function hasGeneratedBanner(text) {
224
296
  function walkSourceFiles(dir, out) {
225
297
  let entries;
226
298
  try {
227
- entries = readdirSync2(dir);
299
+ entries = readdirSync3(dir);
228
300
  } catch {
229
301
  return;
230
302
  }
231
303
  for (const name of entries) {
232
304
  if (name === "node_modules" || name.startsWith(".")) continue;
233
305
  if (GENERATED_DIRS.has(name) || GENERATED_FILE.test(name)) continue;
234
- const full = join(dir, name);
306
+ const full = join2(dir, name);
235
307
  let st;
236
308
  try {
237
- st = statSync(full);
309
+ st = statSync2(full);
238
310
  } catch {
239
311
  continue;
240
312
  }
241
313
  if (st.isDirectory()) {
242
314
  walkSourceFiles(full, out);
243
- } else if (st.isFile() && SOURCE_EXT.test(name)) {
315
+ } else if (st.isFile() && SOURCE_EXT2.test(name)) {
244
316
  out.push(full);
245
317
  }
246
318
  }
@@ -250,8 +322,8 @@ function truncate(line, max = 120) {
250
322
  return t.length > max ? `${t.slice(0, max)}\u2026` : t;
251
323
  }
252
324
  function checkCookieCodecConformance(projectRoot) {
253
- const srcDir = join(projectRoot, "src");
254
- if (!existsSync(srcDir)) {
325
+ const srcDir = join2(projectRoot, "src");
326
+ if (!existsSync2(srcDir)) {
255
327
  return [
256
328
  COOKIE(
257
329
  "skip",
@@ -263,10 +335,10 @@ function checkCookieCodecConformance(projectRoot) {
263
335
  walkSourceFiles(srcDir, files);
264
336
  const findings = [];
265
337
  for (const file of files) {
266
- const rel = relative(projectRoot, file).split("\\").join("/");
338
+ const rel = relative2(projectRoot, file).split("\\").join("/");
267
339
  let text;
268
340
  try {
269
- text = readFileSync2(file, "utf8");
341
+ text = readFileSync3(file, "utf8");
270
342
  } catch {
271
343
  continue;
272
344
  }
@@ -526,8 +598,8 @@ async function runReadProbes(fetchImpl, frontendUrl, seo) {
526
598
  }
527
599
 
528
600
  // src/doctor/run.ts
529
- import { existsSync as existsSync2, readFileSync as readFileSync3 } from "fs";
530
- import { join as join2 } from "path";
601
+ import { existsSync as existsSync3, readFileSync as readFileSync4 } from "fs";
602
+ import { join as join3 } from "path";
531
603
  var STATIC_API = record("static.api", 1);
532
604
  var STATIC_BOARD = record("static.board", 1);
533
605
  var STATIC_SKILLS = record("static.skills", 1);
@@ -605,8 +677,8 @@ var SKILL_ROOTS = [
605
677
  ".cursor/skills"
606
678
  ];
607
679
  function checkSkillsFreshness(projectRoot) {
608
- const roots = SKILL_ROOTS.map((root) => join2(projectRoot, root)).filter(
609
- (root) => existsSync2(root)
680
+ const roots = SKILL_ROOTS.map((root) => join3(projectRoot, root)).filter(
681
+ (root) => existsSync3(root)
610
682
  );
611
683
  if (roots.length === 0) {
612
684
  return STATIC_SKILLS(
@@ -619,10 +691,10 @@ function checkSkillsFreshness(projectRoot) {
619
691
  const seen = /* @__PURE__ */ new Set();
620
692
  for (const root of roots) {
621
693
  for (const skill of corpus.skills) {
622
- const copied = join2(root, skill.name, "SKILL.md");
623
- if (!existsSync2(copied)) continue;
694
+ const copied = join3(root, skill.name, "SKILL.md");
695
+ if (!existsSync3(copied)) continue;
624
696
  seen.add(skill.name);
625
- if (readFileSync3(copied, "utf8") !== skill.content) {
697
+ if (readFileSync4(copied, "utf8") !== skill.content) {
626
698
  stale.add(skill.name);
627
699
  }
628
700
  }
@@ -670,10 +742,10 @@ async function runDoctor(options) {
670
742
  } else {
671
743
  results.push(STATIC_BOARD("skip", "env checks failed \u2014 fix them first"));
672
744
  }
673
- results.push(checkSkillsFreshness(options.projectRoot ?? process.cwd()));
674
- results.push(
675
- ...checkCookieCodecConformance(options.projectRoot ?? process.cwd())
676
- );
745
+ const projectRoot = options.projectRoot ?? process.cwd();
746
+ results.push(checkSkillsFreshness(projectRoot));
747
+ results.push(...checkCookieCodecConformance(projectRoot));
748
+ results.push(checkAnalyticsSurface(projectRoot));
677
749
  results.push(
678
750
  ...options.frontendUrl ? await runReadProbes(fetchImpl, options.frontendUrl, seo) : skipReadProbes("no --frontend <url> given")
679
751
  );
@@ -1,5 +1,5 @@
1
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-Dq0TTcRf.mjs';
2
- import './_spec-DdWB8z1Z.mjs';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-CVmAWGtJ.mjs';
2
+ import './_spec-Dk0TIRUc.mjs';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
package/dist/filters.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-CExc4QdI.js';
2
- import './_spec-DdWB8z1Z.js';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-Dvv0vX8p.js';
2
+ import './_spec-Dk0TIRUc.js';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
package/dist/format.d.mts CHANGED
@@ -1,7 +1,7 @@
1
- export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-CAppxMoS.mjs';
2
- import { C as CustomFieldDefinition } from './board-CkgTW4cC.mjs';
3
- import { C as CustomFieldValues } from './jobs-Dq0TTcRf.mjs';
4
- import './_spec-DdWB8z1Z.mjs';
1
+ export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-mE9Zsxlq.mjs';
2
+ import { C as CustomFieldDefinition } from './board-DIO9aFXx.mjs';
3
+ import { C as CustomFieldValues } from './jobs-CVmAWGtJ.mjs';
4
+ import './_spec-Dk0TIRUc.mjs';
5
5
 
6
6
  /**
7
7
  * Date display helpers in the board language (required leading parameter,
package/dist/format.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-DelEqbSz.js';
2
- import { C as CustomFieldDefinition } from './board-Bpnqn4Rg.js';
3
- import { C as CustomFieldValues } from './jobs-CExc4QdI.js';
4
- import './_spec-DdWB8z1Z.js';
1
+ export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-CCT1oC2-.js';
2
+ import { C as CustomFieldDefinition } from './board-CqeoQAa1.js';
3
+ import { C as CustomFieldValues } from './jobs-Dvv0vX8p.js';
4
+ import './_spec-Dk0TIRUc.js';
5
5
 
6
6
  /**
7
7
  * Date display helpers in the board language (required leading parameter,
package/dist/index.d.mts CHANGED
@@ -1,13 +1,13 @@
1
- import { S as Schemas, c as components } from './_spec-DdWB8z1Z.mjs';
2
- import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-D6hau3d4.mjs';
3
- export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-D6hau3d4.mjs';
4
- import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-CkgTW4cC.mjs';
5
- export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-CkgTW4cC.mjs';
6
- export { B as BoardSeo } from './seo-CJSwd_ss.mjs';
7
- import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-Dq0TTcRf.mjs';
8
- export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-Dq0TTcRf.mjs';
9
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-DopIQsKV.mjs';
10
- export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-DopIQsKV.mjs';
1
+ import { S as Schemas, c as components } from './_spec-Dk0TIRUc.mjs';
2
+ import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-BJ5myYaf.mjs';
3
+ export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-BJ5myYaf.mjs';
4
+ import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-DIO9aFXx.mjs';
5
+ export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-DIO9aFXx.mjs';
6
+ export { B as BoardSeo } from './seo-Ds6tLMqU.mjs';
7
+ import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-CVmAWGtJ.mjs';
8
+ export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-CVmAWGtJ.mjs';
9
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-C04NWTh_.mjs';
10
+ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-C04NWTh_.mjs';
11
11
 
12
12
  /**
13
13
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -20,7 +20,7 @@ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts,
20
20
  * `unknown_error` is SDK-synthesized when a response carries no parseable
21
21
  * envelope.
22
22
  */
23
- declare const BOARD_API_ERROR_CODES: readonly ["internal_error", "validation_bad_request", "validation_payload_too_large", "rate_limited", "rate_limit_unavailable", "search_unavailable", "too_many_filter_values", "pagination_invalid_cursor", "pagination_offset_too_large", "auth_unauthenticated", "auth_forbidden", "plan_upgrade_required", "unknown_error", "boards_not_found", "board_page_not_found", "board_auth_email_taken", "board_auth_invalid_credentials", "board_auth_invalid_token", "board_auth_registration_disabled", "board_auth_token_expired", "invalid_current_password", "no_password", "same_email", "email_taken", "invalid_token", "board_password_required", "board_password_invalid", "jobs_not_found", "jobs_invalid_filter", "categories_not_found", "skills_not_found", "places_not_found", "companies_not_found", "company_markets_not_found", "company_salary_not_found", "company_category_salary_not_found", "salaries_title_not_found", "salaries_skill_not_found", "salaries_location_not_found", "salaries_title_location_not_found", "salaries_skill_location_not_found", "blog_post_not_found", "blog_author_not_found", "blog_tag_not_found", "talent_not_found", "talent_directory_not_found", "talent_directory_restricted", "job_recommendations_not_found", "recommended_talent_not_found", "job_alert_not_found", "job_alerts_disabled", "candidate_alert_limit_reached", "candidate_alert_not_found", "candidate_entry_not_found", "candidate_handle_taken", "candidate_job_not_found", "candidate_notification_preference_paused", "resume_invalid_file", "resume_upload_forbidden", "applications_external_apply_only", "applications_country_not_allowed", "applications_guest_not_allowed", "applications_job_not_found", "applications_not_found", "applications_resume_invalid_file", "applications_unprocessable", "messaging_application_not_found", "messaging_application_not_linked", "messaging_blocked", "messaging_cannot_block_self", "messaging_cold_rule", "messaging_conversation_not_found", "messaging_disabled", "messaging_edit_window_expired", "messaging_message_deleted", "messaging_message_not_found", "messaging_not_author", "messaging_not_participant", "messaging_not_permitted", "messaging_not_recipient", "messaging_rate_limited", "messaging_recipient_not_found", "messaging_recipient_not_open", "messaging_unsend_window_expired", "employer_applicant_not_found", "employer_ats_unprocessable", "employer_checkout_failed", "employer_company_exists", "employer_company_name_taken", "employer_company_not_found", "employer_job_not_found", "employer_job_slug_taken", "employer_jobs_quota_exceeded", "employer_not_member", "employer_payment_required", "employer_pipeline_stage_not_found", "employer_member_not_found", "employer_invite_not_found", "not_company_admin", "not_company_member", "company_deletion_disabled", "last_admin", "already_member", "already_invited", "invalid_email", "invite_email_mismatch", "candidate_role", "job_not_published", "talent_list_not_found", "sourced_candidate_not_found", "sourced_convert_unavailable", "paywall_already_active", "paywall_disabled", "paywall_invalid_checkout_session", "paywall_no_candidate_profile", "paywall_no_recurring_subscription", "paywall_offer_not_found", "talent_access_unavailable", "company_required", "already_on_plan", "talent_access_required", "messaging_talent_access_required", "stripe_not_connected", "job_posting_logo_lookup_unavailable", "job_posting_logo_not_found", "job_posting_rejected"];
23
+ declare const BOARD_API_ERROR_CODES: readonly ["internal_error", "validation_bad_request", "validation_payload_too_large", "rate_limited", "rate_limit_unavailable", "search_unavailable", "too_many_filter_values", "pagination_invalid_cursor", "pagination_offset_too_large", "auth_unauthenticated", "auth_forbidden", "plan_upgrade_required", "unknown_error", "boards_not_found", "board_page_not_found", "board_auth_account_not_found", "board_auth_email_taken", "board_auth_invalid_credentials", "board_auth_invalid_token", "board_auth_registration_disabled", "board_auth_token_expired", "invalid_current_password", "no_password", "same_email", "email_taken", "invalid_token", "board_password_required", "board_password_invalid", "jobs_not_found", "jobs_invalid_filter", "categories_not_found", "skills_not_found", "places_not_found", "companies_not_found", "company_markets_not_found", "company_salary_not_found", "company_category_salary_not_found", "salaries_title_not_found", "salaries_skill_not_found", "salaries_location_not_found", "salaries_title_location_not_found", "salaries_skill_location_not_found", "blog_post_not_found", "blog_author_not_found", "blog_tag_not_found", "talent_not_found", "talent_directory_not_found", "talent_directory_restricted", "job_recommendations_not_found", "recommended_talent_not_found", "job_alert_not_found", "job_alerts_disabled", "candidate_alert_limit_reached", "candidate_alert_not_found", "candidate_entry_not_found", "candidate_handle_taken", "candidate_job_not_found", "candidate_notification_preference_paused", "resume_invalid_file", "resume_upload_forbidden", "applications_external_apply_only", "applications_country_not_allowed", "applications_guest_not_allowed", "applications_job_not_found", "applications_not_found", "applications_resume_invalid_file", "applications_unprocessable", "messaging_application_not_found", "messaging_application_not_linked", "messaging_blocked", "messaging_cannot_block_self", "messaging_cold_rule", "messaging_conversation_not_found", "messaging_disabled", "messaging_edit_window_expired", "messaging_message_deleted", "messaging_message_not_found", "messaging_not_author", "messaging_not_participant", "messaging_not_permitted", "messaging_not_recipient", "messaging_rate_limited", "messaging_recipient_not_found", "messaging_recipient_not_open", "messaging_unsend_window_expired", "employer_applicant_not_found", "employer_ats_unprocessable", "employer_checkout_failed", "employer_company_exists", "employer_company_name_taken", "employer_company_not_found", "employer_job_not_found", "employer_job_slug_taken", "employer_jobs_quota_exceeded", "employer_not_member", "employer_payment_required", "employer_pipeline_stage_not_found", "employer_member_not_found", "employer_invite_not_found", "not_company_admin", "not_company_member", "company_deletion_disabled", "last_admin", "already_member", "already_invited", "invalid_email", "invite_email_mismatch", "candidate_role", "job_not_published", "talent_list_not_found", "sourced_candidate_not_found", "sourced_convert_unavailable", "paywall_already_active", "paywall_disabled", "paywall_invalid_checkout_session", "paywall_no_candidate_profile", "paywall_no_recurring_subscription", "paywall_offer_not_found", "talent_access_unavailable", "company_required", "already_on_plan", "talent_access_required", "messaging_talent_access_required", "stripe_not_connected", "job_posting_logo_lookup_unavailable", "job_posting_logo_not_found", "job_posting_rejected"];
24
24
  /**
25
25
  * The known code set plus open string — new codes ship additively within v1,
26
26
  * so exhaustive narrowing is intentionally impossible.
@@ -143,7 +143,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
143
143
  * constant because the package is platform-neutral and cannot read
144
144
  * package.json at runtime.
145
145
  */
146
- declare const SDK_VERSION = "4.15.0";
146
+ declare const SDK_VERSION = "4.18.0";
147
147
 
148
148
  type SavedJob = Schemas['SavedJob'];
149
149
  type SavedJobsListQuery = {
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- import { S as Schemas, c as components } from './_spec-DdWB8z1Z.js';
2
- import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-CZOec95V.js';
3
- export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-CZOec95V.js';
4
- import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-Bpnqn4Rg.js';
5
- export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-Bpnqn4Rg.js';
6
- export { B as BoardSeo } from './seo-C1hFa0-v.js';
7
- import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-CExc4QdI.js';
8
- export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-CExc4QdI.js';
9
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-B7xorPBw.js';
10
- export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-B7xorPBw.js';
1
+ import { S as Schemas, c as components } from './_spec-Dk0TIRUc.js';
2
+ import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-CcstbHOe.js';
3
+ export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-CcstbHOe.js';
4
+ import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-CqeoQAa1.js';
5
+ export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-CqeoQAa1.js';
6
+ export { B as BoardSeo } from './seo-CWO6N-iE.js';
7
+ import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-Dvv0vX8p.js';
8
+ export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-Dvv0vX8p.js';
9
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-1THfucKR.js';
10
+ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-1THfucKR.js';
11
11
 
12
12
  /**
13
13
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -20,7 +20,7 @@ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts,
20
20
  * `unknown_error` is SDK-synthesized when a response carries no parseable
21
21
  * envelope.
22
22
  */
23
- declare const BOARD_API_ERROR_CODES: readonly ["internal_error", "validation_bad_request", "validation_payload_too_large", "rate_limited", "rate_limit_unavailable", "search_unavailable", "too_many_filter_values", "pagination_invalid_cursor", "pagination_offset_too_large", "auth_unauthenticated", "auth_forbidden", "plan_upgrade_required", "unknown_error", "boards_not_found", "board_page_not_found", "board_auth_email_taken", "board_auth_invalid_credentials", "board_auth_invalid_token", "board_auth_registration_disabled", "board_auth_token_expired", "invalid_current_password", "no_password", "same_email", "email_taken", "invalid_token", "board_password_required", "board_password_invalid", "jobs_not_found", "jobs_invalid_filter", "categories_not_found", "skills_not_found", "places_not_found", "companies_not_found", "company_markets_not_found", "company_salary_not_found", "company_category_salary_not_found", "salaries_title_not_found", "salaries_skill_not_found", "salaries_location_not_found", "salaries_title_location_not_found", "salaries_skill_location_not_found", "blog_post_not_found", "blog_author_not_found", "blog_tag_not_found", "talent_not_found", "talent_directory_not_found", "talent_directory_restricted", "job_recommendations_not_found", "recommended_talent_not_found", "job_alert_not_found", "job_alerts_disabled", "candidate_alert_limit_reached", "candidate_alert_not_found", "candidate_entry_not_found", "candidate_handle_taken", "candidate_job_not_found", "candidate_notification_preference_paused", "resume_invalid_file", "resume_upload_forbidden", "applications_external_apply_only", "applications_country_not_allowed", "applications_guest_not_allowed", "applications_job_not_found", "applications_not_found", "applications_resume_invalid_file", "applications_unprocessable", "messaging_application_not_found", "messaging_application_not_linked", "messaging_blocked", "messaging_cannot_block_self", "messaging_cold_rule", "messaging_conversation_not_found", "messaging_disabled", "messaging_edit_window_expired", "messaging_message_deleted", "messaging_message_not_found", "messaging_not_author", "messaging_not_participant", "messaging_not_permitted", "messaging_not_recipient", "messaging_rate_limited", "messaging_recipient_not_found", "messaging_recipient_not_open", "messaging_unsend_window_expired", "employer_applicant_not_found", "employer_ats_unprocessable", "employer_checkout_failed", "employer_company_exists", "employer_company_name_taken", "employer_company_not_found", "employer_job_not_found", "employer_job_slug_taken", "employer_jobs_quota_exceeded", "employer_not_member", "employer_payment_required", "employer_pipeline_stage_not_found", "employer_member_not_found", "employer_invite_not_found", "not_company_admin", "not_company_member", "company_deletion_disabled", "last_admin", "already_member", "already_invited", "invalid_email", "invite_email_mismatch", "candidate_role", "job_not_published", "talent_list_not_found", "sourced_candidate_not_found", "sourced_convert_unavailable", "paywall_already_active", "paywall_disabled", "paywall_invalid_checkout_session", "paywall_no_candidate_profile", "paywall_no_recurring_subscription", "paywall_offer_not_found", "talent_access_unavailable", "company_required", "already_on_plan", "talent_access_required", "messaging_talent_access_required", "stripe_not_connected", "job_posting_logo_lookup_unavailable", "job_posting_logo_not_found", "job_posting_rejected"];
23
+ declare const BOARD_API_ERROR_CODES: readonly ["internal_error", "validation_bad_request", "validation_payload_too_large", "rate_limited", "rate_limit_unavailable", "search_unavailable", "too_many_filter_values", "pagination_invalid_cursor", "pagination_offset_too_large", "auth_unauthenticated", "auth_forbidden", "plan_upgrade_required", "unknown_error", "boards_not_found", "board_page_not_found", "board_auth_account_not_found", "board_auth_email_taken", "board_auth_invalid_credentials", "board_auth_invalid_token", "board_auth_registration_disabled", "board_auth_token_expired", "invalid_current_password", "no_password", "same_email", "email_taken", "invalid_token", "board_password_required", "board_password_invalid", "jobs_not_found", "jobs_invalid_filter", "categories_not_found", "skills_not_found", "places_not_found", "companies_not_found", "company_markets_not_found", "company_salary_not_found", "company_category_salary_not_found", "salaries_title_not_found", "salaries_skill_not_found", "salaries_location_not_found", "salaries_title_location_not_found", "salaries_skill_location_not_found", "blog_post_not_found", "blog_author_not_found", "blog_tag_not_found", "talent_not_found", "talent_directory_not_found", "talent_directory_restricted", "job_recommendations_not_found", "recommended_talent_not_found", "job_alert_not_found", "job_alerts_disabled", "candidate_alert_limit_reached", "candidate_alert_not_found", "candidate_entry_not_found", "candidate_handle_taken", "candidate_job_not_found", "candidate_notification_preference_paused", "resume_invalid_file", "resume_upload_forbidden", "applications_external_apply_only", "applications_country_not_allowed", "applications_guest_not_allowed", "applications_job_not_found", "applications_not_found", "applications_resume_invalid_file", "applications_unprocessable", "messaging_application_not_found", "messaging_application_not_linked", "messaging_blocked", "messaging_cannot_block_self", "messaging_cold_rule", "messaging_conversation_not_found", "messaging_disabled", "messaging_edit_window_expired", "messaging_message_deleted", "messaging_message_not_found", "messaging_not_author", "messaging_not_participant", "messaging_not_permitted", "messaging_not_recipient", "messaging_rate_limited", "messaging_recipient_not_found", "messaging_recipient_not_open", "messaging_unsend_window_expired", "employer_applicant_not_found", "employer_ats_unprocessable", "employer_checkout_failed", "employer_company_exists", "employer_company_name_taken", "employer_company_not_found", "employer_job_not_found", "employer_job_slug_taken", "employer_jobs_quota_exceeded", "employer_not_member", "employer_payment_required", "employer_pipeline_stage_not_found", "employer_member_not_found", "employer_invite_not_found", "not_company_admin", "not_company_member", "company_deletion_disabled", "last_admin", "already_member", "already_invited", "invalid_email", "invite_email_mismatch", "candidate_role", "job_not_published", "talent_list_not_found", "sourced_candidate_not_found", "sourced_convert_unavailable", "paywall_already_active", "paywall_disabled", "paywall_invalid_checkout_session", "paywall_no_candidate_profile", "paywall_no_recurring_subscription", "paywall_offer_not_found", "talent_access_unavailable", "company_required", "already_on_plan", "talent_access_required", "messaging_talent_access_required", "stripe_not_connected", "job_posting_logo_lookup_unavailable", "job_posting_logo_not_found", "job_posting_rejected"];
24
24
  /**
25
25
  * The known code set plus open string — new codes ship additively within v1,
26
26
  * so exhaustive narrowing is intentionally impossible.
@@ -143,7 +143,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
143
143
  * constant because the package is platform-neutral and cannot read
144
144
  * package.json at runtime.
145
145
  */
146
- declare const SDK_VERSION = "4.15.0";
146
+ declare const SDK_VERSION = "4.18.0";
147
147
 
148
148
  type SavedJob = Schemas['SavedJob'];
149
149
  type SavedJobsListQuery = {
package/dist/index.js CHANGED
@@ -66,6 +66,7 @@ var BOARD_API_ERROR_CODES = [
66
66
  "boards_not_found",
67
67
  "board_page_not_found",
68
68
  // Board-user auth
69
+ "board_auth_account_not_found",
69
70
  "board_auth_email_taken",
70
71
  "board_auth_invalid_credentials",
71
72
  "board_auth_invalid_token",
@@ -347,7 +348,7 @@ async function clearSession(storage) {
347
348
  }
348
349
 
349
350
  // src/version.ts
350
- var SDK_VERSION = "4.15.0";
351
+ var SDK_VERSION = "4.18.0";
351
352
 
352
353
  // src/client.ts
353
354
  function isRawBody(body) {
@@ -638,12 +639,15 @@ function authNamespace(client) {
638
639
  /**
639
640
  * Request a passwordless magic link. The API always resolves 204
640
641
  * when the request is accepted; the email link lands on the
641
- * board/starter `/auth/magic-link` route.
642
+ * board/starter `/auth/magic-link` route. Pass `intent: 'sign_in'`
643
+ * from a sign-in form so an unknown email is 404 instead of a
644
+ * silent sign-up.
642
645
  *
643
646
  * @example
644
647
  * await board.auth.requestMagicLink({
645
648
  * email: 'a@b.com',
646
649
  * returnTo: '/account',
650
+ * intent: 'sign_in',
647
651
  * });
648
652
  */
649
653
  requestMagicLink(body, options) {
package/dist/index.mjs CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  isValidationError,
16
16
  resolveStorage,
17
17
  writeSession
18
- } from "./chunk-W73BOGOQ.mjs";
18
+ } from "./chunk-2WBQVVOB.mjs";
19
19
  import {
20
20
  paginate
21
21
  } from "./chunk-DLSO6XXY.mjs";
@@ -39,7 +39,7 @@ function toSearchParams(query) {
39
39
  }
40
40
 
41
41
  // src/version.ts
42
- var SDK_VERSION = "4.15.0";
42
+ var SDK_VERSION = "4.18.0";
43
43
 
44
44
  // src/client.ts
45
45
  function isRawBody(body) {
@@ -330,12 +330,15 @@ function authNamespace(client) {
330
330
  /**
331
331
  * Request a passwordless magic link. The API always resolves 204
332
332
  * when the request is accepted; the email link lands on the
333
- * board/starter `/auth/magic-link` route.
333
+ * board/starter `/auth/magic-link` route. Pass `intent: 'sign_in'`
334
+ * from a sign-in form so an unknown email is 404 instead of a
335
+ * silent sign-up.
334
336
  *
335
337
  * @example
336
338
  * await board.auth.requestMagicLink({
337
339
  * email: 'a@b.com',
338
340
  * returnTo: '/account',
341
+ * intent: 'sign_in',
339
342
  * });
340
343
  */
341
344
  requestMagicLink(body, options) {
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DdWB8z1Z.mjs';
1
+ import { S as Schemas } from './_spec-Dk0TIRUc.mjs';
2
2
 
3
3
  /**
4
4
  * Optional pagination metadata returned by Board API list operations.
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DdWB8z1Z.js';
1
+ import { S as Schemas } from './_spec-Dk0TIRUc.js';
2
2
 
3
3
  /**
4
4
  * Optional pagination metadata returned by Board API list operations.
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DdWB8z1Z.mjs';
1
+ import { S as Schemas } from './_spec-Dk0TIRUc.mjs';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DdWB8z1Z.js';
1
+ import { S as Schemas } from './_spec-Dk0TIRUc.js';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DdWB8z1Z.js';
1
+ import { S as Schemas } from './_spec-Dk0TIRUc.js';
2
2
 
3
3
  /**
4
4
  * The public SEO-infra payload (`board.seo()`) — platform infrastructure a
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DdWB8z1Z.mjs';
1
+ import { S as Schemas } from './_spec-Dk0TIRUc.mjs';
2
2
 
3
3
  /**
4
4
  * The public SEO-infra payload (`board.seo()`) — platform infrastructure a
@@ -1,5 +1,5 @@
1
- import { B as BoardSeo } from './seo-CJSwd_ss.mjs';
2
- import './_spec-DdWB8z1Z.mjs';
1
+ import { B as BoardSeo } from './seo-Ds6tLMqU.mjs';
2
+ import './_spec-Dk0TIRUc.mjs';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/seo-files` — platform-owned crawler/identity file bodies
@@ -1,5 +1,5 @@
1
- import { B as BoardSeo } from './seo-C1hFa0-v.js';
2
- import './_spec-DdWB8z1Z.js';
1
+ import { B as BoardSeo } from './seo-CWO6N-iE.js';
2
+ import './_spec-Dk0TIRUc.js';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/seo-files` — platform-owned crawler/identity file bodies
package/dist/seo.d.mts CHANGED
@@ -1,9 +1,9 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-DopIQsKV.mjs';
2
- import { e as JsonLdObject } from './breadcrumbs-CAppxMoS.mjs';
3
- export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-CAppxMoS.mjs';
4
- import './_spec-DdWB8z1Z.mjs';
5
- import './board-CkgTW4cC.mjs';
6
- import './jobs-Dq0TTcRf.mjs';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-C04NWTh_.mjs';
2
+ import { e as JsonLdObject } from './breadcrumbs-mE9Zsxlq.mjs';
3
+ export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-mE9Zsxlq.mjs';
4
+ import './_spec-Dk0TIRUc.mjs';
5
+ import './board-DIO9aFXx.mjs';
6
+ import './jobs-CVmAWGtJ.mjs';
7
7
 
8
8
  /**
9
9
  * Blog structured data on the `@cavuno/board` wire types, transcribed from
package/dist/seo.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-B7xorPBw.js';
2
- import { e as JsonLdObject } from './breadcrumbs-DelEqbSz.js';
3
- export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-DelEqbSz.js';
4
- import './_spec-DdWB8z1Z.js';
5
- import './board-Bpnqn4Rg.js';
6
- import './jobs-CExc4QdI.js';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-1THfucKR.js';
2
+ import { e as JsonLdObject } from './breadcrumbs-CCT1oC2-.js';
3
+ export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-CCT1oC2-.js';
4
+ import './_spec-Dk0TIRUc.js';
5
+ import './board-CqeoQAa1.js';
6
+ import './jobs-Dvv0vX8p.js';
7
7
 
8
8
  /**
9
9
  * Blog structured data on the `@cavuno/board` wire types, transcribed from
package/dist/server.d.mts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './_spec-DdWB8z1Z.mjs';
3
- import './search-D6hau3d4.mjs';
4
- import './board-CkgTW4cC.mjs';
5
- import './jobs-Dq0TTcRf.mjs';
6
- import './seo-CJSwd_ss.mjs';
7
- import './blog-DopIQsKV.mjs';
2
+ import './_spec-Dk0TIRUc.mjs';
3
+ import './search-BJ5myYaf.mjs';
4
+ import './board-DIO9aFXx.mjs';
5
+ import './jobs-CVmAWGtJ.mjs';
6
+ import './seo-Ds6tLMqU.mjs';
7
+ import './blog-C04NWTh_.mjs';
8
8
 
9
9
  /**
10
10
  * Session cookie codec — pure (no framework imports, no node imports) so it
package/dist/server.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './_spec-DdWB8z1Z.js';
3
- import './search-CZOec95V.js';
4
- import './board-Bpnqn4Rg.js';
5
- import './jobs-CExc4QdI.js';
6
- import './seo-C1hFa0-v.js';
7
- import './blog-B7xorPBw.js';
2
+ import './_spec-Dk0TIRUc.js';
3
+ import './search-CcstbHOe.js';
4
+ import './board-CqeoQAa1.js';
5
+ import './jobs-Dvv0vX8p.js';
6
+ import './seo-CWO6N-iE.js';
7
+ import './blog-1THfucKR.js';
8
8
 
9
9
  /**
10
10
  * Session cookie codec — pure (no framework imports, no node imports) so it
package/dist/server.mjs CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  isNoStore,
3
3
  isUnauthorized,
4
4
  scopeToken
5
- } from "./chunk-W73BOGOQ.mjs";
5
+ } from "./chunk-2WBQVVOB.mjs";
6
6
 
7
7
  // src/server/cookie.ts
8
8
  var COOKIE_ATTRIBUTES = "Path=/; HttpOnly; Secure; SameSite=Lax";
@@ -1,10 +1,10 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './_spec-DdWB8z1Z.mjs';
3
- import './search-D6hau3d4.mjs';
4
- import './board-CkgTW4cC.mjs';
5
- import './jobs-Dq0TTcRf.mjs';
6
- import './seo-CJSwd_ss.mjs';
7
- import './blog-DopIQsKV.mjs';
2
+ import './_spec-Dk0TIRUc.mjs';
3
+ import './search-BJ5myYaf.mjs';
4
+ import './board-DIO9aFXx.mjs';
5
+ import './jobs-CVmAWGtJ.mjs';
6
+ import './seo-Ds6tLMqU.mjs';
7
+ import './blog-C04NWTh_.mjs';
8
8
 
9
9
  /**
10
10
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
package/dist/sitemap.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './_spec-DdWB8z1Z.js';
3
- import './search-CZOec95V.js';
4
- import './board-Bpnqn4Rg.js';
5
- import './jobs-CExc4QdI.js';
6
- import './seo-C1hFa0-v.js';
7
- import './blog-B7xorPBw.js';
2
+ import './_spec-Dk0TIRUc.js';
3
+ import './search-CcstbHOe.js';
4
+ import './board-CqeoQAa1.js';
5
+ import './jobs-Dvv0vX8p.js';
6
+ import './seo-CWO6N-iE.js';
7
+ import './blog-1THfucKR.js';
8
8
 
9
9
  /**
10
10
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
@@ -1,5 +1,5 @@
1
- import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-D6hau3d4.mjs';
2
- import './_spec-DdWB8z1Z.mjs';
1
+ import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-BJ5myYaf.mjs';
2
+ import './_spec-Dk0TIRUc.mjs';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/suggest` — framework-agnostic headless search-suggest