exa-js 1.8.27 → 1.9.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/dist/index.js CHANGED
@@ -32,10 +32,6 @@ var index_exports = {};
32
32
  __export(index_exports, {
33
33
  CreateEnrichmentParametersFormat: () => CreateEnrichmentParametersFormat,
34
34
  CreateImportParametersFormat: () => CreateImportParametersFormat,
35
- CreateWebsetParametersImportSource: () => CreateWebsetParametersImportSource,
36
- CreateWebsetParametersSearchExcludeSource: () => CreateWebsetParametersSearchExcludeSource,
37
- CreateWebsetSearchParametersExcludeSource: () => CreateWebsetSearchParametersExcludeSource,
38
- CreateWebsetSearchParametersScopeSource: () => CreateWebsetSearchParametersScopeSource,
39
35
  EventType: () => EventType,
40
36
  EventsClient: () => EventsClient,
41
37
  Exa: () => Exa2,
@@ -51,20 +47,20 @@ __export(index_exports, {
51
47
  MonitorRunStatus: () => MonitorRunStatus,
52
48
  MonitorRunType: () => MonitorRunType,
53
49
  MonitorStatus: () => MonitorStatus,
54
- PreviewWebsetResponseEnrichmentsFormat: () => PreviewWebsetResponseEnrichmentsFormat,
55
- ResearchClient: () => ResearchClient,
56
- ScopeSourceType: () => ScopeSourceType,
57
50
  UpdateMonitorStatus: () => UpdateMonitorStatus,
58
51
  WebhookStatus: () => WebhookStatus,
59
52
  WebsetEnrichmentFormat: () => WebsetEnrichmentFormat,
60
53
  WebsetEnrichmentStatus: () => WebsetEnrichmentStatus,
61
54
  WebsetEnrichmentsClient: () => WebsetEnrichmentsClient,
55
+ WebsetImportSource: () => WebsetImportSource,
62
56
  WebsetItemEvaluationSatisfied: () => WebsetItemEvaluationSatisfied,
63
57
  WebsetItemSource: () => WebsetItemSource,
64
58
  WebsetItemsClient: () => WebsetItemsClient,
65
59
  WebsetMonitorsClient: () => WebsetMonitorsClient,
66
60
  WebsetSearchBehavior: () => WebsetSearchBehavior,
67
61
  WebsetSearchCanceledReason: () => WebsetSearchCanceledReason,
62
+ WebsetSearchExcludeSource: () => WebsetSearchExcludeSource,
63
+ WebsetSearchScopeSource: () => WebsetSearchScopeSource,
68
64
  WebsetSearchStatus: () => WebsetSearchStatus,
69
65
  WebsetSearchesClient: () => WebsetSearchesClient,
70
66
  WebsetStatus: () => WebsetStatus,
@@ -184,6 +180,20 @@ var WebsetEnrichmentsClient = class extends WebsetsBaseClient {
184
180
  "DELETE"
185
181
  );
186
182
  }
183
+ /**
184
+ * Update an Enrichment
185
+ * @param websetId The ID of the Webset
186
+ * @param id The ID of the Enrichment
187
+ * @param params The enrichment update parameters
188
+ * @returns Promise that resolves when the update is complete
189
+ */
190
+ async update(websetId, id, params) {
191
+ return this.request(
192
+ `/v0/websets/${websetId}/enrichments/${id}`,
193
+ "PATCH",
194
+ params
195
+ );
196
+ }
187
197
  /**
188
198
  * Cancel a running Enrichment
189
199
  * @param websetId The ID of the Webset
@@ -243,37 +253,18 @@ var CreateEnrichmentParametersFormat = /* @__PURE__ */ ((CreateEnrichmentParamet
243
253
  CreateEnrichmentParametersFormat2["options"] = "options";
244
254
  CreateEnrichmentParametersFormat2["email"] = "email";
245
255
  CreateEnrichmentParametersFormat2["phone"] = "phone";
256
+ CreateEnrichmentParametersFormat2["url"] = "url";
246
257
  return CreateEnrichmentParametersFormat2;
247
258
  })(CreateEnrichmentParametersFormat || {});
248
259
  var CreateImportParametersFormat = /* @__PURE__ */ ((CreateImportParametersFormat2) => {
249
260
  CreateImportParametersFormat2["csv"] = "csv";
250
261
  return CreateImportParametersFormat2;
251
262
  })(CreateImportParametersFormat || {});
252
- var CreateWebsetParametersImportSource = /* @__PURE__ */ ((CreateWebsetParametersImportSource2) => {
253
- CreateWebsetParametersImportSource2["import"] = "import";
254
- CreateWebsetParametersImportSource2["webset"] = "webset";
255
- return CreateWebsetParametersImportSource2;
256
- })(CreateWebsetParametersImportSource || {});
257
- var CreateWebsetParametersSearchExcludeSource = /* @__PURE__ */ ((CreateWebsetParametersSearchExcludeSource2) => {
258
- CreateWebsetParametersSearchExcludeSource2["import"] = "import";
259
- CreateWebsetParametersSearchExcludeSource2["webset"] = "webset";
260
- return CreateWebsetParametersSearchExcludeSource2;
261
- })(CreateWebsetParametersSearchExcludeSource || {});
262
- var ScopeSourceType = /* @__PURE__ */ ((ScopeSourceType2) => {
263
- ScopeSourceType2["import"] = "import";
264
- ScopeSourceType2["webset"] = "webset";
265
- return ScopeSourceType2;
266
- })(ScopeSourceType || {});
267
- var CreateWebsetSearchParametersExcludeSource = /* @__PURE__ */ ((CreateWebsetSearchParametersExcludeSource2) => {
268
- CreateWebsetSearchParametersExcludeSource2["import"] = "import";
269
- CreateWebsetSearchParametersExcludeSource2["webset"] = "webset";
270
- return CreateWebsetSearchParametersExcludeSource2;
271
- })(CreateWebsetSearchParametersExcludeSource || {});
272
- var CreateWebsetSearchParametersScopeSource = /* @__PURE__ */ ((CreateWebsetSearchParametersScopeSource2) => {
273
- CreateWebsetSearchParametersScopeSource2["import"] = "import";
274
- CreateWebsetSearchParametersScopeSource2["webset"] = "webset";
275
- return CreateWebsetSearchParametersScopeSource2;
276
- })(CreateWebsetSearchParametersScopeSource || {});
263
+ var WebsetImportSource = /* @__PURE__ */ ((WebsetImportSource2) => {
264
+ WebsetImportSource2["import"] = "import";
265
+ WebsetImportSource2["webset"] = "webset";
266
+ return WebsetImportSource2;
267
+ })(WebsetImportSource || {});
277
268
  var EventType = /* @__PURE__ */ ((EventType2) => {
278
269
  EventType2["webset_created"] = "webset.created";
279
270
  EventType2["webset_deleted"] = "webset.deleted";
@@ -285,9 +276,13 @@ var EventType = /* @__PURE__ */ ((EventType2) => {
285
276
  EventType2["webset_search_updated"] = "webset.search.updated";
286
277
  EventType2["import_created"] = "import.created";
287
278
  EventType2["import_completed"] = "import.completed";
288
- EventType2["import_processing"] = "import.processing";
289
279
  EventType2["webset_item_created"] = "webset.item.created";
290
280
  EventType2["webset_item_enriched"] = "webset.item.enriched";
281
+ EventType2["monitor_created"] = "monitor.created";
282
+ EventType2["monitor_updated"] = "monitor.updated";
283
+ EventType2["monitor_deleted"] = "monitor.deleted";
284
+ EventType2["monitor_run_created"] = "monitor.run.created";
285
+ EventType2["monitor_run_completed"] = "monitor.run.completed";
291
286
  EventType2["webset_export_created"] = "webset.export.created";
292
287
  EventType2["webset_export_completed"] = "webset.export.completed";
293
288
  return EventType2;
@@ -340,15 +335,6 @@ var MonitorRunType = /* @__PURE__ */ ((MonitorRunType2) => {
340
335
  MonitorRunType2["refresh"] = "refresh";
341
336
  return MonitorRunType2;
342
337
  })(MonitorRunType || {});
343
- var PreviewWebsetResponseEnrichmentsFormat = /* @__PURE__ */ ((PreviewWebsetResponseEnrichmentsFormat2) => {
344
- PreviewWebsetResponseEnrichmentsFormat2["text"] = "text";
345
- PreviewWebsetResponseEnrichmentsFormat2["date"] = "date";
346
- PreviewWebsetResponseEnrichmentsFormat2["number"] = "number";
347
- PreviewWebsetResponseEnrichmentsFormat2["options"] = "options";
348
- PreviewWebsetResponseEnrichmentsFormat2["email"] = "email";
349
- PreviewWebsetResponseEnrichmentsFormat2["phone"] = "phone";
350
- return PreviewWebsetResponseEnrichmentsFormat2;
351
- })(PreviewWebsetResponseEnrichmentsFormat || {});
352
338
  var UpdateMonitorStatus = /* @__PURE__ */ ((UpdateMonitorStatus2) => {
353
339
  UpdateMonitorStatus2["enabled"] = "enabled";
354
340
  UpdateMonitorStatus2["disabled"] = "disabled";
@@ -379,6 +365,7 @@ var WebsetEnrichmentFormat = /* @__PURE__ */ ((WebsetEnrichmentFormat2) => {
379
365
  WebsetEnrichmentFormat2["options"] = "options";
380
366
  WebsetEnrichmentFormat2["email"] = "email";
381
367
  WebsetEnrichmentFormat2["phone"] = "phone";
368
+ WebsetEnrichmentFormat2["url"] = "url";
382
369
  return WebsetEnrichmentFormat2;
383
370
  })(WebsetEnrichmentFormat || {});
384
371
  var WebsetItemSource = /* @__PURE__ */ ((WebsetItemSource2) => {
@@ -392,6 +379,16 @@ var WebsetItemEvaluationSatisfied = /* @__PURE__ */ ((WebsetItemEvaluationSatisf
392
379
  WebsetItemEvaluationSatisfied2["unclear"] = "unclear";
393
380
  return WebsetItemEvaluationSatisfied2;
394
381
  })(WebsetItemEvaluationSatisfied || {});
382
+ var WebsetSearchExcludeSource = /* @__PURE__ */ ((WebsetSearchExcludeSource2) => {
383
+ WebsetSearchExcludeSource2["import"] = "import";
384
+ WebsetSearchExcludeSource2["webset"] = "webset";
385
+ return WebsetSearchExcludeSource2;
386
+ })(WebsetSearchExcludeSource || {});
387
+ var WebsetSearchScopeSource = /* @__PURE__ */ ((WebsetSearchScopeSource2) => {
388
+ WebsetSearchScopeSource2["import"] = "import";
389
+ WebsetSearchScopeSource2["webset"] = "webset";
390
+ return WebsetSearchScopeSource2;
391
+ })(WebsetSearchScopeSource || {});
395
392
  var WebsetSearchStatus = /* @__PURE__ */ ((WebsetSearchStatus2) => {
396
393
  WebsetSearchStatus2["created"] = "created";
397
394
  WebsetSearchStatus2["pending"] = "pending";
@@ -1093,50 +1090,25 @@ function zodToJsonSchema(schema) {
1093
1090
 
1094
1091
  // src/research/base.ts
1095
1092
  var ResearchBaseClient = class {
1096
- /**
1097
- * Initialize a new Research base client
1098
- * @param client The Exa client instance
1099
- */
1100
1093
  constructor(client) {
1101
1094
  this.client = client;
1102
1095
  }
1103
- /**
1104
- * Make a request to the Research API (prefixes all paths with `/research`).
1105
- * @param endpoint The endpoint path, beginning with a slash (e.g. "/tasks").
1106
- * @param method The HTTP method. Defaults to "POST".
1107
- * @param data Optional request body
1108
- * @param params Optional query parameters
1109
- * @returns The parsed JSON response
1110
- */
1111
1096
  async request(endpoint, method = "POST", data, params) {
1112
1097
  return this.client.request(
1113
- `/research/v0${endpoint}`,
1098
+ `/research/v1${endpoint}`,
1114
1099
  method,
1115
1100
  data,
1116
1101
  params
1117
1102
  );
1118
1103
  }
1119
- /**
1120
- * Make a request to the Research API (prefixes all paths with `/research`).
1121
- * @param endpoint The endpoint path, beginning with a slash (e.g. "/tasks").
1122
- * @param method The HTTP method. Defaults to "POST".
1123
- * @param data Optional request body
1124
- * @param params Optional query parameters
1125
- * @returns The parsed JSON response
1126
- */
1127
1104
  async rawRequest(endpoint, method = "POST", data, params) {
1128
1105
  return this.client.rawRequest(
1129
- `/research/v0${endpoint}`,
1106
+ `/research/v1${endpoint}`,
1130
1107
  method,
1131
1108
  data,
1132
1109
  params
1133
1110
  );
1134
1111
  }
1135
- /**
1136
- * Helper to build pagination parameters.
1137
- * @param pagination The pagination parameters
1138
- * @returns QueryParams object with pagination parameters
1139
- */
1140
1112
  buildPaginationParams(pagination) {
1141
1113
  const params = {};
1142
1114
  if (!pagination) return params;
@@ -1151,26 +1123,34 @@ var ResearchClient = class extends ResearchBaseClient {
1151
1123
  constructor(client) {
1152
1124
  super(client);
1153
1125
  }
1154
- async createTask(params) {
1155
- const { instructions, model, output } = params;
1156
- let schema = output?.schema;
1126
+ async create(params) {
1127
+ const { instructions, model, outputSchema } = params;
1128
+ let schema = outputSchema;
1157
1129
  if (schema && isZodSchema(schema)) {
1158
1130
  schema = zodToJsonSchema(schema);
1159
1131
  }
1160
1132
  const payload = {
1161
1133
  instructions,
1162
- model: model ?? "exa-research",
1163
- output: output ? {
1164
- schema,
1165
- inferSchema: output.inferSchema ?? true
1166
- } : { inferSchema: true }
1134
+ model: model ?? "exa-research"
1167
1135
  };
1168
- return this.request("/tasks", "POST", payload);
1136
+ if (schema) {
1137
+ payload.outputSchema = schema;
1138
+ }
1139
+ return this.request("", "POST", payload);
1169
1140
  }
1170
- getTask(id, options) {
1141
+ get(researchId, options) {
1171
1142
  if (options?.stream) {
1172
1143
  const promise = async () => {
1173
- const resp = await this.rawRequest(`/tasks/${id}?stream=true`, "GET");
1144
+ const params = { stream: "true" };
1145
+ if (options.events !== void 0) {
1146
+ params.events = options.events.toString();
1147
+ }
1148
+ const resp = await this.rawRequest(
1149
+ `/${researchId}`,
1150
+ "GET",
1151
+ void 0,
1152
+ params
1153
+ );
1174
1154
  if (!resp.body) {
1175
1155
  throw new Error("No response body for SSE stream");
1176
1156
  }
@@ -1214,59 +1194,53 @@ var ResearchClient = class extends ResearchBaseClient {
1214
1194
  };
1215
1195
  return promise();
1216
1196
  } else {
1217
- return this.request(`/tasks/${id}`, "GET");
1197
+ const params = { stream: "false" };
1198
+ if (options?.events !== void 0) {
1199
+ params.events = options.events.toString();
1200
+ }
1201
+ return this.request(
1202
+ `/${researchId}`,
1203
+ "GET",
1204
+ void 0,
1205
+ params
1206
+ );
1218
1207
  }
1219
1208
  }
1220
- /**
1221
- * @deprecated This method is deprecated and may be removed in a future release.
1222
- * @see getTask(id, {stream: true})
1223
- * Poll a research task until completion or failure.
1224
- * Polls every 1 second with a maximum timeout of 10 minutes.
1225
- * Resilient to up to 10 consecutive polling failures.
1226
- */
1227
- async pollTask(id) {
1228
- const pollingInterval = 1e3;
1229
- const maxPollingTime = 10 * 60 * 1e3;
1230
- const maxConsecutiveFailures = 10;
1209
+ async list(options) {
1210
+ const params = this.buildPaginationParams(options);
1211
+ return this.request("", "GET", void 0, params);
1212
+ }
1213
+ async pollUntilFinished(researchId, options) {
1214
+ const pollInterval = options?.pollInterval ?? 1e3;
1215
+ const timeoutMs = options?.timeoutMs ?? 10 * 60 * 1e3;
1216
+ const maxConsecutiveFailures = 5;
1231
1217
  const startTime = Date.now();
1232
1218
  let consecutiveFailures = 0;
1233
1219
  while (true) {
1234
1220
  try {
1235
- const task = await this.request(`/tasks/${id}`, "GET");
1221
+ const research = await this.get(researchId, {
1222
+ events: options?.events
1223
+ });
1236
1224
  consecutiveFailures = 0;
1237
- if (task.status === "completed" || task.status === "failed") {
1238
- return task;
1225
+ if (research.status === "completed" || research.status === "failed" || research.status === "canceled") {
1226
+ return research;
1239
1227
  }
1240
1228
  } catch (err) {
1241
1229
  consecutiveFailures += 1;
1242
1230
  if (consecutiveFailures >= maxConsecutiveFailures) {
1243
1231
  throw new Error(
1244
- `Polling failed ${maxConsecutiveFailures} times in a row for task ${id}: ${err}`
1232
+ `Polling failed ${maxConsecutiveFailures} times in a row for research ${researchId}: ${err}`
1245
1233
  );
1246
1234
  }
1247
1235
  }
1248
- if (Date.now() - startTime > maxPollingTime) {
1236
+ if (Date.now() - startTime > timeoutMs) {
1249
1237
  throw new Error(
1250
- `Polling timeout: Task ${id} did not complete within 10 minutes`
1238
+ `Polling timeout: Research ${researchId} did not complete within ${timeoutMs}ms`
1251
1239
  );
1252
1240
  }
1253
- await new Promise((resolve) => setTimeout(resolve, pollingInterval));
1241
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
1254
1242
  }
1255
1243
  }
1256
- /**
1257
- * List research tasks
1258
- * @param options Pagination options
1259
- * @returns The paginated list of research tasks
1260
- */
1261
- async listTasks(options) {
1262
- const params = this.buildPaginationParams(options);
1263
- return this.request(
1264
- "/tasks",
1265
- "GET",
1266
- void 0,
1267
- params
1268
- );
1269
- }
1270
1244
  };
1271
1245
 
1272
1246
  // src/index.ts
@@ -1697,10 +1671,6 @@ var index_default = Exa2;
1697
1671
  0 && (module.exports = {
1698
1672
  CreateEnrichmentParametersFormat,
1699
1673
  CreateImportParametersFormat,
1700
- CreateWebsetParametersImportSource,
1701
- CreateWebsetParametersSearchExcludeSource,
1702
- CreateWebsetSearchParametersExcludeSource,
1703
- CreateWebsetSearchParametersScopeSource,
1704
1674
  EventType,
1705
1675
  EventsClient,
1706
1676
  Exa,
@@ -1716,20 +1686,20 @@ var index_default = Exa2;
1716
1686
  MonitorRunStatus,
1717
1687
  MonitorRunType,
1718
1688
  MonitorStatus,
1719
- PreviewWebsetResponseEnrichmentsFormat,
1720
- ResearchClient,
1721
- ScopeSourceType,
1722
1689
  UpdateMonitorStatus,
1723
1690
  WebhookStatus,
1724
1691
  WebsetEnrichmentFormat,
1725
1692
  WebsetEnrichmentStatus,
1726
1693
  WebsetEnrichmentsClient,
1694
+ WebsetImportSource,
1727
1695
  WebsetItemEvaluationSatisfied,
1728
1696
  WebsetItemSource,
1729
1697
  WebsetItemsClient,
1730
1698
  WebsetMonitorsClient,
1731
1699
  WebsetSearchBehavior,
1732
1700
  WebsetSearchCanceledReason,
1701
+ WebsetSearchExcludeSource,
1702
+ WebsetSearchScopeSource,
1733
1703
  WebsetSearchStatus,
1734
1704
  WebsetSearchesClient,
1735
1705
  WebsetStatus,