@keboola/api-client 32.0.0 → 33.0.0

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 (377) hide show
  1. package/AGENTS.md +80 -2
  2. package/API-SURFACE.md +4 -1
  3. package/CHANGELOG.md +222 -0
  4. package/dist/{ManagementClientAuthError-B-tyPlyG.cjs → ManagementClientAuthError-DqeXL8nv.cjs} +2 -2
  5. package/dist/{ManagementClientAuthError-B-tyPlyG.cjs.map → ManagementClientAuthError-DqeXL8nv.cjs.map} +1 -1
  6. package/dist/{ManagementClientAuthError-BAFNvOdf.js → ManagementClientAuthError-iKbBugKC.js} +2 -2
  7. package/dist/{ManagementClientAuthError-BAFNvOdf.js.map → ManagementClientAuthError-iKbBugKC.js.map} +1 -1
  8. package/dist/ai/index.cjs +2 -2
  9. package/dist/ai/index.d.cts +2 -2
  10. package/dist/ai/index.d.ts +2 -2
  11. package/dist/ai/index.js +2 -2
  12. package/dist/ai/types.d.cts +1 -1
  13. package/dist/ai/types.d.ts +1 -1
  14. package/dist/{appLogs-DTLE6HTy.js → appLogs-D72eD8vP.js} +2 -2
  15. package/dist/{appLogs-DTLE6HTy.js.map → appLogs-D72eD8vP.js.map} +1 -1
  16. package/dist/{appLogs-NIEDTDHf.cjs → appLogs-D8K0VeNM.cjs} +2 -2
  17. package/dist/{appLogs-NIEDTDHf.cjs.map → appLogs-D8K0VeNM.cjs.map} +1 -1
  18. package/dist/{appLogs-BAaaGYKg.d.cts → appLogs-Q4A7A_Fc.d.cts} +2 -2
  19. package/dist/{appLogs-DX_WTBCa.d.ts → appLogs-u0XMZLjS.d.ts} +2 -2
  20. package/dist/apps/index.cjs +3 -3
  21. package/dist/apps/index.d.cts +3 -3
  22. package/dist/apps/index.d.ts +3 -3
  23. package/dist/apps/index.js +3 -3
  24. package/dist/apps/types.d.cts +2 -2
  25. package/dist/apps/types.d.ts +2 -2
  26. package/dist/assets/index.cjs +1 -1
  27. package/dist/assets/index.d.cts +1 -1
  28. package/dist/assets/index.d.ts +1 -1
  29. package/dist/assets/index.js +1 -1
  30. package/dist/auth/index.cjs +1 -1
  31. package/dist/auth/index.d.cts +1 -1
  32. package/dist/auth/index.d.ts +1 -1
  33. package/dist/auth/index.js +1 -1
  34. package/dist/auth/types.d.cts +2 -2
  35. package/dist/auth/types.d.ts +2 -2
  36. package/dist/{auth-DP-6TFiM.cjs → auth-C2_JLisH.cjs} +2 -2
  37. package/dist/{auth-DP-6TFiM.cjs.map → auth-C2_JLisH.cjs.map} +1 -1
  38. package/dist/{auth-DtbQaeDj.js → auth-CE9rQV3-.js} +2 -2
  39. package/dist/{auth-DtbQaeDj.js.map → auth-CE9rQV3-.js.map} +1 -1
  40. package/dist/{authClient--BtZgjIc.js → authClient-DEyqR7GW.js} +43 -9
  41. package/dist/authClient-DEyqR7GW.js.map +1 -0
  42. package/dist/{authClient-DhfzOUaa.d.cts → authClient-DZ_8lvdJ.d.cts} +6 -6
  43. package/dist/{authClient-CtfyVHRD.d.ts → authClient-DwT6xdg5.d.ts} +6 -6
  44. package/dist/{authClient-b7uec7sw.cjs → authClient-IwQ9Ti0J.cjs} +43 -9
  45. package/dist/authClient-IwQ9Ti0J.cjs.map +1 -0
  46. package/dist/chat/index.cjs +3 -3
  47. package/dist/chat/index.d.cts +2 -2
  48. package/dist/chat/index.d.ts +2 -2
  49. package/dist/chat/index.js +3 -3
  50. package/dist/chat/types.d.cts +1 -1
  51. package/dist/chat/types.d.ts +1 -1
  52. package/dist/{createFetchClient-BbG46bL0.js → createFetchClient-DdyZMhxO.js} +3 -2
  53. package/dist/{createFetchClient-BbG46bL0.js.map → createFetchClient-DdyZMhxO.js.map} +1 -1
  54. package/dist/{createFetchClient-BRfTjBLV.cjs → createFetchClient-DvZvD31l.cjs} +8 -1
  55. package/dist/{createFetchClient-BRfTjBLV.cjs.map → createFetchClient-DvZvD31l.cjs.map} +1 -1
  56. package/dist/{createGenericFetchClient-BHYQLZhe.js → createGenericFetchClient-MQeLRiNW.js} +2 -2
  57. package/dist/{createGenericFetchClient-BHYQLZhe.js.map → createGenericFetchClient-MQeLRiNW.js.map} +1 -1
  58. package/dist/{createGenericFetchClient-DHs-i7_O.cjs → createGenericFetchClient-qfCZlCTv.cjs} +2 -2
  59. package/dist/{createGenericFetchClient-DHs-i7_O.cjs.map → createGenericFetchClient-qfCZlCTv.cjs.map} +1 -1
  60. package/dist/{createOpenapiFetchClient-CyDUFxHB.cjs → createOpenapiFetchClient-C57Ljzi6.cjs} +2 -2
  61. package/dist/{createOpenapiFetchClient-CyDUFxHB.cjs.map → createOpenapiFetchClient-C57Ljzi6.cjs.map} +1 -1
  62. package/dist/{createOpenapiFetchClient-Bn6_Pn0H.js → createOpenapiFetchClient-E7OIVkYv.js} +2 -2
  63. package/dist/{createOpenapiFetchClient-Bn6_Pn0H.js.map → createOpenapiFetchClient-E7OIVkYv.js.map} +1 -1
  64. package/dist/{credential-d2RDcXRB.js → credential-Bxv7yxOZ.js} +7 -4
  65. package/dist/credential-Bxv7yxOZ.js.map +1 -0
  66. package/dist/{credential-DOXH7XRS.cjs → credential-D-X5QQrM.cjs} +7 -4
  67. package/dist/credential-D-X5QQrM.cjs.map +1 -0
  68. package/dist/dataScience/index.cjs +2 -2
  69. package/dist/dataScience/index.d.cts +2 -2
  70. package/dist/dataScience/index.d.ts +2 -2
  71. package/dist/dataScience/index.js +2 -2
  72. package/dist/dataScience/types.d.cts +2 -2
  73. package/dist/dataScience/types.d.ts +2 -2
  74. package/dist/{dataScience-wexHEIue.cjs → dataScience-BPW993AG.cjs} +5 -5
  75. package/dist/{dataScience-wexHEIue.cjs.map → dataScience-BPW993AG.cjs.map} +1 -1
  76. package/dist/{dataScience-Sm8iONhP.js → dataScience-B_TA7wCB.js} +5 -5
  77. package/dist/{dataScience-Sm8iONhP.js.map → dataScience-B_TA7wCB.js.map} +1 -1
  78. package/dist/developerPortal/index.cjs +1 -1
  79. package/dist/developerPortal/index.d.cts +2 -2
  80. package/dist/developerPortal/index.d.ts +2 -2
  81. package/dist/developerPortal/index.js +1 -1
  82. package/dist/developerPortal/types.d.cts +1 -1
  83. package/dist/developerPortal/types.d.ts +1 -1
  84. package/dist/{developerPortalClient-CgTSzLoG.cjs → developerPortalClient-Db2XVB_o.cjs} +3 -3
  85. package/dist/{developerPortalClient-CgTSzLoG.cjs.map → developerPortalClient-Db2XVB_o.cjs.map} +1 -1
  86. package/dist/{developerPortalClient-DywKpDlW.js → developerPortalClient-jk46sjwP.js} +3 -3
  87. package/dist/{developerPortalClient-DywKpDlW.js.map → developerPortalClient-jk46sjwP.js.map} +1 -1
  88. package/dist/domain/permissions/index.d.cts +2 -2
  89. package/dist/domain/permissions/index.d.ts +2 -2
  90. package/dist/editor/index.cjs +2 -2
  91. package/dist/editor/index.d.cts +2 -2
  92. package/dist/editor/index.d.ts +2 -2
  93. package/dist/editor/index.js +2 -2
  94. package/dist/editor/types.d.cts +1 -1
  95. package/dist/editor/types.d.ts +1 -1
  96. package/dist/emitter-dLF1Fyfg.d.cts +11 -0
  97. package/dist/emitter-dLF1Fyfg.d.ts +11 -0
  98. package/dist/encryption/index.cjs +1 -1
  99. package/dist/encryption/index.d.cts +1 -1
  100. package/dist/encryption/index.d.ts +1 -1
  101. package/dist/encryption/index.js +1 -1
  102. package/dist/encryption/types.d.cts +1 -1
  103. package/dist/encryption/types.d.ts +1 -1
  104. package/dist/import/index.cjs +1 -1
  105. package/dist/import/index.d.cts +3 -3
  106. package/dist/import/index.d.ts +3 -3
  107. package/dist/import/index.js +1 -1
  108. package/dist/{import-SQuurg1G.js → import-2nqxQ9Rt.js} +3 -3
  109. package/dist/{import-SQuurg1G.js.map → import-2nqxQ9Rt.js.map} +1 -1
  110. package/dist/{import-C0-y1GQK.cjs → import-DJilJ6tq.cjs} +3 -3
  111. package/dist/{import-C0-y1GQK.cjs.map → import-DJilJ6tq.cjs.map} +1 -1
  112. package/dist/{index-FhKX7Cv1.d.ts → index-B0V1pJAa.d.ts} +241 -200
  113. package/dist/{index-Bg1P6Bb2.d.ts → index-B2OGaUap.d.ts} +6 -6
  114. package/dist/{index-Dbzjvy5h.d.ts → index-BjKjp3Rf.d.ts} +5 -5
  115. package/dist/{index-DeKPpYQy.d.ts → index-C7gxKoDF.d.cts} +3 -3
  116. package/dist/{index-D_7yCRKy.d.cts → index-CTd4YY8e.d.cts} +4 -4
  117. package/dist/{index-DiHHyMEo.d.cts → index-CUXEFQ7i.d.cts} +6 -6
  118. package/dist/{index-eAlN694c.d.cts → index-CVqk63at.d.ts} +3 -3
  119. package/dist/{index-Bc_hXWae.d.ts → index-C_cxKL1V.d.ts} +3 -3
  120. package/dist/{index-tKsiUarj.d.ts → index-ChMtULt4.d.ts} +4 -4
  121. package/dist/{index-Gn1H63Hk.d.cts → index-DCN2lH0v.d.cts} +4 -4
  122. package/dist/{index-Bjk-tCpG.d.cts → index-DIVvL54G.d.cts} +241 -200
  123. package/dist/{index-C7e3wBt9.d.cts → index-DLYAvSWZ.d.cts} +3 -3
  124. package/dist/{index-fHfc_VqS.d.ts → index-DQef014j.d.ts} +4 -4
  125. package/dist/{index-CeJOmN-P.d.ts → index-DVhTNwvu.d.ts} +3 -2
  126. package/dist/{index-CQrKS7PV.d.cts → index-DhVFuQDv.d.cts} +3 -2
  127. package/dist/{index-Ctqkm3Fx.d.ts → index-GNKwr7EQ.d.ts} +4 -4
  128. package/dist/{index-GDdFZCXp.d.ts → index-bB6wvw1f.d.ts} +4 -4
  129. package/dist/{index-BKh0prif.d.cts → index-exNi3I2Q.d.cts} +4 -4
  130. package/dist/{index-CXtdQ7be.d.cts → index-qOK5FtAH.d.cts} +4 -4
  131. package/dist/{index-DqOAjqxN.d.cts → index-t-a7kYnx.d.cts} +5 -5
  132. package/dist/index.cjs +303 -47
  133. package/dist/index.cjs.map +1 -1
  134. package/dist/index.d.cts +7 -6
  135. package/dist/index.d.ts +7 -6
  136. package/dist/index.js +285 -30
  137. package/dist/index.js.map +1 -1
  138. package/dist/{jobStatus-kQ9JqF8t.cjs → jobStatus-0_Y3Sr4i.cjs} +37 -20
  139. package/dist/jobStatus-0_Y3Sr4i.cjs.map +1 -0
  140. package/dist/{jobStatus-DbMupQEK.js → jobStatus-PSZJMTiA.js} +35 -18
  141. package/dist/jobStatus-PSZJMTiA.js.map +1 -0
  142. package/dist/kaiAgent/index.cjs +1 -1
  143. package/dist/kaiAgent/index.d.cts +2 -210
  144. package/dist/kaiAgent/index.d.ts +2 -210
  145. package/dist/kaiAgent/index.js +1 -1
  146. package/dist/kaiAgent/types.d.cts +1 -1
  147. package/dist/kaiAgent/types.d.ts +1 -1
  148. package/dist/{kaiAgent-4OiIK1C2.cjs → kaiAgent-CMVub6Sc.cjs} +48 -4
  149. package/dist/kaiAgent-CMVub6Sc.cjs.map +1 -0
  150. package/dist/{kaiAgent-HDaFS9BR.js → kaiAgent-CYYn0QJW.js} +48 -4
  151. package/dist/kaiAgent-CYYn0QJW.js.map +1 -0
  152. package/dist/kaiAgentClient-B2O0DF4d.d.ts +249 -0
  153. package/dist/kaiAgentClient-iCFR2tRU.d.cts +249 -0
  154. package/dist/management/index.cjs +1 -1
  155. package/dist/management/index.d.cts +1 -1
  156. package/dist/management/index.d.ts +1 -1
  157. package/dist/management/index.js +1 -1
  158. package/dist/management/types.d.cts +1 -1
  159. package/dist/management/types.d.ts +1 -1
  160. package/dist/{management-DfjwQo7z.cjs → management-DGfgKsaA.cjs} +5 -5
  161. package/dist/{management-DfjwQo7z.cjs.map → management-DGfgKsaA.cjs.map} +1 -1
  162. package/dist/{management-CIFhu1Nm.js → management-DNEKhR6a.js} +5 -5
  163. package/dist/{management-CIFhu1Nm.js.map → management-DNEKhR6a.js.map} +1 -1
  164. package/dist/metastore/index.cjs +1 -1
  165. package/dist/metastore/index.d.cts +1 -1
  166. package/dist/metastore/index.d.ts +1 -1
  167. package/dist/metastore/index.js +1 -1
  168. package/dist/metastore/types.d.cts +1 -1
  169. package/dist/metastore/types.d.ts +1 -1
  170. package/dist/{metastore-CrXkKufo.js → metastore-CjwktHvw.js} +4 -4
  171. package/dist/{metastore-CrXkKufo.js.map → metastore-CjwktHvw.js.map} +1 -1
  172. package/dist/{metastore-Dq2NS6jb.cjs → metastore-DksEte8P.cjs} +4 -4
  173. package/dist/{metastore-Dq2NS6jb.cjs.map → metastore-DksEte8P.cjs.map} +1 -1
  174. package/dist/microsoftGraph/index.cjs +2 -2
  175. package/dist/microsoftGraph/index.d.cts +2 -2
  176. package/dist/microsoftGraph/index.d.ts +2 -2
  177. package/dist/microsoftGraph/index.js +2 -2
  178. package/dist/microsoftGraph/types.d.cts +1 -1
  179. package/dist/microsoftGraph/types.d.ts +1 -1
  180. package/dist/notifications/index.cjs +3 -3
  181. package/dist/notifications/index.d.cts +2 -2
  182. package/dist/notifications/index.d.ts +2 -2
  183. package/dist/notifications/index.js +3 -3
  184. package/dist/notifications/types.d.cts +1 -1
  185. package/dist/notifications/types.d.ts +1 -1
  186. package/dist/oauth/index.cjs +1 -1
  187. package/dist/oauth/index.d.cts +2 -2
  188. package/dist/oauth/index.d.ts +2 -2
  189. package/dist/oauth/index.js +1 -1
  190. package/dist/oauth/types.d.cts +1 -1
  191. package/dist/oauth/types.d.ts +1 -1
  192. package/dist/{oauth-CFwSNz37.js → oauth-Bg5zro5S.js} +5 -5
  193. package/dist/{oauth-CFwSNz37.js.map → oauth-Bg5zro5S.js.map} +1 -1
  194. package/dist/{oauth-CkW5gln-.cjs → oauth-DFsI1TE5.cjs} +5 -5
  195. package/dist/{oauth-CkW5gln-.cjs.map → oauth-DFsI1TE5.cjs.map} +1 -1
  196. package/dist/omnisearch/index.cjs +2 -2
  197. package/dist/omnisearch/index.d.cts +2 -2
  198. package/dist/omnisearch/index.d.ts +2 -2
  199. package/dist/omnisearch/index.js +2 -2
  200. package/dist/omnisearch/types.d.cts +1 -1
  201. package/dist/omnisearch/types.d.ts +1 -1
  202. package/dist/{project-BOGaVs-q.d.ts → project-Bh954iOA.d.ts} +2 -2
  203. package/dist/{project-BnQkL8cb.d.cts → project-D25GH8zK.d.cts} +2 -2
  204. package/dist/queryService/index.cjs +1 -1
  205. package/dist/queryService/index.d.cts +1 -1
  206. package/dist/queryService/index.d.ts +1 -1
  207. package/dist/queryService/index.js +1 -1
  208. package/dist/queryService/types.d.cts +1 -1
  209. package/dist/queryService/types.d.ts +1 -1
  210. package/dist/{queryService-BLaGbpm-.cjs → queryService--t_W9PSJ.cjs} +6 -6
  211. package/dist/{queryService-BLaGbpm-.cjs.map → queryService--t_W9PSJ.cjs.map} +1 -1
  212. package/dist/{queryService-DK-jUnET.js → queryService-DX6zeAs_.js} +6 -6
  213. package/dist/{queryService-DK-jUnET.js.map → queryService-DX6zeAs_.js.map} +1 -1
  214. package/dist/queue/index.cjs +1 -1
  215. package/dist/queue/index.d.cts +3 -3
  216. package/dist/queue/index.d.ts +3 -3
  217. package/dist/queue/index.js +1 -1
  218. package/dist/queue/types.d.cts +1 -1
  219. package/dist/queue/types.d.ts +1 -1
  220. package/dist/{queue-B7TY4JLf.cjs → queue-D1_TCe0z.cjs} +5 -5
  221. package/dist/{queue-B7TY4JLf.cjs.map → queue-D1_TCe0z.cjs.map} +1 -1
  222. package/dist/{queue-DViSQ-eq.js → queue-DrLUbk98.js} +5 -5
  223. package/dist/{queue-DViSQ-eq.js.map → queue-DrLUbk98.js.map} +1 -1
  224. package/dist/scheduler/index.cjs +3 -3
  225. package/dist/scheduler/index.d.cts +2 -2
  226. package/dist/scheduler/index.d.ts +2 -2
  227. package/dist/scheduler/index.js +3 -3
  228. package/dist/scheduler/types.d.cts +1 -1
  229. package/dist/scheduler/types.d.ts +1 -1
  230. package/dist/sdk/configurations/index.d.cts +4 -4
  231. package/dist/sdk/configurations/index.d.ts +4 -4
  232. package/dist/sdk/developerPortal/index.cjs +5 -5
  233. package/dist/sdk/developerPortal/index.cjs.map +1 -1
  234. package/dist/sdk/developerPortal/index.d.cts +5 -4
  235. package/dist/sdk/developerPortal/index.d.ts +5 -4
  236. package/dist/sdk/developerPortal/index.js +4 -4
  237. package/dist/sdk/queryService/index.cjs +1 -1
  238. package/dist/sdk/queryService/index.d.cts +1 -1
  239. package/dist/sdk/queryService/index.d.ts +1 -1
  240. package/dist/sdk/queryService/index.js +1 -1
  241. package/dist/sdk/semanticLayer/index.cjs +163 -74
  242. package/dist/sdk/semanticLayer/index.cjs.map +1 -1
  243. package/dist/sdk/semanticLayer/index.d.cts +16 -13
  244. package/dist/sdk/semanticLayer/index.d.ts +16 -13
  245. package/dist/sdk/semanticLayer/index.js +158 -75
  246. package/dist/sdk/semanticLayer/index.js.map +1 -1
  247. package/dist/sdk/semanticLayer/types.d.cts +2 -2
  248. package/dist/sdk/semanticLayer/types.d.ts +2 -2
  249. package/dist/sdk/storage/index.d.cts +1 -1
  250. package/dist/sdk/storage/index.d.ts +1 -1
  251. package/dist/sdk/tag/index.d.cts +2 -2
  252. package/dist/sdk/tag/index.d.ts +2 -2
  253. package/dist/sdk/tag/types.d.cts +1 -1
  254. package/dist/sdk/tag/types.d.ts +1 -1
  255. package/dist/sdk/vault/index.d.cts +1 -1
  256. package/dist/sdk/vault/index.d.ts +1 -1
  257. package/dist/status/index.cjs +1 -1
  258. package/dist/status/index.d.cts +1 -1
  259. package/dist/status/index.d.ts +1 -1
  260. package/dist/status/index.js +1 -1
  261. package/dist/storage/index.cjs +4 -4
  262. package/dist/storage/index.d.cts +2 -2
  263. package/dist/storage/index.d.ts +2 -2
  264. package/dist/storage/index.js +4 -4
  265. package/dist/storage/types.d.cts +2 -2
  266. package/dist/storage/types.d.ts +2 -2
  267. package/dist/{storage-kgxscFEg.js → storage--cVaecFq.js} +7 -7
  268. package/dist/{storage-kgxscFEg.js.map → storage--cVaecFq.js.map} +1 -1
  269. package/dist/{storage-CihHwZ7z.cjs → storage-DexWot8H.cjs} +7 -7
  270. package/dist/{storage-CihHwZ7z.cjs.map → storage-DexWot8H.cjs.map} +1 -1
  271. package/dist/store-C9FQCHGe.js +74 -0
  272. package/dist/store-C9FQCHGe.js.map +1 -0
  273. package/dist/store-xS-Cu_VS.cjs +85 -0
  274. package/dist/store-xS-Cu_VS.cjs.map +1 -0
  275. package/dist/stream/index.cjs +3 -3
  276. package/dist/stream/index.d.cts +2 -2
  277. package/dist/stream/index.d.ts +2 -2
  278. package/dist/stream/index.js +3 -3
  279. package/dist/stream/types.d.cts +1 -1
  280. package/dist/stream/types.d.ts +1 -1
  281. package/dist/syncActions/index.cjs +1 -1
  282. package/dist/syncActions/index.d.cts +1 -1
  283. package/dist/syncActions/index.d.ts +1 -1
  284. package/dist/syncActions/index.js +1 -1
  285. package/dist/syncActions/types.d.cts +1 -1
  286. package/dist/syncActions/types.d.ts +1 -1
  287. package/dist/{syncActions-B75t0NwP.js → syncActions-CkMHM-jB.js} +5 -5
  288. package/dist/{syncActions-B75t0NwP.js.map → syncActions-CkMHM-jB.js.map} +1 -1
  289. package/dist/{syncActions-CevF_TEb.cjs → syncActions-DQq_A9v6.cjs} +5 -5
  290. package/dist/{syncActions-CevF_TEb.cjs.map → syncActions-DQq_A9v6.cjs.map} +1 -1
  291. package/dist/telemetry/index.cjs +1 -1
  292. package/dist/telemetry/index.d.cts +2 -2
  293. package/dist/telemetry/index.d.ts +2 -2
  294. package/dist/telemetry/index.js +1 -1
  295. package/dist/{telemetry-DwlSLVAU.cjs → telemetry-CAu1Qt7B.cjs} +3 -3
  296. package/dist/{telemetry-DwlSLVAU.cjs.map → telemetry-CAu1Qt7B.cjs.map} +1 -1
  297. package/dist/{telemetry-FXpodtJN.js → telemetry-Ca6j0i9w.js} +3 -3
  298. package/dist/{telemetry-FXpodtJN.js.map → telemetry-Ca6j0i9w.js.map} +1 -1
  299. package/dist/{types-CGH_lfxS.d.cts → types-0xa_7cgo.d.cts} +2 -2
  300. package/dist/{types-CyiRYRVq.d.cts → types-3p0adMdd.d.cts} +3 -3
  301. package/dist/{types-BlCoTm7n.d.ts → types-6ThDkaJw.d.ts} +2 -2
  302. package/dist/{types-CkcMoXRk.d.ts → types-6hh_3SZs.d.ts} +3 -3
  303. package/dist/{types-dybUhlU2.d.ts → types-6ku2LeX6.d.ts} +2 -2
  304. package/dist/{types-BH9ljNmj.d.cts → types-B42HhyB0.d.cts} +2 -2
  305. package/dist/{types-C1vhYcic.d.cts → types-B4_MM5Wf.d.cts} +2 -2
  306. package/dist/{types-DlbiVsVo.d.cts → types-B6JJCta-.d.cts} +2 -2
  307. package/dist/{types-sVYo0o9_.d.ts → types-B6lOyHY_.d.ts} +3 -3
  308. package/dist/{types-BZBdLUpH.d.ts → types-B7O5koJb.d.cts} +2 -2
  309. package/dist/{types-De_DA2ga.d.ts → types-BHI8Lin9.d.ts} +2 -2
  310. package/dist/{types-Cj4bLPp5.d.cts → types-BO3sCD0a.d.cts} +37 -6
  311. package/dist/{types-zA3H84SM.d.cts → types-BOnf68s5.d.cts} +2 -2
  312. package/dist/{types-CPanB0p7.d.cts → types-BS5M67xm.d.cts} +3 -3
  313. package/dist/{types-COIsNoTQ.d.cts → types-BT46XIgn.d.cts} +2 -2
  314. package/dist/types-BUYqdN7B.d.ts +205 -0
  315. package/dist/{types-D-qI9ne4.d.ts → types-BYKHr5bR.d.ts} +2 -2
  316. package/dist/{types-D1uloiuY.d.cts → types-Be3Wgn1U.d.cts} +2 -2
  317. package/dist/{types-BTbczawY.d.ts → types-BgVKG4vg.d.ts} +2 -2
  318. package/dist/{types-CyHZ1ZQe.d.ts → types-C2gzqtjf.d.ts} +2 -2
  319. package/dist/{types-Av2egS_l.d.ts → types-C35GWNmq.d.ts} +2 -2
  320. package/dist/{types-D6jKxUv_.d.ts → types-C4mr0lop.d.ts} +35 -3
  321. package/dist/{types-BI2jI-3-.d.cts → types-CCr1-9Q6.d.cts} +3 -3
  322. package/dist/{types-DeSd3gqW.d.ts → types-CHCM9oNk.d.ts} +3 -3
  323. package/dist/{types-BMQW-2Yw.d.ts → types-CNQdtffE.d.ts} +729 -79
  324. package/dist/{types-MbcIiKDI.d.cts → types-CPaluTW7.d.cts} +3 -3
  325. package/dist/{types-CXTqFYah.d.ts → types-CSc8NQCY.d.ts} +37 -6
  326. package/dist/{types-Cz1dj_TM.d.ts → types-C_ilZZkQ.d.ts} +2 -2
  327. package/dist/{types-EJEoI3ZK.d.ts → types-CaMfshWX.d.ts} +2 -2
  328. package/dist/{types-BoV9M5Xg.d.cts → types-Ccgbipp4.d.cts} +2 -2
  329. package/dist/{types-DuiUN0h8.d.ts → types-Cpjk0-ta.d.ts} +2 -2
  330. package/dist/{types-GuWtMCMn.d.cts → types-CrH4H8M4.d.cts} +2 -2
  331. package/dist/{types-DNXC_-fA.d.cts → types-Cu-0LT4f.d.cts} +2 -2
  332. package/dist/{types-BptQ7jpP.d.cts → types-CxmV36rp.d.cts} +2 -2
  333. package/dist/{types-DwpRt3e9.d.ts → types-D-98DirB.d.ts} +2 -2
  334. package/dist/{types-BV2BDccJ.d.cts → types-D6ocCyGh.d.cts} +35 -3
  335. package/dist/{types-COc-nind.d.cts → types-D7Wgcp0u.d.ts} +2 -2
  336. package/dist/{types-ByWD2oeV.d.ts → types-DAzmGzlb.d.ts} +2 -2
  337. package/dist/{types-BREGN3qo.d.cts → types-DHI0g51U.d.cts} +2 -2
  338. package/dist/{types-Dfc58bPE.d.ts → types-DHqIJKwx.d.ts} +2 -2
  339. package/dist/types-DONxb2-c.d.cts +205 -0
  340. package/dist/{types-Di8VIZwQ.d.ts → types-DTTC70Ac.d.ts} +2 -2
  341. package/dist/{types-C2CLlR4i.d.ts → types-DlvZeert.d.ts} +2 -2
  342. package/dist/{types-cDU_J45_.d.cts → types-DqniGeDJ.d.cts} +2 -2
  343. package/dist/{types-iNlsdRkx.d.cts → types-E3VT-zYz.d.cts} +729 -79
  344. package/dist/{types-B4jdPHoL.d.cts → types-Jt0ipbSm.d.cts} +2 -2
  345. package/dist/{types-Bpnpa2Wt.d.ts → types-Ur37iOqb.d.ts} +3 -3
  346. package/dist/{types-BnaAo7xn.d.ts → types-ZGAWRIBW.d.ts} +2 -2
  347. package/dist/{types-CvkqEvhv.d.cts → types-bY6K3y0O.d.cts} +2 -2
  348. package/dist/{types-CpALS017.d.ts → types-k4R8gQ4U.d.ts} +2 -2
  349. package/dist/{types-CcuG9cid.d.cts → types-sO52qIAA.d.cts} +2 -2
  350. package/dist/{types-CJHi0zdD.d.cts → types-sp1rJY9E.d.cts} +2 -2
  351. package/dist/{validateConnectionStatus-V9q6Nl6u.cjs → validateConnectionStatus-24zqIQ0p.cjs} +2 -2
  352. package/dist/{validateConnectionStatus-V9q6Nl6u.cjs.map → validateConnectionStatus-24zqIQ0p.cjs.map} +1 -1
  353. package/dist/{validateConnectionStatus-BrLXkoSI.js → validateConnectionStatus-DhkWg6Eq.js} +2 -2
  354. package/dist/{validateConnectionStatus-BrLXkoSI.js.map → validateConnectionStatus-DhkWg6Eq.js.map} +1 -1
  355. package/dist/vault/index.cjs +4 -4
  356. package/dist/vault/index.d.cts +1 -1
  357. package/dist/vault/index.d.ts +1 -1
  358. package/dist/vault/index.js +4 -4
  359. package/dist/vault/types.d.cts +1 -1
  360. package/dist/vault/types.d.ts +1 -1
  361. package/package.json +2 -2
  362. package/surface/auth.md +2 -2
  363. package/surface/kaiAgent.md +5 -2
  364. package/dist/authClient--BtZgjIc.js.map +0 -1
  365. package/dist/authClient-b7uec7sw.cjs.map +0 -1
  366. package/dist/createStore-BNiCRQXa.js +0 -148
  367. package/dist/createStore-BNiCRQXa.js.map +0 -1
  368. package/dist/createStore-MQbboXcB.cjs +0 -177
  369. package/dist/createStore-MQbboXcB.cjs.map +0 -1
  370. package/dist/credential-DOXH7XRS.cjs.map +0 -1
  371. package/dist/credential-d2RDcXRB.js.map +0 -1
  372. package/dist/jobStatus-DbMupQEK.js.map +0 -1
  373. package/dist/jobStatus-kQ9JqF8t.cjs.map +0 -1
  374. package/dist/kaiAgent-4OiIK1C2.cjs.map +0 -1
  375. package/dist/kaiAgent-HDaFS9BR.js.map +0 -1
  376. package/dist/types-B2vmg_UF.d.cts +0 -148
  377. package/dist/types-RfaldD4P.d.ts +0 -148
