lancer-shared 1.2.67 → 1.2.69

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.
Files changed (165) hide show
  1. package/dist/bundle.cjs.js +6 -0
  2. package/dist/constants/collections.d.ts +13 -0
  3. package/dist/constants/collections.js +14 -0
  4. package/dist/constants/common-questions.js +57 -0
  5. package/dist/constants/index.js +18 -0
  6. package/dist/constants/job-filter-options.js +265 -0
  7. package/dist/constants/job-status.js +21 -0
  8. package/dist/constants/mappings/countryMapping.js +120 -0
  9. package/dist/constants/mappings/regionMapping.js +240 -0
  10. package/dist/constants/organization.d.ts +2 -0
  11. package/dist/constants/routes.d.ts +1 -0
  12. package/dist/constants/routes.js +116 -0
  13. package/dist/constants/upwork-accounts.js +18 -0
  14. package/dist/index.js +4 -0
  15. package/dist/schemas/account/account-status.js +8 -0
  16. package/dist/schemas/account/bidder-account.d.ts +5 -5
  17. package/dist/schemas/account/bidder-account.js +35 -0
  18. package/dist/schemas/account/index.js +3 -0
  19. package/dist/schemas/account/scraper-account.js +34 -0
  20. package/dist/schemas/ai/ai-config.d.ts +36 -0
  21. package/dist/schemas/ai/ai-config.js +9 -0
  22. package/dist/schemas/ai/index.d.ts +3 -0
  23. package/dist/schemas/ai/index.js +3 -0
  24. package/dist/schemas/ai/proposal.d.ts +82 -0
  25. package/dist/schemas/ai/proposal.js +13 -0
  26. package/dist/schemas/ai/suitability.d.ts +37 -0
  27. package/dist/schemas/ai/suitability.js +14 -0
  28. package/dist/schemas/bid/bid-result.js +11 -0
  29. package/dist/schemas/bid/bid.js +35 -0
  30. package/dist/schemas/bid/index.js +2 -0
  31. package/dist/schemas/campaign/campaign-ai-metrics.js +6 -0
  32. package/dist/schemas/campaign/campaign-analytics.d.ts +24 -24
  33. package/dist/schemas/campaign/campaign-analytics.js +42 -0
  34. package/dist/schemas/campaign/campaign-expenses.js +6 -0
  35. package/dist/schemas/campaign/campaign-insights.js +31 -0
  36. package/dist/schemas/campaign/campaign-integrations.d.ts +87 -0
  37. package/dist/schemas/campaign/campaign-integrations.js +13 -0
  38. package/dist/schemas/campaign/campaign-job-count.d.ts +2 -0
  39. package/dist/schemas/campaign/campaign-job-count.js +3 -0
  40. package/dist/schemas/campaign/campaign.js +41 -0
  41. package/dist/schemas/campaign/index.js +7 -0
  42. package/dist/schemas/chat-message/chat-message.d.ts +31 -0
  43. package/dist/schemas/chat-message/chat-message.js +10 -0
  44. package/dist/schemas/chat-message/index.d.ts +1 -0
  45. package/dist/schemas/chat-message/index.js +1 -0
  46. package/dist/schemas/config/agency-config.d.ts +17 -0
  47. package/dist/schemas/config/agency-config.js +7 -0
  48. package/dist/schemas/config/index.d.ts +1 -0
  49. package/dist/schemas/config/index.js +1 -0
  50. package/dist/schemas/event/index.d.ts +58 -0
  51. package/dist/schemas/index.js +17 -0
  52. package/dist/schemas/job-filters/index.d.ts +1 -0
  53. package/dist/schemas/job-filters/index.js +1 -0
  54. package/dist/schemas/job-filters/job-filters.d.ts +241 -0
  55. package/dist/schemas/job-filters/job-filters.js +84 -0
  56. package/dist/schemas/lead/index.js +173 -0
  57. package/dist/schemas/lead/lead-note.d.ts +83 -0
  58. package/dist/schemas/lead/lead-note.js +27 -0
  59. package/dist/schemas/lead/lead-status.js +23 -0
  60. package/dist/schemas/lead/nuxt.d.ts +1664 -0
  61. package/dist/schemas/lead/nuxt.js +287 -0
  62. package/dist/schemas/logger/index.js +1 -0
  63. package/dist/schemas/logger/log-event.d.ts +74 -0
  64. package/dist/schemas/logger/log-event.js +117 -0
  65. package/dist/schemas/meter-event/index.d.ts +12 -0
  66. package/dist/schemas/organization/index.js +70 -0
  67. package/dist/schemas/organization/member.js +7 -0
  68. package/dist/schemas/organization/organization.d.ts +240 -0
  69. package/dist/schemas/organization/organization.js +16 -0
  70. package/dist/schemas/organization/subscription.js +17 -0
  71. package/dist/schemas/proxy/index.js +3 -0
  72. package/dist/schemas/proxy/proxy-available-replacements.d.ts +1 -1
  73. package/dist/schemas/proxy/proxy-available-replacements.js +3 -0
  74. package/dist/schemas/proxy/proxy-country.js +249 -0
  75. package/dist/schemas/proxy/proxy.js +29 -0
  76. package/dist/schemas/saved-search/index.js +9 -0
  77. package/dist/schemas/scraper/index.js +2 -0
  78. package/dist/schemas/scraper/scrape-payload.d.ts +2 -2
  79. package/dist/schemas/scraper/scrape-payload.js +21 -0
  80. package/dist/schemas/scraper/scrape-result.js +23 -0
  81. package/dist/schemas/shared.js +19 -0
  82. package/dist/schemas/tier/index.d.ts +119 -0
  83. package/dist/schemas/time-filter/index.js +6 -0
  84. package/dist/schemas/transaction/index.js +17 -0
  85. package/dist/schemas/usage/index.js +18 -0
  86. package/dist/schemas/user/index.js +52 -0
  87. package/dist/types/account/account-status.d.ts +3 -0
  88. package/dist/types/account/account-status.js +1 -0
  89. package/dist/types/account/bidder-account.d.ts +7 -0
  90. package/dist/types/account/bidder-account.js +1 -0
  91. package/dist/types/account/index.d.ts +3 -0
  92. package/dist/types/account/index.js +3 -0
  93. package/dist/types/account/scraper-account.d.ts +5 -0
  94. package/dist/types/account/scraper-account.js +1 -0
  95. package/dist/types/ai/ai-config.d.ts +6 -0
  96. package/dist/types/ai/ai-config.js +1 -0
  97. package/dist/types/ai/index.d.ts +3 -0
  98. package/dist/types/ai/index.js +3 -0
  99. package/dist/types/ai/proposal.d.ts +10 -0
  100. package/dist/types/ai/proposal.js +1 -0
  101. package/dist/types/ai/suitability.d.ts +6 -0
  102. package/dist/types/ai/suitability.js +1 -0
  103. package/dist/types/bid/bid-result.d.ts +5 -0
  104. package/dist/types/bid/bid-result.js +1 -0
  105. package/dist/types/bid/bid.d.ts +9 -0
  106. package/dist/types/bid/bid.js +1 -0
  107. package/dist/types/bid/index.d.ts +2 -0
  108. package/dist/types/bid/index.js +2 -0
  109. package/dist/types/campaign/campaign-analytics.d.ts +7 -0
  110. package/dist/types/campaign/campaign-analytics.js +1 -0
  111. package/dist/types/campaign/campaign-expenses.d.ts +3 -0
  112. package/dist/types/campaign/campaign-expenses.js +1 -0
  113. package/dist/types/campaign/campaign-insights.js +1 -0
  114. package/dist/types/campaign/campaign-integrations.d.ts +6 -0
  115. package/dist/types/campaign/campaign-integrations.js +1 -0
  116. package/dist/types/campaign/campaign-job-count.d.ts +4 -0
  117. package/dist/types/campaign/campaign-job-count.js +1 -0
  118. package/dist/types/campaign/campaign.js +1 -0
  119. package/dist/types/campaign/index.js +6 -0
  120. package/dist/types/chat-message/chat-message.d.ts +4 -0
  121. package/dist/types/chat-message/chat-message.js +1 -0
  122. package/dist/types/chat-message/index.d.ts +1 -0
  123. package/dist/types/chat-message/index.js +1 -0
  124. package/dist/types/config/agency-config.d.ts +4 -0
  125. package/dist/types/config/agency-config.js +1 -0
  126. package/dist/types/config/index.d.ts +1 -0
  127. package/dist/types/config/index.js +1 -0
  128. package/dist/types/index.d.ts +15 -0
  129. package/dist/types/index.js +15 -0
  130. package/dist/types/job/index.d.ts +48 -0
  131. package/dist/types/job/index.js +3 -0
  132. package/dist/types/job/job-note.d.ts +10 -0
  133. package/dist/types/job/job-note.js +1 -0
  134. package/dist/types/job/job-status.d.ts +5 -0
  135. package/dist/types/job/job-status.js +9 -0
  136. package/dist/types/job/nuxt.d.ts +4 -0
  137. package/dist/types/job/nuxt.js +1 -0
  138. package/dist/types/job-filters/index.d.ts +1 -0
  139. package/dist/types/job-filters/index.js +1 -0
  140. package/dist/types/job-filters/job-filters.d.ts +4 -0
  141. package/dist/types/job-filters/job-filters.js +1 -0
  142. package/dist/types/logger/index.d.ts +1 -0
  143. package/dist/types/logger/index.js +1 -0
  144. package/dist/types/logger/log-event.js +1 -0
  145. package/dist/types/saved-search/index.d.ts +6 -0
  146. package/dist/types/saved-search/index.js +1 -0
  147. package/dist/types/scraper/index.d.ts +2 -0
  148. package/dist/types/scraper/index.js +2 -0
  149. package/dist/types/scraper/scrape-payload.d.ts +10 -0
  150. package/dist/types/scraper/scrape-payload.js +1 -0
  151. package/dist/types/scraper/scrape-result.d.ts +8 -0
  152. package/dist/types/scraper/scrape-result.js +1 -0
  153. package/dist/types/shared.d.ts +8 -0
  154. package/dist/types/shared.js +1 -0
  155. package/dist/types/time-filter/index.d.ts +3 -0
  156. package/dist/types/time-filter/index.js +1 -0
  157. package/dist/types/transaction/index.d.ts +4 -0
  158. package/dist/types/transaction/index.js +1 -0
  159. package/dist/types/usage/index.d.ts +6 -0
  160. package/dist/types/usage/index.js +1 -0
  161. package/dist/types/user/index.d.ts +15 -0
  162. package/dist/types/user/index.js +1 -0
  163. package/dist/utils/index.js +1 -0
  164. package/dist/utils/try-catch.js +10 -0
  165. package/package.json +1 -1
