@cavuno/board 1.27.0 → 1.28.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/dist/index.d.mts CHANGED
@@ -13,7 +13,7 @@ interface CustomStorage {
13
13
  setItem(key: string, value: string): Awaitable<void>;
14
14
  removeItem(key: string): Awaitable<void>;
15
15
  }
16
- type StorageMode = 'memory' | 'nostore' | CustomStorage;
16
+ type StorageMode = 'memory' | 'nostore' | 'local' | 'session' | CustomStorage;
17
17
  declare const ACCESS_TOKEN_KEY = "cavuno_board_access_token";
18
18
  declare const REFRESH_TOKEN_KEY = "cavuno_board_refresh_token";
19
19
  /** Board-password access grant — sent as `X-Board-Access` to pass the wall. */
@@ -119,6 +119,14 @@ declare class BoardApiError extends Error {
119
119
  raw: unknown;
120
120
  });
121
121
  }
122
+ /**
123
+ * Structural, not `instanceof`: the helper subpaths (`/server`, …) and the
124
+ * core entry build as separate bundles, so class identity differs across
125
+ * entries — `instanceof` would silently return false for a real
126
+ * `BoardApiError` thrown by the core client. The constructor pins
127
+ * `name = 'BoardApiError'`, making the name check a stable brand for every
128
+ * guard built on this one.
129
+ */
122
130
  declare function isBoardApiError(e: unknown): e is BoardApiError;
123
131
  declare function isNotFound(e: unknown): e is BoardApiError;
124
132
  declare function isUnauthorized(e: unknown): e is BoardApiError;
@@ -195,130 +203,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
195
203
  * constant because the package is platform-neutral and cannot read
196
204
  * package.json at runtime.
197
205
  */
198
- declare const SDK_VERSION = "1.27.0";
199
-
200
- type BoardUser = Schemas['BoardUser'];
201
- type BoardAuthSession = Schemas['BoardAuthSession'];
202
- type RegisterBody = Schemas['BoardAuthRegisterBody'];
203
- type LoginBody = Schemas['BoardAuthLoginBody'];
204
- type RefreshBody = Schemas['BoardAuthRefreshBody'];
205
- type LogoutBody = Schemas['BoardAuthLogoutBody'];
206
- type VerifyEmailBody = Schemas['BoardAuthVerifyEmailBody'];
207
- type ForgotPasswordBody = Schemas['BoardAuthForgotPasswordBody'];
208
- type ResetPasswordBody = Schemas['BoardAuthResetPasswordBody'];
209
- type RequestMagicLinkBody = Schemas['BoardAuthRequestMagicLinkBody'];
210
- type ConsumeMagicLinkBody = Schemas['BoardAuthConsumeMagicLinkBody'];
211
- type OAuthProvider = 'google' | 'linkedin';
212
- type OAuthAuthorizationQuery = {
213
- returnTo?: string;
214
- };
215
- type OAuthAuthorizationUrl = Schemas['BoardAuthOAuthAuthorizationUrl'];
216
- type OAuthExchangeBody = Schemas['BoardAuthOAuthExchangeBody'];
217
-
218
- /**
219
- * The public SEO-infra payload (`board.seo()`) — the values a headless
220
- * frontend rebuilds `robots.txt` / `ads.txt` / `indexnow-key.txt` (+ the
221
- * Google site-verification `<meta>` + favicons/web-manifest) from,
222
- * byte-identically to the hosted board.
223
- */
224
- type BoardSeo = Schemas['BoardSeo'];
225
-
226
- type EmbedJobsQuery = {
227
- /** Free-text search query, up to 200 characters. */
228
- q?: string;
229
- cursor?: string;
230
- /** Default 8; values above the embed ceiling of 50 are clamped to 50. */
231
- limit?: number;
232
- /** Storefront page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
233
- offset?: number;
234
- /** Repeated param (up to 10) — OR-matched. Repeat `companyId` per value. */
235
- companyId?: string[];
236
- remoteOption?: RemoteOption[];
237
- employmentType?: EmploymentType[];
238
- seniority?: Seniority[];
239
- /** Place slug for a geo radius search; unresolvable slugs are ignored. */
240
- location?: string;
241
- /** Radius in km around `location` (10–250; default 50). */
242
- radius?: number;
243
- };
244
-
245
- /**
246
- * The board-access grant returned by `password.verify()`. Send `token` as
247
- * the `X-Board-Access` header on content reads to pass a board's password
248
- * wall (the SDK does this automatically once the grant is stored).
249
- */
250
- type BoardAccessGrant = Schemas['BoardAccessGrant'];
251
-
252
- /**
253
- * The result of resolving a path against the board's configured redirects
254
- * (`board.redirects.resolve()`). A headless frontend 308s to `target`, or
255
- * 404s when it's `null`.
256
- */
257
- type RedirectResolution = Schemas['RedirectResolution'];
258
-
259
- /**
260
- * A board legal/about page (ADR-0039 transitional portable-prose field). The
261
- * API serves owner-authored prose as portable HTML; the starter authors the
262
- * layout + JSON-LD. Impressum additionally carries structured legal-entity
263
- * facts and is gated by the board's `impressumEnabled` flag (404 when off).
264
- */
265
- type LegalPageType = 'terms-of-service' | 'privacy-policy' | 'cookie-policy' | 'about' | 'impressum';
266
- type PublicLegalPage = Schemas['LegalPage'];
267
- type LegalEntity = NonNullable<PublicLegalPage['legalEntity']>;
268
-
269
- /**
270
- * A candidate's public profile — header (name, headline, location, bio, avatar,
271
- * job-search status) plus their experiences, education, skills, and languages.
272
- * Only `public` profiles are returned; `jobSearchStatus` is `null` when the
273
- * candidate scoped it to employers only.
274
- */
275
- type TalentProfile = Schemas['TalentProfile'];
276
- /** A candidate card in the public talent directory. */
277
- type TalentDirectoryEntry = Schemas['TalentDirectoryEntry'];
278
- type TalentDirectoryQuery = {
279
- cursor?: string;
280
- /** Free-text search (name / headline / skills). */
281
- q?: string;
282
- /** Filter to candidates listing a given skill. */
283
- skill?: string;
284
- /** 1–100, default 20. */
285
- limit?: number;
286
- };
287
- type TalentDirectoryListEnvelope = ListEnvelope<TalentDirectoryEntry>;
288
-
289
- /**
290
- * A board plan (employer pricing). `purpose` is `job_posting` or
291
- * `talent_access`; talent-access plans carry a `talent` allowance block.
292
- */
293
- type Plan = Schemas['Plan'];
294
- /** A sales-led ("contact us") plan — a custom CTA tier with no programmatic price. */
295
- type SalesLedPlan = Schemas['SalesLedPlan'];
296
- type PlansListQuery = {
297
- /** Filter to a single purpose. Omit to return all public plans. */
298
- purpose?: 'job_posting' | 'talent_access';
299
- };
300
- type PlanListEnvelope = ListEnvelope<Plan>;
301
- type SalesLedPlanListEnvelope = ListEnvelope<SalesLedPlan>;
302
-
303
- /** An enabled candidate-access paywall offer tier (public). */
304
- type PaywallOffer = Schemas['PaywallOffer'];
305
- /**
306
- * The connected-account embedded-checkout mount kit returned by
307
- * `board.me.access.checkout`. Mount with `loadStripe(publishableKey, {
308
- * stripeAccount: stripeAccountId })` then `initEmbeddedCheckout({ clientSecret })`.
309
- */
310
- type AccessCheckoutSession = Schemas['AccessCheckoutSession'];
311
- /** The polled state of a checkout session (`board.me.access.retrieveCheckout`). */
312
- type AccessCheckoutSessionState = Schemas['AccessCheckoutSessionState'];
313
- /** The viewer's candidate-access entitlement (`board.me.access.grant`). */
314
- type AccessGrant = Schemas['AccessGrant'];
315
- /** A minted Stripe billing-portal session (`board.me.access.portal`). */
316
- type AccessPortalSession = Schemas['AccessPortalSession'];
317
- /** Body for `board.me.access.checkout`. */
318
- type AccessCheckoutBody = Schemas['AccessCheckoutBody'];
319
- /** Body for `board.me.access.portal`. */
320
- type AccessPortalBody = Schemas['AccessPortalBody'];
321
- type PaywallOfferListEnvelope = ListEnvelope<PaywallOffer>;
206
+ declare const SDK_VERSION = "1.28.0";
322
207
 
