@metabase/cli 0.1.5 → 0.1.7

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 (228) hide show
  1. package/README.md +128 -115
  2. package/dist/add-collection-C9BdVBs2.mjs +11 -0
  3. package/dist/{add-collection-C_iovi9i.mjs → add-collection-DQjTlDNF.mjs} +12 -5
  4. package/dist/archive-B3qiL-kK.mjs +40 -0
  5. package/dist/{archive-DdaP94H3.mjs → archive-BXzghEQX.mjs} +10 -9
  6. package/dist/{archive-WaEW85NB.mjs → archive-CBGKzEAl.mjs} +9 -8
  7. package/dist/{archive-BKPO8lEO.mjs → archive-CuVk8iwN.mjs} +10 -9
  8. package/dist/archive-DTN9tLGT.mjs +40 -0
  9. package/dist/{archive-Dvzrmdbk.mjs → archive-De8jzzq7.mjs} +10 -9
  10. package/dist/auth-D9eAyVoG.mjs +19 -0
  11. package/dist/{body-XtR7-uCO.mjs → body-tcURGnGh.mjs} +4 -4
  12. package/dist/{branches-XUY4JY-X.mjs → branches-CIGkjXIk.mjs} +11 -7
  13. package/dist/{cancel-BrUVO_ax.mjs → cancel-pPsvgJ0Z.mjs} +9 -8
  14. package/dist/{cancel-task-oXheTOB6.mjs → cancel-task-BLGE4UlL.mjs} +12 -8
  15. package/dist/capabilities-7e9MgquN.mjs +29 -0
  16. package/dist/card-DDDrWcDU.mjs +20 -0
  17. package/dist/{card-CQxvHeyP.mjs → card-ezYiriML.mjs} +1 -1
  18. package/dist/{cards-CONTTAG9.mjs → cards-Dq3nx_9n.mjs} +8 -7
  19. package/dist/cli.mjs +264 -44
  20. package/dist/collection-DkEvCDar.mjs +20 -0
  21. package/dist/{predicates-CGO17Q15.mjs → command-augment-BH9qgQ5u.mjs} +66 -14
  22. package/dist/{create-Cs2xntFG.mjs → create-9DBTkbMq.mjs} +18 -16
  23. package/dist/{create-kYpjobrq.mjs → create-B1dyuL9Y.mjs} +16 -10
  24. package/dist/create-BIphz0kO.mjs +52 -0
  25. package/dist/create-BcgoukG4.mjs +50 -0
  26. package/dist/create-BdPoSk_7.mjs +50 -0
  27. package/dist/{create-DZxUeqdf.mjs → create-BrUqxreg.mjs} +11 -10
  28. package/dist/create-DHscDhRd.mjs +50 -0
  29. package/dist/{create-Dq25vsMu.mjs → create-aPaUEGdr.mjs} +11 -10
  30. package/dist/{create-branch-D5u14AxL.mjs → create-branch-DGoc9CUU.mjs} +12 -8
  31. package/dist/{create-Ca9lIDwP.mjs → create-w3mQg9n4.mjs} +11 -10
  32. package/dist/{credentials-BIQ1cEzM.mjs → credentials-qryRLUed.mjs} +12 -11
  33. package/dist/current-task-DZM28rnr.mjs +40 -0
  34. package/dist/{dashboard-CnMD04PQ.mjs → dashboard-B4bn3z6t.mjs} +2 -1
  35. package/dist/dashboard-BLf1RZlk.mjs +21 -0
  36. package/dist/{database-vvig8k4x.mjs → database-BXiue1in.mjs} +1 -1
  37. package/dist/{database-BSvzYlRe.mjs → database-Ce1gOJF7.mjs} +3 -3
  38. package/dist/db-CWTFe_FZ.mjs +22 -0
  39. package/dist/{delete-VTAS9EUt.mjs → delete-BPaFdHZP.mjs} +11 -8
  40. package/dist/{delete-CUx6RT9e.mjs → delete-BrJOotpW.mjs} +11 -8
  41. package/dist/{remove-C6bS0Z6w.mjs → delete-FFj1xQWO.mjs} +25 -20
  42. package/dist/{delete-runtime-DfFMWJJ6.mjs → delete-runtime-uuYbd4k2.mjs} +9 -7
  43. package/dist/{delete-table-DzUneMKe.mjs → delete-table-CNupWUO0.mjs} +11 -8
  44. package/dist/{deprovision-CpJfGgCt.mjs → deprovision-BNr9fPDY.mjs} +18 -12
  45. package/dist/{dirty-nkAOXxgC.mjs → dirty-BCkNOY8c.mjs} +11 -7
  46. package/dist/{docker-D5FTIoD0.mjs → docker-Ds252Mwc.mjs} +4 -4
  47. package/dist/{translate-Cqsd0Px5.mjs → eid-CLY5X0Uw.mjs} +43 -23
  48. package/dist/error-ZsFeevV2.mjs +191 -0
  49. package/dist/{export-BWvY7X_G.mjs → export-CgHgWW3I.mjs} +20 -18
  50. package/dist/{field-B3gvaqpK.mjs → field-E0IBy4Uw.mjs} +12 -3
  51. package/dist/field-LL6W_c-c.mjs +18 -0
  52. package/dist/{fields-dH16G5UV.mjs → fields-RkRWU-u9.mjs} +9 -8
  53. package/dist/{get-D96QEU49.mjs → get-42tJ7BNp.mjs} +8 -7
  54. package/dist/{get-C6SR3A9t.mjs → get-B8l4t4Pz.mjs} +10 -9
  55. package/dist/{get-BnBRKHr7.mjs → get-B9kwSs6U.mjs} +8 -7
  56. package/dist/{get-7macOPAI.mjs → get-Bo4Cpd_c.mjs} +7 -7
  57. package/dist/{get-BcqxMVC1.mjs → get-C9O_aEGo.mjs} +8 -7
  58. package/dist/{get-CKxlhMy1.mjs → get-CRvbChoX.mjs} +8 -7
  59. package/dist/{get-B7i_nYJB.mjs → get-CTDqioaj.mjs} +8 -7
  60. package/dist/{get-D8e_RzZ0.mjs → get-CiZrZJLt.mjs} +10 -9
  61. package/dist/{get-B08K82JV.mjs → get-CvmqPN30.mjs} +8 -7
  62. package/dist/{get-CACaBFLt.mjs → get-DmzgSgrl.mjs} +9 -8
  63. package/dist/{get-R7OaVL_t.mjs → get-DsqGHNHN.mjs} +8 -7
  64. package/dist/get-run-CBwcRc8E.mjs +38 -0
  65. package/dist/{get-DNN1X2gN.mjs → get-sMpa-X4E.mjs} +9 -8
  66. package/dist/{get-DAWofnzK.mjs → get-y17zJMnU.mjs} +8 -7
  67. package/dist/git-sync-CrWTo3YX.mjs +28 -0
  68. package/dist/{has-remote-changes-BAnIXQXU.mjs → has-remote-changes-CfRidwXT.mjs} +13 -8
  69. package/dist/{import-CfdPEMng.mjs → import-BZV0Z2KR.mjs} +21 -18
  70. package/dist/{input-BQ-BZA8h.mjs → input-cMSEqISy.mjs} +7 -4
  71. package/dist/is-dirty-CPzOnnH6.mjs +10 -0
  72. package/dist/{is-dirty-CZWcG0vj.mjs → is-dirty-hKcB4OH9.mjs} +9 -4
  73. package/dist/{items-DqwahOKf.mjs → items-C94eW2Yd.mjs} +10 -9
  74. package/dist/key-vkNkH82H.mjs +17 -0
  75. package/dist/license-B37055sr.mjs +17 -0
  76. package/dist/{list-L63TpX1t.mjs → list-B0V7FeL2.mjs} +7 -7
  77. package/dist/{list-Bkd7Nbds.mjs → list-BFlzLGlw.mjs} +7 -6
  78. package/dist/{list-yxVAE1S7.mjs → list-BJXaGk-z.mjs} +7 -6
  79. package/dist/{list-BqNMpIXy.mjs → list-BS_Bxejg.mjs} +9 -8
  80. package/dist/{list-J277Qtki.mjs → list-BmHoYJr7.mjs} +7 -6
  81. package/dist/list-C-oZe1_p.mjs +173 -0
  82. package/dist/{list-ViT2KWhv.mjs → list-CF1pMN4S.mjs} +7 -6
  83. package/dist/{list-BpNU1neq.mjs → list-CU6sOfI-.mjs} +9 -7
  84. package/dist/{list-oftHLFbE.mjs → list-CqN4gvCk.mjs} +9 -7
  85. package/dist/{list-DBOYoJtA.mjs → list-DUXdt0XI.mjs} +10 -6
  86. package/dist/{list-D41gfkKb.mjs → list-DfDZr55C.mjs} +10 -8
  87. package/dist/{list-vF4EneaE.mjs → list-DrINpVLM.mjs} +7 -6
  88. package/dist/{list-DJcGwJ4W.mjs → list-DuSoEk_J.mjs} +9 -8
  89. package/dist/{list-CQkDqphl.mjs → list-HS15y_WN.mjs} +7 -6
  90. package/dist/login-enh9Yimb.mjs +181 -0
  91. package/dist/{logout-DD4q5whi.mjs → logout-BWLPLDh8.mjs} +13 -11
  92. package/dist/{logs-Ci3mJE2z.mjs → logs-Cu3QtvPs.mjs} +9 -8
  93. package/dist/{manifest-CGM7XNLC.mjs → manifest-BNh0Lw6p.mjs} +15 -15
  94. package/dist/{measure-BEQfnLdN.mjs → measure-Bt3InQsA.mjs} +2 -2
  95. package/dist/measure-CDlEPFtB.mjs +19 -0
  96. package/dist/{metadata-BDat-jN9.mjs → metadata-BTTEBWdS.mjs} +10 -9
  97. package/dist/{metadata-29_qlqbz.mjs → metadata-D2TxboMm.mjs} +9 -8
  98. package/dist/parse-enum-CrEWOhuY.mjs +11 -0
  99. package/dist/{parse-id-CysSaCbf.mjs → parse-id-0_tOPvfI.mjs} +1 -1
  100. package/dist/{parse-ref-D1yeDOn8.mjs → parse-ref-DKag6a6I.mjs} +1 -1
  101. package/dist/{parse-schemas-B10n01ez.mjs → parse-schemas-D-qVLl4z.mjs} +2 -2
  102. package/dist/{path-DLByFMMA.mjs → path-C8GrBdgT.mjs} +7 -7
  103. package/dist/{poll-p9Y7-JEQ.mjs → poll-4eoh5J0r.mjs} +2 -2
  104. package/dist/{poll-task-BQe0NvJZ.mjs → poll-task-51WRdugU.mjs} +19 -20
  105. package/dist/{preflight-CvFu0Cct.mjs → preflight-BhsErYz3.mjs} +4 -4
  106. package/dist/{process-zJeVJZTM.mjs → process-CM7Uu5q_.mjs} +1 -1
  107. package/dist/{prompt-DgDNy_Pc.mjs → prompt-CFKoys7k.mjs} +3 -1
  108. package/dist/provision-Chf86BF0.mjs +83 -0
  109. package/dist/{ps-BxQdpkr5.mjs → ps-CEYtsKBj.mjs} +5 -3
  110. package/dist/ps-CIDwaubS.mjs +11 -0
  111. package/dist/{query-C7zTlFJA.mjs → query-BBCAF-tG.mjs} +17 -14
  112. package/dist/{query-CFH4nBlK.mjs → query-DYVBnu9d.mjs} +12 -9
  113. package/dist/query-result-ABPLz6I4.mjs +19 -0
  114. package/dist/{remove-BuWxx3hY.mjs → remove-2yInufA6.mjs} +14 -12
  115. package/dist/remove-collection-CBAHz0Dk.mjs +44 -0
  116. package/dist/{render-DuoDUTVL.mjs → render-0_GsapXa.mjs} +51 -23
  117. package/dist/render-khznBlla.mjs +32 -0
  118. package/dist/{rescan-values-DabyRYQ_.mjs → rescan-values-cfTSNQZo.mjs} +12 -11
  119. package/dist/{run-Cl-9RtC4.mjs → run-qgdEJv-I.mjs} +17 -15
  120. package/dist/{runs-BH6s1Zao.mjs → runs-BFIIH4GL.mjs} +9 -8
  121. package/dist/{runtime-CDu6fykq.mjs → runtime-Duawf5lE.mjs} +653 -428
  122. package/dist/{schema-tables-i58wp_p3.mjs → schema-tables-C2xM3dho.mjs} +9 -8
  123. package/dist/{schemas-_m8RYRl9.mjs → schemas-BP7xiktH.mjs} +7 -6
  124. package/dist/{search-DObOsjbP.mjs → search-DYP3lOlq.mjs} +12 -16
  125. package/dist/segment-B6HnNGDs.mjs +19 -0
  126. package/dist/{set-CwVWeAsi.mjs → set-DpRQqdo7.mjs} +13 -11
  127. package/dist/{set-CJA9dpK6.mjs → set-Tt-ioa4L.mjs} +14 -13
  128. package/dist/setting-DUa96KF3.mjs +17 -0
  129. package/dist/{setup-DqBOe3HZ.mjs → setup-BPlllnim.mjs} +10 -9
  130. package/dist/{skills-CHU7uuDU.mjs → skills-BkregMyb.mjs} +2 -2
  131. package/dist/{skills-C2rTVj0n.mjs → skills-SqbPo0BI.mjs} +3 -3
  132. package/dist/snippet-dJ68tGsl.mjs +19 -0
  133. package/dist/{start-CfruN4wF.mjs → start-DJZA67WF.mjs} +70 -38
  134. package/dist/{stash-CWuXKSZq.mjs → stash-C89zNKxo.mjs} +21 -18
  135. package/dist/{status-D-RYZB9G.mjs → status-B1EJ_jv0.mjs} +16 -9
  136. package/dist/status-BNvFPemM.mjs +100 -0
  137. package/dist/status-D5wSqYV_.mjs +34 -0
  138. package/dist/{stop-D8Hr4cKX.mjs → stop-5rCLmkCQ.mjs} +16 -11
  139. package/dist/{summary-Lt2XLBK9.mjs → summary-Cihbx0Qs.mjs} +8 -7
  140. package/dist/{sync-schema-BDElSynU.mjs → sync-schema-C3odu0ZH.mjs} +12 -11
  141. package/dist/table-J2f0STnB.mjs +19 -0
  142. package/dist/{table-B-PYcgGb.mjs → table-qDD2kApF.mjs} +1 -1
  143. package/dist/{transform-job-BrhOLO4M.mjs → transform-job-DjhoJbiV.mjs} +1 -1
  144. package/dist/transform-job-OW4SDhsQ.mjs +19 -0
  145. package/dist/transform-q1LYWQtW.mjs +24 -0
  146. package/dist/{tree-DfvjDjmk.mjs → tree-mvq9gM9w.mjs} +7 -6
  147. package/dist/{update-DzgXF082.mjs → update-BoIiuC70.mjs} +16 -14
  148. package/dist/{update-qnFY5IuC.mjs → update-C0jP0AKT.mjs} +12 -11
  149. package/dist/{update-zp7pCBZH.mjs → update-CbBnHz42.mjs} +16 -14
  150. package/dist/{update-B0bjPqKC.mjs → update-CtOo3LsX.mjs} +13 -12
  151. package/dist/{update-CVxOxmt6.mjs → update-DCrOQ1PW.mjs} +17 -15
  152. package/dist/{update-BYduslhn.mjs → update-DEZayTb4.mjs} +20 -15
  153. package/dist/{update-BgcroYkF.mjs → update-DwRxdflw.mjs} +12 -11
  154. package/dist/{update-D9Z8cL7h.mjs → update-Rr4usmCo.mjs} +12 -11
  155. package/dist/{update-DuA8-cCq.mjs → update-VvKMnwsM.mjs} +16 -14
  156. package/dist/{update-dashcard-CQ3kmmss.mjs → update-dashcard-DFvIz8Qj.mjs} +12 -11
  157. package/dist/{update-CqnDMNtZ.mjs → update-tRparnUs.mjs} +18 -16
  158. package/dist/{upgrade-CIgTr2CG.mjs → upgrade-D-Rl_fH9.mjs} +16 -29
  159. package/dist/{url-B5MgZXzg.mjs → url-BB6jeNQj.mjs} +11 -10
  160. package/dist/{uuid-CJz9TmHI.mjs → uuid-BSVUk8u2.mjs} +8 -6
  161. package/dist/{validate-CB0bu50i.mjs → validate-dPEOnOf8.mjs} +2 -1
  162. package/dist/{validate-query-CavIA0Q2.mjs → validate-query-CYvOP8Ld.mjs} +3 -3
  163. package/dist/values-D1RJE4H6.mjs +45 -0
  164. package/dist/verify-A7BWfBPZ.mjs +79 -0
  165. package/dist/{wait-BFqBlg0y.mjs → wait-B17I_pWy.mjs} +2 -2
  166. package/dist/{wait-tDp9ZOou.mjs → wait-DK5QDZ8n.mjs} +14 -10
  167. package/dist/{wait-flags-CN-e9zNq.mjs → wait-flags-DlfbIXHw.mjs} +20 -9
  168. package/dist/{workspace-credentials-4lIxxz4g.mjs → workspace-credentials-8CBMQJFz.mjs} +2 -2
  169. package/dist/workspace-ri6r3zWo.mjs +25 -0
  170. package/dist/{yaml-ECiog374.mjs → yaml-Gv6wRFMF.mjs} +1 -1
  171. package/package.json +2 -1
  172. package/skill-data/core/SKILL.md +55 -453
  173. package/skill-data/git-sync/SKILL.md +1 -1
  174. package/skill-data/mbql/SKILL.md +156 -0
  175. package/skill-data/mbql/references/operators.md +253 -0
  176. package/skill-data/transform/SKILL.md +2 -40
  177. package/skill-data/viz/SKILL.md +137 -0
  178. package/skill-data/viz/references/settings.md +312 -0
  179. package/skill-data/workspace/SKILL.md +45 -63
  180. package/skills/metabase-cli/SKILL.md +5 -26
  181. package/dist/add-collection-ucsyAMkV.mjs +0 -11
  182. package/dist/api-key-BENHbTbV.mjs +0 -13
  183. package/dist/auth-DICRtJDy.mjs +0 -19
  184. package/dist/card-l-UmrUIo.mjs +0 -20
  185. package/dist/collection-oV0olVY-.mjs +0 -19
  186. package/dist/command-augment-D9pI9Vbh.mjs +0 -11
  187. package/dist/create-CrUq6sib.mjs +0 -125
  188. package/dist/create-D3Z878yr.mjs +0 -50
  189. package/dist/create-Le3Bqn7b.mjs +0 -48
  190. package/dist/create-V-q2rU0T.mjs +0 -48
  191. package/dist/create-swbIXdo5.mjs +0 -48
  192. package/dist/current-task-DCq7rk9V.mjs +0 -36
  193. package/dist/dashboard-hbKDd36X.mjs +0 -20
  194. package/dist/db-qVK6NsdB.mjs +0 -22
  195. package/dist/eid-CDFXX_6H.mjs +0 -13
  196. package/dist/field-C0LE7RQI.mjs +0 -18
  197. package/dist/flag-pair-Fmcdkrfx.mjs +0 -17
  198. package/dist/get-run-CwFuR4Uw.mjs +0 -36
  199. package/dist/git-sync-DV7YjniX.mjs +0 -28
  200. package/dist/is-dirty-LxVbm2C5.mjs +0 -10
  201. package/dist/key-CCJdVWKc.mjs +0 -12
  202. package/dist/license-Cb6ewEJO.mjs +0 -17
  203. package/dist/list-DV6CONhp.mjs +0 -55
  204. package/dist/login-D1nZwgKv.mjs +0 -192
  205. package/dist/measure-XhJuL77y.mjs +0 -19
  206. package/dist/package-DFUprkSZ.mjs +0 -85
  207. package/dist/provision-BP-b4Are.mjs +0 -77
  208. package/dist/ps-Bk6unzaX.mjs +0 -11
  209. package/dist/remove-collection-Bc4roCq0.mjs +0 -38
  210. package/dist/segment-DfxZdJmR.mjs +0 -19
  211. package/dist/setting-Czy4ws6h.mjs +0 -18
  212. package/dist/snippet-BCY4KHBU.mjs +0 -19
  213. package/dist/status-1oUnw803.mjs +0 -56
  214. package/dist/status-J9HIDcA5.mjs +0 -32
  215. package/dist/table-BwX3Ib5f.mjs +0 -19
  216. package/dist/transform-iaAi37V0.mjs +0 -24
  217. package/dist/transform-job-Bemonf82.mjs +0 -19
  218. package/dist/values-BXN6tx1i.mjs +0 -36
  219. package/dist/workspace-BBsT0H0g.mjs +0 -24
  220. /package/dist/{body-flags-BK7J6Daz.mjs → body-flags-D7q87Btw.mjs} +0 -0
  221. /package/dist/{collection-B3sPXRLs.mjs → collection-Bcy8cWYH.mjs} +0 -0
  222. /package/dist/{paginate-CTSfuYiF.mjs → paginate-BexjkjbY.mjs} +0 -0
  223. /package/dist/{revision-message-flag-oyq2xrDU.mjs → revision-message-flag-DY29-cgz.mjs} +0 -0
  224. /package/dist/{segment-BMrUBz94.mjs → segment-DhBmcr_E.mjs} +0 -0
  225. /package/dist/{setting-CTaAeMci.mjs → setting-BzCng1Ub.mjs} +0 -0
  226. /package/dist/{snippet-CSWqkslB.mjs → snippet-bi_0XbNT.mjs} +0 -0
  227. /package/dist/{transform-DR4ejuPM.mjs → transform-BKahefz_.mjs} +0 -0
  228. /package/dist/{workspace-DUfqhPm5.mjs → workspace-D8HtUN0y.mjs} +0 -0
