eggi-ai-db-schema-2 0.1.1

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 (188) hide show
  1. package/CHANGELOG.md +750 -0
  2. package/README.md +660 -0
  3. package/dist/config/database.d.ts +28 -0
  4. package/dist/config/database.d.ts.map +1 -0
  5. package/dist/config/database.js +72 -0
  6. package/dist/config/database.js.map +1 -0
  7. package/dist/index.d.ts +28 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +199 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/lib/database-service.d.ts +714 -0
  12. package/dist/lib/database-service.d.ts.map +1 -0
  13. package/dist/lib/database-service.js +1394 -0
  14. package/dist/lib/database-service.js.map +1 -0
  15. package/dist/lib/db-types.d.ts +167 -0
  16. package/dist/lib/db-types.d.ts.map +1 -0
  17. package/dist/lib/db-types.js +28 -0
  18. package/dist/lib/db-types.js.map +1 -0
  19. package/dist/lib/db.d.ts +58 -0
  20. package/dist/lib/db.d.ts.map +1 -0
  21. package/dist/lib/db.js +292 -0
  22. package/dist/lib/db.js.map +1 -0
  23. package/dist/lib/index.d.ts +11 -0
  24. package/dist/lib/index.d.ts.map +1 -0
  25. package/dist/lib/index.js +26 -0
  26. package/dist/lib/index.js.map +1 -0
  27. package/dist/lib/pg-client.d.ts +50 -0
  28. package/dist/lib/pg-client.d.ts.map +1 -0
  29. package/dist/lib/pg-client.js +106 -0
  30. package/dist/lib/pg-client.js.map +1 -0
  31. package/dist/lib/schema.d.ts +298 -0
  32. package/dist/lib/schema.d.ts.map +1 -0
  33. package/dist/lib/schema.js +12 -0
  34. package/dist/lib/schema.js.map +1 -0
  35. package/dist/migration-manager.d.ts +49 -0
  36. package/dist/migration-manager.d.ts.map +1 -0
  37. package/dist/migration-manager.js +282 -0
  38. package/dist/migration-manager.js.map +1 -0
  39. package/dist/queries/minimal-connections.d.ts +31 -0
  40. package/dist/queries/minimal-connections.d.ts.map +1 -0
  41. package/dist/queries/minimal-connections.js +143 -0
  42. package/dist/queries/minimal-connections.js.map +1 -0
  43. package/dist/schema.ts +340 -0
  44. package/dist/seed.d.ts +8 -0
  45. package/dist/seed.d.ts.map +1 -0
  46. package/dist/seed.js +40 -0
  47. package/dist/seed.js.map +1 -0
  48. package/dist/types/index.d.ts +7 -0
  49. package/dist/types/index.d.ts.map +1 -0
  50. package/dist/types/index.js +23 -0
  51. package/dist/types/index.js.map +1 -0
  52. package/dist/types/types.d.ts +77 -0
  53. package/dist/types/types.d.ts.map +1 -0
  54. package/dist/types/types.js +3 -0
  55. package/dist/types/types.js.map +1 -0
  56. package/dist/utils/authenticated-user-operations.d.ts +110 -0
  57. package/dist/utils/authenticated-user-operations.d.ts.map +1 -0
  58. package/dist/utils/authenticated-user-operations.js +292 -0
  59. package/dist/utils/authenticated-user-operations.js.map +1 -0
  60. package/dist/utils/authentication-operations.d.ts +48 -0
  61. package/dist/utils/authentication-operations.d.ts.map +1 -0
  62. package/dist/utils/authentication-operations.js +172 -0
  63. package/dist/utils/authentication-operations.js.map +1 -0
  64. package/dist/utils/company-mapping-job-operations.d.ts +103 -0
  65. package/dist/utils/company-mapping-job-operations.d.ts.map +1 -0
  66. package/dist/utils/company-mapping-job-operations.js +413 -0
  67. package/dist/utils/company-mapping-job-operations.js.map +1 -0
  68. package/dist/utils/company-sheet-upload-operations.d.ts +53 -0
  69. package/dist/utils/company-sheet-upload-operations.d.ts.map +1 -0
  70. package/dist/utils/company-sheet-upload-operations.js +135 -0
  71. package/dist/utils/company-sheet-upload-operations.js.map +1 -0
  72. package/dist/utils/contact-operations.d.ts +70 -0
  73. package/dist/utils/contact-operations.d.ts.map +1 -0
  74. package/dist/utils/contact-operations.js +294 -0
  75. package/dist/utils/contact-operations.js.map +1 -0
  76. package/dist/utils/forager-linkedin-operations.d.ts +74 -0
  77. package/dist/utils/forager-linkedin-operations.d.ts.map +1 -0
  78. package/dist/utils/forager-linkedin-operations.js +778 -0
  79. package/dist/utils/forager-linkedin-operations.js.map +1 -0
  80. package/dist/utils/ghost-genius-linkedin-operations.d.ts +23 -0
  81. package/dist/utils/ghost-genius-linkedin-operations.d.ts.map +1 -0
  82. package/dist/utils/ghost-genius-linkedin-operations.js +282 -0
  83. package/dist/utils/ghost-genius-linkedin-operations.js.map +1 -0
  84. package/dist/utils/index.d.ts +29 -0
  85. package/dist/utils/index.d.ts.map +1 -0
  86. package/dist/utils/index.js +77 -0
  87. package/dist/utils/index.js.map +1 -0
  88. package/dist/utils/introduction-request-operations.d.ts +160 -0
  89. package/dist/utils/introduction-request-operations.d.ts.map +1 -0
  90. package/dist/utils/introduction-request-operations.js +492 -0
  91. package/dist/utils/introduction-request-operations.js.map +1 -0
  92. package/dist/utils/invitation-operations.d.ts +141 -0
  93. package/dist/utils/invitation-operations.d.ts.map +1 -0
  94. package/dist/utils/invitation-operations.js +749 -0
  95. package/dist/utils/invitation-operations.js.map +1 -0
  96. package/dist/utils/linkedin-account-operations.d.ts +45 -0
  97. package/dist/utils/linkedin-account-operations.d.ts.map +1 -0
  98. package/dist/utils/linkedin-account-operations.js +279 -0
  99. package/dist/utils/linkedin-account-operations.js.map +1 -0
  100. package/dist/utils/linkedin-account-relationship-operations.d.ts +77 -0
  101. package/dist/utils/linkedin-account-relationship-operations.d.ts.map +1 -0
  102. package/dist/utils/linkedin-account-relationship-operations.js +274 -0
  103. package/dist/utils/linkedin-account-relationship-operations.js.map +1 -0
  104. package/dist/utils/linkedin-data-operations.d.ts +102 -0
  105. package/dist/utils/linkedin-data-operations.d.ts.map +1 -0
  106. package/dist/utils/linkedin-data-operations.js +613 -0
  107. package/dist/utils/linkedin-data-operations.js.map +1 -0
  108. package/dist/utils/linkedin-identifier-utils.d.ts +31 -0
  109. package/dist/utils/linkedin-identifier-utils.d.ts.map +1 -0
  110. package/dist/utils/linkedin-identifier-utils.js +63 -0
  111. package/dist/utils/linkedin-identifier-utils.js.map +1 -0
  112. package/dist/utils/linkedin-profile-cache.d.ts +131 -0
  113. package/dist/utils/linkedin-profile-cache.d.ts.map +1 -0
  114. package/dist/utils/linkedin-profile-cache.js +418 -0
  115. package/dist/utils/linkedin-profile-cache.js.map +1 -0
  116. package/dist/utils/llm-inference-job-operations.d.ts +116 -0
  117. package/dist/utils/llm-inference-job-operations.d.ts.map +1 -0
  118. package/dist/utils/llm-inference-job-operations.js +267 -0
  119. package/dist/utils/llm-inference-job-operations.js.map +1 -0
  120. package/dist/utils/mapping-job-operations.d.ts +272 -0
  121. package/dist/utils/mapping-job-operations.d.ts.map +1 -0
  122. package/dist/utils/mapping-job-operations.js +833 -0
  123. package/dist/utils/mapping-job-operations.js.map +1 -0
  124. package/dist/utils/mapping-operations.d.ts +80 -0
  125. package/dist/utils/mapping-operations.d.ts.map +1 -0
  126. package/dist/utils/mapping-operations.js +318 -0
  127. package/dist/utils/mapping-operations.js.map +1 -0
  128. package/dist/utils/on-demand-mapping-operations.d.ts +199 -0
  129. package/dist/utils/on-demand-mapping-operations.d.ts.map +1 -0
  130. package/dist/utils/on-demand-mapping-operations.js +728 -0
  131. package/dist/utils/on-demand-mapping-operations.js.map +1 -0
  132. package/dist/utils/onboarding-operations.d.ts +53 -0
  133. package/dist/utils/onboarding-operations.d.ts.map +1 -0
  134. package/dist/utils/onboarding-operations.js +223 -0
  135. package/dist/utils/onboarding-operations.js.map +1 -0
  136. package/dist/utils/organization-assignment-job-operations.d.ts +258 -0
  137. package/dist/utils/organization-assignment-job-operations.d.ts.map +1 -0
  138. package/dist/utils/organization-assignment-job-operations.js +881 -0
  139. package/dist/utils/organization-assignment-job-operations.js.map +1 -0
  140. package/dist/utils/organization-assignment-operations.d.ts +59 -0
  141. package/dist/utils/organization-assignment-operations.d.ts.map +1 -0
  142. package/dist/utils/organization-assignment-operations.js +130 -0
  143. package/dist/utils/organization-assignment-operations.js.map +1 -0
  144. package/dist/utils/organization-operations.d.ts +284 -0
  145. package/dist/utils/organization-operations.d.ts.map +1 -0
  146. package/dist/utils/organization-operations.js +1030 -0
  147. package/dist/utils/organization-operations.js.map +1 -0
  148. package/dist/utils/organization-relationship-operations.d.ts +79 -0
  149. package/dist/utils/organization-relationship-operations.d.ts.map +1 -0
  150. package/dist/utils/organization-relationship-operations.js +294 -0
  151. package/dist/utils/organization-relationship-operations.js.map +1 -0
  152. package/dist/utils/quota-operations.d.ts +107 -0
  153. package/dist/utils/quota-operations.d.ts.map +1 -0
  154. package/dist/utils/quota-operations.js +692 -0
  155. package/dist/utils/quota-operations.js.map +1 -0
  156. package/dist/utils/recursive-mapping-job-operations.d.ts +42 -0
  157. package/dist/utils/recursive-mapping-job-operations.d.ts.map +1 -0
  158. package/dist/utils/recursive-mapping-job-operations.js +169 -0
  159. package/dist/utils/recursive-mapping-job-operations.js.map +1 -0
  160. package/dist/utils/relationship-operations.d.ts +130 -0
  161. package/dist/utils/relationship-operations.d.ts.map +1 -0
  162. package/dist/utils/relationship-operations.js +329 -0
  163. package/dist/utils/relationship-operations.js.map +1 -0
  164. package/dist/utils/sales-pipeline-operations.d.ts +163 -0
  165. package/dist/utils/sales-pipeline-operations.d.ts.map +1 -0
  166. package/dist/utils/sales-pipeline-operations.js +725 -0
  167. package/dist/utils/sales-pipeline-operations.js.map +1 -0
  168. package/dist/utils/skills-operations.d.ts +117 -0
  169. package/dist/utils/skills-operations.d.ts.map +1 -0
  170. package/dist/utils/skills-operations.js +487 -0
  171. package/dist/utils/skills-operations.js.map +1 -0
  172. package/dist/utils/subscription-operations.d.ts +123 -0
  173. package/dist/utils/subscription-operations.d.ts.map +1 -0
  174. package/dist/utils/subscription-operations.js +391 -0
  175. package/dist/utils/subscription-operations.js.map +1 -0
  176. package/dist/utils/unipile-account-operations.d.ts +96 -0
  177. package/dist/utils/unipile-account-operations.d.ts.map +1 -0
  178. package/dist/utils/unipile-account-operations.js +255 -0
  179. package/dist/utils/unipile-account-operations.js.map +1 -0
  180. package/dist/utils/user-industry-operations.d.ts +80 -0
  181. package/dist/utils/user-industry-operations.d.ts.map +1 -0
  182. package/dist/utils/user-industry-operations.js +237 -0
  183. package/dist/utils/user-industry-operations.js.map +1 -0
  184. package/dist/utils/user-operations.d.ts +87 -0
  185. package/dist/utils/user-operations.d.ts.map +1 -0
  186. package/dist/utils/user-operations.js +212 -0
  187. package/dist/utils/user-operations.js.map +1 -0
  188. package/package.json +98 -0