323
208
  type SavedJob = Schemas['SavedJob'];
324
209
  type SavedJobsListQuery = {
@@ -477,6 +362,149 @@ type EmployerBillingOption = Schemas['EmployerBillingOption'];
477
362
  type EmployerCheckout = Schemas['EmployerCheckout'];
478
363
  type EmployerCheckoutBody = Schemas['EmployerCheckoutBody'];
479
364
 
365
+ /**
366
+ * Pure derivations for a message thread (ADR-0057 decision 5) — kept out of
367
+ * components so the fiddly bits (own-vs-counterparty, the cold-message rule,
368
+ * the seen target) are unit-testable without a DOM. A message is "own" when
369
+ * its author is not the counterparty (works even before the counterparty has
370
+ * ever replied).
371
+ */
372
+
373
+ declare function isOwnMessage(message: Message, counterpartyId: string): boolean;
374
+ /**
375
+ * The cold-message rule (client-side mirror of the server gate): the viewer
376
+ * has sent at least one message and the counterparty has not replied yet.
377
+ * Once the counterparty sends anything, the cap lifts. The server enforces
378
+ * the rule authoritatively (`messaging_cold_rule` 403); this mirror exists
379
+ * so the composer can disable itself instead of surfacing the error.
380
+ */
381
+ declare function isColdRule(messages: Message[], counterpartyId: string): boolean;
382
+ /** The id of the viewer's most recent message (the only one that shows "Seen"). */
383
+ declare function lastOwnMessageId(messages: Message[], counterpartyId: string): string | null;
384
+
385
+ type BoardUser = Schemas['BoardUser'];
386
+ type BoardAuthSession = Schemas['BoardAuthSession'];
387
+ type RegisterBody = Schemas['BoardAuthRegisterBody'];
388
+ type LoginBody = Schemas['BoardAuthLoginBody'];
389
+ type RefreshBody = Schemas['BoardAuthRefreshBody'];
390
+ type LogoutBody = Schemas['BoardAuthLogoutBody'];
391
+ type VerifyEmailBody = Schemas['BoardAuthVerifyEmailBody'];
392
+ type ForgotPasswordBody = Schemas['BoardAuthForgotPasswordBody'];
393
+ type ResetPasswordBody = Schemas['BoardAuthResetPasswordBody'];
394
+ type RequestMagicLinkBody = Schemas['BoardAuthRequestMagicLinkBody'];
395
+ type ConsumeMagicLinkBody = Schemas['BoardAuthConsumeMagicLinkBody'];
396
+ type OAuthProvider = 'google' | 'linkedin';
397
+ type OAuthAuthorizationQuery = {
398
+ returnTo?: string;
399
+ };
400
+ type OAuthAuthorizationUrl = Schemas['BoardAuthOAuthAuthorizationUrl'];
401
+ type OAuthExchangeBody = Schemas['BoardAuthOAuthExchangeBody'];
402
+
403
+ /**
404
+ * The public SEO-infra payload (`board.seo()`) — the values a headless
405
+ * frontend rebuilds `robots.txt` / `ads.txt` / `indexnow-key.txt` (+ the
406
+ * Google site-verification `<meta>` + favicons/web-manifest) from,
407
+ * byte-identically to the hosted board.
408
+ */
409
+ type BoardSeo = Schemas['BoardSeo'];
410
+
411
+ type EmbedJobsQuery = {
412
+ /** Free-text search query, up to 200 characters. */
413
+ q?: string;
414
+ cursor?: string;
415
+ /** Default 8; values above the embed ceiling of 50 are clamped to 50. */
416
+ limit?: number;
417
+ /** Storefront page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
418
+ offset?: number;
419
+ /** Repeated param (up to 10) — OR-matched. Repeat `companyId` per value. */
420
+ companyId?: string[];
421
+ remoteOption?: RemoteOption[];
422
+ employmentType?: EmploymentType[];
423
+ seniority?: Seniority[];
424
+ /** Place slug for a geo radius search; unresolvable slugs are ignored. */
425
+ location?: string;
426
+ /** Radius in km around `location` (10–250; default 50). */
427
+ radius?: number;
428
+ };
429
+
430
+ /**
431
+ * The board-access grant returned by `password.verify()`. Send `token` as
432
+ * the `X-Board-Access` header on content reads to pass a board's password
433
+ * wall (the SDK does this automatically once the grant is stored).
434
+ */
435
+ type BoardAccessGrant = Schemas['BoardAccessGrant'];
436
+
437
+ /**
438
+ * The result of resolving a path against the board's configured redirects
439
+ * (`board.redirects.resolve()`). A headless frontend 308s to `target`, or
440
+ * 404s when it's `null`.
441
+ */
442
+ type RedirectResolution = Schemas['RedirectResolution'];
443
+
444
+ /**
445
+ * A board legal/about page (ADR-0039 transitional portable-prose field). The
446
+ * API serves owner-authored prose as portable HTML; the starter authors the
447
+ * layout + JSON-LD. Impressum additionally carries structured legal-entity
448
+ * facts and is gated by the board's `impressumEnabled` flag (404 when off).
449
+ */
450
+ type LegalPageType = 'terms-of-service' | 'privacy-policy' | 'cookie-policy' | 'about' | 'impressum';
451
+ type PublicLegalPage = Schemas['LegalPage'];
452
+ type LegalEntity = NonNullable<PublicLegalPage['legalEntity']>;
453
+
454
+ /**
455
+ * A candidate's public profile — header (name, headline, location, bio, avatar,
456
+ * job-search status) plus their experiences, education, skills, and languages.
457
+ * Only `public` profiles are returned; `jobSearchStatus` is `null` when the
458
+ * candidate scoped it to employers only.
459
+ */
460
+ type TalentProfile = Schemas['TalentProfile'];
461
+ /** A candidate card in the public talent directory. */
462
+ type TalentDirectoryEntry = Schemas['TalentDirectoryEntry'];
463
+ type TalentDirectoryQuery = {
464
+ cursor?: string;
465
+ /** Free-text search (name / headline / skills). */
466
+ q?: string;
467
+ /** Filter to candidates listing a given skill. */
468
+ skill?: string;
469
+ /** 1–100, default 20. */
470
+ limit?: number;
471
+ };
472
+ type TalentDirectoryListEnvelope = ListEnvelope<TalentDirectoryEntry>;
473
+
474
+ /**
475
+ * A board plan (employer pricing). `purpose` is `job_posting` or
476
+ * `talent_access`; talent-access plans carry a `talent` allowance block.
477
+ */
478
+ type Plan = Schemas['Plan'];
479
+ /** A sales-led ("contact us") plan — a custom CTA tier with no programmatic price. */
480
+ type SalesLedPlan = Schemas['SalesLedPlan'];
481
+ type PlansListQuery = {
482
+ /** Filter to a single purpose. Omit to return all public plans. */
483
+ purpose?: 'job_posting' | 'talent_access';
484
+ };
485
+ type PlanListEnvelope = ListEnvelope<Plan>;
486
+ type SalesLedPlanListEnvelope = ListEnvelope<SalesLedPlan>;
487
+
488
+ /** An enabled candidate-access paywall offer tier (public). */
489
+ type PaywallOffer = Schemas['PaywallOffer'];
490
+ /**
491
+ * The connected-account embedded-checkout mount kit returned by
492
+ * `board.me.access.checkout`. Mount with `loadStripe(publishableKey, {
493
+ * stripeAccount: stripeAccountId })` then `initEmbeddedCheckout({ clientSecret })`.
494
+ */
495
+ type AccessCheckoutSession = Schemas['AccessCheckoutSession'];
496
+ /** The polled state of a checkout session (`board.me.access.retrieveCheckout`). */
497
+ type AccessCheckoutSessionState = Schemas['AccessCheckoutSessionState'];
498
+ /** The viewer's candidate-access entitlement (`board.me.access.grant`). */
499
+ type AccessGrant = Schemas['AccessGrant'];
500
+ /** A minted Stripe billing-portal session (`board.me.access.portal`). */
501
+ type AccessPortalSession = Schemas['AccessPortalSession'];
502
+ /** Body for `board.me.access.checkout`. */
503
+ type AccessCheckoutBody = Schemas['AccessCheckoutBody'];
504
+ /** Body for `board.me.access.portal`. */
505
+ type AccessPortalBody = Schemas['AccessPortalBody'];
506
+ type PaywallOfferListEnvelope = ListEnvelope<PaywallOffer>;
507
+
480
508
  type JobAlertFrequency = 'daily' | 'weekly';
481
509
  type JobAlertRemoteOption = 'on_site' | 'hybrid' | 'remote';
482
510
  /**
@@ -2864,4 +2892,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2864
2892
  };
2865
2893
  type BoardSdk = ReturnType<typeof createBoardClient>;
2866
2894
 
2867
- export { ACCESS_TOKEN_KEY, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyBody, type Awaitable, BOARD_ACCESS_GRANT_KEY, BOARD_API_ERROR_CODES, type Block, type BlockStatus, type BlockUserBody, type BlockedUser, BlogPostsListQuery, BlogSearchBody, BlogSimilarQuery, type BoardAccessGrant, BoardApiError, type BoardApiErrorCode, type BoardAuthSession, BoardClient, type BoardRequest, type BoardSdk, type BoardSeo, 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 CompanyMembership, CompanySimilarQuery, type ConfirmWorkEmailBody, type ConsumeMagicLinkBody, type Conversation, type ConversationArchive, type ConversationDetail, type ConversationRef, type ConversationsListQuery, type CreateBoardClientOptions, type CreateCompanyBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type CustomStorage, type EditMessageBody, type EmbedJobsQuery, type EmployerApplicant, type EmployerBillingOption, type EmployerCheckout, type EmployerCheckoutBody, type EmployerCompany, type EmployerCompanySearchQuery, type EmployerJob, type EmployerJobSummary, type EmployerJobsListQuery, type EmployerPipeline, type EmployerPipelineQuery, type EmployerPipelineStage, EmploymentType, type 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 JobPostingBillingCheck, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, type JobPostingSubscriptionEntitlements, JobsListQuery, JobsSearchBody, JobsSimilarQuery, type LegalEntity, type LegalPageType, ListEnvelope, type Logger, type LoginBody, type LogoutBody, 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 PublicLegalPage, type PublicPlace, REFRESH_TOKEN_KEY, type ReadReceipt, type RedirectResolution, type RefreshBody, type RegisterBody, RemoteOption, type ReorderPipelineStagesBody, type ReplyBody, type ReportBody, type RequestMagicLinkBody, type ResetPasswordBody, type Resume, type ResumeUploadOptions, SDK_VERSION, SalaryDetailQuery, type SalesLedPlan, type SalesLedPlanListEnvelope, type SaveJobBody, type SavedJob, type SavedJobsListQuery, SearchEnvelope, type SendWorkEmailBody, Seniority, type StartAboutApplicationBody, type StartConversationBody, type StorageMode, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TaxonomyGeo, type TaxonomyResolution, type ThreadMessagesQuery, type UnreadCount, type UnsubscribeBody, type UpdateApplicationFactsBody, type UpdateCandidateProfileBody, type UpdateEducationBody, type UpdateEmployerCompanyBody, type UpdateEmployerJobBody, type UpdateExperienceBody, type UpdateLanguagesBody, type UpdateNotificationPreferenceBody, type UpdatePipelineStageBody, type UpdateSkillsBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isConflict, isForbidden, isNotFound, isRateLimited, isUnauthorized, isValidationError, paginate };
2895
+ export { ACCESS_TOKEN_KEY, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyBody, type Awaitable, BOARD_ACCESS_GRANT_KEY, BOARD_API_ERROR_CODES, type Block, type BlockStatus, type BlockUserBody, type BlockedUser, BlogPostsListQuery, BlogSearchBody, BlogSimilarQuery, type BoardAccessGrant, BoardApiError, type BoardApiErrorCode, type BoardAuthSession, BoardClient, type BoardRequest, type BoardSdk, type BoardSeo, 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 CompanyMembership, CompanySimilarQuery, type ConfirmWorkEmailBody, type ConsumeMagicLinkBody, type Conversation, type ConversationArchive, type ConversationDetail, type ConversationRef, type ConversationsListQuery, type CreateBoardClientOptions, type CreateCompanyBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type CustomStorage, type EditMessageBody, type EmbedJobsQuery, type EmployerApplicant, type EmployerBillingOption, type EmployerCheckout, type EmployerCheckoutBody, type EmployerCompany, type EmployerCompanySearchQuery, type EmployerJob, type EmployerJobSummary, type EmployerJobsListQuery, type EmployerPipeline, type EmployerPipelineQuery, type EmployerPipelineStage, EmploymentType, type 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 JobPostingBillingCheck, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, type JobPostingSubscriptionEntitlements, JobsListQuery, JobsSearchBody, JobsSimilarQuery, type LegalEntity, type LegalPageType, ListEnvelope, type Logger, type LoginBody, type LogoutBody, 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 PublicLegalPage, type PublicPlace, REFRESH_TOKEN_KEY, type ReadReceipt, type RedirectResolution, type RefreshBody, type RegisterBody, RemoteOption, type ReorderPipelineStagesBody, type ReplyBody, type ReportBody, type RequestMagicLinkBody, type ResetPasswordBody, type Resume, type ResumeUploadOptions, SDK_VERSION, SalaryDetailQuery, type SalesLedPlan, type SalesLedPlanListEnvelope, type SaveJobBody, type SavedJob, type SavedJobsListQuery, SearchEnvelope, type SendWorkEmailBody, Seniority, type StartAboutApplicationBody, type StartConversationBody, type StorageMode, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TaxonomyGeo, type TaxonomyResolution, type ThreadMessagesQuery, type UnreadCount, type UnsubscribeBody, type UpdateApplicationFactsBody, type UpdateCandidateProfileBody, type UpdateEducationBody, type UpdateEmployerCompanyBody, type UpdateEmployerJobBody, type UpdateExperienceBody, type UpdateLanguagesBody, type UpdateNotificationPreferenceBody, type UpdatePipelineStageBody, type UpdateSkillsBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isNotFound, isOwnMessage, isRateLimited, isUnauthorized, isValidationError, lastOwnMessageId, paginate };
package/dist/index.d.ts CHANGED
@@ -13,7 +13,7 @@ interface CustomStorage {
13
13
  setItem(key: string, value: string): Awaitable<void>;
14
14
  removeItem(key: string): Awaitable<void>;
15
15
  }
16
- type StorageMode = 'memory' | 'nostore' | CustomStorage;
16
+ type StorageMode = 'memory' | 'nostore' | 'local' | 'session' | CustomStorage;
17
17
  declare const ACCESS_TOKEN_KEY = "cavuno_board_access_token";
18
18
  declare const REFRESH_TOKEN_KEY = "cavuno_board_refresh_token";
19
19
  /** Board-password access grant — sent as `X-Board-Access` to pass the wall. */
@@ -119,6 +119,14 @@ declare class BoardApiError extends Error {
119
119
  raw: unknown;
120
120
  });
