@thejob/schema 2.4.1 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +6 -0
- package/dist/index.cjs +634 -148
- package/dist/index.d.cts +592 -1
- package/dist/index.d.ts +592 -1
- package/dist/index.js +587 -146
- package/package.json +1 -1
- package/src/index.ts +11 -0
- package/src/marketing/marketing.schema.ts +17 -0
- package/src/taxonomy/taxonomy-filter.schema.ts +84 -0
- package/src/taxonomy/taxonomy.constant.ts +127 -0
- package/src/taxonomy/taxonomy.schema.ts +404 -0
package/dist/index.cjs
CHANGED
|
@@ -32,10 +32,14 @@ var index_exports = {};
|
|
|
32
32
|
__export(index_exports, {
|
|
33
33
|
AnswerChoiceType: () => AnswerChoiceType,
|
|
34
34
|
ApplicationReceivePreference: () => ApplicationReceivePreference,
|
|
35
|
+
AuditFilterSchema: () => AuditFilterSchema,
|
|
36
|
+
AuditSchema: () => AuditSchema,
|
|
35
37
|
BillingPeriod: () => BillingPeriod,
|
|
36
38
|
BillingSubscriptionSchema: () => BillingSubscriptionSchema,
|
|
37
39
|
BillingTransactionSchema: () => BillingTransactionSchema,
|
|
38
40
|
CAMPAIGN_MAX_RECIPIENTS_CEILING: () => CAMPAIGN_MAX_RECIPIENTS_CEILING,
|
|
41
|
+
CONCEPT_ID_PATTERN: () => CONCEPT_ID_PATTERN,
|
|
42
|
+
CONCEPT_TYPE_PATTERN: () => CONCEPT_TYPE_PATTERN,
|
|
39
43
|
CONSUME_MAX_UNITS: () => CONSUME_MAX_UNITS,
|
|
40
44
|
CampaignDataSourceSchema: () => CampaignDataSourceSchema,
|
|
41
45
|
CampaignEndKind: () => CampaignEndKind,
|
|
@@ -51,6 +55,11 @@ __export(index_exports, {
|
|
|
51
55
|
Common: () => Common,
|
|
52
56
|
CompensationType: () => CompensationType,
|
|
53
57
|
CompletenessScoreSchema: () => CompletenessScoreSchema,
|
|
58
|
+
ConceptFilterSchema: () => ConceptFilterSchema,
|
|
59
|
+
ConceptMembershipSchema: () => ConceptMembershipSchema,
|
|
60
|
+
ConceptProposalFilterSchema: () => ConceptProposalFilterSchema,
|
|
61
|
+
ConceptProposalSchema: () => ConceptProposalSchema,
|
|
62
|
+
ConceptSchema: () => ConceptSchema,
|
|
54
63
|
ContactTypes: () => ContactTypes,
|
|
55
64
|
CoordinatorPageLinkSchema: () => CoordinatorPageLinkSchema,
|
|
56
65
|
CountryFilterSchema: () => CountryFilterSchema,
|
|
@@ -116,6 +125,7 @@ __export(index_exports, {
|
|
|
116
125
|
MailingListFilterSchema: () => MailingListFilterSchema,
|
|
117
126
|
MailingListSchema: () => MailingListSchema,
|
|
118
127
|
MoneySchema: () => MoneySchema,
|
|
128
|
+
NormalizeContextSchema: () => NormalizeContextSchema,
|
|
119
129
|
NotificationType: () => NotificationType,
|
|
120
130
|
OccurrenceStatus: () => OccurrenceStatus,
|
|
121
131
|
PREFILL_MIRRORED_KEYS: () => PREFILL_MIRRORED_KEYS,
|
|
@@ -135,6 +145,8 @@ __export(index_exports, {
|
|
|
135
145
|
PostSchema: () => PostSchema,
|
|
136
146
|
PostStatus: () => PostStatus,
|
|
137
147
|
ProficiencyLevel: () => ProficiencyLevel,
|
|
148
|
+
ProposalCandidateSchema: () => ProposalCandidateSchema,
|
|
149
|
+
ProposalMessageSchema: () => ProposalMessageSchema,
|
|
138
150
|
PushSubscriptionSchema: () => PushSubscriptionSchema,
|
|
139
151
|
QuestionSchema: () => QuestionSchema,
|
|
140
152
|
QuestionType: () => QuestionType,
|
|
@@ -142,9 +154,15 @@ __export(index_exports, {
|
|
|
142
154
|
ReadAndAcknowledgeQuestionSchema: () => ReadAndAcknowledgeQuestionSchema,
|
|
143
155
|
RecruiterPageLinkSchema: () => RecruiterPageLinkSchema,
|
|
144
156
|
ReferralSource: () => ReferralSource,
|
|
157
|
+
ReleaseFilterSchema: () => ReleaseFilterSchema,
|
|
158
|
+
ReleaseSchema: () => ReleaseSchema,
|
|
145
159
|
ReportReason: () => ReportReason,
|
|
146
160
|
ReportSchema: () => ReportSchema,
|
|
161
|
+
ResolverSettingsSchema: () => ResolverSettingsSchema,
|
|
162
|
+
ResolverVerificationSchema: () => ResolverVerificationSchema,
|
|
147
163
|
ResourceType: () => ResourceType,
|
|
164
|
+
SCHEDULE_MAX_HOURS: () => SCHEDULE_MAX_HOURS,
|
|
165
|
+
SCHEDULE_MIN_HOURS: () => SCHEDULE_MIN_HOURS,
|
|
148
166
|
SITEMAP_FORMAT: () => SITEMAP_FORMAT,
|
|
149
167
|
SYSTEM_DATE_FORMAT: () => SYSTEM_DATE_FORMAT,
|
|
150
168
|
SavedSearchSchema: () => SavedSearchSchema,
|
|
@@ -159,14 +177,17 @@ __export(index_exports, {
|
|
|
159
177
|
StudentCompletenessSchema: () => StudentCompletenessSchema,
|
|
160
178
|
StudyType: () => StudyType,
|
|
161
179
|
SubscriptionStatus: () => SubscriptionStatus,
|
|
180
|
+
SuggestedHomeSchema: () => SuggestedHomeSchema,
|
|
162
181
|
SupportedAnswerChoiceTypes: () => SupportedAnswerChoiceTypes,
|
|
163
182
|
SupportedApplicationReceivePreferences: () => SupportedApplicationReceivePreferences,
|
|
183
|
+
SupportedAuditStatuses: () => SupportedAuditStatuses,
|
|
164
184
|
SupportedBillingPeriods: () => SupportedBillingPeriods,
|
|
165
185
|
SupportedCampaignEndKinds: () => SupportedCampaignEndKinds,
|
|
166
186
|
SupportedCampaignIntervalUnits: () => SupportedCampaignIntervalUnits,
|
|
167
187
|
SupportedCampaignStatuses: () => SupportedCampaignStatuses,
|
|
168
188
|
SupportedCampaignTriggerKinds: () => SupportedCampaignTriggerKinds,
|
|
169
189
|
SupportedCompensationTypes: () => SupportedCompensationTypes,
|
|
190
|
+
SupportedConceptSources: () => SupportedConceptSources,
|
|
170
191
|
SupportedContactTypes: () => SupportedContactTypes,
|
|
171
192
|
SupportedEducationLevels: () => SupportedEducationLevels,
|
|
172
193
|
SupportedEmployeeCounts: () => SupportedEmployeeCounts,
|
|
@@ -191,6 +212,7 @@ __export(index_exports, {
|
|
|
191
212
|
SupportedJobSearchUrgencies: () => SupportedJobSearchUrgencies,
|
|
192
213
|
SupportedJobStatuses: () => SupportedJobStatuses,
|
|
193
214
|
SupportedJobSubCategories: () => SupportedJobSubCategories,
|
|
215
|
+
SupportedMatchTypes: () => SupportedMatchTypes,
|
|
194
216
|
SupportedNotificationTypes: () => SupportedNotificationTypes,
|
|
195
217
|
SupportedOccurrenceStatuses: () => SupportedOccurrenceStatuses,
|
|
196
218
|
SupportedPaddleEnvironments: () => SupportedPaddleEnvironments,
|
|
@@ -200,11 +222,19 @@ __export(index_exports, {
|
|
|
200
222
|
SupportedPlanKinds: () => SupportedPlanKinds,
|
|
201
223
|
SupportedPlanStatuses: () => SupportedPlanStatuses,
|
|
202
224
|
SupportedPostStatuses: () => SupportedPostStatuses,
|
|
225
|
+
SupportedPrefilterRules: () => SupportedPrefilterRules,
|
|
203
226
|
SupportedProficiencyLevels: () => SupportedProficiencyLevels,
|
|
227
|
+
SupportedProposalFilters: () => SupportedProposalFilters,
|
|
228
|
+
SupportedProposalKinds: () => SupportedProposalKinds,
|
|
229
|
+
SupportedProposalMessageRoles: () => SupportedProposalMessageRoles,
|
|
230
|
+
SupportedProposalStatuses: () => SupportedProposalStatuses,
|
|
204
231
|
SupportedQuestionTypes: () => SupportedQuestionTypes,
|
|
205
232
|
SupportedQuotaPeriods: () => SupportedQuotaPeriods,
|
|
206
233
|
SupportedReferralSources: () => SupportedReferralSources,
|
|
234
|
+
SupportedReleaseKinds: () => SupportedReleaseKinds,
|
|
235
|
+
SupportedReleaseStatuses: () => SupportedReleaseStatuses,
|
|
207
236
|
SupportedReportReasons: () => SupportedReportReasons,
|
|
237
|
+
SupportedResolverVerdicts: () => SupportedResolverVerdicts,
|
|
208
238
|
SupportedResourceTypes: () => SupportedResourceTypes,
|
|
209
239
|
SupportedSalaryCurrencies: () => SupportedSalaryCurrencies,
|
|
210
240
|
SupportedSavedSearchStatuses: () => SupportedSavedSearchStatuses,
|
|
@@ -212,19 +242,31 @@ __export(index_exports, {
|
|
|
212
242
|
SupportedSocialAccounts: () => SupportedSocialAccounts,
|
|
213
243
|
SupportedStudyTypes: () => SupportedStudyTypes,
|
|
214
244
|
SupportedSubscriptionStatuses: () => SupportedSubscriptionStatuses,
|
|
245
|
+
SupportedTaxonomyJobKinds: () => SupportedTaxonomyJobKinds,
|
|
246
|
+
SupportedTaxonomyJobStates: () => SupportedTaxonomyJobStates,
|
|
247
|
+
SupportedTaxonomyNodeKinds: () => SupportedTaxonomyNodeKinds,
|
|
248
|
+
SupportedTaxonomySources: () => SupportedTaxonomySources,
|
|
215
249
|
SupportedTemplateVariableBindingKinds: () => SupportedTemplateVariableBindingKinds,
|
|
216
250
|
SupportedTransactionStatuses: () => SupportedTransactionStatuses,
|
|
251
|
+
SupportedUnmatchedReasons: () => SupportedUnmatchedReasons,
|
|
252
|
+
SupportedUnmatchedResolutions: () => SupportedUnmatchedResolutions,
|
|
217
253
|
SupportedUserProfileVisibilities: () => SupportedUserProfileVisibilities,
|
|
218
254
|
SupportedUserRoles: () => SupportedUserRoles,
|
|
219
255
|
SupportedUserStatuses: () => SupportedUserStatuses,
|
|
220
256
|
SupportedWorkModes: () => SupportedWorkModes,
|
|
221
257
|
TAXONOMY_LABELS: () => TAXONOMY_LABELS,
|
|
258
|
+
TAXONOMY_NODE_ID_PATTERN: () => TAXONOMY_NODE_ID_PATTERN,
|
|
259
|
+
TaxonomyNodeFilterSchema: () => TaxonomyNodeFilterSchema,
|
|
260
|
+
TaxonomyNodeSchema: () => TaxonomyNodeSchema,
|
|
261
|
+
TaxonomyScheduleSchema: () => TaxonomyScheduleSchema,
|
|
222
262
|
TemplateVariableBindingKind: () => TemplateVariableBindingKind,
|
|
223
263
|
TemplateVariableBindingSchema: () => TemplateVariableBindingSchema,
|
|
224
264
|
TerminalCampaignStatuses: () => TerminalCampaignStatuses,
|
|
225
265
|
TerminalGeoSyncStatuses: () => TerminalGeoSyncStatuses,
|
|
226
266
|
TermsAcceptedSchema: () => TermsAcceptedSchema,
|
|
227
267
|
TransactionStatus: () => TransactionStatus,
|
|
268
|
+
UnmatchedFilterSchema: () => UnmatchedFilterSchema,
|
|
269
|
+
UnmatchedTermSchema: () => UnmatchedTermSchema,
|
|
228
270
|
UserAdditionalInfoSchema: () => UserAdditionalInfoSchema,
|
|
229
271
|
UserCertificationSchema: () => UserCertificationSchema,
|
|
230
272
|
UserCompletenessSchema: () => UserCompletenessSchema,
|
|
@@ -243,6 +285,9 @@ __export(index_exports, {
|
|
|
243
285
|
UserSchema: () => UserSchema,
|
|
244
286
|
UserSkillSchema: () => UserSkillSchema,
|
|
245
287
|
UserStatus: () => UserStatus,
|
|
288
|
+
VOCABULARY_ID_PATTERN: () => VOCABULARY_ID_PATTERN,
|
|
289
|
+
VocabularySchema: () => VocabularySchema,
|
|
290
|
+
VocabularyTypeSchema: () => VocabularyTypeSchema,
|
|
246
291
|
WorkExperienceSchema: () => WorkExperienceSchema,
|
|
247
292
|
WorkMode: () => WorkMode,
|
|
248
293
|
canTransitionCampaign: () => canTransitionCampaign,
|
|
@@ -3655,6 +3700,14 @@ var CampaignSchema = (0, import_yup33.object)({
|
|
|
3655
3700
|
* state transition, so it belongs in the state.
|
|
3656
3701
|
*/
|
|
3657
3702
|
dryRun: (0, import_yup33.boolean)().optional().default(true).label("Dry Run"),
|
|
3703
|
+
/**
|
|
3704
|
+
* Re-eligibility: when someone this campaign already mailed may get it again.
|
|
3705
|
+
*
|
|
3706
|
+
* Absent: on every run they match (job alerts, digests). `0`: once per
|
|
3707
|
+
* person. `N`: again only after N days. Opt-in, because most recurring
|
|
3708
|
+
* campaigns exist to mail the same people repeatedly.
|
|
3709
|
+
*/
|
|
3710
|
+
resendAfterDays: (0, import_yup33.number)().integer().min(0).max(365).nullable().optional().default(void 0).label("Resend After (days)"),
|
|
3658
3711
|
maxRecipients: (0, import_yup33.number)().integer().min(1).max(CAMPAIGN_MAX_RECIPIENTS_CEILING).optional().default(void 0).label("Max Recipients"),
|
|
3659
3712
|
utm: (0, import_yup33.object)({
|
|
3660
3713
|
campaign: (0, import_yup33.string)().optional().max(120).label("utm_campaign"),
|
|
@@ -4088,55 +4141,443 @@ var EntitlementConsumeSchema = (0, import_yup40.object)({
|
|
|
4088
4141
|
idempotencyKey: (0, import_yup40.string)().trim().required().min(8).max(128).label("Idempotency Key")
|
|
4089
4142
|
}).label("Entitlement Consume");
|
|
4090
4143
|
|
|
4144
|
+
// src/taxonomy/taxonomy.schema.ts
|
|
4145
|
+
var import_yup41 = require("yup");
|
|
4146
|
+
|
|
4147
|
+
// src/taxonomy/taxonomy.constant.ts
|
|
4148
|
+
var SupportedConceptSources = ["seed", "manual", "import"];
|
|
4149
|
+
var SupportedTaxonomySources = ["seed", "manual"];
|
|
4150
|
+
var SupportedTaxonomyNodeKinds = ["category", "subcategory", "group"];
|
|
4151
|
+
var SupportedPrefilterRules = [
|
|
4152
|
+
"spoken_language",
|
|
4153
|
+
"no_letters",
|
|
4154
|
+
"url_or_email",
|
|
4155
|
+
"fragment"
|
|
4156
|
+
];
|
|
4157
|
+
var SupportedUnmatchedResolutions = ["pending", "added", "rejected"];
|
|
4158
|
+
var SupportedUnmatchedReasons = ["ambiguous"];
|
|
4159
|
+
var SupportedProposalKinds = ["concept", "alias", "placement"];
|
|
4160
|
+
var SupportedProposalFilters = [...SupportedProposalKinds, "uncategorized"];
|
|
4161
|
+
var SupportedProposalStatuses = ["draft", "approved", "discarded"];
|
|
4162
|
+
var SupportedProposalMessageRoles = ["operator", "model"];
|
|
4163
|
+
var SupportedResolverVerdicts = [
|
|
4164
|
+
"same",
|
|
4165
|
+
"narrower",
|
|
4166
|
+
"broader",
|
|
4167
|
+
"related",
|
|
4168
|
+
"new_concept",
|
|
4169
|
+
"out_of_scope"
|
|
4170
|
+
];
|
|
4171
|
+
var SupportedAuditStatuses = ["pending", "correct", "wrong"];
|
|
4172
|
+
var SupportedReleaseKinds = ["seed", "manual", "review", "auto"];
|
|
4173
|
+
var SupportedReleaseStatuses = ["open", "rolled_back"];
|
|
4174
|
+
var SupportedMatchTypes = ["exact", "canonical", "fuzzy", "none"];
|
|
4175
|
+
var SupportedTaxonomyJobKinds = [
|
|
4176
|
+
"describe-concepts",
|
|
4177
|
+
"retype-concepts",
|
|
4178
|
+
"generate-aliases",
|
|
4179
|
+
"alias-backfill",
|
|
4180
|
+
"close-gaps",
|
|
4181
|
+
"propose-placements",
|
|
4182
|
+
"place-unplaced",
|
|
4183
|
+
"calibrate-placement",
|
|
4184
|
+
"reseed",
|
|
4185
|
+
"reindex",
|
|
4186
|
+
"calibrate-resolver",
|
|
4187
|
+
"golden",
|
|
4188
|
+
"resolve-backlog"
|
|
4189
|
+
];
|
|
4190
|
+
var SupportedTaxonomyJobStates = ["running", "succeeded", "failed", "cancelled"];
|
|
4191
|
+
var CONCEPT_ID_PATTERN = /^[a-z][a-z0-9-]*_[a-z0-9-]+$/;
|
|
4192
|
+
var VOCABULARY_ID_PATTERN = /^[a-z][a-z0-9-]{0,31}$/;
|
|
4193
|
+
var TAXONOMY_NODE_ID_PATTERN = /^[A-Za-z0-9_]{1,64}$/;
|
|
4194
|
+
var CONCEPT_TYPE_PATTERN = /^[a-z][a-z0-9_]{0,63}$/;
|
|
4195
|
+
var SCHEDULE_MIN_HOURS = 1;
|
|
4196
|
+
var SCHEDULE_MAX_HOURS = 24 * 30;
|
|
4197
|
+
|
|
4198
|
+
// src/taxonomy/taxonomy.schema.ts
|
|
4199
|
+
var conceptId = () => (0, import_yup41.string)().matches(CONCEPT_ID_PATTERN, "conceptId must look like <vocabulary>_<slug>");
|
|
4200
|
+
var vocabularyId = () => (0, import_yup41.string)().matches(VOCABULARY_ID_PATTERN, "vocabulary must match [a-z][a-z0-9-]{0,31}");
|
|
4201
|
+
var nodeId = () => (0, import_yup41.string)().matches(TAXONOMY_NODE_ID_PATTERN, "node ids look like CAT_01_TECH");
|
|
4202
|
+
var strings = () => (0, import_yup41.array)((0, import_yup41.string)().trim().min(1).required());
|
|
4203
|
+
var VocabularyTypeSchema = (0, import_yup41.object)({
|
|
4204
|
+
id: (0, import_yup41.string)().matches(CONCEPT_TYPE_PATTERN, "type ids match [a-z][a-z0-9_]*").required().label("Type ID"),
|
|
4205
|
+
/** Shown to the model when it classifies a concept; include examples. */
|
|
4206
|
+
description: (0, import_yup41.string)().defined().label("Description")
|
|
4207
|
+
}).label("Vocabulary Type");
|
|
4208
|
+
var VocabularySchema = (0, import_yup41.object)({
|
|
4209
|
+
vocabularyId: vocabularyId().required().label("Vocabulary ID"),
|
|
4210
|
+
name: (0, import_yup41.string)().trim().min(1).required().label("Name"),
|
|
4211
|
+
/** What one concept is called in prompts and messages: "skill", "role". */
|
|
4212
|
+
noun: (0, import_yup41.string)().trim().min(1).required().label("Noun"),
|
|
4213
|
+
nounPlural: (0, import_yup41.string)().trim().min(1).required().label("Noun (plural)"),
|
|
4214
|
+
/** What belongs in this vocabulary, for prompts. */
|
|
4215
|
+
description: (0, import_yup41.string)().trim().min(1).required().label("Description"),
|
|
4216
|
+
/** Where its terms are written, for the "swap it in" test: "a job posting". */
|
|
4217
|
+
appearsIn: (0, import_yup41.string)().trim().min(1).required().label("Appears In"),
|
|
4218
|
+
/** Things that are NOT concepts of this vocabulary, for prompts. */
|
|
4219
|
+
outOfScope: (0, import_yup41.string)().trim().min(1).required().label("Out of Scope"),
|
|
4220
|
+
types: (0, import_yup41.array)(VocabularyTypeSchema.required()).min(1).required().test(
|
|
4221
|
+
"unique-type-ids",
|
|
4222
|
+
"type ids must be unique",
|
|
4223
|
+
(types) => !types || new Set(types.map((t) => t.id)).size === types.length
|
|
4224
|
+
).label("Types"),
|
|
4225
|
+
/** The type a concept gets when nothing more specific is known. One of `types`. */
|
|
4226
|
+
defaultType: (0, import_yup41.string)().required().test("default-type-listed", "defaultType must be one of the type ids", function(value) {
|
|
4227
|
+
const types = this.parent.types ?? [];
|
|
4228
|
+
return types.some((t) => t.id === value);
|
|
4229
|
+
}).label("Default Type"),
|
|
4230
|
+
prefilter: (0, import_yup41.array)((0, import_yup41.string)().oneOf(SupportedPrefilterRules).required()).default([]).label("Prefilter"),
|
|
4231
|
+
/**
|
|
4232
|
+
* Words that qualify a term without changing what it names ("fluent",
|
|
4233
|
+
* "native"), dropped from its canonical lookup form in THIS vocabulary only.
|
|
4234
|
+
*/
|
|
4235
|
+
qualifiers: strings().optional().label("Qualifiers"),
|
|
4236
|
+
/** Extra instructions per model task; each is optional. */
|
|
4237
|
+
guidance: (0, import_yup41.object)({
|
|
4238
|
+
describe: (0, import_yup41.string)().optional(),
|
|
4239
|
+
classify: (0, import_yup41.string)().optional(),
|
|
4240
|
+
aliases: (0, import_yup41.string)().optional(),
|
|
4241
|
+
verify: (0, import_yup41.string)().optional(),
|
|
4242
|
+
place: (0, import_yup41.string)().optional()
|
|
4243
|
+
}).label("Guidance"),
|
|
4244
|
+
source: (0, import_yup41.string)().oneOf(SupportedTaxonomySources).required().label("Source"),
|
|
4245
|
+
createdAt: (0, import_yup41.number)().required().label("Created At"),
|
|
4246
|
+
updatedAt: (0, import_yup41.number)().required().label("Updated At")
|
|
4247
|
+
}).label("Vocabulary");
|
|
4248
|
+
var TaxonomyNodeSchema = (0, import_yup41.object)({
|
|
4249
|
+
nodeId: nodeId().required().label("Node ID"),
|
|
4250
|
+
vocabulary: vocabularyId().required().label("Vocabulary"),
|
|
4251
|
+
kind: (0, import_yup41.string)().oneOf(SupportedTaxonomyNodeKinds).required().label("Kind"),
|
|
4252
|
+
name: (0, import_yup41.string)().trim().min(1).required().label("Name"),
|
|
4253
|
+
/** Groups carry a description; categories and subcategories usually do not. */
|
|
4254
|
+
description: (0, import_yup41.string)().optional().label("Description"),
|
|
4255
|
+
aliases: strings().default([]).label("Aliases"),
|
|
4256
|
+
/** null for categories (the roots). */
|
|
4257
|
+
parentId: (0, import_yup41.string)().nullable().defined().label("Parent ID"),
|
|
4258
|
+
/** Ancestor ids from the root down to and including this node. */
|
|
4259
|
+
path: (0, import_yup41.array)((0, import_yup41.string)().required()).default([]).label("Path"),
|
|
4260
|
+
source: (0, import_yup41.string)().oneOf(SupportedTaxonomySources).optional().label("Source"),
|
|
4261
|
+
createdAt: (0, import_yup41.number)().required().label("Created At"),
|
|
4262
|
+
updatedAt: (0, import_yup41.number)().required().label("Updated At")
|
|
4263
|
+
}).label("Taxonomy Node");
|
|
4264
|
+
var ConceptMembershipSchema = (0, import_yup41.object)({
|
|
4265
|
+
categoryId: (0, import_yup41.string)().required().label("Category ID"),
|
|
4266
|
+
categoryName: (0, import_yup41.string)().required().label("Category Name"),
|
|
4267
|
+
subcategoryId: (0, import_yup41.string)().required().label("Subcategory ID"),
|
|
4268
|
+
subcategoryName: (0, import_yup41.string)().required().label("Subcategory Name"),
|
|
4269
|
+
groupId: (0, import_yup41.string)().required().label("Group ID"),
|
|
4270
|
+
groupName: (0, import_yup41.string)().required().label("Group Name"),
|
|
4271
|
+
/** The source record this membership came from; '' when written by hand. */
|
|
4272
|
+
sourceId: (0, import_yup41.string)().default("").label("Source ID")
|
|
4273
|
+
}).label("Concept Membership");
|
|
4274
|
+
var ConceptSchema = (0, import_yup41.object)({
|
|
4275
|
+
/** `<vocabulary>_<slug>`, e.g. `skills_power-bi`. Primary key. */
|
|
4276
|
+
conceptId: conceptId().required().label("Concept ID"),
|
|
4277
|
+
vocabulary: vocabularyId().required().label("Vocabulary"),
|
|
4278
|
+
name: (0, import_yup41.string)().trim().min(1).max(200).required().label("Name"),
|
|
4279
|
+
/** One of the vocabulary's type ids; checked against the vocabulary by the service. */
|
|
4280
|
+
type: (0, import_yup41.string)().trim().matches(CONCEPT_TYPE_PATTERN, "type must be a type id").required().label("Type"),
|
|
4281
|
+
description: (0, import_yup41.string)().trim().max(2e3).default("").label("Description"),
|
|
4282
|
+
aliases: strings().default([]).label("Aliases"),
|
|
4283
|
+
memberships: (0, import_yup41.array)(ConceptMembershipSchema.required()).default([]).label("Memberships"),
|
|
4284
|
+
/** Always concepts of the same vocabulary. */
|
|
4285
|
+
relatedConceptIds: strings().default([]).label("Related Concepts"),
|
|
4286
|
+
source: (0, import_yup41.string)().oneOf(SupportedConceptSources).required().label("Source"),
|
|
4287
|
+
createdAt: (0, import_yup41.number)().required().label("Created At"),
|
|
4288
|
+
updatedAt: (0, import_yup41.number)().required().label("Updated At"),
|
|
4289
|
+
/** Resume marker of `retype-concepts`: set once the type was examined. */
|
|
4290
|
+
retypedAt: (0, import_yup41.number)().optional().label("Retyped At"),
|
|
4291
|
+
/** Resume marker of `generate-aliases`: set even when no alias was added. */
|
|
4292
|
+
aliasedAt: (0, import_yup41.number)().optional().label("Aliased At"),
|
|
4293
|
+
/** Set while `description` is a stand-in; removed once a real one is written. */
|
|
4294
|
+
descriptionPending: (0, import_yup41.boolean)().isTrue().optional().label("Description Pending")
|
|
4295
|
+
}).label("Concept");
|
|
4296
|
+
var UnmatchedTermSchema = (0, import_yup41.object)({
|
|
4297
|
+
vocabulary: vocabularyId().required().label("Vocabulary"),
|
|
4298
|
+
/** The raw input as first received. */
|
|
4299
|
+
term: (0, import_yup41.string)().required().label("Term"),
|
|
4300
|
+
/** The dedupe key, so "React JS" and "react.js" share a row. */
|
|
4301
|
+
normalizedTerm: (0, import_yup41.string)().required().label("Normalized Term"),
|
|
4302
|
+
count: (0, import_yup41.number)().integer().min(0).required().label("Count"),
|
|
4303
|
+
firstSeenAt: (0, import_yup41.number)().required().label("First Seen At"),
|
|
4304
|
+
lastSeenAt: (0, import_yup41.number)().required().label("Last Seen At"),
|
|
4305
|
+
/** Which callers sent it, capped. */
|
|
4306
|
+
sources: (0, import_yup41.array)(
|
|
4307
|
+
(0, import_yup41.object)({
|
|
4308
|
+
service: (0, import_yup41.string)().required(),
|
|
4309
|
+
context: (0, import_yup41.string)().optional()
|
|
4310
|
+
}).required()
|
|
4311
|
+
).default([]).label("Sources"),
|
|
4312
|
+
resolution: (0, import_yup41.string)().oneOf(SupportedUnmatchedResolutions).required().label("Resolution"),
|
|
4313
|
+
resolvedConceptId: (0, import_yup41.string)().optional().label("Resolved Concept"),
|
|
4314
|
+
/** `ambiguous`: the concept exists; the caller gave no context that picked one. */
|
|
4315
|
+
reason: (0, import_yup41.string)().oneOf(SupportedUnmatchedReasons).optional().label("Reason"),
|
|
4316
|
+
/** The concepts an ambiguous term could mean. */
|
|
4317
|
+
candidates: (0, import_yup41.array)((0, import_yup41.string)().required()).optional().label("Candidates"),
|
|
4318
|
+
/** Who rejected it when it was not a human: `prefilter:<rule>` or `model`. */
|
|
4319
|
+
rejectedBy: (0, import_yup41.string)().optional().label("Rejected By")
|
|
4320
|
+
}).label("Unmatched Term");
|
|
4321
|
+
var ProposalCandidateSchema = (0, import_yup41.object)({
|
|
4322
|
+
groupId: (0, import_yup41.string)().required(),
|
|
4323
|
+
groupName: (0, import_yup41.string)().required(),
|
|
4324
|
+
subcategoryId: (0, import_yup41.string)().required(),
|
|
4325
|
+
subcategoryName: (0, import_yup41.string)().required(),
|
|
4326
|
+
categoryId: (0, import_yup41.string)().required(),
|
|
4327
|
+
categoryName: (0, import_yup41.string)().required(),
|
|
4328
|
+
score: (0, import_yup41.number)().required(),
|
|
4329
|
+
nearestMembers: (0, import_yup41.array)((0, import_yup41.string)().required()).default([])
|
|
4330
|
+
}).label("Proposal Candidate");
|
|
4331
|
+
var ProposalMessageSchema = (0, import_yup41.object)({
|
|
4332
|
+
role: (0, import_yup41.string)().oneOf(SupportedProposalMessageRoles).required(),
|
|
4333
|
+
/** The operator's instruction, or the model's note on what it changed and why. */
|
|
4334
|
+
content: (0, import_yup41.string)().defined(),
|
|
4335
|
+
/** Which model answered. Absent on operator turns. */
|
|
4336
|
+
model: (0, import_yup41.string)().optional(),
|
|
4337
|
+
at: (0, import_yup41.number)().required()
|
|
4338
|
+
}).label("Proposal Message");
|
|
4339
|
+
var SuggestedHomeSchema = (0, import_yup41.object)({
|
|
4340
|
+
categoryName: (0, import_yup41.string)().defined(),
|
|
4341
|
+
subcategoryName: (0, import_yup41.string)().defined(),
|
|
4342
|
+
groupName: (0, import_yup41.string)().defined()
|
|
4343
|
+
}).label("Suggested Home");
|
|
4344
|
+
var ResolverVerificationSchema = (0, import_yup41.object)({
|
|
4345
|
+
verdict: (0, import_yup41.string)().oneOf(SupportedResolverVerdicts).required(),
|
|
4346
|
+
/** The shown concept the verdict is about; null for `new_concept` / `out_of_scope`. */
|
|
4347
|
+
conceptId: (0, import_yup41.string)().nullable().defined(),
|
|
4348
|
+
evidence: (0, import_yup41.string)().defined(),
|
|
4349
|
+
/** What the judge took the term to mean, abbreviations expanded. */
|
|
4350
|
+
means: (0, import_yup41.string)().optional(),
|
|
4351
|
+
/** For `same`: did the independent confirm step agree? */
|
|
4352
|
+
consistent: (0, import_yup41.boolean)().optional(),
|
|
4353
|
+
confirm: (0, import_yup41.object)({
|
|
4354
|
+
answer: (0, import_yup41.string)().oneOf(["yes", "no"]).required(),
|
|
4355
|
+
evidence: (0, import_yup41.string)().defined()
|
|
4356
|
+
}).optional().default(void 0)
|
|
4357
|
+
}).label("Resolver Verification");
|
|
4358
|
+
var ConceptProposalSchema = (0, import_yup41.object)({
|
|
4359
|
+
proposalId: (0, import_yup41.string)().required().label("Proposal ID"),
|
|
4360
|
+
vocabulary: vocabularyId().required().label("Vocabulary"),
|
|
4361
|
+
/** The miss this closes; `normalizedTerm` links back to its unmatched row. */
|
|
4362
|
+
term: (0, import_yup41.string)().required().label("Term"),
|
|
4363
|
+
normalizedTerm: (0, import_yup41.string)().required().label("Normalized Term"),
|
|
4364
|
+
/** Demand at proposal time, so the queue ranks without a join. */
|
|
4365
|
+
count: (0, import_yup41.number)().integer().min(0).required().label("Count"),
|
|
4366
|
+
/** Other misses folded into this draft because they name the same new concept. */
|
|
4367
|
+
mergedTerms: (0, import_yup41.array)(
|
|
4368
|
+
(0, import_yup41.object)({
|
|
4369
|
+
term: (0, import_yup41.string)().required(),
|
|
4370
|
+
normalizedTerm: (0, import_yup41.string)().required(),
|
|
4371
|
+
count: (0, import_yup41.number)().integer().min(0).required()
|
|
4372
|
+
}).required()
|
|
4373
|
+
).optional().label("Merged Terms"),
|
|
4374
|
+
/** Absent on drafts that predate the field: read as `concept`. */
|
|
4375
|
+
kind: (0, import_yup41.string)().oneOf(SupportedProposalKinds).optional().label("Kind"),
|
|
4376
|
+
/** For `alias`: the concept the term names. For `placement`: the concept to place. */
|
|
4377
|
+
targetConceptId: (0, import_yup41.string)().optional().label("Target Concept"),
|
|
4378
|
+
targetName: (0, import_yup41.string)().optional().label("Target Name"),
|
|
4379
|
+
// The draft concept, editable until approved. Empty strings are valid here:
|
|
4380
|
+
// an alias draft carries no draft concept of its own.
|
|
4381
|
+
name: (0, import_yup41.string)().defined().label("Name"),
|
|
4382
|
+
type: (0, import_yup41.string)().defined().label("Type"),
|
|
4383
|
+
description: (0, import_yup41.string)().defined().label("Description"),
|
|
4384
|
+
aliases: (0, import_yup41.array)((0, import_yup41.string)().required()).default([]).label("Aliases"),
|
|
4385
|
+
/** Empty when no group fits: approved that way, the concept goes live uncategorized. */
|
|
4386
|
+
memberships: (0, import_yup41.array)(ConceptMembershipSchema.required()).default([]).label("Memberships"),
|
|
4387
|
+
suggestedHome: SuggestedHomeSchema.nullable().optional().default(void 0).label("Suggested Home"),
|
|
4388
|
+
/** Resolved to concepts that exist; names that matched nothing are dropped. */
|
|
4389
|
+
relatedConceptIds: (0, import_yup41.array)((0, import_yup41.string)().required()).default([]).label("Related Concepts"),
|
|
4390
|
+
/** Every placement candidate considered, best first. */
|
|
4391
|
+
candidates: (0, import_yup41.array)(ProposalCandidateSchema.required()).default([]).label("Candidates"),
|
|
4392
|
+
needsReview: (0, import_yup41.boolean)().required().label("Needs Review"),
|
|
4393
|
+
reason: (0, import_yup41.string)().optional().label("Reason"),
|
|
4394
|
+
verification: ResolverVerificationSchema.optional().default(void 0).label("Verification"),
|
|
4395
|
+
/** What the auto-accept gate decided for an alias verdict. */
|
|
4396
|
+
autoAccept: (0, import_yup41.object)({
|
|
4397
|
+
accepted: (0, import_yup41.boolean)().required(),
|
|
4398
|
+
reason: (0, import_yup41.string)().optional(),
|
|
4399
|
+
tier: (0, import_yup41.string)().optional(),
|
|
4400
|
+
calibrationId: (0, import_yup41.string)().optional(),
|
|
4401
|
+
releaseId: (0, import_yup41.string)().optional()
|
|
4402
|
+
}).optional().default(void 0).label("Auto Accept"),
|
|
4403
|
+
/** Which model drafted it. */
|
|
4404
|
+
model: (0, import_yup41.string)().defined().label("Model"),
|
|
4405
|
+
/** The refinement conversation, oldest first. */
|
|
4406
|
+
messages: (0, import_yup41.array)(ProposalMessageSchema.required()).default([]).label("Messages"),
|
|
4407
|
+
status: (0, import_yup41.string)().oneOf(SupportedProposalStatuses).required().label("Status"),
|
|
4408
|
+
/** Set when approved: the concept this became. */
|
|
4409
|
+
resolvedConceptId: (0, import_yup41.string)().optional().label("Resolved Concept"),
|
|
4410
|
+
createdAt: (0, import_yup41.number)().required().label("Created At"),
|
|
4411
|
+
updatedAt: (0, import_yup41.number)().required().label("Updated At")
|
|
4412
|
+
}).label("Concept Proposal");
|
|
4413
|
+
var ReleaseSchema = (0, import_yup41.object)({
|
|
4414
|
+
releaseId: (0, import_yup41.string)().required().label("Release ID"),
|
|
4415
|
+
kind: (0, import_yup41.string)().oneOf(SupportedReleaseKinds).required().label("Kind"),
|
|
4416
|
+
status: (0, import_yup41.string)().oneOf(SupportedReleaseStatuses).required().label("Status"),
|
|
4417
|
+
createdBy: (0, import_yup41.string)().required().label("Created By"),
|
|
4418
|
+
createdAt: (0, import_yup41.number)().required().label("Created At"),
|
|
4419
|
+
note: (0, import_yup41.string)().optional().label("Note"),
|
|
4420
|
+
rolledBackAt: (0, import_yup41.number)().optional().label("Rolled Back At"),
|
|
4421
|
+
rolledBackBy: (0, import_yup41.string)().optional().label("Rolled Back By")
|
|
4422
|
+
}).label("Release");
|
|
4423
|
+
var AuditSchema = (0, import_yup41.object)({
|
|
4424
|
+
auditId: (0, import_yup41.string)().required().label("Audit ID"),
|
|
4425
|
+
releaseId: (0, import_yup41.string)().required().label("Release ID"),
|
|
4426
|
+
key: (0, import_yup41.string)().required().label("Key"),
|
|
4427
|
+
term: (0, import_yup41.string)().required().label("Term"),
|
|
4428
|
+
conceptId: (0, import_yup41.string)().required().label("Concept ID"),
|
|
4429
|
+
tier: (0, import_yup41.string)().optional().label("Tier"),
|
|
4430
|
+
status: (0, import_yup41.string)().oneOf(SupportedAuditStatuses).required().label("Status"),
|
|
4431
|
+
createdAt: (0, import_yup41.number)().required().label("Created At"),
|
|
4432
|
+
resolvedAt: (0, import_yup41.number)().optional().label("Resolved At"),
|
|
4433
|
+
resolvedBy: (0, import_yup41.string)().optional().label("Resolved By")
|
|
4434
|
+
}).label("Audit");
|
|
4435
|
+
var ResolverSettingsSchema = (0, import_yup41.object)({
|
|
4436
|
+
autoAccept: (0, import_yup41.object)({
|
|
4437
|
+
/** Stop switch for WRITING auto keys. Off until a calibration passes. */
|
|
4438
|
+
enabled: (0, import_yup41.boolean)().required(),
|
|
4439
|
+
/** Minimum calibrated precision (Wilson 95% lower bound) for a tier to auto-accept. */
|
|
4440
|
+
target: (0, import_yup41.number)().min(0.5).lessThan(1).required(),
|
|
4441
|
+
maxPerRun: (0, import_yup41.number)().integer().min(0).required(),
|
|
4442
|
+
maxPerDay: (0, import_yup41.number)().integer().min(0).required(),
|
|
4443
|
+
/** Share of each auto release sampled into the audit queue (0..1). */
|
|
4444
|
+
auditRate: (0, import_yup41.number)().min(0).max(1).required()
|
|
4445
|
+
}).label("Auto Accept"),
|
|
4446
|
+
/** Stop switch for SERVING auto keys: false hides them from lookups at once. */
|
|
4447
|
+
serveAutoKeys: (0, import_yup41.boolean)().required().label("Serve Auto Keys"),
|
|
4448
|
+
/** Minimum Meilisearch ranking score (0..1) for a fuzzy hit to be considered. */
|
|
4449
|
+
fuzzyMinScore: (0, import_yup41.number)().min(0).max(1).required().label("Fuzzy Min Score"),
|
|
4450
|
+
/** Per-client limit on public search, per minute per replica. 0 disables it. */
|
|
4451
|
+
searchRateLimitPerMin: (0, import_yup41.number)().integer().min(0).required().label("Search Rate Limit"),
|
|
4452
|
+
/** Master switch for scheduled maintenance jobs. */
|
|
4453
|
+
scheduledJobs: (0, import_yup41.boolean)().required().label("Scheduled Jobs"),
|
|
4454
|
+
updatedAt: (0, import_yup41.number)().optional().label("Updated At"),
|
|
4455
|
+
updatedBy: (0, import_yup41.string)().optional().label("Updated By"),
|
|
4456
|
+
/** Why auto-accept was last switched off automatically. */
|
|
4457
|
+
trippedReason: (0, import_yup41.string)().optional().label("Tripped Reason")
|
|
4458
|
+
}).label("Resolver Settings");
|
|
4459
|
+
var TaxonomyScheduleSchema = (0, import_yup41.object)({
|
|
4460
|
+
kind: (0, import_yup41.string)().oneOf(SupportedTaxonomyJobKinds).required().label("Job"),
|
|
4461
|
+
enabled: (0, import_yup41.boolean)().required().label("Enabled"),
|
|
4462
|
+
everyHours: (0, import_yup41.number)().min(SCHEDULE_MIN_HOURS).max(SCHEDULE_MAX_HOURS).required().label("Every (hours)"),
|
|
4463
|
+
/** Last time the scheduler fired this job. */
|
|
4464
|
+
lastRunAt: (0, import_yup41.number)().optional().label("Last Run At"),
|
|
4465
|
+
updatedAt: (0, import_yup41.number)().required().label("Updated At")
|
|
4466
|
+
}).label("Taxonomy Schedule");
|
|
4467
|
+
var NormalizeContextSchema = (0, import_yup41.object)({
|
|
4468
|
+
/** The title of the record the terms come from. */
|
|
4469
|
+
title: (0, import_yup41.string)().max(200).optional(),
|
|
4470
|
+
/** Backbone node ids (category, subcategory or group). */
|
|
4471
|
+
categoryIds: (0, import_yup41.array)(nodeId().required()).max(10).optional(),
|
|
4472
|
+
/** Other terms from the same record, in the same vocabulary. */
|
|
4473
|
+
siblings: (0, import_yup41.array)((0, import_yup41.string)().max(200).required()).max(50).optional()
|
|
4474
|
+
}).label("Normalize Context");
|
|
4475
|
+
|
|
4476
|
+
// src/taxonomy/taxonomy-filter.schema.ts
|
|
4477
|
+
var import_yup42 = require("yup");
|
|
4478
|
+
var ConceptFilterShape = (0, import_yup42.object)({
|
|
4479
|
+
/** Type ids. Open: which types exist is the vocabulary's data. */
|
|
4480
|
+
type: tokens("Type"),
|
|
4481
|
+
/** Category node ids the concept is placed under (`memberships.categoryId`). */
|
|
4482
|
+
categoryId: tokens("Category"),
|
|
4483
|
+
/** True: only live concepts with no backbone home (the uncategorized backlog). */
|
|
4484
|
+
unplaced: (0, import_yup42.boolean)().optional().label("Unplaced")
|
|
4485
|
+
}).label("Concept Filter");
|
|
4486
|
+
var ConceptFilterSchema = rejectUnknownKeys(
|
|
4487
|
+
ConceptFilterShape,
|
|
4488
|
+
() => Object.keys(ConceptFilterShape.fields)
|
|
4489
|
+
);
|
|
4490
|
+
var TaxonomyNodeFilterShape = (0, import_yup42.object)({
|
|
4491
|
+
kind: enumFacet(SupportedTaxonomyNodeKinds, "Kind"),
|
|
4492
|
+
/** Parent node ids: a node's children. */
|
|
4493
|
+
parentId: tokens("Parent")
|
|
4494
|
+
}).label("Taxonomy Node Filter");
|
|
4495
|
+
var TaxonomyNodeFilterSchema = rejectUnknownKeys(
|
|
4496
|
+
TaxonomyNodeFilterShape,
|
|
4497
|
+
() => Object.keys(TaxonomyNodeFilterShape.fields)
|
|
4498
|
+
);
|
|
4499
|
+
var UnmatchedFilterShape = (0, import_yup42.object)({
|
|
4500
|
+
resolution: enumFacet(SupportedUnmatchedResolutions, "Resolution"),
|
|
4501
|
+
reason: enumFacet(SupportedUnmatchedReasons, "Reason")
|
|
4502
|
+
}).label("Unmatched Filter");
|
|
4503
|
+
var UnmatchedFilterSchema = rejectUnknownKeys(
|
|
4504
|
+
UnmatchedFilterShape,
|
|
4505
|
+
() => Object.keys(UnmatchedFilterShape.fields)
|
|
4506
|
+
);
|
|
4507
|
+
var ConceptProposalFilterShape = (0, import_yup42.object)({
|
|
4508
|
+
status: enumFacet(SupportedProposalStatuses, "Status"),
|
|
4509
|
+
/** A kind, or `uncategorized`: concept and placement drafts with no home yet. */
|
|
4510
|
+
kind: enumFacet(SupportedProposalFilters, "Kind")
|
|
4511
|
+
}).label("Concept Proposal Filter");
|
|
4512
|
+
var ConceptProposalFilterSchema = rejectUnknownKeys(
|
|
4513
|
+
ConceptProposalFilterShape,
|
|
4514
|
+
() => Object.keys(ConceptProposalFilterShape.fields)
|
|
4515
|
+
);
|
|
4516
|
+
var ReleaseFilterShape = (0, import_yup42.object)({
|
|
4517
|
+
kind: enumFacet(SupportedReleaseKinds, "Kind"),
|
|
4518
|
+
status: enumFacet(SupportedReleaseStatuses, "Status")
|
|
4519
|
+
}).label("Release Filter");
|
|
4520
|
+
var ReleaseFilterSchema = rejectUnknownKeys(
|
|
4521
|
+
ReleaseFilterShape,
|
|
4522
|
+
() => Object.keys(ReleaseFilterShape.fields)
|
|
4523
|
+
);
|
|
4524
|
+
var AuditFilterShape = (0, import_yup42.object)({
|
|
4525
|
+
status: enumFacet(SupportedAuditStatuses, "Status")
|
|
4526
|
+
}).label("Audit Filter");
|
|
4527
|
+
var AuditFilterSchema = rejectUnknownKeys(
|
|
4528
|
+
AuditFilterShape,
|
|
4529
|
+
() => Object.keys(AuditFilterShape.fields)
|
|
4530
|
+
);
|
|
4531
|
+
|
|
4091
4532
|
// src/user/user.schema.ts
|
|
4092
|
-
var
|
|
4533
|
+
var import_yup55 = require("yup");
|
|
4093
4534
|
|
|
4094
4535
|
// src/user/work-experience.schema.ts
|
|
4095
|
-
var
|
|
4096
|
-
var WorkExperienceSchema = (0,
|
|
4536
|
+
var import_yup43 = require("yup");
|
|
4537
|
+
var WorkExperienceSchema = (0, import_yup43.object)().shape({
|
|
4097
4538
|
company: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company"),
|
|
4098
|
-
designation: (0,
|
|
4539
|
+
designation: (0, import_yup43.string)().trim().required().label("Designation"),
|
|
4099
4540
|
duration: DurationSchema({
|
|
4100
4541
|
format: "YYYY-MM",
|
|
4101
4542
|
startLabel: "Start Date",
|
|
4102
4543
|
endLabel: "End Date"
|
|
4103
4544
|
}).required().label("Duration"),
|
|
4104
|
-
description: (0,
|
|
4545
|
+
description: (0, import_yup43.string)().trim().max(3e3).optional().label("Description"),
|
|
4105
4546
|
location: LocationSchema.required().label("Location"),
|
|
4106
|
-
isRemote: (0,
|
|
4547
|
+
isRemote: (0, import_yup43.boolean)().oneOf([true, false]).default(false).label("Is Remote")
|
|
4107
4548
|
}).noUnknown().strict().label("Work Experience");
|
|
4108
4549
|
|
|
4109
4550
|
// src/user/education.schema.ts
|
|
4110
|
-
var
|
|
4111
|
-
var EducationSchema = (0,
|
|
4551
|
+
var import_yup44 = require("yup");
|
|
4552
|
+
var EducationSchema = (0, import_yup44.object)({
|
|
4112
4553
|
institute: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute"),
|
|
4113
|
-
course: (0,
|
|
4114
|
-
fieldOfStudy: (0,
|
|
4554
|
+
course: (0, import_yup44.string)().trim().required().label("Course"),
|
|
4555
|
+
fieldOfStudy: (0, import_yup44.string)().trim().required().label("Field of Study"),
|
|
4115
4556
|
duration: DurationSchema({
|
|
4116
4557
|
format: "YYYY-MM",
|
|
4117
4558
|
startLabel: "Start Date",
|
|
4118
4559
|
endLabel: "End Date"
|
|
4119
4560
|
}).required().label("Duration"),
|
|
4120
|
-
description: (0,
|
|
4121
|
-
isDistanceLearning: (0,
|
|
4561
|
+
description: (0, import_yup44.string)().trim().max(3e3).optional().label("Description"),
|
|
4562
|
+
isDistanceLearning: (0, import_yup44.boolean)().default(false).label("Is Distance Learning"),
|
|
4122
4563
|
location: LocationSchema.required().label("Location"),
|
|
4123
|
-
studyType: (0,
|
|
4564
|
+
studyType: (0, import_yup44.string)().oneOf(SupportedStudyTypes).trim().max(50).required().label("Study Type")
|
|
4124
4565
|
}).noUnknown().strict().label("Education");
|
|
4125
4566
|
|
|
4126
4567
|
// src/user/user-skill.schema.ts
|
|
4127
|
-
var
|
|
4128
|
-
var UserSkillSchema = (0,
|
|
4129
|
-
name: (0,
|
|
4130
|
-
proficiencyLevel: (0,
|
|
4568
|
+
var import_yup45 = require("yup");
|
|
4569
|
+
var UserSkillSchema = (0, import_yup45.object)({
|
|
4570
|
+
name: (0, import_yup45.string)().required().label("Name"),
|
|
4571
|
+
proficiencyLevel: (0, import_yup45.string)().oneOf(SupportedProficiencyLevels).required().label("Proficiency Level"),
|
|
4131
4572
|
lastUsed: dateString().format("YYYY-MM").nullable().optional().label("Last Used")
|
|
4132
4573
|
}).noUnknown().strict().label("Skill");
|
|
4133
4574
|
|
|
4134
4575
|
// src/user/project.schema.ts
|
|
4135
|
-
var
|
|
4136
|
-
var UserProjectSchema = (0,
|
|
4137
|
-
name: (0,
|
|
4138
|
-
url: (0,
|
|
4139
|
-
description: (0,
|
|
4576
|
+
var import_yup46 = require("yup");
|
|
4577
|
+
var UserProjectSchema = (0, import_yup46.object)({
|
|
4578
|
+
name: (0, import_yup46.string)().trim().max(50).required().label("Name"),
|
|
4579
|
+
url: (0, import_yup46.string)().optional().label("URL"),
|
|
4580
|
+
description: (0, import_yup46.string)().trim().min(100).max(3e3).required().label("Description"),
|
|
4140
4581
|
duration: DurationSchema({
|
|
4141
4582
|
format: "YYYY-MM",
|
|
4142
4583
|
startLabel: "Start Date",
|
|
@@ -4145,68 +4586,68 @@ var UserProjectSchema = (0, import_yup44.object)({
|
|
|
4145
4586
|
}).noUnknown().strict().label("Project");
|
|
4146
4587
|
|
|
4147
4588
|
// src/user/user-certification.schema.ts
|
|
4148
|
-
var
|
|
4149
|
-
var UserCertificationSchema = (0,
|
|
4150
|
-
name: (0,
|
|
4589
|
+
var import_yup47 = require("yup");
|
|
4590
|
+
var UserCertificationSchema = (0, import_yup47.object)({
|
|
4591
|
+
name: (0, import_yup47.string)().trim().max(100).required().label("Name"),
|
|
4151
4592
|
// TODO: Add validation for authority
|
|
4152
|
-
authority: (0,
|
|
4153
|
-
licenseNumber: (0,
|
|
4593
|
+
authority: (0, import_yup47.string)().trim().max(100).required().label("Authority"),
|
|
4594
|
+
licenseNumber: (0, import_yup47.string)().trim().max(50).optional().label("License Number"),
|
|
4154
4595
|
duration: DurationSchema({
|
|
4155
4596
|
format: "YYYY-MM",
|
|
4156
4597
|
startLabel: "Start Date",
|
|
4157
4598
|
endLabel: "End Date"
|
|
4158
4599
|
}).optional().nullable().label("Duration"),
|
|
4159
|
-
url: (0,
|
|
4600
|
+
url: (0, import_yup47.string)().optional().label("URL")
|
|
4160
4601
|
}).noUnknown().strict().label("Certification");
|
|
4161
4602
|
|
|
4162
4603
|
// src/user/user-interest.schema.ts
|
|
4163
|
-
var
|
|
4164
|
-
var UserInterestSchema = (0,
|
|
4604
|
+
var import_yup48 = require("yup");
|
|
4605
|
+
var UserInterestSchema = (0, import_yup48.object)({
|
|
4165
4606
|
/** The taxonomy entry's id. */
|
|
4166
|
-
id: (0,
|
|
4607
|
+
id: (0, import_yup48.string)().trim().required().label("Interest Id"),
|
|
4167
4608
|
/** Display name, e.g. "Cloud Computing". */
|
|
4168
|
-
name: (0,
|
|
4609
|
+
name: (0, import_yup48.string)().trim().required().label("Interest"),
|
|
4169
4610
|
/** Material-symbols icon name, e.g. "cloud". */
|
|
4170
|
-
logo: (0,
|
|
4611
|
+
logo: (0, import_yup48.string)().trim().required().label("Interest Logo")
|
|
4171
4612
|
}).required().label("Interest");
|
|
4172
4613
|
|
|
4173
4614
|
// src/user/user-language.schema.ts
|
|
4174
|
-
var
|
|
4175
|
-
var UserLanguageSchema = (0,
|
|
4176
|
-
name: (0,
|
|
4177
|
-
proficiencyLevel: (0,
|
|
4615
|
+
var import_yup49 = require("yup");
|
|
4616
|
+
var UserLanguageSchema = (0, import_yup49.object)({
|
|
4617
|
+
name: (0, import_yup49.string)().trim().required().label("Name"),
|
|
4618
|
+
proficiencyLevel: (0, import_yup49.string)().oneOf(SupportedProficiencyLevels).trim().max(50).required().label("Proficiency Level")
|
|
4178
4619
|
}).noUnknown().strict().label("Language");
|
|
4179
4620
|
|
|
4180
4621
|
// src/user/user-additional-info.schema.ts
|
|
4181
|
-
var
|
|
4182
|
-
var UserAdditionalInfoSchema = (0,
|
|
4183
|
-
title: (0,
|
|
4184
|
-
description: (0,
|
|
4622
|
+
var import_yup50 = require("yup");
|
|
4623
|
+
var UserAdditionalInfoSchema = (0, import_yup50.object)({
|
|
4624
|
+
title: (0, import_yup50.string)().trim().max(60).required().label("Title"),
|
|
4625
|
+
description: (0, import_yup50.string)().trim().max(1e3).required().label("Description")
|
|
4185
4626
|
}).noUnknown().strict().label("User Additional Info");
|
|
4186
4627
|
|
|
4187
4628
|
// src/user/general-detail.schema.ts
|
|
4188
|
-
var
|
|
4189
|
-
var UserGeneralDetailSchema = (0,
|
|
4190
|
-
id: (0,
|
|
4191
|
-
name: (0,
|
|
4192
|
-
first: (0,
|
|
4193
|
-
last: (0,
|
|
4629
|
+
var import_yup51 = require("yup");
|
|
4630
|
+
var UserGeneralDetailSchema = (0, import_yup51.object)({
|
|
4631
|
+
id: (0, import_yup51.string)().optional().label("ID"),
|
|
4632
|
+
name: (0, import_yup51.object)().shape({
|
|
4633
|
+
first: (0, import_yup51.string)().trim().max(50).required().label("First Name"),
|
|
4634
|
+
last: (0, import_yup51.string)().trim().max(50).optional().label("Last Name")
|
|
4194
4635
|
}).required().label("Name"),
|
|
4195
|
-
headline: (0,
|
|
4196
|
-
image: (0,
|
|
4636
|
+
headline: (0, import_yup51.string)().trim().max(200).optional().label("Headline"),
|
|
4637
|
+
image: (0, import_yup51.string)().optional().label("Image"),
|
|
4197
4638
|
// The DISPLAYED avatar (`image`) is a flattened export with any status frame
|
|
4198
4639
|
// ("#OpenToWork", …) already burned into the pixels. `imageOriginal` keeps the
|
|
4199
4640
|
// un-framed source the user uploaded, so the image builder can reopen it and
|
|
4200
4641
|
// apply a DIFFERENT frame instead of stacking a second one on top of the first.
|
|
4201
4642
|
// Optional and absent on every pre-existing user: treat a missing value as
|
|
4202
4643
|
// "only the flattened image is available".
|
|
4203
|
-
imageOriginal: (0,
|
|
4204
|
-
aboutMe: (0,
|
|
4205
|
-
email: (0,
|
|
4206
|
-
mobile: (0,
|
|
4207
|
-
emailVerified: (0,
|
|
4208
|
-
mobileVerified: (0,
|
|
4209
|
-
experienceLevel: (0,
|
|
4644
|
+
imageOriginal: (0, import_yup51.string)().optional().label("Original Image"),
|
|
4645
|
+
aboutMe: (0, import_yup51.string)().trim().max(3e3).optional().label("About Me"),
|
|
4646
|
+
email: (0, import_yup51.string)().required().label("Email"),
|
|
4647
|
+
mobile: (0, import_yup51.string)().nullable().optional().label("Mobile"),
|
|
4648
|
+
emailVerified: (0, import_yup51.string)().nullable().optional().label("Email Verified"),
|
|
4649
|
+
mobileVerified: (0, import_yup51.string)().nullable().optional().label("Mobile Verified"),
|
|
4650
|
+
experienceLevel: (0, import_yup51.string)().oneOf(SupportedExperienceLevels).required().label("Experience level"),
|
|
4210
4651
|
/**
|
|
4211
4652
|
* The user's HIGHEST qualification, e.g. `bachelor`.
|
|
4212
4653
|
*
|
|
@@ -4225,7 +4666,7 @@ var UserGeneralDetailSchema = (0, import_yup49.object)({
|
|
|
4225
4666
|
* UNCONSTRAINED on education rather than filtering the user out — the same
|
|
4226
4667
|
* opt-out reasoning `notificationPrefs` uses.
|
|
4227
4668
|
*/
|
|
4228
|
-
educationLevel: (0,
|
|
4669
|
+
educationLevel: (0, import_yup51.string)().oneOf(SupportedEducationLevels).optional().label("Education level"),
|
|
4229
4670
|
location: LocationSchema.required().label("Location"),
|
|
4230
4671
|
/**
|
|
4231
4672
|
* Where the account was created, captured once and never rewritten.
|
|
@@ -4241,38 +4682,38 @@ var UserGeneralDetailSchema = (0, import_yup49.object)({
|
|
|
4241
4682
|
* - `location` derived from the user's self-entered profile location
|
|
4242
4683
|
* - `default` assumed (no signal available); presumption, not evidence
|
|
4243
4684
|
*/
|
|
4244
|
-
signupContext: (0,
|
|
4685
|
+
signupContext: (0, import_yup51.object)().shape({
|
|
4245
4686
|
// ISO 3166-1 alpha-2, uppercase — the shape `cf-ipcountry` returns, so
|
|
4246
4687
|
// measured and inferred values are directly comparable.
|
|
4247
|
-
country: (0,
|
|
4248
|
-
locale: (0,
|
|
4249
|
-
source: (0,
|
|
4250
|
-
at: (0,
|
|
4688
|
+
country: (0, import_yup51.string)().trim().uppercase().length(2).required().label("Signup Country"),
|
|
4689
|
+
locale: (0, import_yup51.string)().trim().required().label("Signup Locale"),
|
|
4690
|
+
source: (0, import_yup51.string)().oneOf(SupportedSignupContextSources).required().label("Signup Context Source"),
|
|
4691
|
+
at: (0, import_yup51.number)().required().label("Signup Context At")
|
|
4251
4692
|
}).optional().default(void 0).label("Signup Context"),
|
|
4252
|
-
profileVisibility: (0,
|
|
4693
|
+
profileVisibility: (0, import_yup51.string)().oneOf(SupportedUserProfileVisibilities).default("public" /* Public */).label("Profile Visibility")
|
|
4253
4694
|
}).noUnknown().strict().label("General Detail");
|
|
4254
4695
|
|
|
4255
4696
|
// src/user/user-job-preferences.schema.ts
|
|
4256
|
-
var
|
|
4257
|
-
var UserJobPreferencesSchema = (0,
|
|
4697
|
+
var import_yup52 = require("yup");
|
|
4698
|
+
var UserJobPreferencesSchema = (0, import_yup52.object)({
|
|
4258
4699
|
/**
|
|
4259
4700
|
* Whether the job seeker is openly signalling availability. Surfaces the
|
|
4260
4701
|
* "Open to work" badge on the public profile and boosts visibility in
|
|
4261
4702
|
* recruiter search. Defaults to `false` - users must opt in.
|
|
4262
4703
|
*/
|
|
4263
|
-
openToWork: (0,
|
|
4704
|
+
openToWork: (0, import_yup52.boolean)().default(false).label("Open to Work"),
|
|
4264
4705
|
/**
|
|
4265
4706
|
* How urgently the user is looking for their next job. Drives match scoring
|
|
4266
4707
|
* and can downgrade the visibility of expired or low-relevance postings for
|
|
4267
4708
|
* users in `passively_browsing` mode.
|
|
4268
4709
|
*/
|
|
4269
|
-
jobSearchUrgency: (0,
|
|
4710
|
+
jobSearchUrgency: (0, import_yup52.string)().oneOf(SupportedJobSearchUrgencies).required().label("Job Search Urgency"),
|
|
4270
4711
|
/**
|
|
4271
4712
|
* Locations the user wants to work in. Stores the full `LocationSchema`
|
|
4272
4713
|
* shape (country, city, state, geo, etc.) as returned by the locations
|
|
4273
4714
|
* autocomplete API.
|
|
4274
4715
|
*/
|
|
4275
|
-
jobLocations: (0,
|
|
4716
|
+
jobLocations: (0, import_yup52.array)().of(LocationSchema.required().label("Job Location")).min(1, "Pick at least one preferred location.").required().label("Job Locations"),
|
|
4276
4717
|
/**
|
|
4277
4718
|
* Seniority levels the user wants jobs to be matched against. Multi-select
|
|
4278
4719
|
* (up to 2) for borderline candidates.
|
|
@@ -4283,7 +4724,7 @@ var UserJobPreferencesSchema = (0, import_yup50.object)({
|
|
|
4283
4724
|
* Both reuse the same `ExperienceLevel` taxonomy from `common.constant.ts`
|
|
4284
4725
|
* so search/match logic doesn't have to translate between two vocabularies.
|
|
4285
4726
|
*/
|
|
4286
|
-
targetExperienceLevels: (0,
|
|
4727
|
+
targetExperienceLevels: (0, import_yup52.array)().of((0, import_yup52.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"),
|
|
4287
4728
|
/**
|
|
4288
4729
|
* Specializations the user is searching for - free-form titles.
|
|
4289
4730
|
*
|
|
@@ -4292,19 +4733,19 @@ var UserJobPreferencesSchema = (0, import_yup50.object)({
|
|
|
4292
4733
|
* surfaces a curated "Popular Roles" picker for discovery, but the user
|
|
4293
4734
|
* can ultimately add any title; matching/normalization happens downstream.
|
|
4294
4735
|
*/
|
|
4295
|
-
jobRoles: (0,
|
|
4736
|
+
jobRoles: (0, import_yup52.array)().of((0, import_yup52.string)().trim().max(120).required()).min(1, "Pick at least one role.").required().label("Job Roles"),
|
|
4296
4737
|
/**
|
|
4297
4738
|
* Minimum acceptable annual base salary, in `minSalaryCurrency`.
|
|
4298
4739
|
* Stored as an integer in the currency's major unit (e.g. dollars, not cents).
|
|
4299
4740
|
* Defaults to 0 ("any salary") rather than being optional - every job-seeker
|
|
4300
4741
|
* has a floor, even if it's zero.
|
|
4301
4742
|
*/
|
|
4302
|
-
minSalary: (0,
|
|
4303
|
-
minSalaryCurrency: (0,
|
|
4743
|
+
minSalary: (0, import_yup52.number)().integer().min(MIN_SALARY_LOWER_BOUND).max(MIN_SALARY_UPPER_BOUND).default(0).required().label("Minimum Salary"),
|
|
4744
|
+
minSalaryCurrency: (0, import_yup52.string)().oneOf(SupportedSalaryCurrencies).default("USD").required().label("Minimum Salary Currency"),
|
|
4304
4745
|
/**
|
|
4305
4746
|
* Marketing-attribution capture from the final onboarding step.
|
|
4306
4747
|
*/
|
|
4307
|
-
referralSource: (0,
|
|
4748
|
+
referralSource: (0, import_yup52.string)().oneOf(SupportedReferralSources).required().label("Referral Source"),
|
|
4308
4749
|
/**
|
|
4309
4750
|
* Resumes the user has uploaded. Embedded directly on the user document
|
|
4310
4751
|
* (capped at 5) - they're cheap to denormalize, every wizard step that
|
|
@@ -4318,25 +4759,25 @@ var UserJobPreferencesSchema = (0, import_yup50.object)({
|
|
|
4318
4759
|
* AI resume-builder flow - onboarding uploads land here, AI-built resumes
|
|
4319
4760
|
* live in their own collection.
|
|
4320
4761
|
*/
|
|
4321
|
-
resumes: (0,
|
|
4322
|
-
(0,
|
|
4762
|
+
resumes: (0, import_yup52.array)().of(
|
|
4763
|
+
(0, import_yup52.object)({
|
|
4323
4764
|
// Stable id assigned on upload - used to address a specific entry
|
|
4324
4765
|
// for delete / set-primary operations without exposing the GCS URL
|
|
4325
4766
|
// as a route key.
|
|
4326
|
-
id: (0,
|
|
4327
|
-
url: (0,
|
|
4328
|
-
filename: (0,
|
|
4329
|
-
sizeBytes: (0,
|
|
4330
|
-
mimeType: (0,
|
|
4331
|
-
uploadedAt: (0,
|
|
4332
|
-
isPrimary: (0,
|
|
4767
|
+
id: (0, import_yup52.string)().required().label("ID"),
|
|
4768
|
+
url: (0, import_yup52.string)().required().label("Resume URL"),
|
|
4769
|
+
filename: (0, import_yup52.string)().trim().max(255).optional().label("Filename"),
|
|
4770
|
+
sizeBytes: (0, import_yup52.number)().integer().min(0).optional().label("Size (bytes)"),
|
|
4771
|
+
mimeType: (0, import_yup52.string)().trim().max(120).optional().label("MIME Type"),
|
|
4772
|
+
uploadedAt: (0, import_yup52.date)().required().label("Uploaded At"),
|
|
4773
|
+
isPrimary: (0, import_yup52.boolean)().default(false).label("Is Primary")
|
|
4333
4774
|
}).noUnknown().strict().label("Resume")
|
|
4334
4775
|
).max(5, "You can keep at most 5 resumes on file.").default([]).label("Resumes"),
|
|
4335
4776
|
/**
|
|
4336
4777
|
* Set when the user finishes the wizard's last step. Acts as the gate the
|
|
4337
4778
|
* onboarding hook checks to redirect users who haven't completed setup.
|
|
4338
4779
|
*/
|
|
4339
|
-
onboardingCompletedAt: (0,
|
|
4780
|
+
onboardingCompletedAt: (0, import_yup52.date)().nullable().optional().label("Onboarding Completed At"),
|
|
4340
4781
|
/**
|
|
4341
4782
|
* Parser-suggested values for wizard fields, written by the resume-upload
|
|
4342
4783
|
* flow. Every parser-derived field lands here - including profile-shaped
|
|
@@ -4356,92 +4797,92 @@ var UserJobPreferencesSchema = (0, import_yup50.object)({
|
|
|
4356
4797
|
* APIs. If `user.<field>` is empty there, the correct behavior is empty,
|
|
4357
4798
|
* because the user has not confirmed it yet.
|
|
4358
4799
|
*/
|
|
4359
|
-
pendingPrefill: (0,
|
|
4360
|
-
headline: (0,
|
|
4361
|
-
aboutMe: (0,
|
|
4362
|
-
mobile: (0,
|
|
4800
|
+
pendingPrefill: (0, import_yup52.object)({
|
|
4801
|
+
headline: (0, import_yup52.string)().trim().optional().label("Pending Headline"),
|
|
4802
|
+
aboutMe: (0, import_yup52.string)().trim().optional().label("Pending About Me"),
|
|
4803
|
+
mobile: (0, import_yup52.string)().trim().optional().label("Pending Mobile"),
|
|
4363
4804
|
location: LocationSchema.optional().default(void 0).label("Pending Location"),
|
|
4364
|
-
experienceLevel: (0,
|
|
4365
|
-
socialAccounts: (0,
|
|
4366
|
-
workExperiences: (0,
|
|
4367
|
-
educations: (0,
|
|
4805
|
+
experienceLevel: (0, import_yup52.string)().oneOf(SupportedExperienceLevels).optional().label("Pending Experience Level"),
|
|
4806
|
+
socialAccounts: (0, import_yup52.array)().of(SocialAccountSchema.required()).optional().label("Pending Social Accounts"),
|
|
4807
|
+
workExperiences: (0, import_yup52.array)().of(WorkExperienceSchema.required()).optional().label("Pending Work Experiences"),
|
|
4808
|
+
educations: (0, import_yup52.array)().of(EducationSchema.required()).optional().label("Pending Educations")
|
|
4368
4809
|
}).nullable().optional().default(void 0).label("Pending Prefill")
|
|
4369
4810
|
}).noUnknown().strict().label("User Job Preferences Schema");
|
|
4370
4811
|
|
|
4371
4812
|
// src/user/user-recruiter-profile.schema.ts
|
|
4372
|
-
var
|
|
4373
|
-
var RecruiterPageLinkSchema = (0,
|
|
4813
|
+
var import_yup53 = require("yup");
|
|
4814
|
+
var RecruiterPageLinkSchema = (0, import_yup53.object)({
|
|
4374
4815
|
page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Company Page"),
|
|
4375
|
-
jobTitle: (0,
|
|
4816
|
+
jobTitle: (0, import_yup53.string)().trim().max(100).optional().label("Job Title")
|
|
4376
4817
|
}).noUnknown().strict().label("Recruiter Page Link");
|
|
4377
|
-
var UserRecruiterProfileSchema = (0,
|
|
4378
|
-
recruiterProfile: (0,
|
|
4379
|
-
hiringFor: (0,
|
|
4818
|
+
var UserRecruiterProfileSchema = (0, import_yup53.object)({
|
|
4819
|
+
recruiterProfile: (0, import_yup53.object)({
|
|
4820
|
+
hiringFor: (0, import_yup53.array)().of(RecruiterPageLinkSchema).default([]).label("Hiring For")
|
|
4380
4821
|
}).optional().default(void 0).label("Recruiter Profile")
|
|
4381
4822
|
}).noUnknown().strict().label("User Recruiter Profile");
|
|
4382
4823
|
|
|
4383
4824
|
// src/user/user-coordinator-profile.schema.ts
|
|
4384
|
-
var
|
|
4385
|
-
var CoordinatorPageLinkSchema = (0,
|
|
4825
|
+
var import_yup54 = require("yup");
|
|
4826
|
+
var CoordinatorPageLinkSchema = (0, import_yup54.object)({
|
|
4386
4827
|
page: PageSchema.pick(["name", "slug", "type", "logo"]).deepPartial().concat(PageSchema.pick(["name", "type"])).required().label("Institute Page"),
|
|
4387
|
-
jobTitle: (0,
|
|
4828
|
+
jobTitle: (0, import_yup54.string)().trim().max(100).optional().label("Job Title")
|
|
4388
4829
|
}).noUnknown().strict().label("Coordinator Page Link");
|
|
4389
|
-
var UserCoordinatorProfileSchema = (0,
|
|
4390
|
-
coordinatorProfile: (0,
|
|
4391
|
-
coordinatesAt: (0,
|
|
4830
|
+
var UserCoordinatorProfileSchema = (0, import_yup54.object)({
|
|
4831
|
+
coordinatorProfile: (0, import_yup54.object)({
|
|
4832
|
+
coordinatesAt: (0, import_yup54.array)().of(CoordinatorPageLinkSchema).default([]).label("Coordinates At")
|
|
4392
4833
|
}).optional().default(void 0).label("Coordinator Profile")
|
|
4393
4834
|
}).noUnknown().strict().label("User Coordinator Profile");
|
|
4394
4835
|
|
|
4395
4836
|
// src/user/user.schema.ts
|
|
4396
|
-
var UserSchema = (0,
|
|
4837
|
+
var UserSchema = (0, import_yup55.object)({
|
|
4397
4838
|
/**
|
|
4398
4839
|
* Related auth account id from auth Server (e.g. Better auth https://auth.thejob.dev)
|
|
4399
4840
|
*/
|
|
4400
|
-
authAccountId: (0,
|
|
4841
|
+
authAccountId: (0, import_yup55.string)().required().label("Auth Account ID"),
|
|
4401
4842
|
/**
|
|
4402
4843
|
* Social media information about the user (e.g. LinkedIn, GitHub, etc.)
|
|
4403
4844
|
*/
|
|
4404
|
-
socialAccounts: (0,
|
|
4845
|
+
socialAccounts: (0, import_yup55.array)().of(SocialAccountSchema).default([]).label("Social Accounts"),
|
|
4405
4846
|
/**
|
|
4406
4847
|
* Work experience information about the user
|
|
4407
4848
|
*/
|
|
4408
|
-
workExperiences: (0,
|
|
4849
|
+
workExperiences: (0, import_yup55.array)().of(WorkExperienceSchema).required().default([]).label("Work Experiences"),
|
|
4409
4850
|
/**
|
|
4410
4851
|
* Education information about the user
|
|
4411
4852
|
*/
|
|
4412
|
-
educations: (0,
|
|
4853
|
+
educations: (0, import_yup55.array)().of(EducationSchema).required().default([]).label("Educations"),
|
|
4413
4854
|
/**
|
|
4414
4855
|
* Skills information about the user
|
|
4415
4856
|
*/
|
|
4416
|
-
skills: (0,
|
|
4857
|
+
skills: (0, import_yup55.array)().of(UserSkillSchema).required().default([]).label("Skills"),
|
|
4417
4858
|
/**
|
|
4418
4859
|
* Projects information about the user
|
|
4419
4860
|
*/
|
|
4420
|
-
projects: (0,
|
|
4861
|
+
projects: (0, import_yup55.array)().of(UserProjectSchema).default([]).label("Projects"),
|
|
4421
4862
|
/**
|
|
4422
4863
|
* Certifications information about the user
|
|
4423
4864
|
*/
|
|
4424
|
-
certifications: (0,
|
|
4865
|
+
certifications: (0, import_yup55.array)().of(UserCertificationSchema).default([]).label("Certifications"),
|
|
4425
4866
|
/**
|
|
4426
4867
|
* Interests information about the user.
|
|
4427
4868
|
*/
|
|
4428
|
-
interests: (0,
|
|
4869
|
+
interests: (0, import_yup55.array)().of(UserInterestSchema).optional().default([]).label("Interests"),
|
|
4429
4870
|
/**
|
|
4430
4871
|
* Languages information about the user
|
|
4431
4872
|
*/
|
|
4432
|
-
languages: (0,
|
|
4873
|
+
languages: (0, import_yup55.array)().of(UserLanguageSchema).required().default([]).label("Languages"),
|
|
4433
4874
|
/**
|
|
4434
4875
|
* Additional information about the user
|
|
4435
4876
|
*/
|
|
4436
|
-
additionalInfo: (0,
|
|
4877
|
+
additionalInfo: (0, import_yup55.array)().of(UserAdditionalInfoSchema).default([]).label("Additional Information"),
|
|
4437
4878
|
/**
|
|
4438
4879
|
* Status of the user account
|
|
4439
4880
|
*/
|
|
4440
|
-
status: (0,
|
|
4881
|
+
status: (0, import_yup55.string)().oneOf(SupportedUserStatuses).required().label("Status"),
|
|
4441
4882
|
/**
|
|
4442
4883
|
* Roles assigned to the user
|
|
4443
4884
|
*/
|
|
4444
|
-
roles: (0,
|
|
4885
|
+
roles: (0, import_yup55.array)().of((0, import_yup55.string)().oneOf(SupportedUserRoles)).required().default(DefaultUserRoles).label("Roles"),
|
|
4445
4886
|
/**
|
|
4446
4887
|
* Explicit consent to receive marketing email (newsletters, job alerts by
|
|
4447
4888
|
* broadcast, product updates). Marketing sends are HARD-GATED on
|
|
@@ -4453,18 +4894,18 @@ var UserSchema = (0, import_yup53.object)({
|
|
|
4453
4894
|
* unsubscribe sets `subscribed=false` so consent and the email-service
|
|
4454
4895
|
* suppression list stay consistent. Defaults to NOT subscribed (opt-in).
|
|
4455
4896
|
*/
|
|
4456
|
-
marketingConsent: (0,
|
|
4457
|
-
subscribed: (0,
|
|
4897
|
+
marketingConsent: (0, import_yup55.object)({
|
|
4898
|
+
subscribed: (0, import_yup55.boolean)().default(false).label("Subscribed to marketing email"),
|
|
4458
4899
|
/** Epoch ms of the last consent change (opt-in or opt-out). */
|
|
4459
|
-
updatedAt: (0,
|
|
4900
|
+
updatedAt: (0, import_yup55.number)().optional().label("Consent updated at"),
|
|
4460
4901
|
/** Where the consent change originated, e.g. `onboarding`, `unsubscribe`, `settings`. */
|
|
4461
|
-
source: (0,
|
|
4902
|
+
source: (0, import_yup55.string)().optional().label("Consent source"),
|
|
4462
4903
|
/**
|
|
4463
4904
|
* How often the user receives job-alert emails. `off` disables job alerts
|
|
4464
4905
|
* only; other marketing stays governed by `subscribed`. Unset means the
|
|
4465
4906
|
* user has not chosen a cadence yet.
|
|
4466
4907
|
*/
|
|
4467
|
-
jobAlertFrequency: (0,
|
|
4908
|
+
jobAlertFrequency: (0, import_yup55.string)().oneOf(SupportedJobAlertFrequencies).optional().label("Job alert frequency")
|
|
4468
4909
|
}).default({ subscribed: false }).label("Marketing Consent"),
|
|
4469
4910
|
/**
|
|
4470
4911
|
* Per-channel toggles for NOTIFICATION email — mail about activity on the
|
|
@@ -4479,11 +4920,11 @@ var UserSchema = (0, import_yup53.object)({
|
|
|
4479
4920
|
*
|
|
4480
4921
|
* Transactional mail (magic-link, verification) ignores this object entirely.
|
|
4481
4922
|
*/
|
|
4482
|
-
notificationPrefs: (0,
|
|
4483
|
-
groupActivity: (0,
|
|
4484
|
-
jobActivity: (0,
|
|
4485
|
-
applicationUpdates: (0,
|
|
4486
|
-
productUpdates: (0,
|
|
4923
|
+
notificationPrefs: (0, import_yup55.object)({
|
|
4924
|
+
groupActivity: (0, import_yup55.boolean)().default(true).label("Group activity email"),
|
|
4925
|
+
jobActivity: (0, import_yup55.boolean)().default(true).label("Job activity email"),
|
|
4926
|
+
applicationUpdates: (0, import_yup55.boolean)().default(true).label("Application update email"),
|
|
4927
|
+
productUpdates: (0, import_yup55.boolean)().default(false).label("Product update email")
|
|
4487
4928
|
}).default({
|
|
4488
4929
|
groupActivity: true,
|
|
4489
4930
|
jobActivity: true,
|
|
@@ -4510,21 +4951,21 @@ var UserSchema = (0, import_yup53.object)({
|
|
|
4510
4951
|
* subscription (see `PushSubscriptionSchema`). This flag is the user's
|
|
4511
4952
|
* intent, the subscription is the browser grant, and both are required.
|
|
4512
4953
|
*/
|
|
4513
|
-
pushConsent: (0,
|
|
4514
|
-
subscribed: (0,
|
|
4954
|
+
pushConsent: (0, import_yup55.object)({
|
|
4955
|
+
subscribed: (0, import_yup55.boolean)().default(false).label("Subscribed to push notifications"),
|
|
4515
4956
|
/** Epoch ms of the last consent change (opt-in or opt-out). */
|
|
4516
|
-
updatedAt: (0,
|
|
4957
|
+
updatedAt: (0, import_yup55.number)().optional().label("Push consent updated at"),
|
|
4517
4958
|
/** Where the change originated, e.g. `onboarding`, `settings`, `prompt`. */
|
|
4518
|
-
source: (0,
|
|
4959
|
+
source: (0, import_yup55.string)().optional().label("Push consent source")
|
|
4519
4960
|
}).default({ subscribed: false }).label("Push Consent"),
|
|
4520
4961
|
/**
|
|
4521
4962
|
* Vector embedding of the user's profile for semantic/hybrid search.
|
|
4522
4963
|
* Generated from a structured summary of skills, experience, education, etc.
|
|
4523
4964
|
* Only generated for public profiles with sufficient completeness (≥60%).
|
|
4524
4965
|
*/
|
|
4525
|
-
embedding: (0,
|
|
4526
|
-
vector: (0,
|
|
4527
|
-
model: (0,
|
|
4966
|
+
embedding: (0, import_yup55.object)({
|
|
4967
|
+
vector: (0, import_yup55.array)((0, import_yup55.number)().required()).optional().label("Embedding vector"),
|
|
4968
|
+
model: (0, import_yup55.string)().optional().label("Embedding model")
|
|
4528
4969
|
}).nullable().optional().label("Embedding"),
|
|
4529
4970
|
/**
|
|
4530
4971
|
* Epoch ms the account was created, assigned by the storing service.
|
|
@@ -4539,12 +4980,12 @@ var UserSchema = (0, import_yup53.object)({
|
|
|
4539
4980
|
* `updatedAt` is deliberately NOT added alongside it: nothing derives from it
|
|
4540
4981
|
* yet, and an optional field is only safe to add when something needs it.
|
|
4541
4982
|
*/
|
|
4542
|
-
createdAt: (0,
|
|
4983
|
+
createdAt: (0, import_yup55.number)().optional().label("Created At")
|
|
4543
4984
|
}).concat(UserGeneralDetailSchema).concat(UserJobPreferencesSchema).concat(UserRecruiterProfileSchema).concat(UserCoordinatorProfileSchema).noUnknown().strict().label("User Schema");
|
|
4544
4985
|
|
|
4545
4986
|
// src/user/push-subscription.schema.ts
|
|
4546
|
-
var
|
|
4547
|
-
var PushSubscriptionSchema = (0,
|
|
4987
|
+
var import_yup56 = require("yup");
|
|
4988
|
+
var PushSubscriptionSchema = (0, import_yup56.object)({
|
|
4548
4989
|
/**
|
|
4549
4990
|
* The user this subscription belongs to, by the `shortId` every service
|
|
4550
4991
|
* keys a user on, matching `UserSchema.shortId`.
|
|
@@ -4558,7 +4999,7 @@ var PushSubscriptionSchema = (0, import_yup54.object)({
|
|
|
4558
4999
|
* `shortId` of its OWN (see `PushSubscriptionRecord`); one field cannot be
|
|
4559
5000
|
* both the row's id and its owner's.
|
|
4560
5001
|
*/
|
|
4561
|
-
userShortId: (0,
|
|
5002
|
+
userShortId: (0, import_yup56.string)().required().label("User Short ID"),
|
|
4562
5003
|
/**
|
|
4563
5004
|
* The push service URL the browser issued. Vendor-specific (FCM, Mozilla,
|
|
4564
5005
|
* Apple) and effectively unbounded in length, so it carries no length cap.
|
|
@@ -4567,16 +5008,16 @@ var PushSubscriptionSchema = (0, import_yup54.object)({
|
|
|
4567
5008
|
* browser sends back unchanged, and what a 404/410 response identifies as
|
|
4568
5009
|
* dead. Upserts and deletes both key on it.
|
|
4569
5010
|
*/
|
|
4570
|
-
endpoint: (0,
|
|
5011
|
+
endpoint: (0, import_yup56.string)().required().label("Push Endpoint"),
|
|
4571
5012
|
/**
|
|
4572
5013
|
* Encryption material from the browser. Web Push payloads are encrypted to
|
|
4573
5014
|
* these keys, so a row missing either one cannot be delivered to at all.
|
|
4574
5015
|
*/
|
|
4575
|
-
keys: (0,
|
|
5016
|
+
keys: (0, import_yup56.object)({
|
|
4576
5017
|
/** Client public key, base64url. */
|
|
4577
|
-
p256dh: (0,
|
|
5018
|
+
p256dh: (0, import_yup56.string)().required().label("P256DH Key"),
|
|
4578
5019
|
/** Client auth secret, base64url. */
|
|
4579
|
-
auth: (0,
|
|
5020
|
+
auth: (0, import_yup56.string)().required().label("Auth Secret")
|
|
4580
5021
|
}).required().label("Push Keys"),
|
|
4581
5022
|
/**
|
|
4582
5023
|
* Epoch ms the push service says the subscription expires, when it says
|
|
@@ -4584,22 +5025,22 @@ var PushSubscriptionSchema = (0, import_yup54.object)({
|
|
|
4584
5025
|
* informational and never the basis for pruning. A 404/410 on send is the
|
|
4585
5026
|
* only reliable death signal.
|
|
4586
5027
|
*/
|
|
4587
|
-
expirationTime: (0,
|
|
5028
|
+
expirationTime: (0, import_yup56.number)().nullable().optional().label("Expiration Time"),
|
|
4588
5029
|
/**
|
|
4589
5030
|
* The subscribing browser's user agent, kept so a user can recognise their
|
|
4590
5031
|
* own devices in a "where you receive notifications" list. Display only:
|
|
4591
5032
|
* never parsed, and never used to decide delivery.
|
|
4592
5033
|
*/
|
|
4593
|
-
userAgent: (0,
|
|
5034
|
+
userAgent: (0, import_yup56.string)().optional().label("User Agent"),
|
|
4594
5035
|
/** Epoch ms the subscription was first registered. */
|
|
4595
|
-
createdAt: (0,
|
|
5036
|
+
createdAt: (0, import_yup56.number)().optional().label("Created At"),
|
|
4596
5037
|
/**
|
|
4597
5038
|
* Epoch ms this subscription was last confirmed live, refreshed when the
|
|
4598
5039
|
* browser re-registers it. A subscription that stops being refreshed is a
|
|
4599
5040
|
* device that stopped visiting, which is useful for pruning rows that never
|
|
4600
5041
|
* fail loudly enough to be caught by a 410.
|
|
4601
5042
|
*/
|
|
4602
|
-
lastSeenAt: (0,
|
|
5043
|
+
lastSeenAt: (0, import_yup56.number)().optional().label("Last Seen At"),
|
|
4603
5044
|
/**
|
|
4604
5045
|
* Epoch ms the owner explicitly signed out on this device, or absent.
|
|
4605
5046
|
*
|
|
@@ -4609,12 +5050,12 @@ var PushSubscriptionSchema = (0, import_yup54.object)({
|
|
|
4609
5050
|
* so that a MISSING row keeps one meaning to the browser ("stop, this device
|
|
4610
5051
|
* was removed"), which it acts on by dropping its own subscription.
|
|
4611
5052
|
*/
|
|
4612
|
-
signedOutAt: (0,
|
|
5053
|
+
signedOutAt: (0, import_yup56.number)().nullable().optional().label("Signed Out At")
|
|
4613
5054
|
}).noUnknown().strict().label("Push Subscription Schema");
|
|
4614
5055
|
|
|
4615
5056
|
// src/user/user-completeness.schema.ts
|
|
4616
|
-
var
|
|
4617
|
-
var UserCompletenessSchema = (0,
|
|
5057
|
+
var import_yup57 = require("yup");
|
|
5058
|
+
var UserCompletenessSchema = (0, import_yup57.object)({
|
|
4618
5059
|
additionalInfo: CompletenessScoreSchema(0).label("Additional Info"),
|
|
4619
5060
|
// Optional
|
|
4620
5061
|
certifications: CompletenessScoreSchema(0).label("Certifications"),
|
|
@@ -4639,10 +5080,14 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
4639
5080
|
0 && (module.exports = {
|
|
4640
5081
|
AnswerChoiceType,
|
|
4641
5082
|
ApplicationReceivePreference,
|
|
5083
|
+
AuditFilterSchema,
|
|
5084
|
+
AuditSchema,
|
|
4642
5085
|
BillingPeriod,
|
|
4643
5086
|
BillingSubscriptionSchema,
|
|
4644
5087
|
BillingTransactionSchema,
|
|
4645
5088
|
CAMPAIGN_MAX_RECIPIENTS_CEILING,
|
|
5089
|
+
CONCEPT_ID_PATTERN,
|
|
5090
|
+
CONCEPT_TYPE_PATTERN,
|
|
4646
5091
|
CONSUME_MAX_UNITS,
|
|
4647
5092
|
CampaignDataSourceSchema,
|
|
4648
5093
|
CampaignEndKind,
|
|
@@ -4658,6 +5103,11 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
4658
5103
|
Common,
|
|
4659
5104
|
CompensationType,
|
|
4660
5105
|
CompletenessScoreSchema,
|
|
5106
|
+
ConceptFilterSchema,
|
|
5107
|
+
ConceptMembershipSchema,
|
|
5108
|
+
ConceptProposalFilterSchema,
|
|
5109
|
+
ConceptProposalSchema,
|
|
5110
|
+
ConceptSchema,
|
|
4661
5111
|
ContactTypes,
|
|
4662
5112
|
CoordinatorPageLinkSchema,
|
|
4663
5113
|
CountryFilterSchema,
|
|
@@ -4723,6 +5173,7 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
4723
5173
|
MailingListFilterSchema,
|
|
4724
5174
|
MailingListSchema,
|
|
4725
5175
|
MoneySchema,
|
|
5176
|
+
NormalizeContextSchema,
|
|
4726
5177
|
NotificationType,
|
|
4727
5178
|
OccurrenceStatus,
|
|
4728
5179
|
PREFILL_MIRRORED_KEYS,
|
|
@@ -4742,6 +5193,8 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
4742
5193
|
PostSchema,
|
|
4743
5194
|
PostStatus,
|
|
4744
5195
|
ProficiencyLevel,
|
|
5196
|
+
ProposalCandidateSchema,
|
|
5197
|
+
ProposalMessageSchema,
|
|
4745
5198
|
PushSubscriptionSchema,
|
|
4746
5199
|
QuestionSchema,
|
|
4747
5200
|
QuestionType,
|
|
@@ -4749,9 +5202,15 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
4749
5202
|
ReadAndAcknowledgeQuestionSchema,
|
|
4750
5203
|
RecruiterPageLinkSchema,
|
|
4751
5204
|
ReferralSource,
|
|
5205
|
+
ReleaseFilterSchema,
|
|
5206
|
+
ReleaseSchema,
|
|
4752
5207
|
ReportReason,
|
|
4753
5208
|
ReportSchema,
|
|
5209
|
+
ResolverSettingsSchema,
|
|
5210
|
+
ResolverVerificationSchema,
|
|
4754
5211
|
ResourceType,
|
|
5212
|
+
SCHEDULE_MAX_HOURS,
|
|
5213
|
+
SCHEDULE_MIN_HOURS,
|
|
4755
5214
|
SITEMAP_FORMAT,
|
|
4756
5215
|
SYSTEM_DATE_FORMAT,
|
|
4757
5216
|
SavedSearchSchema,
|
|
@@ -4766,14 +5225,17 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
4766
5225
|
StudentCompletenessSchema,
|
|
4767
5226
|
StudyType,
|
|
4768
5227
|
SubscriptionStatus,
|
|
5228
|
+
SuggestedHomeSchema,
|
|
4769
5229
|
SupportedAnswerChoiceTypes,
|
|
4770
5230
|
SupportedApplicationReceivePreferences,
|
|
5231
|
+
SupportedAuditStatuses,
|
|
4771
5232
|
SupportedBillingPeriods,
|
|
4772
5233
|
SupportedCampaignEndKinds,
|
|
4773
5234
|
SupportedCampaignIntervalUnits,
|
|
4774
5235
|
SupportedCampaignStatuses,
|
|
4775
5236
|
SupportedCampaignTriggerKinds,
|
|
4776
5237
|
SupportedCompensationTypes,
|
|
5238
|
+
SupportedConceptSources,
|
|
4777
5239
|
SupportedContactTypes,
|
|
4778
5240
|
SupportedEducationLevels,
|
|
4779
5241
|
SupportedEmployeeCounts,
|
|
@@ -4798,6 +5260,7 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
4798
5260
|
SupportedJobSearchUrgencies,
|
|
4799
5261
|
SupportedJobStatuses,
|
|
4800
5262
|
SupportedJobSubCategories,
|
|
5263
|
+
SupportedMatchTypes,
|
|
4801
5264
|
SupportedNotificationTypes,
|
|
4802
5265
|
SupportedOccurrenceStatuses,
|
|
4803
5266
|
SupportedPaddleEnvironments,
|
|
@@ -4807,11 +5270,19 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
4807
5270
|
SupportedPlanKinds,
|
|
4808
5271
|
SupportedPlanStatuses,
|
|
4809
5272
|
SupportedPostStatuses,
|
|
5273
|
+
SupportedPrefilterRules,
|
|
4810
5274
|
SupportedProficiencyLevels,
|
|
5275
|
+
SupportedProposalFilters,
|
|
5276
|
+
SupportedProposalKinds,
|
|
5277
|
+
SupportedProposalMessageRoles,
|
|
5278
|
+
SupportedProposalStatuses,
|
|
4811
5279
|
SupportedQuestionTypes,
|
|
4812
5280
|
SupportedQuotaPeriods,
|
|
4813
5281
|
SupportedReferralSources,
|
|
5282
|
+
SupportedReleaseKinds,
|
|
5283
|
+
SupportedReleaseStatuses,
|
|
4814
5284
|
SupportedReportReasons,
|
|
5285
|
+
SupportedResolverVerdicts,
|
|
4815
5286
|
SupportedResourceTypes,
|
|
4816
5287
|
SupportedSalaryCurrencies,
|
|
4817
5288
|
SupportedSavedSearchStatuses,
|
|
@@ -4819,19 +5290,31 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
4819
5290
|
SupportedSocialAccounts,
|
|
4820
5291
|
SupportedStudyTypes,
|
|
4821
5292
|
SupportedSubscriptionStatuses,
|
|
5293
|
+
SupportedTaxonomyJobKinds,
|
|
5294
|
+
SupportedTaxonomyJobStates,
|
|
5295
|
+
SupportedTaxonomyNodeKinds,
|
|
5296
|
+
SupportedTaxonomySources,
|
|
4822
5297
|
SupportedTemplateVariableBindingKinds,
|
|
4823
5298
|
SupportedTransactionStatuses,
|
|
5299
|
+
SupportedUnmatchedReasons,
|
|
5300
|
+
SupportedUnmatchedResolutions,
|
|
4824
5301
|
SupportedUserProfileVisibilities,
|
|
4825
5302
|
SupportedUserRoles,
|
|
4826
5303
|
SupportedUserStatuses,
|
|
4827
5304
|
SupportedWorkModes,
|
|
4828
5305
|
TAXONOMY_LABELS,
|
|
5306
|
+
TAXONOMY_NODE_ID_PATTERN,
|
|
5307
|
+
TaxonomyNodeFilterSchema,
|
|
5308
|
+
TaxonomyNodeSchema,
|
|
5309
|
+
TaxonomyScheduleSchema,
|
|
4829
5310
|
TemplateVariableBindingKind,
|
|
4830
5311
|
TemplateVariableBindingSchema,
|
|
4831
5312
|
TerminalCampaignStatuses,
|
|
4832
5313
|
TerminalGeoSyncStatuses,
|
|
4833
5314
|
TermsAcceptedSchema,
|
|
4834
5315
|
TransactionStatus,
|
|
5316
|
+
UnmatchedFilterSchema,
|
|
5317
|
+
UnmatchedTermSchema,
|
|
4835
5318
|
UserAdditionalInfoSchema,
|
|
4836
5319
|
UserCertificationSchema,
|
|
4837
5320
|
UserCompletenessSchema,
|
|
@@ -4850,6 +5333,9 @@ var StudentCompletenessSchema = UserCompletenessSchema.omit([
|
|
|
4850
5333
|
UserSchema,
|
|
4851
5334
|
UserSkillSchema,
|
|
4852
5335
|
UserStatus,
|
|
5336
|
+
VOCABULARY_ID_PATTERN,
|
|
5337
|
+
VocabularySchema,
|
|
5338
|
+
VocabularyTypeSchema,
|
|
4853
5339
|
WorkExperienceSchema,
|
|
4854
5340
|
WorkMode,
|
|
4855
5341
|
canTransitionCampaign,
|