agentmail 0.5.28 → 0.5.30

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 (116) hide show
  1. package/dist/cjs/BaseClient.js +2 -2
  2. package/dist/cjs/api/resources/attachments/types/AttachmentResponse.d.ts +4 -2
  3. package/dist/cjs/api/resources/inboxes/resources/metrics/client/Client.d.ts +28 -0
  4. package/dist/cjs/api/resources/inboxes/resources/metrics/client/Client.js +98 -0
  5. package/dist/cjs/api/resources/inboxes/resources/metrics/client/requests/QueryRatesRequest.d.ts +14 -0
  6. package/dist/cjs/api/resources/inboxes/resources/metrics/client/requests/QueryRatesRequest.js +3 -0
  7. package/dist/cjs/api/resources/inboxes/resources/metrics/client/requests/index.d.ts +1 -0
  8. package/dist/cjs/api/resources/messages/types/RawMessageResponse.d.ts +2 -2
  9. package/dist/cjs/api/resources/metrics/client/Client.d.ts +28 -0
  10. package/dist/cjs/api/resources/metrics/client/Client.js +98 -0
  11. package/dist/cjs/api/resources/metrics/client/requests/QueryRatesRequest.d.ts +14 -0
  12. package/dist/cjs/api/resources/metrics/client/requests/QueryRatesRequest.js +3 -0
  13. package/dist/cjs/api/resources/metrics/client/requests/index.d.ts +1 -0
  14. package/dist/cjs/api/resources/metrics/types/QueryRatesResponse.d.ts +5 -0
  15. package/dist/cjs/api/resources/metrics/types/QueryRatesResponse.js +3 -0
  16. package/dist/cjs/api/resources/metrics/types/RatePeriod.d.ts +5 -0
  17. package/dist/cjs/api/resources/metrics/types/RatePeriod.js +3 -0
  18. package/dist/cjs/api/resources/metrics/types/RatePoint.d.ts +12 -0
  19. package/dist/cjs/api/resources/metrics/types/RatePoint.js +3 -0
  20. package/dist/cjs/api/resources/metrics/types/RateType.d.ts +10 -0
  21. package/dist/cjs/api/resources/metrics/types/RateType.js +13 -0
  22. package/dist/cjs/api/resources/metrics/types/RateTypes.d.ts +5 -0
  23. package/dist/cjs/api/resources/metrics/types/RateTypes.js +3 -0
  24. package/dist/cjs/api/resources/metrics/types/Window.d.ts +6 -0
  25. package/dist/cjs/api/resources/metrics/types/Window.js +3 -0
  26. package/dist/cjs/api/resources/metrics/types/index.d.ts +6 -0
  27. package/dist/cjs/api/resources/metrics/types/index.js +6 -0
  28. package/dist/cjs/api/resources/pods/resources/metrics/client/Client.d.ts +28 -0
  29. package/dist/cjs/api/resources/pods/resources/metrics/client/Client.js +98 -0
  30. package/dist/cjs/api/resources/pods/resources/metrics/client/requests/QueryRatesRequest.d.ts +14 -0
  31. package/dist/cjs/api/resources/pods/resources/metrics/client/requests/QueryRatesRequest.js +3 -0
  32. package/dist/cjs/api/resources/pods/resources/metrics/client/requests/index.d.ts +1 -0
  33. package/dist/cjs/api/resources/webhooks/types/UpdateInboxWebhookRequest.d.ts +10 -1
  34. package/dist/cjs/api/resources/webhooks/types/UpdatePodWebhookRequest.d.ts +2 -2
  35. package/dist/cjs/api/resources/webhooks/types/Webhook.d.ts +11 -0
  36. package/dist/cjs/serialization/resources/attachments/types/AttachmentResponse.d.ts +1 -0
  37. package/dist/cjs/serialization/resources/attachments/types/AttachmentResponse.js +1 -0
  38. package/dist/cjs/serialization/resources/metrics/types/QueryRatesResponse.d.ts +9 -0
  39. package/dist/cjs/serialization/resources/metrics/types/QueryRatesResponse.js +41 -0
  40. package/dist/cjs/serialization/resources/metrics/types/RatePeriod.d.ts +7 -0
  41. package/dist/cjs/serialization/resources/metrics/types/RatePeriod.js +39 -0
  42. package/dist/cjs/serialization/resources/metrics/types/RatePoint.d.ts +11 -0
  43. package/dist/cjs/serialization/resources/metrics/types/RatePoint.js +43 -0
  44. package/dist/cjs/serialization/resources/metrics/types/RateType.d.ts +7 -0
  45. package/dist/cjs/serialization/resources/metrics/types/RateType.js +39 -0
  46. package/dist/cjs/serialization/resources/metrics/types/RateTypes.d.ts +8 -0
  47. package/dist/cjs/serialization/resources/metrics/types/RateTypes.js +40 -0
  48. package/dist/cjs/serialization/resources/metrics/types/Window.d.ts +7 -0
  49. package/dist/cjs/serialization/resources/metrics/types/Window.js +39 -0
  50. package/dist/cjs/serialization/resources/metrics/types/index.d.ts +6 -0
  51. package/dist/cjs/serialization/resources/metrics/types/index.js +6 -0
  52. package/dist/cjs/serialization/resources/webhooks/types/UpdateInboxWebhookRequest.d.ts +1 -0
  53. package/dist/cjs/serialization/resources/webhooks/types/UpdateInboxWebhookRequest.js +1 -0
  54. package/dist/cjs/serialization/resources/webhooks/types/Webhook.d.ts +2 -0
  55. package/dist/cjs/serialization/resources/webhooks/types/Webhook.js +2 -0
  56. package/dist/cjs/version.d.ts +1 -1
  57. package/dist/cjs/version.js +1 -1
  58. package/dist/esm/BaseClient.mjs +2 -2
  59. package/dist/esm/api/resources/attachments/types/AttachmentResponse.d.mts +4 -2
  60. package/dist/esm/api/resources/inboxes/resources/metrics/client/Client.d.mts +28 -0
  61. package/dist/esm/api/resources/inboxes/resources/metrics/client/Client.mjs +98 -0
  62. package/dist/esm/api/resources/inboxes/resources/metrics/client/requests/QueryRatesRequest.d.mts +14 -0
  63. package/dist/esm/api/resources/inboxes/resources/metrics/client/requests/QueryRatesRequest.mjs +2 -0
  64. package/dist/esm/api/resources/inboxes/resources/metrics/client/requests/index.d.mts +1 -0
  65. package/dist/esm/api/resources/messages/types/RawMessageResponse.d.mts +2 -2
  66. package/dist/esm/api/resources/metrics/client/Client.d.mts +28 -0
  67. package/dist/esm/api/resources/metrics/client/Client.mjs +98 -0
  68. package/dist/esm/api/resources/metrics/client/requests/QueryRatesRequest.d.mts +14 -0
  69. package/dist/esm/api/resources/metrics/client/requests/QueryRatesRequest.mjs +2 -0
  70. package/dist/esm/api/resources/metrics/client/requests/index.d.mts +1 -0
  71. package/dist/esm/api/resources/metrics/types/QueryRatesResponse.d.mts +5 -0
  72. package/dist/esm/api/resources/metrics/types/QueryRatesResponse.mjs +2 -0
  73. package/dist/esm/api/resources/metrics/types/RatePeriod.d.mts +5 -0
  74. package/dist/esm/api/resources/metrics/types/RatePeriod.mjs +2 -0
  75. package/dist/esm/api/resources/metrics/types/RatePoint.d.mts +12 -0
  76. package/dist/esm/api/resources/metrics/types/RatePoint.mjs +2 -0
  77. package/dist/esm/api/resources/metrics/types/RateType.d.mts +10 -0
  78. package/dist/esm/api/resources/metrics/types/RateType.mjs +10 -0
  79. package/dist/esm/api/resources/metrics/types/RateTypes.d.mts +5 -0
  80. package/dist/esm/api/resources/metrics/types/RateTypes.mjs +2 -0
  81. package/dist/esm/api/resources/metrics/types/Window.d.mts +6 -0
  82. package/dist/esm/api/resources/metrics/types/Window.mjs +2 -0
  83. package/dist/esm/api/resources/metrics/types/index.d.mts +6 -0
  84. package/dist/esm/api/resources/metrics/types/index.mjs +6 -0
  85. package/dist/esm/api/resources/pods/resources/metrics/client/Client.d.mts +28 -0
  86. package/dist/esm/api/resources/pods/resources/metrics/client/Client.mjs +98 -0
  87. package/dist/esm/api/resources/pods/resources/metrics/client/requests/QueryRatesRequest.d.mts +14 -0
  88. package/dist/esm/api/resources/pods/resources/metrics/client/requests/QueryRatesRequest.mjs +2 -0
  89. package/dist/esm/api/resources/pods/resources/metrics/client/requests/index.d.mts +1 -0
  90. package/dist/esm/api/resources/webhooks/types/UpdateInboxWebhookRequest.d.mts +10 -1
  91. package/dist/esm/api/resources/webhooks/types/UpdatePodWebhookRequest.d.mts +2 -2
  92. package/dist/esm/api/resources/webhooks/types/Webhook.d.mts +11 -0
  93. package/dist/esm/serialization/resources/attachments/types/AttachmentResponse.d.mts +1 -0
  94. package/dist/esm/serialization/resources/attachments/types/AttachmentResponse.mjs +1 -0
  95. package/dist/esm/serialization/resources/metrics/types/QueryRatesResponse.d.mts +9 -0
  96. package/dist/esm/serialization/resources/metrics/types/QueryRatesResponse.mjs +5 -0
  97. package/dist/esm/serialization/resources/metrics/types/RatePeriod.d.mts +7 -0
  98. package/dist/esm/serialization/resources/metrics/types/RatePeriod.mjs +3 -0
  99. package/dist/esm/serialization/resources/metrics/types/RatePoint.d.mts +11 -0
  100. package/dist/esm/serialization/resources/metrics/types/RatePoint.mjs +7 -0
  101. package/dist/esm/serialization/resources/metrics/types/RateType.d.mts +7 -0
  102. package/dist/esm/serialization/resources/metrics/types/RateType.mjs +3 -0
  103. package/dist/esm/serialization/resources/metrics/types/RateTypes.d.mts +8 -0
  104. package/dist/esm/serialization/resources/metrics/types/RateTypes.mjs +4 -0
  105. package/dist/esm/serialization/resources/metrics/types/Window.d.mts +7 -0
  106. package/dist/esm/serialization/resources/metrics/types/Window.mjs +3 -0
  107. package/dist/esm/serialization/resources/metrics/types/index.d.mts +6 -0
  108. package/dist/esm/serialization/resources/metrics/types/index.mjs +6 -0
  109. package/dist/esm/serialization/resources/webhooks/types/UpdateInboxWebhookRequest.d.mts +1 -0
  110. package/dist/esm/serialization/resources/webhooks/types/UpdateInboxWebhookRequest.mjs +1 -0
  111. package/dist/esm/serialization/resources/webhooks/types/Webhook.d.mts +2 -0
  112. package/dist/esm/serialization/resources/webhooks/types/Webhook.mjs +2 -0
  113. package/dist/esm/version.d.mts +1 -1
  114. package/dist/esm/version.mjs +1 -1
  115. package/package.json +1 -1
  116. package/reference.md +248 -0