121
121
  }
122
+ /**
123
+ * Structural, not `instanceof`: the helper subpaths (`/server`, …) and the
124
+ * core entry build as separate bundles, so class identity differs across
125
+ * entries — `instanceof` would silently return false for a real
126
+ * `BoardApiError` thrown by the core client. The constructor pins
127
+ * `name = 'BoardApiError'`, making the name check a stable brand for every
128
+ * guard built on this one.
129
+ */
122
130
  declare function isBoardApiError(e: unknown): e is BoardApiError;
123
131
  declare function isNotFound(e: unknown): e is BoardApiError;
124
132
  declare function isUnauthorized(e: unknown): e is BoardApiError;
@@ -195,130 +203,7 @@ declare function paginate<Q extends Record<string, unknown>, P extends PageShape
195
203
  * constant because the package is platform-neutral and cannot read
196
204
  * package.json at runtime.
197
205
  */
198
- declare const SDK_VERSION = "1.27.0";
199
-
200
- type BoardUser = Schemas['BoardUser'];
201
- type BoardAuthSession = Schemas['BoardAuthSession'];
202
- type RegisterBody = Schemas['BoardAuthRegisterBody'];
203
- type LoginBody = Schemas['BoardAuthLoginBody'];
204
- type RefreshBody = Schemas['BoardAuthRefreshBody'];
205
- type LogoutBody = Schemas['BoardAuthLogoutBody'];
206
- type VerifyEmailBody = Schemas['BoardAuthVerifyEmailBody'];
207
- type ForgotPasswordBody = Schemas['BoardAuthForgotPasswordBody'];
208
- type ResetPasswordBody = Schemas['BoardAuthResetPasswordBody'];
209
- type RequestMagicLinkBody = Schemas['BoardAuthRequestMagicLinkBody'];
210
- type ConsumeMagicLinkBody = Schemas['BoardAuthConsumeMagicLinkBody'];
211
- type OAuthProvider = 'google' | 'linkedin';
212
- type OAuthAuthorizationQuery = {
213
- returnTo?: string;
214
- };
215
- type OAuthAuthorizationUrl = Schemas['BoardAuthOAuthAuthorizationUrl'];
216
- type OAuthExchangeBody = Schemas['BoardAuthOAuthExchangeBody'];
217
-
218
- /**
219
- * The public SEO-infra payload (`board.seo()`) — the values a headless
220
- * frontend rebuilds `robots.txt` / `ads.txt` / `indexnow-key.txt` (+ the
221
- * Google site-verification `<meta>` + favicons/web-manifest) from,
222
- * byte-identically to the hosted board.
223
- */
224
- type BoardSeo = Schemas['BoardSeo'];
225
-
226
- type EmbedJobsQuery = {
227
- /** Free-text search query, up to 200 characters. */
228
- q?: string;
229
- cursor?: string;
230
- /** Default 8; values above the embed ceiling of 50 are clamped to 50. */
231
- limit?: number;
232
- /** Storefront page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
233
- offset?: number;
234
- /** Repeated param (up to 10) — OR-matched. Repeat `companyId` per value. */
235
- companyId?: string[];
236
- remoteOption?: RemoteOption[];
237
- employmentType?: EmploymentType[];
238
- seniority?: Seniority[];
239
- /** Place slug for a geo radius search; unresolvable slugs are ignored. */
240
- location?: string;
241
- /** Radius in km around `location` (10–250; default 50). */
242
- radius?: number;
243
- };
244
-
245
- /**
246
- * The board-access grant returned by `password.verify()`. Send `token` as
247
- * the `X-Board-Access` header on content reads to pass a board's password
248
- * wall (the SDK does this automatically once the grant is stored).
249
- */
250
- type BoardAccessGrant = Schemas['BoardAccessGrant'];
251
-
252
- /**
253
- * The result of resolving a path against the board's configured redirects
254
- * (`board.redirects.resolve()`). A headless frontend 308s to `target`, or
255
- * 404s when it's `null`.
256
- */
257
- type RedirectResolution = Schemas['RedirectResolution'];
258
-
259
- /**
260
- * A board legal/about page (ADR-0039 transitional portable-prose field). The
261
- * API serves owner-authored prose as portable HTML; the starter authors the
262
- * layout + JSON-LD. Impressum additionally carries structured legal-entity
263
- * facts and is gated by the board's `impressumEnabled` flag (404 when off).
264
- */
265
- type LegalPageType = 'terms-of-service' | 'privacy-policy' | 'cookie-policy' | 'about' | 'impressum';
266
- type PublicLegalPage = Schemas['LegalPage'];
267
- type LegalEntity = NonNullable<PublicLegalPage['legalEntity']>;
268
-
269
- /**
270
- * A candidate's public profile — header (name, headline, location, bio, avatar,
271
- * job-search status) plus their experiences, education, skills, and languages.
272
- * Only `public` profiles are returned; `jobSearchStatus` is `null` when the
273
- * candidate scoped it to employers only.
274
- */
275
- type TalentProfile = Schemas['TalentProfile'];
276
- /** A candidate card in the public talent directory. */
277
- type TalentDirectoryEntry = Schemas['TalentDirectoryEntry'];
278
- type TalentDirectoryQuery = {
279
- cursor?: string;
280
- /** Free-text search (name / headline / skills). */
281
- q?: string;
282
- /** Filter to candidates listing a given skill. */
283
- skill?: string;
284
- /** 1–100, default 20. */
285
- limit?: number;
286
- };
287
- type TalentDirectoryListEnvelope = ListEnvelope<TalentDirectoryEntry>;
288
-
289
- /**
290
- * A board plan (employer pricing). `purpose` is `job_posting` or
291
- * `talent_access`; talent-access plans carry a `talent` allowance block.
292
- */
293
- type Plan = Schemas['Plan'];
294
- /** A sales-led ("contact us") plan — a custom CTA tier with no programmatic price. */
295
- type SalesLedPlan = Schemas['SalesLedPlan'];
296
- type PlansListQuery = {
297
- /** Filter to a single purpose. Omit to return all public plans. */
298
- purpose?: 'job_posting' | 'talent_access';
299
- };
300
- type PlanListEnvelope = ListEnvelope<Plan>;
301
- type SalesLedPlanListEnvelope = ListEnvelope<SalesLedPlan>;
302
-
303
- /** An enabled candidate-access paywall offer tier (public). */
304
- type PaywallOffer = Schemas['PaywallOffer'];
305
- /**
306
- * The connected-account embedded-checkout mount kit returned by
307
- * `board.me.access.checkout`. Mount with `loadStripe(publishableKey, {
308
- * stripeAccount: stripeAccountId })` then `initEmbeddedCheckout({ clientSecret })`.
309
- */
310
- type AccessCheckoutSession = Schemas['AccessCheckoutSession'];
311
- /** The polled state of a checkout session (`board.me.access.retrieveCheckout`). */
312
- type AccessCheckoutSessionState = Schemas['AccessCheckoutSessionState'];
313
- /** The viewer's candidate-access entitlement (`board.me.access.grant`). */
314
- type AccessGrant = Schemas['AccessGrant'];
315
- /** A minted Stripe billing-portal session (`board.me.access.portal`). */
316
- type AccessPortalSession = Schemas['AccessPortalSession'];
317
- /** Body for `board.me.access.checkout`. */
318
- type AccessCheckoutBody = Schemas['AccessCheckoutBody'];
319
- /** Body for `board.me.access.portal`. */
320
- type AccessPortalBody = Schemas['AccessPortalBody'];
321
- type PaywallOfferListEnvelope = ListEnvelope<PaywallOffer>;
206
+ declare const SDK_VERSION = "1.28.0";
322
207
 
