@cavuno/board 4.4.1 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/dist/{_spec-COlkrizX.d.mts → _spec-Dm-1AieO.d.mts} +61 -1
- package/dist/{_spec-COlkrizX.d.ts → _spec-Dm-1AieO.d.ts} +61 -1
- package/dist/{blog-CgA_ljHa.d.ts → blog-BvyEW4bf.d.ts} +1 -1
- package/dist/{blog-DO8Yn21_.d.mts → blog-C5g0Tt8w.d.mts} +1 -1
- package/dist/{board-D51C3gB5.d.ts → board-CW3qMKdu.d.ts} +2 -2
- package/dist/{board-JgFR-2UW.d.mts → board-CemD1yEl.d.mts} +2 -2
- package/dist/{breadcrumbs-_QzN4nEk.d.ts → breadcrumbs-BRHiWWSf.d.ts} +2 -2
- package/dist/{breadcrumbs-zAN2biAq.d.mts → breadcrumbs-Bgmklae3.d.mts} +2 -2
- package/dist/browser/cavuno-board.global.min.js +1 -1
- package/dist/{chunk-2ETP5UH4.mjs → chunk-GC5QWN7Y.mjs} +16 -0
- package/dist/{chunk-YEAQ3JEI.mjs → chunk-VWGF4I5C.mjs} +143 -4
- package/dist/filters.d.mts +2 -2
- package/dist/filters.d.ts +2 -2
- package/dist/format.d.mts +4 -4
- package/dist/format.d.ts +4 -4
- package/dist/format.js +15 -2
- package/dist/format.mjs +2 -126
- package/dist/index.d.mts +89 -12
- package/dist/index.d.ts +89 -12
- package/dist/index.js +205 -1
- package/dist/index.mjs +190 -2
- package/dist/{jobs-C1Mxty1n.d.mts → jobs-B0phTsdB.d.mts} +1 -1
- package/dist/{jobs-DOF3QXdq.d.ts → jobs-f-n4_rrz.d.ts} +1 -1
- package/dist/{search-_QDaN6Um.d.ts → search-C1LHejWz.d.ts} +1 -1
- package/dist/{search-Cx_dsVUb.d.mts → search-DVg1L-3s.d.mts} +1 -1
- package/dist/seo.d.mts +6 -6
- package/dist/seo.d.ts +6 -6
- package/dist/seo.js +16 -1
- package/dist/seo.mjs +1 -1
- package/dist/server.d.mts +5 -5
- package/dist/server.d.ts +5 -5
- package/dist/server.mjs +1 -1
- package/dist/sitemap.d.mts +5 -5
- package/dist/sitemap.d.ts +5 -5
- package/dist/suggest.d.mts +2 -2
- package/dist/suggest.d.ts +2 -2
- package/package.json +1 -1
- package/skills/cavuno-board-account/SKILL.md +31 -2
- package/skills/cavuno-board-companies/SKILL.md +21 -0
- package/skills/cavuno-board-seo/SALARY.md +2 -1
- package/skills/manifest.json +2 -2
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cavuno-board-account
|
|
3
|
-
description: Candidate self-service boundary with @cavuno/board. Use for account, profile, resume onboarding, avatar, experience, education, skills, languages, or notification preferences.
|
|
3
|
+
description: Candidate self-service boundary with @cavuno/board. Use for account, profile, resume onboarding, recommended jobs, avatar, experience, education, skills, languages, or notification preferences.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Candidate self-service boundary
|
|
7
7
|
|
|
8
8
|
Signed-in candidate data lives under `board.me`. Browser calls use the bearer token in `auth.storage`; server calls pass it per request in `options.headers`. See `cavuno-board-auth` for cookie-based server sessions.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Anonymous methods here are token-based email unsubscribe and email-change confirm (`confirmEmailChange`). Applications, employer companies, messaging, and alerts have their own skills.
|
|
11
11
|
|
|
12
12
|
The host application owns forms, file pickers, and cookie plumbing; this SDK surface supplies data operations.
|
|
13
13
|
|
|
@@ -15,10 +15,20 @@ The host application owns forms, file pickers, and cookie plumbing; this SDK sur
|
|
|
15
15
|
|
|
16
16
|
Account deletion is a synchronous, irreversible cascade over the profile, collections, saved jobs, alerts, avatar, and resume. Obtain explicit confirmation before calling it.
|
|
17
17
|
|
|
18
|
+
Change the password with the current password. The SDK persists the returned session so the caller stays signed in. Passwordless accounts (magic-link or OAuth) get `no_password` — send them through `auth.forgotPassword` instead.
|
|
19
|
+
|
|
18
20
|
```ts snippet
|
|
19
21
|
const me = await board.me.retrieve();
|
|
20
22
|
await board.me.delete();
|
|
21
23
|
|
|
24
|
+
await board.me.updatePassword({
|
|
25
|
+
currentPassword: 'oldpass99',
|
|
26
|
+
newPassword: 'newpass99',
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
await board.me.requestEmailChange({ email: 'new@example.com' });
|
|
30
|
+
await board.me.confirmEmailChange({ token });
|
|
31
|
+
|
|
22
32
|
const profile = await board.me.profile.retrieve();
|
|
23
33
|
await board.me.profile.update({
|
|
24
34
|
headline: 'Staff Engineer',
|
|
@@ -104,6 +114,24 @@ if (resume.parseStatus === 'parsed') {
|
|
|
104
114
|
|
|
105
115
|
Upload options also include `importMode: 'append_only' | 'replace_all'` and `confirmReplaceAll`. `resume.file.url` is a short-lived signed URL. `parseStatus` is null before any parse. `board.me.resume.delete()` removes the stored file and keep-on-file consent while retaining imported profile fields.
|
|
106
116
|
|
|
117
|
+
## Recommended jobs
|
|
118
|
+
|
|
119
|
+
`board.me.recommendedJobs.list` is the sibling of `savedJobs.list`. Each item wraps the same slim `PublicJobCard` (`{ object: 'recommended_job', job }`). Order is the ranking. The endpoint never returns scores, weights, or ranker identity.
|
|
120
|
+
|
|
121
|
+
Cold start is an empty list — no hint field. Drive an upload-resume CTA from `board.me.profile` / `board.me.resume` (`parseStatus`, skills), not from the list response.
|
|
122
|
+
|
|
123
|
+
```ts snippet
|
|
124
|
+
const { data } = await board.me.recommendedJobs.list({ limit: 20 });
|
|
125
|
+
data[0]?.job.title;
|
|
126
|
+
|
|
127
|
+
const profile = await board.me.profile.retrieve();
|
|
128
|
+
const skills = await board.me.profile.listSkills();
|
|
129
|
+
const resume = await board.me.resume.retrieve();
|
|
130
|
+
if (data.length === 0 && (skills.data.length === 0 || resume.parseStatus !== 'parsed')) {
|
|
131
|
+
promptResumeUpload();
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
107
135
|
## Notification preferences
|
|
108
136
|
|
|
109
137
|
Authenticated settings expose `messageEmails` and `applicationEmails`. Updating one channel returns the full set.
|
|
@@ -132,6 +160,7 @@ await board.me.notificationPreferences.unsubscribeWithToken({
|
|
|
132
160
|
- Adding a skill preserves every existing skill.
|
|
133
161
|
- Uploaded `avatarUrl` renders.
|
|
134
162
|
- Resume parsing reaches `parsed`, reports `parseFailureReason`, or reaches the explicit delayed state without blocking editing.
|
|
163
|
+
- Recommended jobs render the returned cards in list order; an empty list plus missing skills / unparsed resume shows an upload-resume prompt.
|
|
135
164
|
- Anonymous unsubscribe works in a logged-out browser.
|
|
136
165
|
|
|
137
166
|
## Cavuno SDK reference
|
|
@@ -12,6 +12,27 @@ Board-wide jobs use `jobs.*`, board-wide salary hubs use `salaries.*`, and
|
|
|
12
12
|
employer self-service uses authenticated `board.me.companies.*`. The host app
|
|
13
13
|
owns admin writes, sitemaps, and OG-image routes.
|
|
14
14
|
|
|
15
|
+
An approved admin can delete a company they manage and can list, retitle, or
|
|
16
|
+
remove members. Any approved member can leave with `board.me.companies.leave`.
|
|
17
|
+
Demoting, removing, or leaving as the last admin is `last_admin`. Admins
|
|
18
|
+
invite by email; approved members can list pending invites; accept is
|
|
19
|
+
session-gated on `board.me.acceptInvite`.
|
|
20
|
+
|
|
21
|
+
```ts snippet
|
|
22
|
+
await board.me.companies.delete('acme');
|
|
23
|
+
const { data: members } = await board.me.companies.listMembers('acme');
|
|
24
|
+
await board.me.companies.updateMemberRole('acme', members[0].id, {
|
|
25
|
+
role: 'admin',
|
|
26
|
+
});
|
|
27
|
+
await board.me.companies.removeMember('acme', members[0].id);
|
|
28
|
+
await board.me.companies.leave('acme');
|
|
29
|
+
|
|
30
|
+
const { data: invites } = await board.me.companies.listInvites('acme');
|
|
31
|
+
await board.me.companies.createInvite('acme', { email: 'ada@acme.test' });
|
|
32
|
+
await board.me.companies.revokeInvite('acme', invites[0].id);
|
|
33
|
+
const { companySlug } = await board.me.acceptInvite({ token });
|
|
34
|
+
```
|
|
35
|
+
|
|
15
36
|
## List and search
|
|
16
37
|
|
|
17
38
|
`companies.list` returns `CompanyListEnvelope`: `ListEnvelope<PublicCompany>`
|
|
@@ -102,7 +102,8 @@ const index = itemListJsonLd([
|
|
|
102
102
|
- `formatSalaryStat(locale, value, currency, notation?)` /
|
|
103
103
|
`formatSalaryStatRange(locale, min, max, currency, notation?)` for
|
|
104
104
|
salary-page amounts (currency from the detail, not hardcoded USD;
|
|
105
|
-
`formatRange` owns the join
|
|
105
|
+
`formatRange` owns the join when present, else two `format()` calls
|
|
106
|
+
joined with an en-dash). `notation` matches `formatSalaryRange`
|
|
106
107
|
(magnitude default when omitted; pass `'standard'` for full figures).
|
|
107
108
|
Returns `null` when currency is empty or `Intl` rejects inputs.
|
|
108
109
|
- `SENIORITY_ORDER` / `sortBySeniority` for seniority ladder ordering
|
package/skills/manifest.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "4.
|
|
2
|
+
"version": "4.6.0",
|
|
3
3
|
"skills": [
|
|
4
4
|
{
|
|
5
5
|
"name": "cavuno-board-account",
|
|
6
|
-
"description": "Candidate self-service boundary with @cavuno/board. Use for account, profile, resume onboarding, avatar, experience, education, skills, languages, or notification preferences.",
|
|
6
|
+
"description": "Candidate self-service boundary with @cavuno/board. Use for account, profile, resume onboarding, recommended jobs, avatar, experience, education, skills, languages, or notification preferences.",
|
|
7
7
|
"path": "skills/cavuno-board-account/SKILL.md",
|
|
8
8
|
"framework": null,
|
|
9
9
|
"category": "core"
|