@cavuno/board 4.4.0 → 4.4.1
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 +7 -0
- package/README.md +93 -77
- package/dist/browser/cavuno-board.global.min.js +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/skills/manifest.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,13 @@
|
|
|
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.1 — 2026-08-10
|
|
7
|
+
|
|
8
|
+
- **SDK installation documentation**: The npm and GitHub README now presents
|
|
9
|
+
package installation as the recommended TypeScript SDK path, with CDN
|
|
10
|
+
installation as a separate option for static HTML and other no-build sites.
|
|
11
|
+
Links point to the canonical SDK installation guides on cavuno.com.
|
|
12
|
+
|
|
6
13
|
## 4.4.0 — 2026-08-10
|
|
7
14
|
|
|
8
15
|
- **Classic-script browser build**: `@cavuno/board` now ships a dependency-free
|
package/README.md
CHANGED
|
@@ -2,114 +2,130 @@
|
|
|
2
2
|
|
|
3
3
|
Build custom job boards and careers pages with Cavuno’s TypeScript SDK.
|
|
4
4
|
|
|
5
|
-
`@cavuno/board` is
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
`@cavuno/board` is the zero-dependency client for the Cavuno Board API. It
|
|
6
|
+
runs in browsers, Node.js 20 or newer, and Cloudflare Workers, with TypeScript
|
|
7
|
+
declarations generated from the API’s OpenAPI contract.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
[Documentation](https://cavuno.com/docs/sdk) ·
|
|
10
|
+
[Installing](https://cavuno.com/docs/sdk/installing) ·
|
|
11
|
+
[SDK reference](https://cavuno.com/docs/sdk/reference) ·
|
|
12
|
+
[API reference](https://cavuno.com/docs/api) ·
|
|
13
|
+
[Source](https://github.com/wollemiahq/cavuno-sdk)
|
|
14
14
|
|
|
15
|
-
##
|
|
15
|
+
## Installation
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
other compatible coding agents. It teaches them how to wire a board correctly — client setup,
|
|
19
|
-
auth and session ownership, pagination, gating, error handling, and a
|
|
20
|
-
runtime smoke test:
|
|
21
|
-
|
|
22
|
-
Install the latest skills directly from the public SDK repository:
|
|
17
|
+
### Install as package
|
|
23
18
|
|
|
24
19
|
```bash
|
|
25
|
-
|
|
26
|
-
# Or install the complete Cavuno skill set:
|
|
27
|
-
npx skills add wollemiahq/cavuno-sdk --skill '*'
|
|
20
|
+
npm install @cavuno/board
|
|
28
21
|
```
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
The package includes ESM and CommonJS builds. ESM imports are tree-shakeable,
|
|
24
|
+
and helper packages such as `@cavuno/board/format` can be imported separately.
|
|
32
25
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
### Install via CDN
|
|
27
|
+
|
|
28
|
+
No package manager or build step? Follow the
|
|
29
|
+
[CDN installation guide](https://cavuno.com/docs/sdk/installing/cdn)
|
|
30
|
+
for a version-pinned build and its integrity hash. The CDN build is
|
|
31
|
+
the same SDK downloaded as one file; package imports remain the recommended
|
|
32
|
+
choice when they are available.
|
|
37
33
|
|
|
38
|
-
|
|
39
|
-
`cavuno-board-setup` skill and works surface by surface. Because the
|
|
40
|
-
skills live in your project and match your installed version, the agent
|
|
41
|
-
never works from stale docs.
|
|
34
|
+
See [Installing](https://cavuno.com/docs/sdk/installing) for every installation option.
|
|
42
35
|
|
|
43
|
-
## Quick start
|
|
36
|
+
## Quick start
|
|
44
37
|
|
|
45
38
|
```ts
|
|
46
39
|
import { createBoardClient } from '@cavuno/board';
|
|
47
40
|
|
|
48
41
|
const board = createBoardClient({
|
|
49
|
-
board:
|
|
42
|
+
board: 'pk_your_publishable_key',
|
|
50
43
|
});
|
|
51
44
|
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
const [context, jobs] = await Promise.all([
|
|
46
|
+
board.context(),
|
|
47
|
+
board.jobs.list({ limit: 20 }),
|
|
48
|
+
]);
|
|
55
49
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
q: 'acme',
|
|
59
|
-
limit: 10,
|
|
60
|
-
types: ['company', 'skill'],
|
|
61
|
-
});
|
|
62
|
-
// Or the headless controller (debounce / abort / stale-drop built in):
|
|
63
|
-
// import { createSuggestController } from '@cavuno/board/suggest';
|
|
64
|
-
// const suggest = createSuggestController(board);
|
|
65
|
-
// suggest.setQuery('acme');
|
|
50
|
+
console.log(context.name);
|
|
51
|
+
console.log(jobs.data);
|
|
66
52
|
```
|
|
67
53
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
`
|
|
54
|
+
A `pk_…` key identifies a board and is public by design. Get it from
|
|
55
|
+
**Settings → Developer → SDK** in Cavuno. The client connects to
|
|
56
|
+
`https://api.cavuno.com` by default.
|
|
71
57
|
|
|
72
|
-
|
|
73
|
-
|
|
58
|
+
The client exposes typed namespaces for jobs and search, companies, salaries,
|
|
59
|
+
blog, board-user authentication, saved jobs, applications, job alerts,
|
|
60
|
+
messaging, employer workflows, checkout, candidate access, and SEO data.
|
|
61
|
+
|
|
62
|
+
## Handle errors
|
|
63
|
+
|
|
64
|
+
Every non-2xx response throws a `BoardApiError` with the API status, code,
|
|
65
|
+
details, and request ID.
|
|
74
66
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
67
|
+
```ts
|
|
68
|
+
import { BoardApiError, isNotFound } from '@cavuno/board';
|
|
69
|
+
|
|
70
|
+
try {
|
|
71
|
+
await board.jobs.retrieve('missing-job');
|
|
72
|
+
} catch (error) {
|
|
73
|
+
if (isNotFound(error)) {
|
|
74
|
+
// Render your application's not-found state.
|
|
75
|
+
} else if (error instanceof BoardApiError) {
|
|
76
|
+
console.error(error.code, error.requestId);
|
|
77
|
+
}
|
|
78
78
|
}
|
|
79
|
-
const first500 = await paginate(board.companies.list, { limit: 100 })
|
|
80
|
-
.toArray({ limit: 500 });
|
|
81
79
|
```
|
|
82
80
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
See [Handle SDK errors](https://cavuno.com/docs/sdk/fundamentals/errors) for
|
|
82
|
+
the complete error contract and guards.
|
|
83
|
+
|
|
84
|
+
## Authentication
|
|
85
|
+
|
|
86
|
+
- A `pk_…` publishable key identifies the board and may be included in browser
|
|
87
|
+
code.
|
|
88
|
+
- Candidate and employer sessions use `board.auth.*`. Choose browser storage
|
|
89
|
+
deliberately; server-rendered applications should keep sessions in their
|
|
90
|
+
own httpOnly cookies.
|
|
91
|
+
- Operator and admin credentials must never be used with this SDK or exposed
|
|
92
|
+
to frontend code.
|
|
93
|
+
|
|
94
|
+
Read [Authentication and sessions](https://cavuno.com/docs/sdk/fundamentals/authentication-and-session-ownership)
|
|
95
|
+
before adding signed-in workflows.
|
|
86
96
|
|
|
87
|
-
##
|
|
97
|
+
## Make a request to a custom endpoint
|
|
88
98
|
|
|
89
|
-
|
|
99
|
+
For an endpoint without a namespace method, `board.client.fetch<T>(path, init)`
|
|
100
|
+
uses the same board base path, headers, bearer token, serialization, and hooks
|
|
101
|
+
as the rest of the client. Treat the generic response type as your
|
|
102
|
+
application’s assertion; custom responses are not generated from the public
|
|
103
|
+
OpenAPI contract.
|
|
90
104
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
Pluggable storage (`memory` in the browser, `nostore` on the server);
|
|
94
|
-
on SSR, keep the session in an httpOnly cookie your app owns and pass
|
|
95
|
-
the token per call. No auto-refresh on 401 — rotation is explicit.
|
|
96
|
-
- **No secret keys** — operator/admin credentials never touch this SDK.
|
|
105
|
+
See [`board.client.fetch()`](https://cavuno.com/docs/sdk/reference/top-level-methods#make-a-request-to-a-custom-endpoint)
|
|
106
|
+
for options and examples.
|
|
97
107
|
|
|
98
|
-
##
|
|
108
|
+
## Set up with a coding agent
|
|
109
|
+
|
|
110
|
+
The package includes version-matched Agent Skills for Codex, Claude Code,
|
|
111
|
+
Cursor, and other compatible coding agents:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
npx @cavuno/board setup
|
|
115
|
+
```
|
|
99
116
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
117
|
+
Then ask your agent to set up the Cavuno board using the installed
|
|
118
|
+
`cavuno-board-setup` skill. See
|
|
119
|
+
[Set up with an agent](https://cavuno.com/docs/sdk/installing/agent)
|
|
120
|
+
for the review and verification workflow.
|
|
103
121
|
|
|
104
|
-
##
|
|
122
|
+
## Resources
|
|
105
123
|
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
- Clone-and-own TanStack Start + shadcn/ui template:
|
|
113
|
-
<https://github.com/wollemiahq/cavuno-tanstack-start-shadcn-job-board-template>
|
|
124
|
+
- [SDK guides and reference](https://cavuno.com/docs/sdk)
|
|
125
|
+
- [Board API documentation](https://cavuno.com/docs/api)
|
|
126
|
+
- [OpenAPI document](https://api.cavuno.com/v1/openapi.json)
|
|
127
|
+
- [Source](https://github.com/wollemiahq/cavuno-sdk)
|
|
128
|
+
- [Issues](https://github.com/wollemiahq/cavuno-sdk/issues)
|
|
129
|
+
- [TanStack Start + shadcn/ui job board template](https://github.com/wollemiahq/cavuno-tanstack-start-shadcn-job-board-template)
|
|
114
130
|
|
|
115
131
|
MIT © Wollemia
|
|
@@ -1 +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
|
+
"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.1";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);})();
|
package/dist/index.d.mts
CHANGED
|
@@ -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.4.
|
|
145
|
+
declare const SDK_VERSION = "4.4.1";
|
|
146
146
|
|
|
147
147
|
type SavedJob = Schemas['SavedJob'];
|
|
148
148
|
type SavedJobsListQuery = {
|
package/dist/index.d.ts
CHANGED
|
@@ -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.4.
|
|
145
|
+
declare const SDK_VERSION = "4.4.1";
|
|
146
146
|
|
|
147
147
|
type SavedJob = Schemas['SavedJob'];
|
|
148
148
|
type SavedJobsListQuery = {
|
package/dist/index.js
CHANGED
package/dist/index.mjs
CHANGED
package/package.json
CHANGED
package/skills/manifest.json
CHANGED