@thejob/schema 2.0.0 → 2.0.2

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.js CHANGED
@@ -15,8 +15,34 @@ var CompletenessScoreSchema = (minScore = 50) => object().shape({
15
15
  totalSteps: number().min(0).default(0).label("Total Steps"),
16
16
  completedSteps: number().min(0).default(0).label("Completed Steps")
17
17
  });
18
+ var UserIdAndCreatedAtSchema = object().shape({
19
+ userId: string().required().label("User Id"),
20
+ createdAt: string().required().label("Created At")
21
+ });
18
22
 
19
23
  // src/common/common.constant.ts
24
+ var Common = /* @__PURE__ */ ((Common2) => {
25
+ Common2["Yes"] = "yes";
26
+ Common2["No"] = "no";
27
+ Common2["DateRangeOption"] = "date_range_option";
28
+ Common2["ExperienceLevel"] = "experience_level";
29
+ Common2["Company"] = "company";
30
+ Common2["EmploymentType"] = "employment_type";
31
+ Common2["WorkMode"] = "work_mode";
32
+ Common2["Location"] = "location";
33
+ Common2["CareerLevel"] = "career_level";
34
+ Common2["Category"] = "category";
35
+ Common2["Designation"] = "designation";
36
+ Common2["EducationLevel"] = "education_level";
37
+ Common2["Language"] = "language";
38
+ Common2["Skill"] = "skill";
39
+ return Common2;
40
+ })(Common || {});
41
+ var EMPTY_STRING = "eMpTyStRiNg";
42
+ var SYSTEM_DATE_FORMAT = "YYYY-MM-DD";
43
+ var DISPLAY_DATE_FORMAT = "LL";
44
+ var DISPLAY_DATE_FORMAT_SHORT = "MMMM, YYYY";
45
+ var SITEMAP_FORMAT = "YYYY-MM-DDThh:mm:ssZ";
20
46
  var StudyType = /* @__PURE__ */ ((StudyType2) => {
21
47
  StudyType2["FullTime"] = "full_time";
22
48
  StudyType2["PartTime"] = "part_time";
@@ -198,6 +224,9 @@ var GroupMembershipSchema = object3({
198
224
  updatedAt: number2().optional().label("Updated At")
199
225
  });
200
226
 
227
+ // src/job/job.schema.ts
228
+ import { array as array8, boolean as boolean9, lazy, mixed as mixed3, number as number5, object as object16, string as string13 } from "yup";
229
+
201
230
  // src/location/location.schema.ts
202
231
  import { array as array2, number as number3, object as object4, string as string3 } from "yup";
203
232
  var LocationSchema = object4({
@@ -330,7 +359,7 @@ var SupportedSocialAccounts = Object.values(SocialAccount);
330
359
 
331
360
  // src/social-account/social-account.schema.ts
332
361
  var SocialAccountSchema = object9().shape({
333
- // TODO: Remove isNew it's unused. Backend (user-social-accounts.service.ts) just strips it before saving.
362
+ // TODO: Remove isNew - it's unused. Backend (user-social-accounts.service.ts) just strips it before saving.
334
363
  isNew: boolean6().default(false).optional().label("Is New"),
335
364
  type: string6().oneOf(SupportedSocialAccounts).required().label("Account Type"),
336
365
  url: string6().required().label("URL")
@@ -376,15 +405,302 @@ var PageSchema = object10().shape({
376
405
  followersCount: number4().min(0).optional().label("Followers Count")
377
406
  }).concat(CompanySchema).concat(InstituteSchema).concat(DbDefaultSchema).noUnknown(true).strict(true).required().label("Page Schema");
378
407
 
408
+ // src/skill/skill.schema.ts
409
+ import { array as array6, object as object11, string as string8 } from "yup";
410
+ var SkillSchema = object11({
411
+ name: string8().trim().required().label("Skill Name"),
412
+ logo: object11({
413
+ light: string8().required().label("Light Logo"),
414
+ dark: string8().optional().nullable().label("Dark Logo")
415
+ }).optional().nullable().default(null).label("Logo"),
416
+ tags: array6().of(string8().max(50)).max(20).optional().label("Tags")
417
+ }).concat(DbDefaultSchema).noUnknown().strict().label("Skill");
418
+
419
+ // src/question/question.constant.ts
420
+ var QuestionType = /* @__PURE__ */ ((QuestionType2) => {
421
+ QuestionType2["Input"] = "input";
422
+ QuestionType2["Choice"] = "choice";
423
+ QuestionType2["ReadAndAcknowledge"] = "readAndAcknowledge";
424
+ return QuestionType2;
425
+ })(QuestionType || {});
426
+ var SupportedQuestionTypes = Object.values(QuestionType);
427
+ var AnswerChoiceType = /* @__PURE__ */ ((AnswerChoiceType2) => {
428
+ AnswerChoiceType2["Single"] = "single";
429
+ AnswerChoiceType2["Multiple"] = "multiple";
430
+ return AnswerChoiceType2;
431
+ })(AnswerChoiceType || {});
432
+ var SupportedAnswerChoiceTypes = Object.values(AnswerChoiceType);
433
+
434
+ // src/question/question.schema.ts
435
+ import { boolean as boolean8, object as object12, string as string9 } from "yup";
436
+ var QuestionSchema = object12().shape({
437
+ label: string9().max(50).optional().label("Label"),
438
+ default: boolean8().optional().default(false).label("Default"),
439
+ title: string9().required().max(200).label("Title"),
440
+ type: string9().oneOf(SupportedQuestionTypes).required().label("Type"),
441
+ isOptional: boolean8().optional().label("Mark if the question is optional"),
442
+ readonly: boolean8().optional().label("Readonly"),
443
+ isNew: boolean8().optional().label("Is New")
444
+ });
445
+
446
+ // src/question/input-question.schema.ts
447
+ import { object as object13, string as string10 } from "yup";
448
+ var InputQuestionSchema = QuestionSchema.concat(
449
+ object13().shape({
450
+ type: string10().oneOf(["input" /* Input */]).required().label("Question type"),
451
+ preferredAnswer: string10().max(100).optional().label("Preferred Answer"),
452
+ answers: string10().max(500).when("isOptional", {
453
+ is: (isOptional) => Boolean(isOptional),
454
+ then: (schema) => schema.optional(),
455
+ otherwise: (schema) => schema.required()
456
+ }).label("Answer")
457
+ })
458
+ );
459
+
460
+ // src/question/choice-question.schema.ts
461
+ import { array as array7, mixed as mixed2, object as object14, string as string11 } from "yup";
462
+ var ChoicePreferredAnswerSchema = (label = "Preferred answer") => mixed2().when("answerChoiceType", {
463
+ is: (value) => value === "multiple" /* Multiple */,
464
+ then: () => array7(string11()).test(
465
+ "is-valid-option",
466
+ `${label} must be from the provided options`,
467
+ function(answer) {
468
+ const { options = [] } = this.parent;
469
+ if (answer && answer.length > 0) {
470
+ return answer.every((a) => options.includes(a));
471
+ }
472
+ return true;
473
+ }
474
+ ).optional().label(label),
475
+ otherwise: () => string11().test(
476
+ "is-valid-option",
477
+ `${label} must be from the provided options`,
478
+ function(answer) {
479
+ const { options = [] } = this.parent;
480
+ return !answer || options.includes(answer);
481
+ }
482
+ ).optional().label(label)
483
+ });
484
+ var getChoiceAnswerSchema = (answerChoiceType, isOptional) => {
485
+ if (answerChoiceType === "multiple" /* Multiple */) {
486
+ const multiAnswerSchema = array7(string11().max(500));
487
+ return isOptional ? multiAnswerSchema.optional().default([]) : multiAnswerSchema.min(1, "Select at least one option.").required("Select at least one option.").default([]);
488
+ }
489
+ const singleAnswerSchema = string11().max(500);
490
+ return isOptional ? singleAnswerSchema.optional() : singleAnswerSchema.required("Select an option.");
491
+ };
492
+ var ChoiceQuestionSchema = QuestionSchema.concat(
493
+ object14().shape({
494
+ type: string11().oneOf(["choice" /* Choice */]).required().label("Question type"),
495
+ optionsFrom: string11().oneOf(["skill" /* Skill */, "education_level" /* EducationLevel */, "experience_level" /* ExperienceLevel */]).optional().label("Option field"),
496
+ options: array7(string11().required()).min(1).required().label("Options"),
497
+ answerChoiceType: string11().oneOf(SupportedAnswerChoiceTypes).required().default("single" /* Single */).label("Type"),
498
+ preferredAnswer: ChoicePreferredAnswerSchema("Preferred answer"),
499
+ answers: mixed2().when(
500
+ ["answerChoiceType", "isOptional"],
501
+ ([answerChoiceType, isOptional]) => getChoiceAnswerSchema(answerChoiceType, isOptional)
502
+ )
503
+ })
504
+ );
505
+
506
+ // src/question/read-and-acknowledge.schema.ts
507
+ import { object as object15, string as string12 } from "yup";
508
+ var AcknowledgeAnswerSchema = string12().oneOf(["yes" /* Yes */, "no" /* No */]).required("This question must be acknowledged.");
509
+ var ReadAndAcknowledgeQuestionSchema = QuestionSchema.concat(
510
+ object15().shape({
511
+ type: string12().oneOf(["readAndAcknowledge" /* ReadAndAcknowledge */]).required().label("Question type"),
512
+ description: string12().max(1e4).required().label("Content"),
513
+ preferredAnswer: AcknowledgeAnswerSchema.label("Preferred Answer"),
514
+ answers: AcknowledgeAnswerSchema.label("Answer")
515
+ })
516
+ );
517
+
518
+ // src/question/question.utils.ts
519
+ var getSchemaByQuestion = (type) => {
520
+ switch (type) {
521
+ case "input" /* Input */:
522
+ return InputQuestionSchema;
523
+ case "choice" /* Choice */:
524
+ return ChoiceQuestionSchema;
525
+ case "readAndAcknowledge" /* ReadAndAcknowledge */:
526
+ return ReadAndAcknowledgeQuestionSchema;
527
+ default:
528
+ throw new Error("Unsupported schema: " + type);
529
+ }
530
+ };
531
+
532
+ // src/job/job.constant.ts
533
+ var JobStatus = /* @__PURE__ */ ((JobStatus2) => {
534
+ JobStatus2["Published"] = "published";
535
+ JobStatus2["Draft"] = "draft";
536
+ JobStatus2["Deleted"] = "deleted";
537
+ JobStatus2["Closed"] = "closed";
538
+ JobStatus2["Expired"] = "expired";
539
+ return JobStatus2;
540
+ })(JobStatus || {});
541
+ var SupportedJobStatuses = Object.values(JobStatus);
542
+ var EmploymentType = /* @__PURE__ */ ((EmploymentType2) => {
543
+ EmploymentType2["Fulltime"] = "full_time";
544
+ EmploymentType2["PartTime"] = "part_time";
545
+ EmploymentType2["Temporary"] = "temporary";
546
+ EmploymentType2["Contract"] = "contract";
547
+ EmploymentType2["Internship"] = "internship";
548
+ EmploymentType2["Freelance"] = "freelance";
549
+ EmploymentType2["Volunteer"] = "volunteer";
550
+ EmploymentType2["PerDiem"] = "per_diem";
551
+ return EmploymentType2;
552
+ })(EmploymentType || {});
553
+ var SupportedEmploymentTypes = Object.values(EmploymentType);
554
+ var WorkMode = /* @__PURE__ */ ((WorkMode2) => {
555
+ WorkMode2["OnSite"] = "on_site";
556
+ WorkMode2["Hybrid"] = "hybrid";
557
+ WorkMode2["Remote"] = "remote";
558
+ return WorkMode2;
559
+ })(WorkMode || {});
560
+ var SupportedWorkModes = Object.values(WorkMode);
561
+ var CompensationType = /* @__PURE__ */ ((CompensationType2) => {
562
+ CompensationType2["Hourly"] = "hourly";
563
+ CompensationType2["Weekly"] = "weekly";
564
+ CompensationType2["Monthly"] = "monthly";
565
+ CompensationType2["Yearly"] = "yearly";
566
+ CompensationType2["OneTime"] = "one-time";
567
+ CompensationType2["Other"] = "other";
568
+ return CompensationType2;
569
+ })(CompensationType || {});
570
+ var SupportedCompensationTypes = Object.values(CompensationType);
571
+ var EmployeeCount = /* @__PURE__ */ ((EmployeeCount2) => {
572
+ EmployeeCount2["_1_2"] = "1_2_employees";
573
+ EmployeeCount2["_3_10"] = "3_10_employees";
574
+ EmployeeCount2["_11_100"] = "11_100_employees";
575
+ EmployeeCount2["_101_1000"] = "101_1000_employees";
576
+ EmployeeCount2["_1001_5000"] = "1001_5000_employees";
577
+ EmployeeCount2["_5001_10000"] = "5001_10000_employees";
578
+ EmployeeCount2["_10001_Plus"] = "10001_plus_employees";
579
+ return EmployeeCount2;
580
+ })(EmployeeCount || {});
581
+ var SupportedEmployeeCounts = Object.values(EmployeeCount);
582
+ var ApplicationReceivePreference = /* @__PURE__ */ ((ApplicationReceivePreference2) => {
583
+ ApplicationReceivePreference2["Inbox"] = "inbox";
584
+ ApplicationReceivePreference2["Email"] = "email";
585
+ ApplicationReceivePreference2["ExternalWebsite"] = "external_website";
586
+ return ApplicationReceivePreference2;
587
+ })(ApplicationReceivePreference || {});
588
+ var SupportedApplicationReceivePreferences = Object.values(
589
+ ApplicationReceivePreference
590
+ );
591
+
592
+ // src/job/job.schema.ts
593
+ var JobSchema = object16({
594
+ /** Unique id usable by external systems to reference the job. */
595
+ uniqueId: string13().optional().label("Unique ID"),
596
+ /** Job title shown in listings and search. */
597
+ headline: string13().required().min(5).max(150).label("Headline"),
598
+ /** User-friendly, unique URL identifier. */
599
+ slug: string13().required().max(250).label("Slug"),
600
+ /** How applications are received (inbox vs external website). */
601
+ applicationReceivePreference: mixed3().oneOf([
602
+ "inbox" /* Inbox */,
603
+ "external_website" /* ExternalWebsite */
604
+ ]).required().label("Preference"),
605
+ /** Required when applicationReceivePreference is ExternalWebsite. */
606
+ externalApplyLink: string13().when("applicationReceivePreference", {
607
+ is: (value) => value === "external_website" /* ExternalWebsite */,
608
+ then: (schema) => schema.url().required().label("Apply for Job link"),
609
+ otherwise: (schema) => schema.optional()
610
+ }),
611
+ /** Company the job belongs to (subset of PageSchema). */
612
+ company: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company"),
613
+ /** @deprecated kept for backwards compatibility. */
614
+ designation: string13().optional().nullable().label("Designation"),
615
+ employmentType: string13().required().label("Employment type"),
616
+ workMode: string13().required().label("Work mode"),
617
+ skills: array8().of(SkillSchema.pick(["name", "logo"]).required().label("Skill")).nullable().optional().label("Skills"),
618
+ bookmarks: array8().of(UserIdAndCreatedAtSchema).optional().label("Bookmarks"),
619
+ embedding: object16({
620
+ vector: array8(number5().required()).optional().label("Embedding vector"),
621
+ model: string13().optional().label("Embedding model")
622
+ }).nullable().optional().label("Embedding"),
623
+ applicants: array8().of(UserIdAndCreatedAtSchema).optional().label("Applicants"),
624
+ applicantCount: number5().optional().label("Applicant count"),
625
+ externalApplicationLinkClickCount: number5().optional().label("External application link click count"),
626
+ description: string13().required().min(100).max(5e4).label("Description"),
627
+ descriptionMarkdown: string13().required().label("Description Markdown"),
628
+ descriptionHTML: string13().optional().label("Description HTML"),
629
+ /**
630
+ * Job locations. Required even for remote roles (compliance/legal). Defaults
631
+ * to an empty array; min(1) is intentionally not enforced yet.
632
+ */
633
+ locations: array8().of(LocationSchema).default([]).label("Location"),
634
+ educationLevel: array8(string13().oneOf(SupportedEducationLevels)).required().min(1).label("Educational level"),
635
+ /** Posting validity window (start/expiry). */
636
+ validity: DurationSchema({
637
+ format: SYSTEM_DATE_FORMAT,
638
+ startLabel: "Start Date",
639
+ endLabel: "Expiry Date"
640
+ }).label("Validity"),
641
+ experienceLevel: string13().oneOf(SupportedExperienceLevels).nullable().optional().label("Experience level"),
642
+ contactEmail: string13().email().nullable().optional().label("Contact email"),
643
+ workingHoursPerWeek: number5().nullable().optional().min(1).max(24 * 7).label("Working hours per week"),
644
+ tags: array8().max(50).optional().label("Tags"),
645
+ /** Direct/Quick-apply questionnaire. Each item is validated against the
646
+ * concrete question schema for its `type`, with the stored `answers` omitted. */
647
+ questionnaire: array8().of(
648
+ lazy((question) => {
649
+ const schema = getSchemaByQuestion(question.type);
650
+ if (question.type === "input" /* Input */) {
651
+ return schema.omit([
652
+ "answers"
653
+ ]);
654
+ } else if (question.type === "choice" /* Choice */) {
655
+ return schema.omit([
656
+ "answers"
657
+ ]);
658
+ } else if (question.type === "readAndAcknowledge" /* ReadAndAcknowledge */) {
659
+ return schema.omit(["answers"]);
660
+ }
661
+ return schema;
662
+ })
663
+ ).label("Questionnaire"),
664
+ status: string13().oneOf(SupportedJobStatuses).default("draft" /* Draft */).required().label("Status"),
665
+ seoTags: object16({
666
+ description: string13().optional().label("Description"),
667
+ keywords: array8().of(string13()).optional().label("Keywords")
668
+ }).nullable().optional().label("SEO Tags"),
669
+ jdSummary: string13().optional().label("JD Summary"),
670
+ canCreateAlert: boolean9().optional().label("Can create alert"),
671
+ canDirectApply: boolean9().optional().label("Can direct apply"),
672
+ hasApplied: boolean9().optional().label("Has applied"),
673
+ isOwner: boolean9().optional().label("Is owner"),
674
+ hasBookmarked: boolean9().optional().label("Has bookmarked"),
675
+ hasReported: boolean9().optional().label("Has reported"),
676
+ ratePerHour: number5().optional().min(0).label("Rate per hour"),
677
+ isPromoted: boolean9().optional().label("Is promoted"),
678
+ salaryRange: object16({
679
+ currency: string13().required().label("Currency").default("USD"),
680
+ min: number5().nullable().optional().min(0).label("Minimum Salary"),
681
+ max: number5().nullable().optional().min(0).label("Maximum Salary"),
682
+ compensationType: string13().oneOf(SupportedCompensationTypes).nullable().optional().label("Compensation Type"),
683
+ isNegotiable: boolean9().nullable().optional().default(true).label("Is Negotiable")
684
+ }).nullable().optional().label("Salary Range"),
685
+ reports: array8().of(UserIdAndCreatedAtSchema).optional().label("Reports"),
686
+ category: string13().nullable().optional().label("Category"),
687
+ industry: string13().nullable().optional().label("Industry"),
688
+ subCategories: array8().of(string13().trim().required()).nullable().optional().label("Sub Categories"),
689
+ termsAccepted: boolean9().oneOf([true], "Accept terms before proceeding").required("Accept terms before proceeding").label("Terms accepted"),
690
+ isFeatured: boolean9().optional().default(false).label("Is featured"),
691
+ /** Market country codes to feature this job in; empty = global. */
692
+ featuredMarkets: array8().of(string13().required()).optional().default([]).label("Featured markets")
693
+ }).concat(DbDefaultSchema).noUnknown().label("Job");
694
+
379
695
  // src/pagination/pagination.schema.ts
380
- import { number as number5, object as object11, string as string8 } from "yup";
381
- var PaginationSchema = object11().shape({
382
- page: number5().required().min(1).label("Page").default(1),
383
- limit: number5().required().min(1).max(100).label("Limit").default(10),
384
- sortBy: string8().notOneOf([""]).optional().label("SortBy"),
385
- nextPage: string8().optional().label("Next Page Token"),
386
- prevPage: string8().optional().label("Previous Page Token"),
387
- sortDirection: string8().oneOf(["asc", "desc"]).optional().label("Sort Direction")
696
+ import { number as number6, object as object17, string as string14 } from "yup";
697
+ var PaginationSchema = object17().shape({
698
+ page: number6().required().min(1).label("Page").default(1),
699
+ limit: number6().required().min(1).max(100).label("Limit").default(10),
700
+ sortBy: string14().notOneOf([""]).optional().label("SortBy"),
701
+ nextPage: string14().optional().label("Next Page Token"),
702
+ prevPage: string14().optional().label("Previous Page Token"),
703
+ sortDirection: string14().oneOf(["asc", "desc"]).optional().label("Sort Direction")
388
704
  });
389
705
 
390
706
  // src/pagination/pagination.constant.ts
@@ -399,19 +715,40 @@ var DefaultPaginationOptions = {
399
715
  limit: 10
400
716
  };
401
717
 
402
- // src/skill/skill.schema.ts
403
- import { array as array6, object as object12, string as string9 } from "yup";
404
- var SkillSchema = object12({
405
- name: string9().trim().required().label("Skill Name"),
406
- logo: object12({
407
- light: string9().required().label("Light Logo"),
408
- dark: string9().optional().nullable().label("Dark Logo")
409
- }).optional().nullable().default(null).label("Logo"),
410
- tags: array6().of(string9().max(50)).max(20).optional().label("Tags")
411
- }).concat(DbDefaultSchema).noUnknown().strict().label("Skill");
718
+ // src/report/report.schema.ts
719
+ import { mixed as mixed4, object as object18, string as string15 } from "yup";
720
+
721
+ // src/report/report.constant.ts
722
+ var ResourceType = /* @__PURE__ */ ((ResourceType3) => {
723
+ ResourceType3["Job"] = "job";
724
+ ResourceType3["User"] = "user";
725
+ ResourceType3["Resume"] = "resume";
726
+ ResourceType3["Company"] = "company";
727
+ return ResourceType3;
728
+ })(ResourceType || {});
729
+ var SupportedResourceTypes = Object.values(ResourceType);
730
+ var ReportReason = /* @__PURE__ */ ((ReportReason3) => {
731
+ ReportReason3["OffensiveOrHarassing"] = "offensive_or_harassing";
732
+ ReportReason3["JobExpired"] = "job_expired";
733
+ ReportReason3["AskingMoney"] = "asking_money";
734
+ ReportReason3["FakeJob"] = "fake_job";
735
+ ReportReason3["IncorrectJobDetails"] = "incorrect_job_details";
736
+ ReportReason3["SellingSomething"] = "selling_something";
737
+ ReportReason3["Other"] = "other";
738
+ return ReportReason3;
739
+ })(ReportReason || {});
740
+ var SupportedReportReasons = Object.values(ReportReason);
741
+
742
+ // src/report/report.schema.ts
743
+ var ReportSchema = object18({
744
+ type: mixed4().oneOf(SupportedResourceTypes).required().label("Type"),
745
+ resourceId: string15().required().label("Resource ID"),
746
+ reason: mixed4().oneOf(SupportedReportReasons).required("Please choose a reason").label("Reason"),
747
+ comment: string15().max(1e3).optional().label("Comment")
748
+ }).label("Report Schema");
412
749
 
413
750
  // src/user/user.schema.ts
414
- import { array as array10, number as number7, object as object24, string as string22 } from "yup";
751
+ import { array as array12, number as number8, object as object30, string as string28 } from "yup";
415
752
 
416
753
  // src/user/user.constant.ts
417
754
  var UserRole = /* @__PURE__ */ ((UserRole2) => {
@@ -493,51 +830,51 @@ var MIN_SALARY_LOWER_BOUND = 0;
493
830
  var MIN_SALARY_UPPER_BOUND = 1e6;
494
831
 
495
832
  // src/user/work-experience.schema.ts
496
- import { boolean as boolean8, object as object13, string as string10 } from "yup";
497
- var WorkExperienceSchema = object13().shape({
833
+ import { boolean as boolean10, object as object19, string as string16 } from "yup";
834
+ var WorkExperienceSchema = object19().shape({
498
835
  company: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company"),
499
- designation: string10().trim().required().label("Designation"),
836
+ designation: string16().trim().required().label("Designation"),
500
837
  duration: DurationSchema({
501
838
  format: "YYYY-MM",
502
839
  startLabel: "Start Date",
503
840
  endLabel: "End Date"
504
841
  }).required().label("Duration"),
505
- description: string10().trim().max(3e3).optional().label("Description"),
842
+ description: string16().trim().max(3e3).optional().label("Description"),
506
843
  location: LocationSchema.required().label("Location"),
507
- isRemote: boolean8().oneOf([true, false]).default(false).label("Is Remote")
844
+ isRemote: boolean10().oneOf([true, false]).default(false).label("Is Remote")
508
845
  }).noUnknown().strict().label("Work Experience");
509
846
 
510
847
  // src/user/education.schema.ts
511
- import { boolean as boolean9, object as object14, string as string11 } from "yup";
512
- var EducationSchema = object14({
848
+ import { boolean as boolean11, object as object20, string as string17 } from "yup";
849
+ var EducationSchema = object20({
513
850
  institute: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute"),
514
- course: string11().trim().required().label("Course"),
515
- fieldOfStudy: string11().trim().required().label("Field of Study"),
851
+ course: string17().trim().required().label("Course"),
852
+ fieldOfStudy: string17().trim().required().label("Field of Study"),
516
853
  duration: DurationSchema({
517
854
  format: "YYYY-MM",
518
855
  startLabel: "Start Date",
519
856
  endLabel: "End Date"
520
857
  }).required().label("Duration"),
521
- description: string11().trim().max(3e3).optional().label("Description"),
522
- isDistanceLearning: boolean9().default(false).label("Is Distance Learning"),
858
+ description: string17().trim().max(3e3).optional().label("Description"),
859
+ isDistanceLearning: boolean11().default(false).label("Is Distance Learning"),
523
860
  location: LocationSchema.required().label("Location"),
524
- studyType: string11().oneOf(SupportedStudyTypes).trim().max(50).required().label("Study Type")
861
+ studyType: string17().oneOf(SupportedStudyTypes).trim().max(50).required().label("Study Type")
525
862
  }).noUnknown().strict().label("Education");
526
863
 
527
864
  // src/user/user-skill.schema.ts
528
- import { object as object15, string as string12 } from "yup";
529
- var UserSkillSchema = object15({
530
- name: string12().required().label("Name"),
531
- proficiencyLevel: string12().oneOf(SupportedProficiencyLevels).required().label("Proficiency Level"),
865
+ import { object as object21, string as string18 } from "yup";
866
+ var UserSkillSchema = object21({
867
+ name: string18().required().label("Name"),
868
+ proficiencyLevel: string18().oneOf(SupportedProficiencyLevels).required().label("Proficiency Level"),
532
869
  lastUsed: dateString().format("YYYY-MM").nullable().optional().label("Last Used")
533
870
  }).noUnknown().strict().label("Skill");
534
871
 
535
872
  // src/user/project.schema.ts
536
- import { object as object16, string as string13 } from "yup";
537
- var UserProjectSchema = object16({
538
- name: string13().trim().max(50).required().label("Name"),
539
- url: string13().optional().label("URL"),
540
- description: string13().trim().min(100).max(3e3).required().label("Description"),
873
+ import { object as object22, string as string19 } from "yup";
874
+ var UserProjectSchema = object22({
875
+ name: string19().trim().max(50).required().label("Name"),
876
+ url: string19().optional().label("URL"),
877
+ description: string19().trim().min(100).max(3e3).required().label("Description"),
541
878
  duration: DurationSchema({
542
879
  format: "YYYY-MM",
543
880
  startLabel: "Start Date",
@@ -546,118 +883,118 @@ var UserProjectSchema = object16({
546
883
  }).noUnknown().strict().label("Project");
547
884
 
548
885
  // src/user/user-certification.schema.ts
549
- import { object as object17, string as string14 } from "yup";
550
- var UserCertificationSchema = object17({
551
- name: string14().trim().max(100).required().label("Name"),
886
+ import { object as object23, string as string20 } from "yup";
887
+ var UserCertificationSchema = object23({
888
+ name: string20().trim().max(100).required().label("Name"),
552
889
  // TODO: Add validation for authority
553
- authority: string14().trim().max(100).required().label("Authority"),
554
- licenseNumber: string14().trim().max(50).optional().label("License Number"),
890
+ authority: string20().trim().max(100).required().label("Authority"),
891
+ licenseNumber: string20().trim().max(50).optional().label("License Number"),
555
892
  duration: DurationSchema({
556
893
  format: "YYYY-MM",
557
894
  startLabel: "Start Date",
558
895
  endLabel: "End Date"
559
896
  }).optional().nullable().label("Duration"),
560
- url: string14().optional().label("URL")
897
+ url: string20().optional().label("URL")
561
898
  }).noUnknown().strict().label("Certification");
562
899
 
563
900
  // src/user/user-interest.schema.ts
564
- import { string as string15 } from "yup";
565
- var UserInterestSchema = string15().trim().required().label("Interest");
901
+ import { string as string21 } from "yup";
902
+ var UserInterestSchema = string21().trim().required().label("Interest");
566
903
 
567
904
  // src/user/user-language.schema.ts
568
- import { object as object18, string as string16 } from "yup";
569
- var UserLanguageSchema = object18({
570
- name: string16().trim().required().label("Name"),
571
- proficiencyLevel: string16().oneOf(SupportedProficiencyLevels).trim().max(50).required().label("Proficiency Level")
905
+ import { object as object24, string as string22 } from "yup";
906
+ var UserLanguageSchema = object24({
907
+ name: string22().trim().required().label("Name"),
908
+ proficiencyLevel: string22().oneOf(SupportedProficiencyLevels).trim().max(50).required().label("Proficiency Level")
572
909
  }).noUnknown().strict().label("Language");
573
910
 
574
911
  // src/user/user-additional-info.schema.ts
575
- import { object as object19, string as string17 } from "yup";
576
- var UserAdditionalInfoSchema = object19({
577
- title: string17().trim().max(60).required().label("Title"),
578
- description: string17().trim().max(1e3).required().label("Description")
912
+ import { object as object25, string as string23 } from "yup";
913
+ var UserAdditionalInfoSchema = object25({
914
+ title: string23().trim().max(60).required().label("Title"),
915
+ description: string23().trim().max(1e3).required().label("Description")
579
916
  }).noUnknown().strict().label("User Additional Info");
580
917
 
581
918
  // src/user/general-detail.schema.ts
582
- import { object as object20, string as string18 } from "yup";
583
- var UserGeneralDetailSchema = object20({
584
- id: string18().optional().label("ID"),
585
- name: object20().shape({
586
- first: string18().trim().max(50).required().label("First Name"),
587
- last: string18().trim().max(50).optional().label("Last Name")
919
+ import { object as object26, string as string24 } from "yup";
920
+ var UserGeneralDetailSchema = object26({
921
+ id: string24().optional().label("ID"),
922
+ name: object26().shape({
923
+ first: string24().trim().max(50).required().label("First Name"),
924
+ last: string24().trim().max(50).optional().label("Last Name")
588
925
  }).required().label("Name"),
589
- headline: string18().trim().max(200).optional().label("Headline"),
590
- image: string18().optional().label("Image"),
591
- aboutMe: string18().trim().max(3e3).optional().label("About Me"),
592
- email: string18().required().label("Email"),
593
- mobile: string18().nullable().optional().label("Mobile"),
594
- emailVerified: string18().nullable().optional().label("Email Verified"),
595
- mobileVerified: string18().nullable().optional().label("Mobile Verified"),
596
- experienceLevel: string18().oneOf(SupportedExperienceLevels).required().label("Experience level"),
926
+ headline: string24().trim().max(200).optional().label("Headline"),
927
+ image: string24().optional().label("Image"),
928
+ aboutMe: string24().trim().max(3e3).optional().label("About Me"),
929
+ email: string24().required().label("Email"),
930
+ mobile: string24().nullable().optional().label("Mobile"),
931
+ emailVerified: string24().nullable().optional().label("Email Verified"),
932
+ mobileVerified: string24().nullable().optional().label("Mobile Verified"),
933
+ experienceLevel: string24().oneOf(SupportedExperienceLevels).required().label("Experience level"),
597
934
  location: LocationSchema.required().label("Location"),
598
- region: object20().shape({
599
- country: string18().trim().required().label("Region Country"),
600
- lang: string18().trim().required().label("Region Language")
935
+ region: object26().shape({
936
+ country: string24().trim().required().label("Region Country"),
937
+ lang: string24().trim().required().label("Region Language")
601
938
  }).optional().default(void 0).label("Region"),
602
- profileVisibility: string18().oneOf(SupportedUserProfileVisibilities).default("public" /* Public */).label("Profile Visibility")
939
+ profileVisibility: string24().oneOf(SupportedUserProfileVisibilities).default("public" /* Public */).label("Profile Visibility")
603
940
  }).noUnknown().strict().label("General Detail");
604
941
 
605
942
  // src/user/user-job-preferences.schema.ts
606
- import { array as array7, boolean as boolean10, date as date2, number as number6, object as object21, string as string19 } from "yup";
607
- var UserJobPreferencesSchema = object21({
943
+ import { array as array9, boolean as boolean12, date as date2, number as number7, object as object27, string as string25 } from "yup";
944
+ var UserJobPreferencesSchema = object27({
608
945
  /**
609
946
  * Whether the job seeker is openly signalling availability. Surfaces the
610
947
  * "Open to work" badge on the public profile and boosts visibility in
611
- * recruiter search. Defaults to `false` users must opt in.
948
+ * recruiter search. Defaults to `false` - users must opt in.
612
949
  */
613
- openToWork: boolean10().default(false).label("Open to Work"),
950
+ openToWork: boolean12().default(false).label("Open to Work"),
614
951
  /**
615
952
  * How urgently the user is looking for their next job. Drives match scoring
616
953
  * and can downgrade the visibility of expired or low-relevance postings for
617
954
  * users in `passively_browsing` mode.
618
955
  */
619
- jobSearchUrgency: string19().oneOf(SupportedJobSearchUrgencies).required().label("Job Search Urgency"),
956
+ jobSearchUrgency: string25().oneOf(SupportedJobSearchUrgencies).required().label("Job Search Urgency"),
620
957
  /**
621
958
  * Locations the user wants to work in. Stores the full `LocationSchema`
622
959
  * shape (country, city, state, geo, etc.) as returned by the locations
623
960
  * autocomplete API.
624
961
  */
625
- jobLocations: array7().of(LocationSchema.required().label("Job Location")).min(1, "Pick at least one preferred location.").required().label("Job Locations"),
962
+ jobLocations: array9().of(LocationSchema.required().label("Job Location")).min(1, "Pick at least one preferred location.").required().label("Job Locations"),
626
963
  /**
627
964
  * Seniority levels the user wants jobs to be matched against. Multi-select
628
965
  * (up to 2) for borderline candidates.
629
966
  *
630
967
  * Distinct from the singular `experienceLevel` field on `UserSchema`
631
- * (concat'd via `UserGeneralDetailSchema`) that field captures the user's
968
+ * (concat'd via `UserGeneralDetailSchema`) - that field captures the user's
632
969
  * own current seniority, while these are the levels they want to *target*.
633
970
  * Both reuse the same `ExperienceLevel` taxonomy from `common.constant.ts`
634
971
  * so search/match logic doesn't have to translate between two vocabularies.
635
972
  */
636
- targetExperienceLevels: array7().of(string19().oneOf(SupportedExperienceLevels).required()).min(1, "Pick at least one experience level.").max(2, "You can select at most 2 experience levels.").required().label("Target Experience Levels"),
973
+ targetExperienceLevels: array9().of(string25().oneOf(SupportedExperienceLevels).required()).min(1, "Pick at least one experience level.").max(2, "You can select at most 2 experience levels.").required().label("Target Experience Levels"),
637
974
  /**
638
- * Specializations the user is searching for free-form titles.
975
+ * Specializations the user is searching for - free-form titles.
639
976
  *
640
977
  * Job titles are an open vocabulary (think O*NET, ESCO, LinkedIn's title
641
978
  * graph), so the schema only enforces length bounds per entry. The wizard
642
979
  * surfaces a curated "Popular Roles" picker for discovery, but the user
643
980
  * can ultimately add any title; matching/normalization happens downstream.
644
981
  */
645
- jobRoles: array7().of(string19().trim().max(120).required()).min(1, "Pick at least one role.").required().label("Job Roles"),
982
+ jobRoles: array9().of(string25().trim().max(120).required()).min(1, "Pick at least one role.").required().label("Job Roles"),
646
983
  /**
647
984
  * Minimum acceptable annual base salary, in `minSalaryCurrency`.
648
985
  * Stored as an integer in the currency's major unit (e.g. dollars, not cents).
649
- * Defaults to 0 ("any salary") rather than being optional every job-seeker
986
+ * Defaults to 0 ("any salary") rather than being optional - every job-seeker
650
987
  * has a floor, even if it's zero.
651
988
  */
652
- minSalary: number6().integer().min(MIN_SALARY_LOWER_BOUND).max(MIN_SALARY_UPPER_BOUND).default(0).required().label("Minimum Salary"),
653
- minSalaryCurrency: string19().oneOf(SupportedSalaryCurrencies).default("USD").required().label("Minimum Salary Currency"),
989
+ minSalary: number7().integer().min(MIN_SALARY_LOWER_BOUND).max(MIN_SALARY_UPPER_BOUND).default(0).required().label("Minimum Salary"),
990
+ minSalaryCurrency: string25().oneOf(SupportedSalaryCurrencies).default("USD").required().label("Minimum Salary Currency"),
654
991
  /**
655
992
  * Marketing-attribution capture from the final onboarding step.
656
993
  */
657
- referralSource: string19().oneOf(SupportedReferralSources).required().label("Referral Source"),
994
+ referralSource: string25().oneOf(SupportedReferralSources).required().label("Referral Source"),
658
995
  /**
659
996
  * Resumes the user has uploaded. Embedded directly on the user document
660
- * (capped at 5) they're cheap to denormalize, every wizard step that
997
+ * (capped at 5) - they're cheap to denormalize, every wizard step that
661
998
  * cares about them is already loading the user doc, and the cap keeps the
662
999
  * subdoc bounded.
663
1000
  *
@@ -665,21 +1002,21 @@ var UserJobPreferencesSchema = object21({
665
1002
  * the API can sign for download is kept here.
666
1003
  *
667
1004
  * Distinct from the `Resumes` collection used by the (currently unused)
668
- * AI resume-builder flow onboarding uploads land here, AI-built resumes
1005
+ * AI resume-builder flow - onboarding uploads land here, AI-built resumes
669
1006
  * live in their own collection.
670
1007
  */
671
- resumes: array7().of(
672
- object21({
673
- // Stable id assigned on upload used to address a specific entry
1008
+ resumes: array9().of(
1009
+ object27({
1010
+ // Stable id assigned on upload - used to address a specific entry
674
1011
  // for delete / set-primary operations without exposing the GCS URL
675
1012
  // as a route key.
676
- id: string19().required().label("ID"),
677
- url: string19().required().label("Resume URL"),
678
- filename: string19().trim().max(255).optional().label("Filename"),
679
- sizeBytes: number6().integer().min(0).optional().label("Size (bytes)"),
680
- mimeType: string19().trim().max(120).optional().label("MIME Type"),
1013
+ id: string25().required().label("ID"),
1014
+ url: string25().required().label("Resume URL"),
1015
+ filename: string25().trim().max(255).optional().label("Filename"),
1016
+ sizeBytes: number7().integer().min(0).optional().label("Size (bytes)"),
1017
+ mimeType: string25().trim().max(120).optional().label("MIME Type"),
681
1018
  uploadedAt: date2().required().label("Uploaded At"),
682
- isPrimary: boolean10().default(false).label("Is Primary")
1019
+ isPrimary: boolean12().default(false).label("Is Primary")
683
1020
  }).noUnknown().strict().label("Resume")
684
1021
  ).max(5, "You can keep at most 5 resumes on file.").default([]).label("Resumes"),
685
1022
  /**
@@ -689,123 +1026,123 @@ var UserJobPreferencesSchema = object21({
689
1026
  onboardingCompletedAt: date2().nullable().optional().label("Onboarding Completed At"),
690
1027
  /**
691
1028
  * Parser-suggested values for wizard fields, written by the resume-upload
692
- * flow. Every parser-derived field lands here including profile-shaped
1029
+ * flow. Every parser-derived field lands here - including profile-shaped
693
1030
  * fields (headline, aboutMe, mobile, location, experienceLevel,
694
- * socialAccounts, workExperiences, educations) so nothing reaches the
1031
+ * socialAccounts, workExperiences, educations) - so nothing reaches the
695
1032
  * top-level user document until the user confirms it on the matching
696
1033
  * wizard step. When a user clicks Next on a step, the API drops the
697
1034
  * matching key from this sub-doc so a re-uploaded resume can't overwrite
698
1035
  * confirmed answers.
699
1036
  *
700
- * READ RULE strict:
1037
+ * READ RULE - strict:
701
1038
  * `pendingPrefill.<field>` is ONLY for seeding a wizard step's form
702
1039
  * initial value (e.g. `prefer(user.<field>, user.pendingPrefill?.<field>)`
703
- * in a step's `load`). It is NOT the user's actual value it's an
1040
+ * in a step's `load`). It is NOT the user's actual value - it's an
704
1041
  * unconfirmed suggestion. Never substitute it as a fallback in profile
705
1042
  * pages, search/match, recommendations, public profile, dashboards, or
706
1043
  * APIs. If `user.<field>` is empty there, the correct behavior is empty,
707
1044
  * because the user has not confirmed it yet.
708
1045
  */
709
- pendingPrefill: object21({
710
- headline: string19().trim().optional().label("Pending Headline"),
711
- aboutMe: string19().trim().optional().label("Pending About Me"),
712
- mobile: string19().trim().optional().label("Pending Mobile"),
1046
+ pendingPrefill: object27({
1047
+ headline: string25().trim().optional().label("Pending Headline"),
1048
+ aboutMe: string25().trim().optional().label("Pending About Me"),
1049
+ mobile: string25().trim().optional().label("Pending Mobile"),
713
1050
  location: LocationSchema.optional().default(void 0).label("Pending Location"),
714
- experienceLevel: string19().oneOf(SupportedExperienceLevels).optional().label("Pending Experience Level"),
715
- socialAccounts: array7().of(SocialAccountSchema.required()).optional().label("Pending Social Accounts"),
716
- workExperiences: array7().of(WorkExperienceSchema.required()).optional().label("Pending Work Experiences"),
717
- educations: array7().of(EducationSchema.required()).optional().label("Pending Educations")
1051
+ experienceLevel: string25().oneOf(SupportedExperienceLevels).optional().label("Pending Experience Level"),
1052
+ socialAccounts: array9().of(SocialAccountSchema.required()).optional().label("Pending Social Accounts"),
1053
+ workExperiences: array9().of(WorkExperienceSchema.required()).optional().label("Pending Work Experiences"),
1054
+ educations: array9().of(EducationSchema.required()).optional().label("Pending Educations")
718
1055
  }).nullable().optional().default(void 0).label("Pending Prefill")
719
1056
  }).noUnknown().strict().label("User Job Preferences Schema");
720
1057
 
721
1058
  // src/user/user-recruiter-profile.schema.ts
722
- import { array as array8, object as object22, string as string20 } from "yup";
723
- var RecruiterPageLinkSchema = object22({
1059
+ import { array as array10, object as object28, string as string26 } from "yup";
1060
+ var RecruiterPageLinkSchema = object28({
724
1061
  page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company Page"),
725
- jobTitle: string20().trim().max(100).optional().label("Job Title")
1062
+ jobTitle: string26().trim().max(100).optional().label("Job Title")
726
1063
  }).noUnknown().strict().label("Recruiter Page Link");
727
- var UserRecruiterProfileSchema = object22({
728
- recruiterProfile: object22({
729
- hiringFor: array8().of(RecruiterPageLinkSchema).default([]).label("Hiring For")
1064
+ var UserRecruiterProfileSchema = object28({
1065
+ recruiterProfile: object28({
1066
+ hiringFor: array10().of(RecruiterPageLinkSchema).default([]).label("Hiring For")
730
1067
  }).optional().default(void 0).label("Recruiter Profile")
731
1068
  }).noUnknown().strict().label("User Recruiter Profile");
732
1069
 
733
1070
  // src/user/user-coordinator-profile.schema.ts
734
- import { array as array9, object as object23, string as string21 } from "yup";
735
- var CoordinatorPageLinkSchema = object23({
1071
+ import { array as array11, object as object29, string as string27 } from "yup";
1072
+ var CoordinatorPageLinkSchema = object29({
736
1073
  page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute Page"),
737
- jobTitle: string21().trim().max(100).optional().label("Job Title")
1074
+ jobTitle: string27().trim().max(100).optional().label("Job Title")
738
1075
  }).noUnknown().strict().label("Coordinator Page Link");
739
- var UserCoordinatorProfileSchema = object23({
740
- coordinatorProfile: object23({
741
- coordinatesAt: array9().of(CoordinatorPageLinkSchema).default([]).label("Coordinates At")
1076
+ var UserCoordinatorProfileSchema = object29({
1077
+ coordinatorProfile: object29({
1078
+ coordinatesAt: array11().of(CoordinatorPageLinkSchema).default([]).label("Coordinates At")
742
1079
  }).optional().default(void 0).label("Coordinator Profile")
743
1080
  }).noUnknown().strict().label("User Coordinator Profile");
744
1081
 
745
1082
  // src/user/user.schema.ts
746
- var UserSchema = object24({
1083
+ var UserSchema = object30({
747
1084
  /**
748
1085
  * Related auth account id from auth Server (e.g. Better auth https://auth.thejob.dev)
749
1086
  */
750
- authAccountId: string22().required().label("Auth Account ID"),
1087
+ authAccountId: string28().required().label("Auth Account ID"),
751
1088
  /**
752
1089
  * Social media information about the user (e.g. LinkedIn, GitHub, etc.)
753
1090
  */
754
- socialAccounts: array10().of(SocialAccountSchema).default([]).label("Social Accounts"),
1091
+ socialAccounts: array12().of(SocialAccountSchema).default([]).label("Social Accounts"),
755
1092
  /**
756
1093
  * Work experience information about the user
757
1094
  */
758
- workExperiences: array10().of(WorkExperienceSchema).required().default([]).label("Work Experiences"),
1095
+ workExperiences: array12().of(WorkExperienceSchema).required().default([]).label("Work Experiences"),
759
1096
  /**
760
1097
  * Education information about the user
761
1098
  */
762
- educations: array10().of(EducationSchema).required().default([]).label("Educations"),
1099
+ educations: array12().of(EducationSchema).required().default([]).label("Educations"),
763
1100
  /**
764
1101
  * Skills information about the user
765
1102
  */
766
- skills: array10().of(UserSkillSchema).required().default([]).label("Skills"),
1103
+ skills: array12().of(UserSkillSchema).required().default([]).label("Skills"),
767
1104
  /**
768
1105
  * Projects information about the user
769
1106
  */
770
- projects: array10().of(UserProjectSchema).default([]).label("Projects"),
1107
+ projects: array12().of(UserProjectSchema).default([]).label("Projects"),
771
1108
  /**
772
1109
  * Certifications information about the user
773
1110
  */
774
- certifications: array10().of(UserCertificationSchema).default([]).label("Certifications"),
1111
+ certifications: array12().of(UserCertificationSchema).default([]).label("Certifications"),
775
1112
  /**
776
1113
  * Interests information about the user.
777
1114
  */
778
- interests: array10().of(UserInterestSchema).optional().default([]).label("Interests"),
1115
+ interests: array12().of(UserInterestSchema).optional().default([]).label("Interests"),
779
1116
  /**
780
1117
  * Languages information about the user
781
1118
  */
782
- languages: array10().of(UserLanguageSchema).required().default([]).label("Languages"),
1119
+ languages: array12().of(UserLanguageSchema).required().default([]).label("Languages"),
783
1120
  /**
784
1121
  * Additional information about the user
785
1122
  */
786
- additionalInfo: array10().of(UserAdditionalInfoSchema).default([]).label("Additional Information"),
1123
+ additionalInfo: array12().of(UserAdditionalInfoSchema).default([]).label("Additional Information"),
787
1124
  /**
788
1125
  * Status of the user account
789
1126
  */
790
- status: string22().oneOf(SupportedUserStatuses).required().label("Status"),
1127
+ status: string28().oneOf(SupportedUserStatuses).required().label("Status"),
791
1128
  /**
792
1129
  * Roles assigned to the user
793
1130
  */
794
- roles: array10().of(string22().oneOf(SupportedUserRoles)).required().default(DefaultUserRoles).label("Roles"),
1131
+ roles: array12().of(string28().oneOf(SupportedUserRoles)).required().default(DefaultUserRoles).label("Roles"),
795
1132
  /**
796
1133
  * Vector embedding of the user's profile for semantic/hybrid search.
797
1134
  * Generated from a structured summary of skills, experience, education, etc.
798
1135
  * Only generated for public profiles with sufficient completeness (≥60%).
799
1136
  */
800
- embedding: object24({
801
- vector: array10(number7().required()).optional().label("Embedding vector"),
802
- model: string22().optional().label("Embedding model")
1137
+ embedding: object30({
1138
+ vector: array12(number8().required()).optional().label("Embedding vector"),
1139
+ model: string28().optional().label("Embedding model")
803
1140
  }).nullable().optional().label("Embedding")
804
1141
  }).concat(UserGeneralDetailSchema).concat(UserJobPreferencesSchema).concat(UserRecruiterProfileSchema).concat(UserCoordinatorProfileSchema).noUnknown().strict().label("User Schema");
805
1142
 
806
1143
  // src/user/user-completeness.schema.ts
807
- import { object as object25 } from "yup";
808
- var UserCompletenessSchema = object25({
1144
+ import { object as object31 } from "yup";
1145
+ var UserCompletenessSchema = object31({
809
1146
  additionalInfo: CompletenessScoreSchema(0).label("Additional Info"),
810
1147
  // Optional
811
1148
  certifications: CompletenessScoreSchema(0).label("Certifications"),
@@ -827,17 +1164,27 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
827
1164
  "workExperiences" /* WorkExperiences */
828
1165
  ]);
829
1166
  export {
1167
+ AnswerChoiceType,
1168
+ ApplicationReceivePreference,
1169
+ ChoiceQuestionSchema,
1170
+ Common,
1171
+ CompensationType,
830
1172
  CompletenessScoreSchema,
831
1173
  ContactTypes,
832
1174
  CoordinatorPageLinkSchema,
1175
+ DISPLAY_DATE_FORMAT,
1176
+ DISPLAY_DATE_FORMAT_SHORT,
833
1177
  DateStringSchema,
834
1178
  DbDefaultSchema,
835
1179
  DefaultPaginatedResponse,
836
1180
  DefaultPaginationOptions,
837
1181
  DefaultUserRoles,
838
1182
  DurationSchema,
1183
+ EMPTY_STRING,
839
1184
  EducationLevel,
840
1185
  EducationSchema,
1186
+ EmployeeCount,
1187
+ EmploymentType,
841
1188
  ExperienceLevel,
842
1189
  GeneraDetailFields,
843
1190
  GroupManagedBy,
@@ -847,7 +1194,10 @@ export {
847
1194
  GroupStatus,
848
1195
  GroupTranslationSchema,
849
1196
  GroupVisibility,
1197
+ InputQuestionSchema,
1198
+ JobSchema,
850
1199
  JobSearchUrgency,
1200
+ JobStatus,
851
1201
  LocationSchema,
852
1202
  MIN_SALARY_LOWER_BOUND,
853
1203
  MIN_SALARY_UPPER_BOUND,
@@ -856,27 +1206,45 @@ export {
856
1206
  PageType,
857
1207
  PaginationSchema,
858
1208
  ProficiencyLevel,
1209
+ QuestionSchema,
1210
+ QuestionType,
1211
+ ReadAndAcknowledgeQuestionSchema,
859
1212
  RecruiterPageLinkSchema,
860
1213
  ReferralSource,
1214
+ ReportReason,
1215
+ ReportSchema,
1216
+ ResourceType,
1217
+ SITEMAP_FORMAT,
1218
+ SYSTEM_DATE_FORMAT,
861
1219
  SkillSchema,
862
1220
  SocialAccount,
863
1221
  SocialAccountSchema,
864
1222
  StudentCompletenessSchema,
865
1223
  StudyType,
1224
+ SupportedAnswerChoiceTypes,
1225
+ SupportedApplicationReceivePreferences,
1226
+ SupportedCompensationTypes,
866
1227
  SupportedContactTypes,
867
1228
  SupportedEducationLevels,
1229
+ SupportedEmployeeCounts,
1230
+ SupportedEmploymentTypes,
868
1231
  SupportedExperienceLevels,
869
1232
  SupportedJobSearchUrgencies,
1233
+ SupportedJobStatuses,
870
1234
  SupportedPageStatuses,
871
1235
  SupportedPageTypes,
872
1236
  SupportedProficiencyLevels,
1237
+ SupportedQuestionTypes,
873
1238
  SupportedReferralSources,
1239
+ SupportedReportReasons,
1240
+ SupportedResourceTypes,
874
1241
  SupportedSalaryCurrencies,
875
1242
  SupportedSocialAccounts,
876
1243
  SupportedStudyTypes,
877
1244
  SupportedUserProfileVisibilities,
878
1245
  SupportedUserRoles,
879
1246
  SupportedUserStatuses,
1247
+ SupportedWorkModes,
880
1248
  TermsAcceptedSchema,
881
1249
  UserAdditionalInfoSchema,
882
1250
  UserCertificationSchema,
@@ -884,6 +1252,7 @@ export {
884
1252
  UserCoordinatorProfileSchema,
885
1253
  UserDetailType,
886
1254
  UserGeneralDetailSchema,
1255
+ UserIdAndCreatedAtSchema,
887
1256
  UserInterestSchema,
888
1257
  UserJobPreferencesSchema,
889
1258
  UserLanguageSchema,
@@ -895,5 +1264,7 @@ export {
895
1264
  UserSkillSchema,
896
1265
  UserStatus,
897
1266
  WorkExperienceSchema,
898
- dateString
1267
+ WorkMode,
1268
+ dateString,
1269
+ getSchemaByQuestion
899
1270
  };