@@ -0,0 +1,714 @@
1
+ /**
2
+ * =============================================================================
3
+ * DATABASE SERVICE - Clean Object-Oriented Database Management
4
+ * =============================================================================
5
+ *
6
+ * Provides a singleton database service that accepts connection parameters
7
+ * directly. No environment variables, no AWS dependencies - just clean
8
+ * database operations with provided connection info.
9
+ *
10
+ * @author Eggi.ai Team
11
+ * @version 3.0.0 - Clean architecture with input-based connections
12
+ */
13
+ import { Pool } from "pg";
14
+ /**
15
+ * Database connection parameters
16
+ */
17
+ export interface DatabaseConnectionConfig {
18
+ /** Complete database URL (if provided, other params are ignored) */
19
+ databaseUrl?: string;
20
+ /** Individual connection parameters */
21
+ host?: string;
22
+ port?: number;
23
+ database?: string;
24
+ username?: string;
25
+ password?: string;
26
+ /** SSL configuration */
27
+ ssl?: boolean;
28
+ }
29
+ import type { ConnectionPoolConfig } from "./db";
30
+ /**
31
+ * Database service configuration
32
+ */
33
+ export interface DatabaseServiceConfig {
34
+ /** Database connection configuration (REQUIRED) */
35
+ connection: DatabaseConnectionConfig;
36
+ /** Connection pool configuration */
37
+ poolConfig?: ConnectionPoolConfig;
38
+ }
39
+ import { createMappingJobForLinkedInAccount, startMappingJob, completeMappingJob } from "../utils/mapping-job-operations";
40
+ import { createLlmInferenceJob } from "../utils/llm-inference-job-operations";
41
+ import { createOrganizationAssignmentJob, type OrganizationAssignmentJobMetadata, type UserExportsResult, type ExportAvailabilityResult, type ExportStatusResult } from "../utils/organization-assignment-job-operations";
42
+ import { createOnDemandMappingJob } from "../utils/on-demand-mapping-operations";
43
+ import { createContactInfo, upsertContactInfo, batchCreateContactInfos, batchUpsertContactInfos } from "../utils/contact-operations";
44
+ import { getExistingUnipileAccount } from "../utils/user-operations";
45
+ import { createUnipileAccount, upsertUnipileAccount } from "../utils/unipile-account-operations";
46
+ import { upsertLinkedInAccountRelationshipScore, getLinkedInAccountRelationshipScore, type LinkedinRelationshipWithAccountsAndUsers } from "../utils/linkedin-account-relationship-operations";
47
+ import { getTopClosestConnections } from "../utils/relationship-operations";
48
+ import { getConnectionsForChromeExtension } from "../queries/minimal-connections";
49
+ import { findOrCreateSkill, findOrCreateSkills, addProfileSkills, addWorkExperienceSkills, addEducationSkills } from "../utils/skills-operations";
50
+ import { createIntroductionRequest } from "../utils/introduction-request-operations";
51
+ import { createOnboardingJob } from "../utils/onboarding-operations";
52
+ import { type QuotaCheckResult, type QuotaPeriod, type QuotaSummary } from "../utils/quota-operations";
53
+ /**
54
+ * Singleton Database Service Class
55
+ * Manages database connections and provides type-safe query methods
56
+ */
57
+ declare class DatabaseService {
58
+ private static instance;
59
+ private dbPromise;
60
+ private isInitialized;
61
+ private constructor();
62
+ /**
63
+ * Get singleton instance of DatabaseService
64
+ */
65
+ static getInstance(): DatabaseService;
66
+ /**
67
+ * Build database URL from provided connection configuration
68
+ */
69
+ private buildDatabaseUrl;
70
+ /**
71
+ * Initialize database connection with configuration
72
+ * REQUIRED: Must provide connection configuration
73
+ */
74
+ initialize(config: DatabaseServiceConfig): Promise<void>;
75
+ /**
76
+ * Get database instance
77
+ * Throws error if not initialized
78
+ */
79
+ getDb(): Promise<Pool>;
80
+ /**
81
+ * Check if database is initialized
82
+ */
83
+ isReady(): boolean;
84
+ createMappingJobForLinkedInAccount(params: Parameters<typeof createMappingJobForLinkedInAccount>[1]): Promise<{
85
+ mappingJob: import("./schema").MappingJob;
86
+ }>;
87
+ createMappingJobWithLinkedInAccounts(accountsData: Array<{
88
+ linkedinAccountId: number;
89
+ metadata?: Record<string, any>;
90
+ }>): Promise<{
91
+ mappingJobs: import("./schema").MappingJob[];
92
+ }>;
93
+ startMappingJob(mappingJobId: number, metadata?: Parameters<typeof startMappingJob>[2]): Promise<import("./schema").MappingJob>;
94
+ completeMappingJob(mappingJobId: number, metadata?: Parameters<typeof completeMappingJob>[2]): Promise<import("./schema").MappingJob>;
95
+ validateMappingJobCompletion(mappingJobId: number): Promise<{
96
+ isValid: boolean;
97
+ mappingJob?: import("./schema").MappingJob;
98
+ error?: string;
99
+ }>;
100
+ createLlmInferenceJob(params: Parameters<typeof createLlmInferenceJob>[1]): Promise<{
101
+ llmInferenceJob: import("./schema").LlmInferenceJob;
102
+ }>;
103
+ createOrganizationAssignmentJob(params: Parameters<typeof createOrganizationAssignmentJob>[1]): Promise<import("../utils/organization-assignment-job-operations").OrganizationAssignmentJob>;
104
+ completeOrganizationAssignmentJob(organizationAssignmentJobId: number, completionMetadata?: OrganizationAssignmentJobMetadata): Promise<import("../utils/organization-assignment-job-operations").OrganizationAssignmentJob>;
105
+ getOrganizationAssignmentJobById(organizationAssignmentJobId: number): Promise<import("../utils/organization-assignment-job-operations").OrganizationAssignmentJob | null>;
106
+ checkExportAvailability(mappingJobId: number | null, organizationId: number): Promise<ExportAvailabilityResult>;
107
+ checkExportAvailabilityForLinkedInAccount(linkedinAccountId: number, organizationId: number): Promise<ExportAvailabilityResult>;
108
+ getExportStatusByLinkedInIdentifier(linkedinIdentifierAcoa: string, organizationId: number): Promise<ExportStatusResult>;
109
+ /**
110
+ * Get paginated exports for a user (requester)
111
+ * @param requesterLinkedinAccountId - LinkedIn account ID of the requester
112
+ * @param options - Query options (page, pageSize, sort, organizationId, status)
113
+ * @returns Paginated list of exports with profile and organization details
114
+ */
115
+ getUserExports(requesterLinkedinAccountId: number, options?: {
116
+ page?: number;
117
+ pageSize?: number;
118
+ sort?: "asc" | "desc";
119
+ organizationId?: number;
120
+ status?: "pending" | "completed" | "failed" | "all";
121
+ }): Promise<UserExportsResult>;
122
+ getLatestOrganizationAssignmentJobForUser(userId: number, organizationId: number): Promise<import("../utils/organization-assignment-job-operations").OrganizationAssignmentJob | null>;
123
+ getLatestOrganizationAssignmentJob(mappingJobId: number, organizationId: number): Promise<import("../utils/organization-assignment-job-operations").OrganizationAssignmentJob | null>;
124
+ updateOrganizationAssignmentJobMetadata(organizationAssignmentJobId: number, metadata: OrganizationAssignmentJobMetadata): Promise<import("../utils/organization-assignment-job-operations").OrganizationAssignmentJob>;
125
+ getRelationshipScoresForMappingJob(mappingJobId: number, options?: {
126
+ limit?: number;
127
+ minScore?: number;
128
+ }): Promise<{
129
+ id: number;
130
+ linkedin_account_id_a: number;
131
+ linkedin_account_id_b: number;
132
+ score: number;
133
+ model_version: string;
134
+ analysis_type: string;
135
+ mapping_job_id: number;
136
+ metadata: Record<string, any>;
137
+ created_at: Date;
138
+ }[]>;
139
+ getEnrichedRelationshipScoresForMappingJob(mappingJobId: number, mainLinkedinAccountId: number, options?: {
140
+ limit?: number;
141
+ minScore?: number;
142
+ sortOrder?: "asc" | "desc";
143
+ }): Promise<{
144
+ score: number;
145
+ modelVersion: string;
146
+ analysisType: string;
147
+ mappingJobId: number;
148
+ metadata: Record<string, any>;
149
+ createdAt: Date;
150
+ otherAccount: {
151
+ id: number;
152
+ linkedinIdentifierAcoa: string | null;
153
+ publicIdentifier: string | null;
154
+ firstName: string | null;
155
+ lastName: string | null;
156
+ headline: string | null;
157
+ profilePictureUrl: string | null;
158
+ };
159
+ }[]>;
160
+ getRelationshipScoresForAccount(linkedinAccountId: number, options?: {
161
+ limit?: number;
162
+ minScore?: number;
163
+ modelVersion?: string;
164
+ sortOrder?: "asc" | "desc";
165
+ }): Promise<{
166
+ score: number;
167
+ modelVersion: string;
168
+ analysisType: string;
169
+ mappingJobId: number;
170
+ metadata: Record<string, any>;
171
+ createdAt: Date;
172
+ otherAccount: {
173
+ id: number;
174
+ linkedinIdentifierAcoa: string | null;
175
+ publicIdentifier: string | null;
176
+ firstName: string | null;
177
+ lastName: string | null;
178
+ headline: string | null;
179
+ profilePictureUrl: string | null;
180
+ };
181
+ }[]>;
182
+ getMappingJobWithLinkedInAccount(mappingJobId: number): Promise<{
183
+ mappingJob: import("./schema").MappingJob;
184
+ linkedinAccount: {
185
+ id: number;
186
+ user_id: number | null;
187
+ linkedin_identifier_acoa: string | null;
188
+ public_identifier: string | null;
189
+ forager_id: number;
190
+ first_name: string | null;
191
+ last_name: string | null;
192
+ headline: string | null;
193
+ summary: string | null;
194
+ location: string | null;
195
+ profile_picture_url: string | null;
196
+ profile_image_cloudfront_url: string | null;
197
+ follower_count: number | null;
198
+ connections_count: number | null;
199
+ profiles_updated_at: Date | null;
200
+ created_at: Date;
201
+ };
202
+ user?: {
203
+ id: number;
204
+ given_name: string | null;
205
+ family_name: string | null;
206
+ summary: string | null;
207
+ embedding_summary: string | null;
208
+ embedding: any;
209
+ created_at: Date;
210
+ } | undefined;
211
+ } | null>;
212
+ createOnboardingJob(data: Parameters<typeof createOnboardingJob>[1]): Promise<import("../utils/onboarding-operations").OnboardingJobResult>;
213
+ updateOnboardingJob(onboardingJobId: number, updates: {
214
+ currentStep?: string;
215
+ nextStep?: string | null;
216
+ completedAt?: Date | null;
217
+ metadata?: Record<string, any>;
218
+ }): Promise<import("../utils/onboarding-operations").OnboardingJobResult>;
219
+ updateOnboardingJobStep(onboardingJobId: number, currentStep: string, nextStep?: string, metadata?: Record<string, any>): Promise<import("../utils/onboarding-operations").OnboardingJobResult>;
220
+ completeOnboardingJob(onboardingJobId: number, completionMetadata?: Record<string, any>): Promise<import("../utils/onboarding-operations").OnboardingJobResult>;
221
+ getOnboardingJobByUserId(userId: number): Promise<import("../utils/onboarding-operations").OnboardingJobResult | null>;
222
+ getOnboardingJobById(onboardingJobId: number): Promise<import("../utils/onboarding-operations").OnboardingJobResult | null>;
223
+ createOnDemandMappingJob(data: Parameters<typeof createOnDemandMappingJob>[0]): Promise<import("../utils/on-demand-mapping-operations").OnDemandMappingJob>;
224
+ /**
225
+ * Check and increment quota for a mapping job request
226
+ * Returns whether the operation is allowed based on quota limits
227
+ */
228
+ checkAndIncrementMappingJobQuota(authenticatedUserId: number, organizationId: number, period?: QuotaPeriod): Promise<QuotaCheckResult>;
229
+ /**
230
+ * Get current quota status without incrementing
231
+ */
232
+ getMappingJobQuotaStatus(authenticatedUserId: number, organizationId: number, period?: QuotaPeriod): Promise<QuotaCheckResult | null>;
233
+ /**
234
+ * Get all quotas for a user across all organizations
235
+ * Returns quotas for all quota types (currently only mapping_jobs, but extensible)
236
+ */
237
+ getAllQuotasForUser(authenticatedUserId: number): Promise<QuotaSummary[]>;
238
+ /**
239
+ * Initialize quota records for all organization members when subscription is activated
240
+ * Creates daily and monthly quota records with appropriate limits based on subscription tier
241
+ */
242
+ initializeQuotasForOrganization(organizationId: number): Promise<number>;
243
+ getAllOnDemandMappingJobsForUserMinimal(requesterLinkedinAccountId: number, limit?: number, offset?: number): Promise<{
244
+ jobs: import("../utils/on-demand-mapping-operations").OnDemandMappingJobMinimal[];
245
+ total_items: number;
246
+ }>;
247
+ checkMappingAvailability(targetLinkedInIdentifier: string): Promise<import("../utils/mapping-job-operations").MappingAvailabilityResult>;
248
+ getOnDemandMappingJobById(jobId: number): Promise<import("../utils/on-demand-mapping-operations").OnDemandMappingJob | null>;
249
+ getMappingJobById(mappingJobId: number): Promise<{
250
+ id: number;
251
+ linkedin_account_id: number;
252
+ completed_at: Date | null;
253
+ } | null>;
254
+ getTargetLinkedInAccountIdForOnDemandJobInOrganization(requesterLinkedinAccountId: number, organizationId: number): Promise<number | null>;
255
+ checkOnDemandMappingJobExists(requesterLinkedInAccountId: number, targetLinkedInIdentifier: string): Promise<import("../utils/on-demand-mapping-operations").OnDemandMappingJob | null>;
256
+ updateOnDemandMappingJobId(requesterLinkedinAccountId: number, internalIdentifierAcoa: string, mappingJobId: number): Promise<import("../utils/on-demand-mapping-operations").OnDemandMappingJob>;
257
+ getLinkedInAccountsForUser(userId: number): Promise<import("./schema").LinkedinAccount[]>;
258
+ getAuthenticatedUserByCognitoId(cognitoUserId: string): Promise<import("./schema").AuthenticatedUser | null>;
259
+ getAuthenticatedUserByUserId(userId: number): Promise<import("./schema").AuthenticatedUser | null>;
260
+ getAuthenticatedUserByEmail(email: string): Promise<{
261
+ auth_user_id: number;
262
+ user_id: number | null;
263
+ email: string;
264
+ } | null>;
265
+ getUserByCognitoId(cognitoUserId: string): Promise<import("./schema").User | null>;
266
+ getExistingUnipileAccount(cognitoUserId: string, platformType: Parameters<typeof getExistingUnipileAccount>[2]): Promise<import("./schema").UnipileAccount | null>;
267
+ findAuthenticatedUserByCognitoId(cognitoUserId: string): Promise<import("./schema").AuthenticatedUser | null>;
268
+ findAuthenticatedUserById(authenticatedUserId: number): Promise<import("./schema").AuthenticatedUser | null>;
269
+ findAuthenticatedUserByUserId(userId: number): Promise<import("./schema").AuthenticatedUser | null>;
270
+ updateAuthenticatedUserAdminStatus(cognitoUserId: string, isAdmin: boolean): Promise<import("./schema").AuthenticatedUser | null>;
271
+ getAllAdminUsers(): Promise<import("./schema").AuthenticatedUser[]>;
272
+ getCachedLinkedinProfiles(acoIdentifiers: string[]): Promise<(import("../utils/linkedin-profile-cache").CachedLinkedInProfile | null)[]>;
273
+ getComprehensiveLinkedinProfile(identifier: string): Promise<import("../utils/linkedin-profile-cache").CachedLinkedInProfile | null>;
274
+ getComprehensiveLinkedinProfileById(linkedinAccountId: number): Promise<import("../utils/linkedin-profile-cache").CachedLinkedInProfile | null>;
275
+ createContactInfo(data: Parameters<typeof createContactInfo>[1]): Promise<import("./schema").ContactInfo>;
276
+ upsertContactInfo(data: Parameters<typeof upsertContactInfo>[1]): Promise<import("./schema").ContactInfo>;
277
+ batchCreateContactInfos(contactInfosData: Parameters<typeof batchCreateContactInfos>[1]): Promise<import("./schema").ContactInfo[]>;
278
+ batchUpsertContactInfos(contactInfosData: Parameters<typeof batchUpsertContactInfos>[1]): Promise<import("./schema").ContactInfo[]>;
279
+ getBatchUserEmails(userIds: number[]): Promise<Map<number, string[]>>;
280
+ createUnipileAccount(data: Parameters<typeof createUnipileAccount>[1]): Promise<import("./schema").UnipileAccount>;
281
+ upsertUnipileAccount(data: Parameters<typeof upsertUnipileAccount>[1]): Promise<import("./schema").UnipileAccount>;
282
+ getUserLinkedAccountStatus(cognitoUserId: string, activeOnly?: boolean): Promise<import("../utils/unipile-account-operations").LinkedAccountStatusMap>;
283
+ batchMarkAccountsAsSynced(accountIds: number[], syncTime?: Date): Promise<number>;
284
+ checkAcoaAlreadyConnectedToDifferentUser(linkedinIdentifierAcoa: string, currentUserId: number): Promise<number | null>;
285
+ upsertLinkedInAccountRelationshipScore(data: Parameters<typeof upsertLinkedInAccountRelationshipScore>[1]): Promise<import("./schema").LinkedinRelationship>;
286
+ getLinkedInAccountRelationshipScore(linkedinAccountIdA: number, linkedinAccountIdB: number, modelVersion: string, analysisType?: Parameters<typeof getLinkedInAccountRelationshipScore>[4]): Promise<import("./schema").LinkedinRelationship | null>;
287
+ getLinkedInRelationshipByIdWithAccountsAndUsers(relationshipId: number): Promise<LinkedinRelationshipWithAccountsAndUsers | null>;
288
+ getTopClosestConnections(cognitoUserId: string, modelVersion?: number, limit?: number, sortOrder?: Parameters<typeof getTopClosestConnections>[4]): Promise<{
289
+ score: number;
290
+ modelVersion: number | null;
291
+ createdAt: Date;
292
+ otherUser: {
293
+ id: number;
294
+ givenName: string | null;
295
+ familyName: string | null;
296
+ linkedinIdentifier: string | null;
297
+ profileImageUrl: string | null;
298
+ };
299
+ }[]>;
300
+ getConnectionsForChromeExtension(identifier: string, identifierType?: Parameters<typeof getConnectionsForChromeExtension>[2]): Promise<{
301
+ results: import("../queries/minimal-connections").ChromeExtensionConnection[];
302
+ pagination: {
303
+ page: number;
304
+ pageSize: number;
305
+ totalItems: number;
306
+ totalPages: number;
307
+ hasNextPage: boolean;
308
+ hasPreviousPage: boolean;
309
+ };
310
+ }>;
311
+ handlePostAuthentication(cognitoUserId: string, userId: number, signupEmail?: string): Promise<import("../utils/authentication-operations").AuthenticationResult>;
312
+ findOrCreateSkill(skillName: string, category?: Parameters<typeof findOrCreateSkill>[2]): Promise<{
313
+ id: number;
314
+ name: string;
315
+ }>;
316
+ findOrCreateSkills(skillInputs: Parameters<typeof findOrCreateSkills>[1]): Promise<{
317
+ id: number;
318
+ name: string;
319
+ }[]>;
320
+ addProfileSkills(profileId: number, skillInputs: Parameters<typeof addProfileSkills>[2]): Promise<{
321
+ added: number;
322
+ errors: string[];
323
+ }>;
324
+ getProfileSkills(profileId: number): Promise<{
325
+ skillId: number;
326
+ skillName: string;
327
+ }[]>;
328
+ addWorkExperienceSkills(workExperienceId: number, skillInputs: Parameters<typeof addWorkExperienceSkills>[2]): Promise<{
329
+ added: number;
330
+ errors: string[];
331
+ }>;
332
+ addEducationSkills(educationId: number, skillInputs: Parameters<typeof addEducationSkills>[2]): Promise<{
333
+ added: number;
334
+ errors: string[];
335
+ }>;
336
+ getEducationSkills(educationId: number): Promise<{
337
+ skill: {
338
+ id: number;
339
+ name: string;
340
+ };
341
+ }[]>;
342
+ getWorkExperienceSkills(workExperienceId: number): Promise<{
343
+ skillId: number;
344
+ skillName: string;
345
+ }[]>;
346
+ getPopularSkills(limit?: number): Promise<{
347
+ skillId: number;
348
+ skillName: string;
349
+ profileCount: number;
350
+ }[]>;
351
+ findLinkedInAccountByForagerId(foragerId: number): Promise<import("../utils/forager-linkedin-operations").LinkedInAccountResult | null>;
352
+ findLinkedInAccountByPublicIdentifier(publicIdentifier: string): Promise<import("../utils/forager-linkedin-operations").LinkedInAccountResult | null>;
353
+ findLinkedInAccountByAnyIdentifier(identifier: string | number): Promise<import("../utils/forager-linkedin-operations").LinkedInAccountResult | null>;
354
+ findLinkedInAccountByAcoa(linkedinIdentifierAcoa: string): Promise<import("../utils/forager-linkedin-operations").LinkedInAccountResult | null>;
355
+ findOrCreateLinkedInAccountByAcoa(linkedinIdentifierAcoa: string, publicIdentifier?: string, userId?: number): Promise<import("./db-types").FindOrCreateResult>;
356
+ findOrCreateLinkedInAccountByForagerId(foragerId: number, publicIdentifier?: string, linkedinIdentifierAcoa?: string, userId?: number): Promise<import("./db-types").FindOrCreateResult>;
357
+ storeCompleteLinkedInProfileByForagerId(foragerId: number, profileData: any, userId?: number, userWasCreated?: boolean): Promise<import("./db-types").CompleteLinkedInProfileResult>;
358
+ /**
359
+ * Store complete LinkedIn profile using ACoA identifier (for Ghost Genius profiles)
360
+ */
361
+ storeCompleteLinkedInProfileByAcoa(linkedinIdentifierAcoa: string, profileData: any, userId?: number, userWasCreated?: boolean): Promise<import("./db-types").CompleteLinkedInProfileResult>;
362
+ updateLinkedInAccountAcoaIdentifierByForagerId(foragerId: number, linkedinIdentifierAcoa: string): Promise<import("../utils/forager-linkedin-operations").LinkedInAccountResult>;
363
+ updateLinkedInAccountAcoaIdentifierByForagerIdWithChangeDetection(foragerId: number, linkedinIdentifierAcoa: string): Promise<{
364
+ account: import("../utils/forager-linkedin-operations").LinkedInAccountResult;
365
+ wasChanged: boolean;
366
+ oldValue: string | null;
367
+ }>;
368
+ updateLinkedInAccountProfilePictureUrl(linkedinAccountId: number, profilePictureUrl: string, profileImageHash?: string): Promise<any>;
369
+ getLinkedInAccountProfileImageHash(linkedinAccountId: number): Promise<string | null>;
370
+ refreshCompleteLinkedInProfileByForagerId(foragerId: number, profileData: any, userId?: number): Promise<import("./db-types").CompleteLinkedInProfileResult>;
371
+ findAuthenticatedUserByForagerId(foragerId: number): Promise<{
372
+ user_id: number;
373
+ linkedin_account_id: number;
374
+ cognito_user_id: string;
375
+ } | null>;
376
+ findAuthenticatedUserByPublicIdentifier(publicIdentifier: string): Promise<{
377
+ user_id: number;
378
+ linkedin_account_id: number;
379
+ cognito_user_id: string;
380
+ } | null>;
381
+ findAuthenticatedUserByAnyIdentifier(identifier: string | number): Promise<{
382
+ user_id: number;
383
+ linkedin_account_id: number;
384
+ cognito_user_id: string;
385
+ } | null>;
386
+ handleLinkedInProfileFetchByForagerId(foragerId: number, publicIdentifier: string, profileData: any, linkedinIdentifierAcoa?: string, providerAccountId?: string): Promise<import("./db-types").ProfileFetchResult>;
387
+ getMostRecentWorkExperience(linkedinAccountId: number): Promise<any>;
388
+ getOrganizationMembershipsForUser(userId: number): Promise<import("../utils/organization-operations").OrganizationMembershipWithDetails[]>;
389
+ getOrganizationById(organizationId: number): Promise<import("../utils/organization-operations").Organization | null>;
390
+ findOrganizationByLinkedInCompanyId(linkedinCompanyId: number): Promise<import("../utils/organization-operations").Organization | null>;
391
+ findOrganizationByLinkedInPublicIdentifier(linkedinPublicIdentifier: string): Promise<import("../utils/organization-operations").Organization | null>;
392
+ findOrganizationByDedupKey(dedupKey: string): Promise<import("../utils/organization-operations").Organization | null>;
393
+ updateOrganizationLinkedInPublicIdentifier(organizationId: number, linkedinPublicIdentifier: string): Promise<boolean>;
394
+ createCompanyMappingJob(options: {
395
+ sourceType: "forager_api" | "sheet_upload";
396
+ linkedinPublicIdentifier?: string | null;
397
+ metadata?: Record<string, any>;
398
+ }): Promise<import("../utils/company-mapping-job-operations").CompanyMappingJob>;
399
+ updateCompanyMappingJobLinkedInId(companyMappingJobId: number, linkedinCompanyId: number): Promise<import("../utils/company-mapping-job-operations").CompanyMappingJob | null>;
400
+ updateCompanyMappingJobS3Path(companyMappingJobId: number, s3FilePath: string): Promise<import("../utils/company-mapping-job-operations").CompanyMappingJob | null>;
401
+ updateCompanyMappingJobQueued(companyMappingJobId: number, employeesCount?: number): Promise<import("../utils/company-mapping-job-operations").CompanyMappingJob | null>;
402
+ updateCompanyMappingJobStarted(companyMappingJobId: number): Promise<import("../utils/company-mapping-job-operations").CompanyMappingJob | null>;
403
+ updateCompanyMappingJobCompleted(companyMappingJobId: number, employeesCount?: number): Promise<import("../utils/company-mapping-job-operations").CompanyMappingJob | null>;
404
+ getCompanyMappingJobById(companyMappingJobId: number): Promise<import("../utils/company-mapping-job-operations").CompanyMappingJob | null>;
405
+ updateCompanyMappingJobOrganizationId(companyMappingJobId: number, organizationId: number): Promise<import("../utils/company-mapping-job-operations").CompanyMappingJob | null>;
406
+ createRecursiveMappingJob(options: {
407
+ originalMappingJobId: number;
408
+ organizationId?: number | null;
409
+ metadata?: Record<string, any>;
410
+ }): Promise<import("../utils/recursive-mapping-job-operations").RecursiveMappingJob>;
411
+ getRecursiveMappingJobById(recursiveMappingJobId: number): Promise<import("../utils/recursive-mapping-job-operations").RecursiveMappingJob | null>;
412
+ updateRecursiveMappingJobStarted(recursiveMappingJobId: number): Promise<import("../utils/recursive-mapping-job-operations").RecursiveMappingJob>;
413
+ updateRecursiveMappingJobCompleted(recursiveMappingJobId: number, downstreamJobsCount: number): Promise<import("../utils/recursive-mapping-job-operations").RecursiveMappingJob>;
414
+ updateOrganizationSubscriptionTier(organizationId: number, subscriptionTier: "PRO_VERSION" | "WAITING_FOR_SUBSCRIPTION_SELECTION"): Promise<import("../utils/organization-operations").Organization | null>;
415
+ upsertSubscription(subscriptionData: {
416
+ organizationId: number;
417
+ stripeCustomerId: string;
418
+ stripeSubscriptionId: string;
419
+ stripePriceId: string;
420
+ status: string;
421
+ currentPeriodStart: Date;
422
+ currentPeriodEnd: Date;
423
+ trialStart?: Date | null;
424
+ trialEnd?: Date | null;
425
+ canceledAt?: Date | null;
426
+ metadata?: Record<string, any>;
427
+ }): Promise<import("../utils/subscription-operations").Subscription>;
428
+ getSubscriptionByStripeId(stripeSubscriptionId: string): Promise<import("../utils/subscription-operations").Subscription | null>;
429
+ getSubscriptionByOrganizationId(organizationId: number): Promise<import("../utils/subscription-operations").Subscription | null>;
430
+ hasOrganizationUsedFreeTrial(organizationId: number): Promise<boolean>;
431
+ hasUserUsedFreeTrial(userId: number): Promise<boolean>;
432
+ isStripeEventProcessed(stripeEventId: string): Promise<boolean>;
433
+ updateSubscription(stripeSubscriptionId: string, updateData: {
434
+ status?: string;
435
+ currentPeriodStart?: Date;
436
+ currentPeriodEnd?: Date;
437
+ trialStart?: Date | null;
438
+ trialEnd?: Date | null;
439
+ canceledAt?: Date | null;
440
+ metadata?: Record<string, any>;
441
+ }): Promise<import("../utils/subscription-operations").Subscription | null>;
442
+ getOrganizationMembers(organizationId: number): Promise<import("../utils/organization-operations").OrganizationMember[]>;
443
+ getOrganizationContributors(organizationId: number, limit?: number, offset?: number): Promise<import("../utils/organization-operations").OrganizationMember[]>;
444
+ getOrganizationContributorsCount(organizationId: number): Promise<number>;
445
+ getOrganizationMembersCount(organizationId: number, contributionRole?: "CONTRIBUTOR" | "VISITOR"): Promise<number>;
446
+ getOrganizationMembershipForUser(userId: number, organizationId: number): Promise<import("../utils/organization-operations").OrganizationMember | null>;
447
+ /**
448
+ * Get organization member by ID
449
+ */
450
+ getOrganizationMemberById(memberId: number): Promise<import("../utils/organization-operations").OrganizationMember | null>;
451
+ getOrganizationContributorByUserId(organizationId: number, userId: number): Promise<import("../utils/organization-operations").OrganizationMember | null>;
452
+ findContributorPage(organizationId: number, userId: number, limit?: number): Promise<number | null>;
453
+ updateOrganizationMemberRole(userId: number, organizationId: number, params: {
454
+ contributionRole?: "VISITOR" | "CONTRIBUTOR";
455
+ permissionsRole?: "REGULAR" | "ADMIN";
456
+ }): Promise<import("../utils/organization-operations").OrganizationMember | null>;
457
+ getOrganizationMemberRelationships(organizationId: number, linkedinAccountId: number, limit?: number): Promise<import("../utils/organization-operations").LinkedinRelationship[]>;
458
+ getOrganizationMemberRelationshipsCount(organizationId: number, linkedinAccountId: number): Promise<number>;
459
+ createOrganization(organizationData: {
460
+ name: string;
461
+ workspaceType: "INDIVIDUALS" | "BUSINESS";
462
+ subscriptionTier: "PRO_VERSION" | "WAITING_FOR_SUBSCRIPTION_SELECTION";
463
+ createdByUserId?: number | null;
464
+ imageUrl?: string | null;
465
+ }): Promise<import("../utils/organization-operations").Organization>;
466
+ findOrCreateOrganizationMember(membershipData: {
467
+ organizationId: number;
468
+ userId: number;
469
+ contributionRole: "VISITOR" | "CONTRIBUTOR";
470
+ permissionsRole: "ADMIN" | "REGULAR";
471
+ }): Promise<import("../utils/organization-operations").OrganizationMember>;
472
+ findPersonalWorkspaceForUser(userId: number): Promise<import("../utils/organization-operations").Organization | null>;
473
+ findOrCreateOrganizationMemberLegacy(params: {
474
+ organizationId: number;
475
+ userId: number;
476
+ contributionRole: "VISITOR" | "CONTRIBUTOR";
477
+ permissionsRole: "REGULAR" | "ADMIN";
478
+ }): Promise<any>;
479
+ createOrganizationUserRelationshipAssignment(params: {
480
+ organizationId: number;
481
+ linkedinRelationshipId: number;
482
+ }): Promise<any>;
483
+ /**
484
+ * Bulk create organization user relationship assignments
485
+ * This is more efficient and atomic than individual inserts
486
+ *
487
+ * @param params - Parameters for bulk creation
488
+ * @returns Object with counts of created and skipped assignments
489
+ */
490
+ bulkCreateOrganizationUserRelationshipAssignments(params: {
491
+ organizationId: number;
492
+ linkedinRelationshipIds: number[];
493
+ }): Promise<{
494
+ created: number;
495
+ skipped: number;
496
+ }>;
497
+ deleteOrganizationUserRelationshipAssignmentsByLinkedInAccount(params: {
498
+ organizationId: number;
499
+ linkedinAccountId: number;
500
+ }): Promise<number>;
501
+ /**
502
+ * Get organization relationship assignment by ID
503
+ * @param assignmentId - Organization relationship assignment ID
504
+ * @returns Assignment data or null if not found
505
+ */
506
+ getOrganizationRelationshipAssignmentById(assignmentId: number): Promise<{
507
+ id: number;
508
+ organizationId: number;
509
+ linkedinRelationshipId: number;
510
+ organizationMemberId: number | null;
511
+ createdAt: Date;
512
+ } | null>;
513
+ /**
514
+ * Find organization member for a relationship
515
+ * @param organizationId - Organization ID
516
+ * @param linkedinRelationshipId - LinkedIn relationship ID
517
+ * @returns Organization member ID or null if not found
518
+ */
519
+ findOrganizationMemberForRelationship(organizationId: number, linkedinRelationshipId: number): Promise<{
520
+ id: number;
521
+ } | null>;
522
+ /**
523
+ * Delete all relationship assignments for an organization member
524
+ * Uses organization_member_id for faster, more accurate lookups
525
+ * @param organizationMemberId - Organization member ID
526
+ * @param client - Optional transaction client (if provided, uses it instead of getting new connection)
527
+ */
528
+ deleteAssignmentsByOrganizationMember(organizationMemberId: number, client?: any): Promise<number>;
529
+ /**
530
+ * Bulk insert relationship assignments for an organization member
531
+ * Uses organization_member_id for faster, more accurate lookups
532
+ * @param params - Parameters for bulk insert
533
+ * @param client - Optional transaction client (if provided, uses it instead of getting new connection)
534
+ */
535
+ bulkInsertAssignmentsForOrganizationMember(params: {
536
+ organizationId: number;
537
+ organizationMemberId: number;
538
+ relationshipIds: number[];
539
+ }, client?: any): Promise<{
540
+ created: number;
541
+ skipped: number;
542
+ failed: number;
543
+ failedRelationshipIds: number[];
544
+ failedErrors: string[];
545
+ }>;
546
+ /**
547
+ * Verify relationship assignments for an organization member after commit
548
+ * Uses organization_member_id for faster, more accurate lookups
549
+ */
550
+ verifyAssignmentsForOrganizationMember(params: {
551
+ organizationId: number;
552
+ organizationMemberId: number;
553
+ mappingJobId: number;
554
+ userLinkedinAccountId: number;
555
+ }): Promise<number>;
556
+ findOrCreatePersonalWorkspace(params: {
557
+ userId: number;
558
+ workspaceName?: string;
559
+ }): Promise<any>;
560
+ /**
561
+ * Get user's personal workspace by finding the organization they are a member of with workspace_type INDIVIDUALS
562
+ * Every authenticated user should have exactly one personal workspace
563
+ * @param userId - The user's ID
564
+ * @returns The personal workspace organization or null if not found
565
+ */
566
+ getUserPersonalWorkspace(userId: number): Promise<any>;
567
+ getUserById(userId: number): Promise<import("./schema").User | null>;
568
+ getLatestCompletedMappingJobForUser(userId: number): Promise<import("./schema").MappingJob | null>;
569
+ getLatestCompletedMappingJobForLinkedInAccount(linkedinAccountId: number): Promise<import("./schema").MappingJob | null | undefined>;
570
+ getRelationshipsForMappingJob(jobId: number, maxCount?: number): Promise<import("./schema").LinkedinRelationship[]>;
571
+ getAllRelationshipsForMappingJob(jobId: number, maxCount?: number | null): Promise<import("./schema").LinkedinRelationship[]>;
572
+ getRelationshipCountForMappingJob(jobId: number): Promise<number>;
573
+ getLinkedInAccountByUserId(userId: number): Promise<import("./schema").LinkedinAccount | null>;
574
+ getUserByLinkedInAccountId(linkedinAccountId: number): Promise<import("./schema").User | null>;
575
+ getLinkedInAccountWithUserByForagerId(foragerId: number): Promise<import("../utils/forager-linkedin-operations").LinkedInAccountWithUser | null>;
576
+ getLlmInferenceJobStatusForContributor(params: {
577
+ userId: number;
578
+ organizationId: number;
579
+ }): Promise<{
580
+ status: "pending" | "completed" | "not_found";
581
+ llmInferenceJobId: number | null;
582
+ mappingJobId: number | null;
583
+ createdAt: Date | null;
584
+ startedAt: Date | null;
585
+ completedAt: Date | null;
586
+ } | null>;
587
+ getLlmInferenceJobStatusForMappingJob(mappingJobId: number): Promise<{
588
+ status: "pending" | "completed" | "not_found";
589
+ llmInferenceJobId: number | null;
590
+ mappingJobId: number | null;
591
+ createdAt: Date | null;
592
+ startedAt: Date | null;
593
+ completedAt: Date | null;
594
+ } | null>;
595
+ getAllLlmInferenceJobStatusesForOrganization(organizationId: number): Promise<Record<number, {
596
+ status: "pending" | "completed" | "not_found";
597
+ llmInferenceJobId: number | null;
598
+ mappingJobId: number | null;
599
+ createdAt: Date | null;
600
+ startedAt: Date | null;
601
+ completedAt: Date | null;
602
+ }>>;
603
+ getLinkedInAccountById(linkedinAccountId: number): Promise<import("./schema").LinkedinAccount | null>;
604
+ /**
605
+ * Get all industries for a user
606
+ * @param userId - User ID
607
+ * @returns Array of industry names (lowercase)
608
+ */
609
+ getUserIndustries(userId: number): Promise<string[]>;
610
+ /**
611
+ * Get industries for multiple users (batch query - optimized)
612
+ * @param userIds - Array of user IDs
613
+ * @returns Map of userId -> industry names array
614
+ */
615
+ getBatchUserIndustries(userIds: number[]): Promise<Map<number, string[]>>;
616
+ /**
617
+ * Find or create an industry by name (always lowercase)
618
+ * @param industryName - Industry name
619
+ * @returns Industry ID
620
+ */
621
+ findOrCreateIndustry(industryName: string): Promise<number>;
622
+ /**
623
+ * Set industries for a user (replaces existing)
624
+ * @param userId - User ID
625
+ * @param industryNames - Array of industry names
626
+ */
627
+ setUserIndustries(userId: number, industryNames: string[]): Promise<void>;
628
+ /**
629
+ * Add industries to a user (keeps existing)
630
+ * @param userId - User ID
631
+ * @param industryNames - Array of industry names to add
632
+ */
633
+ addUserIndustries(userId: number, industryNames: string[]): Promise<void>;
634
+ /**
635
+ * Remove specific industries from a user
636
+ * @param userId - User ID
637
+ * @param industryNames - Array of industry names to remove
638
+ */
639
+ removeUserIndustries(userId: number, industryNames: string[]): Promise<void>;
640
+ /**
641
+ * Remove all industries from a user
642
+ * @param userId - User ID
643
+ */
644
+ clearUserIndustries(userId: number): Promise<void>;
645
+ /**
646
+ * Check if a user has a specific industry
647
+ * @param userId - User ID
648
+ * @param industryName - Industry name to check
649
+ * @returns True if user has the industry
650
+ */
651
+ userHasIndustry(userId: number, industryName: string): Promise<boolean>;
652
+ /**
653
+ * Get all unique industries in the system
654
+ * @param limit - Optional limit (default: 1000)
655
+ * @returns Array of industry names
656
+ */
657
+ getAllIndustries(limit?: number): Promise<string[]>;
658
+ /**
659
+ * Search industries by partial name match
660
+ * @param searchTerm - Search term (case-insensitive)
661
+ * @param limit - Optional limit (default: 20)
662
+ * @returns Array of matching industry names
663
+ */
664
+ searchIndustries(searchTerm: string, limit?: number): Promise<string[]>;
665
+ createInvitation(email: string, invitedByUserId: number, shadowUserId: number, organizationId: number, invitationMessage?: string, invitedUserPermissionsRole?: "ADMIN" | "REGULAR", expiresInDays?: number): Promise<import("../utils/invitation-operations").InvitationDetails>;
666
+ validateInvitationToken(token: string): Promise<import("../utils/invitation-operations").ValidateTokenResult>;
667
+ validateInvitationEligibility(email: string): Promise<{
668
+ eligible: boolean;
669
+ reason?: "active_invitation" | "email_registered" | "email_reserved";
670
+ }>;
671
+ markInvitationAsUsed(token: string): Promise<import("../utils/invitation-operations").InvitationDetails | null>;
672
+ revokeInvitation(invitationId: number): Promise<import("../utils/invitation-operations").InvitationDetails | null>;
673
+ getInvitationById(invitationId: number): Promise<import("../utils/invitation-operations").InvitationWithDetails | null>;
674
+ getInvitationsSentByUser(invitedByUserId: number): Promise<import("../utils/invitation-operations").InvitationWithDetails[]>;
675
+ getPendingInvitationsByOrganization(organizationId: number): Promise<import("../utils/invitation-operations").InvitationWithDetails[]>;
676
+ getAllInvitationsByOrganization(organizationId: number): Promise<import("../utils/invitation-operations").InvitationWithDetails[]>;
677
+ hasPendingInvitation(email: string, organizationId: number): Promise<boolean>;
678
+ hasActiveInvitationByEmail(email: string): Promise<boolean>;
679
+ hasActiveInvitationByEmailForOrg(email: string, organizationId: number): Promise<boolean>;
680
+ isEmailUsedByAuthenticatedUser(email: string): Promise<boolean>;
681
+ isEmailReservedByContactInfo(email: string): Promise<boolean>;
682
+ cleanupExpiredInvitations(olderThanDays?: number): Promise<number>;
683
+ createIntroductionRequest(params: Parameters<typeof createIntroductionRequest>[1]): Promise<import("../utils/introduction-request-operations").IntroductionRequest>;
684
+ getIntroductionRequestsByUser(userId: number, limit?: number): Promise<import("../utils/introduction-request-operations").IntroductionRequest[]>;
685
+ getIntroductionRequestById(requestId: number): Promise<import("../utils/introduction-request-operations").IntroductionRequest | null>;
686
+ hasExistingIntroductionRequest(byUserId: number, toRelationshipId: number): Promise<boolean>;
687
+ updateIntroductionRequestStatus(requestId: number, status: "pending" | "approved" | "rejected"): Promise<import("../utils/introduction-request-operations").IntroductionRequest>;
688
+ markIntroductionRequestAsSeen(requestId: number): Promise<import("../utils/introduction-request-operations").IntroductionRequest>;
689
+ getReceivedIntroductionRequests(userId: number, organizationId: number): Promise<import("../utils/introduction-request-operations").DetailedIntroductionRequest[]>;
690
+ getSentIntroductionRequests(userId: number, organizationId: number): Promise<import("../utils/introduction-request-operations").DetailedIntroductionRequest[]>;
691
+ markReceivedIntroductionRequestsAsSeen(userId: number, organizationId: number): Promise<number>;
692
+ createUser(params: {
693
+ givenName: string;
694
+ familyName: string;
695
+ }): Promise<any>;
696
+ createAuthenticatedUser(params: {
697
+ userId?: number;
698
+ cognitoUserId: string;
699
+ contactInfoId?: number;
700
+ authProvider?: string;
701
+ }): Promise<import("./schema").AuthenticatedUser>;
702
+ createCompanySheetUpload(data: {
703
+ s3FilePath: string;
704
+ bucketName: string;
705
+ fileName?: string | null;
706
+ peopleCount?: number | null;
707
+ metadata?: Record<string, any>;
708
+ }): Promise<import("../utils/company-sheet-upload-operations").CompanySheetUpload>;
709
+ getCompanySheetUploadById(sheetUploadId: number): Promise<import("../utils/company-sheet-upload-operations").CompanySheetUpload | null>;
710
+ updateCompanySheetUploadJobId(sheetUploadId: number, companyMappingJobId: number): Promise<import("../utils/company-sheet-upload-operations").CompanySheetUpload | null>;
711
+ }
712
+ export declare const dbService: DatabaseService;
713
+ export { DatabaseService };
714
+ //# sourceMappingURL=database-service.d.ts.map