@cavuno/board 1.13.0 → 1.15.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
@@ -337,6 +337,50 @@ interface components {
337
337
  /** @description Number of currently-published jobs at this company. */
338
338
  publishedJobCount: number;
339
339
  };
340
+ CompanyCategorySalary: {
341
+ /** @enum {string} */
342
+ object: "company_category_salary";
343
+ categorySourceSlug: string;
344
+ categoryCanonicalSlug: string;
345
+ companyName: string;
346
+ companySlug: string;
347
+ companyLogoPath: string | null;
348
+ companyWebsite: string | null;
349
+ categoryName: string;
350
+ overallSalary: {
351
+ avgMin: number;
352
+ avgMax: number;
353
+ jobCount: number;
354
+ } | null;
355
+ bySeniority: {
356
+ seniority: string;
357
+ avgSalaryMin: number;
358
+ avgSalaryMax: number;
359
+ jobCount: number;
360
+ boardAvgMin: number | null;
361
+ boardAvgMax: number | null;
362
+ boardMedianMin: number | null;
363
+ boardMedianMax: number | null;
364
+ boardP25Min: number | null;
365
+ boardP75Min: number | null;
366
+ boardP25Max: number | null;
367
+ boardP75Max: number | null;
368
+ diffPercent: number | null;
369
+ }[];
370
+ competitors: {
371
+ companySlug: string;
372
+ companyName: string;
373
+ logoPath: string | null;
374
+ avgSalaryMin: number;
375
+ avgSalaryMax: number;
376
+ jobCount: number;
377
+ }[];
378
+ boardCategoryAvgMin: number | null;
379
+ boardCategoryAvgMax: number | null;
380
+ boardCategoryP25Min: number | null;
381
+ boardCategoryP75Max: number | null;
382
+ currency: string;
383
+ };
340
384
  CompanyMarket: {
341
385
  /** @enum {string} */
342
386
  object: "company_market";
@@ -379,6 +423,66 @@ interface components {
379
423
  /** @description Markets (sectors) this company operates in, each with its source slug. Empty when the company has no markets. */
380
424
  markets: components["schemas"]["CompanyMarketRef"][];
381
425
  };
426
+ CompanySalary: {
427
+ /** @enum {string} */
428
+ object: "company_salary";
429
+ companyName: string;
430
+ companySlug: string;
431
+ companyLogoPath: string | null;
432
+ companyWebsite: string | null;
433
+ overallSalary: {
434
+ avgMin: number;
435
+ avgMax: number;
436
+ jobCount: number;
437
+ } | null;
438
+ bySeniority: {
439
+ seniority: string;
440
+ avgSalaryMin: number;
441
+ avgSalaryMax: number;
442
+ jobCount: number;
443
+ boardAvgMin: number | null;
444
+ boardAvgMax: number | null;
445
+ boardMedianMin: number | null;
446
+ boardMedianMax: number | null;
447
+ boardP25Min: number | null;
448
+ boardP75Min: number | null;
449
+ boardP25Max: number | null;
450
+ boardP75Max: number | null;
451
+ diffPercent: number | null;
452
+ }[];
453
+ competitors: {
454
+ companySlug: string;
455
+ companyName: string;
456
+ logoPath: string | null;
457
+ avgSalaryMin: number;
458
+ avgSalaryMax: number;
459
+ jobCount: number;
460
+ }[];
461
+ topLocations: {
462
+ locationName: string;
463
+ countryCode: string;
464
+ placeSlug: string;
465
+ avgSalaryMin: number;
466
+ avgSalaryMax: number;
467
+ jobCount: number;
468
+ }[];
469
+ byCategory: {
470
+ categorySlug: string;
471
+ categoryName: string;
472
+ avgSalaryMin: number;
473
+ avgSalaryMax: number;
474
+ jobCount: number;
475
+ }[];
476
+ boardOverallAvgMin: number | null;
477
+ boardOverallAvgMax: number | null;
478
+ boardMedianMin: number | null;
479
+ boardMedianMax: number | null;
480
+ boardP25Min: number | null;
481
+ boardP75Min: number | null;
482
+ boardP25Max: number | null;
483
+ boardP75Max: number | null;
484
+ currency: string;
485
+ };
382
486
  CompanySummary: {
383
487
  /** @description Unique identifier for the object. Use this value as the `{id}` path parameter for the company endpoints (e.g. `GET /v1/companies/{id}`). */
384
488
  id: string;
@@ -930,6 +1034,11 @@ interface components {
930
1034
  /** Format: email */
931
1035
  email: string;
932
1036
  };
1037
+ JobPostingLogo: {
1038
+ /** @enum {string} */
1039
+ object: "job_posting_logo";
1040
+ publicUrl: string;
1041
+ };
933
1042
  JobPostingPlan: {
934
1043
  /** @enum {string} */
935
1044
  object: "job_posting_plan";
@@ -1213,10 +1322,10 @@ interface components {
1213
1322
  * @enum {string}
1214
1323
  */
1215
1324
  object: "media_upload";
1216
- /** @description Signed URL where the file can be downloaded. Always set on the upload response; may be `null` on retrieval if the underlying blob has been deleted. */
1325
+ /** @description URL where the file can be downloaded. Permanent for files served from the assets domain; a signed URL for legacy files. Always set on the upload response; may be `null` on retrieval if the underlying blob has been deleted. */
1217
1326
  url: string | null;
1218
- /** @description Time at which the signed `url` expires. Approximately 15 minutes after the response is issued. ISO 8601 datetime. */
1219
- urlExpiresAt: string;
1327
+ /** @description Time at which the signed `url` expires (ISO 8601 datetime), or `null` when the `url` is permanent and never expires. */
1328
+ urlExpiresAt: string | null;
1220
1329
  /** @description MIME type of the uploaded file. */
1221
1330
  mimeType: string;
1222
1331
  /** @description Size of the uploaded file, in bytes. */
@@ -2746,7 +2855,7 @@ declare function isConflict(e: unknown): e is BoardApiError;
2746
2855
  * constant because the package is platform-neutral and cannot read
2747
2856
  * package.json at runtime.
2748
2857
  */
2749
- declare const SDK_VERSION = "1.13.0";
2858
+ declare const SDK_VERSION = "1.15.0";
2750
2859
 
2751
2860
  type BoardUser = Schemas['BoardUser'];
2752
2861
  type BoardAuthSession = Schemas['BoardAuthSession'];
@@ -2954,6 +3063,11 @@ type CreateJobPostingInput = Schemas['CreateJobPostingBody'];
2954
3063
  * `invoice_sent`. A rejected submission throws a `BoardApiError` instead.
2955
3064
  */
2956
3065
  type JobPostingResult = Schemas['JobPostingResult'];
3066
+ /**
3067
+ * The result of `uploadLogo()` / `fetchLogoByDomain()`: a stored logo whose
3068
+ * `publicUrl` you pass back as `submission.logoUrl` on `create(...)`.
3069
+ */
3070
+ type JobPostingLogoResult = Schemas['JobPostingLogo'];
2957
3071
  type JobPostingBillingCheck = Schemas['JobPostingBillingCheck'];
2958
3072
  type JobPostingBillingVerification = Schemas['JobPostingBillingVerification'];
2959
3073
  type JobPostingBillingOptions = Schemas['JobPostingBillingOptions'];
@@ -3310,6 +3424,109 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3310
3424
  geo: components["schemas"]["TaxonomyGeo"];
3311
3425
  }>;
3312
3426
  };
3427
+ salaries: ((companySlug: string, options?: FetchOptions) => Promise<{
3428
+ object: "company_salary";
3429
+ companyName: string;
3430
+ companySlug: string;
3431
+ companyLogoPath: string | null;
3432
+ companyWebsite: string | null;
3433
+ overallSalary: {
3434
+ avgMin: number;
3435
+ avgMax: number;
3436
+ jobCount: number;
3437
+ } | null;
3438
+ bySeniority: {
3439
+ seniority: string;
3440
+ avgSalaryMin: number;
3441
+ avgSalaryMax: number;
3442
+ jobCount: number;
3443
+ boardAvgMin: number | null;
3444
+ boardAvgMax: number | null;
3445
+ boardMedianMin: number | null;
3446
+ boardMedianMax: number | null;
3447
+ boardP25Min: number | null;
3448
+ boardP75Min: number | null;
3449
+ boardP25Max: number | null;
3450
+ boardP75Max: number | null;
3451
+ diffPercent: number | null;
3452
+ }[];
3453
+ competitors: {
3454
+ companySlug: string;
3455
+ companyName: string;
3456
+ logoPath: string | null;
3457
+ avgSalaryMin: number;
3458
+ avgSalaryMax: number;
3459
+ jobCount: number;
3460
+ }[];
3461
+ topLocations: {
3462
+ locationName: string;
3463
+ countryCode: string;
3464
+ placeSlug: string;
3465
+ avgSalaryMin: number;
3466
+ avgSalaryMax: number;
3467
+ jobCount: number;
3468
+ }[];
3469
+ byCategory: {
3470
+ categorySlug: string;
3471
+ categoryName: string;
3472
+ avgSalaryMin: number;
3473
+ avgSalaryMax: number;
3474
+ jobCount: number;
3475
+ }[];
3476
+ boardOverallAvgMin: number | null;
3477
+ boardOverallAvgMax: number | null;
3478
+ boardMedianMin: number | null;
3479
+ boardMedianMax: number | null;
3480
+ boardP25Min: number | null;
3481
+ boardP75Min: number | null;
3482
+ boardP25Max: number | null;
3483
+ boardP75Max: number | null;
3484
+ currency: string;
3485
+ }>) & {
3486
+ category(companySlug: string, categorySlug: string, query?: SalaryDetailQuery, options?: FetchOptions): Promise<{
3487
+ object: "company_category_salary";
3488
+ categorySourceSlug: string;
3489
+ categoryCanonicalSlug: string;
3490
+ companyName: string;
3491
+ companySlug: string;
3492
+ companyLogoPath: string | null;
3493
+ companyWebsite: string | null;
3494
+ categoryName: string;
3495
+ overallSalary: {
3496
+ avgMin: number;
3497
+ avgMax: number;
3498
+ jobCount: number;
3499
+ } | null;
3500
+ bySeniority: {
3501
+ seniority: string;
3502
+ avgSalaryMin: number;
3503
+ avgSalaryMax: number;
3504
+ jobCount: number;
3505
+ boardAvgMin: number | null;
3506
+ boardAvgMax: number | null;
3507
+ boardMedianMin: number | null;
3508
+ boardMedianMax: number | null;
3509
+ boardP25Min: number | null;
3510
+ boardP75Min: number | null;
3511
+ boardP25Max: number | null;
3512
+ boardP75Max: number | null;
3513
+ diffPercent: number | null;
3514
+ }[];
3515
+ competitors: {
3516
+ companySlug: string;
3517
+ companyName: string;
3518
+ logoPath: string | null;
3519
+ avgSalaryMin: number;
3520
+ avgSalaryMax: number;
3521
+ jobCount: number;
3522
+ }[];
3523
+ boardCategoryAvgMin: number | null;
3524
+ boardCategoryAvgMax: number | null;
3525
+ boardCategoryP25Min: number | null;
3526
+ boardCategoryP75Max: number | null;
3527
+ currency: string;
3528
+ }>;
3529
+ };
3313
3530
  };
3314
3531
  blog: {
3315
3532
  posts: {
@@ -3664,6 +3881,14 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3664
3881
  status: "invoice_sent";
3665
3882
  jobId: string;
3666
3883
  }>;
3884
+ uploadLogo(file: Blob, options?: FetchOptions): Promise<{
3885
+ object: "job_posting_logo";
3886
+ publicUrl: string;
3887
+ }>;
3888
+ fetchLogoByDomain(domain: string, options?: FetchOptions): Promise<{
3889
+ object: "job_posting_logo";
3890
+ publicUrl: string;
3891
+ }>;
3667
3892
  checkBilling(input: {
3668
3893
  email: string;
3669
3894
  }, options?: FetchOptions): Promise<{
@@ -4146,4 +4371,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
4146
4371
  };
4147
4372
  type BoardSdk = ReturnType<typeof createBoardClient>;
4148
4373
 
4149
- export { ACCESS_TOKEN_KEY, type Awaitable, BOARD_ACCESS_GRANT_KEY, type BlogAuthorEmbed, type BlogPostsListQuery, type BlogSearchBody, type BlogSimilarQuery, type BlogTagEmbed, type BoardAccessGrant, BoardApiError, type BoardAuthSession, BoardClient, type BoardRequest, type BoardSdk, type BoardSeo, type BoardUser, type CompaniesListQuery, type CompaniesSearchBody, type CompanyJobsListQuery, type CompanyListEnvelope, type CompanyMarket, type CompanyMarketRef, type CompanyMarketsListQuery, type CompanySimilarQuery, type CreateBoardClientOptions, type CreateJobPostingInput, type CustomStorage, type EducationRequirement, type EmbedJobsQuery, type EmploymentType, type FetchOptions, type ForgotPasswordBody, 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, type JobCardListEnvelope, type JobCardSearchEnvelope, type JobCompany, type JobPostingBillingCheck, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingPlan, type JobPostingResult, type JobPostingSubscriptionEntitlements, type JobsListQuery, type JobsSearchBody, type LegalEntity, type LegalPageType, type ListEnvelope, type LocationSalaryDetail, type LocationSkillsIndex, type LocationTitlesIndex, type Logger, type LoginBody, type LogoutBody, type OfficeLocation, type PlacesListQuery, type PublicBlogAdjacentPosts, type PublicBlogAuthor, type PublicBlogPost, type PublicBlogPostSummary, type PublicBlogTag, type PublicBoard, type PublicBoardAnalytics, type PublicBoardFeatures, type PublicBoardTheme, type PublicCompany, type PublicCompanyDetail, type PublicJob, type PublicJobCard, type PublicLegalPage, type PublicPlace, REFRESH_TOKEN_KEY, type RedirectResolution, type RefreshBody, type RegisterBody, type RelatedSearch, type RemoteOption, type RemotePermit, type RemoteTimezone, type ResetPasswordBody, SDK_VERSION, type SalaryCompany, type SalaryDetailQuery, type SalaryLocation, type SalarySkill, type SalaryTitle, type SaveJobBody, type SavedJob, type SavedJobsListQuery, type SearchEnvelope, type Seniority, type SkillLocationSalary, type SkillLocationsIndex, type SkillSalaryDetail, type StorageMode, type StorefrontPagination, type TaxonomyGeo, type TaxonomyResolution, type TitleLocationSalary, type TitleLocationsIndex, type TitleSalaryDetail, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isConflict, isForbidden, isNotFound, isRateLimited, isUnauthorized, isValidationError };
4374
+ export { ACCESS_TOKEN_KEY, type Awaitable, BOARD_ACCESS_GRANT_KEY, type BlogAuthorEmbed, type BlogPostsListQuery, type BlogSearchBody, type BlogSimilarQuery, type BlogTagEmbed, type BoardAccessGrant, BoardApiError, type BoardAuthSession, BoardClient, type BoardRequest, type BoardSdk, type BoardSeo, type BoardUser, type CompaniesListQuery, type CompaniesSearchBody, type CompanyJobsListQuery, type CompanyListEnvelope, type CompanyMarket, type CompanyMarketRef, type CompanyMarketsListQuery, type CompanySimilarQuery, type CreateBoardClientOptions, type CreateJobPostingInput, type CustomStorage, type EducationRequirement, type EmbedJobsQuery, type EmploymentType, type FetchOptions, type ForgotPasswordBody, 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, type JobCardListEnvelope, type JobCardSearchEnvelope, type JobCompany, type JobPostingBillingCheck, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, type JobPostingSubscriptionEntitlements, type JobsListQuery, type JobsSearchBody, type LegalEntity, type LegalPageType, type ListEnvelope, type LocationSalaryDetail, type LocationSkillsIndex, type LocationTitlesIndex, type Logger, type LoginBody, type LogoutBody, type OfficeLocation, type PlacesListQuery, type PublicBlogAdjacentPosts, type PublicBlogAuthor, type PublicBlogPost, type PublicBlogPostSummary, type PublicBlogTag, type PublicBoard, type PublicBoardAnalytics, type PublicBoardFeatures, type PublicBoardTheme, type PublicCompany, type PublicCompanyDetail, type PublicJob, type PublicJobCard, type PublicLegalPage, type PublicPlace, REFRESH_TOKEN_KEY, type RedirectResolution, type RefreshBody, type RegisterBody, type RelatedSearch, type RemoteOption, type RemotePermit, type RemoteTimezone, type ResetPasswordBody, SDK_VERSION, type SalaryCompany, type SalaryDetailQuery, type SalaryLocation, type SalarySkill, type SalaryTitle, type SaveJobBody, type SavedJob, type SavedJobsListQuery, type SearchEnvelope, type Seniority, type SkillLocationSalary, type SkillLocationsIndex, type SkillSalaryDetail, type StorageMode, type StorefrontPagination, type TaxonomyGeo, type TaxonomyResolution, type TitleLocationSalary, type TitleLocationsIndex, type TitleSalaryDetail, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isConflict, isForbidden, isNotFound, isRateLimited, isUnauthorized, isValidationError };
package/dist/index.d.ts CHANGED
@@ -337,6 +337,50 @@ interface components {
337
337
  /** @description Number of currently-published jobs at this company. */
338
338
  publishedJobCount: number;
339
339
  };
340
+ CompanyCategorySalary: {
341
+ /** @enum {string} */
342
+ object: "company_category_salary";
343
+ categorySourceSlug: string;
344
+ categoryCanonicalSlug: string;
345
+ companyName: string;
346
+ companySlug: string;
347
+ companyLogoPath: string | null;
348
+ companyWebsite: string | null;
349
+ categoryName: string;
350
+ overallSalary: {
351
+ avgMin: number;
352
+ avgMax: number;
353
+ jobCount: number;
354
+ } | null;
355
+ bySeniority: {
356
+ seniority: string;
357
+ avgSalaryMin: number;
358
+ avgSalaryMax: number;
359
+ jobCount: number;
360
+ boardAvgMin: number | null;
361
+ boardAvgMax: number | null;
362
+ boardMedianMin: number | null;
363
+ boardMedianMax: number | null;
364
+ boardP25Min: number | null;
365
+ boardP75Min: number | null;
366
+ boardP25Max: number | null;
367
+ boardP75Max: number | null;
368
+ diffPercent: number | null;
369
+ }[];
370
+ competitors: {
371
+ companySlug: string;
372
+ companyName: string;
373
+ logoPath: string | null;
374
+ avgSalaryMin: number;
375
+ avgSalaryMax: number;
376
+ jobCount: number;
377
+ }[];
378
+ boardCategoryAvgMin: number | null;
379
+ boardCategoryAvgMax: number | null;
380
+ boardCategoryP25Min: number | null;
381
+ boardCategoryP75Max: number | null;
382
+ currency: string;
383
+ };
340
384
  CompanyMarket: {
341
385
  /** @enum {string} */
342
386
  object: "company_market";
@@ -379,6 +423,66 @@ interface components {
379
423
  /** @description Markets (sectors) this company operates in, each with its source slug. Empty when the company has no markets. */
380
424
  markets: components["schemas"]["CompanyMarketRef"][];
381
425
  };
426
+ CompanySalary: {
427
+ /** @enum {string} */
428
+ object: "company_salary";
429
+ companyName: string;
430
+ companySlug: string;
431
+ companyLogoPath: string | null;
432
+ companyWebsite: string | null;
433
+ overallSalary: {
434
+ avgMin: number;
435
+ avgMax: number;
436
+ jobCount: number;
437
+ } | null;
438
+ bySeniority: {
439
+ seniority: string;
440
+ avgSalaryMin: number;
441
+ avgSalaryMax: number;
442
+ jobCount: number;
443
+ boardAvgMin: number | null;
444
+ boardAvgMax: number | null;
445
+ boardMedianMin: number | null;
446
+ boardMedianMax: number | null;
447
+ boardP25Min: number | null;
448
+ boardP75Min: number | null;
449
+ boardP25Max: number | null;
450
+ boardP75Max: number | null;
451
+ diffPercent: number | null;
452
+ }[];
453
+ competitors: {
454
+ companySlug: string;
455
+ companyName: string;
456
+ logoPath: string | null;
457
+ avgSalaryMin: number;
458
+ avgSalaryMax: number;
459
+ jobCount: number;
460
+ }[];
461
+ topLocations: {
462
+ locationName: string;
463
+ countryCode: string;
464
+ placeSlug: string;
465
+ avgSalaryMin: number;
466
+ avgSalaryMax: number;
467
+ jobCount: number;
468
+ }[];
469
+ byCategory: {
470
+ categorySlug: string;
471
+ categoryName: string;
472
+ avgSalaryMin: number;
473
+ avgSalaryMax: number;
474
+ jobCount: number;
475
+ }[];
476
+ boardOverallAvgMin: number | null;
477
+ boardOverallAvgMax: number | null;
478
+ boardMedianMin: number | null;
479
+ boardMedianMax: number | null;
480
+ boardP25Min: number | null;
481
+ boardP75Min: number | null;
482
+ boardP25Max: number | null;
483
+ boardP75Max: number | null;
484
+ currency: string;
485
+ };
382
486
  CompanySummary: {
383
487
  /** @description Unique identifier for the object. Use this value as the `{id}` path parameter for the company endpoints (e.g. `GET /v1/companies/{id}`). */
384
488
  id: string;
@@ -930,6 +1034,11 @@ interface components {
930
1034
  /** Format: email */
931
1035
  email: string;
932
1036
  };
1037
+ JobPostingLogo: {
1038
+ /** @enum {string} */
1039
+ object: "job_posting_logo";
1040
+ publicUrl: string;
1041
+ };
933
1042
  JobPostingPlan: {
934
1043
  /** @enum {string} */
935
1044
  object: "job_posting_plan";
@@ -1213,10 +1322,10 @@ interface components {
1213
1322
  * @enum {string}
1214
1323
  */
1215
1324
  object: "media_upload";
1216
- /** @description Signed URL where the file can be downloaded. Always set on the upload response; may be `null` on retrieval if the underlying blob has been deleted. */
1325
+ /** @description URL where the file can be downloaded. Permanent for files served from the assets domain; a signed URL for legacy files. Always set on the upload response; may be `null` on retrieval if the underlying blob has been deleted. */
1217
1326
  url: string | null;
1218
- /** @description Time at which the signed `url` expires. Approximately 15 minutes after the response is issued. ISO 8601 datetime. */
1219
- urlExpiresAt: string;
1327
+ /** @description Time at which the signed `url` expires (ISO 8601 datetime), or `null` when the `url` is permanent and never expires. */
1328
+ urlExpiresAt: string | null;
1220
1329
  /** @description MIME type of the uploaded file. */
1221
1330
  mimeType: string;
1222
1331
  /** @description Size of the uploaded file, in bytes. */
@@ -2746,7 +2855,7 @@ declare function isConflict(e: unknown): e is BoardApiError;
2746
2855
  * constant because the package is platform-neutral and cannot read
2747
2856
  * package.json at runtime.
2748
2857
  */
2749
- declare const SDK_VERSION = "1.13.0";
2858
+ declare const SDK_VERSION = "1.15.0";
2750
2859
 
2751
2860
  type BoardUser = Schemas['BoardUser'];
2752
2861
  type BoardAuthSession = Schemas['BoardAuthSession'];
@@ -2954,6 +3063,11 @@ type CreateJobPostingInput = Schemas['CreateJobPostingBody'];
2954
3063
  * `invoice_sent`. A rejected submission throws a `BoardApiError` instead.
2955
3064
  */
2956
3065
  type JobPostingResult = Schemas['JobPostingResult'];
3066
+ /**
3067
+ * The result of `uploadLogo()` / `fetchLogoByDomain()`: a stored logo whose
3068
+ * `publicUrl` you pass back as `submission.logoUrl` on `create(...)`.
3069
+ */
3070
+ type JobPostingLogoResult = Schemas['JobPostingLogo'];
2957
3071
  type JobPostingBillingCheck = Schemas['JobPostingBillingCheck'];
2958
3072
  type JobPostingBillingVerification = Schemas['JobPostingBillingVerification'];
2959
3073
  type JobPostingBillingOptions = Schemas['JobPostingBillingOptions'];
@@ -3310,6 +3424,109 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3310
3424
  geo: components["schemas"]["TaxonomyGeo"];
3311
3425
  }>;
3312
3426
  };
3427
+ salaries: ((companySlug: string, options?: FetchOptions) => Promise<{
3428
+ object: "company_salary";
3429
+ companyName: string;
3430
+ companySlug: string;
3431
+ companyLogoPath: string | null;
3432
+ companyWebsite: string | null;
3433
+ overallSalary: {
3434
+ avgMin: number;
3435
+ avgMax: number;
3436
+ jobCount: number;
3437
+ } | null;
3438
+ bySeniority: {
3439
+ seniority: string;
3440
+ avgSalaryMin: number;
3441
+ avgSalaryMax: number;
3442
+ jobCount: number;
3443
+ boardAvgMin: number | null;
3444
+ boardAvgMax: number | null;
3445
+ boardMedianMin: number | null;
3446
+ boardMedianMax: number | null;
3447
+ boardP25Min: number | null;
3448
+ boardP75Min: number | null;
3449
+ boardP25Max: number | null;
3450
+ boardP75Max: number | null;
3451
+ diffPercent: number | null;
3452
+ }[];
3453
+ competitors: {
3454
+ companySlug: string;
3455
+ companyName: string;
3456
+ logoPath: string | null;
3457
+ avgSalaryMin: number;
3458
+ avgSalaryMax: number;
3459
+ jobCount: number;
3460
+ }[];
3461
+ topLocations: {
3462
+ locationName: string;
3463
+ countryCode: string;
3464
+ placeSlug: string;
3465
+ avgSalaryMin: number;
3466
+ avgSalaryMax: number;
3467
+ jobCount: number;
3468
+ }[];
3469
+ byCategory: {
3470
+ categorySlug: string;
3471
+ categoryName: string;
3472
+ avgSalaryMin: number;
3473
+ avgSalaryMax: number;
3474
+ jobCount: number;
3475
+ }[];
3476
+ boardOverallAvgMin: number | null;
3477
+ boardOverallAvgMax: number | null;
3478
+ boardMedianMin: number | null;
3479
+ boardMedianMax: number | null;
3480
+ boardP25Min: number | null;
3481
+ boardP75Min: number | null;
3482
+ boardP25Max: number | null;
3483
+ boardP75Max: number | null;
3484
+ currency: string;
3485
+ }>) & {
3486
+ category(companySlug: string, categorySlug: string, query?: SalaryDetailQuery, options?: FetchOptions): Promise<{
3487
+ object: "company_category_salary";
3488
+ categorySourceSlug: string;
3489
+ categoryCanonicalSlug: string;
3490
+ companyName: string;
3491
+ companySlug: string;
3492
+ companyLogoPath: string | null;
3493
+ companyWebsite: string | null;
3494
+ categoryName: string;
3495
+ overallSalary: {
3496
+ avgMin: number;
3497
+ avgMax: number;
3498
+ jobCount: number;
3499
+ } | null;
3500
+ bySeniority: {
3501
+ seniority: string;
3502
+ avgSalaryMin: number;
3503
+ avgSalaryMax: number;
3504
+ jobCount: number;
3505
+ boardAvgMin: number | null;
3506
+ boardAvgMax: number | null;
3507
+ boardMedianMin: number | null;
3508
+ boardMedianMax: number | null;
3509
+ boardP25Min: number | null;
3510
+ boardP75Min: number | null;
3511
+ boardP25Max: number | null;
3512
+ boardP75Max: number | null;
3513
+ diffPercent: number | null;
3514
+ }[];
3515
+ competitors: {
3516
+ companySlug: string;
3517
+ companyName: string;
3518
+ logoPath: string | null;
3519
+ avgSalaryMin: number;
3520
+ avgSalaryMax: number;
3521
+ jobCount: number;
3522
+ }[];
3523
+ boardCategoryAvgMin: number | null;
3524
+ boardCategoryAvgMax: number | null;
3525
+ boardCategoryP25Min: number | null;
3526
+ boardCategoryP75Max: number | null;
3527
+ currency: string;
3528
+ }>;
3529
+ };
3313
3530
  };
3314
3531
  blog: {
3315
3532
  posts: {
@@ -3664,6 +3881,14 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3664
3881
  status: "invoice_sent";
3665
3882
  jobId: string;
3666
3883
  }>;
3884
+ uploadLogo(file: Blob, options?: FetchOptions): Promise<{
3885
+ object: "job_posting_logo";
3886
+ publicUrl: string;
3887
+ }>;
3888
+ fetchLogoByDomain(domain: string, options?: FetchOptions): Promise<{
3889
+ object: "job_posting_logo";
3890
+ publicUrl: string;
3891
+ }>;
3667
3892
  checkBilling(input: {
3668
3893
  email: string;
3669
3894
  }, options?: FetchOptions): Promise<{
@@ -4146,4 +4371,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
4146
4371
  };
4147
4372
  type BoardSdk = ReturnType<typeof createBoardClient>;
4148
4373
 
4149
- export { ACCESS_TOKEN_KEY, type Awaitable, BOARD_ACCESS_GRANT_KEY, type BlogAuthorEmbed, type BlogPostsListQuery, type BlogSearchBody, type BlogSimilarQuery, type BlogTagEmbed, type BoardAccessGrant, BoardApiError, type BoardAuthSession, BoardClient, type BoardRequest, type BoardSdk, type BoardSeo, type BoardUser, type CompaniesListQuery, type CompaniesSearchBody, type CompanyJobsListQuery, type CompanyListEnvelope, type CompanyMarket, type CompanyMarketRef, type CompanyMarketsListQuery, type CompanySimilarQuery, type CreateBoardClientOptions, type CreateJobPostingInput, type CustomStorage, type EducationRequirement, type EmbedJobsQuery, type EmploymentType, type FetchOptions, type ForgotPasswordBody, 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, type JobCardListEnvelope, type JobCardSearchEnvelope, type JobCompany, type JobPostingBillingCheck, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingPlan, type JobPostingResult, type JobPostingSubscriptionEntitlements, type JobsListQuery, type JobsSearchBody, type LegalEntity, type LegalPageType, type ListEnvelope, type LocationSalaryDetail, type LocationSkillsIndex, type LocationTitlesIndex, type Logger, type LoginBody, type LogoutBody, type OfficeLocation, type PlacesListQuery, type PublicBlogAdjacentPosts, type PublicBlogAuthor, type PublicBlogPost, type PublicBlogPostSummary, type PublicBlogTag, type PublicBoard, type PublicBoardAnalytics, type PublicBoardFeatures, type PublicBoardTheme, type PublicCompany, type PublicCompanyDetail, type PublicJob, type PublicJobCard, type PublicLegalPage, type PublicPlace, REFRESH_TOKEN_KEY, type RedirectResolution, type RefreshBody, type RegisterBody, type RelatedSearch, type RemoteOption, type RemotePermit, type RemoteTimezone, type ResetPasswordBody, SDK_VERSION, type SalaryCompany, type SalaryDetailQuery, type SalaryLocation, type SalarySkill, type SalaryTitle, type SaveJobBody, type SavedJob, type SavedJobsListQuery, type SearchEnvelope, type Seniority, type SkillLocationSalary, type SkillLocationsIndex, type SkillSalaryDetail, type StorageMode, type StorefrontPagination, type TaxonomyGeo, type TaxonomyResolution, type TitleLocationSalary, type TitleLocationsIndex, type TitleSalaryDetail, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isConflict, isForbidden, isNotFound, isRateLimited, isUnauthorized, isValidationError };
4374
+ export { ACCESS_TOKEN_KEY, type Awaitable, BOARD_ACCESS_GRANT_KEY, type BlogAuthorEmbed, type BlogPostsListQuery, type BlogSearchBody, type BlogSimilarQuery, type BlogTagEmbed, type BoardAccessGrant, BoardApiError, type BoardAuthSession, BoardClient, type BoardRequest, type BoardSdk, type BoardSeo, type BoardUser, type CompaniesListQuery, type CompaniesSearchBody, type CompanyJobsListQuery, type CompanyListEnvelope, type CompanyMarket, type CompanyMarketRef, type CompanyMarketsListQuery, type CompanySimilarQuery, type CreateBoardClientOptions, type CreateJobPostingInput, type CustomStorage, type EducationRequirement, type EmbedJobsQuery, type EmploymentType, type FetchOptions, type ForgotPasswordBody, 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, type JobCardListEnvelope, type JobCardSearchEnvelope, type JobCompany, type JobPostingBillingCheck, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, type JobPostingSubscriptionEntitlements, type JobsListQuery, type JobsSearchBody, type LegalEntity, type LegalPageType, type ListEnvelope, type LocationSalaryDetail, type LocationSkillsIndex, type LocationTitlesIndex, type Logger, type LoginBody, type LogoutBody, type OfficeLocation, type PlacesListQuery, type PublicBlogAdjacentPosts, type PublicBlogAuthor, type PublicBlogPost, type PublicBlogPostSummary, type PublicBlogTag, type PublicBoard, type PublicBoardAnalytics, type PublicBoardFeatures, type PublicBoardTheme, type PublicCompany, type PublicCompanyDetail, type PublicJob, type PublicJobCard, type PublicLegalPage, type PublicPlace, REFRESH_TOKEN_KEY, type RedirectResolution, type RefreshBody, type RegisterBody, type RelatedSearch, type RemoteOption, type RemotePermit, type RemoteTimezone, type ResetPasswordBody, SDK_VERSION, type SalaryCompany, type SalaryDetailQuery, type SalaryLocation, type SalarySkill, type SalaryTitle, type SaveJobBody, type SavedJob, type SavedJobsListQuery, type SearchEnvelope, type Seniority, type SkillLocationSalary, type SkillLocationsIndex, type SkillSalaryDetail, type StorageMode, type StorefrontPagination, type TaxonomyGeo, type TaxonomyResolution, type TitleLocationSalary, type TitleLocationsIndex, type TitleSalaryDetail, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isConflict, isForbidden, isNotFound, isRateLimited, isUnauthorized, isValidationError };
package/dist/index.js CHANGED
@@ -149,7 +149,7 @@ async function clearSession(storage) {
149
149
  }
150
150
 
151
151
  // src/version.ts
152
- var SDK_VERSION = "1.13.0";
152
+ var SDK_VERSION = "1.15.0";
153
153
 
154
154
  // src/client.ts
155
155
  function isRawBody(body) {
@@ -494,6 +494,20 @@ function companiesNamespace(client) {
494
494
  }
495
495
  }
496
496
  );
497
+ const salaries = Object.assign(
498
+ (companySlug, options) => client.fetch(
499
+ `/companies/${encodeURIComponent(companySlug)}/salaries`,
500
+ options
501
+ ),
502
+ {
503
+ category(companySlug, categorySlug, query, options) {
504
+ return client.fetch(
505
+ `/companies/${encodeURIComponent(companySlug)}/salaries/${encodeURIComponent(categorySlug)}`,
506
+ { ...options, query }
507
+ );
508
+ }
509
+ }
510
+ );
497
511
  return {
498
512
  /**
499
513
  * List companies on the board. Pass `marketSlug` to scope to one market.
@@ -559,7 +573,8 @@ function companiesNamespace(client) {
559
573
  { ...options, query }
560
574
  );
561
575
  },
562
- markets
576
+ markets,
577
+ salaries
563
578
  };
564
579
  }
565
580
 
@@ -671,6 +686,30 @@ function jobPostingNamespace(client) {
671
686
  body: input
672
687
  });
673
688
  },
689
+ /**
690
+ * Upload a company logo (JPEG/PNG/WebP/GIF, ≤2 MB). Returns the stored
691
+ * `publicUrl` — pass it back as `submission.logoUrl` on `create(...)`.
692
+ */
693
+ uploadLogo(file, options) {
694
+ const form = new FormData();
695
+ form.append("file", file);
696
+ return client.fetch("/job-postings/logo", {
697
+ ...options,
698
+ method: "POST",
699
+ body: form
700
+ });
701
+ },
702
+ /**
703
+ * Look up a company logo by domain via Brandfetch, store it, and return its
704
+ * `publicUrl` — pass it back as `submission.logoUrl` on `create(...)`. A
705
+ * `BoardApiError` (`job_posting_logo_not_found`) means no usable logo.
706
+ */
707
+ fetchLogoByDomain(domain, options) {
708
+ return client.fetch("/job-postings/logo/fetch", {
709
+ ...options,
710
+ query: { domain }
711
+ });
712
+ },
674
713
  /** Does this email already have billing credit on the board? */
675
714
  checkBilling(input, options) {
676
715
  return client.fetch(
package/dist/index.mjs CHANGED
@@ -109,7 +109,7 @@ async function clearSession(storage) {
109
109
  }
110
110
 
111
111
  // src/version.ts
112
- var SDK_VERSION = "1.13.0";
112
+ var SDK_VERSION = "1.15.0";
113
113
 
114
114
  // src/client.ts
115
115
  function isRawBody(body) {
@@ -454,6 +454,20 @@ function companiesNamespace(client) {
454
454
  }
455
455
  }
456
456
  );
457
+ const salaries = Object.assign(
458
+ (companySlug, options) => client.fetch(
459
+ `/companies/${encodeURIComponent(companySlug)}/salaries`,
460
+ options
461
+ ),
462
+ {
463
+ category(companySlug, categorySlug, query, options) {
464
+ return client.fetch(
465
+ `/companies/${encodeURIComponent(companySlug)}/salaries/${encodeURIComponent(categorySlug)}`,
466
+ { ...options, query }
467
+ );
468
+ }
469
+ }
470
+ );
457
471
  return {
458
472
  /**
459
473
  * List companies on the board. Pass `marketSlug` to scope to one market.
@@ -519,7 +533,8 @@ function companiesNamespace(client) {
519
533
  { ...options, query }
520
534
  );
521
535
  },
522
- markets
536
+ markets,
537
+ salaries
523
538
  };
524
539
  }
525
540
 
@@ -631,6 +646,30 @@ function jobPostingNamespace(client) {
631
646
  body: input
632
647
  });
633
648
  },
649
+ /**
650
+ * Upload a company logo (JPEG/PNG/WebP/GIF, ≤2 MB). Returns the stored
651
+ * `publicUrl` — pass it back as `submission.logoUrl` on `create(...)`.
652
+ */
653
+ uploadLogo(file, options) {
654
+ const form = new FormData();
655
+ form.append("file", file);
656
+ return client.fetch("/job-postings/logo", {
657
+ ...options,
658
+ method: "POST",
659
+ body: form
660
+ });
661
+ },
662
+ /**
663
+ * Look up a company logo by domain via Brandfetch, store it, and return its
664
+ * `publicUrl` — pass it back as `submission.logoUrl` on `create(...)`. A
665
+ * `BoardApiError` (`job_posting_logo_not_found`) means no usable logo.
666
+ */
667
+ fetchLogoByDomain(domain, options) {
668
+ return client.fetch("/job-postings/logo/fetch", {
669
+ ...options,
670
+ query: { domain }
671
+ });
672
+ },
634
673
  /** Does this email already have billing credit on the board? */
635
674
  checkBilling(input, options) {
636
675
  return client.fetch(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cavuno/board",
3
- "version": "1.13.0",
3
+ "version": "1.15.0",
4
4
  "description": "Typed isomorphic client for the Cavuno Board API",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.13.0",
2
+ "version": "1.15.0",
3
3
  "skills": [
4
4
  {
5
5
  "name": "cavuno-board-auth",