@metabase/cli 0.2.2 → 0.3.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.
- package/README.md +4 -1902
- package/dist/add-collection-B3Ty8SzB.mjs +36 -0
- package/dist/alert-DT-ee7yf.mjs +23 -0
- package/dist/{alerts-CRGMX4eB.mjs → alerts-Bf2RH_p_.mjs} +11 -17
- package/dist/{append-lL0IaI6U.mjs → append-DFzQRPMd.mjs} +7 -12
- package/dist/{archive-DihHU042.mjs → archive-4tmm946K.mjs} +8 -17
- package/dist/{archive-C9mJGN6J.mjs → archive-B6eXiyER.mjs} +7 -13
- package/dist/{archive-D3DErepm.mjs → archive-BxNPHxOY.mjs} +7 -13
- package/dist/{archive-DyPsHSFb.mjs → archive-ByvA49Kz.mjs} +8 -13
- package/dist/{archive-ExcEma7q.mjs → archive-C7w49Grr.mjs} +7 -16
- package/dist/{archive-Baz4OVDd.mjs → archive-Cd29QC0c.mjs} +7 -13
- package/dist/{archive-CUGRnyRV.mjs → archive-ChORH5JH.mjs} +7 -13
- package/dist/{archive-hKPQXgXa.mjs → archive-CwAdlv63.mjs} +7 -12
- package/dist/{archive-D8YrImIU.mjs → archive-Dr9Xnx_Z.mjs} +7 -15
- package/dist/{archive-BUFc1me2.mjs → archive-gid9Y09v.mjs} +8 -17
- package/dist/{archive-3rLXY0nS.mjs → archive-lQqs13Uz.mjs} +7 -13
- package/dist/auth-Dltxua89.mjs +19 -0
- package/dist/{body-DXJ2v3GY.mjs → body-Cur4NJt9.mjs} +5 -8
- package/dist/{body-flags-Cbv-Ba6W.mjs → body-flags-AqKpN01Y.mjs} +1 -2
- package/dist/{branches-ByCzTuiv.mjs → branches-DchlyU0i.mjs} +7 -13
- package/dist/{cancel-DvehNbDD.mjs → cancel-BMQa5R1Z.mjs} +5 -12
- package/dist/{cancel-task-BM8ADd3Y.mjs → cancel-task-C5CU1pxU.mjs} +6 -10
- package/dist/card-CHI2bmds.mjs +24 -0
- package/dist/{card-BFRRyTGs.mjs → card-DZxRmver.mjs} +21 -48
- package/dist/card-zyUkr2nS.mjs +44 -0
- package/dist/cards-SccWvRQD.mjs +34 -0
- package/dist/cli.mjs +664 -85
- package/dist/client-BqhzKdLM.mjs +2194 -0
- package/dist/collection-CGoVLvcD.mjs +58 -0
- package/dist/collection-CY0AB99E.mjs +20 -0
- package/dist/{collection-BrrjbPLN.mjs → collection-CfulNRBG.mjs} +16 -61
- package/dist/{collection-namespace-8i_CvWsg.mjs → collection-namespace-GwydWBF3.mjs} +3 -5
- package/dist/{create-D6bXJlBS.mjs → create-BNQ_DytP.mjs} +8 -15
- package/dist/{create-CtIOvInN.mjs → create-BOLwWt8Q.mjs} +9 -17
- package/dist/{create--_4GZUNY.mjs → create-Beh-2uoN.mjs} +8 -16
- package/dist/{create-BnNRvoyz.mjs → create-C79vErX0.mjs} +9 -20
- package/dist/{create-D57tRDrg.mjs → create-CAQV2g6V.mjs} +9 -17
- package/dist/{create-CHK9cJcK.mjs → create-CAWytBE5.mjs} +9 -17
- package/dist/{create-BynNiG1N.mjs → create-CCh_LyW9.mjs} +8 -15
- package/dist/{create-Cy57naL0.mjs → create-CD008jdE.mjs} +13 -28
- package/dist/{create-DOpa2TmH.mjs → create-CHQx7jq4.mjs} +9 -17
- package/dist/{create-COI80Veo.mjs → create-DF4QtgDL.mjs} +8 -16
- package/dist/{create-yK1-fuX5.mjs → create-DJmXXQoq.mjs} +10 -18
- package/dist/{create-1O1UiTVt.mjs → create-DV-Ln5Mo.mjs} +8 -15
- package/dist/create-branch-CYo6jZth.mjs +35 -0
- package/dist/{create-t7z8Eb4T.mjs → create-i14Wv3Tj.mjs} +8 -15
- package/dist/{create-qzjhJFP8.mjs → create-tQbnuz-I.mjs} +8 -15
- package/dist/{create-DAj8pyfQ.mjs → create-zeveFdnd.mjs} +6 -11
- package/dist/{cron-93wjhtrP.mjs → cron-LKRffEC-.mjs} +2 -4
- package/dist/{csv-yoFA1hhv.mjs → csv-B2Jgb1GM.mjs} +7 -19
- package/dist/{current-task-D8Q1uFmk.mjs → current-task-MpBFGttd.mjs} +7 -12
- package/dist/{dashboard-BSCXTX4H.mjs → dashboard-BCpSq_G-.mjs} +9 -60
- package/dist/dashboard-BHJBoaG7.mjs +33 -0
- package/dist/dashboard-CsIFFpzK.mjs +58 -0
- package/dist/database-B19qlLKZ.mjs +38 -0
- package/dist/database-C8G6ZKG0.mjs +26 -0
- package/dist/db-DsfojyeH.mjs +24 -0
- package/dist/{delete-B8dui6O6.mjs → delete-B8e01xAG.mjs} +6 -11
- package/dist/{delete-CA7IjA5J.mjs → delete-BApOjQvl.mjs} +6 -11
- package/dist/{delete-Dcu3iDkg.mjs → delete-Ck0q4Dzp.mjs} +6 -11
- package/dist/{delete-BwPgIWV8.mjs → delete-DFmX7jTp.mjs} +6 -11
- package/dist/{delete-CawUDFud.mjs → delete-Ob06PPie.mjs} +6 -11
- package/dist/{delete-runtime-00-R9iJm.mjs → delete-runtime-D74s6vhu.mjs} +6 -13
- package/dist/{delete-table-DS0b3i0k.mjs → delete-table-DuyhGrvA.mjs} +6 -11
- package/dist/{dependencies-BQVZylqV.mjs → dependencies-Bj3QrGIm.mjs} +10 -13
- package/dist/dirty-DNYoM6Bp.mjs +31 -0
- package/dist/document-BbskZPTT.mjs +19 -0
- package/dist/{document-C7IR6T8c.mjs → document-Cd2mmqCp.mjs} +5 -33
- package/dist/document-D6OybtP2.mjs +29 -0
- package/dist/{eid-DcCAs-RP.mjs → eid-WTZmDdsr.mjs} +12 -54
- package/dist/eid-translation-zEHtr5Oc.mjs +35 -0
- package/dist/{embedding-B0x9CPkU.mjs → embedding-i-KqpefC.mjs} +2 -4
- package/dist/events-Bn7jh5lP.mjs +39 -0
- package/dist/export-BjfoZRDJ.mjs +66 -0
- package/dist/field-BPsNa-TO.mjs +80 -0
- package/dist/{field-RYBTW2KS.mjs → field-Cr2DPUG9.mjs} +2 -81
- package/dist/field-Zau6Hc6X.mjs +18 -0
- package/dist/fields-CBBa-Prp.mjs +34 -0
- package/dist/{get-vGqyjGSW.mjs → get-00lyLv6R.mjs} +7 -11
- package/dist/{get-Cvkt6GcQ.mjs → get-B7sMgsFs.mjs} +7 -11
- package/dist/get-B_xdF1kq.mjs +31 -0
- package/dist/{get-DhS4y0K9.mjs → get-ByBOq30r.mjs} +7 -11
- package/dist/get-Bz99dAxK.mjs +35 -0
- package/dist/get-C2-Q3iQ5.mjs +31 -0
- package/dist/get-CDJFVvhj.mjs +35 -0
- package/dist/get-CDMGbgrh.mjs +31 -0
- package/dist/get-CnbUCzDM.mjs +31 -0
- package/dist/{get-CJYv3CfV.mjs → get-CvI--9S_.mjs} +16 -12
- package/dist/get-DRvsATp-.mjs +31 -0
- package/dist/{get-Db8YNxId.mjs → get-DY03Azx9.mjs} +6 -11
- package/dist/{get-4rA8pbRu.mjs → get-DYO1kywc.mjs} +7 -13
- package/dist/{get-DZRB5S37.mjs → get-D_h-G9bn.mjs} +7 -11
- package/dist/get-DdsoHaKH.mjs +31 -0
- package/dist/{get-DQ0pb4tT.mjs → get-DkWO0EI0.mjs} +7 -11
- package/dist/{get-DXiL39gi.mjs → get-Dmj9Ygz1.mjs} +7 -17
- package/dist/{get-CvXOGyFj.mjs → get-DmpB6J9g.mjs} +7 -12
- package/dist/{get-B2vvnMpl.mjs → get-Dn9ZiSZr.mjs} +8 -16
- package/dist/{get-run-BF5ZBE8o.mjs → get-run-Cnux9ln0.mjs} +7 -11
- package/dist/git-sync-BDnxPrqU.mjs +104 -0
- package/dist/git-sync-DxD_ng48.mjs +136 -0
- package/dist/git-sync-MQQYRYLg.mjs +28 -0
- package/dist/{group-DfTvzGz-.mjs → group-DBM87IgC.mjs} +2 -4
- package/dist/has-remote-changes-C684Redh.mjs +35 -0
- package/dist/import-Rmmttboo.mjs +56 -0
- package/dist/{input-BpXlmJ5J.mjs → input-DH9i67x_.mjs} +6 -11
- package/dist/{is-dirty-4kIyD4oP.mjs → is-dirty-DYeJYhBz.mjs} +4 -8
- package/dist/{items-BXH0f1r6.mjs → items-CQlPXBXE.mjs} +13 -29
- package/dist/key-BEhqIzIQ.mjs +10 -0
- package/dist/{library-BFZYsBcz.mjs → library-Bsm5KsFF.mjs} +6 -9
- package/dist/library-ClLgrAXy.mjs +19 -0
- package/dist/library-DfYAT2Ep.mjs +21 -0
- package/dist/{list-By1yYVGq.mjs → list-B4hJuMhA.mjs} +11 -27
- package/dist/{list-oRyXsJXs.mjs → list-B8nAGwP4.mjs} +10 -12
- package/dist/list-BOET6zhP.mjs +36 -0
- package/dist/list-BP3MPq-M.mjs +36 -0
- package/dist/list-BpFp9Wre.mjs +28 -0
- package/dist/list-BtkWNtvY.mjs +34 -0
- package/dist/list-BtmsNOEn.mjs +28 -0
- package/dist/list-BzVTHOoH.mjs +28 -0
- package/dist/list-C5Zs8nrb.mjs +28 -0
- package/dist/list-CKK-s3Ty.mjs +28 -0
- package/dist/{list-SiSfX4wl.mjs → list-CMpoc2TN.mjs} +10 -13
- package/dist/list-CNUiF8Z7.mjs +28 -0
- package/dist/list-CQDprvW0.mjs +39 -0
- package/dist/{list-w61Uovt2.mjs → list-CQwOgIlj.mjs} +10 -24
- package/dist/list-DE9FM957.mjs +28 -0
- package/dist/{list-CG3ec9BZ.mjs → list-DF2rvoO1.mjs} +22 -14
- package/dist/list-DMKDsBRd.mjs +38 -0
- package/dist/{list-Bar8uQRC.mjs → list-UhpKG6_m.mjs} +15 -15
- package/dist/{login-zUCMDLC8.mjs → login-CGHeSjlP.mjs} +47 -52
- package/dist/{logout-BFh7QHx6.mjs → logout-DAxOlbv4.mjs} +7 -12
- package/dist/measure-4P0bOlZ3.mjs +29 -0
- package/dist/measure-BsYv0p26.mjs +22 -0
- package/dist/{measure-DH3ow2ko.mjs → measure-CtfjqJFP.mjs} +3 -30
- package/dist/network-error-CEb9ymDW.mjs +423 -0
- package/dist/{notification-BR5wehqg.mjs → notification-DaA4bBHW.mjs} +3 -66
- package/dist/notification-Fcq1fIPw.mjs +67 -0
- package/dist/{parameter-hCQ80jnc.mjs → parameter-DUKR8NXo.mjs} +2 -11
- package/dist/{parameter-values-BYDFzxNY.mjs → parameter-values-CJTdqd8c.mjs} +17 -11
- package/dist/{parse-enum-D1zTYr_i.mjs → parse-enum-D0Jfm_Bz.mjs} +2 -4
- package/dist/{parse-id-waEVK-uR.mjs → parse-id-C_jmKFaa.mjs} +2 -4
- package/dist/{parse-ref-C3DUXwci.mjs → parse-ref-ibKVB0J4.mjs} +3 -5
- package/dist/{path-Bvs9IR4k.mjs → path-B5gHvrYL.mjs} +8 -9
- package/dist/{poll-rqLkEJVP.mjs → poll-75SvT7Zv.mjs} +11 -15
- package/dist/predicates-Bkm2IoeX.mjs +170 -0
- package/dist/preflight-YpPQo-sa.mjs +29 -0
- package/dist/{process-BxAUv3Wx.mjs → process-DBOOrmET.mjs} +4 -6
- package/dist/{publish-C1y_vGGw.mjs → publish-DijrxaCW.mjs} +29 -24
- package/dist/{pulse-C8q469KD.mjs → pulse-BmsDenXm.mjs} +3 -56
- package/dist/pulse-DhG6I9mI.mjs +57 -0
- package/dist/{query-B9LlGOZI.mjs → query-BbqECzmF.mjs} +20 -44
- package/dist/{query-DpVWKW-y.mjs → query-Dc__-KJH.mjs} +13 -24
- package/dist/{query-result-Bvh89K4f.mjs → query-result-DBDwk8TS.mjs} +4 -8
- package/dist/remove-collection-BOnxYvhj.mjs +36 -0
- package/dist/{render-rgZBe3rO.mjs → render-CI93iP0I.mjs} +9 -11
- package/dist/{replace-sHtPBNnA.mjs → replace-Cq4CxVa-.mjs} +7 -12
- package/dist/rescan-values-Dr_j416g.mjs +31 -0
- package/dist/revision-message-flag-8TCHYJV6.mjs +8 -0
- package/dist/run-C3DkS6NP.mjs +82 -0
- package/dist/{run-Ce_gPVcg.mjs → run-DdGJ544X.mjs} +8 -18
- package/dist/runs-CUNWiidL.mjs +38 -0
- package/dist/runtime-DiKyBxOw.mjs +1007 -0
- package/dist/{schema-tables-D91DWM5l.mjs → schema-tables-CV386fnC.mjs} +10 -14
- package/dist/{schemas-OVYRgvz9.mjs → schemas-DM-UqZBQ.mjs} +8 -12
- package/dist/search-DFBwUc6d.mjs +44 -0
- package/dist/{search-msFNbxU6.mjs → search-DmGScXs8.mjs} +14 -73
- package/dist/segment-BzUGM2Fr.mjs +22 -0
- package/dist/segment-C_gl5ag6.mjs +29 -0
- package/dist/{segment-cwIOOF0v.mjs → segment-OsrbUDzw.mjs} +3 -30
- package/dist/{selectors-Bsyhe1zP.mjs → selectors-DGDn0Hto.mjs} +4 -6
- package/dist/{send-BeFpVrwD.mjs → send-CVxxEpDB.mjs} +5 -16
- package/dist/{set-jRnCLhvc.mjs → set-DFolTjbd.mjs} +10 -20
- package/dist/{set-active-CFWtIWzX.mjs → set-active-BD8L1lPX.mjs} +7 -18
- package/dist/setting-CwRYgHYN.mjs +35 -0
- package/dist/setting-DTiLCW8g.mjs +22 -0
- package/dist/setting-DyhaeICs.mjs +17 -0
- package/dist/setup-BbDQN8fe.mjs +44 -0
- package/dist/setup-CO7QV-ao.mjs +21 -0
- package/dist/signal-CMd0EFUa.mjs +16 -0
- package/dist/{skills-CxqkjkdQ.mjs → skills--vK6J-e4.mjs} +4 -6
- package/dist/{skills-DlFbbaoS.mjs → skills-DTCrMcix.mjs} +13 -19
- package/dist/{snippet-1xYckIwc.mjs → snippet-CyKAgIZl.mjs} +3 -32
- package/dist/snippet-DRwKb2x7.mjs +19 -0
- package/dist/snippet-oJLaYW9V.mjs +29 -0
- package/dist/stash-D0S4JmAz.mjs +61 -0
- package/dist/{status-DCIOvsc6.mjs → status-BhswxJL1.mjs} +23 -23
- package/dist/{status-BMEdl-_G.mjs → status-hL1am-HV.mjs} +6 -8
- package/dist/{subscription-BOOBR5Ir.mjs → subscription-_d5fB45F.mjs} +7 -10
- package/dist/{subscriptions-C_1AQpZF.mjs → subscriptions-s4TF6Ax3.mjs} +11 -16
- package/dist/{summary-D1fKnwE3.mjs → summary-BytbDz6e.mjs} +1 -2
- package/dist/summary-CsPvcUwW.mjs +31 -0
- package/dist/sync-schema-DaZ_MV-u.mjs +35 -0
- package/dist/sync-task-BACcrs0i.mjs +37 -0
- package/dist/{table-fDvuvqoU.mjs → table-CeeTJgQb.mjs} +4 -38
- package/dist/table-CsIJNPFf.mjs +37 -0
- package/dist/table-DYoC1kPn.mjs +18 -0
- package/dist/{timeline-BNwnJ3g9.mjs → timeline-CCSU2qOS.mjs} +2 -66
- package/dist/timeline-event-CNQdCTDg.mjs +19 -0
- package/dist/timeline-uDCmwGFT.mjs +66 -0
- package/dist/timeline-xlDbEKWg.mjs +21 -0
- package/dist/transform-Bs0EWijQ.mjs +28 -0
- package/dist/{transform-BkSkCvpx.mjs → transform-D3QX0jxA.mjs} +28 -74
- package/dist/transform-DoTyyXAu.mjs +74 -0
- package/dist/transform-job-50GZHhKH.mjs +37 -0
- package/dist/transform-job-BcLChRup.mjs +22 -0
- package/dist/{transform-job-sJmW_En3.mjs → transform-job-DRrK28IH.mjs} +11 -38
- package/dist/{transform-tag-qTjNVfTW.mjs → transform-tag-CcElGp3C.mjs} +2 -21
- package/dist/transform-tag-Dmb4u3-Q.mjs +21 -0
- package/dist/transform-tag-_tgwlsdB.mjs +18 -0
- package/dist/{transforms-Cosz-Vq3.mjs → transforms-oU4zizbO.mjs} +10 -13
- package/dist/{tree-BkXtw0c4.mjs → tree-CH-f3bjP.mjs} +6 -10
- package/dist/{unpublish-BlGj7omM.mjs → unpublish-BUl9RU5C.mjs} +7 -18
- package/dist/{update-DpIzJ8Ts.mjs → update-BCS5FxKr.mjs} +11 -19
- package/dist/{update-hoCyoR-u.mjs → update-BZPllQoR.mjs} +9 -16
- package/dist/{update-CXlhrcy8.mjs → update-BiFDBcEH.mjs} +9 -16
- package/dist/{update-Cbsgvopz.mjs → update-BzMDeZiU.mjs} +9 -15
- package/dist/{update-CTWsiwme.mjs → update-C4YJQFDS.mjs} +9 -16
- package/dist/{update-CzrbMLZq.mjs → update-CHNSUHK4.mjs} +9 -16
- package/dist/{update-CsYFWkVd.mjs → update-CO4m4wH3.mjs} +10 -21
- package/dist/{update-DDVuyquf.mjs → update-CVPAwJaH.mjs} +10 -18
- package/dist/{update-C9K1QnOo.mjs → update-CmDTljK-.mjs} +9 -17
- package/dist/{update-DrvAdi-O.mjs → update-CvOO8TED.mjs} +9 -17
- package/dist/{update-Tw0kARao.mjs → update-D-NE60AV.mjs} +9 -16
- package/dist/{update-ZJ5T-SBW.mjs → update-Nfi44RrE.mjs} +10 -18
- package/dist/{update-C-ChEcI9.mjs → update-bD_Jh5-s.mjs} +10 -16
- package/dist/{update-CuKHukZ6.mjs → update-cYkvbqK8.mjs} +9 -16
- package/dist/update-dashcard-C3TuYO_k.mjs +50 -0
- package/dist/{update-BHhEtxwC.mjs → update-tX9mKBN_.mjs} +10 -21
- package/dist/{upgrade-D0HiyTxw.mjs → upgrade-DXMV4AyP.mjs} +37 -44
- package/dist/upload-CH632qW6.mjs +46 -0
- package/dist/upload-DAtxBBms.mjs +13 -0
- package/dist/upload-Dey_8rLf.mjs +13 -0
- package/dist/{uuid-D7NcSTj8.mjs → uuid-BJkDWj9p.mjs} +5 -7
- package/dist/validate-BWchyW0V.mjs +1469 -0
- package/dist/{validate-query-Di0VKMF-.mjs → validate-query-DaGYSmpQ.mjs} +4 -5
- package/dist/{values-OBiEVCVH.mjs → values-Dxf1JEoA.mjs} +8 -13
- package/dist/verify-K96rItG5.mjs +89 -0
- package/dist/{wait-B9qNlcTe.mjs → wait-DoMDH226.mjs} +10 -18
- package/dist/{wait-flags-D0FEgH6k.mjs → wait-flags-DWEF9tX4.mjs} +14 -11
- package/dist/window-BkvrP0gB.mjs +64 -0
- package/package.json +5 -35
- package/skill-data/core/SKILL.md +25 -22
- package/skill-data/dashboard/SKILL.md +6 -2
- package/skill-data/document/SKILL.md +2 -2
- package/skill-data/transform/SKILL.md +1 -1
- package/.claude-plugin/marketplace.json +0 -19
- package/dist/add-collection-B-Pf12HY.mjs +0 -60
- package/dist/add-collection-B2PdVMRy.mjs +0 -9
- package/dist/alert-DGcECcDb.mjs +0 -26
- package/dist/auth-B8Yb4ZaN.mjs +0 -22
- package/dist/capabilities-1HTHeDa4.mjs +0 -684
- package/dist/card-BT7ce7uO.mjs +0 -27
- package/dist/cards-Bz6anDNX.mjs +0 -38
- package/dist/cli.d.mts +0 -1
- package/dist/collection-ahFSJT-e.mjs +0 -23
- package/dist/command-augment-D9pI9Vbh.mjs +0 -11
- package/dist/create-branch-BwqFHYcZ.mjs +0 -57
- package/dist/dashboard-C__PiWrv.mjs +0 -36
- package/dist/database-B-xwx5LA.mjs +0 -61
- package/dist/db-BiLWl1J9.mjs +0 -27
- package/dist/dirty-BqdcrfUz.mjs +0 -35
- package/dist/document-C9ykHYOG.mjs +0 -22
- package/dist/events-C9PqRUCO.mjs +0 -44
- package/dist/export-CdKR5nPT.mjs +0 -103
- package/dist/field-P7aJaet9.mjs +0 -21
- package/dist/fields-D2czTLKq.mjs +0 -37
- package/dist/get-75Vdyusm.mjs +0 -49
- package/dist/get-B6fSPCfp.mjs +0 -35
- package/dist/get-BbKC0fTx.mjs +0 -35
- package/dist/get-BfFKIfpX.mjs +0 -36
- package/dist/get-Bpw05IUm.mjs +0 -38
- package/dist/get-CaIYg15K.mjs +0 -41
- package/dist/get-DXydDRVU.mjs +0 -35
- package/dist/get-Dy5f54pV.mjs +0 -35
- package/dist/git-sync-BzievbUz.mjs +0 -31
- package/dist/has-remote-changes-CjDHphUH.mjs +0 -67
- package/dist/import-DzA5Ty9_.mjs +0 -94
- package/dist/is-dirty-Cv0bdKkX.mjs +0 -8
- package/dist/key-B9AAqwjq.mjs +0 -17
- package/dist/list-AyGEaws8.mjs +0 -8
- package/dist/list-BiAVv9jX.mjs +0 -31
- package/dist/list-Bm1PlZEV.mjs +0 -31
- package/dist/list-BtgjcC2w.mjs +0 -31
- package/dist/list-CLgkOcmY.mjs +0 -39
- package/dist/list-CSnpbFML.mjs +0 -31
- package/dist/list-Cn-VruXD.mjs +0 -8
- package/dist/list-D7mMcRG5.mjs +0 -49
- package/dist/list-DOhVPh95.mjs +0 -39
- package/dist/list-DSHteJOl.mjs +0 -32
- package/dist/list-Dl81pkVs.mjs +0 -53
- package/dist/list-DwMcwucR.mjs +0 -31
- package/dist/list-IxaPXKXu.mjs +0 -31
- package/dist/list-hKRQUcGB.mjs +0 -39
- package/dist/listing-1G8iFfZe.mjs +0 -10
- package/dist/measure-DNldT89z.mjs +0 -25
- package/dist/paginate-DuDXvUPr.mjs +0 -49
- package/dist/patch-BpjI9BOz.mjs +0 -20
- package/dist/patch-DrMVqf34.mjs +0 -36
- package/dist/poll-task-CiB1o1wG.mjs +0 -194
- package/dist/preflight-DJOBTWVq.mjs +0 -90
- package/dist/prompt-DmxSLNrO.mjs +0 -52
- package/dist/remove-collection-DYQibG6d.mjs +0 -42
- package/dist/requests-Pc0u7PQS.mjs +0 -96
- package/dist/rescan-values-CuPGOzKI.mjs +0 -40
- package/dist/resolve-BiL5scF0.mjs +0 -91
- package/dist/revision-message-flag-B4BxzDXJ.mjs +0 -11
- package/dist/run-D6jyZ0nv.mjs +0 -135
- package/dist/runs-DRxrpAkU.mjs +0 -53
- package/dist/runtime-CPIHg_Zg.mjs +0 -1699
- package/dist/segment-BIKVTq_n.mjs +0 -25
- package/dist/setting-CApPg0Xr.mjs +0 -20
- package/dist/setting-CDEoJYO0.mjs +0 -55
- package/dist/setup-CruHFQJz.mjs +0 -71
- package/dist/snippet-DdoeL-7N.mjs +0 -22
- package/dist/stash-CR-ESWiX.mjs +0 -108
- package/dist/summary-WUjzNITU.mjs +0 -40
- package/dist/sync-schema-Cq5LzHHc.mjs +0 -54
- package/dist/sync-scope-Dh1wBlrg.mjs +0 -55
- package/dist/table-BK56VDw8.mjs +0 -21
- package/dist/timeline-Dl5pm5tN.mjs +0 -24
- package/dist/timeline-event-5JAeGVSI.mjs +0 -22
- package/dist/transform-ATK6rJBl.mjs +0 -31
- package/dist/transform-job-BezBE6Y8.mjs +0 -25
- package/dist/transform-tag-GqbcG_6_.mjs +0 -21
- package/dist/update-dashcard-Dnfa8_aJ.mjs +0 -73
- package/dist/upload-WT6SywFa.mjs +0 -16
- package/dist/validate-BoY75_M3.mjs +0 -1496
- package/dist/verify-VEB7TBQ_.mjs +0 -79
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { F as outputFlags, I as profileFlag, M as connectionFlags, N as listFlags, R as listEnvelopeSchema, s as renderList } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-DiKyBxOw.mjs";
|
|
3
|
+
import { n as windowList } from "./window-BkvrP0gB.mjs";
|
|
4
|
+
import { a as DashboardListFilter, n as DashboardCompact } from "./dashboard-BCpSq_G-.mjs";
|
|
5
|
+
import { t as parseEnumFlag } from "./parse-enum-D0Jfm_Bz.mjs";
|
|
6
|
+
import { t as dashboardView } from "./dashboard-CsIFFpzK.mjs";
|
|
7
|
+
//#region src/commands/dashboard/list.ts
|
|
8
|
+
const DashboardListEnvelope = listEnvelopeSchema(DashboardCompact);
|
|
9
|
+
var list_default = defineMetabaseCommand({
|
|
10
|
+
meta: {
|
|
11
|
+
name: "list",
|
|
12
|
+
description: "List dashboards"
|
|
13
|
+
},
|
|
14
|
+
capabilities: { minVersion: 58 },
|
|
15
|
+
args: {
|
|
16
|
+
...outputFlags,
|
|
17
|
+
...listFlags,
|
|
18
|
+
...profileFlag,
|
|
19
|
+
...connectionFlags,
|
|
20
|
+
filter: {
|
|
21
|
+
type: "string",
|
|
22
|
+
description: `Filter preset: ${DashboardListFilter.options.join("|")}`,
|
|
23
|
+
default: "all"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
outputSchema: DashboardListEnvelope,
|
|
27
|
+
examples: [
|
|
28
|
+
"mb dashboard list",
|
|
29
|
+
"mb dashboard list --json",
|
|
30
|
+
"mb dashboard list --filter archived --json"
|
|
31
|
+
],
|
|
32
|
+
async run({ args, ctx, getClient }) {
|
|
33
|
+
const filter = parseEnumFlag(args.filter, DashboardListFilter, "filter");
|
|
34
|
+
const { data, total } = await (await getClient()).dashboard.list({ f: filter });
|
|
35
|
+
renderList(windowList(data, ctx.range, total), dashboardView, ctx);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
//#endregion
|
|
39
|
+
export { list_default as default };
|
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import "./
|
|
5
|
-
import "./
|
|
6
|
-
import { Database, DatabaseCompact, databaseView } from "./database-B-xwx5LA.mjs";
|
|
7
|
-
import { z } from "zod";
|
|
8
|
-
|
|
1
|
+
import { F as outputFlags, I as profileFlag, M as connectionFlags, N as listFlags, R as listEnvelopeSchema, s as renderList } from "./cli.mjs";
|
|
2
|
+
import { r as parseEnum, t as defineMetabaseCommand } from "./runtime-DiKyBxOw.mjs";
|
|
3
|
+
import { n as windowList } from "./window-BkvrP0gB.mjs";
|
|
4
|
+
import { i as DatabaseListInclude, n as DatabaseCompact } from "./database-C8G6ZKG0.mjs";
|
|
5
|
+
import { n as databaseView } from "./database-B19qlLKZ.mjs";
|
|
9
6
|
//#region src/commands/db/list.ts
|
|
10
|
-
const DatabaseListInclude = z.enum(["tables"]);
|
|
11
|
-
const DatabaseApiList = z.object({
|
|
12
|
-
data: z.array(Database),
|
|
13
|
-
total: z.number().int().nonnegative()
|
|
14
|
-
}).loose();
|
|
15
7
|
const DatabaseListEnvelope = listEnvelopeSchema(DatabaseCompact);
|
|
16
8
|
var list_default = defineMetabaseCommand({
|
|
17
9
|
meta: {
|
|
@@ -21,6 +13,7 @@ var list_default = defineMetabaseCommand({
|
|
|
21
13
|
capabilities: { minVersion: 58 },
|
|
22
14
|
args: {
|
|
23
15
|
...outputFlags,
|
|
16
|
+
...listFlags,
|
|
24
17
|
...profileFlag,
|
|
25
18
|
...connectionFlags,
|
|
26
19
|
include: {
|
|
@@ -42,19 +35,12 @@ var list_default = defineMetabaseCommand({
|
|
|
42
35
|
async run({ args, ctx, getClient }) {
|
|
43
36
|
const include = parseEnum(args.include, DatabaseListInclude, "--include");
|
|
44
37
|
const saved = args.saved ? true : void 0;
|
|
45
|
-
const
|
|
46
|
-
const response = await client.requestParsed(DatabaseApiList, "/api/database", { query: {
|
|
38
|
+
const { data, total } = await (await getClient()).database.list({
|
|
47
39
|
include,
|
|
48
40
|
saved
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
data: response.data,
|
|
52
|
-
returned: response.data.length,
|
|
53
|
-
total: response.total
|
|
54
|
-
};
|
|
55
|
-
renderList(envelope, databaseView, ctx);
|
|
41
|
+
});
|
|
42
|
+
renderList(windowList(data, ctx.range, total), databaseView, ctx);
|
|
56
43
|
}
|
|
57
44
|
});
|
|
58
|
-
|
|
59
45
|
//#endregion
|
|
60
|
-
export { list_default as default };
|
|
46
|
+
export { list_default as default };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { F as outputFlags, I as profileFlag, M as connectionFlags, N as listFlags, R as listEnvelopeSchema, s as renderList } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-DiKyBxOw.mjs";
|
|
3
|
+
import { n as windowList } from "./window-BkvrP0gB.mjs";
|
|
4
|
+
import { n as SettingCompact } from "./setting-DTiLCW8g.mjs";
|
|
5
|
+
import { n as settingView } from "./setting-CwRYgHYN.mjs";
|
|
6
|
+
//#region src/commands/setting/list.ts
|
|
7
|
+
const SettingListEnvelope = listEnvelopeSchema(SettingCompact);
|
|
8
|
+
var list_default = defineMetabaseCommand({
|
|
9
|
+
meta: {
|
|
10
|
+
name: "list",
|
|
11
|
+
description: "List all settings (admin)"
|
|
12
|
+
},
|
|
13
|
+
capabilities: { minVersion: 58 },
|
|
14
|
+
args: {
|
|
15
|
+
...outputFlags,
|
|
16
|
+
...listFlags,
|
|
17
|
+
...profileFlag,
|
|
18
|
+
...connectionFlags
|
|
19
|
+
},
|
|
20
|
+
outputSchema: SettingListEnvelope,
|
|
21
|
+
examples: ["mb setting list", "mb setting list --json"],
|
|
22
|
+
async run({ ctx, getClient }) {
|
|
23
|
+
const { data, total } = await (await getClient()).setting.list();
|
|
24
|
+
renderList(windowList(data, ctx.range, total), settingView, ctx);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
//#endregion
|
|
28
|
+
export { list_default as default };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { F as outputFlags, N as listFlags, R as listEnvelopeSchema, b as warn, s as renderList, t as interruptSignal } from "./cli.mjs";
|
|
2
|
+
import { A as ProbedUser, D as writeProbeFailure, L as TokenFeatures, M as ProfileLastFailure, N as profileAuthMethod, O as writeProbeResult, P as ParsedVersion, S as listProfileRecords, T as resolveRecordCredential, a as createCredentialRefresher, j as ProfileAuthMethod, t as defineMetabaseCommand } from "./runtime-DiKyBxOw.mjs";
|
|
3
|
+
import { t as verifyAndProbe } from "./verify-K96rItG5.mjs";
|
|
4
|
+
import { s as displayUrl } from "./network-error-CEb9ymDW.mjs";
|
|
5
|
+
import { n as windowList } from "./window-BkvrP0gB.mjs";
|
|
6
|
+
import { a as renderVersionTag, i as renderUserRole, n as renderTimestamp, t as renderAuthMethod } from "./render-CI93iP0I.mjs";
|
|
6
7
|
import { z } from "zod";
|
|
7
|
-
|
|
8
8
|
//#region src/commands/auth/list.ts
|
|
9
9
|
const AuthProfileStatus = z.enum([
|
|
10
10
|
"ok",
|
|
@@ -20,7 +20,7 @@ const AuthProfile = z.object({
|
|
|
20
20
|
authenticated: z.boolean(),
|
|
21
21
|
status: AuthProfileStatus,
|
|
22
22
|
user: ProbedUser.nullable(),
|
|
23
|
-
version:
|
|
23
|
+
version: ParsedVersion.nullable(),
|
|
24
24
|
tokenFeatures: TokenFeatures.nullable(),
|
|
25
25
|
lastProbedAt: z.iso.datetime().nullable(),
|
|
26
26
|
lastFailure: ProfileLastFailure.nullable()
|
|
@@ -81,14 +81,20 @@ var list_default = defineMetabaseCommand({
|
|
|
81
81
|
description: "List configured authentication profiles"
|
|
82
82
|
},
|
|
83
83
|
capabilities: { minVersion: 58 },
|
|
84
|
-
args: {
|
|
84
|
+
args: {
|
|
85
|
+
...outputFlags,
|
|
86
|
+
...listFlags
|
|
87
|
+
},
|
|
85
88
|
outputSchema: AuthProfileListEnvelope,
|
|
86
89
|
examples: ["mb auth list", "mb auth list --json"],
|
|
87
90
|
async run({ ctx }) {
|
|
88
|
-
const
|
|
91
|
+
const window = windowList(await listProfileRecords(), ctx.range);
|
|
89
92
|
const items = [];
|
|
90
|
-
for (const record of
|
|
91
|
-
renderList(
|
|
93
|
+
for (const record of window.data) items.push(await persistAndProject(await verifyOne(record)));
|
|
94
|
+
renderList({
|
|
95
|
+
...window,
|
|
96
|
+
data: items
|
|
97
|
+
}, authProfileView, ctx);
|
|
92
98
|
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.`);
|
|
93
99
|
}
|
|
94
100
|
});
|
|
@@ -99,7 +105,10 @@ async function verifyOne(record) {
|
|
|
99
105
|
url: record.url,
|
|
100
106
|
verification: { kind: "no-creds" }
|
|
101
107
|
};
|
|
102
|
-
const result = await verifyAndProbe(resolved.url, resolved.credential,
|
|
108
|
+
const result = await verifyAndProbe(resolved.url, resolved.credential, {
|
|
109
|
+
refresh: createCredentialRefresher(record.name),
|
|
110
|
+
signal: interruptSignal
|
|
111
|
+
});
|
|
103
112
|
if (result.ok) return {
|
|
104
113
|
record,
|
|
105
114
|
url: resolved.url,
|
|
@@ -173,6 +182,5 @@ function statusFromVerification(failure) {
|
|
|
173
182
|
if (failure.kind === "network") return "network-error";
|
|
174
183
|
return "server-error";
|
|
175
184
|
}
|
|
176
|
-
|
|
177
185
|
//#endregion
|
|
178
|
-
export { list_default as default };
|
|
186
|
+
export { list_default as default };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { F as outputFlags, I as profileFlag, M as connectionFlags, N as listFlags, R as listEnvelopeSchema, s as renderList } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-DiKyBxOw.mjs";
|
|
3
|
+
import { n as windowList } from "./window-BkvrP0gB.mjs";
|
|
4
|
+
import { i as CollectionCompact, l as CollectionListFilter } from "./collection-CfulNRBG.mjs";
|
|
5
|
+
import { t as parseEnumFlag } from "./parse-enum-D0Jfm_Bz.mjs";
|
|
6
|
+
import { n as collectionView } from "./collection-CGoVLvcD.mjs";
|
|
7
|
+
//#region src/commands/collection/list.ts
|
|
8
|
+
const CollectionListEnvelope = listEnvelopeSchema(CollectionCompact);
|
|
9
|
+
var list_default = defineMetabaseCommand({
|
|
10
|
+
meta: {
|
|
11
|
+
name: "list",
|
|
12
|
+
description: "List collections"
|
|
13
|
+
},
|
|
14
|
+
capabilities: { minVersion: 58 },
|
|
15
|
+
args: {
|
|
16
|
+
...outputFlags,
|
|
17
|
+
...listFlags,
|
|
18
|
+
...profileFlag,
|
|
19
|
+
...connectionFlags,
|
|
20
|
+
filter: {
|
|
21
|
+
type: "string",
|
|
22
|
+
description: `Filter preset: ${CollectionListFilter.options.join("|")}`,
|
|
23
|
+
default: "all"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
outputSchema: CollectionListEnvelope,
|
|
27
|
+
examples: [
|
|
28
|
+
"mb collection list",
|
|
29
|
+
"mb collection list --json",
|
|
30
|
+
"mb collection list --filter archived --json"
|
|
31
|
+
],
|
|
32
|
+
async run({ args, ctx, getClient }) {
|
|
33
|
+
const filter = parseEnumFlag(args.filter, CollectionListFilter, "filter");
|
|
34
|
+
renderList(windowList((await (await getClient()).collection.list({ filter })).data, ctx.range), collectionView, ctx);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
//#endregion
|
|
38
|
+
export { list_default as default };
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import { loadVisibleSkills } from "./skills-
|
|
1
|
+
import { F as outputFlags, N as listFlags, R as listEnvelopeSchema, b as warn, s as renderList, y as listTruncationNotice } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-DiKyBxOw.mjs";
|
|
3
|
+
import { n as windowList } from "./window-BkvrP0gB.mjs";
|
|
4
|
+
import { i as loadVisibleSkills } from "./skills-DTCrMcix.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
|
-
|
|
7
6
|
//#region src/output/skill-list.ts
|
|
8
7
|
const DEFAULT_TERMINAL_WIDTH = 80;
|
|
9
8
|
const MIN_WRAP_WIDTH = 24;
|
|
@@ -33,8 +32,7 @@ function renderSkillList(rows, maxBytes) {
|
|
|
33
32
|
warn(listTruncationNotice(fullBytes));
|
|
34
33
|
}
|
|
35
34
|
function renderSkillBlock(row, width) {
|
|
36
|
-
const
|
|
37
|
-
const body = lines.map((line) => DESCRIPTION_INDENT + line).join("\n");
|
|
35
|
+
const body = wrapText(row.description, width - 2).map((line) => DESCRIPTION_INDENT + line).join("\n");
|
|
38
36
|
return body === "" ? `${row.name}\n\n` : `${row.name}\n${body}\n\n`;
|
|
39
37
|
}
|
|
40
38
|
function wrapText(text, width) {
|
|
@@ -55,7 +53,6 @@ function wrapWidth() {
|
|
|
55
53
|
const columns = process.stdout.columns;
|
|
56
54
|
return typeof columns === "number" && columns > 0 ? columns : DEFAULT_TERMINAL_WIDTH;
|
|
57
55
|
}
|
|
58
|
-
|
|
59
56
|
//#endregion
|
|
60
57
|
//#region src/commands/skills/list.ts
|
|
61
58
|
const SkillSummary = z.object({
|
|
@@ -78,21 +75,24 @@ var list_default = defineMetabaseCommand({
|
|
|
78
75
|
name: "list",
|
|
79
76
|
description: "List CLI-bundled skills — always consult the matching skill before acting on a task; they are the source of truth for every workflow."
|
|
80
77
|
},
|
|
81
|
-
|
|
78
|
+
capabilities: null,
|
|
79
|
+
args: {
|
|
80
|
+
...outputFlags,
|
|
81
|
+
...listFlags
|
|
82
|
+
},
|
|
82
83
|
outputSchema: SkillListEnvelope,
|
|
83
84
|
examples: ["mb skills list", "mb skills list --json"],
|
|
84
85
|
run({ ctx }) {
|
|
85
|
-
const
|
|
86
|
+
const envelope = windowList(loadVisibleSkills().map((s) => ({
|
|
86
87
|
name: s.name,
|
|
87
88
|
description: s.description
|
|
88
|
-
}));
|
|
89
|
+
})), ctx.range);
|
|
89
90
|
if (ctx.format === "json" || ctx.fields !== void 0 || ctx.full) {
|
|
90
|
-
renderList(
|
|
91
|
+
renderList(envelope, skillSummaryView, ctx);
|
|
91
92
|
return;
|
|
92
93
|
}
|
|
93
|
-
renderSkillList(
|
|
94
|
+
renderSkillList(envelope.data, ctx.maxBytes);
|
|
94
95
|
}
|
|
95
96
|
});
|
|
96
|
-
|
|
97
97
|
//#endregion
|
|
98
|
-
export { list_default as default };
|
|
98
|
+
export { list_default as default };
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { openBrowser } from "./process-
|
|
1
|
+
import { f as errorMessage, i as ConfigError } from "./predicates-Bkm2IoeX.mjs";
|
|
2
|
+
import { F as outputFlags, I as profileFlag, M as connectionFlags, _ as promptSelect, b as warn, c as renderSummary, g as promptPassword, t as interruptSignal, v as promptText } from "./cli.mjs";
|
|
3
|
+
import { A as ProbedUser, D as writeProbeFailure, E as writeOAuthProfile, O as writeProbeResult, P as ParsedVersion, _ as DEFAULT_PROFILE, b as consumeKeyringDowngradeWarning, d as revokeOAuthCredential, f as OAUTH_SCOPE, g as tryDiscoverMetadata, h as registerClient, k as writeProfile, l as OAUTH_CLIENT_NAME, m as exchangeCode, o as explicitProfileName, p as discoverMetadata, s as readEnvCredentials, t as defineMetabaseCommand, u as USER_AGENT, x as keyringFallbackWarning, y as consumeKeychainResidualWarning } from "./runtime-DiKyBxOw.mjs";
|
|
4
|
+
import { t as verifyAndProbe } from "./verify-K96rItG5.mjs";
|
|
5
|
+
import { c as normalizeUrl, p as oauthCredentialFromTokens } from "./network-error-CEb9ymDW.mjs";
|
|
6
|
+
import { r as readInput } from "./input-DH9i67x_.mjs";
|
|
7
|
+
import { a as renderVersionTag, i as renderUserRole, r as renderUserName } from "./render-CI93iP0I.mjs";
|
|
8
|
+
import { t as openBrowser } from "./process-DBOOrmET.mjs";
|
|
9
9
|
import { z } from "zod";
|
|
10
10
|
import { createServer } from "node:http";
|
|
11
11
|
import { createHash, randomBytes } from "node:crypto";
|
|
12
|
-
|
|
13
|
-
//#region src/core/auth/callback-server.ts
|
|
12
|
+
//#region ../client/src/auth/callback-server.ts
|
|
14
13
|
const LOOPBACK_HOST = "127.0.0.1";
|
|
15
14
|
const CALLBACK_PATH = "/callback";
|
|
16
15
|
const DEFAULT_TIMEOUT_MS = 3e5;
|
|
@@ -26,8 +25,7 @@ function parseCallbackQuery(rawUrl) {
|
|
|
26
25
|
}
|
|
27
26
|
function isCallbackPath(rawUrl) {
|
|
28
27
|
const queryStart = rawUrl.indexOf("?");
|
|
29
|
-
|
|
30
|
-
return path === CALLBACK_PATH;
|
|
28
|
+
return (queryStart === -1 ? rawUrl : rawUrl.slice(0, queryStart)) === CALLBACK_PATH;
|
|
31
29
|
}
|
|
32
30
|
function escapeHtml(value) {
|
|
33
31
|
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
@@ -45,8 +43,7 @@ function respond(res, status, title, message) {
|
|
|
45
43
|
function serverPort(server) {
|
|
46
44
|
const address = server.address();
|
|
47
45
|
if (address === null || typeof address === "string") throw new ConfigError("could not determine loopback callback port");
|
|
48
|
-
|
|
49
|
-
return info.port;
|
|
46
|
+
return address.port;
|
|
50
47
|
}
|
|
51
48
|
function startCallbackServer(expectedState, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
52
49
|
return new Promise((resolveServer, rejectServer) => {
|
|
@@ -75,7 +72,7 @@ function startCallbackServer(expectedState, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
|
75
72
|
deliver(new ConfigError("authorization callback missing code"));
|
|
76
73
|
return;
|
|
77
74
|
}
|
|
78
|
-
respond(res, 200, "Login complete", "
|
|
75
|
+
respond(res, 200, "Login complete", "Authorization complete. You can close this window.");
|
|
79
76
|
deliver({
|
|
80
77
|
code: query.code,
|
|
81
78
|
state: query.state
|
|
@@ -119,9 +116,8 @@ function startCallbackServer(expectedState, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
|
119
116
|
});
|
|
120
117
|
});
|
|
121
118
|
}
|
|
122
|
-
|
|
123
119
|
//#endregion
|
|
124
|
-
//#region src/
|
|
120
|
+
//#region ../client/src/auth/pkce.ts
|
|
125
121
|
const VERIFIER_BYTES = 32;
|
|
126
122
|
const STATE_BYTES = 16;
|
|
127
123
|
function base64Url(buffer) {
|
|
@@ -129,40 +125,36 @@ function base64Url(buffer) {
|
|
|
129
125
|
}
|
|
130
126
|
function generatePkce() {
|
|
131
127
|
const verifier = base64Url(randomBytes(VERIFIER_BYTES));
|
|
132
|
-
const challenge = base64Url(createHash("sha256").update(verifier).digest());
|
|
133
128
|
return {
|
|
134
129
|
verifier,
|
|
135
|
-
challenge
|
|
130
|
+
challenge: base64Url(createHash("sha256").update(verifier).digest())
|
|
136
131
|
};
|
|
137
132
|
}
|
|
138
133
|
function randomState() {
|
|
139
134
|
return base64Url(randomBytes(STATE_BYTES));
|
|
140
135
|
}
|
|
141
|
-
|
|
142
136
|
//#endregion
|
|
143
|
-
//#region src/
|
|
144
|
-
const CLIENT_NAME = "Metabase CLI";
|
|
137
|
+
//#region ../client/src/auth/oauth-login.ts
|
|
145
138
|
function buildAuthorizeUrl(authorizationEndpoint, params) {
|
|
146
|
-
|
|
147
|
-
return `${authorizationEndpoint}${separator}${new URLSearchParams(params).toString()}`;
|
|
139
|
+
return `${authorizationEndpoint}${authorizationEndpoint.includes("?") ? "&" : "?"}${new URLSearchParams(params).toString()}`;
|
|
148
140
|
}
|
|
149
|
-
async function resolveClientId(registrationEndpoint, redirectUri
|
|
150
|
-
if (
|
|
151
|
-
if (registrationEndpoint === void 0) throw new ConfigError("this Metabase has dynamic client registration disabled; pass
|
|
152
|
-
|
|
141
|
+
async function resolveClientId(input, registrationEndpoint, redirectUri) {
|
|
142
|
+
if (input.clientId !== void 0) return input.clientId;
|
|
143
|
+
if (registrationEndpoint === void 0) throw new ConfigError("this Metabase has dynamic client registration disabled; pass clientId with a pre-registered native client");
|
|
144
|
+
return (await registerClient({
|
|
153
145
|
registrationEndpoint,
|
|
154
146
|
redirectUri,
|
|
155
|
-
clientName:
|
|
156
|
-
|
|
157
|
-
|
|
147
|
+
clientName: input.clientName,
|
|
148
|
+
userAgent: input.userAgent
|
|
149
|
+
})).client_id;
|
|
158
150
|
}
|
|
159
151
|
async function oauthLogin(input, deps) {
|
|
160
|
-
const metadata = input.metadata ?? await discoverMetadata(input.baseUrl);
|
|
152
|
+
const metadata = input.metadata ?? await discoverMetadata(input.baseUrl, input.userAgent);
|
|
161
153
|
const pkce = generatePkce();
|
|
162
154
|
const state = randomState();
|
|
163
155
|
const server = await startCallbackServer(state, input.timeoutMs);
|
|
164
156
|
try {
|
|
165
|
-
const clientId = await resolveClientId(metadata.registration_endpoint, server.redirectUri
|
|
157
|
+
const clientId = await resolveClientId(input, metadata.registration_endpoint, server.redirectUri);
|
|
166
158
|
const authorizeUrl = buildAuthorizeUrl(metadata.authorization_endpoint, {
|
|
167
159
|
response_type: "code",
|
|
168
160
|
client_id: clientId,
|
|
@@ -180,7 +172,8 @@ async function oauthLogin(input, deps) {
|
|
|
180
172
|
code: callback.code,
|
|
181
173
|
redirectUri: server.redirectUri,
|
|
182
174
|
clientId,
|
|
183
|
-
codeVerifier: pkce.verifier
|
|
175
|
+
codeVerifier: pkce.verifier,
|
|
176
|
+
userAgent: input.userAgent
|
|
184
177
|
});
|
|
185
178
|
if (tokens.refresh_token === void 0) throw new ConfigError("token endpoint did not return a refresh token");
|
|
186
179
|
return oauthCredentialFromTokens(tokens, tokens.refresh_token, clientId, deps.now());
|
|
@@ -188,7 +181,6 @@ async function oauthLogin(input, deps) {
|
|
|
188
181
|
server.close();
|
|
189
182
|
}
|
|
190
183
|
}
|
|
191
|
-
|
|
192
184
|
//#endregion
|
|
193
185
|
//#region src/commands/auth/login.ts
|
|
194
186
|
const LoginResult = z.object({
|
|
@@ -196,7 +188,11 @@ const LoginResult = z.object({
|
|
|
196
188
|
url: z.string(),
|
|
197
189
|
authenticated: z.boolean(),
|
|
198
190
|
user: ProbedUser.nullable(),
|
|
199
|
-
version:
|
|
191
|
+
version: ParsedVersion.nullable()
|
|
192
|
+
});
|
|
193
|
+
const VERIFY_STEP_LABEL = Object.freeze({
|
|
194
|
+
user: "current user",
|
|
195
|
+
server: "server properties"
|
|
200
196
|
});
|
|
201
197
|
const loginView = {
|
|
202
198
|
compactPick: LoginResult,
|
|
@@ -277,8 +273,7 @@ var login_default = defineMetabaseCommand({
|
|
|
277
273
|
}
|
|
278
274
|
if (!process.stdin.isTTY) throw new ConfigError("interactive login requires a TTY; pass --api-key or set MB_API_KEY for non-interactive login");
|
|
279
275
|
const metadata = await probeOAuthSupport(url);
|
|
280
|
-
|
|
281
|
-
if (method === "apiKey") {
|
|
276
|
+
if (await chooseLoginMethod(metadata, args.clientId) === "apiKey") {
|
|
282
277
|
const promptedKey = await promptForApiKey();
|
|
283
278
|
await completeLogin(profileName, url, {
|
|
284
279
|
kind: "apiKey",
|
|
@@ -291,6 +286,8 @@ var login_default = defineMetabaseCommand({
|
|
|
291
286
|
}
|
|
292
287
|
const credential = await oauthLogin({
|
|
293
288
|
baseUrl: url,
|
|
289
|
+
userAgent: USER_AGENT,
|
|
290
|
+
clientName: OAUTH_CLIENT_NAME,
|
|
294
291
|
...metadata !== null && { metadata },
|
|
295
292
|
...args.clientId !== void 0 && { clientId: args.clientId }
|
|
296
293
|
}, {
|
|
@@ -303,7 +300,7 @@ var login_default = defineMetabaseCommand({
|
|
|
303
300
|
});
|
|
304
301
|
async function probeOAuthSupport(url) {
|
|
305
302
|
try {
|
|
306
|
-
return await tryDiscoverMetadata(url);
|
|
303
|
+
return await tryDiscoverMetadata(url, USER_AGENT);
|
|
307
304
|
} catch (error) {
|
|
308
305
|
if (error instanceof ConfigError) throw error;
|
|
309
306
|
throw new ConfigError(`could not reach ${url}: ${errorMessage(error)}`);
|
|
@@ -316,7 +313,7 @@ async function chooseLoginMethod(metadata, clientId) {
|
|
|
316
313
|
return "apiKey";
|
|
317
314
|
}
|
|
318
315
|
if (clientId !== void 0) return "oauth";
|
|
319
|
-
|
|
316
|
+
const method = await promptSelect({
|
|
320
317
|
message: "How do you want to log in?",
|
|
321
318
|
choices: [{
|
|
322
319
|
value: "oauth",
|
|
@@ -329,6 +326,8 @@ async function chooseLoginMethod(metadata, clientId) {
|
|
|
329
326
|
}],
|
|
330
327
|
initialValue: "oauth"
|
|
331
328
|
});
|
|
329
|
+
if (method === "oauth" && metadata.registration_endpoint === void 0) throw new ConfigError("this Metabase has dynamic client registration disabled; pass --client-id with a pre-registered native client");
|
|
330
|
+
return method;
|
|
332
331
|
}
|
|
333
332
|
async function promptForApiKey() {
|
|
334
333
|
return promptPassword({
|
|
@@ -349,7 +348,7 @@ async function completeLogin(profileName, url, credential, skipVerify, ctx, pers
|
|
|
349
348
|
}, loginView, `Saved credentials for profile "${profileName}" (${url}) without verifying.`, ctx);
|
|
350
349
|
return;
|
|
351
350
|
}
|
|
352
|
-
const result = await verifyAndProbe(url, credential);
|
|
351
|
+
const result = await verifyAndProbe(url, credential, { signal: interruptSignal });
|
|
353
352
|
if (!result.ok) {
|
|
354
353
|
await writeProbeFailure(profileName, {
|
|
355
354
|
kind: result.kind,
|
|
@@ -366,7 +365,7 @@ async function completeLogin(profileName, url, credential, skipVerify, ctx, pers
|
|
|
366
365
|
const who = renderUserName(result.user);
|
|
367
366
|
const role = renderUserRole(result.user);
|
|
368
367
|
const versionTag = renderVersionTag(result.server.version);
|
|
369
|
-
const serverClause = versionTag ===
|
|
368
|
+
const serverClause = versionTag === "—" ? "" : ` Server ${versionTag}.`;
|
|
370
369
|
renderSummary({
|
|
371
370
|
profile: profileName,
|
|
372
371
|
url,
|
|
@@ -378,8 +377,7 @@ async function completeLogin(profileName, url, credential, skipVerify, ctx, pers
|
|
|
378
377
|
async function revokeUnsavedOAuthCredential(url, credential) {
|
|
379
378
|
if (credential.kind !== "oauth") return;
|
|
380
379
|
try {
|
|
381
|
-
|
|
382
|
-
if (!revoked) warn("server does not advertise a revocation endpoint; the unsaved tokens remain valid until they expire");
|
|
380
|
+
if (!await revokeOAuthCredential(url, credential, USER_AGENT)) warn("server does not advertise a revocation endpoint; the unsaved tokens remain valid until they expire");
|
|
383
381
|
} catch (error) {
|
|
384
382
|
warn(`could not revoke the unsaved tokens server-side: ${errorMessage(error)}`);
|
|
385
383
|
}
|
|
@@ -399,8 +397,8 @@ function announceAuthorizeUrl(url, opened) {
|
|
|
399
397
|
warn(`Open this URL in your browser to finish login:\n ${url}`);
|
|
400
398
|
}
|
|
401
399
|
function formatVerifyFailureMessage(profileName, failure) {
|
|
402
|
-
const
|
|
403
|
-
return `verification failed (${
|
|
400
|
+
const label = VERIFY_STEP_LABEL[failure.which];
|
|
401
|
+
return `verification failed (${failure.endpoint === void 0 ? label : `${label}, ${failure.endpoint}`}): ${failure.message} — credentials were not saved for profile "${profileName}"`;
|
|
404
402
|
}
|
|
405
403
|
async function resolveLoginProfile(flagProfile) {
|
|
406
404
|
const explicit = explicitProfileName(flagProfile);
|
|
@@ -432,7 +430,7 @@ async function nonInteractiveApiKey(flagKey, envKey) {
|
|
|
432
430
|
}
|
|
433
431
|
async function promptForUrl() {
|
|
434
432
|
if (!process.stdin.isTTY) throw new ConfigError("--url is required when stdin is not a TTY (cannot prompt interactively)");
|
|
435
|
-
|
|
433
|
+
return normalizeUrl(await promptText({
|
|
436
434
|
message: "Metabase URL",
|
|
437
435
|
placeholder: "https://metabase.example.com",
|
|
438
436
|
validate(input) {
|
|
@@ -442,11 +440,8 @@ async function promptForUrl() {
|
|
|
442
440
|
} catch (error) {
|
|
443
441
|
return errorMessage(error);
|
|
444
442
|
}
|
|
445
|
-
return void 0;
|
|
446
443
|
}
|
|
447
|
-
});
|
|
448
|
-
return normalizeUrl(value);
|
|
444
|
+
}));
|
|
449
445
|
}
|
|
450
|
-
|
|
451
446
|
//#endregion
|
|
452
|
-
export { login_default as default };
|
|
447
|
+
export { login_default as default };
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./
|
|
3
|
-
import {
|
|
4
|
-
import { promptConfirm } from "./prompt-DmxSLNrO.mjs";
|
|
1
|
+
import { f as errorMessage } from "./predicates-Bkm2IoeX.mjs";
|
|
2
|
+
import { F as outputFlags, I as profileFlag, b as warn, c as renderSummary, h as promptConfirm } from "./cli.mjs";
|
|
3
|
+
import { C as readProfileCredential, c as resolveProfileName, d as revokeOAuthCredential, t as defineMetabaseCommand, u as USER_AGENT, v as clearProfile, y as consumeKeychainResidualWarning } from "./runtime-DiKyBxOw.mjs";
|
|
5
4
|
import { z } from "zod";
|
|
6
|
-
|
|
7
5
|
//#region src/commands/auth/logout.ts
|
|
8
6
|
const LogoutResult = z.object({
|
|
9
7
|
profile: z.string(),
|
|
@@ -47,11 +45,10 @@ var logout_default = defineMetabaseCommand({
|
|
|
47
45
|
async run({ args, ctx }) {
|
|
48
46
|
const profileName = resolveProfileName(args.profile);
|
|
49
47
|
if (!args.yes && process.stdin.isTTY === true) {
|
|
50
|
-
|
|
48
|
+
if (!await promptConfirm({
|
|
51
49
|
message: `Clear stored credentials for profile "${profileName}"?`,
|
|
52
50
|
initialValue: false
|
|
53
|
-
})
|
|
54
|
-
if (!ok) {
|
|
51
|
+
})) {
|
|
55
52
|
renderSummary({
|
|
56
53
|
profile: profileName,
|
|
57
54
|
cleared: false,
|
|
@@ -65,8 +62,7 @@ var logout_default = defineMetabaseCommand({
|
|
|
65
62
|
const residual = consumeKeychainResidualWarning();
|
|
66
63
|
if (residual !== null) warn(residual);
|
|
67
64
|
if (resolved !== null && resolved.credential.kind === "oauth") try {
|
|
68
|
-
|
|
69
|
-
if (!revoked) warn("server does not advertise a revocation endpoint; tokens remain valid until they expire");
|
|
65
|
+
if (!await revokeOAuthCredential(resolved.url, resolved.credential, USER_AGENT)) warn("server does not advertise a revocation endpoint; tokens remain valid until they expire");
|
|
70
66
|
} catch (error) {
|
|
71
67
|
warn(`could not revoke tokens server-side: ${errorMessage(error)}`);
|
|
72
68
|
}
|
|
@@ -78,6 +74,5 @@ var logout_default = defineMetabaseCommand({
|
|
|
78
74
|
}, logoutView, message, ctx);
|
|
79
75
|
}
|
|
80
76
|
});
|
|
81
|
-
|
|
82
77
|
//#endregion
|
|
83
|
-
export { logout_default as default };
|
|
78
|
+
export { logout_default as default };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { n as MeasureCompact } from "./measure-CtfjqJFP.mjs";
|
|
2
|
+
//#region src/output/views/measure.ts
|
|
3
|
+
const measureView = {
|
|
4
|
+
compactPick: MeasureCompact,
|
|
5
|
+
tableColumns: [
|
|
6
|
+
{
|
|
7
|
+
key: "id",
|
|
8
|
+
label: "ID"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
key: "name",
|
|
12
|
+
label: "Name"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
key: "description",
|
|
16
|
+
label: "Description"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
key: "table_id",
|
|
20
|
+
label: "Table"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
key: "archived",
|
|
24
|
+
label: "Archived"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { measureView as t };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { t as defineCommandGroup } from "./group-DBM87IgC.mjs";
|
|
2
|
+
//#region src/commands/measure/index.ts
|
|
3
|
+
var measure_default = defineCommandGroup({
|
|
4
|
+
name: "measure",
|
|
5
|
+
description: "Manage Metabase measures",
|
|
6
|
+
skills: [{
|
|
7
|
+
skill: "mbql",
|
|
8
|
+
purpose: "the definition aggregation"
|
|
9
|
+
}, {
|
|
10
|
+
skill: "data-workflow",
|
|
11
|
+
purpose: "define reusable measures"
|
|
12
|
+
}],
|
|
13
|
+
subCommands: {
|
|
14
|
+
list: () => import("./list-BtmsNOEn.mjs").then((mod) => mod.default),
|
|
15
|
+
get: () => import("./get-CDMGbgrh.mjs").then((mod) => mod.default),
|
|
16
|
+
create: () => import("./create-CAWytBE5.mjs").then((mod) => mod.default),
|
|
17
|
+
update: () => import("./update-Nfi44RrE.mjs").then((mod) => mod.default),
|
|
18
|
+
archive: () => import("./archive-4tmm946K.mjs").then((mod) => mod.default)
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
//#endregion
|
|
22
|
+
export { measure_default as default };
|