@@ -0,0 +1,173 @@
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { listEnvelopeSchema, outputFlags, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { ParsedVersionSchema, ProbedUser, ProfileLastFailure, TokenFeatures, defineMetabaseCommand, listProfileRecords, originOnly, readProfile, writeProbeFailure, writeProbeResult } from "./runtime-Duawf5lE.mjs";
4
+ import { verifyAndProbe } from "./verify-A7BWfBPZ.mjs";
5
+ import { warn } from "./capabilities-7e9MgquN.mjs";
6
+ import { renderList } from "./render-0_GsapXa.mjs";
7
+ import { renderTimestamp, renderUserRole, renderVersionTag } from "./render-khznBlla.mjs";
8
+ import { z } from "zod";
9
+
10
+ //#region src/commands/auth/list.ts
11
+ const AuthProfileStatus = z.enum([
12
+ "ok",
13
+ "auth-failed",
14
+ "network-error",
15
+ "server-error",
16
+ "not-probed"
17
+ ]);
18
+ const AuthProfile = z.object({
19
+ profile: z.string(),
20
+ url: z.string(),
21
+ authenticated: z.boolean(),
22
+ status: AuthProfileStatus,
23
+ user: ProbedUser.nullable(),
24
+ version: ParsedVersionSchema.nullable(),
25
+ tokenFeatures: TokenFeatures.nullable(),
26
+ lastProbedAt: z.iso.datetime().nullable(),
27
+ lastFailure: ProfileLastFailure.nullable()
28
+ });
29
+ const AuthProfileListEnvelope = listEnvelopeSchema(AuthProfile);
30
+ const STATUS_LABEL = Object.freeze({
31
+ ok: "OK",
32
+ "auth-failed": "Auth failed",
33
+ "network-error": "Network error",
34
+ "server-error": "Server error",
35
+ "not-probed": "Not probed"
36
+ });
37
+ const authProfileView = {
38
+ compactPick: AuthProfile,
39
+ tableColumns: [
40
+ {
41
+ key: "profile",
42
+ label: "Profile"
43
+ },
44
+ {
45
+ key: "url",
46
+ label: "URL"
47
+ },
48
+ {
49
+ key: "status",
50
+ label: "Status",
51
+ format: (value) => renderStatus(value)
52
+ },
53
+ {
54
+ key: "user",
55
+ label: "Role",
56
+ format: (value) => renderUserRole(value)
57
+ },
58
+ {
59
+ key: "version",
60
+ label: "Version",
61
+ format: (value) => renderVersionTag(value)
62
+ },
63
+ {
64
+ key: "lastProbedAt",
65
+ label: "Last probed",
66
+ format: (value) => renderTimestamp(value)
67
+ }
68
+ ]
69
+ };
70
+ function renderStatus(value) {
71
+ const parsed = AuthProfileStatus.safeParse(value);
72
+ return parsed.success ? STATUS_LABEL[parsed.data] : "—";
73
+ }
74
+ var list_default = defineMetabaseCommand({
75
+ meta: {
76
+ name: "list",
77
+ description: "List configured authentication profiles"
78
+ },
79
+ capabilities: { minVersion: 58 },
80
+ args: { ...outputFlags },
81
+ outputSchema: AuthProfileListEnvelope,
82
+ examples: ["mb auth list", "mb auth list --json"],
83
+ async run({ ctx }) {
84
+ const records = await listProfileRecords();
85
+ const verifications = await Promise.all(records.map(verifyOne));
86
+ const items = [];
87
+ for (const entry of verifications) items.push(await persistAndProject(entry));
88
+ renderList(wrapList(items), authProfileView, ctx);
89
+ for (const item of items) if (item.status === "auth-failed" && item.lastFailure !== null) warn(`${item.profile}: ${item.lastFailure.reason}. Run \`mb auth login --profile ${item.profile}\` to update the token.`);
90
+ }
91
+ });
92
+ async function verifyOne(record) {
93
+ const profile = await readProfile(record.name);
94
+ if (profile === null) return {
95
+ record,
96
+ url: record.url,
97
+ verification: { kind: "no-creds" }
98
+ };
99
+ const result = await verifyAndProbe(profile.url, profile.apiKey);
100
+ if (result.ok) return {
101
+ record,
102
+ url: profile.url,
103
+ verification: {
104
+ kind: "success",
105
+ user: result.user,
106
+ server: result.server
107
+ }
108
+ };
109
+ return {
110
+ record,
111
+ url: profile.url,
112
+ verification: {
113
+ kind: "failure",
114
+ failure: result
115
+ }
116
+ };
117
+ }
118
+ async function persistAndProject(entry) {
119
+ const { record, url, verification } = entry;
120
+ if (verification.kind === "no-creds") return toJson(record, "not-probed");
121
+ if (verification.kind === "success") {
122
+ const probe = await writeProbeResult(record.name, {
123
+ user: verification.user,
124
+ server: verification.server
125
+ });
126
+ if (probe === null) return toJson(record, "not-probed");
127
+ return projectSuccess(record.name, url, probe);
128
+ }
129
+ const failure = await writeProbeFailure(record.name, {
130
+ kind: verification.failure.kind,
131
+ reason: verification.failure.message
132
+ });
133
+ if (failure === null) return toJson(record, "not-probed");
134
+ return toJson({
135
+ ...record,
136
+ lastFailure: failure
137
+ }, statusFromVerification(verification.failure));
138
+ }
139
+ function projectSuccess(name, url, probe) {
140
+ return {
141
+ profile: name,
142
+ url: originOnly(url),
143
+ authenticated: true,
144
+ status: "ok",
145
+ user: probe.user,
146
+ version: probe.version,
147
+ tokenFeatures: probe.tokenFeatures,
148
+ lastProbedAt: probe.at,
149
+ lastFailure: null
150
+ };
151
+ }
152
+ function toJson(record, status) {
153
+ const probe = record.lastProbe;
154
+ return {
155
+ profile: record.name,
156
+ url: originOnly(record.url),
157
+ authenticated: status === "ok",
158
+ status,
159
+ user: probe?.user ?? null,
160
+ version: probe?.version ?? null,
161
+ tokenFeatures: probe?.tokenFeatures ?? null,
162
+ lastProbedAt: probe?.at ?? null,
163
+ lastFailure: record.lastFailure
164
+ };
165
+ }
166
+ function statusFromVerification(failure) {
167
+ if (failure.kind === "auth") return "auth-failed";
168
+ if (failure.kind === "network") return "network-error";
169
+ return "server-error";
170
+ }
171
+
172
+ //#endregion
173
+ export { list_default as default };
@@ -1,9 +1,9 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import { Transform, TransformCompact, transformView } from "./transform-DR4ejuPM.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import { Transform, TransformCompact, transformView } from "./transform-BKahefz_.mjs";
7
7
  import { z } from "zod";
8
8
 
9
9
  //#region src/commands/transform/list.ts
@@ -14,6 +14,7 @@ var list_default = defineMetabaseCommand({
14
14
  name: "list",
15
15
  description: "List transforms"
16
16
  },
17
+ capabilities: { minVersion: 59 },
17
18
  args: {
18
19
  ...outputFlags,
19
20
  ...profileFlag,
@@ -1,9 +1,10 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import { Collection, CollectionCompact, collectionView } from "./collection-B3sPXRLs.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import { parseEnumFlag } from "./parse-enum-CrEWOhuY.mjs";
7
+ import { Collection, CollectionCompact, collectionView } from "./collection-Bcy8cWYH.mjs";
7
8
  import { z } from "zod";
8
9
 
9
10
  //#region src/commands/collection/list.ts
@@ -24,6 +25,7 @@ var list_default = defineMetabaseCommand({
24
25
  name: "list",
25
26
  description: "List collections"
26
27
  },
28
+ capabilities: { minVersion: 58 },
27
29
  args: {
28
30
  ...outputFlags,
29
31
  ...profileFlag,
@@ -41,7 +43,7 @@ var list_default = defineMetabaseCommand({
41
43
  "mb collection list --filter archived --json"
42
44
  ],
43
45
  async run({ args, ctx, getClient }) {
44
- const filter = CollectionListFilter.parse(args.filter);
46
+ const filter = parseEnumFlag(args.filter, CollectionListFilter, "filter");
45
47
  const client = await getClient();
46
48
  const items = await client.requestParsed(CollectionApiList, "/api/collection", { query: COLLECTION_LIST_QUERY[filter] });
47
49
  renderList(wrapList(items), collectionView, ctx);
@@ -1,9 +1,10 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import { Dashboard, DashboardCompact, dashboardView } from "./dashboard-CnMD04PQ.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import { parseEnumFlag } from "./parse-enum-CrEWOhuY.mjs";
7
+ import { Dashboard, DashboardCompact, dashboardView } from "./dashboard-B4bn3z6t.mjs";
7
8
  import { z } from "zod";
8
9
 
9
10
  //#region src/commands/dashboard/list.ts
@@ -19,6 +20,7 @@ var list_default = defineMetabaseCommand({
19
20
  name: "list",
20
21
  description: "List dashboards"
21
22
  },
23
+ capabilities: { minVersion: 58 },
22
24
  args: {
23
25
  ...outputFlags,
24
26
  ...profileFlag,
@@ -36,7 +38,7 @@ var list_default = defineMetabaseCommand({
36
38
  "mb dashboard list --filter archived --json"
37
39
  ],
38
40
  async run({ args, ctx, getClient }) {
39
- const filter = DashboardListFilter.parse(args.filter);
41
+ const filter = parseEnumFlag(args.filter, DashboardListFilter, "filter");
40
42
  const client = await getClient();
41
43
  const items = await client.requestParsed(DashboardApiList, "/api/dashboard", { query: { f: filter } });
42
44
  renderList(wrapList(items), dashboardView, ctx);
@@ -1,9 +1,9 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import { Workspace, WorkspaceCompact, workspaceView } from "./workspace-DUfqhPm5.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import { Workspace, WorkspaceCompact, workspaceView } from "./workspace-D8HtUN0y.mjs";
7
7
  import { z } from "zod";
8
8
 
9
9
  //#region src/commands/workspace/list.ts
@@ -14,6 +14,10 @@ var list_default = defineMetabaseCommand({
14
14
  name: "list",
15
15
  description: "List workspaces"
16
16
  },
17
+ capabilities: {
18
+ minVersion: 62,
19
+ tokenFeature: "workspaces"
20
+ },
17
21
  args: {
18
22
  ...outputFlags,
19
23
  ...profileFlag,
@@ -1,10 +1,11 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import "./field-B3gvaqpK.mjs";
7
- import { Card, CardCompact, cardView } from "./card-CQxvHeyP.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import "./field-E0IBy4Uw.mjs";
7
+ import { Card, CardCompact, cardView } from "./card-ezYiriML.mjs";
8
+ import { parseEnumFlag } from "./parse-enum-CrEWOhuY.mjs";
8
9
  import { z } from "zod";
9
10
 
10
11
  //#region src/commands/card/list.ts
@@ -25,6 +26,7 @@ var list_default = defineMetabaseCommand({
25
26
  name: "list",
26
27
  description: "List cards (questions, models, metrics)"
27
28
  },
29
+ capabilities: { minVersion: 58 },
28
30
  args: {
29
31
  ...outputFlags,
30
32
  ...profileFlag,
@@ -47,7 +49,7 @@ var list_default = defineMetabaseCommand({
47
49
  "mb card list --filter using_model --model-id 42 --json"
48
50
  ],
49
51
  async run({ args, ctx, getClient }) {
50
- const filter = CardListFilter.parse(args.filter);
52
+ const filter = parseEnumFlag(args.filter, CardListFilter, "filter");
51
53
  const modelId = args.modelId === void 0 || args.modelId === "" ? void 0 : args.modelId;
52
54
  const client = await getClient();
53
55
  const items = await client.requestParsed(CardApiList, "/api/card", { query: {
@@ -1,9 +1,9 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import { Snippet, SnippetCompact, snippetView } from "./snippet-CSWqkslB.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import { Snippet, SnippetCompact, snippetView } from "./snippet-bi_0XbNT.mjs";
7
7
  import { z } from "zod";
8
8
 
9
9
  //#region src/commands/snippet/list.ts
@@ -14,6 +14,7 @@ var list_default = defineMetabaseCommand({
14
14
  name: "list",
15
15
  description: "List native query snippets"
16
16
  },
17
+ capabilities: { minVersion: 58 },
17
18
  args: {
18
19
  ...outputFlags,
19
20
  ...profileFlag,
@@ -1,11 +1,11 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import { parseId } from "./parse-id-CysSaCbf.mjs";
7
- import "./field-B3gvaqpK.mjs";
8
- import { Table, TableCompact, tableView } from "./table-B-PYcgGb.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import "./field-E0IBy4Uw.mjs";
7
+ import { parseId } from "./parse-id-0_tOPvfI.mjs";
8
+ import { Table, TableCompact, tableView } from "./table-qDD2kApF.mjs";
9
9
  import { z } from "zod";
10
10
 
11
11
  //#region src/commands/table/list.ts
@@ -16,6 +16,7 @@ var list_default = defineMetabaseCommand({
16
16
  name: "list",
17
17
  description: "List tables (optionally filtered by database)"
18
18
  },
19
+ capabilities: { minVersion: 58 },
19
20
  args: {
20
21
  ...outputFlags,
21
22
  ...profileFlag,
@@ -1,9 +1,9 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import { Measure, MeasureCompact, measureView } from "./measure-BEQfnLdN.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import { Measure, MeasureCompact, measureView } from "./measure-Bt3InQsA.mjs";
7
7
  import { z } from "zod";
8
8
 
9
9
  //#region src/commands/measure/list.ts
@@ -14,6 +14,7 @@ var list_default = defineMetabaseCommand({
14
14
  name: "list",
15
15
  description: "List measures"
16
16
  },
17
+ capabilities: { minVersion: 59 },
17
18
  args: {
18
19
  ...outputFlags,
19
20
  ...profileFlag,
@@ -0,0 +1,181 @@
1
+ import { ConfigError, errorMessage } from "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
3
+ import { DEFAULT_PROFILE, ParsedVersionSchema, ProbedUser, defineMetabaseCommand, explicitProfileName, keyringFallbackWarning, normalizeUrl, readEnvCredentials, writeProbeFailure, writeProbeResult, writeProfile } from "./runtime-Duawf5lE.mjs";
4
+ import { verifyAndProbe } from "./verify-A7BWfBPZ.mjs";
5
+ import { warn } from "./capabilities-7e9MgquN.mjs";
6
+ import { renderSummary } from "./render-0_GsapXa.mjs";
7
+ import { EMPTY_CELL, renderUserName, renderUserRole, renderVersionTag } from "./render-khznBlla.mjs";
8
+ import { promptPassword, promptText } from "./prompt-CFKoys7k.mjs";
9
+ import { readInput } from "./input-cMSEqISy.mjs";
10
+ import { z } from "zod";
11
+
12
+ //#region src/commands/auth/login.ts
13
+ const LoginResult = z.object({
14
+ profile: z.string(),
15
+ url: z.string(),
16
+ authenticated: z.boolean(),
17
+ user: ProbedUser.nullable(),
18
+ version: ParsedVersionSchema.nullable()
19
+ });
20
+ const loginView = {
21
+ compactPick: LoginResult,
22
+ tableColumns: [
23
+ {
24
+ key: "profile",
25
+ label: "Profile"
26
+ },
27
+ {
28
+ key: "url",
29
+ label: "Metabase URL"
30
+ },
31
+ {
32
+ key: "authenticated",
33
+ label: "Authenticated",
34
+ format: (value) => value === true ? "credentials verified" : "saved without verification"
35
+ },
36
+ {
37
+ key: "user",
38
+ label: "Logged in as",
39
+ format: (value) => renderUserName(value)
40
+ },
41
+ {
42
+ key: "user",
43
+ label: "Role",
44
+ format: (value) => renderUserRole(value)
45
+ },
46
+ {
47
+ key: "version",
48
+ label: "Version",
49
+ format: (value) => renderVersionTag(value)
50
+ }
51
+ ]
52
+ };
53
+ var login_default = defineMetabaseCommand({
54
+ meta: {
55
+ name: "login",
56
+ description: "Set Metabase credentials for a profile"
57
+ },
58
+ details: "API-key auth only. The key is read from --api-key, $METABASE_API_KEY, or piped stdin (first non-empty wins); the URL from --url or $METABASE_URL. Both are prompted when stdin is a TTY.",
59
+ capabilities: { minVersion: 58 },
60
+ args: {
61
+ ...outputFlags,
62
+ ...profileFlag,
63
+ ...connectionFlags,
64
+ "skip-verify": {
65
+ type: "boolean",
66
+ default: false,
67
+ description: "Save without contacting the server"
68
+ }
69
+ },
70
+ outputSchema: LoginResult,
71
+ examples: [
72
+ "mb auth login --url https://metabase.example.com < key.txt",
73
+ "echo $METABASE_API_KEY | mb auth login --url https://metabase.example.com",
74
+ "mb auth login --profile staging --url https://staging.example.com"
75
+ ],
76
+ async run({ args, ctx }) {
77
+ const profileName = await resolveLoginProfile(args.profile);
78
+ const env = readEnvCredentials();
79
+ if (args.apiKey) warn("warning: --api-key is visible in shell history and process listings — pipe the key on stdin or set METABASE_API_KEY instead");
80
+ const url = await resolveUrl(args.url, env.url);
81
+ const apiKey = await resolveApiKey(args.apiKey, env.apiKey);
82
+ if (args["skip-verify"]) {
83
+ const location$1 = await writeProfile({
84
+ url,
85
+ apiKey
86
+ }, profileName);
87
+ if (location$1.backend === "file") warn(keyringFallbackWarning(location$1, "credentials"));
88
+ renderSummary({
89
+ profile: profileName,
90
+ url,
91
+ authenticated: false,
92
+ user: null,
93
+ version: null
94
+ }, loginView, `Saved credentials for profile "${profileName}" (${url}) without verifying.`, ctx);
95
+ return;
96
+ }
97
+ const result = await verifyAndProbe(url, apiKey);
98
+ if (!result.ok) {
99
+ await writeProbeFailure(profileName, {
100
+ kind: result.kind,
101
+ reason: result.message
102
+ });
103
+ throw new ConfigError(formatVerifyFailureMessage(profileName, result));
104
+ }
105
+ const location = await writeProfile({
106
+ url,
107
+ apiKey
108
+ }, profileName);
109
+ if (location.backend === "file") warn(keyringFallbackWarning(location, "credentials"));
110
+ await writeProbeResult(profileName, {
111
+ user: result.user,
112
+ server: result.server
113
+ });
114
+ const who = renderUserName(result.user);
115
+ const role = renderUserRole(result.user);
116
+ const versionTag = renderVersionTag(result.server.version);
117
+ const serverClause = versionTag === EMPTY_CELL ? "" : ` Server ${versionTag}.`;
118
+ renderSummary({
119
+ profile: profileName,
120
+ url,
121
+ authenticated: true,
122
+ user: result.user,
123
+ version: result.server.version
124
+ }, loginView, `Logged in to ${url} as ${who} (${role}). Saved to profile "${profileName}".${serverClause}`, ctx);
125
+ }
126
+ });
127
+ function formatVerifyFailureMessage(profileName, failure) {
128
+ const which = failure.which === "user" ? "/api/user/current" : "/api/session/properties";
129
+ return `verification failed (${which}): ${failure.message} — credentials were not saved for profile "${profileName}"`;
130
+ }
131
+ async function resolveLoginProfile(flagProfile) {
132
+ const explicit = explicitProfileName(flagProfile);
133
+ if (explicit !== null) return explicit;
134
+ if (!process.stdin.isTTY) return DEFAULT_PROFILE;
135
+ const entered = (await promptText({
136
+ message: "Profile name",
137
+ placeholder: DEFAULT_PROFILE,
138
+ defaultValue: DEFAULT_PROFILE
139
+ })).trim();
140
+ return entered === "" ? DEFAULT_PROFILE : entered;
141
+ }
142
+ async function resolveUrl(flagUrl, envUrl) {
143
+ if (flagUrl) return normalizeUrl(flagUrl);
144
+ if (envUrl) return normalizeUrl(envUrl);
145
+ return promptForUrl();
146
+ }
147
+ async function resolveApiKey(flagKey, envKey) {
148
+ if (flagKey) return flagKey;
149
+ const piped = (await readInput({ required: false })).trim();
150
+ if (piped) return piped;
151
+ if (envKey) return envKey;
152
+ return promptForApiKey();
153
+ }
154
+ async function promptForUrl() {
155
+ if (!process.stdin.isTTY) throw new ConfigError("--url is required when stdin is not a TTY (cannot prompt interactively)");
156
+ const value = await promptText({
157
+ message: "Metabase URL",
158
+ placeholder: "https://metabase.example.com",
159
+ validate(input) {
160
+ if (!input) return "URL is required";
161
+ try {
162
+ normalizeUrl(input);
163
+ } catch (error) {
164
+ return errorMessage(error);
165
+ }
166
+ return void 0;
167
+ }
168
+ });
169
+ return normalizeUrl(value);
170
+ }
171
+ async function promptForApiKey() {
172
+ if (!process.stdin.isTTY) throw new ConfigError("--api-key, piped stdin, or METABASE_API_KEY required when stdin is not a TTY");
173
+ return promptPassword({
174
+ message: "API key",
175
+ mask: "•",
176
+ validate: (input) => input ? void 0 : "API key is required"
177
+ });
178
+ }
179
+
180
+ //#endregion
181
+ export { login_default as default };
@@ -1,9 +1,9 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { clearProfile, clearRejection, defineMetabaseCommand, outputFlags, profileFlag, resolveProfileName } from "./runtime-CDu6fykq.mjs";
6
- import { promptConfirm } from "./prompt-DgDNy_Pc.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
3
+ import { clearProfile, defineMetabaseCommand, resolveProfileName } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderSummary } from "./render-0_GsapXa.mjs";
6
+ import { promptConfirm } from "./prompt-CFKoys7k.mjs";
7
7
  import { z } from "zod";
8
8
 
9
9
  //#region src/commands/auth/logout.ts
@@ -34,6 +34,7 @@ var logout_default = defineMetabaseCommand({
34
34
  name: "logout",
35
35
  description: "Clear stored credentials for a profile"
36
36
  },
37
+ capabilities: null,
37
38
  args: {
38
39
  ...outputFlags,
39
40
  ...profileFlag,
@@ -53,20 +54,21 @@ var logout_default = defineMetabaseCommand({
53
54
  initialValue: false
54
55
  });
55
56
  if (!ok) {
56
- renderItem({
57
+ renderSummary({
57
58
  profile: profileName,
58
59
  cleared: false,
59
60
  aborted: true
60
- }, logoutView, ctx);
61
+ }, logoutView, `Left credentials for profile "${profileName}" untouched.`, ctx);
61
62
  return;
62
63
  }
63
64
  }
64
- const [cleared] = await Promise.all([clearProfile(profileName), clearRejection(profileName)]);
65
- renderItem({
65
+ const cleared = await clearProfile(profileName);
66
+ const message = cleared ? `Cleared stored credentials for profile "${profileName}".` : `No stored credentials for profile "${profileName}".`;
67
+ renderSummary({
66
68
  profile: profileName,
67
69
  cleared,
68
70
  aborted: false
69
- }, logoutView, ctx);
71
+ }, logoutView, message, ctx);
70
72
  }
71
73
  });
72
74
 
@@ -1,11 +1,11 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { ConfigError } from "./predicates-CGO17Q15.mjs";
4
- import { defineMetabaseCommand, outputFlags, parseInteger } from "./runtime-CDu6fykq.mjs";
5
- import { parseId } from "./parse-id-CysSaCbf.mjs";
6
- import "./poll-p9Y7-JEQ.mjs";
7
- import "./process-zJeVJZTM.mjs";
8
- import { checkDockerReady, containerLifecycleStatus, containerNameFor, streamLogs } from "./docker-D5FTIoD0.mjs";
1
+ import { ConfigError } from "./command-augment-BH9qgQ5u.mjs";
2
+ import { outputFlags } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand, parseInteger } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { parseId } from "./parse-id-0_tOPvfI.mjs";
6
+ import "./poll-4eoh5J0r.mjs";
7
+ import "./process-CM7Uu5q_.mjs";
8
+ import { checkDockerReady, containerLifecycleStatus, containerNameFor, streamLogs } from "./docker-Ds252Mwc.mjs";
9
9
 
10
10
  //#region src/commands/workspace/logs.ts
11
11
  const DEFAULT_TAIL = 200;
@@ -14,6 +14,7 @@ var logs_default = defineMetabaseCommand({
14
14
  name: "logs",
15
15
  description: "Stream the local container's logs (passthrough to `docker logs`)"
16
16
  },
17
+ capabilities: null,
17
18
  args: {
18
19
  ...outputFlags,
19
20
  id: {