@@ -0,0 +1,14 @@
1
+ import type * as AgentMail from "../../../../../../index.mjs";
2
+ /**
3
+ * @example
4
+ * {}
5
+ */
6
+ export interface QueryRatesRequest {
7
+ rateTypes?: AgentMail.RateTypes;
8
+ start?: AgentMail.Start;
9
+ end?: AgentMail.End;
10
+ period?: AgentMail.RatePeriod;
11
+ window?: AgentMail.Window;
12
+ limit?: AgentMail.MetricLimit;
13
+ descending?: AgentMail.Descending;
14
+ }
@@ -0,0 +1,2 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ export {};
@@ -1,2 +1,3 @@
1
1
  export type { QueryEventsRequest } from "./QueryEventsRequest.mjs";
2
+ export type { QueryRatesRequest } from "./QueryRatesRequest.mjs";
2
3
  export type { QueryUsageRequest } from "./QueryUsageRequest.mjs";
@@ -1,13 +1,13 @@
1
1
  import type * as AgentMail from "../../../index.mjs";
2
2
  /**
3
- * S3 presigned URL to download the raw .eml file.
3
+ * CloudFront signed URL to download the raw .eml file.
4
4
  */
5
5
  export interface RawMessageResponse {
6
6
  /** ID of the message. */
7
7
  messageId: AgentMail.MessageId;
8
8
  /** Size of the raw message in bytes. */
9
9
  size: AgentMail.MessageSize;
10
- /** S3 presigned URL to download the raw message. Expires at expires_at. */
10
+ /** CloudFront signed URL to download the raw message. Expires at expires_at. */
11
11
  downloadUrl: string;
12
12
  /** Time at which the download URL expires. */
13
13
  expiresAt: Date;
@@ -49,4 +49,32 @@ export declare class MetricsClient {
49
49
  */
50
50
  queryUsage(request?: AgentMail.QueryUsageRequest, requestOptions?: MetricsClient.RequestOptions): core.HttpResponsePromise<AgentMail.QueryUsageResponse>;
51
51
  private __queryUsage;
52
+ /**
53
+ * Rolling bounce and complaint rates for the organization. At each
54
+ * `period` grid point, the bounced (or complained) messages over the
55
+ * preceding `window` divided by the messages sent over the same window,
56
+ * with the send count alongside so you can see the volume behind
57
+ * it. This is the number AgentMail's account moderation acts on: a
58
+ * warning at a 5% bounce rate and suspension at 10%, evaluated over a
59
+ * rolling 24 hours once at least 1,000 messages were sent in that
60
+ * window. Defaults to the rolling 24-hour rate sampled hourly over the
61
+ * last day; `start` must be within the last 90 days, `window` must be a
62
+ * whole multiple of `period`, and the range plus window divided by
63
+ * `period` must not exceed 1000 buckets.
64
+ *
65
+ * **CLI:**
66
+ * ```bash
67
+ * agentmail metrics query-rates
68
+ * ```
69
+ *
70
+ * @param {AgentMail.QueryRatesRequest} request
71
+ * @param {MetricsClient.RequestOptions} requestOptions - Request-specific configuration.
72
+ *
73
+ * @throws {@link AgentMail.ValidationError}
74
+ *
75
+ * @example
76
+ * await client.metrics.queryRates()
77
+ */
78
+ queryRates(request?: AgentMail.QueryRatesRequest, requestOptions?: MetricsClient.RequestOptions): core.HttpResponsePromise<AgentMail.QueryRatesResponse>;
79
+ private __queryRates;
52
80
  }
@@ -198,4 +198,102 @@ export class MetricsClient {
198
198
  return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v0/metrics/usage");
199
199
  });