@@ -1,6 +1,6 @@
1
- import { p as KeboolaHttpHeader } from "../createFetchClient-BbG46bL0.js";
2
- import { t as createOpenapiFetchClient } from "../createOpenapiFetchClient-Bn6_Pn0H.js";
3
- import { t as createAuthHeaders } from "../auth-DtbQaeDj.js";
1
+ import { m as KeboolaHttpHeader } from "../createFetchClient-DdyZMhxO.js";
2
+ import { t as createOpenapiFetchClient } from "../createOpenapiFetchClient-E7OIVkYv.js";
3
+ import { t as createAuthHeaders } from "../auth-CE9rQV3-.js";
4
4
  import { suggestionsApiResponseSchema } from "./suggestions.js";
5
5
  import { z } from "zod";
6
6
  //#region src/clients/chat/chatClient.ts
@@ -1,2 +1,2 @@
1
- import { C as VoteRequest, S as Vote, T as askUserQuestionAnswersSchema, _ as UpdateAgentSettingsRequest, a as ChatRequest, b as UserAgentSettings, c as GetChatPath, d as HistoryResponse, f as MessageStatus, g as ToolsListResponse, h as ToolPermissionValue, i as ChatMessage, l as GetHistoryQuery, m as ToolInfo, n as AskUserQuestionAnswers, o as ChatWithMessage, p as TextPart, r as Chat, s as ChatWithMessages, t as AgentSettings, u as GetVotesQuery, v as UpdateUserAgentSettingsRequest, w as VotesResponse, x as UserMessage, y as UsageResponse } from "../types-CGH_lfxS.cjs";
1
+ import { C as VoteRequest, S as Vote, T as askUserQuestionAnswersSchema, _ as UpdateAgentSettingsRequest, a as ChatRequest, b as UserAgentSettings, c as GetChatPath, d as HistoryResponse, f as MessageStatus, g as ToolsListResponse, h as ToolPermissionValue, i as ChatMessage, l as GetHistoryQuery, m as ToolInfo, n as AskUserQuestionAnswers, o as ChatWithMessage, p as TextPart, r as Chat, s as ChatWithMessages, t as AgentSettings, u as GetVotesQuery, v as UpdateUserAgentSettingsRequest, w as VotesResponse, x as UserMessage, y as UsageResponse } from "../types-0xa_7cgo.cjs";
2
2
  export { AgentSettings, AskUserQuestionAnswers, Chat, ChatMessage, ChatRequest, ChatWithMessage, ChatWithMessages, GetChatPath, GetHistoryQuery, GetVotesQuery, HistoryResponse, MessageStatus, TextPart, ToolInfo, ToolPermissionValue, ToolsListResponse, UpdateAgentSettingsRequest, UpdateUserAgentSettingsRequest, UsageResponse, UserAgentSettings, UserMessage, Vote, VoteRequest, VotesResponse, askUserQuestionAnswersSchema };
@@ -1,2 +1,2 @@
1
- import { C as VoteRequest, S as Vote, T as askUserQuestionAnswersSchema, _ as UpdateAgentSettingsRequest, a as ChatRequest, b as UserAgentSettings, c as GetChatPath, d as HistoryResponse, f as MessageStatus, g as ToolsListResponse, h as ToolPermissionValue, i as ChatMessage, l as GetHistoryQuery, m as ToolInfo, n as AskUserQuestionAnswers, o as ChatWithMessage, p as TextPart, r as Chat, s as ChatWithMessages, t as AgentSettings, u as GetVotesQuery, v as UpdateUserAgentSettingsRequest, w as VotesResponse, x as UserMessage, y as UsageResponse } from "../types-CpALS017.js";
1
+ import { C as VoteRequest, S as Vote, T as askUserQuestionAnswersSchema, _ as UpdateAgentSettingsRequest, a as ChatRequest, b as UserAgentSettings, c as GetChatPath, d as HistoryResponse, f as MessageStatus, g as ToolsListResponse, h as ToolPermissionValue, i as ChatMessage, l as GetHistoryQuery, m as ToolInfo, n as AskUserQuestionAnswers, o as ChatWithMessage, p as TextPart, r as Chat, s as ChatWithMessages, t as AgentSettings, u as GetVotesQuery, v as UpdateUserAgentSettingsRequest, w as VotesResponse, x as UserMessage, y as UsageResponse } from "../types-k4R8gQ4U.js";
2
2
  export { AgentSettings, AskUserQuestionAnswers, Chat, ChatMessage, ChatRequest, ChatWithMessage, ChatWithMessages, GetChatPath, GetHistoryQuery, GetVotesQuery, HistoryResponse, MessageStatus, TextPart, ToolInfo, ToolPermissionValue, ToolsListResponse, UpdateAgentSettingsRequest, UpdateUserAgentSettingsRequest, UsageResponse, UserAgentSettings, UserMessage, Vote, VoteRequest, VotesResponse, askUserQuestionAnswersSchema };
