@cadenya/cadenya 0.135.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (958) hide show
  1. package/README.md +86 -358
  2. package/api.md +781 -0
  3. package/dist/client.d.ts +69 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +97 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/core/error.d.ts +39 -0
  8. package/dist/core/error.d.ts.map +1 -0
  9. package/dist/core/error.js +56 -0
  10. package/dist/core/error.js.map +1 -0
  11. package/dist/core/http.d.ts +140 -0
  12. package/dist/core/http.d.ts.map +1 -0
  13. package/dist/core/http.js +525 -0
  14. package/dist/core/http.js.map +1 -0
  15. package/dist/core/pagination.d.ts +12 -0
  16. package/dist/core/pagination.d.ts.map +1 -0
  17. package/dist/core/pagination.js +29 -0
  18. package/dist/core/pagination.js.map +1 -0
  19. package/dist/core/sse.d.ts +44 -0
  20. package/dist/core/sse.d.ts.map +1 -0
  21. package/dist/core/sse.js +350 -0
  22. package/dist/core/sse.js.map +1 -0
  23. package/dist/core/webhooks.d.ts +25 -0
  24. package/dist/core/webhooks.d.ts.map +1 -0
  25. package/dist/core/webhooks.js +124 -0
  26. package/dist/core/webhooks.js.map +1 -0
  27. package/dist/index.d.ts +35 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +32 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/resources/accounts.d.ts +34 -0
  32. package/dist/resources/accounts.d.ts.map +1 -0
  33. package/dist/resources/accounts.js +47 -0
  34. package/dist/resources/accounts.js.map +1 -0
  35. package/dist/resources/agent-schedules.d.ts +186 -0
  36. package/dist/resources/agent-schedules.d.ts.map +1 -0
  37. package/dist/resources/agent-schedules.js +141 -0
  38. package/dist/resources/agent-schedules.js.map +1 -0
  39. package/dist/resources/agent-variations.d.ts +230 -0
  40. package/dist/resources/agent-variations.d.ts.map +1 -0
  41. package/dist/resources/agent-variations.js +174 -0
  42. package/dist/resources/agent-variations.js.map +1 -0
  43. package/dist/resources/agents.d.ts +318 -0
  44. package/dist/resources/agents.d.ts.map +1 -0
  45. package/dist/resources/agents.js +202 -0
  46. package/dist/resources/agents.js.map +1 -0
  47. package/dist/resources/ai-provider-keys.d.ts +141 -0
  48. package/dist/resources/ai-provider-keys.d.ts.map +1 -0
  49. package/dist/resources/ai-provider-keys.js +93 -0
  50. package/dist/resources/ai-provider-keys.js.map +1 -0
  51. package/dist/resources/api-keys.d.ts +222 -0
  52. package/dist/resources/api-keys.d.ts.map +1 -0
  53. package/dist/resources/api-keys.js +194 -0
  54. package/dist/resources/api-keys.js.map +1 -0
  55. package/dist/resources/memory-entries.d.ts +122 -0
  56. package/dist/resources/memory-entries.d.ts.map +1 -0
  57. package/dist/resources/memory-entries.js +93 -0
  58. package/dist/resources/memory-entries.js.map +1 -0
  59. package/dist/resources/memory-layers.d.ts +137 -0
  60. package/dist/resources/memory-layers.d.ts.map +1 -0
  61. package/dist/resources/memory-layers.js +97 -0
  62. package/dist/resources/memory-layers.js.map +1 -0
  63. package/dist/resources/models.d.ts +148 -0
  64. package/dist/resources/models.d.ts.map +1 -0
  65. package/dist/resources/models.js +93 -0
  66. package/dist/resources/models.js.map +1 -0
  67. package/dist/resources/objectives.d.ts +602 -0
  68. package/dist/resources/objectives.d.ts.map +1 -0
  69. package/dist/resources/objectives.js +356 -0
  70. package/dist/resources/objectives.js.map +1 -0
  71. package/dist/resources/profiles.d.ts +16 -0
  72. package/dist/resources/profiles.d.ts.map +1 -0
  73. package/dist/resources/profiles.js +21 -0
  74. package/dist/resources/profiles.js.map +1 -0
  75. package/dist/resources/tenants.d.ts +135 -0
  76. package/dist/resources/tenants.d.ts.map +1 -0
  77. package/dist/resources/tenants.js +80 -0
  78. package/dist/resources/tenants.js.map +1 -0
  79. package/dist/resources/tool-search.d.ts +27 -0
  80. package/dist/resources/tool-search.d.ts.map +1 -0
  81. package/dist/resources/tool-search.js +25 -0
  82. package/dist/resources/tool-search.js.map +1 -0
  83. package/dist/resources/tool-set-secrets.d.ts +128 -0
  84. package/dist/resources/tool-set-secrets.d.ts.map +1 -0
  85. package/dist/resources/tool-set-secrets.js +93 -0
  86. package/dist/resources/tool-set-secrets.js.map +1 -0
  87. package/dist/resources/tool-sets.d.ts +271 -0
  88. package/dist/resources/tool-sets.d.ts.map +1 -0
  89. package/dist/resources/tool-sets.js +185 -0
  90. package/dist/resources/tool-sets.js.map +1 -0
  91. package/dist/resources/tools.d.ts +178 -0
  92. package/dist/resources/tools.d.ts.map +1 -0
  93. package/dist/resources/tools.js +125 -0
  94. package/dist/resources/tools.js.map +1 -0
  95. package/dist/resources/uploads.d.ts +43 -0
  96. package/dist/resources/uploads.d.ts.map +1 -0
  97. package/dist/resources/uploads.js +41 -0
  98. package/dist/resources/uploads.js.map +1 -0
  99. package/dist/resources/widget-sessions.d.ts +168 -0
  100. package/dist/resources/widget-sessions.d.ts.map +1 -0
  101. package/dist/resources/widget-sessions.js +110 -0
  102. package/dist/resources/widget-sessions.js.map +1 -0
  103. package/dist/resources/widgets.d.ts +166 -0
  104. package/dist/resources/widgets.d.ts.map +1 -0
  105. package/dist/resources/widgets.js +125 -0
  106. package/dist/resources/widgets.js.map +1 -0
  107. package/dist/resources/workspace-admin.d.ts +214 -0
  108. package/dist/resources/workspace-admin.d.ts.map +1 -0
  109. package/dist/resources/workspace-admin.js +154 -0
  110. package/dist/resources/workspace-admin.js.map +1 -0
  111. package/dist/resources/workspace-secrets.d.ts +134 -0
  112. package/dist/resources/workspace-secrets.d.ts.map +1 -0
  113. package/dist/resources/workspace-secrets.js +93 -0
  114. package/dist/resources/workspace-secrets.js.map +1 -0
  115. package/dist/resources/workspaces.d.ts +44 -0
  116. package/dist/resources/workspaces.d.ts.map +1 -0
  117. package/dist/resources/workspaces.js +26 -0
  118. package/dist/resources/workspaces.js.map +1 -0
  119. package/dist/types.d.ts +4634 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +103 -0
  122. package/dist/types.js.map +1 -0
  123. package/dist/webhooks.d.ts +93 -0
  124. package/dist/webhooks.d.ts.map +1 -0
  125. package/dist/webhooks.js +21 -0
  126. package/dist/webhooks.js.map +1 -0
  127. package/package.json +23 -164
  128. package/src/client.ts +124 -1532
  129. package/src/core/error.ts +50 -109
  130. package/src/core/http.ts +639 -0
  131. package/src/core/pagination.ts +16 -150
  132. package/src/core/sse.ts +338 -0
  133. package/src/core/webhooks.ts +141 -0
  134. package/src/index.ts +35 -20
  135. package/src/resources/accounts.ts +50 -0
  136. package/src/resources/agent-schedules.ts +251 -0
  137. package/src/resources/agent-variations.ts +312 -0
  138. package/src/resources/agents.ts +411 -1
  139. package/src/resources/ai-provider-keys.ts +119 -309
  140. package/src/resources/api-keys.ts +219 -276
  141. package/src/resources/memory-entries.ts +163 -0
  142. package/src/resources/memory-layers.ts +181 -1
  143. package/src/resources/models.ts +125 -372
  144. package/src/resources/objectives.ts +764 -1
  145. package/src/resources/profiles.ts +17 -13
  146. package/src/resources/tenants.ts +168 -1
  147. package/src/resources/tool-search.ts +36 -0
  148. package/src/resources/tool-set-secrets.ts +169 -0
  149. package/src/resources/tool-sets.ts +355 -1
  150. package/src/resources/tools.ts +235 -0
  151. package/src/resources/uploads.ts +42 -127
  152. package/src/resources/widget-sessions.ts +148 -437
  153. package/src/resources/widgets.ts +155 -247
  154. package/src/resources/workspace-admin.ts +281 -1
  155. package/src/resources/workspace-secrets.ts +121 -159
  156. package/src/resources/workspaces.ts +32 -75
  157. package/src/types.ts +5188 -0
  158. package/src/webhooks.ts +107 -0
  159. package/CHANGELOG.md +0 -1542
  160. package/api-promise.d.mts +0 -3
  161. package/api-promise.d.mts.map +0 -1
  162. package/api-promise.d.ts +0 -3
  163. package/api-promise.d.ts.map +0 -1
  164. package/api-promise.js +0 -6
  165. package/api-promise.js.map +0 -1
  166. package/api-promise.mjs +0 -3
  167. package/api-promise.mjs.map +0 -1
  168. package/client.d.mts +0 -335
  169. package/client.d.mts.map +0 -1
  170. package/client.d.ts +0 -335
  171. package/client.d.ts.map +0 -1
  172. package/client.js +0 -630
  173. package/client.js.map +0 -1
  174. package/client.mjs +0 -626
  175. package/client.mjs.map +0 -1
  176. package/core/api-promise.d.mts +0 -46
  177. package/core/api-promise.d.mts.map +0 -1
  178. package/core/api-promise.d.ts +0 -46
  179. package/core/api-promise.d.ts.map +0 -1
  180. package/core/api-promise.js +0 -73
  181. package/core/api-promise.js.map +0 -1
  182. package/core/api-promise.mjs +0 -69
  183. package/core/api-promise.mjs.map +0 -1
  184. package/core/error.d.mts +0 -46
  185. package/core/error.d.mts.map +0 -1
  186. package/core/error.d.ts +0 -46
  187. package/core/error.d.ts.map +0 -1
  188. package/core/error.js +0 -112
  189. package/core/error.js.map +0 -1
  190. package/core/error.mjs +0 -96
  191. package/core/error.mjs.map +0 -1
  192. package/core/pagination.d.mts +0 -59
  193. package/core/pagination.d.mts.map +0 -1
  194. package/core/pagination.d.ts +0 -59
  195. package/core/pagination.d.ts.map +0 -1
  196. package/core/pagination.js +0 -100
  197. package/core/pagination.js.map +0 -1
  198. package/core/pagination.mjs +0 -94
  199. package/core/pagination.mjs.map +0 -1
  200. package/core/resource.d.mts +0 -6
  201. package/core/resource.d.mts.map +0 -1
  202. package/core/resource.d.ts +0 -6
  203. package/core/resource.d.ts.map +0 -1
  204. package/core/resource.js +0 -10
  205. package/core/resource.js.map +0 -1
  206. package/core/resource.mjs +0 -6
  207. package/core/resource.mjs.map +0 -1
  208. package/core/streaming.d.mts +0 -33
  209. package/core/streaming.d.mts.map +0 -1
  210. package/core/streaming.d.ts +0 -33
  211. package/core/streaming.d.ts.map +0 -1
  212. package/core/streaming.js +0 -268
  213. package/core/streaming.js.map +0 -1
  214. package/core/streaming.mjs +0 -263
  215. package/core/streaming.mjs.map +0 -1
  216. package/core/uploads.d.mts +0 -3
  217. package/core/uploads.d.mts.map +0 -1
  218. package/core/uploads.d.ts +0 -3
  219. package/core/uploads.d.ts.map +0 -1
  220. package/core/uploads.js +0 -6
  221. package/core/uploads.js.map +0 -1
  222. package/core/uploads.mjs +0 -2
  223. package/core/uploads.mjs.map +0 -1
  224. package/error.d.mts +0 -3
  225. package/error.d.mts.map +0 -1
  226. package/error.d.ts +0 -3
  227. package/error.d.ts.map +0 -1
  228. package/error.js +0 -6
  229. package/error.js.map +0 -1
  230. package/error.mjs +0 -3
  231. package/error.mjs.map +0 -1
  232. package/index.d.mts +0 -7
  233. package/index.d.mts.map +0 -1
  234. package/index.d.ts +0 -7
  235. package/index.d.ts.map +0 -1
  236. package/index.js +0 -31
  237. package/index.js.map +0 -1
  238. package/index.mjs +0 -7
  239. package/index.mjs.map +0 -1
  240. package/internal/builtin-types.d.mts +0 -73
  241. package/internal/builtin-types.d.mts.map +0 -1
  242. package/internal/builtin-types.d.ts +0 -73
  243. package/internal/builtin-types.d.ts.map +0 -1
  244. package/internal/builtin-types.js +0 -3
  245. package/internal/builtin-types.js.map +0 -1
  246. package/internal/builtin-types.mjs +0 -2
  247. package/internal/builtin-types.mjs.map +0 -1
  248. package/internal/decoders/line.d.mts +0 -17
  249. package/internal/decoders/line.d.mts.map +0 -1
  250. package/internal/decoders/line.d.ts +0 -17
  251. package/internal/decoders/line.d.ts.map +0 -1
  252. package/internal/decoders/line.js +0 -113
  253. package/internal/decoders/line.js.map +0 -1
  254. package/internal/decoders/line.mjs +0 -108
  255. package/internal/decoders/line.mjs.map +0 -1
  256. package/internal/detect-platform.d.mts +0 -15
  257. package/internal/detect-platform.d.mts.map +0 -1
  258. package/internal/detect-platform.d.ts +0 -15
  259. package/internal/detect-platform.d.ts.map +0 -1
  260. package/internal/detect-platform.js +0 -161
  261. package/internal/detect-platform.js.map +0 -1
  262. package/internal/detect-platform.mjs +0 -156
  263. package/internal/detect-platform.mjs.map +0 -1
  264. package/internal/errors.d.mts +0 -3
  265. package/internal/errors.d.mts.map +0 -1
  266. package/internal/errors.d.ts +0 -3
  267. package/internal/errors.d.ts.map +0 -1
  268. package/internal/errors.js +0 -40
  269. package/internal/errors.js.map +0 -1
  270. package/internal/errors.mjs +0 -35
  271. package/internal/errors.mjs.map +0 -1
  272. package/internal/headers.d.mts +0 -20
  273. package/internal/headers.d.mts.map +0 -1
  274. package/internal/headers.d.ts +0 -20
  275. package/internal/headers.d.ts.map +0 -1
  276. package/internal/headers.js +0 -78
  277. package/internal/headers.js.map +0 -1
  278. package/internal/headers.mjs +0 -73
  279. package/internal/headers.mjs.map +0 -1
  280. package/internal/parse.d.mts +0 -12
  281. package/internal/parse.d.mts.map +0 -1
  282. package/internal/parse.d.ts +0 -12
  283. package/internal/parse.d.ts.map +0 -1
  284. package/internal/parse.js +0 -49
  285. package/internal/parse.js.map +0 -1
  286. package/internal/parse.mjs +0 -46
  287. package/internal/parse.mjs.map +0 -1
  288. package/internal/qs/formats.d.mts +0 -7
  289. package/internal/qs/formats.d.mts.map +0 -1
  290. package/internal/qs/formats.d.ts +0 -7
  291. package/internal/qs/formats.d.ts.map +0 -1
  292. package/internal/qs/formats.js +0 -13
  293. package/internal/qs/formats.js.map +0 -1
  294. package/internal/qs/formats.mjs +0 -9
  295. package/internal/qs/formats.mjs.map +0 -1
  296. package/internal/qs/index.d.mts +0 -10
  297. package/internal/qs/index.d.mts.map +0 -1
  298. package/internal/qs/index.d.ts +0 -10
  299. package/internal/qs/index.d.ts.map +0 -1
  300. package/internal/qs/index.js +0 -14
  301. package/internal/qs/index.js.map +0 -1
  302. package/internal/qs/index.mjs +0 -10
  303. package/internal/qs/index.mjs.map +0 -1
  304. package/internal/qs/stringify.d.mts +0 -3
  305. package/internal/qs/stringify.d.mts.map +0 -1
  306. package/internal/qs/stringify.d.ts +0 -3
  307. package/internal/qs/stringify.d.ts.map +0 -1
  308. package/internal/qs/stringify.js +0 -277
  309. package/internal/qs/stringify.js.map +0 -1
  310. package/internal/qs/stringify.mjs +0 -274
  311. package/internal/qs/stringify.mjs.map +0 -1
  312. package/internal/qs/types.d.mts +0 -57
  313. package/internal/qs/types.d.mts.map +0 -1
  314. package/internal/qs/types.d.ts +0 -57
  315. package/internal/qs/types.d.ts.map +0 -1
  316. package/internal/qs/types.js +0 -3
  317. package/internal/qs/types.js.map +0 -1
  318. package/internal/qs/types.mjs +0 -2
  319. package/internal/qs/types.mjs.map +0 -1
  320. package/internal/qs/utils.d.mts +0 -15
  321. package/internal/qs/utils.d.mts.map +0 -1
  322. package/internal/qs/utils.d.ts +0 -15
  323. package/internal/qs/utils.d.ts.map +0 -1
  324. package/internal/qs/utils.js +0 -230
  325. package/internal/qs/utils.js.map +0 -1
  326. package/internal/qs/utils.mjs +0 -217
  327. package/internal/qs/utils.mjs.map +0 -1
  328. package/internal/request-options.d.mts +0 -77
  329. package/internal/request-options.d.mts.map +0 -1
  330. package/internal/request-options.d.ts +0 -77
  331. package/internal/request-options.d.ts.map +0 -1
  332. package/internal/request-options.js +0 -13
  333. package/internal/request-options.js.map +0 -1
  334. package/internal/request-options.mjs +0 -9
  335. package/internal/request-options.mjs.map +0 -1
  336. package/internal/shim-types.d.mts +0 -17
  337. package/internal/shim-types.d.mts.map +0 -1
  338. package/internal/shim-types.d.ts +0 -17
  339. package/internal/shim-types.d.ts.map +0 -1
  340. package/internal/shim-types.js +0 -9
  341. package/internal/shim-types.js.map +0 -1
  342. package/internal/shim-types.mjs +0 -8
  343. package/internal/shim-types.mjs.map +0 -1
  344. package/internal/shims.d.mts +0 -26
  345. package/internal/shims.d.mts.map +0 -1
  346. package/internal/shims.d.ts +0 -26
  347. package/internal/shims.d.ts.map +0 -1
  348. package/internal/shims.js +0 -97
  349. package/internal/shims.js.map +0 -1
  350. package/internal/shims.mjs +0 -90
  351. package/internal/shims.mjs.map +0 -1
  352. package/internal/to-file.d.mts +0 -45
  353. package/internal/to-file.d.mts.map +0 -1
  354. package/internal/to-file.d.ts +0 -45
  355. package/internal/to-file.d.ts.map +0 -1
  356. package/internal/to-file.js +0 -91
  357. package/internal/to-file.js.map +0 -1
  358. package/internal/to-file.mjs +0 -88
  359. package/internal/to-file.mjs.map +0 -1
  360. package/internal/tslib.js +0 -81
  361. package/internal/tslib.mjs +0 -17
  362. package/internal/types.d.mts +0 -69
  363. package/internal/types.d.mts.map +0 -1
  364. package/internal/types.d.ts +0 -69
  365. package/internal/types.d.ts.map +0 -1
  366. package/internal/types.js +0 -3
  367. package/internal/types.js.map +0 -1
  368. package/internal/types.mjs +0 -2
  369. package/internal/types.mjs.map +0 -1
  370. package/internal/uploads.d.mts +0 -42
  371. package/internal/uploads.d.mts.map +0 -1
  372. package/internal/uploads.d.ts +0 -42
  373. package/internal/uploads.d.ts.map +0 -1
  374. package/internal/uploads.js +0 -141
  375. package/internal/uploads.js.map +0 -1
  376. package/internal/uploads.mjs +0 -131
  377. package/internal/uploads.mjs.map +0 -1
  378. package/internal/utils/base64.d.mts +0 -3
  379. package/internal/utils/base64.d.mts.map +0 -1
  380. package/internal/utils/base64.d.ts +0 -3
  381. package/internal/utils/base64.d.ts.map +0 -1
  382. package/internal/utils/base64.js +0 -37
  383. package/internal/utils/base64.js.map +0 -1
  384. package/internal/utils/base64.mjs +0 -32
  385. package/internal/utils/base64.mjs.map +0 -1
  386. package/internal/utils/bytes.d.mts +0 -4
  387. package/internal/utils/bytes.d.mts.map +0 -1
  388. package/internal/utils/bytes.d.ts +0 -4
  389. package/internal/utils/bytes.d.ts.map +0 -1
  390. package/internal/utils/bytes.js +0 -31
  391. package/internal/utils/bytes.js.map +0 -1
  392. package/internal/utils/bytes.mjs +0 -26
  393. package/internal/utils/bytes.mjs.map +0 -1
  394. package/internal/utils/env.d.mts +0 -9
  395. package/internal/utils/env.d.mts.map +0 -1
  396. package/internal/utils/env.d.ts +0 -9
  397. package/internal/utils/env.d.ts.map +0 -1
  398. package/internal/utils/env.js +0 -21
  399. package/internal/utils/env.js.map +0 -1
  400. package/internal/utils/env.mjs +0 -17
  401. package/internal/utils/env.mjs.map +0 -1
  402. package/internal/utils/log.d.mts +0 -37
  403. package/internal/utils/log.d.mts.map +0 -1
  404. package/internal/utils/log.d.ts +0 -37
  405. package/internal/utils/log.d.ts.map +0 -1
  406. package/internal/utils/log.js +0 -86
  407. package/internal/utils/log.js.map +0 -1
  408. package/internal/utils/log.mjs +0 -80
  409. package/internal/utils/log.mjs.map +0 -1
  410. package/internal/utils/path.d.mts +0 -15
  411. package/internal/utils/path.d.mts.map +0 -1
  412. package/internal/utils/path.d.ts +0 -15
  413. package/internal/utils/path.d.ts.map +0 -1
  414. package/internal/utils/path.js +0 -79
  415. package/internal/utils/path.js.map +0 -1
  416. package/internal/utils/path.mjs +0 -74
  417. package/internal/utils/path.mjs.map +0 -1
  418. package/internal/utils/query.d.mts +0 -2
  419. package/internal/utils/query.d.mts.map +0 -1
  420. package/internal/utils/query.d.ts +0 -2
  421. package/internal/utils/query.d.ts.map +0 -1
  422. package/internal/utils/query.js +0 -9
  423. package/internal/utils/query.js.map +0 -1
  424. package/internal/utils/query.mjs +0 -5
  425. package/internal/utils/query.mjs.map +0 -1
  426. package/internal/utils/sleep.d.mts +0 -2
  427. package/internal/utils/sleep.d.mts.map +0 -1
  428. package/internal/utils/sleep.d.ts +0 -2
  429. package/internal/utils/sleep.d.ts.map +0 -1
  430. package/internal/utils/sleep.js +0 -6
  431. package/internal/utils/sleep.js.map +0 -1
  432. package/internal/utils/sleep.mjs +0 -2
  433. package/internal/utils/sleep.mjs.map +0 -1
  434. package/internal/utils/uuid.d.mts +0 -5
  435. package/internal/utils/uuid.d.mts.map +0 -1
  436. package/internal/utils/uuid.d.ts +0 -5
  437. package/internal/utils/uuid.d.ts.map +0 -1
  438. package/internal/utils/uuid.js +0 -18
  439. package/internal/utils/uuid.js.map +0 -1
  440. package/internal/utils/uuid.mjs +0 -14
  441. package/internal/utils/uuid.mjs.map +0 -1
  442. package/internal/utils/values.d.mts +0 -18
  443. package/internal/utils/values.d.mts.map +0 -1
  444. package/internal/utils/values.d.ts +0 -18
  445. package/internal/utils/values.d.ts.map +0 -1
  446. package/internal/utils/values.js +0 -111
  447. package/internal/utils/values.js.map +0 -1
  448. package/internal/utils/values.mjs +0 -93
  449. package/internal/utils/values.mjs.map +0 -1
  450. package/internal/utils.d.mts +0 -8
  451. package/internal/utils.d.mts.map +0 -1
  452. package/internal/utils.d.ts +0 -8
  453. package/internal/utils.d.ts.map +0 -1
  454. package/internal/utils.js +0 -11
  455. package/internal/utils.js.map +0 -1
  456. package/internal/utils.mjs +0 -8
  457. package/internal/utils.mjs.map +0 -1
  458. package/pagination.d.mts +0 -3
  459. package/pagination.d.mts.map +0 -1
  460. package/pagination.d.ts +0 -3
  461. package/pagination.d.ts.map +0 -1
  462. package/pagination.js +0 -6
  463. package/pagination.js.map +0 -1
  464. package/pagination.mjs +0 -3
  465. package/pagination.mjs.map +0 -1
  466. package/resource.d.mts +0 -3
  467. package/resource.d.mts.map +0 -1
  468. package/resource.d.ts +0 -3
  469. package/resource.d.ts.map +0 -1
  470. package/resource.js +0 -6
  471. package/resource.js.map +0 -1
  472. package/resource.mjs +0 -3
  473. package/resource.mjs.map +0 -1
  474. package/resources/account.d.mts +0 -124
  475. package/resources/account.d.mts.map +0 -1
  476. package/resources/account.d.ts +0 -124
  477. package/resources/account.d.ts.map +0 -1
  478. package/resources/account.js +0 -32
  479. package/resources/account.js.map +0 -1
  480. package/resources/account.mjs +0 -28
  481. package/resources/account.mjs.map +0 -1
  482. package/resources/agents/agents.d.mts +0 -379
  483. package/resources/agents/agents.d.mts.map +0 -1
  484. package/resources/agents/agents.d.ts +0 -379
  485. package/resources/agents/agents.d.ts.map +0 -1
  486. package/resources/agents/agents.js +0 -191
  487. package/resources/agents/agents.js.map +0 -1
  488. package/resources/agents/agents.mjs +0 -186
  489. package/resources/agents/agents.mjs.map +0 -1
  490. package/resources/agents/feedback.d.mts +0 -71
  491. package/resources/agents/feedback.d.mts.map +0 -1
  492. package/resources/agents/feedback.d.ts +0 -71
  493. package/resources/agents/feedback.d.ts.map +0 -1
  494. package/resources/agents/feedback.js +0 -33
  495. package/resources/agents/feedback.js.map +0 -1
  496. package/resources/agents/feedback.mjs +0 -29
  497. package/resources/agents/feedback.mjs.map +0 -1
  498. package/resources/agents/index.d.mts +0 -6
  499. package/resources/agents/index.d.mts.map +0 -1
  500. package/resources/agents/index.d.ts +0 -6
  501. package/resources/agents/index.d.ts.map +0 -1
  502. package/resources/agents/index.js +0 -14
  503. package/resources/agents/index.js.map +0 -1
  504. package/resources/agents/index.mjs +0 -6
  505. package/resources/agents/index.mjs.map +0 -1
  506. package/resources/agents/schedules.d.mts +0 -383
  507. package/resources/agents/schedules.d.mts.map +0 -1
  508. package/resources/agents/schedules.d.ts +0 -383
  509. package/resources/agents/schedules.d.ts.map +0 -1
  510. package/resources/agents/schedules.js +0 -171
  511. package/resources/agents/schedules.js.map +0 -1
  512. package/resources/agents/schedules.mjs +0 -167
  513. package/resources/agents/schedules.mjs.map +0 -1
  514. package/resources/agents/variations.d.mts +0 -723
  515. package/resources/agents/variations.d.mts.map +0 -1
  516. package/resources/agents/variations.d.ts +0 -723
  517. package/resources/agents/variations.d.ts.map +0 -1
  518. package/resources/agents/variations.js +0 -208
  519. package/resources/agents/variations.js.map +0 -1
  520. package/resources/agents/variations.mjs +0 -204
  521. package/resources/agents/variations.mjs.map +0 -1
  522. package/resources/agents/webhook-deliveries.d.mts +0 -96
  523. package/resources/agents/webhook-deliveries.d.mts.map +0 -1
  524. package/resources/agents/webhook-deliveries.d.ts +0 -96
  525. package/resources/agents/webhook-deliveries.d.ts.map +0 -1
  526. package/resources/agents/webhook-deliveries.js +0 -31
  527. package/resources/agents/webhook-deliveries.js.map +0 -1
  528. package/resources/agents/webhook-deliveries.mjs +0 -27
  529. package/resources/agents/webhook-deliveries.mjs.map +0 -1
  530. package/resources/agents.d.mts +0 -2
  531. package/resources/agents.d.mts.map +0 -1
  532. package/resources/agents.d.ts +0 -2
  533. package/resources/agents.d.ts.map +0 -1
  534. package/resources/agents.js +0 -5
  535. package/resources/agents.js.map +0 -1
  536. package/resources/agents.mjs +0 -2
  537. package/resources/agents.mjs.map +0 -1
  538. package/resources/ai-provider-keys.d.mts +0 -269
  539. package/resources/ai-provider-keys.d.mts.map +0 -1
  540. package/resources/ai-provider-keys.d.ts +0 -269
  541. package/resources/ai-provider-keys.d.ts.map +0 -1
  542. package/resources/ai-provider-keys.js +0 -52
  543. package/resources/ai-provider-keys.js.map +0 -1
  544. package/resources/ai-provider-keys.mjs +0 -48
  545. package/resources/ai-provider-keys.mjs.map +0 -1
  546. package/resources/api-keys.d.mts +0 -268
  547. package/resources/api-keys.d.mts.map +0 -1
  548. package/resources/api-keys.d.ts +0 -268
  549. package/resources/api-keys.d.ts.map +0 -1
  550. package/resources/api-keys.js +0 -83
  551. package/resources/api-keys.js.map +0 -1
  552. package/resources/api-keys.mjs +0 -79
  553. package/resources/api-keys.mjs.map +0 -1
  554. package/resources/global-api-key.d.mts +0 -33
  555. package/resources/global-api-key.d.mts.map +0 -1
  556. package/resources/global-api-key.d.ts +0 -33
  557. package/resources/global-api-key.d.ts.map +0 -1
  558. package/resources/global-api-key.js +0 -42
  559. package/resources/global-api-key.js.map +0 -1
  560. package/resources/global-api-key.mjs +0 -38
  561. package/resources/global-api-key.mjs.map +0 -1
  562. package/resources/index.d.mts +0 -21
  563. package/resources/index.d.mts.map +0 -1
  564. package/resources/index.d.ts +0 -21
  565. package/resources/index.d.ts.map +0 -1
  566. package/resources/index.js +0 -44
  567. package/resources/index.js.map +0 -1
  568. package/resources/index.mjs +0 -21
  569. package/resources/index.mjs.map +0 -1
  570. package/resources/memory-layers/entries.d.mts +0 -257
  571. package/resources/memory-layers/entries.d.mts.map +0 -1
  572. package/resources/memory-layers/entries.d.ts +0 -257
  573. package/resources/memory-layers/entries.d.ts.map +0 -1
  574. package/resources/memory-layers/entries.js +0 -58
  575. package/resources/memory-layers/entries.js.map +0 -1
  576. package/resources/memory-layers/entries.mjs +0 -54
  577. package/resources/memory-layers/entries.mjs.map +0 -1
  578. package/resources/memory-layers/index.d.mts +0 -3
  579. package/resources/memory-layers/index.d.mts.map +0 -1
  580. package/resources/memory-layers/index.d.ts +0 -3
  581. package/resources/memory-layers/index.d.ts.map +0 -1
  582. package/resources/memory-layers/index.js +0 -8
  583. package/resources/memory-layers/index.js.map +0 -1
  584. package/resources/memory-layers/index.mjs +0 -3
  585. package/resources/memory-layers/index.mjs.map +0 -1
  586. package/resources/memory-layers/memory-layers.d.mts +0 -196
  587. package/resources/memory-layers/memory-layers.d.mts.map +0 -1
  588. package/resources/memory-layers/memory-layers.d.ts +0 -196
  589. package/resources/memory-layers/memory-layers.d.ts.map +0 -1
  590. package/resources/memory-layers/memory-layers.js +0 -63
  591. package/resources/memory-layers/memory-layers.js.map +0 -1
  592. package/resources/memory-layers/memory-layers.mjs +0 -58
  593. package/resources/memory-layers/memory-layers.mjs.map +0 -1
  594. package/resources/memory-layers.d.mts +0 -2
  595. package/resources/memory-layers.d.mts.map +0 -1
  596. package/resources/memory-layers.d.ts +0 -2
  597. package/resources/memory-layers.d.ts.map +0 -1
  598. package/resources/memory-layers.js +0 -5
  599. package/resources/memory-layers.js.map +0 -1
  600. package/resources/memory-layers.mjs +0 -2
  601. package/resources/memory-layers.mjs.map +0 -1
  602. package/resources/models.d.mts +0 -315
  603. package/resources/models.d.mts.map +0 -1
  604. package/resources/models.d.ts +0 -315
  605. package/resources/models.d.ts.map +0 -1
  606. package/resources/models.js +0 -59
  607. package/resources/models.js.map +0 -1
  608. package/resources/models.mjs +0 -55
  609. package/resources/models.mjs.map +0 -1
  610. package/resources/objectives/feedback.d.mts +0 -126
  611. package/resources/objectives/feedback.d.mts.map +0 -1
  612. package/resources/objectives/feedback.d.ts +0 -126
  613. package/resources/objectives/feedback.d.ts.map +0 -1
  614. package/resources/objectives/feedback.js +0 -52
  615. package/resources/objectives/feedback.js.map +0 -1
  616. package/resources/objectives/feedback.mjs +0 -48
  617. package/resources/objectives/feedback.mjs.map +0 -1
  618. package/resources/objectives/index.d.mts +0 -6
  619. package/resources/objectives/index.d.mts.map +0 -1
  620. package/resources/objectives/index.d.ts +0 -6
  621. package/resources/objectives/index.d.ts.map +0 -1
  622. package/resources/objectives/index.js +0 -14
  623. package/resources/objectives/index.js.map +0 -1
  624. package/resources/objectives/index.mjs +0 -6
  625. package/resources/objectives/index.mjs.map +0 -1
  626. package/resources/objectives/objectives.d.mts +0 -1280
  627. package/resources/objectives/objectives.d.mts.map +0 -1
  628. package/resources/objectives/objectives.d.ts +0 -1280
  629. package/resources/objectives/objectives.d.ts.map +0 -1
  630. package/resources/objectives/objectives.js +0 -213
  631. package/resources/objectives/objectives.js.map +0 -1
  632. package/resources/objectives/objectives.mjs +0 -208
  633. package/resources/objectives/objectives.mjs.map +0 -1
  634. package/resources/objectives/tasks.d.mts +0 -88
  635. package/resources/objectives/tasks.d.mts.map +0 -1
  636. package/resources/objectives/tasks.d.ts +0 -88
  637. package/resources/objectives/tasks.d.ts.map +0 -1
  638. package/resources/objectives/tasks.js +0 -45
  639. package/resources/objectives/tasks.js.map +0 -1
  640. package/resources/objectives/tasks.mjs +0 -41
  641. package/resources/objectives/tasks.mjs.map +0 -1
  642. package/resources/objectives/tool-calls.d.mts +0 -379
  643. package/resources/objectives/tool-calls.d.mts.map +0 -1
  644. package/resources/objectives/tool-calls.d.ts +0 -379
  645. package/resources/objectives/tool-calls.d.ts.map +0 -1
  646. package/resources/objectives/tool-calls.js +0 -110
  647. package/resources/objectives/tool-calls.js.map +0 -1
  648. package/resources/objectives/tool-calls.mjs +0 -106
  649. package/resources/objectives/tool-calls.mjs.map +0 -1
  650. package/resources/objectives/tools.d.mts +0 -53
  651. package/resources/objectives/tools.d.mts.map +0 -1
  652. package/resources/objectives/tools.d.ts +0 -53
  653. package/resources/objectives/tools.d.ts.map +0 -1
  654. package/resources/objectives/tools.js +0 -28
  655. package/resources/objectives/tools.js.map +0 -1
  656. package/resources/objectives/tools.mjs +0 -24
  657. package/resources/objectives/tools.mjs.map +0 -1
  658. package/resources/objectives.d.mts +0 -2
  659. package/resources/objectives.d.mts.map +0 -1
  660. package/resources/objectives.d.ts +0 -2
  661. package/resources/objectives.d.ts.map +0 -1
  662. package/resources/objectives.js +0 -5
  663. package/resources/objectives.js.map +0 -1
  664. package/resources/objectives.mjs +0 -2
  665. package/resources/objectives.mjs.map +0 -1
  666. package/resources/profiles.d.mts +0 -16
  667. package/resources/profiles.d.mts.map +0 -1
  668. package/resources/profiles.d.ts +0 -16
  669. package/resources/profiles.d.ts.map +0 -1
  670. package/resources/profiles.js +0 -19
  671. package/resources/profiles.js.map +0 -1
  672. package/resources/profiles.mjs +0 -15
  673. package/resources/profiles.mjs.map +0 -1
  674. package/resources/search.d.mts +0 -33
  675. package/resources/search.d.mts.map +0 -1
  676. package/resources/search.d.ts +0 -33
  677. package/resources/search.d.ts.map +0 -1
  678. package/resources/search.js +0 -19
  679. package/resources/search.js.map +0 -1
  680. package/resources/search.mjs +0 -15
  681. package/resources/search.mjs.map +0 -1
  682. package/resources/shared.d.mts +0 -215
  683. package/resources/shared.d.mts.map +0 -1
  684. package/resources/shared.d.ts +0 -215
  685. package/resources/shared.d.ts.map +0 -1
  686. package/resources/shared.js +0 -3
  687. package/resources/shared.js.map +0 -1
  688. package/resources/shared.mjs +0 -2
  689. package/resources/shared.mjs.map +0 -1
  690. package/resources/tenants/index.d.mts +0 -3
  691. package/resources/tenants/index.d.mts.map +0 -1
  692. package/resources/tenants/index.d.ts +0 -3
  693. package/resources/tenants/index.d.ts.map +0 -1
  694. package/resources/tenants/index.js +0 -8
  695. package/resources/tenants/index.js.map +0 -1
  696. package/resources/tenants/index.mjs +0 -3
  697. package/resources/tenants/index.mjs.map +0 -1
  698. package/resources/tenants/subjects.d.mts +0 -43
  699. package/resources/tenants/subjects.d.mts.map +0 -1
  700. package/resources/tenants/subjects.d.ts +0 -43
  701. package/resources/tenants/subjects.d.ts.map +0 -1
  702. package/resources/tenants/subjects.js +0 -26
  703. package/resources/tenants/subjects.js.map +0 -1
  704. package/resources/tenants/subjects.mjs +0 -22
  705. package/resources/tenants/subjects.mjs.map +0 -1
  706. package/resources/tenants/tenants.d.mts +0 -158
  707. package/resources/tenants/tenants.d.mts.map +0 -1
  708. package/resources/tenants/tenants.d.ts +0 -158
  709. package/resources/tenants/tenants.d.ts.map +0 -1
  710. package/resources/tenants/tenants.js +0 -57
  711. package/resources/tenants/tenants.js.map +0 -1
  712. package/resources/tenants/tenants.mjs +0 -52
  713. package/resources/tenants/tenants.mjs.map +0 -1
  714. package/resources/tenants.d.mts +0 -2
  715. package/resources/tenants.d.mts.map +0 -1
  716. package/resources/tenants.d.ts +0 -2
  717. package/resources/tenants.d.ts.map +0 -1
  718. package/resources/tenants.js +0 -5
  719. package/resources/tenants.js.map +0 -1
  720. package/resources/tenants.mjs +0 -2
  721. package/resources/tenants.mjs.map +0 -1
  722. package/resources/tool-sets/index.d.mts +0 -4
  723. package/resources/tool-sets/index.d.mts.map +0 -1
  724. package/resources/tool-sets/index.d.ts +0 -4
  725. package/resources/tool-sets/index.d.ts.map +0 -1
  726. package/resources/tool-sets/index.js +0 -10
  727. package/resources/tool-sets/index.js.map +0 -1
  728. package/resources/tool-sets/index.mjs +0 -4
  729. package/resources/tool-sets/index.mjs.map +0 -1
  730. package/resources/tool-sets/secrets.d.mts +0 -135
  731. package/resources/tool-sets/secrets.d.mts.map +0 -1
  732. package/resources/tool-sets/secrets.d.ts +0 -135
  733. package/resources/tool-sets/secrets.d.ts.map +0 -1
  734. package/resources/tool-sets/secrets.js +0 -62
  735. package/resources/tool-sets/secrets.js.map +0 -1
  736. package/resources/tool-sets/secrets.mjs +0 -58
  737. package/resources/tool-sets/secrets.mjs.map +0 -1
  738. package/resources/tool-sets/tool-sets.d.mts +0 -595
  739. package/resources/tool-sets/tool-sets.d.mts.map +0 -1
  740. package/resources/tool-sets/tool-sets.d.ts +0 -595
  741. package/resources/tool-sets/tool-sets.d.ts.map +0 -1
  742. package/resources/tool-sets/tool-sets.js +0 -122
  743. package/resources/tool-sets/tool-sets.js.map +0 -1
  744. package/resources/tool-sets/tool-sets.mjs +0 -117
  745. package/resources/tool-sets/tool-sets.mjs.map +0 -1
  746. package/resources/tool-sets/tools.d.mts +0 -305
  747. package/resources/tool-sets/tools.d.mts.map +0 -1
  748. package/resources/tool-sets/tools.d.ts +0 -305
  749. package/resources/tool-sets/tools.d.ts.map +0 -1
  750. package/resources/tool-sets/tools.js +0 -84
  751. package/resources/tool-sets/tools.js.map +0 -1
  752. package/resources/tool-sets/tools.mjs +0 -80
  753. package/resources/tool-sets/tools.mjs.map +0 -1
  754. package/resources/tool-sets.d.mts +0 -2
  755. package/resources/tool-sets.d.mts.map +0 -1
  756. package/resources/tool-sets.d.ts +0 -2
  757. package/resources/tool-sets.d.ts.map +0 -1
  758. package/resources/tool-sets.js +0 -5
  759. package/resources/tool-sets.js.map +0 -1
  760. package/resources/tool-sets.mjs +0 -2
  761. package/resources/tool-sets.mjs.map +0 -1
  762. package/resources/uploads.d.mts +0 -107
  763. package/resources/uploads.d.mts.map +0 -1
  764. package/resources/uploads.d.ts +0 -107
  765. package/resources/uploads.d.ts.map +0 -1
  766. package/resources/uploads.js +0 -30
  767. package/resources/uploads.js.map +0 -1
  768. package/resources/uploads.mjs +0 -26
  769. package/resources/uploads.mjs.map +0 -1
  770. package/resources/webhooks.d.mts +0 -92
  771. package/resources/webhooks.d.mts.map +0 -1
  772. package/resources/webhooks.d.ts +0 -92
  773. package/resources/webhooks.d.ts.map +0 -1
  774. package/resources/webhooks.js +0 -22
  775. package/resources/webhooks.js.map +0 -1
  776. package/resources/webhooks.mjs +0 -18
  777. package/resources/webhooks.mjs.map +0 -1
  778. package/resources/widget-sessions.d.mts +0 -388
  779. package/resources/widget-sessions.d.mts.map +0 -1
  780. package/resources/widget-sessions.d.ts +0 -388
  781. package/resources/widget-sessions.d.ts.map +0 -1
  782. package/resources/widget-sessions.js +0 -78
  783. package/resources/widget-sessions.js.map +0 -1
  784. package/resources/widget-sessions.mjs +0 -74
  785. package/resources/widget-sessions.mjs.map +0 -1
  786. package/resources/widgets.d.mts +0 -225
  787. package/resources/widgets.d.mts.map +0 -1
  788. package/resources/widgets.d.ts +0 -225
  789. package/resources/widgets.d.ts.map +0 -1
  790. package/resources/widgets.js +0 -82
  791. package/resources/widgets.js.map +0 -1
  792. package/resources/widgets.mjs +0 -78
  793. package/resources/widgets.mjs.map +0 -1
  794. package/resources/workspace-admin/index.d.mts +0 -4
  795. package/resources/workspace-admin/index.d.mts.map +0 -1
  796. package/resources/workspace-admin/index.d.ts +0 -4
  797. package/resources/workspace-admin/index.d.ts.map +0 -1
  798. package/resources/workspace-admin/index.js +0 -10
  799. package/resources/workspace-admin/index.js.map +0 -1
  800. package/resources/workspace-admin/index.mjs +0 -4
  801. package/resources/workspace-admin/index.mjs.map +0 -1
  802. package/resources/workspace-admin/members.d.mts +0 -90
  803. package/resources/workspace-admin/members.d.mts.map +0 -1
  804. package/resources/workspace-admin/members.d.ts +0 -90
  805. package/resources/workspace-admin/members.d.ts.map +0 -1
  806. package/resources/workspace-admin/members.js +0 -73
  807. package/resources/workspace-admin/members.js.map +0 -1
  808. package/resources/workspace-admin/members.mjs +0 -69
  809. package/resources/workspace-admin/members.mjs.map +0 -1
  810. package/resources/workspace-admin/profiles.d.mts +0 -46
  811. package/resources/workspace-admin/profiles.d.mts.map +0 -1
  812. package/resources/workspace-admin/profiles.d.ts +0 -46
  813. package/resources/workspace-admin/profiles.d.ts.map +0 -1
  814. package/resources/workspace-admin/profiles.js +0 -35
  815. package/resources/workspace-admin/profiles.js.map +0 -1
  816. package/resources/workspace-admin/profiles.mjs +0 -31
  817. package/resources/workspace-admin/profiles.mjs.map +0 -1
  818. package/resources/workspace-admin/workspace-admin.d.mts +0 -227
  819. package/resources/workspace-admin/workspace-admin.d.mts.map +0 -1
  820. package/resources/workspace-admin/workspace-admin.d.ts +0 -227
  821. package/resources/workspace-admin/workspace-admin.d.ts.map +0 -1
  822. package/resources/workspace-admin/workspace-admin.js +0 -111
  823. package/resources/workspace-admin/workspace-admin.js.map +0 -1
  824. package/resources/workspace-admin/workspace-admin.mjs +0 -106
  825. package/resources/workspace-admin/workspace-admin.mjs.map +0 -1
  826. package/resources/workspace-admin.d.mts +0 -2
  827. package/resources/workspace-admin.d.mts.map +0 -1
  828. package/resources/workspace-admin.d.ts +0 -2
  829. package/resources/workspace-admin.d.ts.map +0 -1
  830. package/resources/workspace-admin.js +0 -5
  831. package/resources/workspace-admin.js.map +0 -1
  832. package/resources/workspace-admin.mjs +0 -2
  833. package/resources/workspace-admin.mjs.map +0 -1
  834. package/resources/workspace-secrets.d.mts +0 -134
  835. package/resources/workspace-secrets.d.mts.map +0 -1
  836. package/resources/workspace-secrets.d.ts +0 -134
  837. package/resources/workspace-secrets.d.ts.map +0 -1
  838. package/resources/workspace-secrets.js +0 -52
  839. package/resources/workspace-secrets.js.map +0 -1
  840. package/resources/workspace-secrets.mjs +0 -48
  841. package/resources/workspace-secrets.mjs.map +0 -1
  842. package/resources/workspaces.d.mts +0 -70
  843. package/resources/workspaces.d.mts.map +0 -1
  844. package/resources/workspaces.d.ts +0 -70
  845. package/resources/workspaces.d.ts.map +0 -1
  846. package/resources/workspaces.js +0 -23
  847. package/resources/workspaces.js.map +0 -1
  848. package/resources/workspaces.mjs +0 -19
  849. package/resources/workspaces.mjs.map +0 -1
  850. package/resources.d.mts +0 -2
  851. package/resources.d.mts.map +0 -1
  852. package/resources.d.ts +0 -2
  853. package/resources.d.ts.map +0 -1
  854. package/resources.js +0 -5
  855. package/resources.js.map +0 -1
  856. package/resources.mjs +0 -2
  857. package/resources.mjs.map +0 -1
  858. package/src/api-promise.ts +0 -2
  859. package/src/core/README.md +0 -3
  860. package/src/core/api-promise.ts +0 -90
  861. package/src/core/resource.ts +0 -9
  862. package/src/core/streaming.ts +0 -319
  863. package/src/core/uploads.ts +0 -2
  864. package/src/error.ts +0 -2
  865. package/src/internal/README.md +0 -3
  866. package/src/internal/builtin-types.ts +0 -91
  867. package/src/internal/decoders/line.ts +0 -135
  868. package/src/internal/detect-platform.ts +0 -194
  869. package/src/internal/errors.ts +0 -31
  870. package/src/internal/headers.ts +0 -95
  871. package/src/internal/parse.ts +0 -68
  872. package/src/internal/qs/LICENSE.md +0 -13
  873. package/src/internal/qs/README.md +0 -3
  874. package/src/internal/qs/formats.ts +0 -10
  875. package/src/internal/qs/index.ts +0 -13
  876. package/src/internal/qs/stringify.ts +0 -385
  877. package/src/internal/qs/types.ts +0 -71
  878. package/src/internal/qs/utils.ts +0 -265
  879. package/src/internal/request-options.ts +0 -91
  880. package/src/internal/shim-types.ts +0 -24
  881. package/src/internal/shims.ts +0 -105
  882. package/src/internal/to-file.ts +0 -154
  883. package/src/internal/types.ts +0 -91
  884. package/src/internal/uploads.ts +0 -187
  885. package/src/internal/utils/base64.ts +0 -38
  886. package/src/internal/utils/bytes.ts +0 -32
  887. package/src/internal/utils/env.ts +0 -16
  888. package/src/internal/utils/log.ts +0 -126
  889. package/src/internal/utils/path.ts +0 -88
  890. package/src/internal/utils/query.ts +0 -5
  891. package/src/internal/utils/sleep.ts +0 -1
  892. package/src/internal/utils/uuid.ts +0 -15
  893. package/src/internal/utils/values.ts +0 -103
  894. package/src/internal/utils.ts +0 -7
  895. package/src/lib/.keep +0 -3
  896. package/src/pagination.ts +0 -2
  897. package/src/resource.ts +0 -2
  898. package/src/resources/account.ts +0 -158
  899. package/src/resources/agents/agents.ts +0 -616
  900. package/src/resources/agents/feedback.ts +0 -96
  901. package/src/resources/agents/index.ts +0 -75
  902. package/src/resources/agents/schedules.ts +0 -541
  903. package/src/resources/agents/variations.ts +0 -981
  904. package/src/resources/agents/webhook-deliveries.ts +0 -176
  905. package/src/resources/global-api-key.ts +0 -44
  906. package/src/resources/index.ts +0 -307
  907. package/src/resources/memory-layers/entries.ts +0 -373
  908. package/src/resources/memory-layers/index.ts +0 -29
  909. package/src/resources/memory-layers/memory-layers.ts +0 -314
  910. package/src/resources/objectives/feedback.ts +0 -171
  911. package/src/resources/objectives/index.ts +0 -115
  912. package/src/resources/objectives/objectives.ts +0 -1787
  913. package/src/resources/objectives/tasks.ts +0 -129
  914. package/src/resources/objectives/tool-calls.ts +0 -572
  915. package/src/resources/objectives/tools.ts +0 -74
  916. package/src/resources/search.ts +0 -52
  917. package/src/resources/shared.ts +0 -234
  918. package/src/resources/tenants/index.ts +0 -13
  919. package/src/resources/tenants/subjects.ts +0 -61
  920. package/src/resources/tenants/tenants.ts +0 -218
  921. package/src/resources/tool-sets/index.ts +0 -87
  922. package/src/resources/tool-sets/secrets.ts +0 -223
  923. package/src/resources/tool-sets/tool-sets.ts +0 -934
  924. package/src/resources/tool-sets/tools.ts +0 -456
  925. package/src/resources/webhooks.ts +0 -122
  926. package/src/resources/workspace-admin/index.ts +0 -12
  927. package/src/resources/workspace-admin/members.ts +0 -131
  928. package/src/resources/workspace-admin/profiles.ts +0 -58
  929. package/src/resources/workspace-admin/workspace-admin.ts +0 -302
  930. package/src/resources.ts +0 -1
  931. package/src/streaming.ts +0 -2
  932. package/src/tsconfig.json +0 -11
  933. package/src/uploads.ts +0 -2
  934. package/src/version.ts +0 -1
  935. package/streaming.d.mts +0 -3
  936. package/streaming.d.mts.map +0 -1
  937. package/streaming.d.ts +0 -3
  938. package/streaming.d.ts.map +0 -1
  939. package/streaming.js +0 -6
  940. package/streaming.js.map +0 -1
  941. package/streaming.mjs +0 -3
  942. package/streaming.mjs.map +0 -1
  943. package/uploads.d.mts +0 -3
  944. package/uploads.d.mts.map +0 -1
  945. package/uploads.d.ts +0 -3
  946. package/uploads.d.ts.map +0 -1
  947. package/uploads.js +0 -6
  948. package/uploads.js.map +0 -1
  949. package/uploads.mjs +0 -3
  950. package/uploads.mjs.map +0 -1
  951. package/version.d.mts +0 -2
  952. package/version.d.mts.map +0 -1
  953. package/version.d.ts +0 -2
  954. package/version.d.ts.map +0 -1
  955. package/version.js +0 -5
  956. package/version.js.map +0 -1
  957. package/version.mjs +0 -2
  958. package/version.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/core/pagination.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,MAAM,OAAO,IAAI;IAEJ;IACA;IACQ;IAHnB,YACW,KAAU,EACV,UAA8B,EACtB,SAA+C;QAFvD,UAAK,GAAL,KAAK,CAAK;QACV,eAAU,GAAV,UAAU,CAAoB;QACtB,cAAS,GAAT,SAAS,CAAsC;IAC/D,CAAC;IAEJ,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAoB,CAAC,CAAC;IACnD,CAAC;IAED,yDAAyD;IACzD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,IAAI,IAAI,GAAmB,IAAI,CAAC;QAChC,OAAO,IAAI,EAAE,CAAC;YACZ,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,CAAC;YAC1C,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;CACF","sourcesContent":["/** Cursor pagination. Pages are async-iterable across page boundaries. */\n\nexport class Page<T> implements AsyncIterable<T> {\n constructor(\n readonly items: T[],\n readonly nextCursor: string | undefined,\n private readonly fetchPage: (cursor: string) => Promise<Page<T>>,\n ) {}\n\n hasNextPage(): boolean {\n return this.nextCursor !== undefined && this.nextCursor !== '';\n }\n\n async getNextPage(): Promise<Page<T> | null> {\n if (!this.hasNextPage()) return null;\n return this.fetchPage(this.nextCursor as string);\n }\n\n /** Iterate every item on every page, fetching lazily. */\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n let page: Page<T> | null = this;\n while (page) {\n for (const item of page.items) yield item;\n page = await page.getNextPage();\n }\n }\n}\n"]}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Server-sent events over fetch. Parses the wire format incrementally from a