200
200
  }
201
+ /**
202
+ * Rolling bounce and complaint rates for the organization. At each
203
+ * `period` grid point, the bounced (or complained) messages over the
204
+ * preceding `window` divided by the messages sent over the same window,
205
+ * with the send count alongside so you can see the volume behind
206
+ * it. This is the number AgentMail's account moderation acts on: a
207
+ * warning at a 5% bounce rate and suspension at 10%, evaluated over a
208
+ * rolling 24 hours once at least 1,000 messages were sent in that
209
+ * window. Defaults to the rolling 24-hour rate sampled hourly over the
210
+ * last day; `start` must be within the last 90 days, `window` must be a
211
+ * whole multiple of `period`, and the range plus window divided by
212
+ * `period` must not exceed 1000 buckets.
213
+ *
214
+ * **CLI:**
215
+ * ```bash
216
+ * agentmail metrics query-rates
217
+ * ```
218
+ *
219
+ * @param {AgentMail.QueryRatesRequest} request
220
+ * @param {MetricsClient.RequestOptions} requestOptions - Request-specific configuration.
221
+ *
222
+ * @throws {@link AgentMail.ValidationError}
223
+ *
224
+ * @example
225
+ * await client.metrics.queryRates()
226
+ */
227
+ queryRates(request = {}, requestOptions) {
228
+ return core.HttpResponsePromise.fromPromise(this.__queryRates(request, requestOptions));
229
+ }
230
+ __queryRates() {
231
+ return __awaiter(this, arguments, void 0, function* (request = {}, requestOptions) {
232
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
233
+ const { rateTypes, start, end, period, window, limit, descending } = request;
234
+ const _queryParams = {
235
+ rate_types: rateTypes != null
236
+ ? toJson(serializers.RateTypes.jsonOrThrow(rateTypes, {
237
+ unrecognizedObjectKeys: "strip",
238
+ omitUndefined: true,
239
+ }))
240
+ : undefined,
241
+ start: start != null
242
+ ? serializers.Start.jsonOrThrow(start, { unrecognizedObjectKeys: "strip", omitUndefined: true })
243
+ : undefined,
244
+ end: end != null
245
+ ? serializers.End.jsonOrThrow(end, { unrecognizedObjectKeys: "strip", omitUndefined: true })
246
+ : undefined,
247
+ period,
248
+ window,
249
+ limit,
250
+ descending,
251
+ };
252
+ const _authRequest = yield this._options.authProvider.getAuthRequest();
253
+ const _headers = mergeHeaders(_authRequest.headers, (_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
254
+ const _response = yield core.fetcher({
255
+ 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)
256
+ .http, "/v0/metrics/rates"),
257
+ method: "GET",
258
+ headers: _headers,
259
+ queryParameters: Object.assign(Object.assign({}, _queryParams), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams),
260
+ 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,
261
+ 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,
262
+ abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
263
+ fetchFn: (_j = this._options) === null || _j === void 0 ? void 0 : _j.fetch,
264
+ logging: this._options.logging,
265
+ });
266
+ if (_response.ok) {
267
+ return {
268
+ data: serializers.QueryRatesResponse.parseOrThrow(_response.body, {
269
+ unrecognizedObjectKeys: "passthrough",
270
+ allowUnrecognizedUnionMembers: true,
271
+ allowUnrecognizedEnumValues: true,
272
+ skipValidation: true,
273
+ breadcrumbsPrefix: ["response"],
274
+ }),
275
+ rawResponse: _response.rawResponse,
276
+ };
277
+ }
278
+ if (_response.error.reason === "status-code") {
279
+ switch (_response.error.statusCode) {
280
+ case 400:
281
+ throw new AgentMail.ValidationError(serializers.ValidationErrorResponse.parseOrThrow(_response.error.body, {
282
+ unrecognizedObjectKeys: "passthrough",
283
+ allowUnrecognizedUnionMembers: true,
284
+ allowUnrecognizedEnumValues: true,
285
+ skipValidation: true,
286
+ breadcrumbsPrefix: ["response"],
287
+ }), _response.rawResponse);
288
+ default:
289
+ throw new errors.AgentMailError({
290
+ statusCode: _response.error.statusCode,
291
+ body: _response.error.body,
292
+ rawResponse: _response.rawResponse,
293
+ });
294
+ }
295
+ }
296
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v0/metrics/rates");
297
+ });
298
+ }
201
299
  }
