@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.
@@ -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
  };
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Canonical board URL paths — the single source of truth for a board's
3
+ * public URL structure. The sitemap generator (`src/sitemap/walker.ts`)
4
+ * and every consumer (starter navigation, platform emails) build URLs
5
+ * from these helpers, so the structure can never drift across surfaces.
6
+ *
7
+ * Each `*Path` returns an absolute path (leading slash, no origin);
8
+ * `boardUrl(origin, path)` prefixes a board origin. Pure, isomorphic,
9
+ * zero-dependency — safe to import in the Convex runtime, on the edge,
10
+ * and in the browser.
11
+ *
12
+ * These paths mirror the hosted board's indexed URLs exactly (migration
13
+ * parity). Do NOT change a pattern here without updating the hosted board
14
+ * and the sitemap golden tests in lockstep — the structure is a locked
15
+ * cross-surface contract (ADR-0070).
16
+ */
17
+ /** Job detail — the canonical, indexed job URL. Requires BOTH slugs. */
18
+ declare function jobDetailPath(companySlug: string, jobSlug: string): string;
19
+ /** Category (keyword) job listing. */
20
+ declare function jobsCategoryPath(categorySlug: string): string;
21
+ /** Skill job listing. */
22
+ declare function jobsSkillPath(skillSlug: string): string;
23
+ /** Location job listing. */
24
+ declare function jobsLocationPath(placeSlug: string): string;
25
+ /** Company profile. */
26
+ declare function companyPath(companySlug: string): string;
27
+ /** Company market (sector) listing. */
28
+ declare function companyMarketPath(marketSlug: string): string;
29
+ /** A company's salary overview. */
30
+ declare function companySalaryPath(companySlug: string): string;
31
+ /** Salary page for a job title. */
32
+ declare function salaryTitlePath(titleSlug: string): string;
33
+ /** Salary page for a skill. */
34
+ declare function salarySkillPath(skillSlug: string): string;
35
+ /** Salary page for a location. */
36
+ declare function salaryLocationPath(placeSlug: string): string;
37
+ /** Blog post. */
38
+ declare function blogPostPath(postSlug: string): string;
39
+ /** Blog tag archive. */
40
+ declare function blogTagPath(tagSlug: string): string;
41
+ /** Blog author archive. */
42
+ declare function blogAuthorPath(authorSlug: string): string;
43
+ /**
44
+ * Static top-level board paths (indexed marketing + index surfaces). Kept
45
+ * here so the sitemap and consumers share one definition of the chrome
46
+ * routes too.
47
+ */
48
+ declare const BOARD_PATHS: {
49
+ readonly home: "/";
50
+ readonly jobs: "/jobs";
51
+ readonly companies: "/companies";
52
+ readonly salaries: "/salaries";
53
+ readonly salaryCompanies: "/salaries/companies";
54
+ readonly salaryTitles: "/salaries/titles";
55
+ readonly salarySkills: "/salaries/skills";
56
+ readonly salaryLocations: "/salaries/locations";
57
+ readonly blog: "/blog";
58
+ readonly about: "/about";
59
+ readonly privacyPolicy: "/privacy-policy";
60
+ readonly termsOfService: "/terms-of-service";
61
+ readonly cookiePolicy: "/cookie-policy";
62
+ readonly impressum: "/impressum";
63
+ readonly talent: "/talent";
64
+ readonly employers: "/employers";
65
+ };
66
+ /**
67
+ * Prefix a board-relative path with the board origin. A trailing slash on
68
+ * the origin is tolerated (stripped) so callers need not normalise first.
69
+ */
70
+ declare function boardUrl(origin: string, path: string): string;
71
+
72
+ export { BOARD_PATHS, blogAuthorPath, blogPostPath, blogTagPath, boardUrl, companyMarketPath, companyPath, companySalaryPath, jobDetailPath, jobsCategoryPath, jobsLocationPath, jobsSkillPath, salaryLocationPath, salarySkillPath, salaryTitlePath };
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Canonical board URL paths — the single source of truth for a board's
3
+ * public URL structure. The sitemap generator (`src/sitemap/walker.ts`)
4
+ * and every consumer (starter navigation, platform emails) build URLs
5
+ * from these helpers, so the structure can never drift across surfaces.
6
+ *
7
+ * Each `*Path` returns an absolute path (leading slash, no origin);
8
+ * `boardUrl(origin, path)` prefixes a board origin. Pure, isomorphic,
9
+ * zero-dependency — safe to import in the Convex runtime, on the edge,
10
+ * and in the browser.
11
+ *
12
+ * These paths mirror the hosted board's indexed URLs exactly (migration
13
+ * parity). Do NOT change a pattern here without updating the hosted board
14
+ * and the sitemap golden tests in lockstep — the structure is a locked
15
+ * cross-surface contract (ADR-0070).
16
+ */
17
+ /** Job detail — the canonical, indexed job URL. Requires BOTH slugs. */
18
+ declare function jobDetailPath(companySlug: string, jobSlug: string): string;
19
+ /** Category (keyword) job listing. */
20
+ declare function jobsCategoryPath(categorySlug: string): string;
21
+ /** Skill job listing. */
22
+ declare function jobsSkillPath(skillSlug: string): string;
23
+ /** Location job listing. */
24
+ declare function jobsLocationPath(placeSlug: string): string;
25
+ /** Company profile. */
26
+ declare function companyPath(companySlug: string): string;
27
+ /** Company market (sector) listing. */
28
+ declare function companyMarketPath(marketSlug: string): string;
29
+ /** A company's salary overview. */
30
+ declare function companySalaryPath(companySlug: string): string;
31
+ /** Salary page for a job title. */
32
+ declare function salaryTitlePath(titleSlug: string): string;
33
+ /** Salary page for a skill. */
34
+ declare function salarySkillPath(skillSlug: string): string;
35
+ /** Salary page for a location. */
36
+ declare function salaryLocationPath(placeSlug: string): string;
37
+ /** Blog post. */
38
+ declare function blogPostPath(postSlug: string): string;
39
+ /** Blog tag archive. */
40
+ declare function blogTagPath(tagSlug: string): string;
41
+ /** Blog author archive. */
42
+ declare function blogAuthorPath(authorSlug: string): string;
43
+ /**
44
+ * Static top-level board paths (indexed marketing + index surfaces). Kept
45
+ * here so the sitemap and consumers share one definition of the chrome
46
+ * routes too.
47
+ */
48
+ declare const BOARD_PATHS: {
49
+ readonly home: "/";
50
+ readonly jobs: "/jobs";
51
+ readonly companies: "/companies";
52
+ readonly salaries: "/salaries";
53
+ readonly salaryCompanies: "/salaries/companies";
54
+ readonly salaryTitles: "/salaries/titles";
55
+ readonly salarySkills: "/salaries/skills";
56
+ readonly salaryLocations: "/salaries/locations";
57
+ readonly blog: "/blog";
58
+ readonly about: "/about";
59
+ readonly privacyPolicy: "/privacy-policy";
60
+ readonly termsOfService: "/terms-of-service";
61
+ readonly cookiePolicy: "/cookie-policy";
62
+ readonly impressum: "/impressum";
63
+ readonly talent: "/talent";
64
+ readonly employers: "/employers";
65
+ };
66
+ /**
67
+ * Prefix a board-relative path with the board origin. A trailing slash on
68
+ * the origin is tolerated (stripped) so callers need not normalise first.
69
+ */
70
+ declare function boardUrl(origin: string, path: string): string;
71
+
72
+ export { BOARD_PATHS, blogAuthorPath, blogPostPath, blogTagPath, boardUrl, companyMarketPath, companyPath, companySalaryPath, jobDetailPath, jobsCategoryPath, jobsLocationPath, jobsSkillPath, salaryLocationPath, salarySkillPath, salaryTitlePath };
package/dist/paths.js ADDED
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/paths/index.ts
21
+ var paths_exports = {};
22
+ __export(paths_exports, {
23
+ BOARD_PATHS: () => BOARD_PATHS,
24
+ blogAuthorPath: () => blogAuthorPath,
25
+ blogPostPath: () => blogPostPath,
26
+ blogTagPath: () => blogTagPath,
27
+ boardUrl: () => boardUrl,
28
+ companyMarketPath: () => companyMarketPath,
29
+ companyPath: () => companyPath,
30
+ companySalaryPath: () => companySalaryPath,
31
+ jobDetailPath: () => jobDetailPath,
32
+ jobsCategoryPath: () => jobsCategoryPath,
33
+ jobsLocationPath: () => jobsLocationPath,
34
+ jobsSkillPath: () => jobsSkillPath,
35
+ salaryLocationPath: () => salaryLocationPath,
36
+ salarySkillPath: () => salarySkillPath,
37
+ salaryTitlePath: () => salaryTitlePath
38
+ });
39
+ module.exports = __toCommonJS(paths_exports);
40
+ function jobDetailPath(companySlug, jobSlug) {
41
+ return `/companies/${companySlug}/jobs/${jobSlug}`;
42
+ }
43
+ function jobsCategoryPath(categorySlug) {
44
+ return `/jobs/${categorySlug}`;
45
+ }
46
+ function jobsSkillPath(skillSlug) {
47
+ return `/jobs/skills/${skillSlug}`;
48
+ }
49
+ function jobsLocationPath(placeSlug) {
50
+ return `/jobs/locations/${placeSlug}`;
51
+ }
52
+ function companyPath(companySlug) {
53
+ return `/companies/${companySlug}`;
54
+ }
55
+ function companyMarketPath(marketSlug) {
56
+ return `/companies/markets/${marketSlug}`;
57
+ }
58
+ function companySalaryPath(companySlug) {
59
+ return `/companies/${companySlug}/salaries`;
60
+ }
61
+ function salaryTitlePath(titleSlug) {
62
+ return `/salaries/titles/${titleSlug}`;
63
+ }
64
+ function salarySkillPath(skillSlug) {
65
+ return `/salaries/skills/${skillSlug}`;
66
+ }
67
+ function salaryLocationPath(placeSlug) {
68
+ return `/salaries/locations/${placeSlug}`;
69
+ }
70
+ function blogPostPath(postSlug) {
71
+ return `/blog/${postSlug}`;
72
+ }
73
+ function blogTagPath(tagSlug) {
74
+ return `/blog/tag/${tagSlug}`;
75
+ }
76
+ function blogAuthorPath(authorSlug) {
77
+ return `/blog/author/${authorSlug}`;
78
+ }
79
+ var BOARD_PATHS = {
80
+ home: "/",
81
+ jobs: "/jobs",
82
+ companies: "/companies",
83
+ salaries: "/salaries",
84
+ salaryCompanies: "/salaries/companies",
85
+ salaryTitles: "/salaries/titles",
86
+ salarySkills: "/salaries/skills",
87
+ salaryLocations: "/salaries/locations",
88
+ blog: "/blog",
89
+ about: "/about",
90
+ privacyPolicy: "/privacy-policy",
91
+ termsOfService: "/terms-of-service",
92
+ cookiePolicy: "/cookie-policy",
93
+ impressum: "/impressum",
94
+ talent: "/talent",
95
+ employers: "/employers"
96
+ };
97
+ function boardUrl(origin, path) {
98
+ return `${origin.replace(/\/+$/, "")}${path}`;
99
+ }
package/dist/paths.mjs ADDED
@@ -0,0 +1,78 @@
1
+ // src/paths/index.ts
2
+ function jobDetailPath(companySlug, jobSlug) {
3
+ return `/companies/${companySlug}/jobs/${jobSlug}`;
4
+ }
5
+ function jobsCategoryPath(categorySlug) {
6
+ return `/jobs/${categorySlug}`;
7
+ }
8
+ function jobsSkillPath(skillSlug) {
9
+ return `/jobs/skills/${skillSlug}`;
10
+ }
11
+ function jobsLocationPath(placeSlug) {
12
+ return `/jobs/locations/${placeSlug}`;
13
+ }
14
+ function companyPath(companySlug) {
15
+ return `/companies/${companySlug}`;
16
+ }
17
+ function companyMarketPath(marketSlug) {
18
+ return `/companies/markets/${marketSlug}`;
19
+ }
20
+ function companySalaryPath(companySlug) {
21
+ return `/companies/${companySlug}/salaries`;
22
+ }
23
+ function salaryTitlePath(titleSlug) {
24
+ return `/salaries/titles/${titleSlug}`;
25
+ }
26
+ function salarySkillPath(skillSlug) {
27
+ return `/salaries/skills/${skillSlug}`;
28
+ }
29
+ function salaryLocationPath(placeSlug) {
30
+ return `/salaries/locations/${placeSlug}`;
31
+ }
32
+ function blogPostPath(postSlug) {
33
+ return `/blog/${postSlug}`;
34
+ }
35
+ function blogTagPath(tagSlug) {
36
+ return `/blog/tag/${tagSlug}`;
37
+ }
38
+ function blogAuthorPath(authorSlug) {
39
+ return `/blog/author/${authorSlug}`;
40
+ }
41
+ var BOARD_PATHS = {
42
+ home: "/",
43
+ jobs: "/jobs",
44
+ companies: "/companies",
45
+ salaries: "/salaries",
46
+ salaryCompanies: "/salaries/companies",
47
+ salaryTitles: "/salaries/titles",
48
+ salarySkills: "/salaries/skills",
49
+ salaryLocations: "/salaries/locations",
50
+ blog: "/blog",
51
+ about: "/about",
52
+ privacyPolicy: "/privacy-policy",
53
+ termsOfService: "/terms-of-service",
54
+ cookiePolicy: "/cookie-policy",
55
+ impressum: "/impressum",
56
+ talent: "/talent",
57
+ employers: "/employers"
58
+ };
59
+ function boardUrl(origin, path) {
60
+ return `${origin.replace(/\/+$/, "")}${path}`;
61
+ }
62
+ export {
63
+ BOARD_PATHS,
64
+ blogAuthorPath,
65
+ blogPostPath,
66
+ blogTagPath,
67
+ boardUrl,
68
+ companyMarketPath,
69
+ companyPath,
70
+ companySalaryPath,
71
+ jobDetailPath,
72
+ jobsCategoryPath,
73
+ jobsLocationPath,
74
+ jobsSkillPath,
75
+ salaryLocationPath,
76
+ salarySkillPath,
77
+ salaryTitlePath
78
+ };
@@ -1,4 +1,4 @@
1
- import { b as Schemas, L as ListEnvelope, m as RelatedSearch } from './jobs-Di4AV-02.mjs';
1
+ import { b as Schemas, L as ListEnvelope, m as RelatedSearch } from './jobs-IIJtDgzX.mjs';
2
2
 
