@metabase/cli 0.3.1-alpha.versioning.9ac5f50 → 0.3.2-alpha.fix-transform-test-ee-path.041c793
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/dist/{add-collection-Dmd-uNeU.mjs → add-collection-73X1DmCM.mjs} +5 -5
- package/dist/{alert-D1u2MVZj.mjs → alert-BB38lWSL.mjs} +7 -7
- package/dist/{alerts-DcBjcfEE.mjs → alerts-DxyzqLSU.mjs} +6 -6
- package/dist/{append-B9Htvmab.mjs → append-CHme1Enm.mjs} +4 -4
- package/dist/{archive-BUoYMkxO.mjs → archive-BGiDxu8O.mjs} +3 -3
- package/dist/{archive-Bf014rFm.mjs → archive-BMyvyf62.mjs} +3 -3
- package/dist/{archive-BmsZFOZY.mjs → archive-C4Y2B58q.mjs} +3 -3
- package/dist/{archive-BNivAYGr.mjs → archive-CP5Hlqjw.mjs} +4 -4
- package/dist/{archive-CvU2z5192.mjs → archive-Cq3fnc0v2.mjs} +5 -5
- package/dist/{archive-B660RguB.mjs → archive-CqKqNdUh.mjs} +5 -5
- package/dist/{archive-CgmidYZV.mjs → archive-Czo5T0Lp.mjs} +3 -3
- package/dist/{archive-BVmFGFwG.mjs → archive-DBcxZwLd.mjs} +5 -5
- package/dist/{archive-DhDQIKR_.mjs → archive-DKFPJ9j3.mjs} +5 -5
- package/dist/{archive-CNif6BKy.mjs → archive-DPL1qOuL.mjs} +5 -5
- package/dist/{archive-bPdDITuY.mjs → archive-eS-XA74p.mjs} +3 -3
- package/dist/{auth-CefYEPP5.mjs → auth-6YyB0HNB.mjs} +5 -5
- package/dist/{body-C7m9q4cm.mjs → body-OjAWKVaU.mjs} +3 -3
- package/dist/{branches-pz04OjF2.mjs → branches-D5YLVFDK.mjs} +3 -3
- package/dist/{cancel-CNLnv19e.mjs → cancel-DeRIq1YJ.mjs} +3 -3
- package/dist/{cancel-task-DbnxSh7U.mjs → cancel-task-CqExODVm.mjs} +4 -4
- package/dist/card-BMSqofd7.mjs +24 -0
- package/dist/{card-zyUkr2nS.mjs → card-CEkp1mcI.mjs} +1 -1
- package/dist/{card-DZxRmver.mjs → card-voh1k4hl.mjs} +14 -11
- package/dist/{cards-DtYlVoGP.mjs → cards-B813G9I5.mjs} +6 -6
- package/dist/cli.mjs +223 -211
- package/dist/{client-Bv7Iwdvh.mjs → client-cJ7aw0Gt.mjs} +1788 -72
- package/dist/collection-BfNg7tEg.mjs +20 -0
- package/dist/{collection-WFdBeyqa.mjs → collection-BxdPxD38.mjs} +1 -1
- package/dist/{collection-DALwHnbz.mjs → collection-DYM0p3Xl.mjs} +1 -1
- package/dist/{collection-namespace-CvT0TIZA.mjs → collection-namespace-CVzDgJV0.mjs} +2 -2
- package/dist/{content-translation-D7POzJJ6.mjs → content-translation-QKWt9l76.mjs} +3 -3
- package/dist/{create-JOXq0ULN.mjs → create-4UnoQvsy.mjs} +4 -4
- package/dist/{create-CLgalJUe.mjs → create-BJad6MR82.mjs} +7 -7
- package/dist/{create-Bh2j733n.mjs → create-BLiB2xqo.mjs} +6 -6
- package/dist/{create-DGHILnnk.mjs → create-BWp6L_dW.mjs} +4 -4
- package/dist/{create-Di4YvIbK.mjs → create-Bef5eBCA.mjs} +4 -4
- package/dist/{create-CGgPnb7L.mjs → create-CMV3qlzJ.mjs} +3 -3
- package/dist/{create-Ds-DnSBe.mjs → create-CWGsiFvU.mjs} +3 -3
- package/dist/{create-DhDREiiy.mjs → create-CoFg1p6m.mjs} +3 -3
- package/dist/{create-CGPle4nE.mjs → create-CvIeb1NU.mjs} +6 -6
- package/dist/{create-Bwg-5p08.mjs → create-CvpeAcFc.mjs} +3 -3
- package/dist/{create-DYd_o9BD.mjs → create-D50TxVTk.mjs} +4 -4
- package/dist/{create-DnqnjGGf.mjs → create-DEBgYRlM.mjs} +5 -5
- package/dist/{create-CN24yp_W.mjs → create-DJm0YuLW.mjs} +3 -3
- package/dist/{create-CuYGZ4gu2.mjs → create-DmKwDQCY2.mjs} +5 -5
- package/dist/{create-branch-DWcxC30N.mjs → create-branch-BN5iH-GM.mjs} +4 -4
- package/dist/{create-BEE8uvz2.mjs → create-bvpl6Fn5.mjs} +6 -6
- package/dist/create-uanpKsPo.mjs +34 -0
- package/dist/{csv-CUQvcCEk.mjs → csv-BhuX9fwh.mjs} +4 -4
- package/dist/{current-task-D6P0eL21.mjs → current-task-BMt2NeqV.mjs} +4 -4
- package/dist/{dashboard-BudI952R.mjs → dashboard-Ct_ajSYI.mjs} +10 -10
- package/dist/{dashboard-CKUR8ZpQ.mjs → dashboard-D0hwTC-f.mjs} +11 -2
- package/dist/{dashboard-BlbNszi8.mjs → dashboard-DgK81azj.mjs} +1 -1
- package/dist/{database-B19qlLKZ.mjs → database-C3E9PZSx.mjs} +1 -1
- package/dist/{database-C8G6ZKG0.mjs → database-JtHTqSpq.mjs} +1 -1
- package/dist/{db-C7UTd-6P.mjs → db-B_LW2VE-.mjs} +7 -7
- package/dist/{delete-Ud6iliGM.mjs → delete-BOcPK_H9.mjs} +4 -4
- package/dist/{delete-_IHffP-A.mjs → delete-CowGO4rh.mjs} +4 -4
- package/dist/{delete-Ds-zGh9C.mjs → delete-D0f7VatX.mjs} +4 -4
- package/dist/{delete-DbZZKcYj.mjs → delete-D2bUV6uo.mjs} +4 -4
- package/dist/delete-DZ_ICQug.mjs +44 -0
- package/dist/{delete-DSxqbcFE.mjs → delete-Ur7b11no.mjs} +4 -4
- package/dist/{delete-runtime-BjHL1ryM.mjs → delete-runtime-BKEzJn22.mjs} +1 -1
- package/dist/{delete-table-DtXH6IN5.mjs → delete-table-Dd8X573t.mjs} +4 -4
- package/dist/{dependencies-CR1dlq-A.mjs → dependencies-XDVLBwko.mjs} +6 -6
- package/dist/{dirty-CYxnOnh0.mjs → dirty-k-JmGLsS.mjs} +5 -5
- package/dist/{document-Cd2mmqCp.mjs → document-BHpLJbKU.mjs} +5 -0
- package/dist/document-BW9iow8R.mjs +19 -0
- package/dist/{document-D6OybtP2.mjs → document-CA0Q6lqu.mjs} +1 -1
- package/dist/{download-DPpmmYQe.mjs → download-CQjPIYDO.mjs} +2 -2
- package/dist/{eid-D-BbtWjt.mjs → eid-CNTKDgwj.mjs} +3 -3
- package/dist/{events-CJEnn8WE.mjs → events-BshWlkDp.mjs} +4 -4
- package/dist/{export-BOgyuIOQ.mjs → export-Dq6ecU8h.mjs} +6 -6
- package/dist/{field-CzHBOPER.mjs → field-Bo2ISMO4.mjs} +5 -5
- package/dist/{field-Cr2DPUG9.mjs → field-CcN4oZy6.mjs} +16 -1
- package/dist/{field-BPsNa-TO.mjs → field-fDtIrY6D.mjs} +1 -1
- package/dist/{fields-Bwgkrvus.mjs → fields-CVctqn5G.mjs} +6 -6
- package/dist/{get-BLJSCw53.mjs → get-7xTeNGAo.mjs} +5 -5
- package/dist/{get-DyyPiiaB.mjs → get-8b5Sh50q.mjs} +5 -5
- package/dist/{get-DVi3a2nm.mjs → get-B4RgW-VT.mjs} +5 -5
- package/dist/{get-BaPadzdM.mjs → get-BD81MHl_.mjs} +3 -3
- package/dist/{get-CvIgxPXV.mjs → get-Bl3OmlBP.mjs} +4 -4
- package/dist/get-BtTetWzm.mjs +32 -0
- package/dist/{get-BfVCLBqc.mjs → get-BvSA_mmf.mjs} +5 -5
- package/dist/{get-DsKmZfM2.mjs → get-BvgEF--n.mjs} +3 -3
- package/dist/{get-D8lHwu4-.mjs → get-C5sWciaE.mjs} +5 -5
- package/dist/{get-CqQ-pf0q.mjs → get-CO6X4nZH.mjs} +16 -12
- package/dist/{get-CWfIiXwL.mjs → get-CTPvdcud.mjs} +5 -5
- package/dist/{get-C1ZdOvMm.mjs → get-CrpwxWOV.mjs} +3 -3
- package/dist/{get-BOLwso0V.mjs → get-D4oGhZWX.mjs} +3 -3
- package/dist/{get-B89DUSvw.mjs → get-Df6cGHCM.mjs} +3 -3
- package/dist/{get-BL90QC64.mjs → get-DfMVlz64.mjs} +5 -5
- package/dist/{get-CLu4yzMp2.mjs → get-Dr-U321T2.mjs} +5 -5
- package/dist/{get-D4OTJblo.mjs → get-Dw7jAno3.mjs} +5 -5
- package/dist/{get-DgnYF7LR.mjs → get-PWhOdz1z.mjs} +3 -3
- package/dist/{get-COwdtskS.mjs → get-RslzBaXx.mjs} +4 -4
- package/dist/{get-run-Iya0Yw9s.mjs → get-run-CZdDqfUj.mjs} +5 -5
- package/dist/{get-Eqq13YY-.mjs → get-wjIgUlNl.mjs} +3 -3
- package/dist/git-sync-BmoRk0UV.mjs +28 -0
- package/dist/{git-sync-BDnxPrqU.mjs → git-sync-BwBRmEhE.mjs} +18 -1
- package/dist/{git-sync-DxD_ng48.mjs → git-sync-TjX1r_wF.mjs} +1 -1
- package/dist/{group-CmVCLBDz.mjs → group-YQQ5GIcP.mjs} +2 -3
- package/dist/{has-remote-changes-DfJUMP8F.mjs → has-remote-changes-i-3MVxat.mjs} +4 -4
- package/dist/{import-FEAx-Y5A.mjs → import-DWEKejya.mjs} +6 -6
- package/dist/{input-DFZ_qGW_.mjs → input-DEvkIjGr.mjs} +1 -1
- package/dist/{is-dirty-BsYjBSXG.mjs → is-dirty-C5ipqd4v.mjs} +2 -2
- package/dist/{items-D4rstE12.mjs → items-hKJ2ZDwy.mjs} +6 -6
- package/dist/{key-BmWundO3.mjs → key-PYetuQ13.mjs} +1 -1
- package/dist/{library-uzyHWBap.mjs → library-B7_04UVK.mjs} +5 -5
- package/dist/{library-DXB8sm4r.mjs → library-BPIzb3K_.mjs} +1 -1
- package/dist/{library-CmctxHjv.mjs → library-PGCfm0UA.mjs} +1 -1
- package/dist/{list-DrS3ePsv.mjs → list-1vdClKSE.mjs} +3 -3
- package/dist/{list-xMfCeuZc.mjs → list-6myofqMv.mjs} +6 -6
- package/dist/{list-squb_ioH.mjs → list-B-9QOX9Y.mjs} +5 -5
- package/dist/{list-ndIl9XqV.mjs → list-Bs7_Rysg.mjs} +6 -6
- package/dist/list-CHuhMXet.mjs +35 -0
- package/dist/{list-CQy0z7f9.mjs → list-CLZU_EOf.mjs} +3 -3
- package/dist/{list-DeNGm9G4.mjs → list-Cen-7uTo.mjs} +4 -4
- package/dist/{list-Bjj0z5BS.mjs → list-CgH-H-O6.mjs} +3 -3
- package/dist/{list-BmMi_wPD.mjs → list-CjNXskB4.mjs} +6 -6
- package/dist/{list-DoTiQc3D.mjs → list-CmFh1GQ_.mjs} +3 -3
- package/dist/{list-D_zvX0ms.mjs → list-D6tTvYUP.mjs} +3 -3
- package/dist/{list-CC1M_n6Z.mjs → list-DI820W6w.mjs} +5 -5
- package/dist/{list-Dgm6TkqR.mjs → list-DKZnQ4Ts.mjs} +6 -6
- package/dist/{list-sQcA4g05.mjs → list-DKcC4cm0.mjs} +5 -5
- package/dist/{list-BRpPbvyS.mjs → list-DfRqNH1N.mjs} +3 -3
- package/dist/{list-bN0RC14-.mjs → list-DjwnsyXM.mjs} +11 -10
- package/dist/{list-BXL8HFr_.mjs → list-VNC-_E59.mjs} +5 -5
- package/dist/{list-1DkkU82x.mjs → list-eKDT1XXk.mjs} +5 -5
- package/dist/{list-B7tqNV8B.mjs → list-oX2SMzxZ.mjs} +3 -3
- package/dist/{login-D_1-zE4A.mjs → login-DumZaWXK.mjs} +9 -9
- package/dist/{logout-DPi2q1Wu.mjs → logout-BsXPRc-3.mjs} +2 -2
- package/dist/{measure-CdA8Nl3Z.mjs → measure-BFxkbAoa.mjs} +6 -6
- package/dist/{notification-Fcq1fIPw.mjs → notification-DVrLkjFT.mjs} +1 -1
- package/dist/{parameter-DUKR8NXo.mjs → parameter-Celg0wZa.mjs} +1 -1
- package/dist/{parameter-values-C6dj6I4g.mjs → parameter-values-CoF9Hx1p.mjs} +4 -4
- package/dist/{parse-enum-B1t8S194.mjs → parse-enum-Dc0dMZ3P.mjs} +1 -1
- package/dist/{parse-id-DR8aUSdL.mjs → parse-id-DmFJgpY6.mjs} +1 -1
- package/dist/{parse-ref-BJ_Q0tNW.mjs → parse-ref-DTDld_LJ.mjs} +1 -1
- package/dist/{path-B96DI8u2.mjs → path-BQ4lRDyN.mjs} +4 -4
- package/dist/{poll-By46YQ5J.mjs → poll-CZeXepUQ.mjs} +2 -2
- package/dist/{preflight-Bl1oitm8.mjs → preflight-BTQe4swo.mjs} +3 -3
- package/dist/{process-CcQM4qPv.mjs → process-CTrfxxaC.mjs} +1 -1
- package/dist/{publish-BKJYvxif.mjs → publish-CFB2Cc5A.mjs} +4 -4
- package/dist/{pulse-BmsDenXm.mjs → pulse-Dz0ocv0l.mjs} +1 -1
- package/dist/{pulse-DhG6I9mI.mjs → pulse-x0gFxWfG.mjs} +2 -2
- package/dist/{query-qBHjZQc_.mjs → query-BJbUnAHf.mjs} +9 -9
- package/dist/query-CV2KCS5O.mjs +114 -0
- package/dist/{query-result-DBDwk8TS.mjs → query-result-E4Q-Gra6.mjs} +1 -1
- package/dist/{remove-collection-BWFW7Rn6.mjs → remove-collection-D3yvKH3e.mjs} +5 -5
- package/dist/{render-DmykmrFB.mjs → render-BJRCs7rA.mjs} +4 -2
- package/dist/{replace-BmAqD3zY.mjs → replace-uj4WTqx_.mjs} +4 -4
- package/dist/{rescan-values-BrCLrihF.mjs → rescan-values-CzxQU318.mjs} +5 -5
- package/dist/{run-q5Y44Fxj.mjs → run-B2f_omHu.mjs} +3 -3
- package/dist/run-DlO1J1Sx.mjs +50 -0
- package/dist/{run-CtbzjDKY.mjs → run-yX2dtmE5.mjs} +5 -5
- package/dist/{runs-JFlbezkQ.mjs → runs-DzUO45wU.mjs} +6 -6
- package/dist/{runtime-BQiGgbgZ.mjs → runtime-arKqJqIT.mjs} +225 -68
- package/dist/{schema-tables-Bzx2ShyE.mjs → schema-tables-DZCNzuQ6.mjs} +6 -6
- package/dist/{schemas-ww5mU2AS.mjs → schemas-2ejqaVsG.mjs} +4 -4
- package/dist/{search-DFBwUc6d.mjs → search-BAXg-EJw.mjs} +2 -1
- package/dist/{search-J4RwCof-.mjs → search-DcihauDZ.mjs} +5 -5
- package/dist/{segment-XXTjU0eG.mjs → segment-BQT2poPG.mjs} +6 -6
- package/dist/{selectors-BAAZMi43.mjs → selectors-BzestDld.mjs} +3 -3
- package/dist/{send-BmpDlw9O.mjs → send-DMxoLFo7.mjs} +3 -3
- package/dist/{set-DUWrSza9.mjs → set-CDmiD0vv.mjs} +4 -4
- package/dist/{set-active-BiUlbNI5.mjs → set-active-RrvWR9NY.mjs} +3 -3
- package/dist/{setting-B1KBQN3M.mjs → setting-BiBLCcxz.mjs} +4 -4
- package/dist/{setup-CVaNVwOd.mjs → setup-DYsTzkWO.mjs} +3 -3
- package/dist/{signal-GhGmuHfx.mjs → signal-k7cm5N6h.mjs} +1 -1
- package/dist/{skill-list-DTnDhnL5.mjs → skill-list-D9_1Pmt7.mjs} +16 -9
- package/dist/{skills-DkDsSH5F.mjs → skills-BPHXUfeL.mjs} +75 -28
- package/dist/{skills-BWrAlj9l.mjs → skills-C3bxxC6a.mjs} +3 -3
- package/dist/snippet-BtfxE60H.mjs +19 -0
- package/dist/{stash-DMm8YF8V.mjs → stash-DdheS0Ad.mjs} +6 -6
- package/dist/{status-BzEQjQ_t.mjs → status-BuIzXRX1.mjs} +3 -3
- package/dist/{status-ClWsQD6v.mjs → status-CXouQJ31.mjs} +5 -5
- package/dist/{subscription-CdFn2hre.mjs → subscription-CJ8Igs1U.mjs} +6 -6
- package/dist/{subscriptions-DBda1pE5.mjs → subscriptions-D0NpGvCQ.mjs} +6 -6
- package/dist/{summary-B4GPiuqD.mjs → summary-D04S8gGj.mjs} +5 -5
- package/dist/{sync-schema-DsIM5g2U.mjs → sync-schema-DrA5zkdl.mjs} +6 -6
- package/dist/{sync-task-BACcrs0i.mjs → sync-task-BXeWuARG.mjs} +1 -1
- package/dist/{table-CsIJNPFf.mjs → table-C6h4tIRw.mjs} +1 -1
- package/dist/{table-CeeTJgQb.mjs → table-DfuY0N8e.mjs} +51 -4
- package/dist/{table-D4Alrrwh.mjs → table-Dntbz7Q2.mjs} +5 -5
- package/dist/timeline-8jwsldo3.mjs +21 -0
- package/dist/{timeline-event-DWIh3Tdt.mjs → timeline-event-BbB1xEdI.mjs} +6 -6
- package/dist/{transform-Bk0D0nIs.mjs → transform-CtqB1WYo.mjs} +2 -2
- package/dist/{transform-DpuG-ON3.mjs → transform-DiW7bREn.mjs} +43 -1
- package/dist/transform-job-B-1YAbvy.mjs +22 -0
- package/dist/transform-m6s4kkWU.mjs +28 -0
- package/dist/{transform-tag-DJ3_bksm.mjs → transform-tag-PjryheLF.mjs} +5 -5
- package/dist/transform-test-BjjCQ2xm.mjs +169 -0
- package/dist/transform-test-DSTkKKNC.mjs +16 -0
- package/dist/transform-test-gzDcbypy.mjs +25 -0
- package/dist/{transforms-Dg2MfB2a.mjs → transforms-CijX3VE7.mjs} +6 -6
- package/dist/{tree-BQL0f7YX.mjs → tree-Cmb3O6rH.mjs} +3 -3
- package/dist/{unpublish-DfSvb_Rs.mjs → unpublish-DkP_AcK5.mjs} +3 -3
- package/dist/{update-DBGaJDsj.mjs → update-8UmD1prT.mjs} +6 -6
- package/dist/{update-Izqip6jY.mjs → update-BFyRBc-H.mjs} +7 -7
- package/dist/{update-BCgAyfj_.mjs → update-BrXGg3QO.mjs} +7 -7
- package/dist/{update-sYLQIUgh.mjs → update-C91m9YAR.mjs} +5 -5
- package/dist/{update-D1QdfpKR.mjs → update-COcx61Ur.mjs} +5 -5
- package/dist/update-Ci8YL4_2.mjs +41 -0
- package/dist/{update-CDo0Orvu.mjs → update-CtLbFCd_.mjs} +4 -4
- package/dist/{update-Bhmli02m.mjs → update-D6Zzvc7F.mjs} +6 -6
- package/dist/{update-Cr5zHb0D.mjs → update-D8htjzNJ.mjs} +4 -4
- package/dist/{update-CtDHMxW8.mjs → update-D9kOTr0n.mjs} +5 -5
- package/dist/{update-BxIyFtrX.mjs → update-DPTio6i1.mjs} +6 -6
- package/dist/{update-NZhIjTCf.mjs → update-DlWB9s0v.mjs} +4 -4
- package/dist/{update-D4qdTlLF.mjs → update-DubrpPbz.mjs} +4 -4
- package/dist/{update-CiYxcf8M.mjs → update-Dz47cKBk.mjs} +4 -4
- package/dist/{update-B-hRR8gW.mjs → update-FCP5Lop2.mjs} +6 -6
- package/dist/{update-CKoBDTL7.mjs → update-KSHnb6vB.mjs} +8 -8
- package/dist/{update-dashcard-D5b971AO.mjs → update-dashcard-BlibHa5o.mjs} +6 -6
- package/dist/{upgrade-CD1xtsIv.mjs → upgrade-EwL6wPSY.mjs} +4 -4
- package/dist/upload-BZshRJIM.mjs +13 -0
- package/dist/{upload-akKFxpVA.mjs → upload-D0KaTqUE.mjs} +3 -3
- package/dist/{upload-BUd3MG90.mjs → upload-Do2PBSeH.mjs} +2 -2
- package/dist/{uuid-oVdJ62eA.mjs → uuid-DjKLDIVE.mjs} +9 -5
- package/dist/{validate-query-Boi8-cAP.mjs → validate-query-D6_ad-Gi.mjs} +3 -3
- package/dist/{validate-CWd6l6KZ.mjs → validate-xR_MHBNR.mjs} +69 -23
- package/dist/{values-DLwZl-P8.mjs → values-Dc9612_L.mjs} +5 -5
- package/dist/{verify-CH9Tw8yv.mjs → verify-DVN1eqXZ.mjs} +3 -3
- package/dist/{wait-rfTdQWdi.mjs → wait-C-ovOTAZ.mjs} +6 -6
- package/dist/{wait-flags-DiQ_kRjZ.mjs → wait-flags-BQNmuvIj.mjs} +2 -2
- package/dist/{window-BkvrP0gB.mjs → window-DSb1tqSe.mjs} +1 -1
- package/package.json +1 -1
- package/skill-data/core/SKILL.md +20 -14
- package/skill-data/dashboard/SKILL.md +1 -1
- package/skill-data/mbql/SKILL.md +84 -115
- package/skill-data/mbql/references/operators.md +81 -240
- package/skill-data/native-sql/SKILL.md +8 -9
- package/skill-data/native-sql/references/template-tags.md +21 -25
- package/skill-data/transform/SKILL.md +64 -2
- package/skill-data/transform-test-plan/SKILL.md +171 -0
- package/skill-data/transform-test-plan/references/checklist.md +81 -0
- package/skill-data/transform-test-plan/references/checks.md +260 -0
- package/skill-data/visualization/SKILL.md +2 -3
- package/skill-data/visualization/references/settings.md +7 -7
- package/skills/metabase-cli/SKILL.md +1 -1
- package/dist/card-BRarvKYX.mjs +0 -24
- package/dist/collection-CKeO8X7U.mjs +0 -20
- package/dist/document-BoILnE_1.mjs +0 -19
- package/dist/git-sync-CdN0Maun.mjs +0 -28
- package/dist/query-BKSM-pbi.mjs +0 -86
- package/dist/snippet-CG75L2DS.mjs +0 -19
- package/dist/timeline-DmM0BuX8.mjs +0 -21
- package/dist/transform-BcV_XlSX.mjs +0 -28
- package/dist/transform-job-CjtwBGoM.mjs +0 -22
- package/dist/upload-DzGTlldn.mjs +0 -13
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { D as ENV_API_KEY, E as warn, F as ProfileRefreshedError, I as setMetabaseAugment, J as normalizeFlag, M as ENV_URL, N as consumeLegacyEnvWarnings, O as ENV_DISABLE_KEYRING, P as readEnv, Q as ConfigError, R as version, Y as toAliasArray, Z as ChainedRequestError, a as Features, at as ValidationError, b as isPlainObject, c as ruleGap, ct as KNOWN_RANGE, et as MetabaseError, i as FEATURE_RULES, j as ENV_SKIP_PREFLIGHT, l as reportError, n as methodRequirements, nt as ResponseShapeError, o as evaluateFeatures, ot as errorMessage, q as flagConsumesValue, r as FEATURE_NAMES, rt as TimeoutError, st as isFileNotFoundError, t as interruptSignal, tt as NetworkError } from "./cli.mjs";
|
|
2
2
|
import { defineCommand } from "citty";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { Entry } from "@napi-rs/keyring";
|
|
@@ -27,10 +27,10 @@ const RequirementFailure = z.object({
|
|
|
27
27
|
feature: z.enum(FEATURE_NAMES),
|
|
28
28
|
since: z.number().int(),
|
|
29
29
|
tokenFeature: z.string().nullable(),
|
|
30
|
-
serverVersion: z.string()
|
|
30
|
+
serverVersion: z.string()
|
|
31
31
|
});
|
|
32
32
|
function versionTooOldMessage(since, serverVersion) {
|
|
33
|
-
return `This operation requires Metabase v${since}+ (
|
|
33
|
+
return `This operation requires Metabase v${since}+ (this server is ${serverVersion}). Upgrade Metabase to use it.`;
|
|
34
34
|
}
|
|
35
35
|
function missingTokenFeatureMessage(tokenFeature) {
|
|
36
36
|
return `This operation requires the '${tokenFeature}' premium feature (not enabled on this server).`;
|
|
@@ -46,17 +46,81 @@ var CapabilityError = class extends MetabaseError {
|
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
48
|
//#endregion
|
|
49
|
+
//#region ../client/src/domain/session-properties.ts
|
|
50
|
+
const ServerVersion$1 = z.object({
|
|
51
|
+
tag: z.string(),
|
|
52
|
+
date: z.string().optional(),
|
|
53
|
+
hash: z.string().optional()
|
|
54
|
+
}).loose();
|
|
55
|
+
const TokenFeatures = z.record(z.string(), z.boolean());
|
|
56
|
+
const SessionProperties = z.object({
|
|
57
|
+
version: ServerVersion$1,
|
|
58
|
+
"token-features": TokenFeatures.optional()
|
|
59
|
+
}).loose();
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region ../client/src/version/tag.ts
|
|
62
|
+
const ReleaseVersion = z.object({
|
|
63
|
+
kind: z.literal("release"),
|
|
64
|
+
tag: z.string(),
|
|
65
|
+
major: z.number().int().nonnegative(),
|
|
66
|
+
patch: z.number().int().nonnegative()
|
|
67
|
+
});
|
|
68
|
+
const DevelopmentBuild = z.object({
|
|
69
|
+
kind: z.literal("development"),
|
|
70
|
+
tag: z.string()
|
|
71
|
+
});
|
|
72
|
+
const ServerVersion = z.discriminatedUnion("kind", [ReleaseVersion, DevelopmentBuild]);
|
|
73
|
+
const Edition = z.enum(["oss", "ee"]);
|
|
74
|
+
const TAG = /^v?([01])\.(\d+)\.(\d+)(?:\.\d+)?(?:-([0-9A-Za-z.-]+))?$/;
|
|
75
|
+
const OSS_EDITION_NUMBER = "0";
|
|
76
|
+
const DEV_BUILD_SUFFIX = "SNAPSHOT";
|
|
77
|
+
function tagParts(tag) {
|
|
78
|
+
const match = TAG.exec(tag);
|
|
79
|
+
if (match === null) return null;
|
|
80
|
+
const [, editionNumber, major, patch, prerelease] = match;
|
|
81
|
+
if (editionNumber === void 0 || major === void 0 || patch === void 0) return null;
|
|
82
|
+
return {
|
|
83
|
+
edition: editionNumber === OSS_EDITION_NUMBER ? "oss" : "ee",
|
|
84
|
+
major: Number(major),
|
|
85
|
+
patch: Number(patch),
|
|
86
|
+
prerelease: prerelease ?? null
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function parseTag(tag) {
|
|
90
|
+
const parts = tagParts(tag);
|
|
91
|
+
if (parts === null || parts.prerelease === DEV_BUILD_SUFFIX) return {
|
|
92
|
+
kind: "development",
|
|
93
|
+
tag
|
|
94
|
+
};
|
|
95
|
+
return {
|
|
96
|
+
kind: "release",
|
|
97
|
+
tag,
|
|
98
|
+
major: parts.major,
|
|
99
|
+
patch: parts.patch
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function editionFromTag(tag) {
|
|
103
|
+
const parts = tagParts(tag);
|
|
104
|
+
return parts === null ? null : parts.edition;
|
|
105
|
+
}
|
|
106
|
+
function describeVersion(version) {
|
|
107
|
+
return version.kind === "release" ? version.tag : `development build ${version.tag}`;
|
|
108
|
+
}
|
|
109
|
+
const StoredServerVersion = z.object({ tag: z.string() }).loose().transform(({ tag }) => parseTag(tag));
|
|
110
|
+
//#endregion
|
|
49
111
|
//#region ../client/src/version/probe.ts
|
|
50
112
|
const PROBE_PATH = "/api/session/properties";
|
|
51
113
|
const PROBE_TIMEOUT_MS = 1e4;
|
|
52
114
|
async function probeServer(client, opts = {}) {
|
|
53
|
-
|
|
115
|
+
return serverInfoFromProperties(await client.requestParsed(SessionProperties, PROBE_PATH, {
|
|
54
116
|
timeoutMs: PROBE_TIMEOUT_MS,
|
|
55
117
|
retries: opts.retries ?? 0
|
|
56
|
-
});
|
|
118
|
+
}));
|
|
119
|
+
}
|
|
120
|
+
function serverInfoFromProperties(properties) {
|
|
57
121
|
const { tag } = properties.version;
|
|
58
122
|
return {
|
|
59
|
-
version:
|
|
123
|
+
version: parseTag(tag),
|
|
60
124
|
edition: editionFromTag(tag),
|
|
61
125
|
date: properties.version.date ?? null,
|
|
62
126
|
hash: properties.version.hash ?? null,
|
|
@@ -64,11 +128,65 @@ async function probeServer(client, opts = {}) {
|
|
|
64
128
|
};
|
|
65
129
|
}
|
|
66
130
|
//#endregion
|
|
67
|
-
//#region ../client/src/version/
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
131
|
+
//#region ../client/src/version/profile.ts
|
|
132
|
+
const Skew = z.enum([
|
|
133
|
+
"supported",
|
|
134
|
+
"older-than-known",
|
|
135
|
+
"newer-than-known",
|
|
136
|
+
"development"
|
|
137
|
+
]);
|
|
138
|
+
z.object({
|
|
139
|
+
version: ServerVersion,
|
|
140
|
+
buildDate: z.string().nullable(),
|
|
141
|
+
hash: z.string().nullable(),
|
|
142
|
+
edition: Edition,
|
|
143
|
+
tokenFeatures: TokenFeatures.nullable(),
|
|
144
|
+
features: Features,
|
|
145
|
+
skew: Skew
|
|
146
|
+
});
|
|
147
|
+
function createServerProfile(info) {
|
|
148
|
+
const placement = place(info.version);
|
|
149
|
+
return {
|
|
150
|
+
version: info.version,
|
|
151
|
+
buildDate: info.date,
|
|
152
|
+
hash: info.hash,
|
|
153
|
+
edition: detectEdition(info),
|
|
154
|
+
tokenFeatures: info.tokenFeatures,
|
|
155
|
+
features: evaluateFeatures(placement.major, info.tokenFeatures),
|
|
156
|
+
skew: placement.skew
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function featureGap(profile, feature) {
|
|
160
|
+
const placement = place(profile.version);
|
|
161
|
+
return ruleGap(FEATURE_RULES[feature], placement.major, profile.tokenFeatures);
|
|
162
|
+
}
|
|
163
|
+
function place(version) {
|
|
164
|
+
if (version.kind === "development") return {
|
|
165
|
+
major: "development",
|
|
166
|
+
skew: "development"
|
|
167
|
+
};
|
|
168
|
+
if (version.major > KNOWN_RANGE.max) return {
|
|
169
|
+
major: KNOWN_RANGE.max + 1,
|
|
170
|
+
skew: "newer-than-known"
|
|
171
|
+
};
|
|
172
|
+
if (version.major < KNOWN_RANGE.min) return {
|
|
173
|
+
major: version.major,
|
|
174
|
+
skew: "older-than-known"
|
|
175
|
+
};
|
|
176
|
+
return {
|
|
177
|
+
major: version.major,
|
|
178
|
+
skew: "supported"
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function detectEdition(info) {
|
|
182
|
+
if (info.edition !== null) return info.edition;
|
|
183
|
+
return grantsAnyFeature(info.tokenFeatures) ? "ee" : "oss";
|
|
184
|
+
}
|
|
185
|
+
function grantsAnyFeature(tokenFeatures) {
|
|
186
|
+
return tokenFeatures !== null && Object.values(tokenFeatures).some((enabled) => enabled);
|
|
71
187
|
}
|
|
188
|
+
//#endregion
|
|
189
|
+
//#region ../client/src/version/requirement-check.ts
|
|
72
190
|
/** The first of `features` the profile lacks, or `null` when it has every one. */
|
|
73
191
|
function checkFeatures(features, profile) {
|
|
74
192
|
for (const feature of features) {
|
|
@@ -79,7 +197,7 @@ function checkFeatures(features, profile) {
|
|
|
79
197
|
}
|
|
80
198
|
function describeGap(gap, feature, profile) {
|
|
81
199
|
const rule = FEATURE_RULES[feature];
|
|
82
|
-
const serverVersion = profile.version
|
|
200
|
+
const serverVersion = profile.version.tag;
|
|
83
201
|
const tokenFeature = rule.tokenFeature ?? null;
|
|
84
202
|
if (gap.kind === "token") return {
|
|
85
203
|
reason: "missing-token-feature",
|
|
@@ -91,7 +209,7 @@ function describeGap(gap, feature, profile) {
|
|
|
91
209
|
};
|
|
92
210
|
return {
|
|
93
211
|
reason: "version-too-old",
|
|
94
|
-
detail: versionTooOldMessage(rule.since,
|
|
212
|
+
detail: versionTooOldMessage(rule.since, describeVersion(profile.version)),
|
|
95
213
|
feature,
|
|
96
214
|
since: rule.since,
|
|
97
215
|
tokenFeature,
|
|
@@ -105,7 +223,7 @@ const KnownRange = z.object({
|
|
|
105
223
|
max: z.number().int()
|
|
106
224
|
});
|
|
107
225
|
const ServerSummary = z.object({
|
|
108
|
-
version:
|
|
226
|
+
version: ServerVersion.nullable(),
|
|
109
227
|
edition: Edition.nullable(),
|
|
110
228
|
skew: Skew.nullable(),
|
|
111
229
|
knownRange: KnownRange,
|
|
@@ -131,22 +249,19 @@ function summarizeServer(info) {
|
|
|
131
249
|
features: profile.features
|
|
132
250
|
};
|
|
133
251
|
}
|
|
134
|
-
const UNPARSEABLE_VERSION_LABEL = "an unparseable version";
|
|
135
|
-
function versionLabel(version) {
|
|
136
|
-
return version === null ? UNPARSEABLE_VERSION_LABEL : version.tag;
|
|
137
|
-
}
|
|
138
252
|
function skewNotice(profile) {
|
|
139
|
-
const max = KNOWN_RANGE
|
|
253
|
+
const { min, max } = KNOWN_RANGE;
|
|
140
254
|
switch (profile.skew) {
|
|
141
|
-
case "supported":
|
|
142
|
-
case "
|
|
143
|
-
case "
|
|
255
|
+
case "supported":
|
|
256
|
+
case "development": return null;
|
|
257
|
+
case "older-than-known": return `Metabase ${describeVersion(profile.version)} is older than this CLI supports (v${min}+); commands needing a newer feature are refused by name. Upgrade Metabase to v${min} or later.`;
|
|
258
|
+
case "newer-than-known": return `Metabase ${describeVersion(profile.version)} is newer than this CLI supports (up to v${max}); commands run as if it were v${max + 1}. Run \`mb upgrade\` for a newer CLI.`;
|
|
144
259
|
}
|
|
145
260
|
}
|
|
146
261
|
const PROFILE_REFRESHED_REMEDY = "the profile was refreshed — retry the command.";
|
|
147
262
|
function serverChangeNote(cached, fresh) {
|
|
148
|
-
const before =
|
|
149
|
-
const after =
|
|
263
|
+
const before = describeVersion(cached.version);
|
|
264
|
+
const after = describeVersion(fresh.version);
|
|
150
265
|
if (before !== after) return `The server's version changed since the last probe (was ${before}, now ${after}); ${PROFILE_REFRESHED_REMEDY}`;
|
|
151
266
|
if (!sameTokenFeatures(cached.tokenFeatures, fresh.tokenFeatures)) return `The server's premium features changed since the last probe; ${PROFILE_REFRESHED_REMEDY}`;
|
|
152
267
|
return null;
|
|
@@ -350,7 +465,8 @@ const ErrorEnvelope = z.object({
|
|
|
350
465
|
"error-message": z.string().optional(),
|
|
351
466
|
via: z.array(z.object({ message: z.string().optional() }).loose()).optional(),
|
|
352
467
|
"specific-errors": z.unknown().optional(),
|
|
353
|
-
errors: z.unknown().optional()
|
|
468
|
+
errors: z.unknown().optional(),
|
|
469
|
+
"error-code": z.string().optional()
|
|
354
470
|
}).loose();
|
|
355
471
|
const FieldErrorNodeSchema = z.lazy(() => z.union([
|
|
356
472
|
z.string(),
|
|
@@ -361,6 +477,8 @@ const FieldErrorTree = z.record(z.string(), FieldErrorNodeSchema);
|
|
|
361
477
|
const FIELD_MESSAGE_SEPARATOR = "; ";
|
|
362
478
|
const MAX_EXTRACTED_MESSAGE_LEN = 500;
|
|
363
479
|
const ELLIPSIS = "…";
|
|
480
|
+
const GOT_VALUE_PATTERN = /got: ((?:[^"\\]|\\.)*)/g;
|
|
481
|
+
const MAX_GOT_VALUE_LEN = 60;
|
|
364
482
|
var HttpError = class extends MetabaseError {
|
|
365
483
|
category = "http";
|
|
366
484
|
status;
|
|
@@ -371,7 +489,7 @@ var HttpError = class extends MetabaseError {
|
|
|
371
489
|
const redactedHeaders = redactHeaders(input.responseHeaders);
|
|
372
490
|
const kind = classifyKind(input.status, sanitizedBody, redactedHeaders);
|
|
373
491
|
super(input.overrideUserMessage ?? buildUserMessage(kind, input, sanitizedBody, redactedHeaders));
|
|
374
|
-
const fields =
|
|
492
|
+
const fields = extractEnvelopeViews(sanitizedBody);
|
|
375
493
|
this.name = "HttpError";
|
|
376
494
|
this.status = input.status;
|
|
377
495
|
this.kind = kind;
|
|
@@ -383,7 +501,8 @@ var HttpError = class extends MetabaseError {
|
|
|
383
501
|
responseHeaders: redactedHeaders,
|
|
384
502
|
body: sanitizedBody,
|
|
385
503
|
fieldErrors: fields.fieldErrors,
|
|
386
|
-
specificFieldErrors: fields.specificFieldErrors
|
|
504
|
+
specificFieldErrors: fields.specificFieldErrors,
|
|
505
|
+
errorCode: fields.errorCode
|
|
387
506
|
};
|
|
388
507
|
}
|
|
389
508
|
get isRetryable() {
|
|
@@ -395,6 +514,9 @@ var HttpError = class extends MetabaseError {
|
|
|
395
514
|
get specificFieldErrors() {
|
|
396
515
|
return this.developerDetail.specificFieldErrors;
|
|
397
516
|
}
|
|
517
|
+
get errorCode() {
|
|
518
|
+
return this.developerDetail.errorCode;
|
|
519
|
+
}
|
|
398
520
|
};
|
|
399
521
|
function chainRequestFailure(cause, message) {
|
|
400
522
|
if (cause instanceof HttpError) return new HttpError({
|
|
@@ -443,7 +565,7 @@ function buildUserMessage(kind, input, sanitizedBody, redactedHeaders) {
|
|
|
443
565
|
function plainTextMessage(sanitizedBody, redactedHeaders) {
|
|
444
566
|
if (sanitizedBody === null || !redactedHeaders["content-type"]?.includes(TEXT_CONTENT_TYPE)) return null;
|
|
445
567
|
const trimmed = sanitizedBody.trim();
|
|
446
|
-
return trimmed === "" ? null :
|
|
568
|
+
return trimmed === "" ? null : condenseMessage(trimmed);
|
|
447
569
|
}
|
|
448
570
|
function buildRouteMissingMessage(input) {
|
|
449
571
|
const path = pathFromUrl(input.url);
|
|
@@ -462,16 +584,18 @@ function parseEnvelope(sanitizedBody) {
|
|
|
462
584
|
const result = parseJsonResult(sanitizedBody, ErrorEnvelope);
|
|
463
585
|
return result.ok ? result.value : null;
|
|
464
586
|
}
|
|
465
|
-
const
|
|
587
|
+
const NO_ENVELOPE_VIEWS = {
|
|
466
588
|
fieldErrors: null,
|
|
467
|
-
specificFieldErrors: null
|
|
589
|
+
specificFieldErrors: null,
|
|
590
|
+
errorCode: null
|
|
468
591
|
};
|
|
469
|
-
function
|
|
592
|
+
function extractEnvelopeViews(sanitizedBody) {
|
|
470
593
|
const envelope = parseEnvelope(sanitizedBody);
|
|
471
|
-
if (envelope === null) return
|
|
594
|
+
if (envelope === null) return NO_ENVELOPE_VIEWS;
|
|
472
595
|
return {
|
|
473
596
|
fieldErrors: parseFieldErrors(envelope.errors),
|
|
474
|
-
specificFieldErrors: parseFieldErrors(envelope["specific-errors"])
|
|
597
|
+
specificFieldErrors: parseFieldErrors(envelope["specific-errors"]),
|
|
598
|
+
errorCode: envelope["error-code"] ?? null
|
|
475
599
|
};
|
|
476
600
|
}
|
|
477
601
|
function parseFieldErrors(value) {
|
|
@@ -485,13 +609,13 @@ function parseEnvelopeMessage(sanitizedBody) {
|
|
|
485
609
|
const envelope = parseEnvelope(sanitizedBody);
|
|
486
610
|
if (envelope === null) return null;
|
|
487
611
|
const topLevel = envelope.message ?? envelope.error ?? envelope["error-message"];
|
|
488
|
-
if (topLevel) return
|
|
612
|
+
if (topLevel) return condenseMessage(topLevel);
|
|
489
613
|
const viaMessage = envelope.via?.find((entry) => entry.message)?.message;
|
|
490
|
-
if (viaMessage) return
|
|
614
|
+
if (viaMessage) return condenseMessage(viaMessage);
|
|
491
615
|
const specific = formatErrorTree(envelope["specific-errors"]);
|
|
492
|
-
if (specific) return
|
|
616
|
+
if (specific) return condenseMessage(specific);
|
|
493
617
|
const generic = formatErrorTree(envelope.errors);
|
|
494
|
-
if (generic) return
|
|
618
|
+
if (generic) return condenseMessage(generic);
|
|
495
619
|
return null;
|
|
496
620
|
}
|
|
497
621
|
function formatErrorTree(value) {
|
|
@@ -521,9 +645,14 @@ function collectLeafEntries(value, path) {
|
|
|
521
645
|
if (isPlainObject(value)) return Object.entries(value).flatMap(([key, child]) => collectLeafEntries(child, [...path, key]));
|
|
522
646
|
return [];
|
|
523
647
|
}
|
|
524
|
-
function
|
|
525
|
-
|
|
526
|
-
|
|
648
|
+
function condenseMessage(message) {
|
|
649
|
+
const trimmed = message.replace(GOT_VALUE_PATTERN, trimGotValue);
|
|
650
|
+
if (trimmed.length <= MAX_EXTRACTED_MESSAGE_LEN) return trimmed;
|
|
651
|
+
return trimmed.slice(0, MAX_EXTRACTED_MESSAGE_LEN - 1) + ELLIPSIS;
|
|
652
|
+
}
|
|
653
|
+
function trimGotValue(match, value) {
|
|
654
|
+
if (value.length <= MAX_GOT_VALUE_LEN) return match;
|
|
655
|
+
return `got: ${value.slice(0, MAX_GOT_VALUE_LEN)}${ELLIPSIS}`;
|
|
527
656
|
}
|
|
528
657
|
function defaultMessageForStatus(status) {
|
|
529
658
|
return STATUS_CLASSIFICATIONS[status]?.message ?? `Metabase returned ${status}.`;
|
|
@@ -678,7 +807,7 @@ async function postForm(url, userAgent, params, schema, source) {
|
|
|
678
807
|
return readJson(response, schema, source);
|
|
679
808
|
}
|
|
680
809
|
const OAUTH_UNSUPPORTED_MESSAGE = "this Metabase does not support OAuth login (requires Metabase v63 or newer)";
|
|
681
|
-
async function
|
|
810
|
+
async function fetchMetadata(baseUrl, userAgent) {
|
|
682
811
|
const response = await oauthFetch({
|
|
683
812
|
url: `${baseUrl}${DISCOVERY_PATH}`,
|
|
684
813
|
method: "GET",
|
|
@@ -690,9 +819,9 @@ async function tryDiscoverMetadata(baseUrl, userAgent) {
|
|
|
690
819
|
await response.body?.cancel().catch(() => void 0);
|
|
691
820
|
return null;
|
|
692
821
|
}
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
822
|
+
return readJson(response, OAuthServerMetadata, "OAuth discovery");
|
|
823
|
+
}
|
|
824
|
+
function pinEndpoints(metadata, baseUrl) {
|
|
696
825
|
assertEndpointOrigin(metadata.issuer, baseUrl, "issuer");
|
|
697
826
|
assertEndpointOrigin(metadata.authorization_endpoint, baseUrl, "authorization endpoint");
|
|
698
827
|
assertEndpointOrigin(metadata.token_endpoint, baseUrl, "token endpoint");
|
|
@@ -700,11 +829,33 @@ async function tryDiscoverMetadata(baseUrl, userAgent) {
|
|
|
700
829
|
if (metadata.revocation_endpoint !== void 0) assertEndpointOrigin(metadata.revocation_endpoint, baseUrl, "revocation endpoint");
|
|
701
830
|
return metadata;
|
|
702
831
|
}
|
|
703
|
-
async function
|
|
832
|
+
async function grantsFullAccessScope(metadata, baseUrl, userAgent) {
|
|
833
|
+
if (metadata.scopes_supported?.includes("mb:full") === true) return true;
|
|
834
|
+
const url = `${baseUrl}${PROBE_PATH}`;
|
|
835
|
+
const response = await oauthFetch({
|
|
836
|
+
url,
|
|
837
|
+
method: "GET",
|
|
838
|
+
userAgent,
|
|
839
|
+
headers: { accept: JSON_CONTENT_TYPE }
|
|
840
|
+
});
|
|
841
|
+
if (!response.ok) throw await failure(response, "Server properties", "GET", url);
|
|
842
|
+
return createServerProfile(serverInfoFromProperties(await readJson(response, SessionProperties, "Server properties"))).features.oauthFullAccessScope;
|
|
843
|
+
}
|
|
844
|
+
async function tryDiscoverMetadata(baseUrl, userAgent) {
|
|
845
|
+
const metadata = await fetchMetadata(baseUrl, userAgent);
|
|
846
|
+
if (metadata === null || !await grantsFullAccessScope(metadata, baseUrl, userAgent)) return null;
|
|
847
|
+
return pinEndpoints(metadata, baseUrl);
|
|
848
|
+
}
|
|
849
|
+
async function discoverLoginMetadata(baseUrl, userAgent) {
|
|
704
850
|
const metadata = await tryDiscoverMetadata(baseUrl, userAgent);
|
|
705
851
|
if (metadata === null) throw new ConfigError(OAUTH_UNSUPPORTED_MESSAGE);
|
|
706
852
|
return metadata;
|
|
707
853
|
}
|
|
854
|
+
async function discoverMetadata(baseUrl, userAgent) {
|
|
855
|
+
const metadata = await fetchMetadata(baseUrl, userAgent);
|
|
856
|
+
if (metadata === null) throw new ConfigError(OAUTH_UNSUPPORTED_MESSAGE);
|
|
857
|
+
return pinEndpoints(metadata, baseUrl);
|
|
858
|
+
}
|
|
708
859
|
async function registerClient(input) {
|
|
709
860
|
const response = await oauthFetch({
|
|
710
861
|
url: input.registrationEndpoint,
|
|
@@ -805,13 +956,14 @@ const ProbedUser = z.object({
|
|
|
805
956
|
});
|
|
806
957
|
const ProfileLastProbe = z.object({
|
|
807
958
|
at: z.iso.datetime(),
|
|
808
|
-
version:
|
|
959
|
+
version: StoredServerVersion,
|
|
809
960
|
edition: Edition.nullable().default(null),
|
|
810
961
|
date: z.string().nullable().default(null),
|
|
811
962
|
hash: z.string().nullable().default(null),
|
|
812
963
|
tokenFeatures: TokenFeatures.nullable(),
|
|
813
964
|
user: ProbedUser
|
|
814
965
|
});
|
|
966
|
+
const UntaggedLastProbe = z.object({ version: z.null() }).loose().transform(() => null);
|
|
815
967
|
const ProfileFailureKind = z.enum([
|
|
816
968
|
"auth",
|
|
817
969
|
"network",
|
|
@@ -834,7 +986,7 @@ const ProfileRecord = z.object({
|
|
|
834
986
|
url: z.string(),
|
|
835
987
|
apiKey: z.string().nullable(),
|
|
836
988
|
oauth: ProfileOAuth.nullable().default(null),
|
|
837
|
-
lastProbe: ProfileLastProbe.nullable(),
|
|
989
|
+
lastProbe: z.union([ProfileLastProbe, UntaggedLastProbe]).nullable(),
|
|
838
990
|
lastFailure: ProfileLastFailure.nullable()
|
|
839
991
|
}).loose();
|
|
840
992
|
const ProfilesFile = z.object({ profiles: z.array(ProfileRecord) }).loose();
|
|
@@ -1273,16 +1425,31 @@ function resolveCredential(flagKey, envKey, stored) {
|
|
|
1273
1425
|
}
|
|
1274
1426
|
//#endregion
|
|
1275
1427
|
//#region src/core/auth/cached-server.ts
|
|
1276
|
-
async function
|
|
1428
|
+
async function lookupCachedProbe(profileName, url) {
|
|
1277
1429
|
const record = await readProfileRecord(profileName);
|
|
1278
|
-
if (record === null
|
|
1279
|
-
if (
|
|
1280
|
-
|
|
1430
|
+
if (record === null) return { kind: "no-profile" };
|
|
1431
|
+
if (record.lastProbe === null) return { kind: "never-probed" };
|
|
1432
|
+
if (url !== null && normalizeUrl(record.url) !== url) return {
|
|
1433
|
+
kind: "other-url",
|
|
1434
|
+
url
|
|
1435
|
+
};
|
|
1436
|
+
return {
|
|
1437
|
+
kind: "found",
|
|
1438
|
+
probe: record.lastProbe
|
|
1439
|
+
};
|
|
1440
|
+
}
|
|
1441
|
+
async function readCachedProbe(profileName, url) {
|
|
1442
|
+
const hit = await lookupCachedProbe(profileName, url);
|
|
1443
|
+
return hit.kind === "found" ? hit.probe : null;
|
|
1281
1444
|
}
|
|
1282
1445
|
async function readCachedServerProfile(profileName) {
|
|
1283
1446
|
const envUrl = readEnvCredentials().url;
|
|
1284
|
-
const
|
|
1285
|
-
|
|
1447
|
+
const hit = await lookupCachedProbe(profileName, envUrl === null ? null : normalizeUrl(envUrl));
|
|
1448
|
+
if (hit.kind !== "found") return hit;
|
|
1449
|
+
return {
|
|
1450
|
+
kind: "found",
|
|
1451
|
+
profile: createServerProfile(hit.probe)
|
|
1452
|
+
};
|
|
1286
1453
|
}
|
|
1287
1454
|
//#endregion
|
|
1288
1455
|
//#region src/output/format.ts
|
|
@@ -1444,7 +1611,7 @@ function defineMetabaseCommand(def) {
|
|
|
1444
1611
|
const resolved = await getResolvedConfig();
|
|
1445
1612
|
const probe = await readCachedProbe(resolved.profile, resolved.url);
|
|
1446
1613
|
const server = probe === null ? null : createServerProfile(probe);
|
|
1447
|
-
const { createClient } = await import("./client-
|
|
1614
|
+
const { createClient } = await import("./client-cJ7aw0Gt.mjs").then((n) => n.t);
|
|
1448
1615
|
cachedClient = createClient({
|
|
1449
1616
|
url: resolved.url,
|
|
1450
1617
|
credential: resolved.credential
|
|
@@ -1495,8 +1662,7 @@ function defineMetabaseCommand(def) {
|
|
|
1495
1662
|
skills: def.skills ?? [],
|
|
1496
1663
|
inputSchema: def.inputSchema ?? null,
|
|
1497
1664
|
outputSchema: def.outputSchema ?? null,
|
|
1498
|
-
requires: requirements
|
|
1499
|
-
capabilities: requirements === null ? null : summarizeCapabilities(requirements.features)
|
|
1665
|
+
requires: requirements
|
|
1500
1666
|
});
|
|
1501
1667
|
return cmd;
|
|
1502
1668
|
}
|
|
@@ -1537,18 +1703,9 @@ function createPreflightEnforcer(features, skip, noticeSkew) {
|
|
|
1537
1703
|
}
|
|
1538
1704
|
async function refreshProfileOnStaleError(error, cached) {
|
|
1539
1705
|
if (cached === null) return error;
|
|
1540
|
-
if (error instanceof ResponseShapeError)
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
}
|
|
1544
|
-
if (error instanceof CapabilityError) {
|
|
1545
|
-
const note = await refreshChangedProbe(cached);
|
|
1546
|
-
return note === null ? error : new CapabilityError({
|
|
1547
|
-
...error.developerDetail,
|
|
1548
|
-
detail: `${error.message}\n${note}`
|
|
1549
|
-
});
|
|
1550
|
-
}
|
|
1551
|
-
return error;
|
|
1706
|
+
if (!(error instanceof ResponseShapeError) && !(error instanceof CapabilityError)) return error;
|
|
1707
|
+
const note = await refreshChangedProbe(cached);
|
|
1708
|
+
return note === null ? error : new ProfileRefreshedError(error, note);
|
|
1552
1709
|
}
|
|
1553
1710
|
async function refreshChangedProbe(cached) {
|
|
1554
1711
|
let fresh;
|
|
@@ -1589,4 +1746,4 @@ function buildConfigFlags(ctx) {
|
|
|
1589
1746
|
return flags;
|
|
1590
1747
|
}
|
|
1591
1748
|
//#endregion
|
|
1592
|
-
export {
|
|
1749
|
+
export { createServerProfile as $, OAUTH_SCOPE as A, JSON_CONTENT_TYPE as B, ProbedUser as C, OAUTH_CLIENT_NAME as D, profileAuthMethod as E, buildNetworkError as F, credentialSecrets as G, parseJsonOrPlain as H, isConnectionClosed as I, normalizeUrl as J, oauthCredentialFromTokens as K, HttpError as L, exchangeCode as M, registerClient as N, USER_AGENT as O, tryDiscoverMetadata as P, Skew as Q, chainRequestFailure as R, writeProfile as S, ProfileLastFailure as T, assertCredentialHeaderSafe as U, parseJson as V, credentialAuthHeader as W, summarizeServer as X, ServerSummary as Y, checkFeatures as Z, readProfileRecord as _, readCachedServerProfile as a, writeProbeFailure as b, readEnvCredentials as c, clearProfile as d, probeServer as et, consumeKeychainResidualWarning as f, readProfileCredential as g, listProfileRecords as h, parseEnumCsv as i, parseOptionalInteger as it, discoverLoginMetadata as j, revokeOAuthCredential as k, resolveProfileName as l, keyringFallbackWarning as m, parseCsv as n, RequirementFailure as nt, createCredentialRefresher as o, consumeKeyringDowngradeWarning as p, displayUrl as q, parseEnum as r, parseInteger as rt, explicitProfileName as s, defineMetabaseCommand as t, CapabilityError as tt, DEFAULT_PROFILE as u, resolveRecordCredential as v, ProfileAuthMethod as w, writeProbeResult as x, writeOAuthProfile as y, isRetryableStatus as z };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { n as windowList } from "./window-
|
|
5
|
-
import { n as TableCompact } from "./table-
|
|
6
|
-
import { t as tableView } from "./table-
|
|
1
|
+
import { B as listFlags, G as listEnvelopeSchema, H as outputFlags, U as profileFlag, d as renderList, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-arKqJqIT.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-DmFJgpY6.mjs";
|
|
4
|
+
import { n as windowList } from "./window-DSb1tqSe.mjs";
|
|
5
|
+
import { n as TableCompact } from "./table-DfuY0N8e.mjs";
|
|
6
|
+
import { t as tableView } from "./table-C6h4tIRw.mjs";
|
|
7
7
|
//#region src/commands/db/schema-tables.ts
|
|
8
8
|
const DatabaseSchemaTablesEnvelope = listEnvelopeSchema(TableCompact);
|
|
9
9
|
var schema_tables_default = defineMetabaseCommand({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { n as windowList } from "./window-
|
|
1
|
+
import { B as listFlags, G as listEnvelopeSchema, H as outputFlags, U as profileFlag, d as renderList, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-arKqJqIT.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-DmFJgpY6.mjs";
|
|
4
|
+
import { n as windowList } from "./window-DSb1tqSe.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
//#region src/commands/db/schemas.ts
|
|
7
7
|
const SchemaName = z.object({ name: z.string() });
|
|
@@ -32,7 +32,8 @@ const SearchResult = z.object({
|
|
|
32
32
|
model: SearchModel,
|
|
33
33
|
description: z.string().nullable(),
|
|
34
34
|
archived: z.boolean().nullable(),
|
|
35
|
-
collection: SearchResultCollection.nullable()
|
|
35
|
+
collection: SearchResultCollection.nullable(),
|
|
36
|
+
result_metadata: z.array(z.unknown()).nullable().optional()
|
|
36
37
|
}).loose();
|
|
37
38
|
const SearchResultCompact = SearchResult.pick({
|
|
38
39
|
id: true,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as parseEnumCsv, t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { r as windowServerPage } from "./window-
|
|
5
|
-
import { i as SearchResultCompact, n as SearchModel, t as SEARCH_MODELS } from "./search-
|
|
1
|
+
import { G as listEnvelopeSchema, H as outputFlags, U as profileFlag, V as listFlagsWithDefaultLimit, d as renderList, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { i as parseEnumCsv, t as defineMetabaseCommand } from "./runtime-arKqJqIT.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-DmFJgpY6.mjs";
|
|
4
|
+
import { r as windowServerPage } from "./window-DSb1tqSe.mjs";
|
|
5
|
+
import { i as SearchResultCompact, n as SearchModel, t as SEARCH_MODELS } from "./search-BAXg-EJw.mjs";
|
|
6
6
|
//#region src/output/views/search.ts
|
|
7
7
|
const searchResultView = {
|
|
8
8
|
compactPick: SearchResultCompact,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as defineCommandGroup } from "./group-
|
|
1
|
+
import { t as defineCommandGroup } from "./group-YQQ5GIcP.mjs";
|
|
2
2
|
//#region src/commands/segment/index.ts
|
|
3
3
|
var segment_default = defineCommandGroup({
|
|
4
4
|
name: "segment",
|
|
@@ -11,11 +11,11 @@ var segment_default = defineCommandGroup({
|
|
|
11
11
|
purpose: "define reusable segments"
|
|
12
12
|
}],
|
|
13
13
|
subCommands: {
|
|
14
|
-
list: () => import("./list-
|
|
15
|
-
get: () => import("./get-
|
|
16
|
-
create: () => import("./create-
|
|
17
|
-
update: () => import("./update-
|
|
18
|
-
archive: () => import("./archive-
|
|
14
|
+
list: () => import("./list-oX2SMzxZ.mjs").then((mod) => mod.default),
|
|
15
|
+
get: () => import("./get-CrpwxWOV.mjs").then((mod) => mod.default),
|
|
16
|
+
create: () => import("./create-4UnoQvsy.mjs").then((mod) => mod.default),
|
|
17
|
+
update: () => import("./update-C91m9YAR.mjs").then((mod) => mod.default),
|
|
18
|
+
archive: () => import("./archive-C4Y2B58q.mjs").then((mod) => mod.default)
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
21
|
//#endregion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as parseCsv } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
1
|
+
import { Q as ConfigError } from "./cli.mjs";
|
|
2
|
+
import { n as parseCsv } from "./runtime-arKqJqIT.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-DmFJgpY6.mjs";
|
|
4
4
|
//#region src/commands/library/selectors.ts
|
|
5
5
|
const tableSelectorFlags = {
|
|
6
6
|
"table-ids": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
1
|
+
import { H as outputFlags, U as profileFlag, p as renderSummary, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-arKqJqIT.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-DmFJgpY6.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
//#region src/commands/alert/send.ts
|
|
6
6
|
const AlertSendResult = z.object({
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { H as outputFlags, U as profileFlag, _ as formatScalar, p as renderSummary, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-arKqJqIT.mjs";
|
|
3
|
+
import { t as readBody } from "./body-OjAWKVaU.mjs";
|
|
4
4
|
import { r as SettingValue } from "./setting-DTiLCW8g.mjs";
|
|
5
5
|
import { t as settingValueView } from "./setting-CwRYgHYN.mjs";
|
|
6
|
-
import { t as parseSettingKey } from "./key-
|
|
6
|
+
import { t as parseSettingKey } from "./key-PYetuQ13.mjs";
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
//#region src/commands/setting/set.ts
|
|
9
9
|
const SettingValueInput = z.unknown().describe("Any JSON value; the setting's own type constraints are enforced server-side");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
1
|
+
import { H as outputFlags, U as profileFlag, p as renderSummary, z as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-arKqJqIT.mjs";
|
|
3
3
|
import { n as TransformJobActiveResult } from "./transform-job-CCguL6LP.mjs";
|
|
4
|
-
import { t as parseEnumFlag } from "./parse-enum-
|
|
4
|
+
import { t as parseEnumFlag } from "./parse-enum-Dc0dMZ3P.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
//#region src/commands/transform-job/set-active.ts
|
|
7
7
|
const ActiveWord = z.enum(["true", "false"]);
|