@@ -0,0 +1,14 @@
1
+ import type * as AgentMail from "../../../../index.mjs";
2
+ /**
3
+ * @example
4
+ * {}
5
+ */
6
+ export interface QueryRatesRequest {
7
+ rateTypes?: AgentMail.RateTypes;
8
+ start?: AgentMail.Start;
9
+ end?: AgentMail.End;
10
+ period?: AgentMail.RatePeriod;
11
+ window?: AgentMail.Window;
12
+ limit?: AgentMail.MetricLimit;
13
+ descending?: AgentMail.Descending;
14
+ }
@@ -0,0 +1,2 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ export {};
@@ -1,2 +1,3 @@
1
1
  export type { QueryEventsRequest } from "./QueryEventsRequest.mjs";
2
+ export type { QueryRatesRequest } from "./QueryRatesRequest.mjs";
2
3
  export type { QueryUsageRequest } from "./QueryUsageRequest.mjs";
@@ -0,0 +1,5 @@
1
+ import type * as AgentMail from "../../../index.mjs";
2
+ /**
3
+ * Rate series grouped by rate type.
4
+ */
5
+ export type QueryRatesResponse = Partial<Record<AgentMail.RateType, AgentMail.RatePoint[]>>;
@@ -0,0 +1,2 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ export {};
@@ -0,0 +1,5 @@
1
+ /**
2
+ * How often a point is sampled, as a whole number of seconds between 60
3
+ * and 86400. Defaults to 3600 (one point per hour).
4
+ */
5
+ export type RatePeriod = number;
@@ -0,0 +1,2 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ export {};
@@ -0,0 +1,12 @@
1
+ export interface RatePoint {
2
+ /** End of the window the point covers; the window is the `window` seconds before it. */
3
+ timestamp: Date;
4
+ /**
5
+ * Bounced or complained messages divided by messages sent over the
6
+ * window, as a fraction (0.05 is 5%). Null when nothing was sent in
7
+ * the window.
8
+ */
9
+ rate?: number;
10
+ /** Messages sent in the window, counted per recipient. */
11
+ sent: number;
12
+ }
@@ -0,0 +1,2 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ export {};
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Type of rate. `bounce` is bounced messages divided by messages sent,
3
+ * counting permanent and transient bounces; `complaint` is spam complaints
4
+ * divided by messages sent.
5
+ */
6
+ export declare const RateType: {
7
+ readonly Bounce: "bounce";
8
+ readonly Complaint: "complaint";
9
+ };
10
+ export type RateType = (typeof RateType)[keyof typeof RateType];
@@ -0,0 +1,10 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ /**
3
+ * Type of rate. `bounce` is bounced messages divided by messages sent,
4
+ * counting permanent and transient bounces; `complaint` is spam complaints
5
+ * divided by messages sent.
6
+ */
7
+ export const RateType = {
8
+ Bounce: "bounce",
9
+ Complaint: "complaint",
10
+ };
@@ -0,0 +1,5 @@
1
+ import type * as AgentMail from "../../../index.mjs";
2
+ /**
3
+ * List of rate types to query. Omit to query both.
4
+ */
5
+ export type RateTypes = AgentMail.RateType[];
@@ -0,0 +1,2 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * How far back each point looks, as a whole number of seconds. Must be a
3
+ * whole multiple of `period`, at most 30 days (2592000). Defaults to 86400
4
+ * (a rolling 24-hour rate).
5
+ */
6
+ export type Window = number;
@@ -0,0 +1,2 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ export {};
@@ -6,8 +6,14 @@ export * from "./MetricEventTypes.mjs";
6
6
  export * from "./MetricLimit.mjs";
