agentmail 0.5.8 → 0.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/cjs/BaseClient.js +2 -2
  2. package/dist/cjs/api/resources/inboxes/resources/messages/client/Client.d.ts +26 -0
  3. package/dist/cjs/api/resources/inboxes/resources/messages/client/Client.js +101 -1
  4. package/dist/cjs/api/resources/inboxes/resources/messages/client/requests/ListMessagesRequest.d.ts +6 -0
  5. package/dist/cjs/api/resources/inboxes/resources/messages/client/requests/SearchMessagesRequest.d.ts +14 -0
  6. package/dist/cjs/api/resources/inboxes/resources/messages/client/requests/SearchMessagesRequest.js +3 -0
  7. package/dist/cjs/api/resources/inboxes/resources/messages/client/requests/index.d.ts +1 -0
  8. package/dist/cjs/api/resources/inboxes/resources/threads/client/Client.d.ts +25 -0
  9. package/dist/cjs/api/resources/inboxes/resources/threads/client/Client.js +100 -1
  10. package/dist/cjs/api/resources/inboxes/resources/threads/client/requests/ListThreadsRequest.d.ts +6 -0
  11. package/dist/cjs/api/resources/inboxes/resources/threads/client/requests/SearchThreadsRequest.d.ts +14 -0
  12. package/dist/cjs/api/resources/inboxes/resources/threads/client/requests/SearchThreadsRequest.js +3 -0
  13. package/dist/cjs/api/resources/inboxes/resources/threads/client/requests/index.d.ts +1 -0
  14. package/dist/cjs/api/resources/messages/types/SearchMessageHighlights.d.ts +15 -0
  15. package/dist/cjs/api/resources/messages/types/SearchMessageHighlights.js +3 -0
  16. package/dist/cjs/api/resources/messages/types/SearchMessageItem.d.ts +5 -0
  17. package/dist/cjs/api/resources/messages/types/SearchMessageItem.js +3 -0
  18. package/dist/cjs/api/resources/messages/types/SearchMessagesResponse.d.ts +8 -0
  19. package/dist/cjs/api/resources/messages/types/SearchMessagesResponse.js +3 -0
  20. package/dist/cjs/api/resources/messages/types/index.d.ts +3 -0
  21. package/dist/cjs/api/resources/messages/types/index.js +3 -0
  22. package/dist/cjs/api/resources/pods/resources/threads/client/Client.d.ts +25 -0
  23. package/dist/cjs/api/resources/pods/resources/threads/client/Client.js +100 -1
  24. package/dist/cjs/api/resources/pods/resources/threads/client/requests/ListThreadsRequest.d.ts +6 -0
  25. package/dist/cjs/api/resources/pods/resources/threads/client/requests/SearchThreadsRequest.d.ts +14 -0
  26. package/dist/cjs/api/resources/pods/resources/threads/client/requests/SearchThreadsRequest.js +3 -0
  27. package/dist/cjs/api/resources/pods/resources/threads/client/requests/index.d.ts +1 -0
  28. package/dist/cjs/api/resources/threads/client/Client.d.ts +26 -0
  29. package/dist/cjs/api/resources/threads/client/Client.js +101 -1
  30. package/dist/cjs/api/resources/threads/client/requests/ListThreadsRequest.d.ts +6 -0
  31. package/dist/cjs/api/resources/threads/client/requests/SearchThreadsRequest.d.ts +14 -0
  32. package/dist/cjs/api/resources/threads/client/requests/SearchThreadsRequest.js +3 -0
  33. package/dist/cjs/api/resources/threads/client/requests/index.d.ts +1 -0
  34. package/dist/cjs/api/resources/threads/types/SearchThreadHighlights.d.ts +15 -0
  35. package/dist/cjs/api/resources/threads/types/SearchThreadHighlights.js +3 -0
  36. package/dist/cjs/api/resources/threads/types/SearchThreadItem.d.ts +5 -0
  37. package/dist/cjs/api/resources/threads/types/SearchThreadItem.js +3 -0
  38. package/dist/cjs/api/resources/threads/types/SearchThreadsResponse.d.ts +8 -0
  39. package/dist/cjs/api/resources/threads/types/SearchThreadsResponse.js +3 -0
  40. package/dist/cjs/api/resources/threads/types/index.d.ts +3 -0
  41. package/dist/cjs/api/resources/threads/types/index.js +3 -0
  42. package/dist/cjs/api/types/Query.d.ts +5 -0
  43. package/dist/cjs/api/types/Query.js +3 -0
  44. package/dist/cjs/api/types/index.d.ts +1 -0
  45. package/dist/cjs/api/types/index.js +1 -0
  46. package/dist/cjs/serialization/resources/messages/types/SearchMessageHighlights.d.ts +12 -0
  47. package/dist/cjs/serialization/resources/messages/types/SearchMessageHighlights.js +44 -0
  48. package/dist/cjs/serialization/resources/messages/types/SearchMessageItem.d.ts +11 -0
  49. package/dist/cjs/serialization/resources/messages/types/SearchMessageItem.js +45 -0
  50. package/dist/cjs/serialization/resources/messages/types/SearchMessagesResponse.d.ts +16 -0
  51. package/dist/cjs/serialization/resources/messages/types/SearchMessagesResponse.js +48 -0
  52. package/dist/cjs/serialization/resources/messages/types/index.d.ts +3 -0
  53. package/dist/cjs/serialization/resources/messages/types/index.js +3 -0
  54. package/dist/cjs/serialization/resources/threads/types/SearchThreadHighlights.d.ts +12 -0
  55. package/dist/cjs/serialization/resources/threads/types/SearchThreadHighlights.js +44 -0
  56. package/dist/cjs/serialization/resources/threads/types/SearchThreadItem.d.ts +11 -0
  57. package/dist/cjs/serialization/resources/threads/types/SearchThreadItem.js +45 -0
  58. package/dist/cjs/serialization/resources/threads/types/SearchThreadsResponse.d.ts +16 -0
  59. package/dist/cjs/serialization/resources/threads/types/SearchThreadsResponse.js +48 -0
  60. package/dist/cjs/serialization/resources/threads/types/index.d.ts +3 -0
  61. package/dist/cjs/serialization/resources/threads/types/index.js +3 -0
  62. package/dist/cjs/serialization/types/Query.d.ts +7 -0
  63. package/dist/cjs/serialization/types/Query.js +39 -0
  64. package/dist/cjs/serialization/types/index.d.ts +1 -0
  65. package/dist/cjs/serialization/types/index.js +1 -0
  66. package/dist/cjs/version.d.ts +1 -1
  67. package/dist/cjs/version.js +1 -1
  68. package/dist/esm/BaseClient.mjs +2 -2
  69. package/dist/esm/api/resources/inboxes/resources/messages/client/Client.d.mts +26 -0
  70. package/dist/esm/api/resources/inboxes/resources/messages/client/Client.mjs +101 -1
  71. package/dist/esm/api/resources/inboxes/resources/messages/client/requests/ListMessagesRequest.d.mts +6 -0
  72. package/dist/esm/api/resources/inboxes/resources/messages/client/requests/SearchMessagesRequest.d.mts +14 -0
  73. package/dist/esm/api/resources/inboxes/resources/messages/client/requests/SearchMessagesRequest.mjs +2 -0
  74. package/dist/esm/api/resources/inboxes/resources/messages/client/requests/index.d.mts +1 -0
  75. package/dist/esm/api/resources/inboxes/resources/threads/client/Client.d.mts +25 -0
  76. package/dist/esm/api/resources/inboxes/resources/threads/client/Client.mjs +100 -1
  77. package/dist/esm/api/resources/inboxes/resources/threads/client/requests/ListThreadsRequest.d.mts +6 -0
  78. package/dist/esm/api/resources/inboxes/resources/threads/client/requests/SearchThreadsRequest.d.mts +14 -0
  79. package/dist/esm/api/resources/inboxes/resources/threads/client/requests/SearchThreadsRequest.mjs +2 -0
  80. package/dist/esm/api/resources/inboxes/resources/threads/client/requests/index.d.mts +1 -0
  81. package/dist/esm/api/resources/messages/types/SearchMessageHighlights.d.mts +15 -0
  82. package/dist/esm/api/resources/messages/types/SearchMessageHighlights.mjs +2 -0
  83. package/dist/esm/api/resources/messages/types/SearchMessageItem.d.mts +5 -0
  84. package/dist/esm/api/resources/messages/types/SearchMessageItem.mjs +2 -0
  85. package/dist/esm/api/resources/messages/types/SearchMessagesResponse.d.mts +8 -0
  86. package/dist/esm/api/resources/messages/types/SearchMessagesResponse.mjs +2 -0
  87. package/dist/esm/api/resources/messages/types/index.d.mts +3 -0
  88. package/dist/esm/api/resources/messages/types/index.mjs +3 -0
  89. package/dist/esm/api/resources/pods/resources/threads/client/Client.d.mts +25 -0
  90. package/dist/esm/api/resources/pods/resources/threads/client/Client.mjs +100 -1
  91. package/dist/esm/api/resources/pods/resources/threads/client/requests/ListThreadsRequest.d.mts +6 -0
  92. package/dist/esm/api/resources/pods/resources/threads/client/requests/SearchThreadsRequest.d.mts +14 -0
  93. package/dist/esm/api/resources/pods/resources/threads/client/requests/SearchThreadsRequest.mjs +2 -0
  94. package/dist/esm/api/resources/pods/resources/threads/client/requests/index.d.mts +1 -0
  95. package/dist/esm/api/resources/threads/client/Client.d.mts +26 -0
  96. package/dist/esm/api/resources/threads/client/Client.mjs +101 -1
  97. package/dist/esm/api/resources/threads/client/requests/ListThreadsRequest.d.mts +6 -0
  98. package/dist/esm/api/resources/threads/client/requests/SearchThreadsRequest.d.mts +14 -0
  99. package/dist/esm/api/resources/threads/client/requests/SearchThreadsRequest.mjs +2 -0
  100. package/dist/esm/api/resources/threads/client/requests/index.d.mts +1 -0
  101. package/dist/esm/api/resources/threads/types/SearchThreadHighlights.d.mts +15 -0
  102. package/dist/esm/api/resources/threads/types/SearchThreadHighlights.mjs +2 -0
  103. package/dist/esm/api/resources/threads/types/SearchThreadItem.d.mts +5 -0
  104. package/dist/esm/api/resources/threads/types/SearchThreadItem.mjs +2 -0
  105. package/dist/esm/api/resources/threads/types/SearchThreadsResponse.d.mts +8 -0
  106. package/dist/esm/api/resources/threads/types/SearchThreadsResponse.mjs +2 -0
  107. package/dist/esm/api/resources/threads/types/index.d.mts +3 -0
  108. package/dist/esm/api/resources/threads/types/index.mjs +3 -0
  109. package/dist/esm/api/types/Query.d.mts +5 -0
  110. package/dist/esm/api/types/Query.mjs +2 -0
  111. package/dist/esm/api/types/index.d.mts +1 -0
  112. package/dist/esm/api/types/index.mjs +1 -0
  113. package/dist/esm/serialization/resources/messages/types/SearchMessageHighlights.d.mts +12 -0
  114. package/dist/esm/serialization/resources/messages/types/SearchMessageHighlights.mjs +8 -0
  115. package/dist/esm/serialization/resources/messages/types/SearchMessageItem.d.mts +11 -0
  116. package/dist/esm/serialization/resources/messages/types/SearchMessageItem.mjs +9 -0
  117. package/dist/esm/serialization/resources/messages/types/SearchMessagesResponse.d.mts +16 -0
  118. package/dist/esm/serialization/resources/messages/types/SearchMessagesResponse.mjs +12 -0
  119. package/dist/esm/serialization/resources/messages/types/index.d.mts +3 -0
  120. package/dist/esm/serialization/resources/messages/types/index.mjs +3 -0
  121. package/dist/esm/serialization/resources/threads/types/SearchThreadHighlights.d.mts +12 -0
  122. package/dist/esm/serialization/resources/threads/types/SearchThreadHighlights.mjs +8 -0
  123. package/dist/esm/serialization/resources/threads/types/SearchThreadItem.d.mts +11 -0
  124. package/dist/esm/serialization/resources/threads/types/SearchThreadItem.mjs +9 -0
  125. package/dist/esm/serialization/resources/threads/types/SearchThreadsResponse.d.mts +16 -0
  126. package/dist/esm/serialization/resources/threads/types/SearchThreadsResponse.mjs +12 -0
  127. package/dist/esm/serialization/resources/threads/types/index.d.mts +3 -0
  128. package/dist/esm/serialization/resources/threads/types/index.mjs +3 -0
  129. package/dist/esm/serialization/types/Query.d.mts +7 -0
  130. package/dist/esm/serialization/types/Query.mjs +3 -0
  131. package/dist/esm/serialization/types/index.d.mts +1 -0
  132. package/dist/esm/serialization/types/index.mjs +1 -0
  133. package/dist/esm/version.d.mts +1 -1
  134. package/dist/esm/version.mjs +1 -1
  135. package/package.json +1 -1
  136. package/reference.md +319 -0
