@keboola/api-client 3.0.1 → 5.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 (309) hide show
  1. package/README.md +34 -6
  2. package/dist/ai/index.cjs +4 -3
  3. package/dist/ai/index.d.cts +5 -10
  4. package/dist/ai/index.d.ts +5 -10
  5. package/dist/ai/index.js +3 -2
  6. package/dist/ai/types.d.cts +2 -2
  7. package/dist/ai/types.d.ts +2 -2
  8. package/dist/assets/index.cjs +4 -3
  9. package/dist/assets/index.d.cts +2 -2
  10. package/dist/assets/index.d.ts +2 -2
  11. package/dist/assets/index.js +3 -2
  12. package/dist/{authMiddleware-Dcy9gRT9.d.ts → authMiddleware-B0p06GYQ.d.ts} +1 -1
  13. package/dist/{authMiddleware-CeIxAJQ5.d.cts → authMiddleware-vNb2hfLP.d.cts} +1 -1
  14. package/dist/chat/index.cjs +4 -3
  15. package/dist/chat/index.d.cts +4 -4
  16. package/dist/chat/index.d.ts +4 -4
  17. package/dist/chat/index.js +3 -2
  18. package/dist/chat/types.d.cts +2 -2
  19. package/dist/chat/types.d.ts +2 -2
  20. package/dist/{chunk-Q6T6GRDR.js → chunk-2CTHLPTU.js} +12 -5
  21. package/dist/chunk-2CTHLPTU.js.map +1 -0
  22. package/dist/{chunk-BA2JMZP6.cjs → chunk-2EWL5BAZ.cjs} +4 -4
  23. package/dist/{chunk-BA2JMZP6.cjs.map → chunk-2EWL5BAZ.cjs.map} +1 -1
  24. package/dist/{chunk-LBVYZLWL.js → chunk-2NLVV2MF.js} +3 -3
  25. package/dist/{chunk-LBVYZLWL.js.map → chunk-2NLVV2MF.js.map} +1 -1
  26. package/dist/{chunk-MTFRH3R5.cjs → chunk-3CIPWA33.cjs} +4 -23
  27. package/dist/chunk-3CIPWA33.cjs.map +1 -0
  28. package/dist/{chunk-RBGTWJ7G.js → chunk-4FU45NEU.js} +7 -5
  29. package/dist/chunk-4FU45NEU.js.map +1 -0
  30. package/dist/chunk-4I6TJWBG.cjs +38 -0
  31. package/dist/chunk-4I6TJWBG.cjs.map +1 -0
  32. package/dist/{chunk-3DW7RIEB.js → chunk-4IBEYSSA.js} +7 -5
  33. package/dist/chunk-4IBEYSSA.js.map +1 -0
  34. package/dist/{chunk-T66CY2YX.js → chunk-4NUA46VD.js} +473 -41
  35. package/dist/chunk-4NUA46VD.js.map +1 -0
  36. package/dist/{chunk-T23NVI3Q.js → chunk-5XADEX3R.js} +7 -5
  37. package/dist/chunk-5XADEX3R.js.map +1 -0
  38. package/dist/{chunk-V35JLM5Q.js → chunk-65YXOZDQ.js} +7 -4
  39. package/dist/chunk-65YXOZDQ.js.map +1 -0
  40. package/dist/{chunk-M4PFR3OS.js → chunk-6DPZQRNC.js} +8 -5
  41. package/dist/chunk-6DPZQRNC.js.map +1 -0
  42. package/dist/{chunk-GLQZHLLN.js → chunk-7JOV7PXU.js} +7 -5
  43. package/dist/chunk-7JOV7PXU.js.map +1 -0
  44. package/dist/{chunk-OAKTIIG4.js → chunk-7PPUK4HS.js} +4 -3
  45. package/dist/chunk-7PPUK4HS.js.map +1 -0
  46. package/dist/{chunk-ZIVZF6M2.cjs → chunk-7UQVB2SQ.cjs} +9 -7
  47. package/dist/chunk-7UQVB2SQ.cjs.map +1 -0
  48. package/dist/{chunk-RTD3XWBM.cjs → chunk-AB6LHU2Z.cjs} +11 -9
  49. package/dist/chunk-AB6LHU2Z.cjs.map +1 -0
  50. package/dist/{chunk-VLSN55I3.cjs → chunk-AWRMGLMT.cjs} +113 -3
  51. package/dist/chunk-AWRMGLMT.cjs.map +1 -0
  52. package/dist/{chunk-REXMA2IN.cjs → chunk-CFR2CKM6.cjs} +8 -6
  53. package/dist/chunk-CFR2CKM6.cjs.map +1 -0
  54. package/dist/{chunk-5YN6FED2.cjs → chunk-DGWPC6VR.cjs} +13 -6
  55. package/dist/chunk-DGWPC6VR.cjs.map +1 -0
  56. package/dist/{chunk-SDA2UO4X.cjs → chunk-DOUFVJJF.cjs} +9 -6
  57. package/dist/chunk-DOUFVJJF.cjs.map +1 -0
  58. package/dist/{chunk-76Q2CTFV.js → chunk-EDDRN2CO.js} +7 -5
  59. package/dist/chunk-EDDRN2CO.js.map +1 -0
  60. package/dist/chunk-FL54VJ35.js +32 -0
  61. package/dist/chunk-FL54VJ35.js.map +1 -0
  62. package/dist/chunk-GOC5UODV.cjs +30 -0
  63. package/dist/chunk-GOC5UODV.cjs.map +1 -0
  64. package/dist/{chunk-5PUNJJAR.js → chunk-JKXQFEY7.js} +7 -5
  65. package/dist/chunk-JKXQFEY7.js.map +1 -0
  66. package/dist/chunk-KKZP4DUR.cjs +340 -0
  67. package/dist/chunk-KKZP4DUR.cjs.map +1 -0
  68. package/dist/{chunk-2ZMZ4KWJ.js → chunk-KQ2QNGRX.js} +113 -3
  69. package/dist/chunk-KQ2QNGRX.js.map +1 -0
  70. package/dist/{chunk-ECQZAWH3.cjs → chunk-KT4MFNBC.cjs} +8 -6
  71. package/dist/chunk-KT4MFNBC.cjs.map +1 -0
  72. package/dist/{chunk-RBW5ABSQ.js → chunk-MUQ7TAWH.js} +126 -7
  73. package/dist/chunk-MUQ7TAWH.js.map +1 -0
  74. package/dist/{chunk-D2ZTB5R2.cjs → chunk-OAQGC32L.cjs} +135 -16
  75. package/dist/chunk-OAQGC32L.cjs.map +1 -0
  76. package/dist/chunk-OJJ3QLZP.js +338 -0
  77. package/dist/chunk-OJJ3QLZP.js.map +1 -0
  78. package/dist/{chunk-5DVEQBCD.cjs → chunk-P4CQFG3X.cjs} +11 -9
  79. package/dist/chunk-P4CQFG3X.cjs.map +1 -0
  80. package/dist/{chunk-IL2PAEG3.cjs → chunk-RF64RAHW.cjs} +8 -6
  81. package/dist/chunk-RF64RAHW.cjs.map +1 -0
  82. package/dist/{chunk-AYXQJONA.cjs → chunk-RPNL672Y.cjs} +4 -4
  83. package/dist/chunk-RPNL672Y.cjs.map +1 -0
  84. package/dist/{chunk-HLGMFFDF.js → chunk-S7HIK7XY.js} +7 -5
  85. package/dist/chunk-S7HIK7XY.js.map +1 -0
  86. package/dist/{chunk-ROBQ2CV7.cjs → chunk-T7UDL2KI.cjs} +475 -44
  87. package/dist/chunk-T7UDL2KI.cjs.map +1 -0
  88. package/dist/{chunk-PM2FAMWT.js → chunk-UT3GUUCO.js} +7 -5
  89. package/dist/chunk-UT3GUUCO.js.map +1 -0
  90. package/dist/chunk-UUY6LQT6.cjs +267 -0
  91. package/dist/chunk-UUY6LQT6.cjs.map +1 -0
  92. package/dist/{chunk-LI3BAYDV.cjs → chunk-V32CB5U2.cjs} +8 -6
  93. package/dist/chunk-V32CB5U2.cjs.map +1 -0
  94. package/dist/{chunk-6D3MJRXE.cjs → chunk-VZROPAWL.cjs} +8 -6
  95. package/dist/chunk-VZROPAWL.cjs.map +1 -0
  96. package/dist/{chunk-6HBXNLB7.cjs → chunk-WLS43HX4.cjs} +8 -6
  97. package/dist/chunk-WLS43HX4.cjs.map +1 -0
  98. package/dist/{chunk-KOO3ZG5X.cjs → chunk-WOGG723K.cjs} +8 -5
  99. package/dist/{chunk-V35JLM5Q.js.map → chunk-WOGG723K.cjs.map} +1 -1
  100. package/dist/{chunk-4TENBFWN.cjs → chunk-XHQZ4TF7.cjs} +11 -6
  101. package/dist/chunk-XHQZ4TF7.cjs.map +1 -0
  102. package/dist/{chunk-QXWPUKK2.js → chunk-XI6R76X3.js} +4 -20
  103. package/dist/chunk-XI6R76X3.js.map +1 -0
  104. package/dist/{chunk-6TUGEXVX.js → chunk-XRHAE4SD.js} +3 -3
  105. package/dist/{chunk-6TUGEXVX.js.map → chunk-XRHAE4SD.js.map} +1 -1
  106. package/dist/{chunk-ZQPET6GI.js → chunk-Y3RILILK.js} +10 -5
  107. package/dist/chunk-Y3RILILK.js.map +1 -0
  108. package/dist/{chunk-CQFZ7PGZ.js → chunk-YH52X52J.js} +7 -5
  109. package/dist/chunk-YH52X52J.js.map +1 -0
  110. package/dist/chunk-ZOREOLGE.js +264 -0
  111. package/dist/chunk-ZOREOLGE.js.map +1 -0
  112. package/dist/{createGenericFetchClient-Cp2By_KQ.d.ts → createGenericFetchClient-Gpom91V-.d.ts} +1 -1
  113. package/dist/{createGenericFetchClient-DuW7iSRy.d.cts → createGenericFetchClient-yfcpR7qD.d.cts} +1 -1
  114. package/dist/{createOpenapiFetchClient-DhL2gQvd.d.ts → createOpenapiFetchClient-B44nXiti.d.ts} +2 -2
  115. package/dist/{createOpenapiFetchClient-BuKDZcLD.d.cts → createOpenapiFetchClient-Ci0-Qe53.d.cts} +2 -2
  116. package/dist/dataScience/index.cjs +5 -4
  117. package/dist/dataScience/index.d.cts +26 -6
  118. package/dist/dataScience/index.d.ts +26 -6
  119. package/dist/dataScience/index.js +3 -2
  120. package/dist/dataScience/types.d.cts +2 -2
  121. package/dist/dataScience/types.d.ts +2 -2
  122. package/dist/domain/permissions/index.cjs +5 -11
  123. package/dist/domain/permissions/index.cjs.map +1 -1
  124. package/dist/domain/permissions/index.d.cts +3 -2
  125. package/dist/domain/permissions/index.d.ts +3 -2
  126. package/dist/domain/permissions/index.js +1 -7
  127. package/dist/domain/permissions/index.js.map +1 -1
  128. package/dist/domain/storageTable/index.cjs +9 -260
  129. package/dist/domain/storageTable/index.cjs.map +1 -1
  130. package/dist/domain/storageTable/index.js +1 -262
  131. package/dist/domain/storageTable/index.js.map +1 -1
  132. package/dist/editor/index.cjs +4 -3
  133. package/dist/editor/index.d.cts +4 -4
  134. package/dist/editor/index.d.ts +4 -4
  135. package/dist/editor/index.js +3 -2
  136. package/dist/editor/types.d.cts +2 -2
  137. package/dist/editor/types.d.ts +2 -2
  138. package/dist/encryption/index.cjs +4 -3
  139. package/dist/encryption/index.d.cts +2 -2
  140. package/dist/encryption/index.d.ts +2 -2
  141. package/dist/encryption/index.js +3 -2
  142. package/dist/import/index.cjs +4 -3
  143. package/dist/import/index.d.cts +2 -2
  144. package/dist/import/index.d.ts +2 -2
  145. package/dist/import/index.js +3 -2
  146. package/dist/index-BEE_qeId.d.ts +1511 -0
  147. package/dist/index-KHRrA2IR.d.cts +1511 -0
  148. package/dist/index.cjs +299 -160
  149. package/dist/index.cjs.map +1 -1
  150. package/dist/index.d.cts +3048 -1028
  151. package/dist/index.d.ts +3048 -1028
  152. package/dist/index.js +244 -108
  153. package/dist/index.js.map +1 -1
  154. package/dist/management/index.cjs +6 -5
  155. package/dist/management/index.d.cts +137 -69
  156. package/dist/management/index.d.ts +137 -69
  157. package/dist/management/index.js +4 -3
  158. package/dist/management/types.d.cts +2 -2
  159. package/dist/management/types.d.ts +2 -2
  160. package/dist/metastore/index.cjs +4 -3
  161. package/dist/metastore/index.d.cts +5 -5
  162. package/dist/metastore/index.d.ts +5 -5
  163. package/dist/metastore/index.js +3 -2
  164. package/dist/metastore/types.d.cts +2 -2
  165. package/dist/metastore/types.d.ts +2 -2
  166. package/dist/oauth/index.cjs +4 -3
  167. package/dist/oauth/index.d.cts +2 -2
  168. package/dist/oauth/index.d.ts +2 -2
  169. package/dist/oauth/index.js +3 -2
  170. package/dist/{project-CYhB6rYN.d.cts → project-C4K5Dzoy.d.cts} +1 -1
  171. package/dist/{project-Bzslbq4u.d.ts → project-COwNmNoc.d.ts} +1 -1
  172. package/dist/queryService/index.cjs +4 -3
  173. package/dist/queryService/index.d.cts +4 -4
  174. package/dist/queryService/index.d.ts +4 -4
  175. package/dist/queryService/index.js +3 -2
  176. package/dist/queryService/types.d.cts +2 -2
  177. package/dist/queryService/types.d.ts +2 -2
  178. package/dist/queue/index.cjs +4 -3
  179. package/dist/queue/index.d.cts +4 -4
  180. package/dist/queue/index.d.ts +4 -4
  181. package/dist/queue/index.js +3 -2
  182. package/dist/queue/types.d.cts +2 -2
  183. package/dist/queue/types.d.ts +2 -2
  184. package/dist/sdk/configurations/index.d.cts +3 -2
  185. package/dist/sdk/configurations/index.d.ts +3 -2
  186. package/dist/sdk/storage/index.cjs +11 -11
  187. package/dist/sdk/storage/index.d.cts +7 -7
  188. package/dist/sdk/storage/index.d.ts +7 -7
  189. package/dist/sdk/storage/index.js +1 -1
  190. package/dist/sdk/tag/index.d.cts +4 -4
  191. package/dist/sdk/tag/index.d.ts +4 -4
  192. package/dist/sdk/tag/types.d.cts +4 -4
  193. package/dist/sdk/tag/types.d.ts +4 -4
  194. package/dist/sdk/vault/index.d.cts +2 -2
  195. package/dist/sdk/vault/index.d.ts +2 -2
  196. package/dist/status/index.cjs +4 -3
  197. package/dist/status/index.d.cts +2 -2
  198. package/dist/status/index.d.ts +2 -2
  199. package/dist/status/index.js +3 -2
  200. package/dist/storage/index.cjs +4 -7
  201. package/dist/storage/index.d.cts +6 -10
  202. package/dist/storage/index.d.ts +6 -10
  203. package/dist/storage/index.js +3 -2
  204. package/dist/storage/types.d.cts +451 -11617
  205. package/dist/storage/types.d.ts +451 -11617
  206. package/dist/storageSdk--0Hh4UCE.d.ts +746 -0
  207. package/dist/storageSdk-DJz6WcW3.d.cts +746 -0
  208. package/dist/stream/index.cjs +14 -0
  209. package/dist/stream/index.cjs.map +1 -0
  210. package/dist/stream/index.d.cts +348 -0
  211. package/dist/stream/index.d.ts +348 -0
  212. package/dist/stream/index.js +5 -0
  213. package/dist/stream/index.js.map +1 -0
  214. package/dist/stream/types.cjs +4 -0
  215. package/dist/stream/types.cjs.map +1 -0
  216. package/dist/stream/types.d.cts +2 -0
  217. package/dist/stream/types.d.ts +2 -0
  218. package/dist/stream/types.js +3 -0
  219. package/dist/stream/types.js.map +1 -0
  220. package/dist/syncActions/index.cjs +4 -3
  221. package/dist/syncActions/index.d.cts +5 -7
  222. package/dist/syncActions/index.d.ts +5 -7
  223. package/dist/syncActions/index.js +3 -2
  224. package/dist/syncActions/types.d.cts +1 -1
  225. package/dist/syncActions/types.d.ts +1 -1
  226. package/dist/telemetry/index.cjs +4 -3
  227. package/dist/telemetry/index.d.cts +3 -3
  228. package/dist/telemetry/index.d.ts +3 -3
  229. package/dist/telemetry/index.js +3 -2
  230. package/dist/{types-CNkgmuhe.d.cts → types-Bc-H4gfv.d.cts} +1 -1
  231. package/dist/{types-CRSKcua9.d.cts → types-BxjcUj-y.d.cts} +1 -1
  232. package/dist/{types-CqWXdTMg.d.ts → types-CFd7q2ed.d.ts} +1 -1
  233. package/dist/{types-DBVQGCI1.d.cts → types-CWebeQXy.d.cts} +1 -1
  234. package/dist/{types-DJkU9gvB.d.cts → types-D9cNOf-3.d.cts} +1 -1
  235. package/dist/types-DFWnAftN.d.cts +7523 -0
  236. package/dist/{types-B51cQMrX.d.ts → types-DFbHRDdR.d.ts} +1 -1
  237. package/dist/types-DMC601TE.d.cts +14375 -0
  238. package/dist/types-DMC601TE.d.ts +14375 -0
  239. package/dist/{types-C-bd4ArM.d.cts → types-DTkxk0fW.d.cts} +1 -1
  240. package/dist/{types-cH0_hkCW.d.ts → types-DacFMc6L.d.ts} +1 -1
  241. package/dist/types-DcL25GqY.d.cts +15820 -0
  242. package/dist/types-Dfw6a58i.d.ts +15820 -0
  243. package/dist/{types-Dws8mFNY.d.cts → types-DiC2wKsx.d.cts} +1 -1
  244. package/dist/types-Dv3vN7M9.d.ts +7523 -0
  245. package/dist/{types-Bom8wyth.d.ts → types-DxJD6LIN.d.cts} +1 -0
  246. package/dist/{types-Bom8wyth.d.cts → types-DxJD6LIN.d.ts} +1 -0
  247. package/dist/{types-DzwzVgyG.d.ts → types-JvKRS8Qd.d.ts} +1 -1
  248. package/dist/{types-BY0tjg2Q.d.ts → types-Mghz1gMD.d.ts} +1 -1
  249. package/dist/{types-C7mpAfq-.d.cts → types-jKnx7Tm_.d.cts} +1 -1
  250. package/dist/{types-C7mpAfq-.d.ts → types-jKnx7Tm_.d.ts} +1 -1
  251. package/dist/{types-CGMJT3JL.d.ts → types-yKV1EX6f.d.ts} +1 -1
  252. package/dist/{utils-BNQZiNOu.d.ts → utils-Cl4emy8g.d.ts} +567 -3
  253. package/dist/{utils-DE09pDTi.d.cts → utils-JsCYFmHj.d.cts} +567 -3
  254. package/dist/vault/index.cjs +4 -3
  255. package/dist/vault/index.d.cts +3 -3
  256. package/dist/vault/index.d.ts +3 -3
  257. package/dist/vault/index.js +3 -2
  258. package/dist/vault/types.d.cts +1 -1
  259. package/dist/vault/types.d.ts +1 -1
  260. package/dist/verify/index.cjs +4 -3
  261. package/dist/verify/index.d.cts +2 -1
  262. package/dist/verify/index.d.ts +2 -1
  263. package/dist/verify/index.js +3 -2
  264. package/package.json +31 -3
  265. package/dist/chunk-2ZMZ4KWJ.js.map +0 -1
  266. package/dist/chunk-3DW7RIEB.js.map +0 -1
  267. package/dist/chunk-4TENBFWN.cjs.map +0 -1
  268. package/dist/chunk-5DVEQBCD.cjs.map +0 -1
  269. package/dist/chunk-5PUNJJAR.js.map +0 -1
  270. package/dist/chunk-5YN6FED2.cjs.map +0 -1
  271. package/dist/chunk-6D3MJRXE.cjs.map +0 -1
  272. package/dist/chunk-6FW72PC2.cjs +0 -29
  273. package/dist/chunk-6FW72PC2.cjs.map +0 -1
  274. package/dist/chunk-6HBXNLB7.cjs.map +0 -1
  275. package/dist/chunk-76Q2CTFV.js.map +0 -1
  276. package/dist/chunk-AYXQJONA.cjs.map +0 -1
  277. package/dist/chunk-CQFZ7PGZ.js.map +0 -1
  278. package/dist/chunk-D2ZTB5R2.cjs.map +0 -1
  279. package/dist/chunk-ECQZAWH3.cjs.map +0 -1
  280. package/dist/chunk-GLQZHLLN.js.map +0 -1
  281. package/dist/chunk-HLGMFFDF.js.map +0 -1
  282. package/dist/chunk-IL2PAEG3.cjs.map +0 -1
  283. package/dist/chunk-KOO3ZG5X.cjs.map +0 -1
  284. package/dist/chunk-LI3BAYDV.cjs.map +0 -1
  285. package/dist/chunk-M4PFR3OS.js.map +0 -1
  286. package/dist/chunk-MTFRH3R5.cjs.map +0 -1
  287. package/dist/chunk-OAKTIIG4.js.map +0 -1
  288. package/dist/chunk-PM2FAMWT.js.map +0 -1
  289. package/dist/chunk-Q6T6GRDR.js.map +0 -1
  290. package/dist/chunk-QXWPUKK2.js.map +0 -1
  291. package/dist/chunk-RBGTWJ7G.js.map +0 -1
  292. package/dist/chunk-RBW5ABSQ.js.map +0 -1
  293. package/dist/chunk-REXMA2IN.cjs.map +0 -1
  294. package/dist/chunk-ROBQ2CV7.cjs.map +0 -1
  295. package/dist/chunk-RTD3XWBM.cjs.map +0 -1
  296. package/dist/chunk-SDA2UO4X.cjs.map +0 -1
  297. package/dist/chunk-T23NVI3Q.js.map +0 -1
  298. package/dist/chunk-T66CY2YX.js.map +0 -1
  299. package/dist/chunk-VLSN55I3.cjs.map +0 -1
  300. package/dist/chunk-ZIVZF6M2.cjs.map +0 -1
  301. package/dist/chunk-ZQPET6GI.js.map +0 -1
  302. package/dist/storageClient-C5R3H96R.d.cts +0 -631
  303. package/dist/storageClient-DBiS4voo.d.ts +0 -631
  304. package/dist/storageSdk-B7Iq38Vh.d.cts +0 -143
  305. package/dist/storageSdk-BnIemr2s.d.ts +0 -143
  306. package/dist/types-BTcT8Q0T.d.cts +0 -8605
  307. package/dist/types-BTcT8Q0T.d.ts +0 -8605
  308. package/dist/types-DYMMsuU0.d.cts +0 -78
  309. package/dist/types-DYMMsuU0.d.ts +0 -78
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkGF4XZK5N_cjs = require('../../chunk-GF4XZK5N.cjs');
4
+ var chunk4I6TJWBG_cjs = require('../../chunk-4I6TJWBG.cjs');
4
5
 