7
7
  export * from "./Period.mjs";
8
8
  export * from "./QueryMetricsResponse.mjs";
9
+ export * from "./QueryRatesResponse.mjs";
9
10
  export * from "./QueryUsageResponse.mjs";
11
+ export * from "./RatePeriod.mjs";
12
+ export * from "./RatePoint.mjs";
13
+ export * from "./RateType.mjs";
14
+ export * from "./RateTypes.mjs";
10
15
  export * from "./Start.mjs";
11
16
  export * from "./UsagePoint.mjs";
12
17
  export * from "./UsageType.mjs";
13
18
  export * from "./UsageTypes.mjs";
19
+ export * from "./Window.mjs";
@@ -6,8 +6,14 @@ export * from "./MetricEventTypes.mjs";
6
6
  export * from "./MetricLimit.mjs";
7
7
  export * from "./Period.mjs";
8
8
  export * from "./QueryMetricsResponse.mjs";
9
+ export * from "./QueryRatesResponse.mjs";
9
10
  export * from "./QueryUsageResponse.mjs";
11
+ export * from "./RatePeriod.mjs";
12
+ export * from "./RatePoint.mjs";
13
+ export * from "./RateType.mjs";
14
+ export * from "./RateTypes.mjs";
10
15
  export * from "./Start.mjs";
11
16
  export * from "./UsagePoint.mjs";
12
17
  export * from "./UsageType.mjs";
13
18
  export * from "./UsageTypes.mjs";
