@orizm/cli 2.2.6 → 3.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 (320) hide show
  1. package/README.md +111 -4
  2. package/dist/array-update-CMFUoQEe.mjs +41 -0
  3. package/dist/array-update-CMFUoQEe.mjs.map +1 -0
  4. package/dist/array-update-Dch4e9tI.cjs +58 -0
  5. package/dist/array-update-Dch4e9tI.cjs.map +1 -0
  6. package/dist/auth-BGW072BP.mjs +18 -0
  7. package/dist/auth-BGW072BP.mjs.map +1 -0
  8. package/dist/auth-CNbONZuf.cjs +18 -0
  9. package/dist/auth-CNbONZuf.cjs.map +1 -0
  10. package/dist/bucket-6d3VNt1D.mjs +17 -0
  11. package/dist/bucket-6d3VNt1D.mjs.map +1 -0
  12. package/dist/bucket-DjbHz9_A.cjs +17 -0
  13. package/dist/bucket-DjbHz9_A.cjs.map +1 -0
  14. package/dist/cli/main.cjs +231 -0
  15. package/dist/cli/main.cjs.map +1 -0
  16. package/dist/cli/main.d.cts +1 -0
  17. package/dist/cli/main.d.mts +1 -0
  18. package/dist/cli/main.mjs +196 -0
  19. package/dist/cli/main.mjs.map +1 -0
  20. package/dist/cms-BJnovGYT.mjs +172 -0
  21. package/dist/cms-BJnovGYT.mjs.map +1 -0
  22. package/dist/cms-Cnx-lDGu.cjs +172 -0
  23. package/dist/cms-Cnx-lDGu.cjs.map +1 -0
  24. package/dist/codegen-BF5b-u46.cjs +17 -0
  25. package/dist/codegen-BF5b-u46.cjs.map +1 -0
  26. package/dist/codegen-DZOB4ttR.mjs +17 -0
  27. package/dist/codegen-DZOB4ttR.mjs.map +1 -0
  28. package/dist/config/index.cjs +49 -96
  29. package/dist/config/index.cjs.map +1 -1
  30. package/dist/config/index.d.cts +1 -53
  31. package/dist/config/{index.d.ts → index.d.mts} +29 -27
  32. package/dist/config/index.d.mts.map +1 -0
  33. package/dist/config/index.mjs +59 -0
  34. package/dist/config/index.mjs.map +1 -0
  35. package/dist/config-loader-BEgS869e.mjs +65 -0
  36. package/dist/config-loader-BEgS869e.mjs.map +1 -0
  37. package/dist/config-loader-D8x32gEU.cjs +78 -0
  38. package/dist/config-loader-D8x32gEU.cjs.map +1 -0
  39. package/dist/confirm-delete-B9o73U7B.cjs +19 -0
  40. package/dist/confirm-delete-B9o73U7B.cjs.map +1 -0
  41. package/dist/confirm-delete-CsWkW69-.mjs +14 -0
  42. package/dist/confirm-delete-CsWkW69-.mjs.map +1 -0
  43. package/dist/consumer-BBsH8b1j.cjs +18 -0
  44. package/dist/consumer-BBsH8b1j.cjs.map +1 -0
  45. package/dist/consumer-DqyRfpsl.mjs +18 -0
  46. package/dist/consumer-DqyRfpsl.mjs.map +1 -0
  47. package/dist/consumer-OF6Z_eTP.cjs +95 -0
  48. package/dist/consumer-OF6Z_eTP.cjs.map +1 -0
  49. package/dist/consumer-pU2HyiyA.mjs +95 -0
  50. package/dist/consumer-pU2HyiyA.mjs.map +1 -0
  51. package/dist/content-BsoRmjis.mjs +20 -0
  52. package/dist/content-BsoRmjis.mjs.map +1 -0
  53. package/dist/content-Y-2Y0cyn.cjs +20 -0
  54. package/dist/content-Y-2Y0cyn.cjs.map +1 -0
  55. package/dist/create--1NYduI_.cjs +58 -0
  56. package/dist/create--1NYduI_.cjs.map +1 -0
  57. package/dist/create-B-PAOor6.mjs +66 -0
  58. package/dist/create-B-PAOor6.mjs.map +1 -0
  59. package/dist/create-BNYWcyuQ.cjs +66 -0
  60. package/dist/create-BNYWcyuQ.cjs.map +1 -0
  61. package/dist/create-B_gsZCL-.cjs +54 -0
  62. package/dist/create-B_gsZCL-.cjs.map +1 -0
  63. package/dist/create-BqlxdhcR.mjs +81 -0
  64. package/dist/create-BqlxdhcR.mjs.map +1 -0
  65. package/dist/create-CC814ixh.mjs +66 -0
  66. package/dist/create-CC814ixh.mjs.map +1 -0
  67. package/dist/create-CkFBiEDH.mjs +58 -0
  68. package/dist/create-CkFBiEDH.mjs.map +1 -0
  69. package/dist/create-CykRHseR.cjs +81 -0
  70. package/dist/create-CykRHseR.cjs.map +1 -0
  71. package/dist/create-RLyp_dl6.mjs +54 -0
  72. package/dist/create-RLyp_dl6.mjs.map +1 -0
  73. package/dist/create-Z-z3LXNW.cjs +66 -0
  74. package/dist/create-Z-z3LXNW.cjs.map +1 -0
  75. package/dist/delete-8yZ3j0vX.cjs +59 -0
  76. package/dist/delete-8yZ3j0vX.cjs.map +1 -0
  77. package/dist/delete-BOUObrDw.mjs +48 -0
  78. package/dist/delete-BOUObrDw.mjs.map +1 -0
  79. package/dist/delete-BSLIXrAh.mjs +59 -0
  80. package/dist/delete-BSLIXrAh.mjs.map +1 -0
  81. package/dist/delete-BenBNL2p.mjs +56 -0
  82. package/dist/delete-BenBNL2p.mjs.map +1 -0
  83. package/dist/delete-Bx2oNROv.cjs +56 -0
  84. package/dist/delete-Bx2oNROv.cjs.map +1 -0
  85. package/dist/delete-CCTiCYIL.cjs +51 -0
  86. package/dist/delete-CCTiCYIL.cjs.map +1 -0
  87. package/dist/delete-CGW0VMK6.cjs +56 -0
  88. package/dist/delete-CGW0VMK6.cjs.map +1 -0
  89. package/dist/delete-CIYY59v_.cjs +48 -0
  90. package/dist/delete-CIYY59v_.cjs.map +1 -0
  91. package/dist/delete-CSSd0gmt.mjs +56 -0
  92. package/dist/delete-CSSd0gmt.mjs.map +1 -0
  93. package/dist/delete-CSs5Czlo.mjs +59 -0
  94. package/dist/delete-CSs5Czlo.mjs.map +1 -0
  95. package/dist/delete-CrOVRvMo.cjs +56 -0
  96. package/dist/delete-CrOVRvMo.cjs.map +1 -0
  97. package/dist/delete-DehKYCXh.mjs +56 -0
  98. package/dist/delete-DehKYCXh.mjs.map +1 -0
  99. package/dist/delete-DhSU-Lx2.mjs +51 -0
  100. package/dist/delete-DhSU-Lx2.mjs.map +1 -0
  101. package/dist/delete-DozSxZQ7.cjs +59 -0
  102. package/dist/delete-DozSxZQ7.cjs.map +1 -0
  103. package/dist/detail-8CXNIhKw.cjs +16 -0
  104. package/dist/detail-8CXNIhKw.cjs.map +1 -0
  105. package/dist/detail-DN5jCQ4N.mjs +10 -0
  106. package/dist/detail-DN5jCQ4N.mjs.map +1 -0
  107. package/dist/download-oFGzg30E.mjs +68 -0
  108. package/dist/download-oFGzg30E.mjs.map +1 -0
  109. package/dist/download-ogGbb3FU.cjs +68 -0
  110. package/dist/download-ogGbb3FU.cjs.map +1 -0
  111. package/dist/erd-lKC5NB2l.cjs +124 -0
  112. package/dist/erd-lKC5NB2l.cjs.map +1 -0
  113. package/dist/erd-zDoF6I_y.mjs +123 -0
  114. package/dist/erd-zDoF6I_y.mjs.map +1 -0
  115. package/dist/get-BBOKSXkh.cjs +48 -0
  116. package/dist/get-BBOKSXkh.cjs.map +1 -0
  117. package/dist/get-BHniACk5.cjs +57 -0
  118. package/dist/get-BHniACk5.cjs.map +1 -0
  119. package/dist/get-BtmzDaVn.mjs +47 -0
  120. package/dist/get-BtmzDaVn.mjs.map +1 -0
  121. package/dist/get-CVV3h6HR.cjs +47 -0
  122. package/dist/get-CVV3h6HR.cjs.map +1 -0
  123. package/dist/get-CgEgETQa.mjs +52 -0
  124. package/dist/get-CgEgETQa.mjs.map +1 -0
  125. package/dist/get-DB80UNSR.mjs +47 -0
  126. package/dist/get-DB80UNSR.mjs.map +1 -0
  127. package/dist/get-DBxhbN1G.mjs +57 -0
  128. package/dist/get-DBxhbN1G.mjs.map +1 -0
  129. package/dist/get-DDB89cOs.mjs +48 -0
  130. package/dist/get-DDB89cOs.mjs.map +1 -0
  131. package/dist/get-DPGx1zU4.mjs +56 -0
  132. package/dist/get-DPGx1zU4.mjs.map +1 -0
  133. package/dist/get-IOU__2RP.cjs +52 -0
  134. package/dist/get-IOU__2RP.cjs.map +1 -0
  135. package/dist/get-KdWfYINc.cjs +47 -0
  136. package/dist/get-KdWfYINc.cjs.map +1 -0
  137. package/dist/get-jwXRlIBJ.cjs +57 -0
  138. package/dist/get-jwXRlIBJ.cjs.map +1 -0
  139. package/dist/group-roles-BEEzLxPX.mjs +36 -0
  140. package/dist/group-roles-BEEzLxPX.mjs.map +1 -0
  141. package/dist/group-roles-Bl_mEodO.cjs +59 -0
  142. package/dist/group-roles-Bl_mEodO.cjs.map +1 -0
  143. package/dist/invite-DsOCKGTJ.mjs +66 -0
  144. package/dist/invite-DsOCKGTJ.mjs.map +1 -0
  145. package/dist/invite-Dts9uNQL.cjs +66 -0
  146. package/dist/invite-Dts9uNQL.cjs.map +1 -0
  147. package/dist/key-BogfSiz_.mjs +17 -0
  148. package/dist/key-BogfSiz_.mjs.map +1 -0
  149. package/dist/key-Czwiu2pW.cjs +17 -0
  150. package/dist/key-Czwiu2pW.cjs.map +1 -0
  151. package/dist/link-BluFyxEL.mjs +42 -0
  152. package/dist/link-BluFyxEL.mjs.map +1 -0
  153. package/dist/link-DYu1Vjlw.cjs +42 -0
  154. package/dist/link-DYu1Vjlw.cjs.map +1 -0
  155. package/dist/list-2BpPj4Z0.cjs +40 -0
  156. package/dist/list-2BpPj4Z0.cjs.map +1 -0
  157. package/dist/list-57TUfNFd.mjs +48 -0
  158. package/dist/list-57TUfNFd.mjs.map +1 -0
  159. package/dist/list-60NcDr0q.cjs +81 -0
  160. package/dist/list-60NcDr0q.cjs.map +1 -0
  161. package/dist/list-BRh59EqI.cjs +35 -0
  162. package/dist/list-BRh59EqI.cjs.map +1 -0
  163. package/dist/list-BwfpuhmJ.cjs +37 -0
  164. package/dist/list-BwfpuhmJ.cjs.map +1 -0
  165. package/dist/list-CJuefq_I.cjs +82 -0
  166. package/dist/list-CJuefq_I.cjs.map +1 -0
  167. package/dist/list-CYE9Exi3.cjs +72 -0
  168. package/dist/list-CYE9Exi3.cjs.map +1 -0
  169. package/dist/list-CbvEh7eA.mjs +35 -0
  170. package/dist/list-CbvEh7eA.mjs.map +1 -0
  171. package/dist/list-CfIeReBx.mjs +82 -0
  172. package/dist/list-CfIeReBx.mjs.map +1 -0
  173. package/dist/list-CxHDoXjv.mjs +81 -0
  174. package/dist/list-CxHDoXjv.mjs.map +1 -0
  175. package/dist/list-D0-QrWmn.cjs +51 -0
  176. package/dist/list-D0-QrWmn.cjs.map +1 -0
  177. package/dist/list-D24J_Qbm.mjs +49 -0
  178. package/dist/list-D24J_Qbm.mjs.map +1 -0
  179. package/dist/list-D5PSDMWw.mjs +51 -0
  180. package/dist/list-D5PSDMWw.mjs.map +1 -0
  181. package/dist/list-DRKF2uKW.cjs +95 -0
  182. package/dist/list-DRKF2uKW.cjs.map +1 -0
  183. package/dist/list-DdJ05juK.mjs +72 -0
  184. package/dist/list-DdJ05juK.mjs.map +1 -0
  185. package/dist/list-DlJssPwy.cjs +48 -0
  186. package/dist/list-DlJssPwy.cjs.map +1 -0
  187. package/dist/list-V3W6hvOa.cjs +49 -0
  188. package/dist/list-V3W6hvOa.cjs.map +1 -0
  189. package/dist/list-rAn3uOA7.mjs +37 -0
  190. package/dist/list-rAn3uOA7.mjs.map +1 -0
  191. package/dist/list-syVDGkVR.mjs +40 -0
  192. package/dist/list-syVDGkVR.mjs.map +1 -0
  193. package/dist/list-yQZLzkC7.mjs +95 -0
  194. package/dist/list-yQZLzkC7.mjs.map +1 -0
  195. package/dist/login-2XcHd4wn.cjs +212 -0
  196. package/dist/login-2XcHd4wn.cjs.map +1 -0
  197. package/dist/login-FE_dbWMo.mjs +211 -0
  198. package/dist/login-FE_dbWMo.mjs.map +1 -0
  199. package/dist/logout-BDbWrGBm.mjs +35 -0
  200. package/dist/logout-BDbWrGBm.mjs.map +1 -0
  201. package/dist/logout-DC5TMJ5_.cjs +35 -0
  202. package/dist/logout-DC5TMJ5_.cjs.map +1 -0
  203. package/dist/management-BaN1Nynl.mjs +19 -0
  204. package/dist/management-BaN1Nynl.mjs.map +1 -0
  205. package/dist/management-DHXxdCra.cjs +19 -0
  206. package/dist/management-DHXxdCra.cjs.map +1 -0
  207. package/dist/mask-B1qD73jb.mjs +22 -0
  208. package/dist/mask-B1qD73jb.mjs.map +1 -0
  209. package/dist/mask-CqYLib9p.cjs +40 -0
  210. package/dist/mask-CqYLib9p.cjs.map +1 -0
  211. package/dist/oauth-client-CdD0evAV.cjs +170 -0
  212. package/dist/oauth-client-CdD0evAV.cjs.map +1 -0
  213. package/dist/oauth-client-QHuDa4fW.mjs +139 -0
  214. package/dist/oauth-client-QHuDa4fW.mjs.map +1 -0
  215. package/dist/object-BfUf8Y6w.mjs +20 -0
  216. package/dist/object-BfUf8Y6w.mjs.map +1 -0
  217. package/dist/object-DT7UEW9G.cjs +20 -0
  218. package/dist/object-DT7UEW9G.cjs.map +1 -0
  219. package/dist/org-C4cVovOM.cjs +14 -0
  220. package/dist/org-C4cVovOM.cjs.map +1 -0
  221. package/dist/org-CPhTRTks.mjs +14 -0
  222. package/dist/org-CPhTRTks.mjs.map +1 -0
  223. package/dist/org-context-Bewx2NEW.cjs +30 -0
  224. package/dist/org-context-Bewx2NEW.cjs.map +1 -0
  225. package/dist/org-context-D0dwWC2M.mjs +25 -0
  226. package/dist/org-context-D0dwWC2M.mjs.map +1 -0
  227. package/dist/parse-BeO2IwfI.cjs +229 -0
  228. package/dist/parse-BeO2IwfI.cjs.map +1 -0
  229. package/dist/parse-CA5fBB3x.mjs +150 -0
  230. package/dist/parse-CA5fBB3x.mjs.map +1 -0
  231. package/dist/project-CNr9xMny.cjs +20 -0
  232. package/dist/project-CNr9xMny.cjs.map +1 -0
  233. package/dist/project-DFoHcXi5.mjs +20 -0
  234. package/dist/project-DFoHcXi5.mjs.map +1 -0
  235. package/dist/project-name-CEoM-OL4.cjs +18 -0
  236. package/dist/project-name-CEoM-OL4.cjs.map +1 -0
  237. package/dist/project-name-DNMejnzZ.mjs +12 -0
  238. package/dist/project-name-DNMejnzZ.mjs.map +1 -0
  239. package/dist/project-user-9D7Ey_Fu.mjs +20 -0
  240. package/dist/project-user-9D7Ey_Fu.mjs.map +1 -0
  241. package/dist/project-user-DTPFjyfZ.cjs +20 -0
  242. package/dist/project-user-DTPFjyfZ.cjs.map +1 -0
  243. package/dist/push-0u6PDz4E.cjs +166 -0
  244. package/dist/push-0u6PDz4E.cjs.map +1 -0
  245. package/dist/push-D7co0keA.mjs +166 -0
  246. package/dist/push-D7co0keA.mjs.map +1 -0
  247. package/dist/run-codegen-Ceeosw5x.cjs +272 -0
  248. package/dist/run-codegen-Ceeosw5x.cjs.map +1 -0
  249. package/dist/run-codegen-DgaFaIQ1.mjs +190 -0
  250. package/dist/run-codegen-DgaFaIQ1.mjs.map +1 -0
  251. package/dist/run-with-context-CVhmzAFZ.mjs +876 -0
  252. package/dist/run-with-context-CVhmzAFZ.mjs.map +1 -0
  253. package/dist/run-with-context-DJNnEigg.cjs +943 -0
  254. package/dist/run-with-context-DJNnEigg.cjs.map +1 -0
  255. package/dist/schema-DDzrgjkT.mjs +20 -0
  256. package/dist/schema-DDzrgjkT.mjs.map +1 -0
  257. package/dist/schema-DdhyEh81.cjs +20 -0
  258. package/dist/schema-DdhyEh81.cjs.map +1 -0
  259. package/dist/shared-CZZimGxc.mjs +35 -0
  260. package/dist/shared-CZZimGxc.mjs.map +1 -0
  261. package/dist/shared-DHRPzzKl.cjs +59 -0
  262. package/dist/shared-DHRPzzKl.cjs.map +1 -0
  263. package/dist/status-Dq_NJE71.cjs +49 -0
  264. package/dist/status-Dq_NJE71.cjs.map +1 -0
  265. package/dist/status-fWqXzV0P.mjs +49 -0
  266. package/dist/status-fWqXzV0P.mjs.map +1 -0
  267. package/dist/table-C74eOSh8.cjs +27 -0
  268. package/dist/table-C74eOSh8.cjs.map +1 -0
  269. package/dist/table-MHEfbnWO.mjs +20 -0
  270. package/dist/table-MHEfbnWO.mjs.map +1 -0
  271. package/dist/table-event-C16cp9nq.mjs +72 -0
  272. package/dist/table-event-C16cp9nq.mjs.map +1 -0
  273. package/dist/table-event-D7PPuS7E.cjs +101 -0
  274. package/dist/table-event-D7PPuS7E.cjs.map +1 -0
  275. package/dist/token-store--9GYVL7N.cjs +139 -0
  276. package/dist/token-store--9GYVL7N.cjs.map +1 -0
  277. package/dist/token-store-reCGF86F.mjs +124 -0
  278. package/dist/token-store-reCGF86F.mjs.map +1 -0
  279. package/dist/update-8e3u4jKa.mjs +109 -0
  280. package/dist/update-8e3u4jKa.mjs.map +1 -0
  281. package/dist/update-CDLviRuu.cjs +73 -0
  282. package/dist/update-CDLviRuu.cjs.map +1 -0
  283. package/dist/update-CSiOfiPL.mjs +117 -0
  284. package/dist/update-CSiOfiPL.mjs.map +1 -0
  285. package/dist/update-CjbcI8Qc.mjs +61 -0
  286. package/dist/update-CjbcI8Qc.mjs.map +1 -0
  287. package/dist/update-Cktd0zXA.cjs +109 -0
  288. package/dist/update-Cktd0zXA.cjs.map +1 -0
  289. package/dist/update-D-X32BVW.cjs +117 -0
  290. package/dist/update-D-X32BVW.cjs.map +1 -0
  291. package/dist/update-DfYV_TQb.mjs +171 -0
  292. package/dist/update-DfYV_TQb.mjs.map +1 -0
  293. package/dist/update-OWC5K8Ne.cjs +61 -0
  294. package/dist/update-OWC5K8Ne.cjs.map +1 -0
  295. package/dist/update-ap5Qv1Yl.cjs +171 -0
  296. package/dist/update-ap5Qv1Yl.cjs.map +1 -0
  297. package/dist/update-yscrx6WQ.mjs +73 -0
  298. package/dist/update-yscrx6WQ.mjs.map +1 -0
  299. package/dist/upload-C43ZXxyb.cjs +95 -0
  300. package/dist/upload-C43ZXxyb.cjs.map +1 -0
  301. package/dist/upload-DGgJ1TQk.mjs +94 -0
  302. package/dist/upload-DGgJ1TQk.mjs.map +1 -0
  303. package/dist/validate-BpxZ8LTl.cjs +31 -0
  304. package/dist/validate-BpxZ8LTl.cjs.map +1 -0
  305. package/dist/validate-Ca0CRo16.mjs +31 -0
  306. package/dist/validate-Ca0CRo16.mjs.map +1 -0
  307. package/dist/webhook-3zs6Ulxd.mjs +20 -0
  308. package/dist/webhook-3zs6Ulxd.mjs.map +1 -0
  309. package/dist/webhook-BsygMMf-.cjs +20 -0
  310. package/dist/webhook-BsygMMf-.cjs.map +1 -0
  311. package/package.json +29 -18
  312. package/bin/index.js +0 -3
  313. package/dist/cli.cjs +0 -1978
  314. package/dist/cli.cjs.map +0 -1
  315. package/dist/cli.d.cts +0 -2
  316. package/dist/cli.d.ts +0 -2
  317. package/dist/cli.js +0 -1954
  318. package/dist/cli.js.map +0 -1
  319. package/dist/config/index.js +0 -81
  320. package/dist/config/index.js.map +0 -1
