@keboola/api-client 50.0.0 → 52.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 (425) hide show
  1. package/AGENTS.md +46 -8
  2. package/API-SURFACE.md +2 -10
  3. package/CHANGELOG.md +37 -0
  4. package/README.md +2 -2
  5. package/dist/{ManagementSessionMintError-DNMbYauw.js → ManagementSessionMintError-BMHDcEqV.js} +2 -2
  6. package/dist/{ManagementSessionMintError-DNMbYauw.js.map → ManagementSessionMintError-BMHDcEqV.js.map} +1 -1
  7. package/dist/{ManagementSessionMintError-ByOulHQH.cjs → ManagementSessionMintError-Bc9bc7Ai.cjs} +2 -2
  8. package/dist/{ManagementSessionMintError-ByOulHQH.cjs.map → ManagementSessionMintError-Bc9bc7Ai.cjs.map} +1 -1
  9. package/dist/RowLevelSecurityError-CObFqj3E.js +33 -0
  10. package/dist/RowLevelSecurityError-CObFqj3E.js.map +1 -0
  11. package/dist/RowLevelSecurityError-RK_NhhAx.cjs +56 -0
  12. package/dist/RowLevelSecurityError-RK_NhhAx.cjs.map +1 -0
  13. package/dist/{adminRoles-FFyl7Dyx.d.cts → adminRoles-BTKVwEy8.d.cts} +2 -2
  14. package/dist/{adminRoles-DAwl657q.d.ts → adminRoles-Cm513r1G.d.ts} +2 -2
  15. package/dist/ai/index.cjs +2 -2
  16. package/dist/ai/index.d.cts +2 -2
  17. package/dist/ai/index.d.ts +2 -2
  18. package/dist/ai/index.js +2 -2
  19. package/dist/ai/types.d.cts +1 -1
  20. package/dist/ai/types.d.ts +1 -1
  21. package/dist/apps/index.cjs +3 -234
  22. package/dist/apps/index.d.cts +3 -212
  23. package/dist/apps/index.d.ts +3 -212
  24. package/dist/apps/index.js +1 -234
  25. package/dist/apps/types.d.cts +1 -2
  26. package/dist/apps/types.d.ts +1 -2
  27. package/dist/apps-BN7fWtSm.js +361 -0
  28. package/dist/apps-BN7fWtSm.js.map +1 -0
  29. package/dist/apps-C1x5IKNQ.cjs +376 -0
  30. package/dist/apps-C1x5IKNQ.cjs.map +1 -0
  31. package/dist/assets/index.cjs +1 -1
  32. package/dist/assets/index.d.cts +1 -1
  33. package/dist/assets/index.d.ts +1 -1
  34. package/dist/assets/index.js +1 -1
  35. package/dist/auth/index.cjs +1 -1
  36. package/dist/auth/index.d.cts +1 -1
  37. package/dist/auth/index.d.ts +1 -1
  38. package/dist/auth/index.js +1 -1
  39. package/dist/auth/types.d.cts +1 -1
  40. package/dist/auth/types.d.ts +1 -1
  41. package/dist/{auth-CvB4MukT.cjs → auth-AehUDNRK.cjs} +2 -2
  42. package/dist/{auth-CvB4MukT.cjs.map → auth-AehUDNRK.cjs.map} +1 -1
  43. package/dist/{auth-DYfQMQCs.js → auth-ZBQWCJPM.js} +2 -2
  44. package/dist/{auth-DYfQMQCs.js.map → auth-ZBQWCJPM.js.map} +1 -1
  45. package/dist/{authClient-oB5ydxWp.js → authClient-BM4L8XEN.js} +5 -5
  46. package/dist/{authClient-oB5ydxWp.js.map → authClient-BM4L8XEN.js.map} +1 -1
  47. package/dist/{authClient-DcKBpMcU.cjs → authClient-DspK50e7.cjs} +5 -5
  48. package/dist/{authClient-DcKBpMcU.cjs.map → authClient-DspK50e7.cjs.map} +1 -1
  49. package/dist/{authClient-Df3U4q_6.d.cts → authClient-NBi0pqD5.d.cts} +4 -4
  50. package/dist/{authClient-JtMVJWXY.d.ts → authClient-ij_Rm2Yn.d.ts} +4 -4
  51. package/dist/billing/index.cjs +2 -2
  52. package/dist/billing/index.d.cts +1 -1
  53. package/dist/billing/index.d.ts +1 -1
  54. package/dist/billing/index.js +2 -2
  55. package/dist/billing/types.d.cts +1 -1
  56. package/dist/billing/types.d.ts +1 -1
  57. package/dist/chat/index.cjs +3 -3
  58. package/dist/chat/index.d.cts +2 -2
  59. package/dist/chat/index.d.ts +2 -2
  60. package/dist/chat/index.js +3 -3
  61. package/dist/chat/types.d.cts +1 -1
  62. package/dist/chat/types.d.ts +1 -1
  63. package/dist/{componentId-b_qBbJEM.js → componentId-DZP1rBix.js} +54 -2
  64. package/dist/componentId-DZP1rBix.js.map +1 -0
  65. package/dist/{componentId-C8ZTXXDo.cjs → componentId-olp0tltf.cjs} +54 -2
  66. package/dist/componentId-olp0tltf.cjs.map +1 -0
  67. package/dist/componentsMcp/index.cjs +1 -1
  68. package/dist/componentsMcp/index.d.cts +1 -1
  69. package/dist/componentsMcp/index.d.ts +1 -1
  70. package/dist/componentsMcp/index.js +1 -1
  71. package/dist/componentsMcp/types.d.cts +1 -1
  72. package/dist/componentsMcp/types.d.ts +1 -1
  73. package/dist/{componentsMcp-BrB4js6b.js → componentsMcp-CAmrCpzV.js} +3 -3
  74. package/dist/{componentsMcp-BrB4js6b.js.map → componentsMcp-CAmrCpzV.js.map} +1 -1
  75. package/dist/{componentsMcp-BaHy5iLr.cjs → componentsMcp-DXu-0Qt-.cjs} +3 -3
  76. package/dist/{componentsMcp-BaHy5iLr.cjs.map → componentsMcp-DXu-0Qt-.cjs.map} +1 -1
  77. package/dist/constants/index.cjs +2 -2
  78. package/dist/constants/index.d.cts +3 -3
  79. package/dist/constants/index.d.ts +3 -3
  80. package/dist/constants/index.js +2 -2
  81. package/dist/{constants-BMSHGwOR.js → constants-Dqi0ewGv.js} +3 -2
  82. package/dist/constants-Dqi0ewGv.js.map +1 -0
  83. package/dist/{constants-DhFQWQgy.cjs → constants-d0Do9NSN.cjs} +3 -2
  84. package/dist/constants-d0Do9NSN.cjs.map +1 -0
  85. package/dist/{createFetchClient-DEkUH662.cjs → createFetchClient-CDKSkd7i.cjs} +19 -1
  86. package/dist/{createFetchClient-DlGCbltR.js.map → createFetchClient-CDKSkd7i.cjs.map} +1 -1
  87. package/dist/{createFetchClient-DlGCbltR.js → createFetchClient-Dc_ZMuq7.js} +8 -2
  88. package/dist/createFetchClient-Dc_ZMuq7.js.map +1 -0
  89. package/dist/{createGenericFetchClient-wGxemBwR.js → createGenericFetchClient-Ba4E4T-Y.js} +2 -2
  90. package/dist/{createGenericFetchClient-wGxemBwR.js.map → createGenericFetchClient-Ba4E4T-Y.js.map} +1 -1
  91. package/dist/{createGenericFetchClient-2oU-PXVo.cjs → createGenericFetchClient-BuYzzV_D.cjs} +2 -2
  92. package/dist/{createGenericFetchClient-2oU-PXVo.cjs.map → createGenericFetchClient-BuYzzV_D.cjs.map} +1 -1
  93. package/dist/{createOpenapiFetchClient-Bhz62MUE.js → createOpenapiFetchClient-DSk29o_s.js} +2 -2
  94. package/dist/{createOpenapiFetchClient-Bhz62MUE.js.map → createOpenapiFetchClient-DSk29o_s.js.map} +1 -1
  95. package/dist/{createOpenapiFetchClient-DL9w7vU-.cjs → createOpenapiFetchClient-dkssExkU.cjs} +2 -2
  96. package/dist/{createOpenapiFetchClient-DL9w7vU-.cjs.map → createOpenapiFetchClient-dkssExkU.cjs.map} +1 -1
  97. package/dist/dataScience/index.cjs +60 -4
  98. package/dist/dataScience/index.cjs.map +1 -0
  99. package/dist/dataScience/index.d.cts +105 -3
  100. package/dist/dataScience/index.d.ts +105 -3
  101. package/dist/dataScience/index.js +60 -3
  102. package/dist/dataScience/index.js.map +1 -0
  103. package/dist/dataScience/types.d.cts +2 -3
  104. package/dist/dataScience/types.d.ts +2 -3
  105. package/dist/developerPortal/index.cjs +1 -1
  106. package/dist/developerPortal/index.d.cts +2 -2
  107. package/dist/developerPortal/index.d.ts +2 -2
  108. package/dist/developerPortal/index.js +1 -1
  109. package/dist/developerPortal/types.d.cts +1 -1
  110. package/dist/developerPortal/types.d.ts +1 -1
  111. package/dist/{developerPortalClient-BfRxYrWj.cjs → developerPortalClient-BcK9F-Fs.cjs} +3 -3
  112. package/dist/{developerPortalClient-BfRxYrWj.cjs.map → developerPortalClient-BcK9F-Fs.cjs.map} +1 -1
  113. package/dist/{developerPortalClient-D9XOYwWF.js → developerPortalClient-CzCJ5sE3.js} +3 -3
  114. package/dist/{developerPortalClient-D9XOYwWF.js.map → developerPortalClient-CzCJ5sE3.js.map} +1 -1
  115. package/dist/domain/permissions/index.d.cts +1 -1
  116. package/dist/domain/permissions/index.d.ts +1 -1
  117. package/dist/editor/index.cjs +2 -2
  118. package/dist/editor/index.d.cts +2 -2
  119. package/dist/editor/index.d.ts +2 -2
  120. package/dist/editor/index.js +2 -2
  121. package/dist/editor/types.d.cts +1 -1
  122. package/dist/editor/types.d.ts +1 -1
  123. package/dist/encryption/index.cjs +1 -1
  124. package/dist/encryption/index.d.cts +1 -1
  125. package/dist/encryption/index.d.ts +1 -1
  126. package/dist/encryption/index.js +1 -1
  127. package/dist/encryption/types.d.cts +1 -1
  128. package/dist/encryption/types.d.ts +1 -1
  129. package/dist/import/index.cjs +1 -1
  130. package/dist/import/index.d.cts +3 -3
  131. package/dist/import/index.d.ts +3 -3
  132. package/dist/import/index.js +1 -1
  133. package/dist/{import-CABlFMQX.cjs → import-DHq6q3Fm.cjs} +3 -3
  134. package/dist/{import-CABlFMQX.cjs.map → import-DHq6q3Fm.cjs.map} +1 -1
  135. package/dist/{import-CT1Ce5Rp.js → import-DxN6CJzJ.js} +3 -3
  136. package/dist/{import-CT1Ce5Rp.js.map → import-DxN6CJzJ.js.map} +1 -1
  137. package/dist/{index-Db266tLz.d.cts → index-81wn1jc3.d.cts} +4 -4
  138. package/dist/{index-xX8-Stoq.d.cts → index-8QhOqFLY.d.cts} +4 -4
  139. package/dist/{index-DjSthn8d.d.ts → index-B5rELADq.d.cts} +55 -2
  140. package/dist/{index-CTMnmISl.d.cts → index-B7el5pJU.d.cts} +86 -152
  141. package/dist/index-B8K-Bbdq.d.cts +220 -0
  142. package/dist/{index-DQagqTVa.d.cts → index-BGE3eZfd.d.cts} +3 -3
  143. package/dist/{index-DVBQgFg0.d.ts → index-BVe4S2CK.d.ts} +4 -4
  144. package/dist/{index-CbSh3KFw.d.cts → index-BXgjPlZN.d.cts} +4 -4
  145. package/dist/{index-C9iNazAc.d.ts → index-C7JcNvbd.d.ts} +86 -152
  146. package/dist/{index-lTrNMlj6.d.ts → index-CEDjFidH.d.ts} +3 -3
  147. package/dist/{index-DgGpQsAT.d.cts → index-CNJBmCHM.d.cts} +4 -4
  148. package/dist/index-CQNwp6wX.d.ts +220 -0
  149. package/dist/{index-CuI8OI9E.d.ts → index-CZvBjQvl.d.ts} +4 -4
  150. package/dist/{index-CN0--VsY.d.ts → index-CdeWTy8t.d.ts} +7 -4
  151. package/dist/{index-Xpu7qIZk.d.ts → index-CveF5RFQ.d.ts} +3 -3
  152. package/dist/{index-m9-mN8Gg.d.ts → index-DLWMm1-T.d.ts} +4 -4
  153. package/dist/{index-BDPxm9qu.d.ts → index-DTGOEke4.d.ts} +3 -3
  154. package/dist/{index-DXoN8VwV.d.cts → index-Df8lZNSH.d.cts} +3 -3
  155. package/dist/{index-AA3MRfRn.d.cts → index-Dhyrg5zd.d.ts} +55 -2
  156. package/dist/{index-D1mduJne.d.cts → index-FrsEkDvX.d.cts} +7 -2
  157. package/dist/{index-D1mduJne.d.ts → index-FrsEkDvX.d.ts} +7 -2
  158. package/dist/{index-DIPMzH--.d.ts → index-JoKfPQND.d.ts} +4 -4
  159. package/dist/{index-CCcdySOC.d.cts → index-d9zxFmNI.d.cts} +7 -4
  160. package/dist/{index-z-2okomN.d.cts → index-iFCann29.d.cts} +3 -3
  161. package/dist/index.cjs +50 -42
  162. package/dist/index.cjs.map +1 -1
  163. package/dist/index.d.cts +7 -7
  164. package/dist/index.d.ts +7 -7
  165. package/dist/index.js +43 -37
  166. package/dist/index.js.map +1 -1
  167. package/dist/{isLoginPageRedirect-CoUxJi2x.cjs → isLoginPageRedirect-DUmsOC2o.cjs} +2 -2
  168. package/dist/{isLoginPageRedirect-CoUxJi2x.cjs.map → isLoginPageRedirect-DUmsOC2o.cjs.map} +1 -1
  169. package/dist/{isLoginPageRedirect-D-lqF_kZ.js → isLoginPageRedirect-lbeVmeB2.js} +2 -2
  170. package/dist/{isLoginPageRedirect-D-lqF_kZ.js.map → isLoginPageRedirect-lbeVmeB2.js.map} +1 -1
  171. package/dist/kaiAgent/index.cjs +1 -1
  172. package/dist/kaiAgent/index.d.cts +2 -2
  173. package/dist/kaiAgent/index.d.ts +2 -2
  174. package/dist/kaiAgent/index.js +1 -1
  175. package/dist/kaiAgent/types.d.cts +1 -1
  176. package/dist/kaiAgent/types.d.ts +1 -1
  177. package/dist/{kaiAgent-D2TiMDjW.js → kaiAgent-D0MoKqXe.js} +15 -5
  178. package/dist/kaiAgent-D0MoKqXe.js.map +1 -0
  179. package/dist/{kaiAgent-gaA7dqki.cjs → kaiAgent-De2T6G4G.cjs} +15 -5
  180. package/dist/kaiAgent-De2T6G4G.cjs.map +1 -0
  181. package/dist/{kaiMemory-oir_qCo_.js → kaiMemory-B1wIwH8Y.js} +2 -2
  182. package/dist/{kaiMemory-oir_qCo_.js.map → kaiMemory-B1wIwH8Y.js.map} +1 -1
  183. package/dist/{kaiMemory-CkLQfJXD.cjs → kaiMemory-DZ6hXni_.cjs} +2 -2
  184. package/dist/{kaiMemory-CkLQfJXD.cjs.map → kaiMemory-DZ6hXni_.cjs.map} +1 -1
  185. package/dist/management/index.cjs +1 -1
  186. package/dist/management/index.d.cts +1 -1
  187. package/dist/management/index.d.ts +1 -1
  188. package/dist/management/index.js +1 -1
  189. package/dist/management/types.d.cts +2 -2
  190. package/dist/management/types.d.ts +2 -2
  191. package/dist/{management-BEGOEQxM.cjs → management-CUXgB2rb.cjs} +6 -6
  192. package/dist/{management-BEGOEQxM.cjs.map → management-CUXgB2rb.cjs.map} +1 -1
  193. package/dist/{management-BcGHyxAP.js → management-Cz5ut18k.js} +6 -6
  194. package/dist/{management-BcGHyxAP.js.map → management-Cz5ut18k.js.map} +1 -1
  195. package/dist/metastore/index.cjs +1 -1
  196. package/dist/metastore/index.d.cts +1 -1
  197. package/dist/metastore/index.d.ts +1 -1
  198. package/dist/metastore/index.js +1 -1
  199. package/dist/metastore/types.d.cts +1 -1
  200. package/dist/metastore/types.d.ts +1 -1
  201. package/dist/{metastore-DeRQ2VIv.cjs → metastore-CV4DUDxP.cjs} +4 -4
  202. package/dist/{metastore-DeRQ2VIv.cjs.map → metastore-CV4DUDxP.cjs.map} +1 -1
  203. package/dist/{metastore-CGsgxjng.js → metastore-CkqFnEfu.js} +4 -4
  204. package/dist/{metastore-CGsgxjng.js.map → metastore-CkqFnEfu.js.map} +1 -1
  205. package/dist/microsoftGraph/index.cjs +2 -2
  206. package/dist/microsoftGraph/index.d.cts +2 -2
  207. package/dist/microsoftGraph/index.d.ts +2 -2
  208. package/dist/microsoftGraph/index.js +2 -2
  209. package/dist/microsoftGraph/types.d.cts +1 -1
  210. package/dist/microsoftGraph/types.d.ts +1 -1
  211. package/dist/{middleware-8zaJWcyU.js → middleware-DxGv7DG8.js} +2 -2
  212. package/dist/{middleware-8zaJWcyU.js.map → middleware-DxGv7DG8.js.map} +1 -1
  213. package/dist/{middleware-B9RNuLfD.cjs → middleware-vIaPDtQI.cjs} +2 -2
  214. package/dist/{middleware-B9RNuLfD.cjs.map → middleware-vIaPDtQI.cjs.map} +1 -1
  215. package/dist/notifications/index.cjs +3 -3
  216. package/dist/notifications/index.d.cts +2 -2
  217. package/dist/notifications/index.d.ts +2 -2
  218. package/dist/notifications/index.js +3 -3
  219. package/dist/notifications/types.d.cts +1 -1
  220. package/dist/notifications/types.d.ts +1 -1
  221. package/dist/oauth/index.cjs +1 -1
  222. package/dist/oauth/index.d.cts +2 -2
  223. package/dist/oauth/index.d.ts +2 -2
  224. package/dist/oauth/index.js +1 -1
  225. package/dist/oauth/types.d.cts +1 -1
  226. package/dist/oauth/types.d.ts +1 -1
  227. package/dist/{oauth-B5Biqz21.cjs → oauth-CSBChWuf.cjs} +5 -5
  228. package/dist/{oauth-B5Biqz21.cjs.map → oauth-CSBChWuf.cjs.map} +1 -1
  229. package/dist/{oauth-ByCdISsV.js → oauth-DOveZKUv.js} +5 -5
  230. package/dist/{oauth-ByCdISsV.js.map → oauth-DOveZKUv.js.map} +1 -1
  231. package/dist/omnisearch/index.cjs +2 -2
  232. package/dist/omnisearch/index.d.cts +2 -2
  233. package/dist/omnisearch/index.d.ts +2 -2
  234. package/dist/omnisearch/index.js +2 -2
  235. package/dist/omnisearch/types.d.cts +1 -1
  236. package/dist/omnisearch/types.d.ts +1 -1
  237. package/dist/{project-UHZGFmmG.d.cts → project-BGk9CtOq.d.cts} +3 -3
  238. package/dist/{project-iBm4cIIR.d.ts → project-DS0HOV3M.d.ts} +3 -3
  239. package/dist/queryService/index.cjs +1 -1
  240. package/dist/queryService/index.d.cts +2 -2
  241. package/dist/queryService/index.d.ts +2 -2
  242. package/dist/queryService/index.js +1 -1
  243. package/dist/queryService/types.d.cts +1 -1
  244. package/dist/queryService/types.d.ts +1 -1
  245. package/dist/queryService-C3BQ6GKW.cjs +214 -0
  246. package/dist/queryService-C3BQ6GKW.cjs.map +1 -0
  247. package/dist/queryService-DQHtHy2-.js +209 -0
  248. package/dist/queryService-DQHtHy2-.js.map +1 -0
  249. package/dist/queue/index.cjs +1 -1
  250. package/dist/queue/index.d.cts +3 -3
  251. package/dist/queue/index.d.ts +3 -3
  252. package/dist/queue/index.js +1 -1
  253. package/dist/queue/types.d.cts +1 -1
  254. package/dist/queue/types.d.ts +1 -1
  255. package/dist/{queue-BiIs9fX4.js → queue-6cywDnA-.js} +5 -5
  256. package/dist/{queue-BiIs9fX4.js.map → queue-6cywDnA-.js.map} +1 -1
  257. package/dist/{queue-CBi9Q8vp.cjs → queue-J2uXzXR9.cjs} +5 -5
  258. package/dist/{queue-CBi9Q8vp.cjs.map → queue-J2uXzXR9.cjs.map} +1 -1
  259. package/dist/scheduler/index.cjs +3 -3
  260. package/dist/scheduler/index.d.cts +2 -2
  261. package/dist/scheduler/index.d.ts +2 -2
  262. package/dist/scheduler/index.js +3 -3
  263. package/dist/scheduler/types.d.cts +1 -1
  264. package/dist/scheduler/types.d.ts +1 -1
  265. package/dist/sdk/configurations/index.cjs +3 -3
  266. package/dist/sdk/configurations/index.cjs.map +1 -1
  267. package/dist/sdk/configurations/index.d.cts +4 -4
  268. package/dist/sdk/configurations/index.d.ts +4 -4
  269. package/dist/sdk/configurations/index.js +3 -3
  270. package/dist/sdk/configurations/index.js.map +1 -1
  271. package/dist/sdk/developerPortal/index.cjs +3 -3
  272. package/dist/sdk/developerPortal/index.d.cts +3 -3
  273. package/dist/sdk/developerPortal/index.d.ts +3 -3
  274. package/dist/sdk/developerPortal/index.js +3 -3
  275. package/dist/sdk/kaiMemory/index.cjs +1 -1
  276. package/dist/sdk/kaiMemory/index.d.cts +1 -1
  277. package/dist/sdk/kaiMemory/index.d.ts +1 -1
  278. package/dist/sdk/kaiMemory/index.js +1 -1
  279. package/dist/sdk/kaiMemory/types.d.cts +1 -1
  280. package/dist/sdk/kaiMemory/types.d.ts +1 -1
  281. package/dist/sdk/queryService/index.d.cts +1 -1
  282. package/dist/sdk/queryService/index.d.ts +1 -1
  283. package/dist/sdk/semanticLayer/index.d.cts +1 -1
  284. package/dist/sdk/semanticLayer/index.d.ts +1 -1
  285. package/dist/sdk/semanticLayer/types.d.cts +1 -1
  286. package/dist/sdk/semanticLayer/types.d.ts +1 -1
  287. package/dist/sdk/tag/index.d.cts +2 -2
  288. package/dist/sdk/tag/index.d.ts +2 -2
  289. package/dist/sdk/tag/types.d.cts +1 -1
  290. package/dist/sdk/tag/types.d.ts +1 -1
  291. package/dist/sdk/vault/index.d.cts +1 -1
  292. package/dist/sdk/vault/index.d.ts +1 -1
  293. package/dist/status/index.cjs +1 -1
  294. package/dist/status/index.d.cts +1 -1
  295. package/dist/status/index.d.ts +1 -1
  296. package/dist/status/index.js +1 -1
  297. package/dist/storage/index.cjs +9 -7
  298. package/dist/storage/index.d.cts +4 -4
  299. package/dist/storage/index.d.ts +4 -4
  300. package/dist/storage/index.js +6 -6
  301. package/dist/storage/types.d.cts +5 -5
  302. package/dist/storage/types.d.ts +5 -5
  303. package/dist/{storage-BpOLWT6h.js → storage--2FvvLAw.js} +7 -7
  304. package/dist/{storage-BpOLWT6h.js.map → storage--2FvvLAw.js.map} +1 -1
  305. package/dist/{storage-KJ5Ki_ma.cjs → storage-BMrYlyLB.cjs} +7 -7
  306. package/dist/{storage-KJ5Ki_ma.cjs.map → storage-BMrYlyLB.cjs.map} +1 -1
  307. package/dist/stream/index.cjs +3 -3
  308. package/dist/stream/index.d.cts +2 -2
  309. package/dist/stream/index.d.ts +2 -2
  310. package/dist/stream/index.js +3 -3
  311. package/dist/stream/types.d.cts +1 -1
  312. package/dist/stream/types.d.ts +1 -1
  313. package/dist/syncActions/index.cjs +1 -1
  314. package/dist/syncActions/index.d.cts +2 -2
  315. package/dist/syncActions/index.d.ts +2 -2
  316. package/dist/syncActions/index.js +1 -1
  317. package/dist/syncActions/types.d.cts +1 -1
  318. package/dist/syncActions/types.d.ts +1 -1
  319. package/dist/{syncActions-BcX3jm2E.cjs → syncActions-DToUhyP3.cjs} +6 -6
  320. package/dist/{syncActions-BcX3jm2E.cjs.map → syncActions-DToUhyP3.cjs.map} +1 -1
  321. package/dist/{syncActions-giPLTfje.js → syncActions-DV_aObTQ.js} +6 -6
  322. package/dist/{syncActions-giPLTfje.js.map → syncActions-DV_aObTQ.js.map} +1 -1
  323. package/dist/telemetry/index.cjs +3 -3
  324. package/dist/telemetry/index.d.cts +2 -2
  325. package/dist/telemetry/index.d.ts +2 -2
  326. package/dist/telemetry/index.js +3 -3
  327. package/dist/telemetry/types.d.cts +1 -1
  328. package/dist/telemetry/types.d.ts +1 -1
  329. package/dist/{transientRetries-BKqmb85B.js → transientRetries-BORv47mH.js} +2 -2
  330. package/dist/{transientRetries-BKqmb85B.js.map → transientRetries-BORv47mH.js.map} +1 -1
  331. package/dist/{transientRetries-CM7rAEXQ.cjs → transientRetries-CBorl4Ue.cjs} +2 -2
  332. package/dist/{transientRetries-CM7rAEXQ.cjs.map → transientRetries-CBorl4Ue.cjs.map} +1 -1
  333. package/dist/{types-BWMOK6eL.d.cts → types-B4Vwz45w.d.cts} +2 -2
  334. package/dist/{types-Dryq2GGE.d.cts → types-B4ezB18r.d.cts} +2 -2
  335. package/dist/{types-Bdl7EFMc.d.ts → types-B6JcEPEu.d.ts} +2 -2
  336. package/dist/{types-eFi8xJIM.d.cts → types-B6f6LpZ_.d.cts} +2 -2
  337. package/dist/{types-C9okze_R.d.ts → types-BD0B1KQ6.d.ts} +3 -26
  338. package/dist/{types-DeyXJzWz.d.cts → types-BEw98Dd2.d.cts} +2 -2
  339. package/dist/{types-1IBnjBVJ.d.cts → types-BVJmcoqA.d.cts} +2 -2
  340. package/dist/{types-B1qe1etN.d.cts → types-BljDxuWG.d.cts} +3 -3
  341. package/dist/{types-BiDdBXSm.d.ts → types-Bp8G9yta.d.ts} +2 -2
  342. package/dist/{types-BCGrKW1K.d.cts → types-Bv2Ds1hL.d.cts} +125 -2
  343. package/dist/{types-D-tJt0hQ.d.cts → types-BynQKst1.d.cts} +2 -2
  344. package/dist/{types-BuclMPeY.d.cts → types-C5B3Pfob.d.cts} +2 -2
  345. package/dist/{types-DNgazFnF.d.cts → types-CIlBSV99.d.cts} +2 -2
  346. package/dist/{types-DschSZHf.d.cts → types-CKdNf_2k.d.cts} +3 -3
  347. package/dist/{types-B0e-no6u.d.ts → types-CLtYOszN.d.cts} +20 -3
  348. package/dist/{types-Du5o-tud.d.ts → types-CQYyULrw.d.ts} +2 -2
  349. package/dist/{types-BB49alHP.d.cts → types-CRC4lbPw.d.cts} +18 -5
  350. package/dist/{types-CxEJ77m3.d.cts → types-CSE8bHiq.d.cts} +3 -3
  351. package/dist/{types-DRCttnIN.d.ts → types-CTYTMXXj.d.ts} +2 -2
  352. package/dist/{types-6T04_qUf.d.ts → types-CepTvkfm.d.ts} +2 -2
  353. package/dist/{types-DHMxPJZq.d.cts → types-Cf0WE6qK.d.cts} +2 -2
  354. package/dist/{types-DwbTiyhZ.d.cts → types-ChOJ-Az7.d.cts} +2 -2
  355. package/dist/{types-wYrC2boT.d.ts → types-Cr6WA6CN.d.ts} +2 -2
  356. package/dist/{types-D6lre27s.d.ts → types-CsVRsObb.d.ts} +2 -2
  357. package/dist/{types-CcGp6O3B.d.cts → types-D-ufoskb.d.cts} +2 -2
  358. package/dist/{types-LconaX98.d.cts → types-D2hhEGem.d.cts} +2 -2
  359. package/dist/{types-inG9y3dP.d.ts → types-D5bxXqEU.d.ts} +2 -2
  360. package/dist/{types-BE8abIig.d.cts → types-DKKHKj19.d.cts} +2 -2
  361. package/dist/{types-E8tzafsk.d.cts → types-DNwIMEuB.d.cts} +3 -26
  362. package/dist/{types-DtOfhDzz.d.ts → types-DSWIIMdv.d.ts} +3 -3
  363. package/dist/{types-Bat0SIZA.d.cts → types-DU8aPTFW.d.cts} +2 -2
  364. package/dist/{types-Dz9vyloX.d.ts → types-DX1Dz0xK.d.ts} +125 -2
  365. package/dist/{types-ZZwdKCBl.d.ts → types-DbthI3r-.d.ts} +2 -2
  366. package/dist/{types-B3ri-iiC.d.ts → types-DjSjUKUl.d.ts} +2 -2
  367. package/dist/{types-YpOm4yXE.d.cts → types-DjWubjvP.d.cts} +2 -2
  368. package/dist/{types-CRubbBcU.d.cts → types-Do3__S4Q.d.cts} +2 -2
  369. package/dist/{types-BfB-XXLF.d.ts → types-DoSZQ1Bi.d.ts} +18 -5
  370. package/dist/{types-CWcdaq-K.d.ts → types-Dsf7CYmm.d.ts} +2 -2
  371. package/dist/{types-CPWjRdnj.d.cts → types-Ey59ZILC.d.ts} +20 -3
  372. package/dist/{types--Rp5wvaz.d.ts → types-OHt0D_f2.d.ts} +2 -2
  373. package/dist/{types-Cr5lyI99.d.ts → types-Rrcx-8LM.d.ts} +2 -2
  374. package/dist/{types-DUpVIuk7.d.ts → types-Tg3euEN_.d.ts} +2 -2
  375. package/dist/{types-37vwxse4.d.cts → types-Y4e8GGa3.d.cts} +2 -2
  376. package/dist/{types-DJzTVMu1.d.ts → types-d5Bt8Mr3.d.ts} +2 -2
  377. package/dist/{types-jjOulnni.d.ts → types-dU3EA8gk.d.ts} +2 -2
  378. package/dist/{types-ir7T2a9a.d.ts → types-iU1Sc1IM.d.ts} +3 -3
  379. package/dist/{types-zPY-XGnM.d.ts → types-kGZQQcIK.d.ts} +2 -2
  380. package/dist/{types-xzt_2H63.d.ts → types-zlYUn0oi.d.ts} +3 -3
  381. package/dist/{validateConnectionStatus-DYwWeWVo.js → validateConnectionStatus-DV00sDmu.js} +3 -3
  382. package/dist/{validateConnectionStatus-DYwWeWVo.js.map → validateConnectionStatus-DV00sDmu.js.map} +1 -1
  383. package/dist/{validateConnectionStatus-BjemGI1e.cjs → validateConnectionStatus-ckaHcRx8.cjs} +3 -3
  384. package/dist/{validateConnectionStatus-BjemGI1e.cjs.map → validateConnectionStatus-ckaHcRx8.cjs.map} +1 -1
  385. package/dist/vault/index.cjs +4 -4
  386. package/dist/vault/index.d.cts +1 -1
  387. package/dist/vault/index.d.ts +1 -1
  388. package/dist/vault/index.js +4 -4
  389. package/dist/vault/types.d.cts +1 -1
  390. package/dist/vault/types.d.ts +1 -1
  391. package/package.json +2 -2
  392. package/surface/apps.md +10 -10
  393. package/surface/dataScience.md +2 -11
  394. package/surface/editor.md +5 -5
  395. package/surface/kaiAgent.md +1 -0
  396. package/surface/queue.md +1 -1
  397. package/dist/QueryJobError-Iq9O90Uh.js +0 -21
  398. package/dist/QueryJobError-Iq9O90Uh.js.map +0 -1
  399. package/dist/QueryJobError-Oy0fl4aw.cjs +0 -32
  400. package/dist/QueryJobError-Oy0fl4aw.cjs.map +0 -1
  401. package/dist/appLogs-CTvZAihm.d.ts +0 -8
  402. package/dist/appLogs-CnLNMH7M.d.cts +0 -8
  403. package/dist/appLogs-CoAWQGxs.cjs +0 -152
  404. package/dist/appLogs-CoAWQGxs.cjs.map +0 -1
  405. package/dist/appLogs-DFcPwVk8.js +0 -131
  406. package/dist/appLogs-DFcPwVk8.js.map +0 -1
  407. package/dist/apps/index.cjs.map +0 -1
  408. package/dist/apps/index.js.map +0 -1
  409. package/dist/componentId-C8ZTXXDo.cjs.map +0 -1
  410. package/dist/componentId-b_qBbJEM.js.map +0 -1
  411. package/dist/constants-BMSHGwOR.js.map +0 -1
  412. package/dist/constants-DhFQWQgy.cjs.map +0 -1
  413. package/dist/createFetchClient-DEkUH662.cjs.map +0 -1
  414. package/dist/dataScience-CXmkEOAi.js +0 -118
  415. package/dist/dataScience-CXmkEOAi.js.map +0 -1
  416. package/dist/dataScience-CufjHPSd.cjs +0 -123
  417. package/dist/dataScience-CufjHPSd.cjs.map +0 -1
  418. package/dist/index-BZDxWvZW.d.ts +0 -214
  419. package/dist/index-ClIV2Lch.d.cts +0 -214
  420. package/dist/kaiAgent-D2TiMDjW.js.map +0 -1
  421. package/dist/kaiAgent-gaA7dqki.cjs.map +0 -1
  422. package/dist/queryService-Cg-eMysa.cjs +0 -126
  423. package/dist/queryService-Cg-eMysa.cjs.map +0 -1
  424. package/dist/queryService-x8kq8Z2-.js +0 -121
  425. package/dist/queryService-x8kq8Z2-.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"createFetchClient-DlGCbltR.js","names":[],"sources":["../src/internal.ts","../src/errors/ApiError.ts","../src/fetchClient/createFetchClient/utils.ts","../src/fetchClient/createFetchClient/createFetchClient.ts"],"sourcesContent":["// 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 UI_VERSION: 'X-KBC-Ui-Version',\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 /** Set to \"1\" to opt an auth call into browser/cookie mode. */\n CSRF: 'X-KBC-CSRF',\n} as const;\n\n/** Request headers that carry a credential — never kept on an error or written to a log. */\nexport const CREDENTIAL_HEADERS = [\n KeboolaHttpHeader.STORAGE_API_TOKEN,\n KeboolaHttpHeader.MANAGEMENT_API_TOKEN,\n 'authorization',\n 'cookie',\n];\n\nexport const REDACTED = '[REDACTED]';\n\n/** The headers as a record, each one named in `redacted` (any case) set to `[REDACTED]`. */\nexport const redactHeaders = (headers: Headers, redacted: readonly string[]) => {\n const redactedSet = new Set(redacted.map((name) => name.toLowerCase()));\n const result: Record<string, string> = {};\n headers.forEach((value, name) => {\n result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;\n });\n return result;\n};\n\nexport const HttpStatus = {\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n NOT_FOUND: 404,\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 { ApiResponse } from '../fetchClient/createFetchClient/types';\nimport { CREDENTIAL_HEADERS, redactHeaders } from '../internal';\n\n/**\n * The status line, as a message an error reporter can group on.\n *\n * - `statusText` is empty on every HTTP/2 response: the protocol dropped the reason phrase, and\n * `fetch` reports that as `''` rather than synthesising one.\n * - So the status number leads, and `statusText` only decorates it where a server sent one.\n * - Without this an HTTP/2 failure reaches Sentry as `Error:` with an empty message, and the\n * status — the one field that says what went wrong — is absent from the report.\n */\nconst statusLine = (response: Response) =>\n response.statusText ? `${response.status} ${response.statusText}` : `${response.status}`;\n\n/**\n * A body-less copy of the request with every credential header masked.\n *\n * - Keeps the method, URL and the remaining headers for whoever handles the error.\n * - A masked header still appears, as `[REDACTED]`, so a reader sees it was sent.\n * - A copy, not an edit: the original request may still be retried with its token.\n */\nconst withoutCredentials = (request: Request) =>\n new Request(request.url, {\n method: request.method,\n headers: redactHeaders(request.headers, CREDENTIAL_HEADERS),\n });\n\nexport class ApiError extends Error {\n response: Response;\n request: Request;\n data: unknown;\n\n constructor({ response, request, data }: ApiResponse) {\n super(statusLine(response));\n this.name = 'ApiError';\n this.response = response;\n this.request = withoutCredentials(request);\n this.data = data;\n }\n}\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 declares HTML.\n *\n * - Media types are case-insensitive, so `Text/HTML` counts.\n * - A header fact only: a `text/html` response may still carry no body at all.\n */\nexport const isHtmlResponse = ({ response }: ApiResponse) =>\n !!response.headers\n .get(HttpHeader.CONTENT_TYPE)\n ?.toLowerCase()\n .includes(HttpContentType.TEXT_HTML);\n\n/**\n * Whether a response carried no payload, across every shape `parseData` produces for one:\n *\n * 1. `null` — a `204`, or a JSON body that was empty or whitespace.\n * 2. `''` — any other media type with an empty body, read as text.\n *\n * Whitespace-only text counts as empty, matching how `parseJson` already treats it.\n */\nexport const isContentEmpty = ({ data }: ApiResponse) =>\n data === null || data === undefined || (typeof data === 'string' && data.trim() === '');\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 = (\n path: string,\n pathParam: PathParam = {},\n encodePathParam: (value: string) => string = encodeURIComponent,\n) =>\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 encodePathParam(String(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 encodePathParam,\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, encodePathParam);\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 baseUrl: _baseUrl,\n ...defaultOptions\n}: CreateFetchClientOptions) => {\n const fetchWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n coreFetch,\n );\n const resolveBaseUrl = async () => (typeof _baseUrl === 'function' ? _baseUrl() : _baseUrl);\n\n const createFetchMethod =\n (method: HttpMethod) =>\n async (url: string, params: BaseFetchParams, options: FetchClientOptions = {}) => {\n const baseUrl = await resolveBaseUrl();\n const request = createFetchRequest({\n url,\n method,\n params,\n defaultOptions: { ...defaultOptions, baseUrl: baseUrl },\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-CDKSkd7i.cjs","names":[],"sources":["../src/internal.ts","../src/errors/ApiError.ts","../src/fetchClient/createFetchClient/utils.ts","../src/fetchClient/createFetchClient/createFetchClient.ts"],"sourcesContent":["// 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 UI_VERSION: 'X-KBC-Ui-Version',\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 /** Set to \"1\" to opt an auth call into browser/cookie mode. */\n CSRF: 'X-KBC-CSRF',\n} as const;\n\n/** End-user identity apps-proxy hands a data app, forwarded unchanged to Query Service. */\nexport const APP_USER_TOKEN_HEADER = 'X-Kbc-App-User-Token';\n\n/** Query Service's `exception` for a query that row-level security refused. */\nexport const ROW_LEVEL_SECURITY_DENIED_MESSAGE = 'Row-level security does not allow this query';\n\n/** Request headers that carry a credential — never kept on an error or written to a log. */\nexport const CREDENTIAL_HEADERS = [\n KeboolaHttpHeader.STORAGE_API_TOKEN,\n KeboolaHttpHeader.MANAGEMENT_API_TOKEN,\n APP_USER_TOKEN_HEADER,\n 'authorization',\n 'cookie',\n];\n\nexport const REDACTED = '[REDACTED]';\n\n/** The headers as a record, each one named in `redacted` (any case) set to `[REDACTED]`. */\nexport const redactHeaders = (headers: Headers, redacted: readonly string[]) => {\n const redactedSet = new Set(redacted.map((name) => name.toLowerCase()));\n const result: Record<string, string> = {};\n headers.forEach((value, name) => {\n result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;\n });\n return result;\n};\n\nexport const HttpStatus = {\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\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 { ApiResponse } from '../fetchClient/createFetchClient/types';\nimport { CREDENTIAL_HEADERS, redactHeaders } from '../internal';\n\n/**\n * The status line, as a message an error reporter can group on.\n *\n * - `statusText` is empty on every HTTP/2 response: the protocol dropped the reason phrase, and\n * `fetch` reports that as `''` rather than synthesising one.\n * - So the status number leads, and `statusText` only decorates it where a server sent one.\n * - Without this an HTTP/2 failure reaches Sentry as `Error:` with an empty message, and the\n * status — the one field that says what went wrong — is absent from the report.\n */\nconst statusLine = (response: Response) =>\n response.statusText ? `${response.status} ${response.statusText}` : `${response.status}`;\n\n/**\n * A body-less copy of the request with every credential header masked.\n *\n * - Keeps the method, URL and the remaining headers for whoever handles the error.\n * - A masked header still appears, as `[REDACTED]`, so a reader sees it was sent.\n * - A copy, not an edit: the original request may still be retried with its token.\n */\nconst withoutCredentials = (request: Request) =>\n new Request(request.url, {\n method: request.method,\n headers: redactHeaders(request.headers, CREDENTIAL_HEADERS),\n });\n\nexport class ApiError extends Error {\n response: Response;\n request: Request;\n data: unknown;\n\n constructor({ response, request, data }: ApiResponse) {\n super(statusLine(response));\n this.name = 'ApiError';\n this.response = response;\n this.request = withoutCredentials(request);\n this.data = data;\n }\n}\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 declares HTML.\n *\n * - Media types are case-insensitive, so `Text/HTML` counts.\n * - A header fact only: a `text/html` response may still carry no body at all.\n */\nexport const isHtmlResponse = ({ response }: ApiResponse) =>\n !!response.headers\n .get(HttpHeader.CONTENT_TYPE)\n ?.toLowerCase()\n .includes(HttpContentType.TEXT_HTML);\n\n/**\n * Whether a response carried no payload, across every shape `parseData` produces for one:\n *\n * 1. `null` — a `204`, or a JSON body that was empty or whitespace.\n * 2. `''` — any other media type with an empty body, read as text.\n *\n * Whitespace-only text counts as empty, matching how `parseJson` already treats it.\n */\nexport const isContentEmpty = ({ data }: ApiResponse) =>\n data === null || data === undefined || (typeof data === 'string' && data.trim() === '');\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 = (\n path: string,\n pathParam: PathParam = {},\n encodePathParam: (value: string) => string = encodeURIComponent,\n) =>\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 encodePathParam(String(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 encodePathParam,\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, encodePathParam);\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 baseUrl: _baseUrl,\n ...defaultOptions\n}: CreateFetchClientOptions) => {\n const fetchWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n coreFetch,\n );\n const resolveBaseUrl = async () => (typeof _baseUrl === 'function' ? _baseUrl() : _baseUrl);\n\n const createFetchMethod =\n (method: HttpMethod) =>\n async (url: string, params: BaseFetchParams, options: FetchClientOptions = {}) => {\n const baseUrl = await resolveBaseUrl();\n const request = createFetchRequest({\n url,\n method,\n params,\n defaultOptions: { ...defaultOptions, baseUrl: baseUrl },\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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"}
@@ -11,10 +11,15 @@ const KeboolaHttpHeader = {
11
11
  /** Set to "1" to opt an auth call into browser/cookie mode. */
12
12
  CSRF: "X-KBC-CSRF"
13
13
  };
14
+ /** End-user identity apps-proxy hands a data app, forwarded unchanged to Query Service. */
15
+ const APP_USER_TOKEN_HEADER = "X-Kbc-App-User-Token";
16
+ /** Query Service's `exception` for a query that row-level security refused. */
17
+ const ROW_LEVEL_SECURITY_DENIED_MESSAGE = "Row-level security does not allow this query";
14
18
  /** Request headers that carry a credential — never kept on an error or written to a log. */
15
19
  const CREDENTIAL_HEADERS = [
16
20
  KeboolaHttpHeader.STORAGE_API_TOKEN,
17
21
  KeboolaHttpHeader.MANAGEMENT_API_TOKEN,
22
+ APP_USER_TOKEN_HEADER,
18
23
  "authorization",
19
24
  "cookie"
20
25
  ];
@@ -32,6 +37,7 @@ const HttpStatus = {
32
37
  NO_CONTENT: 204,
33
38
  BAD_REQUEST: 400,
34
39
  UNAUTHORIZED: 401,
40
+ FORBIDDEN: 403,
35
41
  NOT_FOUND: 404,
36
42
  UNPROCESSABLE_ENTITY: 422,
37
43
  INTERNAL_SERVER_ERROR: 500,
@@ -246,6 +252,6 @@ const createFetchClient = ({ middlewares = [], baseUrl: _baseUrl, ...defaultOpti
246
252
  delete: createFetchMethod("delete")
247
253
  };
248
254
  };
249
- export { KeboolaHttpHeader as _, isTimeoutError as a, defaultValidateStatus as c, normalizeBaseUrl as d, parseContentDispositionHeader as f, HttpStatus as g, ENCRYPTED_VALUE_PREFIX as h, isFetchClientError as i, isContentEmpty as l, CREDENTIAL_HEADERS as m, isAbortError as n, HttpContentType as o, ApiError as p, isApiError as r, HttpHeader as s, createFetchClient as t, isHtmlResponse as u, REDACTED as v, redactHeaders as y };
255
+ export { HttpStatus as _, isTimeoutError as a, ROW_LEVEL_SECURITY_DENIED_MESSAGE as b, defaultValidateStatus as c, normalizeBaseUrl as d, parseContentDispositionHeader as f, ENCRYPTED_VALUE_PREFIX as g, CREDENTIAL_HEADERS as h, isFetchClientError as i, isContentEmpty as l, APP_USER_TOKEN_HEADER as m, isAbortError as n, HttpContentType as o, ApiError as p, isApiError as r, HttpHeader as s, createFetchClient as t, isHtmlResponse as u, KeboolaHttpHeader as v, redactHeaders as x, REDACTED as y };
250
256
 
251
- //# sourceMappingURL=createFetchClient-DlGCbltR.js.map
257
+ //# sourceMappingURL=createFetchClient-Dc_ZMuq7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createFetchClient-Dc_ZMuq7.js","names":[],"sources":["../src/internal.ts","../src/errors/ApiError.ts","../src/fetchClient/createFetchClient/utils.ts","../src/fetchClient/createFetchClient/createFetchClient.ts"],"sourcesContent":["// 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 UI_VERSION: 'X-KBC-Ui-Version',\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 /** Set to \"1\" to opt an auth call into browser/cookie mode. */\n CSRF: 'X-KBC-CSRF',\n} as const;\n\n/** End-user identity apps-proxy hands a data app, forwarded unchanged to Query Service. */\nexport const APP_USER_TOKEN_HEADER = 'X-Kbc-App-User-Token';\n\n/** Query Service's `exception` for a query that row-level security refused. */\nexport const ROW_LEVEL_SECURITY_DENIED_MESSAGE = 'Row-level security does not allow this query';\n\n/** Request headers that carry a credential — never kept on an error or written to a log. */\nexport const CREDENTIAL_HEADERS = [\n KeboolaHttpHeader.STORAGE_API_TOKEN,\n KeboolaHttpHeader.MANAGEMENT_API_TOKEN,\n APP_USER_TOKEN_HEADER,\n 'authorization',\n 'cookie',\n];\n\nexport const REDACTED = '[REDACTED]';\n\n/** The headers as a record, each one named in `redacted` (any case) set to `[REDACTED]`. */\nexport const redactHeaders = (headers: Headers, redacted: readonly string[]) => {\n const redactedSet = new Set(redacted.map((name) => name.toLowerCase()));\n const result: Record<string, string> = {};\n headers.forEach((value, name) => {\n result[name] = redactedSet.has(name.toLowerCase()) ? REDACTED : value;\n });\n return result;\n};\n\nexport const HttpStatus = {\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNAUTHORIZED: 401,\n FORBIDDEN: 403,\n NOT_FOUND: 404,\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 { ApiResponse } from '../fetchClient/createFetchClient/types';\nimport { CREDENTIAL_HEADERS, redactHeaders } from '../internal';\n\n/**\n * The status line, as a message an error reporter can group on.\n *\n * - `statusText` is empty on every HTTP/2 response: the protocol dropped the reason phrase, and\n * `fetch` reports that as `''` rather than synthesising one.\n * - So the status number leads, and `statusText` only decorates it where a server sent one.\n * - Without this an HTTP/2 failure reaches Sentry as `Error:` with an empty message, and the\n * status — the one field that says what went wrong — is absent from the report.\n */\nconst statusLine = (response: Response) =>\n response.statusText ? `${response.status} ${response.statusText}` : `${response.status}`;\n\n/**\n * A body-less copy of the request with every credential header masked.\n *\n * - Keeps the method, URL and the remaining headers for whoever handles the error.\n * - A masked header still appears, as `[REDACTED]`, so a reader sees it was sent.\n * - A copy, not an edit: the original request may still be retried with its token.\n */\nconst withoutCredentials = (request: Request) =>\n new Request(request.url, {\n method: request.method,\n headers: redactHeaders(request.headers, CREDENTIAL_HEADERS),\n });\n\nexport class ApiError extends Error {\n response: Response;\n request: Request;\n data: unknown;\n\n constructor({ response, request, data }: ApiResponse) {\n super(statusLine(response));\n this.name = 'ApiError';\n this.response = response;\n this.request = withoutCredentials(request);\n this.data = data;\n }\n}\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 declares HTML.\n *\n * - Media types are case-insensitive, so `Text/HTML` counts.\n * - A header fact only: a `text/html` response may still carry no body at all.\n */\nexport const isHtmlResponse = ({ response }: ApiResponse) =>\n !!response.headers\n .get(HttpHeader.CONTENT_TYPE)\n ?.toLowerCase()\n .includes(HttpContentType.TEXT_HTML);\n\n/**\n * Whether a response carried no payload, across every shape `parseData` produces for one:\n *\n * 1. `null` — a `204`, or a JSON body that was empty or whitespace.\n * 2. `''` — any other media type with an empty body, read as text.\n *\n * Whitespace-only text counts as empty, matching how `parseJson` already treats it.\n */\nexport const isContentEmpty = ({ data }: ApiResponse) =>\n data === null || data === undefined || (typeof data === 'string' && data.trim() === '');\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 = (\n path: string,\n pathParam: PathParam = {},\n encodePathParam: (value: string) => string = encodeURIComponent,\n) =>\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 encodePathParam(String(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 encodePathParam,\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, encodePathParam);\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 baseUrl: _baseUrl,\n ...defaultOptions\n}: CreateFetchClientOptions) => {\n const fetchWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n coreFetch,\n );\n const resolveBaseUrl = async () => (typeof _baseUrl === 'function' ? _baseUrl() : _baseUrl);\n\n const createFetchMethod =\n (method: HttpMethod) =>\n async (url: string, params: BaseFetchParams, options: FetchClientOptions = {}) => {\n const baseUrl = await resolveBaseUrl();\n const request = createFetchRequest({\n url,\n method,\n params,\n defaultOptions: { ...defaultOptions, baseUrl: baseUrl },\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,6 +1,6 @@
1
- import { t as createFetchClient } from "./createFetchClient-DlGCbltR.js";
1
+ import { t as createFetchClient } from "./createFetchClient-Dc_ZMuq7.js";
2
2
  // src/fetchClient/createGenericFetchClient.ts
3
3
  const createGenericFetchClient = (defaultOptions) => createFetchClient(defaultOptions);
4
4
  export { createGenericFetchClient as t };
5
5
 
6
- //# sourceMappingURL=createGenericFetchClient-wGxemBwR.js.map
6
+ //# sourceMappingURL=createGenericFetchClient-Ba4E4T-Y.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createGenericFetchClient-wGxemBwR.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-Ba4E4T-Y.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-DEkUH662.cjs");
1
+ const require_createFetchClient = require("./createFetchClient-CDKSkd7i.cjs");
2
2
  // src/fetchClient/createGenericFetchClient.ts
3
3
  const createGenericFetchClient = (defaultOptions) => require_createFetchClient.createFetchClient(defaultOptions);
4
4
  Object.defineProperty(exports, "createGenericFetchClient", {
@@ -8,4 +8,4 @@ Object.defineProperty(exports, "createGenericFetchClient", {
8
8
  }
9
9
  });
10
10
 
11
- //# sourceMappingURL=createGenericFetchClient-2oU-PXVo.cjs.map
11
+ //# sourceMappingURL=createGenericFetchClient-BuYzzV_D.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"createGenericFetchClient-2oU-PXVo.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-BuYzzV_D.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,6 +1,6 @@
1
- import { t as createFetchClient } from "./createFetchClient-DlGCbltR.js";
1
+ import { t as createFetchClient } from "./createFetchClient-Dc_ZMuq7.js";
2
2
  // src/fetchClient/createOpenapiFetchClient.ts
3
3
  const createOpenapiFetchClient = (defaultOptions) => createFetchClient(defaultOptions);
4
4
  export { createOpenapiFetchClient as t };
5
5
 
6
- //# sourceMappingURL=createOpenapiFetchClient-Bhz62MUE.js.map
6
+ //# sourceMappingURL=createOpenapiFetchClient-DSk29o_s.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createOpenapiFetchClient-Bhz62MUE.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-DSk29o_s.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,4 +1,4 @@
1
- const require_createFetchClient = require("./createFetchClient-DEkUH662.cjs");
1
+ const require_createFetchClient = require("./createFetchClient-CDKSkd7i.cjs");
2
2
  // src/fetchClient/createOpenapiFetchClient.ts
3
3
  const createOpenapiFetchClient = (defaultOptions) => require_createFetchClient.createFetchClient(defaultOptions);
4
4
  Object.defineProperty(exports, "createOpenapiFetchClient", {
@@ -8,4 +8,4 @@ Object.defineProperty(exports, "createOpenapiFetchClient", {
8
8
  }
9
9
  });
10
10
 
11
- //# sourceMappingURL=createOpenapiFetchClient-DL9w7vU-.cjs.map
11
+ //# sourceMappingURL=createOpenapiFetchClient-dkssExkU.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"createOpenapiFetchClient-DL9w7vU-.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-dkssExkU.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,5 +1,61 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_appLogs = require("../appLogs-CoAWQGxs.cjs");
3
- const require_dataScience = require("../dataScience-CufjHPSd.cjs");
4
- exports.createDataScienceClient = require_dataScience.createDataScienceClient;
5
- exports.parseLogLines = require_appLogs.parseLogLines;
2
+ const require_createGenericFetchClient = require("../createGenericFetchClient-BuYzzV_D.cjs");
3
+ const require_createOpenapiFetchClient = require("../createOpenapiFetchClient-dkssExkU.cjs");
4
+ const require_auth = require("../auth-AehUDNRK.cjs");
5
+ // src/clients/dataScience/dataScienceClient.ts
6
+ const createDataScienceClient = ({ baseUrl, middlewares, auth }) => {
7
+ const client = require_createOpenapiFetchClient.createOpenapiFetchClient({
8
+ baseUrl,
9
+ middlewares,
10
+ headers: require_auth.createAuthHeaders(auth)
11
+ });
12
+ const genericClient = require_createGenericFetchClient.createGenericFetchClient({
13
+ baseUrl,
14
+ middlewares
15
+ });
16
+ const getApps = async (query, signal) => {
17
+ const { data } = await client.get("/apps", { query }, { signal });
18
+ return data;
19
+ };
20
+ const getApp = async (appId, signal) => {
21
+ const { data } = await client.get("/apps/{appId}", { path: { appId } }, { signal });
22
+ return data;
23
+ };
24
+ /**
25
+ * A 60-second link that opens a dev-mode app without the app's own authentication.
26
+ *
27
+ * - Opening `url` in a browser (or an iframe) starts a preview session on the app host.
28
+ * - The token rides in the URL fragment: never fetch the link, navigate to it.
29
+ */
30
+ const createAppPreviewLink = async (appId, signal) => {
31
+ const { data } = await client.post("/apps/{appId}/preview-link", { path: { appId } }, { signal });
32
+ return data;
33
+ };
34
+ const getRuntimes = async (signal) => {
35
+ const { data } = await client.get("/runtimes", {}, { signal });
36
+ return data;
37
+ };
38
+ const getSandbox = async (appId, signal) => {
39
+ const { data } = await client.get("/sandboxes/{appId}", { path: { appId } }, { signal });
40
+ return data;
41
+ };
42
+ const deleteSandbox = async (appId, signal) => {
43
+ return client.delete("/sandboxes/{appId}", { path: { appId } }, { signal });
44
+ };
45
+ const healthCheck = async (signal) => {
46
+ const { data } = await genericClient.get("/health-check", {}, { signal });
47
+ return data;
48
+ };
49
+ return {
50
+ healthCheck,
51
+ getApps,
52
+ getApp,
53
+ createAppPreviewLink,
54
+ getRuntimes,
55
+ getSandbox,
56
+ deleteSandbox
57
+ };
58
+ };
59
+ exports.createDataScienceClient = createDataScienceClient;
60
+
61
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["createOpenapiFetchClient","createAuthHeaders","createGenericFetchClient"],"sources":["../../src/clients/dataScience/dataScienceClient.ts"],"sourcesContent":["import { createGenericFetchClient, createOpenapiFetchClient } from '../../fetchClient';\nimport { createAuthHeaders } from '../auth';\nimport type { ClientInitOptions } from '../types';\n\nimport type { paths } from './__generated__/schema';\nimport type {\n CreateDataAppPreviewLinkPath,\n DeleteSandboxPath,\n GetAppsQuery,\n GetDataAppPath,\n GetSandboxPath,\n} from './types';\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 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 /**\n * A 60-second link that opens a dev-mode app without the app's own authentication.\n *\n * - Opening `url` in a browser (or an iframe) starts a preview session on the app host.\n * - The token rides in the URL fragment: never fetch the link, navigate to it.\n */\n const createAppPreviewLink = async (\n appId: CreateDataAppPreviewLinkPath['appId'],\n signal?: AbortSignal,\n ) => {\n const { data } = await client.post(\n '/apps/{appId}/preview-link',\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 getApps,\n getApp,\n createAppPreviewLink,\n getRuntimes,\n getSandbox,\n deleteSandbox,\n };\n};\n"],"mappings":";;;;;AAaA,MAAa,2BAA2B,EAAE,SAAS,aAAa,WAA8B;CAC5F,MAAM,SAASA,iCAAAA,yBAAgC;EAC7C;EACA;EACA,SAASC,aAAAA,kBAAkB,IAAI;CACjC,CAAC;CACD,MAAM,gBAAgBC,iCAAAA,yBAAyB;EAAE;EAAS;CAAY,CAAC;CAEvE,MAAM,UAAU,OAAO,OAAqB,WAAyB;EACnE,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE,OAAO,CAAC;EAEhE,OAAO;CACT;CAEA,MAAM,SAAS,OAAO,OAAgC,WAAyB;EAC7E,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;EAElF,OAAO;CACT;;;;;;;CAQA,MAAM,uBAAuB,OAC3B,OACA,WACG;EACH,MAAM,EAAE,SAAS,MAAM,OAAO,KAC5B,8BACA,EAAE,MAAM,EAAE,MAAM,EAAE,GAClB,EAAE,OAAO,CACX;EAEA,OAAO;CACT;CAEA,MAAM,cAAc,OAAO,WAAyB;EAClD,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC;EAE7D,OAAO;CACT;CAEA,MAAM,aAAa,OAAO,OAAgC,WAAyB;EACjF,MAAM,EAAE,SAAS,MAAM,OAAO,IAAI,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;EAEvF,OAAO;CACT;CAEA,MAAM,gBAAgB,OAAO,OAAmC,WAAyB;EACvF,OAAO,OAAO,OAAO,sBAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;CAC5E;CAEA,MAAM,cAAc,OAAO,WAAyB;EAClD,MAAM,EAAE,SAAS,MAAM,cAAc,IAAI,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC;EAExE,OAAO;CACT;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
@@ -1,3 +1,105 @@
1
- import { n as parseLogLines } from "../appLogs-CnLNMH7M.cjs";
2
- import { t as createDataScienceClient } from "../index-ClIV2Lch.cjs";
3
- export { createDataScienceClient, parseLogLines };
1
+ import { ci as ApiResponse } from "../index-FrsEkDvX.cjs";
2
+ import { n as ClientInitOptions } from "../types-B4ezB18r.cjs";
3
+ import { a as GetAppsQuery, i as DeleteSandboxPath, o as GetDataAppPath, s as GetSandboxPath, t as CreateDataAppPreviewLinkPath } from "../types-DNwIMEuB.cjs";
4
+ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientInitOptions) => {
5
+ healthCheck: (signal?: AbortSignal) => Promise<unknown>;
6
+ getApps: (query: GetAppsQuery, signal?: AbortSignal) => Promise<{
7
+ id: string;
8
+ type?: string | null;
9
+ projectId: string;
10
+ componentId: string;
11
+ branchId: string | null;
12
+ configId: string;
13
+ configVersion: string;
14
+ state: 'created' | 'starting' | 'restarting' | 'running' | 'stopping' | 'stopped' | 'deleting' | 'deleted';
15
+ desiredState: 'running' | 'stopped' | 'deleted';
16
+ mode: 'prod' | 'dev';
17
+ lastRequestTimestamp: string | null;
18
+ lastStartTimestamp?: string | null;
19
+ url?: string | null;
20
+ autoSuspendAfterSeconds?: number;
21
+ autoRestartEnabled?: boolean;
22
+ size?: string | null;
23
+ hasManagedGitRepo?: boolean;
24
+ }[]>;
25
+ getApp: (appId: GetDataAppPath['appId'], signal?: AbortSignal) => Promise<{
26
+ id: string;
27
+ type?: string | null;
28
+ projectId: string;
29
+ componentId: string;
30
+ branchId: string | null;
31
+ configId: string;
32
+ configVersion: string;
33
+ state: 'created' | 'starting' | 'restarting' | 'running' | 'stopping' | 'stopped' | 'deleting' | 'deleted';
34
+ desiredState: 'running' | 'stopped' | 'deleted';
35
+ mode: 'prod' | 'dev';
36
+ lastRequestTimestamp: string | null;
37
+ lastStartTimestamp?: string | null;
38
+ url?: string | null;
39
+ autoSuspendAfterSeconds?: number;
40
+ autoRestartEnabled?: boolean;
41
+ size?: string | null;
42
+ hasManagedGitRepo?: boolean;
43
+ }>;
44
+ createAppPreviewLink: (appId: CreateDataAppPreviewLinkPath['appId'], signal?: AbortSignal) => Promise<{
45
+ url: string;
46
+ linkExpiresAt: string;
47
+ }>;
48
+ getRuntimes: (signal?: AbortSignal) => Promise<{
49
+ description: string;
50
+ type: string;
51
+ isTypeDefault: boolean;
52
+ releaseDate: string;
53
+ endOfLifeDate?: string | null;
54
+ imageName?: string | null;
55
+ imageTag?: string | null;
56
+ transformationComponentId?: string | null;
57
+ transformationComponentTag?: string | null;
58
+ sandboxImageName?: string | null;
59
+ sandboxImageTag?: string | null;
60
+ }[]>;
61
+ getSandbox: (appId: GetSandboxPath['appId'], signal?: AbortSignal) => Promise<{
62
+ id?: string;
63
+ projectId?: string;
64
+ tokenId?: string;
65
+ branchId?: string | null;
66
+ configurationId?: string;
67
+ physicalId?: string;
68
+ type?: string;
69
+ active?: boolean;
70
+ createdTimestamp?: string;
71
+ startTimestamp?: string;
72
+ updatedTimestamp?: string;
73
+ persistentStorage?: {
74
+ pvcName?: string | null;
75
+ k8sManifest?: string | null;
76
+ isEnabled?: boolean;
77
+ ready?: boolean | null;
78
+ k8sStorageClassName?: string | null;
79
+ };
80
+ shared?: boolean;
81
+ componentId?: string;
82
+ configurationVersion?: string;
83
+ size?: string | null;
84
+ lastAutosaveTimestamp?: string | null;
85
+ expirationTimestamp?: string | null;
86
+ autoSuspendAfterSeconds?: number;
87
+ expirationAfterHours?: number;
88
+ user?: string | null;
89
+ url?: string | null;
90
+ password?: string | null;
91
+ autosaveTokenId?: string | null;
92
+ host?: string | null;
93
+ imageVersion?: string | null;
94
+ packages?: string[] | null;
95
+ sizeParameters?: unknown;
96
+ stagingWorkspaceId?: unknown;
97
+ stagingWorkspaceType?: unknown;
98
+ workspaceDetails?: unknown;
99
+ databricks?: unknown;
100
+ credentials?: unknown;
101
+ }>;
102
+ deleteSandbox: (appId: DeleteSandboxPath['appId'], signal?: AbortSignal) => Promise<ApiResponse<never>>;
103
+ };
104
+ export { createDataScienceClient };
105
+ //# sourceMappingURL=index.d.cts.map
@@ -1,3 +1,105 @@
1
- import { n as parseLogLines } from "../appLogs-CTvZAihm.js";
2
- import { t as createDataScienceClient } from "../index-BZDxWvZW.js";
3
- export { createDataScienceClient, parseLogLines };
1
+ import { ci as ApiResponse } from "../index-FrsEkDvX.js";
2
+ import { n as ClientInitOptions } from "../types-Tg3euEN_.js";
3
+ import { a as GetAppsQuery, i as DeleteSandboxPath, o as GetDataAppPath, s as GetSandboxPath, t as CreateDataAppPreviewLinkPath } from "../types-BD0B1KQ6.js";
4
+ declare const createDataScienceClient: ({ baseUrl, middlewares, auth }: ClientInitOptions) => {
5
+ healthCheck: (signal?: AbortSignal) => Promise<unknown>;
6
+ getApps: (query: GetAppsQuery, signal?: AbortSignal) => Promise<{
7
+ id: string;
8
+ type?: string | null;
9
+ projectId: string;
10
+ componentId: string;
11
+ branchId: string | null;
12
+ configId: string;
13
+ configVersion: string;
14
+ state: 'created' | 'starting' | 'restarting' | 'running' | 'stopping' | 'stopped' | 'deleting' | 'deleted';
15
+ desiredState: 'running' | 'stopped' | 'deleted';
16
+ mode: 'prod' | 'dev';
17
+ lastRequestTimestamp: string | null;
18
+ lastStartTimestamp?: string | null;
19
+ url?: string | null;
20
+ autoSuspendAfterSeconds?: number;
21
+ autoRestartEnabled?: boolean;
22
+ size?: string | null;
23
+ hasManagedGitRepo?: boolean;
24
+ }[]>;
25
+ getApp: (appId: GetDataAppPath['appId'], signal?: AbortSignal) => Promise<{
26
+ id: string;
27
+ type?: string | null;
28
+ projectId: string;
29
+ componentId: string;
30
+ branchId: string | null;
31
+ configId: string;
32
+ configVersion: string;
33
+ state: 'created' | 'starting' | 'restarting' | 'running' | 'stopping' | 'stopped' | 'deleting' | 'deleted';
34
+ desiredState: 'running' | 'stopped' | 'deleted';
35
+ mode: 'prod' | 'dev';
36
+ lastRequestTimestamp: string | null;
37
+ lastStartTimestamp?: string | null;
38
+ url?: string | null;
39
+ autoSuspendAfterSeconds?: number;
40
+ autoRestartEnabled?: boolean;
41
+ size?: string | null;
42
+ hasManagedGitRepo?: boolean;
43
+ }>;
44
+ createAppPreviewLink: (appId: CreateDataAppPreviewLinkPath['appId'], signal?: AbortSignal) => Promise<{
45
+ url: string;
46
+ linkExpiresAt: string;
47
+ }>;
48
+ getRuntimes: (signal?: AbortSignal) => Promise<{
49
+ description: string;
50
+ type: string;
51
+ isTypeDefault: boolean;
52
+ releaseDate: string;
53
+ endOfLifeDate?: string | null;
54
+ imageName?: string | null;
55
+ imageTag?: string | null;
56
+ transformationComponentId?: string | null;
57
+ transformationComponentTag?: string | null;
58
+ sandboxImageName?: string | null;
59
+ sandboxImageTag?: string | null;
60
+ }[]>;
61
+ getSandbox: (appId: GetSandboxPath['appId'], signal?: AbortSignal) => Promise<{
62
+ id?: string;
63
+ projectId?: string;
64
+ tokenId?: string;
65
+ branchId?: string | null;
66
+ configurationId?: string;
67
+ physicalId?: string;
68
+ type?: string;
69
+ active?: boolean;
70
+ createdTimestamp?: string;
71
+ startTimestamp?: string;
72
+ updatedTimestamp?: string;
73
+ persistentStorage?: {
74
+ pvcName?: string | null;
75
+ k8sManifest?: string | null;
76
+ isEnabled?: boolean;
77
+ ready?: boolean | null;
78
+ k8sStorageClassName?: string | null;
79
+ };
80
+ shared?: boolean;
81
+ componentId?: string;
82
+ configurationVersion?: string;
83
+ size?: string | null;
84
+ lastAutosaveTimestamp?: string | null;
85
+ expirationTimestamp?: string | null;
86
+ autoSuspendAfterSeconds?: number;
87
+ expirationAfterHours?: number;
88
+ user?: string | null;
89
+ url?: string | null;
90
+ password?: string | null;
91
+ autosaveTokenId?: string | null;
92
+ host?: string | null;
93
+ imageVersion?: string | null;
94
+ packages?: string[] | null;
95
+ sizeParameters?: unknown;
96
+ stagingWorkspaceId?: unknown;
97
+ stagingWorkspaceType?: unknown;
98
+ workspaceDetails?: unknown;
99
+ databricks?: unknown;
100
+ credentials?: unknown;
101
+ }>;
102
+ deleteSandbox: (appId: DeleteSandboxPath['appId'], signal?: AbortSignal) => Promise<ApiResponse<never>>;
103
+ };
104
+ export { createDataScienceClient };
105
+ //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,60 @@
1
- import { t as parseLogLines } from "../appLogs-DFcPwVk8.js";
2
- import { t as createDataScienceClient } from "../dataScience-CXmkEOAi.js";
3
- export { createDataScienceClient, parseLogLines };
1
+ import { t as createGenericFetchClient } from "../createGenericFetchClient-Ba4E4T-Y.js";
2
+ import { t as createOpenapiFetchClient } from "../createOpenapiFetchClient-DSk29o_s.js";
3
+ import { t as createAuthHeaders } from "../auth-ZBQWCJPM.js";
4
+ // src/clients/dataScience/dataScienceClient.ts
5
+ const createDataScienceClient = ({ baseUrl, middlewares, auth }) => {
6
+ const client = createOpenapiFetchClient({
7
+ baseUrl,
8
+ middlewares,
9
+ headers: createAuthHeaders(auth)
10
+ });
11
+ const genericClient = createGenericFetchClient({
12
+ baseUrl,
13
+ middlewares
14
+ });
15
+ const getApps = async (query, signal) => {
16
+ const { data } = await client.get("/apps", { query }, { signal });
17
+ return data;
18
+ };
19
+ const getApp = async (appId, signal) => {
20
+ const { data } = await client.get("/apps/{appId}", { path: { appId } }, { signal });
21
+ return data;
22
+ };
23
+ /**
24
+ * A 60-second link that opens a dev-mode app without the app's own authentication.
25
+ *
26
+ * - Opening `url` in a browser (or an iframe) starts a preview session on the app host.
27
+ * - The token rides in the URL fragment: never fetch the link, navigate to it.
28
+ */
29
+ const createAppPreviewLink = async (appId, signal) => {
30
+ const { data } = await client.post("/apps/{appId}/preview-link", { path: { appId } }, { signal });
31
+ return data;
32
+ };
33
+ const getRuntimes = async (signal) => {
34
+ const { data } = await client.get("/runtimes", {}, { signal });
35
+ return data;
36
+ };
37
+ const getSandbox = async (appId, signal) => {
38
+ const { data } = await client.get("/sandboxes/{appId}", { path: { appId } }, { signal });
39
+ return data;
40
+ };
41
+ const deleteSandbox = async (appId, signal) => {
42
+ return client.delete("/sandboxes/{appId}", { path: { appId } }, { signal });
43
+ };
44
+ const healthCheck = async (signal) => {
45
+ const { data } = await genericClient.get("/health-check", {}, { signal });
46
+ return data;
47
+ };
48
+ return {
49
+ healthCheck,
50
+ getApps,
51
+ getApp,
52
+ createAppPreviewLink,
53
+ getRuntimes,
54
+ getSandbox,
55
+ deleteSandbox
56
+ };
57
+ };
58
+ export { createDataScienceClient };
59
+
60
+ //# sourceMappingURL=index.js.map