@@ -58,6 +58,11 @@ class ThreadsClient {
58
58
  this._options = (0, BaseClient_js_1.normalizeClientOptionsWithAuth)(options);
59
59
  }
60
60
  /**
61
+ * Lists threads in the pod, most recent first. Pass `senders`,
62
+ * `recipients`, or `subject` to filter by substring. Filtered requests are
63
+ * served by search, which caps `limit` at 100. For relevance-ranked
64
+ * full-text search, use `Search Threads`.
65
+ *
61
66
  * **CLI:**
62
67
  * ```bash
63
68
  * agentmail pods:threads list --pod-id <pod_id>
@@ -78,7 +83,7 @@ class ThreadsClient {
78
83
  __list(pod_id_1) {
79
84
  return __awaiter(this, arguments, void 0, function* (pod_id, request = {}, requestOptions) {
80
85
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
81
- const { limit, pageToken, labels, before, after, ascending, includeSpam, includeBlocked, includeUnauthenticated, includeTrash, } = request;
86
+ const { limit, pageToken, labels, before, after, ascending, includeSpam, includeBlocked, includeUnauthenticated, includeTrash, senders, recipients, subject, } = request;
82
87
  const _queryParams = {
83
88
  limit,
84
89
  page_token: pageToken,
@@ -99,6 +104,9 @@ class ThreadsClient {
99
104
  include_blocked: includeBlocked,
100
105
  include_unauthenticated: includeUnauthenticated,
101
106
  include_trash: includeTrash,
107
+ senders: senders != null ? (0, json_js_1.toJson)(senders) : undefined,
108
+ recipients: recipients != null ? (0, json_js_1.toJson)(recipients) : undefined,
109
+ subject: subject != null ? (0, json_js_1.toJson)(subject) : undefined,
102
110
  };
103
111
  const _authRequest = yield this._options.authProvider.getAuthRequest();
104
112
  const _headers = (0, headers_js_1.mergeHeaders)(_authRequest.headers, (_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
@@ -147,6 +155,97 @@ class ThreadsClient {
147
155
  return (0, handleNonStatusCodeError_js_1.handleNonStatusCodeError)(_response.error, _response.rawResponse, "GET", "/v0/pods/{pod_id}/threads");
148
156
  });
149
157
  }
158
+ /**
159
+ * Full-text search across threads in the pod, ranked by relevance. The
160
+ * query is matched against senders, recipients, and subject (substring)
161
+ * and the message body (tokenized full text). Spam, trash, blocked, and
162
+ * unauthenticated threads are always excluded. `limit` cannot exceed 100.
163
+ *
164
+ * @param {AgentMail.pods.PodId} pod_id
165
+ * @param {AgentMail.pods.SearchThreadsRequest} request
166
+ * @param {ThreadsClient.RequestOptions} requestOptions - Request-specific configuration.
167
+ *
168
+ * @throws {@link AgentMail.ValidationError}
169
+ * @throws {@link AgentMail.NotFoundError}
170
+ *
171
+ * @example
172
+ * await client.pods.threads.search("pod_id", {
173
+ * q: "q"
174
+ * })
175
+ */
176
+ search(pod_id, request, requestOptions) {
177
+ return core.HttpResponsePromise.fromPromise(this.__search(pod_id, request, requestOptions));
178
+ }
179
+ __search(pod_id, request, requestOptions) {
180
+ return __awaiter(this, void 0, void 0, function* () {
181
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
182
+ const { q, limit, pageToken, before, after } = request;
183
+ const _queryParams = {
184
+ q,
185
+ limit,
186
+ page_token: pageToken,
187
+ before: before != null
188
+ ? serializers.Before.jsonOrThrow(before, { unrecognizedObjectKeys: "strip", omitUndefined: true })
189
+ : undefined,
190
+ after: after != null
191
+ ? serializers.After.jsonOrThrow(after, { unrecognizedObjectKeys: "strip", omitUndefined: true })
192
+ : undefined,
193
+ };
194
+ const _authRequest = yield this._options.authProvider.getAuthRequest();
195
+ const _headers = (0, headers_js_1.mergeHeaders)(_authRequest.headers, (_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
196
+ const _response = yield core.fetcher({
197
+ url: core.url.join((_b = (yield core.Supplier.get(this._options.baseUrl))) !== null && _b !== void 0 ? _b : ((_c = (yield core.Supplier.get(this._options.environment))) !== null && _c !== void 0 ? _c : environments.AgentMailEnvironment.Prod)
198
+ .http, `/v0/pods/${core.url.encodePathParam(serializers.pods.PodId.jsonOrThrow(pod_id, { omitUndefined: true }))}/threads/search`),
199
+ method: "GET",
200
+ headers: _headers,
201
+ queryParameters: Object.assign(Object.assign({}, _queryParams), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams),
202
+ timeoutMs: ((_f = (_d = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _d !== void 0 ? _d : (_e = this._options) === null || _e === void 0 ? void 0 : _e.timeoutInSeconds) !== null && _f !== void 0 ? _f : 60) * 1000,
203
+ maxRetries: (_g = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _g !== void 0 ? _g : (_h = this._options) === null || _h === void 0 ? void 0 : _h.maxRetries,
204
+ abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
205
+ fetchFn: (_j = this._options) === null || _j === void 0 ? void 0 : _j.fetch,
206
+ logging: this._options.logging,
207
+ });
208
+ if (_response.ok) {
209
+ return {
210
+ data: serializers.SearchThreadsResponse.parseOrThrow(_response.body, {
211
+ unrecognizedObjectKeys: "passthrough",
212
+ allowUnrecognizedUnionMembers: true,
213
+ allowUnrecognizedEnumValues: true,
214
+ skipValidation: true,
215
+ breadcrumbsPrefix: ["response"],
216
+ }),
217
+ rawResponse: _response.rawResponse,
218
+ };
219
+ }
220
+ if (_response.error.reason === "status-code") {
221
+ switch (_response.error.statusCode) {
222
+ case 400:
223
+ throw new AgentMail.ValidationError(serializers.ValidationErrorResponse.parseOrThrow(_response.error.body, {
224
+ unrecognizedObjectKeys: "passthrough",
225
+ allowUnrecognizedUnionMembers: true,
226
+ allowUnrecognizedEnumValues: true,
227
+ skipValidation: true,
228
+ breadcrumbsPrefix: ["response"],
229
+ }), _response.rawResponse);
230
+ case 404:
231
+ throw new AgentMail.NotFoundError(serializers.ErrorResponse.parseOrThrow(_response.error.body, {
232
+ unrecognizedObjectKeys: "passthrough",
233
+ allowUnrecognizedUnionMembers: true,
234
+ allowUnrecognizedEnumValues: true,
235
+ skipValidation: true,
236
+ breadcrumbsPrefix: ["response"],
237
+ }), _response.rawResponse);
238
+ default:
239
+ throw new errors.AgentMailError({
240
+ statusCode: _response.error.statusCode,
241
+ body: _response.error.body,
242
+ rawResponse: _response.rawResponse,
243
+ });
244
+ }
245
+ }
246
+ return (0, handleNonStatusCodeError_js_1.handleNonStatusCodeError)(_response.error, _response.rawResponse, "GET", "/v0/pods/{pod_id}/threads/search");
247
+ });
248
+ }
150
249
  /**
151
250
  * **CLI:**
152
251
  * ```bash
@@ -14,4 +14,10 @@ export interface ListThreadsRequest {
14
14
  includeBlocked?: AgentMail.IncludeBlocked;
15
15
  includeUnauthenticated?: AgentMail.IncludeUnauthenticated;
16
16
  includeTrash?: AgentMail.IncludeTrash;
17
+ /** Filter to threads whose senders contain this value (substring match). Repeatable; all values must match. */
18
+ senders?: string[];
19
+ /** Filter to threads whose recipients contain this value (substring match). Repeatable; all values must match. */
20
+ recipients?: string[];
21
+ /** Filter to threads whose subject contains this value (substring match). Repeatable; all values must match. */
22
+ subject?: string[];
17
23
  }
@@ -0,0 +1,14 @@
1
+ import type * as AgentMail from "../../../../../../index.js";
2
+ /**
3
+ * @example
4
+ * {
5
+ * q: "q"
6
+ * }
7
+ */
8
+ export interface SearchThreadsRequest {
9
+ q: AgentMail.Query;
10
+ limit?: AgentMail.Limit;
11
+ pageToken?: AgentMail.PageToken;
12
+ before?: AgentMail.Before;
13
+ after?: AgentMail.After;
14
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // This file was auto-generated by Fern from our API Definition.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +1,3 @@
1
1
  export type { DeleteThreadRequest } from "./DeleteThreadRequest.js";
2
2
  export type { ListThreadsRequest } from "./ListThreadsRequest.js";
3
+ export type { SearchThreadsRequest } from "./SearchThreadsRequest.js";
@@ -11,6 +11,12 @@ export declare class ThreadsClient {
11
11
  protected readonly _options: NormalizedClientOptionsWithAuth<ThreadsClient.Options>;
12
12
  constructor(options?: ThreadsClient.Options);
13
13
  /**
14
+ * Lists threads, most recent first. Pass `senders`, `recipients`, or
15
+ * `subject` to filter by substring. Filtered requests are served by
16
+ * search, which caps `limit` at 100. For relevance-ranked full-text
17
+ * search across senders, recipients, subject, and message body, use
18
+ * `Search Threads`.
19
+ *
14
20
  * **CLI:**
15
21
  * ```bash
16
22
  * agentmail threads list
@@ -26,6 +32,26 @@ export declare class ThreadsClient {
26
32
  */
27
33
  list(request?: AgentMail.ListThreadsRequest, requestOptions?: ThreadsClient.RequestOptions): core.HttpResponsePromise<AgentMail.ListThreadsResponse>;
28
34
  private __list;
35
+ /**
36
+ * Full-text search across threads in the organization, ranked by
37
+ * relevance. The query is matched against senders, recipients, and
38
+ * subject (substring) and the message body (tokenized full text). Spam,
39
+ * trash, blocked, and unauthenticated threads are always excluded.
40
+ * `limit` cannot exceed 100.
41
+ *
42
+ * @param {AgentMail.SearchThreadsRequest} request
43
+ * @param {ThreadsClient.RequestOptions} requestOptions - Request-specific configuration.
44
+ *
45
+ * @throws {@link AgentMail.ValidationError}
46
+ * @throws {@link AgentMail.NotFoundError}
47
+ *
48
+ * @example
49
+ * await client.threads.search({
50
+ * q: "q"
51
+ * })
52
+ */
53
+ search(request: AgentMail.SearchThreadsRequest, requestOptions?: ThreadsClient.RequestOptions): core.HttpResponsePromise<AgentMail.SearchThreadsResponse>;
54
+ private __search;
29
55
  /**
30
56
  * **CLI:**
31
57
  * ```bash
@@ -58,6 +58,12 @@ class ThreadsClient {
58
58
  this._options = (0, BaseClient_js_1.normalizeClientOptionsWithAuth)(options);
59
59
  }
60
60
  /**
61
+ * Lists threads, most recent first. Pass `senders`, `recipients`, or
62
+ * `subject` to filter by substring. Filtered requests are served by
63
+ * search, which caps `limit` at 100. For relevance-ranked full-text
64
+ * search across senders, recipients, subject, and message body, use
65
+ * `Search Threads`.
66
+ *
61
67
  * **CLI:**
62
68
  * ```bash
63
69
  * agentmail threads list
@@ -77,7 +83,7 @@ class ThreadsClient {
77
83
  __list() {
78
84
  return __awaiter(this, arguments, void 0, function* (request = {}, requestOptions) {
79
85
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
80
- const { limit, pageToken, labels, before, after, ascending, includeSpam, includeBlocked, includeUnauthenticated, includeTrash, } = request;
86
+ const { limit, pageToken, labels, before, after, ascending, includeSpam, includeBlocked, includeUnauthenticated, includeTrash, senders, recipients, subject, } = request;
81
87
  const _queryParams = {
82
88
  limit,
83
89
  page_token: pageToken,
@@ -98,6 +104,9 @@ class ThreadsClient {
98
104
  include_blocked: includeBlocked,
99
105
  include_unauthenticated: includeUnauthenticated,
100
106
  include_trash: includeTrash,
107
+ senders: senders != null ? (0, json_js_1.toJson)(senders) : undefined,
108
+ recipients: recipients != null ? (0, json_js_1.toJson)(recipients) : undefined,
109
+ subject: subject != null ? (0, json_js_1.toJson)(subject) : undefined,
101
110
  };
102
111
  const _authRequest = yield this._options.authProvider.getAuthRequest();
103
112
  const _headers = (0, headers_js_1.mergeHeaders)(_authRequest.headers, (_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
@@ -146,6 +155,97 @@ class ThreadsClient {
146
155
  return (0, handleNonStatusCodeError_js_1.handleNonStatusCodeError)(_response.error, _response.rawResponse, "GET", "/v0/threads");
147
156
  });
148
157
  }
158
+ /**
159
+ * Full-text search across threads in the organization, ranked by
160
+ * relevance. The query is matched against senders, recipients, and
161
+ * subject (substring) and the message body (tokenized full text). Spam,
162
+ * trash, blocked, and unauthenticated threads are always excluded.
163
+ * `limit` cannot exceed 100.
164
+ *
165
+ * @param {AgentMail.SearchThreadsRequest} request
166
+ * @param {ThreadsClient.RequestOptions} requestOptions - Request-specific configuration.
167
+ *
168
+ * @throws {@link AgentMail.ValidationError}
169
+ * @throws {@link AgentMail.NotFoundError}
170
+ *
171
+ * @example
172
+ * await client.threads.search({
173
+ * q: "q"
174
+ * })
175
+ */
176
+ search(request, requestOptions) {
177
+ return core.HttpResponsePromise.fromPromise(this.__search(request, requestOptions));
178
+ }
179
+ __search(request, requestOptions) {
180
+ return __awaiter(this, void 0, void 0, function* () {
181
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
182
+ const { q, limit, pageToken, before, after } = request;
183
+ const _queryParams = {
184
+ q,
185
+ limit,
186
+ page_token: pageToken,
187
+ before: before != null
188
+ ? serializers.Before.jsonOrThrow(before, { unrecognizedObjectKeys: "strip", omitUndefined: true })
189
+ : undefined,
190
+ after: after != null
191
+ ? serializers.After.jsonOrThrow(after, { unrecognizedObjectKeys: "strip", omitUndefined: true })
192
+ : undefined,
193
+ };
194
+ const _authRequest = yield this._options.authProvider.getAuthRequest();
195
+ const _headers = (0, headers_js_1.mergeHeaders)(_authRequest.headers, (_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
196
+ const _response = yield core.fetcher({
197
+ url: core.url.join((_b = (yield core.Supplier.get(this._options.baseUrl))) !== null && _b !== void 0 ? _b : ((_c = (yield core.Supplier.get(this._options.environment))) !== null && _c !== void 0 ? _c : environments.AgentMailEnvironment.Prod)
198
+ .http, "/v0/threads/search"),
199
+ method: "GET",
200
+ headers: _headers,
201
+ queryParameters: Object.assign(Object.assign({}, _queryParams), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams),
202
+ timeoutMs: ((_f = (_d = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _d !== void 0 ? _d : (_e = this._options) === null || _e === void 0 ? void 0 : _e.timeoutInSeconds) !== null && _f !== void 0 ? _f : 60) * 1000,
203
+ maxRetries: (_g = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _g !== void 0 ? _g : (_h = this._options) === null || _h === void 0 ? void 0 : _h.maxRetries,
204
+ abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
205
+ fetchFn: (_j = this._options) === null || _j === void 0 ? void 0 : _j.fetch,
206
+ logging: this._options.logging,
207
+ });
208
+ if (_response.ok) {
209
+ return {
210
+ data: serializers.SearchThreadsResponse.parseOrThrow(_response.body, {
211
+ unrecognizedObjectKeys: "passthrough",
212
+ allowUnrecognizedUnionMembers: true,
213
+ allowUnrecognizedEnumValues: true,
214
+ skipValidation: true,
215
+ breadcrumbsPrefix: ["response"],
216
+ }),
217
+ rawResponse: _response.rawResponse,
218
+ };
219
+ }
220
+ if (_response.error.reason === "status-code") {
221
+ switch (_response.error.statusCode) {
222
+ case 400:
223
+ throw new AgentMail.ValidationError(serializers.ValidationErrorResponse.parseOrThrow(_response.error.body, {
224
+ unrecognizedObjectKeys: "passthrough",
225
+ allowUnrecognizedUnionMembers: true,
226
+ allowUnrecognizedEnumValues: true,
227
+ skipValidation: true,
228
+ breadcrumbsPrefix: ["response"],
229
+ }), _response.rawResponse);
230
+ case 404:
231
+ throw new AgentMail.NotFoundError(serializers.ErrorResponse.parseOrThrow(_response.error.body, {
232
+ unrecognizedObjectKeys: "passthrough",
233
+ allowUnrecognizedUnionMembers: true,
234
+ allowUnrecognizedEnumValues: true,
235
+ skipValidation: true,
236
+ breadcrumbsPrefix: ["response"],
237
+ }), _response.rawResponse);
238
+ default:
239
+ throw new errors.AgentMailError({
240
+ statusCode: _response.error.statusCode,
241
+ body: _response.error.body,
242
+ rawResponse: _response.rawResponse,
243
+ });
244
+ }
245
+ }
246
+ return (0, handleNonStatusCodeError_js_1.handleNonStatusCodeError)(_response.error, _response.rawResponse, "GET", "/v0/threads/search");
247
+ });
248
+ }
149
249
  /**
150
250
  * **CLI:**
151
251
  * ```bash
@@ -14,4 +14,10 @@ export interface ListThreadsRequest {
14
14
  includeBlocked?: AgentMail.IncludeBlocked;
15
15
  includeUnauthenticated?: AgentMail.IncludeUnauthenticated;
16
16
  includeTrash?: AgentMail.IncludeTrash;
17
+ /** Filter to threads whose senders contain this value (substring match). Repeatable; all values must match. */
18
+ senders?: string[];
19
+ /** Filter to threads whose recipients contain this value (substring match). Repeatable; all values must match. */
20
+ recipients?: string[];
21
+ /** Filter to threads whose subject contains this value (substring match). Repeatable; all values must match. */
22
+ subject?: string[];
17
23
  }
@@ -0,0 +1,14 @@
1
+ import type * as AgentMail from "../../../../index.js";
2
+ /**
3
+ * @example
4
+ * {
5
+ * q: "q"
6
+ * }
7
+ */
8
+ export interface SearchThreadsRequest {
9
+ q: AgentMail.Query;
10
+ limit?: AgentMail.Limit;
11
+ pageToken?: AgentMail.PageToken;
12
+ before?: AgentMail.Before;
13
+ after?: AgentMail.After;
14
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // This file was auto-generated by Fern from our API Definition.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +1,3 @@
1
1
  export type { DeleteThreadRequest } from "./DeleteThreadRequest.js";
2
2
  export type { ListThreadsRequest } from "./ListThreadsRequest.js";
3
+ export type { SearchThreadsRequest } from "./SearchThreadsRequest.js";
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Matched fragments per field on a thread search result, with matched terms
3
+ * wrapped in `**`. A field key is present only when the query matched that
4
+ * field, so the present keys also tell you which fields produced the hit.
5
+ */
6
+ export interface SearchThreadHighlights {
7
+ /** Matched fragments from a sender address in the thread. */
8
+ from?: string[];
9
+ /** Matched fragments from a recipient address in the thread (to, cc, or bcc). */
10
+ recipients?: string[];
11
+ /** Matched fragments from the subject. */
12
+ subject?: string[];
13
+ /** Matched fragments from a message body in the thread. */
14
+ text?: string[];
15
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // This file was auto-generated by Fern from our API Definition.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ import type * as AgentMail from "../../../index.js";
2
+ export interface SearchThreadItem extends AgentMail.ThreadItem {
3
+ /** Matched fragments per field. Present only when the query matched an indexed field. */
4
+ highlights?: AgentMail.SearchThreadHighlights;
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // This file was auto-generated by Fern from our API Definition.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ import type * as AgentMail from "../../../index.js";
2
+ export interface SearchThreadsResponse {
3
+ count: AgentMail.Count;
4
+ limit?: AgentMail.Limit;
5
+ nextPageToken?: AgentMail.PageToken;
6
+ /** Ordered by relevance, best match first. */
7
+ threads: AgentMail.SearchThreadItem[];
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // This file was auto-generated by Fern from our API Definition.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,4 +1,7 @@
1
1
  export * from "./ListThreadsResponse.js";
2
+ export * from "./SearchThreadHighlights.js";
3
+ export * from "./SearchThreadItem.js";
4
+ export * from "./SearchThreadsResponse.js";
2
5
  export * from "./Thread.js";
3
6
  export * from "./ThreadAttachments.js";
4
7
  export * from "./ThreadCreatedAt.js";
@@ -15,6 +15,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./ListThreadsResponse.js"), exports);
18
+ __exportStar(require("./SearchThreadHighlights.js"), exports);
19
+ __exportStar(require("./SearchThreadItem.js"), exports);
20
+ __exportStar(require("./SearchThreadsResponse.js"), exports);
18
21
  __exportStar(require("./Thread.js"), exports);
19
22
  __exportStar(require("./ThreadAttachments.js"), exports);
20
23
  __exportStar(require("./ThreadCreatedAt.js"), exports);
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Full-text search query. Matched against the sender, recipients, and
3
+ * subject (substring) and the message body (tokenized full text).
4
+ */
5
+ export type Query = string;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ // This file was auto-generated by Fern from our API Definition.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -13,4 +13,5 @@ export * from "./Labels.js";
13
13
  export * from "./Limit.js";
14
14
  export * from "./OrganizationId.js";
15
15
  export * from "./PageToken.js";
16
+ export * from "./Query.js";
16
17
  export * from "./ValidationErrorResponse.js";
@@ -29,4 +29,5 @@ __exportStar(require("./Labels.js"), exports);
29
29
  __exportStar(require("./Limit.js"), exports);
30
30
  __exportStar(require("./OrganizationId.js"), exports);
31
31
  __exportStar(require("./PageToken.js"), exports);
32
+ __exportStar(require("./Query.js"), exports);
32
33
  __exportStar(require("./ValidationErrorResponse.js"), exports);
@@ -0,0 +1,12 @@
1
+ import type * as AgentMail from "../../../../api/index.js";
2
+ import * as core from "../../../../core/index.js";
3
+ import type * as serializers from "../../../index.js";
4
+ export declare const SearchMessageHighlights: core.serialization.ObjectSchema<serializers.SearchMessageHighlights.Raw, AgentMail.SearchMessageHighlights>;
5
+ export declare namespace SearchMessageHighlights {
6
+ interface Raw {
7
+ from?: string[] | null;
8
+ recipients?: string[] | null;
9
+ subject?: string[] | null;
10
+ text?: string[] | null;
11
+ }
12
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ // This file was auto-generated by Fern from our API Definition.
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.SearchMessageHighlights = void 0;
38
+ const core = __importStar(require("../../../../core/index.js"));
39
+ exports.SearchMessageHighlights = core.serialization.object({
40
+ from: core.serialization.list(core.serialization.string()).optional(),
41
+ recipients: core.serialization.list(core.serialization.string()).optional(),
42
+ subject: core.serialization.list(core.serialization.string()).optional(),
43
+ text: core.serialization.list(core.serialization.string()).optional(),
44
+ });
@@ -0,0 +1,11 @@
1
+ import type * as AgentMail from "../../../../api/index.js";
2
+ import * as core from "../../../../core/index.js";
3
+ import type * as serializers from "../../../index.js";
4
+ import { MessageItem } from "./MessageItem.js";
5
+ import { SearchMessageHighlights } from "./SearchMessageHighlights.js";
6
+ export declare const SearchMessageItem: core.serialization.ObjectSchema<serializers.SearchMessageItem.Raw, AgentMail.SearchMessageItem>;
7
+ export declare namespace SearchMessageItem {
8
+ interface Raw extends MessageItem.Raw {
9
+ highlights?: SearchMessageHighlights.Raw | null;
10
+ }
11
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ // This file was auto-generated by Fern from our API Definition.
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.SearchMessageItem = void 0;
38
+ const core = __importStar(require("../../../../core/index.js"));
39
+ const MessageItem_js_1 = require("./MessageItem.js");
40
+ const SearchMessageHighlights_js_1 = require("./SearchMessageHighlights.js");
41
+ exports.SearchMessageItem = core.serialization
42
+ .object({
43
+ highlights: SearchMessageHighlights_js_1.SearchMessageHighlights.optional(),
44
+ })
45
+ .extend(MessageItem_js_1.MessageItem);
@@ -0,0 +1,16 @@
1
+ import type * as AgentMail from "../../../../api/index.js";
2
+ import * as core from "../../../../core/index.js";
3
+ import type * as serializers from "../../../index.js";
4
+ import { Count } from "../../../types/Count.js";
5
+ import { Limit } from "../../../types/Limit.js";
6
+ import { PageToken } from "../../../types/PageToken.js";
7
+ import { SearchMessageItem } from "./SearchMessageItem.js";
8
+ export declare const SearchMessagesResponse: core.serialization.ObjectSchema<serializers.SearchMessagesResponse.Raw, AgentMail.SearchMessagesResponse>;
9
+ export declare namespace SearchMessagesResponse {
10
+ interface Raw {
11
+ count: Count.Raw;
12
+ limit?: Limit.Raw | null;
13
+ next_page_token?: PageToken.Raw | null;
14
+ messages: SearchMessageItem.Raw[];
15
+ }
16
+ }