lancer-shared 1.2.123 → 1.2.125

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.
@@ -66,274 +66,276 @@ const invoiceStatusNames = {
66
66
  };
67
67
 
68
68
  const JOB_FILTER_OPTIONS = {
69
- REGIONS: ["Worldwide", "USOnly", "UKOnly"],
69
+ REGIONS: ['Worldwide', 'USOnly', 'UKOnly'],
70
70
  PROJECT_DURATION: [
71
- "Less than 1 month",
72
- "1 to 3 months",
73
- "3 to 6 months",
74
- "More than 6 months",
75
- "Unspecified",
71
+ 'Less than 1 month',
72
+ '1 to 3 months',
73
+ '3 to 6 months',
74
+ 'More than 6 months',
75
+ 'Unspecified',
76
76
  ],
77
77
  ENGAGEMENT_TYPE: [
78
- "Less than 30 hrs/week",
79
- "More than 30 hrs/week",
80
- "Unspecified",
78
+ 'Less than 30 hrs/week',
79
+ 'More than 30 hrs/week',
80
+ 'Unspecified',
81
81
  ],
82
- VENDOR_TYPE: ["Independent", "Agency", "Unspecified"],
83
- PAYMENT_TYPE: ["Unspecified", "Hourly", "Fixed-price"],
84
- TALENT_TYPE: ["Agency", "Independent", "Unspecified"],
82
+ VENDOR_TYPE: ['Independent', 'Agency', 'Unspecified'],
83
+ PAYMENT_TYPE: ['Unspecified', 'Hourly', 'Fixed-price'],
84
+ TALENT_TYPE: ['Agency', 'Independent', 'Unspecified'],
85
85
  ENGLISH_LEVELS: [
86
- "Fluent",
87
- "Conversational",
88
- "Native or Bilingual",
89
- "Unspecified",
86
+ 'Fluent',
87
+ 'Conversational',
88
+ 'Native or Bilingual',
89
+ 'Unspecified',
90
90
  ],
91
- EXPERIENCE_LEVELS: ["Entry level", "Intermediate", "Expert"],
91
+ EXPERIENCE_LEVELS: ['Entry level', 'Intermediate', 'Expert'],
92
92
  REQUIRED_EARNINGS: [100, 1000, 10000],
93
- REQUIRED_JSS: [">80%", ">90%", "100%", "RT"],
93
+ REQUIRED_JSS: ['>80%', '>90%', '100%', 'RT'],
94
94
  HIERARCHICAL_CATEGORIES: [
95
95
  {
96
- label: "Accounting & Consulting",
97
- value: "accounting-consulting",
96
+ label: 'Accounting & Consulting',
97
+ value: 'accounting-consulting',
98
98
  children: [
99
- "Accounting & Bookkeeping",
100
- "Financial Planning",
101
- "Management Consulting & Analysis",
102
- "Other - Accounting & Consulting",
103
- "Personal & Professional Coaching",
104
- "Recruiting & Human Resources",
99
+ 'Accounting & Bookkeeping',
100
+ 'Financial Planning',
101
+ 'Management Consulting & Analysis',
102
+ 'Other - Accounting & Consulting',
103
+ 'Personal & Professional Coaching',
104
+ 'Recruiting & Human Resources',
105
105
  ],
106
106
  },
107
107
  {
108
- label: "Admin Support",
109
- value: "admin-support",
108
+ label: 'Admin Support',
109
+ value: 'admin-support',
110
110
  children: [
111
- "Data Entry & Transcription Services",
112
- "Market Research & Product Reviews",
113
- "Project Management",
114
- "Virtual Assistance",
111
+ 'Data Entry & Transcription Services',
112
+ 'Market Research & Product Reviews',
113
+ 'Project Management',
114
+ 'Virtual Assistance',
115
115
  ],
116
116
  },
117
117
  {
118
- label: "Customer Service",
119
- value: "customer-service",
118
+ label: 'Customer Service',
119
+ value: 'customer-service',
120
120
  children: [
121
- "Community Management & Tagging",
122
- "Customer Service & Tech Support",
121
+ 'Community Management & Tagging',
122
+ 'Customer Service & Tech Support',
123
123
  ],
124
124
  },
125
125
  {
126
- label: "Data Science & Analytics",
127
- value: "data-science-analytics",
126
+ label: 'Data Science & Analytics',
127
+ value: 'data-science-analytics',
128
128
  children: [
129
- "AI & Machine Learning",
130
- "Data Analysis & Testing",
131
- "Data Extraction/ETL",
132
- "Data Mining & Management",
129
+ 'AI & Machine Learning',
130
+ 'Data Analysis & Testing',
131
+ 'Data Extraction/ETL',
132
+ 'Data Mining & Management',
133
133
  ],
134
134
  },
135
135
  {
136
- label: "Design & Creative",
137
- value: "design-creative",
136
+ label: 'Design & Creative',
137
+ value: 'design-creative',
138
138
  children: [
139
- "Art & Illustration",
140
- "Audio & Music Production",
141
- "Branding & Logo Design",
142
- "Graphic, Editorial & Presentation Design",
143
- "NFT, AR/VR & Game Art",
144
- "Performing Arts",
145
- "Photography",
146
- "Product Design",
147
- "Video & Animation",
139
+ 'Art & Illustration',
140
+ 'Audio & Music Production',
141
+ 'Branding & Logo Design',
142
+ 'Graphic, Editorial & Presentation Design',
143
+ 'NFT, AR/VR & Game Art',
144
+ 'Performing Arts',
145
+ 'Photography',
146
+ 'Product Design',
147
+ 'Video & Animation',
148
148
  ],
149
149
  },
150
150
  {
151
- label: "Engineering & Architecture",
152
- value: "engineering-architecture",
151
+ label: 'Engineering & Architecture',
152
+ value: 'engineering-architecture',
153
153
  children: [
154
- "3D Modeling & CAD",
155
- "Building & Landscape Architecture",
156
- "Chemical Engineering",
157
- "Civil & Structural Engineering",
158
- "Contract Manufacturing",
159
- "Electrical & Electronic Engineering",
160
- "Energy & Mechanical Engineering",
154
+ '3D Modeling & CAD',
155
+ 'Building & Landscape Architecture',
156
+ 'Chemical Engineering',
157
+ 'Civil & Structural Engineering',
158
+ 'Contract Manufacturing',
159
+ 'Electrical & Electronic Engineering',
160
+ 'Energy & Mechanical Engineering',
161
161
  ],
162
162
  },
163
163
  {
164
- label: "IT & Networking",
165
- value: "it-networking",
164
+ label: 'IT & Networking',
165
+ value: 'it-networking',
166
166
  children: [
167
- "Database Management & Administration",
168
- "DevOps & Solution Architecture",
169
- "ERP/CRM Software",
170
- "Information Security & Compliance",
171
- "Network & System Administration",
167
+ 'Database Management & Administration',
168
+ 'DevOps & Solution Architecture',
169
+ 'ERP/CRM Software',
170
+ 'Information Security & Compliance',
171
+ 'Network & System Administration',
172
172
  ],
173
173
  },
174
174
  {
175
- label: "Legal",
176
- value: "legal",
175
+ label: 'Legal',
176
+ value: 'legal',
177
177
  children: [
178
- "Corporate & Contract Law",
179
- "Finance & Tax Law",
180
- "International & Immigration Law",
181
- "Public Law",
178
+ 'Corporate & Contract Law',
179
+ 'Finance & Tax Law',
180
+ 'International & Immigration Law',
181
+ 'Public Law',
182
182
  ],
183
183
  },
184
184
  {
185
- label: "Sales & Marketing",
186
- value: "sales-marketing",
185
+ label: 'Sales & Marketing',
186
+ value: 'sales-marketing',
187
187
  children: [
188
- "Digital Marketing",
189
- "Lead Generation & Telemarketing",
190
- "Marketing, PR & Brand Strategy",
188
+ 'Digital Marketing',
189
+ 'Lead Generation & Telemarketing',
190
+ 'Marketing, PR & Brand Strategy',
191
191
  ],
192
192
  },
193
193
  {
194
- label: "Translation",
195
- value: "translation",
194
+ label: 'Translation',
195
+ value: 'translation',
196
196
  children: [
197
- "Language Tutoring & Interpretation",
198
- "Translation & Localization Services",
197
+ 'Language Tutoring & Interpretation',
198
+ 'Translation & Localization Services',
199
199
  ],
200
200
  },
201
201
  {
202
- label: "Software Development",
203
- value: "software-development",
202
+ label: 'Software Development',
203
+ value: 'software-development',
204
204
  children: [
205
- "AI Apps & Integration",
206
- "Blockchain, NFT & Cryptocurrency",
207
- "Desktop Application Development",
208
- "Ecommerce Development",
209
- "Game Design & Development",
210
- "Mobile Development",
211
- "Other - Software Development",
212
- "Product Management & Scrum",
213
- "QA Testing",
214
- "Scripts & Utilities",
215
- "Web & Mobile Design",
216
- "Web Development",
205
+ 'AI Apps & Integration',
206
+ 'Blockchain, NFT & Cryptocurrency',
207
+ 'Desktop Application Development',
208
+ 'Ecommerce Development',
209
+ 'Game Design & Development',
210
+ 'Mobile Development',
211
+ 'Other - Software Development',
212
+ 'Product Management & Scrum',
213
+ 'QA Testing',
214
+ 'Scripts & Utilities',
215
+ 'Web & Mobile Design',
216
+ 'Web Development',
217
217
  ],
218
218
  },
219
219
  {
220
- label: "Writing",
221
- value: "writing",
220
+ label: 'Writing',
221
+ value: 'writing',
222
222
  children: [
223
- "Content Writing",
224
- "Editing & Proofreading Services",
225
- "Professional & Business Writing",
226
- "Sales & Marketing Copywriting",
223
+ 'Content Writing',
224
+ 'Editing & Proofreading Services',
225
+ 'Professional & Business Writing',
226
+ 'Sales & Marketing Copywriting',
227
227
  ],
228
228
  },
229
229
  ],
230
230
  CATEGORIES: [
231
- "Personal & Professional Coaching",
232
- "Accounting & Bookkeeping",
233
- "Financial Planning",
234
- "Recruiting & Human Resources",
235
- "Management Consulting & Analysis",
236
- "Other - Accounting & Consulting",
237
- "Data Entry & Transcription Services",
238
- "Virtual Assistance",
239
- "Project Management",
240
- "Market Research & Product Reviews",
241
- "Community Management & Tagging",
242
- "Customer Service & Tech Support",
243
- "Data Analysis & Testing",
244
- "Data Extraction/ETL",
245
- "Data Mining & Management",
246
- "AI & Machine Learning",
247
- "Art & Illustration",
248
- "Audio & Music Production",
249
- "Branding & Logo Design",
250
- "NFT, AR/VR & Game Art",
251
- "Graphic, Editorial & Presentation Design",
252
- "Performing Arts",
253
- "Photography",
254
- "Product Design",
255
- "Video & Animation",
256
- "Building & Landscape Architecture",
257
- "Chemical Engineering",
258
- "Civil & Structural Engineering",
259
- "Contract Manufacturing",
260
- "Electrical & Electronic Engineering",
261
- "Energy & Mechanical Engineering",
262
- "3D Modeling & CAD",
263
- "Database Management & Administration",
264
- "ERP/CRM Software",
265
- "Information Security & Compliance",
266
- "Network & System Administration",
267
- "DevOps & Solution Architecture",
268
- "Corporate & Contract Law",
269
- "International & Immigration Law",
270
- "Finance & Tax Law",
271
- "Public Law",
272
- "Digital Marketing",
273
- "Lead Generation & Telemarketing",
274
- "Marketing, PR & Brand Strategy",
275
- "Language Tutoring & Interpretation",
276
- "Translation & Localization Services",
277
- "Blockchain, NFT & Cryptocurrency",
278
- "AI Apps & Integration",
279
- "Desktop Application Development",
280
- "Ecommerce Development",
281
- "Game Design & Development",
282
- "Mobile Development",
283
- "Other - Software Development",
284
- "Product Management & Scrum",
285
- "QA Testing",
286
- "Scripts & Utilities",
287
- "Web & Mobile Design",
288
- "Web Development",
289
- "Sales & Marketing Copywriting",
290
- "Content Writing",
291
- "Editing & Proofreading Services",
292
- "Professional & Business Writing",
231
+ 'Interior & Trade Show Design',
232
+ 'Physical Sciences',
233
+ 'Personal & Professional Coaching',
234
+ 'Accounting & Bookkeeping',
235
+ 'Financial Planning',
236
+ 'Recruiting & Human Resources',
237
+ 'Management Consulting & Analysis',
238
+ 'Other - Accounting & Consulting',
239
+ 'Data Entry & Transcription Services',
240
+ 'Virtual Assistance',
241
+ 'Project Management',
242
+ 'Market Research & Product Reviews',
243
+ 'Community Management & Tagging',
244
+ 'Customer Service & Tech Support',
245
+ 'Data Analysis & Testing',
246
+ 'Data Extraction/ETL',
247
+ 'Data Mining & Management',
248
+ 'AI & Machine Learning',
249
+ 'Art & Illustration',
250
+ 'Audio & Music Production',
251
+ 'Branding & Logo Design',
252
+ 'NFT, AR/VR & Game Art',
253
+ 'Graphic, Editorial & Presentation Design',
254
+ 'Performing Arts',
255
+ 'Photography',
256
+ 'Product Design',
257
+ 'Video & Animation',
258
+ 'Building & Landscape Architecture',
259
+ 'Chemical Engineering',
260
+ 'Civil & Structural Engineering',
261
+ 'Contract Manufacturing',
262
+ 'Electrical & Electronic Engineering',
263
+ 'Energy & Mechanical Engineering',
264
+ '3D Modeling & CAD',
265
+ 'Database Management & Administration',
266
+ 'ERP/CRM Software',
267
+ 'Information Security & Compliance',
268
+ 'Network & System Administration',
269
+ 'DevOps & Solution Architecture',
270
+ 'Corporate & Contract Law',
271
+ 'International & Immigration Law',
272
+ 'Finance & Tax Law',
273
+ 'Public Law',
274
+ 'Digital Marketing',
275
+ 'Lead Generation & Telemarketing',
276
+ 'Marketing, PR & Brand Strategy',
277
+ 'Language Tutoring & Interpretation',
278
+ 'Translation & Localization Services',
279
+ 'Blockchain, NFT & Cryptocurrency',
280
+ 'AI Apps & Integration',
281
+ 'Desktop Application Development',
282
+ 'Ecommerce Development',
283
+ 'Game Design & Development',
284
+ 'Mobile Development',
285
+ 'Other - Software Development',
286
+ 'Product Management & Scrum',
287
+ 'QA Testing',
288
+ 'Scripts & Utilities',
289
+ 'Web & Mobile Design',
290
+ 'Web Development',
291
+ 'Sales & Marketing Copywriting',
292
+ 'Content Writing',
293
+ 'Editing & Proofreading Services',
294
+ 'Professional & Business Writing',
293
295
  ],
294
296
  CLIENT_INDUSTRY: [
295
- "Aerospace",
296
- "Agriculture & Forestry",
297
- "Art & Design",
298
- "Automotive",
299
- "Aviation",
300
- "Education",
301
- "Energy & Utilities",
302
- "Engineering & Architecture",
303
- "Fashion & Beauty",
304
- "Finance & Accounting",
305
- "Food & Beverage",
306
- "Government & Public Sector",
307
- "Health & Fitness",
308
- "HR & Business Services",
309
- "Legal",
310
- "Manufacturing & Construction",
311
- "Media & Entertainment",
312
- "Military & Defense",
313
- "Mining",
314
- "Real Estate",
315
- "Retail & Consumer Goods",
316
- "Sales & Marketing",
317
- "Science & Medicine",
318
- "Sports & Recreation",
319
- "Supply Chain & Logistics",
320
- "Tech & IT",
321
- "Transportation & Warehousing",
322
- "Travel & Hospitality",
297
+ 'Aerospace',
298
+ 'Agriculture & Forestry',
299
+ 'Art & Design',
300
+ 'Automotive',
301
+ 'Aviation',
302
+ 'Education',
303
+ 'Energy & Utilities',
304
+ 'Engineering & Architecture',
305
+ 'Fashion & Beauty',
306
+ 'Finance & Accounting',
307
+ 'Food & Beverage',
308
+ 'Government & Public Sector',
309
+ 'Health & Fitness',
310
+ 'HR & Business Services',
311
+ 'Legal',
312
+ 'Manufacturing & Construction',
313
+ 'Media & Entertainment',
314
+ 'Military & Defense',
315
+ 'Mining',
316
+ 'Real Estate',
317
+ 'Retail & Consumer Goods',
318
+ 'Sales & Marketing',
319
+ 'Science & Medicine',
320
+ 'Sports & Recreation',
321
+ 'Supply Chain & Logistics',
322
+ 'Tech & IT',
323
+ 'Transportation & Warehousing',
324
+ 'Travel & Hospitality',
323
325
  ],
324
326
  CLIENT_SIZE: [
325
- "Individual client",
326
- "Small company (2-9 people)",
327
- "Mid-sized company (10-99 people)",
328
- "Large company (100-1,000 people)",
329
- "Large company (1,000+ people)",
330
- "Unspecified",
327
+ 'Individual client',
328
+ 'Small company (2-9 people)',
329
+ 'Mid-sized company (10-99 people)',
330
+ 'Large company (100-1,000 people)',
331
+ 'Large company (1,000+ people)',
332
+ 'Unspecified',
331
333
  ],
332
334
  };