19
+ export * from "./Window.mjs";
@@ -53,4 +53,32 @@ export declare class MetricsClient {
53
53
  */
54
54
  queryUsage(pod_id: AgentMail.pods.PodId, request?: AgentMail.pods.QueryUsageRequest, requestOptions?: MetricsClient.RequestOptions): core.HttpResponsePromise<AgentMail.QueryUsageResponse>;
55
55
  private __queryUsage;
56
+ /**
57
+ * Rolling bounce and complaint rates for the pod. At each `period` grid
58
+ * point, the bounced (or complained) messages over the preceding
59
+ * `window` divided by the messages sent over the same window, with the
60
+ * send count alongside. Account moderation evaluates the organization-wide
61
+ * rate, so use the organization endpoint to see the number it acts on;
62
+ * the pod view shows which pods contribute. Defaults to the rolling
63
+ * 24-hour rate sampled hourly over the last day; `start` must be within
64
+ * the last 90 days, `window` must be a whole multiple of `period`, and
65
+ * the range plus window divided by `period` must not exceed 1000
66
+ * buckets.
67
+ *
68
+ * **CLI:**
69
+ * ```bash
70
+ * agentmail pods metrics query-rates --pod-id <pod_id>
71
+ * ```
72
+ *
73
+ * @param {AgentMail.pods.PodId} pod_id
74
+ * @param {AgentMail.pods.QueryRatesRequest} request
75
+ * @param {MetricsClient.RequestOptions} requestOptions - Request-specific configuration.
76
+ *
77
+ * @throws {@link AgentMail.ValidationError}
78
+ *
79
+ * @example
80
+ * await client.pods.metrics.queryRates("pod_id")
81
+ */
82
+ queryRates(pod_id: AgentMail.pods.PodId, request?: AgentMail.pods.QueryRatesRequest, requestOptions?: MetricsClient.RequestOptions): core.HttpResponsePromise<AgentMail.QueryRatesResponse>;
83
+ private __queryRates;
56
84
  }
@@ -202,4 +202,102 @@ export class MetricsClient {
202
202
  return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v0/pods/{pod_id}/metrics/usage");
203
203
  });
204
204
  }
205
+ /**
206
+ * Rolling bounce and complaint rates for the pod. At each `period` grid
207
+ * point, the bounced (or complained) messages over the preceding
208
+ * `window` divided by the messages sent over the same window, with the
209
+ * send count alongside. Account moderation evaluates the organization-wide
210
+ * rate, so use the organization endpoint to see the number it acts on;
211
+ * the pod view shows which pods contribute. Defaults to the rolling
212
+ * 24-hour rate sampled hourly over the last day; `start` must be within
213
+ * the last 90 days, `window` must be a whole multiple of `period`, and
214
+ * the range plus window divided by `period` must not exceed 1000
215
+ * buckets.
216
+ *
217
+ * **CLI:**
218
+ * ```bash
219
+ * agentmail pods metrics query-rates --pod-id <pod_id>
220
+ * ```
221
+ *
222
+ * @param {AgentMail.pods.PodId} pod_id
223
+ * @param {AgentMail.pods.QueryRatesRequest} request
224
+ * @param {MetricsClient.RequestOptions} requestOptions - Request-specific configuration.
225
+ *
226
+ * @throws {@link AgentMail.ValidationError}
227
+ *
228
+ * @example
229
+ * await client.pods.metrics.queryRates("pod_id")
230
+ */
231
+ queryRates(pod_id, request = {}, requestOptions) {
232
+ return core.HttpResponsePromise.fromPromise(this.__queryRates(pod_id, request, requestOptions));
233
+ }
234
+ __queryRates(pod_id_1) {
235
+ return __awaiter(this, arguments, void 0, function* (pod_id, request = {}, requestOptions) {
236
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
237
+ const { rateTypes, start, end, period, window, limit, descending } = request;
238
+ const _queryParams = {
239
+ rate_types: rateTypes != null
240
+ ? toJson(serializers.RateTypes.jsonOrThrow(rateTypes, {
241
+ unrecognizedObjectKeys: "strip",
242
+ omitUndefined: true,
243
+ }))
244
+ : undefined,
245
+ start: start != null
246
+ ? serializers.Start.jsonOrThrow(start, { unrecognizedObjectKeys: "strip", omitUndefined: true })
247
+ : undefined,
248
+ end: end != null
249
+ ? serializers.End.jsonOrThrow(end, { unrecognizedObjectKeys: "strip", omitUndefined: true })
250
+ : undefined,
251
+ period,
252
+ window,
253
+ limit,
254
+ descending,
255
+ };
256
+ const _authRequest = yield this._options.authProvider.getAuthRequest();
257
+ const _headers = mergeHeaders(_authRequest.headers, (_a = this._options) === null || _a === void 0 ? void 0 : _a.headers, requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers);
258
+ const _response = yield core.fetcher({
259
+ 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)
260
+ .http, `/v0/pods/${core.url.encodePathParam(serializers.pods.PodId.jsonOrThrow(pod_id, { omitUndefined: true }))}/metrics/rates`),
261
+ method: "GET",
262
+ headers: _headers,
263
+ queryParameters: Object.assign(Object.assign({}, _queryParams), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams),
264
+ 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,
265
+ 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,
266
+ abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
267
+ fetchFn: (_j = this._options) === null || _j === void 0 ? void 0 : _j.fetch,
268
+ logging: this._options.logging,
269
+ });
270
+ if (_response.ok) {
271
+ return {
272
+ data: serializers.QueryRatesResponse.parseOrThrow(_response.body, {
273
+ unrecognizedObjectKeys: "passthrough",
274
+ allowUnrecognizedUnionMembers: true,
275
+ allowUnrecognizedEnumValues: true,
276
+ skipValidation: true,
277
+ breadcrumbsPrefix: ["response"],
278
+ }),
279
+ rawResponse: _response.rawResponse,
280
+ };
281
+ }
282
+ if (_response.error.reason === "status-code") {
283
+ switch (_response.error.statusCode) {
284
+ case 400:
285
+ throw new AgentMail.ValidationError(serializers.ValidationErrorResponse.parseOrThrow(_response.error.body, {
286
+ unrecognizedObjectKeys: "passthrough",
287
+ allowUnrecognizedUnionMembers: true,
288
+ allowUnrecognizedEnumValues: true,
289
+ skipValidation: true,
290
+ breadcrumbsPrefix: ["response"],
291
+ }), _response.rawResponse);
292
+ default:
293
+ throw new errors.AgentMailError({
294
+ statusCode: _response.error.statusCode,
295
+ body: _response.error.body,
296
+ rawResponse: _response.rawResponse,
297
+ });
298
+ }
299
+ }
300
+ return handleNonStatusCodeError(_response.error, _response.rawResponse, "GET", "/v0/pods/{pod_id}/metrics/rates");
301
+ });
302
+ }
205
303
  }
