@thejob/schema 2.0.7 → 2.0.9

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.cjs CHANGED
@@ -32,6 +32,8 @@ var index_exports = {};
32
32
  __export(index_exports, {
33
33
  AnswerChoiceType: () => AnswerChoiceType,
34
34
  ApplicationReceivePreference: () => ApplicationReceivePreference,
35
+ CampaignSchema: () => CampaignSchema,
36
+ CampaignStatus: () => CampaignStatus,
35
37
  ChoiceQuestionSchema: () => ChoiceQuestionSchema,
36
38
  Common: () => Common,
37
39
  CompensationType: () => CompensationType,
@@ -68,9 +70,13 @@ __export(index_exports, {
68
70
  JobSearchUrgency: () => JobSearchUrgency,
69
71
  JobStatus: () => JobStatus,
70
72
  JobSubCategory: () => JobSubCategory,
73
+ ListFilterSchema: () => ListFilterSchema,
71
74
  LocationSchema: () => LocationSchema,
72
75
  MIN_SALARY_LOWER_BOUND: () => MIN_SALARY_LOWER_BOUND,
73
76
  MIN_SALARY_UPPER_BOUND: () => MIN_SALARY_UPPER_BOUND,
77
+ MailingListSchema: () => MailingListSchema,
78
+ PREFILL_MIRRORED_KEYS: () => PREFILL_MIRRORED_KEYS,
79
+ PRIVATE_PROFILE_FIELDS: () => PRIVATE_PROFILE_FIELDS,
74
80
  PageSchema: () => PageSchema,
75
81
  PageStatus: () => PageStatus,
76
82
  PageType: () => PageType,
@@ -95,6 +101,7 @@ __export(index_exports, {
95
101
  StudyType: () => StudyType,
96
102
  SupportedAnswerChoiceTypes: () => SupportedAnswerChoiceTypes,
97
103
  SupportedApplicationReceivePreferences: () => SupportedApplicationReceivePreferences,
104
+ SupportedCampaignStatuses: () => SupportedCampaignStatuses,
98
105
  SupportedCompensationTypes: () => SupportedCompensationTypes,
99
106
  SupportedContactTypes: () => SupportedContactTypes,
100
107
  SupportedEducationLevels: () => SupportedEducationLevels,
@@ -2055,63 +2062,8 @@ var PostSchema = (0, import_yup19.object)({
2055
2062
  status: (0, import_yup19.string)().oneOf(SupportedPostStatuses).default("draft" /* Draft */).required().label("Status")
2056
2063
  }).concat(DbDefaultSchema).noUnknown().label("Post");
2057
2064
 
2058
- // src/pagination/pagination.schema.ts
2065
+ // src/marketing/marketing.schema.ts
2059
2066
  var import_yup20 = require("yup");
2060
- var PaginationSchema = (0, import_yup20.object)().shape({
2061
- page: (0, import_yup20.number)().required().min(1).label("Page").default(1),
2062
- limit: (0, import_yup20.number)().required().min(1).max(100).label("Limit").default(10),
2063
- sortBy: (0, import_yup20.string)().notOneOf([""]).optional().label("SortBy"),
2064
- nextPage: (0, import_yup20.string)().optional().label("Next Page Token"),
2065
- prevPage: (0, import_yup20.string)().optional().label("Previous Page Token"),
2066
- sortDirection: (0, import_yup20.string)().oneOf(["asc", "desc"]).optional().label("Sort Direction")
2067
- });
2068
-
2069
- // src/pagination/pagination.constant.ts
2070
- var DefaultPaginatedResponse = {
2071
- results: [],
2072
- total: 0,
2073
- page: 1,
2074
- limit: 10
2075
- };
2076
- var DefaultPaginationOptions = {
2077
- page: 1,
2078
- limit: 10
2079
- };
2080
-
2081
- // src/report/report.schema.ts
2082
- var import_yup21 = require("yup");
2083
-
2084
- // src/report/report.constant.ts
2085
- var ResourceType = /* @__PURE__ */ ((ResourceType3) => {
2086
- ResourceType3["Job"] = "job";
2087
- ResourceType3["User"] = "user";
2088
- ResourceType3["Resume"] = "resume";
2089
- ResourceType3["Company"] = "company";
2090
- return ResourceType3;
2091
- })(ResourceType || {});
2092
- var SupportedResourceTypes = Object.values(ResourceType);
2093
- var ReportReason = /* @__PURE__ */ ((ReportReason3) => {
2094
- ReportReason3["OffensiveOrHarassing"] = "offensive_or_harassing";
2095
- ReportReason3["JobExpired"] = "job_expired";
2096
- ReportReason3["AskingMoney"] = "asking_money";
2097
- ReportReason3["FakeJob"] = "fake_job";
2098
- ReportReason3["IncorrectJobDetails"] = "incorrect_job_details";
2099
- ReportReason3["SellingSomething"] = "selling_something";
2100
- ReportReason3["Other"] = "other";
2101
- return ReportReason3;
2102
- })(ReportReason || {});
2103
- var SupportedReportReasons = Object.values(ReportReason);
2104
-
2105
- // src/report/report.schema.ts
2106
- var ReportSchema = (0, import_yup21.object)({
2107
- type: (0, import_yup21.mixed)().oneOf(SupportedResourceTypes).required().label("Type"),
2108
- resourceId: (0, import_yup21.string)().required().label("Resource ID"),
2109
- reason: (0, import_yup21.mixed)().oneOf(SupportedReportReasons).required("Please choose a reason").label("Reason"),
2110
- comment: (0, import_yup21.string)().max(1e3).optional().label("Comment")
2111
- }).label("Report Schema");
2112
-
2113
- // src/user/user.schema.ts
2114
- var import_yup34 = require("yup");
2115
2067
 
2116
2068
  // src/user/user.constant.ts
2117
2069
  var UserRole = /* @__PURE__ */ ((UserRole2) => {
@@ -2191,53 +2143,218 @@ var SupportedReferralSources = Object.values(ReferralSource);
2191
2143
  var SupportedSalaryCurrencies = ["USD", "EUR", "GBP", "SEK", "INR"];
2192
2144
  var MIN_SALARY_LOWER_BOUND = 0;
2193
2145
  var MIN_SALARY_UPPER_BOUND = 1e6;
2146
+ var PREFILL_MIRRORED_KEYS = [
2147
+ "headline",
2148
+ "aboutMe",
2149
+ "mobile",
2150
+ "location",
2151
+ "experienceLevel",
2152
+ "socialAccounts",
2153
+ "workExperiences",
2154
+ "educations"
2155
+ ];
2156
+ var PRIVATE_PROFILE_FIELDS = [
2157
+ "email",
2158
+ "emailVerified",
2159
+ "mobile",
2160
+ "additionalInfo"
2161
+ ];
2194
2162
 
2195
- // src/user/work-experience.schema.ts
2163
+ // src/marketing/marketing.schema.ts
2164
+ var tokens = (label) => (0, import_yup20.array)().of((0, import_yup20.string)().trim().required()).optional().default([]).label(label);
2165
+ var enumFacet = (values, label) => (0, import_yup20.array)().of((0, import_yup20.string)().oneOf(values).required()).optional().default([]).label(label);
2166
+ var ListFilterSchema = (0, import_yup20.object)({
2167
+ // ── Enum facets (closed vocabularies, chip pickers) ─────────────────────────
2168
+ countries: (0, import_yup20.array)().of((0, import_yup20.string)().required()).optional().default([]).label("Countries"),
2169
+ roles: enumFacet(SupportedUserRoles, "Roles"),
2170
+ // The user's own current seniority (UserSchema.experienceLevel).
2171
+ experienceLevels: enumFacet(SupportedExperienceLevels, "Experience Levels"),
2172
+ // Levels the user is *targeting* (distinct from their current experienceLevel).
2173
+ targetExperienceLevels: enumFacet(
2174
+ SupportedExperienceLevels,
2175
+ "Target Experience Levels"
2176
+ ),
2177
+ jobSearchUrgencies: enumFacet(SupportedJobSearchUrgencies, "Job Search Urgency"),
2178
+ referralSources: enumFacet(SupportedReferralSources, "Referral Source"),
2179
+ statuses: enumFacet(SupportedUserStatuses, "Account Status"),
2180
+ profileVisibilities: enumFacet(
2181
+ SupportedUserProfileVisibilities,
2182
+ "Profile Visibility"
2183
+ ),
2184
+ // Proficiency held on any skill entry (skills[].proficiencyLevel).
2185
+ skillProficiencyLevels: enumFacet(
2186
+ SupportedProficiencyLevels,
2187
+ "Skill Proficiency"
2188
+ ),
2189
+ // Proficiency held on any language entry (languages[].proficiencyLevel).
2190
+ languageProficiencyLevels: enumFacet(
2191
+ SupportedProficiencyLevels,
2192
+ "Language Proficiency"
2193
+ ),
2194
+ // Mode of any education entry (educations[].studyType).
2195
+ studyTypes: enumFacet(SupportedStudyTypes, "Study Type"),
2196
+ // Platforms the user linked a social account for (socialAccounts[].type).
2197
+ socialAccountTypes: enumFacet(SupportedSocialAccounts, "Social Accounts"),
2198
+ // Currency of the user's salary floor (minSalaryCurrency).
2199
+ salaryCurrencies: enumFacet(SupportedSalaryCurrencies, "Salary Currency"),
2200
+ // ── Free-text token facets (nested profile arrays) ──────────────────────────
2201
+ skills: tokens("Skills"),
2202
+ languages: tokens("Languages"),
2203
+ interests: tokens("Interests"),
2204
+ companies: tokens("Companies"),
2205
+ designations: tokens("Job Titles / Designations"),
2206
+ institutes: tokens("Institutes"),
2207
+ courses: tokens("Courses"),
2208
+ fieldsOfStudy: tokens("Fields of Study"),
2209
+ certifications: tokens("Certifications"),
2210
+ certificationAuthorities: tokens("Certification Authorities"),
2211
+ projects: tokens("Projects"),
2212
+ jobRoles: tokens("Target Roles"),
2213
+ jobLocations: tokens("Preferred Job Locations"),
2214
+ // Companies a recruiter is hiring for (recruiterProfile.hiringFor[].page.name).
2215
+ hiringForCompanies: tokens("Hiring For (Companies)"),
2216
+ // Institutes a coordinator works at (coordinatorProfile.coordinatesAt[].page.name).
2217
+ coordinatesAtInstitutes: tokens("Coordinates At (Institutes)"),
2218
+ // Case-insensitive keyword match against headline + aboutMe.
2219
+ keywords: tokens("Profile Keywords"),
2220
+ // ── Range / boolean facets ──────────────────────────────────────────────────
2221
+ minSalaryFloor: (0, import_yup20.number)().integer().min(0).optional().label("Min Salary \u2265"),
2222
+ minSalaryCeil: (0, import_yup20.number)().integer().min(0).optional().label("Min Salary \u2264"),
2223
+ openToWorkOnly: (0, import_yup20.boolean)().optional().default(false).label("Open to Work Only"),
2224
+ remoteExperienceOnly: (0, import_yup20.boolean)().optional().default(false).label("Has Remote Experience"),
2225
+ hasResumeOnly: (0, import_yup20.boolean)().optional().default(false).label("Has Resume"),
2226
+ onboardingCompletedOnly: (0, import_yup20.boolean)().optional().default(false).label("Onboarding Completed"),
2227
+ emailVerifiedOnly: (0, import_yup20.boolean)().optional().default(false).label("Email Verified Only"),
2228
+ mobileVerifiedOnly: (0, import_yup20.boolean)().optional().default(false).label("Mobile Verified Only")
2229
+ }).label("Audience Filter");
2230
+ var MailingListSchema = (0, import_yup20.object)({
2231
+ name: (0, import_yup20.string)().required().min(1).max(120).label("Name"),
2232
+ description: (0, import_yup20.string)().optional().max(500).label("Description"),
2233
+ filter: ListFilterSchema.default(() => ListFilterSchema.getDefault())
2234
+ }).label("Mailing List");
2235
+ var CampaignSchema = (0, import_yup20.object)({
2236
+ name: (0, import_yup20.string)().required().min(1).max(200).label("Campaign Name"),
2237
+ subject: (0, import_yup20.string)().required().min(1).max(255).label("Subject"),
2238
+ // HTML body; may contain a {{unsubscribe_url}} placeholder.
2239
+ html: (0, import_yup20.string)().required().min(1).label("HTML Body"),
2240
+ text: (0, import_yup20.string)().optional().label("Plain-text Body"),
2241
+ listId: (0, import_yup20.string)().required().label("Mailing List")
2242
+ }).label("Campaign");
2243
+
2244
+ // src/marketing/marketing.constant.ts
2245
+ var CampaignStatus = /* @__PURE__ */ ((CampaignStatus2) => {
2246
+ CampaignStatus2["Draft"] = "draft";
2247
+ CampaignStatus2["Sending"] = "sending";
2248
+ CampaignStatus2["Sent"] = "sent";
2249
+ CampaignStatus2["Failed"] = "failed";
2250
+ return CampaignStatus2;
2251
+ })(CampaignStatus || {});
2252
+ var SupportedCampaignStatuses = Object.values(CampaignStatus);
2253
+
2254
+ // src/pagination/pagination.schema.ts
2255
+ var import_yup21 = require("yup");
2256
+ var PaginationSchema = (0, import_yup21.object)().shape({
2257
+ page: (0, import_yup21.number)().required().min(1).label("Page").default(1),
2258
+ limit: (0, import_yup21.number)().required().min(1).max(100).label("Limit").default(10),
2259
+ sortBy: (0, import_yup21.string)().notOneOf([""]).optional().label("SortBy"),
2260
+ nextPage: (0, import_yup21.string)().optional().label("Next Page Token"),
2261
+ prevPage: (0, import_yup21.string)().optional().label("Previous Page Token"),
2262
+ sortDirection: (0, import_yup21.string)().oneOf(["asc", "desc"]).optional().label("Sort Direction")
2263
+ });
2264
+
2265
+ // src/pagination/pagination.constant.ts
2266
+ var DefaultPaginatedResponse = {
2267
+ results: [],
2268
+ total: 0,
2269
+ page: 1,
2270
+ limit: 10
2271
+ };
2272
+ var DefaultPaginationOptions = {
2273
+ page: 1,
2274
+ limit: 10
2275
+ };
2276
+
2277
+ // src/report/report.schema.ts
2196
2278
  var import_yup22 = require("yup");
2197
- var WorkExperienceSchema = (0, import_yup22.object)().shape({
2279
+
2280
+ // src/report/report.constant.ts
2281
+ var ResourceType = /* @__PURE__ */ ((ResourceType3) => {
2282
+ ResourceType3["Job"] = "job";
2283
+ ResourceType3["User"] = "user";
2284
+ ResourceType3["Resume"] = "resume";
2285
+ ResourceType3["Company"] = "company";
2286
+ return ResourceType3;
2287
+ })(ResourceType || {});
2288
+ var SupportedResourceTypes = Object.values(ResourceType);
2289
+ var ReportReason = /* @__PURE__ */ ((ReportReason3) => {
2290
+ ReportReason3["OffensiveOrHarassing"] = "offensive_or_harassing";
2291
+ ReportReason3["JobExpired"] = "job_expired";
2292
+ ReportReason3["AskingMoney"] = "asking_money";
2293
+ ReportReason3["FakeJob"] = "fake_job";
2294
+ ReportReason3["IncorrectJobDetails"] = "incorrect_job_details";
2295
+ ReportReason3["SellingSomething"] = "selling_something";
2296
+ ReportReason3["Other"] = "other";
2297
+ return ReportReason3;
2298
+ })(ReportReason || {});
2299
+ var SupportedReportReasons = Object.values(ReportReason);
2300
+
2301
+ // src/report/report.schema.ts
2302
+ var ReportSchema = (0, import_yup22.object)({
2303
+ type: (0, import_yup22.mixed)().oneOf(SupportedResourceTypes).required().label("Type"),
2304
+ resourceId: (0, import_yup22.string)().required().label("Resource ID"),
2305
+ reason: (0, import_yup22.mixed)().oneOf(SupportedReportReasons).required("Please choose a reason").label("Reason"),
2306
+ comment: (0, import_yup22.string)().max(1e3).optional().label("Comment")
2307
+ }).label("Report Schema");
2308
+
2309
+ // src/user/user.schema.ts
2310
+ var import_yup35 = require("yup");
2311
+
2312
+ // src/user/work-experience.schema.ts
2313
+ var import_yup23 = require("yup");
2314
+ var WorkExperienceSchema = (0, import_yup23.object)().shape({
2198
2315
  company: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company"),
2199
- designation: (0, import_yup22.string)().trim().required().label("Designation"),
2316
+ designation: (0, import_yup23.string)().trim().required().label("Designation"),
2200
2317
  duration: DurationSchema({
2201
2318
  format: "YYYY-MM",
2202
2319
  startLabel: "Start Date",
2203
2320
  endLabel: "End Date"
2204
2321
  }).required().label("Duration"),
2205
- description: (0, import_yup22.string)().trim().max(3e3).optional().label("Description"),
2322
+ description: (0, import_yup23.string)().trim().max(3e3).optional().label("Description"),
2206
2323
  location: LocationSchema.required().label("Location"),
2207
- isRemote: (0, import_yup22.boolean)().oneOf([true, false]).default(false).label("Is Remote")
2324
+ isRemote: (0, import_yup23.boolean)().oneOf([true, false]).default(false).label("Is Remote")
2208
2325
  }).noUnknown().strict().label("Work Experience");
2209
2326
 
2210
2327
  // src/user/education.schema.ts
2211
- var import_yup23 = require("yup");
2212
- var EducationSchema = (0, import_yup23.object)({
2328
+ var import_yup24 = require("yup");
2329
+ var EducationSchema = (0, import_yup24.object)({
2213
2330
  institute: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute"),
2214
- course: (0, import_yup23.string)().trim().required().label("Course"),
2215
- fieldOfStudy: (0, import_yup23.string)().trim().required().label("Field of Study"),
2331
+ course: (0, import_yup24.string)().trim().required().label("Course"),
2332
+ fieldOfStudy: (0, import_yup24.string)().trim().required().label("Field of Study"),
2216
2333
  duration: DurationSchema({
2217
2334
  format: "YYYY-MM",
2218
2335
  startLabel: "Start Date",
2219
2336
  endLabel: "End Date"
2220
2337
  }).required().label("Duration"),
2221
- description: (0, import_yup23.string)().trim().max(3e3).optional().label("Description"),
2222
- isDistanceLearning: (0, import_yup23.boolean)().default(false).label("Is Distance Learning"),
2338
+ description: (0, import_yup24.string)().trim().max(3e3).optional().label("Description"),
2339
+ isDistanceLearning: (0, import_yup24.boolean)().default(false).label("Is Distance Learning"),
2223
2340
  location: LocationSchema.required().label("Location"),
2224
- studyType: (0, import_yup23.string)().oneOf(SupportedStudyTypes).trim().max(50).required().label("Study Type")
2341
+ studyType: (0, import_yup24.string)().oneOf(SupportedStudyTypes).trim().max(50).required().label("Study Type")
2225
2342
  }).noUnknown().strict().label("Education");
2226
2343
 
2227
2344
  // src/user/user-skill.schema.ts
2228
- var import_yup24 = require("yup");
2229
- var UserSkillSchema = (0, import_yup24.object)({
2230
- name: (0, import_yup24.string)().required().label("Name"),
2231
- proficiencyLevel: (0, import_yup24.string)().oneOf(SupportedProficiencyLevels).required().label("Proficiency Level"),
2345
+ var import_yup25 = require("yup");
2346
+ var UserSkillSchema = (0, import_yup25.object)({
2347
+ name: (0, import_yup25.string)().required().label("Name"),
2348
+ proficiencyLevel: (0, import_yup25.string)().oneOf(SupportedProficiencyLevels).required().label("Proficiency Level"),
2232
2349
  lastUsed: dateString().format("YYYY-MM").nullable().optional().label("Last Used")
2233
2350
  }).noUnknown().strict().label("Skill");
2234
2351
 
2235
2352
  // src/user/project.schema.ts
2236
- var import_yup25 = require("yup");
2237
- var UserProjectSchema = (0, import_yup25.object)({
2238
- name: (0, import_yup25.string)().trim().max(50).required().label("Name"),
2239
- url: (0, import_yup25.string)().optional().label("URL"),
2240
- description: (0, import_yup25.string)().trim().min(100).max(3e3).required().label("Description"),
2353
+ var import_yup26 = require("yup");
2354
+ var UserProjectSchema = (0, import_yup26.object)({
2355
+ name: (0, import_yup26.string)().trim().max(50).required().label("Name"),
2356
+ url: (0, import_yup26.string)().optional().label("URL"),
2357
+ description: (0, import_yup26.string)().trim().min(100).max(3e3).required().label("Description"),
2241
2358
  duration: DurationSchema({
2242
2359
  format: "YYYY-MM",
2243
2360
  startLabel: "Start Date",
@@ -2246,83 +2363,83 @@ var UserProjectSchema = (0, import_yup25.object)({
2246
2363
  }).noUnknown().strict().label("Project");
2247
2364
 
2248
2365
  // src/user/user-certification.schema.ts
2249
- var import_yup26 = require("yup");
2250
- var UserCertificationSchema = (0, import_yup26.object)({
2251
- name: (0, import_yup26.string)().trim().max(100).required().label("Name"),
2366
+ var import_yup27 = require("yup");
2367
+ var UserCertificationSchema = (0, import_yup27.object)({
2368
+ name: (0, import_yup27.string)().trim().max(100).required().label("Name"),
2252
2369
  // TODO: Add validation for authority
2253
- authority: (0, import_yup26.string)().trim().max(100).required().label("Authority"),
2254
- licenseNumber: (0, import_yup26.string)().trim().max(50).optional().label("License Number"),
2370
+ authority: (0, import_yup27.string)().trim().max(100).required().label("Authority"),
2371
+ licenseNumber: (0, import_yup27.string)().trim().max(50).optional().label("License Number"),
2255
2372
  duration: DurationSchema({
2256
2373
  format: "YYYY-MM",
2257
2374
  startLabel: "Start Date",
2258
2375
  endLabel: "End Date"
2259
2376
  }).optional().nullable().label("Duration"),
2260
- url: (0, import_yup26.string)().optional().label("URL")
2377
+ url: (0, import_yup27.string)().optional().label("URL")
2261
2378
  }).noUnknown().strict().label("Certification");
2262
2379
 
2263
2380
  // src/user/user-interest.schema.ts
2264
- var import_yup27 = require("yup");
2265
- var UserInterestSchema = (0, import_yup27.string)().trim().required().label("Interest");
2381
+ var import_yup28 = require("yup");
2382
+ var UserInterestSchema = (0, import_yup28.string)().trim().required().label("Interest");
2266
2383
 
2267
2384
  // src/user/user-language.schema.ts
2268
- var import_yup28 = require("yup");
2269
- var UserLanguageSchema = (0, import_yup28.object)({
2270
- name: (0, import_yup28.string)().trim().required().label("Name"),
2271
- proficiencyLevel: (0, import_yup28.string)().oneOf(SupportedProficiencyLevels).trim().max(50).required().label("Proficiency Level")
2385
+ var import_yup29 = require("yup");
2386
+ var UserLanguageSchema = (0, import_yup29.object)({
2387
+ name: (0, import_yup29.string)().trim().required().label("Name"),
2388
+ proficiencyLevel: (0, import_yup29.string)().oneOf(SupportedProficiencyLevels).trim().max(50).required().label("Proficiency Level")
2272
2389
  }).noUnknown().strict().label("Language");
2273
2390
 
2274
2391
  // src/user/user-additional-info.schema.ts
2275
- var import_yup29 = require("yup");
2276
- var UserAdditionalInfoSchema = (0, import_yup29.object)({
2277
- title: (0, import_yup29.string)().trim().max(60).required().label("Title"),
2278
- description: (0, import_yup29.string)().trim().max(1e3).required().label("Description")
2392
+ var import_yup30 = require("yup");
2393
+ var UserAdditionalInfoSchema = (0, import_yup30.object)({
2394
+ title: (0, import_yup30.string)().trim().max(60).required().label("Title"),
2395
+ description: (0, import_yup30.string)().trim().max(1e3).required().label("Description")
2279
2396
  }).noUnknown().strict().label("User Additional Info");
2280
2397
 
2281
2398
  // src/user/general-detail.schema.ts
2282
- var import_yup30 = require("yup");
2283
- var UserGeneralDetailSchema = (0, import_yup30.object)({
2284
- id: (0, import_yup30.string)().optional().label("ID"),
2285
- name: (0, import_yup30.object)().shape({
2286
- first: (0, import_yup30.string)().trim().max(50).required().label("First Name"),
2287
- last: (0, import_yup30.string)().trim().max(50).optional().label("Last Name")
2399
+ var import_yup31 = require("yup");
2400
+ var UserGeneralDetailSchema = (0, import_yup31.object)({
2401
+ id: (0, import_yup31.string)().optional().label("ID"),
2402
+ name: (0, import_yup31.object)().shape({
2403
+ first: (0, import_yup31.string)().trim().max(50).required().label("First Name"),
2404
+ last: (0, import_yup31.string)().trim().max(50).optional().label("Last Name")
2288
2405
  }).required().label("Name"),
2289
- headline: (0, import_yup30.string)().trim().max(200).optional().label("Headline"),
2290
- image: (0, import_yup30.string)().optional().label("Image"),
2291
- aboutMe: (0, import_yup30.string)().trim().max(3e3).optional().label("About Me"),
2292
- email: (0, import_yup30.string)().required().label("Email"),
2293
- mobile: (0, import_yup30.string)().nullable().optional().label("Mobile"),
2294
- emailVerified: (0, import_yup30.string)().nullable().optional().label("Email Verified"),
2295
- mobileVerified: (0, import_yup30.string)().nullable().optional().label("Mobile Verified"),
2296
- experienceLevel: (0, import_yup30.string)().oneOf(SupportedExperienceLevels).required().label("Experience level"),
2406
+ headline: (0, import_yup31.string)().trim().max(200).optional().label("Headline"),
2407
+ image: (0, import_yup31.string)().optional().label("Image"),
2408
+ aboutMe: (0, import_yup31.string)().trim().max(3e3).optional().label("About Me"),
2409
+ email: (0, import_yup31.string)().required().label("Email"),
2410
+ mobile: (0, import_yup31.string)().nullable().optional().label("Mobile"),
2411
+ emailVerified: (0, import_yup31.string)().nullable().optional().label("Email Verified"),
2412
+ mobileVerified: (0, import_yup31.string)().nullable().optional().label("Mobile Verified"),
2413
+ experienceLevel: (0, import_yup31.string)().oneOf(SupportedExperienceLevels).required().label("Experience level"),
2297
2414
  location: LocationSchema.required().label("Location"),
2298
- region: (0, import_yup30.object)().shape({
2299
- country: (0, import_yup30.string)().trim().required().label("Region Country"),
2300
- lang: (0, import_yup30.string)().trim().required().label("Region Language")
2415
+ region: (0, import_yup31.object)().shape({
2416
+ country: (0, import_yup31.string)().trim().required().label("Region Country"),
2417
+ lang: (0, import_yup31.string)().trim().required().label("Region Language")
2301
2418
  }).optional().default(void 0).label("Region"),
2302
- profileVisibility: (0, import_yup30.string)().oneOf(SupportedUserProfileVisibilities).default("public" /* Public */).label("Profile Visibility")
2419
+ profileVisibility: (0, import_yup31.string)().oneOf(SupportedUserProfileVisibilities).default("public" /* Public */).label("Profile Visibility")
2303
2420
  }).noUnknown().strict().label("General Detail");
2304
2421
 
2305
2422
  // src/user/user-job-preferences.schema.ts
2306
- var import_yup31 = require("yup");
2307
- var UserJobPreferencesSchema = (0, import_yup31.object)({
2423
+ var import_yup32 = require("yup");
2424
+ var UserJobPreferencesSchema = (0, import_yup32.object)({
2308
2425
  /**
2309
2426
  * Whether the job seeker is openly signalling availability. Surfaces the
2310
2427
  * "Open to work" badge on the public profile and boosts visibility in
2311
2428
  * recruiter search. Defaults to `false` - users must opt in.
2312
2429
  */
2313
- openToWork: (0, import_yup31.boolean)().default(false).label("Open to Work"),
2430
+ openToWork: (0, import_yup32.boolean)().default(false).label("Open to Work"),
2314
2431
  /**
2315
2432
  * How urgently the user is looking for their next job. Drives match scoring
2316
2433
  * and can downgrade the visibility of expired or low-relevance postings for
2317
2434
  * users in `passively_browsing` mode.
2318
2435
  */
2319
- jobSearchUrgency: (0, import_yup31.string)().oneOf(SupportedJobSearchUrgencies).required().label("Job Search Urgency"),
2436
+ jobSearchUrgency: (0, import_yup32.string)().oneOf(SupportedJobSearchUrgencies).required().label("Job Search Urgency"),
2320
2437
  /**
2321
2438
  * Locations the user wants to work in. Stores the full `LocationSchema`
2322
2439
  * shape (country, city, state, geo, etc.) as returned by the locations
2323
2440
  * autocomplete API.
2324
2441
  */
2325
- jobLocations: (0, import_yup31.array)().of(LocationSchema.required().label("Job Location")).min(1, "Pick at least one preferred location.").required().label("Job Locations"),
2442
+ jobLocations: (0, import_yup32.array)().of(LocationSchema.required().label("Job Location")).min(1, "Pick at least one preferred location.").required().label("Job Locations"),
2326
2443
  /**
2327
2444
  * Seniority levels the user wants jobs to be matched against. Multi-select
2328
2445
  * (up to 2) for borderline candidates.
@@ -2333,7 +2450,7 @@ var UserJobPreferencesSchema = (0, import_yup31.object)({
2333
2450
  * Both reuse the same `ExperienceLevel` taxonomy from `common.constant.ts`
2334
2451
  * so search/match logic doesn't have to translate between two vocabularies.
2335
2452
  */
2336
- targetExperienceLevels: (0, import_yup31.array)().of((0, import_yup31.string)().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"),
2453
+ targetExperienceLevels: (0, import_yup32.array)().of((0, import_yup32.string)().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"),
2337
2454
  /**
2338
2455
  * Specializations the user is searching for - free-form titles.
2339
2456
  *
@@ -2342,19 +2459,19 @@ var UserJobPreferencesSchema = (0, import_yup31.object)({
2342
2459
  * surfaces a curated "Popular Roles" picker for discovery, but the user
2343
2460
  * can ultimately add any title; matching/normalization happens downstream.
2344
2461
  */
2345
- jobRoles: (0, import_yup31.array)().of((0, import_yup31.string)().trim().max(120).required()).min(1, "Pick at least one role.").required().label("Job Roles"),
2462
+ jobRoles: (0, import_yup32.array)().of((0, import_yup32.string)().trim().max(120).required()).min(1, "Pick at least one role.").required().label("Job Roles"),
2346
2463
  /**
2347
2464
  * Minimum acceptable annual base salary, in `minSalaryCurrency`.
2348
2465
  * Stored as an integer in the currency's major unit (e.g. dollars, not cents).
2349
2466
  * Defaults to 0 ("any salary") rather than being optional - every job-seeker
2350
2467
  * has a floor, even if it's zero.
2351
2468
  */
2352
- minSalary: (0, import_yup31.number)().integer().min(MIN_SALARY_LOWER_BOUND).max(MIN_SALARY_UPPER_BOUND).default(0).required().label("Minimum Salary"),
2353
- minSalaryCurrency: (0, import_yup31.string)().oneOf(SupportedSalaryCurrencies).default("USD").required().label("Minimum Salary Currency"),
2469
+ minSalary: (0, import_yup32.number)().integer().min(MIN_SALARY_LOWER_BOUND).max(MIN_SALARY_UPPER_BOUND).default(0).required().label("Minimum Salary"),
2470
+ minSalaryCurrency: (0, import_yup32.string)().oneOf(SupportedSalaryCurrencies).default("USD").required().label("Minimum Salary Currency"),
2354
2471
  /**
2355
2472
  * Marketing-attribution capture from the final onboarding step.
2356
2473
  */
2357
- referralSource: (0, import_yup31.string)().oneOf(SupportedReferralSources).required().label("Referral Source"),
2474
+ referralSource: (0, import_yup32.string)().oneOf(SupportedReferralSources).required().label("Referral Source"),
2358
2475
  /**
2359
2476
  * Resumes the user has uploaded. Embedded directly on the user document
2360
2477
  * (capped at 5) - they're cheap to denormalize, every wizard step that
@@ -2368,25 +2485,25 @@ var UserJobPreferencesSchema = (0, import_yup31.object)({
2368
2485
  * AI resume-builder flow - onboarding uploads land here, AI-built resumes
2369
2486
  * live in their own collection.
2370
2487
  */
2371
- resumes: (0, import_yup31.array)().of(
2372
- (0, import_yup31.object)({
2488
+ resumes: (0, import_yup32.array)().of(
2489
+ (0, import_yup32.object)({
2373
2490
  // Stable id assigned on upload - used to address a specific entry
2374
2491
  // for delete / set-primary operations without exposing the GCS URL
2375
2492
  // as a route key.
2376
- id: (0, import_yup31.string)().required().label("ID"),
2377
- url: (0, import_yup31.string)().required().label("Resume URL"),
2378
- filename: (0, import_yup31.string)().trim().max(255).optional().label("Filename"),
2379
- sizeBytes: (0, import_yup31.number)().integer().min(0).optional().label("Size (bytes)"),
2380
- mimeType: (0, import_yup31.string)().trim().max(120).optional().label("MIME Type"),
2381
- uploadedAt: (0, import_yup31.date)().required().label("Uploaded At"),
2382
- isPrimary: (0, import_yup31.boolean)().default(false).label("Is Primary")
2493
+ id: (0, import_yup32.string)().required().label("ID"),
2494
+ url: (0, import_yup32.string)().required().label("Resume URL"),
2495
+ filename: (0, import_yup32.string)().trim().max(255).optional().label("Filename"),
2496
+ sizeBytes: (0, import_yup32.number)().integer().min(0).optional().label("Size (bytes)"),
2497
+ mimeType: (0, import_yup32.string)().trim().max(120).optional().label("MIME Type"),
2498
+ uploadedAt: (0, import_yup32.date)().required().label("Uploaded At"),
2499
+ isPrimary: (0, import_yup32.boolean)().default(false).label("Is Primary")
2383
2500
  }).noUnknown().strict().label("Resume")
2384
2501
  ).max(5, "You can keep at most 5 resumes on file.").default([]).label("Resumes"),
2385
2502
  /**
2386
2503
  * Set when the user finishes the wizard's last step. Acts as the gate the
2387
2504
  * onboarding hook checks to redirect users who haven't completed setup.
2388
2505
  */
2389
- onboardingCompletedAt: (0, import_yup31.date)().nullable().optional().label("Onboarding Completed At"),
2506
+ onboardingCompletedAt: (0, import_yup32.date)().nullable().optional().label("Onboarding Completed At"),
2390
2507
  /**
2391
2508
  * Parser-suggested values for wizard fields, written by the resume-upload
2392
2509
  * flow. Every parser-derived field lands here - including profile-shaped
@@ -2406,106 +2523,106 @@ var UserJobPreferencesSchema = (0, import_yup31.object)({
2406
2523
  * APIs. If `user.<field>` is empty there, the correct behavior is empty,
2407
2524
  * because the user has not confirmed it yet.
2408
2525
  */
2409
- pendingPrefill: (0, import_yup31.object)({
2410
- headline: (0, import_yup31.string)().trim().optional().label("Pending Headline"),
2411
- aboutMe: (0, import_yup31.string)().trim().optional().label("Pending About Me"),
2412
- mobile: (0, import_yup31.string)().trim().optional().label("Pending Mobile"),
2526
+ pendingPrefill: (0, import_yup32.object)({
2527
+ headline: (0, import_yup32.string)().trim().optional().label("Pending Headline"),
2528
+ aboutMe: (0, import_yup32.string)().trim().optional().label("Pending About Me"),
2529
+ mobile: (0, import_yup32.string)().trim().optional().label("Pending Mobile"),
2413
2530
  location: LocationSchema.optional().default(void 0).label("Pending Location"),
2414
- experienceLevel: (0, import_yup31.string)().oneOf(SupportedExperienceLevels).optional().label("Pending Experience Level"),
2415
- socialAccounts: (0, import_yup31.array)().of(SocialAccountSchema.required()).optional().label("Pending Social Accounts"),
2416
- workExperiences: (0, import_yup31.array)().of(WorkExperienceSchema.required()).optional().label("Pending Work Experiences"),
2417
- educations: (0, import_yup31.array)().of(EducationSchema.required()).optional().label("Pending Educations")
2531
+ experienceLevel: (0, import_yup32.string)().oneOf(SupportedExperienceLevels).optional().label("Pending Experience Level"),
2532
+ socialAccounts: (0, import_yup32.array)().of(SocialAccountSchema.required()).optional().label("Pending Social Accounts"),
2533
+ workExperiences: (0, import_yup32.array)().of(WorkExperienceSchema.required()).optional().label("Pending Work Experiences"),
2534
+ educations: (0, import_yup32.array)().of(EducationSchema.required()).optional().label("Pending Educations")
2418
2535
  }).nullable().optional().default(void 0).label("Pending Prefill")
2419
2536
  }).noUnknown().strict().label("User Job Preferences Schema");
2420
2537
 
2421
2538
  // src/user/user-recruiter-profile.schema.ts
2422
- var import_yup32 = require("yup");
2423
- var RecruiterPageLinkSchema = (0, import_yup32.object)({
2539
+ var import_yup33 = require("yup");
2540
+ var RecruiterPageLinkSchema = (0, import_yup33.object)({
2424
2541
  page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company Page"),
2425
- jobTitle: (0, import_yup32.string)().trim().max(100).optional().label("Job Title")
2542
+ jobTitle: (0, import_yup33.string)().trim().max(100).optional().label("Job Title")
2426
2543
  }).noUnknown().strict().label("Recruiter Page Link");
2427
- var UserRecruiterProfileSchema = (0, import_yup32.object)({
2428
- recruiterProfile: (0, import_yup32.object)({
2429
- hiringFor: (0, import_yup32.array)().of(RecruiterPageLinkSchema).default([]).label("Hiring For")
2544
+ var UserRecruiterProfileSchema = (0, import_yup33.object)({
2545
+ recruiterProfile: (0, import_yup33.object)({
2546
+ hiringFor: (0, import_yup33.array)().of(RecruiterPageLinkSchema).default([]).label("Hiring For")
2430
2547
  }).optional().default(void 0).label("Recruiter Profile")
2431
2548
  }).noUnknown().strict().label("User Recruiter Profile");
2432
2549
 
2433
2550
  // src/user/user-coordinator-profile.schema.ts
2434
- var import_yup33 = require("yup");
2435
- var CoordinatorPageLinkSchema = (0, import_yup33.object)({
2551
+ var import_yup34 = require("yup");
2552
+ var CoordinatorPageLinkSchema = (0, import_yup34.object)({
2436
2553
  page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute Page"),
2437
- jobTitle: (0, import_yup33.string)().trim().max(100).optional().label("Job Title")
2554
+ jobTitle: (0, import_yup34.string)().trim().max(100).optional().label("Job Title")
2438
2555
  }).noUnknown().strict().label("Coordinator Page Link");
2439
- var UserCoordinatorProfileSchema = (0, import_yup33.object)({
2440
- coordinatorProfile: (0, import_yup33.object)({
2441
- coordinatesAt: (0, import_yup33.array)().of(CoordinatorPageLinkSchema).default([]).label("Coordinates At")
2556
+ var UserCoordinatorProfileSchema = (0, import_yup34.object)({
2557
+ coordinatorProfile: (0, import_yup34.object)({
2558
+ coordinatesAt: (0, import_yup34.array)().of(CoordinatorPageLinkSchema).default([]).label("Coordinates At")
2442
2559
  }).optional().default(void 0).label("Coordinator Profile")
2443
2560
  }).noUnknown().strict().label("User Coordinator Profile");
2444
2561
 
2445
2562
  // src/user/user.schema.ts
2446
- var UserSchema = (0, import_yup34.object)({
2563
+ var UserSchema = (0, import_yup35.object)({
2447
2564
  /**
2448
2565
  * Related auth account id from auth Server (e.g. Better auth https://auth.thejob.dev)
2449
2566
  */
2450
- authAccountId: (0, import_yup34.string)().required().label("Auth Account ID"),
2567
+ authAccountId: (0, import_yup35.string)().required().label("Auth Account ID"),
2451
2568
  /**
2452
2569
  * Social media information about the user (e.g. LinkedIn, GitHub, etc.)
2453
2570
  */
2454
- socialAccounts: (0, import_yup34.array)().of(SocialAccountSchema).default([]).label("Social Accounts"),
2571
+ socialAccounts: (0, import_yup35.array)().of(SocialAccountSchema).default([]).label("Social Accounts"),
2455
2572
  /**
2456
2573
  * Work experience information about the user
2457
2574
  */
2458
- workExperiences: (0, import_yup34.array)().of(WorkExperienceSchema).required().default([]).label("Work Experiences"),
2575
+ workExperiences: (0, import_yup35.array)().of(WorkExperienceSchema).required().default([]).label("Work Experiences"),
2459
2576
  /**
2460
2577
  * Education information about the user
2461
2578
  */
2462
- educations: (0, import_yup34.array)().of(EducationSchema).required().default([]).label("Educations"),
2579
+ educations: (0, import_yup35.array)().of(EducationSchema).required().default([]).label("Educations"),
2463
2580
  /**
2464
2581
  * Skills information about the user
2465
2582
  */
2466
- skills: (0, import_yup34.array)().of(UserSkillSchema).required().default([]).label("Skills"),
2583
+ skills: (0, import_yup35.array)().of(UserSkillSchema).required().default([]).label("Skills"),
2467
2584
  /**
2468
2585
  * Projects information about the user
2469
2586
  */
2470
- projects: (0, import_yup34.array)().of(UserProjectSchema).default([]).label("Projects"),
2587
+ projects: (0, import_yup35.array)().of(UserProjectSchema).default([]).label("Projects"),
2471
2588
  /**
2472
2589
  * Certifications information about the user
2473
2590
  */
2474
- certifications: (0, import_yup34.array)().of(UserCertificationSchema).default([]).label("Certifications"),
2591
+ certifications: (0, import_yup35.array)().of(UserCertificationSchema).default([]).label("Certifications"),
2475
2592
  /**
2476
2593
  * Interests information about the user.
2477
2594
  */
2478
- interests: (0, import_yup34.array)().of(UserInterestSchema).optional().default([]).label("Interests"),
2595
+ interests: (0, import_yup35.array)().of(UserInterestSchema).optional().default([]).label("Interests"),
2479
2596
  /**
2480
2597
  * Languages information about the user
2481
2598
  */
2482
- languages: (0, import_yup34.array)().of(UserLanguageSchema).required().default([]).label("Languages"),
2599
+ languages: (0, import_yup35.array)().of(UserLanguageSchema).required().default([]).label("Languages"),
2483
2600
  /**
2484
2601
  * Additional information about the user
2485
2602
  */
2486
- additionalInfo: (0, import_yup34.array)().of(UserAdditionalInfoSchema).default([]).label("Additional Information"),
2603
+ additionalInfo: (0, import_yup35.array)().of(UserAdditionalInfoSchema).default([]).label("Additional Information"),
2487
2604
  /**
2488
2605
  * Status of the user account
2489
2606
  */
2490
- status: (0, import_yup34.string)().oneOf(SupportedUserStatuses).required().label("Status"),
2607
+ status: (0, import_yup35.string)().oneOf(SupportedUserStatuses).required().label("Status"),
2491
2608
  /**
2492
2609
  * Roles assigned to the user
2493
2610
  */
2494
- roles: (0, import_yup34.array)().of((0, import_yup34.string)().oneOf(SupportedUserRoles)).required().default(DefaultUserRoles).label("Roles"),
2611
+ roles: (0, import_yup35.array)().of((0, import_yup35.string)().oneOf(SupportedUserRoles)).required().default(DefaultUserRoles).label("Roles"),
2495
2612
  /**
2496
2613
  * Vector embedding of the user's profile for semantic/hybrid search.
2497
2614
  * Generated from a structured summary of skills, experience, education, etc.
2498
2615
  * Only generated for public profiles with sufficient completeness (≥60%).
2499
2616
  */
2500
- embedding: (0, import_yup34.object)({
2501
- vector: (0, import_yup34.array)((0, import_yup34.number)().required()).optional().label("Embedding vector"),
2502
- model: (0, import_yup34.string)().optional().label("Embedding model")
2617
+ embedding: (0, import_yup35.object)({
2618
+ vector: (0, import_yup35.array)((0, import_yup35.number)().required()).optional().label("Embedding vector"),
2619
+ model: (0, import_yup35.string)().optional().label("Embedding model")
2503
2620
  }).nullable().optional().label("Embedding")
2504
2621
  }).concat(UserGeneralDetailSchema).concat(UserJobPreferencesSchema).concat(UserRecruiterProfileSchema).concat(UserCoordinatorProfileSchema).noUnknown().strict().label("User Schema");
2505
2622
 
2506
2623
  // src/user/user-completeness.schema.ts
2507
- var import_yup35 = require("yup");
2508
- var UserCompletenessSchema = (0, import_yup35.object)({
2624
+ var import_yup36 = require("yup");
2625
+ var UserCompletenessSchema = (0, import_yup36.object)({
2509
2626
  additionalInfo: CompletenessScoreSchema(0).label("Additional Info"),
2510
2627
  // Optional
2511
2628
  certifications: CompletenessScoreSchema(0).label("Certifications"),
@@ -2530,6 +2647,8 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
2530
2647
  0 && (module.exports = {
2531
2648
  AnswerChoiceType,
2532
2649
  ApplicationReceivePreference,
2650
+ CampaignSchema,
2651
+ CampaignStatus,
2533
2652
  ChoiceQuestionSchema,
2534
2653
  Common,
2535
2654
  CompensationType,
@@ -2566,9 +2685,13 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
2566
2685
  JobSearchUrgency,
2567
2686
  JobStatus,
2568
2687
  JobSubCategory,
2688
+ ListFilterSchema,
2569
2689
  LocationSchema,
2570
2690
  MIN_SALARY_LOWER_BOUND,
2571
2691
  MIN_SALARY_UPPER_BOUND,
2692
+ MailingListSchema,
2693
+ PREFILL_MIRRORED_KEYS,
2694
+ PRIVATE_PROFILE_FIELDS,
2572
2695
  PageSchema,
2573
2696
  PageStatus,
2574
2697
  PageType,
@@ -2593,6 +2716,7 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
2593
2716
  StudyType,
2594
2717
  SupportedAnswerChoiceTypes,
2595
2718
  SupportedApplicationReceivePreferences,
2719
+ SupportedCampaignStatuses,
2596
2720
  SupportedCompensationTypes,
2597
2721
  SupportedContactTypes,
2598
2722
  SupportedEducationLevels,