@@ -0,0 +1,287 @@
1
+ import { any, array, boolean, number, object, record, string } from "zod";
2
+ const segmentationDataSchema = object({
3
+ customValue: string().nullable(),
4
+ label: string(),
5
+ name: string(),
6
+ sortOrder: number(),
7
+ type: string(),
8
+ value: string(),
9
+ skill: any().nullable(),
10
+ });
11
+ const clientActivitySchema = object({
12
+ lastBuyerActivity: string(),
13
+ totalApplicants: number(),
14
+ totalHired: number(),
15
+ totalInvitedToInterview: number(),
16
+ unansweredInvites: number(),
17
+ invitationsSent: number(),
18
+ numberOfPositionsToHire: number(),
19
+ });
20
+ const annotationsSchema = object({
21
+ tags: array(string()),
22
+ });
23
+ const budgetSchema = object({
24
+ amount: number(),
25
+ currencyCode: string(),
26
+ });
27
+ const engagementDurationSchema = object({
28
+ label: string(),
29
+ weeks: number(),
30
+ });
31
+ const extendedBudgetInfoSchema = object({
32
+ hourlyBudgetMin: number().nullable(),
33
+ hourlyBudgetMax: number().nullable(),
34
+ hourlyBudgetType: string().nullable(),
35
+ });
36
+ const qualificationsSchema = object({
37
+ countries: any().nullable(),
38
+ earnings: any().nullable(),
39
+ groupRecno: any().nullable(),
40
+ languages: any().nullable(),
41
+ localDescription: any().nullable(),
42
+ localFlexibilityDescription: any().nullable(),
43
+ localMarket: boolean(),
44
+ minJobSuccessScore: number(),
45
+ minOdeskHours: number(),
46
+ onSiteType: any().nullable(),
47
+ prefEnglishSkill: number(),
48
+ regions: any().nullable(),
49
+ risingTalent: boolean(),
50
+ shouldHavePortfolio: boolean(),
51
+ states: any().nullable(),
52
+ tests: any().nullable(),
53
+ timezones: any().nullable(),
54
+ type: number(),
55
+ locationCheckRequired: boolean(),
56
+ group: any().nullable(),
57
+ location: any().nullable(),
58
+ locations: any().nullable(),
59
+ });
60
+ const jobSchema = object({
61
+ status: number(),
62
+ category: object({
63
+ name: string(),
64
+ urlSlug: string(),
65
+ }),
66
+ categoryGroup: object({
67
+ name: string(),
68
+ urlSlug: string(),
69
+ }),
70
+ budget: budgetSchema,
71
+ postedOn: string(),
72
+ publishTime: string(),
73
+ wasRenewed: boolean(),
74
+ startDate: string().nullable(),
75
+ deliveryDate: string().nullable(),
76
+ workload: string().nullable(),
77
+ engagementDuration: engagementDurationSchema,
78
+ extendedBudgetInfo: extendedBudgetInfoSchema,
79
+ contractorTier: number(),
80
+ description: string(),
81
+ segmentationData: array(segmentationDataSchema),
82
+ clientActivity: clientActivitySchema,
83
+ annotations: annotationsSchema,
84
+ uid: string(),
85
+ title: string(),
86
+ type: number(),
87
+ ciphertext: string(),
88
+ access: number(),
89
+ createdOn: string(),
90
+ hideBudget: boolean(),
91
+ notSureProjectDuration: boolean(),
92
+ notSureFreelancersToHire: boolean(),
93
+ notSureExperienceLevel: boolean(),
94
+ numberOfPositionsToHire: number(),
95
+ isContractToHire: boolean(),
96
+ attachments: array(any()),
97
+ isPremium: boolean(),
98
+ qualifications: qualificationsSchema,
99
+ questions: array(object({ question: string(), position: number() })),
100
+ durationIdV3: number(),
101
+ durationLabel: string(),
102
+ });
103
+ const buyerSchema = object({
104
+ isEnterprise: boolean(),
105
+ isPaymentMethodVerified: boolean(),
106
+ stats: object({
107
+ totalAssignments: number(),
108
+ activeAssignmentsCount: number(),
109
+ hoursCount: number(),
110
+ feedbackCount: number(),
111
+ score: number(),
112
+ totalJobsWithHires: number(),
113
+ totalCharges: object({
114
+ amount: number(),
115
+ }),
116
+ }),
117
+ location: object({
118
+ offsetFromUtcMillis: number(),
119
+ countryTimezone: string(),
120
+ city: string(),
121
+ country: string(),
122
+ }),
123
+ company: object({
124
+ isEDCReplicated: any().nullable(),
125
+ contractDate: string(),
126
+ profile: object({
127
+ industry: string(),
128
+ size: number(),
129
+ }),
130
+ name: string().nullable(),
131
+ }),
132
+ jobs: object({
133
+ postedCount: number(),
134
+ openCount: number(),
135
+ }),
136
+ avgHourlyJobsRate: object({
137
+ amount: number(),
138
+ }).nullable(),
139
+ });
140
+ const currentUserInfoSchema = object({
141
+ owner: boolean(),
142
+ freelancerInfo: object({
143
+ profileState: string(),
144
+ applied: any().nullable(),
145
+ devProfileCiphertext: string(),
146
+ hired: any().nullable(),
147
+ application: record(any()),
148
+ pendingInvite: record(any()),
149
+ contract: any().nullable(),
150
+ hourlyRate: object({
151
+ amount: number(),
152
+ }),
153
+ qualificationsMatches: object({
154
+ matches: array(object({
155
+ clientPreferred: string(),
156
+ clientPreferredLabel: string().nullable(),
157
+ freelancerValue: string(),
158
+ freelancerValueLabel: string(),
159
+ qualification: number(),
160
+ qualified: boolean(),
161
+ })),
162
+ }),
163
+ }),
164
+ });
165
+ const workHistorySchema = array(object({
166
+ isPtcJob: any().nullable(),
167
+ status: any().nullable(),
168
+ isEDCReplicated: any().nullable(),
169
+ startDate: string(),
170
+ endDate: string(),
171
+ totalCharge: number(),
172
+ totalHours: number(),
173
+ jobInfo: object({
174
+ title: string(),
175
+ id: any().nullable(),
176
+ uid: any().nullable(),
177
+ access: number(),
178
+ type: number(),
179
+ ciphertext: any().nullable(),
180
+ }),
181
+ contractorInfo: object({
182
+ contractorName: string(),
183
+ accessType: string(),
184
+ ciphertext: string(),
185
+ }),
186
+ rate: object({
187
+ amount: number(),
188
+ }).nullable(),
189
+ feedback: object({
190
+ feedbackSuppressed: boolean(),
191
+ score: number(),
192
+ comment: string(),
193
+ feedback_suppressed: boolean(),
194
+ }),
195
+ feedbackToClient: object({
196
+ feedbackSuppressed: boolean(),
197
+ score: number(),
198
+ comment: string(),
199
+ feedback_suppressed: boolean(),
200
+ }),
201
+ isEDCPublic: boolean(),
202
+ }));
203
+ const sandsSchema = object({
204
+ occupation: object({
205
+ freeText: string().nullable(),
206
+ ontologyId: string(),
207
+ prefLabel: string(),
208
+ id: string(),
209
+ uid: string(),
210
+ }),
211
+ ontologySkills: array(any()),
212
+ additionalSkills: array(object({
213
+ uid: string(),
214
+ name: string(),
215
+ isFreeText: boolean(),
216
+ })),
217
+ });
218
+ const connectsSchema = object({
219
+ pricing: object({
220
+ price: number(),
221
+ context: string(),
222
+ auctionPrice: number(),
223
+ }),
224
+ requiredConnects: number(),
225
+ availableConnects: number(),
226
+ chooseConnectsStatus: object({
227
+ isExplainerModalShown: boolean().nullable(),
228
+ }),
229
+ canSeeApplicantsRates: boolean(),
230
+ });
231
+ const authSchema = object({
232
+ canFlagOpening: boolean(),
233
+ canPostJob: boolean(),
234
+ domestic: object({
235
+ country: string().nullable(),
236
+ isInfographicTooltipAvailable: boolean(),
237
+ }),
238
+ });
239
+ const applicationContextSchema = object({
240
+ freelancerAllowed: boolean(),
241
+ clientAllowed: boolean(),
242
+ userIntentEvaluation: object({
243
+ isDeclined: boolean(),
244
+ reason: string().nullable(),
245
+ }),
246
+ canApplyOnBehalfOfAgencyFreelancers: boolean(),
247
+ canSubmitMoreProposals: boolean(),
248
+ submittedProposals: any().nullable(),
249
+ });
250
+ export const nuxtStateJobSchema = object({
251
+ cache: boolean(),
252
+ job: jobSchema,
253
+ buyer: buyerSchema,
254
+ currentUserInfo: currentUserInfoSchema,
255
+ isVisitor: boolean(),
256
+ openJobs: array(any()),
257
+ workHistory: workHistorySchema,
258
+ similarJobs: array(any()),
259
+ sands: sandsSchema,
260
+ auth: authSchema,
261
+ applicants: object({
262
+ applicantsBidsStats: any().nullable(),
263
+ }),
264
+ connects: connectsSchema.nullish(),
265
+ enterpriseJobAdditionalInfo: record(any()),
266
+ applicationContext: applicationContextSchema,
267
+ profileMatchServiceUid: string(),
268
+ seo: object({
269
+ title: string(),
270
+ description: string(),
271
+ url: string(),
272
+ }),
273
+ teamUid: any().nullable(),
274
+ proposalPermissions: object({
275
+ freelancerAllowed: boolean(),
276
+ clientAllowed: boolean(),
277
+ }),
278
+ jobSlug: any().nullable(),
279
+ prefillWith: any().nullable(),
280
+ isGroupOpportunity: boolean(),
281
+ workLocation: any().nullable(),
282
+ isPhoneVerified: boolean(),
283
+ errorResponse: any().nullable(),
284
+ isApplyBlocked: boolean(),
285
+ hasAiInterview: boolean(),
286
+ talentFeePromotion: boolean().nullish(),
287
+ });
@@ -0,0 +1 @@
1
+ export * from "./log-event";
@@ -452,3 +452,77 @@ export declare const proposalCompleteEventMetadataSchema: z.ZodObject<{
452
452
  };
