@cavuno/board 4.35.0 → 4.36.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 (41) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{_spec-DBpKC6Rv.d.mts → _spec-C4T68Nnr.d.mts} +3 -1
  3. package/dist/{_spec-DBpKC6Rv.d.ts → _spec-C4T68Nnr.d.ts} +3 -1
  4. package/dist/bin.mjs +32 -22
  5. package/dist/{blog-Bk6oHqIR.d.ts → blog-_LtV-JaY.d.ts} +1 -1
  6. package/dist/{blog-DXCzYj2q.d.mts → blog-bQmqKnw2.d.mts} +1 -1
  7. package/dist/{board-BpOyLLl_.d.ts → board-2UfZ7fZk.d.ts} +2 -2
  8. package/dist/{board-D6yRj3IN.d.mts → board-CRgQjnrn.d.mts} +2 -2
  9. package/dist/{breadcrumbs-B5qrRrgN.d.ts → breadcrumbs-C_jNh4xd.d.ts} +2 -2
  10. package/dist/{breadcrumbs-BnYHHx40.d.mts → breadcrumbs-f7KFSWnx.d.mts} +2 -2
  11. package/dist/browser/cavuno-board.global.min.js +1 -1
  12. package/dist/doctor.d.mts +41 -1
  13. package/dist/doctor.d.ts +41 -1
  14. package/dist/doctor.js +59 -22
  15. package/dist/doctor.mjs +58 -22
  16. package/dist/filters.d.mts +2 -2
  17. package/dist/filters.d.ts +2 -2
  18. package/dist/format.d.mts +4 -4
  19. package/dist/format.d.ts +4 -4
  20. package/dist/index.d.mts +15 -12
  21. package/dist/index.d.ts +15 -12
  22. package/dist/index.js +4 -2
  23. package/dist/index.mjs +4 -2
  24. package/dist/{jobs-DX_wDSzt.d.ts → jobs-3Md7CCMl.d.ts} +1 -1
  25. package/dist/{jobs-Cgh8dwXB.d.mts → jobs-Cg2d2oI4.d.mts} +1 -1
  26. package/dist/{search-DOmwaBud.d.ts → search-15gcqPyt.d.ts} +1 -1
  27. package/dist/{search-DsR5-O8E.d.mts → search-CyDzceiR.d.mts} +1 -1
  28. package/dist/{seo-DtLE8C9q.d.ts → seo-CON8CLIF.d.ts} +1 -1
  29. package/dist/{seo-DbzhNmAY.d.mts → seo-DuWLAh1M.d.mts} +1 -1
  30. package/dist/seo-files.d.mts +2 -2
  31. package/dist/seo-files.d.ts +2 -2
  32. package/dist/seo.d.mts +6 -6
  33. package/dist/seo.d.ts +6 -6
  34. package/dist/server.d.mts +6 -6
  35. package/dist/server.d.ts +6 -6
  36. package/dist/sitemap.d.mts +6 -6
  37. package/dist/sitemap.d.ts +6 -6
  38. package/dist/suggest.d.mts +2 -2
  39. package/dist/suggest.d.ts +2 -2
  40. package/package.json +1 -1
  41. package/skills/manifest.json +1 -1
package/dist/doctor.d.mts CHANGED
@@ -45,4 +45,44 @@ interface DoctorRun {
45
45
  }
46
46
  declare function runDoctor(options: RunDoctorOptions): Promise<DoctorRun>;
47
47
 
48
- export { type CheckResult, type CheckStatus, type DoctorEnv, type DoctorRun, type DoctorSummary, type RunDoctorOptions, runDoctor };
48
+ /**
49
+ *cookie-codec conformance.
50
+ *
51
+ * Starter / consumer code must not domain-scope cookies on the shared
52
+ * origin. The SDK server cookie codec (`buildCookie` / `buildClearCookie`
53
+ * / `serializeSessionCookie` from `@cavuno/board/server`) mints host-only
54
+ * `__Host-` values; attaching those via `Set-Cookie` is the sanctioned
55
+ * path and is GREEN. Domain-scoped writes (raw `Set-Cookie` with
56
+ * `Domain=`, or `document.cookie = … Domain=`) are RED.
57
+ *
58
+ * Caveat: the doctor is accountability tooling,
59
+ * not a security boundary. Tenants remain identifiable paying customers
60
+ * with an audit trail; this check does not prevent determined abuse.
61
+ *
62
+ * Scope: application-authored source only. Generated output under `src/` is
63
+ * skipped (see GENERATED_DIRS / GENERATED_FILE / hasGeneratedBanner) —
64
+ * a tenant cannot fix a finding in a file their build regenerates, so
65
+ * flagging one is pure noise. The motivating case is Paraglide JS: its
66
+ * compiler writes `src/paraglide/**` (gitignored in the starter) and
67
+ * `runtime.js` contains a `document.cookie = … cookieDomain` write for
68
+ * Paraglide's own LOCALE cookie strategy — dead behind a
69
+ * `TREE_SHAKE_COOKIE_STRATEGY_USED` guard on a board compiled without
70
+ * the cookie strategy, and unfixable by the consumer either way.
71
+ *
72
+ * Why not `.gitignore`? It is the most correct signal, but parsing it
73
+ * faithfully (nested files, negations, precedence, dir-vs-path anchors)
74
+ * needs a dependency the SDK will not take, and shelling out to
75
+ * `git check-ignore` assumes both a git binary and a git working tree —
76
+ * neither holds for platform-built tenant projects. The pattern list
77
+ * plus the banner heuristic covers the generators this supported projects actually
78
+ * runs without either assumption.
79
+ */
80
+
81
+ type CookieSourceFile = {
82
+ path: string;
83
+ contents: string | Uint8Array;
84
+ };
85
+ /** Scan an immutable source snapshot with the same rules as Doctor's file scan. */
86
+ declare function checkCookieCodecConformanceFiles(files: readonly CookieSourceFile[]): CheckResult[];
87
+
88
+ export { type CheckResult, type CheckStatus, type DoctorEnv, type DoctorRun, type DoctorSummary, type RunDoctorOptions, checkCookieCodecConformanceFiles, runDoctor };
package/dist/doctor.d.ts CHANGED
@@ -45,4 +45,44 @@ interface DoctorRun {
45
45
  }