@@ -0,0 +1,14 @@
1
+ import type * as AgentMail from "../../../../../../index.mjs";
2
+ /**
3
+ * @example
4
+ * {}
5
+ */
6
+ export interface QueryRatesRequest {
7
+ rateTypes?: AgentMail.RateTypes;
8
+ start?: AgentMail.Start;
9
+ end?: AgentMail.End;
10
+ period?: AgentMail.RatePeriod;
11
+ window?: AgentMail.Window;
12
+ limit?: AgentMail.MetricLimit;
13
+ descending?: AgentMail.Descending;
14
+ }
@@ -0,0 +1,2 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ export {};
@@ -1,2 +1,3 @@
1
1
  export type { QueryEventsRequest } from "./QueryEventsRequest.mjs";
2
+ export type { QueryRatesRequest } from "./QueryRatesRequest.mjs";
2
3
  export type { QueryUsageRequest } from "./QueryUsageRequest.mjs";
@@ -1,7 +1,16 @@
1
1
  import type * as AgentMail from "../../../index.mjs";
2
2
  /**
3
- * Update an inbox-scoped webhook. It is fixed to its inbox, so only `event_types` can change.
3
+ * Update an inbox-scoped webhook. It is fixed to its inbox, so only `event_types` and `enabled` can
4
+ * change.
4
5
  */
5
6
  export interface UpdateInboxWebhookRequest {
6
7
  eventTypes?: AgentMail.webhooks.UpdateWebhookEventTypes;
8
+ /**
9
+ * Set to true to re-enable a webhook that was disabled after repeated failed deliveries, or false
10
+ * to disable it. Events that occurred while the webhook was disabled are not redelivered.
11
+ * Re-enabling a webhook subscribed to `message.received.spam`, `message.received.blocked`, or
12
+ * `message.received.unauthenticated` (or to every event type, with no filter) requires the
13
+ * matching label permissions on the API key.
14
+ */
15
+ enabled?: boolean;
7
16
  }
@@ -1,7 +1,7 @@
1
1
  import type * as AgentMail from "../../../index.mjs";
2
2
  /**
3
- * Update a pod-scoped webhook. You can adjust which inboxes within the pod it listens to and replace
4
- * its `event_types`, but not the pod scope itself.
3
+ * Update a pod-scoped webhook. You can adjust which inboxes within the pod it listens to, replace
4
+ * its `event_types`, and set `enabled`, but not change the pod scope itself.
5
5
  */
6
6
  export interface UpdatePodWebhookRequest extends AgentMail.webhooks.UpdateInboxWebhookRequest {
7
7
  /**
@@ -5,6 +5,17 @@ export interface Webhook {
5
5
  eventTypes?: AgentMail.EventTypes;
6
6
  podIds?: AgentMail.PodIds;
7
7
  inboxIds?: AgentMail.InboxIds;
8
+ /**
9
+ * ID of the pod the webhook belongs to: the pod it was created in, or the pod of the inbox it
10
+ * belongs to. Absent for an organization webhook and on some inbox webhooks. This is not the
11
+ * list of pods it receives events for; see `pod_ids`.
12
+ */
13
+ podId?: string;
14
+ /**
15
+ * ID of the inbox the webhook belongs to, if it was created for an inbox. This is not the list
16
+ * of inboxes it receives events for; see `inbox_ids`.
17
+ */
18
+ inboxId?: string;
8
19
  /** Secret for webhook signature verification. */
9
20
  secret: string;
10
21
  /** Webhook is enabled. */
@@ -17,6 +17,7 @@ export declare namespace AttachmentResponse {
17
17
  content_disposition?: AttachmentContentDisposition.Raw | null;
18
18
  content_id?: AttachmentContentId.Raw | null;
19
19
  download_url: string;
20
+ text_url?: string | null;
20
21
  expires_at: string;
21
22
  }
22
23
  }
