@thejob/schema 2.0.8 → 2.0.10

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,11 @@ __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,
74
78
  PREFILL_MIRRORED_KEYS: () => PREFILL_MIRRORED_KEYS,
75
79
  PRIVATE_PROFILE_FIELDS: () => PRIVATE_PROFILE_FIELDS,
76
80
  PageSchema: () => PageSchema,
@@ -97,6 +101,7 @@ __export(index_exports, {
97
101
  StudyType: () => StudyType,
98
102
  SupportedAnswerChoiceTypes: () => SupportedAnswerChoiceTypes,
99
103
  SupportedApplicationReceivePreferences: () => SupportedApplicationReceivePreferences,
104
+ SupportedCampaignStatuses: () => SupportedCampaignStatuses,
100
105
  SupportedCompensationTypes: () => SupportedCompensationTypes,
101
106
  SupportedContactTypes: () => SupportedContactTypes,
102
107
  SupportedEducationLevels: () => SupportedEducationLevels,
@@ -2057,63 +2062,8 @@ var PostSchema = (0, import_yup19.object)({
2057
2062
  status: (0, import_yup19.string)().oneOf(SupportedPostStatuses).default("draft" /* Draft */).required().label("Status")
2058
2063
  }).concat(DbDefaultSchema).noUnknown().label("Post");
2059
2064
 
2060
- // src/pagination/pagination.schema.ts
2065
+ // src/marketing/marketing.schema.ts
2061
2066
  var import_yup20 = require("yup");
2062
- var PaginationSchema = (0, import_yup20.object)().shape({
2063
- page: (0, import_yup20.number)().required().min(1).label("Page").default(1),
2064
- limit: (0, import_yup20.number)().required().min(1).max(100).label("Limit").default(10),
2065
- sortBy: (0, import_yup20.string)().notOneOf([""]).optional().label("SortBy"),
2066
- nextPage: (0, import_yup20.string)().optional().label("Next Page Token"),
2067
- prevPage: (0, import_yup20.string)().optional().label("Previous Page Token"),
2068
- sortDirection: (0, import_yup20.string)().oneOf(["asc", "desc"]).optional().label("Sort Direction")
2069
- });
2070
-
2071
- // src/pagination/pagination.constant.ts
2072
- var DefaultPaginatedResponse = {
2073
- results: [],
2074
- total: 0,
2075
- page: 1,
2076
- limit: 10
2077
- };
2078
- var DefaultPaginationOptions = {
2079
- page: 1,
2080
- limit: 10
2081
- };
2082
-
2083
- // src/report/report.schema.ts
2084
- var import_yup21 = require("yup");
2085
-
2086
- // src/report/report.constant.ts
2087
- var ResourceType = /* @__PURE__ */ ((ResourceType3) => {
2088
- ResourceType3["Job"] = "job";
2089
- ResourceType3["User"] = "user";
2090
- ResourceType3["Resume"] = "resume";
2091
- ResourceType3["Company"] = "company";
2092
- return ResourceType3;
2093
- })(ResourceType || {});
2094
- var SupportedResourceTypes = Object.values(ResourceType);
2095
- var ReportReason = /* @__PURE__ */ ((ReportReason3) => {
2096
- ReportReason3["OffensiveOrHarassing"] = "offensive_or_harassing";
2097
- ReportReason3["JobExpired"] = "job_expired";
2098
- ReportReason3["AskingMoney"] = "asking_money";
2099
- ReportReason3["FakeJob"] = "fake_job";
2100
- ReportReason3["IncorrectJobDetails"] = "incorrect_job_details";
2101
- ReportReason3["SellingSomething"] = "selling_something";
2102
- ReportReason3["Other"] = "other";
2103
- return ReportReason3;
2104
- })(ReportReason || {});
2105
- var SupportedReportReasons = Object.values(ReportReason);
2106
-
2107
- // src/report/report.schema.ts
2108
- var ReportSchema = (0, import_yup21.object)({
2109
- type: (0, import_yup21.mixed)().oneOf(SupportedResourceTypes).required().label("Type"),
2110
- resourceId: (0, import_yup21.string)().required().label("Resource ID"),
2111
- reason: (0, import_yup21.mixed)().oneOf(SupportedReportReasons).required("Please choose a reason").label("Reason"),
2112
- comment: (0, import_yup21.string)().max(1e3).optional().label("Comment")
2113
- }).label("Report Schema");
2114
-
2115
- // src/user/user.schema.ts
2116
- var import_yup34 = require("yup");
2117
2067
 
2118
2068
  // src/user/user.constant.ts
2119
2069
  var UserRole = /* @__PURE__ */ ((UserRole2) => {
@@ -2210,52 +2160,201 @@ var PRIVATE_PROFILE_FIELDS = [
2210
2160
  "additionalInfo"
2211
2161
  ];
2212
2162
 
2213
- // 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
2214
2278
  var import_yup22 = require("yup");
2215
- 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({
2216
2315
  company: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company"),
2217
- designation: (0, import_yup22.string)().trim().required().label("Designation"),
2316
+ designation: (0, import_yup23.string)().trim().required().label("Designation"),
2218
2317
  duration: DurationSchema({
2219
2318
  format: "YYYY-MM",
2220
2319
  startLabel: "Start Date",
2221
2320
  endLabel: "End Date"
2222
2321
  }).required().label("Duration"),
2223
- description: (0, import_yup22.string)().trim().max(3e3).optional().label("Description"),
2322
+ description: (0, import_yup23.string)().trim().max(3e3).optional().label("Description"),
2224
2323
  location: LocationSchema.required().label("Location"),
2225
- 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")
2226
2325
  }).noUnknown().strict().label("Work Experience");
2227
2326
 
2228
2327
  // src/user/education.schema.ts
2229
- var import_yup23 = require("yup");
2230
- var EducationSchema = (0, import_yup23.object)({
2328
+ var import_yup24 = require("yup");
2329
+ var EducationSchema = (0, import_yup24.object)({
2231
2330
  institute: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute"),
2232
- course: (0, import_yup23.string)().trim().required().label("Course"),
2233
- 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"),
2234
2333
  duration: DurationSchema({
2235
2334
  format: "YYYY-MM",
2236
2335
  startLabel: "Start Date",
2237
2336
  endLabel: "End Date"
2238
2337
  }).required().label("Duration"),
2239
- description: (0, import_yup23.string)().trim().max(3e3).optional().label("Description"),
2240
- 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"),
2241
2340
  location: LocationSchema.required().label("Location"),
2242
- 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")
2243
2342
  }).noUnknown().strict().label("Education");
2244
2343
 
2245
2344
  // src/user/user-skill.schema.ts
2246
- var import_yup24 = require("yup");
2247
- var UserSkillSchema = (0, import_yup24.object)({
2248
- name: (0, import_yup24.string)().required().label("Name"),
2249
- 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"),
2250
2349
  lastUsed: dateString().format("YYYY-MM").nullable().optional().label("Last Used")
2251
2350
  }).noUnknown().strict().label("Skill");
2252
2351
 
2253
2352
  // src/user/project.schema.ts
2254
- var import_yup25 = require("yup");
2255
- var UserProjectSchema = (0, import_yup25.object)({
2256
- name: (0, import_yup25.string)().trim().max(50).required().label("Name"),
2257
- url: (0, import_yup25.string)().optional().label("URL"),
2258
- 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"),
2259
2358
  duration: DurationSchema({
2260
2359
  format: "YYYY-MM",
2261
2360
  startLabel: "Start Date",
@@ -2264,83 +2363,83 @@ var UserProjectSchema = (0, import_yup25.object)({
2264
2363
  }).noUnknown().strict().label("Project");
2265
2364
 
2266
2365
  // src/user/user-certification.schema.ts
2267
- var import_yup26 = require("yup");
2268
- var UserCertificationSchema = (0, import_yup26.object)({
2269
- 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"),
2270
2369
  // TODO: Add validation for authority
2271
- authority: (0, import_yup26.string)().trim().max(100).required().label("Authority"),
2272
- 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"),
2273
2372
  duration: DurationSchema({
2274
2373
  format: "YYYY-MM",
2275
2374
  startLabel: "Start Date",
2276
2375
  endLabel: "End Date"
2277
2376
  }).optional().nullable().label("Duration"),
2278
- url: (0, import_yup26.string)().optional().label("URL")
2377
+ url: (0, import_yup27.string)().optional().label("URL")
2279
2378
  }).noUnknown().strict().label("Certification");
2280
2379
 
2281
2380
  // src/user/user-interest.schema.ts
2282
- var import_yup27 = require("yup");
2283
- 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");
2284
2383
 
2285
2384
  // src/user/user-language.schema.ts
2286
- var import_yup28 = require("yup");
2287
- var UserLanguageSchema = (0, import_yup28.object)({
2288
- name: (0, import_yup28.string)().trim().required().label("Name"),
2289
- 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")
2290
2389
  }).noUnknown().strict().label("Language");
2291
2390
 
2292
2391
  // src/user/user-additional-info.schema.ts
2293
- var import_yup29 = require("yup");
2294
- var UserAdditionalInfoSchema = (0, import_yup29.object)({
2295
- title: (0, import_yup29.string)().trim().max(60).required().label("Title"),
2296
- 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")
2297
2396
  }).noUnknown().strict().label("User Additional Info");
2298
2397
 
2299
2398
  // src/user/general-detail.schema.ts
2300
- var import_yup30 = require("yup");
2301
- var UserGeneralDetailSchema = (0, import_yup30.object)({
2302
- id: (0, import_yup30.string)().optional().label("ID"),
2303
- name: (0, import_yup30.object)().shape({
2304
- first: (0, import_yup30.string)().trim().max(50).required().label("First Name"),
2305
- 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")
2306
2405
  }).required().label("Name"),
2307
- headline: (0, import_yup30.string)().trim().max(200).optional().label("Headline"),
2308
- image: (0, import_yup30.string)().optional().label("Image"),
2309
- aboutMe: (0, import_yup30.string)().trim().max(3e3).optional().label("About Me"),
2310
- email: (0, import_yup30.string)().required().label("Email"),
2311
- mobile: (0, import_yup30.string)().nullable().optional().label("Mobile"),
2312
- emailVerified: (0, import_yup30.string)().nullable().optional().label("Email Verified"),
2313
- mobileVerified: (0, import_yup30.string)().nullable().optional().label("Mobile Verified"),
2314
- 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"),
2315
2414
  location: LocationSchema.required().label("Location"),
2316
- region: (0, import_yup30.object)().shape({
2317
- country: (0, import_yup30.string)().trim().required().label("Region Country"),
2318
- 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")
2319
2418
  }).optional().default(void 0).label("Region"),
2320
- 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")
2321
2420
  }).noUnknown().strict().label("General Detail");
2322
2421
 
2323
2422
  // src/user/user-job-preferences.schema.ts
2324
- var import_yup31 = require("yup");
2325
- var UserJobPreferencesSchema = (0, import_yup31.object)({
2423
+ var import_yup32 = require("yup");
2424
+ var UserJobPreferencesSchema = (0, import_yup32.object)({
2326
2425
  /**
2327
2426
  * Whether the job seeker is openly signalling availability. Surfaces the
2328
2427
  * "Open to work" badge on the public profile and boosts visibility in
2329
2428
  * recruiter search. Defaults to `false` - users must opt in.
2330
2429
  */
2331
- openToWork: (0, import_yup31.boolean)().default(false).label("Open to Work"),
2430
+ openToWork: (0, import_yup32.boolean)().default(false).label("Open to Work"),
2332
2431
  /**
2333
2432
  * How urgently the user is looking for their next job. Drives match scoring
2334
2433
  * and can downgrade the visibility of expired or low-relevance postings for
2335
2434
  * users in `passively_browsing` mode.
2336
2435
  */
2337
- 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"),
2338
2437
  /**
2339
2438
  * Locations the user wants to work in. Stores the full `LocationSchema`
2340
2439
  * shape (country, city, state, geo, etc.) as returned by the locations
2341
2440
  * autocomplete API.
2342
2441
  */
2343
- 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"),
2344
2443
  /**
2345
2444
  * Seniority levels the user wants jobs to be matched against. Multi-select
2346
2445
  * (up to 2) for borderline candidates.
@@ -2351,7 +2450,7 @@ var UserJobPreferencesSchema = (0, import_yup31.object)({
2351
2450
  * Both reuse the same `ExperienceLevel` taxonomy from `common.constant.ts`
2352
2451
  * so search/match logic doesn't have to translate between two vocabularies.
2353
2452
  */
2354
- 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"),
2355
2454
  /**
2356
2455
  * Specializations the user is searching for - free-form titles.
2357
2456
  *
@@ -2360,19 +2459,19 @@ var UserJobPreferencesSchema = (0, import_yup31.object)({
2360
2459
  * surfaces a curated "Popular Roles" picker for discovery, but the user
2361
2460
  * can ultimately add any title; matching/normalization happens downstream.
2362
2461
  */
2363
- 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"),
2364
2463
  /**
2365
2464
  * Minimum acceptable annual base salary, in `minSalaryCurrency`.
2366
2465
  * Stored as an integer in the currency's major unit (e.g. dollars, not cents).
2367
2466
  * Defaults to 0 ("any salary") rather than being optional - every job-seeker
2368
2467
  * has a floor, even if it's zero.
2369
2468
  */
2370
- minSalary: (0, import_yup31.number)().integer().min(MIN_SALARY_LOWER_BOUND).max(MIN_SALARY_UPPER_BOUND).default(0).required().label("Minimum Salary"),
2371
- 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"),
2372
2471
  /**
2373
2472
  * Marketing-attribution capture from the final onboarding step.
2374
2473
  */
2375
- referralSource: (0, import_yup31.string)().oneOf(SupportedReferralSources).required().label("Referral Source"),
2474
+ referralSource: (0, import_yup32.string)().oneOf(SupportedReferralSources).required().label("Referral Source"),
2376
2475
  /**
2377
2476
  * Resumes the user has uploaded. Embedded directly on the user document
2378
2477
  * (capped at 5) - they're cheap to denormalize, every wizard step that
@@ -2386,25 +2485,25 @@ var UserJobPreferencesSchema = (0, import_yup31.object)({
2386
2485
  * AI resume-builder flow - onboarding uploads land here, AI-built resumes
2387
2486
  * live in their own collection.
2388
2487
  */
2389
- resumes: (0, import_yup31.array)().of(
2390
- (0, import_yup31.object)({
2488
+ resumes: (0, import_yup32.array)().of(
2489
+ (0, import_yup32.object)({
2391
2490
  // Stable id assigned on upload - used to address a specific entry
2392
2491
  // for delete / set-primary operations without exposing the GCS URL
2393
2492
  // as a route key.
2394
- id: (0, import_yup31.string)().required().label("ID"),
2395
- url: (0, import_yup31.string)().required().label("Resume URL"),
2396
- filename: (0, import_yup31.string)().trim().max(255).optional().label("Filename"),
2397
- sizeBytes: (0, import_yup31.number)().integer().min(0).optional().label("Size (bytes)"),
2398
- mimeType: (0, import_yup31.string)().trim().max(120).optional().label("MIME Type"),
2399
- uploadedAt: (0, import_yup31.date)().required().label("Uploaded At"),
2400
- 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")
2401
2500
  }).noUnknown().strict().label("Resume")
2402
2501
  ).max(5, "You can keep at most 5 resumes on file.").default([]).label("Resumes"),
2403
2502
  /**
2404
2503
  * Set when the user finishes the wizard's last step. Acts as the gate the
2405
2504
  * onboarding hook checks to redirect users who haven't completed setup.
2406
2505
  */
2407
- onboardingCompletedAt: (0, import_yup31.date)().nullable().optional().label("Onboarding Completed At"),
2506
+ onboardingCompletedAt: (0, import_yup32.date)().nullable().optional().label("Onboarding Completed At"),
2408
2507
  /**
2409
2508
  * Parser-suggested values for wizard fields, written by the resume-upload
2410
2509
  * flow. Every parser-derived field lands here - including profile-shaped
@@ -2424,106 +2523,106 @@ var UserJobPreferencesSchema = (0, import_yup31.object)({
2424
2523
  * APIs. If `user.<field>` is empty there, the correct behavior is empty,
2425
2524
  * because the user has not confirmed it yet.
2426
2525
  */
2427
- pendingPrefill: (0, import_yup31.object)({
2428
- headline: (0, import_yup31.string)().trim().optional().label("Pending Headline"),
2429
- aboutMe: (0, import_yup31.string)().trim().optional().label("Pending About Me"),
2430
- 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"),
2431
2530
  location: LocationSchema.optional().default(void 0).label("Pending Location"),
2432
- experienceLevel: (0, import_yup31.string)().oneOf(SupportedExperienceLevels).optional().label("Pending Experience Level"),
2433
- socialAccounts: (0, import_yup31.array)().of(SocialAccountSchema.required()).optional().label("Pending Social Accounts"),
2434
- workExperiences: (0, import_yup31.array)().of(WorkExperienceSchema.required()).optional().label("Pending Work Experiences"),
2435
- 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")
2436
2535
  }).nullable().optional().default(void 0).label("Pending Prefill")
2437
2536
  }).noUnknown().strict().label("User Job Preferences Schema");
2438
2537
 
2439
2538
  // src/user/user-recruiter-profile.schema.ts
2440
- var import_yup32 = require("yup");
2441
- var RecruiterPageLinkSchema = (0, import_yup32.object)({
2539
+ var import_yup33 = require("yup");
2540
+ var RecruiterPageLinkSchema = (0, import_yup33.object)({
2442
2541
  page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company Page"),
2443
- 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")
2444
2543
  }).noUnknown().strict().label("Recruiter Page Link");
2445
- var UserRecruiterProfileSchema = (0, import_yup32.object)({
2446
- recruiterProfile: (0, import_yup32.object)({
2447
- 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")
2448
2547
  }).optional().default(void 0).label("Recruiter Profile")
2449
2548
  }).noUnknown().strict().label("User Recruiter Profile");
2450
2549
 
2451
2550
  // src/user/user-coordinator-profile.schema.ts
2452
- var import_yup33 = require("yup");
2453
- var CoordinatorPageLinkSchema = (0, import_yup33.object)({
2551
+ var import_yup34 = require("yup");
2552
+ var CoordinatorPageLinkSchema = (0, import_yup34.object)({
2454
2553
  page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute Page"),
2455
- 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")
2456
2555
  }).noUnknown().strict().label("Coordinator Page Link");
2457
- var UserCoordinatorProfileSchema = (0, import_yup33.object)({
2458
- coordinatorProfile: (0, import_yup33.object)({
2459
- 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")
2460
2559
  }).optional().default(void 0).label("Coordinator Profile")
2461
2560
  }).noUnknown().strict().label("User Coordinator Profile");
2462
2561
 
2463
2562
  // src/user/user.schema.ts
2464
- var UserSchema = (0, import_yup34.object)({
2563
+ var UserSchema = (0, import_yup35.object)({
2465
2564
  /**
2466
2565
  * Related auth account id from auth Server (e.g. Better auth https://auth.thejob.dev)
2467
2566
  */
2468
- authAccountId: (0, import_yup34.string)().required().label("Auth Account ID"),
2567
+ authAccountId: (0, import_yup35.string)().required().label("Auth Account ID"),
2469
2568
  /**
2470
2569
  * Social media information about the user (e.g. LinkedIn, GitHub, etc.)
2471
2570
  */
2472
- socialAccounts: (0, import_yup34.array)().of(SocialAccountSchema).default([]).label("Social Accounts"),
2571
+ socialAccounts: (0, import_yup35.array)().of(SocialAccountSchema).default([]).label("Social Accounts"),
2473
2572
  /**
2474
2573
  * Work experience information about the user
2475
2574
  */
2476
- 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"),
2477
2576
  /**
2478
2577
  * Education information about the user
2479
2578
  */
2480
- educations: (0, import_yup34.array)().of(EducationSchema).required().default([]).label("Educations"),
2579
+ educations: (0, import_yup35.array)().of(EducationSchema).required().default([]).label("Educations"),
2481
2580
  /**
2482
2581
  * Skills information about the user
2483
2582
  */
2484
- skills: (0, import_yup34.array)().of(UserSkillSchema).required().default([]).label("Skills"),
2583
+ skills: (0, import_yup35.array)().of(UserSkillSchema).required().default([]).label("Skills"),
2485
2584
  /**
2486
2585
  * Projects information about the user
2487
2586
  */
2488
- projects: (0, import_yup34.array)().of(UserProjectSchema).default([]).label("Projects"),
2587
+ projects: (0, import_yup35.array)().of(UserProjectSchema).default([]).label("Projects"),
2489
2588
  /**
2490
2589
  * Certifications information about the user
2491
2590
  */
2492
- certifications: (0, import_yup34.array)().of(UserCertificationSchema).default([]).label("Certifications"),
2591
+ certifications: (0, import_yup35.array)().of(UserCertificationSchema).default([]).label("Certifications"),
2493
2592
  /**
2494
2593
  * Interests information about the user.
2495
2594
  */
2496
- interests: (0, import_yup34.array)().of(UserInterestSchema).optional().default([]).label("Interests"),
2595
+ interests: (0, import_yup35.array)().of(UserInterestSchema).optional().default([]).label("Interests"),
2497
2596
  /**
2498
2597
  * Languages information about the user
2499
2598
  */
2500
- languages: (0, import_yup34.array)().of(UserLanguageSchema).required().default([]).label("Languages"),
2599
+ languages: (0, import_yup35.array)().of(UserLanguageSchema).required().default([]).label("Languages"),
2501
2600
  /**
2502
2601
  * Additional information about the user
2503
2602
  */
2504
- additionalInfo: (0, import_yup34.array)().of(UserAdditionalInfoSchema).default([]).label("Additional Information"),
2603
+ additionalInfo: (0, import_yup35.array)().of(UserAdditionalInfoSchema).default([]).label("Additional Information"),
2505
2604
  /**
2506
2605
  * Status of the user account
2507
2606
  */
2508
- status: (0, import_yup34.string)().oneOf(SupportedUserStatuses).required().label("Status"),
2607
+ status: (0, import_yup35.string)().oneOf(SupportedUserStatuses).required().label("Status"),
2509
2608
  /**
2510
2609
  * Roles assigned to the user
2511
2610
  */
2512
- 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"),
2513
2612
  /**
2514
2613
  * Vector embedding of the user's profile for semantic/hybrid search.
2515
2614
  * Generated from a structured summary of skills, experience, education, etc.
2516
2615
  * Only generated for public profiles with sufficient completeness (≥60%).
2517
2616
  */
2518
- embedding: (0, import_yup34.object)({
2519
- vector: (0, import_yup34.array)((0, import_yup34.number)().required()).optional().label("Embedding vector"),
2520
- 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")
2521
2620
  }).nullable().optional().label("Embedding")
2522
2621
  }).concat(UserGeneralDetailSchema).concat(UserJobPreferencesSchema).concat(UserRecruiterProfileSchema).concat(UserCoordinatorProfileSchema).noUnknown().strict().label("User Schema");
2523
2622
 
2524
2623
  // src/user/user-completeness.schema.ts
2525
- var import_yup35 = require("yup");
2526
- var UserCompletenessSchema = (0, import_yup35.object)({
2624
+ var import_yup36 = require("yup");
2625
+ var UserCompletenessSchema = (0, import_yup36.object)({
2527
2626
  additionalInfo: CompletenessScoreSchema(0).label("Additional Info"),
2528
2627
  // Optional
2529
2628
  certifications: CompletenessScoreSchema(0).label("Certifications"),
@@ -2548,6 +2647,8 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
2548
2647
  0 && (module.exports = {
2549
2648
  AnswerChoiceType,
2550
2649
  ApplicationReceivePreference,
2650
+ CampaignSchema,
2651
+ CampaignStatus,
2551
2652
  ChoiceQuestionSchema,
2552
2653
  Common,
2553
2654
  CompensationType,
@@ -2584,9 +2685,11 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
2584
2685
  JobSearchUrgency,
2585
2686
  JobStatus,
2586
2687
  JobSubCategory,
2688
+ ListFilterSchema,
2587
2689
  LocationSchema,
2588
2690
  MIN_SALARY_LOWER_BOUND,
2589
2691
  MIN_SALARY_UPPER_BOUND,
2692
+ MailingListSchema,
2590
2693
  PREFILL_MIRRORED_KEYS,
2591
2694
  PRIVATE_PROFILE_FIELDS,
2592
2695
  PageSchema,
@@ -2613,6 +2716,7 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
2613
2716
  StudyType,
2614
2717
  SupportedAnswerChoiceTypes,
2615
2718
  SupportedApplicationReceivePreferences,
2719
+ SupportedCampaignStatuses,
2616
2720
  SupportedCompensationTypes,
2617
2721
  SupportedContactTypes,
2618
2722
  SupportedEducationLevels,