agentmail 0.4.13 → 0.4.15

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 (247) hide show
  1. package/README.md +46 -14
  2. package/dist/cjs/BaseClient.js +2 -2
  3. package/dist/cjs/Client.d.ts +12 -0
  4. package/dist/cjs/Client.js +74 -0
  5. package/dist/cjs/api/errors/UnprocessableError.d.ts +6 -0
  6. package/dist/cjs/api/errors/UnprocessableError.js +54 -0
  7. package/dist/cjs/api/errors/index.d.ts +1 -0
  8. package/dist/cjs/api/errors/index.js +1 -0
  9. package/dist/cjs/api/resources/agent/exports.d.ts +2 -0
  10. package/dist/cjs/api/resources/agent/exports.js +21 -0
  11. package/dist/cjs/api/resources/apiKeys/exports.d.ts +2 -0
  12. package/dist/cjs/api/resources/apiKeys/exports.js +21 -0
  13. package/dist/cjs/api/resources/attachments/exports.d.ts +1 -0
  14. package/dist/cjs/api/resources/attachments/exports.js +18 -0
  15. package/dist/cjs/api/resources/domains/exports.d.ts +2 -0
  16. package/dist/cjs/api/resources/domains/exports.js +21 -0
  17. package/dist/cjs/api/resources/drafts/exports.d.ts +2 -0
  18. package/dist/cjs/api/resources/drafts/exports.js +21 -0
  19. package/dist/cjs/api/resources/events/exports.d.ts +1 -0
  20. package/dist/cjs/api/resources/events/exports.js +18 -0
  21. package/dist/cjs/api/resources/inboxes/exports.d.ts +3 -0
  22. package/dist/cjs/api/resources/inboxes/exports.js +22 -0
  23. package/dist/cjs/api/resources/inboxes/resources/apiKeys/exports.d.ts +2 -0
  24. package/dist/cjs/api/resources/inboxes/resources/apiKeys/exports.js +21 -0
  25. package/dist/cjs/api/resources/inboxes/resources/drafts/exports.d.ts +2 -0
  26. package/dist/cjs/api/resources/inboxes/resources/drafts/exports.js +21 -0
  27. package/dist/cjs/api/resources/inboxes/resources/lists/exports.d.ts +2 -0
  28. package/dist/cjs/api/resources/inboxes/resources/lists/exports.js +21 -0
  29. package/dist/cjs/api/resources/inboxes/resources/messages/client/Client.d.ts +1 -1
  30. package/dist/cjs/api/resources/inboxes/resources/messages/client/Client.js +1 -1
  31. package/dist/cjs/api/resources/inboxes/resources/messages/exports.d.ts +2 -0
  32. package/dist/cjs/api/resources/inboxes/resources/messages/exports.js +21 -0
  33. package/dist/cjs/api/resources/inboxes/resources/metrics/exports.d.ts +2 -0
  34. package/dist/cjs/api/resources/inboxes/resources/metrics/exports.js +21 -0
  35. package/dist/cjs/api/resources/inboxes/resources/threads/client/Client.d.ts +17 -0
  36. package/dist/cjs/api/resources/inboxes/resources/threads/client/Client.js +90 -0
  37. package/dist/cjs/api/resources/inboxes/resources/threads/exports.d.ts +2 -0
  38. package/dist/cjs/api/resources/inboxes/resources/threads/exports.js +21 -0
  39. package/dist/cjs/api/resources/lists/exports.d.ts +2 -0
  40. package/dist/cjs/api/resources/lists/exports.js +21 -0
  41. package/dist/cjs/api/resources/messages/exports.d.ts +1 -0
  42. package/dist/cjs/api/resources/messages/exports.js +18 -0
  43. package/dist/cjs/api/resources/messages/types/UpdateMessageResponse.d.ts +5 -0
  44. package/dist/cjs/api/resources/messages/types/UpdateMessageResponse.js +3 -0
  45. package/dist/cjs/api/resources/messages/types/index.d.ts +1 -0
  46. package/dist/cjs/api/resources/messages/types/index.js +1 -0
  47. package/dist/cjs/api/resources/metrics/exports.d.ts +2 -0
  48. package/dist/cjs/api/resources/metrics/exports.js +21 -0
  49. package/dist/cjs/api/resources/metrics/types/QueryMetricsResponse.d.ts +1 -1
  50. package/dist/cjs/api/resources/organizations/exports.d.ts +2 -0
  51. package/dist/cjs/api/resources/organizations/exports.js +21 -0
  52. package/dist/cjs/api/resources/pods/exports.d.ts +3 -0
  53. package/dist/cjs/api/resources/pods/exports.js +22 -0
  54. package/dist/cjs/api/resources/pods/resources/apiKeys/exports.d.ts +2 -0
  55. package/dist/cjs/api/resources/pods/resources/apiKeys/exports.js +21 -0
  56. package/dist/cjs/api/resources/pods/resources/domains/exports.d.ts +2 -0
  57. package/dist/cjs/api/resources/pods/resources/domains/exports.js +21 -0
  58. package/dist/cjs/api/resources/pods/resources/drafts/exports.d.ts +2 -0
  59. package/dist/cjs/api/resources/pods/resources/drafts/exports.js +21 -0
  60. package/dist/cjs/api/resources/pods/resources/inboxes/exports.d.ts +2 -0
  61. package/dist/cjs/api/resources/pods/resources/inboxes/exports.js +21 -0
  62. package/dist/cjs/api/resources/pods/resources/lists/exports.d.ts +2 -0
  63. package/dist/cjs/api/resources/pods/resources/lists/exports.js +21 -0
  64. package/dist/cjs/api/resources/pods/resources/metrics/exports.d.ts +2 -0
  65. package/dist/cjs/api/resources/pods/resources/metrics/exports.js +21 -0
  66. package/dist/cjs/api/resources/pods/resources/threads/client/Client.d.ts +17 -0
  67. package/dist/cjs/api/resources/pods/resources/threads/client/Client.js +90 -0
  68. package/dist/cjs/api/resources/pods/resources/threads/exports.d.ts +2 -0
  69. package/dist/cjs/api/resources/pods/resources/threads/exports.js +21 -0
  70. package/dist/cjs/api/resources/threads/client/Client.d.ts +16 -0
  71. package/dist/cjs/api/resources/threads/client/Client.js +89 -0
  72. package/dist/cjs/api/resources/threads/exports.d.ts +2 -0
  73. package/dist/cjs/api/resources/threads/exports.js +21 -0
  74. package/dist/cjs/api/resources/threads/types/UpdateThreadRequest.d.ts +6 -0
  75. package/dist/cjs/api/resources/threads/types/UpdateThreadRequest.js +3 -0
  76. package/dist/cjs/api/resources/threads/types/UpdateThreadResponse.d.ts +5 -0
  77. package/dist/cjs/api/resources/threads/types/UpdateThreadResponse.js +3 -0
  78. package/dist/cjs/api/resources/threads/types/index.d.ts +2 -0
  79. package/dist/cjs/api/resources/threads/types/index.js +2 -0
  80. package/dist/cjs/api/resources/webhooks/exports.d.ts +3 -0
  81. package/dist/cjs/api/resources/webhooks/exports.js +22 -0
  82. package/dist/cjs/api/resources/webhooks/resources/events/exports.d.ts +1 -0
  83. package/dist/cjs/api/resources/webhooks/resources/events/exports.js +18 -0
  84. package/dist/cjs/api/resources/websockets/client/Client.d.ts +6 -0
  85. package/dist/cjs/api/resources/websockets/client/Client.js +8 -3
  86. package/dist/cjs/api/resources/websockets/client/Socket.d.ts +2 -2
  87. package/dist/cjs/api/resources/websockets/client/Socket.js +2 -2
  88. package/dist/cjs/api/resources/websockets/exports.d.ts +3 -0
  89. package/dist/cjs/api/resources/websockets/exports.js +23 -0
  90. package/dist/cjs/core/fetcher/BinaryResponse.d.ts +1 -1
  91. package/dist/cjs/core/fetcher/Fetcher.js +8 -2
  92. package/dist/cjs/core/fetcher/index.d.ts +2 -0
  93. package/dist/cjs/core/fetcher/index.js +3 -1
  94. package/dist/cjs/core/fetcher/makePassthroughRequest.d.ts +49 -0
  95. package/dist/cjs/core/fetcher/makePassthroughRequest.js +135 -0
  96. package/dist/cjs/core/fetcher/makeRequest.d.ts +6 -1
  97. package/dist/cjs/core/fetcher/makeRequest.js +30 -9
  98. package/dist/cjs/core/runtime/runtime.js +8 -7
  99. package/dist/cjs/core/schemas/builders/list/list.js +12 -17
  100. package/dist/cjs/core/schemas/builders/object/object.js +102 -40
  101. package/dist/cjs/core/schemas/builders/object-like/getObjectLikeUtils.js +10 -3
  102. package/dist/cjs/core/schemas/builders/record/index.d.ts +2 -2
  103. package/dist/cjs/core/schemas/builders/record/index.js +2 -1
  104. package/dist/cjs/core/schemas/builders/record/record.d.ts +2 -1
  105. package/dist/cjs/core/schemas/builders/record/record.js +63 -25
  106. package/dist/cjs/core/schemas/builders/record/types.d.ts +2 -0
  107. package/dist/cjs/core/schemas/builders/union/union.js +9 -12
  108. package/dist/cjs/core/schemas/utils/isPlainObject.js +4 -6
  109. package/dist/cjs/core/websocket/ws.d.ts +14 -2
  110. package/dist/cjs/core/websocket/ws.js +51 -7
  111. package/dist/cjs/serialization/resources/messages/types/UpdateMessageResponse.d.ts +12 -0
  112. package/dist/cjs/serialization/resources/messages/types/UpdateMessageResponse.js +44 -0
  113. package/dist/cjs/serialization/resources/messages/types/index.d.ts +1 -0
  114. package/dist/cjs/serialization/resources/messages/types/index.js +1 -0
  115. package/dist/cjs/serialization/resources/metrics/types/QueryMetricsResponse.js +1 -1
  116. package/dist/cjs/serialization/resources/threads/types/UpdateThreadRequest.d.ts +10 -0
  117. package/dist/cjs/serialization/resources/threads/types/UpdateThreadRequest.js +42 -0
  118. package/dist/cjs/serialization/resources/threads/types/UpdateThreadResponse.d.ts +12 -0
  119. package/dist/cjs/serialization/resources/threads/types/UpdateThreadResponse.js +44 -0
  120. package/dist/cjs/serialization/resources/threads/types/index.d.ts +2 -0
  121. package/dist/cjs/serialization/resources/threads/types/index.js +2 -0
  122. package/dist/cjs/version.d.ts +1 -1
  123. package/dist/cjs/version.js +1 -1
  124. package/dist/esm/BaseClient.mjs +2 -2
  125. package/dist/esm/Client.d.mts +12 -0
  126. package/dist/esm/Client.mjs +41 -0
  127. package/dist/esm/api/errors/UnprocessableError.d.mts +6 -0
  128. package/dist/esm/api/errors/UnprocessableError.mjs +17 -0
  129. package/dist/esm/api/errors/index.d.mts +1 -0
  130. package/dist/esm/api/errors/index.mjs +1 -0
  131. package/dist/esm/api/resources/agent/exports.d.mts +2 -0
  132. package/dist/esm/api/resources/agent/exports.mjs +3 -0
  133. package/dist/esm/api/resources/apiKeys/exports.d.mts +2 -0
  134. package/dist/esm/api/resources/apiKeys/exports.mjs +3 -0
  135. package/dist/esm/api/resources/attachments/exports.d.mts +1 -0
  136. package/dist/esm/api/resources/attachments/exports.mjs +2 -0
  137. package/dist/esm/api/resources/domains/exports.d.mts +2 -0
  138. package/dist/esm/api/resources/domains/exports.mjs +3 -0
  139. package/dist/esm/api/resources/drafts/exports.d.mts +2 -0
  140. package/dist/esm/api/resources/drafts/exports.mjs +3 -0
  141. package/dist/esm/api/resources/events/exports.d.mts +1 -0
  142. package/dist/esm/api/resources/events/exports.mjs +2 -0
  143. package/dist/esm/api/resources/inboxes/exports.d.mts +3 -0
  144. package/dist/esm/api/resources/inboxes/exports.mjs +4 -0
  145. package/dist/esm/api/resources/inboxes/resources/apiKeys/exports.d.mts +2 -0
  146. package/dist/esm/api/resources/inboxes/resources/apiKeys/exports.mjs +3 -0
  147. package/dist/esm/api/resources/inboxes/resources/drafts/exports.d.mts +2 -0
  148. package/dist/esm/api/resources/inboxes/resources/drafts/exports.mjs +3 -0
  149. package/dist/esm/api/resources/inboxes/resources/lists/exports.d.mts +2 -0
  150. package/dist/esm/api/resources/inboxes/resources/lists/exports.mjs +3 -0
  151. package/dist/esm/api/resources/inboxes/resources/messages/client/Client.d.mts +1 -1
  152. package/dist/esm/api/resources/inboxes/resources/messages/client/Client.mjs +1 -1
  153. package/dist/esm/api/resources/inboxes/resources/messages/exports.d.mts +2 -0
  154. package/dist/esm/api/resources/inboxes/resources/messages/exports.mjs +3 -0
  155. package/dist/esm/api/resources/inboxes/resources/metrics/exports.d.mts +2 -0
  156. package/dist/esm/api/resources/inboxes/resources/metrics/exports.mjs +3 -0
  157. package/dist/esm/api/resources/inboxes/resources/threads/client/Client.d.mts +17 -0
  158. package/dist/esm/api/resources/inboxes/resources/threads/client/Client.mjs +90 -0
  159. package/dist/esm/api/resources/inboxes/resources/threads/exports.d.mts +2 -0
  160. package/dist/esm/api/resources/inboxes/resources/threads/exports.mjs +3 -0
  161. package/dist/esm/api/resources/lists/exports.d.mts +2 -0
  162. package/dist/esm/api/resources/lists/exports.mjs +3 -0
  163. package/dist/esm/api/resources/messages/exports.d.mts +1 -0
  164. package/dist/esm/api/resources/messages/exports.mjs +2 -0
  165. package/dist/esm/api/resources/messages/types/UpdateMessageResponse.d.mts +5 -0
  166. package/dist/esm/api/resources/messages/types/UpdateMessageResponse.mjs +2 -0
  167. package/dist/esm/api/resources/messages/types/index.d.mts +1 -0
  168. package/dist/esm/api/resources/messages/types/index.mjs +1 -0
  169. package/dist/esm/api/resources/metrics/exports.d.mts +2 -0
  170. package/dist/esm/api/resources/metrics/exports.mjs +3 -0
  171. package/dist/esm/api/resources/metrics/types/QueryMetricsResponse.d.mts +1 -1
  172. package/dist/esm/api/resources/organizations/exports.d.mts +2 -0
  173. package/dist/esm/api/resources/organizations/exports.mjs +3 -0
  174. package/dist/esm/api/resources/pods/exports.d.mts +3 -0
  175. package/dist/esm/api/resources/pods/exports.mjs +4 -0
  176. package/dist/esm/api/resources/pods/resources/apiKeys/exports.d.mts +2 -0
  177. package/dist/esm/api/resources/pods/resources/apiKeys/exports.mjs +3 -0
  178. package/dist/esm/api/resources/pods/resources/domains/exports.d.mts +2 -0
  179. package/dist/esm/api/resources/pods/resources/domains/exports.mjs +3 -0
  180. package/dist/esm/api/resources/pods/resources/drafts/exports.d.mts +2 -0
  181. package/dist/esm/api/resources/pods/resources/drafts/exports.mjs +3 -0
  182. package/dist/esm/api/resources/pods/resources/inboxes/exports.d.mts +2 -0
  183. package/dist/esm/api/resources/pods/resources/inboxes/exports.mjs +3 -0
  184. package/dist/esm/api/resources/pods/resources/lists/exports.d.mts +2 -0
  185. package/dist/esm/api/resources/pods/resources/lists/exports.mjs +3 -0
  186. package/dist/esm/api/resources/pods/resources/metrics/exports.d.mts +2 -0
  187. package/dist/esm/api/resources/pods/resources/metrics/exports.mjs +3 -0
  188. package/dist/esm/api/resources/pods/resources/threads/client/Client.d.mts +17 -0
  189. package/dist/esm/api/resources/pods/resources/threads/client/Client.mjs +90 -0
  190. package/dist/esm/api/resources/pods/resources/threads/exports.d.mts +2 -0
  191. package/dist/esm/api/resources/pods/resources/threads/exports.mjs +3 -0
  192. package/dist/esm/api/resources/threads/client/Client.d.mts +16 -0
  193. package/dist/esm/api/resources/threads/client/Client.mjs +89 -0
  194. package/dist/esm/api/resources/threads/exports.d.mts +2 -0
  195. package/dist/esm/api/resources/threads/exports.mjs +3 -0
  196. package/dist/esm/api/resources/threads/types/UpdateThreadRequest.d.mts +6 -0
  197. package/dist/esm/api/resources/threads/types/UpdateThreadRequest.mjs +2 -0
  198. package/dist/esm/api/resources/threads/types/UpdateThreadResponse.d.mts +5 -0
  199. package/dist/esm/api/resources/threads/types/UpdateThreadResponse.mjs +2 -0
  200. package/dist/esm/api/resources/threads/types/index.d.mts +2 -0
  201. package/dist/esm/api/resources/threads/types/index.mjs +2 -0
  202. package/dist/esm/api/resources/webhooks/exports.d.mts +3 -0
  203. package/dist/esm/api/resources/webhooks/exports.mjs +4 -0
  204. package/dist/esm/api/resources/webhooks/resources/events/exports.d.mts +1 -0
  205. package/dist/esm/api/resources/webhooks/resources/events/exports.mjs +2 -0
  206. package/dist/esm/api/resources/websockets/client/Client.d.mts +6 -0
  207. package/dist/esm/api/resources/websockets/client/Client.mjs +8 -3
  208. package/dist/esm/api/resources/websockets/client/Socket.d.mts +2 -2
  209. package/dist/esm/api/resources/websockets/client/Socket.mjs +2 -2
  210. package/dist/esm/api/resources/websockets/exports.d.mts +3 -0
  211. package/dist/esm/api/resources/websockets/exports.mjs +4 -0
  212. package/dist/esm/core/fetcher/BinaryResponse.d.mts +1 -1
  213. package/dist/esm/core/fetcher/Fetcher.mjs +8 -2
  214. package/dist/esm/core/fetcher/index.d.mts +2 -0
  215. package/dist/esm/core/fetcher/index.mjs +1 -0
  216. package/dist/esm/core/fetcher/makePassthroughRequest.d.mts +49 -0
  217. package/dist/esm/core/fetcher/makePassthroughRequest.mjs +132 -0
  218. package/dist/esm/core/fetcher/makeRequest.d.mts +6 -1
  219. package/dist/esm/core/fetcher/makeRequest.mjs +28 -9
  220. package/dist/esm/core/runtime/runtime.mjs +8 -7
  221. package/dist/esm/core/schemas/builders/list/list.mjs +12 -17
  222. package/dist/esm/core/schemas/builders/object/object.mjs +102 -40
  223. package/dist/esm/core/schemas/builders/object-like/getObjectLikeUtils.mjs +10 -3
  224. package/dist/esm/core/schemas/builders/record/index.d.mts +2 -2
  225. package/dist/esm/core/schemas/builders/record/index.mjs +1 -1
  226. package/dist/esm/core/schemas/builders/record/record.d.mts +2 -1
  227. package/dist/esm/core/schemas/builders/record/record.mjs +62 -25
  228. package/dist/esm/core/schemas/builders/record/types.d.mts +2 -0
  229. package/dist/esm/core/schemas/builders/union/union.mjs +9 -12
  230. package/dist/esm/core/schemas/utils/isPlainObject.mjs +4 -6
  231. package/dist/esm/core/websocket/ws.d.mts +14 -2
  232. package/dist/esm/core/websocket/ws.mjs +51 -7
  233. package/dist/esm/serialization/resources/messages/types/UpdateMessageResponse.d.mts +12 -0
  234. package/dist/esm/serialization/resources/messages/types/UpdateMessageResponse.mjs +8 -0
  235. package/dist/esm/serialization/resources/messages/types/index.d.mts +1 -0
  236. package/dist/esm/serialization/resources/messages/types/index.mjs +1 -0
  237. package/dist/esm/serialization/resources/metrics/types/QueryMetricsResponse.mjs +1 -1
  238. package/dist/esm/serialization/resources/threads/types/UpdateThreadRequest.d.mts +10 -0
  239. package/dist/esm/serialization/resources/threads/types/UpdateThreadRequest.mjs +6 -0
  240. package/dist/esm/serialization/resources/threads/types/UpdateThreadResponse.d.mts +12 -0
  241. package/dist/esm/serialization/resources/threads/types/UpdateThreadResponse.mjs +8 -0
  242. package/dist/esm/serialization/resources/threads/types/index.d.mts +2 -0
  243. package/dist/esm/serialization/resources/threads/types/index.mjs +2 -0
  244. package/dist/esm/version.d.mts +1 -1
  245. package/dist/esm/version.mjs +1 -1
  246. package/package.json +305 -13
  247. package/reference.md +231 -1