@@ -158,6 +158,7 @@ const createFetchRequest = ({ url, method, params, options = {}, defaultOptions
158
158
  //#region src/fetchClient/createFetchClient/createFetchClient.ts
159
159
  const isApiError = (error) => error instanceof ApiError;
160
160
  const isAbortError = (error) => error instanceof DOMException && error.name === "AbortError";
161
+ const isTimeoutError = (error) => error instanceof DOMException && error.name === "TimeoutError";
161
162
  const isFetchClientError = (error) => error instanceof TypeError || error instanceof SyntaxError || isApiError(error);
162
163
  const coreFetch = async ({ request, validateStatus, fetchFn = fetch, parseAs }) => {
163
164
  const response = await fetchFn(request);
@@ -192,6 +193,6 @@ const createFetchClient = ({ middlewares = [], ...defaultOptions }) => {
192
193
  };
193
194
  };
194
195
  //#endregion
195
- export { HttpContentType as a, isHtmlResponse as c, ENCRYPTED_VALUE_PREFIX as d, HttpStatus as f, isFetchClientError as i, normalizeBaseUrl as l, ApiError as m, isAbortError as n, HttpHeader as o, KeboolaHttpHeader as p, isApiError as r, defaultValidateStatus as s, createFetchClient as t, parseContentDispositionHeader as u };
196
+ export { isTimeoutError as a, defaultValidateStatus as c, parseContentDispositionHeader as d, ENCRYPTED_VALUE_PREFIX as f, ApiError as h, isFetchClientError as i, isHtmlResponse as l, KeboolaHttpHeader as m, isAbortError as n, HttpContentType as o, HttpStatus as p, isApiError as r, HttpHeader as s, createFetchClient as t, normalizeBaseUrl as u };
196
197
 
197
- //# sourceMappingURL=createFetchClient-BbG46bL0.js.map
198
+ //# sourceMappingURL=createFetchClient-DdyZMhxO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createFetchClient-BbG46bL0.js","names":[],"sources":["../src/errors/ApiError.ts","../src/internal.ts","../src/fetchClient/createFetchClient/utils.ts","../src/fetchClient/createFetchClient/createFetchClient.ts"],"sourcesContent":["import type { ApiResponse } from '../fetchClient/createFetchClient/types';\n\nexport class ApiError extends Error {\n response: Response;\n request: Request;\n data: unknown;\n\n constructor({ response, request, data }: ApiResponse) {\n super(response.statusText);\n this.response = response;\n this.request = request;\n this.data = data;\n }\n}\n","// Package-internal constants. Not part of the public\n// `@keboola/api-client/constants` sub-path (that is the `constants/` directory).\n\nexport const KeboolaHttpHeader = {\n STORAGE_API_TOKEN: 'X-StorageApi-Token',\n MANAGEMENT_API_TOKEN: 'X-Kbc-Manageapitoken',\n STORAGE_API_URL: 'x-storageapi-url',\n PROJECT_ID: 'X-KBC-ProjectId',\n /** Storage job a request enqueued, reported on the response rather than in its body. */\n STORAGE_API_JOB_ID: 'X-StorageApi-Job-Id',\n} as const;\n\nexport const HttpStatus = {\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n UNPROCESSABLE_ENTITY: 422,\n INTERNAL_SERVER_ERROR: 500,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n} as const;\n\nexport const ENCRYPTED_VALUE_PREFIX = 'KBC::';\n","import type { IStringifyOptions } from 'qs';\nimport qs from 'qs';\n\nimport { HttpStatus } from '../../internal';\n\nimport type {\n ApiResponse,\n BodyParam,\n CreateFetchRequestFn,\n ParseAs,\n PathParam,\n ValidateStatusFn,\n} from './types';\n\n/**\n * Strips trailing slashes from a base URL so concatenating a leading-slash\n * path (e.g. `/v2/storage`) never produces a double slash.\n *\n * Without this, callers that pass `https://connection.keboola.com/` end up\n * issuing requests to `https://connection.keboola.com//v2/storage/...`, which\n * the Storage API rejects with a 404.\n */\nexport const normalizeBaseUrl = (baseUrl: string): string => baseUrl.replace(/\\/+$/, '');\n\nexport const HttpHeader = {\n CONTENT_TYPE: 'content-type',\n CONTENT_DISPOSITION: 'content-disposition',\n AUTHORIZATION: 'Authorization',\n IDEMPOTENCY_KEY: 'Idempotency-Key',\n IF_MATCH: 'If-Match',\n};\n\nexport const HttpContentType = {\n JSON: 'application/json',\n TEXT_PLAIN: 'text/plain',\n FORM_DATA: 'multipart/form-data',\n TEXT_HTML: 'text/html',\n};\n\nexport const defaultValidateStatus: ValidateStatusFn = ({ response }) =>\n response.status >= 200 && response.status <= 299;\n\n/**\n * Whether a response carries an HTML document.\n *\n * - Media types are case-insensitive, so a `Text/HTML` login page is still one.\n * - Only meaningful on a *successful* response: HTML on a failed one is a real error page.\n */\nexport const isHtmlResponse = ({ response }: ApiResponse) =>\n !!response.headers\n .get(HttpHeader.CONTENT_TYPE)\n ?.toLowerCase()\n .includes(HttpContentType.TEXT_HTML);\n\nfunction removeUndefined(obj: Record<string, string>) {\n const objCopy = { ...obj };\n for (const [key, value] of Object.entries(objCopy)) {\n if (value == null) delete objCopy[key];\n }\n return objCopy;\n}\n\n// `application/json`, but also `application/json; charset=utf-8` and the `+json` suffix family.\n// Comparing the raw header for equality misses every response that carries a charset.\nconst JSON_MEDIA_TYPE = /^application\\/([\\w.-]+\\+)?json$/;\n\nconst getMediaType = (response: Response) =>\n response.headers.get(HttpHeader.CONTENT_TYPE)?.split(';')[0]?.trim().toLowerCase() ?? '';\n\n// Declared JSON is parsed strictly: a body that doesn't parse is a broken response, not a text\n// payload, and `JSON.parse` throwing is the right answer. Read it as text first only so an empty\n// body can resolve to `null` like a 204 — matching the charset form brings `application/json;\n// charset=utf-8` onto this path, where `response.json()` would turn a 200-with-no-body into a\n// `SyntaxError` it never used to be.\nconst parseJson = async (response: Response) => {\n const text = await response.text();\n return text.trim() === '' ? null : JSON.parse(text);\n};\n\nexport const parseData = async (response: Response, parseAs: ParseAs = 'auto') => {\n // No body to read, whatever the caller asked for.\n if (response.status === HttpStatus.NO_CONTENT) return null;\n\n // Per-method-call override\n if (parseAs === 'text') return response.text();\n if (parseAs === 'blob') return response.blob();\n if (parseAs === 'json') return parseJson(response);\n\n const mediaType = getMediaType(response);\n if (JSON_MEDIA_TYPE.test(mediaType)) return parseJson(response);\n\n // A declared binary payload must come back as bytes — `text()` would decode it as UTF-8 and\n // corrupt it. `application/octet-stream` is the only binary type an endpoint declares today\n // (kai-agent's sandbox file download); widen deliberately, never by sniffing.\n if (mediaType === 'application/octet-stream') return response.blob();\n\n // Any other declared type describes its own payload — the query-service CSV export, the\n // data-science `text/plain` endpoints — so hand back the exact bytes instead of sniffing them.\n return response.text();\n};\n\n// Header instance serialize undefined value as `undefined`, we do not want that\nconst cleanHeadersInit = (headersInit: HeadersInit | undefined) => {\n if (Array.isArray(headersInit)) return headersInit;\n if (headersInit instanceof Headers) return headersInit;\n if (headersInit == null) return headersInit;\n\n return removeUndefined(headersInit);\n};\n\nconst createHeaders = (\n headersInitA: HeadersInit | undefined,\n headersInitB: HeadersInit | undefined,\n) => {\n const headersA = new Headers(cleanHeadersInit(headersInitA));\n const headersB = new Headers(cleanHeadersInit(headersInitB));\n\n headersB.forEach((value, key) => {\n headersA.set(key, value);\n });\n\n return headersA;\n};\n\nexport const createPath = (path: string, pathParam: PathParam = {}) =>\n path.replace(/\\{([^}]+)}/g, (_, key) => {\n if (!(key in pathParam))\n throw new Error(`Path parameter \"${key}\" is missing in the path \"${path}\"`);\n\n return encodeURIComponent(pathParam[key]!);\n });\n\nexport const createSearch = (\n query: Record<string, unknown>,\n options: Pick<IStringifyOptions, 'arrayFormat'> = {},\n) => {\n return qs.stringify(query, {\n encodeValuesOnly: true,\n skipNulls: true,\n ...options,\n });\n};\n\nexport const createBody = (body: BodyParam, headers: Headers) => {\n if (body == null) return null;\n if (body instanceof FormData) return body; // fetch automatically sets content-type header\n if (typeof body === 'string') return body; // fetch automatically sets content-type header\n\n const stringifyBody = JSON.stringify(body);\n const stringBody = stringifyBody === '{}' ? null : stringifyBody;\n if (stringBody) headers.set(HttpHeader.CONTENT_TYPE, HttpContentType.JSON);\n\n return stringBody;\n};\n\nexport const parseContentDispositionHeader = (contentDisposition?: string | null) => {\n // extract the type ('inline' or 'attachment'), default the type to 'unknown'\n const type = (() => {\n const typeMatch = contentDisposition?.match(/^\\s*(inline|attachment)\\s*;/i);\n return (typeMatch?.[1]?.toLowerCase() ?? 'unknown') as 'inline' | 'attachment' | 'unknown';\n })();\n\n // extract the filename, default the type to null\n const filename = (() => {\n const filenameMatch = contentDisposition?.match(/filename=\"([^\"]+)\"/i);\n if (filenameMatch) return filenameMatch[1];\n\n // If no filename=\"...\", check for encoded filename*=UTF-8''\n const encodedFilenameMatch = contentDisposition?.match(/filename\\*=(?:UTF-8'')?([^;]+)/i);\n if (encodedFilenameMatch?.[1]) return decodeURIComponent(encodedFilenameMatch[1]);\n\n // Check for unquoted filenames (rare but possible)\n const unquotedFilenameMatch = contentDisposition?.match(/filename=([^;]+)/i);\n return unquotedFilenameMatch?.[1] ?? null;\n })();\n\n // Return the parsed result\n return { type, filename };\n};\n\nexport const createFetchRequest: CreateFetchRequestFn = ({\n url,\n method,\n params,\n options = {},\n defaultOptions,\n}) => {\n const {\n baseUrl,\n validateStatus: defValidateStatus = defaultValidateStatus,\n headers: defaultHeaders,\n fetchFn: defaultFetchFn,\n ...restDefaultOptions\n } = defaultOptions;\n const {\n validateStatus,\n queryArrayFormat,\n headers: endpointHeaders,\n fetchFn,\n parseAs,\n ...restOptions\n } = options;\n\n const headers = createHeaders(defaultHeaders, endpointHeaders);\n const path = createPath(url, params.path);\n const search = createSearch(params.query ?? {}, { arrayFormat: queryArrayFormat });\n const body = createBody(params.body, headers);\n\n const urlInstance = new URL(normalizeBaseUrl(baseUrl) + path);\n urlInstance.search = search;\n\n const request = new Request(urlInstance, {\n ...restDefaultOptions,\n ...restOptions,\n headers,\n method: method.toUpperCase(),\n body,\n });\n\n return {\n request,\n validateStatus: validateStatus ?? defValidateStatus,\n fetchFn: fetchFn ?? defaultFetchFn,\n parseAs,\n };\n};\n","import { ApiError } from '../../errors';\n\nimport type {\n BaseFetchParams,\n CoreFetchFn,\n CreateFetchClientOptions,\n FetchClientOptions,\n HttpMethod,\n} from './types';\nimport { createFetchRequest, parseData } from './utils';\n\nexport type FetchClientError = TypeError | ApiError | SyntaxError | DOMException;\n\nexport const isApiError = (error: unknown): error is ApiError => error instanceof ApiError;\n\nexport const isAbortError = (error: unknown): error is DOMException =>\n error instanceof DOMException && error.name === 'AbortError';\n\nexport const isFetchClientError = (error: unknown): error is FetchClientError =>\n error instanceof TypeError || error instanceof SyntaxError || isApiError(error);\n\n// `fetchFn` is resolved per request by `createFetchRequest` (endpoint option beats client option),\n// so a single request can swap the transport without rebuilding the client.\nconst coreFetch: CoreFetchFn = async ({ request, validateStatus, fetchFn = fetch, parseAs }) => {\n const response = await fetchFn(request);\n const data = await parseData(response, parseAs);\n\n const apiResponse = {\n request,\n response,\n data,\n };\n\n const boolOrError = validateStatus(apiResponse);\n if (isApiError(boolOrError)) throw boolOrError;\n if (!boolOrError) throw new ApiError(apiResponse);\n\n return apiResponse;\n};\n\nexport const createFetchClient = ({\n middlewares = [],\n ...defaultOptions\n}: CreateFetchClientOptions) => {\n const fetchWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n coreFetch,\n );\n\n const createFetchMethod =\n (method: HttpMethod) =>\n async (url: string, params: BaseFetchParams, options: FetchClientOptions = {}) => {\n const request = createFetchRequest({\n url,\n method,\n params,\n defaultOptions,\n options,\n });\n\n const methodMiddlewares = options?.middlewares ?? [];\n\n return methodMiddlewares.reduceRight(\n (next, middleware) => middleware(next),\n fetchWithMiddlewares,\n )(request);\n };\n\n return {\n get: createFetchMethod('get'),\n post: createFetchMethod('post'),\n put: createFetchMethod('put'),\n patch: createFetchMethod('patch'),\n delete: createFetchMethod('delete'),\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"createFetchClient-DdyZMhxO.js","names":[],"sources":["../src/errors/ApiError.ts","../src/internal.ts","../src/fetchClient/createFetchClient/utils.ts","../src/fetchClient/createFetchClient/createFetchClient.ts"],"sourcesContent":["import type { ApiResponse } from '../fetchClient/createFetchClient/types';\n\nexport class ApiError extends Error {\n response: Response;\n request: Request;\n data: unknown;\n\n constructor({ response, request, data }: ApiResponse) {\n super(response.statusText);\n this.response = response;\n this.request = request;\n this.data = data;\n }\n}\n","// Package-internal constants. Not part of the public\n// `@keboola/api-client/constants` sub-path (that is the `constants/` directory).\n\nexport const KeboolaHttpHeader = {\n STORAGE_API_TOKEN: 'X-StorageApi-Token',\n MANAGEMENT_API_TOKEN: 'X-Kbc-Manageapitoken',\n STORAGE_API_URL: 'x-storageapi-url',\n PROJECT_ID: 'X-KBC-ProjectId',\n /** Storage job a request enqueued, reported on the response rather than in its body. */\n STORAGE_API_JOB_ID: 'X-StorageApi-Job-Id',\n} as const;\n\nexport const HttpStatus = {\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n UNPROCESSABLE_ENTITY: 422,\n INTERNAL_SERVER_ERROR: 500,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n} as const;\n\nexport const ENCRYPTED_VALUE_PREFIX = 'KBC::';\n","import type { IStringifyOptions } from 'qs';\nimport qs from 'qs';\n\nimport { HttpStatus } from '../../internal';\n\nimport type {\n ApiResponse,\n BodyParam,\n CreateFetchRequestFn,\n ParseAs,\n PathParam,\n ValidateStatusFn,\n} from './types';\n\n/**\n * Strips trailing slashes from a base URL so concatenating a leading-slash\n * path (e.g. `/v2/storage`) never produces a double slash.\n *\n * Without this, callers that pass `https://connection.keboola.com/` end up\n * issuing requests to `https://connection.keboola.com//v2/storage/...`, which\n * the Storage API rejects with a 404.\n */\nexport const normalizeBaseUrl = (baseUrl: string): string => baseUrl.replace(/\\/+$/, '');\n\nexport const HttpHeader = {\n CONTENT_TYPE: 'content-type',\n CONTENT_DISPOSITION: 'content-disposition',\n AUTHORIZATION: 'Authorization',\n IDEMPOTENCY_KEY: 'Idempotency-Key',\n IF_MATCH: 'If-Match',\n};\n\nexport const HttpContentType = {\n JSON: 'application/json',\n TEXT_PLAIN: 'text/plain',\n FORM_DATA: 'multipart/form-data',\n TEXT_HTML: 'text/html',\n};\n\nexport const defaultValidateStatus: ValidateStatusFn = ({ response }) =>\n response.status >= 200 && response.status <= 299;\n\n/**\n * Whether a response carries an HTML document.\n *\n * - Media types are case-insensitive, so a `Text/HTML` login page is still one.\n * - Only meaningful on a *successful* response: HTML on a failed one is a real error page.\n */\nexport const isHtmlResponse = ({ response }: ApiResponse) =>\n !!response.headers\n .get(HttpHeader.CONTENT_TYPE)\n ?.toLowerCase()\n .includes(HttpContentType.TEXT_HTML);\n\nfunction removeUndefined(obj: Record<string, string>) {\n const objCopy = { ...obj };\n for (const [key, value] of Object.entries(objCopy)) {\n if (value == null) delete objCopy[key];\n }\n return objCopy;\n}\n\n// `application/json`, but also `application/json; charset=utf-8` and the `+json` suffix family.\n// Comparing the raw header for equality misses every response that carries a charset.\nconst JSON_MEDIA_TYPE = /^application\\/([\\w.-]+\\+)?json$/;\n\nconst getMediaType = (response: Response) =>\n response.headers.get(HttpHeader.CONTENT_TYPE)?.split(';')[0]?.trim().toLowerCase() ?? '';\n\n// Declared JSON is parsed strictly: a body that doesn't parse is a broken response, not a text\n// payload, and `JSON.parse` throwing is the right answer. Read it as text first only so an empty\n// body can resolve to `null` like a 204 — matching the charset form brings `application/json;\n// charset=utf-8` onto this path, where `response.json()` would turn a 200-with-no-body into a\n// `SyntaxError` it never used to be.\nconst parseJson = async (response: Response) => {\n const text = await response.text();\n return text.trim() === '' ? null : JSON.parse(text);\n};\n\nexport const parseData = async (response: Response, parseAs: ParseAs = 'auto') => {\n // No body to read, whatever the caller asked for.\n if (response.status === HttpStatus.NO_CONTENT) return null;\n\n // Per-method-call override\n if (parseAs === 'text') return response.text();\n if (parseAs === 'blob') return response.blob();\n if (parseAs === 'json') return parseJson(response);\n\n const mediaType = getMediaType(response);\n if (JSON_MEDIA_TYPE.test(mediaType)) return parseJson(response);\n\n // A declared binary payload must come back as bytes — `text()` would decode it as UTF-8 and\n // corrupt it. `application/octet-stream` is the only binary type an endpoint declares today\n // (kai-agent's sandbox file download); widen deliberately, never by sniffing.\n if (mediaType === 'application/octet-stream') return response.blob();\n\n // Any other declared type describes its own payload — the query-service CSV export, the\n // data-science `text/plain` endpoints — so hand back the exact bytes instead of sniffing them.\n return response.text();\n};\n\n// Header instance serialize undefined value as `undefined`, we do not want that\nconst cleanHeadersInit = (headersInit: HeadersInit | undefined) => {\n if (Array.isArray(headersInit)) return headersInit;\n if (headersInit instanceof Headers) return headersInit;\n if (headersInit == null) return headersInit;\n\n return removeUndefined(headersInit);\n};\n\nconst createHeaders = (\n headersInitA: HeadersInit | undefined,\n headersInitB: HeadersInit | undefined,\n) => {\n const headersA = new Headers(cleanHeadersInit(headersInitA));\n const headersB = new Headers(cleanHeadersInit(headersInitB));\n\n headersB.forEach((value, key) => {\n headersA.set(key, value);\n });\n\n return headersA;\n};\n\nexport const createPath = (path: string, pathParam: PathParam = {}) =>\n path.replace(/\\{([^}]+)}/g, (_, key) => {\n if (!(key in pathParam))\n throw new Error(`Path parameter \"${key}\" is missing in the path \"${path}\"`);\n\n return encodeURIComponent(pathParam[key]!);\n });\n\nexport const createSearch = (\n query: Record<string, unknown>,\n options: Pick<IStringifyOptions, 'arrayFormat'> = {},\n) => {\n return qs.stringify(query, {\n encodeValuesOnly: true,\n skipNulls: true,\n ...options,\n });\n};\n\nexport const createBody = (body: BodyParam, headers: Headers) => {\n if (body == null) return null;\n if (body instanceof FormData) return body; // fetch automatically sets content-type header\n if (typeof body === 'string') return body; // fetch automatically sets content-type header\n\n const stringifyBody = JSON.stringify(body);\n const stringBody = stringifyBody === '{}' ? null : stringifyBody;\n if (stringBody) headers.set(HttpHeader.CONTENT_TYPE, HttpContentType.JSON);\n\n return stringBody;\n};\n\nexport const parseContentDispositionHeader = (contentDisposition?: string | null) => {\n // extract the type ('inline' or 'attachment'), default the type to 'unknown'\n const type = (() => {\n const typeMatch = contentDisposition?.match(/^\\s*(inline|attachment)\\s*;/i);\n return (typeMatch?.[1]?.toLowerCase() ?? 'unknown') as 'inline' | 'attachment' | 'unknown';\n })();\n\n // extract the filename, default the type to null\n const filename = (() => {\n const filenameMatch = contentDisposition?.match(/filename=\"([^\"]+)\"/i);\n if (filenameMatch) return filenameMatch[1];\n\n // If no filename=\"...\", check for encoded filename*=UTF-8''\n const encodedFilenameMatch = contentDisposition?.match(/filename\\*=(?:UTF-8'')?([^;]+)/i);\n if (encodedFilenameMatch?.[1]) return decodeURIComponent(encodedFilenameMatch[1]);\n\n // Check for unquoted filenames (rare but possible)\n const unquotedFilenameMatch = contentDisposition?.match(/filename=([^;]+)/i);\n return unquotedFilenameMatch?.[1] ?? null;\n })();\n\n // Return the parsed result\n return { type, filename };\n};\n\nexport const createFetchRequest: CreateFetchRequestFn = ({\n url,\n method,\n params,\n options = {},\n defaultOptions,\n}) => {\n const {\n baseUrl,\n validateStatus: defValidateStatus = defaultValidateStatus,\n headers: defaultHeaders,\n fetchFn: defaultFetchFn,\n ...restDefaultOptions\n } = defaultOptions;\n const {\n validateStatus,\n queryArrayFormat,\n headers: endpointHeaders,\n fetchFn,\n parseAs,\n ...restOptions\n } = options;\n\n const headers = createHeaders(defaultHeaders, endpointHeaders);\n const path = createPath(url, params.path);\n const search = createSearch(params.query ?? {}, { arrayFormat: queryArrayFormat });\n const body = createBody(params.body, headers);\n\n const urlInstance = new URL(normalizeBaseUrl(baseUrl) + path);\n urlInstance.search = search;\n\n const request = new Request(urlInstance, {\n ...restDefaultOptions,\n ...restOptions,\n headers,\n method: method.toUpperCase(),\n body,\n });\n\n return {\n request,\n validateStatus: validateStatus ?? defValidateStatus,\n fetchFn: fetchFn ?? defaultFetchFn,\n parseAs,\n };\n};\n","import { ApiError } from '../../errors';\n\nimport type {\n BaseFetchParams,\n CoreFetchFn,\n CreateFetchClientOptions,\n FetchClientOptions,\n HttpMethod,\n} from './types';\nimport { createFetchRequest, parseData } from './utils';\n\nexport type FetchClientError = TypeError | ApiError | SyntaxError | DOMException;\n\nexport const isApiError = (error: unknown): error is ApiError => error instanceof ApiError;\n\nexport const isAbortError = (error: unknown): error is DOMException =>\n error instanceof DOMException && error.name === 'AbortError';\n\nexport const isTimeoutError = (error: unknown): error is DOMException =>\n error instanceof DOMException && error.name === 'TimeoutError';\n\nexport const isFetchClientError = (error: unknown): error is FetchClientError =>\n error instanceof TypeError || error instanceof SyntaxError || isApiError(error);\n\n// `fetchFn` is resolved per request by `createFetchRequest` (endpoint option beats client option),\n// so a single request can swap the transport without rebuilding the client.\nconst coreFetch: CoreFetchFn = async ({ request, validateStatus, fetchFn = fetch, parseAs }) => {\n const response = await fetchFn(request);\n const data = await parseData(response, parseAs);\n\n const apiResponse = {\n request,\n response,\n data,\n };\n\n const boolOrError = validateStatus(apiResponse);\n if (isApiError(boolOrError)) throw boolOrError;\n if (!boolOrError) throw new ApiError(apiResponse);\n\n return apiResponse;\n};\n\nexport const createFetchClient = ({\n middlewares = [],\n ...defaultOptions\n}: CreateFetchClientOptions) => {\n const fetchWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n coreFetch,\n );\n\n const createFetchMethod =\n (method: HttpMethod) =>\n async (url: string, params: BaseFetchParams, options: FetchClientOptions = {}) => {\n const request = createFetchRequest({\n url,\n method,\n params,\n defaultOptions,\n options,\n });\n\n const methodMiddlewares = options?.middlewares ?? [];\n\n return methodMiddlewares.reduceRight(\n (next, middleware) => middleware(next),\n fetchWithMiddlewares,\n )(request);\n };\n\n return {\n get: createFetchMethod('get'),\n post: createFetchMethod('post'),\n put: createFetchMethod('put'),\n patch: createFetchMethod('patch'),\n delete: createFetchMethod('delete'),\n };\n};\n"],"mappings":"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"}
@@ -160,6 +160,7 @@ const createFetchRequest = ({ url, method, params, options = {}, defaultOptions
160
160
  //#region src/fetchClient/createFetchClient/createFetchClient.ts
161
161
  const isApiError = (error) => error instanceof ApiError;
162
162
  const isAbortError = (error) => error instanceof DOMException && error.name === "AbortError";
163
+ const isTimeoutError = (error) => error instanceof DOMException && error.name === "TimeoutError";
163
164
  const isFetchClientError = (error) => error instanceof TypeError || error instanceof SyntaxError || isApiError(error);
164
165
  const coreFetch = async ({ request, validateStatus, fetchFn = fetch, parseAs }) => {
165
166
  const response = await fetchFn(request);
@@ -266,6 +267,12 @@ Object.defineProperty(exports, "isHtmlResponse", {
266
267
  return isHtmlResponse;
267
268
  }
268
269
  });
270
+ Object.defineProperty(exports, "isTimeoutError", {
271
+ enumerable: true,
272
+ get: function() {
273
+ return isTimeoutError;
274
+ }
275
+ });
269
276
  Object.defineProperty(exports, "normalizeBaseUrl", {
270
277
  enumerable: true,
271
278
  get: function() {
@@ -279,4 +286,4 @@ Object.defineProperty(exports, "parseContentDispositionHeader", {
279
286
  }
280
287
  });
281
288
 
282
- //# sourceMappingURL=createFetchClient-BRfTjBLV.cjs.map
289
+ //# sourceMappingURL=createFetchClient-DvZvD31l.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"createFetchClient-BRfTjBLV.cjs","names":[],"sources":["../src/errors/ApiError.ts","../src/internal.ts","../src/fetchClient/createFetchClient/utils.ts","../src/fetchClient/createFetchClient/createFetchClient.ts"],"sourcesContent":["import type { ApiResponse } from '../fetchClient/createFetchClient/types';\n\nexport class ApiError extends Error {\n response: Response;\n request: Request;\n data: unknown;\n\n constructor({ response, request, data }: ApiResponse) {\n super(response.statusText);\n this.response = response;\n this.request = request;\n this.data = data;\n }\n}\n","// Package-internal constants. Not part of the public\n// `@keboola/api-client/constants` sub-path (that is the `constants/` directory).\n\nexport const KeboolaHttpHeader = {\n STORAGE_API_TOKEN: 'X-StorageApi-Token',\n MANAGEMENT_API_TOKEN: 'X-Kbc-Manageapitoken',\n STORAGE_API_URL: 'x-storageapi-url',\n PROJECT_ID: 'X-KBC-ProjectId',\n /** Storage job a request enqueued, reported on the response rather than in its body. */\n STORAGE_API_JOB_ID: 'X-StorageApi-Job-Id',\n} as const;\n\nexport const HttpStatus = {\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n UNPROCESSABLE_ENTITY: 422,\n INTERNAL_SERVER_ERROR: 500,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n} as const;\n\nexport const ENCRYPTED_VALUE_PREFIX = 'KBC::';\n","import type { IStringifyOptions } from 'qs';\nimport qs from 'qs';\n\nimport { HttpStatus } from '../../internal';\n\nimport type {\n ApiResponse,\n BodyParam,\n CreateFetchRequestFn,\n ParseAs,\n PathParam,\n ValidateStatusFn,\n} from './types';\n\n/**\n * Strips trailing slashes from a base URL so concatenating a leading-slash\n * path (e.g. `/v2/storage`) never produces a double slash.\n *\n * Without this, callers that pass `https://connection.keboola.com/` end up\n * issuing requests to `https://connection.keboola.com//v2/storage/...`, which\n * the Storage API rejects with a 404.\n */\nexport const normalizeBaseUrl = (baseUrl: string): string => baseUrl.replace(/\\/+$/, '');\n\nexport const HttpHeader = {\n CONTENT_TYPE: 'content-type',\n CONTENT_DISPOSITION: 'content-disposition',\n AUTHORIZATION: 'Authorization',\n IDEMPOTENCY_KEY: 'Idempotency-Key',\n IF_MATCH: 'If-Match',\n};\n\nexport const HttpContentType = {\n JSON: 'application/json',\n TEXT_PLAIN: 'text/plain',\n FORM_DATA: 'multipart/form-data',\n TEXT_HTML: 'text/html',\n};\n\nexport const defaultValidateStatus: ValidateStatusFn = ({ response }) =>\n response.status >= 200 && response.status <= 299;\n\n/**\n * Whether a response carries an HTML document.\n *\n * - Media types are case-insensitive, so a `Text/HTML` login page is still one.\n * - Only meaningful on a *successful* response: HTML on a failed one is a real error page.\n */\nexport const isHtmlResponse = ({ response }: ApiResponse) =>\n !!response.headers\n .get(HttpHeader.CONTENT_TYPE)\n ?.toLowerCase()\n .includes(HttpContentType.TEXT_HTML);\n\nfunction removeUndefined(obj: Record<string, string>) {\n const objCopy = { ...obj };\n for (const [key, value] of Object.entries(objCopy)) {\n if (value == null) delete objCopy[key];\n }\n return objCopy;\n}\n\n// `application/json`, but also `application/json; charset=utf-8` and the `+json` suffix family.\n// Comparing the raw header for equality misses every response that carries a charset.\nconst JSON_MEDIA_TYPE = /^application\\/([\\w.-]+\\+)?json$/;\n\nconst getMediaType = (response: Response) =>\n response.headers.get(HttpHeader.CONTENT_TYPE)?.split(';')[0]?.trim().toLowerCase() ?? '';\n\n// Declared JSON is parsed strictly: a body that doesn't parse is a broken response, not a text\n// payload, and `JSON.parse` throwing is the right answer. Read it as text first only so an empty\n// body can resolve to `null` like a 204 — matching the charset form brings `application/json;\n// charset=utf-8` onto this path, where `response.json()` would turn a 200-with-no-body into a\n// `SyntaxError` it never used to be.\nconst parseJson = async (response: Response) => {\n const text = await response.text();\n return text.trim() === '' ? null : JSON.parse(text);\n};\n\nexport const parseData = async (response: Response, parseAs: ParseAs = 'auto') => {\n // No body to read, whatever the caller asked for.\n if (response.status === HttpStatus.NO_CONTENT) return null;\n\n // Per-method-call override\n if (parseAs === 'text') return response.text();\n if (parseAs === 'blob') return response.blob();\n if (parseAs === 'json') return parseJson(response);\n\n const mediaType = getMediaType(response);\n if (JSON_MEDIA_TYPE.test(mediaType)) return parseJson(response);\n\n // A declared binary payload must come back as bytes — `text()` would decode it as UTF-8 and\n // corrupt it. `application/octet-stream` is the only binary type an endpoint declares today\n // (kai-agent's sandbox file download); widen deliberately, never by sniffing.\n if (mediaType === 'application/octet-stream') return response.blob();\n\n // Any other declared type describes its own payload — the query-service CSV export, the\n // data-science `text/plain` endpoints — so hand back the exact bytes instead of sniffing them.\n return response.text();\n};\n\n// Header instance serialize undefined value as `undefined`, we do not want that\nconst cleanHeadersInit = (headersInit: HeadersInit | undefined) => {\n if (Array.isArray(headersInit)) return headersInit;\n if (headersInit instanceof Headers) return headersInit;\n if (headersInit == null) return headersInit;\n\n return removeUndefined(headersInit);\n};\n\nconst createHeaders = (\n headersInitA: HeadersInit | undefined,\n headersInitB: HeadersInit | undefined,\n) => {\n const headersA = new Headers(cleanHeadersInit(headersInitA));\n const headersB = new Headers(cleanHeadersInit(headersInitB));\n\n headersB.forEach((value, key) => {\n headersA.set(key, value);\n });\n\n return headersA;\n};\n\nexport const createPath = (path: string, pathParam: PathParam = {}) =>\n path.replace(/\\{([^}]+)}/g, (_, key) => {\n if (!(key in pathParam))\n throw new Error(`Path parameter \"${key}\" is missing in the path \"${path}\"`);\n\n return encodeURIComponent(pathParam[key]!);\n });\n\nexport const createSearch = (\n query: Record<string, unknown>,\n options: Pick<IStringifyOptions, 'arrayFormat'> = {},\n) => {\n return qs.stringify(query, {\n encodeValuesOnly: true,\n skipNulls: true,\n ...options,\n });\n};\n\nexport const createBody = (body: BodyParam, headers: Headers) => {\n if (body == null) return null;\n if (body instanceof FormData) return body; // fetch automatically sets content-type header\n if (typeof body === 'string') return body; // fetch automatically sets content-type header\n\n const stringifyBody = JSON.stringify(body);\n const stringBody = stringifyBody === '{}' ? null : stringifyBody;\n if (stringBody) headers.set(HttpHeader.CONTENT_TYPE, HttpContentType.JSON);\n\n return stringBody;\n};\n\nexport const parseContentDispositionHeader = (contentDisposition?: string | null) => {\n // extract the type ('inline' or 'attachment'), default the type to 'unknown'\n const type = (() => {\n const typeMatch = contentDisposition?.match(/^\\s*(inline|attachment)\\s*;/i);\n return (typeMatch?.[1]?.toLowerCase() ?? 'unknown') as 'inline' | 'attachment' | 'unknown';\n })();\n\n // extract the filename, default the type to null\n const filename = (() => {\n const filenameMatch = contentDisposition?.match(/filename=\"([^\"]+)\"/i);\n if (filenameMatch) return filenameMatch[1];\n\n // If no filename=\"...\", check for encoded filename*=UTF-8''\n const encodedFilenameMatch = contentDisposition?.match(/filename\\*=(?:UTF-8'')?([^;]+)/i);\n if (encodedFilenameMatch?.[1]) return decodeURIComponent(encodedFilenameMatch[1]);\n\n // Check for unquoted filenames (rare but possible)\n const unquotedFilenameMatch = contentDisposition?.match(/filename=([^;]+)/i);\n return unquotedFilenameMatch?.[1] ?? null;\n })();\n\n // Return the parsed result\n return { type, filename };\n};\n\nexport const createFetchRequest: CreateFetchRequestFn = ({\n url,\n method,\n params,\n options = {},\n defaultOptions,\n}) => {\n const {\n baseUrl,\n validateStatus: defValidateStatus = defaultValidateStatus,\n headers: defaultHeaders,\n fetchFn: defaultFetchFn,\n ...restDefaultOptions\n } = defaultOptions;\n const {\n validateStatus,\n queryArrayFormat,\n headers: endpointHeaders,\n fetchFn,\n parseAs,\n ...restOptions\n } = options;\n\n const headers = createHeaders(defaultHeaders, endpointHeaders);\n const path = createPath(url, params.path);\n const search = createSearch(params.query ?? {}, { arrayFormat: queryArrayFormat });\n const body = createBody(params.body, headers);\n\n const urlInstance = new URL(normalizeBaseUrl(baseUrl) + path);\n urlInstance.search = search;\n\n const request = new Request(urlInstance, {\n ...restDefaultOptions,\n ...restOptions,\n headers,\n method: method.toUpperCase(),\n body,\n });\n\n return {\n request,\n validateStatus: validateStatus ?? defValidateStatus,\n fetchFn: fetchFn ?? defaultFetchFn,\n parseAs,\n };\n};\n","import { ApiError } from '../../errors';\n\nimport type {\n BaseFetchParams,\n CoreFetchFn,\n CreateFetchClientOptions,\n FetchClientOptions,\n HttpMethod,\n} from './types';\nimport { createFetchRequest, parseData } from './utils';\n\nexport type FetchClientError = TypeError | ApiError | SyntaxError | DOMException;\n\nexport const isApiError = (error: unknown): error is ApiError => error instanceof ApiError;\n\nexport const isAbortError = (error: unknown): error is DOMException =>\n error instanceof DOMException && error.name === 'AbortError';\n\nexport const isFetchClientError = (error: unknown): error is FetchClientError =>\n error instanceof TypeError || error instanceof SyntaxError || isApiError(error);\n\n// `fetchFn` is resolved per request by `createFetchRequest` (endpoint option beats client option),\n// so a single request can swap the transport without rebuilding the client.\nconst coreFetch: CoreFetchFn = async ({ request, validateStatus, fetchFn = fetch, parseAs }) => {\n const response = await fetchFn(request);\n const data = await parseData(response, parseAs);\n\n const apiResponse = {\n request,\n response,\n data,\n };\n\n const boolOrError = validateStatus(apiResponse);\n if (isApiError(boolOrError)) throw boolOrError;\n if (!boolOrError) throw new ApiError(apiResponse);\n\n return apiResponse;\n};\n\nexport const createFetchClient = ({\n middlewares = [],\n ...defaultOptions\n}: CreateFetchClientOptions) => {\n const fetchWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n coreFetch,\n );\n\n const createFetchMethod =\n (method: HttpMethod) =>\n async (url: string, params: BaseFetchParams, options: FetchClientOptions = {}) => {\n const request = createFetchRequest({\n url,\n method,\n params,\n defaultOptions,\n options,\n });\n\n const methodMiddlewares = options?.middlewares ?? [];\n\n return methodMiddlewares.reduceRight(\n (next, middleware) => middleware(next),\n fetchWithMiddlewares,\n )(request);\n };\n\n return {\n get: createFetchMethod('get'),\n post: createFetchMethod('post'),\n put: createFetchMethod('put'),\n patch: createFetchMethod('patch'),\n delete: createFetchMethod('delete'),\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"createFetchClient-DvZvD31l.cjs","names":[],"sources":["../src/errors/ApiError.ts","../src/internal.ts","../src/fetchClient/createFetchClient/utils.ts","../src/fetchClient/createFetchClient/createFetchClient.ts"],"sourcesContent":["import type { ApiResponse } from '../fetchClient/createFetchClient/types';\n\nexport class ApiError extends Error {\n response: Response;\n request: Request;\n data: unknown;\n\n constructor({ response, request, data }: ApiResponse) {\n super(response.statusText);\n this.response = response;\n this.request = request;\n this.data = data;\n }\n}\n","// Package-internal constants. Not part of the public\n// `@keboola/api-client/constants` sub-path (that is the `constants/` directory).\n\nexport const KeboolaHttpHeader = {\n STORAGE_API_TOKEN: 'X-StorageApi-Token',\n MANAGEMENT_API_TOKEN: 'X-Kbc-Manageapitoken',\n STORAGE_API_URL: 'x-storageapi-url',\n PROJECT_ID: 'X-KBC-ProjectId',\n /** Storage job a request enqueued, reported on the response rather than in its body. */\n STORAGE_API_JOB_ID: 'X-StorageApi-Job-Id',\n} as const;\n\nexport const HttpStatus = {\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n UNPROCESSABLE_ENTITY: 422,\n INTERNAL_SERVER_ERROR: 500,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n} as const;\n\nexport const ENCRYPTED_VALUE_PREFIX = 'KBC::';\n","import type { IStringifyOptions } from 'qs';\nimport qs from 'qs';\n\nimport { HttpStatus } from '../../internal';\n\nimport type {\n ApiResponse,\n BodyParam,\n CreateFetchRequestFn,\n ParseAs,\n PathParam,\n ValidateStatusFn,\n} from './types';\n\n/**\n * Strips trailing slashes from a base URL so concatenating a leading-slash\n * path (e.g. `/v2/storage`) never produces a double slash.\n *\n * Without this, callers that pass `https://connection.keboola.com/` end up\n * issuing requests to `https://connection.keboola.com//v2/storage/...`, which\n * the Storage API rejects with a 404.\n */\nexport const normalizeBaseUrl = (baseUrl: string): string => baseUrl.replace(/\\/+$/, '');\n\nexport const HttpHeader = {\n CONTENT_TYPE: 'content-type',\n CONTENT_DISPOSITION: 'content-disposition',\n AUTHORIZATION: 'Authorization',\n IDEMPOTENCY_KEY: 'Idempotency-Key',\n IF_MATCH: 'If-Match',\n};\n\nexport const HttpContentType = {\n JSON: 'application/json',\n TEXT_PLAIN: 'text/plain',\n FORM_DATA: 'multipart/form-data',\n TEXT_HTML: 'text/html',\n};\n\nexport const defaultValidateStatus: ValidateStatusFn = ({ response }) =>\n response.status >= 200 && response.status <= 299;\n\n/**\n * Whether a response carries an HTML document.\n *\n * - Media types are case-insensitive, so a `Text/HTML` login page is still one.\n * - Only meaningful on a *successful* response: HTML on a failed one is a real error page.\n */\nexport const isHtmlResponse = ({ response }: ApiResponse) =>\n !!response.headers\n .get(HttpHeader.CONTENT_TYPE)\n ?.toLowerCase()\n .includes(HttpContentType.TEXT_HTML);\n\nfunction removeUndefined(obj: Record<string, string>) {\n const objCopy = { ...obj };\n for (const [key, value] of Object.entries(objCopy)) {\n if (value == null) delete objCopy[key];\n }\n return objCopy;\n}\n\n// `application/json`, but also `application/json; charset=utf-8` and the `+json` suffix family.\n// Comparing the raw header for equality misses every response that carries a charset.\nconst JSON_MEDIA_TYPE = /^application\\/([\\w.-]+\\+)?json$/;\n\nconst getMediaType = (response: Response) =>\n response.headers.get(HttpHeader.CONTENT_TYPE)?.split(';')[0]?.trim().toLowerCase() ?? '';\n\n// Declared JSON is parsed strictly: a body that doesn't parse is a broken response, not a text\n// payload, and `JSON.parse` throwing is the right answer. Read it as text first only so an empty\n// body can resolve to `null` like a 204 — matching the charset form brings `application/json;\n// charset=utf-8` onto this path, where `response.json()` would turn a 200-with-no-body into a\n// `SyntaxError` it never used to be.\nconst parseJson = async (response: Response) => {\n const text = await response.text();\n return text.trim() === '' ? null : JSON.parse(text);\n};\n\nexport const parseData = async (response: Response, parseAs: ParseAs = 'auto') => {\n // No body to read, whatever the caller asked for.\n if (response.status === HttpStatus.NO_CONTENT) return null;\n\n // Per-method-call override\n if (parseAs === 'text') return response.text();\n if (parseAs === 'blob') return response.blob();\n if (parseAs === 'json') return parseJson(response);\n\n const mediaType = getMediaType(response);\n if (JSON_MEDIA_TYPE.test(mediaType)) return parseJson(response);\n\n // A declared binary payload must come back as bytes — `text()` would decode it as UTF-8 and\n // corrupt it. `application/octet-stream` is the only binary type an endpoint declares today\n // (kai-agent's sandbox file download); widen deliberately, never by sniffing.\n if (mediaType === 'application/octet-stream') return response.blob();\n\n // Any other declared type describes its own payload — the query-service CSV export, the\n // data-science `text/plain` endpoints — so hand back the exact bytes instead of sniffing them.\n return response.text();\n};\n\n// Header instance serialize undefined value as `undefined`, we do not want that\nconst cleanHeadersInit = (headersInit: HeadersInit | undefined) => {\n if (Array.isArray(headersInit)) return headersInit;\n if (headersInit instanceof Headers) return headersInit;\n if (headersInit == null) return headersInit;\n\n return removeUndefined(headersInit);\n};\n\nconst createHeaders = (\n headersInitA: HeadersInit | undefined,\n headersInitB: HeadersInit | undefined,\n) => {\n const headersA = new Headers(cleanHeadersInit(headersInitA));\n const headersB = new Headers(cleanHeadersInit(headersInitB));\n\n headersB.forEach((value, key) => {\n headersA.set(key, value);\n });\n\n return headersA;\n};\n\nexport const createPath = (path: string, pathParam: PathParam = {}) =>\n path.replace(/\\{([^}]+)}/g, (_, key) => {\n if (!(key in pathParam))\n throw new Error(`Path parameter \"${key}\" is missing in the path \"${path}\"`);\n\n return encodeURIComponent(pathParam[key]!);\n });\n\nexport const createSearch = (\n query: Record<string, unknown>,\n options: Pick<IStringifyOptions, 'arrayFormat'> = {},\n) => {\n return qs.stringify(query, {\n encodeValuesOnly: true,\n skipNulls: true,\n ...options,\n });\n};\n\nexport const createBody = (body: BodyParam, headers: Headers) => {\n if (body == null) return null;\n if (body instanceof FormData) return body; // fetch automatically sets content-type header\n if (typeof body === 'string') return body; // fetch automatically sets content-type header\n\n const stringifyBody = JSON.stringify(body);\n const stringBody = stringifyBody === '{}' ? null : stringifyBody;\n if (stringBody) headers.set(HttpHeader.CONTENT_TYPE, HttpContentType.JSON);\n\n return stringBody;\n};\n\nexport const parseContentDispositionHeader = (contentDisposition?: string | null) => {\n // extract the type ('inline' or 'attachment'), default the type to 'unknown'\n const type = (() => {\n const typeMatch = contentDisposition?.match(/^\\s*(inline|attachment)\\s*;/i);\n return (typeMatch?.[1]?.toLowerCase() ?? 'unknown') as 'inline' | 'attachment' | 'unknown';\n })();\n\n // extract the filename, default the type to null\n const filename = (() => {\n const filenameMatch = contentDisposition?.match(/filename=\"([^\"]+)\"/i);\n if (filenameMatch) return filenameMatch[1];\n\n // If no filename=\"...\", check for encoded filename*=UTF-8''\n const encodedFilenameMatch = contentDisposition?.match(/filename\\*=(?:UTF-8'')?([^;]+)/i);\n if (encodedFilenameMatch?.[1]) return decodeURIComponent(encodedFilenameMatch[1]);\n\n // Check for unquoted filenames (rare but possible)\n const unquotedFilenameMatch = contentDisposition?.match(/filename=([^;]+)/i);\n return unquotedFilenameMatch?.[1] ?? null;\n })();\n\n // Return the parsed result\n return { type, filename };\n};\n\nexport const createFetchRequest: CreateFetchRequestFn = ({\n url,\n method,\n params,\n options = {},\n defaultOptions,\n}) => {\n const {\n baseUrl,\n validateStatus: defValidateStatus = defaultValidateStatus,\n headers: defaultHeaders,\n fetchFn: defaultFetchFn,\n ...restDefaultOptions\n } = defaultOptions;\n const {\n validateStatus,\n queryArrayFormat,\n headers: endpointHeaders,\n fetchFn,\n parseAs,\n ...restOptions\n } = options;\n\n const headers = createHeaders(defaultHeaders, endpointHeaders);\n const path = createPath(url, params.path);\n const search = createSearch(params.query ?? {}, { arrayFormat: queryArrayFormat });\n const body = createBody(params.body, headers);\n\n const urlInstance = new URL(normalizeBaseUrl(baseUrl) + path);\n urlInstance.search = search;\n\n const request = new Request(urlInstance, {\n ...restDefaultOptions,\n ...restOptions,\n headers,\n method: method.toUpperCase(),\n body,\n });\n\n return {\n request,\n validateStatus: validateStatus ?? defValidateStatus,\n fetchFn: fetchFn ?? defaultFetchFn,\n parseAs,\n };\n};\n","import { ApiError } from '../../errors';\n\nimport type {\n BaseFetchParams,\n CoreFetchFn,\n CreateFetchClientOptions,\n FetchClientOptions,\n HttpMethod,\n} from './types';\nimport { createFetchRequest, parseData } from './utils';\n\nexport type FetchClientError = TypeError | ApiError | SyntaxError | DOMException;\n\nexport const isApiError = (error: unknown): error is ApiError => error instanceof ApiError;\n\nexport const isAbortError = (error: unknown): error is DOMException =>\n error instanceof DOMException && error.name === 'AbortError';\n\nexport const isTimeoutError = (error: unknown): error is DOMException =>\n error instanceof DOMException && error.name === 'TimeoutError';\n\nexport const isFetchClientError = (error: unknown): error is FetchClientError =>\n error instanceof TypeError || error instanceof SyntaxError || isApiError(error);\n\n// `fetchFn` is resolved per request by `createFetchRequest` (endpoint option beats client option),\n// so a single request can swap the transport without rebuilding the client.\nconst coreFetch: CoreFetchFn = async ({ request, validateStatus, fetchFn = fetch, parseAs }) => {\n const response = await fetchFn(request);\n const data = await parseData(response, parseAs);\n\n const apiResponse = {\n request,\n response,\n data,\n };\n\n const boolOrError = validateStatus(apiResponse);\n if (isApiError(boolOrError)) throw boolOrError;\n if (!boolOrError) throw new ApiError(apiResponse);\n\n return apiResponse;\n};\n\nexport const createFetchClient = ({\n middlewares = [],\n ...defaultOptions\n}: CreateFetchClientOptions) => {\n const fetchWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n coreFetch,\n );\n\n const createFetchMethod =\n (method: HttpMethod) =>\n async (url: string, params: BaseFetchParams, options: FetchClientOptions = {}) => {\n const request = createFetchRequest({\n url,\n method,\n params,\n defaultOptions,\n options,\n });\n\n const methodMiddlewares = options?.middlewares ?? [];\n\n return methodMiddlewares.reduceRight(\n (next, middleware) => middleware(next),\n fetchWithMiddlewares,\n )(request);\n };\n\n return {\n get: createFetchMethod('get'),\n post: createFetchMethod('post'),\n put: createFetchMethod('put'),\n patch: createFetchMethod('patch'),\n delete: createFetchMethod('delete'),\n };\n};\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { t as createFetchClient } from "./createFetchClient-BbG46bL0.js";
1
+ import { t as createFetchClient } from "./createFetchClient-DdyZMhxO.js";
2
2
  //#region src/fetchClient/createGenericFetchClient.ts
3
3
  const createGenericFetchClient = (defaultOptions) => createFetchClient(defaultOptions);
4
4
  //#endregion
5
5
  export { createGenericFetchClient as t };
6
6
 
7
- //# sourceMappingURL=createGenericFetchClient-BHYQLZhe.js.map
7
+ //# sourceMappingURL=createGenericFetchClient-MQeLRiNW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createGenericFetchClient-BHYQLZhe.js","names":[],"sources":["../src/fetchClient/createGenericFetchClient.ts"],"sourcesContent":["import type {\n ApiResponse,\n BodyParam,\n CreateFetchClientOptions,\n FetchClientOptions,\n PathParam,\n QueryParam,\n} from './createFetchClient';\nimport { createFetchClient } from './createFetchClient';\n\ntype FetchParams<Path = PathParam, Query = QueryParam, Body = BodyParam> = {\n path?: Path;\n query?: Query;\n body?: Body;\n};\n\ntype FetchMethod = <Data, Path = PathParam, Query = QueryParam, Body = BodyParam>(\n url: string,\n params: FetchParams<Path, Query, Body>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<Data>>;\n\ntype FetchClient = {\n get: FetchMethod;\n post: FetchMethod;\n put: FetchMethod;\n patch: FetchMethod;\n delete: FetchMethod;\n};\n\nexport const createGenericFetchClient = (defaultOptions: CreateFetchClientOptions) =>\n createFetchClient(defaultOptions) as FetchClient;\n"],"mappings":";;AA8BA,MAAa,4BAA4B,mBACvC,kBAAkB,cAAc"}
1
+ {"version":3,"file":"createGenericFetchClient-MQeLRiNW.js","names":[],"sources":["../src/fetchClient/createGenericFetchClient.ts"],"sourcesContent":["import type {\n ApiResponse,\n BodyParam,\n CreateFetchClientOptions,\n FetchClientOptions,\n PathParam,\n QueryParam,\n} from './createFetchClient';\nimport { createFetchClient } from './createFetchClient';\n\ntype FetchParams<Path = PathParam, Query = QueryParam, Body = BodyParam> = {\n path?: Path;\n query?: Query;\n body?: Body;\n};\n\ntype FetchMethod = <Data, Path = PathParam, Query = QueryParam, Body = BodyParam>(\n url: string,\n params: FetchParams<Path, Query, Body>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<Data>>;\n\ntype FetchClient = {\n get: FetchMethod;\n post: FetchMethod;\n put: FetchMethod;\n patch: FetchMethod;\n delete: FetchMethod;\n};\n\nexport const createGenericFetchClient = (defaultOptions: CreateFetchClientOptions) =>\n createFetchClient(defaultOptions) as FetchClient;\n"],"mappings":";;AA8BA,MAAa,4BAA4B,mBACvC,kBAAkB,cAAc"}
@@ -1,4 +1,4 @@
1
- const require_createFetchClient = require("./createFetchClient-BRfTjBLV.cjs");
1
+ const require_createFetchClient = require("./createFetchClient-DvZvD31l.cjs");
2
2
  //#region src/fetchClient/createGenericFetchClient.ts
3
3
  const createGenericFetchClient = (defaultOptions) => require_createFetchClient.createFetchClient(defaultOptions);
4
4
  //#endregion
@@ -9,4 +9,4 @@ Object.defineProperty(exports, "createGenericFetchClient", {
9
9
  }
10
10
  });
11
11
 
12
- //# sourceMappingURL=createGenericFetchClient-DHs-i7_O.cjs.map
12
+ //# sourceMappingURL=createGenericFetchClient-qfCZlCTv.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"createGenericFetchClient-DHs-i7_O.cjs","names":["createFetchClient"],"sources":["../src/fetchClient/createGenericFetchClient.ts"],"sourcesContent":["import type {\n ApiResponse,\n BodyParam,\n CreateFetchClientOptions,\n FetchClientOptions,\n PathParam,\n QueryParam,\n} from './createFetchClient';\nimport { createFetchClient } from './createFetchClient';\n\ntype FetchParams<Path = PathParam, Query = QueryParam, Body = BodyParam> = {\n path?: Path;\n query?: Query;\n body?: Body;\n};\n\ntype FetchMethod = <Data, Path = PathParam, Query = QueryParam, Body = BodyParam>(\n url: string,\n params: FetchParams<Path, Query, Body>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<Data>>;\n\ntype FetchClient = {\n get: FetchMethod;\n post: FetchMethod;\n put: FetchMethod;\n patch: FetchMethod;\n delete: FetchMethod;\n};\n\nexport const createGenericFetchClient = (defaultOptions: CreateFetchClientOptions) =>\n createFetchClient(defaultOptions) as FetchClient;\n"],"mappings":";;AA8BA,MAAa,4BAA4B,mBACvCA,0BAAAA,kBAAkB,cAAc"}
1
+ {"version":3,"file":"createGenericFetchClient-qfCZlCTv.cjs","names":["createFetchClient"],"sources":["../src/fetchClient/createGenericFetchClient.ts"],"sourcesContent":["import type {\n ApiResponse,\n BodyParam,\n CreateFetchClientOptions,\n FetchClientOptions,\n PathParam,\n QueryParam,\n} from './createFetchClient';\nimport { createFetchClient } from './createFetchClient';\n\ntype FetchParams<Path = PathParam, Query = QueryParam, Body = BodyParam> = {\n path?: Path;\n query?: Query;\n body?: Body;\n};\n\ntype FetchMethod = <Data, Path = PathParam, Query = QueryParam, Body = BodyParam>(\n url: string,\n params: FetchParams<Path, Query, Body>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<Data>>;\n\ntype FetchClient = {\n get: FetchMethod;\n post: FetchMethod;\n put: FetchMethod;\n patch: FetchMethod;\n delete: FetchMethod;\n};\n\nexport const createGenericFetchClient = (defaultOptions: CreateFetchClientOptions) =>\n createFetchClient(defaultOptions) as FetchClient;\n"],"mappings":";;AA8BA,MAAa,4BAA4B,mBACvCA,0BAAAA,kBAAkB,cAAc"}
@@ -1,4 +1,4 @@
1
- const require_createFetchClient = require("./createFetchClient-BRfTjBLV.cjs");
1
+ const require_createFetchClient = require("./createFetchClient-DvZvD31l.cjs");
2
2
  //#region src/fetchClient/createOpenapiFetchClient.ts
3
3
  const createOpenapiFetchClient = (defaultOptions) => require_createFetchClient.createFetchClient(defaultOptions);
4
4
  //#endregion
@@ -9,4 +9,4 @@ Object.defineProperty(exports, "createOpenapiFetchClient", {
9
9
  }
10
10
  });
11
11
 
12
- //# sourceMappingURL=createOpenapiFetchClient-CyDUFxHB.cjs.map
12
+ //# sourceMappingURL=createOpenapiFetchClient-C57Ljzi6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"createOpenapiFetchClient-CyDUFxHB.cjs","names":["createFetchClient"],"sources":["../src/fetchClient/createOpenapiFetchClient.ts"],"sourcesContent":["import {\n type ApiResponse,\n createFetchClient,\n type CreateFetchClientOptions,\n type FetchClientOptions,\n type HttpMethod,\n} from './createFetchClient';\nimport type { OpenapiParametersType, OpenapiReturnType } from './types';\n\ntype OpenapiPaths<Paths> = {\n [P in keyof Paths]: {\n [M in HttpMethod]?: unknown;\n };\n};\n\ntype PathsWithMethod<Paths extends OpenapiPaths<Paths>, PathnameMethod extends HttpMethod> = {\n [Pathname in keyof Paths]: Paths[Pathname] extends {\n [K in PathnameMethod]: any;\n }\n ? Pathname\n : never;\n}[keyof Paths];\n\ntype FetchMethod<Paths extends OpenapiPaths<Paths>, Method extends HttpMethod> = <\n Path extends PathsWithMethod<Paths, Method>,\n>(\n url: Path,\n params: OpenapiParametersType<Paths[Path][Method]>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<OpenapiReturnType<Paths[Path][Method]>>>;\n\ntype FetchClient<Paths extends OpenapiPaths<Paths>> = {\n get: FetchMethod<Paths, 'get'>;\n post: FetchMethod<Paths, 'post'>;\n put: FetchMethod<Paths, 'put'>;\n patch: FetchMethod<Paths, 'patch'>;\n delete: FetchMethod<Paths, 'delete'>;\n};\n\nexport const createOpenapiFetchClient = <Paths extends OpenapiPaths<Paths>>(\n defaultOptions: CreateFetchClientOptions,\n) => createFetchClient(defaultOptions) as FetchClient<Paths>;\n"],"mappings":";;AAuCA,MAAa,4BACX,mBACGA,0BAAAA,kBAAkB,cAAc"}
1
+ {"version":3,"file":"createOpenapiFetchClient-C57Ljzi6.cjs","names":["createFetchClient"],"sources":["../src/fetchClient/createOpenapiFetchClient.ts"],"sourcesContent":["import {\n type ApiResponse,\n createFetchClient,\n type CreateFetchClientOptions,\n type FetchClientOptions,\n type HttpMethod,\n} from './createFetchClient';\nimport type { OpenapiParametersType, OpenapiReturnType } from './types';\n\ntype OpenapiPaths<Paths> = {\n [P in keyof Paths]: {\n [M in HttpMethod]?: unknown;\n };\n};\n\ntype PathsWithMethod<Paths extends OpenapiPaths<Paths>, PathnameMethod extends HttpMethod> = {\n [Pathname in keyof Paths]: Paths[Pathname] extends {\n [K in PathnameMethod]: any;\n }\n ? Pathname\n : never;\n}[keyof Paths];\n\ntype FetchMethod<Paths extends OpenapiPaths<Paths>, Method extends HttpMethod> = <\n Path extends PathsWithMethod<Paths, Method>,\n>(\n url: Path,\n params: OpenapiParametersType<Paths[Path][Method]>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<OpenapiReturnType<Paths[Path][Method]>>>;\n\ntype FetchClient<Paths extends OpenapiPaths<Paths>> = {\n get: FetchMethod<Paths, 'get'>;\n post: FetchMethod<Paths, 'post'>;\n put: FetchMethod<Paths, 'put'>;\n patch: FetchMethod<Paths, 'patch'>;\n delete: FetchMethod<Paths, 'delete'>;\n};\n\nexport const createOpenapiFetchClient = <Paths extends OpenapiPaths<Paths>>(\n defaultOptions: CreateFetchClientOptions,\n) => createFetchClient(defaultOptions) as FetchClient<Paths>;\n"],"mappings":";;AAuCA,MAAa,4BACX,mBACGA,0BAAAA,kBAAkB,cAAc"}
@@ -1,7 +1,7 @@
1
- import { t as createFetchClient } from "./createFetchClient-BbG46bL0.js";
1
+ import { t as createFetchClient } from "./createFetchClient-DdyZMhxO.js";
2
2
  //#region src/fetchClient/createOpenapiFetchClient.ts
3
3
  const createOpenapiFetchClient = (defaultOptions) => createFetchClient(defaultOptions);
4
4
  //#endregion
5
5
  export { createOpenapiFetchClient as t };
6
6
 
7
- //# sourceMappingURL=createOpenapiFetchClient-Bn6_Pn0H.js.map
7
+ //# sourceMappingURL=createOpenapiFetchClient-E7OIVkYv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createOpenapiFetchClient-Bn6_Pn0H.js","names":[],"sources":["../src/fetchClient/createOpenapiFetchClient.ts"],"sourcesContent":["import {\n type ApiResponse,\n createFetchClient,\n type CreateFetchClientOptions,\n type FetchClientOptions,\n type HttpMethod,\n} from './createFetchClient';\nimport type { OpenapiParametersType, OpenapiReturnType } from './types';\n\ntype OpenapiPaths<Paths> = {\n [P in keyof Paths]: {\n [M in HttpMethod]?: unknown;\n };\n};\n\ntype PathsWithMethod<Paths extends OpenapiPaths<Paths>, PathnameMethod extends HttpMethod> = {\n [Pathname in keyof Paths]: Paths[Pathname] extends {\n [K in PathnameMethod]: any;\n }\n ? Pathname\n : never;\n}[keyof Paths];\n\ntype FetchMethod<Paths extends OpenapiPaths<Paths>, Method extends HttpMethod> = <\n Path extends PathsWithMethod<Paths, Method>,\n>(\n url: Path,\n params: OpenapiParametersType<Paths[Path][Method]>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<OpenapiReturnType<Paths[Path][Method]>>>;\n\ntype FetchClient<Paths extends OpenapiPaths<Paths>> = {\n get: FetchMethod<Paths, 'get'>;\n post: FetchMethod<Paths, 'post'>;\n put: FetchMethod<Paths, 'put'>;\n patch: FetchMethod<Paths, 'patch'>;\n delete: FetchMethod<Paths, 'delete'>;\n};\n\nexport const createOpenapiFetchClient = <Paths extends OpenapiPaths<Paths>>(\n defaultOptions: CreateFetchClientOptions,\n) => createFetchClient(defaultOptions) as FetchClient<Paths>;\n"],"mappings":";;AAuCA,MAAa,4BACX,mBACG,kBAAkB,cAAc"}
1
+ {"version":3,"file":"createOpenapiFetchClient-E7OIVkYv.js","names":[],"sources":["../src/fetchClient/createOpenapiFetchClient.ts"],"sourcesContent":["import {\n type ApiResponse,\n createFetchClient,\n type CreateFetchClientOptions,\n type FetchClientOptions,\n type HttpMethod,\n} from './createFetchClient';\nimport type { OpenapiParametersType, OpenapiReturnType } from './types';\n\ntype OpenapiPaths<Paths> = {\n [P in keyof Paths]: {\n [M in HttpMethod]?: unknown;\n };\n};\n\ntype PathsWithMethod<Paths extends OpenapiPaths<Paths>, PathnameMethod extends HttpMethod> = {\n [Pathname in keyof Paths]: Paths[Pathname] extends {\n [K in PathnameMethod]: any;\n }\n ? Pathname\n : never;\n}[keyof Paths];\n\ntype FetchMethod<Paths extends OpenapiPaths<Paths>, Method extends HttpMethod> = <\n Path extends PathsWithMethod<Paths, Method>,\n>(\n url: Path,\n params: OpenapiParametersType<Paths[Path][Method]>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<OpenapiReturnType<Paths[Path][Method]>>>;\n\ntype FetchClient<Paths extends OpenapiPaths<Paths>> = {\n get: FetchMethod<Paths, 'get'>;\n post: FetchMethod<Paths, 'post'>;\n put: FetchMethod<Paths, 'put'>;\n patch: FetchMethod<Paths, 'patch'>;\n delete: FetchMethod<Paths, 'delete'>;\n};\n\nexport const createOpenapiFetchClient = <Paths extends OpenapiPaths<Paths>>(\n defaultOptions: CreateFetchClientOptions,\n) => createFetchClient(defaultOptions) as FetchClient<Paths>;\n"],"mappings":";;AAuCA,MAAa,4BACX,mBACG,kBAAkB,cAAc"}
@@ -1,5 +1,5 @@
1
1
  import { t as dedupe } from "./dedupe-DYIHgZoG.js";
2
- import { f as HttpStatus, m as ApiError } from "./createFetchClient-BbG46bL0.js";
2
+ import { h as ApiError, p as HttpStatus } from "./createFetchClient-DdyZMhxO.js";
3
3
  //#region src/keboola/bearer/credential.ts
4
4
  const DEFAULT_REFRESH_THRESHOLD = .9;
5
5
  const isUnauthorized = (error) => error instanceof ApiError && error.response.status === HttpStatus.UNAUTHORIZED;
@@ -12,7 +12,7 @@ const createBearerCredential = ({ refresh, getToken, onSessionExpired, refreshTh
12
12
  throw error;
13
13
  }
14
14
  };
15
- const refreshShared = dedupe(doRefresh);
15
+ let refreshShared = dedupe(doRefresh);
16
16
  const refreshAt = (timing) => timing.issuedAt + timing.expiresIn * 1e3 * refreshThreshold;
17
17
  const getAccessToken = async ({ forceRefresh = false } = {}) => {
18
18
  const snapshot = getToken();
@@ -24,10 +24,13 @@ const createBearerCredential = ({ refresh, getToken, onSessionExpired, refreshTh
24
24
  };
25
25
  return {
26
26
  getAccessToken,
27
- notifyExpired: () => onSessionExpired?.()
27
+ notifyExpired: () => onSessionExpired?.(),
28
+ abandonRefresh: () => {
29
+ refreshShared = dedupe(doRefresh);
30
+ }
28
31
  };
29
32
  };
30
33
  //#endregion
31
34
  export { isUnauthorized as n, createBearerCredential as t };
32
35
 
33
- //# sourceMappingURL=credential-d2RDcXRB.js.map
36
+ //# sourceMappingURL=credential-Bxv7yxOZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-Bxv7yxOZ.js","names":[],"sources":["../src/keboola/bearer/credential.ts"],"sourcesContent":["import { ApiError } from '../../errors';\nimport { HttpStatus } from '../../internal';\nimport { dedupe } from '../../utils';\n\ntype TokenTiming = { issuedAt: number; expiresIn: number };\ntype TokenSnapshot = { accessToken: string; timing: TokenTiming };\n\ntype Options = {\n // Rotate the credential (single-use refresh-token flow); resolves to the fresh access token.\n refresh: () => Promise<string>;\n // Live read of the current token + timing from the single source of truth (config). `null` when the\n // session is anonymous (no credential yet) — e.g. a pre-auth `login` request.\n getToken: () => TokenSnapshot | null;\n // Called when the session is found dead (refresh or replay rejected). The caller owns the\n // fire-once latch + per-session re-arm (see `config.notifyExpired`), so this may fire more than once.\n onSessionExpired?: () => void;\n refreshThreshold?: number;\n};\n\nconst DEFAULT_REFRESH_THRESHOLD = 0.9;\n\nexport const isUnauthorized = (error: unknown): boolean =>\n error instanceof ApiError && error.response.status === HttpStatus.UNAUTHORIZED;\n\nexport type BearerCredential = {\n // Resolves the current access token, or `null` when the session is anonymous (nothing to stamp).\n getAccessToken: (options?: { forceRefresh?: boolean }) => Promise<string | null>;\n notifyExpired: () => void;\n /**\n * Forget any in-flight rotation, so the next caller starts one of its own. Call on session death.\n *\n * - The dedupe slot is per-session state living on a cross-session singleton — the same reason\n * `config` and not this credential owns the expiry latch.\n * - Without it a request from the *next* session joins the dying session's run, and `refresh`\n * refuses that result for belonging to a session that ended (see `keboola.ts`).\n * - Does not cancel the run: whoever already joined it still gets its outcome.\n */\n abandonRefresh: () => void;\n};\n\nexport const createBearerCredential = ({\n refresh,\n getToken,\n onSessionExpired,\n refreshThreshold = DEFAULT_REFRESH_THRESHOLD,\n}: Options): BearerCredential => {\n const doRefresh = async (): Promise<string> => {\n try {\n return await refresh();\n } catch (error) {\n if (isUnauthorized(error)) onSessionExpired?.();\n throw error;\n }\n };\n\n // Reassigned, not mutated: a fresh `dedupe` is a fresh slot, and the abandoned one keeps its joiners.\n let refreshShared = dedupe(doRefresh);\n\n const refreshAt = (timing: TokenTiming): number =>\n timing.issuedAt + timing.expiresIn * 1000 * refreshThreshold;\n\n const getAccessToken = async ({ forceRefresh = false } = {}): Promise<string | null> => {\n const snapshot = getToken();\n if (snapshot === null) return null; // anonymous: nothing to stamp (pre-auth request)\n const { accessToken, timing } = snapshot;\n if (forceRefresh) return refreshShared(); // 401 path: must succeed, propagate failure\n if (Date.now() < refreshAt(timing)) return accessToken; // still fresh: current token\n // Proactive: best-effort — if the ahead-of-time refresh fails, proceed with the current token\n // and let a real 401 drive the mandatory refresh.\n return refreshShared().catch(() => accessToken);\n };\n\n return {\n getAccessToken,\n notifyExpired: () => onSessionExpired?.(),\n abandonRefresh: () => {\n refreshShared = dedupe(doRefresh);\n },\n };\n};\n"],"mappings":";;;AAmBA,MAAM,4BAA4B;AAElC,MAAa,kBAAkB,UAC7B,iBAAiB,YAAY,MAAM,SAAS,WAAW,WAAW;AAkBpE,MAAa,0BAA0B,EACrC,SACA,UACA,kBACA,mBAAmB,gCACY;CAC/B,MAAM,YAAY,YAA6B;EAC7C,IAAI;GACF,OAAO,MAAM,QAAQ;EACvB,SAAS,OAAO;GACd,IAAI,eAAe,KAAK,GAAG,mBAAmB;GAC9C,MAAM;EACR;CACF;CAGA,IAAI,gBAAgB,OAAO,SAAS;CAEpC,MAAM,aAAa,WACjB,OAAO,WAAW,OAAO,YAAY,MAAO;CAE9C,MAAM,iBAAiB,OAAO,EAAE,eAAe,UAAU,CAAC,MAA8B;EACtF,MAAM,WAAW,SAAS;EAC1B,IAAI,aAAa,MAAM,OAAO;EAC9B,MAAM,EAAE,aAAa,WAAW;EAChC,IAAI,cAAc,OAAO,cAAc;EACvC,IAAI,KAAK,IAAI,IAAI,UAAU,MAAM,GAAG,OAAO;EAG3C,OAAO,cAAc,CAAC,CAAC,YAAY,WAAW;CAChD;CAEA,OAAO;EACL;EACA,qBAAqB,mBAAmB;EACxC,sBAAsB;GACpB,gBAAgB,OAAO,SAAS;EAClC;CACF;AACF"}
@@ -1,5 +1,5 @@
1
1
  const require_dedupe = require("./dedupe-CiskLkGR.cjs");
2
- const require_createFetchClient = require("./createFetchClient-BRfTjBLV.cjs");
2
+ const require_createFetchClient = require("./createFetchClient-DvZvD31l.cjs");
3
3
  //#region src/keboola/bearer/credential.ts
4
4
  const DEFAULT_REFRESH_THRESHOLD = .9;
5
5
  const isUnauthorized = (error) => error instanceof require_createFetchClient.ApiError && error.response.status === require_createFetchClient.HttpStatus.UNAUTHORIZED;
@@ -12,7 +12,7 @@ const createBearerCredential = ({ refresh, getToken, onSessionExpired, refreshTh
12
12
  throw error;
13
13
  }
14
14
  };
15
- const refreshShared = require_dedupe.dedupe(doRefresh);
15
+ let refreshShared = require_dedupe.dedupe(doRefresh);
16
16
  const refreshAt = (timing) => timing.issuedAt + timing.expiresIn * 1e3 * refreshThreshold;
17
17
  const getAccessToken = async ({ forceRefresh = false } = {}) => {
18
18
  const snapshot = getToken();
@@ -24,7 +24,10 @@ const createBearerCredential = ({ refresh, getToken, onSessionExpired, refreshTh
24
24
  };
25
25
  return {
26
26
  getAccessToken,
27
- notifyExpired: () => onSessionExpired?.()
27
+ notifyExpired: () => onSessionExpired?.(),
28
+ abandonRefresh: () => {
29
+ refreshShared = require_dedupe.dedupe(doRefresh);
30
+ }
28
31
  };
29
32
  };
30
33
  //#endregion
@@ -41,4 +44,4 @@ Object.defineProperty(exports, "isUnauthorized", {
41
44
  }
42
45
  });
43
46
 
44
- //# sourceMappingURL=credential-DOXH7XRS.cjs.map
47
+ //# sourceMappingURL=credential-D-X5QQrM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-D-X5QQrM.cjs","names":["ApiError","HttpStatus","dedupe"],"sources":["../src/keboola/bearer/credential.ts"],"sourcesContent":["import { ApiError } from '../../errors';\nimport { HttpStatus } from '../../internal';\nimport { dedupe } from '../../utils';\n\ntype TokenTiming = { issuedAt: number; expiresIn: number };\ntype TokenSnapshot = { accessToken: string; timing: TokenTiming };\n\ntype Options = {\n // Rotate the credential (single-use refresh-token flow); resolves to the fresh access token.\n refresh: () => Promise<string>;\n // Live read of the current token + timing from the single source of truth (config). `null` when the\n // session is anonymous (no credential yet) — e.g. a pre-auth `login` request.\n getToken: () => TokenSnapshot | null;\n // Called when the session is found dead (refresh or replay rejected). The caller owns the\n // fire-once latch + per-session re-arm (see `config.notifyExpired`), so this may fire more than once.\n onSessionExpired?: () => void;\n refreshThreshold?: number;\n};\n\nconst DEFAULT_REFRESH_THRESHOLD = 0.9;\n\nexport const isUnauthorized = (error: unknown): boolean =>\n error instanceof ApiError && error.response.status === HttpStatus.UNAUTHORIZED;\n\nexport type BearerCredential = {\n // Resolves the current access token, or `null` when the session is anonymous (nothing to stamp).\n getAccessToken: (options?: { forceRefresh?: boolean }) => Promise<string | null>;\n notifyExpired: () => void;\n /**\n * Forget any in-flight rotation, so the next caller starts one of its own. Call on session death.\n *\n * - The dedupe slot is per-session state living on a cross-session singleton — the same reason\n * `config` and not this credential owns the expiry latch.\n * - Without it a request from the *next* session joins the dying session's run, and `refresh`\n * refuses that result for belonging to a session that ended (see `keboola.ts`).\n * - Does not cancel the run: whoever already joined it still gets its outcome.\n */\n abandonRefresh: () => void;\n};\n\nexport const createBearerCredential = ({\n refresh,\n getToken,\n onSessionExpired,\n refreshThreshold = DEFAULT_REFRESH_THRESHOLD,\n}: Options): BearerCredential => {\n const doRefresh = async (): Promise<string> => {\n try {\n return await refresh();\n } catch (error) {\n if (isUnauthorized(error)) onSessionExpired?.();\n throw error;\n }\n };\n\n // Reassigned, not mutated: a fresh `dedupe` is a fresh slot, and the abandoned one keeps its joiners.\n let refreshShared = dedupe(doRefresh);\n\n const refreshAt = (timing: TokenTiming): number =>\n timing.issuedAt + timing.expiresIn * 1000 * refreshThreshold;\n\n const getAccessToken = async ({ forceRefresh = false } = {}): Promise<string | null> => {\n const snapshot = getToken();\n if (snapshot === null) return null; // anonymous: nothing to stamp (pre-auth request)\n const { accessToken, timing } = snapshot;\n if (forceRefresh) return refreshShared(); // 401 path: must succeed, propagate failure\n if (Date.now() < refreshAt(timing)) return accessToken; // still fresh: current token\n // Proactive: best-effort — if the ahead-of-time refresh fails, proceed with the current token\n // and let a real 401 drive the mandatory refresh.\n return refreshShared().catch(() => accessToken);\n };\n\n return {\n getAccessToken,\n notifyExpired: () => onSessionExpired?.(),\n abandonRefresh: () => {\n refreshShared = dedupe(doRefresh);\n },\n };\n};\n"],"mappings":";;;AAmBA,MAAM,4BAA4B;AAElC,MAAa,kBAAkB,UAC7B,iBAAiBA,0BAAAA,YAAY,MAAM,SAAS,WAAWC,0BAAAA,WAAW;AAkBpE,MAAa,0BAA0B,EACrC,SACA,UACA,kBACA,mBAAmB,gCACY;CAC/B,MAAM,YAAY,YAA6B;EAC7C,IAAI;GACF,OAAO,MAAM,QAAQ;EACvB,SAAS,OAAO;GACd,IAAI,eAAe,KAAK,GAAG,mBAAmB;GAC9C,MAAM;EACR;CACF;CAGA,IAAI,gBAAgBC,eAAAA,OAAO,SAAS;CAEpC,MAAM,aAAa,WACjB,OAAO,WAAW,OAAO,YAAY,MAAO;CAE9C,MAAM,iBAAiB,OAAO,EAAE,eAAe,UAAU,CAAC,MAA8B;EACtF,MAAM,WAAW,SAAS;EAC1B,IAAI,aAAa,MAAM,OAAO;EAC9B,MAAM,EAAE,aAAa,WAAW;EAChC,IAAI,cAAc,OAAO,cAAc;EACvC,IAAI,KAAK,IAAI,IAAI,UAAU,MAAM,GAAG,OAAO;EAG3C,OAAO,cAAc,CAAC,CAAC,YAAY,WAAW;CAChD;CAEA,OAAO;EACL;EACA,qBAAqB,mBAAmB;EACxC,sBAAsB;GACpB,gBAAgBA,eAAAA,OAAO,SAAS;EAClC;CACF;AACF"}
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_appLogs = require("../appLogs-NIEDTDHf.cjs");
3
- const require_dataScience = require("../dataScience-wexHEIue.cjs");
2
+ const require_appLogs = require("../appLogs-D8K0VeNM.cjs");
3
+ const require_dataScience = require("../dataScience-BPW993AG.cjs");
4
4
  exports.createDataScienceClient = require_dataScience.createDataScienceClient;
5
5
  exports.parseLogLines = require_appLogs.parseLogLines;
@@ -1,3 +1,3 @@
1
- import { n as parseLogLines } from "../appLogs-BAaaGYKg.cjs";
2
- import { t as createDataScienceClient } from "../index-DqOAjqxN.cjs";
1
+ import { n as parseLogLines } from "../appLogs-Q4A7A_Fc.cjs";
2
+ import { t as createDataScienceClient } from "../index-t-a7kYnx.cjs";
3
3
  export { createDataScienceClient, parseLogLines };
@@ -1,3 +1,3 @@
1
- import { n as parseLogLines } from "../appLogs-DX_WTBCa.js";
2
- import { t as createDataScienceClient } from "../index-Dbzjvy5h.js";
1
+ import { n as parseLogLines } from "../appLogs-u0XMZLjS.js";
2
+ import { t as createDataScienceClient } from "../index-BjKjp3Rf.js";
3
3
  export { createDataScienceClient, parseLogLines };
@@ -1,3 +1,3 @@
1
- import { t as parseLogLines } from "../appLogs-DTLE6HTy.js";
2
- import { t as createDataScienceClient } from "../dataScience-Sm8iONhP.js";
1
+ import { t as parseLogLines } from "../appLogs-D72eD8vP.js";
2
+ import { t as createDataScienceClient } from "../dataScience-B_TA7wCB.js";
3
3
  export { createDataScienceClient, parseLogLines };
@@ -1,3 +1,3 @@
1
- import { t as LogEntry } from "../appLogs-BAaaGYKg.cjs";
2
- import { S as Sandbox, _ as PatchDataAppPath, a as DeleteSandboxPath, b as Runtime, c as GetDataAppLogsTailPath, d as GetDataAppPath, f as GetDataAppRunPath, g as PatchDataAppBody, h as GetSandboxPath, i as DeleteDataAppPath, l as GetDataAppLogsTailQuery, m as GetDataAppRunsQuery, n as DataApp, o as GetAppsQuery, p as GetDataAppRunsPath, r as DataAppRun, s as GetDataAppLogsDownloadPath, t as CreateDataAppBody, u as GetDataAppPasswordPath, v as RawAppRun, x as RuntimeImageKey, y as ResetDataAppPasswordPath } from "../types-BI2jI-3-.cjs";
1
+ import { t as LogEntry } from "../appLogs-Q4A7A_Fc.cjs";
2
+ import { S as Sandbox, _ as PatchDataAppPath, a as DeleteSandboxPath, b as Runtime, c as GetDataAppLogsTailPath, d as GetDataAppPath, f as GetDataAppRunPath, g as PatchDataAppBody, h as GetSandboxPath, i as DeleteDataAppPath, l as GetDataAppLogsTailQuery, m as GetDataAppRunsQuery, n as DataApp, o as GetAppsQuery, p as GetDataAppRunsPath, r as DataAppRun, s as GetDataAppLogsDownloadPath, t as CreateDataAppBody, u as GetDataAppPasswordPath, v as RawAppRun, x as RuntimeImageKey, y as ResetDataAppPasswordPath } from "../types-CCr1-9Q6.cjs";
3
3
  export { CreateDataAppBody, DataApp, DataAppRun, DeleteDataAppPath, DeleteSandboxPath, GetAppsQuery, GetDataAppLogsDownloadPath, GetDataAppLogsTailPath, GetDataAppLogsTailQuery, GetDataAppPasswordPath, GetDataAppPath, GetDataAppRunPath, GetDataAppRunsPath, GetDataAppRunsQuery, GetSandboxPath, type LogEntry, PatchDataAppBody, PatchDataAppPath, RawAppRun, ResetDataAppPasswordPath, Runtime, RuntimeImageKey, Sandbox };
@@ -1,3 +1,3 @@
1
- import { t as LogEntry } from "../appLogs-DX_WTBCa.js";
2
- import { S as Sandbox, _ as PatchDataAppPath, a as DeleteSandboxPath, b as Runtime, c as GetDataAppLogsTailPath, d as GetDataAppPath, f as GetDataAppRunPath, g as PatchDataAppBody, h as GetSandboxPath, i as DeleteDataAppPath, l as GetDataAppLogsTailQuery, m as GetDataAppRunsQuery, n as DataApp, o as GetAppsQuery, p as GetDataAppRunsPath, r as DataAppRun, s as GetDataAppLogsDownloadPath, t as CreateDataAppBody, u as GetDataAppPasswordPath, v as RawAppRun, x as RuntimeImageKey, y as ResetDataAppPasswordPath } from "../types-Bpnpa2Wt.js";
1
+ import { t as LogEntry } from "../appLogs-u0XMZLjS.js";
2
+ import { S as Sandbox, _ as PatchDataAppPath, a as DeleteSandboxPath, b as Runtime, c as GetDataAppLogsTailPath, d as GetDataAppPath, f as GetDataAppRunPath, g as PatchDataAppBody, h as GetSandboxPath, i as DeleteDataAppPath, l as GetDataAppLogsTailQuery, m as GetDataAppRunsQuery, n as DataApp, o as GetAppsQuery, p as GetDataAppRunsPath, r as DataAppRun, s as GetDataAppLogsDownloadPath, t as CreateDataAppBody, u as GetDataAppPasswordPath, v as RawAppRun, x as RuntimeImageKey, y as ResetDataAppPasswordPath } from "../types-Ur37iOqb.js";
3
3
  export { CreateDataAppBody, DataApp, DataAppRun, DeleteDataAppPath, DeleteSandboxPath, GetAppsQuery, GetDataAppLogsDownloadPath, GetDataAppLogsTailPath, GetDataAppLogsTailQuery, GetDataAppPasswordPath, GetDataAppPath, GetDataAppRunPath, GetDataAppRunsPath, GetDataAppRunsQuery, GetSandboxPath, type LogEntry, PatchDataAppBody, PatchDataAppPath, RawAppRun, ResetDataAppPasswordPath, Runtime, RuntimeImageKey, Sandbox };
@@ -1,7 +1,7 @@
1
- const require_createGenericFetchClient = require("./createGenericFetchClient-DHs-i7_O.cjs");
2
- const require_createOpenapiFetchClient = require("./createOpenapiFetchClient-CyDUFxHB.cjs");
3
- const require_auth = require("./auth-DP-6TFiM.cjs");
4
- const require_appLogs = require("./appLogs-NIEDTDHf.cjs");
1
+ const require_createGenericFetchClient = require("./createGenericFetchClient-qfCZlCTv.cjs");
2
+ const require_createOpenapiFetchClient = require("./createOpenapiFetchClient-C57Ljzi6.cjs");
3
+ const require_auth = require("./auth-C2_JLisH.cjs");
4
+ const require_appLogs = require("./appLogs-D8K0VeNM.cjs");
5
5
  //#region src/clients/dataScience/utils.ts
6
6
  const prepareAppRun = (appRun) => {
7
7
  return {
@@ -111,4 +111,4 @@ Object.defineProperty(exports, "createDataScienceClient", {
111
111
  }
112
112
  });
113
113
 
114
- //# sourceMappingURL=dataScience-wexHEIue.cjs.map
114
+ //# sourceMappingURL=dataScience-BPW993AG.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataScience-wexHEIue.cjs","names":["createOpenapiFetchClient","createAuthHeaders","createGenericFetchClient","readAppLogsDownload","readAppLogsTail"],"sources":["../src/clients/dataScience/utils.ts","../src/clients/dataScience/dataScienceClient.ts"],"sourcesContent":["import type { RawAppRun } from './types';\n\nexport const prepareAppRun = (appRun: RawAppRun) => {\n return {\n ...appRun,\n state: appRun.state ?? (appRun.stoppedAt ? 'finished' : 'running'), // fallback state for historic non migrated runs\n };\n};\n","import { readAppLogsDownload, readAppLogsTail } from '../../domain/appLogs';\nimport { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport { createAuthHeaders } from '../auth';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n CreateDataAppBody,\n DeleteDataAppPath,\n DeleteSandboxPath,\n GetAppsQuery,\n GetDataAppLogsDownloadPath,\n GetDataAppLogsTailPath,\n GetDataAppLogsTailQuery,\n GetDataAppPasswordPath,\n GetDataAppPath,\n GetDataAppRunPath,\n GetDataAppRunsPath,\n GetDataAppRunsQuery,\n GetSandboxPath,\n PatchDataAppBody,\n PatchDataAppPath,\n ResetDataAppPasswordPath,\n} from './types';\nimport { prepareAppRun } from './utils';\n\nexport const createDataScienceClient = ({ baseUrl, middlewares, auth }: ClientInitOptions) => {\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares,\n headers: createAuthHeaders(auth),\n });\n const genericClient = createGenericFetchClient({ baseUrl, middlewares });\n\n const getAppRuns = async (\n appId: GetDataAppRunsPath['appId'],\n query?: GetDataAppRunsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get('/apps/{appId}/runs', { path: { appId }, query }, { signal });\n\n return data.map(prepareAppRun);\n };\n\n const getAppRun = async (\n appId: GetDataAppRunPath['appId'],\n runId: GetDataAppRunPath['runId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/apps/{appId}/runs/{runId}',\n { path: { appId, runId } },\n { signal },\n );\n\n return prepareAppRun(data);\n };\n\n const getAppLogsDownload = (id: GetDataAppLogsDownloadPath['appId'], signal?: AbortSignal) =>\n readAppLogsDownload(() =>\n client.get('/apps/{appId}/logs/download', { path: { appId: id } }, { signal }),\n );\n\n const getAppLogsTail = (\n id: GetDataAppLogsTailPath['appId'],\n { query, signal }: { query?: GetDataAppLogsTailQuery; signal?: AbortSignal } = {},\n ) =>\n readAppLogsTail(() =>\n client.get('/apps/{appId}/logs/tail', { query, path: { appId: id } }, { signal }),\n );\n\n const getApps = async (query: GetAppsQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/apps', { query }, { signal });\n\n return data;\n };\n\n const getApp = async (appId: GetDataAppPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const createApp = async (body: CreateDataAppBody, signal?: AbortSignal) => {\n const { data } = await client.post('/apps', { body }, { signal });\n\n return data;\n };\n\n const patchApp = async (\n appId: PatchDataAppPath['appId'],\n body: PatchDataAppBody,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.patch(\n '/apps/{appId}',\n {\n path: { appId: appId },\n body: body,\n },\n { signal },\n );\n return data;\n };\n\n const deleteApp = async (appId: DeleteDataAppPath['appId'], signal?: AbortSignal) => {\n return client.delete('/apps/{appId}', { path: { appId } }, { signal });\n };\n\n const getAppPassword = async (appId: GetDataAppPasswordPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}/password', { path: { appId } }, { signal });\n\n return data;\n };\n\n const resetAppPassword = async (\n appId: ResetDataAppPasswordPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/apps/{appId}/reset-password',\n { path: { appId } },\n { signal },\n );\n\n return data;\n };\n\n const getRuntimes = async (signal?: AbortSignal) => {\n const { data } = await client.get('/runtimes', {}, { signal });\n\n return data;\n };\n\n const getSandbox = async (appId: GetSandboxPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/sandboxes/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const deleteSandbox = async (appId: DeleteSandboxPath['appId'], signal?: AbortSignal) => {\n return client.delete('/sandboxes/{appId}', { path: { appId } }, { signal });\n };\n\n const healthCheck = async (signal?: AbortSignal) => {\n const { data } = await genericClient.get('/health-check', {}, { signal });\n\n return data;\n };\n\n return {\n healthCheck,\n getAppRuns,\n getAppRun,\n getAppLogsDownload,\n getAppLogsTail,\n getApps,\n getApp,\n createApp,\n patchApp,\n deleteApp,\n getAppPassword,\n resetAppPassword,\n getRuntimes,\n getSandbox,\n deleteSandbox,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"dataScience-BPW993AG.cjs","names":["createOpenapiFetchClient","createAuthHeaders","createGenericFetchClient","readAppLogsDownload","readAppLogsTail"],"sources":["../src/clients/dataScience/utils.ts","../src/clients/dataScience/dataScienceClient.ts"],"sourcesContent":["import type { RawAppRun } from './types';\n\nexport const prepareAppRun = (appRun: RawAppRun) => {\n return {\n ...appRun,\n state: appRun.state ?? (appRun.stoppedAt ? 'finished' : 'running'), // fallback state for historic non migrated runs\n };\n};\n","import { readAppLogsDownload, readAppLogsTail } from '../../domain/appLogs';\nimport { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport { createAuthHeaders } from '../auth';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n CreateDataAppBody,\n DeleteDataAppPath,\n DeleteSandboxPath,\n GetAppsQuery,\n GetDataAppLogsDownloadPath,\n GetDataAppLogsTailPath,\n GetDataAppLogsTailQuery,\n GetDataAppPasswordPath,\n GetDataAppPath,\n GetDataAppRunPath,\n GetDataAppRunsPath,\n GetDataAppRunsQuery,\n GetSandboxPath,\n PatchDataAppBody,\n PatchDataAppPath,\n ResetDataAppPasswordPath,\n} from './types';\nimport { prepareAppRun } from './utils';\n\nexport const createDataScienceClient = ({ baseUrl, middlewares, auth }: ClientInitOptions) => {\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares,\n headers: createAuthHeaders(auth),\n });\n const genericClient = createGenericFetchClient({ baseUrl, middlewares });\n\n const getAppRuns = async (\n appId: GetDataAppRunsPath['appId'],\n query?: GetDataAppRunsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get('/apps/{appId}/runs', { path: { appId }, query }, { signal });\n\n return data.map(prepareAppRun);\n };\n\n const getAppRun = async (\n appId: GetDataAppRunPath['appId'],\n runId: GetDataAppRunPath['runId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/apps/{appId}/runs/{runId}',\n { path: { appId, runId } },\n { signal },\n );\n\n return prepareAppRun(data);\n };\n\n const getAppLogsDownload = (id: GetDataAppLogsDownloadPath['appId'], signal?: AbortSignal) =>\n readAppLogsDownload(() =>\n client.get('/apps/{appId}/logs/download', { path: { appId: id } }, { signal }),\n );\n\n const getAppLogsTail = (\n id: GetDataAppLogsTailPath['appId'],\n { query, signal }: { query?: GetDataAppLogsTailQuery; signal?: AbortSignal } = {},\n ) =>\n readAppLogsTail(() =>\n client.get('/apps/{appId}/logs/tail', { query, path: { appId: id } }, { signal }),\n );\n\n const getApps = async (query: GetAppsQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/apps', { query }, { signal });\n\n return data;\n };\n\n const getApp = async (appId: GetDataAppPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const createApp = async (body: CreateDataAppBody, signal?: AbortSignal) => {\n const { data } = await client.post('/apps', { body }, { signal });\n\n return data;\n };\n\n const patchApp = async (\n appId: PatchDataAppPath['appId'],\n body: PatchDataAppBody,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.patch(\n '/apps/{appId}',\n {\n path: { appId: appId },\n body: body,\n },\n { signal },\n );\n return data;\n };\n\n const deleteApp = async (appId: DeleteDataAppPath['appId'], signal?: AbortSignal) => {\n return client.delete('/apps/{appId}', { path: { appId } }, { signal });\n };\n\n const getAppPassword = async (appId: GetDataAppPasswordPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}/password', { path: { appId } }, { signal });\n\n return data;\n };\n\n const resetAppPassword = async (\n appId: ResetDataAppPasswordPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/apps/{appId}/reset-password',\n { path: { appId } },\n { signal },\n );\n\n return data;\n };\n\n const getRuntimes = async (signal?: AbortSignal) => {\n const { data } = await client.get('/runtimes', {}, { signal });\n\n return data;\n };\n\n const getSandbox = async (appId: GetSandboxPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/sandboxes/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const deleteSandbox = async (appId: DeleteSandboxPath['appId'], signal?: AbortSignal) => {\n return client.delete('/sandboxes/{appId}', { path: { appId } }, { signal });\n };\n\n const healthCheck = async (signal?: AbortSignal) => {\n const { data } = await genericClient.get('/health-check', {}, { signal });\n\n return data;\n };\n\n return {\n healthCheck,\n getAppRuns,\n getAppRun,\n getAppLogsDownload,\n getAppLogsTail,\n getApps,\n getApp,\n createApp,\n patchApp,\n deleteApp,\n getAppPassword,\n resetAppPassword,\n getRuntimes,\n getSandbox,\n deleteSandbox,\n };\n};\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { t as createGenericFetchClient } from "./createGenericFetchClient-BHYQLZhe.js";
2
- import { t as createOpenapiFetchClient } from "./createOpenapiFetchClient-Bn6_Pn0H.js";
3
- import { t as createAuthHeaders } from "./auth-DtbQaeDj.js";
4
- import { n as readAppLogsDownload, r as readAppLogsTail } from "./appLogs-DTLE6HTy.js";
1
+ import { t as createGenericFetchClient } from "./createGenericFetchClient-MQeLRiNW.js";
2
+ import { t as createOpenapiFetchClient } from "./createOpenapiFetchClient-E7OIVkYv.js";
3
+ import { t as createAuthHeaders } from "./auth-CE9rQV3-.js";
4
+ import { n as readAppLogsDownload, r as readAppLogsTail } from "./appLogs-D72eD8vP.js";
5
5
  //#region src/clients/dataScience/utils.ts
6
6
  const prepareAppRun = (appRun) => {
7
7
  return {
@@ -106,4 +106,4 @@ const createDataScienceClient = ({ baseUrl, middlewares, auth }) => {
106
106
  //#endregion
107
107
  export { createDataScienceClient as t };
108
108
 
109
- //# sourceMappingURL=dataScience-Sm8iONhP.js.map
109
+ //# sourceMappingURL=dataScience-B_TA7wCB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataScience-Sm8iONhP.js","names":[],"sources":["../src/clients/dataScience/utils.ts","../src/clients/dataScience/dataScienceClient.ts"],"sourcesContent":["import type { RawAppRun } from './types';\n\nexport const prepareAppRun = (appRun: RawAppRun) => {\n return {\n ...appRun,\n state: appRun.state ?? (appRun.stoppedAt ? 'finished' : 'running'), // fallback state for historic non migrated runs\n };\n};\n","import { readAppLogsDownload, readAppLogsTail } from '../../domain/appLogs';\nimport { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport { createAuthHeaders } from '../auth';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n CreateDataAppBody,\n DeleteDataAppPath,\n DeleteSandboxPath,\n GetAppsQuery,\n GetDataAppLogsDownloadPath,\n GetDataAppLogsTailPath,\n GetDataAppLogsTailQuery,\n GetDataAppPasswordPath,\n GetDataAppPath,\n GetDataAppRunPath,\n GetDataAppRunsPath,\n GetDataAppRunsQuery,\n GetSandboxPath,\n PatchDataAppBody,\n PatchDataAppPath,\n ResetDataAppPasswordPath,\n} from './types';\nimport { prepareAppRun } from './utils';\n\nexport const createDataScienceClient = ({ baseUrl, middlewares, auth }: ClientInitOptions) => {\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares,\n headers: createAuthHeaders(auth),\n });\n const genericClient = createGenericFetchClient({ baseUrl, middlewares });\n\n const getAppRuns = async (\n appId: GetDataAppRunsPath['appId'],\n query?: GetDataAppRunsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get('/apps/{appId}/runs', { path: { appId }, query }, { signal });\n\n return data.map(prepareAppRun);\n };\n\n const getAppRun = async (\n appId: GetDataAppRunPath['appId'],\n runId: GetDataAppRunPath['runId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/apps/{appId}/runs/{runId}',\n { path: { appId, runId } },\n { signal },\n );\n\n return prepareAppRun(data);\n };\n\n const getAppLogsDownload = (id: GetDataAppLogsDownloadPath['appId'], signal?: AbortSignal) =>\n readAppLogsDownload(() =>\n client.get('/apps/{appId}/logs/download', { path: { appId: id } }, { signal }),\n );\n\n const getAppLogsTail = (\n id: GetDataAppLogsTailPath['appId'],\n { query, signal }: { query?: GetDataAppLogsTailQuery; signal?: AbortSignal } = {},\n ) =>\n readAppLogsTail(() =>\n client.get('/apps/{appId}/logs/tail', { query, path: { appId: id } }, { signal }),\n );\n\n const getApps = async (query: GetAppsQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/apps', { query }, { signal });\n\n return data;\n };\n\n const getApp = async (appId: GetDataAppPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const createApp = async (body: CreateDataAppBody, signal?: AbortSignal) => {\n const { data } = await client.post('/apps', { body }, { signal });\n\n return data;\n };\n\n const patchApp = async (\n appId: PatchDataAppPath['appId'],\n body: PatchDataAppBody,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.patch(\n '/apps/{appId}',\n {\n path: { appId: appId },\n body: body,\n },\n { signal },\n );\n return data;\n };\n\n const deleteApp = async (appId: DeleteDataAppPath['appId'], signal?: AbortSignal) => {\n return client.delete('/apps/{appId}', { path: { appId } }, { signal });\n };\n\n const getAppPassword = async (appId: GetDataAppPasswordPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}/password', { path: { appId } }, { signal });\n\n return data;\n };\n\n const resetAppPassword = async (\n appId: ResetDataAppPasswordPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/apps/{appId}/reset-password',\n { path: { appId } },\n { signal },\n );\n\n return data;\n };\n\n const getRuntimes = async (signal?: AbortSignal) => {\n const { data } = await client.get('/runtimes', {}, { signal });\n\n return data;\n };\n\n const getSandbox = async (appId: GetSandboxPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/sandboxes/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const deleteSandbox = async (appId: DeleteSandboxPath['appId'], signal?: AbortSignal) => {\n return client.delete('/sandboxes/{appId}', { path: { appId } }, { signal });\n };\n\n const healthCheck = async (signal?: AbortSignal) => {\n const { data } = await genericClient.get('/health-check', {}, { signal });\n\n return data;\n };\n\n return {\n healthCheck,\n getAppRuns,\n getAppRun,\n getAppLogsDownload,\n getAppLogsTail,\n getApps,\n getApp,\n createApp,\n patchApp,\n deleteApp,\n getAppPassword,\n resetAppPassword,\n getRuntimes,\n getSandbox,\n deleteSandbox,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"dataScience-B_TA7wCB.js","names":[],"sources":["../src/clients/dataScience/utils.ts","../src/clients/dataScience/dataScienceClient.ts"],"sourcesContent":["import type { RawAppRun } from './types';\n\nexport const prepareAppRun = (appRun: RawAppRun) => {\n return {\n ...appRun,\n state: appRun.state ?? (appRun.stoppedAt ? 'finished' : 'running'), // fallback state for historic non migrated runs\n };\n};\n","import { readAppLogsDownload, readAppLogsTail } from '../../domain/appLogs';\nimport { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport { createAuthHeaders } from '../auth';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n CreateDataAppBody,\n DeleteDataAppPath,\n DeleteSandboxPath,\n GetAppsQuery,\n GetDataAppLogsDownloadPath,\n GetDataAppLogsTailPath,\n GetDataAppLogsTailQuery,\n GetDataAppPasswordPath,\n GetDataAppPath,\n GetDataAppRunPath,\n GetDataAppRunsPath,\n GetDataAppRunsQuery,\n GetSandboxPath,\n PatchDataAppBody,\n PatchDataAppPath,\n ResetDataAppPasswordPath,\n} from './types';\nimport { prepareAppRun } from './utils';\n\nexport const createDataScienceClient = ({ baseUrl, middlewares, auth }: ClientInitOptions) => {\n const client = createOpenapiFetchClient<paths>({\n baseUrl,\n middlewares,\n headers: createAuthHeaders(auth),\n });\n const genericClient = createGenericFetchClient({ baseUrl, middlewares });\n\n const getAppRuns = async (\n appId: GetDataAppRunsPath['appId'],\n query?: GetDataAppRunsQuery,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get('/apps/{appId}/runs', { path: { appId }, query }, { signal });\n\n return data.map(prepareAppRun);\n };\n\n const getAppRun = async (\n appId: GetDataAppRunPath['appId'],\n runId: GetDataAppRunPath['runId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.get(\n '/apps/{appId}/runs/{runId}',\n { path: { appId, runId } },\n { signal },\n );\n\n return prepareAppRun(data);\n };\n\n const getAppLogsDownload = (id: GetDataAppLogsDownloadPath['appId'], signal?: AbortSignal) =>\n readAppLogsDownload(() =>\n client.get('/apps/{appId}/logs/download', { path: { appId: id } }, { signal }),\n );\n\n const getAppLogsTail = (\n id: GetDataAppLogsTailPath['appId'],\n { query, signal }: { query?: GetDataAppLogsTailQuery; signal?: AbortSignal } = {},\n ) =>\n readAppLogsTail(() =>\n client.get('/apps/{appId}/logs/tail', { query, path: { appId: id } }, { signal }),\n );\n\n const getApps = async (query: GetAppsQuery, signal?: AbortSignal) => {\n const { data } = await client.get('/apps', { query }, { signal });\n\n return data;\n };\n\n const getApp = async (appId: GetDataAppPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const createApp = async (body: CreateDataAppBody, signal?: AbortSignal) => {\n const { data } = await client.post('/apps', { body }, { signal });\n\n return data;\n };\n\n const patchApp = async (\n appId: PatchDataAppPath['appId'],\n body: PatchDataAppBody,\n signal?: AbortSignal,\n ) => {\n const { data } = await client.patch(\n '/apps/{appId}',\n {\n path: { appId: appId },\n body: body,\n },\n { signal },\n );\n return data;\n };\n\n const deleteApp = async (appId: DeleteDataAppPath['appId'], signal?: AbortSignal) => {\n return client.delete('/apps/{appId}', { path: { appId } }, { signal });\n };\n\n const getAppPassword = async (appId: GetDataAppPasswordPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/apps/{appId}/password', { path: { appId } }, { signal });\n\n return data;\n };\n\n const resetAppPassword = async (\n appId: ResetDataAppPasswordPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/apps/{appId}/reset-password',\n { path: { appId } },\n { signal },\n );\n\n return data;\n };\n\n const getRuntimes = async (signal?: AbortSignal) => {\n const { data } = await client.get('/runtimes', {}, { signal });\n\n return data;\n };\n\n const getSandbox = async (appId: GetSandboxPath['appId'], signal?: AbortSignal) => {\n const { data } = await client.get('/sandboxes/{appId}', { path: { appId } }, { signal });\n\n return data;\n };\n\n const deleteSandbox = async (appId: DeleteSandboxPath['appId'], signal?: AbortSignal) => {\n return client.delete('/sandboxes/{appId}', { path: { appId } }, { signal });\n };\n\n const healthCheck = async (signal?: AbortSignal) => {\n const { data } = await genericClient.get('/health-check', {}, { signal });\n\n return data;\n };\n\n return {\n healthCheck,\n getAppRuns,\n getAppRun,\n getAppLogsDownload,\n getAppLogsTail,\n getApps,\n getApp,\n createApp,\n patchApp,\n deleteApp,\n getAppPassword,\n resetAppPassword,\n getRuntimes,\n getSandbox,\n deleteSandbox,\n };\n};\n"],"mappings":"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"}