lumnisai 0.1.5 → 0.1.7

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/dist/index.cjs CHANGED
@@ -491,6 +491,110 @@ class LocalFileNotSupportedError extends ValidationError {
491
491
  this.name = "LocalFileNotSupportedError";
492
492
  }
493
493
  }
494
+ class NoDataSourcesError extends ValidationError {
495
+ constructor(message) {
496
+ super(
497
+ message || "No people data sources configured. Please configure API keys.",
498
+ { code: "NO_DATA_SOURCES" }
499
+ );
500
+ this.name = "NoDataSourcesError";
501
+ }
502
+ }
503
+ class SourcesNotAvailableError extends ValidationError {
504
+ availableSources;
505
+ constructor(message, availableSources) {
506
+ super(message, { code: "SOURCES_NOT_AVAILABLE" });
507
+ this.name = "SourcesNotAvailableError";
508
+ this.availableSources = availableSources;
509
+ }
510
+ }
511
+
512
+ var PeopleDataSource = /* @__PURE__ */ ((PeopleDataSource2) => {
513
+ PeopleDataSource2["PDL"] = "PDL";
514
+ PeopleDataSource2["CORESIGNAL"] = "CORESIGNAL";
515
+ PeopleDataSource2["CRUST_DATA"] = "CRUST_DATA";
516
+ return PeopleDataSource2;
517
+ })(PeopleDataSource || {});
518
+
519
+ class PeopleResource {
520
+ constructor(http) {
521
+ this.http = http;
522
+ }
523
+ /**
524
+ * Perform a quick people search across multiple data sources.
525
+ *
526
+ * This endpoint bypasses the full agent framework for faster response times.
527
+ * It searches across PDL, CoreSignal, and CrustData in parallel and returns
528
+ * deduplicated results.
529
+ *
530
+ * @param params - Search parameters
531
+ * @param params.query - Natural language search query
532
+ * @param params.limit - Maximum number of results (1-100, default: 20)
533
+ * @param params.dataSources - Specific data sources to use (optional)
534
+ * @returns Promise resolving to search results
535
+ * @throws {NoDataSourcesError} When no data sources are configured
536
+ * @throws {SourcesNotAvailableError} When requested sources aren't available
537
+ * @throws {ValidationError} For other validation errors
538
+ *
539
+ * @example
540
+ * ```typescript
541
+ * const response = await client.people.quickSearch({
542
+ * query: "Senior engineers in SF with Python",
543
+ * limit: 50,
544
+ * dataSources: [PeopleDataSource.CORESIGNAL, PeopleDataSource.PDL]
545
+ * });
546
+ * ```
547
+ */
548
+ async quickSearch(params) {
549
+ const { query, limit = 20, dataSources } = params;
550
+ if (limit < 1 || limit > 100) {
551
+ throw new ValidationError("Limit must be between 1 and 100", {
552
+ code: "INVALID_LIMIT"
553
+ });
554
+ }
555
+ if (dataSources) {
556
+ const validSources = Object.values(PeopleDataSource);
557
+ for (const source of dataSources) {
558
+ if (!validSources.includes(source)) {
559
+ throw new ValidationError(
560
+ `Invalid data source: ${source}. Valid sources: ${validSources.join(", ")}`,
561
+ { code: "INVALID_DATA_SOURCE" }
562
+ );
563
+ }
564
+ }
565
+ }
566
+ try {
567
+ const response = await this.http.post(
568
+ "/people/quick-search",
569
+ {
570
+ query,
571
+ limit,
572
+ // HTTP client will convert camelCase to snake_case automatically
573
+ dataSources: dataSources?.map((ds) => ds) || void 0
574
+ }
575
+ );
576
+ return response;
577
+ } catch (error) {
578
+ if (error instanceof ValidationError) {
579
+ const details = error.details || {};
580
+ const errorDetail = details.detail?.error || details.error;
581
+ if (errorDetail?.code === "NO_DATA_SOURCES") {
582
+ throw new NoDataSourcesError(errorDetail.message || void 0);
583
+ }
584
+ if (errorDetail?.code === "SOURCES_NOT_AVAILABLE") {
585
+ const message = errorDetail.message || "";
586
+ const availableMatch = message.match(/Available: \[(.+)\]/);
587
+ const availableSources = availableMatch ? availableMatch[1].replace(/'/g, "").split(", ").map((s) => s.trim()).filter((s) => s.length > 0) : [];
588
+ throw new SourcesNotAvailableError(
589
+ errorDetail.message || "Requested data sources not available",
590
+ availableSources
591
+ );
592
+ }
593
+ }
594
+ throw error;
595
+ }
596
+ }
597
+ }
494
598
 
495
599
  class ResponsesResource {
496
600
  constructor(http) {
@@ -1016,6 +1120,7 @@ class LumnisClient {
1016
1120
  modelPreferences;
1017
1121
  mcpServers;
1018
1122
  skills;
1123
+ people;
1019
1124
  _scopedUserId;
1020
1125
  _defaultScope;
1021
1126
  constructor(options = {}) {
@@ -1046,6 +1151,7 @@ class LumnisClient {
1046
1151
  this.modelPreferences = new ModelPreferencesResource(this.http);
1047
1152
  this.mcpServers = new MCPServersResource(this.http);
1048
1153
  this.skills = new SkillsResource(this.http);
1154
+ this.people = new PeopleResource(this.http);
1049
1155
  }
1050
1156
  forUser(userId) {
1051
1157
  return new LumnisClient({
@@ -1213,23 +1319,29 @@ class LumnisClient {
1213
1319
  async listApps(params) {
1214
1320
  return this.integrations.listApps(params);
1215
1321
  }
1216
- async isAppEnabled(appName) {
1217
- return this.integrations.isAppEnabled(appName);
1322
+ async listProviders() {
1323
+ return this.integrations.listProviders();
1324
+ }
1325
+ async isAppEnabled(appName, provider) {
1326
+ return this.integrations.isAppEnabled(appName, provider);
1218
1327
  }
1219
- async setAppEnabled(appName, enabled) {
1220
- return this.integrations.setAppEnabled(appName, { enabled });
1328
+ async setAppEnabled(appName, enabled, provider) {
1329
+ return this.integrations.setAppEnabled(appName, { enabled, provider });
1221
1330
  }
1222
1331
  async initiateConnection(params) {
1223
1332
  return this.integrations.initiateConnection(params);
1224
1333
  }
1225
- async getConnectionStatus(userId, appName) {
1226
- return this.integrations.getConnectionStatus({ userId, appName });
1334
+ async getConnectionStatus(userId, appName, provider) {
1335
+ return this.integrations.getConnectionStatus({ userId, appName, provider });
1227
1336
  }
1228
1337
  async listConnections(userId, params) {
1229
1338
  return this.integrations.listConnections(userId, params);
1230
1339
  }
1231
1340
  async getIntegrationTools(userId, params) {
1232
- return this.integrations.getTools({ userId, appFilter: params?.appFilter });
1341
+ return this.integrations.getTools({ userId, appFilter: params?.appFilter, provider: params?.provider });
1342
+ }
1343
+ async disconnect(userId, appName, provider) {
1344
+ return this.integrations.disconnect({ userId, appName, provider });
1233
1345
  }
1234
1346
  // Model Preference methods
1235
1347
  async getModelPreferences(params) {
@@ -1425,10 +1537,13 @@ exports.InternalServerError = InternalServerError;
1425
1537
  exports.LocalFileNotSupportedError = LocalFileNotSupportedError;
1426
1538
  exports.LumnisClient = LumnisClient;
1427
1539
  exports.LumnisError = LumnisError;
1540
+ exports.NoDataSourcesError = NoDataSourcesError;
1428
1541
  exports.NotFoundError = NotFoundError;
1542
+ exports.PeopleDataSource = PeopleDataSource;
1429
1543
  exports.ProgressTracker = ProgressTracker;
1430
1544
  exports.ProviderType = ProviderType;
1431
1545
  exports.RateLimitError = RateLimitError;
1546
+ exports.SourcesNotAvailableError = SourcesNotAvailableError;
1432
1547
  exports.ValidationError = ValidationError;
1433
1548
  exports.default = LumnisClient;
1434
1549
  exports.displayProgress = displayProgress;
package/dist/index.d.cts CHANGED
@@ -1004,6 +1004,201 @@ declare class ModelPreferencesResource {
1004
1004
  }): Promise<TenantModelPreferencesResponse>;
1005
1005
  }
1006
1006
 
1007
+ /**
1008
+ * Available people search data sources
1009
+ */
1010
+ declare enum PeopleDataSource {
1011
+ PDL = "PDL",
1012
+ CORESIGNAL = "CORESIGNAL",
1013
+ CRUST_DATA = "CRUST_DATA"
1014
+ }
1015
+ /**
1016
+ * Salary range projection data.
1017
+ * Note: Values represent total compensation (base salary + bonuses + equity),
1018
+ * not just base salary. Only available for CoreSignal results.
1019
+ */
1020
+ interface SalaryRange {
1021
+ /** Minimum total compensation (includes base + bonuses + equity, etc.) */
1022
+ min?: number;
1023
+ /** Median total compensation projection */
1024
+ median?: number;
1025
+ /** Maximum total compensation (includes base + bonuses + equity, etc.) */
1026
+ max?: number;
1027
+ /** Currency code (e.g., "USD", "EUR") */
1028
+ currency?: string;
1029
+ /** Period (e.g., "yearly", "monthly") */
1030
+ period?: string;
1031
+ }
1032
+ /**
1033
+ * Simplified person result model returned in search results.
1034
+ * Contains normalized data from multiple sources (PDL, CoreSignal, CrustData).
1035
+ */
1036
+ interface PersonResult {
1037
+ /** Unique identifier for the person */
1038
+ id: string;
1039
+ /** Full name */
1040
+ name: string;
1041
+ /** Current job title */
1042
+ currentTitle?: string;
1043
+ /** Current company name */
1044
+ currentCompany?: string;
1045
+ /** Current department */
1046
+ currentDepartment?: string;
1047
+ /** Full location string */
1048
+ location?: string;
1049
+ /** City */
1050
+ city?: string;
1051
+ /** Country */
1052
+ country?: string;
1053
+ /** Primary email address */
1054
+ email?: string;
1055
+ /** List of email addresses (up to 3) */
1056
+ emails: string[];
1057
+ /** LinkedIn profile URL */
1058
+ linkedinUrl?: string;
1059
+ /** Years of professional experience */
1060
+ yearsExperience?: number;
1061
+ /** List of skills (up to 15) */
1062
+ skills: string[];
1063
+ /** Seniority level (e.g., "Senior", "Director", "VP") */
1064
+ seniorityLevel?: string;
1065
+ /** Whether person is identified as a decision maker */
1066
+ isDecisionMaker: boolean;
1067
+ /** Number of LinkedIn connections */
1068
+ connectionsCount?: number;
1069
+ /** Whether person recently changed jobs */
1070
+ recentlyChangedJobs: boolean;
1071
+ /** Data source identifier ("PDL", "CORESIGNAL", or "CRUST_DATA") */
1072
+ source: string;
1073
+ /** Confidence score (0.0-1.0) if available */
1074
+ confidenceScore?: number;
1075
+ /** Salary range projection (CoreSignal only) */
1076
+ salaryRange?: SalaryRange;
1077
+ /** Number of certifications (CoreSignal only) */
1078
+ certificationsCount?: number;
1079
+ /** List of languages spoken (CoreSignal only) */
1080
+ languages?: string[];
1081
+ /** List of education degrees (CoreSignal only, up to 3) */
1082
+ educationDegrees?: string[];
1083
+ }
1084
+ /**
1085
+ * Request model for people search queries.
1086
+ */
1087
+ interface PeopleSearchRequest {
1088
+ /**
1089
+ * Natural language search query describing the people you want to find.
1090
+ * Examples:
1091
+ * - "Senior software engineers in San Francisco with Python skills"
1092
+ * - "Product managers at Google or Meta with MBA"
1093
+ * - "Data scientists in NYC with 5+ years experience"
1094
+ */
1095
+ query: string;
1096
+ /**
1097
+ * Maximum number of results to return.
1098
+ * Range: 1-100
1099
+ * Default: 20
1100
+ */
1101
+ limit?: number;
1102
+ /**
1103
+ * Specific data sources to use for the search.
1104
+ * If not provided, all available sources will be used.
1105
+ * Valid values: "PDL", "CORESIGNAL", "CRUST_DATA"
1106
+ *
1107
+ * Note: The API accepts string values. SDKs should use enums for type safety
1108
+ * but serialize them as strings when sending the request.
1109
+ */
1110
+ dataSources?: PeopleDataSource[];
1111
+ }
1112
+ /**
1113
+ * Logic operator for filter values
1114
+ */
1115
+ type FilterLogic = 'or' | 'and' | 'should';
1116
+ /**
1117
+ * A filter with values and logic operator.
1118
+ * Used in applied_filters response.
1119
+ */
1120
+ interface FilterValue {
1121
+ /** List of values for this filter */
1122
+ values: string[];
1123
+ /**
1124
+ * Logic operator:
1125
+ * - "or": ANY value matches (for alternatives like "SF or NYC")
1126
+ * - "and": ALL values must match (for "must have Python AND Java")
1127
+ * - "should": Optional/preferred (for "preferably PhD")
1128
+ */
1129
+ logic: FilterLogic;
1130
+ }
1131
+ /**
1132
+ * Structure of the applied_filters field in the response.
1133
+ * Contains extracted filters from the natural language query.
1134
+ */
1135
+ interface AppliedFilters {
1136
+ /** Cities for the search */
1137
+ cities?: FilterValue;
1138
+ /** Countries for the search */
1139
+ countries?: FilterValue;
1140
+ /** Job titles/roles */
1141
+ jobTitles?: FilterValue;
1142
+ /** Company names */
1143
+ companies?: FilterValue;
1144
+ /** Technical skills */
1145
+ skills?: FilterValue;
1146
+ /** Minimum years of professional experience */
1147
+ minYearsExperience?: number;
1148
+ /** Seniority levels (entry/junior/mid/senior/lead/principal/staff/director/vp/executive) */
1149
+ seniorityLevels?: FilterValue;
1150
+ /** Education levels (bachelors/masters/phd/mba) */
1151
+ educationLevels?: FilterValue;
1152
+ /** Industries/sectors */
1153
+ industries?: FilterValue;
1154
+ }
1155
+ /**
1156
+ * Response model for people search endpoint.
1157
+ */
1158
+ interface PeopleSearchResponse {
1159
+ /** List of matching candidates */
1160
+ candidates: PersonResult[];
1161
+ /** Total number of unique candidates found (may be more than returned) */
1162
+ totalFound: number;
1163
+ /** Filters extracted and applied from the query */
1164
+ appliedFilters: AppliedFilters;
1165
+ /** Execution time in milliseconds */
1166
+ executionTimeMs: number;
1167
+ /** List of data sources that were actually used */
1168
+ dataSourcesUsed: string[];
1169
+ }
1170
+
1171
+ declare class PeopleResource {
1172
+ private readonly http;
1173
+ constructor(http: Http);
1174
+ /**
1175
+ * Perform a quick people search across multiple data sources.
1176
+ *
1177
+ * This endpoint bypasses the full agent framework for faster response times.
1178
+ * It searches across PDL, CoreSignal, and CrustData in parallel and returns
1179
+ * deduplicated results.
1180
+ *
1181
+ * @param params - Search parameters
1182
+ * @param params.query - Natural language search query
1183
+ * @param params.limit - Maximum number of results (1-100, default: 20)
1184
+ * @param params.dataSources - Specific data sources to use (optional)
1185
+ * @returns Promise resolving to search results
1186
+ * @throws {NoDataSourcesError} When no data sources are configured
1187
+ * @throws {SourcesNotAvailableError} When requested sources aren't available
1188
+ * @throws {ValidationError} For other validation errors
1189
+ *
1190
+ * @example
1191
+ * ```typescript
1192
+ * const response = await client.people.quickSearch({
1193
+ * query: "Senior engineers in SF with Python",
1194
+ * limit: 50,
1195
+ * dataSources: [PeopleDataSource.CORESIGNAL, PeopleDataSource.PDL]
1196
+ * });
1197
+ * ```
1198
+ */
1199
+ quickSearch(params: PeopleSearchRequest): Promise<PeopleSearchResponse>;
1200
+ }
1201
+
1007
1202
  declare class ResponsesResource {
1008
1203
  private readonly http;
1009
1204
  constructor(http: Http);
@@ -1253,6 +1448,7 @@ declare class LumnisClient {
1253
1448
  readonly modelPreferences: ModelPreferencesResource;
1254
1449
  readonly mcpServers: MCPServersResource;
1255
1450
  readonly skills: SkillsResource;
1451
+ readonly people: PeopleResource;
1256
1452
  private readonly _scopedUserId?;
1257
1453
  private readonly _defaultScope;
1258
1454
  constructor(options?: LumnisClientOptions);
@@ -1282,14 +1478,20 @@ declare class LumnisClient {
1282
1478
  getApiKeyMode(): Promise<ApiKeyModeResponse>;
1283
1479
  setApiKeyMode(mode: Parameters<ExternalAPIKeysResource['setMode']>[0]): Promise<ApiKeyModeResponse>;
1284
1480
  listApps(params?: Parameters<IntegrationsResource['listApps']>[0]): Promise<AppsListResponse>;
1285
- isAppEnabled(appName: string): Promise<AppEnabledResponse>;
1286
- setAppEnabled(appName: string, enabled: boolean): Promise<UpdateAppStatusResponse>;
1481
+ listProviders(): Promise<ListProvidersResponse>;
1482
+ isAppEnabled(appName: string, provider?: string): Promise<AppEnabledResponse>;
1483
+ setAppEnabled(appName: string, enabled: boolean, provider?: string): Promise<UpdateAppStatusResponse>;
1287
1484
  initiateConnection(params: Parameters<IntegrationsResource['initiateConnection']>[0]): Promise<InitiateConnectionResponse>;
1288
- getConnectionStatus(userId: string, appName: string): Promise<ConnectionStatusResponse>;
1289
- listConnections(userId: string, params?: Parameters<IntegrationsResource['listConnections']>[1]): Promise<UserConnectionsResponse>;
1485
+ getConnectionStatus(userId: string, appName: string, provider?: string): Promise<ConnectionStatusResponse>;
1486
+ listConnections(userId: string, params?: {
1487
+ appFilter?: string;
1488
+ provider?: string;
1489
+ }): Promise<UserConnectionsResponse>;
1290
1490
  getIntegrationTools(userId: string, params?: {
1291
1491
  appFilter?: string[];
1492
+ provider?: string;
1292
1493
  }): Promise<GetToolsResponse>;
1494
+ disconnect(userId: string, appName: string, provider?: string): Promise<DisconnectResponse>;
1293
1495
  getModelPreferences(params?: Parameters<ModelPreferencesResource['list']>[0]): Promise<TenantModelPreferencesResponse>;
1294
1496
  updateModelPreferences(params: Parameters<ModelPreferencesResource['updateBulk']>[0]): Promise<TenantModelPreferencesResponse>;
1295
1497
  createMcpServer(params: Parameters<MCPServersResource['create']>[0]): Promise<MCPServerResponse>;
@@ -1343,6 +1545,13 @@ declare class InternalServerError extends LumnisError {
1343
1545
  declare class LocalFileNotSupportedError extends ValidationError {
1344
1546
  constructor(filePath: string);
1345
1547
  }
1548
+ declare class NoDataSourcesError extends ValidationError {
1549
+ constructor(message?: string);
1550
+ }
1551
+ declare class SourcesNotAvailableError extends ValidationError {
1552
+ availableSources: string[];
1553
+ constructor(message: string, availableSources: string[]);
1554
+ }
1346
1555
 
1347
1556
  /**
1348
1557
  * Utility functions for displaying progress updates
@@ -1395,4 +1604,4 @@ declare class ProgressTracker {
1395
1604
  }
1396
1605
 
1397
1606
  export = LumnisClient;
1398
- export { type AgentConfig, type ApiKeyMode, type ApiKeyModeRequest, type ApiKeyModeResponse, type ApiProvider, type AppEnabledResponse, type AppsListResponse, type ArtifactObject, type ArtifactsListResponse, AuthenticationError, type BaseResource, type BillingStatus, type BulkDeleteRequest, type BulkDeleteResponse, type BulkUploadResponse, type CancelResponseResponse, type CheckAppEnabledParams, type ChunkingStrategy, type ConnectionCallbackRequest, type ConnectionCallbackResponse, type ConnectionInfo, type ConnectionStatus, type ConnectionStatusResponse, type ContentType, type CreateFeedbackRequest, type CreateFeedbackResponse, type CreateResponseRequest, type CreateResponseResponse, type CreateThreadRequest, type DatabaseStatus, type DeleteApiKeyResponse, type DisconnectRequest, type DisconnectResponse, type DuplicateHandling, type Email, type ErrorResponse, ExternalAPIKeysResource, type ExternalApiKeyResponse, type FeedbackListResponse, type FeedbackObject, type FeedbackType, type FileAttachment, type FileChunk, type FileContentResponse, type FileListResponse, type FileMetadata, type FileScope, type FileScopeUpdateRequest, type FileSearchRequest, type FileSearchResponse, type FileSearchResult, type FileStatisticsResponse, type FileUploadResponse, FilesResource, type GetConnectionStatusParams, type GetToolsRequest, type GetToolsResponse, type GetUserConnectionsParams, type InitiateConnectionRequest, type InitiateConnectionResponse, IntegrationsResource, InternalServerError, type ListProvidersResponse, LocalFileNotSupportedError, LumnisClient, type LumnisClientOptions, LumnisError, type LumnisErrorOptions, type MCPScope, type MCPServerCreateRequest, type MCPServerListResponse, type MCPServerResponse, type MCPServerUpdateRequest, MCPServersResource, type MCPToolListResponse, type MCPToolResponse, type MCPTransport, type Message, type ModelAvailability, type ModelOverrides, type ModelPreferenceCreate, type ModelPreferencesBulkUpdate, ModelPreferencesResource, type ModelProvider, type ModelType, NotFoundError, type PaginationInfo, type PaginationParams, type Plan, type ProcessingStatus, type ProcessingStatusResponse, type ProgressEntry, ProgressTracker, ProviderType, RateLimitError, type RateLimitErrorOptions, type ResponseArtifact, type ResponseListResponse, type ResponseObject, type ResponseStatus, ResponsesResource, type Scope, type SelectedSkill, type SkillAnalyticsRequest, type SkillEffectivenessMetrics, type SkillGuidelineBase, type SkillGuidelineCreate, type SkillGuidelineListResponse, type SkillGuidelineResponse, type SkillGuidelineUpdate, type SkillRetrievalMetadata, type SkillUsageBase, type SkillUsageCreate, type SkillUsageListResponse, type SkillUsageResponse, type SkillUsageUpdate, SkillsResource, type StoreApiKeyRequest, type TenantDetailsResponse, TenantInfoResource, type TenantModelPreference, type TenantModelPreferencesResponse, type TestConnectionResponse, type ThreadListResponse, type ThreadObject, type ThreadResponsesParams, ThreadsResource, type ToolInfo, type UUID, type UpdateAppStatusParams, type UpdateAppStatusResponse, type UpdateThreadRequest, type UserConnectionsResponse, type UserCreateRequest, type UserDeleteResponse, type UserIdentifier, type UserListResponse, type UserResponse, type UserUpdateRequest, UsersResource, ValidationError, displayProgress, formatProgressEntry };
1607
+ export { type AgentConfig, type ApiKeyMode, type ApiKeyModeRequest, type ApiKeyModeResponse, type ApiProvider, type AppEnabledResponse, type AppliedFilters, type AppsListResponse, type ArtifactObject, type ArtifactsListResponse, AuthenticationError, type BaseResource, type BillingStatus, type BulkDeleteRequest, type BulkDeleteResponse, type BulkUploadResponse, type CancelResponseResponse, type CheckAppEnabledParams, type ChunkingStrategy, type ConnectionCallbackRequest, type ConnectionCallbackResponse, type ConnectionInfo, type ConnectionStatus, type ConnectionStatusResponse, type ContentType, type CreateFeedbackRequest, type CreateFeedbackResponse, type CreateResponseRequest, type CreateResponseResponse, type CreateThreadRequest, type DatabaseStatus, type DeleteApiKeyResponse, type DisconnectRequest, type DisconnectResponse, type DuplicateHandling, type Email, type ErrorResponse, ExternalAPIKeysResource, type ExternalApiKeyResponse, type FeedbackListResponse, type FeedbackObject, type FeedbackType, type FileAttachment, type FileChunk, type FileContentResponse, type FileListResponse, type FileMetadata, type FileScope, type FileScopeUpdateRequest, type FileSearchRequest, type FileSearchResponse, type FileSearchResult, type FileStatisticsResponse, type FileUploadResponse, FilesResource, type FilterLogic, type FilterValue, type GetConnectionStatusParams, type GetToolsRequest, type GetToolsResponse, type GetUserConnectionsParams, type InitiateConnectionRequest, type InitiateConnectionResponse, IntegrationsResource, InternalServerError, type ListProvidersResponse, LocalFileNotSupportedError, LumnisClient, type LumnisClientOptions, LumnisError, type LumnisErrorOptions, type MCPScope, type MCPServerCreateRequest, type MCPServerListResponse, type MCPServerResponse, type MCPServerUpdateRequest, MCPServersResource, type MCPToolListResponse, type MCPToolResponse, type MCPTransport, type Message, type ModelAvailability, type ModelOverrides, type ModelPreferenceCreate, type ModelPreferencesBulkUpdate, ModelPreferencesResource, type ModelProvider, type ModelType, NoDataSourcesError, NotFoundError, type PaginationInfo, type PaginationParams, PeopleDataSource, PeopleResource, type PeopleSearchRequest, type PeopleSearchResponse, type PersonResult, type Plan, type ProcessingStatus, type ProcessingStatusResponse, type ProgressEntry, ProgressTracker, ProviderType, RateLimitError, type RateLimitErrorOptions, type ResponseArtifact, type ResponseListResponse, type ResponseObject, type ResponseStatus, ResponsesResource, type SalaryRange, type Scope, type SelectedSkill, type SkillAnalyticsRequest, type SkillEffectivenessMetrics, type SkillGuidelineBase, type SkillGuidelineCreate, type SkillGuidelineListResponse, type SkillGuidelineResponse, type SkillGuidelineUpdate, type SkillRetrievalMetadata, type SkillUsageBase, type SkillUsageCreate, type SkillUsageListResponse, type SkillUsageResponse, type SkillUsageUpdate, SkillsResource, SourcesNotAvailableError, type StoreApiKeyRequest, type TenantDetailsResponse, TenantInfoResource, type TenantModelPreference, type TenantModelPreferencesResponse, type TestConnectionResponse, type ThreadListResponse, type ThreadObject, type ThreadResponsesParams, ThreadsResource, type ToolInfo, type UUID, type UpdateAppStatusParams, type UpdateAppStatusResponse, type UpdateThreadRequest, type UserConnectionsResponse, type UserCreateRequest, type UserDeleteResponse, type UserIdentifier, type UserListResponse, type UserResponse, type UserUpdateRequest, UsersResource, ValidationError, displayProgress, formatProgressEntry };
package/dist/index.d.mts CHANGED
@@ -1004,6 +1004,201 @@ declare class ModelPreferencesResource {
1004
1004
  }): Promise<TenantModelPreferencesResponse>;
1005
1005
  }
1006
1006
 
1007
+ /**
1008
+ * Available people search data sources
1009
+ */
1010
+ declare enum PeopleDataSource {
1011
+ PDL = "PDL",
1012
+ CORESIGNAL = "CORESIGNAL",
1013
+ CRUST_DATA = "CRUST_DATA"
1014
+ }
1015
+ /**
1016
+ * Salary range projection data.
1017
+ * Note: Values represent total compensation (base salary + bonuses + equity),
1018
+ * not just base salary. Only available for CoreSignal results.
1019
+ */
1020
+ interface SalaryRange {
1021
+ /** Minimum total compensation (includes base + bonuses + equity, etc.) */
1022
+ min?: number;
1023
+ /** Median total compensation projection */
1024
+ median?: number;
1025
+ /** Maximum total compensation (includes base + bonuses + equity, etc.) */
1026
+ max?: number;
1027
+ /** Currency code (e.g., "USD", "EUR") */
1028
+ currency?: string;
1029
+ /** Period (e.g., "yearly", "monthly") */
1030
+ period?: string;
1031
+ }
1032
+ /**
1033
+ * Simplified person result model returned in search results.
1034
+ * Contains normalized data from multiple sources (PDL, CoreSignal, CrustData).
1035
+ */
1036
+ interface PersonResult {
1037
+ /** Unique identifier for the person */
1038
+ id: string;
1039
+ /** Full name */
1040
+ name: string;
1041
+ /** Current job title */
1042
+ currentTitle?: string;
1043
+ /** Current company name */
1044
+ currentCompany?: string;
1045
+ /** Current department */
1046
+ currentDepartment?: string;
1047
+ /** Full location string */
1048
+ location?: string;
1049
+ /** City */
1050
+ city?: string;
1051
+ /** Country */
1052
+ country?: string;
1053
+ /** Primary email address */
1054
+ email?: string;
1055
+ /** List of email addresses (up to 3) */
1056
+ emails: string[];
1057
+ /** LinkedIn profile URL */
1058
+ linkedinUrl?: string;
1059
+ /** Years of professional experience */
1060
+ yearsExperience?: number;
1061
+ /** List of skills (up to 15) */
1062
+ skills: string[];
1063
+ /** Seniority level (e.g., "Senior", "Director", "VP") */
1064
+ seniorityLevel?: string;
1065
+ /** Whether person is identified as a decision maker */
1066
+ isDecisionMaker: boolean;
1067
+ /** Number of LinkedIn connections */
1068
+ connectionsCount?: number;
1069
+ /** Whether person recently changed jobs */
1070
+ recentlyChangedJobs: boolean;
1071
+ /** Data source identifier ("PDL", "CORESIGNAL", or "CRUST_DATA") */
1072
+ source: string;
1073
+ /** Confidence score (0.0-1.0) if available */
1074
+ confidenceScore?: number;
1075
+ /** Salary range projection (CoreSignal only) */
1076
+ salaryRange?: SalaryRange;
1077
+ /** Number of certifications (CoreSignal only) */
1078
+ certificationsCount?: number;
1079
+ /** List of languages spoken (CoreSignal only) */
1080
+ languages?: string[];
1081
+ /** List of education degrees (CoreSignal only, up to 3) */
1082
+ educationDegrees?: string[];
1083
+ }
1084
+ /**
1085
+ * Request model for people search queries.
1086
+ */
1087
+ interface PeopleSearchRequest {
1088
+ /**
1089
+ * Natural language search query describing the people you want to find.
1090
+ * Examples:
1091
+ * - "Senior software engineers in San Francisco with Python skills"
1092
+ * - "Product managers at Google or Meta with MBA"
1093
+ * - "Data scientists in NYC with 5+ years experience"
1094
+ */
1095
+ query: string;
1096
+ /**
1097
+ * Maximum number of results to return.
1098
+ * Range: 1-100
1099
+ * Default: 20
1100
+ */
1101
+ limit?: number;
1102
+ /**
1103
+ * Specific data sources to use for the search.
1104
+ * If not provided, all available sources will be used.
1105
+ * Valid values: "PDL", "CORESIGNAL", "CRUST_DATA"
1106
+ *
1107
+ * Note: The API accepts string values. SDKs should use enums for type safety
1108
+ * but serialize them as strings when sending the request.
1109
+ */
1110
+ dataSources?: PeopleDataSource[];
1111
+ }
1112
+ /**
1113
+ * Logic operator for filter values
1114
+ */
1115
+ type FilterLogic = 'or' | 'and' | 'should';
1116
+ /**
1117
+ * A filter with values and logic operator.
1118
+ * Used in applied_filters response.
1119
+ */
1120
+ interface FilterValue {
1121
+ /** List of values for this filter */
1122
+ values: string[];
1123
+ /**
1124
+ * Logic operator:
1125
+ * - "or": ANY value matches (for alternatives like "SF or NYC")
1126
+ * - "and": ALL values must match (for "must have Python AND Java")
1127
+ * - "should": Optional/preferred (for "preferably PhD")
1128
+ */
1129
+ logic: FilterLogic;
1130
+ }
1131
+ /**
1132
+ * Structure of the applied_filters field in the response.
1133
+ * Contains extracted filters from the natural language query.
1134
+ */
1135
+ interface AppliedFilters {
1136
+ /** Cities for the search */
1137
+ cities?: FilterValue;
1138
+ /** Countries for the search */
1139
+ countries?: FilterValue;
1140
+ /** Job titles/roles */
1141
+ jobTitles?: FilterValue;
1142
+ /** Company names */
1143
+ companies?: FilterValue;
1144
+ /** Technical skills */
1145
+ skills?: FilterValue;
1146
+ /** Minimum years of professional experience */
1147
+ minYearsExperience?: number;
1148
+ /** Seniority levels (entry/junior/mid/senior/lead/principal/staff/director/vp/executive) */
1149
+ seniorityLevels?: FilterValue;
1150
+ /** Education levels (bachelors/masters/phd/mba) */
1151
+ educationLevels?: FilterValue;
1152
+ /** Industries/sectors */
1153
+ industries?: FilterValue;
1154
+ }
1155
+ /**
1156
+ * Response model for people search endpoint.
1157
+ */
1158
+ interface PeopleSearchResponse {
1159
+ /** List of matching candidates */
1160
+ candidates: PersonResult[];
1161
+ /** Total number of unique candidates found (may be more than returned) */
1162
+ totalFound: number;
1163
+ /** Filters extracted and applied from the query */
1164
+ appliedFilters: AppliedFilters;
1165
+ /** Execution time in milliseconds */
1166
+ executionTimeMs: number;
1167
+ /** List of data sources that were actually used */
1168
+ dataSourcesUsed: string[];
1169
+ }
1170
+
1171
+ declare class PeopleResource {
1172
+ private readonly http;
1173
+ constructor(http: Http);
1174
+ /**
1175
+ * Perform a quick people search across multiple data sources.
1176
+ *
1177
+ * This endpoint bypasses the full agent framework for faster response times.
1178
+ * It searches across PDL, CoreSignal, and CrustData in parallel and returns
1179
+ * deduplicated results.
1180
+ *
1181
+ * @param params - Search parameters
1182
+ * @param params.query - Natural language search query
1183
+ * @param params.limit - Maximum number of results (1-100, default: 20)
1184
+ * @param params.dataSources - Specific data sources to use (optional)
1185
+ * @returns Promise resolving to search results
1186
+ * @throws {NoDataSourcesError} When no data sources are configured
1187
+ * @throws {SourcesNotAvailableError} When requested sources aren't available
1188
+ * @throws {ValidationError} For other validation errors
1189
+ *
1190
+ * @example
1191
+ * ```typescript
1192
+ * const response = await client.people.quickSearch({
1193
+ * query: "Senior engineers in SF with Python",
1194
+ * limit: 50,
1195
+ * dataSources: [PeopleDataSource.CORESIGNAL, PeopleDataSource.PDL]
1196
+ * });
1197
+ * ```
1198
+ */
1199
+ quickSearch(params: PeopleSearchRequest): Promise<PeopleSearchResponse>;
1200
+ }
1201
+
1007
1202
  declare class ResponsesResource {
1008
1203
  private readonly http;
1009
1204
  constructor(http: Http);
@@ -1253,6 +1448,7 @@ declare class LumnisClient {
1253
1448
  readonly modelPreferences: ModelPreferencesResource;
1254
1449
  readonly mcpServers: MCPServersResource;
1255
1450
  readonly skills: SkillsResource;
1451
+ readonly people: PeopleResource;
1256
1452
  private readonly _scopedUserId?;
1257
1453
  private readonly _defaultScope;
1258
1454
  constructor(options?: LumnisClientOptions);
@@ -1282,14 +1478,20 @@ declare class LumnisClient {
1282
1478
  getApiKeyMode(): Promise<ApiKeyModeResponse>;
1283
1479
  setApiKeyMode(mode: Parameters<ExternalAPIKeysResource['setMode']>[0]): Promise<ApiKeyModeResponse>;
1284
1480
  listApps(params?: Parameters<IntegrationsResource['listApps']>[0]): Promise<AppsListResponse>;
1285
- isAppEnabled(appName: string): Promise<AppEnabledResponse>;
1286
- setAppEnabled(appName: string, enabled: boolean): Promise<UpdateAppStatusResponse>;
1481
+ listProviders(): Promise<ListProvidersResponse>;
1482
+ isAppEnabled(appName: string, provider?: string): Promise<AppEnabledResponse>;
1483
+ setAppEnabled(appName: string, enabled: boolean, provider?: string): Promise<UpdateAppStatusResponse>;
1287
1484
  initiateConnection(params: Parameters<IntegrationsResource['initiateConnection']>[0]): Promise<InitiateConnectionResponse>;
1288
- getConnectionStatus(userId: string, appName: string): Promise<ConnectionStatusResponse>;
1289
- listConnections(userId: string, params?: Parameters<IntegrationsResource['listConnections']>[1]): Promise<UserConnectionsResponse>;
1485
+ getConnectionStatus(userId: string, appName: string, provider?: string): Promise<ConnectionStatusResponse>;
1486
+ listConnections(userId: string, params?: {
1487
+ appFilter?: string;
1488
+ provider?: string;
1489
+ }): Promise<UserConnectionsResponse>;
1290
1490
  getIntegrationTools(userId: string, params?: {
1291
1491
  appFilter?: string[];
1492
+ provider?: string;
1292
1493
  }): Promise<GetToolsResponse>;
1494
+ disconnect(userId: string, appName: string, provider?: string): Promise<DisconnectResponse>;
1293
1495
  getModelPreferences(params?: Parameters<ModelPreferencesResource['list']>[0]): Promise<TenantModelPreferencesResponse>;
1294
1496
  updateModelPreferences(params: Parameters<ModelPreferencesResource['updateBulk']>[0]): Promise<TenantModelPreferencesResponse>;
1295
1497
  createMcpServer(params: Parameters<MCPServersResource['create']>[0]): Promise<MCPServerResponse>;
@@ -1343,6 +1545,13 @@ declare class InternalServerError extends LumnisError {
1343
1545
  declare class LocalFileNotSupportedError extends ValidationError {
1344
1546
  constructor(filePath: string);
1345
1547
  }
1548
+ declare class NoDataSourcesError extends ValidationError {
1549
+ constructor(message?: string);
1550
+ }
1551
+ declare class SourcesNotAvailableError extends ValidationError {
1552
+ availableSources: string[];
1553
+ constructor(message: string, availableSources: string[]);
1554
+ }
1346
1555
 
1347
1556
  /**
1348
1557
  * Utility functions for displaying progress updates
@@ -1394,4 +1603,4 @@ declare class ProgressTracker {
1394
1603
  reset(): void;
1395
1604
  }
1396
1605
 
1397
- export { type AgentConfig, type ApiKeyMode, type ApiKeyModeRequest, type ApiKeyModeResponse, type ApiProvider, type AppEnabledResponse, type AppsListResponse, type ArtifactObject, type ArtifactsListResponse, AuthenticationError, type BaseResource, type BillingStatus, type BulkDeleteRequest, type BulkDeleteResponse, type BulkUploadResponse, type CancelResponseResponse, type CheckAppEnabledParams, type ChunkingStrategy, type ConnectionCallbackRequest, type ConnectionCallbackResponse, type ConnectionInfo, type ConnectionStatus, type ConnectionStatusResponse, type ContentType, type CreateFeedbackRequest, type CreateFeedbackResponse, type CreateResponseRequest, type CreateResponseResponse, type CreateThreadRequest, type DatabaseStatus, type DeleteApiKeyResponse, type DisconnectRequest, type DisconnectResponse, type DuplicateHandling, type Email, type ErrorResponse, ExternalAPIKeysResource, type ExternalApiKeyResponse, type FeedbackListResponse, type FeedbackObject, type FeedbackType, type FileAttachment, type FileChunk, type FileContentResponse, type FileListResponse, type FileMetadata, type FileScope, type FileScopeUpdateRequest, type FileSearchRequest, type FileSearchResponse, type FileSearchResult, type FileStatisticsResponse, type FileUploadResponse, FilesResource, type GetConnectionStatusParams, type GetToolsRequest, type GetToolsResponse, type GetUserConnectionsParams, type InitiateConnectionRequest, type InitiateConnectionResponse, IntegrationsResource, InternalServerError, type ListProvidersResponse, LocalFileNotSupportedError, LumnisClient, type LumnisClientOptions, LumnisError, type LumnisErrorOptions, type MCPScope, type MCPServerCreateRequest, type MCPServerListResponse, type MCPServerResponse, type MCPServerUpdateRequest, MCPServersResource, type MCPToolListResponse, type MCPToolResponse, type MCPTransport, type Message, type ModelAvailability, type ModelOverrides, type ModelPreferenceCreate, type ModelPreferencesBulkUpdate, ModelPreferencesResource, type ModelProvider, type ModelType, NotFoundError, type PaginationInfo, type PaginationParams, type Plan, type ProcessingStatus, type ProcessingStatusResponse, type ProgressEntry, ProgressTracker, ProviderType, RateLimitError, type RateLimitErrorOptions, type ResponseArtifact, type ResponseListResponse, type ResponseObject, type ResponseStatus, ResponsesResource, type Scope, type SelectedSkill, type SkillAnalyticsRequest, type SkillEffectivenessMetrics, type SkillGuidelineBase, type SkillGuidelineCreate, type SkillGuidelineListResponse, type SkillGuidelineResponse, type SkillGuidelineUpdate, type SkillRetrievalMetadata, type SkillUsageBase, type SkillUsageCreate, type SkillUsageListResponse, type SkillUsageResponse, type SkillUsageUpdate, SkillsResource, type StoreApiKeyRequest, type TenantDetailsResponse, TenantInfoResource, type TenantModelPreference, type TenantModelPreferencesResponse, type TestConnectionResponse, type ThreadListResponse, type ThreadObject, type ThreadResponsesParams, ThreadsResource, type ToolInfo, type UUID, type UpdateAppStatusParams, type UpdateAppStatusResponse, type UpdateThreadRequest, type UserConnectionsResponse, type UserCreateRequest, type UserDeleteResponse, type UserIdentifier, type UserListResponse, type UserResponse, type UserUpdateRequest, UsersResource, ValidationError, LumnisClient as default, displayProgress, formatProgressEntry };
1606
+ export { type AgentConfig, type ApiKeyMode, type ApiKeyModeRequest, type ApiKeyModeResponse, type ApiProvider, type AppEnabledResponse, type AppliedFilters, type AppsListResponse, type ArtifactObject, type ArtifactsListResponse, AuthenticationError, type BaseResource, type BillingStatus, type BulkDeleteRequest, type BulkDeleteResponse, type BulkUploadResponse, type CancelResponseResponse, type CheckAppEnabledParams, type ChunkingStrategy, type ConnectionCallbackRequest, type ConnectionCallbackResponse, type ConnectionInfo, type ConnectionStatus, type ConnectionStatusResponse, type ContentType, type CreateFeedbackRequest, type CreateFeedbackResponse, type CreateResponseRequest, type CreateResponseResponse, type CreateThreadRequest, type DatabaseStatus, type DeleteApiKeyResponse, type DisconnectRequest, type DisconnectResponse, type DuplicateHandling, type Email, type ErrorResponse, ExternalAPIKeysResource, type ExternalApiKeyResponse, type FeedbackListResponse, type FeedbackObject, type FeedbackType, type FileAttachment, type FileChunk, type FileContentResponse, type FileListResponse, type FileMetadata, type FileScope, type FileScopeUpdateRequest, type FileSearchRequest, type FileSearchResponse, type FileSearchResult, type FileStatisticsResponse, type FileUploadResponse, FilesResource, type FilterLogic, type FilterValue, type GetConnectionStatusParams, type GetToolsRequest, type GetToolsResponse, type GetUserConnectionsParams, type InitiateConnectionRequest, type InitiateConnectionResponse, IntegrationsResource, InternalServerError, type ListProvidersResponse, LocalFileNotSupportedError, LumnisClient, type LumnisClientOptions, LumnisError, type LumnisErrorOptions, type MCPScope, type MCPServerCreateRequest, type MCPServerListResponse, type MCPServerResponse, type MCPServerUpdateRequest, MCPServersResource, type MCPToolListResponse, type MCPToolResponse, type MCPTransport, type Message, type ModelAvailability, type ModelOverrides, type ModelPreferenceCreate, type ModelPreferencesBulkUpdate, ModelPreferencesResource, type ModelProvider, type ModelType, NoDataSourcesError, NotFoundError, type PaginationInfo, type PaginationParams, PeopleDataSource, PeopleResource, type PeopleSearchRequest, type PeopleSearchResponse, type PersonResult, type Plan, type ProcessingStatus, type ProcessingStatusResponse, type ProgressEntry, ProgressTracker, ProviderType, RateLimitError, type RateLimitErrorOptions, type ResponseArtifact, type ResponseListResponse, type ResponseObject, type ResponseStatus, ResponsesResource, type SalaryRange, type Scope, type SelectedSkill, type SkillAnalyticsRequest, type SkillEffectivenessMetrics, type SkillGuidelineBase, type SkillGuidelineCreate, type SkillGuidelineListResponse, type SkillGuidelineResponse, type SkillGuidelineUpdate, type SkillRetrievalMetadata, type SkillUsageBase, type SkillUsageCreate, type SkillUsageListResponse, type SkillUsageResponse, type SkillUsageUpdate, SkillsResource, SourcesNotAvailableError, type StoreApiKeyRequest, type TenantDetailsResponse, TenantInfoResource, type TenantModelPreference, type TenantModelPreferencesResponse, type TestConnectionResponse, type ThreadListResponse, type ThreadObject, type ThreadResponsesParams, ThreadsResource, type ToolInfo, type UUID, type UpdateAppStatusParams, type UpdateAppStatusResponse, type UpdateThreadRequest, type UserConnectionsResponse, type UserCreateRequest, type UserDeleteResponse, type UserIdentifier, type UserListResponse, type UserResponse, type UserUpdateRequest, UsersResource, ValidationError, LumnisClient as default, displayProgress, formatProgressEntry };
package/dist/index.d.ts CHANGED
@@ -1004,6 +1004,201 @@ declare class ModelPreferencesResource {
1004
1004
  }): Promise<TenantModelPreferencesResponse>;
1005
1005
  }
1006
1006
 
1007
+ /**
1008
+ * Available people search data sources
1009
+ */
1010
+ declare enum PeopleDataSource {
1011
+ PDL = "PDL",
1012
+ CORESIGNAL = "CORESIGNAL",
1013
+ CRUST_DATA = "CRUST_DATA"
1014
+ }
1015
+ /**
1016
+ * Salary range projection data.
1017
+ * Note: Values represent total compensation (base salary + bonuses + equity),
1018
+ * not just base salary. Only available for CoreSignal results.
1019
+ */
1020
+ interface SalaryRange {
1021
+ /** Minimum total compensation (includes base + bonuses + equity, etc.) */
1022
+ min?: number;
1023
+ /** Median total compensation projection */
1024
+ median?: number;
1025
+ /** Maximum total compensation (includes base + bonuses + equity, etc.) */
1026
+ max?: number;
1027
+ /** Currency code (e.g., "USD", "EUR") */
1028
+ currency?: string;
1029
+ /** Period (e.g., "yearly", "monthly") */
1030
+ period?: string;
1031
+ }
1032
+ /**
1033
+ * Simplified person result model returned in search results.
1034
+ * Contains normalized data from multiple sources (PDL, CoreSignal, CrustData).
1035
+ */
1036
+ interface PersonResult {
1037
+ /** Unique identifier for the person */
1038
+ id: string;
1039
+ /** Full name */
1040
+ name: string;
1041
+ /** Current job title */
1042
+ currentTitle?: string;
1043
+ /** Current company name */
1044
+ currentCompany?: string;
1045
+ /** Current department */
1046
+ currentDepartment?: string;
1047
+ /** Full location string */
1048
+ location?: string;
1049
+ /** City */
1050
+ city?: string;
1051
+ /** Country */
1052
+ country?: string;
1053
+ /** Primary email address */
1054
+ email?: string;
1055
+ /** List of email addresses (up to 3) */
1056
+ emails: string[];
1057
+ /** LinkedIn profile URL */
1058
+ linkedinUrl?: string;
1059
+ /** Years of professional experience */
1060
+ yearsExperience?: number;
1061
+ /** List of skills (up to 15) */
1062
+ skills: string[];
1063
+ /** Seniority level (e.g., "Senior", "Director", "VP") */
1064
+ seniorityLevel?: string;
1065
+ /** Whether person is identified as a decision maker */
1066
+ isDecisionMaker: boolean;
1067
+ /** Number of LinkedIn connections */
1068
+ connectionsCount?: number;
1069
+ /** Whether person recently changed jobs */
1070
+ recentlyChangedJobs: boolean;
1071
+ /** Data source identifier ("PDL", "CORESIGNAL", or "CRUST_DATA") */
1072
+ source: string;
1073
+ /** Confidence score (0.0-1.0) if available */
1074
+ confidenceScore?: number;
1075
+ /** Salary range projection (CoreSignal only) */
1076
+ salaryRange?: SalaryRange;
1077
+ /** Number of certifications (CoreSignal only) */
1078
+ certificationsCount?: number;
1079
+ /** List of languages spoken (CoreSignal only) */
1080
+ languages?: string[];
1081
+ /** List of education degrees (CoreSignal only, up to 3) */
1082
+ educationDegrees?: string[];
1083
+ }
1084
+ /**
1085
+ * Request model for people search queries.
1086
+ */
1087
+ interface PeopleSearchRequest {
1088
+ /**
1089
+ * Natural language search query describing the people you want to find.
1090
+ * Examples:
1091
+ * - "Senior software engineers in San Francisco with Python skills"
1092
+ * - "Product managers at Google or Meta with MBA"
1093
+ * - "Data scientists in NYC with 5+ years experience"
1094
+ */
1095
+ query: string;
1096
+ /**
1097
+ * Maximum number of results to return.
1098
+ * Range: 1-100
1099
+ * Default: 20
1100
+ */
1101
+ limit?: number;
1102
+ /**
1103
+ * Specific data sources to use for the search.
1104
+ * If not provided, all available sources will be used.
1105
+ * Valid values: "PDL", "CORESIGNAL", "CRUST_DATA"
1106
+ *
1107
+ * Note: The API accepts string values. SDKs should use enums for type safety
1108
+ * but serialize them as strings when sending the request.
1109
+ */
1110
+ dataSources?: PeopleDataSource[];
1111
+ }
1112
+ /**
1113
+ * Logic operator for filter values
1114
+ */
1115
+ type FilterLogic = 'or' | 'and' | 'should';
1116
+ /**
1117
+ * A filter with values and logic operator.
1118
+ * Used in applied_filters response.
1119
+ */
1120
+ interface FilterValue {
1121
+ /** List of values for this filter */
1122
+ values: string[];
1123
+ /**
1124
+ * Logic operator:
1125
+ * - "or": ANY value matches (for alternatives like "SF or NYC")
1126
+ * - "and": ALL values must match (for "must have Python AND Java")
1127
+ * - "should": Optional/preferred (for "preferably PhD")
1128
+ */
1129
+ logic: FilterLogic;
1130
+ }
1131
+ /**
1132
+ * Structure of the applied_filters field in the response.
1133
+ * Contains extracted filters from the natural language query.
1134
+ */
1135
+ interface AppliedFilters {
1136
+ /** Cities for the search */
1137
+ cities?: FilterValue;
1138
+ /** Countries for the search */
1139
+ countries?: FilterValue;
1140
+ /** Job titles/roles */
1141
+ jobTitles?: FilterValue;
1142
+ /** Company names */
1143
+ companies?: FilterValue;
1144
+ /** Technical skills */
1145
+ skills?: FilterValue;
1146
+ /** Minimum years of professional experience */
1147
+ minYearsExperience?: number;
1148
+ /** Seniority levels (entry/junior/mid/senior/lead/principal/staff/director/vp/executive) */
1149
+ seniorityLevels?: FilterValue;
1150
+ /** Education levels (bachelors/masters/phd/mba) */
1151
+ educationLevels?: FilterValue;
1152
+ /** Industries/sectors */
1153
+ industries?: FilterValue;
1154
+ }
1155
+ /**
1156
+ * Response model for people search endpoint.
1157
+ */
1158
+ interface PeopleSearchResponse {
1159
+ /** List of matching candidates */
1160
+ candidates: PersonResult[];
1161
+ /** Total number of unique candidates found (may be more than returned) */
1162
+ totalFound: number;
1163
+ /** Filters extracted and applied from the query */
1164
+ appliedFilters: AppliedFilters;
1165
+ /** Execution time in milliseconds */
1166
+ executionTimeMs: number;
1167
+ /** List of data sources that were actually used */
1168
+ dataSourcesUsed: string[];
1169
+ }
1170
+
1171
+ declare class PeopleResource {
1172
+ private readonly http;
1173
+ constructor(http: Http);
1174
+ /**
1175
+ * Perform a quick people search across multiple data sources.
1176
+ *
1177
+ * This endpoint bypasses the full agent framework for faster response times.
1178
+ * It searches across PDL, CoreSignal, and CrustData in parallel and returns
1179
+ * deduplicated results.
1180
+ *
1181
+ * @param params - Search parameters
1182
+ * @param params.query - Natural language search query
1183
+ * @param params.limit - Maximum number of results (1-100, default: 20)
1184
+ * @param params.dataSources - Specific data sources to use (optional)
1185
+ * @returns Promise resolving to search results
1186
+ * @throws {NoDataSourcesError} When no data sources are configured
1187
+ * @throws {SourcesNotAvailableError} When requested sources aren't available
1188
+ * @throws {ValidationError} For other validation errors
1189
+ *
1190
+ * @example
1191
+ * ```typescript
1192
+ * const response = await client.people.quickSearch({
1193
+ * query: "Senior engineers in SF with Python",
1194
+ * limit: 50,
1195
+ * dataSources: [PeopleDataSource.CORESIGNAL, PeopleDataSource.PDL]
1196
+ * });
1197
+ * ```
1198
+ */
1199
+ quickSearch(params: PeopleSearchRequest): Promise<PeopleSearchResponse>;
1200
+ }
1201
+
1007
1202
  declare class ResponsesResource {
1008
1203
  private readonly http;
1009
1204
  constructor(http: Http);
@@ -1253,6 +1448,7 @@ declare class LumnisClient {
1253
1448
  readonly modelPreferences: ModelPreferencesResource;
1254
1449
  readonly mcpServers: MCPServersResource;
1255
1450
  readonly skills: SkillsResource;
1451
+ readonly people: PeopleResource;
1256
1452
  private readonly _scopedUserId?;
1257
1453
  private readonly _defaultScope;
1258
1454
  constructor(options?: LumnisClientOptions);
@@ -1282,14 +1478,20 @@ declare class LumnisClient {
1282
1478
  getApiKeyMode(): Promise<ApiKeyModeResponse>;
1283
1479
  setApiKeyMode(mode: Parameters<ExternalAPIKeysResource['setMode']>[0]): Promise<ApiKeyModeResponse>;
1284
1480
  listApps(params?: Parameters<IntegrationsResource['listApps']>[0]): Promise<AppsListResponse>;
1285
- isAppEnabled(appName: string): Promise<AppEnabledResponse>;
1286
- setAppEnabled(appName: string, enabled: boolean): Promise<UpdateAppStatusResponse>;
1481
+ listProviders(): Promise<ListProvidersResponse>;
1482
+ isAppEnabled(appName: string, provider?: string): Promise<AppEnabledResponse>;
1483
+ setAppEnabled(appName: string, enabled: boolean, provider?: string): Promise<UpdateAppStatusResponse>;
1287
1484
  initiateConnection(params: Parameters<IntegrationsResource['initiateConnection']>[0]): Promise<InitiateConnectionResponse>;
1288
- getConnectionStatus(userId: string, appName: string): Promise<ConnectionStatusResponse>;
1289
- listConnections(userId: string, params?: Parameters<IntegrationsResource['listConnections']>[1]): Promise<UserConnectionsResponse>;
1485
+ getConnectionStatus(userId: string, appName: string, provider?: string): Promise<ConnectionStatusResponse>;
1486
+ listConnections(userId: string, params?: {
1487
+ appFilter?: string;
1488
+ provider?: string;
1489
+ }): Promise<UserConnectionsResponse>;
1290
1490
  getIntegrationTools(userId: string, params?: {
1291
1491
  appFilter?: string[];
1492
+ provider?: string;
1292
1493
  }): Promise<GetToolsResponse>;
1494
+ disconnect(userId: string, appName: string, provider?: string): Promise<DisconnectResponse>;
1293
1495
  getModelPreferences(params?: Parameters<ModelPreferencesResource['list']>[0]): Promise<TenantModelPreferencesResponse>;
1294
1496
  updateModelPreferences(params: Parameters<ModelPreferencesResource['updateBulk']>[0]): Promise<TenantModelPreferencesResponse>;
1295
1497
  createMcpServer(params: Parameters<MCPServersResource['create']>[0]): Promise<MCPServerResponse>;
@@ -1343,6 +1545,13 @@ declare class InternalServerError extends LumnisError {
1343
1545
  declare class LocalFileNotSupportedError extends ValidationError {
1344
1546
  constructor(filePath: string);
1345
1547
  }
1548
+ declare class NoDataSourcesError extends ValidationError {
1549
+ constructor(message?: string);
1550
+ }
1551
+ declare class SourcesNotAvailableError extends ValidationError {
1552
+ availableSources: string[];
1553
+ constructor(message: string, availableSources: string[]);
1554
+ }
1346
1555
 
1347
1556
  /**
1348
1557
  * Utility functions for displaying progress updates
@@ -1395,4 +1604,4 @@ declare class ProgressTracker {
1395
1604
  }
1396
1605
 
1397
1606
  export = LumnisClient;
1398
- export { type AgentConfig, type ApiKeyMode, type ApiKeyModeRequest, type ApiKeyModeResponse, type ApiProvider, type AppEnabledResponse, type AppsListResponse, type ArtifactObject, type ArtifactsListResponse, AuthenticationError, type BaseResource, type BillingStatus, type BulkDeleteRequest, type BulkDeleteResponse, type BulkUploadResponse, type CancelResponseResponse, type CheckAppEnabledParams, type ChunkingStrategy, type ConnectionCallbackRequest, type ConnectionCallbackResponse, type ConnectionInfo, type ConnectionStatus, type ConnectionStatusResponse, type ContentType, type CreateFeedbackRequest, type CreateFeedbackResponse, type CreateResponseRequest, type CreateResponseResponse, type CreateThreadRequest, type DatabaseStatus, type DeleteApiKeyResponse, type DisconnectRequest, type DisconnectResponse, type DuplicateHandling, type Email, type ErrorResponse, ExternalAPIKeysResource, type ExternalApiKeyResponse, type FeedbackListResponse, type FeedbackObject, type FeedbackType, type FileAttachment, type FileChunk, type FileContentResponse, type FileListResponse, type FileMetadata, type FileScope, type FileScopeUpdateRequest, type FileSearchRequest, type FileSearchResponse, type FileSearchResult, type FileStatisticsResponse, type FileUploadResponse, FilesResource, type GetConnectionStatusParams, type GetToolsRequest, type GetToolsResponse, type GetUserConnectionsParams, type InitiateConnectionRequest, type InitiateConnectionResponse, IntegrationsResource, InternalServerError, type ListProvidersResponse, LocalFileNotSupportedError, LumnisClient, type LumnisClientOptions, LumnisError, type LumnisErrorOptions, type MCPScope, type MCPServerCreateRequest, type MCPServerListResponse, type MCPServerResponse, type MCPServerUpdateRequest, MCPServersResource, type MCPToolListResponse, type MCPToolResponse, type MCPTransport, type Message, type ModelAvailability, type ModelOverrides, type ModelPreferenceCreate, type ModelPreferencesBulkUpdate, ModelPreferencesResource, type ModelProvider, type ModelType, NotFoundError, type PaginationInfo, type PaginationParams, type Plan, type ProcessingStatus, type ProcessingStatusResponse, type ProgressEntry, ProgressTracker, ProviderType, RateLimitError, type RateLimitErrorOptions, type ResponseArtifact, type ResponseListResponse, type ResponseObject, type ResponseStatus, ResponsesResource, type Scope, type SelectedSkill, type SkillAnalyticsRequest, type SkillEffectivenessMetrics, type SkillGuidelineBase, type SkillGuidelineCreate, type SkillGuidelineListResponse, type SkillGuidelineResponse, type SkillGuidelineUpdate, type SkillRetrievalMetadata, type SkillUsageBase, type SkillUsageCreate, type SkillUsageListResponse, type SkillUsageResponse, type SkillUsageUpdate, SkillsResource, type StoreApiKeyRequest, type TenantDetailsResponse, TenantInfoResource, type TenantModelPreference, type TenantModelPreferencesResponse, type TestConnectionResponse, type ThreadListResponse, type ThreadObject, type ThreadResponsesParams, ThreadsResource, type ToolInfo, type UUID, type UpdateAppStatusParams, type UpdateAppStatusResponse, type UpdateThreadRequest, type UserConnectionsResponse, type UserCreateRequest, type UserDeleteResponse, type UserIdentifier, type UserListResponse, type UserResponse, type UserUpdateRequest, UsersResource, ValidationError, displayProgress, formatProgressEntry };
1607
+ export { type AgentConfig, type ApiKeyMode, type ApiKeyModeRequest, type ApiKeyModeResponse, type ApiProvider, type AppEnabledResponse, type AppliedFilters, type AppsListResponse, type ArtifactObject, type ArtifactsListResponse, AuthenticationError, type BaseResource, type BillingStatus, type BulkDeleteRequest, type BulkDeleteResponse, type BulkUploadResponse, type CancelResponseResponse, type CheckAppEnabledParams, type ChunkingStrategy, type ConnectionCallbackRequest, type ConnectionCallbackResponse, type ConnectionInfo, type ConnectionStatus, type ConnectionStatusResponse, type ContentType, type CreateFeedbackRequest, type CreateFeedbackResponse, type CreateResponseRequest, type CreateResponseResponse, type CreateThreadRequest, type DatabaseStatus, type DeleteApiKeyResponse, type DisconnectRequest, type DisconnectResponse, type DuplicateHandling, type Email, type ErrorResponse, ExternalAPIKeysResource, type ExternalApiKeyResponse, type FeedbackListResponse, type FeedbackObject, type FeedbackType, type FileAttachment, type FileChunk, type FileContentResponse, type FileListResponse, type FileMetadata, type FileScope, type FileScopeUpdateRequest, type FileSearchRequest, type FileSearchResponse, type FileSearchResult, type FileStatisticsResponse, type FileUploadResponse, FilesResource, type FilterLogic, type FilterValue, type GetConnectionStatusParams, type GetToolsRequest, type GetToolsResponse, type GetUserConnectionsParams, type InitiateConnectionRequest, type InitiateConnectionResponse, IntegrationsResource, InternalServerError, type ListProvidersResponse, LocalFileNotSupportedError, LumnisClient, type LumnisClientOptions, LumnisError, type LumnisErrorOptions, type MCPScope, type MCPServerCreateRequest, type MCPServerListResponse, type MCPServerResponse, type MCPServerUpdateRequest, MCPServersResource, type MCPToolListResponse, type MCPToolResponse, type MCPTransport, type Message, type ModelAvailability, type ModelOverrides, type ModelPreferenceCreate, type ModelPreferencesBulkUpdate, ModelPreferencesResource, type ModelProvider, type ModelType, NoDataSourcesError, NotFoundError, type PaginationInfo, type PaginationParams, PeopleDataSource, PeopleResource, type PeopleSearchRequest, type PeopleSearchResponse, type PersonResult, type Plan, type ProcessingStatus, type ProcessingStatusResponse, type ProgressEntry, ProgressTracker, ProviderType, RateLimitError, type RateLimitErrorOptions, type ResponseArtifact, type ResponseListResponse, type ResponseObject, type ResponseStatus, ResponsesResource, type SalaryRange, type Scope, type SelectedSkill, type SkillAnalyticsRequest, type SkillEffectivenessMetrics, type SkillGuidelineBase, type SkillGuidelineCreate, type SkillGuidelineListResponse, type SkillGuidelineResponse, type SkillGuidelineUpdate, type SkillRetrievalMetadata, type SkillUsageBase, type SkillUsageCreate, type SkillUsageListResponse, type SkillUsageResponse, type SkillUsageUpdate, SkillsResource, SourcesNotAvailableError, type StoreApiKeyRequest, type TenantDetailsResponse, TenantInfoResource, type TenantModelPreference, type TenantModelPreferencesResponse, type TestConnectionResponse, type ThreadListResponse, type ThreadObject, type ThreadResponsesParams, ThreadsResource, type ToolInfo, type UUID, type UpdateAppStatusParams, type UpdateAppStatusResponse, type UpdateThreadRequest, type UserConnectionsResponse, type UserCreateRequest, type UserDeleteResponse, type UserIdentifier, type UserListResponse, type UserResponse, type UserUpdateRequest, UsersResource, ValidationError, displayProgress, formatProgressEntry };
package/dist/index.mjs CHANGED
@@ -487,6 +487,110 @@ class LocalFileNotSupportedError extends ValidationError {
487
487
  this.name = "LocalFileNotSupportedError";
488
488
  }
489
489
  }
490
+ class NoDataSourcesError extends ValidationError {
491
+ constructor(message) {
492
+ super(
493
+ message || "No people data sources configured. Please configure API keys.",
494
+ { code: "NO_DATA_SOURCES" }
495
+ );
496
+ this.name = "NoDataSourcesError";
497
+ }
498
+ }
499
+ class SourcesNotAvailableError extends ValidationError {
500
+ availableSources;
501
+ constructor(message, availableSources) {
502
+ super(message, { code: "SOURCES_NOT_AVAILABLE" });
503
+ this.name = "SourcesNotAvailableError";
504
+ this.availableSources = availableSources;
505
+ }
506
+ }
507
+
508
+ var PeopleDataSource = /* @__PURE__ */ ((PeopleDataSource2) => {
509
+ PeopleDataSource2["PDL"] = "PDL";
510
+ PeopleDataSource2["CORESIGNAL"] = "CORESIGNAL";
511
+ PeopleDataSource2["CRUST_DATA"] = "CRUST_DATA";
512
+ return PeopleDataSource2;
513
+ })(PeopleDataSource || {});
514
+
515
+ class PeopleResource {
516
+ constructor(http) {
517
+ this.http = http;
518
+ }
519
+ /**
520
+ * Perform a quick people search across multiple data sources.
521
+ *
522
+ * This endpoint bypasses the full agent framework for faster response times.
523
+ * It searches across PDL, CoreSignal, and CrustData in parallel and returns
524
+ * deduplicated results.
525
+ *
526
+ * @param params - Search parameters
527
+ * @param params.query - Natural language search query
528
+ * @param params.limit - Maximum number of results (1-100, default: 20)
529
+ * @param params.dataSources - Specific data sources to use (optional)
530
+ * @returns Promise resolving to search results
531
+ * @throws {NoDataSourcesError} When no data sources are configured
532
+ * @throws {SourcesNotAvailableError} When requested sources aren't available
533
+ * @throws {ValidationError} For other validation errors
534
+ *
535
+ * @example
536
+ * ```typescript
537
+ * const response = await client.people.quickSearch({
538
+ * query: "Senior engineers in SF with Python",
539
+ * limit: 50,
540
+ * dataSources: [PeopleDataSource.CORESIGNAL, PeopleDataSource.PDL]
541
+ * });
542
+ * ```
543
+ */
544
+ async quickSearch(params) {
545
+ const { query, limit = 20, dataSources } = params;
546
+ if (limit < 1 || limit > 100) {
547
+ throw new ValidationError("Limit must be between 1 and 100", {
548
+ code: "INVALID_LIMIT"
549
+ });
550
+ }
551
+ if (dataSources) {
552
+ const validSources = Object.values(PeopleDataSource);
553
+ for (const source of dataSources) {
554
+ if (!validSources.includes(source)) {
555
+ throw new ValidationError(
556
+ `Invalid data source: ${source}. Valid sources: ${validSources.join(", ")}`,
557
+ { code: "INVALID_DATA_SOURCE" }
558
+ );
559
+ }
560
+ }
561
+ }
562
+ try {
563
+ const response = await this.http.post(
564
+ "/people/quick-search",
565
+ {
566
+ query,
567
+ limit,
568
+ // HTTP client will convert camelCase to snake_case automatically
569
+ dataSources: dataSources?.map((ds) => ds) || void 0
570
+ }
571
+ );
572
+ return response;
573
+ } catch (error) {
574
+ if (error instanceof ValidationError) {
575
+ const details = error.details || {};
576
+ const errorDetail = details.detail?.error || details.error;
577
+ if (errorDetail?.code === "NO_DATA_SOURCES") {
578
+ throw new NoDataSourcesError(errorDetail.message || void 0);
579
+ }
580
+ if (errorDetail?.code === "SOURCES_NOT_AVAILABLE") {
581
+ const message = errorDetail.message || "";
582
+ const availableMatch = message.match(/Available: \[(.+)\]/);
583
+ const availableSources = availableMatch ? availableMatch[1].replace(/'/g, "").split(", ").map((s) => s.trim()).filter((s) => s.length > 0) : [];
584
+ throw new SourcesNotAvailableError(
585
+ errorDetail.message || "Requested data sources not available",
586
+ availableSources
587
+ );
588
+ }
589
+ }
590
+ throw error;
591
+ }
592
+ }
593
+ }
490
594
 
491
595
  class ResponsesResource {
492
596
  constructor(http) {
@@ -1012,6 +1116,7 @@ class LumnisClient {
1012
1116
  modelPreferences;
1013
1117
  mcpServers;
1014
1118
  skills;
1119
+ people;
1015
1120
  _scopedUserId;
1016
1121
  _defaultScope;
1017
1122
  constructor(options = {}) {
@@ -1042,6 +1147,7 @@ class LumnisClient {
1042
1147
  this.modelPreferences = new ModelPreferencesResource(this.http);
1043
1148
  this.mcpServers = new MCPServersResource(this.http);
1044
1149
  this.skills = new SkillsResource(this.http);
1150
+ this.people = new PeopleResource(this.http);
1045
1151
  }
1046
1152
  forUser(userId) {
1047
1153
  return new LumnisClient({
@@ -1209,23 +1315,29 @@ class LumnisClient {
1209
1315
  async listApps(params) {
1210
1316
  return this.integrations.listApps(params);
1211
1317
  }
1212
- async isAppEnabled(appName) {
1213
- return this.integrations.isAppEnabled(appName);
1318
+ async listProviders() {
1319
+ return this.integrations.listProviders();
1320
+ }
1321
+ async isAppEnabled(appName, provider) {
1322
+ return this.integrations.isAppEnabled(appName, provider);
1214
1323
  }
1215
- async setAppEnabled(appName, enabled) {
1216
- return this.integrations.setAppEnabled(appName, { enabled });
1324
+ async setAppEnabled(appName, enabled, provider) {
1325
+ return this.integrations.setAppEnabled(appName, { enabled, provider });
1217
1326
  }
1218
1327
  async initiateConnection(params) {
1219
1328
  return this.integrations.initiateConnection(params);
1220
1329
  }
1221
- async getConnectionStatus(userId, appName) {
1222
- return this.integrations.getConnectionStatus({ userId, appName });
1330
+ async getConnectionStatus(userId, appName, provider) {
1331
+ return this.integrations.getConnectionStatus({ userId, appName, provider });
1223
1332
  }
1224
1333
  async listConnections(userId, params) {
1225
1334
  return this.integrations.listConnections(userId, params);
1226
1335
  }
1227
1336
  async getIntegrationTools(userId, params) {
1228
- return this.integrations.getTools({ userId, appFilter: params?.appFilter });
1337
+ return this.integrations.getTools({ userId, appFilter: params?.appFilter, provider: params?.provider });
1338
+ }
1339
+ async disconnect(userId, appName, provider) {
1340
+ return this.integrations.disconnect({ userId, appName, provider });
1229
1341
  }
1230
1342
  // Model Preference methods
1231
1343
  async getModelPreferences(params) {
@@ -1416,4 +1528,4 @@ class ProgressTracker {
1416
1528
  }
1417
1529
  }
1418
1530
 
1419
- export { AuthenticationError, InternalServerError, LocalFileNotSupportedError, LumnisClient, LumnisError, NotFoundError, ProgressTracker, ProviderType, RateLimitError, ValidationError, LumnisClient as default, displayProgress, formatProgressEntry };
1531
+ export { AuthenticationError, InternalServerError, LocalFileNotSupportedError, LumnisClient, LumnisError, NoDataSourcesError, NotFoundError, PeopleDataSource, ProgressTracker, ProviderType, RateLimitError, SourcesNotAvailableError, ValidationError, LumnisClient as default, displayProgress, formatProgressEntry };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "lumnisai",
3
3
  "type": "module",
4
- "version": "0.1.5",
4
+ "version": "0.1.7",
5
5
  "description": "Official Node.js SDK for the Lumnis AI API",
6
6
  "author": "Lumnis AI",
7
7
  "license": "MIT",