333
335
  const regionNames = {
334
- Worldwide: "Worldwide",
335
- USOnly: "US Only",
336
- UKOnly: "UK Only",
336
+ Worldwide: 'Worldwide',
337
+ USOnly: 'US Only',
338
+ UKOnly: 'UK Only',
337
339
  };
338
340
 
339
341
  const jobStatusOrder = [
@@ -11094,16 +11096,16 @@ const clientSizeEnum = z.enum(JOB_FILTER_OPTIONS.CLIENT_SIZE);
11094
11096
  const talentTypeEnum = z.enum(JOB_FILTER_OPTIONS.TALENT_TYPE);
11095
11097
  const englishLevelEnum = z.enum(JOB_FILTER_OPTIONS.ENGLISH_LEVELS);
11096
11098
  const experienceLevelEnum = z.enum(JOB_FILTER_OPTIONS.EXPERIENCE_LEVELS);
11097
- const regionEnum = z.enum(["all", "Worldwide", "UKOnly", "USOnly"]);
11099
+ const regionEnum = z.enum(['all', 'Worldwide', 'UKOnly', 'USOnly']);
11098
11100
  const requiredEarningsEnum = z.union([
11099
11101
  z.literal(100),
11100
11102
  z.literal(1000),
11101
11103
  z.literal(10000),
11102
11104
  ]);
11103
11105
  const requiredJSSEnum = z.enum(JOB_FILTER_OPTIONS.REQUIRED_JSS);
11104
- const isPaymentVerifiedEnum = z.enum(["all", "true", "false"]);
11105
- const isPhoneVerifiedEnum = z.enum(["all", "true", "false"]);
11106
- const hasQuestionsEnum = z.enum(["all", "yes", "no"]);
11106
+ const isPaymentVerifiedEnum = z.enum(['all', 'true', 'false']);
11107
+ const isPhoneVerifiedEnum = z.enum(['all', 'true', 'false']);
11108
+ const hasQuestionsEnum = z.enum(['all', 'yes', 'no']);
11107
11109
  // Main job filters schema
11108
11110
  const jobFiltersSchema = z.object({
11109
11111
  keywords: z
@@ -11112,7 +11114,7 @@ const jobFiltersSchema = z.object({
11112
11114
  excludes: z.string().nullable(),
11113
11115
  })
11114
11116
  .nullable(),
11115
- isFeatured: z.enum(["all", "true", "false"]).nullable(),
11117
+ isFeatured: z.enum(['all', 'true', 'false']).nullable(),
11116
11118
  regions: z.array(regionEnum).nullable(),
11117
11119
  categories: z
11118
11120
  .object({
@@ -11139,9 +11141,9 @@ const jobFiltersSchema = z.object({
11139
11141
  engagementType: z.array(engagementTypeEnum).nullable(),
11140
11142
  clientInfo: z
11141
11143
  .object({
11142
- isPaymentVerified: isPaymentVerifiedEnum.default("all"),
11143
- isPhoneVerified: isPhoneVerifiedEnum.default("all"),
11144
- enterpriseClient: z.enum(["all", "true", "false"]).default("all"),
11144
+ isPaymentVerified: isPaymentVerifiedEnum.default('all'),
11145
+ isPhoneVerified: isPhoneVerifiedEnum.default('all'),
11146
+ enterpriseClient: z.enum(['all', 'true', 'false']).default('all'),
11145
11147
  clientLocationIncludes: z.array(z.string()).nullable(),
11146
11148
  clientLocationExcludes: z.array(z.string()).nullable(),
11147
11149
  minReviewScore: z.number().min(0).max(5).nullable(),
@@ -11982,7 +11984,7 @@ const hourlyBudgetSchema$1 = objectType({
11982
11984
  min: numberType(),
11983
11985
  max: numberType(),
11984
11986
  });
11985
- const feedJobSchemaV2 = objectType({
11987
+ const jobListingSchema = objectType({
11986
11988
  uid: stringType(),
11987
11989
  ciphertext: stringType(),
11988
11990
  title: stringType(),
@@ -12022,7 +12024,7 @@ const jobsSearchSchema = objectType({
12022
12024
  loaded: booleanType(),
12023
12025
  failed: booleanType(),
12024
12026
  }),
12025
- jobs: arrayType(feedJobSchemaV2),
12027
+ jobs: arrayType(jobListingSchema),
12026
12028
  paging: pagingSchema,
12027
12029
  abortController: anyType().nullable(),
12028
12030
  currentPage: numberType(),
@@ -12034,90 +12036,6 @@ const nuxtStateJobsSearchSchema = objectType({
12034
12036
  jobsSearch: jobsSearchSchema,
12035
12037
  }),
12036
12038
  });
12037
- // import { any, array, boolean, number, object, record, string, z } from 'zod';
12038
- // import { Region } from '../shared';
12039
- // // This schema is now more lenient to handle null values for visitor data.
12040
- // const clientSchema = object({
12041
- // location: object({
12042
- // country: string().nullable(),
12043
- // }),
12044
- // isPaymentVerified: boolean(),
12045
- // totalSpent: string().nullable(),
12046
- // totalReviews: number().nullable(), // Changed from number()
12047
- // totalFeedback: number().nullable(), // Changed from number()
12048
- // hasFinancialPrivacy: boolean().nullable(), // Changed from boolean()
12049
- // });
12050
- // const attrsSchema = object({
12051
- // uid: string(),
12052
- // parentSkillUid: string().nullable(),
12053
- // prefLabel: string(),
12054
- // prettyName: string(),
12055
- // freeText: any().nullable(),
12056
- // highlighted: boolean(),
12057
- // });
12058
- // const amountSchema = object({
12059
- // amount: number(),
12060
- // });
12061
- // const hourlyBudgetSchema = object({
12062
- // min: number(),
12063
- // max: number(),
12064
- // });
12065
- // export const feedJobSchemaV2 = object({
12066
- // uid: string(),
12067
- // ciphertext: string(),
12068
- // title: string(),
12069
- // description: string(),
12070
- // createdOn: string(),
12071
- // publishedOn: string(),
12072
- // renewedOn: string().nullable(),
12073
- // type: number(),
12074
- // durationLabel: string().nullable(),
12075
- // engagement: string().nullable(),
12076
- // amount: amountSchema,
12077
- // connectPrice: number().nullable(),
12078
- // client: clientSchema, // Uses the updated clientSchema above
12079
- // clientRelation: any().nullable(),
12080
- // freelancersToHire: number().nullable(), // Changed from number()
12081
- // relevanceEncoded: string(),
12082
- // enterpriseJob: boolean().nullable(), // Changed from boolean()
12083
- // tierText: z.string().nullable(),
12084
- // isApplied: boolean(),
12085
- // proposalsTier: string().nullable(),
12086
- // premium: boolean(),
12087
- // attrs: array(attrsSchema),
12088
- // hourlyBudget: hourlyBudgetSchema,
12089
- // weeklyBudget: amountSchema,
12090
- // isSTSVectorSearchResult: boolean().optional(), // Changed from boolean()
12091
- // });
12092
- // const pagingSchema = object({
12093
- // total: number(),
12094
- // offset: number(),
12095
- // count: number(),
12096
- // });
12097
- // const jobsSearchSchema = object({
12098
- // status: object({
12099
- // loading: boolean(),
12100
- // loaded: boolean(),
12101
- // failed: boolean(),
12102
- // }),
12103
- // jobs: array(feedJobSchemaV2),
12104
- // paging: pagingSchema,
12105
- // abortController: any().nullable(),
12106
- // currentPage: number(),
12107
- // jobsPerPage: number(),
12108
- // searchQueryCache: record(string()),
12109
- // });
12110
- // export const nuxtStateJobsSearchSchema = object({
12111
- // state: object({
12112
- // jobsSearch: jobsSearchSchema,
12113
- // }),
12114
- // });
12115
- // export interface NuxtStateJobsSearch
12116
- // extends z.infer<typeof nuxtStateJobsSearchSchema> {}
12117
- // export interface FeedJobV2 extends z.infer<typeof feedJobSchemaV2> {
12118
- // jobUrl: string;
12119
- // region: Region;
12120
- // }
12121
12039
 
12122
12040
  // Field mapping from feed-job to job-details for the missing fields that were added
12123
12041
  const FEED_JOB_TO_JOB_DETAILS_FIELD_MAPPING = {
@@ -12816,6 +12734,9 @@ const agencyBidProposalDataSchema = bidPayloadProposalDataSchema.extend({
12816
12734
  specializedProfile: z.string().nullable(),
12817
12735
  });
12818
12736
  const bidPayloadSchema = z.object({
12737
+ organizationId: z.string(),
12738
+ campaignId: z.string(),
12739
+ lead: leadSchema,
12819
12740
  jobUrl: z.string(),
12820
12741
  username: z.string(),
12821
12742
  password: z.string(),
@@ -13025,6 +12946,14 @@ function proposalFormWarningAlertException(message) {
13025
12946
  return new ProposalFormWarningAlertException(message);
13026
12947
  }
13027
12948
 
12949
+ class ProposalGenerationFailedException extends Error {
12950
+ code = 'PROPOSAL_GENERATION_FAILED_EXCEPTION';
12951
+ constructor(message, organizationId, campaignId, leadId) {
12952
+ super(`Proposal generation failed for lead ${leadId} in campaign ${campaignId} in organization ${organizationId}\n\n${message}`);
12953
+ }
12954
+ }
12955
+ const proposalGenerationFailed = (message, leadId, campaignId, organizationId) => new ProposalGenerationFailedException(message, organizationId, campaignId, leadId);
12956
+
13028
12957
  class ProposalSubmitFailedException extends Error {
13029
12958
  code = 'PROPOSAL_SUBMIT_FAILED';
13030
12959
  constructor(message) {
@@ -13109,250 +13038,10 @@ class WaitForFunctionTimeoutError extends Error {
13109
13038
  }
13110
13039
  const waitForFunctionTimeoutError = (fn, timeout) => new WaitForFunctionTimeoutError(fn, timeout);
13111
13040
 
13112
- const proposalSchema = z.object({
13113
- coverLetter: z.string(),
13114
- questionAnswerPairs: questionAnswerPairSchema.array(),
13115
- });
13116
-
13117
- const LogEventTypeEnum = z.enum([
13118
- // Scraper Events
13119
- 'scraperStarted',
13120
- 'scraperCompleted',
13121
- 'scrapeJobStarted',
13122
- 'jobScraped',
13123
- 'jobScrapeFailed',
13124
- 'scrapeJobDetailsStarted',
13125
- 'scrapeJobDetailsCompleted',
13126
- 'scrapeJobDetailsFailed',
13127
- 'jobsIndexed',
13128
- 'jobDuplicateSkipped',
13129
- 'scraperFailed',
13130
- 'jobActivityScraped',
13131
- 'jobActivityScrapeFailed',
13132
- 'leadStatusCheckFailed',
13133
- 'leadStatusUpdated',
13134
- // Feed Scraper Events
13135
- 'feedScrapeStarted',
13136
- 'feedScrapeCompleted',
13137
- 'feedScrapeFailed',
13138
- 'jobListingScraped',
13139
- // Job Sync & Campaign Matching
13140
- 'jobSyncPublished',
13141
- 'jobSyncReceived',
13142
- 'leadsCreatedAndSynced',
13143
- // Suitability Events
13144
- 'suitabilityPending',
13145
- 'suitabilityProcessing',
13041
+ const usageEventTypeEnum = z.enum([
13146
13042
  'suitabilityComplete',
13147
- 'suitabilityFailed',
13148
- 'manualSuitabilityAnalyzed',
13149
- // Proposal Events
13150
- 'proposalProcessing',
13151
13043
  'proposalComplete',
13152
- 'proposalFailed',
13153
- 'manualProposalGenerated',
13154
- // Bidding Events
13155
- 'biddingProcessing',
13156
13044
  'biddingComplete',
13157
- 'biddingFailed',
13158
- 'biddingSkipped',
13159
- 'biddingPending',
13160
- 'biddingRetry',
13161
- 'biddingInsufficientConnects',
13162
- 'biddingWarningAlert',
13163
- 'biddingRejected',
13164
- 'biddingRejectedWithFeedback',
13165
- 'checkSuitableLeadFeedbackStatus',
13166
- 'biddingApproved',
13167
- // System/Generic Events
13168
- 'errorLogged',
13169
- 'cloudTaskRetry',
13170
- 'manualLeadEdited',
13171
- 'leadArchived',
13172
- 'auditTrailLogged',
13173
- // Account Events
13174
- 'scraperAccountError',
13175
- ]);
13176
- const logEventSchema = z.object({
13177
- // The type of event (use a z.enum if possible)
13178
- type: LogEventTypeEnum, // e.g. "suitability-failed", "proposal-generated"
13179
- // The service that triggered the event
13180
- source: z.string(), // e.g. "lancer-agents", "lancer-bidding"
13181
- // Optional: Allow logging non-lead events in the future
13182
- resourceType: z.string().default('lead'), // e.g. "lead", "campaign", "user"
13183
- // ID of the resource (primary entity affected)
13184
- resourceId: z.string().nullable(), // fallback if leadId is not applicable
13185
- // Lead-level metadata
13186
- organizationId: z.string().nullable(),
13187
- userId: z.string().nullable(),
13188
- campaignId: z.string().nullable(),
13189
- leadId: z.string().nullable(),
13190
- // Reason or message for the event
13191
- reason: z.string().nullable(),
13192
- // Generic metadata (stacktrace, score, raw request, etc.)
13193
- metadata: z.record(z.unknown()).nullable(),
13194
- // Optional timestamp override
13195
- timestamp: z.number(),
13196
- });
13197
- const listingScrapedEventMetadata = objectType({
13198
- listing: feedJobSchemaV2,
13199
- region: regionSchema,
13200
- });
13201
- const scrapeFeedEventMetadata = objectType({
13202
- region: regionSchema,
13203
- error: stringType(),
13204
- });
13205
- const scrapeFeedJobsDetailsStartedEventMetadata = objectType({
13206
- region: regionSchema,
13207
- accounts: z.array(z.object({
13208
- id: stringType(),
13209
- email: stringType(),
13210
- })),
13211
- feedJobsCount: numberType(),
13212
- chunksSize: numberType(),
13213
- });
13214
- const scrapeFeedJobsDetailsCompletedEventMetadata = objectType({
13215
- region: regionSchema,
13216
- accountId: stringType(),
13217
- accountEmail: stringType(),
13218
- feedJobsCount: numberType(),
13219
- duration: stringType(),
13220
- });
13221
- const scrapeFeedJobsDetailsFailedEventMetadata = objectType({
13222
- region: regionSchema,
13223
- accountId: stringType(),
13224
- accountEmail: stringType(),
13225
- error: stringType(),
13226
- duration: stringType(),
13227
- });
13228
- const scrapeJobStartedEventMetadata = objectType({
13229
- listing: feedJobSchemaV2,
13230
- region: regionSchema,
13231
- accountId: stringType(),
13232
- accountEmail: stringType(),
13233
- });
13234
- const scrapeJobFailedEventMetadata = objectType({
13235
- listing: feedJobSchemaV2,
13236
- region: regionSchema,
13237
- error: stringType(),
13238
- });
13239
- const jobActivityScrapedEventMetadata = objectType({
13240
- activity: jobActivitySchema,
13241
- region: regionSchema,
13242
- offsetHour: jobActivityOffsetHourSchema,
13243
- scrapedAt: numberType(),
13244
- });
13245
- const jobActivityScrapeFailedEventMetadata = objectType({
13246
- listing: feedJobSchemaV2,
13247
- region: regionSchema,
13248
- offsetHour: jobActivityOffsetHourSchema,
13249
- });
13250
- const feedScrapeStartedEventMetadata = objectType({
13251
- id: stringType(),
13252
- startTime: numberType(),
13253
- region: regionSchema,
13254
- });
13255
- const feedScrapeCompletedEventMetadata = objectType({
13256
- id: stringType(),
13257
- endTime: numberType(),
13258
- listingCount: numberType(),
13259
- duration: stringType(),
13260
- accountEmail: stringType(),
13261
- region: regionSchema,
13262
- durationMillis: numberType().nullish(),
13263
- });
13264
- const biddingCompletedEventMetadata = objectType({
13265
- biddingAmount: numberType(),
13266
- boosted: booleanType(),
13267
- boostingAmount: numberType(),
13268
- });
13269
- const biddingFailedEventMetadata = objectType({
13270
- error: z.any(),
13271
- });
13272
- const userAccountBiddingExceptionEventMetadata = objectType({
13273
- errorType: z.enum(['insufficientConnects', 'proposalFormWarningAlert']),
13274
- context: z.string().optional(),
13275
- });
13276
- const lancerBiddingExceptionEventMetadata = objectType({
13277
- errorType: z.string(),
13278
- errorMessage: z.string(),
13279
- context: z.string().optional(),
13280
- });
13281
- const leadStatusEventMetadata = objectType({
13282
- campaignId: stringType(),
13283
- organizationId: stringType(),
13284
- leadId: stringType(),
13285
- userId: stringType(),
13286
- metadata: z
13287
- .object({
13288
- status: leadStatusSchema,
13289
- proposalId: stringType().nullable(),
13290
- })
13291
- .optional(),
13292
- reason: z.string().optional(),
13293
- });
13294
- const scraperAccountErrorEventMetadata = objectType({
13295
- accountId: stringType(),
13296
- accountEmail: stringType(),
13297
- errorCode: stringType(),
13298
- errorMessage: stringType(),
13299
- });
13300
- const biddingRejectedWithFeedbackEventMetadata = objectType({
13301
- feedback: z.string(),
13302
- });
13303
- const suitabilityPendingEventMetadataSchema = objectType({
13304
- jobId: z.string(),
13305
- jobUrl: z.string(),
13306
- title: z.string(),
13307
- timestamp: z.number(),
13308
- applyToLeads: z.array(z.object({ leadId: z.string(), campaignId: z.string() })),
13309
- });
13310
- const suitabilityCompleteEventMetadataSchema = objectType({
13311
- suitabilityRating: z.number(),
13312
- suitabilityReason: z.string(),
13313
- agentStatus: z.string().optional(),
13314
- model: z.string().optional(),
13315
- provider: z.string().optional(),
13316
- promptTokens: z.number().optional(),
13317
- completionTokens: z.number().optional(),
13318
- messages: z
13319
- .array(objectType({
13320
- role: z.string(),
13321
- content: z.string(),
13322
- }))
13323
- .optional(),
13324
- jobId: z.string(),
13325
- applyToLeads: z.array(z.object({ leadId: z.string(), campaignId: z.string() })),
13326
- });
13327
- const suitabilityFailedEventMetadataSchema = objectType({
13328
- agentStatus: z.string(),
13329
- reason: z.string(),
13330
- });
13331
- const proposalCompleteEventMetadataSchema = objectType({
13332
- proposal: proposalSchema,
13333
- model: z.string().optional(),
13334
- provider: z.string().optional(),
13335
- promptTokens: z.number().optional(),
13336
- completionTokens: z.number().optional(),
13337
- messages: z
13338
- .array(objectType({
13339
- role: z.string(),
13340
- content: z.string(),
13341
- }))
13342
- .optional(),
13343
- jobId: z.string(),
13344
- isOverallHighestPriorityCampaign: z.boolean(),
13345
- applyToLeads: z.array(z.object({ leadId: z.string(), campaignId: z.string() })),
13346
- });
13347
- const eventLoggerPayloadSchema = unionType([
13348
- logEventSchema,
13349
- arrayType(logEventSchema),
13350
- ]);
13351
-
13352
- const usageEventTypeEnum = LogEventTypeEnum.extract([
13353
- "suitabilityComplete",
13354
- "proposalComplete",
13355
- "biddingComplete",
13356
13045
  ]);
13357
13046
  const usageEventMetadataSchema = objectType({
13358
13047
  campaignId: stringType().nullable(),
@@ -13438,8 +13127,8 @@ const onboardingProgressSchema = z.object({
13438
13127
  startCampaign: z.boolean(),
13439
13128
  });
13440
13129
 
13441
- const organizationTypeSchema = z.enum(["agency", "freelancer"]);
13442
- const organizationTierEnum = z.enum(["free", "premium"]);
13130
+ const organizationTypeSchema = z.enum(['agency', 'freelancer']);
13131
+ const organizationTierEnum = z.enum(['free', 'premium']);
13443
13132
  const limitsSchema = objectType({
13444
13133
  monthlyCredits: numberType(),
13445
13134
  usedCredits: numberType(),
@@ -13467,7 +13156,7 @@ const caseStudySchema = objectType({
13467
13156
  description: stringType(),
13468
13157
  });
13469
13158
  z.object({
13470
- type: z.enum(["freelancer", "agency"]),
13159
+ type: z.enum(['freelancer', 'agency']),
13471
13160
  name: z.string(),
13472
13161
  summary: z.string(),
13473
13162
  coreServices: z.string(),
@@ -13487,10 +13176,10 @@ const createOrganizationSchema = organizationSchema.pick({
13487
13176
  name: true,
13488
13177
  type: true,
13489
13178
  });
13490
- const trackUsageEventTypeEnum = LogEventTypeEnum.extract([
13491
- "suitabilityComplete",
13492
- "proposalComplete",
13493
- "biddingComplete",
13179
+ const trackUsageEventTypeEnum = z.enum([
13180
+ 'suitabilityComplete',
13181
+ 'proposalComplete',
13182
+ 'biddingComplete',
13494
13183
  ]);
13495
13184
  const trackUsagePayloadSchema = objectType({
13496
13185
  event: usageEventTypeEnum,
@@ -13521,8 +13210,8 @@ const organizationSettingsSchema = objectType({
13521
13210
  aiConfig: aiConfigSchema,
13522
13211
  });
13523
13212
  const subscribePayloadSchema = objectType({
13524
- planId: stringType().min(1, "Plan id is required."),
13525
- paymentMethodId: stringType().min(1, "Payment method is required."),
13213
+ planId: stringType().min(1, 'Plan id is required.'),
13214
+ paymentMethodId: stringType().min(1, 'Payment method is required.'),
13526
13215
  toltReferral: stringType().optional(),
13527
13216
  couponCode: stringType().nullish(),
13528
13217
  });
@@ -13859,7 +13548,35 @@ const invoiceSchema = objectType({
13859
13548
  updatedAt: numberType(),
13860
13549
  });
13861
13550
 
13862
- const agentTaskRequestSchema = z.object({
13551
+ const proposalSchema = z.object({
13552
+ coverLetter: z.string(),
13553
+ questionAnswerPairs: questionAnswerPairSchema.array(),
13554
+ });
13555
+
13556
+ const agentGenerateProposalRequestSchema = z.object({
13557
+ userId: z.string().nullable(),
13558
+ organizationId: z.string(),
13559
+ campaignId: z.string(),
13560
+ job: z.object({
13561
+ id: z.string(),
13562
+ title: z.string(),
13563
+ description: z.string(),
13564
+ questions: z.array(z.string()),
13565
+ clientCountry: z.string(),
13566
+ }),
13567
+ isOverallHighestPriorityCampaign: z.boolean().optional(),
13568
+ applyToLeads: z
13569
+ .array(z.object({ leadId: z.string(), campaignId: z.string() }))
13570
+ .optional(),
13571
+ });
13572
+ const agentGenerateProposalResponseSchema = z.object({
13573
+ coverLetter: z.string(),
13574
+ questionAnswerPairs: z.array(z.object({
13575
+ question: z.string(),
13576
+ answer: z.string(),
13577
+ })),
13578
+ });
13579
+ const agentCalculateSuitabilityRequestSchema = z.object({
13863
13580
  userId: z.string().nullable(),
13864
13581
  organizationId: z.string(),
13865
13582
  campaignId: z.string(),
@@ -13885,6 +13602,247 @@ const agentTaskResponseSchema = z.object({
13885
13602
  completionTokens: z.number(),
13886
13603
  });
13887
13604
 
13605
+ const LogEventTypeEnum = z.enum([
13606
+ // Lead Status Events
13607
+ 'leadStatusCheckFailed',
13608
+ 'leadStatusUpdated',
13609
+ // Job Sync & Campaign Matching
13610
+ 'jobSyncPublished',
13611
+ 'jobSyncReceived',
13612
+ 'jobsIndexed',
13613
+ 'leadsCreatedAndSynced',
13614
+ 'jobDuplicateSkipped',
13615
+ // Suitability Events
13616
+ 'suitabilityPending',
13617
+ 'suitabilityProcessing',
13618
+ 'suitabilityComplete',
13619
+ 'suitabilityFailed',
13620
+ 'manualSuitabilityAnalyzed',
13621
+ // Proposal Events
13622
+ 'proposalProcessing',
13623
+ 'proposalComplete',
13624
+ 'proposalFailed',
13625
+ 'manualProposalGenerated',
13626
+ // Bidding Events
13627
+ 'biddingProcessing',
13628
+ 'biddingComplete',
13629
+ 'biddingFailed',
13630
+ 'biddingSkipped',
13631
+ 'biddingPending',
13632
+ 'biddingRetry',
13633
+ 'biddingInsufficientConnects',
13634
+ 'biddingWarningAlert',
13635
+ 'biddingRejected',
13636
+ 'biddingRejectedWithFeedback',
13637
+ 'checkSuitableLeadFeedbackStatus',
13638
+ 'biddingApproved',
13639
+ // System/Generic Events
13640
+ 'errorLogged',
13641
+ 'cloudTaskRetry',
13642
+ 'manualLeadEdited',
13643
+ 'leadArchived',
13644
+ 'auditTrailLogged',
13645
+ // Scraper Events
13646
+ 'scrapeFeedStarted',
13647
+ 'scrapeFeedCompleted',
13648
+ 'scrapeFeedFailed',
13649
+ 'scrapeJobDetailsStarted',
13650
+ 'jobScraped',
13651
+ 'scrapeJobDetailsFailed',
13652
+ 'scrapeJobsDetailsStarted',
13653
+ 'scrapeJobsDetailsCompleted',
13654
+ 'scrapeJobsDetailsFailed',
13655
+ 'scrapeJobsCompleted',
13656
+ 'scraperAccountError',
13657
+ ]);
13658
+ const logEventSchema = z.object({
13659
+ // The type of event (use a z.enum if possible)
13660
+ type: LogEventTypeEnum, // e.g. "suitability-failed", "proposal-generated"
13661
+ // The service that triggered the event
13662
+ source: z.string(), // e.g. "lancer-agents", "lancer-bidding"
13663
+ // Optional: Allow logging non-lead events in the future
13664
+ resourceType: z.string().default('lead'), // e.g. "lead", "campaign", "user"
13665
+ // ID of the resource (primary entity affected)
13666
+ resourceId: z.string().nullable(), // fallback if leadId is not applicable
13667
+ // Lead-level metadata
13668
+ organizationId: z.string().nullable(),
13669
+ userId: z.string().nullable(),
13670
+ campaignId: z.string().nullable(),
13671
+ leadId: z.string().nullable(),
13672
+ // Reason or message for the event
13673
+ reason: z.string().nullable(),
13674
+ // Generic metadata (stacktrace, score, raw request, etc.)
13675
+ metadata: z.record(z.unknown()).nullable(),
13676
+ // Optional timestamp override
13677
+ timestamp: z.number(),
13678
+ });
13679
+ const biddingCompletedEventMetadata = objectType({
13680
+ biddingAmount: numberType(),
13681
+ boosted: booleanType(),
13682
+ boostingAmount: numberType(),
13683
+ });
13684
+ const biddingFailedEventMetadata = objectType({
13685
+ error: z.any(),
13686
+ });
13687
+ const userAccountBiddingExceptionEventMetadata = objectType({
13688
+ errorType: z.enum(['insufficientConnects', 'proposalFormWarningAlert']),
13689
+ context: z.string().optional(),
13690
+ });
13691
+ const lancerBiddingExceptionEventMetadata = objectType({
13692
+ errorType: z.string(),
13693
+ errorMessage: z.string(),
13694
+ context: z.string().optional(),
13695
+ });
13696
+ const leadStatusEventMetadata = objectType({
13697
+ campaignId: stringType(),
13698
+ organizationId: stringType(),
13699
+ leadId: stringType(),
13700
+ userId: stringType(),
13701
+ metadata: z
13702
+ .object({
13703
+ status: leadStatusSchema,
13704
+ proposalId: stringType().nullable(),
13705
+ })
13706
+ .optional(),
13707
+ reason: z.string().optional(),
13708
+ });
13709
+ const biddingRejectedWithFeedbackEventMetadata = objectType({
13710
+ feedback: z.string(),
13711
+ });
13712
+ const suitabilityPendingEventMetadataSchema = objectType({
13713
+ jobId: z.string(),
13714
+ jobUrl: z.string(),
13715
+ title: z.string(),
13716
+ timestamp: z.number(),
13717
+ applyToLeads: z.array(z.object({ leadId: z.string(), campaignId: z.string() })),
13718
+ });
13719
+ const suitabilityCompleteEventMetadataSchema = objectType({
13720
+ suitabilityRating: z.number(),
13721
+ suitabilityReason: z.string(),
13722
+ agentStatus: z.string().optional(),
13723
+ model: z.string().optional(),
13724
+ provider: z.string().optional(),
13725
+ promptTokens: z.number().optional(),
13726
+ completionTokens: z.number().optional(),
13727
+ messages: z
13728
+ .array(objectType({
13729
+ role: z.string(),
13730
+ content: z.string(),
13731
+ }))
13732
+ .optional(),
13733
+ jobId: z.string(),
13734
+ applyToLeads: z.array(z.object({ leadId: z.string(), campaignId: z.string() })),
13735
+ });
13736
+ const suitabilityFailedEventMetadataSchema = objectType({
13737
+ agentStatus: z.string(),
13738
+ reason: z.string(),
13739
+ });
13740
+ const proposalCompleteEventMetadataSchema = objectType({
13741
+ proposal: proposalSchema,
13742
+ model: z.string().optional(),
13743
+ provider: z.string().optional(),
13744
+ promptTokens: z.number().optional(),
13745
+ completionTokens: z.number().optional(),
13746
+ messages: z
13747
+ .array(objectType({
13748
+ role: z.string(),
13749
+ content: z.string(),
13750
+ }))
13751
+ .optional(),
13752
+ jobId: z.string(),
13753
+ isOverallHighestPriorityCampaign: z.boolean(),
13754
+ applyToLeads: z.array(z.object({ leadId: z.string(), campaignId: z.string() })),
13755
+ });
13756
+ const eventLoggerPayloadSchema = unionType([
13757
+ logEventSchema,
13758
+ arrayType(logEventSchema),
13759
+ ]);
13760
+
13761
+ const scrapeFeedStartedEventMetadata = objectType({
13762
+ region: regionSchema,
13763
+ accountId: stringType(),
13764
+ accountEmail: stringType(),
13765
+ });
13766
+ const scrapeFeedCompletedEventMetadata = objectType({
13767
+ region: regionSchema,
13768
+ accountId: stringType(),
13769
+ accountEmail: stringType(),
13770
+ listingsCount: numberType(),
13771
+ duration: stringType(),
13772
+ });
13773
+ const scrapeFeedFailedEventMetadata = objectType({
13774
+ region: regionSchema,
13775
+ accountId: stringType(),
13776
+ accountEmail: stringType(),
13777
+ errorMessage: stringType(),
13778
+ errorCode: stringType(),
13779
+ errorStack: stringType(),
13780
+ });
13781
+ const scrapeJobDetailsStartedEventMetadata = objectType({
13782
+ listing: jobListingSchema,
13783
+ region: regionSchema,
13784
+ accountId: stringType(),
13785
+ accountEmail: stringType(),
13786
+ });
13787
+ const jobScrapedEventMetadata = objectType({
13788
+ job: jobListingSchema,
13789
+ region: regionSchema,
13790
+ duration: stringType(),
13791
+ });
13792
+ const scrapeJobDetailsFailedEventMetadata = objectType({
13793
+ listing: jobListingSchema,
13794
+ region: regionSchema,
13795
+ error: stringType(),
13796
+ });
13797
+ const scrapeJobsDetailsStartedEventMetadata = objectType({
13798
+ region: regionSchema,
13799
+ accountIds: arrayType(stringType()),
13800
+ accountEmails: arrayType(stringType()),
13801
+ jobListingsCount: numberType(),
13802
+ });
13803
+ const scrapeJobsDetailsCompletedEventMetadata = objectType({
13804
+ region: regionSchema,
13805
+ feedScraperAccountId: stringType(),
13806
+ feedScraperAccountEmail: stringType(),
13807
+ uniqueJobsFound: numberType(),
13808
+ duration: stringType(),
13809
+ successfullyScrapedJobsCount: numberType(),
13810
+ failedToScrapeJobsCount: numberType(),
13811
+ });
13812
+ const scrapeJobsDetailsFailedEventMetadata = objectType({
13813
+ region: regionSchema,
13814
+ accountId: stringType(),
13815
+ accountEmail: stringType(),
13816
+ errorMessage: stringType(),
13817
+ errorCode: stringType(),
13818
+ errorStack: stringType(),
13819
+ });
13820
+ const scrapeJobsCompletedEventMetadata = objectType({
13821
+ region: regionSchema,
13822
+ feedScraperAccountId: stringType(),
13823
+ feedScraperAccountEmail: stringType(),
13824
+ uniqueJobsFound: numberType(),
13825
+ duration: stringType(),
13826
+ successfullyScrapedJobsCount: numberType(),
13827
+ failedToScrapeJobsCount: numberType(),
13828
+ });
13829
+ const jobActivityScrapedEventMetadata = objectType({
13830
+ activity: jobActivitySchema,
13831
+ region: regionSchema,
13832
+ offsetHour: jobActivityOffsetHourSchema,
13833
+ scrapedAt: numberType(),
13834
+ });
13835
+ const jobActivityScrapeFailedEventMetadata = objectType({
13836
+ listing: jobListingSchema,
13837
+ region: regionSchema,
13838
+ offsetHour: jobActivityOffsetHourSchema,
13839
+ });
13840
+ const scraperAccountErrorEventMetadata = objectType({
13841
+ errorStack: stringType(),
13842
+ errorCode: stringType(),
13843
+ errorMessage: stringType(),
13844
+ });
13845
+
13888
13846
  const planStripeMetadataSchema = objectType({
13889
13847
  id: stringType().regex(/^prod_[a-zA-Z0-9]+$/),
13890
13848
  name: stringType(),
@@ -13929,7 +13887,7 @@ const scrapeUserProfileRequestSchema = objectType({
13929
13887
  profileUrl: stringType(),
13930
13888
  });
13931
13889
  const scrapeJobPayloadSchema = objectType({
13932
- listing: feedJobSchema,
13890
+ listing: jobListingSchema,
13933
13891
  });
13934
13892
  const processFeedPayloadSchema = objectType({
13935
13893
  region: regionSchema,
@@ -13983,8 +13941,8 @@ const upworkProfileSchema = objectType({
13983
13941
  });
13984
13942
 
13985
13943
  class NoScraperAccountAvailableException extends Error {
13986
- code = "NO_SCRAPER_ACCOUNT_AVAILABLE";
13987
- constructor(message = "No scraper account available.") {
13944
+ code = 'NO_SCRAPER_ACCOUNT_AVAILABLE';
13945
+ constructor(message = 'No scraper account available.') {
13988
13946
  super(message);
13989
13947
  }
13990
13948
  }
@@ -13992,8 +13950,8 @@ const noScraperAccountAvailableException = (message) => {
13992
13950
  return new NoScraperAccountAvailableException(message);
13993
13951
  };
13994
13952
  class OpenPageException extends Error {
13995
- code = "OPEN_PAGE_FAILED";
13996
- constructor(message = "Failed to open page.") {
13953
+ code = 'OPEN_PAGE_FAILED';
13954
+ constructor(message = 'Failed to open page.') {
13997
13955
  super(message);
13998
13956
  }
13999
13957
  }
@@ -14001,14 +13959,32 @@ const openPageException = (message) => {
14001
13959
  return new OpenPageException(message);
14002
13960
  };
14003
13961
  class FeedScrapeException extends Error {
14004
- code = "FEED_SCRAPE_FAILED";
14005
- constructor(message = "Feed scrape failed.") {
13962
+ code = 'FEED_SCRAPE_FAILED';
13963
+ constructor(message = 'Feed scrape failed.') {
14006
13964
  super(message);
14007
13965
  }
14008
13966
  }
14009
13967
  const feedScrapeException = (message) => {
14010
13968
  return new FeedScrapeException(message);
14011
13969
  };
13970
+ class ParseJobListingsException extends Error {
13971
+ code = 'PARSE_JOB_LISTINGS_FAILED';
13972
+ constructor(message = 'Failed to parse job listings.') {
13973
+ super(message);
13974
+ }
13975
+ }
13976
+ const parseJobListingsException = (message) => {
13977
+ return new ParseJobListingsException(message);
13978
+ };
13979
+ class ScrapeJobDetailsException extends Error {
13980
+ code = 'SCRAPE_JOB_DETAILS_FAILED';
13981
+ constructor(jobListing) {
13982
+ super(`Failed to scrape job details for ${JSON.stringify(jobListing)}.`);
13983
+ }
13984
+ }
13985
+ const scrapeJobDetailsException = (jobListing) => {
13986
+ return new ScrapeJobDetailsException(jobListing);
13987
+ };
14012
13988
 
14013
13989
  const systemPromptSchema = objectType({
14014
13990
  suitability: stringType(),
@@ -14552,12 +14528,15 @@ exports.NoGoogleOAuthTokensFoundException = NoGoogleOAuthTokensFoundException;
14552
14528
  exports.NoScraperAccountAvailableException = NoScraperAccountAvailableException;
14553
14529
  exports.OpenPageException = OpenPageException;
14554
14530
  exports.ParseConnectsException = ParseConnectsException;
14531
+ exports.ParseJobListingsException = ParseJobListingsException;
14555
14532
  exports.ProposalErrorAlertException = ProposalErrorAlertException;
14556
14533
  exports.ProposalFormWarningAlertException = ProposalFormWarningAlertException;
14534
+ exports.ProposalGenerationFailedException = ProposalGenerationFailedException;
14557
14535
  exports.ProposalSubmitFailedException = ProposalSubmitFailedException;
14558
14536
  exports.PuppeteerConnectionErrorException = PuppeteerConnectionErrorException;
14559
14537
  exports.QuestionPairNotMatchingException = QuestionPairNotMatchingException;
14560
14538
  exports.ROUTES = ROUTES;
14539
+ exports.ScrapeJobDetailsException = ScrapeJobDetailsException;
14561
14540
  exports.SelectAgencyException = SelectAgencyException;
14562
14541
  exports.SelectContractorException = SelectContractorException;
14563
14542
  exports.SelectorNotFoundError = SelectorNotFoundError;
@@ -14571,8 +14550,10 @@ exports.accountStatusOrder = accountStatusOrder;
14571
14550
  exports.accountStatusSchema = accountStatusSchema;
14572
14551
  exports.agencyBidPayloadSchema = agencyBidPayloadSchema;
14573
14552
  exports.agencyBidProposalDataSchema = agencyBidProposalDataSchema;
14553
+ exports.agentCalculateSuitabilityRequestSchema = agentCalculateSuitabilityRequestSchema;
14554
+ exports.agentGenerateProposalRequestSchema = agentGenerateProposalRequestSchema;
14555
+ exports.agentGenerateProposalResponseSchema = agentGenerateProposalResponseSchema;
14574
14556
  exports.agentStatusSchema = agentStatusSchema;
14575
- exports.agentTaskRequestSchema = agentTaskRequestSchema;
14576
14557
  exports.agentTaskResponseSchema = agentTaskResponseSchema;
14577
14558
  exports.aiConfigSchema = aiConfigSchema;
14578
14559
  exports.bidConfigSchema = bidConfigSchema;
@@ -14644,10 +14625,7 @@ exports.experienceLevelEnum = experienceLevelEnum;
14644
14625
  exports.externalProxySchema = externalProxySchema;
14645
14626
  exports.failedToParseNuxtJobException = failedToParseNuxtJobException;
14646
14627
  exports.feedJobSchema = feedJobSchema;
14647
- exports.feedJobSchemaV2 = feedJobSchemaV2;
14648
- exports.feedScrapeCompletedEventMetadata = feedScrapeCompletedEventMetadata;
14649
14628
  exports.feedScrapeException = feedScrapeException;
14650
- exports.feedScrapeStartedEventMetadata = feedScrapeStartedEventMetadata;
14651
14629
  exports.filterOptionItemSchema = filterOptionItemSchema;
14652
14630
  exports.filterOptionsResponseSchema = filterOptionsResponseSchema;
14653
14631
  exports.findLeadsRequestSchema = findLeadsRequestSchema;
@@ -14691,7 +14669,9 @@ exports.jobActivityUpdateSchema = jobActivityUpdateSchema;
14691
14669
  exports.jobDetailsStateSchema = jobDetailsStateSchema;
14692
14670
  exports.jobFiltersSchema = jobFiltersSchema;
14693
14671
  exports.jobIsPrivateException = jobIsPrivateException;
14672
+ exports.jobListingSchema = jobListingSchema;
14694
14673
  exports.jobQualityScoreSchema = jobQualityScoreSchema;
14674
+ exports.jobScrapedEventMetadata = jobScrapedEventMetadata;
14695
14675
  exports.jobSkillsSchema = jobSkillsSchema;
14696
14676
  exports.jobStatusOrder = jobStatusOrder;
14697
14677
  exports.lancerBiddingExceptionEventMetadata = lancerBiddingExceptionEventMetadata;
@@ -14702,7 +14682,6 @@ exports.leadStatusActivitySchema = leadStatusActivitySchema;
14702
14682
  exports.leadStatusEventMetadata = leadStatusEventMetadata;
14703
14683
  exports.leadStatusSchema = leadStatusSchema;
14704
14684
  exports.limitsSchema = limitsSchema;
14705
- exports.listingScrapedEventMetadata = listingScrapedEventMetadata;
14706
14685
  exports.logEventSchema = logEventSchema;
14707
14686
  exports.loginFailedException = loginFailedException;
14708
14687
  exports.loginSchema = loginSchema;
@@ -14728,6 +14707,7 @@ exports.organizationSettingsSchema = organizationSettingsSchema;
14728
14707
  exports.organizationTierEnum = organizationTierEnum;
14729
14708
  exports.organizationTypeSchema = organizationTypeSchema;
14730
14709
  exports.parseConnectsException = parseConnectsException;
14710
+ exports.parseJobListingsException = parseJobListingsException;
14731
14711
  exports.passwordSchema = passwordSchema;
14732
14712
  exports.paymentTypeEnum = paymentTypeEnum;
14733
14713
  exports.periodTypeSchema = periodTypeSchema;
@@ -14742,6 +14722,7 @@ exports.projectDurationEnum = projectDurationEnum;
14742
14722
  exports.proposalCompleteEventMetadataSchema = proposalCompleteEventMetadataSchema;
14743
14723
  exports.proposalErrorAlertException = proposalErrorAlertException;
14744
14724
  exports.proposalFormWarningAlertException = proposalFormWarningAlertException;
14725
+ exports.proposalGenerationFailed = proposalGenerationFailed;
14745
14726
  exports.proposalSchema = proposalSchema;
14746
14727
  exports.proposalSentActivitySchema = proposalSentActivitySchema;
14747
14728
  exports.proposalSubmitFailedException = proposalSubmitFailedException;
@@ -14763,15 +14744,19 @@ exports.registerSchema = registerSchema;
14763
14744
  exports.requiredEarningsEnum = requiredEarningsEnum;
14764
14745
  exports.requiredJSSEnum = requiredJSSEnum;
14765
14746
  exports.savedSearchSchema = savedSearchSchema;
14766
- exports.scrapeFeedEventMetadata = scrapeFeedEventMetadata;
14767
- exports.scrapeFeedJobsDetailsCompletedEventMetadata = scrapeFeedJobsDetailsCompletedEventMetadata;
14768
- exports.scrapeFeedJobsDetailsFailedEventMetadata = scrapeFeedJobsDetailsFailedEventMetadata;
14769
- exports.scrapeFeedJobsDetailsStartedEventMetadata = scrapeFeedJobsDetailsStartedEventMetadata;
14747
+ exports.scrapeFeedCompletedEventMetadata = scrapeFeedCompletedEventMetadata;
14748
+ exports.scrapeFeedFailedEventMetadata = scrapeFeedFailedEventMetadata;
14770
14749
  exports.scrapeFeedResultSchema = scrapeFeedResultSchema;
14750
+ exports.scrapeFeedStartedEventMetadata = scrapeFeedStartedEventMetadata;
14771
14751
  exports.scrapeJobActivityPayloadSchema = scrapeJobActivityPayloadSchema;
14772
- exports.scrapeJobFailedEventMetadata = scrapeJobFailedEventMetadata;
14752
+ exports.scrapeJobDetailsException = scrapeJobDetailsException;
14753
+ exports.scrapeJobDetailsFailedEventMetadata = scrapeJobDetailsFailedEventMetadata;
14754
+ exports.scrapeJobDetailsStartedEventMetadata = scrapeJobDetailsStartedEventMetadata;
14773
14755
  exports.scrapeJobPayloadSchema = scrapeJobPayloadSchema;
14774
- exports.scrapeJobStartedEventMetadata = scrapeJobStartedEventMetadata;
14756
+ exports.scrapeJobsCompletedEventMetadata = scrapeJobsCompletedEventMetadata;
14757
+ exports.scrapeJobsDetailsCompletedEventMetadata = scrapeJobsDetailsCompletedEventMetadata;
14758
+ exports.scrapeJobsDetailsFailedEventMetadata = scrapeJobsDetailsFailedEventMetadata;
14759
+ exports.scrapeJobsDetailsStartedEventMetadata = scrapeJobsDetailsStartedEventMetadata;
14775
14760
  exports.scrapePayloadSchema = scrapePayloadSchema;
14776
14761
  exports.scrapeResultSchema = scrapeResultSchema;
14777
14762
  exports.scrapeUserProfileRequestSchema = scrapeUserProfileRequestSchema;