eggi-ai-db-schema-2 12.54.2

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 +655 -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 +689 -0
  12. package/dist/lib/database-service.d.ts.map +1 -0
  13. package/dist/lib/database-service.js +1362 -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 +159 -0
  89. package/dist/utils/introduction-request-operations.d.ts.map +1 -0
  90. package/dist/utils/introduction-request-operations.js +481 -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 +266 -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 +275 -0
  145. package/dist/utils/organization-operations.d.ts.map +1 -0
  146. package/dist/utils/organization-operations.js +993 -0
  147. package/dist/utils/organization-operations.js.map +1 -0
  148. package/dist/utils/organization-relationship-operations.d.ts +59 -0
  149. package/dist/utils/organization-relationship-operations.d.ts.map +1 -0
  150. package/dist/utils/organization-relationship-operations.js +240 -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 +143 -0
  165. package/dist/utils/sales-pipeline-operations.d.ts.map +1 -0
  166. package/dist/utils/sales-pipeline-operations.js +649 -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,689 @@
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
+ getOrganizationContributorByUserId(organizationId: number, userId: number): Promise<import("../utils/organization-operations").OrganizationMember | null>;
448
+ findContributorPage(organizationId: number, userId: number, limit?: number): Promise<number | null>;
449
+ updateOrganizationMemberRole(userId: number, organizationId: number, params: {
450
+ contributionRole?: "VISITOR" | "CONTRIBUTOR";
451
+ permissionsRole?: "REGULAR" | "ADMIN";
452
+ }): Promise<import("../utils/organization-operations").OrganizationMember | null>;
453
+ getOrganizationMemberRelationships(organizationId: number, linkedinAccountId: number, limit?: number): Promise<import("../utils/organization-operations").LinkedinRelationship[]>;
454
+ getOrganizationMemberRelationshipsCount(organizationId: number, linkedinAccountId: number): Promise<number>;
455
+ createOrganization(organizationData: {
456
+ name: string;
457
+ workspaceType: "INDIVIDUALS" | "BUSINESS";
458
+ subscriptionTier: "PRO_VERSION" | "WAITING_FOR_SUBSCRIPTION_SELECTION";
459
+ createdByUserId?: number | null;
460
+ imageUrl?: string | null;
461
+ }): Promise<import("../utils/organization-operations").Organization>;
462
+ findOrCreateOrganizationMember(membershipData: {
463
+ organizationId: number;
464
+ userId: number;
465
+ contributionRole: "VISITOR" | "CONTRIBUTOR";
466
+ permissionsRole: "ADMIN" | "REGULAR";
467
+ }): Promise<import("../utils/organization-operations").OrganizationMember>;
468
+ findPersonalWorkspaceForUser(userId: number): Promise<import("../utils/organization-operations").Organization | null>;
469
+ findOrCreateOrganizationMemberLegacy(params: {
470
+ organizationId: number;
471
+ userId: number;
472
+ contributionRole: "VISITOR" | "CONTRIBUTOR";
473
+ permissionsRole: "REGULAR" | "ADMIN";
474
+ }): Promise<any>;
475
+ createOrganizationUserRelationshipAssignment(params: {
476
+ organizationId: number;
477
+ linkedinRelationshipId: number;
478
+ }): Promise<any>;
479
+ /**
480
+ * Bulk create organization user relationship assignments
481
+ * This is more efficient and atomic than individual inserts
482
+ *
483
+ * @param params - Parameters for bulk creation
484
+ * @returns Object with counts of created and skipped assignments
485
+ */
486
+ bulkCreateOrganizationUserRelationshipAssignments(params: {
487
+ organizationId: number;
488
+ linkedinRelationshipIds: number[];
489
+ }): Promise<{
490
+ created: number;
491
+ skipped: number;
492
+ }>;
493
+ deleteOrganizationUserRelationshipAssignmentsByLinkedInAccount(params: {
494
+ organizationId: number;
495
+ linkedinAccountId: number;
496
+ }): Promise<number>;
497
+ /**
498
+ * Delete all relationship assignments for an organization member
499
+ * Uses organization_member_id for faster, more accurate lookups
500
+ * @param organizationMemberId - Organization member ID
501
+ * @param client - Optional transaction client (if provided, uses it instead of getting new connection)
502
+ */
503
+ deleteAssignmentsByOrganizationMember(organizationMemberId: number, client?: any): Promise<number>;
504
+ /**
505
+ * Bulk insert relationship assignments for an organization member
506
+ * Uses organization_member_id for faster, more accurate lookups
507
+ * @param params - Parameters for bulk insert
508
+ * @param client - Optional transaction client (if provided, uses it instead of getting new connection)
509
+ */
510
+ bulkInsertAssignmentsForOrganizationMember(params: {
511
+ organizationId: number;
512
+ organizationMemberId: number;
513
+ relationshipIds: number[];
514
+ }, client?: any): Promise<{
515
+ created: number;
516
+ skipped: number;
517
+ failed: number;
518
+ failedRelationshipIds: number[];
519
+ failedErrors: string[];
520
+ }>;
521
+ /**
522
+ * Verify relationship assignments for an organization member after commit
523
+ * Uses organization_member_id for faster, more accurate lookups
524
+ */
525
+ verifyAssignmentsForOrganizationMember(params: {
526
+ organizationId: number;
527
+ organizationMemberId: number;
528
+ mappingJobId: number;
529
+ userLinkedinAccountId: number;
530
+ }): Promise<number>;
531
+ findOrCreatePersonalWorkspace(params: {
532
+ userId: number;
533
+ workspaceName?: string;
534
+ }): Promise<any>;
535
+ /**
536
+ * Get user's personal workspace by finding the organization they are a member of with workspace_type INDIVIDUALS
537
+ * Every authenticated user should have exactly one personal workspace
538
+ * @param userId - The user's ID
539
+ * @returns The personal workspace organization or null if not found
540
+ */
541
+ getUserPersonalWorkspace(userId: number): Promise<any>;
542
+ getUserById(userId: number): Promise<import("./schema").User | null>;
543
+ getLatestCompletedMappingJobForUser(userId: number): Promise<import("./schema").MappingJob | null>;
544
+ getLatestCompletedMappingJobForLinkedInAccount(linkedinAccountId: number): Promise<import("./schema").MappingJob | null | undefined>;
545
+ getRelationshipsForMappingJob(jobId: number, maxCount?: number): Promise<import("./schema").LinkedinRelationship[]>;
546
+ getAllRelationshipsForMappingJob(jobId: number, maxCount?: number | null): Promise<import("./schema").LinkedinRelationship[]>;
547
+ getRelationshipCountForMappingJob(jobId: number): Promise<number>;
548
+ getLinkedInAccountByUserId(userId: number): Promise<import("./schema").LinkedinAccount | null>;
549
+ getUserByLinkedInAccountId(linkedinAccountId: number): Promise<import("./schema").User | null>;
550
+ getLinkedInAccountWithUserByForagerId(foragerId: number): Promise<import("../utils/forager-linkedin-operations").LinkedInAccountWithUser | null>;
551
+ getLlmInferenceJobStatusForContributor(params: {
552
+ userId: number;
553
+ organizationId: number;
554
+ }): Promise<{
555
+ status: "pending" | "completed" | "not_found";
556
+ llmInferenceJobId: number | null;
557
+ mappingJobId: number | null;
558
+ createdAt: Date | null;
559
+ startedAt: Date | null;
560
+ completedAt: Date | null;
561
+ } | null>;
562
+ getLlmInferenceJobStatusForMappingJob(mappingJobId: number): Promise<{
563
+ status: "pending" | "completed" | "not_found";
564
+ llmInferenceJobId: number | null;
565
+ mappingJobId: number | null;
566
+ createdAt: Date | null;
567
+ startedAt: Date | null;
568
+ completedAt: Date | null;
569
+ } | null>;
570
+ getAllLlmInferenceJobStatusesForOrganization(organizationId: number): Promise<Record<number, {
571
+ status: "pending" | "completed" | "not_found";
572
+ llmInferenceJobId: number | null;
573
+ mappingJobId: number | null;
574
+ createdAt: Date | null;
575
+ startedAt: Date | null;
576
+ completedAt: Date | null;
577
+ }>>;
578
+ getLinkedInAccountById(linkedinAccountId: number): Promise<import("./schema").LinkedinAccount | null>;
579
+ /**
580
+ * Get all industries for a user
581
+ * @param userId - User ID
582
+ * @returns Array of industry names (lowercase)
583
+ */
584
+ getUserIndustries(userId: number): Promise<string[]>;
585
+ /**
586
+ * Get industries for multiple users (batch query - optimized)
587
+ * @param userIds - Array of user IDs
588
+ * @returns Map of userId -> industry names array
589
+ */
590
+ getBatchUserIndustries(userIds: number[]): Promise<Map<number, string[]>>;
591
+ /**
592
+ * Find or create an industry by name (always lowercase)
593
+ * @param industryName - Industry name
594
+ * @returns Industry ID
595
+ */
596
+ findOrCreateIndustry(industryName: string): Promise<number>;
597
+ /**
598
+ * Set industries for a user (replaces existing)
599
+ * @param userId - User ID
600
+ * @param industryNames - Array of industry names
601
+ */
602
+ setUserIndustries(userId: number, industryNames: string[]): Promise<void>;
603
+ /**
604
+ * Add industries to a user (keeps existing)
605
+ * @param userId - User ID
606
+ * @param industryNames - Array of industry names to add
607
+ */
608
+ addUserIndustries(userId: number, industryNames: string[]): Promise<void>;
609
+ /**
610
+ * Remove specific industries from a user
611
+ * @param userId - User ID
612
+ * @param industryNames - Array of industry names to remove
613
+ */
614
+ removeUserIndustries(userId: number, industryNames: string[]): Promise<void>;
615
+ /**
616
+ * Remove all industries from a user
617
+ * @param userId - User ID
618
+ */
619
+ clearUserIndustries(userId: number): Promise<void>;
620
+ /**
621
+ * Check if a user has a specific industry
622
+ * @param userId - User ID
623
+ * @param industryName - Industry name to check
624
+ * @returns True if user has the industry
625
+ */
626
+ userHasIndustry(userId: number, industryName: string): Promise<boolean>;
627
+ /**
628
+ * Get all unique industries in the system
629
+ * @param limit - Optional limit (default: 1000)
630
+ * @returns Array of industry names
631
+ */
632
+ getAllIndustries(limit?: number): Promise<string[]>;
633
+ /**
634
+ * Search industries by partial name match
635
+ * @param searchTerm - Search term (case-insensitive)
636
+ * @param limit - Optional limit (default: 20)
637
+ * @returns Array of matching industry names
638
+ */
639
+ searchIndustries(searchTerm: string, limit?: number): Promise<string[]>;
640
+ createInvitation(email: string, invitedByUserId: number, shadowUserId: number, organizationId: number, invitationMessage?: string, invitedUserPermissionsRole?: "ADMIN" | "REGULAR", expiresInDays?: number): Promise<import("../utils/invitation-operations").InvitationDetails>;
641
+ validateInvitationToken(token: string): Promise<import("../utils/invitation-operations").ValidateTokenResult>;
642
+ validateInvitationEligibility(email: string): Promise<{
643
+ eligible: boolean;
644
+ reason?: "active_invitation" | "email_registered" | "email_reserved";
645
+ }>;
646
+ markInvitationAsUsed(token: string): Promise<import("../utils/invitation-operations").InvitationDetails | null>;
647
+ revokeInvitation(invitationId: number): Promise<import("../utils/invitation-operations").InvitationDetails | null>;
648
+ getInvitationById(invitationId: number): Promise<import("../utils/invitation-operations").InvitationWithDetails | null>;
649
+ getInvitationsSentByUser(invitedByUserId: number): Promise<import("../utils/invitation-operations").InvitationWithDetails[]>;
650
+ getPendingInvitationsByOrganization(organizationId: number): Promise<import("../utils/invitation-operations").InvitationWithDetails[]>;
651
+ getAllInvitationsByOrganization(organizationId: number): Promise<import("../utils/invitation-operations").InvitationWithDetails[]>;
652
+ hasPendingInvitation(email: string, organizationId: number): Promise<boolean>;
653
+ hasActiveInvitationByEmail(email: string): Promise<boolean>;
654
+ hasActiveInvitationByEmailForOrg(email: string, organizationId: number): Promise<boolean>;
655
+ isEmailUsedByAuthenticatedUser(email: string): Promise<boolean>;
656
+ isEmailReservedByContactInfo(email: string): Promise<boolean>;
657
+ cleanupExpiredInvitations(olderThanDays?: number): Promise<number>;
658
+ createIntroductionRequest(params: Parameters<typeof createIntroductionRequest>[1]): Promise<import("../utils/introduction-request-operations").IntroductionRequest>;
659
+ getIntroductionRequestsByUser(userId: number, limit?: number): Promise<import("../utils/introduction-request-operations").IntroductionRequest[]>;
660
+ getIntroductionRequestById(requestId: number): Promise<import("../utils/introduction-request-operations").IntroductionRequest | null>;
661
+ hasExistingIntroductionRequest(byUserId: number, toRelationshipId: number): Promise<boolean>;
662
+ updateIntroductionRequestStatus(requestId: number, status: "pending" | "approved" | "rejected"): Promise<import("../utils/introduction-request-operations").IntroductionRequest>;
663
+ markIntroductionRequestAsSeen(requestId: number): Promise<import("../utils/introduction-request-operations").IntroductionRequest>;
664
+ getReceivedIntroductionRequests(userId: number, organizationId: number): Promise<import("../utils/introduction-request-operations").DetailedIntroductionRequest[]>;
665
+ getSentIntroductionRequests(userId: number, organizationId: number): Promise<import("../utils/introduction-request-operations").DetailedIntroductionRequest[]>;
666
+ markReceivedIntroductionRequestsAsSeen(userId: number, organizationId: number): Promise<number>;
667
+ createUser(params: {
668
+ givenName: string;
669
+ familyName: string;
670
+ }): Promise<any>;
671
+ createAuthenticatedUser(params: {
672
+ userId?: number;
673
+ cognitoUserId: string;
674
+ contactInfoId?: number;
675
+ authProvider?: string;
676
+ }): Promise<import("./schema").AuthenticatedUser>;
677
+ createCompanySheetUpload(data: {
678
+ s3FilePath: string;
679
+ bucketName: string;
680
+ fileName?: string | null;
681
+ peopleCount?: number | null;
682
+ metadata?: Record<string, any>;
683
+ }): Promise<import("../utils/company-sheet-upload-operations").CompanySheetUpload>;
684
+ getCompanySheetUploadById(sheetUploadId: number): Promise<import("../utils/company-sheet-upload-operations").CompanySheetUpload | null>;
685
+ updateCompanySheetUploadJobId(sheetUploadId: number, companyMappingJobId: number): Promise<import("../utils/company-sheet-upload-operations").CompanySheetUpload | null>;
686
+ }
687
+ export declare const dbService: DatabaseService;
688
+ export { DatabaseService };
689
+ //# sourceMappingURL=database-service.d.ts.map