@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
@@ -1,192 +0,0 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem, warn } from "./render-DuoDUTVL.mjs";
4
- import { ConfigError, MetabaseError, errorMessage } from "./predicates-CGO17Q15.mjs";
5
- import { readInput } from "./input-BQ-BZA8h.mjs";
6
- import { DEFAULT_PROFILE, HttpError, clearRejection, connectionFlags, createClient, defineMetabaseCommand, explicitProfileName, normalizeUrl, outputFlags, profileFlag, readEnvCredentials, recordRejection, writeProfile } from "./runtime-CDu6fykq.mjs";
7
- import { promptPassword, promptText } from "./prompt-DgDNy_Pc.mjs";
8
- import { z } from "zod";
9
-
10
- //#region src/domain/user.ts
11
- const CurrentUser = z.object({
12
- id: z.number().int(),
13
- email: z.email()
14
- }).loose();
15
- const CurrentUserCompact = CurrentUser.pick({
16
- id: true,
17
- email: true
18
- }).strip();
19
-
20
- //#endregion
21
- //#region src/core/auth/verify.ts
22
- const VERIFY_TIMEOUT_MS = 15e3;
23
- async function verifyCredentials(url, apiKey) {
24
- const client = createClient({
25
- url,
26
- apiKey
27
- });
28
- try {
29
- const user = await client.requestParsed(CurrentUser, "/api/user/current", {
30
- timeoutMs: VERIFY_TIMEOUT_MS,
31
- retries: 0
32
- });
33
- return {
34
- ok: true,
35
- user
36
- };
37
- } catch (error) {
38
- return failure(error);
39
- }
40
- }
41
- function failure(error) {
42
- if (error instanceof HttpError) return {
43
- ok: false,
44
- status: error.status,
45
- message: error.userMessage
46
- };
47
- if (error instanceof MetabaseError) return {
48
- ok: false,
49
- message: error.userMessage
50
- };
51
- return {
52
- ok: false,
53
- message: errorMessage(error)
54
- };
55
- }
56
-
57
- //#endregion
58
- //#region src/commands/auth/login.ts
59
- const LoginResult = z.object({
60
- profile: z.string(),
61
- url: z.string(),
62
- authenticated: z.boolean(),
63
- email: z.string().nullable()
64
- });
65
- const loginView = {
66
- compactPick: LoginResult,
67
- tableColumns: [
68
- {
69
- key: "profile",
70
- label: "Profile"
71
- },
72
- {
73
- key: "url",
74
- label: "Metabase URL"
75
- },
76
- {
77
- key: "authenticated",
78
- label: "Status",
79
- format: (value) => value === true ? "credentials verified" : "saved without verification"
80
- },
81
- {
82
- key: "email",
83
- label: "Logged in as"
84
- }
85
- ]
86
- };
87
- var login_default = defineMetabaseCommand({
88
- meta: {
89
- name: "login",
90
- description: "Set Metabase credentials for a profile"
91
- },
92
- args: {
93
- ...outputFlags,
94
- ...profileFlag,
95
- ...connectionFlags,
96
- "skip-verify": {
97
- type: "boolean",
98
- default: false,
99
- description: "Save without contacting the server"
100
- }
101
- },
102
- outputSchema: LoginResult,
103
- examples: [
104
- "mb auth login --url https://metabase.example.com < key.txt",
105
- "echo $METABASE_API_KEY | mb auth login --url https://metabase.example.com",
106
- "mb auth login --profile staging --url https://staging.example.com"
107
- ],
108
- async run({ args, ctx }) {
109
- const profileName = await resolveLoginProfile(args.profile);
110
- const env = readEnvCredentials();
111
- 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");
112
- const url = await resolveUrl(args.url, env.url);
113
- const apiKey = await resolveApiKey(args.apiKey, env.apiKey);
114
- let email = null;
115
- let authenticated = false;
116
- if (!args["skip-verify"]) {
117
- const result = await verifyCredentials(url, apiKey);
118
- if (!result.ok) {
119
- await recordRejection(profileName, {
120
- reason: result.message,
121
- url
122
- });
123
- throw new ConfigError(`verification failed: ${result.message} — credentials were not saved for profile "${profileName}"`);
124
- }
125
- email = result.user.email;
126
- authenticated = true;
127
- }
128
- const location = await writeProfile({
129
- url,
130
- apiKey
131
- }, profileName);
132
- await clearRejection(profileName);
133
- if (location.backend === "file") warn(`warning: OS keychain unavailable; credentials stored as plaintext at ${location.path}`);
134
- renderItem({
135
- profile: profileName,
136
- url,
137
- authenticated,
138
- email
139
- }, loginView, ctx);
140
- }
141
- });
142
- async function resolveLoginProfile(flagProfile) {
143
- const explicit = explicitProfileName(flagProfile);
144
- if (explicit !== null) return explicit;
145
- if (!process.stdin.isTTY) return DEFAULT_PROFILE;
146
- return promptText({
147
- message: "Profile name",
148
- placeholder: DEFAULT_PROFILE,
149
- initialValue: DEFAULT_PROFILE,
150
- validate: (input) => input ? void 0 : "Profile name is required"
151
- });
152
- }
153
- async function resolveUrl(flagUrl, envUrl) {
154
- if (flagUrl) return normalizeUrl(flagUrl);
155
- if (envUrl) return normalizeUrl(envUrl);
156
- return promptForUrl();
157
- }
158
- async function resolveApiKey(flagKey, envKey) {
159
- if (flagKey) return flagKey;
160
- const piped = (await readInput({ required: false })).trim();
161
- if (piped) return piped;
162
- if (envKey) return envKey;
163
- return promptForApiKey();
164
- }
165
- async function promptForUrl() {
166
- if (!process.stdin.isTTY) throw new ConfigError("--url is required when stdin is not a TTY (cannot prompt interactively)");
167
- const value = await promptText({
168
- message: "Metabase URL",
169
- placeholder: "https://metabase.example.com",
170
- validate(input) {
171
- if (!input) return "URL is required";
172
- try {
173
- normalizeUrl(input);
174
- } catch (error) {
175
- return errorMessage(error);
176
- }
177
- return void 0;
178
- }
179
- });
180
- return normalizeUrl(value);
181
- }
182
- async function promptForApiKey() {
183
- if (!process.stdin.isTTY) throw new ConfigError("--api-key, piped stdin, or METABASE_API_KEY required when stdin is not a TTY");
184
- return promptPassword({
185
- message: "API key",
186
- mask: "•",
187
- validate: (input) => input ? void 0 : "API key is required"
188
- });
189
- }
190
-
191
- //#endregion
192
- export { login_default as default };
@@ -1,19 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/measure/index.ts
4
- var measure_default = defineCommand({
5
- meta: {
6
- name: "measure",
7
- description: "Inspect Metabase measures"
8
- },
9
- subCommands: {
10
- list: () => import("./list-CQkDqphl.mjs").then((mod) => mod.default),
11
- get: () => import("./get-DAWofnzK.mjs").then((mod) => mod.default),
12
- create: () => import("./create-swbIXdo5.mjs").then((mod) => mod.default),
13
- update: () => import("./update-zp7pCBZH.mjs").then((mod) => mod.default),
14
- archive: () => import("./archive-BKPO8lEO.mjs").then((mod) => mod.default)
15
- }
16
- });
17
-
18
- //#endregion
19
- export { measure_default as default };
@@ -1,85 +0,0 @@
1
- //#region package.json
2
- var name = "@metabase/cli";
3
- var version = "0.1.5";
4
- var description = "Metabase CLI";
5
- var license = "AGPL-3.0";
6
- var repository = {
7
- "type": "git",
8
- "url": "git+https://github.com/metabase/mb-cli.git"
9
- };
10
- var bin = { "mb": "./dist/cli.mjs" };
11
- var files = [
12
- "dist",
13
- "skills",
14
- "skill-data",
15
- ".claude-plugin"
16
- ];
17
- var type = "module";
18
- var publishConfig = {
19
- "access": "public",
20
- "registry": "https://registry.npmjs.org/"
21
- };
22
- var scripts = {
23
- "build": "tsdown",
24
- "dev": "tsdown --watch",
25
- "start": "node dist/cli.mjs",
26
- "test": "vitest run --project unit",
27
- "test:watch": "vitest --project unit",
28
- "test:e2e": "vitest run --project e2e",
29
- "test:e2e:watch": "vitest --project e2e",
30
- "e2e:up": "docker compose -f tests/e2e/docker-compose.yml up -d --wait",
31
- "e2e:down": "docker compose -f tests/e2e/docker-compose.yml down -v",
32
- "e2e:bootstrap": "bun tests/e2e/setup/bootstrap.ts",
33
- "e2e:logs": "docker compose -f tests/e2e/docker-compose.yml logs -f metabase",
34
- "typecheck": "tsc --noEmit",
35
- "lint": "oxlint",
36
- "lint:fix": "oxlint --fix",
37
- "format": "oxfmt",
38
- "format:check": "oxfmt --check",
39
- "sync:representations": "bun run scripts/sync-representations.ts",
40
- "prepublishOnly": "tsdown && publint"
41
- };
42
- var dependencies = {
43
- "@clack/prompts": "^0.8.2",
44
- "@napi-rs/keyring": "^1.3.0",
45
- "ajv": "^8.17.1",
46
- "ajv-formats": "^3.0.1",
47
- "citty": "^0.2.2",
48
- "cli-table3": "^0.6.5",
49
- "semver": "^7.8.0",
50
- "yaml": "^2.8.4",
51
- "zod": "^4.0.0"
52
- };
53
- var devDependencies = {
54
- "@types/js-yaml": "^4.0.9",
55
- "@types/node": "^22.10.0",
56
- "@types/semver": "^7.7.1",
57
- "execa": "^9.5.2",
58
- "fast-check": "^4.7.0",
59
- "js-yaml": "^4.1.0",
60
- "oxfmt": "^0.47.0",
61
- "oxlint": "^1.62.0",
62
- "publint": "^0.3.0",
63
- "tsdown": "^0.9.0",
64
- "typescript": "^5.7.2",
65
- "vitest": "^2.1.8"
66
- };
67
- var engines = { "node": ">=20.6" };
68
- var package_default = {
69
- name,
70
- version,
71
- description,
72
- license,
73
- repository,
74
- bin,
75
- files,
76
- type,
77
- publishConfig,
78
- scripts,
79
- dependencies,
80
- devDependencies,
81
- engines
82
- };
83
-
84
- //#endregion
85
- export { package_default };
@@ -1,77 +0,0 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-DuoDUTVL.mjs";
4
- import { ConfigError } from "./predicates-CGO17Q15.mjs";
5
- import "./input-BQ-BZA8h.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-CDu6fykq.mjs";
7
- import { readBody } from "./body-XtR7-uCO.mjs";
8
- import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-CysSaCbf.mjs";
10
- import "./poll-p9Y7-JEQ.mjs";
11
- import { parseWaitFlags, waitFlags } from "./wait-flags-CN-e9zNq.mjs";
12
- import { Workspace, WorkspaceProvisionInput, workspaceView } from "./workspace-DUfqhPm5.mjs";
13
- import { waitForDatabaseProvisioned } from "./wait-BFqBlg0y.mjs";
14
- import { parseSchemasCsv } from "./parse-schemas-B10n01ez.mjs";
15
-
16
- //#region src/commands/workspace/database/provision.ts
17
- var provision_default = defineMetabaseCommand({
18
- meta: {
19
- name: "provision",
20
- description: "Provision a database into a workspace"
21
- },
22
- args: {
23
- ...outputFlags,
24
- ...profileFlag,
25
- ...connectionFlags,
26
- ...bodyInputFlags,
27
- ...waitFlags,
28
- "database-id": {
29
- type: "string",
30
- description: "Database id (alternative to --body / --file)"
31
- },
32
- schemas: {
33
- type: "string",
34
- description: "Comma-separated input schemas (alternative to --body / --file)"
35
- },
36
- id: {
37
- type: "positional",
38
- description: "Workspace id",
39
- required: true
40
- }
41
- },
42
- outputSchema: Workspace,
43
- examples: [
44
- "mb workspace database provision 1 --database-id 5 --schemas analytics,github",
45
- "mb workspace database provision 1 --database-id 5 --schemas analytics --wait",
46
- "mb workspace database provision 1 --file provision.json"
47
- ],
48
- async run({ args, ctx, getClient }) {
49
- const workspaceId = parseId(args.id);
50
- const databaseIdFlag = args["database-id"];
51
- const schemasFlag = args.schemas;
52
- const wait = parseWaitFlags(args);
53
- let body;
54
- if (databaseIdFlag !== void 0 && databaseIdFlag !== "") {
55
- const databaseId = parseId(databaseIdFlag, "--database-id");
56
- if (schemasFlag === void 0 || schemasFlag === "") throw new ConfigError("--schemas is required when using --database-id");
57
- const input_schemas = parseSchemasCsv(schemasFlag);
58
- body = WorkspaceProvisionInput.parse({
59
- database_id: databaseId,
60
- input_schemas
61
- });
62
- } else body = await readBody({
63
- flag: args.body,
64
- file: args.file
65
- }, WorkspaceProvisionInput);
66
- const client = await getClient();
67
- const initial = await client.requestParsed(Workspace, `/api/ee/workspace-manager/${workspaceId}/database`, {
68
- method: "POST",
69
- body
70
- });
71
- const final = wait.enabled ? await waitForDatabaseProvisioned(client, workspaceId, body.database_id, wait.schedule) : initial;
72
- renderItem(final, workspaceView, ctx);
73
- }
74
- });
75
-
76
- //#endregion
77
- export { provision_default as default };
@@ -1,11 +0,0 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import "./runtime-CDu6fykq.mjs";
6
- import "./poll-p9Y7-JEQ.mjs";
7
- import "./process-zJeVJZTM.mjs";
8
- import "./docker-D5FTIoD0.mjs";
9
- import { LocalWorkspace, LocalWorkspaceCompact, LocalWorkspaceListEnvelope, LocalWorkspaceState, localWorkspaceView, ps_default } from "./ps-BxQdpkr5.mjs";
10
-
11
- export { ps_default as default };
@@ -1,38 +0,0 @@
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 { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-CDu6fykq.mjs";
6
- import { parseId } from "./parse-id-CysSaCbf.mjs";
7
- import "./poll-task-BQe0NvJZ.mjs";
8
- import "./poll-p9Y7-JEQ.mjs";
9
- import { SyncSettingsUpdateResult, setCollectionRemoteSynced, syncSettingsUpdateView } from "./add-collection-C_iovi9i.mjs";
10
-
11
- //#region src/commands/git-sync/remove-collection.ts
12
- var remove_collection_default = defineMetabaseCommand({
13
- meta: {
14
- name: "remove-collection",
15
- description: "Unmark a collection as git-synced; cascades to descendants by location prefix"
16
- },
17
- args: {
18
- ...outputFlags,
19
- ...profileFlag,
20
- ...connectionFlags,
21
- id: {
22
- type: "positional",
23
- description: "Collection id (positive integer)",
24
- required: true
25
- }
26
- },
27
- outputSchema: SyncSettingsUpdateResult,
28
- examples: ["mb git-sync remove-collection 12", "mb git-sync remove-collection 12 --json --profile prod"],
29
- async run({ args, ctx, getClient }) {
30
- const collectionId = parseId(args.id, "id");
31
- const client = await getClient();
32
- const result = await setCollectionRemoteSynced(client, collectionId, false);
33
- renderItem(result, syncSettingsUpdateView, ctx);
34
- }
35
- });
36
-
37
- //#endregion
38
- export { remove_collection_default as default };
@@ -1,19 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/segment/index.ts
4
- var segment_default = defineCommand({
5
- meta: {
6
- name: "segment",
7
- description: "Inspect Metabase segments"
8
- },
9
- subCommands: {
10
- list: () => import("./list-Bkd7Nbds.mjs").then((mod) => mod.default),
11
- get: () => import("./get-BnBRKHr7.mjs").then((mod) => mod.default),
12
- create: () => import("./create-Le3Bqn7b.mjs").then((mod) => mod.default),
13
- update: () => import("./update-DuA8-cCq.mjs").then((mod) => mod.default),
14
- archive: () => import("./archive-DdaP94H3.mjs").then((mod) => mod.default)
15
- }
16
- });
17
-
18
- //#endregion
19
- export { segment_default as default };
@@ -1,18 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/setting/index.ts
4
- var setting_default = defineCommand({
5
- meta: {
6
- name: "setting",
7
- description: "Inspect and update Metabase settings",
8
- alias: "settings"
9
- },
10
- subCommands: {
11
- list: () => import("./list-yxVAE1S7.mjs").then((m) => m.default),
12
- get: () => import("./get-C6SR3A9t.mjs").then((m) => m.default),
13
- set: () => import("./set-CwVWeAsi.mjs").then((m) => m.default)
14
- }
15
- });
16
-
17
- //#endregion
18
- export { setting_default as default };
@@ -1,19 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/snippet/index.ts
4
- var snippet_default = defineCommand({
5
- meta: {
6
- name: "snippet",
7
- description: "Inspect Metabase native query snippets"
8
- },
9
- subCommands: {
10
- list: () => import("./list-vF4EneaE.mjs").then((mod) => mod.default),
11
- get: () => import("./get-R7OaVL_t.mjs").then((mod) => mod.default),
12
- create: () => import("./create-DZxUeqdf.mjs").then((mod) => mod.default),
13
- update: () => import("./update-qnFY5IuC.mjs").then((mod) => mod.default),
14
- archive: () => import("./archive-WaEW85NB.mjs").then((mod) => mod.default)
15
- }
16
- });
17
-
18
- //#endregion
19
- export { snippet_default as default };
@@ -1,56 +0,0 @@
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 { account, credentials, defineMetabaseCommand, originOnly, outputFlags, profileFlag, resolveProfileName } from "./runtime-CDu6fykq.mjs";
6
- import { z } from "zod";
7
-
8
- //#region src/commands/auth/status.ts
9
- const AuthStatus = z.object({
10
- profile: z.string(),
11
- present: z.boolean(),
12
- url: z.string().nullable()
13
- });
14
- const authStatusView = {
15
- compactPick: AuthStatus,
16
- tableColumns: [
17
- {
18
- key: "profile",
19
- label: "Profile"
20
- },
21
- {
22
- key: "present",
23
- label: "Authenticated"
24
- },
25
- {
26
- key: "url",
27
- label: "URL"
28
- }
29
- ]
30
- };
31
- var status_default = defineMetabaseCommand({
32
- meta: {
33
- name: "status",
34
- description: "Show authentication status for a profile"
35
- },
36
- args: {
37
- ...outputFlags,
38
- ...profileFlag
39
- },
40
- outputSchema: AuthStatus,
41
- examples: ["mb auth status --json", "mb auth status --profile staging"],
42
- async run({ args, ctx }) {
43
- const profileName = resolveProfileName(args.profile);
44
- const [url, apiKey] = await Promise.all([credentials.read(account.profileUrl(profileName)), credentials.read(account.profileApiKey(profileName))]);
45
- const present = url !== null && apiKey !== null;
46
- const payload = {
47
- profile: profileName,
48
- present,
49
- url: url === null ? null : originOnly(url)
50
- };
51
- renderItem(payload, authStatusView, ctx);
52
- }
53
- });
54
-
55
- //#endregion
56
- export { status_default as default };
@@ -1,32 +0,0 @@
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 { account, credentials, defineMetabaseCommand, outputFlags } from "./runtime-CDu6fykq.mjs";
6
- import { z } from "zod";
7
-
8
- //#region src/commands/license/status.ts
9
- const LicenseStatus = z.object({ present: z.boolean() });
10
- const licenseStatusView = {
11
- compactPick: LicenseStatus,
12
- tableColumns: [{
13
- key: "present",
14
- label: "Present"
15
- }]
16
- };
17
- var status_default = defineMetabaseCommand({
18
- meta: {
19
- name: "status",
20
- description: "Show whether a license token is stored (does not reveal value)"
21
- },
22
- args: { ...outputFlags },
23
- outputSchema: LicenseStatus,
24
- examples: ["mb license status", "mb license status --json"],
25
- async run({ ctx }) {
26
- const present = await credentials.has(account.license);
27
- renderItem({ present }, licenseStatusView, ctx);
28
- }
29
- });
30
-
31
- //#endregion
32
- export { status_default as default };
@@ -1,19 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/table/index.ts
4
- var table_default = defineCommand({
5
- meta: {
6
- name: "table",
7
- description: "Inspect Metabase tables"
8
- },
9
- subCommands: {
10
- list: () => import("./list-DJcGwJ4W.mjs").then((m) => m.default),
11
- get: () => import("./get-CACaBFLt.mjs").then((m) => m.default),
12
- metadata: () => import("./metadata-29_qlqbz.mjs").then((m) => m.default),
13
- fields: () => import("./fields-dH16G5UV.mjs").then((m) => m.default),
14
- update: () => import("./update-B0bjPqKC.mjs").then((m) => m.default)
15
- }
16
- });
17
-
18
- //#endregion
19
- export { table_default as default };
@@ -1,24 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/transform/index.ts
4
- var transform_default = defineCommand({
5
- meta: {
6
- name: "transform",
7
- description: "Manage Metabase transforms"
8
- },
9
- subCommands: {
10
- list: () => import("./list-ViT2KWhv.mjs").then((mod) => mod.default),
11
- get: () => import("./get-B7i_nYJB.mjs").then((mod) => mod.default),
12
- create: () => import("./create-V-q2rU0T.mjs").then((mod) => mod.default),
13
- update: () => import("./update-DzgXF082.mjs").then((mod) => mod.default),
14
- delete: () => import("./delete-VTAS9EUt.mjs").then((mod) => mod.default),
15
- "delete-table": () => import("./delete-table-DzUneMKe.mjs").then((mod) => mod.default),
16
- run: () => import("./run-Cl-9RtC4.mjs").then((mod) => mod.default),
17
- cancel: () => import("./cancel-BrUVO_ax.mjs").then((mod) => mod.default),
18
- "get-run": () => import("./get-run-CwFuR4Uw.mjs").then((mod) => mod.default),
19
- runs: () => import("./runs-BH6s1Zao.mjs").then((mod) => mod.default)
20
- }
21
- });
22
-
23
- //#endregion
24
- export { transform_default as default };
@@ -1,19 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/transform-job/index.ts
4
- var transform_job_default = defineCommand({
5
- meta: {
6
- name: "transform-job",
7
- description: "Manage Metabase transform jobs"
8
- },
9
- subCommands: {
10
- list: () => import("./list-J277Qtki.mjs").then((mod) => mod.default),
11
- get: () => import("./get-B08K82JV.mjs").then((mod) => mod.default),
12
- create: () => import("./create-Dq25vsMu.mjs").then((mod) => mod.default),
13
- update: () => import("./update-BgcroYkF.mjs").then((mod) => mod.default),
14
- delete: () => import("./delete-CUx6RT9e.mjs").then((mod) => mod.default)
15
- }
16
- });
17
-
18
- //#endregion
19
- export { transform_job_default as default };
@@ -1,36 +0,0 @@
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 { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-CDu6fykq.mjs";
6
- import { parseId } from "./parse-id-CysSaCbf.mjs";
7
- import { FieldValues, fieldValuesView } from "./field-B3gvaqpK.mjs";
8
-
9
- //#region src/commands/field/values.ts
10
- var values_default = defineMetabaseCommand({
11
- meta: {
12
- name: "values",
13
- description: "Fetch the cached distinct values for a field (FieldValues list)"
14
- },
15
- args: {
16
- ...outputFlags,
17
- ...profileFlag,
18
- ...connectionFlags,
19
- id: {
20
- type: "positional",
21
- description: "Field id",
22
- required: true
23
- }
24
- },
25
- outputSchema: FieldValues,
26
- examples: ["mb field values 100", "mb field values 100 --json"],
27
- async run({ args, ctx, getClient }) {
28
- const id = parseId(args.id);
29
- const client = await getClient();
30
- const values = await client.requestParsed(FieldValues, `/api/field/${id}/values`);
31
- renderItem(values, fieldValuesView, ctx);
32
- }
33
- });
34
-
35
- //#endregion
36
- export { values_default as default };