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.
- package/CHANGELOG.md +750 -0
- package/README.md +660 -0
- package/dist/config/database.d.ts +28 -0
- package/dist/config/database.d.ts.map +1 -0
- package/dist/config/database.js +72 -0
- package/dist/config/database.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +199 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/database-service.d.ts +714 -0
- package/dist/lib/database-service.d.ts.map +1 -0
- package/dist/lib/database-service.js +1394 -0
- package/dist/lib/database-service.js.map +1 -0
- package/dist/lib/db-types.d.ts +167 -0
- package/dist/lib/db-types.d.ts.map +1 -0
- package/dist/lib/db-types.js +28 -0
- package/dist/lib/db-types.js.map +1 -0
- package/dist/lib/db.d.ts +58 -0
- package/dist/lib/db.d.ts.map +1 -0
- package/dist/lib/db.js +292 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/index.d.ts +11 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +26 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/pg-client.d.ts +50 -0
- package/dist/lib/pg-client.d.ts.map +1 -0
- package/dist/lib/pg-client.js +106 -0
- package/dist/lib/pg-client.js.map +1 -0
- package/dist/lib/schema.d.ts +298 -0
- package/dist/lib/schema.d.ts.map +1 -0
- package/dist/lib/schema.js +12 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/migration-manager.d.ts +49 -0
- package/dist/migration-manager.d.ts.map +1 -0
- package/dist/migration-manager.js +282 -0
- package/dist/migration-manager.js.map +1 -0
- package/dist/queries/minimal-connections.d.ts +31 -0
- package/dist/queries/minimal-connections.d.ts.map +1 -0
- package/dist/queries/minimal-connections.js +143 -0
- package/dist/queries/minimal-connections.js.map +1 -0
- package/dist/schema.ts +340 -0
- package/dist/seed.d.ts +8 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +40 -0
- package/dist/seed.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/types.d.ts +77 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +3 -0
- package/dist/types/types.js.map +1 -0
- package/dist/utils/authenticated-user-operations.d.ts +110 -0
- package/dist/utils/authenticated-user-operations.d.ts.map +1 -0
- package/dist/utils/authenticated-user-operations.js +292 -0
- package/dist/utils/authenticated-user-operations.js.map +1 -0
- package/dist/utils/authentication-operations.d.ts +48 -0
- package/dist/utils/authentication-operations.d.ts.map +1 -0
- package/dist/utils/authentication-operations.js +172 -0
- package/dist/utils/authentication-operations.js.map +1 -0
- package/dist/utils/company-mapping-job-operations.d.ts +103 -0
- package/dist/utils/company-mapping-job-operations.d.ts.map +1 -0
- package/dist/utils/company-mapping-job-operations.js +413 -0
- package/dist/utils/company-mapping-job-operations.js.map +1 -0
- package/dist/utils/company-sheet-upload-operations.d.ts +53 -0
- package/dist/utils/company-sheet-upload-operations.d.ts.map +1 -0
- package/dist/utils/company-sheet-upload-operations.js +135 -0
- package/dist/utils/company-sheet-upload-operations.js.map +1 -0
- package/dist/utils/contact-operations.d.ts +70 -0
- package/dist/utils/contact-operations.d.ts.map +1 -0
- package/dist/utils/contact-operations.js +294 -0
- package/dist/utils/contact-operations.js.map +1 -0
- package/dist/utils/forager-linkedin-operations.d.ts +74 -0
- package/dist/utils/forager-linkedin-operations.d.ts.map +1 -0
- package/dist/utils/forager-linkedin-operations.js +778 -0
- package/dist/utils/forager-linkedin-operations.js.map +1 -0
- package/dist/utils/ghost-genius-linkedin-operations.d.ts +23 -0
- package/dist/utils/ghost-genius-linkedin-operations.d.ts.map +1 -0
- package/dist/utils/ghost-genius-linkedin-operations.js +282 -0
- package/dist/utils/ghost-genius-linkedin-operations.js.map +1 -0
- package/dist/utils/index.d.ts +29 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +77 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/introduction-request-operations.d.ts +160 -0
- package/dist/utils/introduction-request-operations.d.ts.map +1 -0
- package/dist/utils/introduction-request-operations.js +492 -0
- package/dist/utils/introduction-request-operations.js.map +1 -0
- package/dist/utils/invitation-operations.d.ts +141 -0
- package/dist/utils/invitation-operations.d.ts.map +1 -0
- package/dist/utils/invitation-operations.js +749 -0
- package/dist/utils/invitation-operations.js.map +1 -0
- package/dist/utils/linkedin-account-operations.d.ts +45 -0
- package/dist/utils/linkedin-account-operations.d.ts.map +1 -0
- package/dist/utils/linkedin-account-operations.js +279 -0
- package/dist/utils/linkedin-account-operations.js.map +1 -0
- package/dist/utils/linkedin-account-relationship-operations.d.ts +77 -0
- package/dist/utils/linkedin-account-relationship-operations.d.ts.map +1 -0
- package/dist/utils/linkedin-account-relationship-operations.js +274 -0
- package/dist/utils/linkedin-account-relationship-operations.js.map +1 -0
- package/dist/utils/linkedin-data-operations.d.ts +102 -0
- package/dist/utils/linkedin-data-operations.d.ts.map +1 -0
- package/dist/utils/linkedin-data-operations.js +613 -0
- package/dist/utils/linkedin-data-operations.js.map +1 -0
- package/dist/utils/linkedin-identifier-utils.d.ts +31 -0
- package/dist/utils/linkedin-identifier-utils.d.ts.map +1 -0
- package/dist/utils/linkedin-identifier-utils.js +63 -0
- package/dist/utils/linkedin-identifier-utils.js.map +1 -0
- package/dist/utils/linkedin-profile-cache.d.ts +131 -0
- package/dist/utils/linkedin-profile-cache.d.ts.map +1 -0
- package/dist/utils/linkedin-profile-cache.js +418 -0
- package/dist/utils/linkedin-profile-cache.js.map +1 -0
- package/dist/utils/llm-inference-job-operations.d.ts +116 -0
- package/dist/utils/llm-inference-job-operations.d.ts.map +1 -0
- package/dist/utils/llm-inference-job-operations.js +267 -0
- package/dist/utils/llm-inference-job-operations.js.map +1 -0
- package/dist/utils/mapping-job-operations.d.ts +272 -0
- package/dist/utils/mapping-job-operations.d.ts.map +1 -0
- package/dist/utils/mapping-job-operations.js +833 -0
- package/dist/utils/mapping-job-operations.js.map +1 -0
- package/dist/utils/mapping-operations.d.ts +80 -0
- package/dist/utils/mapping-operations.d.ts.map +1 -0
- package/dist/utils/mapping-operations.js +318 -0
- package/dist/utils/mapping-operations.js.map +1 -0
- package/dist/utils/on-demand-mapping-operations.d.ts +199 -0
- package/dist/utils/on-demand-mapping-operations.d.ts.map +1 -0
- package/dist/utils/on-demand-mapping-operations.js +728 -0
- package/dist/utils/on-demand-mapping-operations.js.map +1 -0
- package/dist/utils/onboarding-operations.d.ts +53 -0
- package/dist/utils/onboarding-operations.d.ts.map +1 -0
- package/dist/utils/onboarding-operations.js +223 -0
- package/dist/utils/onboarding-operations.js.map +1 -0
- package/dist/utils/organization-assignment-job-operations.d.ts +258 -0
- package/dist/utils/organization-assignment-job-operations.d.ts.map +1 -0
- package/dist/utils/organization-assignment-job-operations.js +881 -0
- package/dist/utils/organization-assignment-job-operations.js.map +1 -0
- package/dist/utils/organization-assignment-operations.d.ts +59 -0
- package/dist/utils/organization-assignment-operations.d.ts.map +1 -0
- package/dist/utils/organization-assignment-operations.js +130 -0
- package/dist/utils/organization-assignment-operations.js.map +1 -0
- package/dist/utils/organization-operations.d.ts +284 -0
- package/dist/utils/organization-operations.d.ts.map +1 -0
- package/dist/utils/organization-operations.js +1030 -0
- package/dist/utils/organization-operations.js.map +1 -0
- package/dist/utils/organization-relationship-operations.d.ts +79 -0
- package/dist/utils/organization-relationship-operations.d.ts.map +1 -0
- package/dist/utils/organization-relationship-operations.js +294 -0
- package/dist/utils/organization-relationship-operations.js.map +1 -0
- package/dist/utils/quota-operations.d.ts +107 -0
- package/dist/utils/quota-operations.d.ts.map +1 -0
- package/dist/utils/quota-operations.js +692 -0
- package/dist/utils/quota-operations.js.map +1 -0
- package/dist/utils/recursive-mapping-job-operations.d.ts +42 -0
- package/dist/utils/recursive-mapping-job-operations.d.ts.map +1 -0
- package/dist/utils/recursive-mapping-job-operations.js +169 -0
- package/dist/utils/recursive-mapping-job-operations.js.map +1 -0
- package/dist/utils/relationship-operations.d.ts +130 -0
- package/dist/utils/relationship-operations.d.ts.map +1 -0
- package/dist/utils/relationship-operations.js +329 -0
- package/dist/utils/relationship-operations.js.map +1 -0
- package/dist/utils/sales-pipeline-operations.d.ts +163 -0
- package/dist/utils/sales-pipeline-operations.d.ts.map +1 -0
- package/dist/utils/sales-pipeline-operations.js +725 -0
- package/dist/utils/sales-pipeline-operations.js.map +1 -0
- package/dist/utils/skills-operations.d.ts +117 -0
- package/dist/utils/skills-operations.d.ts.map +1 -0
- package/dist/utils/skills-operations.js +487 -0
- package/dist/utils/skills-operations.js.map +1 -0
- package/dist/utils/subscription-operations.d.ts +123 -0
- package/dist/utils/subscription-operations.d.ts.map +1 -0
- package/dist/utils/subscription-operations.js +391 -0
- package/dist/utils/subscription-operations.js.map +1 -0
- package/dist/utils/unipile-account-operations.d.ts +96 -0
- package/dist/utils/unipile-account-operations.d.ts.map +1 -0
- package/dist/utils/unipile-account-operations.js +255 -0
- package/dist/utils/unipile-account-operations.js.map +1 -0
- package/dist/utils/user-industry-operations.d.ts +80 -0
- package/dist/utils/user-industry-operations.d.ts.map +1 -0
- package/dist/utils/user-industry-operations.js +237 -0
- package/dist/utils/user-industry-operations.js.map +1 -0
- package/dist/utils/user-operations.d.ts +87 -0
- package/dist/utils/user-operations.d.ts.map +1 -0
- package/dist/utils/user-operations.js +212 -0
- package/dist/utils/user-operations.js.map +1 -0
- 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
|