@cavuno/board 1.33.0 → 1.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.mjs +73 -19
- package/dist/{board-BTVapQiL.d.mts → board-DgDC0T4g.d.mts} +1 -1
- package/dist/{board-0yI5ZRJw.d.ts → board-Id19Yg8-.d.ts} +1 -1
- package/dist/filters.d.mts +1 -1
- package/dist/filters.d.ts +1 -1
- package/dist/format.d.mts +2 -2
- package/dist/format.d.ts +2 -2
- package/dist/index.d.mts +22 -6
- package/dist/index.d.ts +22 -6
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{jobs-Di4AV-02.d.mts → jobs-IIJtDgzX.d.mts} +138 -2
- package/dist/{jobs-Di4AV-02.d.ts → jobs-IIJtDgzX.d.ts} +138 -2
- package/dist/paths.d.mts +72 -0
- package/dist/paths.d.ts +72 -0
- package/dist/paths.js +99 -0
- package/dist/paths.mjs +78 -0
- package/dist/{salaries-D-BGZpDC.d.mts → salaries-BfEEEOHj.d.mts} +1 -1
- package/dist/{salaries-B-zJKjkk.d.ts → salaries-CL_00fNX.d.ts} +1 -1
- package/dist/seo.d.mts +3 -3
- package/dist/seo.d.ts +3 -3
- package/dist/server.d.mts +3 -3
- package/dist/server.d.ts +3 -3
- package/dist/sitemap.d.mts +3 -3
- package/dist/sitemap.d.ts +3 -3
- package/dist/sitemap.js +89 -29
- package/dist/sitemap.mjs +89 -29
- package/package.json +11 -1
- package/skills/cavuno-board-i18n/SKILL.md +82 -0
- package/skills/manifest.json +8 -1
package/dist/bin.mjs
CHANGED
|
@@ -40,6 +40,9 @@ function record(id, tier) {
|
|
|
40
40
|
var ENV_API_URL = record("env.api-url", 1);
|
|
41
41
|
var ENV_BOARD_KEY = record("env.board-key", 1);
|
|
42
42
|
var PK_RE = /^pk_[0-9a-f]{32}$/;
|
|
43
|
+
function apiBase(apiUrl) {
|
|
44
|
+
return apiUrl.replace(/\/+$/, "");
|
|
45
|
+
}
|
|
43
46
|
function checkEnv(env) {
|
|
44
47
|
const results = [];
|
|
45
48
|
if (!env.apiUrl) {
|
|
@@ -217,6 +220,58 @@ async function runReadProbes(fetchImpl, frontendUrl) {
|
|
|
217
220
|
];
|
|
218
221
|
}
|
|
219
222
|
|
|
223
|
+
// src/doctor/theme.ts
|
|
224
|
+
import { createHash } from "crypto";
|
|
225
|
+
import { existsSync, readFileSync as readFileSync2 } from "fs";
|
|
226
|
+
import { join } from "path";
|
|
227
|
+
var THEME = record("static.theme", 1);
|
|
228
|
+
function checkThemeFreshness(projectRoot, context) {
|
|
229
|
+
const tokensPath = join(projectRoot, "src/tokens.css");
|
|
230
|
+
if (!existsSync(tokensPath)) {
|
|
231
|
+
return [
|
|
232
|
+
THEME(
|
|
233
|
+
"skip",
|
|
234
|
+
"board is not tokens-migrated (ADR-0065) \u2014 no src/tokens.css"
|
|
235
|
+
)
|
|
236
|
+
];
|
|
237
|
+
}
|
|
238
|
+
const tokensHash = createHash("sha256").update(readFileSync2(tokensPath, "utf8"), "utf8").digest("hex");
|
|
239
|
+
const resolvedPath = join(projectRoot, "src/theme/resolved.ts");
|
|
240
|
+
const resolvedHash = existsSync(resolvedPath) ? readFileSync2(resolvedPath, "utf8").match(
|
|
241
|
+
/tokensHash = '([0-9a-f]{64})'/
|
|
242
|
+
)?.[1] ?? null : null;
|
|
243
|
+
if (resolvedHash !== tokensHash) {
|
|
244
|
+
return [
|
|
245
|
+
THEME(
|
|
246
|
+
"fail",
|
|
247
|
+
`src/theme/resolved.ts is ${resolvedHash ? "stale" : "missing"} \u2014 run \`npm run gen:theme\` (OG images render from it)`
|
|
248
|
+
)
|
|
249
|
+
];
|
|
250
|
+
}
|
|
251
|
+
if (!context) {
|
|
252
|
+
return [
|
|
253
|
+
THEME(
|
|
254
|
+
"skip",
|
|
255
|
+
"local derivations fresh; platform snapshot unverified \u2014 board context unavailable"
|
|
256
|
+
)
|
|
257
|
+
];
|
|
258
|
+
}
|
|
259
|
+
if (context.themeSnapshotHash !== tokensHash) {
|
|
260
|
+
return [
|
|
261
|
+
THEME(
|
|
262
|
+
"fail",
|
|
263
|
+
`platform theme snapshot is ${context.themeSnapshotHash ? "stale" : "missing"} \u2014 emails render ${context.themeSnapshotHash ? "an old" : "the legacy"} theme; sync it: \`npm run gen:theme -- --payload | npx convex run boards/themeSnapshot:sync\``
|
|
264
|
+
)
|
|
265
|
+
];
|
|
266
|
+
}
|
|
267
|
+
return [
|
|
268
|
+
THEME(
|
|
269
|
+
"pass",
|
|
270
|
+
`tokens.css \u21C4 resolved module \u21C4 platform snapshot (${tokensHash.slice(0, 12)}\u2026)`
|
|
271
|
+
)
|
|
272
|
+
];
|
|
273
|
+
}
|
|
274
|
+
|
|
220
275
|
// src/doctor/writes.ts
|
|
221
276
|
var WRITE = {
|
|
222
277
|
board: record("write.board", 3),
|
|
@@ -307,8 +362,7 @@ async function observeVerificationEmail(fetchImpl, apiKey, recipient, pollMs, ti
|
|
|
307
362
|
}
|
|
308
363
|
async function runWriteProbes(options) {
|
|
309
364
|
const { fetchImpl } = options;
|
|
310
|
-
const
|
|
311
|
-
const base = `${origin}/v1/boards/${encodeURIComponent(options.env.boardKey)}`;
|
|
365
|
+
const base = `${apiBase(options.env.apiUrl)}/v1/boards/${encodeURIComponent(options.env.boardKey)}`;
|
|
312
366
|
const nonce = options.nonce ?? `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`;
|
|
313
367
|
const email = `doctor+${nonce}@cavuno.com`;
|
|
314
368
|
const password = `doctor-probe-${nonce}-A1!`;
|
|
@@ -423,20 +477,18 @@ async function runWriteProbes(options) {
|
|
|
423
477
|
}
|
|
424
478
|
|
|
425
479
|
// src/doctor/run.ts
|
|
426
|
-
import { existsSync, readFileSync as
|
|
427
|
-
import { join } from "path";
|
|
480
|
+
import { existsSync as existsSync2, readFileSync as readFileSync3 } from "fs";
|
|
481
|
+
import { join as join2 } from "path";
|
|
428
482
|
var STATIC_API = record("static.api", 1);
|
|
429
483
|
var STATIC_BOARD = record("static.board", 1);
|
|
430
484
|
var STATIC_SKILLS = record("static.skills", 1);
|
|
431
485
|
async function checkApiReachable(fetchImpl, apiUrl) {
|
|
432
|
-
let origin;
|
|
433
486
|
try {
|
|
434
|
-
|
|
487
|
+
new URL(apiUrl);
|
|
435
488
|
} catch {
|
|
436
489
|
return null;
|
|
437
490
|
}
|
|
438
|
-
const
|
|
439
|
-
const result = spec.ok ? spec : await probe(fetchImpl, `${origin}/v1/openapi.json`);
|
|
491
|
+
const result = await probe(fetchImpl, `${apiBase(apiUrl)}/v1/openapi.json`);
|
|
440
492
|
if (!result.ok) {
|
|
441
493
|
return STATIC_API(
|
|
442
494
|
"fail",
|
|
@@ -455,10 +507,9 @@ async function checkApiReachable(fetchImpl, apiUrl) {
|
|
|
455
507
|
return STATIC_API("pass", "OpenAPI spec reachable");
|
|
456
508
|
}
|
|
457
509
|
async function checkBoardResolves(fetchImpl, env) {
|
|
458
|
-
const origin = new URL(env.apiUrl).origin;
|
|
459
510
|
const result = await probe(
|
|
460
511
|
fetchImpl,
|
|
461
|
-
`${
|
|
512
|
+
`${apiBase(env.apiUrl)}/v1/boards/${encodeURIComponent(env.boardKey)}`
|
|
462
513
|
);
|
|
463
514
|
if (!result.ok) {
|
|
464
515
|
return {
|
|
@@ -489,8 +540,8 @@ async function checkBoardResolves(fetchImpl, env) {
|
|
|
489
540
|
}
|
|
490
541
|
var SKILL_ROOTS = [".claude/skills", ".agents/skills"];
|
|
491
542
|
function checkSkillsFreshness(projectRoot) {
|
|
492
|
-
const roots = SKILL_ROOTS.map((root) =>
|
|
493
|
-
(root) =>
|
|
543
|
+
const roots = SKILL_ROOTS.map((root) => join2(projectRoot, root)).filter(
|
|
544
|
+
(root) => existsSync2(root)
|
|
494
545
|
);
|
|
495
546
|
if (roots.length === 0) {
|
|
496
547
|
return STATIC_SKILLS(
|
|
@@ -503,10 +554,10 @@ function checkSkillsFreshness(projectRoot) {
|
|
|
503
554
|
const seen = /* @__PURE__ */ new Set();
|
|
504
555
|
for (const root of roots) {
|
|
505
556
|
for (const skill of corpus.skills) {
|
|
506
|
-
const copied =
|
|
507
|
-
if (!
|
|
557
|
+
const copied = join2(root, skill.name, "SKILL.md");
|
|
558
|
+
if (!existsSync2(copied)) continue;
|
|
508
559
|
seen.add(skill.name);
|
|
509
|
-
if (
|
|
560
|
+
if (readFileSync3(copied, "utf8") !== skill.content) {
|
|
510
561
|
stale.add(skill.name);
|
|
511
562
|
}
|
|
512
563
|
}
|
|
@@ -549,6 +600,9 @@ async function runDoctor(options) {
|
|
|
549
600
|
results.push(STATIC_BOARD("skip", "env checks failed \u2014 fix them first"));
|
|
550
601
|
}
|
|
551
602
|
results.push(checkSkillsFreshness(options.projectRoot ?? process.cwd()));
|
|
603
|
+
results.push(
|
|
604
|
+
...checkThemeFreshness(options.projectRoot ?? process.cwd(), boardContext)
|
|
605
|
+
);
|
|
552
606
|
results.push(
|
|
553
607
|
...options.frontendUrl ? await runReadProbes(fetchImpl, options.frontendUrl) : skipReadProbes("no --frontend <url> given")
|
|
554
608
|
);
|
|
@@ -575,12 +629,12 @@ async function runDoctor(options) {
|
|
|
575
629
|
}
|
|
576
630
|
|
|
577
631
|
// src/setup/run.ts
|
|
578
|
-
import { cpSync, existsSync as
|
|
632
|
+
import { cpSync, existsSync as existsSync3, mkdirSync, readFileSync as readFileSync4 } from "fs";
|
|
579
633
|
import { dirname as dirname2, resolve as resolve2 } from "path";
|
|
580
634
|
function detectFramework(cwd) {
|
|
581
635
|
const pkgPath = resolve2(cwd, "package.json");
|
|
582
|
-
if (!
|
|
583
|
-
const pkg = JSON.parse(
|
|
636
|
+
if (!existsSync3(pkgPath)) return null;
|
|
637
|
+
const pkg = JSON.parse(readFileSync4(pkgPath, "utf8"));
|
|
584
638
|
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
585
639
|
if (deps["@tanstack/react-start"]) return "tanstack-start";
|
|
586
640
|
return null;
|
|
@@ -595,7 +649,7 @@ function runSetup(cwd = process.cwd()) {
|
|
|
595
649
|
resolve2(cwd, ".claude", "skills"),
|
|
596
650
|
resolve2(cwd, ".agents", "skills")
|
|
597
651
|
];
|
|
598
|
-
const existing = roots.filter((root) =>
|
|
652
|
+
const existing = roots.filter((root) => existsSync3(root));
|
|
599
653
|
const targetDirs = existing.length > 0 ? existing : [roots[0]];
|
|
600
654
|
const copied = [];
|
|
601
655
|
for (const targetDir of targetDirs) {
|
package/dist/filters.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.mjs';
|
|
2
|
-
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-
|
|
2
|
+
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-IIJtDgzX.mjs';
|
|
3
3
|
|
|
4
4
|
declare const REMOTE_OPTIONS: readonly RemoteOption[];
|
|
5
5
|
/**
|
package/dist/filters.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.js';
|
|
2
|
-
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-
|
|
2
|
+
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-IIJtDgzX.js';
|
|
3
3
|
|
|
4
4
|
declare const REMOTE_OPTIONS: readonly RemoteOption[];
|
|
5
5
|
/**
|
package/dist/format.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { P as PublicJob, a as PublicJobCard, C as CustomFieldValues } from './jobs-
|
|
1
|
+
import { P as PublicJob, a as PublicJobCard, C as CustomFieldValues } from './jobs-IIJtDgzX.mjs';
|
|
2
2
|
import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.mjs';
|
|
3
3
|
export { A as AlertsCopy, a as ApplyCopy, b as BlogCopy, c as BreadcrumbsCopy, C as CopyLinkCopy, E as EntityCopy, F as FooterCopy, J as JobCardCopy, d as JobDetailCopy, e as JobSearchCopy, N as NavCopy, P as PUBLIC_LABEL_GROUPS, f as PaginationCopy, S as SalaryCopy, U as UiCopy, u as uiCopy } from './ui-copy-rlfoH9P3.mjs';
|
|
4
|
-
import { C as CustomFieldDefinition } from './board-
|
|
4
|
+
import { C as CustomFieldDefinition } from './board-DgDC0T4g.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Date display helpers in the board language (required leading parameter,
|
package/dist/format.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { P as PublicJob, a as PublicJobCard, C as CustomFieldValues } from './jobs-
|
|
1
|
+
import { P as PublicJob, a as PublicJobCard, C as CustomFieldValues } from './jobs-IIJtDgzX.js';
|
|
2
2
|
import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.js';
|
|
3
3
|
export { A as AlertsCopy, a as ApplyCopy, b as BlogCopy, c as BreadcrumbsCopy, C as CopyLinkCopy, E as EntityCopy, F as FooterCopy, J as JobCardCopy, d as JobDetailCopy, e as JobSearchCopy, N as NavCopy, P as PUBLIC_LABEL_GROUPS, f as PaginationCopy, S as SalaryCopy, U as UiCopy, u as uiCopy } from './ui-copy-rlfoH9P3.js';
|
|
4
|
-
import { C as CustomFieldDefinition } from './board-
|
|
4
|
+
import { C as CustomFieldDefinition } from './board-Id19Yg8-.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Date display helpers in the board language (required leading parameter,
|
package/dist/index.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { b as Schemas, R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, c as components, d as JobsListQuery, e as JobCardListEnvelope, f as JobsSearchBody, g as JobCardSearchEnvelope, h as JobsSimilarQuery, i as SearchEnvelope } from './jobs-
|
|
2
|
-
export { j as CustomFieldValue, C as CustomFieldValues, k as EducationRequirement, l as JobCompany, J as JobSort, O as OfficeLocation, P as PublicJob, a as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-
|
|
3
|
-
export { C as CustomFieldDefinition, a as CustomFieldOption, b as CustomFieldType, P as PublicBoard, c as PublicBoardAnalytics, d as PublicBoardFeatures, e as PublicBoardTheme } from './board-
|
|
4
|
-
import { b as CompaniesListQuery, c as CompanyListEnvelope, d as CompaniesSearchBody, e as CompanyJobsListQuery, f as CompanySimilarQuery, g as CompanyMarketsListQuery, h as SalaryDetailQuery, i as BlogPostsListQuery, j as BlogSimilarQuery, k as BlogSearchBody } from './salaries-
|
|
5
|
-
export { B as BlogAuthorEmbed, l as BlogTagEmbed, C as CompanyCategorySalary, m as CompanyMarket, n as CompanyMarketRef, a as CompanySalary, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, q as PublicBlogAdjacentPosts, r as PublicBlogAuthor, s as PublicBlogPost, P as PublicBlogPostSummary, t as PublicBlogTag, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, D as SkillLocationsIndex, S as SkillSalaryDetail, E as TitleLocationSalary, F as TitleLocationsIndex, T as TitleSalaryDetail } from './salaries-
|
|
1
|
+
import { b as Schemas, R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, c as components, d as JobsListQuery, e as JobCardListEnvelope, f as JobsSearchBody, g as JobCardSearchEnvelope, h as JobsSimilarQuery, i as SearchEnvelope } from './jobs-IIJtDgzX.mjs';
|
|
2
|
+
export { j as CustomFieldValue, C as CustomFieldValues, k as EducationRequirement, l as JobCompany, J as JobSort, O as OfficeLocation, P as PublicJob, a as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-IIJtDgzX.mjs';
|
|
3
|
+
export { C as CustomFieldDefinition, a as CustomFieldOption, b as CustomFieldType, P as PublicBoard, c as PublicBoardAnalytics, d as PublicBoardFeatures, e as PublicBoardTheme } from './board-DgDC0T4g.mjs';
|
|
4
|
+
import { b as CompaniesListQuery, c as CompanyListEnvelope, d as CompaniesSearchBody, e as CompanyJobsListQuery, f as CompanySimilarQuery, g as CompanyMarketsListQuery, h as SalaryDetailQuery, i as BlogPostsListQuery, j as BlogSimilarQuery, k as BlogSearchBody } from './salaries-BfEEEOHj.mjs';
|
|
5
|
+
export { B as BlogAuthorEmbed, l as BlogTagEmbed, C as CompanyCategorySalary, m as CompanyMarket, n as CompanyMarketRef, a as CompanySalary, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, q as PublicBlogAdjacentPosts, r as PublicBlogAuthor, s as PublicBlogPost, P as PublicBlogPostSummary, t as PublicBlogTag, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, D as SkillLocationsIndex, S as SkillSalaryDetail, E as TitleLocationSalary, F as TitleLocationsIndex, T as TitleSalaryDetail } from './salaries-BfEEEOHj.mjs';
|
|
6
6
|
|
|
7
7
|
type Awaitable<T> = T | Promise<T>;
|
|
8
8
|
/**
|
|
@@ -204,7 +204,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
|
|
|
204
204
|
* constant because the package is platform-neutral and cannot read
|
|
205
205
|
* package.json at runtime.
|
|
206
206
|
*/
|
|
207
|
-
declare const SDK_VERSION = "1.
|
|
207
|
+
declare const SDK_VERSION = "1.34.0";
|
|
208
208
|
|
|
209
209
|
type SavedJob = Schemas['SavedJob'];
|
|
210
210
|
type SavedJobsListQuery = {
|
|
@@ -709,6 +709,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
709
709
|
candidatePaywall: boolean;
|
|
710
710
|
impressum: boolean;
|
|
711
711
|
};
|
|
712
|
+
talentDirectoryVisibility: "off" | "public" | "employers_only";
|
|
712
713
|
analytics: {
|
|
713
714
|
ga4MeasurementId: string | null;
|
|
714
715
|
gtmId: string | null;
|
|
@@ -738,6 +739,21 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
738
739
|
[key: string]: string;
|
|
739
740
|
};
|
|
740
741
|
};
|
|
742
|
+
footer: {
|
|
743
|
+
description: string | null;
|
|
744
|
+
contactEmail: string | null;
|
|
745
|
+
websiteUrl: string | null;
|
|
746
|
+
xUrl: string | null;
|
|
747
|
+
facebookUrl: string | null;
|
|
748
|
+
linkedinUrl: string | null;
|
|
749
|
+
navigationOrder: string[];
|
|
750
|
+
customLinks: {
|
|
751
|
+
id: string;
|
|
752
|
+
label: string;
|
|
753
|
+
url: string;
|
|
754
|
+
}[];
|
|
755
|
+
};
|
|
756
|
+
themeSnapshotHash: string | null;
|
|
741
757
|
}>;
|
|
742
758
|
/**
|
|
743
759
|
* Board SEO infra — `ads.txt`, IndexNow key, Google site-verification, and
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { b as Schemas, R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, c as components, d as JobsListQuery, e as JobCardListEnvelope, f as JobsSearchBody, g as JobCardSearchEnvelope, h as JobsSimilarQuery, i as SearchEnvelope } from './jobs-
|
|
2
|
-
export { j as CustomFieldValue, C as CustomFieldValues, k as EducationRequirement, l as JobCompany, J as JobSort, O as OfficeLocation, P as PublicJob, a as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-
|
|
3
|
-
export { C as CustomFieldDefinition, a as CustomFieldOption, b as CustomFieldType, P as PublicBoard, c as PublicBoardAnalytics, d as PublicBoardFeatures, e as PublicBoardTheme } from './board-
|
|
4
|
-
import { b as CompaniesListQuery, c as CompanyListEnvelope, d as CompaniesSearchBody, e as CompanyJobsListQuery, f as CompanySimilarQuery, g as CompanyMarketsListQuery, h as SalaryDetailQuery, i as BlogPostsListQuery, j as BlogSimilarQuery, k as BlogSearchBody } from './salaries-
|
|
5
|
-
export { B as BlogAuthorEmbed, l as BlogTagEmbed, C as CompanyCategorySalary, m as CompanyMarket, n as CompanyMarketRef, a as CompanySalary, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, q as PublicBlogAdjacentPosts, r as PublicBlogAuthor, s as PublicBlogPost, P as PublicBlogPostSummary, t as PublicBlogTag, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, D as SkillLocationsIndex, S as SkillSalaryDetail, E as TitleLocationSalary, F as TitleLocationsIndex, T as TitleSalaryDetail } from './salaries-
|
|
1
|
+
import { b as Schemas, R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, c as components, d as JobsListQuery, e as JobCardListEnvelope, f as JobsSearchBody, g as JobCardSearchEnvelope, h as JobsSimilarQuery, i as SearchEnvelope } from './jobs-IIJtDgzX.js';
|
|
2
|
+
export { j as CustomFieldValue, C as CustomFieldValues, k as EducationRequirement, l as JobCompany, J as JobSort, O as OfficeLocation, P as PublicJob, a as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-IIJtDgzX.js';
|
|
3
|
+
export { C as CustomFieldDefinition, a as CustomFieldOption, b as CustomFieldType, P as PublicBoard, c as PublicBoardAnalytics, d as PublicBoardFeatures, e as PublicBoardTheme } from './board-Id19Yg8-.js';
|
|
4
|
+
import { b as CompaniesListQuery, c as CompanyListEnvelope, d as CompaniesSearchBody, e as CompanyJobsListQuery, f as CompanySimilarQuery, g as CompanyMarketsListQuery, h as SalaryDetailQuery, i as BlogPostsListQuery, j as BlogSimilarQuery, k as BlogSearchBody } from './salaries-CL_00fNX.js';
|
|
5
|
+
export { B as BlogAuthorEmbed, l as BlogTagEmbed, C as CompanyCategorySalary, m as CompanyMarket, n as CompanyMarketRef, a as CompanySalary, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, q as PublicBlogAdjacentPosts, r as PublicBlogAuthor, s as PublicBlogPost, P as PublicBlogPostSummary, t as PublicBlogTag, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, D as SkillLocationsIndex, S as SkillSalaryDetail, E as TitleLocationSalary, F as TitleLocationsIndex, T as TitleSalaryDetail } from './salaries-CL_00fNX.js';
|
|
6
6
|
|
|
7
7
|
type Awaitable<T> = T | Promise<T>;
|
|
8
8
|
/**
|
|
@@ -204,7 +204,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
|
|
|
204
204
|
* constant because the package is platform-neutral and cannot read
|
|
205
205
|
* package.json at runtime.
|
|
206
206
|
*/
|
|
207
|
-
declare const SDK_VERSION = "1.
|
|
207
|
+
declare const SDK_VERSION = "1.34.0";
|
|
208
208
|
|
|
209
209
|
type SavedJob = Schemas['SavedJob'];
|
|
210
210
|
type SavedJobsListQuery = {
|
|
@@ -709,6 +709,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
709
709
|
candidatePaywall: boolean;
|
|
710
710
|
impressum: boolean;
|
|
711
711
|
};
|
|
712
|
+
talentDirectoryVisibility: "off" | "public" | "employers_only";
|
|
712
713
|
analytics: {
|
|
713
714
|
ga4MeasurementId: string | null;
|
|
714
715
|
gtmId: string | null;
|
|
@@ -738,6 +739,21 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
738
739
|
[key: string]: string;
|
|
739
740
|
};
|
|
740
741
|
};
|
|
742
|
+
footer: {
|
|
743
|
+
description: string | null;
|
|
744
|
+
contactEmail: string | null;
|
|
745
|
+
websiteUrl: string | null;
|
|
746
|
+
xUrl: string | null;
|
|
747
|
+
facebookUrl: string | null;
|
|
748
|
+
linkedinUrl: string | null;
|
|
749
|
+
navigationOrder: string[];
|
|
750
|
+
customLinks: {
|
|
751
|
+
id: string;
|
|
752
|
+
label: string;
|
|
753
|
+
url: string;
|
|
754
|
+
}[];
|
|
755
|
+
};
|
|
756
|
+
themeSnapshotHash: string | null;
|
|
741
757
|
}>;
|
|
742
758
|
/**
|
|
743
759
|
* Board SEO infra — `ads.txt`, IndexNow key, Google site-verification, and
|
package/dist/index.js
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -60,6 +60,15 @@ interface components {
|
|
|
60
60
|
/** @description The note text. */
|
|
61
61
|
body: string;
|
|
62
62
|
};
|
|
63
|
+
AddCategoryAliasesBody: {
|
|
64
|
+
aliases: string[];
|
|
65
|
+
};
|
|
66
|
+
AddMarketAliasesBody: {
|
|
67
|
+
aliases: string[];
|
|
68
|
+
};
|
|
69
|
+
AddSkillAliasesBody: {
|
|
70
|
+
aliases: string[];
|
|
71
|
+
};
|
|
63
72
|
/** @description Links related to this resource. List responses only carry the `admin` URL because the public URL needs the company slug, which list-shape Convex projections do not fan out to. */
|
|
64
73
|
AdminOnlyResourceLinks: {
|
|
65
74
|
/**
|
|
@@ -554,6 +563,18 @@ interface components {
|
|
|
554
563
|
name: string;
|
|
555
564
|
jobSkillId: string | null;
|
|
556
565
|
};
|
|
566
|
+
Category: {
|
|
567
|
+
id: string;
|
|
568
|
+
/** @enum {string} */
|
|
569
|
+
object: "category";
|
|
570
|
+
name: string;
|
|
571
|
+
slug: string;
|
|
572
|
+
aliasSlugs: string[];
|
|
573
|
+
sourceLocale: string | null;
|
|
574
|
+
parentId: string | null;
|
|
575
|
+
createdAt: string;
|
|
576
|
+
children?: unknown[];
|
|
577
|
+
};
|
|
557
578
|
ClaimableCompany: {
|
|
558
579
|
id: string;
|
|
559
580
|
/** @enum {string} */
|
|
@@ -889,6 +910,13 @@ interface components {
|
|
|
889
910
|
/** @enum {string} */
|
|
890
911
|
status?: "draft" | "scheduled" | "published";
|
|
891
912
|
};
|
|
913
|
+
CreateCategoryBody: {
|
|
914
|
+
name: string;
|
|
915
|
+
slug?: string;
|
|
916
|
+
parentId?: string;
|
|
917
|
+
aliasSlugs?: string[];
|
|
918
|
+
sourceLocale?: string;
|
|
919
|
+
};
|
|
892
920
|
CreateCompanyBody: {
|
|
893
921
|
/** @description Public company website URL. Normalized to a canonical apex domain when stored. */
|
|
894
922
|
website?: string;
|
|
@@ -907,6 +935,12 @@ interface components {
|
|
|
907
935
|
/** @description URL-friendly slug for the company. Auto-generated from `name` when omitted. */
|
|
908
936
|
slug?: string;
|
|
909
937
|
};
|
|
938
|
+
CreateDomainBody: {
|
|
939
|
+
/** @description Hostname to bind to this board, for example jobs.acme.com. Labels may contain letters, numbers, and hyphens, and may not start or end with a hyphen. The API normalizes accepted hostnames to lowercase before writing. */
|
|
940
|
+
domain: string;
|
|
941
|
+
/** @enum {string} */
|
|
942
|
+
source?: "external";
|
|
943
|
+
};
|
|
910
944
|
CreateEducationBody: {
|
|
911
945
|
institutionName: string;
|
|
912
946
|
institutionUrl?: string;
|
|
@@ -1105,12 +1139,24 @@ interface components {
|
|
|
1105
1139
|
};
|
|
1106
1140
|
colorMode?: string;
|
|
1107
1141
|
};
|
|
1142
|
+
CreateMarketBody: {
|
|
1143
|
+
name: string;
|
|
1144
|
+
slug?: string;
|
|
1145
|
+
aliasSlugs?: string[];
|
|
1146
|
+
sourceLocale?: string;
|
|
1147
|
+
};
|
|
1108
1148
|
CreatePipelineStageBody: {
|
|
1109
1149
|
/** @description The job whose pipeline gains the stage. */
|
|
1110
1150
|
jobId: string;
|
|
1111
1151
|
/** @description The stage label. */
|
|
1112
1152
|
label: string;
|
|
1113
1153
|
};
|
|
1154
|
+
CreateSkillBody: {
|
|
1155
|
+
name: string;
|
|
1156
|
+
slug?: string;
|
|
1157
|
+
aliasSlugs?: string[];
|
|
1158
|
+
sourceLocale?: string;
|
|
1159
|
+
};
|
|
1114
1160
|
CreateTagBody: {
|
|
1115
1161
|
/** @description URL-friendly slug for the tag. Auto-generated from `name` when omitted. */
|
|
1116
1162
|
slug?: string;
|
|
@@ -1153,6 +1199,33 @@ interface components {
|
|
|
1153
1199
|
/** @description Display label (authoring default; localized per board in the template). */
|
|
1154
1200
|
label: string;
|
|
1155
1201
|
};
|
|
1202
|
+
Domain: {
|
|
1203
|
+
id: string;
|
|
1204
|
+
/** @enum {string} */
|
|
1205
|
+
object: "domain";
|
|
1206
|
+
domain: string;
|
|
1207
|
+
status: string;
|
|
1208
|
+
source: string;
|
|
1209
|
+
/** @enum {string} */
|
|
1210
|
+
mode: "direct" | "edge";
|
|
1211
|
+
/** @enum {string|null} */
|
|
1212
|
+
connectionShape: "cname" | "apexRedirect" | null;
|
|
1213
|
+
/** @enum {string|null} */
|
|
1214
|
+
servedBy: "external" | null;
|
|
1215
|
+
dnsProvider: string | null;
|
|
1216
|
+
statusReason: string | null;
|
|
1217
|
+
verificationToken: string | null;
|
|
1218
|
+
verificationInstructions: components["schemas"]["DomainVerificationInstructions"];
|
|
1219
|
+
verifiedAt: string | null;
|
|
1220
|
+
isPrimary: boolean;
|
|
1221
|
+
createdAt: string | null;
|
|
1222
|
+
};
|
|
1223
|
+
DomainVerificationInstructions: {
|
|
1224
|
+
/** @enum {string} */
|
|
1225
|
+
method: "txt";
|
|
1226
|
+
name: string;
|
|
1227
|
+
expectedValue: string | null;
|
|
1228
|
+
};
|
|
1156
1229
|
DuplicateJobBody: Record<string, never>;
|
|
1157
1230
|
DynamicClientRegistrationRequest: {
|
|
1158
1231
|
/** @description Array of redirect URIs the client may use. Must be HTTPS, except for `http://localhost` URIs in development. At least one entry is required. */
|
|
@@ -1162,10 +1235,10 @@ interface components {
|
|
|
1162
1235
|
/** @description Space-separated list of scopes the client may request. When omitted, the client is registered for all scopes. */
|
|
1163
1236
|
scope?: string;
|
|
1164
1237
|
/**
|
|
1165
|
-
* @description OAuth token endpoint authentication method. Use `none` for public PKCE clients that cannot keep a client secret
|
|
1238
|
+
* @description OAuth token endpoint authentication method. Use `none` for public PKCE clients that cannot keep a client secret; use `client_secret_basic` or `client_secret_post` for confidential clients, which are issued a `client_secret`.
|
|
1166
1239
|
* @enum {string}
|
|
1167
1240
|
*/
|
|
1168
|
-
token_endpoint_auth_method?: "client_secret_basic" | "none";
|
|
1241
|
+
token_endpoint_auth_method?: "client_secret_basic" | "client_secret_post" | "none";
|
|
1169
1242
|
};
|
|
1170
1243
|
DynamicClientRegistrationResponse: {
|
|
1171
1244
|
/** @description Public OAuth client identifier. */
|
|
@@ -2057,6 +2130,16 @@ interface components {
|
|
|
2057
2130
|
jobCount: number;
|
|
2058
2131
|
}[];
|
|
2059
2132
|
};
|
|
2133
|
+
Market: {
|
|
2134
|
+
id: string;
|
|
2135
|
+
/** @enum {string} */
|
|
2136
|
+
object: "market";
|
|
2137
|
+
name: string;
|
|
2138
|
+
slug: string;
|
|
2139
|
+
aliasSlugs: string[];
|
|
2140
|
+
sourceLocale: string | null;
|
|
2141
|
+
createdAt: string;
|
|
2142
|
+
};
|
|
2060
2143
|
MediaGet: components["schemas"]["MediaUpload"] & {
|
|
2061
2144
|
/** @description Time at which the file was uploaded. ISO 8601 datetime. */
|
|
2062
2145
|
uploadedAt: string;
|
|
@@ -2396,6 +2479,11 @@ interface components {
|
|
|
2396
2479
|
candidatePaywall: boolean;
|
|
2397
2480
|
impressum: boolean;
|
|
2398
2481
|
};
|
|
2482
|
+
/**
|
|
2483
|
+
* @description The tri-state behind `features.talentDirectory` (which is `visibility === 'public'`). Link /talent whenever this is not `'off'` — an employers-only directory renders a sign-in upsell for anonymous visitors, matching the hosted chrome.
|
|
2484
|
+
* @enum {string}
|
|
2485
|
+
*/
|
|
2486
|
+
talentDirectoryVisibility: "off" | "public" | "employers_only";
|
|
2399
2487
|
analytics: {
|
|
2400
2488
|
ga4MeasurementId: string | null;
|
|
2401
2489
|
gtmId: string | null;
|
|
@@ -2427,6 +2515,28 @@ interface components {
|
|
|
2427
2515
|
[key: string]: string;
|
|
2428
2516
|
};
|
|
2429
2517
|
};
|
|
2518
|
+
/** @description Footer/brand data the hosted board footer renders (description, contact, website + social links, navigation order). The brand/social URLs (`websiteUrl`, `facebookUrl`, `linkedinUrl`, `xUrl`) are sanitized to absolute http(s); `customLinks[].url` is served verbatim (see its own note). */
|
|
2519
|
+
footer: {
|
|
2520
|
+
/** @description Operator-written footer brand description. May carry a `{{board_name}}` placeholder — resolve it before rendering. When null, fall back to the label catalog's `footer.defaultDescription` template. */
|
|
2521
|
+
description: string | null;
|
|
2522
|
+
/** @description Public contact email for the footer About column (render as `mailto:`). */
|
|
2523
|
+
contactEmail: string | null;
|
|
2524
|
+
websiteUrl: string | null;
|
|
2525
|
+
/** @description X (Twitter) profile URL, normalized from the stored handle. */
|
|
2526
|
+
xUrl: string | null;
|
|
2527
|
+
facebookUrl: string | null;
|
|
2528
|
+
linkedinUrl: string | null;
|
|
2529
|
+
/** @description Operator-configured navigation order: system item ids (`home`, `companies`, `pricing`, `blog`) and `custom:<id>` refs into `customLinks`. Empty when the operator never reordered — render the system defaults. System items still gate on their feature flags (e.g. `blog` only when `features.blog`). */
|
|
2530
|
+
navigationOrder: string[];
|
|
2531
|
+
/** @description Operator-defined navigation links referenced from `navigationOrder` as `custom:<id>`; links not referenced there append after the system items (hosted-footer behavior). Each `url` is served verbatim (trimmed only) and may be a relative path (e.g. `/hub`) — unlike the brand/social URLs it is NOT run through http(s) sanitization (matching the hosted footer, which supports relative links), so a consumer MUST sanitize it before binding to an anchor href. */
|
|
2532
|
+
customLinks: {
|
|
2533
|
+
id: string;
|
|
2534
|
+
label: string;
|
|
2535
|
+
url: string;
|
|
2536
|
+
}[];
|
|
2537
|
+
};
|
|
2538
|
+
/** @description SHA-256 content hash of a MIGRATED board's canonical `tokens.css`, from the platform's synced theme snapshot (ADR-0065). `npx @cavuno/board doctor` compares it against the repo's tokens file and generated theme module to detect derivation drift. `null` for boards on the legacy runtime theme. */
|
|
2539
|
+
themeSnapshotHash: string | null;
|
|
2430
2540
|
};
|
|
2431
2541
|
PublicCompaniesSearchBody: {
|
|
2432
2542
|
/** @description Free-text search query matched against company name. Up to 200 characters. */
|
|
@@ -3043,6 +3153,16 @@ interface components {
|
|
|
3043
3153
|
/** @description Stripe billing-portal configuration ID used for self-serve plan management. Pass `null` to clear. */
|
|
3044
3154
|
jobAccessStripePortalConfigId?: string | unknown | unknown;
|
|
3045
3155
|
};
|
|
3156
|
+
Skill: {
|
|
3157
|
+
id: string;
|
|
3158
|
+
/** @enum {string} */
|
|
3159
|
+
object: "skill";
|
|
3160
|
+
name: string;
|
|
3161
|
+
slug: string;
|
|
3162
|
+
aliasSlugs: string[];
|
|
3163
|
+
sourceLocale: string | null;
|
|
3164
|
+
createdAt: string;
|
|
3165
|
+
};
|
|
3046
3166
|
SkillLocationSalary: {
|
|
3047
3167
|
/** @enum {string} */
|
|
3048
3168
|
object: "skill_location_salary";
|
|
@@ -3540,6 +3660,12 @@ interface components {
|
|
|
3540
3660
|
jobSearchStatusVisibleTo?: "everyone" | "employers_only";
|
|
3541
3661
|
openToRelocate?: boolean;
|
|
3542
3662
|
};
|
|
3663
|
+
UpdateCategoryBody: {
|
|
3664
|
+
name?: string;
|
|
3665
|
+
slug?: string;
|
|
3666
|
+
parentId?: string | unknown | unknown;
|
|
3667
|
+
sourceLocale?: string;
|
|
3668
|
+
};
|
|
3543
3669
|
UpdateCompanyBody: {
|
|
3544
3670
|
/** @description Public company website URL. Normalized to a canonical apex domain when stored. */
|
|
3545
3671
|
website?: string;
|
|
@@ -3681,6 +3807,11 @@ interface components {
|
|
|
3681
3807
|
proficiency: string;
|
|
3682
3808
|
}[];
|
|
3683
3809
|
};
|
|
3810
|
+
UpdateMarketBody: {
|
|
3811
|
+
name?: string;
|
|
3812
|
+
slug?: string;
|
|
3813
|
+
sourceLocale?: string;
|
|
3814
|
+
};
|
|
3684
3815
|
UpdateNotificationPreferenceBody: {
|
|
3685
3816
|
/** @enum {string} */
|
|
3686
3817
|
channel: "messageEmails" | "applicationEmails";
|
|
@@ -3690,6 +3821,11 @@ interface components {
|
|
|
3690
3821
|
label?: string;
|
|
3691
3822
|
hidden?: boolean;
|
|
3692
3823
|
};
|
|
3824
|
+
UpdateSkillBody: {
|
|
3825
|
+
name?: string;
|
|
3826
|
+
slug?: string;
|
|
3827
|
+
sourceLocale?: string;
|
|
3828
|
+
};
|
|
3693
3829
|
UpdateSkillsBody: {
|
|
3694
3830
|
skills: string[];
|
|
3695
3831
|
};
|