3
+ * ReadableStream — multi-line data, event names, comments, CRLF — with no
4
+ * dependencies. Each event's `data` is JSON-decoded to `T`.
5
+ */
6
+ export interface ServerSentEvent<T> {
7
+ event: string | undefined;
8
+ data: T;
9
+ id: string | undefined;
10
+ }
11
+ export declare class Stream<T> implements AsyncIterable<T> {
12
+ private response;
13
+ private readonly signal?;
14
+ private readonly skipEvents;
15
+ private readonly reconnect?;
16
+ /**
17
+ * The resume checkpoint: seeded from the id this stream was resumed with,
18
+ * then updated by `id:` fields (persistent across events per the SSE
19
+ * spec). Pass it as `options.lastEventId` to resume after a disconnect.
20
+ */
21
+ lastEventId: string | undefined;
22
+ private releaseDeadline;
23
+ /** Server `retry:` hint (ms), used as the reconnection delay when set. */
24
+ private retryHintMs;
25
+ /** Stream-owned cancellation: close() trips it so backoff sleeps and
26
+ * in-flight reconnect handshakes settle immediately. */
27
+ private readonly closer;
28
+ private closed;
29
+ private consumed;
30
+ private activeReader;
31
+ constructor(response: Response, signal?: AbortSignal | undefined, resumedFrom?: string, skipEvents?: readonly string[], reconnect?: ((lastEventId: string | undefined, signal: AbortSignal) => Promise<Response>) | undefined);
32
+ /**
33
+ * Idempotent explicit close: cancels the underlying response body exactly
34
+ * once and detaches deadline state. Safe before iteration (an opened but
35
+ * never-iterated stream would otherwise hold its connection), during
36
+ * iteration from another control path, and after EOF.
37
+ */
38
+ close(): Promise<void>;
39
+ /** Iterate decoded event payloads. */
40
+ [Symbol.asyncIterator](): AsyncIterator<T>;
41
+ /** Iterate full events (name + id + decoded data). */
42
+ events(): AsyncGenerator<ServerSentEvent<T>>;
43
+ }
44
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/core/sse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC;IACR,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;CACxB;AAED,qBAAa,MAAM,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;IAmB9C,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAIxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAM3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IA7B7B;;;;OAIG;IACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEhC,OAAO,CAAC,eAAe,CAA2B;IAClD,0EAA0E;IAC1E,OAAO,CAAC,WAAW,CAAqB;IACxC;4DACwD;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAsD;gBAGhE,QAAQ,EAAE,QAAQ,EACT,MAAM,CAAC,EAAE,WAAW,YAAA,EACrC,WAAW,CAAC,EAAE,MAAM,EAGH,UAAU,GAAE,SAAS,MAAM,EAAO,EAMlC,SAAS,CAAC,GAAE,CAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,QAAQ,CAAC,aAAA;IAMxB;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB5B,sCAAsC;IAC/B,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC;IAMjD,sDAAsD;IAC/C,MAAM,IAAI,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CAoPpD"}
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Server-sent events over fetch. Parses the wire format incrementally from a
3
+ * ReadableStream — multi-line data, event names, comments, CRLF — with no
4
+ * dependencies. Each event's `data` is JSON-decoded to `T`.
5
+ */
6
+ import { APIConnectionError, APIResponseError, APIUserAbortError } from './error.js';
7
+ import { takeStreamCleanup } from './http.js';
8
+ export class Stream {
9
+ response;
10
+ signal;
11
+ skipEvents;
12
+ reconnect;
13
+ /**
14
+ * The resume checkpoint: seeded from the id this stream was resumed with,
15
+ * then updated by `id:` fields (persistent across events per the SSE
16
+ * spec). Pass it as `options.lastEventId` to resume after a disconnect.
17
+ */
18
+ lastEventId;
19
+ releaseDeadline;
20
+ /** Server `retry:` hint (ms), used as the reconnection delay when set. */
21
+ retryHintMs;
22
+ /** Stream-owned cancellation: close() trips it so backoff sleeps and
23
+ * in-flight reconnect handshakes settle immediately. */
24
+ closer = new AbortController();
25
+ closed = false;
26
+ consumed = false;
27
+ activeReader;
28
+ constructor(response, signal, resumedFrom,
29
+ // Transport-housekeeping event names (`event:` field) skipped without
30
+ // decoding; their `id:` fields still advance the resume checkpoint.
31
+ skipEvents = [],
32
+ // Re-issues the request with the current resume checkpoint. When set,
33
+ // a MID-STREAM transport drop reconnects automatically (like the
34
+ // platform's EventSource): bounded attempts, backoff honoring the
35
+ // server's `retry:` hint, counter reset once events flow again. A clean
36
+ // EOF, an explicit close(), and a caller abort NEVER reconnect.
37
+ reconnect) {
38
+ this.response = response;
39
+ this.signal = signal;
40
+ this.skipEvents = skipEvents;
41
+ this.reconnect = reconnect;
42
+ this.lastEventId = resumedFrom;
43
+ this.releaseDeadline = takeStreamCleanup(response);
44
+ }
45
+ /**
46
+ * Idempotent explicit close: cancels the underlying response body exactly
47
+ * once and detaches deadline state. Safe before iteration (an opened but
48
+ * never-iterated stream would otherwise hold its connection), during
49
+ * iteration from another control path, and after EOF.
50
+ */
51
+ async close() {
52
+ if (this.closed)
53
+ return;
54
+ this.closed = true;
55
+ this.closer.abort();
56
+ if (this.activeReader) {
57
+ // The body is LOCKED to the active reader: body.cancel() would
58
+ // reject, silently doing nothing. Cancel the reader itself — the
59
+ // pending read() settles, the generator's finally runs the terminal
60
+ // cleanup (deadline release included), and the consumer unblocks.
61
+ try {
62
+ await this.activeReader.cancel();
63
+ }
64
+ catch {
65
+ // Reader already errored/released; the generator finally cleans up.
66
+ }
67
+ return;
68
+ }
69
+ // Pre-iteration close: no reader owns the body yet.
70
+ this.releaseDeadline?.();
71
+ try {
72
+ await this.response.body?.cancel();
73
+ }
74
+ catch {
75
+ // Already closed.
76
+ }
77
+ }
78
+ /** Iterate decoded event payloads. */
79
+ async *[Symbol.asyncIterator]() {
80
+ for await (const event of this.events()) {
81
+ yield event.data;
82
+ }
83
+ }
84
+ /** Iterate full events (name + id + decoded data). */
85
+ async *events() {
86
+ // One Stream wraps exactly one response body. The consumed transition
87
+ // is synchronous (before any await/getReader), so a competing second
88
+ // iterator — concurrent or after EOF/error — deterministically gets the
89
+ // stable SDK error instead of a raw locked-stream TypeError or a silent
90
+ // empty sequence. A closed-but-never-consumed stream still ends empty.
91
+ if (this.closed && !this.consumed)
92
+ return;
93
+ if (this.consumed) {
94
+ throw new Error('stream already consumed — reconnect with a new call passing { lastEventId: stream.lastEventId }');
95
+ }
96
+ this.consumed = true;
97
+ const firstBody = this.response.body;
98
+ if (!firstBody)
99
+ throw new Error('SSE response has no body');
100
+ // Connection-local: a reconnect swaps in a FRESH decoder, so a partial
101
+ // UTF-8 code point from the dead connection cannot corrupt the first
102
+ // resumed event.
103
+ let decoder = new TextDecoder();
104
+ let reader = firstBody.getReader();
105
+ this.activeReader = reader;
106
+ let buffer = '';
107
+ let dataLines = [];
108
+ let eventName;
109
+ // Consecutive failed reconnects; reset whenever a chunk arrives.
110
+ let reconnectAttempts = 0;
111
+ const MAX_RECONNECTS = 5;
112
+ // A mid-stream transport drop swaps in a fresh connection resumed from
113
+ // the checkpoint. Partial buffered lines from the dead connection are
114
+ // DISCARDED — the server re-sends everything after Last-Event-ID.
115
+ const tryReconnect = async () => {
116
+ while (this.reconnect && !this.closed && !this.signal?.aborted && reconnectAttempts < MAX_RECONNECTS) {
117
+ const delay = this.retryHintMs ?? Math.min(500 * 2 ** reconnectAttempts, 10_000);
118
+ reconnectAttempts++;
119
+ // Abortable sleep: BOTH the caller's signal and the stream's own
120
+ // closer wake it, and listeners are removed on every exit path so a
121
+ // long-lived flapping stream cannot accumulate them.
122
+ await new Promise((resolve) => {
123
+ const finish = () => {
124
+ clearTimeout(timer);
125
+ this.signal?.removeEventListener('abort', finish);
126
+ this.closer.signal.removeEventListener('abort', finish);
127
+ resolve();
128
+ };
129
+ const timer = setTimeout(finish, delay);
130
+ this.signal?.addEventListener('abort', finish);
131
+ this.closer.signal.addEventListener('abort', finish);
132
+ });
133
+ if (this.closed || this.signal?.aborted)
134
+ return false;
135
+ let next;
136
+ try {
137
+ next = await this.reconnect(this.lastEventId, this.closer.signal);
138
+ }
139
+ catch (err) {
140
+ if (this.closed)
141
+ return false;
142
+ // A TRANSPORT handshake failure (server restarting, connection
143
+ // refused) consumes budget and retries; an HTTP-level failure
144
+ // (e.g. expired credentials -> APIError) propagates immediately —
145
+ // reconnecting cannot fix it and must not mask it.
146
+ if (err instanceof APIConnectionError)
147
+ continue;
148
+ throw err;
149
+ }
150
+ if (this.closed) {
151
+ void next.body?.cancel().catch(() => { });
152
+ return false;
153
+ }
154
+ // Release the SUPERSEDED connection completely: cancel its reader
155
+ // (unlocking the old body) and its deadline cleanup, exactly once.
156
+ try {
157
+ await reader.cancel();
158
+ }
159
+ catch {
160
+ // Dead reader.
161
+ }
162
+ reader.releaseLock();
163
+ this.releaseDeadline?.();
164
+ this.response = next;
165
+ this.releaseDeadline = takeStreamCleanup(next);
166
+ const nextBody = next.body;
167
+ if (!nextBody)
168
+ throw new Error('SSE response has no body');
169
+ reader = nextBody.getReader();
170
+ this.activeReader = reader;
171
+ buffer = '';
172
+ dataLines = [];
173
+ eventName = undefined;
174
+ decoder = new TextDecoder();
175
+ return true;
176
+ }
177
+ return false;
178
+ };
179
+ const flush = () => {
180
+ if (dataLines.length === 0)
181
+ return undefined;
182
+ const raw = dataLines.join('\n');
183
+ dataLines = [];
184
+ const name = eventName;
185
+ eventName = undefined;
186
+ // Housekeeping frames (e.g. ping/open) never reach the consumer and
187
+ // never JSON-decode - but their id: has already advanced the resume
188
+ // checkpoint above.
189
+ if (name !== undefined && this.skipEvents.includes(name))
190
+ return undefined;
191
+ let data;
192
+ try {
193
+ data = JSON.parse(raw);
194
+ }
195
+ catch (err) {
196
+ // Malformed event JSON is a PROTOCOL error, distinct from transport
197
+ // failure.
198
+ throw new APIResponseError(this.response.status, 'SSE event data is not valid JSON', err);
199
+ }
200
+ // Per the SSE spec the last-event-ID buffer persists across events
201
+ // until another `id:` field changes it (an empty one resets it).
202
+ return { event: name, data, id: this.lastEventId };
203
+ };
204
+ // WHATWG event streams terminate lines with LF, CRLF, OR bare CR; a CR
205
+ // at a chunk boundary must wait for the next chunk to see whether an LF
206
+ // follows (CRLF is one terminator, never two).
207
+ const nextLine = (atEof) => {
208
+ for (let i = 0; i < buffer.length; i++) {
209
+ const ch = buffer[i];
210
+ if (ch === '\n') {
211
+ const line = buffer.slice(0, i);
212
+ buffer = buffer.slice(i + 1);
213
+ return line;
214
+ }
215
+ if (ch === '\r') {
216
+ if (i + 1 < buffer.length) {
217
+ const line = buffer.slice(0, i);
218
+ buffer = buffer.slice(buffer[i + 1] === '\n' ? i + 2 : i + 1);
219
+ return line;
220
+ }
221
+ if (atEof) {
222
+ const line = buffer.slice(0, i);
223
+ buffer = '';
224
+ return line;
225
+ }
226
+ return null; // possible CRLF split across chunks
227
+ }
228
+ }
229
+ return null;
230
+ };
231
+ const processLine = (line) => {
232
+ if (line === '')
233
+ return flush();
234
+ if (line.startsWith(':'))
235
+ return undefined; // comment / keep-alive
236
+ const colonAt = line.indexOf(':');
237
+ const field = colonAt === -1 ? line : line.slice(0, colonAt);
238
+ let value = colonAt === -1 ? '' : line.slice(colonAt + 1);
239
+ if (value.startsWith(' '))
240
+ value = value.slice(1);
241
+ switch (field) {
242
+ case 'data':
243
+ dataLines.push(value);
244
+ break;
245
+ case 'event':
246
+ eventName = value;
247
+ break;
248
+ case 'id':
249
+ // Per the event-stream algorithm, ids containing U+0000 are
250
+ // ignored entirely; an empty id resets the buffer.
251
+ if (!value.includes('\0')) {
252
+ this.lastEventId = value === '' ? undefined : value;
253
+ }
254
+ break;
255
+ case 'retry':
256
+ // Reconnection-delay hint; honored when auto-reconnect is active.
257
+ if (/^[0-9]+$/.test(value))
258
+ this.retryHintMs = Math.min(Number(value), 60_000);
259
+ break;
260
+ }
261
+ return undefined;
262
+ };
263
+ try {
264
+ while (true) {
265
+ if (this.signal?.aborted)
266
+ throw new APIUserAbortError();
267
+ let done;
268
+ let value;
269
+ try {
270
+ ({ done, value } = await reader.read());
271
+ }
272
+ catch (err) {
273
+ // A user abort mid-read surfaces as a raw AbortError DOMException;
274
+ // the public contract is APIUserAbortError regardless of when the
275
+ // abort lands. Partial buffered events are NOT flushed. Any other
276
+ // read failure is a transport failure — auto-reconnect resumes
277
+ // from the checkpoint when configured; otherwise the public
278
+ // contract is APIConnectionError before AND after response
279
+ // headers, never a runtime-specific error shape.
280
+ if (this.signal?.aborted)
281
+ throw new APIUserAbortError();
282
+ if (this.closed)
283
+ break;
284
+ if (await tryReconnect())
285
+ continue;
286
+ if (this.closed || this.signal?.aborted)
287
+ break;
288
+ throw new APIConnectionError(err);
289
+ }
290
+ // Re-check AFTER every awaited read: a chunk that arrives
291
+ // concurrently with close() must not be processed.
292
+ if (this.closed)
293
+ break;
294
+ if (done)
295
+ break;
296
+ // Bytes flowing again: the reconnect budget is per-outage.
297
+ reconnectAttempts = 0;
298
+ buffer += decoder.decode(value, { stream: true });
299
+ let line;
300
+ while ((line = nextLine(false)) !== null) {
301
+ const event = processLine(line);
302
+ if (event)
303
+ yield event;
304
+ }
305
+ }
306
+ // The stream may end without a trailing newline: the leftover buffer
307
+ // is still line data and must be parsed, not dropped.
308
+ buffer += decoder.decode();
309
+ let tail;
310
+ while ((tail = nextLine(true)) !== null) {
311
+ const event = processLine(tail);
312
+ if (event)
313
+ yield event;
314
+ }
315
+ if (buffer !== '') {
316
+ const event = processLine(buffer);
317
+ if (event)
318
+ yield event;
319
+ }
320
+ // Spec-compliant servers end with a blank line, but flush a trailing
321
+ // event if the stream closed without one.
322
+ const last = flush();
323
+ if (last)
324
+ yield last;
325
+ }
326
+ finally {
327
+ // EVERY terminal path — EOF, decode error, transport error, caller
328
+ // abort, explicit close, early consumer return — releases the
329
+ // deadline listener and the body exactly once.
330
+ this.closed = true;
331
+ this.activeReader = undefined;
332
+ this.releaseDeadline?.();
333
+ try {
334
+ await reader.cancel();
335
+ }
336
+ catch {
337
+ // Already cancelled/errored.
338
+ }
339
+ reader.releaseLock();
340
+ try {
341
+ // The CURRENT connection's body (reconnects swap this.response).
342
+ await this.response.body?.cancel();
343
+ }
344
+ catch {
345
+ // Already closed.
346
+ }
347
+ }
348
+ }
349
+ }
350
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/core/sse.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Server-sent events over fetch. Parses the wire format incrementally from a\n * ReadableStream — multi-line data, event names, comments, CRLF — with no\n * dependencies. Each event's `data` is JSON-decoded to `T`.\n */\n\nimport { APIConnectionError, APIResponseError, APIUserAbortError } from './error.js';\nimport { takeStreamCleanup } from './http.js';\n\nexport interface ServerSentEvent<T> {\n event: string | undefined;\n data: T;\n id: string | undefined;\n}\n\nexport class Stream<T> implements AsyncIterable<T> {\n /**\n * The resume checkpoint: seeded from the id this stream was resumed with,\n * then updated by `id:` fields (persistent across events per the SSE\n * spec). Pass it as `options.lastEventId` to resume after a disconnect.\n */\n lastEventId: string | undefined;\n\n private releaseDeadline: (() => void) | undefined;\n /** Server `retry:` hint (ms), used as the reconnection delay when set. */\n private retryHintMs: number | undefined;\n /** Stream-owned cancellation: close() trips it so backoff sleeps and\n * in-flight reconnect handshakes settle immediately. */\n private readonly closer = new AbortController();\n private closed = false;\n private consumed = false;\n private activeReader: ReadableStreamDefaultReader<Uint8Array> | undefined;\n\n constructor(\n private response: Response,\n private readonly signal?: AbortSignal,\n resumedFrom?: string,\n // Transport-housekeeping event names (`event:` field) skipped without\n // decoding; their `id:` fields still advance the resume checkpoint.\n private readonly skipEvents: readonly string[] = [],\n // Re-issues the request with the current resume checkpoint. When set,\n // a MID-STREAM transport drop reconnects automatically (like the\n // platform's EventSource): bounded attempts, backoff honoring the\n // server's `retry:` hint, counter reset once events flow again. A clean\n // EOF, an explicit close(), and a caller abort NEVER reconnect.\n private readonly reconnect?: (\n lastEventId: string | undefined,\n signal: AbortSignal,\n ) => Promise<Response>,\n ) {\n this.lastEventId = resumedFrom;\n this.releaseDeadline = takeStreamCleanup(response);\n }\n\n /**\n * Idempotent explicit close: cancels the underlying response body exactly\n * once and detaches deadline state. Safe before iteration (an opened but\n * never-iterated stream would otherwise hold its connection), during\n * iteration from another control path, and after EOF.\n */\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n this.closer.abort();\n if (this.activeReader) {\n // The body is LOCKED to the active reader: body.cancel() would\n // reject, silently doing nothing. Cancel the reader itself — the\n // pending read() settles, the generator's finally runs the terminal\n // cleanup (deadline release included), and the consumer unblocks.\n try {\n await this.activeReader.cancel();\n } catch {\n // Reader already errored/released; the generator finally cleans up.\n }\n return;\n }\n // Pre-iteration close: no reader owns the body yet.\n this.releaseDeadline?.();\n try {\n await this.response.body?.cancel();\n } catch {\n // Already closed.\n }\n }\n\n /** Iterate decoded event payloads. */\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n for await (const event of this.events()) {\n yield event.data;\n }\n }\n\n /** Iterate full events (name + id + decoded data). */\n async *events(): AsyncGenerator<ServerSentEvent<T>> {\n // One Stream wraps exactly one response body. The consumed transition\n // is synchronous (before any await/getReader), so a competing second\n // iterator — concurrent or after EOF/error — deterministically gets the\n // stable SDK error instead of a raw locked-stream TypeError or a silent\n // empty sequence. A closed-but-never-consumed stream still ends empty.\n if (this.closed && !this.consumed) return;\n if (this.consumed) {\n throw new Error(\n 'stream already consumed — reconnect with a new call passing { lastEventId: stream.lastEventId }',\n );\n }\n this.consumed = true;\n const firstBody = this.response.body;\n if (!firstBody) throw new Error('SSE response has no body');\n // Connection-local: a reconnect swaps in a FRESH decoder, so a partial\n // UTF-8 code point from the dead connection cannot corrupt the first\n // resumed event.\n let decoder = new TextDecoder();\n let reader = firstBody.getReader();\n this.activeReader = reader;\n let buffer = '';\n let dataLines: string[] = [];\n let eventName: string | undefined;\n // Consecutive failed reconnects; reset whenever a chunk arrives.\n let reconnectAttempts = 0;\n const MAX_RECONNECTS = 5;\n\n // A mid-stream transport drop swaps in a fresh connection resumed from\n // the checkpoint. Partial buffered lines from the dead connection are\n // DISCARDED — the server re-sends everything after Last-Event-ID.\n const tryReconnect = async (): Promise<boolean> => {\n while (this.reconnect && !this.closed && !this.signal?.aborted && reconnectAttempts < MAX_RECONNECTS) {\n const delay = this.retryHintMs ?? Math.min(500 * 2 ** reconnectAttempts, 10_000);\n reconnectAttempts++;\n // Abortable sleep: BOTH the caller's signal and the stream's own\n // closer wake it, and listeners are removed on every exit path so a\n // long-lived flapping stream cannot accumulate them.\n await new Promise<void>((resolve) => {\n const finish = () => {\n clearTimeout(timer);\n this.signal?.removeEventListener('abort', finish);\n this.closer.signal.removeEventListener('abort', finish);\n resolve();\n };\n const timer = setTimeout(finish, delay);\n this.signal?.addEventListener('abort', finish);\n this.closer.signal.addEventListener('abort', finish);\n });\n if (this.closed || this.signal?.aborted) return false;\n let next: Response;\n try {\n next = await this.reconnect(this.lastEventId, this.closer.signal);\n } catch (err) {\n if (this.closed) return false;\n // A TRANSPORT handshake failure (server restarting, connection\n // refused) consumes budget and retries; an HTTP-level failure\n // (e.g. expired credentials -> APIError) propagates immediately —\n // reconnecting cannot fix it and must not mask it.\n if (err instanceof APIConnectionError) continue;\n throw err;\n }\n if (this.closed) {\n void next.body?.cancel().catch(() => {});\n return false;\n }\n // Release the SUPERSEDED connection completely: cancel its reader\n // (unlocking the old body) and its deadline cleanup, exactly once.\n try {\n await reader.cancel();\n } catch {\n // Dead reader.\n }\n reader.releaseLock();\n this.releaseDeadline?.();\n this.response = next;\n this.releaseDeadline = takeStreamCleanup(next);\n const nextBody = next.body;\n if (!nextBody) throw new Error('SSE response has no body');\n reader = nextBody.getReader();\n this.activeReader = reader;\n buffer = '';\n dataLines = [];\n eventName = undefined;\n decoder = new TextDecoder();\n return true;\n }\n return false;\n };\n\n const flush = (): ServerSentEvent<T> | undefined => {\n if (dataLines.length === 0) return undefined;\n const raw = dataLines.join('\\n');\n dataLines = [];\n const name = eventName;\n eventName = undefined;\n // Housekeeping frames (e.g. ping/open) never reach the consumer and\n // never JSON-decode - but their id: has already advanced the resume\n // checkpoint above.\n if (name !== undefined && this.skipEvents.includes(name)) return undefined;\n let data: T;\n try {\n data = JSON.parse(raw) as T;\n } catch (err) {\n // Malformed event JSON is a PROTOCOL error, distinct from transport\n // failure.\n throw new APIResponseError(this.response.status, 'SSE event data is not valid JSON', err);\n }\n // Per the SSE spec the last-event-ID buffer persists across events\n // until another `id:` field changes it (an empty one resets it).\n return { event: name, data, id: this.lastEventId };\n };\n\n // WHATWG event streams terminate lines with LF, CRLF, OR bare CR; a CR\n // at a chunk boundary must wait for the next chunk to see whether an LF\n // follows (CRLF is one terminator, never two).\n const nextLine = (atEof: boolean): string | null => {\n for (let i = 0; i < buffer.length; i++) {\n const ch = buffer[i];\n if (ch === '\\n') {\n const line = buffer.slice(0, i);\n buffer = buffer.slice(i + 1);\n return line;\n }\n if (ch === '\\r') {\n if (i + 1 < buffer.length) {\n const line = buffer.slice(0, i);\n buffer = buffer.slice(buffer[i + 1] === '\\n' ? i + 2 : i + 1);\n return line;\n }\n if (atEof) {\n const line = buffer.slice(0, i);\n buffer = '';\n return line;\n }\n return null; // possible CRLF split across chunks\n }\n }\n return null;\n };\n\n const processLine = (line: string): ServerSentEvent<T> | undefined => {\n if (line === '') return flush();\n if (line.startsWith(':')) return undefined; // comment / keep-alive\n\n const colonAt = line.indexOf(':');\n const field = colonAt === -1 ? line : line.slice(0, colonAt);\n let value = colonAt === -1 ? '' : line.slice(colonAt + 1);\n if (value.startsWith(' ')) value = value.slice(1);\n\n switch (field) {\n case 'data':\n dataLines.push(value);\n break;\n case 'event':\n eventName = value;\n break;\n case 'id':\n // Per the event-stream algorithm, ids containing U+0000 are\n // ignored entirely; an empty id resets the buffer.\n if (!value.includes('\\0')) {\n this.lastEventId = value === '' ? undefined : value;\n }\n break;\n case 'retry':\n // Reconnection-delay hint; honored when auto-reconnect is active.\n if (/^[0-9]+$/.test(value)) this.retryHintMs = Math.min(Number(value), 60_000);\n break;\n }\n return undefined;\n };\n\n try {\n while (true) {\n if (this.signal?.aborted) throw new APIUserAbortError();\n let done: boolean;\n let value: Uint8Array | undefined;\n try {\n ({ done, value } = await reader.read());\n } catch (err) {\n // A user abort mid-read surfaces as a raw AbortError DOMException;\n // the public contract is APIUserAbortError regardless of when the\n // abort lands. Partial buffered events are NOT flushed. Any other\n // read failure is a transport failure — auto-reconnect resumes\n // from the checkpoint when configured; otherwise the public\n // contract is APIConnectionError before AND after response\n // headers, never a runtime-specific error shape.\n if (this.signal?.aborted) throw new APIUserAbortError();\n if (this.closed) break;\n if (await tryReconnect()) continue;\n if (this.closed || this.signal?.aborted) break;\n throw new APIConnectionError(err);\n }\n // Re-check AFTER every awaited read: a chunk that arrives\n // concurrently with close() must not be processed.\n if (this.closed) break;\n if (done) break;\n // Bytes flowing again: the reconnect budget is per-outage.\n reconnectAttempts = 0;\n buffer += decoder.decode(value, { stream: true });\n\n let line: string | null;\n while ((line = nextLine(false)) !== null) {\n const event = processLine(line);\n if (event) yield event;\n }\n }\n // The stream may end without a trailing newline: the leftover buffer\n // is still line data and must be parsed, not dropped.\n buffer += decoder.decode();\n let tail: string | null;\n while ((tail = nextLine(true)) !== null) {\n const event = processLine(tail);\n if (event) yield event;\n }\n if (buffer !== '') {\n const event = processLine(buffer);\n if (event) yield event;\n }\n // Spec-compliant servers end with a blank line, but flush a trailing\n // event if the stream closed without one.\n const last = flush();\n if (last) yield last;\n } finally {\n // EVERY terminal path — EOF, decode error, transport error, caller\n // abort, explicit close, early consumer return — releases the\n // deadline listener and the body exactly once.\n this.closed = true;\n this.activeReader = undefined;\n this.releaseDeadline?.();\n try {\n await reader.cancel();\n } catch {\n // Already cancelled/errored.\n }\n reader.releaseLock();\n try {\n // The CURRENT connection's body (reconnects swap this.response).\n await this.response.body?.cancel();\n } catch {\n // Already closed.\n }\n }\n }\n}\n"]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Standard Webhooks verification (https://www.standardwebhooks.com), built on
3
+ * WebCrypto — no dependencies. The signature is HMAC-SHA256 over
4
+ * `${id}.${timestamp}.${payload}` keyed by the base64-decoded secret
5
+ * (`whsec_` prefix optional); `webhook-signature` may carry several
6
+ * space-separated `v1,<base64>` candidates.
7
+ */
8
+ export declare class WebhookVerificationError extends Error {
9
+ constructor(message: string);
10
+ }
11
+ export interface WebhookVerifyOptions {
12
+ /** Max allowed clock skew for webhook-timestamp, in seconds. Default 300. */
13
+ toleranceSeconds?: number;
14
+ }
15
+ /** Plain header records and Fetch-style Headers objects are both accepted. */
16
+ export type WebhookHeaders = Record<string, string | string[] | undefined> | {
17
+ get(name: string): string | null;
18
+ };
19
+ export declare class WebhookVerifier {
20
+ private readonly key;
21
+ constructor(secret: string);
22
+ /** Throws WebhookVerificationError unless the payload is authentic. */
23
+ verify(payload: string, headers: WebhookHeaders, options?: WebhookVerifyOptions): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/core/webhooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GACtB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAC7C;IAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAEzC,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;gBAE7B,MAAM,EAAE,MAAM;IA+B1B,uEAAuE;IACjE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;CA0C1G"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Standard Webhooks verification (https://www.standardwebhooks.com), built on
3
+ * WebCrypto — no dependencies. The signature is HMAC-SHA256 over
4
+ * `${id}.${timestamp}.${payload}` keyed by the base64-decoded secret
5
+ * (`whsec_` prefix optional); `webhook-signature` may carry several
6
+ * space-separated `v1,<base64>` candidates.
7
+ */
8
+ export class WebhookVerificationError extends Error {
9
+ constructor(message) {
10
+ super(message);
11
+ this.name = 'WebhookVerificationError';
12
+ }
13
+ }
14
+ export class WebhookVerifier {
15
+ key;
16
+ constructor(secret) {
17
+ if (!secret?.trim()) {
18
+ throw new WebhookVerificationError('webhook secret must be a non-empty string');
19
+ }
20
+ const encoded = secret.startsWith('whsec_') ? secret.slice('whsec_'.length) : secret;
21
+ // atob is forgiving (whitespace, missing padding); require the canonical
22
+ // form so every SDK accepts exactly the same secrets.
23
+ if (encoded.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) {
24
+ throw new WebhookVerificationError('webhook secret is not valid base64');
25
+ }
26
+ const raw = (() => {
27
+ try {
28
+ return base64ToBytes(encoded);
29
+ }
30
+ catch {
31
+ throw new WebhookVerificationError('webhook secret is not valid base64');
32
+ }
33
+ })();
34
+ // Standard Webhooks symmetric keys are 24–64 bytes. A shorter key —
35
+ // especially the zero-byte key from a bare "whsec_" — must never verify.
36
+ if (raw.length < 24 || raw.length > 64) {
37
+ throw new WebhookVerificationError(`decoded webhook secret must be 24-64 bytes, got ${raw.length}`);
38
+ }
39
+ this.key = crypto.subtle
40
+ .importKey('raw', raw, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])
41
+ .catch(() => {
42
+ throw new WebhookVerificationError('webhook secret could not be imported as an HMAC key');
43
+ });
44
+ }
45
+ /** Throws WebhookVerificationError unless the payload is authentic. */
46
+ async verify(payload, headers, options = {}) {
47
+ const header = normalizeHeaders(headers);
48
+ const id = header['webhook-id'];
49
+ const timestamp = header['webhook-timestamp'];
50
+ const signatures = header['webhook-signature'];
51
+ if (!id || !timestamp || !signatures) {
52
+ throw new WebhookVerificationError('missing webhook-id, webhook-timestamp, or webhook-signature header');
53
+ }
54
+ const tolerance = options.toleranceSeconds ?? 300;
55
+ if (!Number.isFinite(tolerance) || tolerance < 0) {
56
+ // An infinite tolerance would disable the replay window entirely.
57
+ throw new WebhookVerificationError('toleranceSeconds must be a finite non-negative number');
58
+ }
59
+ // The spec calls webhook-timestamp an integer Unix timestamp; Number()'s
60
+ // broader grammar would disagree with the other SDKs on the same input.
61
+ if (!/^[0-9]+$/.test(timestamp)) {
62
+ throw new WebhookVerificationError('webhook-timestamp is not an integer');
63
+ }
64
+ const sent = Number(timestamp);
65
+ if (!Number.isSafeInteger(sent)) {
66
+ throw new WebhookVerificationError('webhook-timestamp is out of range');
67
+ }
68
+ const now = Math.floor(Date.now() / 1000);
69
+ if (Math.abs(now - sent) > tolerance) {
70
+ throw new WebhookVerificationError('webhook-timestamp outside tolerance');
71
+ }
72
+ const key = await this.key;
73
+ const data = new TextEncoder().encode(`${id}.${timestamp}.${payload}`);
74
+ const expected = new Uint8Array(await crypto.subtle.sign('HMAC', key, data));
75
+ for (const candidate of signatures.split(' ')) {
76
+ const [version, signature] = candidate.split(',', 2);
77
+ if (version !== 'v1' || !signature)
78
+ continue;
79
+ const provided = tryBase64ToBytes(signature);
80
+ if (provided && constantTimeEqual(provided, expected))
81
+ return;
82
+ }
83
+ throw new WebhookVerificationError('no matching v1 signature');
84
+ }
85
+ }
86
+ function normalizeHeaders(headers) {
87
+ const out = {};
88
+ if (typeof headers.get === 'function') {
89
+ // Fetch-style Headers: Object.entries would not see its values.
90
+ const getter = headers;
91
+ for (const name of ['webhook-id', 'webhook-timestamp', 'webhook-signature']) {
92
+ out[name] = getter.get(name) ?? undefined;
93
+ }
94
+ return out;
95
+ }
96
+ for (const [key, value] of Object.entries(headers)) {
97
+ out[key.toLowerCase()] = Array.isArray(value) ? value[0] : value;
98
+ }
99
+ return out;
100
+ }
101
+ function base64ToBytes(b64) {
102
+ const binary = atob(b64);
103
+ const bytes = new Uint8Array(binary.length);
104
+ for (let i = 0; i < binary.length; i++)
105
+ bytes[i] = binary.charCodeAt(i);
106
+ return bytes;
107
+ }
108
+ function tryBase64ToBytes(b64) {
109
+ try {
110
+ return base64ToBytes(b64);
111
+ }
112
+ catch {
113
+ return undefined;
114
+ }
115
+ }
116
+ function constantTimeEqual(a, b) {
117
+ if (a.length !== b.length)
118
+ return false;
119
+ let diff = 0;
120
+ for (let i = 0; i < a.length; i++)
121
+ diff |= a[i] ^ b[i];
122
+ return diff === 0;
123
+ }
124
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/core/webhooks.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Standard Webhooks verification (https://www.standardwebhooks.com), built on\n * WebCrypto — no dependencies. The signature is HMAC-SHA256 over\n * `${id}.${timestamp}.${payload}` keyed by the base64-decoded secret\n * (`whsec_` prefix optional); `webhook-signature` may carry several\n * space-separated `v1,<base64>` candidates.\n */\n\nexport class WebhookVerificationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'WebhookVerificationError';\n }\n}\n\nexport interface WebhookVerifyOptions {\n /** Max allowed clock skew for webhook-timestamp, in seconds. Default 300. */\n toleranceSeconds?: number;\n}\n\n/** Plain header records and Fetch-style Headers objects are both accepted. */\nexport type WebhookHeaders =\n | Record<string, string | string[] | undefined>\n | { get(name: string): string | null };\n\nexport class WebhookVerifier {\n private readonly key: Promise<CryptoKey>;\n\n constructor(secret: string) {\n if (!secret?.trim()) {\n throw new WebhookVerificationError('webhook secret must be a non-empty string');\n }\n const encoded = secret.startsWith('whsec_') ? secret.slice('whsec_'.length) : secret;\n // atob is forgiving (whitespace, missing padding); require the canonical\n // form so every SDK accepts exactly the same secrets.\n if (encoded.length % 4 !== 0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) {\n throw new WebhookVerificationError('webhook secret is not valid base64');\n }\n const raw = (() => {\n try {\n return base64ToBytes(encoded);\n } catch {\n throw new WebhookVerificationError('webhook secret is not valid base64');\n }\n })();\n // Standard Webhooks symmetric keys are 24–64 bytes. A shorter key —\n // especially the zero-byte key from a bare \"whsec_\" — must never verify.\n if (raw.length < 24 || raw.length > 64) {\n throw new WebhookVerificationError(\n `decoded webhook secret must be 24-64 bytes, got ${raw.length}`,\n );\n }\n this.key = crypto.subtle\n .importKey('raw', raw, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])\n .catch(() => {\n throw new WebhookVerificationError('webhook secret could not be imported as an HMAC key');\n });\n }\n\n /** Throws WebhookVerificationError unless the payload is authentic. */\n async verify(payload: string, headers: WebhookHeaders, options: WebhookVerifyOptions = {}): Promise<void> {\n const header = normalizeHeaders(headers);\n const id = header['webhook-id'];\n const timestamp = header['webhook-timestamp'];\n const signatures = header['webhook-signature'];\n if (!id || !timestamp || !signatures) {\n throw new WebhookVerificationError(\n 'missing webhook-id, webhook-timestamp, or webhook-signature header',\n );\n }\n\n const tolerance = options.toleranceSeconds ?? 300;\n if (!Number.isFinite(tolerance) || tolerance < 0) {\n // An infinite tolerance would disable the replay window entirely.\n throw new WebhookVerificationError('toleranceSeconds must be a finite non-negative number');\n }\n // The spec calls webhook-timestamp an integer Unix timestamp; Number()'s\n // broader grammar would disagree with the other SDKs on the same input.\n if (!/^[0-9]+$/.test(timestamp)) {\n throw new WebhookVerificationError('webhook-timestamp is not an integer');\n }\n const sent = Number(timestamp);\n if (!Number.isSafeInteger(sent)) {\n throw new WebhookVerificationError('webhook-timestamp is out of range');\n }\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - sent) > tolerance) {\n throw new WebhookVerificationError('webhook-timestamp outside tolerance');\n }\n\n const key = await this.key;\n const data = new TextEncoder().encode(`${id}.${timestamp}.${payload}`);\n const expected = new Uint8Array(await crypto.subtle.sign('HMAC', key, data));\n\n for (const candidate of signatures.split(' ')) {\n const [version, signature] = candidate.split(',', 2);\n if (version !== 'v1' || !signature) continue;\n const provided = tryBase64ToBytes(signature);\n if (provided && constantTimeEqual(provided, expected)) return;\n }\n throw new WebhookVerificationError('no matching v1 signature');\n }\n}\n\nfunction normalizeHeaders(headers: WebhookHeaders): Record<string, string | undefined> {\n const out: Record<string, string | undefined> = {};\n if (typeof (headers as { get?: unknown }).get === 'function') {\n // Fetch-style Headers: Object.entries would not see its values.\n const getter = headers as { get(name: string): string | null };\n for (const name of ['webhook-id', 'webhook-timestamp', 'webhook-signature']) {\n out[name] = getter.get(name) ?? undefined;\n }\n return out;\n }\n for (const [key, value] of Object.entries(headers)) {\n out[key.toLowerCase()] = Array.isArray(value) ? value[0] : value;\n }\n return out;\n}\n\nfunction base64ToBytes(b64: string) {\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\n\nfunction tryBase64ToBytes(b64: string) {\n try {\n return base64ToBytes(b64);\n } catch {\n return undefined;\n }\n}\n\nfunction constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n return diff === 0;\n}\n"]}