@cavuno/board 4.8.0 → 4.9.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 +24 -0
- package/dist/{_spec-DePC7a05.d.mts → _spec-B9Ah8dNs.d.mts} +35 -0
- package/dist/{_spec-DePC7a05.d.ts → _spec-B9Ah8dNs.d.ts} +35 -0
- package/dist/bin.mjs +174 -19
- package/dist/{blog-DbFr4VPW.d.mts → blog-BmqWfLZi.d.mts} +1 -1
- package/dist/{blog-ummlt6Uq.d.ts → blog-bh07fZ8Q.d.ts} +1 -1
- package/dist/{board-zWyHbyi4.d.ts → board-B4jLqmxn.d.mts} +5 -3
- package/dist/{board-DxTMBgIf.d.mts → board-De8nLbk7.d.ts} +5 -3
- package/dist/{breadcrumbs-kbmspmfk.d.ts → breadcrumbs-B1HVufC7.d.ts} +2 -2
- package/dist/{breadcrumbs-P4qh0zML.d.mts → breadcrumbs-BVQL2dNY.d.mts} +2 -2
- package/dist/browser/cavuno-board.global.min.js +1 -1
- package/dist/{chunk-IWWPHFK2.mjs → chunk-T46JASKG.mjs} +3 -0
- package/dist/doctor.d.mts +3 -1
- package/dist/doctor.d.ts +3 -1
- package/dist/doctor.js +169 -17
- package/dist/doctor.mjs +169 -17
- 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/index.d.mts +45 -23
- package/dist/index.d.ts +45 -23
- package/dist/index.js +10 -6
- package/dist/index.mjs +8 -7
- package/dist/{jobs-DTLDt57G.d.mts → jobs-B7q3BgIK.d.mts} +1 -1
- package/dist/{jobs-twt5TO9l.d.ts → jobs-Iv6Wkvvf.d.ts} +1 -1
- package/dist/{search-CHD6peIl.d.ts → search-CbDZwdyl.d.ts} +1 -1
- package/dist/{search-f2UNlTfv.d.mts → search-DC0jatQN.d.mts} +1 -1
- package/dist/seo-BDFUuvXM.d.ts +12 -0
- package/dist/seo-HCE7aCkh.d.mts +12 -0
- package/dist/seo-files.d.mts +36 -0
- package/dist/seo-files.d.ts +36 -0
- package/dist/seo-files.js +102 -0
- package/dist/seo-files.mjs +81 -0
- package/dist/seo.d.mts +6 -6
- package/dist/seo.d.ts +6 -6
- package/dist/server.d.mts +6 -5
- package/dist/server.d.ts +6 -5
- package/dist/server.mjs +1 -1
- package/dist/sitemap.d.mts +6 -5
- package/dist/sitemap.d.ts +6 -5
- package/dist/suggest.d.mts +2 -2
- package/dist/suggest.d.ts +2 -2
- package/package.json +11 -1
- package/skills/cavuno-board-account/SKILL.md +3 -1
- package/skills/cavuno-board-filters/SKILL.md +17 -3
- package/skills/manifest.json +1 -1
package/dist/doctor.mjs
CHANGED
|
@@ -107,7 +107,14 @@ function summarize(results) {
|
|
|
107
107
|
const passed = results.filter((r) => r.status === "pass").map((r) => r.id);
|
|
108
108
|
const failed = results.filter((r) => r.status === "fail").map((r) => r.id);
|
|
109
109
|
const skipped = results.filter((r) => r.status === "skip").map((r) => r.id);
|
|
110
|
-
|
|
110
|
+
const warned = results.filter((r) => r.status === "warn").map((r) => r.id);
|
|
111
|
+
return {
|
|
112
|
+
exitCode: failed.length > 0 ? 1 : 0,
|
|
113
|
+
passed,
|
|
114
|
+
failed,
|
|
115
|
+
skipped,
|
|
116
|
+
warned
|
|
117
|
+
};
|
|
111
118
|
}
|
|
112
119
|
|
|
113
120
|
// src/doctor/cookie-conformance.ts
|
|
@@ -282,7 +289,7 @@ function checkCookieCodecConformance(projectRoot) {
|
|
|
282
289
|
}
|
|
283
290
|
|
|
284
291
|
// src/doctor/probe.ts
|
|
285
|
-
var FETCH_TIMEOUT_MS =
|
|
292
|
+
var FETCH_TIMEOUT_MS = 6e4;
|
|
286
293
|
async function probe(fetchImpl, url) {
|
|
287
294
|
try {
|
|
288
295
|
const response = await fetchImpl(url, {
|
|
@@ -308,7 +315,11 @@ var READ = {
|
|
|
308
315
|
jobs: record("read.jobs", 2),
|
|
309
316
|
jsonld: record("read.jsonld", 2),
|
|
310
317
|
sitemap: record("read.sitemap", 2),
|
|
311
|
-
robots: record("read.robots", 2)
|
|
318
|
+
robots: record("read.robots", 2),
|
|
319
|
+
adsTxt: record("read.adsTxt", 2),
|
|
320
|
+
indexNow: record("read.indexNow", 2),
|
|
321
|
+
googleVerification: record("read.googleVerification", 2),
|
|
322
|
+
oauthCallback: record("read.oauthCallback", 2)
|
|
312
323
|
};
|
|
313
324
|
function skipReadProbes(reason) {
|
|
314
325
|
return Object.values(READ).map((make) => make("skip", reason));
|
|
@@ -364,7 +375,11 @@ async function probeSitemap(fetchImpl, base) {
|
|
|
364
375
|
}
|
|
365
376
|
let urls = doc.urls;
|
|
366
377
|
if (doc.kind === "index") {
|
|
367
|
-
const
|
|
378
|
+
const childUrl = onFrontend(base, urls[0]);
|
|
379
|
+
let child = await probe(fetchImpl, childUrl);
|
|
380
|
+
if (!child.ok && (child.status === 503 || child.status === 0)) {
|
|
381
|
+
child = await probe(fetchImpl, childUrl);
|
|
382
|
+
}
|
|
368
383
|
const childDoc = child.ok ? parseSitemap(child.body) : null;
|
|
369
384
|
if (!childDoc || childDoc.urls.length === 0) {
|
|
370
385
|
return READ.sitemap(
|
|
@@ -378,14 +393,109 @@ async function probeSitemap(fetchImpl, base) {
|
|
|
378
393
|
const sample = await probe(fetchImpl, sampleUrl);
|
|
379
394
|
return sample.ok ? READ.sitemap("pass", `${urls.length} entries; sample page resolves`) : READ.sitemap("fail", `sitemap page ${sampleUrl} \u2192 HTTP ${sample.status}`);
|
|
380
395
|
}
|
|
381
|
-
|
|
396
|
+
function scoreRobots(robots, seo) {
|
|
397
|
+
if (!robots.ok) {
|
|
398
|
+
return READ.robots("fail", `robots.txt HTTP ${robots.status}`);
|
|
399
|
+
}
|
|
400
|
+
const missing = [];
|
|
401
|
+
if (!/user-agent\s*:/i.test(robots.body)) missing.push("User-agent");
|
|
402
|
+
if (!robots.body.includes("Disallow: /go/")) missing.push("Disallow: /go/");
|
|
403
|
+
if (seo) {
|
|
404
|
+
const canonicalBase = seo.canonicalBase.replace(/\/+$/, "");
|
|
405
|
+
const sitemapLine = `Sitemap: ${canonicalBase}/sitemap.xml`;
|
|
406
|
+
if (!robots.body.includes(sitemapLine)) missing.push(sitemapLine);
|
|
407
|
+
}
|
|
408
|
+
if (missing.includes("User-agent")) {
|
|
409
|
+
return READ.robots(
|
|
410
|
+
"fail",
|
|
411
|
+
"robots.txt returned 200 but has no User-agent directive"
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
return missing.length === 0 ? READ.robots("pass", "present") : READ.robots(
|
|
415
|
+
"warn",
|
|
416
|
+
`robots.txt is missing ${missing.join(", ")} (hosted boards emit it)`
|
|
417
|
+
);
|
|
418
|
+
}
|
|
419
|
+
function configuredText(value) {
|
|
420
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
421
|
+
}
|
|
422
|
+
function scoreOptionalTextFile(options) {
|
|
423
|
+
const { make, label, path, seo, probed } = options;
|
|
424
|
+
if (seo == null) {
|
|
425
|
+
return make("skip", "board seo not fetched");
|
|
426
|
+
}
|
|
427
|
+
const expected = configuredText(options.configured);
|
|
428
|
+
if (expected !== null) {
|
|
429
|
+
if (!probed.ok) {
|
|
430
|
+
return make("fail", `${path} HTTP ${probed.status}`);
|
|
431
|
+
}
|
|
432
|
+
if (probed.body.trimEnd() === expected.trimEnd()) {
|
|
433
|
+
return make("pass", `${label} matches dashboard`);
|
|
434
|
+
}
|
|
435
|
+
return make("fail", `${path} body does not match dashboard ${label}`);
|
|
436
|
+
}
|
|
437
|
+
if (probed.status === 404) {
|
|
438
|
+
return make("pass", "unconfigured; 404 as expected");
|
|
439
|
+
}
|
|
440
|
+
if (probed.status === 200) {
|
|
441
|
+
return make(
|
|
442
|
+
"warn",
|
|
443
|
+
`${label} served but not configured in dashboard \u2014 clone leftover?`
|
|
444
|
+
);
|
|
445
|
+
}
|
|
446
|
+
return make("fail", `${path} HTTP ${probed.status}`);
|
|
447
|
+
}
|
|
448
|
+
function escapeRegExp(value) {
|
|
449
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
450
|
+
}
|
|
451
|
+
function hasGoogleSiteVerificationMeta(html, token) {
|
|
452
|
+
const escaped = escapeRegExp(token);
|
|
453
|
+
const quoted = `["']${escaped}["']`;
|
|
454
|
+
const name = `name\\s*=\\s*["']google-site-verification["']`;
|
|
455
|
+
const content = `content\\s*=\\s*${quoted}`;
|
|
456
|
+
return new RegExp(`<meta\\b[^>]*\\b${name}[^>]*\\b${content}`, "i").test(html) || new RegExp(`<meta\\b[^>]*\\b${content}[^>]*\\b${name}`, "i").test(html);
|
|
457
|
+
}
|
|
458
|
+
function scoreGoogleVerification(homeHtml, seo) {
|
|
459
|
+
if (seo == null) {
|
|
460
|
+
return READ.googleVerification("skip", "board seo not fetched");
|
|
461
|
+
}
|
|
462
|
+
const token = configuredText(seo.googleSiteVerification);
|
|
463
|
+
if (token === null) {
|
|
464
|
+
return READ.googleVerification("skip", "no token configured");
|
|
465
|
+
}
|
|
466
|
+
return hasGoogleSiteVerificationMeta(homeHtml, token) ? READ.googleVerification("pass", "google-site-verification meta present") : READ.googleVerification(
|
|
467
|
+
"fail",
|
|
468
|
+
"home HTML is missing the google-site-verification meta tag"
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
var OAUTH_PROVIDERS = ["google", "linkedin"];
|
|
472
|
+
function scoreOAuthCallback(probed) {
|
|
473
|
+
const broken = OAUTH_PROVIDERS.filter(
|
|
474
|
+
(provider) => !(probed[provider].status === 400 && /missing code or state/i.test(probed[provider].body))
|
|
475
|
+
);
|
|
476
|
+
return broken.length === 0 ? READ.oauthCallback("pass", "callback paths reach the hosted app") : READ.oauthCallback(
|
|
477
|
+
"warn",
|
|
478
|
+
`${broken.map((p) => `/api/board-auth/oauth/${p}/callback \u2192 HTTP ${probed[p].status}`).join(", ")} \u2014 only matters if you registered this domain's callback with the provider: forward the path to cavuno.com, or register https://cavuno.com/api/board-auth/oauth/{provider}/callback instead`
|
|
479
|
+
);
|
|
480
|
+
}
|
|
481
|
+
async function runReadProbes(fetchImpl, frontendUrl, seo) {
|
|
382
482
|
const base = frontendUrl.replace(/\/$/, "");
|
|
383
|
-
const
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
483
|
+
const home = await probe(fetchImpl, base);
|
|
484
|
+
const jobsAndJsonLd = await probeJobsAndJsonLd(fetchImpl, base);
|
|
485
|
+
const sitemap = await probeSitemap(fetchImpl, base);
|
|
486
|
+
const robots = await probe(fetchImpl, `${base}/robots.txt`);
|
|
487
|
+
const adsTxt = await probe(fetchImpl, `${base}/ads.txt`);
|
|
488
|
+
const indexNow = await probe(fetchImpl, `${base}/indexnow-key.txt`);
|
|
489
|
+
const oauthCallback = {
|
|
490
|
+
google: await probe(
|
|
491
|
+
fetchImpl,
|
|
492
|
+
`${base}/api/board-auth/oauth/google/callback`
|
|
493
|
+
),
|
|
494
|
+
linkedin: await probe(
|
|
495
|
+
fetchImpl,
|
|
496
|
+
`${base}/api/board-auth/oauth/linkedin/callback`
|
|
497
|
+
)
|
|
498
|
+
};
|
|
389
499
|
return [
|
|
390
500
|
home.ok && /<(html|body|div|main)[\s>]/i.test(home.body) ? READ.home("pass", "home renders") : READ.home(
|
|
391
501
|
"fail",
|
|
@@ -393,10 +503,25 @@ async function runReadProbes(fetchImpl, frontendUrl) {
|
|
|
393
503
|
),
|
|
394
504
|
...jobsAndJsonLd,
|
|
395
505
|
sitemap,
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
506
|
+
scoreRobots(robots, seo),
|
|
507
|
+
scoreOptionalTextFile({
|
|
508
|
+
make: READ.adsTxt,
|
|
509
|
+
label: "ads.txt",
|
|
510
|
+
path: "/ads.txt",
|
|
511
|
+
seo,
|
|
512
|
+
configured: seo?.adsTxt,
|
|
513
|
+
probed: adsTxt
|
|
514
|
+
}),
|
|
515
|
+
scoreOptionalTextFile({
|
|
516
|
+
make: READ.indexNow,
|
|
517
|
+
label: "indexnow-key.txt",
|
|
518
|
+
path: "/indexnow-key.txt",
|
|
519
|
+
seo,
|
|
520
|
+
configured: seo?.indexNowKey,
|
|
521
|
+
probed: indexNow
|
|
522
|
+
}),
|
|
523
|
+
scoreGoogleVerification(home.body, seo),
|
|
524
|
+
scoreOAuthCallback(oauthCallback)
|
|
400
525
|
];
|
|
401
526
|
}
|
|
402
527
|
|
|
@@ -452,6 +577,28 @@ async function checkBoardResolves(fetchImpl, env) {
|
|
|
452
577
|
}
|
|
453
578
|
return STATIC_BOARD("pass", "publishable key resolves the board");
|
|
454
579
|
}
|
|
580
|
+
async function fetchBoardSeo(fetchImpl, env) {
|
|
581
|
+
const result = await probe(
|
|
582
|
+
fetchImpl,
|
|
583
|
+
`${apiBase(env.apiUrl)}/v1/boards/${encodeURIComponent(env.boardKey)}/seo`
|
|
584
|
+
);
|
|
585
|
+
if (!result.ok) return null;
|
|
586
|
+
try {
|
|
587
|
+
const parsed = JSON.parse(result.body);
|
|
588
|
+
if (typeof parsed !== "object" || parsed === null) return null;
|
|
589
|
+
const rec = parsed;
|
|
590
|
+
if (typeof rec.canonicalBase !== "string") return null;
|
|
591
|
+
const asNullableString = (value) => value === null || typeof value === "string" ? value : null;
|
|
592
|
+
return {
|
|
593
|
+
canonicalBase: rec.canonicalBase,
|
|
594
|
+
adsTxt: asNullableString(rec.adsTxt),
|
|
595
|
+
indexNowKey: asNullableString(rec.indexNowKey),
|
|
596
|
+
googleSiteVerification: asNullableString(rec.googleSiteVerification)
|
|
597
|
+
};
|
|
598
|
+
} catch {
|
|
599
|
+
return null;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
455
602
|
var SKILL_ROOTS = [
|
|
456
603
|
".claude/skills",
|
|
457
604
|
".agents/skills",
|
|
@@ -513,8 +660,13 @@ async function runDoctor(options) {
|
|
|
513
660
|
} else {
|
|
514
661
|
results.push(STATIC_API("skip", "PUBLIC_CAVUNO_API_URL not set"));
|
|
515
662
|
}
|
|
663
|
+
let seo = null;
|
|
516
664
|
if (envOk) {
|
|
517
|
-
|
|
665
|
+
const boardResult = await checkBoardResolves(fetchImpl, env);
|
|
666
|
+
results.push(boardResult);
|
|
667
|
+
if (boardResult.status === "pass") {
|
|
668
|
+
seo = await fetchBoardSeo(fetchImpl, env);
|
|
669
|
+
}
|
|
518
670
|
} else {
|
|
519
671
|
results.push(STATIC_BOARD("skip", "env checks failed \u2014 fix them first"));
|
|
520
672
|
}
|
|
@@ -523,7 +675,7 @@ async function runDoctor(options) {
|
|
|
523
675
|
...checkCookieCodecConformance(options.projectRoot ?? process.cwd())
|
|
524
676
|
);
|
|
525
677
|
results.push(
|
|
526
|
-
...options.frontendUrl ? await runReadProbes(fetchImpl, options.frontendUrl) : skipReadProbes("no --frontend <url> given")
|
|
678
|
+
...options.frontendUrl ? await runReadProbes(fetchImpl, options.frontendUrl, seo) : skipReadProbes("no --frontend <url> given")
|
|
527
679
|
);
|
|
528
680
|
return { results, summary: summarize(results) };
|
|
529
681
|
}
|
package/dist/filters.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-
|
|
2
|
-
import './_spec-
|
|
1
|
+
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-B7q3BgIK.mjs';
|
|
2
|
+
import './_spec-B9Ah8dNs.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
|
package/dist/filters.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-
|
|
2
|
-
import './_spec-
|
|
1
|
+
import { J as JobSort, E as EmploymentType, R as RemoteOption, S as Seniority } from './jobs-Iv6Wkvvf.js';
|
|
2
|
+
import './_spec-B9Ah8dNs.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@cavuno/board/filters` — the canonical listing-filter vocabulary and URL
|
package/dist/format.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-
|
|
2
|
-
import { C as CustomFieldDefinition } from './board-
|
|
3
|
-
import { C as CustomFieldValues } from './jobs-
|
|
4
|
-
import './_spec-
|
|
1
|
+
export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-BVQL2dNY.mjs';
|
|
2
|
+
import { C as CustomFieldDefinition } from './board-B4jLqmxn.mjs';
|
|
3
|
+
import { C as CustomFieldValues } from './jobs-B7q3BgIK.mjs';
|
|
4
|
+
import './_spec-B9Ah8dNs.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Date display helpers in the board language (required leading parameter,
|
package/dist/format.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-
|
|
2
|
-
import { C as CustomFieldDefinition } from './board-
|
|
3
|
-
import { C as CustomFieldValues } from './jobs-
|
|
4
|
-
import './_spec-
|
|
1
|
+
export { C as CurrencyDisplay, F as FormattedSalaryRange, J as JobBreadcrumb, N as NumberNotation, S as SalaryTimeframeInput, a as SalaryTimeframeValue, b as buildJobBreadcrumbs, f as formatSalaryRange, c as formatSalaryStat, d as formatSalaryStatRange, n as normalizeWebsiteUrl } from './breadcrumbs-B1HVufC7.js';
|
|
2
|
+
import { C as CustomFieldDefinition } from './board-De8nLbk7.js';
|
|
3
|
+
import { C as CustomFieldValues } from './jobs-Iv6Wkvvf.js';
|
|
4
|
+
import './_spec-B9Ah8dNs.js';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Date display helpers in the board language (required leading parameter,
|
package/dist/index.d.mts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { S as Schemas, c as components } from './_spec-
|
|
2
|
-
import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-
|
|
3
|
-
export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-
|
|
4
|
-
import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-
|
|
5
|
-
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { S as Schemas, c as components } from './_spec-B9Ah8dNs.mjs';
|
|
2
|
+
import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-DC0jatQN.mjs';
|
|
3
|
+
export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-DC0jatQN.mjs';
|
|
4
|
+
import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-B4jLqmxn.mjs';
|
|
5
|
+
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-B4jLqmxn.mjs';
|
|
6
|
+
export { B as BoardSeo } from './seo-HCE7aCkh.mjs';
|
|
7
|
+
import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-B7q3BgIK.mjs';
|
|
8
|
+
export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-B7q3BgIK.mjs';
|
|
9
|
+
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-BmqWfLZi.mjs';
|
|
10
|
+
export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-BmqWfLZi.mjs';
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Well-known `<domain>_<snake_reason>` codes the Board API sends, grouped by
|
|
@@ -19,7 +20,7 @@ export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts,
|
|
|
19
20
|
* `unknown_error` is SDK-synthesized when a response carries no parseable
|
|
20
21
|
* envelope.
|
|
21
22
|
*/
|
|
22
|
-
declare const BOARD_API_ERROR_CODES: readonly ["internal_error", "validation_bad_request", "validation_payload_too_large", "rate_limited", "rate_limit_unavailable", "search_unavailable", "too_many_filter_values", "pagination_invalid_cursor", "pagination_offset_too_large", "auth_unauthenticated", "auth_forbidden", "plan_upgrade_required", "unknown_error", "boards_not_found", "board_page_not_found", "board_auth_email_taken", "board_auth_invalid_credentials", "board_auth_invalid_token", "board_auth_registration_disabled", "board_auth_token_expired", "invalid_current_password", "no_password", "same_email", "email_taken", "invalid_token", "board_password_required", "board_password_invalid", "jobs_not_found", "jobs_invalid_filter", "categories_not_found", "skills_not_found", "places_not_found", "companies_not_found", "company_markets_not_found", "company_salary_not_found", "company_category_salary_not_found", "salaries_title_not_found", "salaries_skill_not_found", "salaries_location_not_found", "salaries_title_location_not_found", "salaries_skill_location_not_found", "blog_post_not_found", "blog_author_not_found", "blog_tag_not_found", "talent_not_found", "talent_directory_not_found", "talent_directory_restricted", "job_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_country_not_allowed", "applications_guest_not_allowed", "applications_job_not_found", "applications_not_found", "applications_resume_invalid_file", "applications_unprocessable", "messaging_application_not_found", "messaging_application_not_linked", "messaging_blocked", "messaging_cannot_block_self", "messaging_cold_rule", "messaging_conversation_not_found", "messaging_disabled", "messaging_edit_window_expired", "messaging_message_deleted", "messaging_message_not_found", "messaging_not_author", "messaging_not_participant", "messaging_not_permitted", "messaging_not_recipient", "messaging_rate_limited", "messaging_recipient_not_found", "messaging_recipient_not_open", "messaging_unsend_window_expired", "employer_applicant_not_found", "employer_ats_unprocessable", "employer_checkout_failed", "employer_company_exists", "employer_company_name_taken", "employer_company_not_found", "employer_job_not_found", "employer_job_slug_taken", "employer_jobs_quota_exceeded", "employer_not_member", "employer_payment_required", "employer_pipeline_stage_not_found", "employer_member_not_found", "employer_invite_not_found", "not_company_admin", "not_company_member", "company_deletion_disabled", "last_admin", "already_member", "already_invited", "invalid_email", "invite_email_mismatch", "candidate_role", "job_not_published", "paywall_already_active", "paywall_disabled", "paywall_invalid_checkout_session", "paywall_no_candidate_profile", "paywall_no_recurring_subscription", "paywall_offer_not_found", "job_posting_logo_lookup_unavailable", "job_posting_logo_not_found", "job_posting_rejected"];
|
|
23
|
+
declare const BOARD_API_ERROR_CODES: readonly ["internal_error", "validation_bad_request", "validation_payload_too_large", "rate_limited", "rate_limit_unavailable", "search_unavailable", "too_many_filter_values", "pagination_invalid_cursor", "pagination_offset_too_large", "auth_unauthenticated", "auth_forbidden", "plan_upgrade_required", "unknown_error", "boards_not_found", "board_page_not_found", "board_auth_email_taken", "board_auth_invalid_credentials", "board_auth_invalid_token", "board_auth_registration_disabled", "board_auth_token_expired", "invalid_current_password", "no_password", "same_email", "email_taken", "invalid_token", "board_password_required", "board_password_invalid", "jobs_not_found", "jobs_invalid_filter", "categories_not_found", "skills_not_found", "places_not_found", "companies_not_found", "company_markets_not_found", "company_salary_not_found", "company_category_salary_not_found", "salaries_title_not_found", "salaries_skill_not_found", "salaries_location_not_found", "salaries_title_location_not_found", "salaries_skill_location_not_found", "blog_post_not_found", "blog_author_not_found", "blog_tag_not_found", "talent_not_found", "talent_directory_not_found", "talent_directory_restricted", "job_recommendations_not_found", "recommended_talent_not_found", "job_alert_not_found", "job_alerts_disabled", "candidate_alert_limit_reached", "candidate_alert_not_found", "candidate_entry_not_found", "candidate_handle_taken", "candidate_job_not_found", "candidate_notification_preference_paused", "resume_invalid_file", "resume_upload_forbidden", "applications_external_apply_only", "applications_country_not_allowed", "applications_guest_not_allowed", "applications_job_not_found", "applications_not_found", "applications_resume_invalid_file", "applications_unprocessable", "messaging_application_not_found", "messaging_application_not_linked", "messaging_blocked", "messaging_cannot_block_self", "messaging_cold_rule", "messaging_conversation_not_found", "messaging_disabled", "messaging_edit_window_expired", "messaging_message_deleted", "messaging_message_not_found", "messaging_not_author", "messaging_not_participant", "messaging_not_permitted", "messaging_not_recipient", "messaging_rate_limited", "messaging_recipient_not_found", "messaging_recipient_not_open", "messaging_unsend_window_expired", "employer_applicant_not_found", "employer_ats_unprocessable", "employer_checkout_failed", "employer_company_exists", "employer_company_name_taken", "employer_company_not_found", "employer_job_not_found", "employer_job_slug_taken", "employer_jobs_quota_exceeded", "employer_not_member", "employer_payment_required", "employer_pipeline_stage_not_found", "employer_member_not_found", "employer_invite_not_found", "not_company_admin", "not_company_member", "company_deletion_disabled", "last_admin", "already_member", "already_invited", "invalid_email", "invite_email_mismatch", "candidate_role", "job_not_published", "paywall_already_active", "paywall_disabled", "paywall_invalid_checkout_session", "paywall_no_candidate_profile", "paywall_no_recurring_subscription", "paywall_offer_not_found", "job_posting_logo_lookup_unavailable", "job_posting_logo_not_found", "job_posting_rejected"];
|
|
23
24
|
/**
|
|
24
25
|
* The known code set plus open string — new codes ship additively within v1,
|
|
25
26
|
* so exhaustive narrowing is intentionally impossible.
|
|
@@ -142,7 +143,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
|
|
|
142
143
|
* constant because the package is platform-neutral and cannot read
|
|
143
144
|
* package.json at runtime.
|
|
144
145
|
*/
|
|
145
|
-
declare const SDK_VERSION = "4.
|
|
146
|
+
declare const SDK_VERSION = "4.9.0";
|
|
146
147
|
|
|
147
148
|
type SavedJob = Schemas['SavedJob'];
|
|
148
149
|
type SavedJobsListQuery = {
|
|
@@ -468,15 +469,6 @@ type OAuthAuthorizationQuery = {
|
|
|
468
469
|
type OAuthAuthorizationUrl = Schemas['BoardAuthOAuthAuthorizationUrl'];
|
|
469
470
|
type OAuthExchangeBody = Schemas['BoardAuthOAuthExchangeBody'];
|
|
470
471
|
|
|
471
|
-
/**
|
|
472
|
-
* The public SEO-infra payload (`board.seo()`) — platform infrastructure a
|
|
473
|
-
* headless frontend rebuilds `robots.txt` / `ads.txt` / `indexnow-key.txt`
|
|
474
|
-
* (+ the Google site-verification `<meta>`) from, byte-identically to the
|
|
475
|
-
* hosted board. Icons and `themeColor` left in 4.0.0; applications
|
|
476
|
-
* own brand assets and presentation tokens.
|
|
477
|
-
*/
|
|
478
|
-
type BoardSeo = Schemas['BoardSeo'];
|
|
479
|
-
|
|
480
472
|
type EmbedJobsQuery = {
|
|
481
473
|
/** Free-text search query, up to 200 characters. */
|
|
482
474
|
q?: string;
|
|
@@ -689,6 +681,8 @@ type TaxonomyListQuery = {
|
|
|
689
681
|
q?: string;
|
|
690
682
|
cursor?: string;
|
|
691
683
|
limit?: number;
|
|
684
|
+
/** `name` (default) or `jobCount` (highest published-job count first). */
|
|
685
|
+
sort?: 'name' | 'jobCount';
|
|
692
686
|
};
|
|
693
687
|
/**
|
|
694
688
|
* Query for `taxonomy.places.list()`. Omit it (or `q`) for the full
|
|
@@ -740,10 +734,11 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
740
734
|
client: BoardClient;
|
|
741
735
|
/**
|
|
742
736
|
* Board context — identity, brand (`logoUrl` + favicon `icons`), language,
|
|
743
|
-
* features, and
|
|
737
|
+
* features, analytics, and AdSense (`ads.enabled` + `ads.clientId`).
|
|
738
|
+
* Per-placement slot ids are not on this resource.
|
|
744
739
|
*
|
|
745
740
|
* @example
|
|
746
|
-
* const { name, language, logoUrl, icons } = await board.context();
|
|
741
|
+
* const { name, language, logoUrl, icons, ads } = await board.context();
|
|
747
742
|
*/
|
|
748
743
|
context(options?: FetchOptions): Promise<{
|
|
749
744
|
object: "public_board";
|
|
@@ -764,6 +759,8 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
764
759
|
showCavunoBranding: boolean;
|
|
765
760
|
features: {
|
|
766
761
|
jobAlerts: boolean;
|
|
762
|
+
jobRecommendationsEnabled: boolean;
|
|
763
|
+
recommendedTalentEnabled: boolean;
|
|
767
764
|
candidates: boolean;
|
|
768
765
|
employers: boolean;
|
|
769
766
|
blog: boolean;
|
|
@@ -783,9 +780,27 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
783
780
|
linkedInPartnerId: string | null;
|
|
784
781
|
cookieConsentRequired: boolean;
|
|
785
782
|
};
|
|
783
|
+
ads: {
|
|
784
|
+
enabled: boolean;
|
|
785
|
+
clientId: string | null;
|
|
786
|
+
};
|
|
786
787
|
customFields: {
|
|
787
788
|
job: components["schemas"]["CustomFieldDefinition"][];
|
|
788
789
|
};
|
|
790
|
+
jobForm: {
|
|
791
|
+
salary: {
|
|
792
|
+
visible: boolean;
|
|
793
|
+
};
|
|
794
|
+
seniority: {
|
|
795
|
+
visible: boolean;
|
|
796
|
+
};
|
|
797
|
+
location: {
|
|
798
|
+
visible: boolean;
|
|
799
|
+
};
|
|
800
|
+
sponsorship: {
|
|
801
|
+
visible: boolean;
|
|
802
|
+
};
|
|
803
|
+
};
|
|
789
804
|
contact: {
|
|
790
805
|
email: string | null;
|
|
791
806
|
websiteUrl: string | null;
|
|
@@ -1580,12 +1595,14 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
1580
1595
|
object: "notification_preference";
|
|
1581
1596
|
channel: "messageEmails" | "applicationEmails" | "recommendedJobEmails";
|
|
1582
1597
|
subscribed: boolean;
|
|
1598
|
+
waitlisted: boolean;
|
|
1583
1599
|
updatedAt: number | null;
|
|
1584
1600
|
}>>;
|
|
1585
1601
|
update(body: UpdateNotificationPreferenceBody, options?: FetchOptions): Promise<ListEnvelope<{
|
|
1586
1602
|
object: "notification_preference";
|
|
1587
1603
|
channel: "messageEmails" | "applicationEmails" | "recommendedJobEmails";
|
|
1588
1604
|
subscribed: boolean;
|
|
1605
|
+
waitlisted: boolean;
|
|
1589
1606
|
updatedAt: number | null;
|
|
1590
1607
|
}>>;
|
|
1591
1608
|
unsubscribeWithToken(body: UnsubscribeBody, options?: FetchOptions): Promise<void>;
|
|
@@ -1656,6 +1673,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
1656
1673
|
linkedinUrl: string | null;
|
|
1657
1674
|
facebookUrl: string | null;
|
|
1658
1675
|
logoUrl: string | null;
|
|
1676
|
+
deletionEnabled: boolean;
|
|
1659
1677
|
}>;
|
|
1660
1678
|
update(slug: string, body: UpdateEmployerCompanyBody, options?: FetchOptions): Promise<{
|
|
1661
1679
|
id: string;
|
|
@@ -1669,6 +1687,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
1669
1687
|
linkedinUrl: string | null;
|
|
1670
1688
|
facebookUrl: string | null;
|
|
1671
1689
|
logoUrl: string | null;
|
|
1690
|
+
deletionEnabled: boolean;
|
|
1672
1691
|
}>;
|
|
1673
1692
|
delete(slug: string, options?: FetchOptions): Promise<void>;
|
|
1674
1693
|
listMembers(slug: string, options?: FetchOptions): Promise<ListEnvelope<{
|
|
@@ -1711,6 +1730,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
1711
1730
|
linkedinUrl: string | null;
|
|
1712
1731
|
facebookUrl: string | null;
|
|
1713
1732
|
logoUrl: string | null;
|
|
1733
|
+
deletionEnabled: boolean;
|
|
1714
1734
|
}>;
|
|
1715
1735
|
workEmail: {
|
|
1716
1736
|
verify(slug: string, body: SendWorkEmailBody, options?: FetchOptions): Promise<{
|
|
@@ -2488,6 +2508,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
2488
2508
|
sourceSlug: string;
|
|
2489
2509
|
canonicalSlug: string;
|
|
2490
2510
|
displayName: string;
|
|
2511
|
+
jobCount: number;
|
|
2491
2512
|
}>>;
|
|
2492
2513
|
resolve(slug: string, options?: FetchOptions): Promise<{
|
|
2493
2514
|
object: "taxonomy_resolution";
|
|
@@ -2507,6 +2528,7 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
2507
2528
|
sourceSlug: string;
|
|
2508
2529
|
canonicalSlug: string;
|
|
2509
2530
|
displayName: string;
|
|
2531
|
+
jobCount: number;
|
|
2510
2532
|
}>>;
|
|
2511
2533
|
resolve(slug: string, options?: FetchOptions): Promise<{
|
|
2512
2534
|
object: "taxonomy_resolution";
|
|
@@ -3187,4 +3209,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
|
|
|
3187
3209
|
};
|
|
3188
3210
|
type BoardSdk = ReturnType<typeof createBoardClient>;
|
|
3189
3211
|
|
|
3190
|
-
export { type AcceptCompanyMemberInviteBody, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyAction, type ApplyApprovalPlan, type ApplyApprovalReceipt, type ApplyBody, type ApplyIntent, Awaitable, BOARD_API_ERROR_CODES, type Block, type BlockStatus, type BlockUserBody, type BlockedUser, BlogPostsListQuery, BlogSearchBody, BlogSimilarQuery, type BoardAccessGrant, BoardApiError, type BoardApiErrorCode, type BoardAuthSession, BoardClient, BoardRequest, type BoardSdk, type
|
|
3212
|
+
export { type AcceptCompanyMemberInviteBody, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyAction, type ApplyApprovalPlan, type ApplyApprovalReceipt, type ApplyBody, type ApplyIntent, Awaitable, BOARD_API_ERROR_CODES, type Block, type BlockStatus, type BlockUserBody, type BlockedUser, BlogPostsListQuery, BlogSearchBody, BlogSimilarQuery, type BoardAccessGrant, BoardApiError, type BoardApiErrorCode, type BoardAuthSession, BoardClient, BoardRequest, type BoardSdk, type BoardUser, type BulkMoveApplicantsBody, type BulkRejectApplicantsBody, type CandidateAvatar, type CandidateEducation, type CandidateExperience, type CandidateLanguage, type CandidateProfile, type CandidateSkill, type ClaimableCompany, CompaniesListQuery, CompaniesSearchBody, CompanyJobsListQuery, CompanyListEnvelope, CompanyMarketsListQuery, type CompanyMember, type CompanyMemberInvite, type CompanyMemberInviteAcceptance, type CompanyMembership, CompanySimilarQuery, type ConfirmEmailChangeBody, type ConfirmWorkEmailBody, type ConsumeMagicLinkBody, type Conversation, type ConversationArchive, type ConversationDetail, type ConversationRef, type ConversationsListQuery, type CreateApplyApprovalBody, type CreateApplyIntentBody, type CreateBoardClientOptions, type CreateCompanyBody, type CreateCompanyMemberInviteBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type EditMessageBody, type EmbedJobsQuery, type EmployerApplicant, type EmployerBillingOption, type EmployerCheckout, type EmployerCheckoutBody, type EmployerCompany, type EmployerCompanySearchQuery, type EmployerJob, type EmployerJobStat, type EmployerJobStatsPoint, type EmployerJobStatsTimeseriesQuery, type EmployerJobSummary, type EmployerJobsListQuery, type EmployerPipeline, type EmployerPipelineQuery, type EmployerPipelineStage, type EmployerProfileStats, type EmployerProfileViewsPoint, type EmployerProfileViewsTimeseriesQuery, EmploymentType, FetchOptions, type FindExistingConversationQuery, type ForgotPasswordBody, type HandleAvailability, type JobAlertConfirmation, type JobAlertDeletePreferenceInput, type JobAlertFiltersInput, type JobAlertFrequency, type JobAlertManageQuery, type JobAlertManageResult, type JobAlertManageState, type JobAlertManageTokenInput, type JobAlertPreference, type JobAlertRemoteOption, type JobAlertResendResult, type JobAlertStoredFilters, type JobAlertSubscribeInput, type JobAlertSubscription, type JobAlertUpdatePreferenceInput, JobCardListEnvelope, JobCardSearchEnvelope, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, JobsListQuery, JobsSearchBody, JobsSimilarQuery, ListEnvelope, Logger, type LoginBody, type LogoutBody, type MarketingConsent, type Message, type ModerationReport, type MoveApplicantStageBody, type NotificationPreference, type OAuthAuthorizationQuery, type OAuthAuthorizationUrl, type OAuthExchangeBody, type OAuthProvider, type Paginator, type PaywallOffer, type PaywallOfferListEnvelope, type PlacesListQuery, type Plan, type PlanListEnvelope, type PlansListQuery, type PublicPlace, type PublicTaxonomyTerm, type ReadReceipt, type RecommendedJob, type RecommendedJobsListQuery, type RecommendedTalent, type RecommendedTalentListQuery, type RedirectResolution, type RefreshBody, type RegisterBody, RemoteOption, type RemotePermitTaxonomyEntry, type ReorderPipelineStagesBody, type ReplyBody, type ReportBody, type RequestEmailChangeBody, type RequestMagicLinkBody, type ResetPasswordBody, type Resume, type ResumeUploadOptions, SDK_VERSION, SalaryDetailQuery, type SalesLedPlan, type SalesLedPlanListEnvelope, type SaveJobBody, type SavedJob, type SavedJobsListQuery, SearchEnvelope, SearchSuggestQuery, type SendWorkEmailBody, Seniority, type StartAboutApplicationBody, type StartConversationBody, StorageMode, type TalentAccess, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TaxonomyGeo, type TaxonomyListQuery, type TaxonomyResolution, type ThreadMessagesQuery, type UnreadCount, type UnsubscribeBody, type UpdateApplicationFactsBody, type UpdateCandidateProfileBody, type UpdateCompanyMemberRoleBody, type UpdateEducationBody, type UpdateEmployerCompanyBody, type UpdateEmployerJobBody, type UpdateExperienceBody, type UpdateLanguagesBody, type UpdateNotificationPreferenceBody, type UpdatePasswordBody, type UpdatePipelineStageBody, type UpdateSkillsBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isNotFound, isOwnMessage, isRateLimited, isSafeApplicationUrl, isUnauthorized, isValidationError, lastOwnMessageId, paginate, resolveApplyAction };
|