@@ -14,5 +14,6 @@ export const AttachmentResponse = core.serialization.object({
14
14
  contentDisposition: core.serialization.property("content_disposition", AttachmentContentDisposition.optional()),
15
15
  contentId: core.serialization.property("content_id", AttachmentContentId.optional()),
16
16
  downloadUrl: core.serialization.property("download_url", core.serialization.string()),
17
+ textUrl: core.serialization.property("text_url", core.serialization.string().optional()),
17
18
  expiresAt: core.serialization.property("expires_at", core.serialization.date()),
18
19
  });
@@ -0,0 +1,9 @@
1
+ import type * as AgentMail from "../../../../api/index.mjs";
2
+ import * as core from "../../../../core/index.mjs";
3
+ import type * as serializers from "../../../index.mjs";
4
+ import { RatePoint } from "./RatePoint.mjs";
5
+ import { RateType } from "./RateType.mjs";
6
+ export declare const QueryRatesResponse: core.serialization.Schema<serializers.QueryRatesResponse.Raw, AgentMail.QueryRatesResponse>;
7
+ export declare namespace QueryRatesResponse {
8
+ type Raw = Record<RateType.Raw, RatePoint.Raw[] | null | undefined>;
9
+ }
@@ -0,0 +1,5 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ import * as core from "../../../../core/index.mjs";
3
+ import { RatePoint } from "./RatePoint.mjs";
4
+ import { RateType } from "./RateType.mjs";
5
+ export const QueryRatesResponse = core.serialization.partialRecord(RateType, core.serialization.list(RatePoint).optional());
@@ -0,0 +1,7 @@
1
+ import type * as AgentMail from "../../../../api/index.mjs";
2
+ import * as core from "../../../../core/index.mjs";
3
+ import type * as serializers from "../../../index.mjs";
4
+ export declare const RatePeriod: core.serialization.Schema<serializers.RatePeriod.Raw, AgentMail.RatePeriod>;
5
+ export declare namespace RatePeriod {
6
+ type Raw = number;
7
+ }
@@ -0,0 +1,3 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ import * as core from "../../../../core/index.mjs";
3
+ export const RatePeriod = core.serialization.number();
@@ -0,0 +1,11 @@
1
+ import type * as AgentMail from "../../../../api/index.mjs";
2
+ import * as core from "../../../../core/index.mjs";
3
+ import type * as serializers from "../../../index.mjs";
4
+ export declare const RatePoint: core.serialization.ObjectSchema<serializers.RatePoint.Raw, AgentMail.RatePoint>;
5
+ export declare namespace RatePoint {
6
+ interface Raw {
7
+ timestamp: string;
8
+ rate?: number | null;
9
+ sent: number;
10
+ }
11
+ }
@@ -0,0 +1,7 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ import * as core from "../../../../core/index.mjs";
3
+ export const RatePoint = core.serialization.object({
4
+ timestamp: core.serialization.date(),
5
+ rate: core.serialization.number().optional(),
6
+ sent: core.serialization.number(),
7
+ });
@@ -0,0 +1,7 @@
1
+ import type * as AgentMail from "../../../../api/index.mjs";
2
+ import * as core from "../../../../core/index.mjs";
3
+ import type * as serializers from "../../../index.mjs";
4
+ export declare const RateType: core.serialization.Schema<serializers.RateType.Raw, AgentMail.RateType>;
5
+ export declare namespace RateType {
6
+ type Raw = "bounce" | "complaint";
7
+ }
@@ -0,0 +1,3 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ import * as core from "../../../../core/index.mjs";
3
+ export const RateType = core.serialization.enum_(["bounce", "complaint"]);
@@ -0,0 +1,8 @@
1
+ import type * as AgentMail from "../../../../api/index.mjs";
2
+ import * as core from "../../../../core/index.mjs";
3
+ import type * as serializers from "../../../index.mjs";
4
+ import { RateType } from "./RateType.mjs";
5
+ export declare const RateTypes: core.serialization.Schema<serializers.RateTypes.Raw, AgentMail.RateTypes>;
6
+ export declare namespace RateTypes {
7
+ type Raw = RateType.Raw[];
8
+ }
@@ -0,0 +1,4 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ import * as core from "../../../../core/index.mjs";
3
+ import { RateType } from "./RateType.mjs";
4
+ export const RateTypes = core.serialization.list(RateType);