@cavuno/board 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/{_spec-CT7rWhQ-.d.mts → _spec-COlkrizX.d.mts} +2 -0
  3. package/dist/{_spec-CT7rWhQ-.d.ts → _spec-COlkrizX.d.ts} +2 -0
  4. package/dist/{blog-DOBig1Wh.d.ts → blog-CgA_ljHa.d.ts} +1 -1
  5. package/dist/{blog-CJda3-Ab.d.mts → blog-DO8Yn21_.d.mts} +1 -1
  6. package/dist/{board-O990tPTt.d.ts → board-D51C3gB5.d.ts} +2 -2
  7. package/dist/{board-BLwReKB8.d.mts → board-JgFR-2UW.d.mts} +2 -2
  8. package/dist/{breadcrumbs-ClvafKXZ.d.ts → breadcrumbs-_QzN4nEk.d.ts} +2 -2
  9. package/dist/{breadcrumbs-CQjU_wHB.d.mts → breadcrumbs-zAN2biAq.d.mts} +2 -2
  10. package/dist/browser/cavuno-board.global.min.js +1 -0
  11. package/dist/filters.d.mts +2 -2
  12. package/dist/filters.d.ts +2 -2
  13. package/dist/format.d.mts +4 -4
  14. package/dist/format.d.ts +4 -4
  15. package/dist/index.d.mts +14 -10
  16. package/dist/index.d.ts +14 -10
  17. package/dist/index.js +1 -1
  18. package/dist/index.mjs +1 -1
  19. package/dist/{jobs-CZUpStJ3.d.mts → jobs-C1Mxty1n.d.mts} +1 -1
  20. package/dist/{jobs-Cf7J5vJe.d.ts → jobs-DOF3QXdq.d.ts} +1 -1
  21. package/dist/{search-CHLEpKE5.d.mts → search-Cx_dsVUb.d.mts} +1 -1
  22. package/dist/{search-YWruydKJ.d.ts → search-_QDaN6Um.d.ts} +1 -1
  23. package/dist/seo.d.mts +6 -6
  24. package/dist/seo.d.ts +6 -6
  25. package/dist/server.d.mts +5 -5
  26. package/dist/server.d.ts +5 -5
  27. package/dist/sitemap.d.mts +5 -5
  28. package/dist/sitemap.d.ts +5 -5
  29. package/dist/suggest.d.mts +2 -2
  30. package/dist/suggest.d.ts +2 -2
  31. package/package.json +7 -2
  32. package/skills/cavuno-board-blog/SKILL.md +7 -4
  33. package/skills/manifest.json +1 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,31 @@
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.4.0 — 2026-08-10
7
+
8
+ - **Classic-script browser build**: `@cavuno/board` now ships a dependency-free
9
+ ES2020 IIFE at `dist/browser/cavuno-board.global.min.js` for static HTML,
10
+ CMS, and other no-build integrations. It installs `globalThis.CavunoBoard`
11
+ with the complete root client plus the browser-safe `format`, `filters`,
12
+ `suggest`, `seo`, and `paths` namespaces. Existing ESM and CommonJS entries
13
+ are unchanged; use ESM subpaths when tree-shaking matters. Production script
14
+ tags should pin 4.4.0 exactly and use the release SHA-384 integrity value.
15
+ - **Automation job lifecycle events**: Zapier exposes separate job-created,
16
+ job-updated, and job-deleted triggers. Created and updated events carry the
17
+ allowlisted job snapshot, including HTML `description` and the public job
18
+ `url`; deleted events carry the minimal tombstone required to remove a
19
+ downstream copy.
20
+
21
+ ## 4.3.1 — 2026-08-07
22
+
23
+ - **Public blog authors: `location` and `facebookUrl`**: list, retrieve, and
24
+ post-embedded author objects now include optional `location` (free-text
25
+ label, e.g. `"Sydney, Australia"`) and `facebookUrl` (normalized Facebook
26
+ profile URL). Both are `string | null` on the wire; omit empty UI when null.
27
+ Generated OpenAPI types and the `cavuno-board-blog` skill document the
28
+ fields. Operators set them in the Cavuno author form (or v1 author write
29
+ APIs).
30
+
6
31
  ## 4.3.0 — 2026-08-07
7
32
 
8
33
  - **`CompanyPublic.salarySampleCount`**: number of jobs that contribute to a
