@cavuno/board 4.12.0 → 4.13.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/CHANGELOG.md +12 -0
- package/dist/{_spec-ChuT3QX8.d.mts → _spec-mFq9K67X.d.mts} +2 -0
- package/dist/{_spec-ChuT3QX8.d.ts → _spec-mFq9K67X.d.ts} +2 -0
- package/dist/{blog-VbcrwKk9.d.ts → blog-BJF7uypj.d.ts} +1 -1
- package/dist/{blog-BB_l6xes.d.mts → blog-ClPGMp-z.d.mts} +1 -1
- package/dist/{board-BJCKz-Is.d.mts → board-CkYDc1Lz.d.mts} +2 -2
- package/dist/{board-CWQjFHWJ.d.ts → board-Po58Sn65.d.ts} +2 -2
- package/dist/{breadcrumbs-BoIXFh0q.d.mts → breadcrumbs-BSP53mOY.d.mts} +18 -6
- package/dist/{breadcrumbs-6TB8Lw-C.d.ts → breadcrumbs-BZzQwS8O.d.ts} +18 -6
- package/dist/browser/cavuno-board.global.min.js +1 -1
- package/dist/{chunk-6454IFHS.mjs → chunk-OPMJ6YH5.mjs} +6 -3
- package/dist/filters.d.mts +2 -2
- package/dist/filters.d.ts +2 -2
- package/dist/format.d.mts +4 -4
- package/dist/format.d.ts +4 -4
- package/dist/format.mjs +1 -1
- package/dist/index.d.mts +12 -11
- package/dist/index.d.ts +12 -11
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/dist/{jobs-CV41Msa7.d.mts → jobs-BWpm-Jf0.d.mts} +1 -1
- package/dist/{jobs-CsoxD0mU.d.ts → jobs-hZ3Kezhg.d.ts} +1 -1
- package/dist/{search-DEVb6pdX.d.mts → search-DRIGekdi.d.mts} +1 -1
- package/dist/{search-ACYoyhh3.d.ts → search-DSLK6Cch.d.ts} +1 -1
- package/dist/{seo-BrC9ue1U.d.ts → seo-CMNJMZcT.d.ts} +1 -1
- package/dist/{seo-DvS9_GxS.d.mts → seo-D9wvr1nK.d.mts} +1 -1
- package/dist/seo-files.d.mts +2 -2
- package/dist/seo-files.d.ts +2 -2
- package/dist/seo.d.mts +6 -6
- package/dist/seo.d.ts +6 -6
- package/dist/seo.js +6 -3
- package/dist/seo.mjs +1 -1
- package/dist/server.d.mts +6 -6
- package/dist/server.d.ts +6 -6
- package/dist/sitemap.d.mts +6 -6
- package/dist/sitemap.d.ts +6 -6
- package/dist/suggest.d.mts +2 -2
- package/dist/suggest.d.ts +2 -2
- package/package.json +1 -1
- package/skills/cavuno-board-seo/JOB_AND_BREADCRUMBS.md +5 -2
- package/skills/manifest.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
This changelog records changes that affect Board API compatibility, exported
|
|
4
4
|
types, runtime behavior, or supported integration patterns.
|
|
5
5
|
|
|
6
|
+
## 4.13.0 — 2026-08-28
|
|
7
|
+
|
|
8
|
+
- **`board.context().contact.legalName`**: the operating company's registered
|
|
9
|
+
legal name, or `null` when unset. Use it as the JobPosting
|
|
10
|
+
`hiringOrganization` name when a job has no company of its own, ahead of the
|
|
11
|
+
board name — that is the order the hosted board emits, so a headless board
|
|
12
|
+
produces identical structured data. `buildJobPostingJsonLd` reads it from
|
|
13
|
+
`contact.legalName` automatically; a top-level `legalName` is also accepted.
|
|
14
|
+
- **Candidate profile visibility default**: a board can set the visibility new
|
|
15
|
+
candidate profiles start with, rather than every profile defaulting the same
|
|
16
|
+
way.
|
|
17
|
+
|
|
6
18
|
## 4.12.0 — 2026-08-28
|
|
7
19
|
|
|
8
20
|
- **`resolveApplyDecision`**: the apply-decision ladder now takes the board's
|
|
@@ -1893,6 +1893,8 @@ interface components {
|
|
|
1893
1893
|
contact: {
|
|
1894
1894
|
/** @description Public contact email (render as `mailto:`). Operator-set in settings › Contact & company details. */
|
|
1895
1895
|
email: string | null;
|
|
1896
|
+
/** @description The operating company's registered legal name, or `null` when unset. Use it as the JobPosting `hiringOrganization` name when a job has no company of its own, ahead of the board name — that is the order the hosted board emits, so a headless board produces identical structured data. */
|
|
1897
|
+
legalName: string | null;
|
|
1896
1898
|
/** @description Company website URL, sanitized to absolute http(s). Null when unset or non-http(s). */
|
|
1897
1899
|
websiteUrl: string | null;
|
|
1898
1900
|
/** @description X (Twitter) profile URL, normalized from the stored handle. */
|
|
@@ -1893,6 +1893,8 @@ interface components {
|
|
|
1893
1893
|
contact: {
|
|
1894
1894
|
/** @description Public contact email (render as `mailto:`). Operator-set in settings › Contact & company details. */
|
|
1895
1895
|
email: string | null;
|
|
1896
|
+
/** @description The operating company's registered legal name, or `null` when unset. Use it as the JobPosting `hiringOrganization` name when a job has no company of its own, ahead of the board name — that is the order the hosted board emits, so a headless board produces identical structured data. */
|
|
1897
|
+
legalName: string | null;
|
|
1896
1898
|
/** @description Company website URL, sanitized to absolute http(s). Null when unset or non-http(s). */
|
|
1897
1899
|
websiteUrl: string | null;
|
|
1898
1900
|
/** @description X (Twitter) profile URL, normalized from the stored handle. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as Schemas } from './_spec-
|
|
2
|
-
import { L as ListEnvelope, m as RelatedSearch } from './jobs-
|
|
1
|
+
import { S as Schemas } from './_spec-mFq9K67X.mjs';
|
|
2
|
+
import { L as ListEnvelope, m as RelatedSearch } from './jobs-BWpm-Jf0.mjs';
|
|
3
3
|
|
|
4
4
|
type PublicCompany = Schemas['CompanyPublic'];
|
|
5
5
|
/** A market (sector) a company operates in — name + its source slug. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { S as Schemas } from './_spec-
|
|
2
|
-
import { L as ListEnvelope, m as RelatedSearch } from './jobs-
|
|
1
|
+
import { S as Schemas } from './_spec-mFq9K67X.js';
|
|
2
|
+
import { L as ListEnvelope, m as RelatedSearch } from './jobs-hZ3Kezhg.js';
|
|
3
3
|
|
|
4
4
|
type PublicCompany = Schemas['CompanyPublic'];
|
|
5
5
|
/** A market (sector) a company operates in — name + its source slug. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-
|
|
2
|
-
import { P as PublicJob } from './jobs-
|
|
1
|
+
import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-CkYDc1Lz.mjs';
|
|
2
|
+
import { P as PublicJob } from './jobs-BWpm-Jf0.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Wire enum for `salaryTimeframe`. Defined here (not re-exported from any
|
|
@@ -91,9 +91,6 @@ declare function formatSalaryRange(language: string, min: number | null, max: nu
|
|
|
91
91
|
*
|
|
92
92
|
* Named exclusions (hosted behaviours with no wire twin, recorded in the
|
|
93
93
|
* public API contract):
|
|
94
|
-
* - `board.companyLegalName` — hosted falls back to it for the
|
|
95
|
-
* organization name between `company.name` and `board.name`; the wire
|
|
96
|
-
* board context does not expose it.
|
|
97
94
|
* - `board.companyWebsiteUrl` — hosted falls back to it for `sameAs` when
|
|
98
95
|
* the company has no website; not on the wire.
|
|
99
96
|
* - the hosted `job.place`/`locationLabel` jobLocation fallback (used when
|
|
@@ -103,7 +100,22 @@ declare function formatSalaryRange(language: string, min: number | null, max: nu
|
|
|
103
100
|
|
|
104
101
|
type JsonLdObject = Record<string, unknown>;
|
|
105
102
|
/** The only board fields JSON-LD needs — keeps callers' shapes flexible. */
|
|
106
|
-
type JsonLdBoard = Pick<PublicBoard, 'name' | 'logoUrl'
|
|
103
|
+
type JsonLdBoard = Pick<PublicBoard, 'name' | 'logoUrl'> & {
|
|
104
|
+
/**
|
|
105
|
+
* The operating company's registered name, used as the organization name
|
|
106
|
+
* for a job with no company of its own — ahead of the board's display
|
|
107
|
+
* name, matching the hosted board.
|
|
108
|
+
*
|
|
109
|
+
* Read from `contact.legalName`, which is where `board.context()` puts it,
|
|
110
|
+
* so passing the context object straight through (the documented call
|
|
111
|
+
* shape) just works. `legalName` at the top level is accepted too, for
|
|
112
|
+
* callers that flatten the board into their own view model.
|
|
113
|
+
*/
|
|
114
|
+
contact?: {
|
|
115
|
+
legalName?: string | null;
|
|
116
|
+
} | null;
|
|
117
|
+
legalName?: string | null;
|
|
118
|
+
};
|
|
107
119
|
/**
|
|
108
120
|
* Worldwide-remote jobs must still emit `applicantLocationRequirements`
|
|
109
121
|
* next to TELECOMMUTE (Google requires a location signal), so the hosted
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-
|
|
2
|
-
import { P as PublicJob } from './jobs-
|
|
1
|
+
import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-Po58Sn65.js';
|
|
2
|
+
import { P as PublicJob } from './jobs-hZ3Kezhg.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Wire enum for `salaryTimeframe`. Defined here (not re-exported from any
|
|
@@ -91,9 +91,6 @@ declare function formatSalaryRange(language: string, min: number | null, max: nu
|
|
|
91
91
|
*
|
|
92
92
|
* Named exclusions (hosted behaviours with no wire twin, recorded in the
|
|
93
93
|
* public API contract):
|
|
94
|
-
* - `board.companyLegalName` — hosted falls back to it for the
|
|
95
|
-
* organization name between `company.name` and `board.name`; the wire
|
|
96
|
-
* board context does not expose it.
|
|
97
94
|
* - `board.companyWebsiteUrl` — hosted falls back to it for `sameAs` when
|
|
98
95
|
* the company has no website; not on the wire.
|
|
99
96
|
* - the hosted `job.place`/`locationLabel` jobLocation fallback (used when
|
|
@@ -103,7 +100,22 @@ declare function formatSalaryRange(language: string, min: number | null, max: nu
|
|
|
103
100
|
|
|
104
101
|
type JsonLdObject = Record<string, unknown>;
|
|
105
102
|
/** The only board fields JSON-LD needs — keeps callers' shapes flexible. */
|
|
106
|
-
type JsonLdBoard = Pick<PublicBoard, 'name' | 'logoUrl'
|
|
103
|
+
type JsonLdBoard = Pick<PublicBoard, 'name' | 'logoUrl'> & {
|
|
104
|
+
/**
|
|
105
|
+
* The operating company's registered name, used as the organization name
|
|
106
|
+
* for a job with no company of its own — ahead of the board's display
|
|
107
|
+
* name, matching the hosted board.
|
|
108
|
+
*
|
|
109
|
+
* Read from `contact.legalName`, which is where `board.context()` puts it,
|
|
110
|
+
* so passing the context object straight through (the documented call
|
|
111
|
+
* shape) just works. `legalName` at the top level is accepted too, for
|
|
112
|
+
* callers that flatten the board into their own view model.
|
|
113
|
+
*/
|
|
114
|
+
contact?: {
|
|
115
|
+
legalName?: string | null;
|
|
116
|
+
} | null;
|
|
117
|
+
legalName?: string | null;
|
|
118
|
+
};
|
|
107
119
|
/**
|
|
108
120
|
* Worldwide-remote jobs must still emit `applicantLocationRequirements`
|
|
109
121
|
* next to TELECOMMUTE (Google requires a location signal), so the hosted
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var CavunoBoard=(()=>{var J=Object.defineProperty;var Nt=Object.getOwnPropertyDescriptor;var Dt=Object.getOwnPropertyNames;var $t=Object.prototype.hasOwnProperty;var jt=(e,t,o)=>t in e?J(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var _=(e,t)=>{for(var o in t)J(e,o,{get:t[o],enumerable:!0})},Qt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Dt(t))!$t.call(e,r)&&r!==o&&J(e,r,{get:()=>t[r],enumerable:!(n=Nt(t,r))||n.enumerable});return e};var qt=e=>Qt(J({},"__esModule",{value:!0}),e);var P=(e,t,o)=>jt(e,typeof t!="symbol"?t+"":t,o);var No={};_(No,{ACCESS_TOKEN_KEY:()=>T,BOARD_ACCESS_GRANT_KEY:()=>F,BOARD_API_ERROR_CODES:()=>de,BoardApiError:()=>B,BoardClient:()=>x,REFRESH_TOKEN_KEY:()=>L,SDK_VERSION:()=>N,createBoardClient:()=>Wt,filters:()=>te,format:()=>ce,isBoardApiError:()=>E,isBoardPasswordRequired:()=>fe,isColdRule:()=>Ve,isConflict:()=>Ce,isForbidden:()=>he,isNotFound:()=>ye,isOwnMessage:()=>He,isRateLimited:()=>Se,isSafeApplicationUrl:()=>X,isUnauthorized:()=>ge,isValidationError:()=>be,lastOwnMessageId:()=>Ke,paginate:()=>Ge,paths:()=>pe,resolveApplyAction:()=>Ye,resolveApplyDecision:()=>ee,seo:()=>ue,suggest:()=>me});var de=["internal_error","validation_bad_request","validation_payload_too_large","rate_limited","rate_limit_unavailable","search_unavailable","too_many_filter_values","pagination_invalid_cursor","pagination_offset_too_large","auth_unauthenticated","auth_forbidden","plan_upgrade_required","unknown_error","boards_not_found","board_page_not_found","board_auth_email_taken","board_auth_invalid_credentials","board_auth_invalid_token","board_auth_registration_disabled","board_auth_token_expired","invalid_current_password","no_password","same_email","email_taken","invalid_token","board_password_required","board_password_invalid","jobs_not_found","jobs_invalid_filter","categories_not_found","skills_not_found","places_not_found","companies_not_found","company_markets_not_found","company_salary_not_found","company_category_salary_not_found","salaries_title_not_found","salaries_skill_not_found","salaries_location_not_found","salaries_title_location_not_found","salaries_skill_location_not_found","blog_post_not_found","blog_author_not_found","blog_tag_not_found","talent_not_found","talent_directory_not_found","talent_directory_restricted","job_recommendations_not_found","recommended_talent_not_found","job_alert_not_found","job_alerts_disabled","candidate_alert_limit_reached","candidate_alert_not_found","candidate_entry_not_found","candidate_handle_taken","candidate_job_not_found","candidate_notification_preference_paused","resume_invalid_file","resume_upload_forbidden","applications_external_apply_only","applications_country_not_allowed","applications_guest_not_allowed","applications_job_not_found","applications_not_found","applications_resume_invalid_file","applications_unprocessable","messaging_application_not_found","messaging_application_not_linked","messaging_blocked","messaging_cannot_block_self","messaging_cold_rule","messaging_conversation_not_found","messaging_disabled","messaging_edit_window_expired","messaging_message_deleted","messaging_message_not_found","messaging_not_author","messaging_not_participant","messaging_not_permitted","messaging_not_recipient","messaging_rate_limited","messaging_recipient_not_found","messaging_recipient_not_open","messaging_unsend_window_expired","employer_applicant_not_found","employer_ats_unprocessable","employer_checkout_failed","employer_company_exists","employer_company_name_taken","employer_company_not_found","employer_job_not_found","employer_job_slug_taken","employer_jobs_quota_exceeded","employer_not_member","employer_payment_required","employer_pipeline_stage_not_found","employer_member_not_found","employer_invite_not_found","not_company_admin","not_company_member","company_deletion_disabled","last_admin","already_member","already_invited","invalid_email","invite_email_mismatch","candidate_role","job_not_published","paywall_already_active","paywall_disabled","paywall_invalid_checkout_session","paywall_no_candidate_profile","paywall_no_recurring_subscription","paywall_offer_not_found","talent_access_unavailable","company_required","already_on_plan","talent_access_required","messaging_talent_access_required","stripe_not_connected","job_posting_logo_lookup_unavailable","job_posting_logo_not_found","job_posting_rejected"],B=class extends Error{constructor(o){super(o.message);P(this,"status");P(this,"code");P(this,"details");P(this,"requestId");P(this,"raw");this.name="BoardApiError",this.status=o.status,this.code=o.code,this.details=o.details,this.requestId=o.requestId,this.raw=o.raw}};function E(e){return e instanceof Error&&e.name==="BoardApiError"&&typeof e.status=="number"&&typeof e.code=="string"}function ye(e){return E(e)&&e.status===404}function ge(e){return E(e)&&e.status===401}function fe(e){return E(e)&&e.status===401&&e.code==="board_password_required"}function he(e){return E(e)&&e.status===403}function be(e){return E(e)&&e.status===400&&e.code==="validation_bad_request"}function Se(e){return E(e)&&e.status===429}function Ce(e){return E(e)&&e.status===409}function Oe(e){let t=new URLSearchParams;if(!e)return t;for(let[o,n]of Object.entries(e))if(n!=null)if(Array.isArray(n))for(let r of n)r!=null&&t.append(o,String(r));else t.append(o,String(n));return t}function Pe(e){let t=5381;for(let n=0;n<e.length;n++)t=(t<<5)+t+e.charCodeAt(n)>>>0;return`${e.replace(/[^a-zA-Z0-9_-]/g,"_")}-${t.toString(36)}`}var T="cavuno_board_access_token",L="cavuno_board_refresh_token",F="cavuno_board_access_grant";function Ee(){return typeof globalThis.document<"u"}function Gt(){let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,o)=>{e.set(t,o)},removeItem:t=>{e.delete(t)}}}function Ht(e,t){if(!Ee())throw new Error(`storage mode '${e}' is browser-only \u2014 use 'nostore' + per-call headers on the server`);let o;try{if(o=e==="local"?globalThis.localStorage:globalThis.sessionStorage,!o)throw new Error("unavailable")}catch{throw new Error(`storage mode '${e}' is unavailable in this browsing context (storage access is blocked \u2014 e.g. a sandboxed or third-party iframe). Use 'memory', or 'nostore' + per-call headers.`)}let n=t?`:${Pe(t)}`:"";return{getItem:r=>o.getItem(`${r}${n}`),setItem:(r,i)=>{o.setItem(`${r}${n}`,i)},removeItem:r=>{o.removeItem(`${r}${n}`)}}}var Vt=Symbol.for("@cavuno/board:nostore");var Kt={[Vt]:!0,getItem:()=>null,setItem:()=>{},removeItem:()=>{}};function Ae(e,t){let o=e??(Ee()?"memory":"nostore");if(typeof o=="object")return o;switch(o){case"memory":return Gt();case"nostore":return Kt;case"local":case"session":return Ht(o,t);default:throw new Error(`Unknown storage mode '${String(o)}'`)}}async function w(e,t){await e.setItem(T,t.accessToken),await e.setItem(L,t.refreshToken)}async function ve(e){await e.removeItem(T),await e.removeItem(L)}var N="4.12.0";function Yt(e){return typeof e=="string"||e instanceof URLSearchParams||typeof FormData<"u"&&e instanceof FormData||typeof Blob<"u"&&e instanceof Blob||e instanceof ArrayBuffer||typeof ReadableStream<"u"&&e instanceof ReadableStream}function zt(e){try{let t=new URL(e);for(let o of new Set(t.searchParams.keys()))t.searchParams.delete(o),t.searchParams.set(o,"[REDACTED]");return t.toString()}catch{return e.replace(/([?&][^=&#]+)=([^&#]*)/g,"$1=[REDACTED]")}}var x=class{constructor(t){P(this,"storage");P(this,"basePath");P(this,"options");this.options=t,this.storage=t.storage;let o=t.baseUrl.replace(/\/+$/,"");this.basePath=`${o}/v1/boards/${encodeURIComponent(t.board)}`}async fetch(t,o={}){let{body:n,query:r,headers:i,...a}=o,s=(o.method??"GET").toUpperCase(),p=`${this.basePath}${t}`,u=Oe(r).toString();u&&(p+=`?${u}`);let d=n!==void 0&&!Yt(n),m=n===void 0?void 0:d?JSON.stringify(n):n,y=new Headers({accept:"application/json"});d&&y.set("content-type","application/json");for(let[v,Z]of Object.entries(this.options.globalHeaders??{}))y.set(v,Z);let g=await this.storage.getItem(T);g!==null&&y.set("authorization",`Bearer ${g}`);let C=await this.storage.getItem(F);C!==null&&y.set("x-board-access",C),i&&new Headers(i).forEach((v,Z)=>{y.set(Z,v)}),(s!=="GET"||y.has("authorization")||y.has("x-board-access"))&&!y.has("x-cavuno-sdk")&&y.set("x-cavuno-sdk",`board@${N}`);let f={url:p,init:{...a,method:s,headers:y,body:m}};this.options.onRequest&&(f=await this.options.onRequest(f));let A=zt(f.url);this.options.logger?.debug(`${s} ${A}`);let c=await globalThis.fetch(f.url,f.init);if(this.options.logger?.debug(`${c.status} ${s} ${A}`),this.options.onResponse&&await this.options.onResponse(c.clone(),f),c.status===204)return;if(c.ok)return await c.json();let b;try{b=await c.json()}catch{b=void 0}let O=b?.error,R=O&&typeof O.code=="string"&&typeof O.message=="string"?new B({status:c.status,code:O.code,message:O.message,details:O.details,requestId:O.requestId,raw:b}):new B({status:c.status,code:"unknown_error",message:c.statusText||"Request failed",raw:b});throw this.options.logger?.error(`${R.status} ${R.code} ${s} ${A}`),R}};var Be="https://api.cavuno.com";function Re(e){async function t(n){return await w(e.storage,n),n}async function o(n){if(n?.refreshToken)return n.refreshToken;let r=await e.storage.getItem(L);if(r===null)throw new Error("No refresh token available \u2014 pass { refreshToken } or configure auth.storage");return r}return{async register(n,r){let i=await e.fetch("/auth/register",{...r,method:"POST",body:n});return t(i)},async login(n,r){let i=await e.fetch("/auth/login",{...r,method:"POST",body:n});return t(i)},async refresh(n,r){let i=await o(n),a=await e.fetch("/auth/refresh",{...r,method:"POST",body:{refreshToken:i}});return t(a)},async logout(n,r){let i=await o(n);await e.fetch("/auth/logout",{...r,method:"POST",body:{refreshToken:i}}),await ve(e.storage)},verifyEmail(n,r){return e.fetch("/auth/verify-email",{...r,method:"POST",body:n})},verifyEmailWithCode(n,r){return e.fetch("/auth/verify-email/otp",{...r,method:"POST",body:n})},resendVerification(n){return e.fetch("/auth/verify-email/resend",{...n,method:"POST"})},forgotPassword(n,r){return e.fetch("/auth/forgot-password",{...r,method:"POST",body:n})},resetPassword(n,r){return e.fetch("/auth/reset-password",{...r,method:"POST",body:n})},requestMagicLink(n,r){return e.fetch("/auth/magic-link",{...r,method:"POST",body:n})},async consumeMagicLink(n,r){let i=await e.fetch("/auth/magic-link/consume",{...r,method:"POST",body:n});return t(i)},getOAuthAuthorizationUrl(n,r,i){return e.fetch(`/auth/oauth/${n}`,{...i,method:"GET",query:r})},async exchangeOAuth(n,r){let i=await e.fetch("/auth/oauth/exchange",{...r,method:"POST",body:n});return t(i)}}}function _e(e){return{posts:{list(t,o){return e.fetch("/blog/posts",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/blog/posts/${encodeURIComponent(t)}`,{...n,query:o})},adjacent(t,o){return e.fetch(`/blog/posts/${encodeURIComponent(t)}/adjacent`,o)},similar(t,o,n){return e.fetch(`/blog/posts/${encodeURIComponent(t)}/similar`,{...n,query:o})}},tags:{list(t,o){return e.fetch("/blog/tags",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/blog/tags/${encodeURIComponent(t)}`,{...n,query:o})}},authors:{list(t,o){return e.fetch("/blog/authors",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/blog/authors/${encodeURIComponent(t)}`,{...n,query:o})}},search(t,o,n){return e.fetch("/blog/search",{...n,method:"POST",body:t,query:o})}}}function Te(e){let t=Object.assign((n,r)=>e.fetch("/companies/markets",{...r,query:n}),{resolve(n,r){return e.fetch(`/companies/markets/${encodeURIComponent(n)}`,r)}}),o=Object.assign((n,r)=>e.fetch(`/companies/${encodeURIComponent(n)}/salaries`,r),{summary(n,r){return e.fetch(`/companies/${encodeURIComponent(n)}/salaries/summary`,r)},category(n,r,i,a){return e.fetch(`/companies/${encodeURIComponent(n)}/salaries/${encodeURIComponent(r)}`,{...a,query:i})}});return{list(n,r){return e.fetch("/companies",{...r,query:n})},retrieve(n,r,i){return e.fetch(`/companies/${encodeURIComponent(n)}`,{...i,query:r})},search(n,r,i){return e.fetch("/companies/search",{...i,method:"POST",body:n,query:r})},listJobs(n,r,i){return e.fetch(`/companies/${encodeURIComponent(n)}/jobs`,{...i,query:r})},similar(n,r,i){return e.fetch(`/companies/${encodeURIComponent(n)}/similar`,{...i,query:r})},markets:t,salaries:o}}function Le(e){return{jobs(t,o){return e.fetch("/embed/jobs",{...o,query:t})}}}function Fe(e){return{subscribe(t,o){return e.fetch("/job-alerts",{...o,method:"POST",body:t})},confirm(t,o){return e.fetch("/job-alerts/confirm",{...o,method:"POST",body:t})},resendConfirmation(t,o){return e.fetch("/job-alerts/resend-confirmation",{...o,method:"POST",body:t})},manage(t,o){return e.fetch("/job-alerts/manage",{...o,query:t})},unsubscribe(t,o){return e.fetch("/job-alerts/unsubscribe",{...o,method:"POST",body:t})},resubscribe(t,o){return e.fetch("/job-alerts/resubscribe",{...o,method:"POST",body:t})},updatePreference(t,o){return e.fetch("/job-alerts/preferences",{...o,method:"POST",body:t})},deletePreference(t,o){return e.fetch("/job-alerts/preferences",{...o,method:"DELETE",body:t})}}}function xe(e){return{plans(t,o){return e.fetch("/job-postings/plans",{...o,query:t})},create(t,o){return e.fetch("/job-postings",{...o,method:"POST",body:t})},uploadLogo(t,o){let n=new FormData;return n.append("file",t),e.fetch("/job-postings/logo",{...o,method:"POST",body:n})},fetchLogoByDomain(t,o){return e.fetch("/job-postings/logo/fetch",{...o,query:{domain:t}})},sendBillingVerification(t,o){return e.fetch("/job-postings/send-verification",{...o,method:"POST",body:t})},getBillingOptions(t,o){return e.fetch("/job-postings/billing-options",{...o,method:"POST",body:t})}}}function Ie(e){return{list(t,o){return e.fetch("/jobs",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/jobs/${encodeURIComponent(t)}`,{...n,query:o})},search(t,o,n){return e.fetch("/jobs/search",{...n,method:"POST",body:t,query:o})},similar(t,o,n){return e.fetch(`/jobs/${encodeURIComponent(t)}/similar`,{...n,query:o})},apply(t,o,n){return e.fetch(`/jobs/${encodeURIComponent(t)}/apply`,{...n,method:"POST",body:o??{}})},createApplyIntent(t,o,n){return e.fetch(`/jobs/${encodeURIComponent(t)}/apply-intents`,{...n,method:"POST",body:o})},prepareApplyApproval(t,o,n){return e.fetch(`/jobs/${encodeURIComponent(t)}/apply-approvals`,{...n,method:"POST",body:o})},uploadApplicationResume(t,o,n,r){let i=new FormData;return i.append("file",o),n?.applicationId&&i.append("applicationId",n.applicationId),e.fetch(`/jobs/${encodeURIComponent(t)}/apply/resume`,{...r,method:"POST",body:i})},myApplication(t,o){return e.fetch(`/jobs/${encodeURIComponent(t)}/application`,o)}}}function ke(e){return{retrieve(t,o){return e.fetch("/me",{...o,query:t})},delete(t){return e.fetch("/me",{...t,method:"DELETE"})},async updatePassword(t,o){let n=await e.fetch("/me/password",{...o,method:"POST",body:t});return await w(e.storage,n),n},requestEmailChange(t,o){return e.fetch("/me/email",{...o,method:"POST",body:t})},confirmEmailChange(t,o){return e.fetch("/me/email/confirm",{...o,method:"POST",body:t})},acceptInvite(t,o){return e.fetch("/me/invites/accept",{...o,method:"POST",body:t})},profile:{retrieve(t,o){return e.fetch("/me/profile",{...o,query:t})},update(t,o,n){return e.fetch("/me/profile",{...n,method:"PATCH",body:t,query:o})},handleAvailable(t,o){return e.fetch("/me/profile/handle-available",{...o,query:{handle:t}})},listExperience(t){return e.fetch("/me/profile/experience",t)},createExperience(t,o){return e.fetch("/me/profile/experience",{...o,method:"POST",body:t})},updateExperience(t,o,n){return e.fetch(`/me/profile/experience/${encodeURIComponent(t)}`,{...n,method:"PATCH",body:o})},deleteExperience(t,o){return e.fetch(`/me/profile/experience/${encodeURIComponent(t)}`,{...o,method:"DELETE"})},listEducation(t){return e.fetch("/me/profile/education",t)},createEducation(t,o){return e.fetch("/me/profile/education",{...o,method:"POST",body:t})},updateEducation(t,o,n){return e.fetch(`/me/profile/education/${encodeURIComponent(t)}`,{...n,method:"PATCH",body:o})},deleteEducation(t,o){return e.fetch(`/me/profile/education/${encodeURIComponent(t)}`,{...o,method:"DELETE"})},listSkills(t){return e.fetch("/me/profile/skills",t)},updateSkills(t,o){return e.fetch("/me/profile/skills",{...o,method:"PUT",body:t})},listLanguages(t){return e.fetch("/me/profile/languages",t)},updateLanguages(t,o){return e.fetch("/me/profile/languages",{...o,method:"PUT",body:t})},uploadAvatar(t,o){let n=new FormData;return n.append("file",t),e.fetch("/me/profile/avatar",{...o,method:"POST",body:n})}},notificationPreferences:{retrieve(t){return e.fetch("/me/notification-preferences",t)},update(t,o){return e.fetch("/me/notification-preferences",{...o,method:"PUT",body:t})},unsubscribeWithToken(t,o){return e.fetch("/me/notification-preferences/unsubscribe",{...o,method:"POST",body:t})}},companies:{search(t,o){return e.fetch("/me/companies/search",{...o,query:t})},list(t){return e.fetch("/me/companies",t)},create(t,o){return e.fetch("/me/companies",{...o,method:"POST",body:t})},claim(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/claim`,{...o,method:"POST"})},cancelClaim(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/claim`,{...o,method:"DELETE"})},retrieve(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}`,o)},update(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}`,{...n,method:"PATCH",body:o})},delete(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}`,{...o,method:"DELETE"})},listMembers(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/members`,o)},updateMemberRole(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/members/${encodeURIComponent(o)}`,{...r,method:"PATCH",body:n})},removeMember(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/members/${encodeURIComponent(o)}`,{...n,method:"DELETE"})},leave(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/membership`,{...o,method:"DELETE"})},listInvites(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/invites`,o)},createInvite(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/invites`,{...n,method:"POST",body:o})},revokeInvite(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/invites/${encodeURIComponent(o)}`,{...n,method:"DELETE"})},uploadLogo(t,o,n){let r=new FormData;return r.append("file",o),e.fetch(`/me/companies/${encodeURIComponent(t)}/logo`,{...n,method:"POST",body:r})},workEmail:{verify(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/work-email/verify`,{...n,method:"POST",body:o})},confirm(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/work-email/confirm`,{...n,method:"POST",body:o})}},jobs:{list(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs`,{...n,query:o})},retrieve(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}`,n)},create(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs`,{...n,method:"POST",body:o})},update(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}`,{...r,method:"PATCH",body:n})},delete(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}`,{...n,method:"DELETE"})},publish(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}/publish`,{...n,method:"POST"})},unpublish(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}/unpublish`,{...n,method:"POST"})},checkout(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}/checkout`,{...r,method:"POST",body:n})}},billingOptions:{list(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/billing-options`,o)}},billingPortal:{create(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/billing-portal`,{...n,method:"POST",body:o})}},jobStats:{retrieve(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/job-stats`,o)},timeseries(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/job-stats/timeseries`,{...n,query:o})}},profileStats:{retrieve(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/profile-stats`,o)},timeseries(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/profile-stats/timeseries`,{...n,query:o})}},recommendedTalent:{list(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/recommended-talent`,{...n,query:o})}},applicants:{list(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/applicants`,{...n,query:o})},move(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/applicants/${encodeURIComponent(o)}/stage`,{...r,method:"PATCH",body:n})},bulkMove(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/applicants/bulk/move`,{...n,method:"POST",body:o})},bulkReject(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/applicants/bulk/reject`,{...n,method:"POST",body:o})},addNote(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/applicants/${encodeURIComponent(o)}/notes`,{...r,method:"POST",body:n})}},pipelineStages:{create(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/pipeline-stages`,{...n,method:"POST",body:o})},update(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/pipeline-stages/${encodeURIComponent(o)}`,{...r,method:"PATCH",body:n})},remove(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/pipeline-stages/${encodeURIComponent(o)}`,{...n,method:"DELETE"})},reorder(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/pipeline-stages/reorder`,{...n,method:"PUT",body:o})}}},talentAccess:{retrieve(t){return e.fetch("/me/talent-access",t)},retrieveCandidate(t,o){return e.fetch(`/me/talent-access/candidates/${encodeURIComponent(t)}`,o)},checkout(t,o){return e.fetch("/me/talent-access/checkout",{...o,method:"POST",body:t})},retrieveCheckout(t,o){return e.fetch(`/me/talent-access/checkout/${encodeURIComponent(t)}`,o)},unlock(t,o){return e.fetch("/me/talent-access/unlocks",{...o,method:"POST",body:t})},upgrade(t,o){return e.fetch("/me/talent-access/upgrade",{...o,method:"POST",body:t})}},alerts:{list(t){return e.fetch("/me/alerts",t)},create(t,o){return e.fetch("/me/alerts",{...o,method:"POST",body:t})},retrieve(t,o){return e.fetch(`/me/alerts/${encodeURIComponent(t)}`,o)},update(t,o,n){return e.fetch(`/me/alerts/${encodeURIComponent(t)}`,{...n,method:"PUT",body:o})},remove(t,o){return e.fetch(`/me/alerts/${encodeURIComponent(t)}`,{...o,method:"DELETE"})}},applications:{list(t,o){return e.fetch("/me/applications",{...o,query:t})},retrieve(t,o){return e.fetch(`/me/applications/${encodeURIComponent(t)}`,o)},updateFacts(t,o,n){return e.fetch(`/me/applications/${encodeURIComponent(t)}`,{...n,method:"PATCH",body:o})},withdraw(t,o){return e.fetch(`/me/applications/${encodeURIComponent(t)}/withdraw`,{...o,method:"POST"})}},resume:{upload(t,o,n){let r=new FormData;return r.append("resume",t),o?.keepResumeOnFile&&r.append("keepResumeOnFile","true"),o?.importMode&&r.append("importMode",o.importMode),o?.confirmReplaceAll&&r.append("confirmReplaceAll","true"),e.fetch("/me/resume",{...n,method:"POST",body:r})},retrieve(t){return e.fetch("/me/resume",t)},delete(t){return e.fetch("/me/resume",{...t,method:"DELETE"})}},recommendedJobs:{list(t,o){return e.fetch("/me/recommended-jobs",{...o,query:t})}},savedJobs:{list(t,o){return e.fetch("/me/saved-jobs",{...o,query:t})},save(t,o,n){return e.fetch("/me/saved-jobs",{...n,method:"POST",body:t,query:o})},unsave(t,o,n){return e.fetch(`/me/saved-jobs/${encodeURIComponent(t)}`,{...n,method:"DELETE",query:o})}},conversations:{list(t,o){return e.fetch("/me/conversations",{...o,query:t})},unreadCount(t){return e.fetch("/me/conversations/unread-count",t)},retrieve(t,o){return e.fetch(`/me/conversations/${encodeURIComponent(t)}`,o)},listMessages(t,o,n){return e.fetch(`/me/conversations/${encodeURIComponent(t)}/messages`,{...n,query:o})},start(t,o){return e.fetch("/me/conversations",{...o,method:"POST",body:t})},startAboutApplication(t,o){return e.fetch("/me/conversations/about-application",{...o,method:"POST",body:t})},reply(t,o,n){return e.fetch(`/me/conversations/${encodeURIComponent(t)}/reply`,{...n,method:"POST",body:o})},markRead(t,o){return e.fetch(`/me/conversations/${encodeURIComponent(t)}/read`,{...o,method:"POST"})},archive(t,o){return e.fetch(`/me/conversations/${encodeURIComponent(t)}/archive`,{...o,method:"POST"})},unarchive(t,o){return e.fetch(`/me/conversations/${encodeURIComponent(t)}/unarchive`,{...o,method:"POST"})},findExisting(t,o){return e.fetch("/me/conversations/find-existing",{...o,query:t})}},blocks:{list(t){return e.fetch("/me/blocks",t)},create(t,o){return e.fetch("/me/blocks",{...o,method:"POST",body:t})},remove(t,o){return e.fetch(`/me/blocks/${encodeURIComponent(t)}`,{...o,method:"DELETE"})},status(t,o){return e.fetch(`/me/blocks/${encodeURIComponent(t)}`,o)}},messages:{edit(t,o,n){return e.fetch(`/me/messages/${encodeURIComponent(t)}`,{...n,method:"PATCH",body:o})},unsend(t,o){return e.fetch(`/me/messages/${encodeURIComponent(t)}`,{...o,method:"DELETE"})},report(t,o,n){return e.fetch(`/me/messages/${encodeURIComponent(t)}/report`,{...n,method:"POST",body:o})}},marketingConsent:{retrieve(t){return e.fetch("/me/marketing-consent",t)},grant(t){return e.fetch("/me/marketing-consent/grant",{...t,method:"POST"})},withdraw(t){return e.fetch("/me/marketing-consent/withdraw",{...t,method:"POST"})}},access:{checkout(t,o){return e.fetch("/me/access/checkout",{...o,method:"POST",body:t})},retrieveCheckout(t,o){return e.fetch(`/me/access/checkout/${encodeURIComponent(t)}`,o)},grant(t){return e.fetch("/me/access/grant",t)},portal(t,o){return e.fetch("/me/access/portal",{...o,method:"POST",body:t})}}}}function Ue(e){return{async verify(t,o){let n=await e.fetch("/password/verify",{...o,method:"POST",body:{password:t}});return await e.storage.setItem(F,n.token),n}}}function Me(e){return{offers(t){return e.fetch("/paywall/offers/enabled",t)}}}function Je(e){return{list(t,o){return e.fetch("/plans",{...o,query:t})},salesLed(t){return e.fetch("/sales-led-plans",t)}}}function we(e){return{resolve(t,o){return e.fetch("/redirects/resolve",{...o,query:{path:t}})}}}function Ne(e){return{companies:{list(t){return e.fetch("/salaries/companies",t)}},titles:{list(t,o){return e.fetch("/salaries/titles",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/salaries/titles/${encodeURIComponent(t)}`,{...n,query:o})},locations(t,o,n){return e.fetch(`/salaries/titles/${encodeURIComponent(t)}/locations`,{...n,query:o})},location(t,o,n,r){return e.fetch(`/salaries/titles/${encodeURIComponent(t)}/${encodeURIComponent(o)}`,{...r,query:n})}},skills:{list(t,o){return e.fetch("/salaries/skills",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/salaries/skills/${encodeURIComponent(t)}`,{...n,query:o})},locations(t,o,n){return e.fetch(`/salaries/skills/${encodeURIComponent(t)}/locations`,{...n,query:o})},location(t,o,n,r){return e.fetch(`/salaries/skills/${encodeURIComponent(t)}/${encodeURIComponent(o)}`,{...r,query:n})}},locations:{list(t,o){return e.fetch("/salaries/locations",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/salaries/locations/${encodeURIComponent(t)}`,{...n,query:o})},titles(t,o,n){return e.fetch(`/salaries/locations/${encodeURIComponent(t)}/titles`,{...n,query:o})},skills(t,o,n){return e.fetch(`/salaries/locations/${encodeURIComponent(t)}/skills`,{...n,query:o})}}}}function De(e){return{suggest(t,o){return e.fetch("/search/suggest",{...o,query:t})}}}function $e(e){return{list(t,o){return e.fetch("/talent",{...o,query:t})},retrieve(t,o){return e.fetch(`/talent/${encodeURIComponent(t)}`,o)}}}function Qe(e,t){return{resolve(o,n){return e.fetch(`/${t}/${encodeURIComponent(o)}`,n)}}}function je(e,t){return{...Qe(e,t),list(o,n){return e.fetch(`/${t}`,{...n,query:o})}}}function qe(e){return{categories:je(e,"categories"),skills:je(e,"skills"),remotePermits:{list(t){return e.fetch("/remote-permits",t)}},places:{...Qe(e,"places"),list(t,o){return e.fetch("/places",{...o,query:t})}}}}function Ge(e,t,o){async function*n(){let r=t;for(;;){let i=await e(r,o);if(yield i,!i.hasMore||i.nextCursor===null)return;let{offset:a,...s}=r??{};r={...s,cursor:i.nextCursor}}}return{pages:n,async*[Symbol.asyncIterator](){for await(let r of n())yield*r.data},async toArray({limit:r}){let i=[];for await(let a of n())if(i.push(...a.data),i.length>=r)break;return i.slice(0,r)}}}function He(e,t){return e.authorBoardUserId!==t}function Ve(e,t){let o=e.some(r=>r.authorBoardUserId===t);return e.some(r=>r.authorBoardUserId!==t)&&!o}function Ke(e,t){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n.authorBoardUserId!==t)return n.id}return null}function X(e){let t=e.replace(/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,"").replace(/[\t\n\r]/g,""),o=/^([a-z][a-z0-9+.-]*):/i.exec(t)?.[1]?.toLowerCase();return o===void 0?!0:o==="http"||o==="https"||o==="mailto"}function ee(e){let t=e.applicationUrl&&X(e.applicationUrl)?e.applicationUrl:null;return!t&&!e.jobSlug?{kind:"none"}:e.registrationWall&&!e.viewer?{kind:"sign-in",reason:"registration-wall"}:t?{kind:"external",url:t}:e.jobSlug?e.viewer?e.viewer.emailVerified?e.applied?{kind:"applied"}:{kind:"native",jobSlug:e.jobSlug}:{kind:"verify-email"}:e.allowGuestApply?{kind:"guest",jobSlug:e.jobSlug}:{kind:"sign-in",reason:"native-apply"}:{kind:"none"}}function Ye(e){let t=ee({...e,registrationWall:!1,allowGuestApply:!1});return t.kind==="sign-in"?{kind:"sign-in"}:t}function Wt(e){let t=new x({baseUrl:e.baseUrl??Be,board:e.board,storage:Ae(e.auth?.storage,e.board),globalHeaders:e.globalHeaders,onRequest:e.onRequest,onResponse:e.onResponse,logger:e.logger});return{client:t,context(o){return t.fetch("",o)},seo(o){return t.fetch("/seo",o)},jobs:Ie(t),embed:Le(t),companies:Te(t),blog:_e(t),auth:Re(t),me:ke(t),password:Ue(t),taxonomy:qe(t),search:De(t),redirects:we(t),jobAlerts:Fe(t),jobPosting:xe(t),salaries:Ne(t),talent:$e(t),plans:Je(t),paywall:Me(t)}}var te={};_(te,{DEFAULT_SORT:()=>Zt,EMPLOYMENT_TYPES:()=>We,JOB_SORTS:()=>Xe,REMOTE_OPTIONS:()=>ze,SENIORITIES:()=>Ze,parseCompany:()=>tt,parseListingFilters:()=>eo,parseSeniority:()=>et});var ze=["on_site","hybrid","remote"],We=["full_time","part_time","contract","internship","temporary"],Ze=["entry_level","associate","mid_level","senior","lead","principal","director","executive"],Xe=["relevance","newest","salary_high"],Zt="relevance";var Xt=new Set(Ze);function et(e){let t=Array.isArray(e)?e:typeof e=="string"&&e?e.split(","):[],o=[],n=new Set;for(let r of t){if(typeof r!="string")continue;let i=r.trim().toLowerCase().normalize("NFC");!i||n.has(i)||Xt.has(i)&&(n.add(i),o.push(i))}return o.length>0?o:void 0}function tt(e){let t=Array.isArray(e)?e:typeof e=="string"&&e?e.split(","):[],o=[],n=new Set;for(let r of t){if(typeof r!="string")continue;let i=r.trim().toLowerCase().normalize("NFC");if(!(!i||n.has(i))&&(n.add(i),o.push(i),o.length>=10))break}return o.length>0?o:void 0}function eo(e){return{q:typeof e.q=="string"&&e.q?e.q:void 0,remoteOption:ze.includes(e.remoteOption)?e.remoteOption:void 0,employmentType:We.includes(e.employmentType)?e.employmentType:void 0,seniority:et(e.seniority),company:tt(e.company),sort:Xe.includes(e.sort)?e.sort:void 0}}var ce={};_(ce,{COUNTRY_CODES:()=>z,buildJobBreadcrumbs:()=>Y,countryOptions:()=>xt,formatDate:()=>at,formatMonthYear:()=>lt,formatPublishedRelativeDate:()=>st,formatSalaryRange:()=>pt,formatSalaryStat:()=>j,formatSalaryStatRange:()=>I,normalizeWebsiteUrl:()=>U,resolveCustomFieldDisplay:()=>It});function S(e){let t=e.trim();if(!t)return null;try{let o=t.replace(/_/g,"-"),[n]=Intl.getCanonicalLocales(o);if(!n)return null;let[r]=Intl.NumberFormat.supportedLocalesOf([n]);return r??null}catch{return null}}var ot=new Map,nt=new Map,rt=new Map,it=new Map;function to(e){let t=ot.get(e);return t||(t=new Intl.RelativeTimeFormat(e,{numeric:"always",style:"short"}),ot.set(e,t)),t}function oo(e){let t=nt.get(e);return t||(t=new Intl.RelativeTimeFormat(e,{numeric:"auto",style:"short"}),nt.set(e,t)),t}function no(e){let t=rt.get(e);return t||(t=new Intl.DateTimeFormat(e,{dateStyle:"medium",timeZone:"UTC"}),rt.set(e,t)),t}function ro(e){let t=it.get(e);return t||(t=new Intl.DateTimeFormat(e,{month:"short",year:"numeric",timeZone:"UTC"}),it.set(e,t)),t}function oe(e,t,o){try{return to(o).format(e,t)}catch{return null}}function at(e,t){if(!t)return null;let o=new Date(t);if(Number.isNaN(o.getTime()))return null;let n=S(e);if(!n)return null;try{return no(n).format(o)}catch{return o.toISOString().split("T")[0]}}function st(e,t,o=Date.now()){if(!t)return null;let n=new Date(t);if(Number.isNaN(n.getTime()))return null;let r=S(e);if(!r)return null;let i=o-n.getTime(),a=Math.abs(i),s=60*1e3,p=60*s,l=24*p,u=7*l,d=30*l,m=365*l;if(a<s)try{return oo(r).format(0,"second")}catch{return oe(0,"second",r)}let y=[{unit:"year",ms:m},{unit:"month",ms:d},{unit:"week",ms:u},{unit:"day",ms:l},{unit:"hour",ms:p},{unit:"minute",ms:s}];for(let f of y)if(a>=f.ms){let A=Math.round(a/f.ms),c=i>=0?-A:A;return oe(c,f.unit,r)}let g=Math.round(a/1e3),C=i>=0?-g:g;return oe(C,"second",r)}function lt(e,t){if(!t)return null;let n=/^\d{4}-\d{2}(-\d{2})?$/.test(t)?new Date(t.length===7?`${t}-01T00:00:00.000Z`:`${t}T00:00:00.000Z`):new Date(t);if(Number.isNaN(n.getTime()))return null;let r=S(e);if(!r)return null;try{return ro(r).format(n)}catch{return null}}var D=new Map;function ne(e,t,o,n="symbol",r="compact"){let i=`${t}:${o}:${n}:${r}`,a=D.get(i);if(a===void 0){try{let s={style:"currency",currency:o,currencyDisplay:n,notation:r};r==="compact"&&(s.compactDisplay="short",s.maximumFractionDigits=1,s.minimumFractionDigits=0),a=new Intl.NumberFormat(t,s)}catch{a=null}D.set(i,a)}return a?a.format(e):null}function re(e,t,o){if(typeof e.formatRange=="function")try{return e.formatRange(t,o)}catch{}try{return`${e.format(t)}\u2013${e.format(o)}`}catch{return null}}function io(e,t,o,n,r="symbol",i="compact"){let a=`${o}:${n}:${r}:${i}:range`,s=D.get(a);if(s===void 0){try{let p={style:"currency",currency:n,currencyDisplay:r,notation:i};i==="compact"&&(p.compactDisplay="short",p.maximumFractionDigits=1,p.minimumFractionDigits=0),s=new Intl.NumberFormat(o,p)}catch{s=null}D.set(a,s)}return s?re(s,e,t):null}var ao=new Set(["per_year","per_month","per_week","per_day","per_hour"]);function so(...e){let t=!1;for(let o of e)if(!(o==null||!Number.isFinite(o))&&(t=!0,Math.abs(o)>=1e3))return"compact";return t?"standard":"compact"}function pt(e,t,o,n,r=null,i="symbol",a){let s=t==null||Number.isFinite(t),p=o==null||Number.isFinite(o);if(!s||!p||t==null&&o==null)return null;let l=r?.trim().toUpperCase()||null;if(!l)return null;let u=S(e);if(!u)return null;let d=a??so(t,o),m=typeof n=="string"&&ao.has(n)?n:null;if(t!=null&&o!=null){let g=t<=o?t:o,C=t<=o?o:t,f=g===C?ne(g,u,l,i,d):io(g,C,u,l,i,d);return f?{text:f,timeframe:m,bound:"range"}:null}if(t!=null){let g=ne(t,u,l,i,d);return g?{text:g,timeframe:m,bound:"from"}:null}let y=ne(o,u,l,i,d);return y?{text:y,timeframe:m,bound:"upTo"}:null}var ct=new Map;function ut(...e){let t=!1;for(let o of e)if(!(o==null||!Number.isFinite(o))&&(t=!0,Math.abs(o)>=1e3))return"compact";return t?"standard":"compact"}function mt(e,t,o){let n=`${e}:${t}:${o}`,r=ct.get(n);if(r!==void 0)return r;let i;try{let a={style:"currency",currency:t,notation:o};o==="compact"&&(a.compactDisplay="short",a.minimumFractionDigits=0,a.maximumFractionDigits=1),i=new Intl.NumberFormat(e,a)}catch{i=null}return ct.set(n,i),i}function j(e,t,o,n){if(!Number.isFinite(t))return null;let r=o?.trim().toUpperCase()||null;if(!r)return null;let i=S(e);if(!i)return null;let a=n??ut(t),s=mt(i,r,a);return s?s.format(t):null}function I(e,t,o,n,r){if(!Number.isFinite(t)||!Number.isFinite(o))return null;let i=n?.trim().toUpperCase()||null;if(!i)return null;let a=S(e);if(!a)return null;let s=r??ut(t,o),p=mt(a,i,s);if(!p)return null;let l=Math.min(t,o),u=Math.max(t,o);return l===u?p.format(l):re(p,l,u)}var $=["entry_level","associate","mid_level","senior","lead","principal","director","executive"];function dt(e){return[...e].sort((t,o)=>{let n=$.indexOf(t.seniority),r=$.indexOf(o.seniority);return(n===-1?999:n)-(r===-1?999:r)})}var lo={unitText:"YEAR",duration:"P1Y"};function k(e,t,o,n,r={}){return{"@type":"MonetaryAmountDistribution",...e!==void 0?{name:e}:{},currency:t,minValue:o,maxValue:n,...r,...lo}}function ie(e,t,o,n){return e.map(r=>{let i=n?.seniorityName?.({seniority:r.seniority,entity:o});return k(i,t,r.avgSalaryMin,r.avgSalaryMax)})}function Q(e,t,o,n){return{"@context":"https://schema.org","@type":e,name:t,...o,estimatedSalary:n}}function yt(e,t,o,n){if(!o)return[];let r=I(e,o.avgMin,o.avgMax,n);return[{kind:"average",label:t,range:r,avgMin:o.avgMin,avgMax:o.avgMax,currency:n,jobCount:o.jobCount},{kind:"methodology",label:t}]}function q(e){return e.length===0?null:{"@context":"https://schema.org","@type":"ItemList",numberOfItems:e.length,itemListElement:e.map((t,o)=>({"@type":"ListItem",position:o+1,name:t.name,url:t.url}))}}function gt(e){return e.length===0?null:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:e.map(t=>({"@type":"Question",name:t.q,acceptedAnswer:{"@type":"Answer",text:t.a}}))}}function ft(e,t){return e.overallSalary?Q("Occupation",e.categoryName,{},[k(e.categoryName,e.currency,e.overallSalary.avgMin,e.overallSalary.avgMax,{...e.boardP25Min?{percentile25:e.boardP25Min}:{},...e.boardP75Max?{percentile75:e.boardP75Max}:{}}),...ie(e.bySeniority,e.currency,e.categoryName,t)]):null}function ht(e){return e.overallSalary?Q("Occupation",e.skillName,{},[k(e.skillName,e.currency,e.overallSalary.avgMin,e.overallSalary.avgMax,{median:Math.round((e.overallSalary.medianMin+e.overallSalary.medianMax)/2)})]):null}function bt(e,t){return!t?.occupationUrl||!(e.adminLevel==="city"||e.adminLevel==="locality")?null:q(e.topCategories.map(n=>({name:n.categoryName,url:t.occupationUrl(n)})))}function St(e,t){return e.overall?Q("Occupation",e.name,{occupationLocation:{"@type":"AdministrativeArea",name:e.placeName,address:{"@type":"PostalAddress",addressCountry:e.countryCode}}},[k(e.name,e.currency,e.overall.avgMin,e.overall.avgMax,{...e.overall.p25Min?{percentile25:e.overall.p25Min}:{},...e.overall.p75Max?{percentile75:e.overall.p75Max}:{}}),...ie(e.bySeniority,e.currency,e.name,t)]):null}function Ct(e,t){return t?.occupationUrl?q(e.byCategory.map(o=>({name:o.categoryName,url:t.occupationUrl(o)}))):null}function Ot(e,t){return e.overallSalary?Q("Occupation",e.categoryName,{occupationalCategory:e.categoryName,hiringOrganization:{"@type":"Organization",name:e.companyName}},[k(e.categoryName,e.currency,e.overallSalary.avgMin,e.overallSalary.avgMax,{...e.boardCategoryP25Min?{percentile25:e.boardCategoryP25Min}:{},...e.boardCategoryP75Max?{percentile75:e.boardCategoryP75Max}:{}}),...ie(e.bySeniority,e.currency,e.categoryName,t)]):null}var Pt={high_school:"high school",associate_degree:"associate degree",bachelor_degree:"bachelor degree",professional_certificate:"professional certificate",postgraduate_degree:"postgraduate degree"},po={full_time:"FULL_TIME",part_time:"PART_TIME",contract:"CONTRACTOR",internship:"INTERN",temporary:"TEMPORARY",volunteer:"VOLUNTEER",other:"OTHER"},co={per_year:"YEAR",per_month:"MONTH",per_week:"WEEK",per_day:"DAY",per_hour:"HOUR"},se=["AF","AX","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BV","BR","IO","VG","BN","BG","BF","BI","KH","CM","CA","CV","BQ","KY","CF","TD","CL","CN","CX","CC","CO","KM","CK","CR","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","CD","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","CI","JM","JP","JE","JO","KZ","KE","KI","XK","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","CG","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","KR","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","VI","UY","UZ","VU","VA","VE","VN","WF","EH","YE","ZM","ZW"];function At({job:e,board:t,shareUrl:o}){let n=bo(e),r=So(e),i=ae({"@context":"https://schema.org/","@type":"JobPosting",title:e.title,description:e.description??"",identifier:uo(e,t),datePosted:Et(e.publishedAt),validThrough:Et(e.expiresAt),employmentType:e.employmentType?po[e.employmentType]??"OTHER":"OTHER",hiringOrganization:mo(e,t),jobLocation:go(e),jobLocationType:e.remoteOption==="remote"?"TELECOMMUTE":void 0,applicantLocationRequirements:e.remoteOption==="remote"?ho(e):null,baseSalary:yo(e),educationRequirements:n,experienceRequirements:r,experienceInPlaceOfEducation:e.experienceInPlaceOfEducation===!0&&n&&r?!0:void 0,url:o});return!i||Array.isArray(i)||Object.keys(i).length===0?null:i}function uo(e,t){let o=e.company?.name??t.name??null,n={"@type":"PropertyValue",value:e.id};return o&&(n.name=o),n}function mo(e,t){let o=e.company?.name??t.name??null;if(!o)return null;let n={"@type":"Organization",name:o},r=e.company?.website??null,i=r?U(r):null;i&&(n.sameAs=i);let a=e.company?.logoUrl??t.logoUrl??null;return a&&(n.logo=a),n}function U(e){let t=e.trim();return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function yo(e){let t=e.salaryCurrency?.trim(),o=typeof e.salaryMin=="number",n=typeof e.salaryMax=="number";if(!t||!o&&!n)return null;let r={"@type":"QuantitativeValue"};o&&(r.minValue=e.salaryMin),n&&(r.maxValue=e.salaryMax);let i=e.salaryTimeframe?co[e.salaryTimeframe]:void 0;return i&&(r.unitText=i),!o&&n&&typeof e.salaryMax=="number"?(r.value=e.salaryMax,r.minValue=e.salaryMax):!n&&o&&typeof e.salaryMin=="number"&&(r.value=e.salaryMin,r.maxValue=e.salaryMin),{"@type":"MonetaryAmount",currency:t.toUpperCase(),value:r}}function go(e){let t=e.officeLocations.map(o=>fo({countryCode:o.countryCode,region:o.region,locality:o.city??o.locality,postalCode:o.postalCode,name:o.displayName})).filter(o=>o!==null);return t.length===0?null:t.length===1?t[0]:t}function fo({countryCode:e,region:t,locality:o,postalCode:n,name:r}){let i={"@type":"PostalAddress"},a=e?.trim(),s=t?.trim(),p=o?.trim(),l=n?.trim(),u=r?.trim();a&&(i.addressCountry=a.toUpperCase()),s&&(i.addressRegion=s),p&&(i.addressLocality=p),l&&(i.postalCode=l);let d=Object.keys(i).length>1;if(!d&&!u)return null;let m={"@type":"Place"};return u&&(m.name=u),d&&(m.address=i),m}function ho(e){if(e.remoteWorldwide)return se.map(n=>({"@type":"Country",name:n}));let t=[],o=new Set;for(let n of e.remoteWorkPermitCountryCodes??[]){let r=n?.trim().toUpperCase();!r||o.has(r)||(o.add(r),t.push({"@type":"Country",name:r}))}for(let n of e.remoteWorkPermitSubdivisionCodes??[]){let r=n?.split("-")[0]?.trim().toUpperCase();!r||o.has(r)||(o.add(r),t.push({"@type":"Country",name:r}))}return t.length===0?null:t.length===1?t[0]:t}function bo(e){let t=e.educationRequirements;if(!t||t.length===0)return null;if(t.includes("no_requirements"))return"no requirements";let o=t.filter(n=>n in Pt).map(n=>({"@type":"EducationalOccupationalCredential",credentialCategory:Pt[n]}));return o.length>0?o:null}function So(e){let t=e.experienceMonths;return typeof t!="number"?null:t===0?"no requirements":{"@type":"OccupationalExperienceRequirements",monthsOfExperience:t}}function Et(e){if(!e)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:t.toISOString()}function ae(e){let t=o=>o==null?!1:Array.isArray(o)?o.length>0:typeof o=="object"?Object.keys(o).length>0:!0;if(Array.isArray(e))return e.map(o=>ae(o)).filter(t);if(e&&typeof e=="object"){let o=Object.entries(e).map(([n,r])=>[n,ae(r)]).filter(([,n])=>t(n));return Object.fromEntries(o)}return e}var pe={};_(pe,{BOARD_PATHS:()=>V,blogAuthorPath:()=>vo,blogPostPath:()=>Tt,blogTagPath:()=>Lt,boardUrl:()=>K,companyMarketPath:()=>_t,companyPath:()=>Rt,companySalaryPath:()=>Oo,encodePathSegment:()=>h,goAlertsConfirmPath:()=>_o,goAlertsManagePath:()=>Ro,goJobPath:()=>Bo,jobDetailPath:()=>le,jobsCategoryPath:()=>G,jobsLocationCategoryPath:()=>H,jobsLocationPath:()=>M,jobsLocationSkillPath:()=>Bt,jobsSkillPath:()=>vt,salaryLocationPath:()=>Ao,salarySkillPath:()=>Eo,salaryTitlePath:()=>Po,suggestionPath:()=>Co});function h(e){try{return encodeURIComponent(decodeURIComponent(e)).replace(/%3A/gi,":")}catch{return encodeURIComponent(e).replace(/%3A/gi,":")}}function le(e,t){return`/companies/${h(e)}/jobs/${h(t)}`}function G(e){return`/jobs/${h(e)}`}function vt(e){return`/jobs/skills/${h(e)}`}function M(e){return`/jobs/locations/${h(e)}`}function H(e,t){return`${M(e)}/${h(t)}`}function Bt(e,t){return`${M(e)}/skills/${h(t)}`}function Rt(e){return`/companies/${h(e)}`}function _t(e){return`/companies/markets/${h(e)}`}function Co(e,t){let o=t.location?.trim()||void 0;return t.scope==="blog"?e.type==="post"?Tt(e.slug):e.type==="tag"?Lt(e.slug):null:t.scope==="jobs"?e.type==="company"||e.type==="market"||e.type==="post"||e.type==="tag"?null:e.termType==="skill"?o?Bt(o,e.canonicalSlug):vt(e.canonicalSlug):o?H(o,e.canonicalSlug):G(e.canonicalSlug):e.type==="company"?Rt(e.slug):e.type==="market"?_t(e.slug):null}function Oo(e){return`/companies/${h(e)}/salaries`}function Po(e){return`/salaries/titles/${h(e)}`}function Eo(e){return`/salaries/skills/${h(e)}`}function Ao(e){return`/salaries/locations/${h(e)}`}function Tt(e){return`/blog/${h(e)}`}function Lt(e){return`/blog/tag/${h(e)}`}function vo(e){return`/blog/author/${h(e)}`}var V={home:"/",jobs:"/jobs",companies:"/companies",salaries:"/salaries",salaryCompanies:"/salaries/companies",salaryTitles:"/salaries/titles",salarySkills:"/salaries/skills",salaryLocations:"/salaries/locations",blog:"/blog",about:"/about",privacyPolicy:"/privacy-policy",termsOfService:"/terms-of-service",cookiePolicy:"/cookie-policy",impressum:"/impressum",talent:"/talent",employers:"/employers",alertsManage:"/alerts/manage",alertsConfirm:"/alerts/confirm"};function Bo(e){return`/go/job/${e}`}function Ro(){return"/go/alerts-manage"}function _o(){return"/go/alerts-confirm"}function K(e,t){return`${e.replace(/\/+$/,"")}${t}`}function Ft(e,t={}){let o=e.map(r=>{let i=r.label?.trim();return i?{name:i,href:r.href?.trim()??null}:null}).filter(r=>!!r);return o.length<2?null:{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:o.map((r,i)=>{let a=r.href?To(r.href,t.origin??null):null,s={"@type":"ListItem",position:i+1,name:r.name};return a&&(s.item=a),s})}}function To(e,t){if(Lo(e))return e;if(!t)return null;let o=e.startsWith("/")?e:`/${e}`;return`${t}${o}`}function Lo(e){return/^https?:\/\//i.test(e)}function Y(e){let t=[{kind:"home",path:V.home},{kind:"jobs",path:V.jobs}],o=null;for(let r of e.placeHierarchy)o=r.slug,t.push({kind:"place",name:r.name,path:M(r.slug)});let n=e.categories[0];return n&&t.push({kind:"category",name:n.name,path:o?H(o,n.slug):G(n.slug)}),t.push({kind:"job",name:e.title}),t}var z=["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW"];function Fo(e){try{return new Intl.DisplayNames([e],{type:"region"})}catch{return null}}function xo(e){try{return new Intl.Collator(e)}catch{return new Intl.Collator}}function xt(e){let t=S(e);if(!t)return z.map(r=>({code:r,name:r})).sort((r,i)=>r.code<i.code?-1:r.code>i.code?1:0);let o=Fo(t),n=xo(t).compare;return z.map(r=>({code:r,name:o?.of(r)??r})).sort((r,i)=>n(r.name,i.name))}function Io(e,t){if(!Array.isArray(t)||t.length===0)return null;let o=t.map(n=>e.options?.find(r=>r.key===n)?.label).filter(n=>!!n);return o.length>0?o:null}function ko(e,t){switch(e.type){case"number":return null;case"multi_select":return null;case"single_select":return typeof t!="string"?null:e.options?.find(o=>o.key===t)?.label??null;default:return typeof t=="string"&&t.trim()!==""?t:null}}function It(e,t,o){let n=[];for(let r of t??[]){let i=o?.[r.key];if(r.type==="boolean"){typeof i=="boolean"&&n.push({key:r.key,label:r.label,kind:"boolean",value:i});continue}if(r.type==="number"){typeof i=="number"&&Number.isFinite(i)&&n.push({key:r.key,label:r.label,kind:"number",value:i});continue}if(r.type==="multi_select"){let s=Io(r,i);s&&n.push({key:r.key,label:r.label,kind:"multi_select",values:s});continue}let a=ko(r,i);a!==null&&n.push({key:r.key,label:r.label,kind:"text",value:a})}return n}var ue={};_(ue,{ALL_COUNTRY_CODES:()=>se,SENIORITY_ORDER:()=>$,buildJobBreadcrumbs:()=>Y,buildSalaryFaq:()=>yt,companyCategorySalaryJsonLd:()=>Ot,companySalaryJsonLd:()=>Ct,createAuthorProfileJsonLd:()=>Ut,createBlogArticleJsonLd:()=>kt,createBreadcrumbJsonLd:()=>Ft,createJobPostingJsonLd:()=>At,crossAxisSalaryJsonLd:()=>St,faqJsonLd:()=>gt,formatSalaryStat:()=>j,formatSalaryStatRange:()=>I,itemListJsonLd:()=>q,listingHead:()=>Mt,listingJsonLd:()=>Jt,locationSalaryJsonLd:()=>bt,normalizeWebsiteUrl:()=>U,skillSalaryJsonLd:()=>ht,sortBySeniority:()=>dt,titleSalaryJsonLd:()=>ft});function kt({post:e,boardName:t,permalink:o,ogImageUrl:n}){let r={"@context":"https://schema.org","@type":"Article",headline:e.title,url:o,mainEntityOfPage:{"@type":"WebPage","@id":o},publisher:{"@type":"Organization",name:t}};e.customExcerpt&&(r.description=e.customExcerpt),e.publishedAt&&(r.datePublished=e.publishedAt);let i=e.coverUrl??n;i&&(r.image=i);let a=e.authors[0];return a&&(r.author={"@type":"Person",name:a.name,...a.websiteUrl?{url:a.websiteUrl}:{}}),r}function Ut({author:e,canonical:t,description:o,origin:n,posts:r,totalPosts:i}){if(!e.name)return null;let a=o.trim(),s=[W(e.websiteUrl),W(e.twitterUrl),W(e.linkedinUrl),W(e.githubUrl)].filter(m=>!!m),p=`${t}#profile`,l=r.slice(0,5).map(m=>{let y=Uo(n,`/blog/${m.slug}`);return y?{"@type":"Article",headline:m.title,url:y,datePublished:m.publishedAt,author:{"@id":p}}:null}).filter(m=>m!==null),u=i>0?{"@type":"InteractionCounter",interactionType:"https://schema.org/WriteAction",userInteractionCount:i}:void 0,d={"@context":"https://schema.org","@type":"ProfilePage",url:t,mainEntity:{"@type":"Person","@id":p,name:e.name,alternateName:e.slug??void 0,identifier:e.id??void 0,description:a||void 0,image:e.avatarUrl??void 0,sameAs:s.length>0?s:void 0,url:t,mainEntityOfPage:t,agentInteractionStatistic:u}};return l.length>0&&(d.hasPart=l),d}function W(e){if(!e)return null;let t=e.trim();if(!t)return null;try{let o=t.startsWith("http://")||t.startsWith("https://")?t:`https://${t}`;return new URL(o).toString()}catch{return null}}function Uo(e,t){if(!e||!t)return null;try{return new URL(t,e).toString()}catch{return null}}function Mt(e){let t=e.title,o=e.description,n=`${e.origin}${e.path}`;return{meta:[{title:t},{name:"description",content:o},{property:"og:title",content:t},{property:"og:description",content:o},{property:"og:type",content:"website"},{property:"og:url",content:n}],links:[{rel:"canonical",href:n}]}}function Jt(e){let t=[];e.breadcrumbs.length>=2&&t.push({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.breadcrumbs.map((n,r)=>({"@type":"ListItem",position:r+1,name:n.name,...n.path?{item:K(e.origin,n.path)}:{}}))});let o=(e.jobs??[]).filter(n=>n.company!=null&&!!n.company.slug);return o.length>0&&t.push({"@context":"https://schema.org","@type":"ItemList",itemListElement:o.map((n,r)=>({"@type":"ListItem",position:r+1,url:K(e.origin,le(n.company.slug,n.slug))}))}),t}var me={};_(me,{createSuggestController:()=>wo});function Mo(e){return typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"||e instanceof Error&&e.name==="AbortError"}function Jo(e){try{let t=0;for(let o of new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(e))t+=1;return t}catch{return[...e].length}}function wt(e,t){return t.size===0?e.slice():e.filter(o=>!(o.type==="company"&&t.has(o.slug.toLowerCase().normalize("NFC"))))}function wo(e,t){let o=t?.minChars??2,n=t?.debounceMs??250,r=t?.limit,i=!1,a={query:"",items:[],status:"idle",error:null},s=[],p=new Set,l=0,u=null,d=null,m=new Set;function y(){for(let c of m)c()}function g(c){a=c,y()}function C(){u!==null&&(globalThis.clearTimeout(u),u=null)}function f(){d&&(d.abort(),d=null)}function A(c){let b=++l;f();let O=new AbortController;d=O;let R={q:c};r!==void 0&&(R.limit=r),e.search.suggest(R,{signal:O.signal}).then(v=>{i||b!==l||(d=null,s=v.items,g({query:a.query,items:wt(s,p),status:"ready",error:null}))}).catch(v=>{i||b!==l||Mo(v)||(d=null,g({query:a.query,items:a.items,status:"error",error:v}))})}return{setQuery(c){if(i)return;let b=c.trim();if(C(),Jo(b)<o){l+=1,f(),s=[],g({query:c,items:[],status:"idle",error:null});return}l+=1,f(),g({query:c,items:a.items,status:"loading",error:null}),u=globalThis.setTimeout(()=>{u=null,!i&&A(b)},n)},setExcludedCompanySlugs(c){i||(p=new Set(c.map(b=>b.trim().toLowerCase().normalize("NFC")).filter(Boolean)),g({query:a.query,items:wt(s,p),status:a.status,error:a.error}))},getState(){return a},subscribe(c){return i?()=>{}:(m.add(c),()=>{m.delete(c)})},dispose(){i||(i=!0,C(),f(),l+=1,m.clear())}}}return qt(No);})();
|
|
1
|
+
"use strict";var CavunoBoard=(()=>{var J=Object.defineProperty;var Dt=Object.getOwnPropertyDescriptor;var $t=Object.getOwnPropertyNames;var jt=Object.prototype.hasOwnProperty;var Qt=(e,t,o)=>t in e?J(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var _=(e,t)=>{for(var o in t)J(e,o,{get:t[o],enumerable:!0})},qt=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of $t(t))!jt.call(e,r)&&r!==o&&J(e,r,{get:()=>t[r],enumerable:!(n=Dt(t,r))||n.enumerable});return e};var Gt=e=>qt(J({},"__esModule",{value:!0}),e);var P=(e,t,o)=>Qt(e,typeof t!="symbol"?t+"":t,o);var Do={};_(Do,{ACCESS_TOKEN_KEY:()=>T,BOARD_ACCESS_GRANT_KEY:()=>F,BOARD_API_ERROR_CODES:()=>de,BoardApiError:()=>B,BoardClient:()=>x,REFRESH_TOKEN_KEY:()=>L,SDK_VERSION:()=>N,createBoardClient:()=>Zt,filters:()=>te,format:()=>ce,isBoardApiError:()=>E,isBoardPasswordRequired:()=>fe,isColdRule:()=>Ve,isConflict:()=>Ce,isForbidden:()=>he,isNotFound:()=>ye,isOwnMessage:()=>He,isRateLimited:()=>Se,isSafeApplicationUrl:()=>X,isUnauthorized:()=>ge,isValidationError:()=>be,lastOwnMessageId:()=>Ke,paginate:()=>Ge,paths:()=>pe,resolveApplyAction:()=>Ye,resolveApplyDecision:()=>ee,seo:()=>ue,suggest:()=>me});var de=["internal_error","validation_bad_request","validation_payload_too_large","rate_limited","rate_limit_unavailable","search_unavailable","too_many_filter_values","pagination_invalid_cursor","pagination_offset_too_large","auth_unauthenticated","auth_forbidden","plan_upgrade_required","unknown_error","boards_not_found","board_page_not_found","board_auth_email_taken","board_auth_invalid_credentials","board_auth_invalid_token","board_auth_registration_disabled","board_auth_token_expired","invalid_current_password","no_password","same_email","email_taken","invalid_token","board_password_required","board_password_invalid","jobs_not_found","jobs_invalid_filter","categories_not_found","skills_not_found","places_not_found","companies_not_found","company_markets_not_found","company_salary_not_found","company_category_salary_not_found","salaries_title_not_found","salaries_skill_not_found","salaries_location_not_found","salaries_title_location_not_found","salaries_skill_location_not_found","blog_post_not_found","blog_author_not_found","blog_tag_not_found","talent_not_found","talent_directory_not_found","talent_directory_restricted","job_recommendations_not_found","recommended_talent_not_found","job_alert_not_found","job_alerts_disabled","candidate_alert_limit_reached","candidate_alert_not_found","candidate_entry_not_found","candidate_handle_taken","candidate_job_not_found","candidate_notification_preference_paused","resume_invalid_file","resume_upload_forbidden","applications_external_apply_only","applications_country_not_allowed","applications_guest_not_allowed","applications_job_not_found","applications_not_found","applications_resume_invalid_file","applications_unprocessable","messaging_application_not_found","messaging_application_not_linked","messaging_blocked","messaging_cannot_block_self","messaging_cold_rule","messaging_conversation_not_found","messaging_disabled","messaging_edit_window_expired","messaging_message_deleted","messaging_message_not_found","messaging_not_author","messaging_not_participant","messaging_not_permitted","messaging_not_recipient","messaging_rate_limited","messaging_recipient_not_found","messaging_recipient_not_open","messaging_unsend_window_expired","employer_applicant_not_found","employer_ats_unprocessable","employer_checkout_failed","employer_company_exists","employer_company_name_taken","employer_company_not_found","employer_job_not_found","employer_job_slug_taken","employer_jobs_quota_exceeded","employer_not_member","employer_payment_required","employer_pipeline_stage_not_found","employer_member_not_found","employer_invite_not_found","not_company_admin","not_company_member","company_deletion_disabled","last_admin","already_member","already_invited","invalid_email","invite_email_mismatch","candidate_role","job_not_published","paywall_already_active","paywall_disabled","paywall_invalid_checkout_session","paywall_no_candidate_profile","paywall_no_recurring_subscription","paywall_offer_not_found","talent_access_unavailable","company_required","already_on_plan","talent_access_required","messaging_talent_access_required","stripe_not_connected","job_posting_logo_lookup_unavailable","job_posting_logo_not_found","job_posting_rejected"],B=class extends Error{constructor(o){super(o.message);P(this,"status");P(this,"code");P(this,"details");P(this,"requestId");P(this,"raw");this.name="BoardApiError",this.status=o.status,this.code=o.code,this.details=o.details,this.requestId=o.requestId,this.raw=o.raw}};function E(e){return e instanceof Error&&e.name==="BoardApiError"&&typeof e.status=="number"&&typeof e.code=="string"}function ye(e){return E(e)&&e.status===404}function ge(e){return E(e)&&e.status===401}function fe(e){return E(e)&&e.status===401&&e.code==="board_password_required"}function he(e){return E(e)&&e.status===403}function be(e){return E(e)&&e.status===400&&e.code==="validation_bad_request"}function Se(e){return E(e)&&e.status===429}function Ce(e){return E(e)&&e.status===409}function Oe(e){let t=new URLSearchParams;if(!e)return t;for(let[o,n]of Object.entries(e))if(n!=null)if(Array.isArray(n))for(let r of n)r!=null&&t.append(o,String(r));else t.append(o,String(n));return t}function Pe(e){let t=5381;for(let n=0;n<e.length;n++)t=(t<<5)+t+e.charCodeAt(n)>>>0;return`${e.replace(/[^a-zA-Z0-9_-]/g,"_")}-${t.toString(36)}`}var T="cavuno_board_access_token",L="cavuno_board_refresh_token",F="cavuno_board_access_grant";function Ee(){return typeof globalThis.document<"u"}function Ht(){let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,o)=>{e.set(t,o)},removeItem:t=>{e.delete(t)}}}function Vt(e,t){if(!Ee())throw new Error(`storage mode '${e}' is browser-only \u2014 use 'nostore' + per-call headers on the server`);let o;try{if(o=e==="local"?globalThis.localStorage:globalThis.sessionStorage,!o)throw new Error("unavailable")}catch{throw new Error(`storage mode '${e}' is unavailable in this browsing context (storage access is blocked \u2014 e.g. a sandboxed or third-party iframe). Use 'memory', or 'nostore' + per-call headers.`)}let n=t?`:${Pe(t)}`:"";return{getItem:r=>o.getItem(`${r}${n}`),setItem:(r,i)=>{o.setItem(`${r}${n}`,i)},removeItem:r=>{o.removeItem(`${r}${n}`)}}}var Kt=Symbol.for("@cavuno/board:nostore");var Yt={[Kt]:!0,getItem:()=>null,setItem:()=>{},removeItem:()=>{}};function Ae(e,t){let o=e??(Ee()?"memory":"nostore");if(typeof o=="object")return o;switch(o){case"memory":return Ht();case"nostore":return Yt;case"local":case"session":return Vt(o,t);default:throw new Error(`Unknown storage mode '${String(o)}'`)}}async function w(e,t){await e.setItem(T,t.accessToken),await e.setItem(L,t.refreshToken)}async function ve(e){await e.removeItem(T),await e.removeItem(L)}var N="4.13.0";function zt(e){return typeof e=="string"||e instanceof URLSearchParams||typeof FormData<"u"&&e instanceof FormData||typeof Blob<"u"&&e instanceof Blob||e instanceof ArrayBuffer||typeof ReadableStream<"u"&&e instanceof ReadableStream}function Wt(e){try{let t=new URL(e);for(let o of new Set(t.searchParams.keys()))t.searchParams.delete(o),t.searchParams.set(o,"[REDACTED]");return t.toString()}catch{return e.replace(/([?&][^=&#]+)=([^&#]*)/g,"$1=[REDACTED]")}}var x=class{constructor(t){P(this,"storage");P(this,"basePath");P(this,"options");this.options=t,this.storage=t.storage;let o=t.baseUrl.replace(/\/+$/,"");this.basePath=`${o}/v1/boards/${encodeURIComponent(t.board)}`}async fetch(t,o={}){let{body:n,query:r,headers:i,...a}=o,s=(o.method??"GET").toUpperCase(),p=`${this.basePath}${t}`,u=Oe(r).toString();u&&(p+=`?${u}`);let d=n!==void 0&&!zt(n),m=n===void 0?void 0:d?JSON.stringify(n):n,y=new Headers({accept:"application/json"});d&&y.set("content-type","application/json");for(let[v,Z]of Object.entries(this.options.globalHeaders??{}))y.set(v,Z);let g=await this.storage.getItem(T);g!==null&&y.set("authorization",`Bearer ${g}`);let C=await this.storage.getItem(F);C!==null&&y.set("x-board-access",C),i&&new Headers(i).forEach((v,Z)=>{y.set(Z,v)}),(s!=="GET"||y.has("authorization")||y.has("x-board-access"))&&!y.has("x-cavuno-sdk")&&y.set("x-cavuno-sdk",`board@${N}`);let f={url:p,init:{...a,method:s,headers:y,body:m}};this.options.onRequest&&(f=await this.options.onRequest(f));let A=Wt(f.url);this.options.logger?.debug(`${s} ${A}`);let c=await globalThis.fetch(f.url,f.init);if(this.options.logger?.debug(`${c.status} ${s} ${A}`),this.options.onResponse&&await this.options.onResponse(c.clone(),f),c.status===204)return;if(c.ok)return await c.json();let b;try{b=await c.json()}catch{b=void 0}let O=b?.error,R=O&&typeof O.code=="string"&&typeof O.message=="string"?new B({status:c.status,code:O.code,message:O.message,details:O.details,requestId:O.requestId,raw:b}):new B({status:c.status,code:"unknown_error",message:c.statusText||"Request failed",raw:b});throw this.options.logger?.error(`${R.status} ${R.code} ${s} ${A}`),R}};var Be="https://api.cavuno.com";function Re(e){async function t(n){return await w(e.storage,n),n}async function o(n){if(n?.refreshToken)return n.refreshToken;let r=await e.storage.getItem(L);if(r===null)throw new Error("No refresh token available \u2014 pass { refreshToken } or configure auth.storage");return r}return{async register(n,r){let i=await e.fetch("/auth/register",{...r,method:"POST",body:n});return t(i)},async login(n,r){let i=await e.fetch("/auth/login",{...r,method:"POST",body:n});return t(i)},async refresh(n,r){let i=await o(n),a=await e.fetch("/auth/refresh",{...r,method:"POST",body:{refreshToken:i}});return t(a)},async logout(n,r){let i=await o(n);await e.fetch("/auth/logout",{...r,method:"POST",body:{refreshToken:i}}),await ve(e.storage)},verifyEmail(n,r){return e.fetch("/auth/verify-email",{...r,method:"POST",body:n})},verifyEmailWithCode(n,r){return e.fetch("/auth/verify-email/otp",{...r,method:"POST",body:n})},resendVerification(n){return e.fetch("/auth/verify-email/resend",{...n,method:"POST"})},forgotPassword(n,r){return e.fetch("/auth/forgot-password",{...r,method:"POST",body:n})},resetPassword(n,r){return e.fetch("/auth/reset-password",{...r,method:"POST",body:n})},requestMagicLink(n,r){return e.fetch("/auth/magic-link",{...r,method:"POST",body:n})},async consumeMagicLink(n,r){let i=await e.fetch("/auth/magic-link/consume",{...r,method:"POST",body:n});return t(i)},getOAuthAuthorizationUrl(n,r,i){return e.fetch(`/auth/oauth/${n}`,{...i,method:"GET",query:r})},async exchangeOAuth(n,r){let i=await e.fetch("/auth/oauth/exchange",{...r,method:"POST",body:n});return t(i)}}}function _e(e){return{posts:{list(t,o){return e.fetch("/blog/posts",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/blog/posts/${encodeURIComponent(t)}`,{...n,query:o})},adjacent(t,o){return e.fetch(`/blog/posts/${encodeURIComponent(t)}/adjacent`,o)},similar(t,o,n){return e.fetch(`/blog/posts/${encodeURIComponent(t)}/similar`,{...n,query:o})}},tags:{list(t,o){return e.fetch("/blog/tags",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/blog/tags/${encodeURIComponent(t)}`,{...n,query:o})}},authors:{list(t,o){return e.fetch("/blog/authors",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/blog/authors/${encodeURIComponent(t)}`,{...n,query:o})}},search(t,o,n){return e.fetch("/blog/search",{...n,method:"POST",body:t,query:o})}}}function Te(e){let t=Object.assign((n,r)=>e.fetch("/companies/markets",{...r,query:n}),{resolve(n,r){return e.fetch(`/companies/markets/${encodeURIComponent(n)}`,r)}}),o=Object.assign((n,r)=>e.fetch(`/companies/${encodeURIComponent(n)}/salaries`,r),{summary(n,r){return e.fetch(`/companies/${encodeURIComponent(n)}/salaries/summary`,r)},category(n,r,i,a){return e.fetch(`/companies/${encodeURIComponent(n)}/salaries/${encodeURIComponent(r)}`,{...a,query:i})}});return{list(n,r){return e.fetch("/companies",{...r,query:n})},retrieve(n,r,i){return e.fetch(`/companies/${encodeURIComponent(n)}`,{...i,query:r})},search(n,r,i){return e.fetch("/companies/search",{...i,method:"POST",body:n,query:r})},listJobs(n,r,i){return e.fetch(`/companies/${encodeURIComponent(n)}/jobs`,{...i,query:r})},similar(n,r,i){return e.fetch(`/companies/${encodeURIComponent(n)}/similar`,{...i,query:r})},markets:t,salaries:o}}function Le(e){return{jobs(t,o){return e.fetch("/embed/jobs",{...o,query:t})}}}function Fe(e){return{subscribe(t,o){return e.fetch("/job-alerts",{...o,method:"POST",body:t})},confirm(t,o){return e.fetch("/job-alerts/confirm",{...o,method:"POST",body:t})},resendConfirmation(t,o){return e.fetch("/job-alerts/resend-confirmation",{...o,method:"POST",body:t})},manage(t,o){return e.fetch("/job-alerts/manage",{...o,query:t})},unsubscribe(t,o){return e.fetch("/job-alerts/unsubscribe",{...o,method:"POST",body:t})},resubscribe(t,o){return e.fetch("/job-alerts/resubscribe",{...o,method:"POST",body:t})},updatePreference(t,o){return e.fetch("/job-alerts/preferences",{...o,method:"POST",body:t})},deletePreference(t,o){return e.fetch("/job-alerts/preferences",{...o,method:"DELETE",body:t})}}}function xe(e){return{plans(t,o){return e.fetch("/job-postings/plans",{...o,query:t})},create(t,o){return e.fetch("/job-postings",{...o,method:"POST",body:t})},uploadLogo(t,o){let n=new FormData;return n.append("file",t),e.fetch("/job-postings/logo",{...o,method:"POST",body:n})},fetchLogoByDomain(t,o){return e.fetch("/job-postings/logo/fetch",{...o,query:{domain:t}})},sendBillingVerification(t,o){return e.fetch("/job-postings/send-verification",{...o,method:"POST",body:t})},getBillingOptions(t,o){return e.fetch("/job-postings/billing-options",{...o,method:"POST",body:t})}}}function Ie(e){return{list(t,o){return e.fetch("/jobs",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/jobs/${encodeURIComponent(t)}`,{...n,query:o})},search(t,o,n){return e.fetch("/jobs/search",{...n,method:"POST",body:t,query:o})},similar(t,o,n){return e.fetch(`/jobs/${encodeURIComponent(t)}/similar`,{...n,query:o})},apply(t,o,n){return e.fetch(`/jobs/${encodeURIComponent(t)}/apply`,{...n,method:"POST",body:o??{}})},createApplyIntent(t,o,n){return e.fetch(`/jobs/${encodeURIComponent(t)}/apply-intents`,{...n,method:"POST",body:o})},prepareApplyApproval(t,o,n){return e.fetch(`/jobs/${encodeURIComponent(t)}/apply-approvals`,{...n,method:"POST",body:o})},uploadApplicationResume(t,o,n,r){let i=new FormData;return i.append("file",o),n?.applicationId&&i.append("applicationId",n.applicationId),e.fetch(`/jobs/${encodeURIComponent(t)}/apply/resume`,{...r,method:"POST",body:i})},myApplication(t,o){return e.fetch(`/jobs/${encodeURIComponent(t)}/application`,o)}}}function ke(e){return{retrieve(t,o){return e.fetch("/me",{...o,query:t})},delete(t){return e.fetch("/me",{...t,method:"DELETE"})},async updatePassword(t,o){let n=await e.fetch("/me/password",{...o,method:"POST",body:t});return await w(e.storage,n),n},requestEmailChange(t,o){return e.fetch("/me/email",{...o,method:"POST",body:t})},confirmEmailChange(t,o){return e.fetch("/me/email/confirm",{...o,method:"POST",body:t})},acceptInvite(t,o){return e.fetch("/me/invites/accept",{...o,method:"POST",body:t})},profile:{retrieve(t,o){return e.fetch("/me/profile",{...o,query:t})},update(t,o,n){return e.fetch("/me/profile",{...n,method:"PATCH",body:t,query:o})},handleAvailable(t,o){return e.fetch("/me/profile/handle-available",{...o,query:{handle:t}})},listExperience(t){return e.fetch("/me/profile/experience",t)},createExperience(t,o){return e.fetch("/me/profile/experience",{...o,method:"POST",body:t})},updateExperience(t,o,n){return e.fetch(`/me/profile/experience/${encodeURIComponent(t)}`,{...n,method:"PATCH",body:o})},deleteExperience(t,o){return e.fetch(`/me/profile/experience/${encodeURIComponent(t)}`,{...o,method:"DELETE"})},listEducation(t){return e.fetch("/me/profile/education",t)},createEducation(t,o){return e.fetch("/me/profile/education",{...o,method:"POST",body:t})},updateEducation(t,o,n){return e.fetch(`/me/profile/education/${encodeURIComponent(t)}`,{...n,method:"PATCH",body:o})},deleteEducation(t,o){return e.fetch(`/me/profile/education/${encodeURIComponent(t)}`,{...o,method:"DELETE"})},listSkills(t){return e.fetch("/me/profile/skills",t)},updateSkills(t,o){return e.fetch("/me/profile/skills",{...o,method:"PUT",body:t})},listLanguages(t){return e.fetch("/me/profile/languages",t)},updateLanguages(t,o){return e.fetch("/me/profile/languages",{...o,method:"PUT",body:t})},uploadAvatar(t,o){let n=new FormData;return n.append("file",t),e.fetch("/me/profile/avatar",{...o,method:"POST",body:n})}},notificationPreferences:{retrieve(t){return e.fetch("/me/notification-preferences",t)},update(t,o){return e.fetch("/me/notification-preferences",{...o,method:"PUT",body:t})},unsubscribeWithToken(t,o){return e.fetch("/me/notification-preferences/unsubscribe",{...o,method:"POST",body:t})}},companies:{search(t,o){return e.fetch("/me/companies/search",{...o,query:t})},list(t){return e.fetch("/me/companies",t)},create(t,o){return e.fetch("/me/companies",{...o,method:"POST",body:t})},claim(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/claim`,{...o,method:"POST"})},cancelClaim(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/claim`,{...o,method:"DELETE"})},retrieve(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}`,o)},update(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}`,{...n,method:"PATCH",body:o})},delete(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}`,{...o,method:"DELETE"})},listMembers(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/members`,o)},updateMemberRole(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/members/${encodeURIComponent(o)}`,{...r,method:"PATCH",body:n})},removeMember(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/members/${encodeURIComponent(o)}`,{...n,method:"DELETE"})},leave(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/membership`,{...o,method:"DELETE"})},listInvites(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/invites`,o)},createInvite(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/invites`,{...n,method:"POST",body:o})},revokeInvite(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/invites/${encodeURIComponent(o)}`,{...n,method:"DELETE"})},uploadLogo(t,o,n){let r=new FormData;return r.append("file",o),e.fetch(`/me/companies/${encodeURIComponent(t)}/logo`,{...n,method:"POST",body:r})},workEmail:{verify(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/work-email/verify`,{...n,method:"POST",body:o})},confirm(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/work-email/confirm`,{...n,method:"POST",body:o})}},jobs:{list(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs`,{...n,query:o})},retrieve(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}`,n)},create(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs`,{...n,method:"POST",body:o})},update(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}`,{...r,method:"PATCH",body:n})},delete(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}`,{...n,method:"DELETE"})},publish(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}/publish`,{...n,method:"POST"})},unpublish(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}/unpublish`,{...n,method:"POST"})},checkout(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/jobs/${encodeURIComponent(o)}/checkout`,{...r,method:"POST",body:n})}},billingOptions:{list(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/billing-options`,o)}},billingPortal:{create(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/billing-portal`,{...n,method:"POST",body:o})}},jobStats:{retrieve(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/job-stats`,o)},timeseries(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/job-stats/timeseries`,{...n,query:o})}},profileStats:{retrieve(t,o){return e.fetch(`/me/companies/${encodeURIComponent(t)}/profile-stats`,o)},timeseries(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/profile-stats/timeseries`,{...n,query:o})}},recommendedTalent:{list(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/recommended-talent`,{...n,query:o})}},applicants:{list(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/applicants`,{...n,query:o})},move(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/applicants/${encodeURIComponent(o)}/stage`,{...r,method:"PATCH",body:n})},bulkMove(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/applicants/bulk/move`,{...n,method:"POST",body:o})},bulkReject(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/applicants/bulk/reject`,{...n,method:"POST",body:o})},addNote(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/applicants/${encodeURIComponent(o)}/notes`,{...r,method:"POST",body:n})}},pipelineStages:{create(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/pipeline-stages`,{...n,method:"POST",body:o})},update(t,o,n,r){return e.fetch(`/me/companies/${encodeURIComponent(t)}/pipeline-stages/${encodeURIComponent(o)}`,{...r,method:"PATCH",body:n})},remove(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/pipeline-stages/${encodeURIComponent(o)}`,{...n,method:"DELETE"})},reorder(t,o,n){return e.fetch(`/me/companies/${encodeURIComponent(t)}/pipeline-stages/reorder`,{...n,method:"PUT",body:o})}}},talentAccess:{retrieve(t){return e.fetch("/me/talent-access",t)},retrieveCandidate(t,o){return e.fetch(`/me/talent-access/candidates/${encodeURIComponent(t)}`,o)},checkout(t,o){return e.fetch("/me/talent-access/checkout",{...o,method:"POST",body:t})},retrieveCheckout(t,o){return e.fetch(`/me/talent-access/checkout/${encodeURIComponent(t)}`,o)},unlock(t,o){return e.fetch("/me/talent-access/unlocks",{...o,method:"POST",body:t})},upgrade(t,o){return e.fetch("/me/talent-access/upgrade",{...o,method:"POST",body:t})}},alerts:{list(t){return e.fetch("/me/alerts",t)},create(t,o){return e.fetch("/me/alerts",{...o,method:"POST",body:t})},retrieve(t,o){return e.fetch(`/me/alerts/${encodeURIComponent(t)}`,o)},update(t,o,n){return e.fetch(`/me/alerts/${encodeURIComponent(t)}`,{...n,method:"PUT",body:o})},remove(t,o){return e.fetch(`/me/alerts/${encodeURIComponent(t)}`,{...o,method:"DELETE"})}},applications:{list(t,o){return e.fetch("/me/applications",{...o,query:t})},retrieve(t,o){return e.fetch(`/me/applications/${encodeURIComponent(t)}`,o)},updateFacts(t,o,n){return e.fetch(`/me/applications/${encodeURIComponent(t)}`,{...n,method:"PATCH",body:o})},withdraw(t,o){return e.fetch(`/me/applications/${encodeURIComponent(t)}/withdraw`,{...o,method:"POST"})}},resume:{upload(t,o,n){let r=new FormData;return r.append("resume",t),o?.keepResumeOnFile&&r.append("keepResumeOnFile","true"),o?.importMode&&r.append("importMode",o.importMode),o?.confirmReplaceAll&&r.append("confirmReplaceAll","true"),e.fetch("/me/resume",{...n,method:"POST",body:r})},retrieve(t){return e.fetch("/me/resume",t)},delete(t){return e.fetch("/me/resume",{...t,method:"DELETE"})}},recommendedJobs:{list(t,o){return e.fetch("/me/recommended-jobs",{...o,query:t})}},savedJobs:{list(t,o){return e.fetch("/me/saved-jobs",{...o,query:t})},save(t,o,n){return e.fetch("/me/saved-jobs",{...n,method:"POST",body:t,query:o})},unsave(t,o,n){return e.fetch(`/me/saved-jobs/${encodeURIComponent(t)}`,{...n,method:"DELETE",query:o})}},conversations:{list(t,o){return e.fetch("/me/conversations",{...o,query:t})},unreadCount(t){return e.fetch("/me/conversations/unread-count",t)},retrieve(t,o){return e.fetch(`/me/conversations/${encodeURIComponent(t)}`,o)},listMessages(t,o,n){return e.fetch(`/me/conversations/${encodeURIComponent(t)}/messages`,{...n,query:o})},start(t,o){return e.fetch("/me/conversations",{...o,method:"POST",body:t})},startAboutApplication(t,o){return e.fetch("/me/conversations/about-application",{...o,method:"POST",body:t})},reply(t,o,n){return e.fetch(`/me/conversations/${encodeURIComponent(t)}/reply`,{...n,method:"POST",body:o})},markRead(t,o){return e.fetch(`/me/conversations/${encodeURIComponent(t)}/read`,{...o,method:"POST"})},archive(t,o){return e.fetch(`/me/conversations/${encodeURIComponent(t)}/archive`,{...o,method:"POST"})},unarchive(t,o){return e.fetch(`/me/conversations/${encodeURIComponent(t)}/unarchive`,{...o,method:"POST"})},findExisting(t,o){return e.fetch("/me/conversations/find-existing",{...o,query:t})}},blocks:{list(t){return e.fetch("/me/blocks",t)},create(t,o){return e.fetch("/me/blocks",{...o,method:"POST",body:t})},remove(t,o){return e.fetch(`/me/blocks/${encodeURIComponent(t)}`,{...o,method:"DELETE"})},status(t,o){return e.fetch(`/me/blocks/${encodeURIComponent(t)}`,o)}},messages:{edit(t,o,n){return e.fetch(`/me/messages/${encodeURIComponent(t)}`,{...n,method:"PATCH",body:o})},unsend(t,o){return e.fetch(`/me/messages/${encodeURIComponent(t)}`,{...o,method:"DELETE"})},report(t,o,n){return e.fetch(`/me/messages/${encodeURIComponent(t)}/report`,{...n,method:"POST",body:o})}},marketingConsent:{retrieve(t){return e.fetch("/me/marketing-consent",t)},grant(t){return e.fetch("/me/marketing-consent/grant",{...t,method:"POST"})},withdraw(t){return e.fetch("/me/marketing-consent/withdraw",{...t,method:"POST"})}},access:{checkout(t,o){return e.fetch("/me/access/checkout",{...o,method:"POST",body:t})},retrieveCheckout(t,o){return e.fetch(`/me/access/checkout/${encodeURIComponent(t)}`,o)},grant(t){return e.fetch("/me/access/grant",t)},portal(t,o){return e.fetch("/me/access/portal",{...o,method:"POST",body:t})}}}}function Ue(e){return{async verify(t,o){let n=await e.fetch("/password/verify",{...o,method:"POST",body:{password:t}});return await e.storage.setItem(F,n.token),n}}}function Me(e){return{offers(t){return e.fetch("/paywall/offers/enabled",t)}}}function Je(e){return{list(t,o){return e.fetch("/plans",{...o,query:t})},salesLed(t){return e.fetch("/sales-led-plans",t)}}}function we(e){return{resolve(t,o){return e.fetch("/redirects/resolve",{...o,query:{path:t}})}}}function Ne(e){return{companies:{list(t){return e.fetch("/salaries/companies",t)}},titles:{list(t,o){return e.fetch("/salaries/titles",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/salaries/titles/${encodeURIComponent(t)}`,{...n,query:o})},locations(t,o,n){return e.fetch(`/salaries/titles/${encodeURIComponent(t)}/locations`,{...n,query:o})},location(t,o,n,r){return e.fetch(`/salaries/titles/${encodeURIComponent(t)}/${encodeURIComponent(o)}`,{...r,query:n})}},skills:{list(t,o){return e.fetch("/salaries/skills",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/salaries/skills/${encodeURIComponent(t)}`,{...n,query:o})},locations(t,o,n){return e.fetch(`/salaries/skills/${encodeURIComponent(t)}/locations`,{...n,query:o})},location(t,o,n,r){return e.fetch(`/salaries/skills/${encodeURIComponent(t)}/${encodeURIComponent(o)}`,{...r,query:n})}},locations:{list(t,o){return e.fetch("/salaries/locations",{...o,query:t})},retrieve(t,o,n){return e.fetch(`/salaries/locations/${encodeURIComponent(t)}`,{...n,query:o})},titles(t,o,n){return e.fetch(`/salaries/locations/${encodeURIComponent(t)}/titles`,{...n,query:o})},skills(t,o,n){return e.fetch(`/salaries/locations/${encodeURIComponent(t)}/skills`,{...n,query:o})}}}}function De(e){return{suggest(t,o){return e.fetch("/search/suggest",{...o,query:t})}}}function $e(e){return{list(t,o){return e.fetch("/talent",{...o,query:t})},retrieve(t,o){return e.fetch(`/talent/${encodeURIComponent(t)}`,o)}}}function Qe(e,t){return{resolve(o,n){return e.fetch(`/${t}/${encodeURIComponent(o)}`,n)}}}function je(e,t){return{...Qe(e,t),list(o,n){return e.fetch(`/${t}`,{...n,query:o})}}}function qe(e){return{categories:je(e,"categories"),skills:je(e,"skills"),remotePermits:{list(t){return e.fetch("/remote-permits",t)}},places:{...Qe(e,"places"),list(t,o){return e.fetch("/places",{...o,query:t})}}}}function Ge(e,t,o){async function*n(){let r=t;for(;;){let i=await e(r,o);if(yield i,!i.hasMore||i.nextCursor===null)return;let{offset:a,...s}=r??{};r={...s,cursor:i.nextCursor}}}return{pages:n,async*[Symbol.asyncIterator](){for await(let r of n())yield*r.data},async toArray({limit:r}){let i=[];for await(let a of n())if(i.push(...a.data),i.length>=r)break;return i.slice(0,r)}}}function He(e,t){return e.authorBoardUserId!==t}function Ve(e,t){let o=e.some(r=>r.authorBoardUserId===t);return e.some(r=>r.authorBoardUserId!==t)&&!o}function Ke(e,t){for(let o=e.length-1;o>=0;o--){let n=e[o];if(n.authorBoardUserId!==t)return n.id}return null}function X(e){let t=e.replace(/^[\u0000-\u0020]+|[\u0000-\u0020]+$/g,"").replace(/[\t\n\r]/g,""),o=/^([a-z][a-z0-9+.-]*):/i.exec(t)?.[1]?.toLowerCase();return o===void 0?!0:o==="http"||o==="https"||o==="mailto"}function ee(e){let t=e.applicationUrl&&X(e.applicationUrl)?e.applicationUrl:null;return!t&&!e.jobSlug?{kind:"none"}:e.registrationWall&&!e.viewer?{kind:"sign-in",reason:"registration-wall"}:t?{kind:"external",url:t}:e.jobSlug?e.viewer?e.viewer.emailVerified?e.applied?{kind:"applied"}:{kind:"native",jobSlug:e.jobSlug}:{kind:"verify-email"}:e.allowGuestApply?{kind:"guest",jobSlug:e.jobSlug}:{kind:"sign-in",reason:"native-apply"}:{kind:"none"}}function Ye(e){let t=ee({...e,registrationWall:!1,allowGuestApply:!1});return t.kind==="sign-in"?{kind:"sign-in"}:t}function Zt(e){let t=new x({baseUrl:e.baseUrl??Be,board:e.board,storage:Ae(e.auth?.storage,e.board),globalHeaders:e.globalHeaders,onRequest:e.onRequest,onResponse:e.onResponse,logger:e.logger});return{client:t,context(o){return t.fetch("",o)},seo(o){return t.fetch("/seo",o)},jobs:Ie(t),embed:Le(t),companies:Te(t),blog:_e(t),auth:Re(t),me:ke(t),password:Ue(t),taxonomy:qe(t),search:De(t),redirects:we(t),jobAlerts:Fe(t),jobPosting:xe(t),salaries:Ne(t),talent:$e(t),plans:Je(t),paywall:Me(t)}}var te={};_(te,{DEFAULT_SORT:()=>Xt,EMPLOYMENT_TYPES:()=>We,JOB_SORTS:()=>Xe,REMOTE_OPTIONS:()=>ze,SENIORITIES:()=>Ze,parseCompany:()=>tt,parseListingFilters:()=>to,parseSeniority:()=>et});var ze=["on_site","hybrid","remote"],We=["full_time","part_time","contract","internship","temporary"],Ze=["entry_level","associate","mid_level","senior","lead","principal","director","executive"],Xe=["relevance","newest","salary_high"],Xt="relevance";var eo=new Set(Ze);function et(e){let t=Array.isArray(e)?e:typeof e=="string"&&e?e.split(","):[],o=[],n=new Set;for(let r of t){if(typeof r!="string")continue;let i=r.trim().toLowerCase().normalize("NFC");!i||n.has(i)||eo.has(i)&&(n.add(i),o.push(i))}return o.length>0?o:void 0}function tt(e){let t=Array.isArray(e)?e:typeof e=="string"&&e?e.split(","):[],o=[],n=new Set;for(let r of t){if(typeof r!="string")continue;let i=r.trim().toLowerCase().normalize("NFC");if(!(!i||n.has(i))&&(n.add(i),o.push(i),o.length>=10))break}return o.length>0?o:void 0}function to(e){return{q:typeof e.q=="string"&&e.q?e.q:void 0,remoteOption:ze.includes(e.remoteOption)?e.remoteOption:void 0,employmentType:We.includes(e.employmentType)?e.employmentType:void 0,seniority:et(e.seniority),company:tt(e.company),sort:Xe.includes(e.sort)?e.sort:void 0}}var ce={};_(ce,{COUNTRY_CODES:()=>z,buildJobBreadcrumbs:()=>Y,countryOptions:()=>It,formatDate:()=>at,formatMonthYear:()=>lt,formatPublishedRelativeDate:()=>st,formatSalaryRange:()=>pt,formatSalaryStat:()=>j,formatSalaryStatRange:()=>I,normalizeWebsiteUrl:()=>U,resolveCustomFieldDisplay:()=>kt});function S(e){let t=e.trim();if(!t)return null;try{let o=t.replace(/_/g,"-"),[n]=Intl.getCanonicalLocales(o);if(!n)return null;let[r]=Intl.NumberFormat.supportedLocalesOf([n]);return r??null}catch{return null}}var ot=new Map,nt=new Map,rt=new Map,it=new Map;function oo(e){let t=ot.get(e);return t||(t=new Intl.RelativeTimeFormat(e,{numeric:"always",style:"short"}),ot.set(e,t)),t}function no(e){let t=nt.get(e);return t||(t=new Intl.RelativeTimeFormat(e,{numeric:"auto",style:"short"}),nt.set(e,t)),t}function ro(e){let t=rt.get(e);return t||(t=new Intl.DateTimeFormat(e,{dateStyle:"medium",timeZone:"UTC"}),rt.set(e,t)),t}function io(e){let t=it.get(e);return t||(t=new Intl.DateTimeFormat(e,{month:"short",year:"numeric",timeZone:"UTC"}),it.set(e,t)),t}function oe(e,t,o){try{return oo(o).format(e,t)}catch{return null}}function at(e,t){if(!t)return null;let o=new Date(t);if(Number.isNaN(o.getTime()))return null;let n=S(e);if(!n)return null;try{return ro(n).format(o)}catch{return o.toISOString().split("T")[0]}}function st(e,t,o=Date.now()){if(!t)return null;let n=new Date(t);if(Number.isNaN(n.getTime()))return null;let r=S(e);if(!r)return null;let i=o-n.getTime(),a=Math.abs(i),s=60*1e3,p=60*s,l=24*p,u=7*l,d=30*l,m=365*l;if(a<s)try{return no(r).format(0,"second")}catch{return oe(0,"second",r)}let y=[{unit:"year",ms:m},{unit:"month",ms:d},{unit:"week",ms:u},{unit:"day",ms:l},{unit:"hour",ms:p},{unit:"minute",ms:s}];for(let f of y)if(a>=f.ms){let A=Math.round(a/f.ms),c=i>=0?-A:A;return oe(c,f.unit,r)}let g=Math.round(a/1e3),C=i>=0?-g:g;return oe(C,"second",r)}function lt(e,t){if(!t)return null;let n=/^\d{4}-\d{2}(-\d{2})?$/.test(t)?new Date(t.length===7?`${t}-01T00:00:00.000Z`:`${t}T00:00:00.000Z`):new Date(t);if(Number.isNaN(n.getTime()))return null;let r=S(e);if(!r)return null;try{return io(r).format(n)}catch{return null}}var D=new Map;function ne(e,t,o,n="symbol",r="compact"){let i=`${t}:${o}:${n}:${r}`,a=D.get(i);if(a===void 0){try{let s={style:"currency",currency:o,currencyDisplay:n,notation:r};r==="compact"&&(s.compactDisplay="short",s.maximumFractionDigits=1,s.minimumFractionDigits=0),a=new Intl.NumberFormat(t,s)}catch{a=null}D.set(i,a)}return a?a.format(e):null}function re(e,t,o){if(typeof e.formatRange=="function")try{return e.formatRange(t,o)}catch{}try{return`${e.format(t)}\u2013${e.format(o)}`}catch{return null}}function ao(e,t,o,n,r="symbol",i="compact"){let a=`${o}:${n}:${r}:${i}:range`,s=D.get(a);if(s===void 0){try{let p={style:"currency",currency:n,currencyDisplay:r,notation:i};i==="compact"&&(p.compactDisplay="short",p.maximumFractionDigits=1,p.minimumFractionDigits=0),s=new Intl.NumberFormat(o,p)}catch{s=null}D.set(a,s)}return s?re(s,e,t):null}var so=new Set(["per_year","per_month","per_week","per_day","per_hour"]);function lo(...e){let t=!1;for(let o of e)if(!(o==null||!Number.isFinite(o))&&(t=!0,Math.abs(o)>=1e3))return"compact";return t?"standard":"compact"}function pt(e,t,o,n,r=null,i="symbol",a){let s=t==null||Number.isFinite(t),p=o==null||Number.isFinite(o);if(!s||!p||t==null&&o==null)return null;let l=r?.trim().toUpperCase()||null;if(!l)return null;let u=S(e);if(!u)return null;let d=a??lo(t,o),m=typeof n=="string"&&so.has(n)?n:null;if(t!=null&&o!=null){let g=t<=o?t:o,C=t<=o?o:t,f=g===C?ne(g,u,l,i,d):ao(g,C,u,l,i,d);return f?{text:f,timeframe:m,bound:"range"}:null}if(t!=null){let g=ne(t,u,l,i,d);return g?{text:g,timeframe:m,bound:"from"}:null}let y=ne(o,u,l,i,d);return y?{text:y,timeframe:m,bound:"upTo"}:null}var ct=new Map;function ut(...e){let t=!1;for(let o of e)if(!(o==null||!Number.isFinite(o))&&(t=!0,Math.abs(o)>=1e3))return"compact";return t?"standard":"compact"}function mt(e,t,o){let n=`${e}:${t}:${o}`,r=ct.get(n);if(r!==void 0)return r;let i;try{let a={style:"currency",currency:t,notation:o};o==="compact"&&(a.compactDisplay="short",a.minimumFractionDigits=0,a.maximumFractionDigits=1),i=new Intl.NumberFormat(e,a)}catch{i=null}return ct.set(n,i),i}function j(e,t,o,n){if(!Number.isFinite(t))return null;let r=o?.trim().toUpperCase()||null;if(!r)return null;let i=S(e);if(!i)return null;let a=n??ut(t),s=mt(i,r,a);return s?s.format(t):null}function I(e,t,o,n,r){if(!Number.isFinite(t)||!Number.isFinite(o))return null;let i=n?.trim().toUpperCase()||null;if(!i)return null;let a=S(e);if(!a)return null;let s=r??ut(t,o),p=mt(a,i,s);if(!p)return null;let l=Math.min(t,o),u=Math.max(t,o);return l===u?p.format(l):re(p,l,u)}var $=["entry_level","associate","mid_level","senior","lead","principal","director","executive"];function dt(e){return[...e].sort((t,o)=>{let n=$.indexOf(t.seniority),r=$.indexOf(o.seniority);return(n===-1?999:n)-(r===-1?999:r)})}var po={unitText:"YEAR",duration:"P1Y"};function k(e,t,o,n,r={}){return{"@type":"MonetaryAmountDistribution",...e!==void 0?{name:e}:{},currency:t,minValue:o,maxValue:n,...r,...po}}function ie(e,t,o,n){return e.map(r=>{let i=n?.seniorityName?.({seniority:r.seniority,entity:o});return k(i,t,r.avgSalaryMin,r.avgSalaryMax)})}function Q(e,t,o,n){return{"@context":"https://schema.org","@type":e,name:t,...o,estimatedSalary:n}}function yt(e,t,o,n){if(!o)return[];let r=I(e,o.avgMin,o.avgMax,n);return[{kind:"average",label:t,range:r,avgMin:o.avgMin,avgMax:o.avgMax,currency:n,jobCount:o.jobCount},{kind:"methodology",label:t}]}function q(e){return e.length===0?null:{"@context":"https://schema.org","@type":"ItemList",numberOfItems:e.length,itemListElement:e.map((t,o)=>({"@type":"ListItem",position:o+1,name:t.name,url:t.url}))}}function gt(e){return e.length===0?null:{"@context":"https://schema.org","@type":"FAQPage",mainEntity:e.map(t=>({"@type":"Question",name:t.q,acceptedAnswer:{"@type":"Answer",text:t.a}}))}}function ft(e,t){return e.overallSalary?Q("Occupation",e.categoryName,{},[k(e.categoryName,e.currency,e.overallSalary.avgMin,e.overallSalary.avgMax,{...e.boardP25Min?{percentile25:e.boardP25Min}:{},...e.boardP75Max?{percentile75:e.boardP75Max}:{}}),...ie(e.bySeniority,e.currency,e.categoryName,t)]):null}function ht(e){return e.overallSalary?Q("Occupation",e.skillName,{},[k(e.skillName,e.currency,e.overallSalary.avgMin,e.overallSalary.avgMax,{median:Math.round((e.overallSalary.medianMin+e.overallSalary.medianMax)/2)})]):null}function bt(e,t){return!t?.occupationUrl||!(e.adminLevel==="city"||e.adminLevel==="locality")?null:q(e.topCategories.map(n=>({name:n.categoryName,url:t.occupationUrl(n)})))}function St(e,t){return e.overall?Q("Occupation",e.name,{occupationLocation:{"@type":"AdministrativeArea",name:e.placeName,address:{"@type":"PostalAddress",addressCountry:e.countryCode}}},[k(e.name,e.currency,e.overall.avgMin,e.overall.avgMax,{...e.overall.p25Min?{percentile25:e.overall.p25Min}:{},...e.overall.p75Max?{percentile75:e.overall.p75Max}:{}}),...ie(e.bySeniority,e.currency,e.name,t)]):null}function Ct(e,t){return t?.occupationUrl?q(e.byCategory.map(o=>({name:o.categoryName,url:t.occupationUrl(o)}))):null}function Ot(e,t){return e.overallSalary?Q("Occupation",e.categoryName,{occupationalCategory:e.categoryName,hiringOrganization:{"@type":"Organization",name:e.companyName}},[k(e.categoryName,e.currency,e.overallSalary.avgMin,e.overallSalary.avgMax,{...e.boardCategoryP25Min?{percentile25:e.boardCategoryP25Min}:{},...e.boardCategoryP75Max?{percentile75:e.boardCategoryP75Max}:{}}),...ie(e.bySeniority,e.currency,e.categoryName,t)]):null}function At(e,t){return e.company?.name??t.legalName??t.contact?.legalName??t.name??null}var Pt={high_school:"high school",associate_degree:"associate degree",bachelor_degree:"bachelor degree",professional_certificate:"professional certificate",postgraduate_degree:"postgraduate degree"},co={full_time:"FULL_TIME",part_time:"PART_TIME",contract:"CONTRACTOR",internship:"INTERN",temporary:"TEMPORARY",volunteer:"VOLUNTEER",other:"OTHER"},uo={per_year:"YEAR",per_month:"MONTH",per_week:"WEEK",per_day:"DAY",per_hour:"HOUR"},se=["AF","AX","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BV","BR","IO","VG","BN","BG","BF","BI","KH","CM","CA","CV","BQ","KY","CF","TD","CL","CN","CX","CC","CO","KM","CK","CR","HR","CU","CW","CY","CZ","DK","DJ","DM","DO","CD","EC","EG","SV","GQ","ER","EE","SZ","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","CI","JM","JP","JE","JO","KZ","KE","KI","XK","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","NC","NZ","NI","NE","NG","NU","NF","MK","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","CG","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SX","SK","SI","SB","SO","ZA","GS","KR","SS","ES","LK","SD","SR","SJ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","VI","UY","UZ","VU","VA","VE","VN","WF","EH","YE","ZM","ZW"];function vt({job:e,board:t,shareUrl:o}){let n=So(e),r=Co(e),i=ae({"@context":"https://schema.org/","@type":"JobPosting",title:e.title,description:e.description??"",identifier:mo(e,t),datePosted:Et(e.publishedAt),validThrough:Et(e.expiresAt),employmentType:e.employmentType?co[e.employmentType]??"OTHER":"OTHER",hiringOrganization:yo(e,t),jobLocation:fo(e),jobLocationType:e.remoteOption==="remote"?"TELECOMMUTE":void 0,applicantLocationRequirements:e.remoteOption==="remote"?bo(e):null,baseSalary:go(e),educationRequirements:n,experienceRequirements:r,experienceInPlaceOfEducation:e.experienceInPlaceOfEducation===!0&&n&&r?!0:void 0,url:o});return!i||Array.isArray(i)||Object.keys(i).length===0?null:i}function mo(e,t){let o=At(e,t),n={"@type":"PropertyValue",value:e.id};return o&&(n.name=o),n}function yo(e,t){let o=At(e,t);if(!o)return null;let n={"@type":"Organization",name:o},r=e.company?.website??null,i=r?U(r):null;i&&(n.sameAs=i);let a=e.company?.logoUrl??t.logoUrl??null;return a&&(n.logo=a),n}function U(e){let t=e.trim();return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function go(e){let t=e.salaryCurrency?.trim(),o=typeof e.salaryMin=="number",n=typeof e.salaryMax=="number";if(!t||!o&&!n)return null;let r={"@type":"QuantitativeValue"};o&&(r.minValue=e.salaryMin),n&&(r.maxValue=e.salaryMax);let i=e.salaryTimeframe?uo[e.salaryTimeframe]:void 0;return i&&(r.unitText=i),!o&&n&&typeof e.salaryMax=="number"?(r.value=e.salaryMax,r.minValue=e.salaryMax):!n&&o&&typeof e.salaryMin=="number"&&(r.value=e.salaryMin,r.maxValue=e.salaryMin),{"@type":"MonetaryAmount",currency:t.toUpperCase(),value:r}}function fo(e){let t=e.officeLocations.map(o=>ho({countryCode:o.countryCode,region:o.region,locality:o.city??o.locality,postalCode:o.postalCode,name:o.displayName})).filter(o=>o!==null);return t.length===0?null:t.length===1?t[0]:t}function ho({countryCode:e,region:t,locality:o,postalCode:n,name:r}){let i={"@type":"PostalAddress"},a=e?.trim(),s=t?.trim(),p=o?.trim(),l=n?.trim(),u=r?.trim();a&&(i.addressCountry=a.toUpperCase()),s&&(i.addressRegion=s),p&&(i.addressLocality=p),l&&(i.postalCode=l);let d=Object.keys(i).length>1;if(!d&&!u)return null;let m={"@type":"Place"};return u&&(m.name=u),d&&(m.address=i),m}function bo(e){if(e.remoteWorldwide)return se.map(n=>({"@type":"Country",name:n}));let t=[],o=new Set;for(let n of e.remoteWorkPermitCountryCodes??[]){let r=n?.trim().toUpperCase();!r||o.has(r)||(o.add(r),t.push({"@type":"Country",name:r}))}for(let n of e.remoteWorkPermitSubdivisionCodes??[]){let r=n?.split("-")[0]?.trim().toUpperCase();!r||o.has(r)||(o.add(r),t.push({"@type":"Country",name:r}))}return t.length===0?null:t.length===1?t[0]:t}function So(e){let t=e.educationRequirements;if(!t||t.length===0)return null;if(t.includes("no_requirements"))return"no requirements";let o=t.filter(n=>n in Pt).map(n=>({"@type":"EducationalOccupationalCredential",credentialCategory:Pt[n]}));return o.length>0?o:null}function Co(e){let t=e.experienceMonths;return typeof t!="number"?null:t===0?"no requirements":{"@type":"OccupationalExperienceRequirements",monthsOfExperience:t}}function Et(e){if(!e)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:t.toISOString()}function ae(e){let t=o=>o==null?!1:Array.isArray(o)?o.length>0:typeof o=="object"?Object.keys(o).length>0:!0;if(Array.isArray(e))return e.map(o=>ae(o)).filter(t);if(e&&typeof e=="object"){let o=Object.entries(e).map(([n,r])=>[n,ae(r)]).filter(([,n])=>t(n));return Object.fromEntries(o)}return e}var pe={};_(pe,{BOARD_PATHS:()=>V,blogAuthorPath:()=>Bo,blogPostPath:()=>Lt,blogTagPath:()=>Ft,boardUrl:()=>K,companyMarketPath:()=>Tt,companyPath:()=>_t,companySalaryPath:()=>Po,encodePathSegment:()=>h,goAlertsConfirmPath:()=>To,goAlertsManagePath:()=>_o,goJobPath:()=>Ro,jobDetailPath:()=>le,jobsCategoryPath:()=>G,jobsLocationCategoryPath:()=>H,jobsLocationPath:()=>M,jobsLocationSkillPath:()=>Rt,jobsSkillPath:()=>Bt,salaryLocationPath:()=>vo,salarySkillPath:()=>Ao,salaryTitlePath:()=>Eo,suggestionPath:()=>Oo});function h(e){try{return encodeURIComponent(decodeURIComponent(e)).replace(/%3A/gi,":")}catch{return encodeURIComponent(e).replace(/%3A/gi,":")}}function le(e,t){return`/companies/${h(e)}/jobs/${h(t)}`}function G(e){return`/jobs/${h(e)}`}function Bt(e){return`/jobs/skills/${h(e)}`}function M(e){return`/jobs/locations/${h(e)}`}function H(e,t){return`${M(e)}/${h(t)}`}function Rt(e,t){return`${M(e)}/skills/${h(t)}`}function _t(e){return`/companies/${h(e)}`}function Tt(e){return`/companies/markets/${h(e)}`}function Oo(e,t){let o=t.location?.trim()||void 0;return t.scope==="blog"?e.type==="post"?Lt(e.slug):e.type==="tag"?Ft(e.slug):null:t.scope==="jobs"?e.type==="company"||e.type==="market"||e.type==="post"||e.type==="tag"?null:e.termType==="skill"?o?Rt(o,e.canonicalSlug):Bt(e.canonicalSlug):o?H(o,e.canonicalSlug):G(e.canonicalSlug):e.type==="company"?_t(e.slug):e.type==="market"?Tt(e.slug):null}function Po(e){return`/companies/${h(e)}/salaries`}function Eo(e){return`/salaries/titles/${h(e)}`}function Ao(e){return`/salaries/skills/${h(e)}`}function vo(e){return`/salaries/locations/${h(e)}`}function Lt(e){return`/blog/${h(e)}`}function Ft(e){return`/blog/tag/${h(e)}`}function Bo(e){return`/blog/author/${h(e)}`}var V={home:"/",jobs:"/jobs",companies:"/companies",salaries:"/salaries",salaryCompanies:"/salaries/companies",salaryTitles:"/salaries/titles",salarySkills:"/salaries/skills",salaryLocations:"/salaries/locations",blog:"/blog",about:"/about",privacyPolicy:"/privacy-policy",termsOfService:"/terms-of-service",cookiePolicy:"/cookie-policy",impressum:"/impressum",talent:"/talent",employers:"/employers",alertsManage:"/alerts/manage",alertsConfirm:"/alerts/confirm"};function Ro(e){return`/go/job/${e}`}function _o(){return"/go/alerts-manage"}function To(){return"/go/alerts-confirm"}function K(e,t){return`${e.replace(/\/+$/,"")}${t}`}function xt(e,t={}){let o=e.map(r=>{let i=r.label?.trim();return i?{name:i,href:r.href?.trim()??null}:null}).filter(r=>!!r);return o.length<2?null:{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:o.map((r,i)=>{let a=r.href?Lo(r.href,t.origin??null):null,s={"@type":"ListItem",position:i+1,name:r.name};return a&&(s.item=a),s})}}function Lo(e,t){if(Fo(e))return e;if(!t)return null;let o=e.startsWith("/")?e:`/${e}`;return`${t}${o}`}function Fo(e){return/^https?:\/\//i.test(e)}function Y(e){let t=[{kind:"home",path:V.home},{kind:"jobs",path:V.jobs}],o=null;for(let r of e.placeHierarchy)o=r.slug,t.push({kind:"place",name:r.name,path:M(r.slug)});let n=e.categories[0];return n&&t.push({kind:"category",name:n.name,path:o?H(o,n.slug):G(n.slug)}),t.push({kind:"job",name:e.title}),t}var z=["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW"];function xo(e){try{return new Intl.DisplayNames([e],{type:"region"})}catch{return null}}function Io(e){try{return new Intl.Collator(e)}catch{return new Intl.Collator}}function It(e){let t=S(e);if(!t)return z.map(r=>({code:r,name:r})).sort((r,i)=>r.code<i.code?-1:r.code>i.code?1:0);let o=xo(t),n=Io(t).compare;return z.map(r=>({code:r,name:o?.of(r)??r})).sort((r,i)=>n(r.name,i.name))}function ko(e,t){if(!Array.isArray(t)||t.length===0)return null;let o=t.map(n=>e.options?.find(r=>r.key===n)?.label).filter(n=>!!n);return o.length>0?o:null}function Uo(e,t){switch(e.type){case"number":return null;case"multi_select":return null;case"single_select":return typeof t!="string"?null:e.options?.find(o=>o.key===t)?.label??null;default:return typeof t=="string"&&t.trim()!==""?t:null}}function kt(e,t,o){let n=[];for(let r of t??[]){let i=o?.[r.key];if(r.type==="boolean"){typeof i=="boolean"&&n.push({key:r.key,label:r.label,kind:"boolean",value:i});continue}if(r.type==="number"){typeof i=="number"&&Number.isFinite(i)&&n.push({key:r.key,label:r.label,kind:"number",value:i});continue}if(r.type==="multi_select"){let s=ko(r,i);s&&n.push({key:r.key,label:r.label,kind:"multi_select",values:s});continue}let a=Uo(r,i);a!==null&&n.push({key:r.key,label:r.label,kind:"text",value:a})}return n}var ue={};_(ue,{ALL_COUNTRY_CODES:()=>se,SENIORITY_ORDER:()=>$,buildJobBreadcrumbs:()=>Y,buildSalaryFaq:()=>yt,companyCategorySalaryJsonLd:()=>Ot,companySalaryJsonLd:()=>Ct,createAuthorProfileJsonLd:()=>Mt,createBlogArticleJsonLd:()=>Ut,createBreadcrumbJsonLd:()=>xt,createJobPostingJsonLd:()=>vt,crossAxisSalaryJsonLd:()=>St,faqJsonLd:()=>gt,formatSalaryStat:()=>j,formatSalaryStatRange:()=>I,itemListJsonLd:()=>q,listingHead:()=>Jt,listingJsonLd:()=>wt,locationSalaryJsonLd:()=>bt,normalizeWebsiteUrl:()=>U,skillSalaryJsonLd:()=>ht,sortBySeniority:()=>dt,titleSalaryJsonLd:()=>ft});function Ut({post:e,boardName:t,permalink:o,ogImageUrl:n}){let r={"@context":"https://schema.org","@type":"Article",headline:e.title,url:o,mainEntityOfPage:{"@type":"WebPage","@id":o},publisher:{"@type":"Organization",name:t}};e.customExcerpt&&(r.description=e.customExcerpt),e.publishedAt&&(r.datePublished=e.publishedAt);let i=e.coverUrl??n;i&&(r.image=i);let a=e.authors[0];return a&&(r.author={"@type":"Person",name:a.name,...a.websiteUrl?{url:a.websiteUrl}:{}}),r}function Mt({author:e,canonical:t,description:o,origin:n,posts:r,totalPosts:i}){if(!e.name)return null;let a=o.trim(),s=[W(e.websiteUrl),W(e.twitterUrl),W(e.linkedinUrl),W(e.githubUrl)].filter(m=>!!m),p=`${t}#profile`,l=r.slice(0,5).map(m=>{let y=Mo(n,`/blog/${m.slug}`);return y?{"@type":"Article",headline:m.title,url:y,datePublished:m.publishedAt,author:{"@id":p}}:null}).filter(m=>m!==null),u=i>0?{"@type":"InteractionCounter",interactionType:"https://schema.org/WriteAction",userInteractionCount:i}:void 0,d={"@context":"https://schema.org","@type":"ProfilePage",url:t,mainEntity:{"@type":"Person","@id":p,name:e.name,alternateName:e.slug??void 0,identifier:e.id??void 0,description:a||void 0,image:e.avatarUrl??void 0,sameAs:s.length>0?s:void 0,url:t,mainEntityOfPage:t,agentInteractionStatistic:u}};return l.length>0&&(d.hasPart=l),d}function W(e){if(!e)return null;let t=e.trim();if(!t)return null;try{let o=t.startsWith("http://")||t.startsWith("https://")?t:`https://${t}`;return new URL(o).toString()}catch{return null}}function Mo(e,t){if(!e||!t)return null;try{return new URL(t,e).toString()}catch{return null}}function Jt(e){let t=e.title,o=e.description,n=`${e.origin}${e.path}`;return{meta:[{title:t},{name:"description",content:o},{property:"og:title",content:t},{property:"og:description",content:o},{property:"og:type",content:"website"},{property:"og:url",content:n}],links:[{rel:"canonical",href:n}]}}function wt(e){let t=[];e.breadcrumbs.length>=2&&t.push({"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.breadcrumbs.map((n,r)=>({"@type":"ListItem",position:r+1,name:n.name,...n.path?{item:K(e.origin,n.path)}:{}}))});let o=(e.jobs??[]).filter(n=>n.company!=null&&!!n.company.slug);return o.length>0&&t.push({"@context":"https://schema.org","@type":"ItemList",itemListElement:o.map((n,r)=>({"@type":"ListItem",position:r+1,url:K(e.origin,le(n.company.slug,n.slug))}))}),t}var me={};_(me,{createSuggestController:()=>No});function Jo(e){return typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"||e instanceof Error&&e.name==="AbortError"}function wo(e){try{let t=0;for(let o of new Intl.Segmenter(void 0,{granularity:"grapheme"}).segment(e))t+=1;return t}catch{return[...e].length}}function Nt(e,t){return t.size===0?e.slice():e.filter(o=>!(o.type==="company"&&t.has(o.slug.toLowerCase().normalize("NFC"))))}function No(e,t){let o=t?.minChars??2,n=t?.debounceMs??250,r=t?.limit,i=!1,a={query:"",items:[],status:"idle",error:null},s=[],p=new Set,l=0,u=null,d=null,m=new Set;function y(){for(let c of m)c()}function g(c){a=c,y()}function C(){u!==null&&(globalThis.clearTimeout(u),u=null)}function f(){d&&(d.abort(),d=null)}function A(c){let b=++l;f();let O=new AbortController;d=O;let R={q:c};r!==void 0&&(R.limit=r),e.search.suggest(R,{signal:O.signal}).then(v=>{i||b!==l||(d=null,s=v.items,g({query:a.query,items:Nt(s,p),status:"ready",error:null}))}).catch(v=>{i||b!==l||Jo(v)||(d=null,g({query:a.query,items:a.items,status:"error",error:v}))})}return{setQuery(c){if(i)return;let b=c.trim();if(C(),wo(b)<o){l+=1,f(),s=[],g({query:c,items:[],status:"idle",error:null});return}l+=1,f(),g({query:c,items:a.items,status:"loading",error:null}),u=globalThis.setTimeout(()=>{u=null,!i&&A(b)},n)},setExcludedCompanySlugs(c){i||(p=new Set(c.map(b=>b.trim().toLowerCase().normalize("NFC")).filter(Boolean)),g({query:a.query,items:Nt(s,p),status:a.status,error:a.error}))},getState(){return a},subscribe(c){return i?()=>{}:(m.add(c),()=>{m.delete(c)})},dispose(){i||(i=!0,C(),f(),l+=1,m.clear())}}}return Gt(Do);})();
|
|
@@ -444,6 +444,9 @@ function companyCategorySalaryJsonLd(d, options) {
|
|
|
444
444
|
}
|
|
445
445
|
|
|
446
446
|
// src/seo/job-posting.ts
|
|
447
|
+
function organizationName(job, board) {
|
|
448
|
+
return job.company?.name ?? board.legalName ?? board.contact?.legalName ?? board.name ?? null;
|
|
449
|
+
}
|
|
447
450
|
var EDUCATION_TO_CREDENTIAL = {
|
|
448
451
|
high_school: "high school",
|
|
449
452
|
associate_degree: "associate degree",
|
|
@@ -750,13 +753,13 @@ function createJobPostingJsonLd({
|
|
|
750
753
|
return jsonLd;
|
|
751
754
|
}
|
|
752
755
|
function createIdentifier(job, board) {
|
|
753
|
-
const
|
|
756
|
+
const name = organizationName(job, board);
|
|
754
757
|
const identifier = { "@type": "PropertyValue", value: job.id };
|
|
755
|
-
if (
|
|
758
|
+
if (name) identifier.name = name;
|
|
756
759
|
return identifier;
|
|
757
760
|
}
|
|
758
761
|
function createHiringOrganization(job, board) {
|
|
759
|
-
const name = job
|
|
762
|
+
const name = organizationName(job, board);
|
|
760
763
|
if (!name) return null;
|
|
761
764
|
const organization = { "@type": "Organization", name };
|
|
762
765
|
const website = job.company?.website ?? null;
|
package/dist/filters.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-
|
|
2
|
-
import './_spec-
|
|
1
|
+
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-BWpm-Jf0.mjs';
|
|
2
|
+
import './_spec-mFq9K67X.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-
|
|
2
|
-
import './_spec-
|
|
1
|
+
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-hZ3Kezhg.js';
|
|
2
|
+
import './_spec-mFq9K67X.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-
|
|
2
|
-
import { C as CustomFieldDefinition } from './board-
|
|
3
|
-
import { C as CustomFieldValues } from './jobs-
|
|
4
|
-
import './_spec-
|
|
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-BSP53mOY.mjs';
|
|
2
|
+
import { C as CustomFieldDefinition } from './board-CkYDc1Lz.mjs';
|
|
3
|
+
import { C as CustomFieldValues } from './jobs-BWpm-Jf0.mjs';
|
|
4
|
+
import './_spec-mFq9K67X.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-
|
|
2
|
-
import { C as CustomFieldDefinition } from './board-
|
|
3
|
-
import { C as CustomFieldValues } from './jobs-
|
|
4
|
-
import './_spec-
|
|
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-BZzQwS8O.js';
|
|
2
|
+
import { C as CustomFieldDefinition } from './board-Po58Sn65.js';
|
|
3
|
+
import { C as CustomFieldValues } from './jobs-hZ3Kezhg.js';
|
|
4
|
+
import './_spec-mFq9K67X.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Date display helpers in the board language (required leading parameter,
|
package/dist/format.mjs
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { S as Schemas, c as components } from './_spec-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
-
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-
|
|
6
|
-
export { B as BoardSeo } from './seo-
|
|
7
|
-
import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-
|
|
8
|
-
export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-
|
|
9
|
-
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-
|
|
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-
|
|
1
|
+
import { S as Schemas, c as components } from './_spec-mFq9K67X.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-DRIGekdi.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-DRIGekdi.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-CkYDc1Lz.mjs';
|
|
5
|
+
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-CkYDc1Lz.mjs';
|
|
6
|
+
export { B as BoardSeo } from './seo-D9wvr1nK.mjs';
|
|
7
|
+
import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-BWpm-Jf0.mjs';
|
|
8
|
+
export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-BWpm-Jf0.mjs';
|
|
9
|
+
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-ClPGMp-z.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-ClPGMp-z.mjs';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
|
|
@@ -143,7 +143,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
|
|
|
143
143
|
* constant because the package is platform-neutral and cannot read
|
|
144
144
|
* package.json at runtime.
|
|
145
145
|
*/
|
|
146
|
-
declare const SDK_VERSION = "4.
|
|
146
|
+
declare const SDK_VERSION = "4.13.0";
|
|
147
147
|
|
|
148
148
|
type SavedJob = Schemas['SavedJob'];
|
|
149
149
|
type SavedJobsListQuery = {
|
|
@@ -897,6 +897,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
897
897
|
};
|
|
898
898
|
contact: {
|
|
899
899
|
email: string | null;
|
|
900
|
+
legalName: string | null;
|
|
900
901
|
websiteUrl: string | null;
|
|
901
902
|
xUrl: string | null;
|
|
902
903
|
facebookUrl: string | null;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { S as Schemas, c as components } from './_spec-
|
|
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-
|
|
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-
|
|
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-
|
|
5
|
-
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-
|
|
6
|
-
export { B as BoardSeo } from './seo-
|
|
7
|
-
import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-
|
|
8
|
-
export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-
|
|
9
|
-
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-
|
|
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-
|
|
1
|
+
import { S as Schemas, c as components } from './_spec-mFq9K67X.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-DSLK6Cch.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-DSLK6Cch.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-Po58Sn65.js';
|
|
5
|
+
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-Po58Sn65.js';
|
|
6
|
+
export { B as BoardSeo } from './seo-CMNJMZcT.js';
|
|
7
|
+
import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-hZ3Kezhg.js';
|
|
8
|
+
export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-hZ3Kezhg.js';
|
|
9
|
+
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-BJF7uypj.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-BJF7uypj.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
|
|
@@ -143,7 +143,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
|
|
|
143
143
|
* constant because the package is platform-neutral and cannot read
|
|
144
144
|
* package.json at runtime.
|
|
145
145
|
*/
|
|
146
|
-
declare const SDK_VERSION = "4.
|
|
146
|
+
declare const SDK_VERSION = "4.13.0";
|
|
147
147
|
|
|
148
148
|
type SavedJob = Schemas['SavedJob'];
|
|
149
149
|
type SavedJobsListQuery = {
|
|
@@ -897,6 +897,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
897
897
|
};
|
|
898
898
|
contact: {
|
|
899
899
|
email: string | null;
|
|
900
|
+
legalName: string | null;
|
|
900
901
|
websiteUrl: string | null;
|
|
901
902
|
xUrl: string | null;
|
|
902
903
|
facebookUrl: string | null;
|
package/dist/index.js
CHANGED
package/dist/index.mjs
CHANGED
package/dist/seo-files.d.mts
CHANGED
package/dist/seo-files.d.ts
CHANGED
package/dist/seo.d.mts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-
|
|
2
|
-
import { e as JsonLdObject } from './breadcrumbs-
|
|
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-
|
|
4
|
-
import './_spec-
|
|
5
|
-
import './board-
|
|
6
|
-
import './jobs-
|
|
1
|
+
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-ClPGMp-z.mjs';
|
|
2
|
+
import { e as JsonLdObject } from './breadcrumbs-BSP53mOY.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-BSP53mOY.mjs';
|
|
4
|
+
import './_spec-mFq9K67X.mjs';
|
|
5
|
+
import './board-CkYDc1Lz.mjs';
|
|
6
|
+
import './jobs-BWpm-Jf0.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-
|
|
2
|
-
import { e as JsonLdObject } from './breadcrumbs-
|
|
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-
|
|
4
|
-
import './_spec-
|
|
5
|
-
import './board-
|
|
6
|
-
import './jobs-
|
|
1
|
+
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-BJF7uypj.js';
|
|
2
|
+
import { e as JsonLdObject } from './breadcrumbs-BZzQwS8O.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-BZzQwS8O.js';
|
|
4
|
+
import './_spec-mFq9K67X.js';
|
|
5
|
+
import './board-Po58Sn65.js';
|
|
6
|
+
import './jobs-hZ3Kezhg.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Blog structured data on the `@cavuno/board` wire types, transcribed from
|
package/dist/seo.js
CHANGED
|
@@ -282,6 +282,9 @@ function buildJobBreadcrumbs(job) {
|
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
// src/seo/job-posting.ts
|
|
285
|
+
function organizationName(job, board) {
|
|
286
|
+
return job.company?.name ?? board.legalName ?? board.contact?.legalName ?? board.name ?? null;
|
|
287
|
+
}
|
|
285
288
|
var EDUCATION_TO_CREDENTIAL = {
|
|
286
289
|
high_school: "high school",
|
|
287
290
|
associate_degree: "associate degree",
|
|
@@ -588,13 +591,13 @@ function createJobPostingJsonLd({
|
|
|
588
591
|
return jsonLd;
|
|
589
592
|
}
|
|
590
593
|
function createIdentifier(job, board) {
|
|
591
|
-
const
|
|
594
|
+
const name = organizationName(job, board);
|
|
592
595
|
const identifier = { "@type": "PropertyValue", value: job.id };
|
|
593
|
-
if (
|
|
596
|
+
if (name) identifier.name = name;
|
|
594
597
|
return identifier;
|
|
595
598
|
}
|
|
596
599
|
function createHiringOrganization(job, board) {
|
|
597
|
-
const name = job
|
|
600
|
+
const name = organizationName(job, board);
|
|
598
601
|
if (!name) return null;
|
|
599
602
|
const organization = { "@type": "Organization", name };
|
|
600
603
|
const website = job.company?.website ?? null;
|
package/dist/seo.mjs
CHANGED
package/dist/server.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BoardSdk } from './index.mjs';
|
|
2
|
-
import './_spec-
|
|
3
|
-
import './search-
|
|
4
|
-
import './board-
|
|
5
|
-
import './jobs-
|
|
6
|
-
import './seo-
|
|
7
|
-
import './blog-
|
|
2
|
+
import './_spec-mFq9K67X.mjs';
|
|
3
|
+
import './search-DRIGekdi.mjs';
|
|
4
|
+
import './board-CkYDc1Lz.mjs';
|
|
5
|
+
import './jobs-BWpm-Jf0.mjs';
|
|
6
|
+
import './seo-D9wvr1nK.mjs';
|
|
7
|
+
import './blog-ClPGMp-z.mjs';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Session cookie codec — pure (no framework imports, no node imports) so it
|
package/dist/server.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BoardSdk } from './index.js';
|
|
2
|
-
import './_spec-
|
|
3
|
-
import './search-
|
|
4
|
-
import './board-
|
|
5
|
-
import './jobs-
|
|
6
|
-
import './seo-
|
|
7
|
-
import './blog-
|
|
2
|
+
import './_spec-mFq9K67X.js';
|
|
3
|
+
import './search-DSLK6Cch.js';
|
|
4
|
+
import './board-Po58Sn65.js';
|
|
5
|
+
import './jobs-hZ3Kezhg.js';
|
|
6
|
+
import './seo-CMNJMZcT.js';
|
|
7
|
+
import './blog-BJF7uypj.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Session cookie codec — pure (no framework imports, no node imports) so it
|
package/dist/sitemap.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BoardSdk } from './index.mjs';
|
|
2
|
-
import './_spec-
|
|
3
|
-
import './search-
|
|
4
|
-
import './board-
|
|
5
|
-
import './jobs-
|
|
6
|
-
import './seo-
|
|
7
|
-
import './blog-
|
|
2
|
+
import './_spec-mFq9K67X.mjs';
|
|
3
|
+
import './search-DRIGekdi.mjs';
|
|
4
|
+
import './board-CkYDc1Lz.mjs';
|
|
5
|
+
import './jobs-BWpm-Jf0.mjs';
|
|
6
|
+
import './seo-D9wvr1nK.mjs';
|
|
7
|
+
import './blog-ClPGMp-z.mjs';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Sitemap primitives — the pure XML + bucket-filename logic behind a board
|
package/dist/sitemap.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { BoardSdk } from './index.js';
|
|
2
|
-
import './_spec-
|
|
3
|
-
import './search-
|
|
4
|
-
import './board-
|
|
5
|
-
import './jobs-
|
|
6
|
-
import './seo-
|
|
7
|
-
import './blog-
|
|
2
|
+
import './_spec-mFq9K67X.js';
|
|
3
|
+
import './search-DSLK6Cch.js';
|
|
4
|
+
import './board-Po58Sn65.js';
|
|
5
|
+
import './jobs-hZ3Kezhg.js';
|
|
6
|
+
import './seo-CMNJMZcT.js';
|
|
7
|
+
import './blog-BJF7uypj.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Sitemap primitives — the pure XML + bucket-filename logic behind a board
|
package/dist/suggest.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-
|
|
2
|
-
import './_spec-
|
|
1
|
+
import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-DRIGekdi.mjs';
|
|
2
|
+
import './_spec-mFq9K67X.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@cavuno/board/suggest` — framework-agnostic headless search-suggest
|
package/dist/suggest.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-
|
|
2
|
-
import './_spec-
|
|
1
|
+
import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-DSLK6Cch.js';
|
|
2
|
+
import './_spec-mFq9K67X.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@cavuno/board/suggest` — framework-agnostic headless search-suggest
|
package/package.json
CHANGED
|
@@ -12,12 +12,15 @@ Google requires a location signal alongside `TELECOMMUTE`.
|
|
|
12
12
|
```ts snippet
|
|
13
13
|
import { createJobPostingJsonLd } from '@cavuno/board/seo';
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
// Pass the context straight through: it carries `contact.legalName`, which
|
|
16
|
+
// names the organization for a job with no company of its own. Destructuring
|
|
17
|
+
// to `{ name, logoUrl }` silently drops that.
|
|
18
|
+
const context = await board.context();
|
|
16
19
|
const job = await board.jobs.retrieve('senior-chef');
|
|
17
20
|
|
|
18
21
|
const jsonLd = createJobPostingJsonLd({
|
|
19
22
|
job,
|
|
20
|
-
board:
|
|
23
|
+
board: context,
|
|
21
24
|
shareUrl:
|
|
22
25
|
`https://jobs.example.com/companies/${job.company?.slug}/jobs/${job.slug}`,
|
|
23
26
|
});
|
package/skills/manifest.json
CHANGED