46
46
  declare function runDoctor(options: RunDoctorOptions): Promise<DoctorRun>;
47
47
 
48
- export { type CheckResult, type CheckStatus, type DoctorEnv, type DoctorRun, type DoctorSummary, type RunDoctorOptions, runDoctor };
48
+ /**
49
+ *cookie-codec conformance.
50
+ *
51
+ * Starter / consumer code must not domain-scope cookies on the shared
52
+ * origin. The SDK server cookie codec (`buildCookie` / `buildClearCookie`
53
+ * / `serializeSessionCookie` from `@cavuno/board/server`) mints host-only
54
+ * `__Host-` values; attaching those via `Set-Cookie` is the sanctioned
55
+ * path and is GREEN. Domain-scoped writes (raw `Set-Cookie` with
56
+ * `Domain=`, or `document.cookie = … Domain=`) are RED.
57
+ *
58
+ * Caveat: the doctor is accountability tooling,
59
+ * not a security boundary. Tenants remain identifiable paying customers
60
+ * with an audit trail; this check does not prevent determined abuse.
61
+ *
62
+ * Scope: application-authored source only. Generated output under `src/` is
63
+ * skipped (see GENERATED_DIRS / GENERATED_FILE / hasGeneratedBanner) —
64
+ * a tenant cannot fix a finding in a file their build regenerates, so
65
+ * flagging one is pure noise. The motivating case is Paraglide JS: its
66
+ * compiler writes `src/paraglide/**` (gitignored in the starter) and
67
+ * `runtime.js` contains a `document.cookie = … cookieDomain` write for
68
+ * Paraglide's own LOCALE cookie strategy — dead behind a
69
+ * `TREE_SHAKE_COOKIE_STRATEGY_USED` guard on a board compiled without
70
+ * the cookie strategy, and unfixable by the consumer either way.
71
+ *
72
+ * Why not `.gitignore`? It is the most correct signal, but parsing it
73
+ * faithfully (nested files, negations, precedence, dir-vs-path anchors)
74
+ * needs a dependency the SDK will not take, and shelling out to
75
+ * `git check-ignore` assumes both a git binary and a git working tree —
76
+ * neither holds for platform-built tenant projects. The pattern list
77
+ * plus the banner heuristic covers the generators this supported projects actually
78
+ * runs without either assumption.
79
+ */
80
+
81
+ type CookieSourceFile = {
82
+ path: string;
83
+ contents: string | Uint8Array;
84
+ };
85
+ /** Scan an immutable source snapshot with the same rules as Doctor's file scan. */
86
+ declare function checkCookieCodecConformanceFiles(files: readonly CookieSourceFile[]): CheckResult[];
87
+
88
+ export { type CheckResult, type CheckStatus, type DoctorEnv, type DoctorRun, type DoctorSummary, type RunDoctorOptions, checkCookieCodecConformanceFiles, runDoctor };
package/dist/doctor.js CHANGED
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/doctor/index.ts
21
21
  var doctor_exports = {};
22
22
  __export(doctor_exports, {
23
+ checkCookieCodecConformanceFiles: () => checkCookieCodecConformanceFiles,
23
24
  runDoctor: () => runDoctor
24
25
  });
25
26
  module.exports = __toCommonJS(doctor_exports);
@@ -351,9 +352,16 @@ function truncate(line, max = 120) {
351
352
  const t = line.trim();
352
353
  return t.length > max ? `${t.slice(0, max)}\u2026` : t;
353
354
  }