@@ -21,7 +21,7 @@ export declare class WebsocketsSocket {
21
21
  private handleError;
22
22
  constructor(args: WebsocketsSocket.Args);
23
23
  /** The current state of the connection; this is one of the readyState constants. */
24
- get readyState(): number;
24
+ get readyState(): core.ReconnectingWebSocket.ReadyState;
25
25
  /**
26
26
  * @param event - The event to attach to.
27
27
  * @param callback - The callback to run when the event is triggered.
@@ -43,5 +43,5 @@ export declare class WebsocketsSocket {
43
43
  /** Asserts that the websocket is open. */
44
44
  private assertSocketIsOpen;
45
45
  /** Send a binary payload to the websocket. */
46
- protected sendBinary(payload: ArrayBufferLike | Blob | ArrayBufferView): void;
46
+ protected sendBinary(payload: ArrayBuffer | Blob | ArrayBufferView): void;
47
47
  }
@@ -100,7 +100,7 @@ export class WebsocketsSocket {
100
100
  /** Returns a promise that resolves when the websocket is open. */
101
101
  waitForOpen() {
102
102
  return __awaiter(this, void 0, void 0, function* () {
103
- if (this.socket.readyState === core.ReconnectingWebSocket.OPEN) {
103
+ if (this.socket.readyState === core.ReconnectingWebSocket.ReadyState.OPEN) {
104
104
  return this.socket;
105
105
  }
106
106
  return new Promise((resolve, reject) => {
@@ -118,7 +118,7 @@ export class WebsocketsSocket {
118
118
  if (!this.socket) {
119
119
  throw new Error("Socket is not connected.");
120
120
  }
121
- if (this.socket.readyState !== core.ReconnectingWebSocket.OPEN) {
121
+ if (this.socket.readyState !== core.ReconnectingWebSocket.ReadyState.OPEN) {
122
122
  throw new Error("Socket is not open.");
123
123
  }
124
124
  }
@@ -0,0 +1,3 @@
1
+ export { WebsocketsClient } from "./client/Client.mjs";
2
+ export * from "./client/index.mjs";
3
+ export { WebsocketsSocket } from "./client/Socket.mjs";
@@ -0,0 +1,4 @@
1
+ // This file was auto-generated by Fern from our API Definition.
2
+ export { WebsocketsClient } from "./client/Client.mjs";
3
+ export * from "./client/index.mjs";
4
+ export { WebsocketsSocket } from "./client/Socket.mjs";
@@ -14,6 +14,6 @@ export type BinaryResponse = {
14
14
  * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bytes)
15
15
  * Some versions of the Fetch API may not support this method.
16
16
  */
17
- bytes?(): ReturnType<Response["bytes"]>;
17
+ bytes?(): Promise<Uint8Array>;
18
18
  };
19
19
  export declare function getBinaryResponse(response: Response): BinaryResponse;
@@ -152,7 +152,13 @@ function getHeaders(args) {
152
152
  return __awaiter(this, void 0, void 0, function* () {
153
153
  var _a;
154
154
  const newHeaders = new Headers();
155
- newHeaders.set("Accept", args.responseType === "json" ? "application/json" : args.responseType === "text" ? "text/plain" : "*/*");
155
+ newHeaders.set("Accept", args.responseType === "json"
156
+ ? "application/json"
157
+ : args.responseType === "text"
158
+ ? "text/plain"
159
+ : args.responseType === "sse"
160
+ ? "text/event-stream"
161
+ : "*/*");
156
162
  if (args.body !== undefined && args.contentType != null) {
157
163
  newHeaders.set("Content-Type", args.contentType);
158
164
  }
@@ -196,7 +202,7 @@ export function fetcherImpl(args) {
196
202
  }
197
203
  try {
198
204
  const response = yield requestWithRetries(() => __awaiter(this, void 0, void 0, function* () {
199
- return makeRequest(fetchFn, url, args.method, headers, requestBody, args.timeoutMs, args.abortSignal, args.withCredentials, args.duplex);
205
+ return makeRequest(fetchFn, url, args.method, headers, requestBody, args.timeoutMs, args.abortSignal, args.withCredentials, args.duplex, args.responseType === "streaming" || args.responseType === "sse");
200
206
  }), args.maxRetries);
201
207
  if (response.status >= 200 && response.status < 400) {
202
208
  if (logger.isDebug()) {
@@ -6,6 +6,8 @@ export type { Fetcher, FetchFunction } from "./Fetcher.mjs";
6
6
  export { fetcher } from "./Fetcher.mjs";
7
7
  export { getHeader } from "./getHeader.mjs";
8
8
  export { HttpResponsePromise } from "./HttpResponsePromise.mjs";
9
+ export type { PassthroughRequest } from "./makePassthroughRequest.mjs";
10
+ export { makePassthroughRequest } from "./makePassthroughRequest.mjs";
9
11
  export type { RawResponse, WithRawResponse } from "./RawResponse.mjs";
10
12
  export { abortRawResponse, toRawResponse, unknownRawResponse } from "./RawResponse.mjs";
11
13
  export { Supplier } from "./Supplier.mjs";
@@ -2,5 +2,6 @@ export { EndpointSupplier } from "./EndpointSupplier.mjs";
2
2
  export { fetcher } from "./Fetcher.mjs";
3
3
  export { getHeader } from "./getHeader.mjs";
4
4
  export { HttpResponsePromise } from "./HttpResponsePromise.mjs";
5
+ export { makePassthroughRequest } from "./makePassthroughRequest.mjs";
5
6
  export { abortRawResponse, toRawResponse, unknownRawResponse } from "./RawResponse.mjs";
6
7
  export { Supplier } from "./Supplier.mjs";
@@ -0,0 +1,49 @@
1
+ import { type LogConfig, type Logger } from "../logging/logger.mjs";
2
+ import { Supplier } from "./Supplier.mjs";
3
+ export declare namespace PassthroughRequest {
4
+ /**
5
+ * Per-request options that can override the SDK client defaults.
6
+ */
7
+ interface RequestOptions {
8
+ /** Override the default timeout for this request (in seconds). */
9
+ timeoutInSeconds?: number;
10
+ /** Override the default number of retries for this request. */
11
+ maxRetries?: number;
12
+ /** Additional headers to include in this request. */
13
+ headers?: Record<string, string>;
14
+ /** Abort signal for this request. */
15
+ abortSignal?: AbortSignal;
16
+ }
17
+ /**
18
+ * SDK client configuration used by the passthrough fetch method.
19
+ */
20
+ interface ClientOptions {
21
+ /** The base URL or environment for the client. */
22
+ environment?: Supplier<string>;
23
+ /** Override the base URL. */
24
+ baseUrl?: Supplier<string>;
25
+ /** Default headers to include in requests. */
26
+ headers?: Record<string, unknown>;
27
+ /** Default maximum time to wait for a response in seconds. */
28
+ timeoutInSeconds?: number;
29
+ /** Default number of times to retry the request. Defaults to 2. */
30
+ maxRetries?: number;
31
+ /** A custom fetch function. */
32
+ fetch?: typeof fetch;
33
+ /** Logging configuration. */
34
+ logging?: LogConfig | Logger;
35
+ /** A function that returns auth headers. */
36
+ getAuthHeaders?: () => Promise<Record<string, string>>;
37
+ }
38
+ }
39
+ /**
40
+ * Makes a passthrough HTTP request using the SDK's configuration (auth, retry, logging, etc.)
41
+ * while mimicking the standard `fetch` API.
42
+ *
43
+ * @param input - The URL, path, or Request object. If a relative path, it will be resolved against the configured base URL.
44
+ * @param init - Standard RequestInit options (method, headers, body, signal, etc.)
45
+ * @param clientOptions - SDK client options (auth, default headers, logging, etc.)
46
+ * @param requestOptions - Per-request overrides (timeout, retries, extra headers, abort signal).
47
+ * @returns A standard Response object.
48
+ */
49
+ export declare function makePassthroughRequest(input: Request | string | URL, init: RequestInit | undefined, clientOptions: PassthroughRequest.ClientOptions, requestOptions?: PassthroughRequest.RequestOptions): Promise<Response>;
@@ -0,0 +1,132 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { createLogger } from "../logging/logger.mjs";
11
+ import { join } from "../url/join.mjs";
12
+ import { EndpointSupplier } from "./EndpointSupplier.mjs";
13
+ import { getFetchFn } from "./getFetchFn.mjs";
14
+ import { makeRequest } from "./makeRequest.mjs";
15
+ import { requestWithRetries } from "./requestWithRetries.mjs";
16
+ import { Supplier } from "./Supplier.mjs";
17
+ /**
18
+ * Makes a passthrough HTTP request using the SDK's configuration (auth, retry, logging, etc.)
19
+ * while mimicking the standard `fetch` API.
20
+ *
21
+ * @param input - The URL, path, or Request object. If a relative path, it will be resolved against the configured base URL.
22
+ * @param init - Standard RequestInit options (method, headers, body, signal, etc.)
23
+ * @param clientOptions - SDK client options (auth, default headers, logging, etc.)
24
+ * @param requestOptions - Per-request overrides (timeout, retries, extra headers, abort signal).
25
+ * @returns A standard Response object.
26
+ */
27
+ export function makePassthroughRequest(input, init, clientOptions, requestOptions) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ var _a, _b, _c, _d, _e, _f, _g;
30
+ const logger = createLogger(clientOptions.logging);
31
+ // Extract URL and default init properties from Request object if provided
32
+ let url;
33
+ let effectiveInit = init;
34
+ if (input instanceof Request) {
35
+ url = input.url;
36
+ // If no explicit init provided, extract properties from the Request object
37
+ if (init == null) {
38
+ effectiveInit = {
39
+ method: input.method,
40
+ headers: Object.fromEntries(input.headers.entries()),
41
+ body: input.body,
42
+ signal: input.signal,
43
+ credentials: input.credentials,
44
+ cache: input.cache,
45
+ redirect: input.redirect,
46
+ referrer: input.referrer,
47
+ integrity: input.integrity,
48
+ mode: input.mode,
49
+ };
50
+ }
51
+ }
52
+ else {
53
+ url = input instanceof URL ? input.toString() : input;
54
+ }
55
+ // Resolve the base URL
56
+ const baseUrl = (_a = (clientOptions.baseUrl != null ? yield Supplier.get(clientOptions.baseUrl) : undefined)) !== null && _a !== void 0 ? _a : (clientOptions.environment != null ? yield Supplier.get(clientOptions.environment) : undefined);
57
+ // Determine the full URL
58
+ let fullUrl;
59
+ if (url.startsWith("http://") || url.startsWith("https://")) {
60
+ fullUrl = url;
61
+ }
62
+ else if (baseUrl != null) {
63
+ fullUrl = join(baseUrl, url);
64
+ }
65
+ else {
66
+ fullUrl = url;
67
+ }
68
+ // Merge headers: SDK default headers -> auth headers -> user-provided headers
69
+ const mergedHeaders = {};
70
+ // Apply SDK default headers (resolve suppliers)
71
+ if (clientOptions.headers != null) {
72
+ for (const [key, value] of Object.entries(clientOptions.headers)) {
73
+ const resolved = yield EndpointSupplier.get(value, { endpointMetadata: {} });
74
+ if (resolved != null) {
75
+ mergedHeaders[key.toLowerCase()] = `${resolved}`;
76
+ }
77
+ }
78
+ }
79
+ // Apply auth headers
80
+ if (clientOptions.getAuthHeaders != null) {
81
+ const authHeaders = yield clientOptions.getAuthHeaders();
82
+ for (const [key, value] of Object.entries(authHeaders)) {
83
+ mergedHeaders[key.toLowerCase()] = value;
84
+ }
85
+ }
86
+ // Apply user-provided headers from init
87
+ if ((effectiveInit === null || effectiveInit === void 0 ? void 0 : effectiveInit.headers) != null) {
88
+ const initHeaders = effectiveInit.headers instanceof Headers
89
+ ? Object.fromEntries(effectiveInit.headers.entries())
90
+ : Array.isArray(effectiveInit.headers)
91
+ ? Object.fromEntries(effectiveInit.headers)
92
+ : effectiveInit.headers;
93
+ for (const [key, value] of Object.entries(initHeaders)) {
94
+ if (value != null) {
95
+ mergedHeaders[key.toLowerCase()] = value;
96
+ }
97
+ }
98
+ }
99
+ // Apply per-request option headers (highest priority)
100
+ if ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.headers) != null) {
101
+ for (const [key, value] of Object.entries(requestOptions.headers)) {
102
+ mergedHeaders[key.toLowerCase()] = value;
103
+ }
104
+ }
105
+ const method = (_b = effectiveInit === null || effectiveInit === void 0 ? void 0 : effectiveInit.method) !== null && _b !== void 0 ? _b : "GET";
106
+ const body = effectiveInit === null || effectiveInit === void 0 ? void 0 : effectiveInit.body;
107
+ const timeoutInSeconds = (_c = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _c !== void 0 ? _c : clientOptions.timeoutInSeconds;
108
+ const timeoutMs = timeoutInSeconds != null ? timeoutInSeconds * 1000 : undefined;
109
+ const maxRetries = (_d = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _d !== void 0 ? _d : clientOptions.maxRetries;
110
+ const abortSignal = (_f = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal) !== null && _e !== void 0 ? _e : effectiveInit === null || effectiveInit === void 0 ? void 0 : effectiveInit.signal) !== null && _f !== void 0 ? _f : undefined;
111
+ const fetchFn = (_g = clientOptions.fetch) !== null && _g !== void 0 ? _g : (yield getFetchFn());
112
+ if (logger.isDebug()) {
113
+ logger.debug("Making passthrough HTTP request", {
114
+ method,
115
+ url: fullUrl,
116
+ hasBody: body != null,
117
+ });
118
+ }
119
+ const response = yield requestWithRetries(() => __awaiter(this, void 0, void 0, function* () {
120
+ return makeRequest(fetchFn, fullUrl, method, mergedHeaders, body !== null && body !== void 0 ? body : undefined, timeoutMs, abortSignal, (effectiveInit === null || effectiveInit === void 0 ? void 0 : effectiveInit.credentials) === "include", undefined, // duplex
121
+ false);
122
+ }), maxRetries);
123
+ if (logger.isDebug()) {
124
+ logger.debug("Passthrough HTTP request completed", {
125
+ method,
126
+ url: fullUrl,
127
+ statusCode: response.status,
128
+ });
129
+ }
130
+ return response;
131
+ });
132
+ }
@@ -1 +1,6 @@
1
- export declare const makeRequest: (fetchFn: (url: string, init: RequestInit) => Promise<Response>, url: string, method: string, headers: Headers | Record<string, string>, requestBody: BodyInit | undefined, timeoutMs?: number, abortSignal?: AbortSignal, withCredentials?: boolean, duplex?: "half") => Promise<Response>;
1
+ export declare function isCacheNoStoreSupported(): boolean;
2
+ /**
3
+ * Reset the cached result of `isCacheNoStoreSupported`. Exposed for testing only.
4
+ */
5
+ export declare function resetCacheNoStoreSupported(): void;
6
+ export declare const makeRequest: (fetchFn: (url: string, init: RequestInit) => Promise<Response>, url: string, method: string, headers: Headers | Record<string, string>, requestBody: BodyInit | undefined, timeoutMs?: number, abortSignal?: AbortSignal, withCredentials?: boolean, duplex?: "half", disableCache?: boolean) => Promise<Response>;
@@ -8,7 +8,32 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { anySignal, getTimeoutSignal } from "./signals.mjs";
11
- export const makeRequest = (fetchFn, url, method, headers, requestBody, timeoutMs, abortSignal, withCredentials, duplex) => __awaiter(void 0, void 0, void 0, function* () {
11
+ /**
12
+ * Cached result of checking whether the current runtime supports
13
+ * the `cache` option in `Request`. Some runtimes (e.g. Cloudflare Workers)
14
+ * throw a TypeError when this option is used.
15
+ */
16
+ let _cacheNoStoreSupported;
17
+ export function isCacheNoStoreSupported() {
18
+ if (_cacheNoStoreSupported != null) {
19
+ return _cacheNoStoreSupported;
20
+ }
21
+ try {
22
+ new Request("http://localhost", { cache: "no-store" });
23
+ _cacheNoStoreSupported = true;
24
+ }
25
+ catch (_a) {
26
+ _cacheNoStoreSupported = false;
27
+ }
28
+ return _cacheNoStoreSupported;
29
+ }
30
+ /**
31
+ * Reset the cached result of `isCacheNoStoreSupported`. Exposed for testing only.
32
+ */
33
+ export function resetCacheNoStoreSupported() {
34
+ _cacheNoStoreSupported = undefined;
35
+ }
36
+ export const makeRequest = (fetchFn, url, method, headers, requestBody, timeoutMs, abortSignal, withCredentials, duplex, disableCache) => __awaiter(void 0, void 0, void 0, function* () {
12
37
  const signals = [];
13
38
  let timeoutAbortId;
14
39
  if (timeoutMs != null) {
@@ -20,15 +45,9 @@ export const makeRequest = (fetchFn, url, method, headers, requestBody, timeoutM
20
45
  signals.push(abortSignal);
21
46
  }
22
47
  const newSignals = anySignal(signals);
23
- const response = yield fetchFn(url, {
24
- method: method,
25
- headers,
26
- body: requestBody,
27
- signal: newSignals,
28
- credentials: withCredentials ? "include" : undefined,
48
+ const response = yield fetchFn(url, Object.assign({ method: method, headers, body: requestBody, signal: newSignals, credentials: withCredentials ? "include" : undefined,
29
49
  // @ts-ignore
30
- duplex,
31
- });
50
+ duplex }, (disableCache && isCacheNoStoreSupported() ? { cache: "no-store" } : {})));
32
51
  if (timeoutAbortId != null) {
33
52
  clearTimeout(timeoutAbortId);
34
53
  }
@@ -81,17 +81,18 @@ function evaluateRuntime() {
81
81
  }
82
82
  /**
83
83
  * A constant that indicates whether the environment the code is running is Node.JS.
84
+ *
85
+ * We assign `process` to a local variable first to avoid being flagged by
86
+ * bundlers that perform static analysis on `process.versions` (e.g. Next.js
87
+ * Edge Runtime warns about Node.js APIs even when they are guarded).
84
88
  */
85
- const isNode = typeof process !== "undefined" &&
86
- "version" in process &&
87
- !!process.version &&
88
- "versions" in process &&
89
- !!((_e = process.versions) === null || _e === void 0 ? void 0 : _e.node);
89
+ const _process = typeof process !== "undefined" ? process : undefined;
90
+ const isNode = typeof _process !== "undefined" && typeof ((_e = _process.versions) === null || _e === void 0 ? void 0 : _e.node) === "string";
90
91
  if (isNode) {
91
92
  return {
92
93
  type: "node",
93
- version: process.versions.node,
94
- parsedVersion: Number(process.versions.node.split(".")[0]),
94
+ version: _process.versions.node,
95
+ parsedVersion: Number(_process.versions.node.split(".")[0]),
95
96
  };
96
97
  }
97
98
  return {
@@ -28,24 +28,19 @@ function validateAndTransformArray(value, transformItem) {
28
28
  ],
29
29
  };
30
30
  }
31
- const maybeValidItems = value.map((item, index) => transformItem(item, index));
32
- return maybeValidItems.reduce((acc, item) => {
33
- if (acc.ok && item.ok) {
34
- return {
35
- ok: true,
36
- value: [...acc.value, item.value],
37
- };
31
+ const result = [];
32
+ const errors = [];
33
+ for (let i = 0; i < value.length; i++) {
34
+ const item = transformItem(value[i], i);
35
+ if (item.ok) {
36
+ result.push(item.value);
38
37
  }
39
- const errors = [];
40
- if (!acc.ok) {
41
- errors.push(...acc.errors);
42
- }
43
- if (!item.ok) {
38
+ else {
44
39
  errors.push(...item.errors);
45
40
  }
46
- return {
47
- ok: false,
48
- errors,
49
- };
50
- }, { ok: true, value: [] });
41
+ }
42
+ if (errors.length === 0) {
43
+ return { ok: true, value: result };
44
+ }
45
+ return { ok: false, errors };
51
46
  }
@@ -9,63 +9,113 @@ import { partition } from "../../utils/partition.mjs";
9
9
  import { getObjectLikeUtils } from "../object-like/index.mjs";
10
10
  import { getSchemaUtils } from "../schema-utils/index.mjs";
11
11
  import { isProperty } from "./property.mjs";
12
+ // eslint-disable-next-line @typescript-eslint/unbound-method
13
+ const _hasOwn = Object.prototype.hasOwnProperty;
12
14
  export function object(schemas) {
13
- const baseSchema = {
14
- _getRawProperties: () => Object.entries(schemas).map(([parsedKey, propertySchema]) => isProperty(propertySchema) ? propertySchema.rawKey : parsedKey),
15
- _getParsedProperties: () => keys(schemas),
16
- parse: (raw, opts) => {
17
- const rawKeyToProperty = {};
18
- const requiredKeys = [];
15
+ // All property metadata is lazily computed on first use.
16
+ // This keeps schema construction free of iteration, which matters when
17
+ // many schemas are defined but only some are exercised at runtime.
18
+ // Required-key computation is also deferred because lazy() schemas may
19
+ // not be resolved at construction time.
20
+ let _rawKeyToProperty;
21
+ function getRawKeyToProperty() {
22
+ if (_rawKeyToProperty == null) {
23
+ _rawKeyToProperty = {};
19
24
  for (const [parsedKey, schemaOrObjectProperty] of entries(schemas)) {
20
- const rawKey = isProperty(schemaOrObjectProperty) ? schemaOrObjectProperty.rawKey : parsedKey;
25
+ const rawKey = isProperty(schemaOrObjectProperty)
26
+ ? schemaOrObjectProperty.rawKey
27
+ : parsedKey;
21
28
  const valueSchema = isProperty(schemaOrObjectProperty)
22
29
  ? schemaOrObjectProperty.valueSchema
23
30
  : schemaOrObjectProperty;
24
- const property = {
31
+ _rawKeyToProperty[rawKey] = {
25
32
  rawKey,
26
33
  parsedKey: parsedKey,
27
34
  valueSchema,
28
35
  };
29
- rawKeyToProperty[rawKey] = property;
36
+ }
37
+ }
38
+ return _rawKeyToProperty;
39
+ }
40
+ let _parseRequiredKeys;
41
+ let _jsonRequiredKeys;
42
+ let _parseRequiredKeysSet;
43
+ let _jsonRequiredKeysSet;
44
+ function getParseRequiredKeys() {
45
+ if (_parseRequiredKeys == null) {
46
+ _parseRequiredKeys = [];
47
+ _jsonRequiredKeys = [];
48
+ for (const [parsedKey, schemaOrObjectProperty] of entries(schemas)) {
49
+ const rawKey = isProperty(schemaOrObjectProperty)
50
+ ? schemaOrObjectProperty.rawKey
51
+ : parsedKey;
52
+ const valueSchema = isProperty(schemaOrObjectProperty)
53
+ ? schemaOrObjectProperty.valueSchema
54
+ : schemaOrObjectProperty;
30
55
  if (isSchemaRequired(valueSchema)) {
31
- requiredKeys.push(rawKey);
56
+ _parseRequiredKeys.push(rawKey);
57
+ _jsonRequiredKeys.push(parsedKey);
32
58
  }
33
59
  }
60
+ _parseRequiredKeysSet = new Set(_parseRequiredKeys);
61
+ _jsonRequiredKeysSet = new Set(_jsonRequiredKeys);
62
+ }
63
+ return _parseRequiredKeys;
64
+ }
65
+ function getJsonRequiredKeys() {
66
+ if (_jsonRequiredKeys == null) {
67
+ getParseRequiredKeys();
68
+ }
69
+ return _jsonRequiredKeys;
70
+ }
71
+ function getParseRequiredKeysSet() {
72
+ if (_parseRequiredKeysSet == null) {
73
+ getParseRequiredKeys();
74
+ }
75
+ return _parseRequiredKeysSet;
76
+ }
77
+ function getJsonRequiredKeysSet() {
78
+ if (_jsonRequiredKeysSet == null) {
79
+ getParseRequiredKeys();
80
+ }
81
+ return _jsonRequiredKeysSet;
82
+ }
83
+ const baseSchema = {
84
+ _getRawProperties: () => Object.entries(schemas).map(([parsedKey, propertySchema]) => isProperty(propertySchema) ? propertySchema.rawKey : parsedKey),
85
+ _getParsedProperties: () => keys(schemas),
86
+ parse: (raw, opts) => {
87
+ var _a;
88
+ const breadcrumbsPrefix = (_a = opts === null || opts === void 0 ? void 0 : opts.breadcrumbsPrefix) !== null && _a !== void 0 ? _a : [];
34
89
  return validateAndTransformObject({
35
90
  value: raw,
36
- requiredKeys,
91
+ requiredKeys: getParseRequiredKeys(),
92
+ requiredKeysSet: getParseRequiredKeysSet(),
37
93
  getProperty: (rawKey) => {
38
- const property = rawKeyToProperty[rawKey];
94
+ const property = getRawKeyToProperty()[rawKey];
39
95
  if (property == null) {
40
96
  return undefined;
41
97
  }
42
98
  return {
43
99
  transformedKey: property.parsedKey,
44
100
  transform: (propertyValue) => {
45
- var _a;
46
- return property.valueSchema.parse(propertyValue, Object.assign(Object.assign({}, opts), { breadcrumbsPrefix: [...((_a = opts === null || opts === void 0 ? void 0 : opts.breadcrumbsPrefix) !== null && _a !== void 0 ? _a : []), rawKey] }));
101
+ const childBreadcrumbs = [...breadcrumbsPrefix, rawKey];
102
+ return property.valueSchema.parse(propertyValue, Object.assign(Object.assign({}, opts), { breadcrumbsPrefix: childBreadcrumbs }));
47
103
  },
48
104
  };
49
105
  },
50
106
  unrecognizedObjectKeys: opts === null || opts === void 0 ? void 0 : opts.unrecognizedObjectKeys,
51
107
  skipValidation: opts === null || opts === void 0 ? void 0 : opts.skipValidation,
52
- breadcrumbsPrefix: opts === null || opts === void 0 ? void 0 : opts.breadcrumbsPrefix,
108
+ breadcrumbsPrefix,
53
109
  omitUndefined: opts === null || opts === void 0 ? void 0 : opts.omitUndefined,
54
110
  });
55
111
  },
56
112
  json: (parsed, opts) => {
57
- const requiredKeys = [];
58
- for (const [parsedKey, schemaOrObjectProperty] of entries(schemas)) {
59
- const valueSchema = isProperty(schemaOrObjectProperty)
60
- ? schemaOrObjectProperty.valueSchema
61
- : schemaOrObjectProperty;
62
- if (isSchemaRequired(valueSchema)) {
63
- requiredKeys.push(parsedKey);
64
- }
65
- }
113
+ var _a;
114
+ const breadcrumbsPrefix = (_a = opts === null || opts === void 0 ? void 0 : opts.breadcrumbsPrefix) !== null && _a !== void 0 ? _a : [];
66
115
  return validateAndTransformObject({
67
116
  value: parsed,
68
- requiredKeys,
117
+ requiredKeys: getJsonRequiredKeys(),
118
+ requiredKeysSet: getJsonRequiredKeysSet(),
69
119
  getProperty: (parsedKey) => {
70
120
  const property = schemas[parsedKey];
71
121
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
@@ -76,8 +126,8 @@ export function object(schemas) {
76
126
  return {
77
127
  transformedKey: property.rawKey,
78
128
  transform: (propertyValue) => {
79
- var _a;
80
- return property.valueSchema.json(propertyValue, Object.assign(Object.assign({}, opts), { breadcrumbsPrefix: [...((_a = opts === null || opts === void 0 ? void 0 : opts.breadcrumbsPrefix) !== null && _a !== void 0 ? _a : []), parsedKey] }));
129
+ const childBreadcrumbs = [...breadcrumbsPrefix, parsedKey];
130
+ return property.valueSchema.json(propertyValue, Object.assign(Object.assign({}, opts), { breadcrumbsPrefix: childBreadcrumbs }));
81
131
  },
82
132
  };
83
133
  }
@@ -85,15 +135,15 @@ export function object(schemas) {
85
135
  return {
86
136
  transformedKey: parsedKey,
87
137
  transform: (propertyValue) => {
88
- var _a;
89
- return property.json(propertyValue, Object.assign(Object.assign({}, opts), { breadcrumbsPrefix: [...((_a = opts === null || opts === void 0 ? void 0 : opts.breadcrumbsPrefix) !== null && _a !== void 0 ? _a : []), parsedKey] }));
138
+ const childBreadcrumbs = [...breadcrumbsPrefix, parsedKey];
139
+ return property.json(propertyValue, Object.assign(Object.assign({}, opts), { breadcrumbsPrefix: childBreadcrumbs }));
90
140
  },
91
141
  };
92
142
  }
93
143
  },
94
144
  unrecognizedObjectKeys: opts === null || opts === void 0 ? void 0 : opts.unrecognizedObjectKeys,
95
145
  skipValidation: opts === null || opts === void 0 ? void 0 : opts.skipValidation,
96
- breadcrumbsPrefix: opts === null || opts === void 0 ? void 0 : opts.breadcrumbsPrefix,
146
+ breadcrumbsPrefix,
97
147
  omitUndefined: opts === null || opts === void 0 ? void 0 : opts.omitUndefined,
98
148
  });
99
149
  },
@@ -101,7 +151,7 @@ export function object(schemas) {
101
151
  };
102
152
  return Object.assign(Object.assign(Object.assign(Object.assign({}, maybeSkipValidation(baseSchema)), getSchemaUtils(baseSchema)), getObjectLikeUtils(baseSchema)), getObjectUtils(baseSchema));
103
153
  }
104
- function validateAndTransformObject({ value, requiredKeys, getProperty, unrecognizedObjectKeys = "fail", skipValidation = false, breadcrumbsPrefix = [], }) {
154
+ function validateAndTransformObject({ value, requiredKeys, requiredKeysSet, getProperty, unrecognizedObjectKeys = "fail", skipValidation = false, breadcrumbsPrefix = [], }) {
105
155
  if (!isPlainObject(value)) {
106
156
  return {
107
157
  ok: false,
@@ -113,13 +163,21 @@ function validateAndTransformObject({ value, requiredKeys, getProperty, unrecogn
113
163
  ],
114
164
  };
115
165
  }
116
- const missingRequiredKeys = new Set(requiredKeys);
166
+ // Track which required keys have been seen.
167
+ // Use a counter instead of copying the Set to avoid per-call allocation.
168
+ let missingRequiredCount = requiredKeys.length;
117
169
  const errors = [];
118
170
  const transformed = {};
119
- for (const [preTransformedKey, preTransformedItemValue] of Object.entries(value)) {
171
+ for (const preTransformedKey in value) {
172
+ if (!_hasOwn.call(value, preTransformedKey)) {
173
+ continue;
174
+ }
175
+ const preTransformedItemValue = value[preTransformedKey];
120
176
  const property = getProperty(preTransformedKey);
121
177
  if (property != null) {
122
- missingRequiredKeys.delete(preTransformedKey);
178
+ if (missingRequiredCount > 0 && requiredKeysSet.has(preTransformedKey)) {
179
+ missingRequiredCount--;
180
+ }
123
181
  const value = property.transform(preTransformedItemValue);
124
182
  if (value.ok) {
125
183
  transformed[property.transformedKey] = value.value;
@@ -145,12 +203,16 @@ function validateAndTransformObject({ value, requiredKeys, getProperty, unrecogn
145
203
  }
146
204
  }
147
205
  }
148
- errors.push(...requiredKeys
149
- .filter((key) => missingRequiredKeys.has(key))
150
- .map((key) => ({
151
- path: breadcrumbsPrefix,
152
- message: `Missing required key "${key}"`,
153
- })));
206
+ if (missingRequiredCount > 0) {
207
+ for (const key of requiredKeys) {
208
+ if (!(key in value)) {
209
+ errors.push({
210
+ path: breadcrumbsPrefix,
211
+ message: `Missing required key "${key}"`,
212
+ });
213
+ }
214
+ }
215
+ }
154
216
  if (errors.length === 0 || skipValidation) {
155
217
  return {
156
218
  ok: true,