453
453
  }>;
454
454
  export type ProposalCompleteEventMetadata = z.infer<typeof proposalCompleteEventMetadataSchema>;
455
+ export declare const eventLoggerPayloadSchema: z.ZodUnion<[z.ZodObject<{
456
+ type: z.ZodEnum<["scraperStarted", "scraperCompleted", "jobScraped", "jobScrapeFailed", "jobsIndexed", "jobDuplicateSkipped", "scraperFailed", "jobActivityScraped", "jobActivityScrapeFailed", "leadStatusCheckFailed", "leadStatusUpdated", "feedScrapeStarted", "feedScrapeCompleted", "feedScrapeFailed", "jobListingScraped", "jobSyncPublished", "jobSyncReceived", "leadsCreatedAndSynced", "suitabilityPending", "suitabilityProcessing", "suitabilityComplete", "suitabilityFailed", "manualSuitabilityAnalyzed", "proposalProcessing", "proposalComplete", "proposalFailed", "manualProposalGenerated", "biddingProcessing", "biddingComplete", "biddingFailed", "biddingSkipped", "biddingPending", "biddingRetry", "biddingInsufficientConnects", "biddingWarningAlert", "errorLogged", "cloudTaskRetry", "manualLeadEdited", "leadArchived", "auditTrailLogged"]>;
457
+ source: z.ZodString;
458
+ resourceType: z.ZodDefault<z.ZodString>;
459
+ resourceId: z.ZodNullable<z.ZodString>;
460
+ organizationId: z.ZodNullable<z.ZodString>;
461
+ userId: z.ZodNullable<z.ZodString>;
462
+ campaignId: z.ZodNullable<z.ZodString>;
463
+ leadId: z.ZodNullable<z.ZodString>;
464
+ reason: z.ZodNullable<z.ZodString>;
465
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
466
+ timestamp: z.ZodNumber;
467
+ }, "strip", z.ZodTypeAny, {
468
+ type: "scraperStarted" | "scraperCompleted" | "jobScraped" | "jobScrapeFailed" | "jobsIndexed" | "jobDuplicateSkipped" | "scraperFailed" | "jobActivityScraped" | "jobActivityScrapeFailed" | "leadStatusCheckFailed" | "leadStatusUpdated" | "feedScrapeStarted" | "feedScrapeCompleted" | "feedScrapeFailed" | "jobListingScraped" | "jobSyncPublished" | "jobSyncReceived" | "leadsCreatedAndSynced" | "suitabilityPending" | "suitabilityProcessing" | "suitabilityComplete" | "suitabilityFailed" | "manualSuitabilityAnalyzed" | "proposalProcessing" | "proposalComplete" | "proposalFailed" | "manualProposalGenerated" | "biddingProcessing" | "biddingComplete" | "biddingFailed" | "biddingSkipped" | "biddingPending" | "biddingRetry" | "biddingInsufficientConnects" | "biddingWarningAlert" | "errorLogged" | "cloudTaskRetry" | "manualLeadEdited" | "leadArchived" | "auditTrailLogged";
469
+ source: string;
470
+ resourceType: string;
471
+ resourceId: string | null;
472
+ organizationId: string | null;
473
+ userId: string | null;
474
+ campaignId: string | null;
475
+ leadId: string | null;
476
+ reason: string | null;
477
+ metadata: Record<string, unknown> | null;
478
+ timestamp: number;
479
+ }, {
480
+ type: "scraperStarted" | "scraperCompleted" | "jobScraped" | "jobScrapeFailed" | "jobsIndexed" | "jobDuplicateSkipped" | "scraperFailed" | "jobActivityScraped" | "jobActivityScrapeFailed" | "leadStatusCheckFailed" | "leadStatusUpdated" | "feedScrapeStarted" | "feedScrapeCompleted" | "feedScrapeFailed" | "jobListingScraped" | "jobSyncPublished" | "jobSyncReceived" | "leadsCreatedAndSynced" | "suitabilityPending" | "suitabilityProcessing" | "suitabilityComplete" | "suitabilityFailed" | "manualSuitabilityAnalyzed" | "proposalProcessing" | "proposalComplete" | "proposalFailed" | "manualProposalGenerated" | "biddingProcessing" | "biddingComplete" | "biddingFailed" | "biddingSkipped" | "biddingPending" | "biddingRetry" | "biddingInsufficientConnects" | "biddingWarningAlert" | "errorLogged" | "cloudTaskRetry" | "manualLeadEdited" | "leadArchived" | "auditTrailLogged";
481
+ source: string;
482
+ resourceId: string | null;
483
+ organizationId: string | null;
484
+ userId: string | null;
485
+ campaignId: string | null;
486
+ leadId: string | null;
487
+ reason: string | null;
488
+ metadata: Record<string, unknown> | null;
489
+ timestamp: number;
490
+ resourceType?: string | undefined;
491
+ }>, z.ZodArray<z.ZodObject<{
492
+ type: z.ZodEnum<["scraperStarted", "scraperCompleted", "jobScraped", "jobScrapeFailed", "jobsIndexed", "jobDuplicateSkipped", "scraperFailed", "jobActivityScraped", "jobActivityScrapeFailed", "leadStatusCheckFailed", "leadStatusUpdated", "feedScrapeStarted", "feedScrapeCompleted", "feedScrapeFailed", "jobListingScraped", "jobSyncPublished", "jobSyncReceived", "leadsCreatedAndSynced", "suitabilityPending", "suitabilityProcessing", "suitabilityComplete", "suitabilityFailed", "manualSuitabilityAnalyzed", "proposalProcessing", "proposalComplete", "proposalFailed", "manualProposalGenerated", "biddingProcessing", "biddingComplete", "biddingFailed", "biddingSkipped", "biddingPending", "biddingRetry", "biddingInsufficientConnects", "biddingWarningAlert", "errorLogged", "cloudTaskRetry", "manualLeadEdited", "leadArchived", "auditTrailLogged"]>;
493
+ source: z.ZodString;
494
+ resourceType: z.ZodDefault<z.ZodString>;
495
+ resourceId: z.ZodNullable<z.ZodString>;
496
+ organizationId: z.ZodNullable<z.ZodString>;
497
+ userId: z.ZodNullable<z.ZodString>;
498
+ campaignId: z.ZodNullable<z.ZodString>;
499
+ leadId: z.ZodNullable<z.ZodString>;
500
+ reason: z.ZodNullable<z.ZodString>;
501
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
502
+ timestamp: z.ZodNumber;
503
+ }, "strip", z.ZodTypeAny, {
504
+ type: "scraperStarted" | "scraperCompleted" | "jobScraped" | "jobScrapeFailed" | "jobsIndexed" | "jobDuplicateSkipped" | "scraperFailed" | "jobActivityScraped" | "jobActivityScrapeFailed" | "leadStatusCheckFailed" | "leadStatusUpdated" | "feedScrapeStarted" | "feedScrapeCompleted" | "feedScrapeFailed" | "jobListingScraped" | "jobSyncPublished" | "jobSyncReceived" | "leadsCreatedAndSynced" | "suitabilityPending" | "suitabilityProcessing" | "suitabilityComplete" | "suitabilityFailed" | "manualSuitabilityAnalyzed" | "proposalProcessing" | "proposalComplete" | "proposalFailed" | "manualProposalGenerated" | "biddingProcessing" | "biddingComplete" | "biddingFailed" | "biddingSkipped" | "biddingPending" | "biddingRetry" | "biddingInsufficientConnects" | "biddingWarningAlert" | "errorLogged" | "cloudTaskRetry" | "manualLeadEdited" | "leadArchived" | "auditTrailLogged";
505
+ source: string;
506
+ resourceType: string;
507
+ resourceId: string | null;
508
+ organizationId: string | null;
509
+ userId: string | null;
510
+ campaignId: string | null;
511
+ leadId: string | null;
512
+ reason: string | null;
513
+ metadata: Record<string, unknown> | null;
514
+ timestamp: number;
515
+ }, {
516
+ type: "scraperStarted" | "scraperCompleted" | "jobScraped" | "jobScrapeFailed" | "jobsIndexed" | "jobDuplicateSkipped" | "scraperFailed" | "jobActivityScraped" | "jobActivityScrapeFailed" | "leadStatusCheckFailed" | "leadStatusUpdated" | "feedScrapeStarted" | "feedScrapeCompleted" | "feedScrapeFailed" | "jobListingScraped" | "jobSyncPublished" | "jobSyncReceived" | "leadsCreatedAndSynced" | "suitabilityPending" | "suitabilityProcessing" | "suitabilityComplete" | "suitabilityFailed" | "manualSuitabilityAnalyzed" | "proposalProcessing" | "proposalComplete" | "proposalFailed" | "manualProposalGenerated" | "biddingProcessing" | "biddingComplete" | "biddingFailed" | "biddingSkipped" | "biddingPending" | "biddingRetry" | "biddingInsufficientConnects" | "biddingWarningAlert" | "errorLogged" | "cloudTaskRetry" | "manualLeadEdited" | "leadArchived" | "auditTrailLogged";
517
+ source: string;
518
+ resourceId: string | null;
519
+ organizationId: string | null;
520
+ userId: string | null;
521
+ campaignId: string | null;
522
+ leadId: string | null;
523
+ reason: string | null;
524
+ metadata: Record<string, unknown> | null;
525
+ timestamp: number;
526
+ resourceType?: string | undefined;
527
+ }>, "many">]>;
528
+ export type EventLoggerPayload = z.infer<typeof eventLoggerPayloadSchema>;
@@ -0,0 +1,117 @@
1
+ import { boolean, number, object, string, z } from 'zod';
2
+ import { jobActivityOffsetHourSchema, jobActivitySchema, jobListingSchema, } from '../lead';
3
+ import { regionSchema } from '../shared';
4
+ export const LogEventTypeEnum = z.enum([
5
+ // Scraper Events
6
+ 'scraperStarted',
7
+ 'scraperCompleted',
8
+ 'jobScraped',
9
+ 'jobScrapeFailed',
10
+ 'jobsIndexed',
11
+ 'jobDuplicateSkipped',
12
+ 'scraperFailed',
13
+ 'jobActivityScraped',
14
+ 'jobActivityScrapeFailed',
15
+ // Feed Scraper Events
16
+ 'feedScrapeStarted',
17
+ 'feedScrapeCompleted',
18
+ 'feedScrapeFailed',
19
+ 'jobListingScraped',
20
+ // Job Sync & Campaign Matching
21
+ 'jobSyncPublished',
22
+ 'jobSyncReceived',
23
+ 'leadsCreatedAndSynced',
24
+ // Suitability Events
25
+ 'suitabilityPending',
26
+ 'suitabilityProcessing',
27
+ 'suitabilityComplete',
28
+ 'suitabilityFailed',
29
+ 'manualSuitabilityAnalyzed',
30
+ // Proposal Events
31
+ 'proposalProcessing',
32
+ 'proposalComplete',
33
+ 'proposalFailed',
34
+ 'manualProposalGenerated',
35
+ // Bidding Events
36
+ 'biddingProcessing',
37
+ 'biddingComplete',
38
+ 'biddingFailed',
39
+ 'biddingSkipped',
40
+ 'biddingPending',
41
+ 'biddingRetry',
42
+ 'biddingInsufficientConnects',
43
+ 'biddingWarningAlert',
44
+ // System/Generic Events
45
+ 'errorLogged',
46
+ 'cloudTaskRetry',
47
+ 'manualLeadEdited',
48
+ 'leadArchived',
49
+ 'auditTrailLogged',
50
+ // Knowledge Base Events
51
+ 'knowledgeBaseGenerationComplete',
52
+ 'knowledgeBaseGenerationFailed',
53
+ // Model Chain Events
54
+ 'modelFailed',
55
+ ]);
56
+ export const logEventSchema = z.object({
57
+ // The type of event (use a z.enum if possible)
58
+ type: LogEventTypeEnum, // e.g. "suitability-failed", "proposal-generated"
59
+ // The service that triggered the event
60
+ source: z.string(), // e.g. "lancer-agents", "lancer-bidding"
61
+ // Optional: Allow logging non-lead events in the future
62
+ resourceType: z.string().default('lead'), // e.g. "lead", "campaign", "user"
63
+ // ID of the resource (primary entity affected)
64
+ resourceId: z.string().nullable(), // fallback if leadId is not applicable
65
+ // Lead-level metadata
66
+ leadId: z.string().nullable(),
67
+ campaignId: z.string().nullable(),
68
+ userId: z.string().nullable(),
69
+ // Reason or message for the event
70
+ reason: z.string().nullable(),
71
+ // Generic metadata (stacktrace, score, raw request, etc.)
72
+ metadata: z.record(z.unknown()).nullable(),
73
+ // Optional timestamp override
74
+ timestamp: z.number(),
75
+ });
76
+ export const listingScrapedEventMetadata = object({
77
+ listing: jobListingSchema,
78
+ region: regionSchema,
79
+ });
80
+ export const jobActivityScrapedEventMetadata = object({
81
+ activity: jobActivitySchema,
82
+ region: regionSchema,
83
+ offsetHour: jobActivityOffsetHourSchema,
84
+ scrapedAt: number(),
85
+ });
86
+ export const jobActivityScrapeFailedEventMetadata = object({
87
+ listing: jobListingSchema,
88
+ region: regionSchema,
89
+ offsetHour: jobActivityOffsetHourSchema,
90
+ });
91
+ export const feedScrapeStartedEventMetadata = object({
92
+ id: string(),
93
+ startTime: number(),
94
+ region: regionSchema,
95
+ });
96
+ export const feedScrapeCompletedEventMetadata = object({
97
+ id: string(),
98
+ endTime: number(),
99
+ region: regionSchema,
100
+ accountUsername: string(),
101
+ });
102
+ export const biddingCompletedEventMetadata = object({
103
+ biddingAmount: number(),
104
+ boosted: boolean(),
105
+ boostingAmount: number(),
106
+ });
107
+ export const biddingFailedEventMetadata = object({
108
+ errorType: string(),
109
+ errorMessage: string(),
110
+ context: z.string().optional(),
111
+ });
112
+ export const biddingWarningAlertEventMetadata = object({
113
+ warningMessage: string(),
114
+ });
115
+ export const biddingRetryEventMetadata = object({
116
+ errorMessage: string(),
117
+ });
@@ -0,0 +1,12 @@
1
+ export declare const usageEventSchema: import("zod").ZodObject<{
2
+ organizationId: import("zod").ZodString;
3
+ eventId: any;
4
+ }, "strip", import("zod").ZodTypeAny, {
5
+ [x: string]: any;
6
+ organizationId?: unknown;
7
+ eventId?: unknown;
8
+ }, {
9
+ [x: string]: any;
10
+ organizationId?: unknown;
11
+ eventId?: unknown;
12
+ }>;
@@ -0,0 +1,70 @@
1
+ import { boolean, number, object, string, z } from "zod";
2
+ import { LogEventTypeEnum } from "../logger";
3
+ import { organizationSubscriptionSchema } from "./subscription";
4
+ export const bidConfigSchema = object({
5
+ agencyName: string().nullable(),
6
+ bidderId: string().nullable(),
7
+ contractorName: string().nullable(),
8
+ specialisedProfile: string().nullable(),
9
+ });
10
+ export const organizationTypeSchema = z.enum(["agency", "freelancer"]);
11
+ export const organizationTierEnum = z.enum(["free", "premium"]);
12
+ export const organizationLimitsSchema = object({
13
+ monthlyCredits: number(),
14
+ usedCredits: number(),
15
+ extraCredits: number(),
16
+ });
17
+ export const organizationBillingSchema = object({
18
+ stripeCustomerId: string(),
19
+ savedCard: boolean(),
20
+ creditsRemaining: number(),
21
+ });
22
+ export const organizationSchema = object({
23
+ id: string(),
24
+ name: string(),
25
+ type: organizationTypeSchema,
26
+ tierId: organizationTierEnum,
27
+ subscription: organizationSubscriptionSchema.nullable(),
28
+ bidConfig: bidConfigSchema,
29
+ active: boolean(),
30
+ limits: organizationLimitsSchema,
31
+ billing: organizationBillingSchema.nullable(),
32
+ createdAt: number(),
33
+ updatedAt: number(),
34
+ });
35
+ export const creditDeductionEventTypeEnum = LogEventTypeEnum.extract([
36
+ "suitabilityComplete",
37
+ "proposalComplete",
38
+ ]);
39
+ export const creditDeductionPayloadSchema = object({
40
+ event: creditDeductionEventTypeEnum,
41
+ campaignId: string().nullish(),
42
+ });
43
+ export const aiConfigOldSchema = object({
44
+ id: string(),
45
+ suitabilityPrompt: string().nullable(),
46
+ proposalPrompt: string().nullable(),
47
+ questionProposalPrompt: string().nullable(),
48
+ knowledgeBase: string().nullable(),
49
+ });
50
+ export const aiConfigSchema = object({
51
+ suitabilityRules: string().nullable(),
52
+ coverLetterRules: string().nullable(),
53
+ questionRules: string().nullable(),
54
+ });
55
+ export const knowledgeBaseSchema = object({
56
+ about: string(),
57
+ caseStudies: string(),
58
+ });
59
+ export const notificationConfigSchema = object({
60
+ emailEnabled: boolean(),
61
+ discordWebhookUrl: string().nullable(),
62
+ slackWebhookUrl: string().nullable(),
63
+ });
64
+ export const organizationSettingsSchema = object({
65
+ aiConfig: aiConfigSchema,
66
+ knowledgeBase: knowledgeBaseSchema,
67
+ notifications: notificationConfigSchema,
68
+ });
69
+ export * from "./member";
70
+ export * from "./subscription";
@@ -0,0 +1,7 @@
1
+ import { number, object, string, z } from "zod";
2
+ export const organizationMemberRoleEnum = z.enum(["admin", "member"]);
3
+ export const organizationMemberSchema = object({
4
+ role: organizationMemberRoleEnum,
5
+ joinedAt: number(),
6
+ invitedBy: string(),
7
+ });