@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/index.d.ts
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.js';
|
|
2
|
+
import { F as FetchOptions, S as StorageMode, B as BoardRequest, A as Awaitable, L as Logger, a as BoardClient, b as SearchSuggestQuery } from './search-CbDZwdyl.js';
|
|
3
|
+
export { c as ACCESS_TOKEN_KEY, d as BOARD_ACCESS_GRANT_KEY, C as CompanySuggestion, e as CustomStorage, M as MarketSuggestion, R as REFRESH_TOKEN_KEY, f as SearchSuggestType, g as SuggestResult, h as SuggestionItem, T as TermSuggestion } from './search-CbDZwdyl.js';
|
|
4
|
+
import { c as CompaniesListQuery, d as CompanyListEnvelope, e as CompaniesSearchBody, f as CompanyJobsListQuery, g as CompanySimilarQuery, h as CompanyMarketsListQuery, i as SalaryDetailQuery } from './board-De8nLbk7.js';
|
|
5
|
+
export { a as CompanyCategorySalary, j as CompanyMarket, k as CompanyMarketRef, b as CompanySalary, l as CompanySalarySummary, C as CustomFieldDefinition, m as CustomFieldOption, n as CustomFieldType, L as LocationSalaryDetail, o as LocationSkillsIndex, p as LocationTitlesIndex, P as PublicBoard, q as PublicBoardAds, r as PublicBoardAnalytics, s as PublicBoardFeatures, t as PublicBoardJobForm, u as PublicCompany, v as PublicCompanyDetail, w as SalaryCompany, x as SalaryLocation, y as SalarySkill, z as SalaryTitle, A as SkillLocationSalary, B as SkillLocationsIndex, S as SkillSalaryDetail, D as TitleLocationSalary, E as TitleLocationsIndex, T as TitleSalaryDetail } from './board-De8nLbk7.js';
|
|
6
|
+
export { B as BoardSeo } from './seo-BDFUuvXM.js';
|
|
7
|
+
import { R as RemoteOption, E as EmploymentType, S as Seniority, L as ListEnvelope, a as JobsListQuery, b as JobCardListEnvelope, c as JobsSearchBody, d as JobCardSearchEnvelope, e as JobsSimilarQuery, f as SearchEnvelope } from './jobs-Iv6Wkvvf.js';
|
|
8
|
+
export { g as CustomFieldValue, C as CustomFieldValues, h as EducationRequirement, i as JobCatalogPagination, j as JobCompany, J as JobSort, O as OfficeLocation, k as OffsetPagination, P as PublicJob, l as PublicJobCard, m as RelatedSearch, n as RemotePermit, o as RemoteTimezone, p as StorefrontPagination } from './jobs-Iv6Wkvvf.js';
|
|
9
|
+
import { a as BlogPostsListQuery, b as BlogSimilarQuery, c as BlogSearchBody } from './blog-bh07fZ8Q.js';
|
|
10
|
+
export { B as BlogAuthorEmbed, d as BlogTagEmbed, e as PublicBlogAdjacentPosts, f as PublicBlogAuthor, g as PublicBlogPost, P as PublicBlogPostSummary, h as PublicBlogTag } from './blog-bh07fZ8Q.js';
|
|
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 };
|
package/dist/index.js
CHANGED
|
@@ -104,6 +104,8 @@ var BOARD_API_ERROR_CODES = [
|
|
|
104
104
|
"talent_not_found",
|
|
105
105
|
"talent_directory_not_found",
|
|
106
106
|
"talent_directory_restricted",
|
|
107
|
+
"job_recommendations_not_found",
|
|
108
|
+
"recommended_talent_not_found",
|
|
107
109
|
// Job alerts (anonymous + authenticated)
|
|
108
110
|
"job_alert_not_found",
|
|
109
111
|
"job_alerts_disabled",
|
|
@@ -113,6 +115,7 @@ var BOARD_API_ERROR_CODES = [
|
|
|
113
115
|
"candidate_entry_not_found",
|
|
114
116
|
"candidate_handle_taken",
|
|
115
117
|
"candidate_job_not_found",
|
|
118
|
+
"candidate_notification_preference_paused",
|
|
116
119
|
"resume_invalid_file",
|
|
117
120
|
"resume_upload_forbidden",
|
|
118
121
|
// Applications
|
|
@@ -332,7 +335,7 @@ async function clearSession(storage) {
|
|
|
332
335
|
}
|
|
333
336
|
|
|
334
337
|
// src/version.ts
|
|
335
|
-
var SDK_VERSION = "4.
|
|
338
|
+
var SDK_VERSION = "4.9.0";
|
|
336
339
|
|
|
337
340
|
// src/client.ts
|
|
338
341
|
function isRawBody(body) {
|
|
@@ -1111,9 +1114,9 @@ function jobsNamespace(client) {
|
|
|
1111
1114
|
);
|
|
1112
1115
|
},
|
|
1113
1116
|
/**
|
|
1114
|
-
* Create an opaque external-apply intent. A compatible starter
|
|
1115
|
-
*
|
|
1116
|
-
* render
|
|
1117
|
+
* Create an opaque external-apply intent. A compatible starter sends the
|
|
1118
|
+
* candidate's browser to `gatewayUrl` (or asks it for the canonical JSON
|
|
1119
|
+
* decision after a real Apply click); never render it as a crawlable link. Pass
|
|
1117
1120
|
* `x-cavuno-board-capabilities: apply-gateway-v1` in `options.headers`;
|
|
1118
1121
|
* legacy callers receive 404.
|
|
1119
1122
|
*/
|
|
@@ -3127,10 +3130,11 @@ function createBoardClient(options) {
|
|
|
3127
3130
|
client,
|
|
3128
3131
|
/**
|
|
3129
3132
|
* Board context — identity, brand (`logoUrl` + favicon `icons`), language,
|
|
3130
|
-
* features, and
|
|
3133
|
+
* features, analytics, and AdSense (`ads.enabled` + `ads.clientId`).
|
|
3134
|
+
* Per-placement slot ids are not on this resource.
|
|
3131
3135
|
*
|
|
3132
3136
|
* @example
|
|
3133
|
-
* const { name, language, logoUrl, icons } = await board.context();
|
|
3137
|
+
* const { name, language, logoUrl, icons, ads } = await board.context();
|
|
3134
3138
|
*/
|
|
3135
3139
|
context(options2) {
|
|
3136
3140
|
return client.fetch("", options2);
|
package/dist/index.mjs
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
isValidationError,
|
|
16
16
|
resolveStorage,
|
|
17
17
|
writeSession
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-T46JASKG.mjs";
|
|
19
19
|
import {
|
|
20
20
|
paginate
|
|
21
21
|
} from "./chunk-DLSO6XXY.mjs";
|
|
@@ -39,7 +39,7 @@ function toSearchParams(query) {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
// src/version.ts
|
|
42
|
-
var SDK_VERSION = "4.
|
|
42
|
+
var SDK_VERSION = "4.9.0";
|
|
43
43
|
|
|
44
44
|
// src/client.ts
|
|
45
45
|
function isRawBody(body) {
|
|
@@ -818,9 +818,9 @@ function jobsNamespace(client) {
|
|
|
818
818
|
);
|
|
819
819
|
},
|
|
820
820
|
/**
|
|
821
|
-
* Create an opaque external-apply intent. A compatible starter
|
|
822
|
-
*
|
|
823
|
-
* render
|
|
821
|
+
* Create an opaque external-apply intent. A compatible starter sends the
|
|
822
|
+
* candidate's browser to `gatewayUrl` (or asks it for the canonical JSON
|
|
823
|
+
* decision after a real Apply click); never render it as a crawlable link. Pass
|
|
824
824
|
* `x-cavuno-board-capabilities: apply-gateway-v1` in `options.headers`;
|
|
825
825
|
* legacy callers receive 404.
|
|
826
826
|
*/
|
|
@@ -2804,10 +2804,11 @@ function createBoardClient(options) {
|
|
|
2804
2804
|
client,
|
|
2805
2805
|
/**
|
|
2806
2806
|
* Board context — identity, brand (`logoUrl` + favicon `icons`), language,
|
|
2807
|
-
* features, and
|
|
2807
|
+
* features, analytics, and AdSense (`ads.enabled` + `ads.clientId`).
|
|
2808
|
+
* Per-placement slot ids are not on this resource.
|
|
2808
2809
|
*
|
|
2809
2810
|
* @example
|
|
2810
|
-
* const { name, language, logoUrl, icons } = await board.context();
|
|
2811
|
+
* const { name, language, logoUrl, icons, ads } = await board.context();
|
|
2811
2812
|
*/
|
|
2812
2813
|
context(options2) {
|
|
2813
2814
|
return client.fetch("", options2);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { S as Schemas } from './_spec-B9Ah8dNs.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The public SEO-infra payload (`board.seo()`) — platform infrastructure a
|
|
5
|
+
* headless frontend rebuilds `robots.txt` / `ads.txt` / `indexnow-key.txt`
|
|
6
|
+
* (+ the Google site-verification `<meta>`) from, byte-identically to the
|
|
7
|
+
* hosted board. Icons and `themeColor` left in 4.0.0; applications
|
|
8
|
+
* own brand assets and presentation tokens.
|
|
9
|
+
*/
|
|
10
|
+
type BoardSeo = Schemas['BoardSeo'];
|
|
11
|
+
|
|
12
|
+
export type { BoardSeo as B };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { S as Schemas } from './_spec-B9Ah8dNs.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The public SEO-infra payload (`board.seo()`) — platform infrastructure a
|
|
5
|
+
* headless frontend rebuilds `robots.txt` / `ads.txt` / `indexnow-key.txt`
|
|
6
|
+
* (+ the Google site-verification `<meta>`) from, byte-identically to the
|
|
7
|
+
* hosted board. Icons and `themeColor` left in 4.0.0; applications
|
|
8
|
+
* own brand assets and presentation tokens.
|
|
9
|
+
*/
|
|
10
|
+
type BoardSeo = Schemas['BoardSeo'];
|
|
11
|
+
|
|
12
|
+
export type { BoardSeo as B };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { B as BoardSeo } from './seo-HCE7aCkh.mjs';
|
|
2
|
+
import './_spec-B9Ah8dNs.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `@cavuno/board/seo-files` — platform-owned crawler/identity file bodies
|
|
6
|
+
* (`robots.txt`, `ads.txt`, `indexnow-key.txt`) plus the Google
|
|
7
|
+
* site-verification meta descriptor.
|
|
8
|
+
*
|
|
9
|
+
* Pure, dependency-free: type-only import of `BoardSeo`. No node builtins,
|
|
10
|
+
* no framework packages. Hosted routes, the dispatch Worker, and the starter
|
|
11
|
+
* share these bytes so the files cannot drift.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
declare const SEO_FILE_CONTENT_TYPE = "text/plain; charset=utf-8";
|
|
15
|
+
declare const ROBOTS_CACHE_CONTROL = "public, max-age=600, s-maxage=14400, stale-while-revalidate=86400";
|
|
16
|
+
declare const ADS_TXT_CACHE_CONTROL = "public, max-age=3600, must-revalidate";
|
|
17
|
+
declare const INDEXNOW_CACHE_CONTROL = "public, max-age=86400, must-revalidate";
|
|
18
|
+
type SeoFileResponseInit = {
|
|
19
|
+
method?: string;
|
|
20
|
+
};
|
|
21
|
+
/** Lines of the hosted robots body (no sitemap line). Exported so tests and hosted can share the literal. */
|
|
22
|
+
declare function robotsBody(input: {
|
|
23
|
+
canonicalBase: string;
|
|
24
|
+
sandbox?: boolean;
|
|
25
|
+
}): string;
|
|
26
|
+
declare function robotsResponse(seo: Pick<BoardSeo, 'canonicalBase'> & {
|
|
27
|
+
sandbox?: boolean;
|
|
28
|
+
}, init?: SeoFileResponseInit): Response;
|
|
29
|
+
declare function adsTxtResponse(seo: Pick<BoardSeo, 'adsTxt'>, init?: SeoFileResponseInit): Response;
|
|
30
|
+
declare function indexNowResponse(seo: Pick<BoardSeo, 'indexNowKey'>, init?: SeoFileResponseInit): Response;
|
|
31
|
+
declare function googleSiteVerificationMeta(token: string | null | undefined): {
|
|
32
|
+
name: 'google-site-verification';
|
|
33
|
+
content: string;
|
|
34
|
+
} | null;
|
|
35
|
+
|
|
36
|
+
export { ADS_TXT_CACHE_CONTROL, INDEXNOW_CACHE_CONTROL, ROBOTS_CACHE_CONTROL, SEO_FILE_CONTENT_TYPE, type SeoFileResponseInit, adsTxtResponse, googleSiteVerificationMeta, indexNowResponse, robotsBody, robotsResponse };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { B as BoardSeo } from './seo-BDFUuvXM.js';
|
|
2
|
+
import './_spec-B9Ah8dNs.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `@cavuno/board/seo-files` — platform-owned crawler/identity file bodies
|
|
6
|
+
* (`robots.txt`, `ads.txt`, `indexnow-key.txt`) plus the Google
|
|
7
|
+
* site-verification meta descriptor.
|
|
8
|
+
*
|
|
9
|
+
* Pure, dependency-free: type-only import of `BoardSeo`. No node builtins,
|
|
10
|
+
* no framework packages. Hosted routes, the dispatch Worker, and the starter
|
|
11
|
+
* share these bytes so the files cannot drift.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
declare const SEO_FILE_CONTENT_TYPE = "text/plain; charset=utf-8";
|
|
15
|
+
declare const ROBOTS_CACHE_CONTROL = "public, max-age=600, s-maxage=14400, stale-while-revalidate=86400";
|
|
16
|
+
declare const ADS_TXT_CACHE_CONTROL = "public, max-age=3600, must-revalidate";
|
|
17
|
+
declare const INDEXNOW_CACHE_CONTROL = "public, max-age=86400, must-revalidate";
|
|
18
|
+
type SeoFileResponseInit = {
|
|
19
|
+
method?: string;
|
|
20
|
+
};
|
|
21
|
+
/** Lines of the hosted robots body (no sitemap line). Exported so tests and hosted can share the literal. */
|
|
22
|
+
declare function robotsBody(input: {
|
|
23
|
+
canonicalBase: string;
|
|
24
|
+
sandbox?: boolean;
|
|
25
|
+
}): string;
|
|
26
|
+
declare function robotsResponse(seo: Pick<BoardSeo, 'canonicalBase'> & {
|
|
27
|
+
sandbox?: boolean;
|
|
28
|
+
}, init?: SeoFileResponseInit): Response;
|
|
29
|
+
declare function adsTxtResponse(seo: Pick<BoardSeo, 'adsTxt'>, init?: SeoFileResponseInit): Response;
|
|
30
|
+
declare function indexNowResponse(seo: Pick<BoardSeo, 'indexNowKey'>, init?: SeoFileResponseInit): Response;
|
|
31
|
+
declare function googleSiteVerificationMeta(token: string | null | undefined): {
|
|
32
|
+
name: 'google-site-verification';
|
|
33
|
+
content: string;
|
|
34
|
+
} | null;
|
|
35
|
+
|
|
36
|
+
export { ADS_TXT_CACHE_CONTROL, INDEXNOW_CACHE_CONTROL, ROBOTS_CACHE_CONTROL, SEO_FILE_CONTENT_TYPE, type SeoFileResponseInit, adsTxtResponse, googleSiteVerificationMeta, indexNowResponse, robotsBody, robotsResponse };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/seo-files/index.ts
|
|
21
|
+
var seo_files_exports = {};
|
|
22
|
+
__export(seo_files_exports, {
|
|
23
|
+
ADS_TXT_CACHE_CONTROL: () => ADS_TXT_CACHE_CONTROL,
|
|
24
|
+
INDEXNOW_CACHE_CONTROL: () => INDEXNOW_CACHE_CONTROL,
|
|
25
|
+
ROBOTS_CACHE_CONTROL: () => ROBOTS_CACHE_CONTROL,
|
|
26
|
+
SEO_FILE_CONTENT_TYPE: () => SEO_FILE_CONTENT_TYPE,
|
|
27
|
+
adsTxtResponse: () => adsTxtResponse,
|
|
28
|
+
googleSiteVerificationMeta: () => googleSiteVerificationMeta,
|
|
29
|
+
indexNowResponse: () => indexNowResponse,
|
|
30
|
+
robotsBody: () => robotsBody,
|
|
31
|
+
robotsResponse: () => robotsResponse
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(seo_files_exports);
|
|
34
|
+
var SEO_FILE_CONTENT_TYPE = "text/plain; charset=utf-8";
|
|
35
|
+
var ROBOTS_CACHE_CONTROL = "public, max-age=600, s-maxage=14400, stale-while-revalidate=86400";
|
|
36
|
+
var ADS_TXT_CACHE_CONTROL = "public, max-age=3600, must-revalidate";
|
|
37
|
+
var INDEXNOW_CACHE_CONTROL = "public, max-age=86400, must-revalidate";
|
|
38
|
+
function robotsBody(input) {
|
|
39
|
+
if (input.sandbox) {
|
|
40
|
+
return ["User-Agent: *", "Disallow: /", ""].join("\n");
|
|
41
|
+
}
|
|
42
|
+
const canonicalBase = input.canonicalBase.replace(/\/+$/, "");
|
|
43
|
+
return [
|
|
44
|
+
"User-Agent: *",
|
|
45
|
+
"Allow: /",
|
|
46
|
+
"Disallow: /go/",
|
|
47
|
+
"Disallow: /t/",
|
|
48
|
+
"Disallow: /jobs?page=",
|
|
49
|
+
"Disallow: /jobs*&page=",
|
|
50
|
+
"Disallow: /jobs/*?page=",
|
|
51
|
+
"Disallow: /companies?page=",
|
|
52
|
+
"Disallow: /companies*&page=",
|
|
53
|
+
"Disallow: /companies/*?page=",
|
|
54
|
+
"Disallow: /talent?page=",
|
|
55
|
+
"Disallow: /talent*&page=",
|
|
56
|
+
"Disallow: /talent/*?page=",
|
|
57
|
+
"",
|
|
58
|
+
`Sitemap: ${canonicalBase}/sitemap.xml`,
|
|
59
|
+
""
|
|
60
|
+
].join("\n");
|
|
61
|
+
}
|
|
62
|
+
function robotsResponse(seo, init) {
|
|
63
|
+
return textFileResponse(
|
|
64
|
+
robotsBody({ canonicalBase: seo.canonicalBase, sandbox: seo.sandbox }),
|
|
65
|
+
ROBOTS_CACHE_CONTROL,
|
|
66
|
+
init
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
function adsTxtResponse(seo, init) {
|
|
70
|
+
return optionalTextFileResponse(seo.adsTxt, ADS_TXT_CACHE_CONTROL, init);
|
|
71
|
+
}
|
|
72
|
+
function indexNowResponse(seo, init) {
|
|
73
|
+
return optionalTextFileResponse(
|
|
74
|
+
seo.indexNowKey,
|
|
75
|
+
INDEXNOW_CACHE_CONTROL,
|
|
76
|
+
init
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
function googleSiteVerificationMeta(token) {
|
|
80
|
+
if (typeof token !== "string") return null;
|
|
81
|
+
const content = token.trim();
|
|
82
|
+
if (!content) return null;
|
|
83
|
+
return { name: "google-site-verification", content };
|
|
84
|
+
}
|
|
85
|
+
function isHead(init) {
|
|
86
|
+
return init?.method?.toUpperCase() === "HEAD";
|
|
87
|
+
}
|
|
88
|
+
function textFileResponse(body, cacheControl, init) {
|
|
89
|
+
return new Response(isHead(init) ? null : body, {
|
|
90
|
+
status: 200,
|
|
91
|
+
headers: {
|
|
92
|
+
"Content-Type": SEO_FILE_CONTENT_TYPE,
|
|
93
|
+
"Cache-Control": cacheControl
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function optionalTextFileResponse(value, cacheControl, init) {
|
|
98
|
+
if (value == null || value === "") {
|
|
99
|
+
return new Response(null, { status: 404 });
|
|
100
|
+
}
|
|
101
|
+
return textFileResponse(value, cacheControl, init);
|
|
102
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// src/seo-files/index.ts
|
|
2
|
+
var SEO_FILE_CONTENT_TYPE = "text/plain; charset=utf-8";
|
|
3
|
+
var ROBOTS_CACHE_CONTROL = "public, max-age=600, s-maxage=14400, stale-while-revalidate=86400";
|
|
4
|
+
var ADS_TXT_CACHE_CONTROL = "public, max-age=3600, must-revalidate";
|
|
5
|
+
var INDEXNOW_CACHE_CONTROL = "public, max-age=86400, must-revalidate";
|
|
6
|
+
function robotsBody(input) {
|
|
7
|
+
if (input.sandbox) {
|
|
8
|
+
return ["User-Agent: *", "Disallow: /", ""].join("\n");
|
|
9
|
+
}
|
|
10
|
+
const canonicalBase = input.canonicalBase.replace(/\/+$/, "");
|
|
11
|
+
return [
|
|
12
|
+
"User-Agent: *",
|
|
13
|
+
"Allow: /",
|
|
14
|
+
"Disallow: /go/",
|
|
15
|
+
"Disallow: /t/",
|
|
16
|
+
"Disallow: /jobs?page=",
|
|
17
|
+
"Disallow: /jobs*&page=",
|
|
18
|
+
"Disallow: /jobs/*?page=",
|
|
19
|
+
"Disallow: /companies?page=",
|
|
20
|
+
"Disallow: /companies*&page=",
|
|
21
|
+
"Disallow: /companies/*?page=",
|
|
22
|
+
"Disallow: /talent?page=",
|
|
23
|
+
"Disallow: /talent*&page=",
|
|
24
|
+
"Disallow: /talent/*?page=",
|
|
25
|
+
"",
|
|
26
|
+
`Sitemap: ${canonicalBase}/sitemap.xml`,
|
|
27
|
+
""
|
|
28
|
+
].join("\n");
|
|
29
|
+
}
|
|
30
|
+
function robotsResponse(seo, init) {
|
|
31
|
+
return textFileResponse(
|
|
32
|
+
robotsBody({ canonicalBase: seo.canonicalBase, sandbox: seo.sandbox }),
|
|
33
|
+
ROBOTS_CACHE_CONTROL,
|
|
34
|
+
init
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
function adsTxtResponse(seo, init) {
|
|
38
|
+
return optionalTextFileResponse(seo.adsTxt, ADS_TXT_CACHE_CONTROL, init);
|
|
39
|
+
}
|
|
40
|
+
function indexNowResponse(seo, init) {
|
|
41
|
+
return optionalTextFileResponse(
|
|
42
|
+
seo.indexNowKey,
|
|
43
|
+
INDEXNOW_CACHE_CONTROL,
|
|
44
|
+
init
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
function googleSiteVerificationMeta(token) {
|
|
48
|
+
if (typeof token !== "string") return null;
|
|
49
|
+
const content = token.trim();
|
|
50
|
+
if (!content) return null;
|
|
51
|
+
return { name: "google-site-verification", content };
|
|
52
|
+
}
|
|
53
|
+
function isHead(init) {
|
|
54
|
+
return init?.method?.toUpperCase() === "HEAD";
|
|
55
|
+
}
|
|
56
|
+
function textFileResponse(body, cacheControl, init) {
|
|
57
|
+
return new Response(isHead(init) ? null : body, {
|
|
58
|
+
status: 200,
|
|
59
|
+
headers: {
|
|
60
|
+
"Content-Type": SEO_FILE_CONTENT_TYPE,
|
|
61
|
+
"Cache-Control": cacheControl
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function optionalTextFileResponse(value, cacheControl, init) {
|
|
66
|
+
if (value == null || value === "") {
|
|
67
|
+
return new Response(null, { status: 404 });
|
|
68
|
+
}
|
|
69
|
+
return textFileResponse(value, cacheControl, init);
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
ADS_TXT_CACHE_CONTROL,
|
|
73
|
+
INDEXNOW_CACHE_CONTROL,
|
|
74
|
+
ROBOTS_CACHE_CONTROL,
|
|
75
|
+
SEO_FILE_CONTENT_TYPE,
|
|
76
|
+
adsTxtResponse,
|
|
77
|
+
googleSiteVerificationMeta,
|
|
78
|
+
indexNowResponse,
|
|
79
|
+
robotsBody,
|
|
80
|
+
robotsResponse
|
|
81
|
+
};
|
package/dist/seo.d.mts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-
|
|
2
|
-
import { e as JsonLdObject } from './breadcrumbs-
|
|
3
|
-
export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-
|
|
4
|
-
import './_spec-
|
|
5
|
-
import './board-
|
|
6
|
-
import './jobs-
|
|
1
|
+
import { P as PublicBlogPostSummary, B as BlogAuthorEmbed } from './blog-BmqWfLZi.mjs';
|
|
2
|
+
import { e as JsonLdObject } from './breadcrumbs-BVQL2dNY.mjs';
|
|
3
|
+
export { A as ALL_COUNTRY_CODES, B as BreadcrumbItemInput, g as FaqItem, J as JobBreadcrumb, h as JsonLdBoard, N as NumberNotation, i as SENIORITY_ORDER, j as SalaryFaqEntry, k as SalaryJsonLdOptions, l as SalaryOccupationListOptions, b as buildJobBreadcrumbs, m as buildSalaryFaq, o as companyCategorySalaryJsonLd, p as companySalaryJsonLd, q as createBreadcrumbJsonLd, r as createJobPostingJsonLd, s as crossAxisSalaryJsonLd, t as faqJsonLd, c as formatSalaryStat, d as formatSalaryStatRange, u as itemListJsonLd, v as locationSalaryJsonLd, n as normalizeWebsiteUrl, w as skillSalaryJsonLd, x as sortBySeniority, y as titleSalaryJsonLd } from './breadcrumbs-BVQL2dNY.mjs';
|
|
4
|
+
import './_spec-B9Ah8dNs.mjs';
|
|
5
|
+
import './board-B4jLqmxn.mjs';
|
|
6
|
+
import './jobs-B7q3BgIK.mjs';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Blog structured data on the `@cavuno/board` wire types, transcribed from
|