354
- function checkCookieCodecConformance(projectRoot) {
355
- const srcDir = (0, import_node_path3.join)(projectRoot, "src");
356
- if (!(0, import_node_fs3.existsSync)(srcDir)) {
355
+ function isAppSourcePath(path) {
356
+ if (!path.startsWith("src/")) return false;
357
+ const parts = path.split("/");
358
+ const name = parts.at(-1);
359
+ return parts.slice(1, -1).every(
360
+ (part) => !part.startsWith(".") && part !== "node_modules" && !GENERATED_DIRS.has(part)
361
+ ) && !name.startsWith(".") && SOURCE_EXT2.test(name) && !GENERATED_FILE.test(name);
362
+ }
363
+ function checkCookieSourceText(files, hasSource, unreadable) {
364
+ if (!hasSource) {
357
365
  return [
358
366
  COOKIE(
359
367
  "skip",
@@ -361,33 +369,61 @@ function checkCookieCodecConformance(projectRoot) {
361
369
  )
362
370
  ];
363
371
  }
364
- const files = [];
365
- walkSourceFiles(srcDir, files);
366
372
  const findings = [];
367
- for (const file of files) {
368
- const rel = (0, import_node_path3.relative)(projectRoot, file).split("\\").join("/");
369
- let text;
370
- try {
371
- text = (0, import_node_fs3.readFileSync)(file, "utf8");
372
- } catch {
373
- continue;
374
- }
373
+ for (const { path, text } of files) {
375
374
  if (hasGeneratedBanner(text)) continue;
376
375
  const lines = text.split(/\r?\n/);
377
376
  for (let i = 0; i < lines.length; i += 1) {
378
377
  if (!isOffendingSink(lines, i)) continue;
379
- findings.push(`${rel}:${i + 1} \u2014 ${truncate(lines[i])}`);
378
+ findings.push(`${path}:${i + 1} \u2014 ${truncate(lines[i])}`);
380
379
  }
381
380
  }
382
- if (findings.length === 0) {
383
- return [
384
- COOKIE(
385
- "pass",
386
- "no domain-scoped Set-Cookie or document.cookie writes in app-authored src/ (generated output skipped)"
387
- )
388
- ];
381
+ if (findings.length > 0) {
382
+ return [COOKIE("fail", `${findings.join("; ")}; ${REMEDIATION}`)];
383
+ }
384
+ if (unreadable) {
385
+ return [COOKIE("skip", "one or more source files could not be read")];
386
+ }
387
+ return [
388
+ COOKIE(
389
+ "pass",
390
+ "no domain-scoped Set-Cookie or document.cookie writes in app-authored src/ (generated output skipped)"
391
+ )
392
+ ];
393
+ }
394
+ function checkCookieCodecConformanceFiles(files) {
395
+ const hasSource = files.some((file) => file.path.startsWith("src/"));
396
+ const textFiles = [];
397
+ let unreadable = false;
398
+ for (const file of files) {
399
+ if (!isAppSourcePath(file.path)) continue;
400
+ try {
401
+ textFiles.push({
402
+ path: file.path,
403
+ text: typeof file.contents === "string" ? file.contents : new TextDecoder("utf-8", { fatal: true }).decode(file.contents)
404
+ });
405
+ } catch {
406
+ unreadable = true;
407
+ }
408
+ }
409
+ return checkCookieSourceText(textFiles, hasSource, unreadable);
410
+ }
411
+ function checkCookieCodecConformance(projectRoot) {
412
+ const srcDir = (0, import_node_path3.join)(projectRoot, "src");
413
+ if (!(0, import_node_fs3.existsSync)(srcDir)) return checkCookieSourceText([], false, false);
414
+ const files = [];
415
+ walkSourceFiles(srcDir, files);
416
+ const textFiles = [];
417
+ let unreadable = false;
418
+ for (const file of files) {
419
+ const rel = (0, import_node_path3.relative)(projectRoot, file).split("\\").join("/");
420
+ try {
421
+ textFiles.push({ path: rel, text: (0, import_node_fs3.readFileSync)(file, "utf8") });
422
+ } catch {
423
+ unreadable = true;
424
+ }
389
425
  }
390
- return [COOKIE("fail", `${findings.join("; ")}; ${REMEDIATION}`)];
426
+ return checkCookieSourceText(textFiles, true, unreadable);
391
427
  }
392
428
 
393
429
  // src/doctor/probe.ts
@@ -8841,5 +8877,6 @@ async function runDoctor(options) {
8841
8877
  }
8842
8878
  // Annotate the CommonJS export names for ESM import in node:
8843
8879
  0 && (module.exports = {
8880
+ checkCookieCodecConformanceFiles,
8844
8881
  runDoctor
8845
8882
  });
package/dist/doctor.mjs CHANGED
@@ -321,9 +321,16 @@ function truncate(line, max = 120) {
321
321
  const t = line.trim();
322
322
  return t.length > max ? `${t.slice(0, max)}\u2026` : t;
323
323
  }
324
- function checkCookieCodecConformance(projectRoot) {
325
- const srcDir = join2(projectRoot, "src");
326
- if (!existsSync2(srcDir)) {
324
+ function isAppSourcePath(path) {
325
+ if (!path.startsWith("src/")) return false;
326
+ const parts = path.split("/");
327
+ const name = parts.at(-1);
328
+ return parts.slice(1, -1).every(
329
+ (part) => !part.startsWith(".") && part !== "node_modules" && !GENERATED_DIRS.has(part)
330
+ ) && !name.startsWith(".") && SOURCE_EXT2.test(name) && !GENERATED_FILE.test(name);
331
+ }
332
+ function checkCookieSourceText(files, hasSource, unreadable) {
333
+ if (!hasSource) {
327
334
  return [
328
335
  COOKIE(
329
336
  "skip",
@@ -331,33 +338,61 @@ function checkCookieCodecConformance(projectRoot) {
331
338
  )
332
339
  ];
333
340
  }
334
- const files = [];
335
- walkSourceFiles(srcDir, files);
336
341
  const findings = [];
337
- for (const file of files) {
338
- const rel = relative2(projectRoot, file).split("\\").join("/");
339
- let text;
340
- try {
341
- text = readFileSync3(file, "utf8");
342
- } catch {
343
- continue;
344
- }
342
+ for (const { path, text } of files) {
345
343
  if (hasGeneratedBanner(text)) continue;
346
344
  const lines = text.split(/\r?\n/);
347
345
  for (let i = 0; i < lines.length; i += 1) {
348
346
  if (!isOffendingSink(lines, i)) continue;
349
- findings.push(`${rel}:${i + 1} \u2014 ${truncate(lines[i])}`);
347
+ findings.push(`${path}:${i + 1} \u2014 ${truncate(lines[i])}`);
350
348
  }
351
349
  }
352
- if (findings.length === 0) {
353
- return [
354
- COOKIE(
355
- "pass",
356
- "no domain-scoped Set-Cookie or document.cookie writes in app-authored src/ (generated output skipped)"
357
- )
358
- ];
350
+ if (findings.length > 0) {
351
+ return [COOKIE("fail", `${findings.join("; ")}; ${REMEDIATION}`)];
352
+ }
353
+ if (unreadable) {
354
+ return [COOKIE("skip", "one or more source files could not be read")];
355
+ }
356
+ return [
357
+ COOKIE(
358
+ "pass",
359
+ "no domain-scoped Set-Cookie or document.cookie writes in app-authored src/ (generated output skipped)"
360
+ )
361
+ ];
362
+ }
363
+ function checkCookieCodecConformanceFiles(files) {
364
+ const hasSource = files.some((file) => file.path.startsWith("src/"));
365
+ const textFiles = [];
366
+ let unreadable = false;
367
+ for (const file of files) {
368
+ if (!isAppSourcePath(file.path)) continue;
369
+ try {
370
+ textFiles.push({
371
+ path: file.path,
372
+ text: typeof file.contents === "string" ? file.contents : new TextDecoder("utf-8", { fatal: true }).decode(file.contents)
373
+ });
374
+ } catch {
375
+ unreadable = true;
376
+ }
377
+ }
378
+ return checkCookieSourceText(textFiles, hasSource, unreadable);
379
+ }
380
+ function checkCookieCodecConformance(projectRoot) {
381
+ const srcDir = join2(projectRoot, "src");
382
+ if (!existsSync2(srcDir)) return checkCookieSourceText([], false, false);
383
+ const files = [];
384
+ walkSourceFiles(srcDir, files);
385
+ const textFiles = [];
386
+ let unreadable = false;
387
+ for (const file of files) {
388
+ const rel = relative2(projectRoot, file).split("\\").join("/");
389
+ try {
390
+ textFiles.push({ path: rel, text: readFileSync3(file, "utf8") });
391
+ } catch {
392
+ unreadable = true;
393
+ }
359
394
  }
360
- return [COOKIE("fail", `${findings.join("; ")}; ${REMEDIATION}`)];
395
+ return checkCookieSourceText(textFiles, true, unreadable);
361
396
  }
362
397
 
363
398
  // src/doctor/probe.ts
@@ -8810,5 +8845,6 @@ async function runDoctor(options) {
8810
8845
  return { results, summary: summarize(results) };
8811
8846
  }
8812
8847
  export {
8848
+ checkCookieCodecConformanceFiles,
8813
8849
  runDoctor
8814
8850
  };
@@ -1,5 +1,5 @@
1
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-Cgh8dwXB.mjs';
2
- import './_spec-DBpKC6Rv.mjs';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-Cg2d2oI4.mjs';
2
+ import './_spec-C4T68Nnr.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-DX_wDSzt.js';
2
- import './_spec-DBpKC6Rv.js';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-3Md7CCMl.js';
2
+ import './_spec-C4T68Nnr.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-BnYHHx40.mjs';
2
- import { C as CustomFieldDefinition } from './board-D6yRj3IN.mjs';
3
- import { C as CustomFieldValues } from './jobs-Cgh8dwXB.mjs';
4
- import './_spec-DBpKC6Rv.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-f7KFSWnx.mjs';
2
+ import { C as CustomFieldDefinition } from './board-CRgQjnrn.mjs';
3
+ import { C as CustomFieldValues } from './jobs-Cg2d2oI4.mjs';
4
+ import './_spec-C4T68Nnr.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-B5qrRrgN.js';
2
- import { C as CustomFieldDefinition } from './board-BpOyLLl_.js';
3
- import { C as CustomFieldValues } from './jobs-DX_wDSzt.js';
4
- import './_spec-DBpKC6Rv.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-C_jNh4xd.js';
2
+ import { C as CustomFieldDefinition } from './board-2UfZ7fZk.js';
3
+ import { C as CustomFieldValues } from './jobs-3Md7CCMl.js';
4
+ import './_spec-C4T68Nnr.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-DBpKC6Rv.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-DsR5-O8E.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-DsR5-O8E.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-D6yRj3IN.mjs';
5
- export { B as BoardCustomEmploymentType, j as BoardFormBuiltinField, k as BoardFormField, l as BoardFormLayout, m as BoardFormLockReason, n as BoardJobFormField, o as BoardProfileFormField, p as BoardRoleSignIn, q as BoardSignInSsoConnection, a as CompanyCategorySalary, r as CompanyMarket, s as CompanyMarketRef, b as CompanySalary, t as CompanySalarySummary, C as CustomFieldDefinition, u as CustomFieldOption, v as CustomFieldType, L as LocationSalaryDetail, w as LocationSkillsIndex, x as LocationTitlesIndex, P as PublicBoard, y as PublicBoardAds, z as PublicBoardAnalytics, A as PublicBoardFeatures, D as PublicBoardJobForm, E as PublicBoardSignIn, F as PublicCompany, G as PublicCompanyDetail, H as PublicCompanyMembership, I as SalaryCompany, J as SalaryLocation, K as SalarySkill, M as SalaryTitle, N as SkillLocationSalary, O as SkillLocationsIndex, S as SkillSalaryDetail, Q as TitleLocationSalary, R as TitleLocationsIndex, T as TitleSalaryDetail } from './board-D6yRj3IN.mjs';
6
- export { B as BoardSeo } from './seo-DbzhNmAY.mjs';
7
- import { R as RemoteOption, E as EmploymentType, S as Seniority, a as CustomFieldFilter, O as ObjectReferenceFilter, L as ListEnvelope, b as JobCollectionChoiceQuery, c as JobsListQuery, d as JobCardListEnvelope, e as JobsSearchBody, f as JobCardSearchEnvelope, g as JobsSimilarQuery, h as SearchEnvelope } from './jobs-Cgh8dwXB.mjs';
8
- export { i as CustomFieldValue, C as CustomFieldValues, j as CustomFilterValue, k as EducationRequirement, l as JobCatalogPagination, m as JobCollectionChoiceList, n as JobCollectionFieldDefinition, o as JobCompany, p as JobCustomEmploymentType, J as JobSort, q as OfficeLocation, r as OffsetPagination, P as PublicJob, s as PublicJobCard, t as RelatedSearch, u as RemotePermit, v as RemoteTimezone, w as ResolvedJobCollectionField, x as StorefrontPagination } from './jobs-Cgh8dwXB.mjs';
9
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-DXCzYj2q.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-DXCzYj2q.mjs';
1
+ import { S as Schemas, c as components } from './_spec-C4T68Nnr.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-CyDzceiR.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-CyDzceiR.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-CRgQjnrn.mjs';
5
+ export { B as BoardCustomEmploymentType, j as BoardFormBuiltinField, k as BoardFormField, l as BoardFormLayout, m as BoardFormLockReason, n as BoardJobFormField, o as BoardProfileFormField, p as BoardRoleSignIn, q as BoardSignInSsoConnection, a as CompanyCategorySalary, r as CompanyMarket, s as CompanyMarketRef, b as CompanySalary, t as CompanySalarySummary, C as CustomFieldDefinition, u as CustomFieldOption, v as CustomFieldType, L as LocationSalaryDetail, w as LocationSkillsIndex, x as LocationTitlesIndex, P as PublicBoard, y as PublicBoardAds, z as PublicBoardAnalytics, A as PublicBoardFeatures, D as PublicBoardJobForm, E as PublicBoardSignIn, F as PublicCompany, G as PublicCompanyDetail, H as PublicCompanyMembership, I as SalaryCompany, J as SalaryLocation, K as SalarySkill, M as SalaryTitle, N as SkillLocationSalary, O as SkillLocationsIndex, S as SkillSalaryDetail, Q as TitleLocationSalary, R as TitleLocationsIndex, T as TitleSalaryDetail } from './board-CRgQjnrn.mjs';
6
+ export { B as BoardSeo } from './seo-DuWLAh1M.mjs';
7
+ import { R as RemoteOption, E as EmploymentType, S as Seniority, a as CustomFieldFilter, O as ObjectReferenceFilter, L as ListEnvelope, b as JobCollectionChoiceQuery, c as JobsListQuery, d as JobCardListEnvelope, e as JobsSearchBody, f as JobCardSearchEnvelope, g as JobsSimilarQuery, h as SearchEnvelope } from './jobs-Cg2d2oI4.mjs';
8
+ export { i as CustomFieldValue, C as CustomFieldValues, j as CustomFilterValue, k as EducationRequirement, l as JobCatalogPagination, m as JobCollectionChoiceList, n as JobCollectionFieldDefinition, o as JobCompany, p as JobCustomEmploymentType, J as JobSort, q as OfficeLocation, r as OffsetPagination, P as PublicJob, s as PublicJobCard, t as RelatedSearch, u as RemotePermit, v as RemoteTimezone, w as ResolvedJobCollectionField, x as StorefrontPagination } from './jobs-Cg2d2oI4.mjs';
9
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-bQmqKnw2.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-bQmqKnw2.mjs';
11
11
 
12
12
  /**
13
13
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -202,7 +202,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
202
202
  * constant because the package is platform-neutral and cannot read
203
203
  * package.json at runtime.
204
204
  */
205
- declare const SDK_VERSION = "4.35.0";
205
+ declare const SDK_VERSION = "4.36.0";
206
206
 
207
207
  type SavedJob = Schemas['SavedJob'];
208
208
  type SavedJobsListQuery = {
@@ -1195,7 +1195,9 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1195
1195
  client: BoardClient;
1196
1196
  /**
1197
1197
  * Board context — identity, brand (`logoUrl` + favicon `icons`), language,
1198
- * features, analytics, and AdSense (`ads.enabled`, `ads.clientId`, and `ads.defaultSlotId`).
1198
+ * features, analytics, and AdSense (`ads.enabled`, `ads.clientId`, `ads.defaultSlotId`, and
1199
+ * `ads.googleConsentMessage`, which says whether EEA/UK/CH visitors get Google's consent
1200
+ * message instead of the board's cookie banner).
1199
1201
  * Per-placement slot ids are not on this resource.
1200
1202
  *
1201
1203
  * @example
@@ -1259,6 +1261,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1259
1261
  enabled: boolean;
1260
1262
  clientId: string | null;
1261
1263
  defaultSlotId: string | null;
1264
+ googleConsentMessage: boolean;
1262
1265
  };
1263
1266
  customFields: {
1264
1267
  job: components["schemas"]["CustomFieldDefinition"][];
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- import { S as Schemas, c as components } from './_spec-DBpKC6Rv.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-DOmwaBud.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-DOmwaBud.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-BpOyLLl_.js';
5
- export { B as BoardCustomEmploymentType, j as BoardFormBuiltinField, k as BoardFormField, l as BoardFormLayout, m as BoardFormLockReason, n as BoardJobFormField, o as BoardProfileFormField, p as BoardRoleSignIn, q as BoardSignInSsoConnection, a as CompanyCategorySalary, r as CompanyMarket, s as CompanyMarketRef, b as CompanySalary, t as CompanySalarySummary, C as CustomFieldDefinition, u as CustomFieldOption, v as CustomFieldType, L as LocationSalaryDetail, w as LocationSkillsIndex, x as LocationTitlesIndex, P as PublicBoard, y as PublicBoardAds, z as PublicBoardAnalytics, A as PublicBoardFeatures, D as PublicBoardJobForm, E as PublicBoardSignIn, F as PublicCompany, G as PublicCompanyDetail, H as PublicCompanyMembership, I as SalaryCompany, J as SalaryLocation, K as SalarySkill, M as SalaryTitle, N as SkillLocationSalary, O as SkillLocationsIndex, S as SkillSalaryDetail, Q as TitleLocationSalary, R as TitleLocationsIndex, T as TitleSalaryDetail } from './board-BpOyLLl_.js';
6
- export { B as BoardSeo } from './seo-DtLE8C9q.js';
7
- import { R as RemoteOption, E as EmploymentType, S as Seniority, a as CustomFieldFilter, O as ObjectReferenceFilter, L as ListEnvelope, b as JobCollectionChoiceQuery, c as JobsListQuery, d as JobCardListEnvelope, e as JobsSearchBody, f as JobCardSearchEnvelope, g as JobsSimilarQuery, h as SearchEnvelope } from './jobs-DX_wDSzt.js';
8
- export { i as CustomFieldValue, C as CustomFieldValues, j as CustomFilterValue, k as EducationRequirement, l as JobCatalogPagination, m as JobCollectionChoiceList, n as JobCollectionFieldDefinition, o as JobCompany, p as JobCustomEmploymentType, J as JobSort, q as OfficeLocation, r as OffsetPagination, P as PublicJob, s as PublicJobCard, t as RelatedSearch, u as RemotePermit, v as RemoteTimezone, w as ResolvedJobCollectionField, x as StorefrontPagination } from './jobs-DX_wDSzt.js';
9
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-Bk6oHqIR.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-Bk6oHqIR.js';
1
+ import { S as Schemas, c as components } from './_spec-C4T68Nnr.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-15gcqPyt.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-15gcqPyt.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-2UfZ7fZk.js';
5
+ export { B as BoardCustomEmploymentType, j as BoardFormBuiltinField, k as BoardFormField, l as BoardFormLayout, m as BoardFormLockReason, n as BoardJobFormField, o as BoardProfileFormField, p as BoardRoleSignIn, q as BoardSignInSsoConnection, a as CompanyCategorySalary, r as CompanyMarket, s as CompanyMarketRef, b as CompanySalary, t as CompanySalarySummary, C as CustomFieldDefinition, u as CustomFieldOption, v as CustomFieldType, L as LocationSalaryDetail, w as LocationSkillsIndex, x as LocationTitlesIndex, P as PublicBoard, y as PublicBoardAds, z as PublicBoardAnalytics, A as PublicBoardFeatures, D as PublicBoardJobForm, E as PublicBoardSignIn, F as PublicCompany, G as PublicCompanyDetail, H as PublicCompanyMembership, I as SalaryCompany, J as SalaryLocation, K as SalarySkill, M as SalaryTitle, N as SkillLocationSalary, O as SkillLocationsIndex, S as SkillSalaryDetail, Q as TitleLocationSalary, R as TitleLocationsIndex, T as TitleSalaryDetail } from './board-2UfZ7fZk.js';
6
+ export { B as BoardSeo } from './seo-CON8CLIF.js';
7
+ import { R as RemoteOption, E as EmploymentType, S as Seniority, a as CustomFieldFilter, O as ObjectReferenceFilter, L as ListEnvelope, b as JobCollectionChoiceQuery, c as JobsListQuery, d as JobCardListEnvelope, e as JobsSearchBody, f as JobCardSearchEnvelope, g as JobsSimilarQuery, h as SearchEnvelope } from './jobs-3Md7CCMl.js';
8
+ export { i as CustomFieldValue, C as CustomFieldValues, j as CustomFilterValue, k as EducationRequirement, l as JobCatalogPagination, m as JobCollectionChoiceList, n as JobCollectionFieldDefinition, o as JobCompany, p as JobCustomEmploymentType, J as JobSort, q as OfficeLocation, r as OffsetPagination, P as PublicJob, s as PublicJobCard, t as RelatedSearch, u as RemotePermit, v as RemoteTimezone, w as ResolvedJobCollectionField, x as StorefrontPagination } from './jobs-3Md7CCMl.js';
9
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-_LtV-JaY.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-_LtV-JaY.js';
11
11
 
12
12
  /**
13
13
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -202,7 +202,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
202
202
  * constant because the package is platform-neutral and cannot read
203
203
  * package.json at runtime.
204
204
  */
205
- declare const SDK_VERSION = "4.35.0";
205
+ declare const SDK_VERSION = "4.36.0";
206
206
 
207
207
  type SavedJob = Schemas['SavedJob'];
208
208
  type SavedJobsListQuery = {
@@ -1195,7 +1195,9 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1195
1195
  client: BoardClient;
1196
1196
  /**
1197
1197
  * Board context — identity, brand (`logoUrl` + favicon `icons`), language,
1198
- * features, analytics, and AdSense (`ads.enabled`, `ads.clientId`, and `ads.defaultSlotId`).
1198
+ * features, analytics, and AdSense (`ads.enabled`, `ads.clientId`, `ads.defaultSlotId`, and
1199
+ * `ads.googleConsentMessage`, which says whether EEA/UK/CH visitors get Google's consent
1200
+ * message instead of the board's cookie banner).
1199
1201
  * Per-placement slot ids are not on this resource.
1200
1202
  *
1201
1203
  * @example
@@ -1259,6 +1261,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1259
1261
  enabled: boolean;
1260
1262
  clientId: string | null;
1261
1263
  defaultSlotId: string | null;
1264
+ googleConsentMessage: boolean;
1262
1265
  };
1263
1266
  customFields: {
1264
1267
  job: components["schemas"]["CustomFieldDefinition"][];
package/dist/index.js CHANGED
@@ -403,7 +403,7 @@ async function clearSession(storage) {
403
403
  }
404
404
 
405
405
  // src/version.ts
406
- var SDK_VERSION = "4.35.0";
406
+ var SDK_VERSION = "4.36.0";
407
407
 
408
408
  // src/client.ts
409
409
  function isRawBody(body) {
@@ -3924,7 +3924,9 @@ function createBoardClient(options) {
3924
3924
  client,
3925
3925
  /**
3926
3926
  * Board context — identity, brand (`logoUrl` + favicon `icons`), language,
3927
- * features, analytics, and AdSense (`ads.enabled`, `ads.clientId`, and `ads.defaultSlotId`).
3927
+ * features, analytics, and AdSense (`ads.enabled`, `ads.clientId`, `ads.defaultSlotId`, and
3928
+ * `ads.googleConsentMessage`, which says whether EEA/UK/CH visitors get Google's consent
3929
+ * message instead of the board's cookie banner).
3928
3930
  * Per-placement slot ids are not on this resource.
3929
3931
  *
3930
3932
  * @example
package/dist/index.mjs CHANGED
@@ -46,7 +46,7 @@ function toSearchParams(query) {
46
46
  }
47
47
 
48
48
  // src/version.ts
49
- var SDK_VERSION = "4.35.0";
49
+ var SDK_VERSION = "4.36.0";
50
50
 
51
51
  // src/client.ts
52
52
  function isRawBody(body) {
@@ -3537,7 +3537,9 @@ function createBoardClient(options) {
3537
3537
  client,
3538
3538
  /**
3539
3539
  * Board context — identity, brand (`logoUrl` + favicon `icons`), language,
3540
- * features, analytics, and AdSense (`ads.enabled`, `ads.clientId`, and `ads.defaultSlotId`).
3540
+ * features, analytics, and AdSense (`ads.enabled`, `ads.clientId`, `ads.defaultSlotId`, and
3541
+ * `ads.googleConsentMessage`, which says whether EEA/UK/CH visitors get Google's consent
3542
+ * message instead of the board's cookie banner).
3541
3543
  * Per-placement slot ids are not on this resource.
3542
3544
  *
3543
3545
  * @example
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DBpKC6Rv.js';
1
+ import { S as Schemas } from './_spec-C4T68Nnr.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-DBpKC6Rv.mjs';
1
+ import { S as Schemas } from './_spec-C4T68Nnr.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-DBpKC6Rv.js';
1
+ import { S as Schemas } from './_spec-C4T68Nnr.js';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DBpKC6Rv.mjs';
1
+ import { S as Schemas } from './_spec-C4T68Nnr.mjs';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-DBpKC6Rv.js';
1
+ import { S as Schemas } from './_spec-C4T68Nnr.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-DBpKC6Rv.mjs';
1
+ import { S as Schemas } from './_spec-C4T68Nnr.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-DbzhNmAY.mjs';
2
- import './_spec-DBpKC6Rv.mjs';
1
+ import { B as BoardSeo } from './seo-DuWLAh1M.mjs';
2
+ import './_spec-C4T68Nnr.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-DtLE8C9q.js';
2
- import './_spec-DBpKC6Rv.js';
1
+ import { B as BoardSeo } from './seo-CON8CLIF.js';
2
+ import './_spec-C4T68Nnr.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-DXCzYj2q.mjs';
2
- import { e as JsonLdObject } from './breadcrumbs-BnYHHx40.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-BnYHHx40.mjs';
4
- import './_spec-DBpKC6Rv.mjs';
5
- import './board-D6yRj3IN.mjs';
6
- import './jobs-Cgh8dwXB.mjs';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-bQmqKnw2.mjs';
2
+ import { e as JsonLdObject } from './breadcrumbs-f7KFSWnx.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-f7KFSWnx.mjs';
4
+ import './_spec-C4T68Nnr.mjs';
5
+ import './board-CRgQjnrn.mjs';
6
+ import './jobs-Cg2d2oI4.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-Bk6oHqIR.js';
2
- import { e as JsonLdObject } from './breadcrumbs-B5qrRrgN.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-B5qrRrgN.js';
4
- import './_spec-DBpKC6Rv.js';
5
- import './board-BpOyLLl_.js';
6
- import './jobs-DX_wDSzt.js';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-_LtV-JaY.js';
2
+ import { e as JsonLdObject } from './breadcrumbs-C_jNh4xd.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-C_jNh4xd.js';
4
+ import './_spec-C4T68Nnr.js';
5
+ import './board-2UfZ7fZk.js';
6
+ import './jobs-3Md7CCMl.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-DBpKC6Rv.mjs';
3
- import './search-DsR5-O8E.mjs';
4
- import './board-D6yRj3IN.mjs';
5
- import './jobs-Cgh8dwXB.mjs';
6
- import './seo-DbzhNmAY.mjs';
7
- import './blog-DXCzYj2q.mjs';
2
+ import './_spec-C4T68Nnr.mjs';
3
+ import './search-CyDzceiR.mjs';
4
+ import './board-CRgQjnrn.mjs';
5
+ import './jobs-Cg2d2oI4.mjs';
6
+ import './seo-DuWLAh1M.mjs';
7
+ import './blog-bQmqKnw2.mjs';
8
8
 
9
9
  /**
10
10
  * Session cookie codec — pure (no framework imports, no node imports) so it