@@ -0,0 +1,117 @@
1
+ import { t as defineCommand } from "./cli/main.mjs";
2
+ import { r as contextArgs } from "./shared-CZZimGxc.mjs";
3
+ import { a as apiErrorFailure, n as runWithContext, u as toResult } from "./run-with-context-CVhmzAFZ.mjs";
4
+ import { t as renderDetail } from "./detail-DN5jCQ4N.mjs";
5
+ import { f as parseRepeatableFlag, t as collectRepeatableFlag, u as parsePositionalId } from "./parse-CA5fBB3x.mjs";
6
+ import { n as maskManagementKey, r as showKeyArg } from "./mask-B1qD73jb.mjs";
7
+ import { r as resolveArrayUpdate } from "./array-update-CMFUoQEe.mjs";
8
+ import { i as warnMissingGroupRemovals, n as formatGroupRoles, r as parseGroupRoles, t as applyGroupRoleEdits } from "./group-roles-BEEzLxPX.mjs";
9
+ import { Result } from "@praha/byethrow";
10
+
11
+ //#region src/cli/commands/key/management/update.ts
12
+ async function keyManagementUpdateHandler(ctx, options) {
13
+ if (options.description === void 0 && options.groupRoles === void 0) return Result.fail({ message: "Nothing to update. Pass --description or a --group-role option." });
14
+ let groupRoles;
15
+ if (options.groupRoles?.mode === "edit") {
16
+ const keys = toResult(await ctx.client.GET("/projects/{projectName}/management-keys", { params: { path: { projectName: ctx.projectName } } }));
17
+ if (Result.isFailure(keys)) return apiErrorFailure(keys.error);
18
+ const current = keys.value.find((key) => key.id === options.id);
19
+ if (current === void 0) return Result.fail({ message: `Not found: management key ${options.id}.` });
20
+ warnMissingGroupRemovals(current.groupRoles, options.groupRoles.remove);
21
+ groupRoles = applyGroupRoleEdits(current.groupRoles, options.groupRoles);
22
+ } else if (options.groupRoles !== void 0) groupRoles = options.groupRoles.items;
23
+ const body = {
24
+ ...options.description !== void 0 ? { description: options.description } : {},
25
+ ...groupRoles !== void 0 ? { groupRoles } : {}
26
+ };
27
+ const updated = toResult(await ctx.client.PUT("/projects/{projectName}/management-keys/{projectManagementKeyId}", {
28
+ params: { path: {
29
+ projectName: ctx.projectName,
30
+ projectManagementKeyId: options.id
31
+ } },
32
+ body
33
+ }));
34
+ if (Result.isFailure(updated)) return apiErrorFailure(updated.error);
35
+ const value = options.showKey ? updated.value : {
36
+ ...updated.value,
37
+ key: maskManagementKey(updated.value.key)
38
+ };
39
+ return Result.succeed({
40
+ json: value,
41
+ text: () => renderDetail([
42
+ ["ID", String(value.id)],
43
+ ["Key", value.key],
44
+ ["Description", value.description],
45
+ ["Group roles", formatGroupRoles(value.groupRoles)],
46
+ ["Updated at", value.updatedAt]
47
+ ])
48
+ });
49
+ }
50
+ const updateArgs = {
51
+ ...contextArgs,
52
+ ...showKeyArg,
53
+ id: {
54
+ type: "positional",
55
+ required: true,
56
+ description: "Numeric management key ID"
57
+ },
58
+ description: {
59
+ type: "string",
60
+ description: "New description"
61
+ },
62
+ "group-role": {
63
+ type: "string",
64
+ description: "Replace all RBAC assignments with <group>:<role>; repeatable"
65
+ },
66
+ "add-group-role": {
67
+ type: "string",
68
+ description: "Add an RBAC assignment as <group>:<role>; repeatable"
69
+ },
70
+ "remove-group-role": {
71
+ type: "string",
72
+ description: "Remove an RBAC assignment by group name; repeatable"
73
+ },
74
+ "clear-group-roles": {
75
+ type: "boolean",
76
+ description: "Remove all RBAC assignments",
77
+ default: false
78
+ }
79
+ };
80
+ var update_default = defineCommand({
81
+ meta: {
82
+ name: "update",
83
+ description: "Update a management key's description or group roles"
84
+ },
85
+ args: updateArgs,
86
+ run: async ({ args, rawArgs }) => {
87
+ const id = parsePositionalId("management key ID", args.id);
88
+ if (Result.isFailure(id)) return id;
89
+ const replace = parseGroupRoles("group-role", collectRepeatableFlag(rawArgs, "group-role"));
90
+ if (Result.isFailure(replace)) return replace;
91
+ const added = parseGroupRoles("add-group-role", collectRepeatableFlag(rawArgs, "add-group-role"));
92
+ if (Result.isFailure(added)) return added;
93
+ const removeValues = collectRepeatableFlag(rawArgs, "remove-group-role");
94
+ const removed = removeValues === void 0 ? Result.succeed(void 0) : parseRepeatableFlag("remove-group-role", removeValues);
95
+ if (Result.isFailure(removed)) return removed;
96
+ const groupRoles = resolveArrayUpdate({
97
+ replaceFlag: "group-role",
98
+ clearFlag: "clear-group-roles",
99
+ editFlags: "--add-group-role / --remove-group-role",
100
+ replace: replace.value,
101
+ add: added.value,
102
+ remove: removed.value,
103
+ clear: args["clear-group-roles"] === true
104
+ });
105
+ if (Result.isFailure(groupRoles)) return groupRoles;
106
+ return runWithContext(args, (ctx) => keyManagementUpdateHandler(ctx, {
107
+ id: id.value,
108
+ description: typeof args.description === "string" ? args.description : void 0,
109
+ groupRoles: groupRoles.value,
110
+ showKey: args["show-key"] === true
111
+ }));
112
+ }
113
+ });
114
+
115
+ //#endregion
116
+ export { update_default as default };
117
+ //# sourceMappingURL=update-CSiOfiPL.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-CSiOfiPL.mjs","names":[],"sources":["../src/cli/commands/key/management/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { renderDetail } from \"../../../ui/detail.js\";\nimport {\n collectRepeatableFlag,\n parsePositionalId,\n parseRepeatableFlag,\n} from \"../../parse.js\";\nimport { resolveArrayUpdate, type ArrayUpdate } from \"../../array-update.js\";\nimport {\n applyGroupRoleEdits,\n formatGroupRoles,\n warnMissingGroupRemovals,\n parseGroupRoles,\n type GroupRole,\n} from \"../../group-roles.js\";\nimport { maskManagementKey, showKeyArg } from \"../mask.js\";\n\nexport async function keyManagementUpdateHandler(\n ctx: CommandContext,\n options: {\n id: number;\n description?: string;\n groupRoles: ArrayUpdate<GroupRole, string>;\n showKey: boolean;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (options.description === undefined && options.groupRoles === undefined) {\n return Result.fail({\n message:\n \"Nothing to update. Pass --description or a --group-role option.\",\n });\n }\n\n // API は groupRoles の全置換しか受けないため、要素単位の編集は現状を取得してから組み立てる。\n // Management Key には単体 GET が無いので一覧から引く。\n let groupRoles: GroupRole[] | undefined;\n if (options.groupRoles?.mode === \"edit\") {\n const keys = toResult(\n await ctx.client.GET(\"/projects/{projectName}/management-keys\", {\n params: { path: { projectName: ctx.projectName } },\n }),\n );\n if (Result.isFailure(keys)) return apiErrorFailure(keys.error);\n const current = keys.value.find((key) => key.id === options.id);\n if (current === undefined) {\n return Result.fail({\n message: `Not found: management key ${options.id}.`,\n });\n }\n warnMissingGroupRemovals(current.groupRoles, options.groupRoles.remove);\n groupRoles = applyGroupRoleEdits(current.groupRoles, options.groupRoles);\n } else if (options.groupRoles !== undefined) {\n groupRoles = options.groupRoles.items;\n }\n\n const body = {\n ...(options.description !== undefined\n ? { description: options.description }\n : {}),\n ...(groupRoles !== undefined ? { groupRoles } : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\n \"/projects/{projectName}/management-keys/{projectManagementKeyId}\",\n {\n params: {\n path: {\n projectName: ctx.projectName,\n projectManagementKeyId: options.id,\n },\n },\n body,\n },\n ),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n // --json でもマスクを効かせるため、表示用データ自体を書き換える\n const value = options.showKey\n ? updated.value\n : { ...updated.value, key: maskManagementKey(updated.value.key) };\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"ID\", String(value.id)],\n [\"Key\", value.key],\n [\"Description\", value.description],\n [\"Group roles\", formatGroupRoles(value.groupRoles)],\n [\"Updated at\", value.updatedAt],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n ...showKeyArg,\n id: {\n type: \"positional\",\n required: true,\n description: \"Numeric management key ID\",\n },\n description: {\n type: \"string\",\n description: \"New description\",\n },\n \"group-role\": {\n type: \"string\",\n description: \"Replace all RBAC assignments with <group>:<role>; repeatable\",\n },\n \"add-group-role\": {\n type: \"string\",\n description: \"Add an RBAC assignment as <group>:<role>; repeatable\",\n },\n \"remove-group-role\": {\n type: \"string\",\n description: \"Remove an RBAC assignment by group name; repeatable\",\n },\n \"clear-group-roles\": {\n type: \"boolean\",\n description: \"Remove all RBAC assignments\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a management key's description or group roles\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const id = parsePositionalId(\"management key ID\", args.id);\n if (Result.isFailure(id)) return id;\n const replace = parseGroupRoles(\n \"group-role\",\n collectRepeatableFlag(rawArgs, \"group-role\"),\n );\n if (Result.isFailure(replace)) return replace;\n const added = parseGroupRoles(\n \"add-group-role\",\n collectRepeatableFlag(rawArgs, \"add-group-role\"),\n );\n if (Result.isFailure(added)) return added;\n const removeValues = collectRepeatableFlag(rawArgs, \"remove-group-role\");\n const removed =\n removeValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-group-role\", removeValues);\n if (Result.isFailure(removed)) return removed;\n const groupRoles = resolveArrayUpdate({\n replaceFlag: \"group-role\",\n clearFlag: \"clear-group-roles\",\n editFlags: \"--add-group-role / --remove-group-role\",\n replace: replace.value,\n add: added.value,\n remove: removed.value,\n clear: args[\"clear-group-roles\"] === true,\n });\n if (Result.isFailure(groupRoles)) return groupRoles;\n\n return runWithContext(args, (ctx) =>\n keyManagementUpdateHandler(ctx, {\n id: id.value,\n description:\n typeof args.description === \"string\" ? args.description : undefined,\n groupRoles: groupRoles.value,\n showKey: args[\"show-key\"] === true,\n }),\n );\n },\n});\n"],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { t as defineCommand } from "./cli/main.mjs";
2
+ import { r as contextArgs } from "./shared-CZZimGxc.mjs";
3
+ import { a as apiErrorFailure, n as runWithContext, u as toResult } from "./run-with-context-CVhmzAFZ.mjs";
4
+ import { r as parseDataOption } from "./parse-CA5fBB3x.mjs";
5
+ import { Result } from "@praha/byethrow";
6
+
7
+ //#region src/cli/commands/content/update.ts
8
+ async function contentUpdateHandler(ctx, options) {
9
+ const updated = toResult(await ctx.client.PUT("/projects/{projectName}/tables/{tableName}/{contentId}", {
10
+ params: { path: {
11
+ projectName: ctx.projectName,
12
+ tableName: options.table,
13
+ contentId: options.contentId
14
+ } },
15
+ body: options.data
16
+ }));
17
+ if (Result.isFailure(updated)) return apiErrorFailure(updated.error);
18
+ const value = updated.value;
19
+ return Result.succeed({
20
+ json: value,
21
+ text: () => JSON.stringify(value, null, 2)
22
+ });
23
+ }
24
+ const updateArgs = {
25
+ ...contextArgs,
26
+ table: {
27
+ type: "positional",
28
+ required: true,
29
+ description: "Table name"
30
+ },
31
+ id: {
32
+ type: "positional",
33
+ required: true,
34
+ description: "Content ID"
35
+ },
36
+ data: {
37
+ type: "string",
38
+ required: true,
39
+ description: "Content fields as a JSON object string or @path/to/file.json"
40
+ }
41
+ };
42
+ var update_default = defineCommand({
43
+ meta: {
44
+ name: "update",
45
+ description: "Update a content"
46
+ },
47
+ args: updateArgs,
48
+ run: async ({ args }) => {
49
+ const data = await parseDataOption(args.data);
50
+ if (Result.isFailure(data)) return data;
51
+ return runWithContext(args, (ctx) => contentUpdateHandler(ctx, {
52
+ table: args.table,
53
+ contentId: args.id,
54
+ data: data.value
55
+ }));
56
+ }
57
+ });
58
+
59
+ //#endregion
60
+ export { update_default as default };
61
+ //# sourceMappingURL=update-CjbcI8Qc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-CjbcI8Qc.mjs","names":[],"sources":["../src/cli/commands/content/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { parseDataOption } from \"../parse.js\";\n\nexport async function contentUpdateHandler(\n ctx: CommandContext,\n options: { table: string; contentId: string; data: Record<string, unknown> },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const updated = toResult(\n await ctx.client.PUT(\n \"/projects/{projectName}/tables/{tableName}/{contentId}\",\n {\n params: {\n path: {\n projectName: ctx.projectName,\n tableName: options.table,\n contentId: options.contentId,\n },\n },\n body: options.data,\n },\n ),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () => JSON.stringify(value, null, 2),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n table: {\n type: \"positional\",\n required: true,\n description: \"Table name\",\n },\n id: {\n type: \"positional\",\n required: true,\n description: \"Content ID\",\n },\n data: {\n type: \"string\",\n required: true,\n description: \"Content fields as a JSON object string or @path/to/file.json\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a content\",\n },\n args: updateArgs,\n run: async ({ args }) => {\n const data = await parseDataOption(args.data);\n if (Result.isFailure(data)) return data;\n\n return runWithContext(args, (ctx) =>\n contentUpdateHandler(ctx, {\n table: args.table,\n contentId: args.id,\n data: data.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;AAaA,eAAsB,qBACpB,KACA,SACmE;CACnE,MAAM,UAAU,SACd,MAAM,IAAI,OAAO,IACf,0DACA;EACE,QAAQ,EACN,MAAM;GACJ,aAAa,IAAI;GACjB,WAAW,QAAQ;GACnB,WAAW,QAAQ;EACrB,EACF;EACA,MAAM,QAAQ;CAChB,CACF,CACF;CACA,IAAI,OAAO,UAAU,OAAO,GAAG,OAAO,gBAAgB,QAAQ,KAAK;CAEnE,MAAM,QAAQ,QAAQ;CACtB,OAAO,OAAO,QAAQ;EACpB,MAAM;EACN,YAAY,KAAK,UAAU,OAAO,MAAM,CAAC;CAC3C,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAG;CACH,OAAO;EACL,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,IAAI;EACF,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,UAAU;EACV,aAAa;CACf;AACF;AAEA,qBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,WAAW;EACvB,MAAM,OAAO,MAAM,gBAAgB,KAAK,IAAI;EAC5C,IAAI,OAAO,UAAU,IAAI,GAAG,OAAO;EAEnC,OAAO,eAAe,OAAO,QAC3B,qBAAqB,KAAK;GACxB,OAAO,KAAK;GACZ,WAAW,KAAK;GAChB,MAAM,KAAK;EACb,CAAC,CACH;CACF;AACF,CAAC"}
@@ -0,0 +1,109 @@
1
+ const require_cli_main = require('./cli/main.cjs');
2
+ const require_shared = require('./shared-DHRPzzKl.cjs');
3
+ const require_run_with_context = require('./run-with-context-DJNnEigg.cjs');
4
+ const require_detail = require('./detail-8CXNIhKw.cjs');
5
+ const require_parse = require('./parse-BeO2IwfI.cjs');
6
+ const require_array_update = require('./array-update-Dch4e9tI.cjs');
7
+ const require_group_roles = require('./group-roles-Bl_mEodO.cjs');
8
+ let _praha_byethrow = require("@praha/byethrow");
9
+
10
+ //#region src/cli/commands/project-user/update.ts
11
+ async function projectUserUpdateHandler(ctx, options) {
12
+ if (options.name === void 0 && options.groupRoles === void 0) return _praha_byethrow.Result.fail({ message: "Nothing to update. Pass --name or a --group-role option." });
13
+ let groupRoles;
14
+ if (options.groupRoles?.mode === "edit") {
15
+ const current = require_run_with_context.toResult(await ctx.client.GET("/projects/{projectName}/users/{userId}", { params: { path: {
16
+ projectName: ctx.projectName,
17
+ userId: options.userId
18
+ } } }));
19
+ if (_praha_byethrow.Result.isFailure(current)) return require_run_with_context.apiErrorFailure(current.error);
20
+ require_group_roles.warnMissingGroupRemovals(current.value.groupRoles, options.groupRoles.remove);
21
+ groupRoles = require_group_roles.applyGroupRoleEdits(current.value.groupRoles, options.groupRoles);
22
+ } else if (options.groupRoles !== void 0) groupRoles = options.groupRoles.items;
23
+ const body = {
24
+ ...options.name !== void 0 ? { name: options.name } : {},
25
+ ...groupRoles !== void 0 ? { groupRoles } : {}
26
+ };
27
+ const updated = require_run_with_context.toResult(await ctx.client.PUT("/projects/{projectName}/users/{userId}", {
28
+ params: { path: {
29
+ projectName: ctx.projectName,
30
+ userId: options.userId
31
+ } },
32
+ body
33
+ }));
34
+ if (_praha_byethrow.Result.isFailure(updated)) return require_run_with_context.apiErrorFailure(updated.error);
35
+ const value = updated.value;
36
+ return _praha_byethrow.Result.succeed({
37
+ json: value,
38
+ text: () => require_detail.renderDetail([
39
+ ["Updated", value.id],
40
+ ["Name", value.name],
41
+ ["Email", value.email],
42
+ ["Group roles", require_group_roles.formatGroupRoles(value.groupRoles)]
43
+ ])
44
+ });
45
+ }
46
+ const updateArgs = {
47
+ ...require_shared.contextArgs,
48
+ "user-id": {
49
+ type: "positional",
50
+ required: true,
51
+ description: "Project user ID"
52
+ },
53
+ name: {
54
+ type: "string",
55
+ description: "New display name"
56
+ },
57
+ "group-role": {
58
+ type: "string",
59
+ description: "Replace all RBAC assignments with <group>:<role>; repeatable"
60
+ },
61
+ "add-group-role": {
62
+ type: "string",
63
+ description: "Add an RBAC assignment as <group>:<role>; repeatable"
64
+ },
65
+ "remove-group-role": {
66
+ type: "string",
67
+ description: "Remove an RBAC assignment by group name; repeatable"
68
+ },
69
+ "clear-group-roles": {
70
+ type: "boolean",
71
+ description: "Remove all RBAC assignments",
72
+ default: false
73
+ }
74
+ };
75
+ var update_default = require_cli_main.defineCommand({
76
+ meta: {
77
+ name: "update",
78
+ description: "Update a project user's name or group roles"
79
+ },
80
+ args: updateArgs,
81
+ run: async ({ args, rawArgs }) => {
82
+ const replace = require_group_roles.parseGroupRoles("group-role", require_parse.collectRepeatableFlag(rawArgs, "group-role"));
83
+ if (_praha_byethrow.Result.isFailure(replace)) return replace;
84
+ const added = require_group_roles.parseGroupRoles("add-group-role", require_parse.collectRepeatableFlag(rawArgs, "add-group-role"));
85
+ if (_praha_byethrow.Result.isFailure(added)) return added;
86
+ const removeValues = require_parse.collectRepeatableFlag(rawArgs, "remove-group-role");
87
+ const removed = removeValues === void 0 ? _praha_byethrow.Result.succeed(void 0) : require_parse.parseRepeatableFlag("remove-group-role", removeValues);
88
+ if (_praha_byethrow.Result.isFailure(removed)) return removed;
89
+ const groupRoles = require_array_update.resolveArrayUpdate({
90
+ replaceFlag: "group-role",
91
+ clearFlag: "clear-group-roles",
92
+ editFlags: "--add-group-role / --remove-group-role",
93
+ replace: replace.value,
94
+ add: added.value,
95
+ remove: removed.value,
96
+ clear: args["clear-group-roles"] === true
97
+ });
98
+ if (_praha_byethrow.Result.isFailure(groupRoles)) return groupRoles;
99
+ return require_run_with_context.runWithContext(args, (ctx) => projectUserUpdateHandler(ctx, {
100
+ userId: args["user-id"],
101
+ name: typeof args.name === "string" ? args.name : void 0,
102
+ groupRoles: groupRoles.value
103
+ }));
104
+ }
105
+ });
106
+
107
+ //#endregion
108
+ exports.default = update_default;
109
+ //# sourceMappingURL=update-Cktd0zXA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-Cktd0zXA.cjs","names":["Result","toResult","apiErrorFailure","applyGroupRoleEdits","renderDetail","formatGroupRoles","contextArgs","defineCommand","parseGroupRoles","collectRepeatableFlag","parseRepeatableFlag","resolveArrayUpdate","runWithContext"],"sources":["../src/cli/commands/project-user/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { renderDetail } from \"../../ui/detail.js\";\nimport { collectRepeatableFlag, parseRepeatableFlag } from \"../parse.js\";\nimport { resolveArrayUpdate, type ArrayUpdate } from \"../array-update.js\";\nimport {\n applyGroupRoleEdits,\n formatGroupRoles,\n warnMissingGroupRemovals,\n parseGroupRoles,\n type GroupRole,\n} from \"../group-roles.js\";\n\nexport async function projectUserUpdateHandler(\n ctx: CommandContext,\n options: {\n userId: string;\n name?: string;\n groupRoles: ArrayUpdate<GroupRole, string>;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (options.name === undefined && options.groupRoles === undefined) {\n return Result.fail({\n message: \"Nothing to update. Pass --name or a --group-role option.\",\n });\n }\n\n // API は groupRoles の全置換しか受けないため、要素単位の編集は現状を取得してから組み立てる\n let groupRoles: GroupRole[] | undefined;\n if (options.groupRoles?.mode === \"edit\") {\n const current = toResult(\n await ctx.client.GET(\"/projects/{projectName}/users/{userId}\", {\n params: {\n path: { projectName: ctx.projectName, userId: options.userId },\n },\n }),\n );\n if (Result.isFailure(current)) return apiErrorFailure(current.error);\n warnMissingGroupRemovals(\n current.value.groupRoles,\n options.groupRoles.remove,\n );\n groupRoles = applyGroupRoleEdits(\n current.value.groupRoles,\n options.groupRoles,\n );\n } else if (options.groupRoles !== undefined) {\n groupRoles = options.groupRoles.items;\n }\n\n const body = {\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(groupRoles !== undefined ? { groupRoles } : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\"/projects/{projectName}/users/{userId}\", {\n params: {\n path: { projectName: ctx.projectName, userId: options.userId },\n },\n body,\n }),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"Updated\", value.id],\n [\"Name\", value.name],\n [\"Email\", value.email],\n [\"Group roles\", formatGroupRoles(value.groupRoles)],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n \"user-id\": {\n type: \"positional\",\n required: true,\n description: \"Project user ID\",\n },\n name: {\n type: \"string\",\n description: \"New display name\",\n },\n \"group-role\": {\n type: \"string\",\n description: \"Replace all RBAC assignments with <group>:<role>; repeatable\",\n },\n \"add-group-role\": {\n type: \"string\",\n description: \"Add an RBAC assignment as <group>:<role>; repeatable\",\n },\n \"remove-group-role\": {\n type: \"string\",\n description: \"Remove an RBAC assignment by group name; repeatable\",\n },\n \"clear-group-roles\": {\n type: \"boolean\",\n description: \"Remove all RBAC assignments\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a project user's name or group roles\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const replace = parseGroupRoles(\n \"group-role\",\n collectRepeatableFlag(rawArgs, \"group-role\"),\n );\n if (Result.isFailure(replace)) return replace;\n const added = parseGroupRoles(\n \"add-group-role\",\n collectRepeatableFlag(rawArgs, \"add-group-role\"),\n );\n if (Result.isFailure(added)) return added;\n const removeValues = collectRepeatableFlag(rawArgs, \"remove-group-role\");\n const removed =\n removeValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-group-role\", removeValues);\n if (Result.isFailure(removed)) return removed;\n const groupRoles = resolveArrayUpdate({\n replaceFlag: \"group-role\",\n clearFlag: \"clear-group-roles\",\n editFlags: \"--add-group-role / --remove-group-role\",\n replace: replace.value,\n add: added.value,\n remove: removed.value,\n clear: args[\"clear-group-roles\"] === true,\n });\n if (Result.isFailure(groupRoles)) return groupRoles;\n\n return runWithContext(args, (ctx) =>\n projectUserUpdateHandler(ctx, {\n userId: args[\"user-id\"],\n name: typeof args.name === \"string\" ? args.name : undefined,\n groupRoles: groupRoles.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;;;AAsBA,eAAsB,yBACpB,KACA,SAKmE;CACnE,IAAI,QAAQ,SAAS,UAAa,QAAQ,eAAe,QACvD,OAAOA,uBAAO,KAAK,EACjB,SAAS,2DACX,CAAC;CAIH,IAAI;CACJ,IAAI,QAAQ,YAAY,SAAS,QAAQ;EACvC,MAAM,UAAUC,kCACd,MAAM,IAAI,OAAO,IAAI,0CAA0C,EAC7D,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,QAAQ,QAAQ;EAAO,EAC/D,EACF,CAAC,CACH;EACA,IAAID,uBAAO,UAAU,OAAO,GAAG,OAAOE,yCAAgB,QAAQ,KAAK;EACnE,6CACE,QAAQ,MAAM,YACd,QAAQ,WAAW,MACrB;EACA,aAAaC,wCACX,QAAQ,MAAM,YACd,QAAQ,UACV;CACF,OAAO,IAAI,QAAQ,eAAe,QAChC,aAAa,QAAQ,WAAW;CAGlC,MAAM,OAAO;EACX,GAAI,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;EAC3D,GAAI,eAAe,SAAY,EAAE,WAAW,IAAI,CAAC;CACnD;CAEA,MAAM,UAAUF,kCACd,MAAM,IAAI,OAAO,IAAI,0CAA0C;EAC7D,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,QAAQ,QAAQ;EAAO,EAC/D;EACA;CACF,CAAC,CACH;CACA,IAAID,uBAAO,UAAU,OAAO,GAAG,OAAOE,yCAAgB,QAAQ,KAAK;CAEnE,MAAM,QAAQ,QAAQ;CACtB,OAAOF,uBAAO,QAAQ;EACpB,MAAM;EACN,YACEI,4BAAa;GACX,CAAC,WAAW,MAAM,EAAE;GACpB,CAAC,QAAQ,MAAM,IAAI;GACnB,CAAC,SAAS,MAAM,KAAK;GACrB,CAAC,eAAeC,qCAAiB,MAAM,UAAU,CAAC;EACpD,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAGC;CACH,WAAW;EACT,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,cAAc;EACZ,MAAM;EACN,aAAa;CACf;CACA,kBAAkB;EAChB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;EACb,SAAS;CACX;AACF;AAEA,qBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,MAAM,cAAc;EAChC,MAAM,UAAUC,oCACd,cACAC,oCAAsB,SAAS,YAAY,CAC7C;EACA,IAAIT,uBAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,QAAQQ,oCACZ,kBACAC,oCAAsB,SAAS,gBAAgB,CACjD;EACA,IAAIT,uBAAO,UAAU,KAAK,GAAG,OAAO;EACpC,MAAM,eAAeS,oCAAsB,SAAS,mBAAmB;EACvE,MAAM,UACJ,iBAAiB,SACbT,uBAAO,QAAQ,MAAS,IACxBU,kCAAoB,qBAAqB,YAAY;EAC3D,IAAIV,uBAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,aAAaW,wCAAmB;GACpC,aAAa;GACb,WAAW;GACX,WAAW;GACX,SAAS,QAAQ;GACjB,KAAK,MAAM;GACX,QAAQ,QAAQ;GAChB,OAAO,KAAK,yBAAyB;EACvC,CAAC;EACD,IAAIX,uBAAO,UAAU,UAAU,GAAG,OAAO;EAEzC,OAAOY,wCAAe,OAAO,QAC3B,yBAAyB,KAAK;GAC5B,QAAQ,KAAK;GACb,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;GAClD,YAAY,WAAW;EACzB,CAAC,CACH;CACF;AACF,CAAC"}
@@ -0,0 +1,117 @@
1
+ const require_cli_main = require('./cli/main.cjs');
2
+ const require_shared = require('./shared-DHRPzzKl.cjs');
3
+ const require_run_with_context = require('./run-with-context-DJNnEigg.cjs');
4
+ const require_detail = require('./detail-8CXNIhKw.cjs');
5
+ const require_parse = require('./parse-BeO2IwfI.cjs');
6
+ const require_mask = require('./mask-CqYLib9p.cjs');
7
+ const require_array_update = require('./array-update-Dch4e9tI.cjs');
8
+ const require_group_roles = require('./group-roles-Bl_mEodO.cjs');
9
+ let _praha_byethrow = require("@praha/byethrow");
10
+
11
+ //#region src/cli/commands/key/management/update.ts
12
+ async function keyManagementUpdateHandler(ctx, options) {
13
+ if (options.description === void 0 && options.groupRoles === void 0) return _praha_byethrow.Result.fail({ message: "Nothing to update. Pass --description or a --group-role option." });
14
+ let groupRoles;
15
+ if (options.groupRoles?.mode === "edit") {
16
+ const keys = require_run_with_context.toResult(await ctx.client.GET("/projects/{projectName}/management-keys", { params: { path: { projectName: ctx.projectName } } }));
17
+ if (_praha_byethrow.Result.isFailure(keys)) return require_run_with_context.apiErrorFailure(keys.error);
18
+ const current = keys.value.find((key) => key.id === options.id);
19
+ if (current === void 0) return _praha_byethrow.Result.fail({ message: `Not found: management key ${options.id}.` });
20
+ require_group_roles.warnMissingGroupRemovals(current.groupRoles, options.groupRoles.remove);
21
+ groupRoles = require_group_roles.applyGroupRoleEdits(current.groupRoles, options.groupRoles);
22
+ } else if (options.groupRoles !== void 0) groupRoles = options.groupRoles.items;
23
+ const body = {
24
+ ...options.description !== void 0 ? { description: options.description } : {},
25
+ ...groupRoles !== void 0 ? { groupRoles } : {}
26
+ };
27
+ const updated = require_run_with_context.toResult(await ctx.client.PUT("/projects/{projectName}/management-keys/{projectManagementKeyId}", {
28
+ params: { path: {
29
+ projectName: ctx.projectName,
30
+ projectManagementKeyId: options.id
31
+ } },
32
+ body
33
+ }));
34
+ if (_praha_byethrow.Result.isFailure(updated)) return require_run_with_context.apiErrorFailure(updated.error);
35
+ const value = options.showKey ? updated.value : {
36
+ ...updated.value,
37
+ key: require_mask.maskManagementKey(updated.value.key)
38
+ };
39
+ return _praha_byethrow.Result.succeed({
40
+ json: value,
41
+ text: () => require_detail.renderDetail([
42
+ ["ID", String(value.id)],
43
+ ["Key", value.key],
44
+ ["Description", value.description],
45
+ ["Group roles", require_group_roles.formatGroupRoles(value.groupRoles)],
46
+ ["Updated at", value.updatedAt]
47
+ ])
48
+ });
49
+ }
50
+ const updateArgs = {
51
+ ...require_shared.contextArgs,
52
+ ...require_mask.showKeyArg,
53
+ id: {
54
+ type: "positional",
55
+ required: true,
56
+ description: "Numeric management key ID"
57
+ },
58
+ description: {
59
+ type: "string",
60
+ description: "New description"
61
+ },
62
+ "group-role": {
63
+ type: "string",
64
+ description: "Replace all RBAC assignments with <group>:<role>; repeatable"
65
+ },
66
+ "add-group-role": {
67
+ type: "string",
68
+ description: "Add an RBAC assignment as <group>:<role>; repeatable"
69
+ },
70
+ "remove-group-role": {
71
+ type: "string",
72
+ description: "Remove an RBAC assignment by group name; repeatable"
73
+ },
74
+ "clear-group-roles": {
75
+ type: "boolean",
76
+ description: "Remove all RBAC assignments",
77
+ default: false
78
+ }
79
+ };
80
+ var update_default = require_cli_main.defineCommand({
81
+ meta: {
82
+ name: "update",
83
+ description: "Update a management key's description or group roles"
84
+ },
85
+ args: updateArgs,
86
+ run: async ({ args, rawArgs }) => {
87
+ const id = require_parse.parsePositionalId("management key ID", args.id);
88
+ if (_praha_byethrow.Result.isFailure(id)) return id;
89
+ const replace = require_group_roles.parseGroupRoles("group-role", require_parse.collectRepeatableFlag(rawArgs, "group-role"));
90
+ if (_praha_byethrow.Result.isFailure(replace)) return replace;
91
+ const added = require_group_roles.parseGroupRoles("add-group-role", require_parse.collectRepeatableFlag(rawArgs, "add-group-role"));
92
+ if (_praha_byethrow.Result.isFailure(added)) return added;
93
+ const removeValues = require_parse.collectRepeatableFlag(rawArgs, "remove-group-role");
94
+ const removed = removeValues === void 0 ? _praha_byethrow.Result.succeed(void 0) : require_parse.parseRepeatableFlag("remove-group-role", removeValues);
95
+ if (_praha_byethrow.Result.isFailure(removed)) return removed;
96
+ const groupRoles = require_array_update.resolveArrayUpdate({
97
+ replaceFlag: "group-role",
98
+ clearFlag: "clear-group-roles",
99
+ editFlags: "--add-group-role / --remove-group-role",
100
+ replace: replace.value,
101
+ add: added.value,
102
+ remove: removed.value,
103
+ clear: args["clear-group-roles"] === true
104
+ });
105
+ if (_praha_byethrow.Result.isFailure(groupRoles)) return groupRoles;
106
+ return require_run_with_context.runWithContext(args, (ctx) => keyManagementUpdateHandler(ctx, {
107
+ id: id.value,
108
+ description: typeof args.description === "string" ? args.description : void 0,
109
+ groupRoles: groupRoles.value,
110
+ showKey: args["show-key"] === true
111
+ }));
112
+ }
113
+ });
114
+
115
+ //#endregion
116
+ exports.default = update_default;
117
+ //# sourceMappingURL=update-D-X32BVW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-D-X32BVW.cjs","names":["Result","toResult","apiErrorFailure","applyGroupRoleEdits","maskManagementKey","renderDetail","formatGroupRoles","contextArgs","showKeyArg","defineCommand","parsePositionalId","parseGroupRoles","collectRepeatableFlag","parseRepeatableFlag","resolveArrayUpdate","runWithContext"],"sources":["../src/cli/commands/key/management/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { renderDetail } from \"../../../ui/detail.js\";\nimport {\n collectRepeatableFlag,\n parsePositionalId,\n parseRepeatableFlag,\n} from \"../../parse.js\";\nimport { resolveArrayUpdate, type ArrayUpdate } from \"../../array-update.js\";\nimport {\n applyGroupRoleEdits,\n formatGroupRoles,\n warnMissingGroupRemovals,\n parseGroupRoles,\n type GroupRole,\n} from \"../../group-roles.js\";\nimport { maskManagementKey, showKeyArg } from \"../mask.js\";\n\nexport async function keyManagementUpdateHandler(\n ctx: CommandContext,\n options: {\n id: number;\n description?: string;\n groupRoles: ArrayUpdate<GroupRole, string>;\n showKey: boolean;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (options.description === undefined && options.groupRoles === undefined) {\n return Result.fail({\n message:\n \"Nothing to update. Pass --description or a --group-role option.\",\n });\n }\n\n // API は groupRoles の全置換しか受けないため、要素単位の編集は現状を取得してから組み立てる。\n // Management Key には単体 GET が無いので一覧から引く。\n let groupRoles: GroupRole[] | undefined;\n if (options.groupRoles?.mode === \"edit\") {\n const keys = toResult(\n await ctx.client.GET(\"/projects/{projectName}/management-keys\", {\n params: { path: { projectName: ctx.projectName } },\n }),\n );\n if (Result.isFailure(keys)) return apiErrorFailure(keys.error);\n const current = keys.value.find((key) => key.id === options.id);\n if (current === undefined) {\n return Result.fail({\n message: `Not found: management key ${options.id}.`,\n });\n }\n warnMissingGroupRemovals(current.groupRoles, options.groupRoles.remove);\n groupRoles = applyGroupRoleEdits(current.groupRoles, options.groupRoles);\n } else if (options.groupRoles !== undefined) {\n groupRoles = options.groupRoles.items;\n }\n\n const body = {\n ...(options.description !== undefined\n ? { description: options.description }\n : {}),\n ...(groupRoles !== undefined ? { groupRoles } : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\n \"/projects/{projectName}/management-keys/{projectManagementKeyId}\",\n {\n params: {\n path: {\n projectName: ctx.projectName,\n projectManagementKeyId: options.id,\n },\n },\n body,\n },\n ),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n // --json でもマスクを効かせるため、表示用データ自体を書き換える\n const value = options.showKey\n ? updated.value\n : { ...updated.value, key: maskManagementKey(updated.value.key) };\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"ID\", String(value.id)],\n [\"Key\", value.key],\n [\"Description\", value.description],\n [\"Group roles\", formatGroupRoles(value.groupRoles)],\n [\"Updated at\", value.updatedAt],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n ...showKeyArg,\n id: {\n type: \"positional\",\n required: true,\n description: \"Numeric management key ID\",\n },\n description: {\n type: \"string\",\n description: \"New description\",\n },\n \"group-role\": {\n type: \"string\",\n description: \"Replace all RBAC assignments with <group>:<role>; repeatable\",\n },\n \"add-group-role\": {\n type: \"string\",\n description: \"Add an RBAC assignment as <group>:<role>; repeatable\",\n },\n \"remove-group-role\": {\n type: \"string\",\n description: \"Remove an RBAC assignment by group name; repeatable\",\n },\n \"clear-group-roles\": {\n type: \"boolean\",\n description: \"Remove all RBAC assignments\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a management key's description or group roles\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const id = parsePositionalId(\"management key ID\", args.id);\n if (Result.isFailure(id)) return id;\n const replace = parseGroupRoles(\n \"group-role\",\n collectRepeatableFlag(rawArgs, \"group-role\"),\n );\n if (Result.isFailure(replace)) return replace;\n const added = parseGroupRoles(\n \"add-group-role\",\n collectRepeatableFlag(rawArgs, \"add-group-role\"),\n );\n if (Result.isFailure(added)) return added;\n const removeValues = collectRepeatableFlag(rawArgs, \"remove-group-role\");\n const removed =\n removeValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-group-role\", removeValues);\n if (Result.isFailure(removed)) return removed;\n const groupRoles = resolveArrayUpdate({\n replaceFlag: \"group-role\",\n clearFlag: \"clear-group-roles\",\n editFlags: \"--add-group-role / --remove-group-role\",\n replace: replace.value,\n add: added.value,\n remove: removed.value,\n clear: args[\"clear-group-roles\"] === true,\n });\n if (Result.isFailure(groupRoles)) return groupRoles;\n\n return runWithContext(args, (ctx) =>\n keyManagementUpdateHandler(ctx, {\n id: id.value,\n description:\n typeof args.description === \"string\" ? args.description : undefined,\n groupRoles: groupRoles.value,\n showKey: args[\"show-key\"] === true,\n }),\n );\n },\n});\n"],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ import { o as warn, t as defineCommand } from "./cli/main.mjs";
2
+ import { r as contextArgs } from "./shared-CZZimGxc.mjs";
3
+ import { a as apiErrorFailure, n as runWithContext, u as toResult } from "./run-with-context-CVhmzAFZ.mjs";
4
+ import { t as renderDetail } from "./detail-DN5jCQ4N.mjs";
5
+ import { a as parseHttpUrl, f as parseRepeatableFlag, i as parseHeaders, t as collectRepeatableFlag, u as parsePositionalId } from "./parse-CA5fBB3x.mjs";
6
+ import { n as findDuplicateKey, r as resolveArrayUpdate, t as applyKeyedEdits } from "./array-update-CMFUoQEe.mjs";
7
+ import { a as removeTableEvents, i as parseTableEvents, n as formatTableEvents, r as missingTableEventRemovals, t as addTableEvents } from "./table-event-C16cp9nq.mjs";
8
+ import { formatCustomHeaders } from "./get-DPGx1zU4.mjs";
9
+ import { Result } from "@praha/byethrow";
10
+
11
+ //#region src/cli/commands/webhook/update.ts
12
+ function applyHeaderEdits(current, edits) {
13
+ return applyKeyedEdits(current, edits, (header) => header.key);
14
+ }
15
+ async function webhookUpdateHandler(ctx, options) {
16
+ if (options.name === void 0 && options.url === void 0 && options.tableEvents === void 0 && options.customHeaders === void 0) return Result.fail({ message: "Nothing to update. Pass --name, --url, a --table-event option, or a --header option." });
17
+ let currentTableEvents = [];
18
+ let currentHeaders = [];
19
+ if (options.tableEvents?.mode === "edit" || options.customHeaders?.mode === "edit") {
20
+ const current = toResult(await ctx.client.GET("/projects/{projectName}/webhooks/{webhookId}", { params: { path: {
21
+ projectName: ctx.projectName,
22
+ webhookId: options.webhookId
23
+ } } }));
24
+ if (Result.isFailure(current)) return apiErrorFailure(current.error);
25
+ currentTableEvents = current.value.tableEvents;
26
+ currentHeaders = current.value.customHeaders;
27
+ if (options.tableEvents?.mode === "edit") for (const missing of missingTableEventRemovals(currentTableEvents, options.tableEvents.remove)) warn(`Subscription "${missing}" is not set; skipped removing it.`);
28
+ if (options.customHeaders?.mode === "edit") {
29
+ for (const key of options.customHeaders.remove) if (!currentHeaders.some((header) => header.key === key)) warn(`Header "${key}" is not set; skipped removing it.`);
30
+ }
31
+ }
32
+ const body = {
33
+ ...options.name !== void 0 ? { name: options.name } : {},
34
+ ...options.url !== void 0 ? { url: options.url } : {},
35
+ ...options.tableEvents !== void 0 ? { tableEvents: options.tableEvents.mode === "replace" ? options.tableEvents.items : addTableEvents(removeTableEvents(currentTableEvents, options.tableEvents.remove), options.tableEvents.add) } : {},
36
+ ...options.customHeaders !== void 0 ? { customHeaders: options.customHeaders.mode === "replace" ? options.customHeaders.items : applyHeaderEdits(currentHeaders, options.customHeaders) } : {}
37
+ };
38
+ const updated = toResult(await ctx.client.PUT("/projects/{projectName}/webhooks/{webhookId}", {
39
+ params: { path: {
40
+ projectName: ctx.projectName,
41
+ webhookId: options.webhookId
42
+ } },
43
+ body
44
+ }));
45
+ if (Result.isFailure(updated)) return apiErrorFailure(updated.error);
46
+ const value = updated.value;
47
+ return Result.succeed({
48
+ json: value,
49
+ text: () => renderDetail([
50
+ ["ID", String(value.id)],
51
+ ["Name", value.name],
52
+ ["URL", value.url],
53
+ ["Table events", formatTableEvents(value.tableEvents)],
54
+ ["Custom headers", formatCustomHeaders(value.customHeaders)],
55
+ ["Updated at", value.updatedAt]
56
+ ])
57
+ });
58
+ }
59
+ const updateArgs = {
60
+ ...contextArgs,
61
+ id: {
62
+ type: "positional",
63
+ required: true,
64
+ description: "Numeric webhook ID"
65
+ },
66
+ name: {
67
+ type: "string",
68
+ description: "New webhook name"
69
+ },
70
+ url: {
71
+ type: "string",
72
+ description: "New URL to notify"
73
+ },
74
+ "table-event": {
75
+ type: "string",
76
+ description: "Replace all subscriptions with <table>:<event>; repeatable"
77
+ },
78
+ "add-table-event": {
79
+ type: "string",
80
+ description: "Add a subscription as <table>:<event>; repeatable"
81
+ },
82
+ "remove-table-event": {
83
+ type: "string",
84
+ description: "Remove a subscription as <table>:<event>; repeatable"
85
+ },
86
+ "clear-table-events": {
87
+ type: "boolean",
88
+ description: "Remove all subscriptions",
89
+ default: false
90
+ },
91
+ header: {
92
+ type: "string",
93
+ description: "Replace all custom headers with <key>:<value>; repeatable"
94
+ },
95
+ "add-header": {
96
+ type: "string",
97
+ description: "Add or overwrite a custom header as <key>:<value>; repeatable"
98
+ },
99
+ "remove-header": {
100
+ type: "string",
101
+ description: "Remove a custom header by key; repeatable"
102
+ },
103
+ "clear-headers": {
104
+ type: "boolean",
105
+ description: "Remove all custom headers",
106
+ default: false
107
+ }
108
+ };
109
+ var update_default = defineCommand({
110
+ meta: {
111
+ name: "update",
112
+ description: "Update a webhook"
113
+ },
114
+ args: updateArgs,
115
+ run: async ({ args, rawArgs }) => {
116
+ const webhookId = parsePositionalId("webhook ID", args.id);
117
+ if (Result.isFailure(webhookId)) return webhookId;
118
+ const replaceTableEvents = parseTableEvents("table-event", collectRepeatableFlag(rawArgs, "table-event"));
119
+ if (Result.isFailure(replaceTableEvents)) return replaceTableEvents;
120
+ const addedTableEvents = parseTableEvents("add-table-event", collectRepeatableFlag(rawArgs, "add-table-event"));
121
+ if (Result.isFailure(addedTableEvents)) return addedTableEvents;
122
+ const removedTableEvents = parseTableEvents("remove-table-event", collectRepeatableFlag(rawArgs, "remove-table-event"));
123
+ if (Result.isFailure(removedTableEvents)) return removedTableEvents;
124
+ const tableEvents = resolveArrayUpdate({
125
+ replaceFlag: "table-event",
126
+ clearFlag: "clear-table-events",
127
+ editFlags: "--add-table-event / --remove-table-event",
128
+ replace: replaceTableEvents.value,
129
+ add: addedTableEvents.value,
130
+ remove: removedTableEvents.value,
131
+ clear: args["clear-table-events"] === true
132
+ });
133
+ if (Result.isFailure(tableEvents)) return tableEvents;
134
+ const replaceHeaders = parseHeaders("header", collectRepeatableFlag(rawArgs, "header"));
135
+ if (Result.isFailure(replaceHeaders)) return replaceHeaders;
136
+ const addedHeaders = parseHeaders("add-header", collectRepeatableFlag(rawArgs, "add-header"));
137
+ if (Result.isFailure(addedHeaders)) return addedHeaders;
138
+ const duplicateAddedKey = findDuplicateKey(addedHeaders.value ?? [], (header) => header.key);
139
+ if (duplicateAddedKey !== void 0) return Result.fail({ message: `Invalid --add-header: key "${duplicateAddedKey}" is specified multiple times.` });
140
+ const removeHeaderValues = collectRepeatableFlag(rawArgs, "remove-header");
141
+ const removedHeaderKeys = removeHeaderValues === void 0 ? Result.succeed(void 0) : parseRepeatableFlag("remove-header", removeHeaderValues);
142
+ if (Result.isFailure(removedHeaderKeys)) return removedHeaderKeys;
143
+ const customHeaders = resolveArrayUpdate({
144
+ replaceFlag: "header",
145
+ clearFlag: "clear-headers",
146
+ editFlags: "--add-header / --remove-header",
147
+ replace: replaceHeaders.value,
148
+ add: addedHeaders.value,
149
+ remove: removedHeaderKeys.value,
150
+ clear: args["clear-headers"] === true
151
+ });
152
+ if (Result.isFailure(customHeaders)) return customHeaders;
153
+ let url;
154
+ if (typeof args.url === "string") {
155
+ const parsedUrl = parseHttpUrl("url", args.url);
156
+ if (Result.isFailure(parsedUrl)) return parsedUrl;
157
+ url = parsedUrl.value;
158
+ }
159
+ return runWithContext(args, (ctx) => webhookUpdateHandler(ctx, {
160
+ webhookId: webhookId.value,
161
+ name: typeof args.name === "string" ? args.name : void 0,
162
+ url,
163
+ tableEvents: tableEvents.value,
164
+ customHeaders: customHeaders.value
165
+ }));
166
+ }
167
+ });
168
+
169
+ //#endregion
170
+ export { update_default as default };
171
+ //# sourceMappingURL=update-DfYV_TQb.mjs.map