5
6
  // src/domain/permissions/errors.ts
6
7
  var PermissionDeniedError = class extends Error {
@@ -17,18 +18,11 @@ var PermissionDeniedError = class extends Error {
17
18
  };
18
19
 
19
20
  // src/domain/permissions/admin.ts
20
- var AdminRoles = {
21
- ADMIN: "admin",
22
- SHARE: "share",
23
- PRODUCTION_MANAGER: "productionManager",
24
- DEVELOPER: "developer",
25
- REVIEWER: "reviewer"
26
- };
27
21
  var role = (token) => token.admin.role;
28
- var isAdmin = (token) => role(token) === AdminRoles.ADMIN;
29
- var isAdminOrShare = (token) => role(token) === AdminRoles.ADMIN || role(token) === AdminRoles.SHARE;
30
- var isProductionManager = (token) => role(token) === AdminRoles.PRODUCTION_MANAGER;
31
- var isDeveloperOrReviewer = (token) => role(token) === AdminRoles.DEVELOPER || role(token) === AdminRoles.REVIEWER;
22
+ var isAdmin = (token) => role(token) === chunk4I6TJWBG_cjs.AdminRoles.ADMIN;
23
+ var isAdminOrShare = (token) => role(token) === chunk4I6TJWBG_cjs.AdminRoles.ADMIN || role(token) === chunk4I6TJWBG_cjs.AdminRoles.SHARE;
24
+ var isProductionManager = (token) => role(token) === chunk4I6TJWBG_cjs.AdminRoles.PRODUCTION_MANAGER;
25
+ var isDeveloperOrReviewer = (token) => role(token) === chunk4I6TJWBG_cjs.AdminRoles.DEVELOPER || role(token) === chunk4I6TJWBG_cjs.AdminRoles.REVIEWER;
32
26
  var assertCanAdmin = (token) => {
33
27
  if (!isAdmin(token)) {
34
28
  throw new PermissionDeniedError({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/domain/permissions/errors.ts","../../../src/domain/permissions/admin.ts","../../../src/domain/permissions/configurations.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * Stable error contract for permission denials.\n *\n * `PermissionDeniedError` is what every `assertCan*` pair throws on denial. The\n * three public fields are part of the SDK's published contract — consumers\n * (kbc-ui, kai-agent, third-party TS callers) may pattern-match on `action`\n * and surface `reason` in UI, so renames here are breaking changes.\n *\n * PII boundary on `subject`:\n * `subject` is optional and intended for debugging hints only — admin id,\n * role name, configuration id, branch id, etc. It MUST NOT carry the full\n * `StorageToken`, raw tokens, secrets, or any value that could be logged or\n * surfaced to a user without further redaction.\n */\nexport class PermissionDeniedError extends Error {\n public readonly action: string;\n public readonly reason?: string;\n public readonly subject?: string;\n\n constructor({ action, reason, subject }: { action: string; reason?: string; subject?: string }) {\n super(reason ? `Permission denied: ${action} (${reason})` : `Permission denied: ${action}`);\n this.name = 'PermissionDeniedError';\n this.action = action;\n this.reason = reason;\n this.subject = subject;\n }\n}\n","/**\n * @module domain/permissions/admin\n *\n * Baseline admin-role predicates. Token-only — depend purely on the admin\n * role string carried in `StorageToken.admin.role`. Each predicate has an\n * `assertCan*` pair that throws `PermissionDeniedError` with a stable\n * kebab-case `action` field documented per pair.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { PermissionDeniedError } from './errors';\n\nconst AdminRoles = {\n ADMIN: 'admin',\n SHARE: 'share',\n PRODUCTION_MANAGER: 'productionManager',\n DEVELOPER: 'developer',\n REVIEWER: 'reviewer',\n} as const;\n\nconst role = (token: StorageToken): string => token.admin.role;\n\nexport const isAdmin = (token: StorageToken): boolean => role(token) === AdminRoles.ADMIN;\n\nexport const isAdminOrShare = (token: StorageToken): boolean =>\n role(token) === AdminRoles.ADMIN || role(token) === AdminRoles.SHARE;\n\nexport const isProductionManager = (token: StorageToken): boolean =>\n role(token) === AdminRoles.PRODUCTION_MANAGER;\n\nexport const isDeveloperOrReviewer = (token: StorageToken): boolean =>\n role(token) === AdminRoles.DEVELOPER || role(token) === AdminRoles.REVIEWER;\n\nexport const assertCanAdmin = (token: StorageToken): void => {\n if (!isAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'admin',\n reason: `role '${role(token)}' is not admin`,\n });\n }\n};\n\nexport const assertCanAdminOrShare = (token: StorageToken): void => {\n if (!isAdminOrShare(token)) {\n throw new PermissionDeniedError({\n action: 'admin-or-share',\n reason: `role '${role(token)}' is not admin or share`,\n });\n }\n};\n\nexport const assertCanProductionManage = (token: StorageToken): void => {\n if (!isProductionManager(token)) {\n throw new PermissionDeniedError({\n action: 'production-manage',\n reason: `role '${role(token)}' is not productionManager`,\n });\n }\n};\n\nexport const assertCanDevelopOrReview = (token: StorageToken): void => {\n if (!isDeveloperOrReviewer(token)) {\n throw new PermissionDeniedError({\n action: 'develop-or-review',\n reason: `role '${role(token)}' is not developer or reviewer`,\n });\n }\n};\n","/**\n * @module domain/permissions/configurations\n *\n * Predicate pairs guarding the Core SDK configuration workflow methods\n * (create / copy / migrate-from-template / purge / assign-folder). Each\n * predicate composes the baseline admin role predicates with the caller-\n * supplied dev-mode flag from `ctx`.\n *\n * Rule shape:\n * - In a dev branch (`ctx.isDevModeActive === true`) → caller must be a\n * developer or reviewer.\n * - In production (`ctx.isDevModeActive === false`) → caller must be a\n * production manager.\n * - `canPurgeConfiguration` is **admin-only**, regardless of branch mode.\n * Purge is destructive and the situational base rule does not apply —\n * `token.admin.role` is a single scalar, so requiring both \"admin\" and\n * \"developer/reviewer/productionManager\" simultaneously would be an\n * impossible conjunction. The `ctx` parameter is accepted for signature\n * symmetry with the other configuration predicates and ignored.\n *\n * `ctx` is the trailing object argument convention for composed predicates;\n * extra fields land here as future rules grow (see AGENTS.md).\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` when the user is operating inside a\n * development branch (any storage branch other than the protected default /\n * production branch); `false` when operating on the default branch in\n * production.\n *\n * How the caller determines this:\n * - The active branch comes from the caller's own routing / app state\n * (e.g. `/branch/:branchId` in kbc-ui).\n * - A branch is \"dev mode\" when it is **not** the default branch returned by\n * `apiClient.storage.devBranches.list()` (where `isDefault === true`).\n * - kbc-ui exposes this through its `RoutesStore.getCurrentRouteParam('branchId')`\n * compared against the default branch id; the api-client itself stays\n * isomorphic and never reads that state directly.\n *\n * Why it changes the rule:\n * - In dev branches Keboola allows broader write access — `developer` and\n * `reviewer` roles may create / copy / migrate configurations because the\n * branch is sandboxed from production.\n * - On the default branch only `productionManager` (or `admin`) may perform\n * the same writes, since changes ship live to production.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"]}
1
+ {"version":3,"sources":["../../../src/domain/permissions/errors.ts","../../../src/domain/permissions/admin.ts","../../../src/domain/permissions/configurations.ts"],"names":["AdminRoles"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * Stable error contract for permission denials.\n *\n * `PermissionDeniedError` is what every `assertCan*` pair throws on denial. The\n * three public fields are part of the SDK's published contract — consumers\n * (kbc-ui, kai-agent, third-party TS callers) may pattern-match on `action`\n * and surface `reason` in UI, so renames here are breaking changes.\n *\n * PII boundary on `subject`:\n * `subject` is optional and intended for debugging hints only — admin id,\n * role name, configuration id, branch id, etc. It MUST NOT carry the full\n * `StorageToken`, raw tokens, secrets, or any value that could be logged or\n * surfaced to a user without further redaction.\n */\nexport class PermissionDeniedError extends Error {\n public readonly action: string;\n public readonly reason?: string;\n public readonly subject?: string;\n\n constructor({ action, reason, subject }: { action: string; reason?: string; subject?: string }) {\n super(reason ? `Permission denied: ${action} (${reason})` : `Permission denied: ${action}`);\n this.name = 'PermissionDeniedError';\n this.action = action;\n this.reason = reason;\n this.subject = subject;\n }\n}\n","/**\n * @module domain/permissions/admin\n *\n * Baseline admin-role predicates. Token-only — depend purely on the admin\n * role string carried in `StorageToken.admin.role`. Each predicate has an\n * `assertCan*` pair that throws `PermissionDeniedError` with a stable\n * kebab-case `action` field documented per pair.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\nimport { AdminRoles } from '../../constants';\n\nimport { PermissionDeniedError } from './errors';\n\nconst role = (token: StorageToken): string => token.admin.role;\n\nexport const isAdmin = (token: StorageToken): boolean => role(token) === AdminRoles.ADMIN;\n\nexport const isAdminOrShare = (token: StorageToken): boolean =>\n role(token) === AdminRoles.ADMIN || role(token) === AdminRoles.SHARE;\n\nexport const isProductionManager = (token: StorageToken): boolean =>\n role(token) === AdminRoles.PRODUCTION_MANAGER;\n\nexport const isDeveloperOrReviewer = (token: StorageToken): boolean =>\n role(token) === AdminRoles.DEVELOPER || role(token) === AdminRoles.REVIEWER;\n\nexport const assertCanAdmin = (token: StorageToken): void => {\n if (!isAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'admin',\n reason: `role '${role(token)}' is not admin`,\n });\n }\n};\n\nexport const assertCanAdminOrShare = (token: StorageToken): void => {\n if (!isAdminOrShare(token)) {\n throw new PermissionDeniedError({\n action: 'admin-or-share',\n reason: `role '${role(token)}' is not admin or share`,\n });\n }\n};\n\nexport const assertCanProductionManage = (token: StorageToken): void => {\n if (!isProductionManager(token)) {\n throw new PermissionDeniedError({\n action: 'production-manage',\n reason: `role '${role(token)}' is not productionManager`,\n });\n }\n};\n\nexport const assertCanDevelopOrReview = (token: StorageToken): void => {\n if (!isDeveloperOrReviewer(token)) {\n throw new PermissionDeniedError({\n action: 'develop-or-review',\n reason: `role '${role(token)}' is not developer or reviewer`,\n });\n }\n};\n","/**\n * @module domain/permissions/configurations\n *\n * Predicate pairs guarding the Core SDK configuration workflow methods\n * (create / copy / migrate-from-template / purge / assign-folder). Each\n * predicate composes the baseline admin role predicates with the caller-\n * supplied dev-mode flag from `ctx`.\n *\n * Rule shape:\n * - In a dev branch (`ctx.isDevModeActive === true`) → caller must be a\n * developer or reviewer.\n * - In production (`ctx.isDevModeActive === false`) → caller must be a\n * production manager.\n * - `canPurgeConfiguration` is **admin-only**, regardless of branch mode.\n * Purge is destructive and the situational base rule does not apply —\n * `token.admin.role` is a single scalar, so requiring both \"admin\" and\n * \"developer/reviewer/productionManager\" simultaneously would be an\n * impossible conjunction. The `ctx` parameter is accepted for signature\n * symmetry with the other configuration predicates and ignored.\n *\n * `ctx` is the trailing object argument convention for composed predicates;\n * extra fields land here as future rules grow (see AGENTS.md).\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` when the user is operating inside a\n * development branch (any storage branch other than the protected default /\n * production branch); `false` when operating on the default branch in\n * production.\n *\n * How the caller determines this:\n * - The active branch comes from the caller's own routing / app state\n * (e.g. `/branch/:branchId` in kbc-ui).\n * - A branch is \"dev mode\" when it is **not** the default branch returned by\n * `apiClient.storage.devBranches.list()` (where `isDefault === true`).\n * - kbc-ui exposes this through its `RoutesStore.getCurrentRouteParam('branchId')`\n * compared against the default branch id; the api-client itself stays\n * isomorphic and never reads that state directly.\n *\n * Why it changes the rule:\n * - In dev branches Keboola allows broader write access — `developer` and\n * `reviewer` roles may create / copy / migrate configurations because the\n * branch is sandboxed from production.\n * - On the default branch only `productionManager` (or `admin`) may perform\n * the same writes, since changes ship live to production.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"]}
@@ -1,5 +1,6 @@
1
- import { S as StorageToken } from '../../types-DYMMsuU0.cjs';
2
- export { h as hasAdminFeature, a as hasFeature } from '../../project-CYhB6rYN.cjs';
1
+ import { S as StorageToken } from '../../types-DcL25GqY.cjs';
2
+ export { h as hasAdminFeature, a as hasFeature } from '../../project-C4K5Dzoy.cjs';
3
+ import '../../types-jKnx7Tm_.cjs';
3
4
 
4
5
  /**
5
6
  * @module domain/permissions/errors
@@ -1,5 +1,6 @@
1
- import { S as StorageToken } from '../../types-DYMMsuU0.js';
2
- export { h as hasAdminFeature, a as hasFeature } from '../../project-Bzslbq4u.js';
1
+ import { S as StorageToken } from '../../types-Dfw6a58i.js';
2
+ export { h as hasAdminFeature, a as hasFeature } from '../../project-COwNmNoc.js';
3
+ import '../../types-jKnx7Tm_.js';
3
4
 
4
5
  /**
5
6
  * @module domain/permissions/errors
@@ -1,4 +1,5 @@
1
1
  export { hasAdminFeature, hasFeature } from '../../chunk-UABYNGBZ.js';
2
+ import { AdminRoles } from '../../chunk-FL54VJ35.js';
2
3
 
3
4
  // src/domain/permissions/errors.ts
4
5
  var PermissionDeniedError = class extends Error {
@@ -15,13 +16,6 @@ var PermissionDeniedError = class extends Error {
15
16
  };
16
17
 
17
18
  // src/domain/permissions/admin.ts
18
- var AdminRoles = {
19
- ADMIN: "admin",
20
- SHARE: "share",
21
- PRODUCTION_MANAGER: "productionManager",
22
- DEVELOPER: "developer",
23
- REVIEWER: "reviewer"
24
- };
25
19
  var role = (token) => token.admin.role;
26
20
  var isAdmin = (token) => role(token) === AdminRoles.ADMIN;
27
21
  var isAdminOrShare = (token) => role(token) === AdminRoles.ADMIN || role(token) === AdminRoles.SHARE;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/domain/permissions/errors.ts","../../../src/domain/permissions/admin.ts","../../../src/domain/permissions/configurations.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * Stable error contract for permission denials.\n *\n * `PermissionDeniedError` is what every `assertCan*` pair throws on denial. The\n * three public fields are part of the SDK's published contract — consumers\n * (kbc-ui, kai-agent, third-party TS callers) may pattern-match on `action`\n * and surface `reason` in UI, so renames here are breaking changes.\n *\n * PII boundary on `subject`:\n * `subject` is optional and intended for debugging hints only — admin id,\n * role name, configuration id, branch id, etc. It MUST NOT carry the full\n * `StorageToken`, raw tokens, secrets, or any value that could be logged or\n * surfaced to a user without further redaction.\n */\nexport class PermissionDeniedError extends Error {\n public readonly action: string;\n public readonly reason?: string;\n public readonly subject?: string;\n\n constructor({ action, reason, subject }: { action: string; reason?: string; subject?: string }) {\n super(reason ? `Permission denied: ${action} (${reason})` : `Permission denied: ${action}`);\n this.name = 'PermissionDeniedError';\n this.action = action;\n this.reason = reason;\n this.subject = subject;\n }\n}\n","/**\n * @module domain/permissions/admin\n *\n * Baseline admin-role predicates. Token-only — depend purely on the admin\n * role string carried in `StorageToken.admin.role`. Each predicate has an\n * `assertCan*` pair that throws `PermissionDeniedError` with a stable\n * kebab-case `action` field documented per pair.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { PermissionDeniedError } from './errors';\n\nconst AdminRoles = {\n ADMIN: 'admin',\n SHARE: 'share',\n PRODUCTION_MANAGER: 'productionManager',\n DEVELOPER: 'developer',\n REVIEWER: 'reviewer',\n} as const;\n\nconst role = (token: StorageToken): string => token.admin.role;\n\nexport const isAdmin = (token: StorageToken): boolean => role(token) === AdminRoles.ADMIN;\n\nexport const isAdminOrShare = (token: StorageToken): boolean =>\n role(token) === AdminRoles.ADMIN || role(token) === AdminRoles.SHARE;\n\nexport const isProductionManager = (token: StorageToken): boolean =>\n role(token) === AdminRoles.PRODUCTION_MANAGER;\n\nexport const isDeveloperOrReviewer = (token: StorageToken): boolean =>\n role(token) === AdminRoles.DEVELOPER || role(token) === AdminRoles.REVIEWER;\n\nexport const assertCanAdmin = (token: StorageToken): void => {\n if (!isAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'admin',\n reason: `role '${role(token)}' is not admin`,\n });\n }\n};\n\nexport const assertCanAdminOrShare = (token: StorageToken): void => {\n if (!isAdminOrShare(token)) {\n throw new PermissionDeniedError({\n action: 'admin-or-share',\n reason: `role '${role(token)}' is not admin or share`,\n });\n }\n};\n\nexport const assertCanProductionManage = (token: StorageToken): void => {\n if (!isProductionManager(token)) {\n throw new PermissionDeniedError({\n action: 'production-manage',\n reason: `role '${role(token)}' is not productionManager`,\n });\n }\n};\n\nexport const assertCanDevelopOrReview = (token: StorageToken): void => {\n if (!isDeveloperOrReviewer(token)) {\n throw new PermissionDeniedError({\n action: 'develop-or-review',\n reason: `role '${role(token)}' is not developer or reviewer`,\n });\n }\n};\n","/**\n * @module domain/permissions/configurations\n *\n * Predicate pairs guarding the Core SDK configuration workflow methods\n * (create / copy / migrate-from-template / purge / assign-folder). Each\n * predicate composes the baseline admin role predicates with the caller-\n * supplied dev-mode flag from `ctx`.\n *\n * Rule shape:\n * - In a dev branch (`ctx.isDevModeActive === true`) → caller must be a\n * developer or reviewer.\n * - In production (`ctx.isDevModeActive === false`) → caller must be a\n * production manager.\n * - `canPurgeConfiguration` is **admin-only**, regardless of branch mode.\n * Purge is destructive and the situational base rule does not apply —\n * `token.admin.role` is a single scalar, so requiring both \"admin\" and\n * \"developer/reviewer/productionManager\" simultaneously would be an\n * impossible conjunction. The `ctx` parameter is accepted for signature\n * symmetry with the other configuration predicates and ignored.\n *\n * `ctx` is the trailing object argument convention for composed predicates;\n * extra fields land here as future rules grow (see AGENTS.md).\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` when the user is operating inside a\n * development branch (any storage branch other than the protected default /\n * production branch); `false` when operating on the default branch in\n * production.\n *\n * How the caller determines this:\n * - The active branch comes from the caller's own routing / app state\n * (e.g. `/branch/:branchId` in kbc-ui).\n * - A branch is \"dev mode\" when it is **not** the default branch returned by\n * `apiClient.storage.devBranches.list()` (where `isDefault === true`).\n * - kbc-ui exposes this through its `RoutesStore.getCurrentRouteParam('branchId')`\n * compared against the default branch id; the api-client itself stays\n * isomorphic and never reads that state directly.\n *\n * Why it changes the rule:\n * - In dev branches Keboola allows broader write access — `developer` and\n * `reviewer` roles may create / copy / migrate configurations because the\n * branch is sandboxed from production.\n * - On the default branch only `productionManager` (or `admin`) may perform\n * the same writes, since changes ship live to production.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"]}
1
+ {"version":3,"sources":["../../../src/domain/permissions/errors.ts","../../../src/domain/permissions/admin.ts","../../../src/domain/permissions/configurations.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module domain/permissions/errors\n *\n * Stable error contract for permission denials.\n *\n * `PermissionDeniedError` is what every `assertCan*` pair throws on denial. The\n * three public fields are part of the SDK's published contract — consumers\n * (kbc-ui, kai-agent, third-party TS callers) may pattern-match on `action`\n * and surface `reason` in UI, so renames here are breaking changes.\n *\n * PII boundary on `subject`:\n * `subject` is optional and intended for debugging hints only — admin id,\n * role name, configuration id, branch id, etc. It MUST NOT carry the full\n * `StorageToken`, raw tokens, secrets, or any value that could be logged or\n * surfaced to a user without further redaction.\n */\nexport class PermissionDeniedError extends Error {\n public readonly action: string;\n public readonly reason?: string;\n public readonly subject?: string;\n\n constructor({ action, reason, subject }: { action: string; reason?: string; subject?: string }) {\n super(reason ? `Permission denied: ${action} (${reason})` : `Permission denied: ${action}`);\n this.name = 'PermissionDeniedError';\n this.action = action;\n this.reason = reason;\n this.subject = subject;\n }\n}\n","/**\n * @module domain/permissions/admin\n *\n * Baseline admin-role predicates. Token-only — depend purely on the admin\n * role string carried in `StorageToken.admin.role`. Each predicate has an\n * `assertCan*` pair that throws `PermissionDeniedError` with a stable\n * kebab-case `action` field documented per pair.\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\nimport { AdminRoles } from '../../constants';\n\nimport { PermissionDeniedError } from './errors';\n\nconst role = (token: StorageToken): string => token.admin.role;\n\nexport const isAdmin = (token: StorageToken): boolean => role(token) === AdminRoles.ADMIN;\n\nexport const isAdminOrShare = (token: StorageToken): boolean =>\n role(token) === AdminRoles.ADMIN || role(token) === AdminRoles.SHARE;\n\nexport const isProductionManager = (token: StorageToken): boolean =>\n role(token) === AdminRoles.PRODUCTION_MANAGER;\n\nexport const isDeveloperOrReviewer = (token: StorageToken): boolean =>\n role(token) === AdminRoles.DEVELOPER || role(token) === AdminRoles.REVIEWER;\n\nexport const assertCanAdmin = (token: StorageToken): void => {\n if (!isAdmin(token)) {\n throw new PermissionDeniedError({\n action: 'admin',\n reason: `role '${role(token)}' is not admin`,\n });\n }\n};\n\nexport const assertCanAdminOrShare = (token: StorageToken): void => {\n if (!isAdminOrShare(token)) {\n throw new PermissionDeniedError({\n action: 'admin-or-share',\n reason: `role '${role(token)}' is not admin or share`,\n });\n }\n};\n\nexport const assertCanProductionManage = (token: StorageToken): void => {\n if (!isProductionManager(token)) {\n throw new PermissionDeniedError({\n action: 'production-manage',\n reason: `role '${role(token)}' is not productionManager`,\n });\n }\n};\n\nexport const assertCanDevelopOrReview = (token: StorageToken): void => {\n if (!isDeveloperOrReviewer(token)) {\n throw new PermissionDeniedError({\n action: 'develop-or-review',\n reason: `role '${role(token)}' is not developer or reviewer`,\n });\n }\n};\n","/**\n * @module domain/permissions/configurations\n *\n * Predicate pairs guarding the Core SDK configuration workflow methods\n * (create / copy / migrate-from-template / purge / assign-folder). Each\n * predicate composes the baseline admin role predicates with the caller-\n * supplied dev-mode flag from `ctx`.\n *\n * Rule shape:\n * - In a dev branch (`ctx.isDevModeActive === true`) → caller must be a\n * developer or reviewer.\n * - In production (`ctx.isDevModeActive === false`) → caller must be a\n * production manager.\n * - `canPurgeConfiguration` is **admin-only**, regardless of branch mode.\n * Purge is destructive and the situational base rule does not apply —\n * `token.admin.role` is a single scalar, so requiring both \"admin\" and\n * \"developer/reviewer/productionManager\" simultaneously would be an\n * impossible conjunction. The `ctx` parameter is accepted for signature\n * symmetry with the other configuration predicates and ignored.\n *\n * `ctx` is the trailing object argument convention for composed predicates;\n * extra fields land here as future rules grow (see AGENTS.md).\n */\nimport type { StorageToken } from '../../clients/storage/tokens/types';\n\nimport { isAdmin, isDeveloperOrReviewer, isProductionManager } from './admin';\nimport { PermissionDeniedError } from './errors';\n\n/**\n * Caller-supplied context for configuration predicates.\n *\n * @property isDevModeActive — `true` when the user is operating inside a\n * development branch (any storage branch other than the protected default /\n * production branch); `false` when operating on the default branch in\n * production.\n *\n * How the caller determines this:\n * - The active branch comes from the caller's own routing / app state\n * (e.g. `/branch/:branchId` in kbc-ui).\n * - A branch is \"dev mode\" when it is **not** the default branch returned by\n * `apiClient.storage.devBranches.list()` (where `isDefault === true`).\n * - kbc-ui exposes this through its `RoutesStore.getCurrentRouteParam('branchId')`\n * compared against the default branch id; the api-client itself stays\n * isomorphic and never reads that state directly.\n *\n * Why it changes the rule:\n * - In dev branches Keboola allows broader write access — `developer` and\n * `reviewer` roles may create / copy / migrate configurations because the\n * branch is sandboxed from production.\n * - On the default branch only `productionManager` (or `admin`) may perform\n * the same writes, since changes ship live to production.\n */\nexport type ConfigurationCtx = {\n isDevModeActive: boolean;\n};\n\nconst meetsBaseRule = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n ctx.isDevModeActive ? isDeveloperOrReviewer(token) : isProductionManager(token);\n\nconst baseDenialReason = (ctx: ConfigurationCtx): string =>\n ctx.isDevModeActive\n ? 'dev branch requires developer or reviewer role'\n : 'production requires productionManager role';\n\nexport const canCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const canPurgeConfiguration: (token: StorageToken, ctx: ConfigurationCtx) => boolean = (\n token,\n) => isAdmin(token);\n\nexport const canAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): boolean =>\n meetsBaseRule(token, ctx);\n\nexport const assertCanCreateConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCreateConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'create-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanCopyConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canCopyConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'copy-configuration',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanMigrateFromTemplate = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canMigrateFromTemplate(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'migrate-from-template',\n reason: baseDenialReason(ctx),\n });\n }\n};\n\nexport const assertCanPurgeConfiguration = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canPurgeConfiguration(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'purge-configuration',\n reason: 'purge requires admin role',\n });\n }\n};\n\nexport const assertCanAssignFolder = (token: StorageToken, ctx: ConfigurationCtx): void => {\n if (!canAssignFolder(token, ctx)) {\n throw new PermissionDeniedError({\n action: 'assign-folder',\n reason: baseDenialReason(ctx),\n });\n }\n};\n"]}
@@ -1,267 +1,16 @@
1
1
  'use strict';
2
2
 
3
- var zod = require('zod');
3
+ var chunkUUY6LQT6_cjs = require('../../chunk-UUY6LQT6.cjs');
4
4
 
5
- // src/domain/storageTable/constants.ts
6
- var BRANCH_PREFIX_REGEX = /^(\d+)-(.+)$/;
7
- var LEGACY_BUCKET_PREFIX = "c-";
8
- var NAME_CHARSET_REGEX = /^[a-zA-Z0-9_-]+$/;
9
- var NAME_MAX_LENGTH = 96;
10
- var stageSchema = zod.z.enum(["in", "out"]);
11
- var nameSchema = zod.z.string().min(1, `Invalid name segment: must not be empty`).max(NAME_MAX_LENGTH, `Invalid name segment: exceeds ${NAME_MAX_LENGTH} characters`).refine((n) => !n.startsWith("_"), `Invalid name segment: must not start with an underscore`).regex(NAME_CHARSET_REGEX, `Invalid name segment: contains invalid characters`);
12
- var tableIdSchema = zod.z.string().refine(
13
- (id) => id.split(".").length === 3,
14
- 'Invalid table id: must be in "{stage}.{bucket}.{table}" form'
15
- ).transform((id) => id.split(".")).pipe(zod.z.tuple([stageSchema, nameSchema, nameSchema]));
16
- var bucketIdSchema = zod.z.string().refine(
17
- (id) => id.split(".").length === 2,
18
- 'Invalid bucket id: must be in "{stage}.{bucket}" form'
19
- ).transform((id) => id.split(".")).pipe(zod.z.tuple([stageSchema, nameSchema]));
20
5
 
21
- // src/domain/storageTable/codec.ts
22
- var createBucketCodec = ({
23
- useLegacyBucketPrefix,
24
- hasProtectedDefaultBranch,
25
- hasStorageBranches
26
- }) => {
27
- const decode = (name) => {
28
- const hasLegacyPrefix = useLegacyBucketPrefix && name.startsWith(LEGACY_BUCKET_PREFIX);
29
- const stripped = hasLegacyPrefix ? name.slice(LEGACY_BUCKET_PREFIX.length) : name;
30
- if (hasProtectedDefaultBranch || hasStorageBranches)
31
- return {
32
- kind: "storage-branch",
33
- baseName: stripped,
34
- hasLegacyPrefix
35
- };
36
- const branchMatch = BRANCH_PREFIX_REGEX.exec(stripped);
37
- return {
38
- kind: "legacy",
39
- hasLegacyPrefix,
40
- branchId: branchMatch?.[1] ?? null,
41
- baseName: branchMatch?.[2] ?? stripped
42
- };
43
- };
44
- const encode = (bucket) => {
45
- const stageResult = stageSchema.safeParse(bucket.stage);
46
- if (!stageResult.success) return { success: false, error: stageResult.error };
47
- const prefix = bucket.hasLegacyPrefix ? LEGACY_BUCKET_PREFIX : "";
48
- const baseNameResult = nameSchema.safeParse(bucket.baseName);
49
- if (!baseNameResult.success) return { success: false, error: baseNameResult.error };
50
- if (bucket.kind === "storage-branch") {
51
- const prefixedName2 = `${prefix}${bucket.baseName}`;
52
- return {
53
- success: true,
54
- data: {
55
- kind: "storage-branch",
56
- id: `${bucket.stage}.${prefixedName2}`,
57
- prefixedName: prefixedName2
58
- }
59
- };
60
- }
61
- const branch = bucket.branchId ? `${bucket.branchId}-` : "";
62
- const branchedName = `${branch}${bucket.baseName}`;
63
- const prefixedName = `${prefix}${branchedName}`;
64
- return {
65
- success: true,
66
- data: {
67
- kind: "legacy",
68
- id: `${bucket.stage}.${prefixedName}`,
69
- prefixedName,
70
- branchedName
71
- }
72
- };
73
- };
74
- return { decode, encode };
75
- };
76
6
 
77
- // src/domain/storageTable/model.ts
78
- var createTableModel = (options) => {
79
- const codec = createBucketCodec(options);
80
- const decodeTable = (stage, bucketName, tableName) => ({
81
- name: tableName,
82
- bucket: { ...codec.decode(bucketName), stage }
83
- });
84
- const serializeBucketDisplayName = (bucket) => {
85
- const result = codec.encode(bucket);
86
- if (!result.success) throw result.error;
87
- return result.data.kind === "storage-branch" ? bucket.baseName : result.data.branchedName;
88
- };
89
- const serializeBucketName = (bucket) => {
90
- const result = codec.encode(bucket);
91
- if (!result.success) throw result.error;
92
- return result.data.prefixedName;
93
- };
94
- const serializeBucketId = (bucket) => {
95
- const result = codec.encode(bucket);
96
- if (!result.success) throw result.error;
97
- return result.data.id;
98
- };
99
- const serializeTableId = (table) => `${serializeBucketId(table.bucket)}.${nameSchema.parse(table.name)}`;
100
- const safeSerializeBucketName = (bucket) => {
101
- const result = codec.encode(bucket);
102
- if (!result.success) return null;
103
- return result.data.prefixedName;
104
- };
105
- const safeSerializeBucketId = (bucket) => {
106
- const result = codec.encode(bucket);
107
- if (!result.success) return null;
108
- return result.data.id;
109
- };
110
- const safeSerializeTableId = (table) => {
111
- const bucketId = safeSerializeBucketId(table.bucket);
112
- const tableNameResult = nameSchema.safeParse(table.name);
113
- if (!bucketId || !tableNameResult.success) return null;
114
- return `${bucketId}.${tableNameResult.data}`;
115
- };
116
- const parse = (id) => {
117
- const data = tableIdSchema.parse(id);
118
- return decodeTable(...data);
119
- };
120
- const safeParse = (id) => {
121
- const parseResult = tableIdSchema.safeParse(id);
122
- if (!parseResult.success) return null;
123
- return decodeTable(...parseResult.data);
124
- };
125
- const parseBucket = (id) => {
126
- const [stage, bucketName] = bucketIdSchema.parse(id);
127
- return { ...codec.decode(bucketName), stage };
128
- };
129
- const safeParseBucket = (id) => {
130
- const parseResult = bucketIdSchema.safeParse(id);
131
- if (!parseResult.success) return null;
132
- const [stage, bucketName] = parseResult.data;
133
- return { ...codec.decode(bucketName), stage };
134
- };
135
- const createBucket = (input) => {
136
- const decoded = codec.decode(input.name);
137
- if (decoded.kind === "storage-branch")
138
- return { ...decoded, stage: input.stage, hasLegacyPrefix: options.useLegacyBucketPrefix };
139
- return {
140
- ...decoded,
141
- stage: input.stage,
142
- hasLegacyPrefix: options.useLegacyBucketPrefix,
143
- branchId: input.branchId ?? decoded.branchId
144
- };
145
- };
146
- const createTable = (input) => ({
147
- name: input.tableName,
148
- bucket: createBucket({ stage: input.stage, name: input.bucketName, branchId: input.branchId })
149
- });
150
- return {
151
- parse,
152
- safeParse,
153
- parseBucket,
154
- safeParseBucket,
155
- createTable,
156
- createBucket,
157
- serializeTableId,
158
- serializeBucketId,
159
- serializeBucketName,
160
- serializeBucketDisplayName,
161
- safeSerializeTableId,
162
- safeSerializeBucketId,
163
- safeSerializeBucketName
164
- };
165
- };
166
-
167
- // src/domain/storageTable/utils.ts
168
- var webalize = (str) => {
169
- const out = str.normalize("NFD").replace(/\p{M}/gu, "").toLowerCase().replace(/[^a-z0-9\-_]/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "").replace(/^_+/, "").slice(0, NAME_MAX_LENGTH).replace(/-+$/g, "");
170
- if (out.length === 0) {
171
- throw new Error(`Cannot webalize "${str}" into a valid name segment`);
172
- }
173
- return out;
174
- };
175
-
176
- // src/domain/storageTable/createStorageTable.ts
177
- var createStorageTable = (flags) => {
178
- const model = createTableModel(flags);
179
- const branchIt = (bucket, branchId) => bucket.kind !== "legacy" ? bucket : { ...bucket, branchId };
180
- const unbranchIt = (bucket, branchId) => bucket.kind !== "legacy" || bucket.branchId !== branchId ? bucket : { ...bucket, branchId: null };
181
- const make = (bucket, tableName) => {
182
- const self = {
183
- bucket,
184
- name: tableName,
185
- isInBranch: (branchId) => bucket.kind === "legacy" && bucket.branchId === branchId,
186
- addBranch: (branchId) => {
187
- if (branchId.length === 0) throw new Error("branchId is required");
188
- return make(branchIt(bucket, branchId), tableName);
189
- },
190
- removeBranch: (branchId) => {
191
- if (branchId.length === 0) throw new Error("branchId is required");
192
- return make(unbranchIt(bucket, branchId), tableName);
193
- },
194
- addTableName: (name) => {
195
- if (name.length === 0) throw new Error("tableName is required");
196
- return make(bucket, name);
197
- },
198
- getBucketName: () => model.serializeBucketName(bucket),
199
- getBucketDisplayName: () => model.serializeBucketDisplayName(bucket),
200
- getBucketBaseName: () => bucket.baseName,
201
- getTableName: () => {
202
- if (tableName === null)
203
- throw new Error(
204
- "getTableName() requires a table name \u2014 instance was built via createBucket"
205
- );
206
- return tableName;
207
- },
208
- getBucketId: () => model.serializeBucketId(bucket),
209
- getTableId: () => model.serializeTableId({ bucket, name: tableName ?? "" }),
210
- getSafeBucketId: () => model.safeSerializeBucketId(bucket),
211
- getSafeTableId: () => model.safeSerializeTableId({ bucket, name: tableName ?? "" })
212
- };
213
- return self;
214
- };
215
- const parse = (id) => {
216
- const table = model.parse(id);
217
- return make(table.bucket, table.name);
218
- };
219
- const safeParse = (id) => {
220
- const table = model.safeParse(id);
221
- return table ? make(table.bucket, table.name) : null;
222
- };
223
- const parseBucket = (id) => make(model.parseBucket(id), null);
224
- const safeParseBucket = (id) => {
225
- const bucket = model.safeParseBucket(id);
226
- return bucket ? make(bucket, null) : null;
227
- };
228
- const createTable = (input) => {
229
- const { bucket, name } = model.createTable(input);
230
- return make(bucket, name);
231
- };
232
- const createBucket = (input) => make(model.createBucket(input), null);
233
- return {
234
- // generic
235
- parse,
236
- safeParse,
237
- parseBucket,
238
- safeParseBucket,
239
- createTable,
240
- createBucket,
241
- // Business
242
- createDefaultCsvImportTable: (configId) => {
243
- const bucketName = flags.useLegacyBucketPrefix ? "c-csv-import" : webalize(`keboola.csv-import-${configId}`);
244
- const tableName = flags.useLegacyBucketPrefix ? configId : "data";
245
- return createTable({
246
- stage: "in",
247
- tableName,
248
- bucketName
249
- });
250
- },
251
- createDefaultBucket: ({ stage, name }) => createBucket({ stage, name: webalize(name) }),
252
- safeCreateDefaultBucket: ({ stage, name }) => {
253
- try {
254
- return createBucket({ stage, name: webalize(name) });
255
- } catch {
256
- return null;
257
- }
258
- },
259
- createDefaultConfigBucket: ({ stage, componentId, configId }) => createBucket({ stage, name: webalize(`${componentId}-${configId}`) }),
260
- createDefaultConfigTable: ({ stage, componentId, configId, tableName }) => createTable({ stage, bucketName: webalize(`${componentId}-${configId}`), tableName })
261
- };
262
- };
263
-
264
- exports.createStorageTable = createStorageTable;
265
- exports.createTableModel = createTableModel;
7
+ Object.defineProperty(exports, "createStorageTable", {
8
+ enumerable: true,
9
+ get: function () { return chunkUUY6LQT6_cjs.createStorageTable; }
10
+ });
11
+ Object.defineProperty(exports, "createTableModel", {
12
+ enumerable: true,
13
+ get: function () { return chunkUUY6LQT6_cjs.createTableModel; }
14
+ });
266
15
  //# sourceMappingURL=index.cjs.map
267
16
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/domain/storageTable/constants.ts","../../../src/domain/storageTable/schema.ts","../../../src/domain/storageTable/codec.ts","../../../src/domain/storageTable/model.ts","../../../src/domain/storageTable/utils.ts","../../../src/domain/storageTable/createStorageTable.ts"],"names":["z","prefixedName"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Matches a numeric dev-branch prefix on a legacy-prefix-stripped bucket name. */\nexport const BRANCH_PREFIX_REGEX = /^(\\d+)-(.+)$/;\n/** Historical `c-` prefix Storage prepends to legacy bucket names. */\nexport const LEGACY_BUCKET_PREFIX = 'c-';\n/** Characters allowed in a bucket or table name segment. */\nexport const NAME_CHARSET_REGEX = /^[a-zA-Z0-9_-]+$/;\n/** Max length of a bucket or table name segment. */\nexport const NAME_MAX_LENGTH = 96;\n","import { z } from 'zod';\n\nimport { NAME_CHARSET_REGEX, NAME_MAX_LENGTH } from './constants';\n\nexport const stageSchema = z.enum(['in', 'out']);\n\nexport const nameSchema = z\n .string()\n .min(1, `Invalid name segment: must not be empty`)\n .max(NAME_MAX_LENGTH, `Invalid name segment: exceeds ${NAME_MAX_LENGTH} characters`)\n .refine((n) => !n.startsWith('_'), `Invalid name segment: must not start with an underscore`)\n .regex(NAME_CHARSET_REGEX, `Invalid name segment: contains invalid characters`);\n\nexport const tableIdSchema = z\n .string()\n .refine(\n (id) => id.split('.').length === 3,\n 'Invalid table id: must be in \"{stage}.{bucket}.{table}\" form',\n )\n .transform((id) => id.split('.') as [string, string, string])\n .pipe(z.tuple([stageSchema, nameSchema, nameSchema]));\n\nexport const bucketIdSchema = z\n .string()\n .refine(\n (id) => id.split('.').length === 2,\n 'Invalid bucket id: must be in \"{stage}.{bucket}\" form',\n )\n .transform((id) => id.split('.') as [string, string])\n .pipe(z.tuple([stageSchema, nameSchema]));\n","import type z from 'zod';\n\nimport { BRANCH_PREFIX_REGEX, LEGACY_BUCKET_PREFIX } from './constants';\nimport { nameSchema, stageSchema } from './schema';\nimport type {\n Bucket,\n BucketId,\n BucketName,\n LegacyBucket,\n ModelOptions,\n ParsedBucket,\n StorageBranchBucket,\n} from './types';\n\ntype EncodedBucket =\n | {\n kind: 'legacy';\n id: BucketId;\n /** baseName + `{branchId}-` prefix, without `c-`. User-facing. e.g. `123-main` */\n branchedName: BucketName;\n /** baseName + branch + `c-` prefix. On-disk (Storage `bucket.name`). e.g. `c-123-main` */\n prefixedName: BucketName;\n }\n | {\n kind: 'storage-branch';\n id: BucketId;\n /** baseName + `c-` prefix when hasLegacyPrefix. On-disk (Storage `bucket.name`). e.g. `c-main` */\n prefixedName: BucketName;\n };\n\nexport const createBucketCodec = ({\n useLegacyBucketPrefix,\n hasProtectedDefaultBranch,\n hasStorageBranches,\n}: ModelOptions) => {\n const decode = (name: BucketName): ParsedBucket => {\n const hasLegacyPrefix = useLegacyBucketPrefix && name.startsWith(LEGACY_BUCKET_PREFIX);\n const stripped = hasLegacyPrefix ? name.slice(LEGACY_BUCKET_PREFIX.length) : name;\n\n // Native branched storage: branch is BE-side (no `{branchId}-` decoration), but the\n // legacy `c-` prefix is still applied independently of the branch model.\n if (hasProtectedDefaultBranch || hasStorageBranches)\n return {\n kind: 'storage-branch',\n baseName: stripped,\n hasLegacyPrefix,\n } satisfies StorageBranchBucket;\n\n const branchMatch = BRANCH_PREFIX_REGEX.exec(stripped);\n\n return {\n kind: 'legacy',\n hasLegacyPrefix,\n branchId: branchMatch?.[1] ?? null,\n baseName: branchMatch?.[2] ?? stripped,\n } satisfies LegacyBucket;\n };\n\n const encode = (\n bucket: Bucket,\n ): { success: true; data: EncodedBucket } | { success: false; error: z.ZodError<string> } => {\n const stageResult = stageSchema.safeParse(bucket.stage);\n if (!stageResult.success) return { success: false, error: stageResult.error };\n\n const prefix = bucket.hasLegacyPrefix ? LEGACY_BUCKET_PREFIX : '';\n const baseNameResult = nameSchema.safeParse(bucket.baseName);\n if (!baseNameResult.success) return { success: false, error: baseNameResult.error };\n\n if (bucket.kind === 'storage-branch') {\n const prefixedName = `${prefix}${bucket.baseName}`;\n\n return {\n success: true,\n data: {\n kind: 'storage-branch',\n id: `${bucket.stage}.${prefixedName}` satisfies BucketId,\n prefixedName,\n },\n };\n }\n\n const branch = bucket.branchId ? `${bucket.branchId}-` : '';\n const branchedName = `${branch}${bucket.baseName}`;\n const prefixedName = `${prefix}${branchedName}`;\n\n return {\n success: true,\n data: {\n kind: 'legacy',\n id: `${bucket.stage}.${prefixedName}` satisfies BucketId,\n prefixedName,\n branchedName,\n },\n };\n };\n\n return { decode, encode };\n};\n","import { createBucketCodec } from './codec';\nimport { bucketIdSchema, nameSchema, tableIdSchema } from './schema';\nimport type {\n Bucket,\n BucketId,\n BucketName,\n BucketStage,\n ModelOptions,\n Table,\n TableId,\n TableName,\n} from './types';\n\nexport type CreateBucketFn = (input: {\n stage: BucketStage;\n name: BucketName;\n branchId?: string | null;\n}) => Bucket;\n\nexport type CreateTableFn = (input: {\n stage: BucketStage;\n tableName: TableName;\n bucketName: BucketName;\n branchId?: string | null;\n}) => Table;\n\nexport type TableModel = {\n parse(id: string): Table;\n parseBucket(id: string): Bucket;\n\n safeParse(id: string): Table | null;\n safeParseBucket(id: string): Bucket | null;\n\n serializeTableId(table: Table): TableId;\n serializeBucketId(bucket: Bucket): BucketId;\n serializeBucketName(bucket: Bucket): BucketName;\n serializeBucketDisplayName(bucket: Bucket): BucketName;\n\n safeSerializeTableId(table: Table): TableId | null;\n safeSerializeBucketId(bucket: Bucket): BucketId | null;\n safeSerializeBucketName(bucket: Bucket): BucketName | null;\n\n createTable: CreateTableFn;\n createBucket: CreateBucketFn;\n};\n\nexport const createTableModel = (options: ModelOptions): TableModel => {\n const codec = createBucketCodec(options);\n\n const decodeTable = (stage: BucketStage, bucketName: string, tableName: string): Table => ({\n name: tableName,\n bucket: { ...codec.decode(bucketName), stage },\n });\n\n const serializeBucketDisplayName = (bucket: Bucket) => {\n const result = codec.encode(bucket);\n if (!result.success) throw result.error;\n // Storage-branch display name is just the bare baseName (no branch decoration to apply);\n // encode is still called so the empty-name guard throws consistently.\n return result.data.kind === 'storage-branch' ? bucket.baseName : result.data.branchedName;\n };\n\n const serializeBucketName = (bucket: Bucket) => {\n const result = codec.encode(bucket);\n if (!result.success) throw result.error;\n return result.data.prefixedName;\n };\n\n const serializeBucketId = (bucket: Bucket): BucketId => {\n const result = codec.encode(bucket);\n if (!result.success) throw result.error;\n return result.data.id;\n };\n\n const serializeTableId = (table: Table): TableId =>\n `${serializeBucketId(table.bucket)}.${nameSchema.parse(table.name)}`;\n\n // Safe counterparts: return null instead of throwing when a required segment is empty.\n const safeSerializeBucketName = (bucket: Bucket): BucketName | null => {\n const result = codec.encode(bucket);\n if (!result.success) return null;\n return result.data.prefixedName;\n };\n\n const safeSerializeBucketId = (bucket: Bucket): BucketId | null => {\n const result = codec.encode(bucket);\n if (!result.success) return null;\n return result.data.id;\n };\n\n const safeSerializeTableId = (table: Table): TableId | null => {\n const bucketId = safeSerializeBucketId(table.bucket);\n const tableNameResult = nameSchema.safeParse(table.name);\n if (!bucketId || !tableNameResult.success) return null;\n return `${bucketId}.${tableNameResult.data}`;\n };\n\n const parse = (id: string) => {\n const data = tableIdSchema.parse(id);\n return decodeTable(...data);\n };\n\n const safeParse = (id: string): Table | null => {\n const parseResult = tableIdSchema.safeParse(id);\n if (!parseResult.success) return null;\n return decodeTable(...parseResult.data);\n };\n\n const parseBucket = (id: string): Bucket => {\n const [stage, bucketName] = bucketIdSchema.parse(id);\n return { ...codec.decode(bucketName), stage };\n };\n\n const safeParseBucket = (id: string): Bucket | null => {\n const parseResult = bucketIdSchema.safeParse(id);\n if (!parseResult.success) return null;\n const [stage, bucketName] = parseResult.data;\n return { ...codec.decode(bucketName), stage };\n };\n\n const createBucket: CreateBucketFn = (input) => {\n // Normalize the input the same way decoding does (strips a `c-`/`{branchId}-`\n // a caller may have passed), so `baseName` always holds the bare name.\n const decoded = codec.decode(input.name);\n // On create the prefix is decided by the project flag — not by whether the\n // input happened to start with `c-`. This applies to both bucket models.\n if (decoded.kind === 'storage-branch')\n return { ...decoded, stage: input.stage, hasLegacyPrefix: options.useLegacyBucketPrefix };\n\n return {\n ...decoded,\n stage: input.stage,\n hasLegacyPrefix: options.useLegacyBucketPrefix,\n branchId: input.branchId ?? decoded.branchId,\n };\n };\n\n const createTable: CreateTableFn = (input) => ({\n name: input.tableName,\n bucket: createBucket({ stage: input.stage, name: input.bucketName, branchId: input.branchId }),\n });\n\n return {\n parse,\n safeParse,\n parseBucket,\n safeParseBucket,\n\n createTable,\n createBucket,\n\n serializeTableId,\n serializeBucketId,\n serializeBucketName,\n serializeBucketDisplayName,\n\n safeSerializeTableId,\n safeSerializeBucketId,\n safeSerializeBucketName,\n };\n};\n","import { NAME_MAX_LENGTH } from './constants';\n\nexport const webalize = (str: string): string => {\n const out = str\n .normalize('NFD')\n .replace(/\\p{M}/gu, '') // strip diacritics after NFD decomposition: á→a, č→c, ý→y …\n .toLowerCase()\n .replace(/[^a-z0-9\\-_]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '')\n .replace(/^_+/, '')\n .slice(0, NAME_MAX_LENGTH)\n .replace(/-+$/g, '');\n\n if (out.length === 0) {\n throw new Error(`Cannot webalize \"${str}\" into a valid name segment`);\n }\n\n return out;\n};\n","import { type CreateBucketFn, type CreateTableFn, createTableModel } from './model';\nimport type {\n Bucket,\n BucketId,\n BucketName,\n BucketStage,\n ModelOptions,\n TableId,\n TableName,\n} from './types';\nimport { webalize } from './utils';\n\nexport type StorageTableInstance = {\n readonly bucket: Bucket;\n readonly name: TableName | null;\n isInBranch(branchId: string): boolean;\n addBranch(branchId: string): StorageTableInstance;\n removeBranch(branchId: string): StorageTableInstance;\n /** A new instance with the table name set (or replaced). */\n addTableName(tableName: TableName): StorageTableInstance;\n getBucketName(): BucketName;\n /** Bucket name as shown to users: dev-branch prefix kept, legacy `c-` prefix always dropped. */\n getBucketDisplayName(): BucketName;\n /** Bare bucket name: no `c-` prefix, no dev-branch prefix (legacy `baseName`, or the canonical storage-branch name). */\n getBucketBaseName(): BucketName;\n getBucketId(): BucketId;\n getSafeBucketId(): BucketId | null;\n /** @throws when there is no table name (the instance was built via `createBucket`). */\n getTableName(): TableName;\n /** @throws when there is no table name (the instance was built via `createBucket`). */\n getTableId(): TableId;\n /** Null when there is no table name (built via `createBucket`) or a segment is empty. */\n getSafeTableId(): TableId | null;\n};\n\nexport type StorageTable = {\n parse(id: string): StorageTableInstance;\n safeParse(id: string): StorageTableInstance | null;\n /** Decode a bucket id (`{stage}.{bucket}`) into a bucket-only instance. */\n parseBucket(id: string): StorageTableInstance;\n safeParseBucket(id: string): StorageTableInstance | null;\n createTable(input: Parameters<CreateTableFn>[0]): StorageTableInstance;\n createBucket(input: Parameters<CreateBucketFn>[0]): StorageTableInstance;\n\n // Business\n createDefaultBucket(input: { stage: BucketStage; name: string }): StorageTableInstance;\n /** Like `createDefaultBucket`, but returns null instead of throwing when the name sanitizes to an empty/invalid segment. */\n safeCreateDefaultBucket(input: { stage: BucketStage; name: string }): StorageTableInstance | null;\n createDefaultConfigBucket(input: {\n stage: BucketStage;\n componentId: string;\n configId: string;\n }): StorageTableInstance;\n createDefaultConfigTable(input: {\n stage: BucketStage;\n componentId: string;\n configId: string;\n tableName: string;\n }): StorageTableInstance;\n createDefaultCsvImportTable(configId: string): StorageTableInstance;\n};\n\nexport const createStorageTable = (flags: ModelOptions): StorageTable => {\n const model = createTableModel(flags);\n\n const branchIt = (bucket: Bucket, branchId: string): Bucket =>\n bucket.kind !== 'legacy' ? bucket : { ...bucket, branchId };\n\n const unbranchIt = (bucket: Bucket, branchId: string): Bucket =>\n bucket.kind !== 'legacy' || bucket.branchId !== branchId\n ? bucket\n : { ...bucket, branchId: null };\n\n const make = (bucket: Bucket, tableName: TableName | null): StorageTableInstance => {\n const self: StorageTableInstance = {\n bucket,\n name: tableName,\n isInBranch: (branchId) => bucket.kind === 'legacy' && bucket.branchId === branchId,\n addBranch: (branchId) => {\n if (branchId.length === 0) throw new Error('branchId is required');\n return make(branchIt(bucket, branchId), tableName);\n },\n removeBranch: (branchId) => {\n if (branchId.length === 0) throw new Error('branchId is required');\n return make(unbranchIt(bucket, branchId), tableName);\n },\n addTableName: (name) => {\n if (name.length === 0) throw new Error('tableName is required');\n return make(bucket, name);\n },\n\n getBucketName: () => model.serializeBucketName(bucket),\n getBucketDisplayName: () => model.serializeBucketDisplayName(bucket),\n getBucketBaseName: () => bucket.baseName,\n getTableName: () => {\n if (tableName === null)\n throw new Error(\n 'getTableName() requires a table name — instance was built via createBucket',\n );\n return tableName;\n },\n\n getBucketId: () => model.serializeBucketId(bucket),\n getTableId: () => model.serializeTableId({ bucket, name: tableName ?? '' }),\n\n getSafeBucketId: () => model.safeSerializeBucketId(bucket),\n getSafeTableId: () => model.safeSerializeTableId({ bucket, name: tableName ?? '' }),\n };\n\n return self;\n };\n\n const parse = (id: TableId) => {\n const table = model.parse(id);\n return make(table.bucket, table.name);\n };\n const safeParse = (id: TableId) => {\n const table = model.safeParse(id);\n return table ? make(table.bucket, table.name) : null;\n };\n\n const parseBucket = (id: BucketId) => make(model.parseBucket(id), null);\n\n const safeParseBucket = (id: BucketId) => {\n const bucket = model.safeParseBucket(id);\n return bucket ? make(bucket, null) : null;\n };\n\n const createTable = (input: Parameters<CreateTableFn>[0]) => {\n const { bucket, name } = model.createTable(input);\n return make(bucket, name);\n };\n\n const createBucket = (input: Parameters<CreateBucketFn>[0]): StorageTableInstance =>\n make(model.createBucket(input), null);\n\n return {\n // generic\n parse,\n safeParse,\n parseBucket,\n safeParseBucket,\n createTable,\n createBucket,\n\n // Business\n createDefaultCsvImportTable: (configId: string) => {\n const bucketName = flags.useLegacyBucketPrefix\n ? 'c-csv-import'\n : webalize(`keboola.csv-import-${configId}`);\n const tableName = flags.useLegacyBucketPrefix ? configId : 'data';\n\n return createTable({\n stage: 'in',\n tableName,\n bucketName,\n });\n },\n createDefaultBucket: ({ stage, name }) => createBucket({ stage, name: webalize(name) }),\n safeCreateDefaultBucket: ({ stage, name }) => {\n try {\n return createBucket({ stage, name: webalize(name) });\n } catch {\n // webalize() throws when the input sanitizes to an empty name segment — surface as null per the safe-* contract\n return null;\n }\n },\n createDefaultConfigBucket: ({ stage, componentId, configId }) =>\n createBucket({ stage, name: webalize(`${componentId}-${configId}`) }),\n createDefaultConfigTable: ({ stage, componentId, configId, tableName }) =>\n createTable({ stage, bucketName: webalize(`${componentId}-${configId}`), tableName }),\n };\n};\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}