323
208
  type SavedJob = Schemas['SavedJob'];
324
209
  type SavedJobsListQuery = {
@@ -477,6 +362,149 @@ type EmployerBillingOption = Schemas['EmployerBillingOption'];
477
362
  type EmployerCheckout = Schemas['EmployerCheckout'];
478
363
  type EmployerCheckoutBody = Schemas['EmployerCheckoutBody'];
479
364
 
365
+ /**
366
+ * Pure derivations for a message thread (ADR-0057 decision 5) — kept out of
367
+ * components so the fiddly bits (own-vs-counterparty, the cold-message rule,
368
+ * the seen target) are unit-testable without a DOM. A message is "own" when
369
+ * its author is not the counterparty (works even before the counterparty has
370
+ * ever replied).
371
+ */
372
+
373
+ declare function isOwnMessage(message: Message, counterpartyId: string): boolean;
374
+ /**
375
+ * The cold-message rule (client-side mirror of the server gate): the viewer
376
+ * has sent at least one message and the counterparty has not replied yet.
377
+ * Once the counterparty sends anything, the cap lifts. The server enforces
378
+ * the rule authoritatively (`messaging_cold_rule` 403); this mirror exists
379
+ * so the composer can disable itself instead of surfacing the error.
380
+ */
381
+ declare function isColdRule(messages: Message[], counterpartyId: string): boolean;
382
+ /** The id of the viewer's most recent message (the only one that shows "Seen"). */
383
+ declare function lastOwnMessageId(messages: Message[], counterpartyId: string): string | null;
384
+
385
+ type BoardUser = Schemas['BoardUser'];
386
+ type BoardAuthSession = Schemas['BoardAuthSession'];
387
+ type RegisterBody = Schemas['BoardAuthRegisterBody'];
388
+ type LoginBody = Schemas['BoardAuthLoginBody'];
389
+ type RefreshBody = Schemas['BoardAuthRefreshBody'];
390
+ type LogoutBody = Schemas['BoardAuthLogoutBody'];
391
+ type VerifyEmailBody = Schemas['BoardAuthVerifyEmailBody'];
392
+ type ForgotPasswordBody = Schemas['BoardAuthForgotPasswordBody'];
393
+ type ResetPasswordBody = Schemas['BoardAuthResetPasswordBody'];
394
+ type RequestMagicLinkBody = Schemas['BoardAuthRequestMagicLinkBody'];
395
+ type ConsumeMagicLinkBody = Schemas['BoardAuthConsumeMagicLinkBody'];
396
+ type OAuthProvider = 'google' | 'linkedin';
397
+ type OAuthAuthorizationQuery = {
398
+ returnTo?: string;
399
+ };
400
+ type OAuthAuthorizationUrl = Schemas['BoardAuthOAuthAuthorizationUrl'];
401
+ type OAuthExchangeBody = Schemas['BoardAuthOAuthExchangeBody'];
402
+
403
+ /**
404
+ * The public SEO-infra payload (`board.seo()`) — the values a headless
405
+ * frontend rebuilds `robots.txt` / `ads.txt` / `indexnow-key.txt` (+ the
406
+ * Google site-verification `<meta>` + favicons/web-manifest) from,
407
+ * byte-identically to the hosted board.
408
+ */
409
+ type BoardSeo = Schemas['BoardSeo'];
410
+
411
+ type EmbedJobsQuery = {
412
+ /** Free-text search query, up to 200 characters. */
413
+ q?: string;
414
+ cursor?: string;
415
+ /** Default 8; values above the embed ceiling of 50 are clamped to 50. */
416
+ limit?: number;
417
+ /** Storefront page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
418
+ offset?: number;
419
+ /** Repeated param (up to 10) — OR-matched. Repeat `companyId` per value. */
420
+ companyId?: string[];
421
+ remoteOption?: RemoteOption[];
422
+ employmentType?: EmploymentType[];
423
+ seniority?: Seniority[];
424
+ /** Place slug for a geo radius search; unresolvable slugs are ignored. */
425
+ location?: string;
426
+ /** Radius in km around `location` (10–250; default 50). */
427
+ radius?: number;
428
+ };
429
+
430
+ /**
431
+ * The board-access grant returned by `password.verify()`. Send `token` as
432
+ * the `X-Board-Access` header on content reads to pass a board's password
433
+ * wall (the SDK does this automatically once the grant is stored).
434
+ */
435
+ type BoardAccessGrant = Schemas['BoardAccessGrant'];
436
+
437
+ /**
438
+ * The result of resolving a path against the board's configured redirects
439
+ * (`board.redirects.resolve()`). A headless frontend 308s to `target`, or
440
+ * 404s when it's `null`.
441
+ */
442
+ type RedirectResolution = Schemas['RedirectResolution'];
443
+
444
+ /**
445
+ * A board legal/about page (ADR-0039 transitional portable-prose field). The
446
+ * API serves owner-authored prose as portable HTML; the starter authors the
447
+ * layout + JSON-LD. Impressum additionally carries structured legal-entity
448
+ * facts and is gated by the board's `impressumEnabled` flag (404 when off).
449
+ */
450
+ type LegalPageType = 'terms-of-service' | 'privacy-policy' | 'cookie-policy' | 'about' | 'impressum';
451
+ type PublicLegalPage = Schemas['LegalPage'];
452
+ type LegalEntity = NonNullable<PublicLegalPage['legalEntity']>;
453
+
454
+ /**
455
+ * A candidate's public profile — header (name, headline, location, bio, avatar,
456
+ * job-search status) plus their experiences, education, skills, and languages.
457
+ * Only `public` profiles are returned; `jobSearchStatus` is `null` when the
458
+ * candidate scoped it to employers only.
459
+ */
460
+ type TalentProfile = Schemas['TalentProfile'];
461
+ /** A candidate card in the public talent directory. */
462
+ type TalentDirectoryEntry = Schemas['TalentDirectoryEntry'];
463
+ type TalentDirectoryQuery = {
464
+ cursor?: string;
465
+ /** Free-text search (name / headline / skills). */
466
+ q?: string;
467
+ /** Filter to candidates listing a given skill. */
468
+ skill?: string;
469
+ /** 1–100, default 20. */
470
+ limit?: number;
471
+ };
472
+ type TalentDirectoryListEnvelope = ListEnvelope<TalentDirectoryEntry>;
473
+
474
+ /**
475
+ * A board plan (employer pricing). `purpose` is `job_posting` or
476
+ * `talent_access`; talent-access plans carry a `talent` allowance block.
477
+ */
478
+ type Plan = Schemas['Plan'];
479
+ /** A sales-led ("contact us") plan — a custom CTA tier with no programmatic price. */
480
+ type SalesLedPlan = Schemas['SalesLedPlan'];
481
+ type PlansListQuery = {
482
+ /** Filter to a single purpose. Omit to return all public plans. */
483
+ purpose?: 'job_posting' | 'talent_access';
484
+ };
485
+ type PlanListEnvelope = ListEnvelope<Plan>;
486
+ type SalesLedPlanListEnvelope = ListEnvelope<SalesLedPlan>;
487
+
488
+ /** An enabled candidate-access paywall offer tier (public). */
489
+ type PaywallOffer = Schemas['PaywallOffer'];
490
+ /**
491
+ * The connected-account embedded-checkout mount kit returned by
492
+ * `board.me.access.checkout`. Mount with `loadStripe(publishableKey, {
493
+ * stripeAccount: stripeAccountId })` then `initEmbeddedCheckout({ clientSecret })`.
494
+ */
495
+ type AccessCheckoutSession = Schemas['AccessCheckoutSession'];
496
+ /** The polled state of a checkout session (`board.me.access.retrieveCheckout`). */
497
+ type AccessCheckoutSessionState = Schemas['AccessCheckoutSessionState'];
498
+ /** The viewer's candidate-access entitlement (`board.me.access.grant`). */
499
+ type AccessGrant = Schemas['AccessGrant'];
500
+ /** A minted Stripe billing-portal session (`board.me.access.portal`). */
501
+ type AccessPortalSession = Schemas['AccessPortalSession'];
502
+ /** Body for `board.me.access.checkout`. */
503
+ type AccessCheckoutBody = Schemas['AccessCheckoutBody'];
504
+ /** Body for `board.me.access.portal`. */
505
+ type AccessPortalBody = Schemas['AccessPortalBody'];
506
+ type PaywallOfferListEnvelope = ListEnvelope<PaywallOffer>;
507
+
480
508
  type JobAlertFrequency = 'daily' | 'weekly';
481
509
  type JobAlertRemoteOption = 'on_site' | 'hybrid' | 'remote';
482
510
  /**
@@ -2864,4 +2892,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
2864
2892
  };
2865
2893
  type BoardSdk = ReturnType<typeof createBoardClient>;
2866
2894
 
2867
- export { ACCESS_TOKEN_KEY, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyBody, type Awaitable, BOARD_ACCESS_GRANT_KEY, BOARD_API_ERROR_CODES, type Block, type BlockStatus, type BlockUserBody, type BlockedUser, BlogPostsListQuery, BlogSearchBody, BlogSimilarQuery, type BoardAccessGrant, BoardApiError, type BoardApiErrorCode, type BoardAuthSession, BoardClient, type BoardRequest, type BoardSdk, type BoardSeo, 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 CompanyMembership, CompanySimilarQuery, type ConfirmWorkEmailBody, type ConsumeMagicLinkBody, type Conversation, type ConversationArchive, type ConversationDetail, type ConversationRef, type ConversationsListQuery, type CreateBoardClientOptions, type CreateCompanyBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type CustomStorage, type EditMessageBody, type EmbedJobsQuery, type EmployerApplicant, type EmployerBillingOption, type EmployerCheckout, type EmployerCheckoutBody, type EmployerCompany, type EmployerCompanySearchQuery, type EmployerJob, type EmployerJobSummary, type EmployerJobsListQuery, type EmployerPipeline, type EmployerPipelineQuery, type EmployerPipelineStage, EmploymentType, type 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 JobPostingBillingCheck, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, type JobPostingSubscriptionEntitlements, JobsListQuery, JobsSearchBody, JobsSimilarQuery, type LegalEntity, type LegalPageType, ListEnvelope, type Logger, type LoginBody, type LogoutBody, 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 PublicLegalPage, type PublicPlace, REFRESH_TOKEN_KEY, type ReadReceipt, type RedirectResolution, type RefreshBody, type RegisterBody, RemoteOption, type ReorderPipelineStagesBody, type ReplyBody, type ReportBody, type RequestMagicLinkBody, type ResetPasswordBody, type Resume, type ResumeUploadOptions, SDK_VERSION, SalaryDetailQuery, type SalesLedPlan, type SalesLedPlanListEnvelope, type SaveJobBody, type SavedJob, type SavedJobsListQuery, SearchEnvelope, type SendWorkEmailBody, Seniority, type StartAboutApplicationBody, type StartConversationBody, type StorageMode, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TaxonomyGeo, type TaxonomyResolution, type ThreadMessagesQuery, type UnreadCount, type UnsubscribeBody, type UpdateApplicationFactsBody, type UpdateCandidateProfileBody, type UpdateEducationBody, type UpdateEmployerCompanyBody, type UpdateEmployerJobBody, type UpdateExperienceBody, type UpdateLanguagesBody, type UpdateNotificationPreferenceBody, type UpdatePipelineStageBody, type UpdateSkillsBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isConflict, isForbidden, isNotFound, isRateLimited, isUnauthorized, isValidationError, paginate };
2895
+ export { ACCESS_TOKEN_KEY, type AccessCheckoutBody, type AccessCheckoutSession, type AccessCheckoutSessionState, type AccessGrant, type AccessPortalBody, type AccessPortalSession, type AddApplicantNoteBody, type Alert, type AlertBody, type Application, type ApplicationsListQuery, type ApplyBody, type Awaitable, BOARD_ACCESS_GRANT_KEY, BOARD_API_ERROR_CODES, type Block, type BlockStatus, type BlockUserBody, type BlockedUser, BlogPostsListQuery, BlogSearchBody, BlogSimilarQuery, type BoardAccessGrant, BoardApiError, type BoardApiErrorCode, type BoardAuthSession, BoardClient, type BoardRequest, type BoardSdk, type BoardSeo, 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 CompanyMembership, CompanySimilarQuery, type ConfirmWorkEmailBody, type ConsumeMagicLinkBody, type Conversation, type ConversationArchive, type ConversationDetail, type ConversationRef, type ConversationsListQuery, type CreateBoardClientOptions, type CreateCompanyBody, type CreateEducationBody, type CreateEmployerJobBody, type CreateExperienceBody, type CreateJobPostingInput, type CreatePipelineStageBody, type CustomStorage, type EditMessageBody, type EmbedJobsQuery, type EmployerApplicant, type EmployerBillingOption, type EmployerCheckout, type EmployerCheckoutBody, type EmployerCompany, type EmployerCompanySearchQuery, type EmployerJob, type EmployerJobSummary, type EmployerJobsListQuery, type EmployerPipeline, type EmployerPipelineQuery, type EmployerPipelineStage, EmploymentType, type 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 JobPostingBillingCheck, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, type JobPostingSubscriptionEntitlements, JobsListQuery, JobsSearchBody, JobsSimilarQuery, type LegalEntity, type LegalPageType, ListEnvelope, type Logger, type LoginBody, type LogoutBody, 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 PublicLegalPage, type PublicPlace, REFRESH_TOKEN_KEY, type ReadReceipt, type RedirectResolution, type RefreshBody, type RegisterBody, RemoteOption, type ReorderPipelineStagesBody, type ReplyBody, type ReportBody, type RequestMagicLinkBody, type ResetPasswordBody, type Resume, type ResumeUploadOptions, SDK_VERSION, SalaryDetailQuery, type SalesLedPlan, type SalesLedPlanListEnvelope, type SaveJobBody, type SavedJob, type SavedJobsListQuery, SearchEnvelope, type SendWorkEmailBody, Seniority, type StartAboutApplicationBody, type StartConversationBody, type StorageMode, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TaxonomyGeo, type TaxonomyResolution, type ThreadMessagesQuery, type UnreadCount, type UnsubscribeBody, type UpdateApplicationFactsBody, type UpdateCandidateProfileBody, type UpdateEducationBody, type UpdateEmployerCompanyBody, type UpdateEmployerJobBody, type UpdateExperienceBody, type UpdateLanguagesBody, type UpdateNotificationPreferenceBody, type UpdatePipelineStageBody, type UpdateSkillsBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isColdRule, isConflict, isForbidden, isNotFound, isOwnMessage, isRateLimited, isUnauthorized, isValidationError, lastOwnMessageId, paginate };