3
3
  /** Author shape embedded on posts (no `object` discriminator). */
4
4
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -1,4 +1,4 @@
1
- import { b as Schemas, L as ListEnvelope, m as RelatedSearch } from './jobs-Di4AV-02.js';
1
+ import { b as Schemas, L as ListEnvelope, m as RelatedSearch } from './jobs-IIJtDgzX.js';
2
2
 
3
3
  /** Author shape embedded on posts (no `object` discriminator). */
4
4
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
package/dist/seo.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-D-BGZpDC.mjs';
2
- import { P as PublicBoard } from './board-BTVapQiL.mjs';
3
- import { P as PublicJob } from './jobs-Di4AV-02.mjs';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-BfEEEOHj.mjs';
2
+ import { P as PublicBoard } from './board-DgDC0T4g.mjs';
3
+ import { P as PublicJob } from './jobs-IIJtDgzX.mjs';
4
4
  import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.mjs';
5
5
 
6
6
  /**
package/dist/seo.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-B-zJKjkk.js';
2
- import { P as PublicBoard } from './board-0yI5ZRJw.js';
3
- import { P as PublicJob } from './jobs-Di4AV-02.js';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed, C as CompanyCategorySalary, a as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './salaries-CL_00fNX.js';
2
+ import { P as PublicBoard } from './board-Id19Yg8-.js';
3
+ import { P as PublicJob } from './jobs-IIJtDgzX.js';
4
4
  import { B as BoardLabelOverrides } from './ui-copy-rlfoH9P3.js';
5
5
 
6
6
  /**
package/dist/server.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './jobs-Di4AV-02.mjs';
3
- import './board-BTVapQiL.mjs';
4
- import './salaries-D-BGZpDC.mjs';
2
+ import './jobs-IIJtDgzX.mjs';
3
+ import './board-DgDC0T4g.mjs';
4
+ import './salaries-BfEEEOHj.mjs';
5
5
 
6
6
  /**
7
7
  * Session cookie codec — pure (no framework imports, no node imports) so it
package/dist/server.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './jobs-Di4AV-02.js';
3
- import './board-0yI5ZRJw.js';
4
- import './salaries-B-zJKjkk.js';
2
+ import './jobs-IIJtDgzX.js';
3
+ import './board-Id19Yg8-.js';
4
+ import './salaries-CL_00fNX.js';
5
5
 
6
6
  /**
7
7
  * Session cookie codec — pure (no framework imports, no node imports) so it
@@ -1,7 +1,7 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './jobs-Di4AV-02.mjs';
3
- import './board-BTVapQiL.mjs';
4
- import './salaries-D-BGZpDC.mjs';
2
+ import './jobs-IIJtDgzX.mjs';
3
+ import './board-DgDC0T4g.mjs';
4
+ import './salaries-BfEEEOHj.mjs';
5
5
 
6
6
  /**
7
7
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
package/dist/sitemap.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './jobs-Di4AV-02.js';
3
- import './board-0yI5ZRJw.js';
4
- import './salaries-B-zJKjkk.js';
2
+ import './jobs-IIJtDgzX.js';
3
+ import './board-Id19Yg8-.js';
4
+ import './salaries-CL_00fNX.js';
5
5
 
6
6
  /**
7
7
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board