@@ -1629,8 +1629,10 @@ interface components {
1629
1629
  name: string;
1630
1630
  slug: string;
1631
1631
  bio: string | null;
1632
+ location: string | null;
1632
1633
  avatarUrl: string | null;
1633
1634
  websiteUrl: string | null;
1635
+ facebookUrl: string | null;
1634
1636
  twitterUrl: string | null;
1635
1637
  linkedinUrl: string | null;
1636
1638
  githubUrl: string | null;
@@ -1629,8 +1629,10 @@ interface components {
1629
1629
  name: string;
1630
1630
  slug: string;
1631
1631
  bio: string | null;
1632
+ location: string | null;
1632
1633
  avatarUrl: string | null;
1633
1634
  websiteUrl: string | null;
1635
+ facebookUrl: string | null;
1634
1636
  twitterUrl: string | null;
1635
1637
  linkedinUrl: string | null;
1636
1638
  githubUrl: string | null;
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-CT7rWhQ-.js';
1
+ import { S as Schemas } from './_spec-COlkrizX.js';
2
2
 
3
3
  /** Author shape embedded on posts (no `object` discriminator). */
4
4
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-CT7rWhQ-.mjs';
1
+ import { S as Schemas } from './_spec-COlkrizX.mjs';
2
2
 
3
3
  /** Author shape embedded on posts (no `object` discriminator). */
4
4
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -1,5 +1,5 @@
1
- import { S as Schemas } from './_spec-CT7rWhQ-.js';
2
- import { L as ListEnvelope, m as RelatedSearch } from './jobs-Cf7J5vJe.js';
1
+ import { S as Schemas } from './_spec-COlkrizX.js';
2
+ import { L as ListEnvelope, m as RelatedSearch } from './jobs-DOF3QXdq.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 { S as Schemas } from './_spec-CT7rWhQ-.mjs';
2
- import { L as ListEnvelope, m as RelatedSearch } from './jobs-CZUpStJ3.mjs';
1
+ import { S as Schemas } from './_spec-COlkrizX.mjs';
2
+ import { L as ListEnvelope, m as RelatedSearch } from './jobs-C1Mxty1n.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 { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-O990tPTt.js';
2
- import { P as PublicJob } from './jobs-Cf7J5vJe.js';
1
+ import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-D51C3gB5.js';
2
+ import { P as PublicJob } from './jobs-DOF3QXdq.js';
3
3
 
4
4
  /**
5
5
  * Wire enum for `salaryTimeframe`. Defined here (not re-exported from any
@@ -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-BLwReKB8.mjs';
2
- import { P as PublicJob } from './jobs-CZUpStJ3.mjs';
1
+ import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-JgFR-2UW.mjs';
2
+ import { P as PublicJob } from './jobs-C1Mxty1n.mjs';
3
3
 
4
4
  /**
5
5
  * Wire enum for `salaryTimeframe`. Defined here (not re-exported from any
@@ -0,0 +1 @@
1
+ "use strict";var CavunoBoard=(()=>{var M=Object.defineProperty;var Mt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Nt=Object.prototype.hasOwnProperty;var Dt=(e,t,o)=>t in e?M(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var L=(e,t)=>{for(var o in t)M(e,o,{get:t[o],enumerable:!0})},$t=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of wt(t))!Nt.call(e,r)&&r!==o&&M(e,r,{get:()=>t[r],enumerable:!(n=Mt(t,r))||n.enumerable});return e};var jt=e=>$t(M({},"__esModule",{value:!0}),e);var E=(e,t,o)=>Dt(e,typeof t!="symbol"?t+"":t,o);var Mo={};L(Mo,{ACCESS_TOKEN_KEY:()=>_,BOARD_ACCESS_GRANT_KEY:()=>x,BOARD_API_ERROR_CODES:()=>ce,BoardApiError:()=>A,BoardClient:()=>F,REFRESH_TOKEN_KEY:()=>T,SDK_VERSION:()=>w,createBoardClient:()=>Yt,filters:()=>X,format:()=>ae,isBoardApiError:()=>P,isBoardPasswordRequired:()=>de,isColdRule:()=>Ge,isConflict:()=>he,isForbidden:()=>ye,isNotFound:()=>ue,isOwnMessage:()=>qe,isRateLimited:()=>fe,isSafeApplicationUrl:()=>Z,isUnauthorized:()=>me,isValidationError:()=>ge,lastOwnMessageId:()=>He,paginate:()=>Qe,paths:()=>se,resolveApplyAction:()=>Ve,seo:()=>le,suggest:()=>pe});var ce=["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","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_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","resume_invalid_file","resume_upload_forbidden","applications_external_apply_only","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","paywall_already_active","paywall_disabled","paywall_invalid_checkout_session","paywall_no_candidate_profile","paywall_no_recurring_subscription","paywall_offer_not_found","job_posting_logo_lookup_unavailable","job_posting_logo_not_found","job_posting_rejected"],A=class extends Error{constructor(o){super(o.message);E(this,"status");E(this,"code");E(this,"details");E(this,"requestId");E(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 P(e){return e instanceof Error&&e.name==="BoardApiError"&&typeof e.status=="number"&&typeof e.code=="string"}function ue(e){return P(e)&&e.status===404}function me(e){return P(e)&&e.status===401}function de(e){return P(e)&&e.status===401&&e.code==="board_password_required"}function ye(e){return P(e)&&e.status===403}function ge(e){return P(e)&&e.status===400&&e.code==="validation_bad_request"}function fe(e){return P(e)&&e.status===429}function he(e){return P(e)&&e.status===409}function be(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 Se(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 _="cavuno_board_access_token",T="cavuno_board_refresh_token",x="cavuno_board_access_grant";function Ce(){return typeof globalThis.document<"u"}function Qt(){let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,o)=>{e.set(t,o)},removeItem:t=>{e.delete(t)}}}function qt(e,t){if(!Ce())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?`:${Se(t)}`:"";return{getItem:r=>o.getItem(`${r}${n}`),setItem:(r,i)=>{o.setItem(`${r}${n}`,i)},removeItem:r=>{o.removeItem(`${r}${n}`)}}}var Gt=Symbol.for("@cavuno/board:nostore");var Ht={[Gt]:!0,getItem:()=>null,setItem:()=>{},removeItem:()=>{}};function Oe(e,t){let o=e??(Ce()?"memory":"nostore");if(typeof o=="object")return o;switch(o){case"memory":return Qt();case"nostore":return Ht;case"local":case"session":return qt(o,t);default:throw new Error(`Unknown storage mode '${String(o)}'`)}}async function Ee(e,t){await e.setItem(_,t.accessToken),await e.setItem(T,t.refreshToken)}async function Pe(e){await e.removeItem(_),await e.removeItem(T)}var w="4.4.0";function Vt(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 Kt(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 F=class{constructor(t){E(this,"storage");E(this,"basePath");E(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,...s}=o,a=(o.method??"GET").toUpperCase(),p=`${this.basePath}${t}`,u=be(r).toString();u&&(p+=`?${u}`);let d=n!==void 0&&!Vt(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[B,W]of Object.entries(this.options.globalHeaders??{}))y.set(B,W);let g=await this.storage.getItem(_);g!==null&&y.set("authorization",`Bearer ${g}`);let C=await this.storage.getItem(x);C!==null&&y.set("x-board-access",C),i&&new Headers(i).forEach((B,W)=>{y.set(W,B)}),(a!=="GET"||y.has("authorization")||y.has("x-board-access"))&&!y.has("x-cavuno-sdk")&&y.set("x-cavuno-sdk",`board@${w}`);let f={url:p,init:{...s,method:a,headers:y,body:m}};this.options.onRequest&&(f=await this.options.onRequest(f));let R=Kt(f.url);this.options.logger?.debug(`${a} ${R}`);let c=await globalThis.fetch(f.url,f.init);if(this.options.logger?.debug(`${c.status} ${a} ${R}`),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,v=O&&typeof O.code=="string"&&typeof O.message=="string"?new A({status:c.status,code:O.code,message:O.message,details:O.details,requestId:O.requestId,raw:b}):new A({status:c.status,code:"unknown_error",message:c.statusText||"Request failed",raw:b});throw this.options.logger?.error(`${v.status} ${v.code} ${a} ${R}`),v}};var Re="https://api.cavuno.com";function Be(e){async function t(n){return await Ee(e.storage,n),n}async function o(n){if(n?.refreshToken)return n.refreshToken;let r=await e.storage.getItem(T);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),s=await e.fetch("/auth/refresh",{...r,method:"POST",body:{refreshToken:i}});return t(s)},async logout(n,r){let i=await o(n);await e.fetch("/auth/logout",{...r,method:"POST",body:{refreshToken:i}}),await Pe(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 Ae(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 ve(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,s){return e.fetch(`/companies/${encodeURIComponent(n)}/salaries/${encodeURIComponent(r)}`,{...s,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 _e(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 Te(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 xe(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??{}})},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 Fe(e){return{retrieve(t,o){return e.fetch("/me",{...o,query:t})},delete(t){return e.fetch("/me",{...t,method:"DELETE"})},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})},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)}},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})}},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)}},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"})}},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 Ie(e){return{async verify(t,o){let n=await e.fetch("/password/verify",{...o,method:"POST",body:{password:t}});return await e.storage.setItem(x,n.token),n}}}function ke(e){return{offers(t){return e.fetch("/paywall/offers/enabled",t)}}}function Ue(e){return{list(t,o){return e.fetch("/plans",{...o,query:t})},salesLed(t){return e.fetch("/sales-led-plans",t)}}}function Je(e){return{resolve(t,o){return e.fetch("/redirects/resolve",{...o,query:{path:t}})}}}function Me(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 we(e){return{suggest(t,o){return e.fetch("/search/suggest",{...o,query:t})}}}function Ne(e){return{list(t,o){return e.fetch("/talent",{...o,query:t})},retrieve(t,o){return e.fetch(`/talent/${encodeURIComponent(t)}`,o)}}}function $e(e,t){return{resolve(o,n){return e.fetch(`/${t}/${encodeURIComponent(o)}`,n)}}}function De(e,t){return{...$e(e,t),list(o,n){return e.fetch(`/${t}`,{...n,query:o})}}}function je(e){return{categories:De(e,"categories"),skills:De(e,"skills"),remotePermits:{list(t){return e.fetch("/remote-permits",t)}},places:{...$e(e,"places"),list(t,o){return e.fetch("/places",{...o,query:t})}}}}function Qe(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:s,...a}=r??{};r={...a,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 s of n())if(i.push(...s.data),i.length>=r)break;return i.slice(0,r)}}}function qe(e,t){return e.authorBoardUserId!==t}function Ge(e,t){let o=e.some(r=>r.authorBoardUserId===t);return e.some(r=>r.authorBoardUserId!==t)&&!o}function He(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 Z(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 Ve(e){return e.applicationUrl&&Z(e.applicationUrl)?{kind:"external",url:e.applicationUrl}:e.jobSlug?e.viewer?e.viewer.emailVerified?e.applied?{kind:"applied"}:{kind:"native",jobSlug:e.jobSlug}:{kind:"verify-email"}:{kind:"sign-in"}:{kind:"none"}}function Yt(e){let t=new F({baseUrl:e.baseUrl??Re,board:e.board,storage:Oe(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:xe(t),embed:Le(t),companies:ve(t),blog:Ae(t),auth:Be(t),me:Fe(t),password:Ie(t),taxonomy:je(t),search:we(t),redirects:Je(t),jobAlerts:_e(t),jobPosting:Te(t),salaries:Me(t),talent:Ne(t),plans:Ue(t),paywall:ke(t)}}var X={};L(X,{DEFAULT_SORT:()=>zt,EMPLOYMENT_TYPES:()=>Ye,JOB_SORTS:()=>We,REMOTE_OPTIONS:()=>Ke,SENIORITIES:()=>ze,parseCompany:()=>Xe,parseListingFilters:()=>Zt,parseSeniority:()=>Ze});var Ke=["on_site","hybrid","remote"],Ye=["full_time","part_time","contract","internship","temporary"],ze=["entry_level","associate","mid_level","senior","lead","principal","director","executive"],We=["relevance","newest","salary_high"],zt="relevance";var Wt=new Set(ze);function Ze(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)||Wt.has(i)&&(n.add(i),o.push(i))}return o.length>0?o:void 0}function Xe(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 Zt(e){return{q:typeof e.q=="string"&&e.q?e.q:void 0,remoteOption:Ke.includes(e.remoteOption)?e.remoteOption:void 0,employmentType:Ye.includes(e.employmentType)?e.employmentType:void 0,seniority:Ze(e.seniority),company:Xe(e.company),sort:We.includes(e.sort)?e.sort:void 0}}var ae={};L(ae,{COUNTRY_CODES:()=>Y,buildJobBreadcrumbs:()=>K,countryOptions:()=>Tt,formatDate:()=>rt,formatMonthYear:()=>st,formatPublishedRelativeDate:()=>it,formatSalaryRange:()=>at,formatSalaryStat:()=>$,formatSalaryStatRange:()=>I,normalizeWebsiteUrl:()=>U,resolveCustomFieldDisplay:()=>xt});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 et=new Map,tt=new Map,ot=new Map,nt=new Map;function Xt(e){let t=et.get(e);return t||(t=new Intl.RelativeTimeFormat(e,{numeric:"always",style:"short"}),et.set(e,t)),t}function eo(e){let t=tt.get(e);return t||(t=new Intl.RelativeTimeFormat(e,{numeric:"auto",style:"short"}),tt.set(e,t)),t}function to(e){let t=ot.get(e);return t||(t=new Intl.DateTimeFormat(e,{dateStyle:"medium",timeZone:"UTC"}),ot.set(e,t)),t}function oo(e){let t=nt.get(e);return t||(t=new Intl.DateTimeFormat(e,{month:"short",year:"numeric",timeZone:"UTC"}),nt.set(e,t)),t}function ee(e,t,o){try{return Xt(o).format(e,t)}catch{return null}}function rt(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 to(n).format(o)}catch{return o.toISOString().split("T")[0]}}function it(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(),s=Math.abs(i),a=60*1e3,p=60*a,l=24*p,u=7*l,d=30*l,m=365*l;if(s<a)try{return eo(r).format(0,"second")}catch{return ee(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:a}];for(let f of y)if(s>=f.ms){let R=Math.round(s/f.ms),c=i>=0?-R:R;return ee(c,f.unit,r)}let g=Math.round(s/1e3),C=i>=0?-g:g;return ee(C,"second",r)}function st(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 oo(r).format(n)}catch{return null}}var N=new Map;function te(e,t,o,n="symbol",r="compact"){let i=`${t}:${o}:${n}:${r}`,s=N.get(i);if(s===void 0){try{let a={style:"currency",currency:o,currencyDisplay:n,notation:r};r==="compact"&&(a.compactDisplay="short",a.maximumFractionDigits=1,a.minimumFractionDigits=0),s=new Intl.NumberFormat(t,a)}catch{s=null}N.set(i,s)}return s?s.format(e):null}function no(e,t,o,n,r="symbol",i="compact"){let s=`${o}:${n}:${r}:${i}:range`,a=N.get(s);if(a===void 0){try{let p={style:"currency",currency:n,currencyDisplay:r,notation:i};i==="compact"&&(p.compactDisplay="short",p.maximumFractionDigits=1,p.minimumFractionDigits=0),a=new Intl.NumberFormat(o,p)}catch{a=null}N.set(s,a)}return a?a.formatRange(e,t):null}var ro=new Set(["per_year","per_month","per_week","per_day","per_hour"]);function io(...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 at(e,t,o,n,r=null,i="symbol",s){let a=t==null||Number.isFinite(t),p=o==null||Number.isFinite(o);if(!a||!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=s??io(t,o),m=typeof n=="string"&&ro.has(n)?n:null;if(t!=null&&o!=null){let g=t<=o?t:o,C=t<=o?o:t,f=g===C?te(g,u,l,i,d):no(g,C,u,l,i,d);return f?{text:f,timeframe:m,bound:"range"}:null}if(t!=null){let g=te(t,u,l,i,d);return g?{text:g,timeframe:m,bound:"from"}:null}let y=te(o,u,l,i,d);return y?{text:y,timeframe:m,bound:"upTo"}:null}var lt=new Map;function pt(...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 ct(e,t,o){let n=`${e}:${t}:${o}`,r=lt.get(n);if(r!==void 0)return r;let i;try{let s={style:"currency",currency:t,notation:o};o==="compact"&&(s.compactDisplay="short",s.minimumFractionDigits=0,s.maximumFractionDigits=1),i=new Intl.NumberFormat(e,s)}catch{i=null}return lt.set(n,i),i}function $(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 s=n??pt(t),a=ct(i,r,s);return a?a.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 s=S(e);if(!s)return null;let a=r??pt(t,o),p=ct(s,i,a);if(!p)return null;let l=Math.min(t,o),u=Math.max(t,o);return l===u?p.format(l):p.formatRange(l,u)}var D=["entry_level","associate","mid_level","senior","lead","principal","director","executive"];function ut(e){return[...e].sort((t,o)=>{let n=D.indexOf(t.seniority),r=D.indexOf(o.seniority);return(n===-1?999:n)-(r===-1?999:r)})}var so={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,...so}}function oe(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 j(e,t,o,n){return{"@context":"https://schema.org","@type":e,name:t,...o,estimatedSalary:n}}function mt(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 dt(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 yt(e,t){return e.overallSalary?j("Occupation",e.categoryName,{},[k(e.categoryName,e.currency,e.overallSalary.avgMin,e.overallSalary.avgMax,{...e.boardP25Min?{percentile25:e.boardP25Min}:{},...e.boardP75Max?{percentile75:e.boardP75Max}:{}}),...oe(e.bySeniority,e.currency,e.categoryName,t)]):null}function gt(e){return e.overallSalary?j("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 ft(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 ht(e,t){return e.overall?j("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}:{}}),...oe(e.bySeniority,e.currency,e.name,t)]):null}function bt(e,t){return t?.occupationUrl?Q(e.byCategory.map(o=>({name:o.categoryName,url:t.occupationUrl(o)}))):null}function St(e,t){return e.overallSalary?j("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}:{}}),...oe(e.bySeniority,e.currency,e.categoryName,t)]):null}var Ct={high_school:"high school",associate_degree:"associate degree",bachelor_degree:"bachelor degree",professional_certificate:"professional certificate",postgraduate_degree:"postgraduate degree"},ao={full_time:"FULL_TIME",part_time:"PART_TIME",contract:"CONTRACTOR",internship:"INTERN",temporary:"TEMPORARY",volunteer:"VOLUNTEER",other:"OTHER"},lo={per_year:"YEAR",per_month:"MONTH",per_week:"WEEK",per_day:"DAY",per_hour:"HOUR"},re=["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 Et({job:e,board:t,shareUrl:o}){let n=fo(e),r=ho(e),i=ne({"@context":"https://schema.org/","@type":"JobPosting",title:e.title,description:e.description??"",identifier:po(e,t),datePosted:Ot(e.publishedAt),validThrough:Ot(e.expiresAt),employmentType:e.employmentType?ao[e.employmentType]??"OTHER":"OTHER",hiringOrganization:co(e,t),jobLocation:mo(e),jobLocationType:e.remoteOption==="remote"?"TELECOMMUTE":void 0,applicantLocationRequirements:e.remoteOption==="remote"?go(e):null,baseSalary:uo(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 po(e,t){let o=e.company?.name??t.name??null,n={"@type":"PropertyValue",value:e.id};return o&&(n.name=o),n}function co(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 s=e.company?.logoUrl??t.logoUrl??null;return s&&(n.logo=s),n}function U(e){let t=e.trim();return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function uo(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?lo[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 mo(e){let t=e.officeLocations.map(o=>yo({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 yo({countryCode:e,region:t,locality:o,postalCode:n,name:r}){let i={"@type":"PostalAddress"},s=e?.trim(),a=t?.trim(),p=o?.trim(),l=n?.trim(),u=r?.trim();s&&(i.addressCountry=s.toUpperCase()),a&&(i.addressRegion=a),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 go(e){if(e.remoteWorldwide)return re.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 fo(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 Ct).map(n=>({"@type":"EducationalOccupationalCredential",credentialCategory:Ct[n]}));return o.length>0?o:null}function ho(e){let t=e.experienceMonths;return typeof t!="number"?null:t===0?"no requirements":{"@type":"OccupationalExperienceRequirements",monthsOfExperience:t}}function Ot(e){if(!e)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:t.toISOString()}function ne(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=>ne(o)).filter(t);if(e&&typeof e=="object"){let o=Object.entries(e).map(([n,r])=>[n,ne(r)]).filter(([,n])=>t(n));return Object.fromEntries(o)}return e}var se={};L(se,{BOARD_PATHS:()=>H,blogAuthorPath:()=>Po,blogPostPath:()=>vt,blogTagPath:()=>Lt,boardUrl:()=>V,companyMarketPath:()=>At,companyPath:()=>Bt,companySalaryPath:()=>So,encodePathSegment:()=>h,goAlertsConfirmPath:()=>Ao,goAlertsManagePath:()=>Bo,goJobPath:()=>Ro,jobDetailPath:()=>ie,jobsCategoryPath:()=>q,jobsLocationCategoryPath:()=>G,jobsLocationPath:()=>J,jobsLocationSkillPath:()=>Rt,jobsSkillPath:()=>Pt,salaryLocationPath:()=>Eo,salarySkillPath:()=>Oo,salaryTitlePath:()=>Co,suggestionPath:()=>bo});function h(e){try{return encodeURIComponent(decodeURIComponent(e)).replace(/%3A/gi,":")}catch{return encodeURIComponent(e).replace(/%3A/gi,":")}}function ie(e,t){return`/companies/${h(e)}/jobs/${h(t)}`}function q(e){return`/jobs/${h(e)}`}function Pt(e){return`/jobs/skills/${h(e)}`}function J(e){return`/jobs/locations/${h(e)}`}function G(e,t){return`${J(e)}/${h(t)}`}function Rt(e,t){return`${J(e)}/skills/${h(t)}`}function Bt(e){return`/companies/${h(e)}`}function At(e){return`/companies/markets/${h(e)}`}function bo(e,t){let o=t.location?.trim()||void 0;return t.scope==="blog"?e.type==="post"?vt(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?Rt(o,e.canonicalSlug):Pt(e.canonicalSlug):o?G(o,e.canonicalSlug):q(e.canonicalSlug):e.type==="company"?Bt(e.slug):e.type==="market"?At(e.slug):null}function So(e){return`/companies/${h(e)}/salaries`}function Co(e){return`/salaries/titles/${h(e)}`}function Oo(e){return`/salaries/skills/${h(e)}`}function Eo(e){return`/salaries/locations/${h(e)}`}function vt(e){return`/blog/${h(e)}`}function Lt(e){return`/blog/tag/${h(e)}`}function Po(e){return`/blog/author/${h(e)}`}var H={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 Bo(){return"/go/alerts-manage"}function Ao(){return"/go/alerts-confirm"}function V(e,t){return`${e.replace(/\/+$/,"")}${t}`}function _t(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 s=r.href?vo(r.href,t.origin??null):null,a={"@type":"ListItem",position:i+1,name:r.name};return s&&(a.item=s),a})}}function vo(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 K(e){let t=[{kind:"home",path:H.home},{kind:"jobs",path:H.jobs}],o=null;for(let r of e.placeHierarchy)o=r.slug,t.push({kind:"place",name:r.name,path:J(r.slug)});let n=e.categories[0];return n&&t.push({kind:"category",name:n.name,path:o?G(o,n.slug):q(n.slug)}),t.push({kind:"job",name:e.title}),t}var Y=["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 _o(e){try{return new Intl.DisplayNames([e],{type:"region"})}catch{return null}}function To(e){try{return new Intl.Collator(e)}catch{return new Intl.Collator}}function Tt(e){let t=S(e);if(!t)return Y.map(r=>({code:r,name:r})).sort((r,i)=>r.code<i.code?-1:r.code>i.code?1:0);let o=_o(t),n=To(t).compare;return Y.map(r=>({code:r,name:o?.of(r)??r})).sort((r,i)=>n(r.name,i.name))}function xo(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 Fo(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 xt(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 a=xo(r,i);a&&n.push({key:r.key,label:r.label,kind:"multi_select",values:a});continue}let s=Fo(r,i);s!==null&&n.push({key:r.key,label:r.label,kind:"text",value:s})}return n}var le={};L(le,{ALL_COUNTRY_CODES:()=>re,SENIORITY_ORDER:()=>D,buildJobBreadcrumbs:()=>K,buildSalaryFaq:()=>mt,companyCategorySalaryJsonLd:()=>St,companySalaryJsonLd:()=>bt,createAuthorProfileJsonLd:()=>It,createBlogArticleJsonLd:()=>Ft,createBreadcrumbJsonLd:()=>_t,createJobPostingJsonLd:()=>Et,crossAxisSalaryJsonLd:()=>ht,faqJsonLd:()=>dt,formatSalaryStat:()=>$,formatSalaryStatRange:()=>I,itemListJsonLd:()=>Q,listingHead:()=>kt,listingJsonLd:()=>Ut,locationSalaryJsonLd:()=>ft,normalizeWebsiteUrl:()=>U,skillSalaryJsonLd:()=>gt,sortBySeniority:()=>ut,titleSalaryJsonLd:()=>yt});function Ft({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 s=e.authors[0];return s&&(r.author={"@type":"Person",name:s.name,...s.websiteUrl?{url:s.websiteUrl}:{}}),r}function It({author:e,canonical:t,description:o,origin:n,posts:r,totalPosts:i}){if(!e.name)return null;let s=o.trim(),a=[z(e.websiteUrl),z(e.twitterUrl),z(e.linkedinUrl),z(e.githubUrl)].filter(m=>!!m),p=`${t}#profile`,l=r.slice(0,5).map(m=>{let y=Io(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:s||void 0,image:e.avatarUrl??void 0,sameAs:a.length>0?a:void 0,url:t,mainEntityOfPage:t,agentInteractionStatistic:u}};return l.length>0&&(d.hasPart=l),d}function z(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 Io(e,t){if(!e||!t)return null;try{return new URL(t,e).toString()}catch{return null}}function kt(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 Ut(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:V(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:V(e.origin,ie(n.company.slug,n.slug))}))}),t}var pe={};L(pe,{createSuggestController:()=>Jo});function ko(e){return typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"||e instanceof Error&&e.name==="AbortError"}function Uo(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 Jt(e,t){return t.size===0?e.slice():e.filter(o=>!(o.type==="company"&&t.has(o.slug.toLowerCase().normalize("NFC"))))}function Jo(e,t){let o=t?.minChars??2,n=t?.debounceMs??250,r=t?.limit,i=!1,s={query:"",items:[],status:"idle",error:null},a=[],p=new Set,l=0,u=null,d=null,m=new Set;function y(){for(let c of m)c()}function g(c){s=c,y()}function C(){u!==null&&(globalThis.clearTimeout(u),u=null)}function f(){d&&(d.abort(),d=null)}function R(c){let b=++l;f();let O=new AbortController;d=O;let v={q:c};r!==void 0&&(v.limit=r),e.search.suggest(v,{signal:O.signal}).then(B=>{i||b!==l||(d=null,a=B.items,g({query:s.query,items:Jt(a,p),status:"ready",error:null}))}).catch(B=>{i||b!==l||ko(B)||(d=null,g({query:s.query,items:s.items,status:"error",error:B}))})}return{setQuery(c){if(i)return;let b=c.trim();if(C(),Uo(b)<o){l+=1,f(),a=[],g({query:c,items:[],status:"idle",error:null});return}l+=1,f(),g({query:c,items:s.items,status:"loading",error:null}),u=globalThis.setTimeout(()=>{u=null,!i&&R(b)},n)},setExcludedCompanySlugs(c){i||(p=new Set(c.map(b=>b.trim().toLowerCase().normalize("NFC")).filter(Boolean)),g({query:s.query,items:Jt(a,p),status:s.status,error:s.error}))},getState(){return s},subscribe(c){return i?()=>{}:(m.add(c),()=>{m.delete(c)})},dispose(){i||(i=!0,C(),f(),l+=1,m.clear())}}}return jt(Mo);})();
@@ -1,5 +1,5 @@
1
- import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-CZUpStJ3.mjs';
2
- import './_spec-CT7rWhQ-.mjs';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-C1Mxty1n.mjs';
2
+ import './_spec-COlkrizX.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-Cf7J5vJe.js';
2
- import './_spec-CT7rWhQ-.js';
1
+ import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-DOF3QXdq.js';
2
+ import './_spec-COlkrizX.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-CQjU_wHB.mjs';
2
- import { C as CustomFieldDefinition } from './board-BLwReKB8.mjs';
3
- import { C as CustomFieldValues } from './jobs-CZUpStJ3.mjs';
4
- import './_spec-CT7rWhQ-.mjs';
1
+ export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-zAN2biAq.mjs';
2
+ import { C as CustomFieldDefinition } from './board-JgFR-2UW.mjs';
3
+ import { C as CustomFieldValues } from './jobs-C1Mxty1n.mjs';
4
+ import './_spec-COlkrizX.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-ClvafKXZ.js';
2
- import { C as CustomFieldDefinition } from './board-O990tPTt.js';
3
- import { C as CustomFieldValues } from './jobs-Cf7J5vJe.js';
4
- import './_spec-CT7rWhQ-.js';
1
+ export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-_QzN4nEk.js';
2
+ import { C as CustomFieldDefinition } from './board-D51C3gB5.js';
3
+ import { C as CustomFieldValues } from './jobs-DOF3QXdq.js';
4
+ import './_spec-COlkrizX.js';
5
5
 
6
6
  /**
7
7
  * Date display helpers in the board language (required leading parameter,
package/dist/index.d.mts CHANGED
@@ -1,12 +1,12 @@
1
- import { S as Schemas, c as components } from './_spec-CT7rWhQ-.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-CHLEpKE5.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-CHLEpKE5.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-BLwReKB8.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 PublicBoardAnalytics, r as PublicBoardFeatures, s as PublicCompany, t as PublicCompanyDetail, u as SalaryCompany, v as SalaryLocation, w as SalarySkill, x as SalaryTitle, y as SkillLocationSalary, z as SkillLocationsIndex, S as SkillSalaryDetail, A as TitleLocationSalary, B as TitleLocationsIndex, T as TitleSalaryDetail } from './board-BLwReKB8.mjs';
6
- 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-CZUpStJ3.mjs';
7
- 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-CZUpStJ3.mjs';
8
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-CJda3-Ab.mjs';
9
- export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-CJda3-Ab.mjs';
1
+ import { S as Schemas, c as components } from './_spec-COlkrizX.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-Cx_dsVUb.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-Cx_dsVUb.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-JgFR-2UW.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 PublicBoardAnalytics, r as PublicBoardFeatures, s as PublicCompany, t as PublicCompanyDetail, u as SalaryCompany, v as SalaryLocation, w as SalarySkill, x as SalaryTitle, y as SkillLocationSalary, z as SkillLocationsIndex, S as SkillSalaryDetail, A as TitleLocationSalary, B as TitleLocationsIndex, T as TitleSalaryDetail } from './board-JgFR-2UW.mjs';
6
+ 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-C1Mxty1n.mjs';
7
+ 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-C1Mxty1n.mjs';
8
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-DO8Yn21_.mjs';
9
+ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-DO8Yn21_.mjs';
10
10
 
11
11
  /**
12
12
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -142,7 +142,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
142
142
  * constant because the package is platform-neutral and cannot read
143
143
  * package.json at runtime.
144
144
  */
145
- declare const SDK_VERSION = "4.3.0";
145
+ declare const SDK_VERSION = "4.4.0";
146
146
 
147
147
  type SavedJob = Schemas['SavedJob'];
148
148
  type SavedJobsListQuery = {
@@ -1225,8 +1225,10 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1225
1225
  name: string;
1226
1226
  slug: string;
1227
1227
  bio: string | null;
1228
+ location: string | null;
1228
1229
  avatarUrl: string | null;
1229
1230
  websiteUrl: string | null;
1231
+ facebookUrl: string | null;
1230
1232
  twitterUrl: string | null;
1231
1233
  linkedinUrl: string | null;
1232
1234
  githubUrl: string | null;
@@ -1238,8 +1240,10 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1238
1240
  name: string;
1239
1241
  slug: string;
1240
1242
  bio: string | null;
1243
+ location: string | null;
1241
1244
  avatarUrl: string | null;
1242
1245
  websiteUrl: string | null;
1246
+ facebookUrl: string | null;
1243
1247
  twitterUrl: string | null;
1244
1248
  linkedinUrl: string | null;
1245
1249
  githubUrl: string | null;
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import { S as Schemas, c as components } from './_spec-CT7rWhQ-.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-YWruydKJ.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-YWruydKJ.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-O990tPTt.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 PublicBoardAnalytics, r as PublicBoardFeatures, s as PublicCompany, t as PublicCompanyDetail, u as SalaryCompany, v as SalaryLocation, w as SalarySkill, x as SalaryTitle, y as SkillLocationSalary, z as SkillLocationsIndex, S as SkillSalaryDetail, A as TitleLocationSalary, B as TitleLocationsIndex, T as TitleSalaryDetail } from './board-O990tPTt.js';
6
- 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-Cf7J5vJe.js';
7
- 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-Cf7J5vJe.js';
8
- import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-DOBig1Wh.js';
9
- export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-DOBig1Wh.js';
1
+ import { S as Schemas, c as components } from './_spec-COlkrizX.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-_QDaN6Um.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-_QDaN6Um.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-D51C3gB5.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 PublicBoardAnalytics, r as PublicBoardFeatures, s as PublicCompany, t as PublicCompanyDetail, u as SalaryCompany, v as SalaryLocation, w as SalarySkill, x as SalaryTitle, y as SkillLocationSalary, z as SkillLocationsIndex, S as SkillSalaryDetail, A as TitleLocationSalary, B as TitleLocationsIndex, T as TitleSalaryDetail } from './board-D51C3gB5.js';
6
+ 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-DOF3QXdq.js';
7
+ 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-DOF3QXdq.js';
8
+ import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-CgA_ljHa.js';
9
+ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-CgA_ljHa.js';
10
10
 
11
11
  /**
12
12
  * Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
@@ -142,7 +142,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
142
142
  * constant because the package is platform-neutral and cannot read
143
143
  * package.json at runtime.
144
144
  */
145
- declare const SDK_VERSION = "4.3.0";
145
+ declare const SDK_VERSION = "4.4.0";
146
146
 
147
147
  type SavedJob = Schemas['SavedJob'];
148
148
  type SavedJobsListQuery = {
@@ -1225,8 +1225,10 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1225
1225
  name: string;
1226
1226
  slug: string;
1227
1227
  bio: string | null;
1228
+ location: string | null;
1228
1229
  avatarUrl: string | null;
1229
1230
  websiteUrl: string | null;
1231
+ facebookUrl: string | null;
1230
1232
  twitterUrl: string | null;
1231
1233
  linkedinUrl: string | null;
1232
1234
  githubUrl: string | null;
@@ -1238,8 +1240,10 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
1238
1240
  name: string;
1239
1241
  slug: string;
1240
1242
  bio: string | null;
1243
+ location: string | null;
1241
1244
  avatarUrl: string | null;
1242
1245
  websiteUrl: string | null;
1246
+ facebookUrl: string | null;
1243
1247
  twitterUrl: string | null;
1244
1248
  linkedinUrl: string | null;
1245
1249
  githubUrl: string | null;
package/dist/index.js CHANGED
@@ -312,7 +312,7 @@ async function clearSession(storage) {
312
312
  }
313
313
 
314
314
  // src/version.ts
315
- var SDK_VERSION = "4.3.0";
315
+ var SDK_VERSION = "4.4.0";
316
316
 
317
317
  // src/client.ts
318
318
  function isRawBody(body) {
package/dist/index.mjs CHANGED
@@ -39,7 +39,7 @@ function toSearchParams(query) {
39
39
  }
40
40
 
41
41
  // src/version.ts
42
- var SDK_VERSION = "4.3.0";
42
+ var SDK_VERSION = "4.4.0";
43
43
 
44
44
  // src/client.ts
45
45
  function isRawBody(body) {
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-CT7rWhQ-.mjs';
1
+ import { S as Schemas } from './_spec-COlkrizX.mjs';
2
2
 
3
3
  /**
4
4
  * Optional pagination metadata returned by Board API list operations.
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-CT7rWhQ-.js';
1
+ import { S as Schemas } from './_spec-COlkrizX.js';
2
2
 
3
3
  /**
4
4
  * Optional pagination metadata returned by Board API list operations.
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-CT7rWhQ-.mjs';
1
+ import { S as Schemas } from './_spec-COlkrizX.mjs';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-CT7rWhQ-.js';
1
+ import { S as Schemas } from './_spec-COlkrizX.js';
2
2
 
3
3
  type Awaitable<T> = T | Promise<T>;
4
4
  /**
package/dist/seo.d.mts CHANGED
@@ -1,9 +1,9 @@
1
- import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-CJda3-Ab.mjs';
2
- import { e as JsonLdObject } from './breadcrumbs-CQjU_wHB.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-CQjU_wHB.mjs';
4
- import './_spec-CT7rWhQ-.mjs';
5
- import './board-BLwReKB8.mjs';
6
- import './jobs-CZUpStJ3.mjs';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-DO8Yn21_.mjs';
2
+ import { e as JsonLdObject } from './breadcrumbs-zAN2biAq.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-zAN2biAq.mjs';
4
+ import './_spec-COlkrizX.mjs';
5
+ import './board-JgFR-2UW.mjs';
6
+ import './jobs-C1Mxty1n.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-DOBig1Wh.js';
2
- import { e as JsonLdObject } from './breadcrumbs-ClvafKXZ.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-ClvafKXZ.js';
4
- import './_spec-CT7rWhQ-.js';
5
- import './board-O990tPTt.js';
6
- import './jobs-Cf7J5vJe.js';
1
+ import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-CgA_ljHa.js';
2
+ import { e as JsonLdObject } from './breadcrumbs-_QzN4nEk.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-_QzN4nEk.js';
4
+ import './_spec-COlkrizX.js';
5
+ import './board-D51C3gB5.js';
6
+ import './jobs-DOF3QXdq.js';
7
7
 
8
8
  /**
9
9
  * Blog structured data on the `@cavuno/board` wire types, transcribed from
package/dist/server.d.mts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './_spec-CT7rWhQ-.mjs';
3
- import './search-CHLEpKE5.mjs';
4
- import './board-BLwReKB8.mjs';
5
- import './jobs-CZUpStJ3.mjs';
6
- import './blog-CJda3-Ab.mjs';
2
+ import './_spec-COlkrizX.mjs';
3
+ import './search-Cx_dsVUb.mjs';
4
+ import './board-JgFR-2UW.mjs';
5
+ import './jobs-C1Mxty1n.mjs';
6
+ import './blog-DO8Yn21_.mjs';
7
7
 
8
8
  /**
9
9
  * Session cookie codec — pure (no framework imports, no node imports) so it
package/dist/server.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './_spec-CT7rWhQ-.js';
3
- import './search-YWruydKJ.js';
4
- import './board-O990tPTt.js';
5
- import './jobs-Cf7J5vJe.js';
6
- import './blog-DOBig1Wh.js';
2
+ import './_spec-COlkrizX.js';
3
+ import './search-_QDaN6Um.js';
4
+ import './board-D51C3gB5.js';
5
+ import './jobs-DOF3QXdq.js';
6
+ import './blog-CgA_ljHa.js';
7
7
 
8
8
  /**
9
9
  * Session cookie codec — pure (no framework imports, no node imports) so it
@@ -1,9 +1,9 @@
1
1
  import { BoardSdk } from './index.mjs';
2
- import './_spec-CT7rWhQ-.mjs';
3
- import './search-CHLEpKE5.mjs';
4
- import './board-BLwReKB8.mjs';
5
- import './jobs-CZUpStJ3.mjs';
6
- import './blog-CJda3-Ab.mjs';
2
+ import './_spec-COlkrizX.mjs';
3
+ import './search-Cx_dsVUb.mjs';
4
+ import './board-JgFR-2UW.mjs';
5
+ import './jobs-C1Mxty1n.mjs';
6
+ import './blog-DO8Yn21_.mjs';
7
7
 
8
8
  /**
9
9
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
package/dist/sitemap.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { BoardSdk } from './index.js';
2
- import './_spec-CT7rWhQ-.js';
3
- import './search-YWruydKJ.js';
4
- import './board-O990tPTt.js';
5
- import './jobs-Cf7J5vJe.js';
6
- import './blog-DOBig1Wh.js';
2
+ import './_spec-COlkrizX.js';
3
+ import './search-_QDaN6Um.js';
4
+ import './board-D51C3gB5.js';
5
+ import './jobs-DOF3QXdq.js';
6
+ import './blog-CgA_ljHa.js';
7
7
 
8
8
  /**
9
9
  * Sitemap primitives — the pure XML + bucket-filename logic behind a board
@@ -1,5 +1,5 @@
1
- import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-CHLEpKE5.mjs';
2
- import './_spec-CT7rWhQ-.mjs';
1
+ import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-Cx_dsVUb.mjs';
2
+ import './_spec-COlkrizX.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-YWruydKJ.js';
2
- import './_spec-CT7rWhQ-.js';
1
+ import { h as SuggestionItem, b as SearchSuggestQuery, F as FetchOptions, g as SuggestResult } from './search-_QDaN6Um.js';
2
+ import './_spec-COlkrizX.js';
3
3
 
4
4
  /**
5
5
  * `@cavuno/board/suggest` — framework-agnostic headless search-suggest
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cavuno/board",
3
- "version": "4.3.0",
3
+ "version": "4.4.0",
4
4
  "description": "Build custom job boards and careers pages with Cavuno’s TypeScript SDK.",
5
5
  "keywords": [
6
6
  "api-client",
@@ -51,6 +51,8 @@
51
51
  "main": "./dist/index.js",
52
52
  "module": "./dist/index.mjs",
53
53
  "types": "./dist/index.d.ts",
54
+ "unpkg": "./dist/browser/cavuno-board.global.min.js",
55
+ "jsdelivr": "./dist/browser/cavuno-board.global.min.js",
54
56
  "exports": {
55
57
  ".": {
56
58
  "import": {
@@ -203,14 +205,17 @@
203
205
  "clean": "git clean -xdf .turbo dist node_modules src/generated",
204
206
  "typecheck": "tsgo --noEmit && tsgo --noEmit -p tsconfig.node.json",
205
207
  "test": "vitest run",
206
- "check:publish": "publint --strict && attw --pack . --profile node16 && node scripts/check-no-private-kit-types.mjs",
208
+ "test:browser": "node scripts/run-packed-browser-tests.mjs",
209
+ "check:publish": "publint --strict && attw --pack . --profile node16 && node scripts/check-no-private-kit-types.mjs && node scripts/check-browser-global.mjs && node scripts/check-esm-tree-shaking.mjs",
207
210
  "gen:skills-manifest": "tsx scripts/generate-skills-manifest.ts",
208
211
  "assert-publish-target": "node -e \"const p=require('./package.json'); if(p.name!=='@cavuno/board'){throw new Error('Refusing to publish: package.json name is '+p.name+', expected @cavuno/board')}; if(p.private){throw new Error('Refusing to publish: package.json has private:true')}\"",
209
212
  "prepublishOnly": "pnpm run assert-publish-target && pnpm run gen:skills-manifest && pnpm run build"
210
213
  },
211
214
  "devDependencies": {
212
215
  "@arethetypeswrong/cli": "^0.18.2",
216
+ "@playwright/test": "^1.59.1",
213
217
  "@types/node": "24.9.1",
218
+ "esbuild": "^0.27.7",
214
219
  "publint": "^0.3.12",
215
220
  "tsup": "^8.4.0",
216
221
  "tsx": "^4.19.2",
@@ -36,8 +36,10 @@ const next = page.nextCursor
36
36
  : null;
37
37
  ```
38
38
 
39
- Embedded author rows carry `id`, `name`, `slug`, `bio`, `avatarUrl`, and
40
- social URLs. Embedded tag rows carry `id`, `name`, `slug`, and `description`.
39
+ Embedded author rows carry `id`, `name`, `slug`, `bio`, `location`,
40
+ `avatarUrl`, and social URLs (`websiteUrl`, `facebookUrl`, `twitterUrl`,
41
+ `linkedinUrl`, `githubUrl`). Embedded tag rows carry `id`, `name`, `slug`, and
42
+ `description`.
41
43
 
42
44
  ## Render a post and canonicalize its slug
43
45
 
@@ -84,8 +86,9 @@ const author = await board.blog.authors.retrieve('jane');
84
86
  ```
85
87
 
86
88
  `PublicBlogTag` carries `id`, `name`, `slug`, and `description`.
87
- `PublicBlogAuthor` carries `id`, `name`, `slug`, `bio`, `avatarUrl`,
88
- `websiteUrl`, `twitterUrl`, `linkedinUrl`, and `githubUrl`.
89
+ `PublicBlogAuthor` carries `id`, `name`, `slug`, `bio`, `location`,
90
+ `avatarUrl`, `websiteUrl`, `facebookUrl`, `twitterUrl`, `linkedinUrl`, and
91
+ `githubUrl`.
89
92
 
90
93
  ## Search posts
91
94
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.3.0",
2
+ "version": "4.4.0",
3
3
  "skills": [
4
4
  {
5
5
  "name": "cavuno-board-account",