@metabase/cli 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/README.md +89 -236
  3. package/dist/add-collection-D9wXgmRj.mjs +10 -0
  4. package/dist/{add-collection-CwrbKmC1.mjs → add-collection-DUqTrC5T.mjs} +5 -5
  5. package/dist/{archive-DqUtqRut.mjs → archive-0krZxAXq.mjs} +5 -6
  6. package/dist/{archive-ZnnJc2iT.mjs → archive-44EWiXud.mjs} +6 -7
  7. package/dist/{archive-BpKZsGAm.mjs → archive-B59Y7ajB.mjs} +6 -7
  8. package/dist/{archive-BO3DOWI4.mjs → archive-BEIyIsin.mjs} +5 -6
  9. package/dist/{archive-BzvqQd34.mjs → archive-BZfpjMir.mjs} +5 -6
  10. package/dist/{archive-BAjGIzhn.mjs → archive-DtE2H4A6.mjs} +6 -7
  11. package/dist/archive-_GMNY8wH.mjs +39 -0
  12. package/dist/auth-cFC5m69m.mjs +19 -0
  13. package/dist/{body-DDYKoyMt.mjs → body-BdRyuvU4.mjs} +2 -2
  14. package/dist/{branches-DjiGsjAz.mjs → branches-Jpv-FNds.mjs} +5 -6
  15. package/dist/{cancel-BwtDQ2MR.mjs → cancel-ChC4lFd4.mjs} +4 -5
  16. package/dist/{cancel-task-uJp18RvR.mjs → cancel-task-DyhIkNaL.mjs} +5 -6
  17. package/dist/{render-0_GsapXa.mjs → capabilities-7L9GVMd_.mjs} +45 -4
  18. package/dist/card-ClvGX6dQ.mjs +20 -0
  19. package/dist/{card-ezYiriML.mjs → card-DnIeMmUn.mjs} +18 -2
  20. package/dist/{cards-z68PANDD.mjs → cards-O-nKkQKP.mjs} +5 -6
  21. package/dist/cli.mjs +24 -34
  22. package/dist/{collection-Bcy8cWYH.mjs → collection-BPTlcFw5.mjs} +8 -2
  23. package/dist/collection-DjvowSJC.mjs +20 -0
  24. package/dist/collection-namespace-7724zUMx.mjs +12 -0
  25. package/dist/{create-BzK59YlR.mjs → create-B4f4Pldw.mjs} +11 -12
  26. package/dist/{create-4EAGYVyp.mjs → create-BbF9zVFP.mjs} +12 -10
  27. package/dist/{create-Dd_Gyg_F.mjs → create-BnFHcnlL.mjs} +7 -8
  28. package/dist/{create-GVfCQU3B.mjs → create-BuKx7kw6.mjs} +7 -8
  29. package/dist/{create-CQ4Vg4Ge.mjs → create-BxRsXQrm.mjs} +9 -10
  30. package/dist/{create-7JOWFxqu.mjs → create-CvYKJOcE.mjs} +10 -11
  31. package/dist/create-D45uFXlo.mjs +44 -0
  32. package/dist/create-DS52EhPd.mjs +52 -0
  33. package/dist/{create-DHWfmO2L.mjs → create-DeZ2x2Db.mjs} +9 -10
  34. package/dist/{create-branch-CdWGiREu.mjs → create-branch-KOWUIE72.mjs} +5 -6
  35. package/dist/{current-task-nPs-iCLi.mjs → current-task-ClcWPPMc.mjs} +5 -6
  36. package/dist/dashboard-BFeURTOw.mjs +21 -0
  37. package/dist/{database-BXiue1in.mjs → database-Dsv4QBs0.mjs} +20 -10
  38. package/dist/db-CSH1kwQr.mjs +22 -0
  39. package/dist/{delete-CJqLgr6w.mjs → delete-CX2VUA5R.mjs} +6 -7
  40. package/dist/{delete-Do1agSiL.mjs → delete-D68oS73R.mjs} +6 -7
  41. package/dist/{delete-runtime-uuYbd4k2.mjs → delete-runtime-CjFc69tS.mjs} +2 -2
  42. package/dist/{delete-table-ZiJDpMFT.mjs → delete-table-DLvL9mDA.mjs} +6 -7
  43. package/dist/{dirty-BnTG7w7v.mjs → dirty-1OrXpc7E.mjs} +5 -6
  44. package/dist/document-CcfiiV3b.mjs +100 -0
  45. package/dist/document-KdT_Xj6r.mjs +19 -0
  46. package/dist/{eid-CwQ_smOD.mjs → eid-CzLhHZMW.mjs} +6 -7
  47. package/dist/{error-CTVL5CdB.mjs → error-BWXBhqLW.mjs} +1 -1
  48. package/dist/{export-DR2cC4rL.mjs → export-B5z8w-xo.mjs} +7 -8
  49. package/dist/field-CTFnZI8G.mjs +18 -0
  50. package/dist/{fields-Ck31lDz9.mjs → fields-sC7pzmPX.mjs} +6 -7
  51. package/dist/{get-pO0wiy1e.mjs → get-4GEDd9YN.mjs} +5 -6
  52. package/dist/get-BC60bhel.mjs +36 -0
  53. package/dist/{get-CyG_P55z.mjs → get-BYw3xS0X.mjs} +6 -7
  54. package/dist/{get-C71ypFQk.mjs → get-Bo1FGyFs.mjs} +5 -6
  55. package/dist/{get-BNKsNCcx.mjs → get-ByZ4HR2T.mjs} +5 -6
  56. package/dist/{get-DxqzDKKK.mjs → get-C6n86-dS.mjs} +5 -6
  57. package/dist/{get-DyArILlF.mjs → get-CHb6J908.mjs} +5 -6
  58. package/dist/{get-F338MOK-.mjs → get-DLwb_gUh.mjs} +5 -6
  59. package/dist/{get-CICzGFSW.mjs → get-DTHLETau.mjs} +6 -7
  60. package/dist/{get-BFJ3VBPa.mjs → get-Dl62Fy6Y.mjs} +5 -6
  61. package/dist/{get-BZiu-u-9.mjs → get-Fn9WkNhS.mjs} +7 -8
  62. package/dist/{get-GWRprk7k.mjs → get-ZesERdyk.mjs} +5 -7
  63. package/dist/{get-BPOd0Rm8.mjs → get-lcX52Skc.mjs} +5 -6
  64. package/dist/{get-DauAF3sm.mjs → get-reSMTfQi.mjs} +5 -6
  65. package/dist/{get-run-DhM_PyVy.mjs → get-run-CpCbHJad.mjs} +5 -6
  66. package/dist/git-sync-C2vib8rx.mjs +28 -0
  67. package/dist/{has-remote-changes-Ca0exJmb.mjs → has-remote-changes-CPz_-uxd.mjs} +5 -6
  68. package/dist/{import-DjclIzGP.mjs → import-DaWgprK6.mjs} +7 -8
  69. package/dist/is-dirty-Bb0Rtj7x.mjs +9 -0
  70. package/dist/{is-dirty-Cke0a1ie.mjs → is-dirty-DZlI7lQx.mjs} +4 -4
  71. package/dist/{items-BSpapmCU.mjs → items-hgbRYsYD.mjs} +7 -8
  72. package/dist/{list-BI1PfPjn.mjs → list-36H-dvJZ.mjs} +5 -6
  73. package/dist/list-B9J3ujwn.mjs +32 -0
  74. package/dist/{list-BRXGDSMo.mjs → list-BGerkRHH.mjs} +5 -6
  75. package/dist/{list-CEE9yKNp.mjs → list-BWv5y307.mjs} +4 -5
  76. package/dist/{list-V5IuMr_5.mjs → list-BgHESP7b.mjs} +4 -5
  77. package/dist/{list-DWWGcUTg.mjs → list-CCZnH2-Z.mjs} +5 -7
  78. package/dist/{list-Fjjtpghb.mjs → list-CGdOC9zX.mjs} +6 -7
  79. package/dist/{list-DmO4ADQq.mjs → list-CKeVS1IZ.mjs} +4 -5
  80. package/dist/{list-D1qhCQn0.mjs → list-Cd2nOCAx.mjs} +6 -7
  81. package/dist/{list-fIV-P6wP.mjs → list-D9EuxFHO.mjs} +4 -5
  82. package/dist/{list-Br77Mw6U.mjs → list-DBlsRSpZ.mjs} +5 -6
  83. package/dist/{list-bVlCwg8g.mjs → list-DO8T-nmF.mjs} +4 -5
  84. package/dist/{list-Brt4oKO7.mjs → list-DOVX3vCb.mjs} +6 -7
  85. package/dist/{list-DUyWON1F.mjs → list-kath_2cX.mjs} +4 -5
  86. package/dist/{login-BJGhZLgZ.mjs → login-BzrAGJfu.mjs} +9 -10
  87. package/dist/{logout-BAGLqtnV.mjs → logout-CKBiltoS.mjs} +4 -5
  88. package/dist/{manifest-BNh0Lw6p.mjs → manifest-BPHqF5LY.mjs} +1 -2
  89. package/dist/measure-Dw1QpRZa.mjs +19 -0
  90. package/dist/{metadata-B-GOcWqL.mjs → metadata-BcGcUEVJ.mjs} +6 -7
  91. package/dist/{metadata-DJAdsOoh.mjs → metadata-BjOrKtnv.mjs} +7 -8
  92. package/dist/{parse-id-D1LTTt9L.mjs → parse-id--iVTCKSo.mjs} +1 -1
  93. package/dist/{path-D5kX-msX.mjs → path-LgGU6Bd0.mjs} +4 -6
  94. package/dist/{poll-DxpnK1wW.mjs → poll-BucRFJT-.mjs} +1 -1
  95. package/dist/{poll-task-D8mG49IN.mjs → poll-task-DTzKB3T3.mjs} +2 -2
  96. package/dist/{preflight-Df_FqJ6o.mjs → preflight-CzqVX0PP.mjs} +3 -3
  97. package/dist/{query-zWFRDH3T.mjs → query-BVZkK6Qk.mjs} +7 -8
  98. package/dist/{query-OIuumiXN.mjs → query-DG_jygDF.mjs} +11 -12
  99. package/dist/{query-result-ABPLz6I4.mjs → query-result-B4kTRid7.mjs} +1 -1
  100. package/dist/{remove-collection-BxmiXWKz.mjs → remove-collection-HdeAfLyi.mjs} +7 -8
  101. package/dist/{rescan-values-M7g81KIl.mjs → rescan-values-hWubCruZ.mjs} +8 -11
  102. package/dist/run-C1-lDmQF.mjs +136 -0
  103. package/dist/{runs-CqfJIuh_.mjs → runs-Q6DYQyqj.mjs} +6 -7
  104. package/dist/{runtime-B40L_bj8.mjs → runtime-colqvhLf.mjs} +11 -78
  105. package/dist/{schema-tables-CjBRF0_0.mjs → schema-tables-BEastV_8.mjs} +6 -7
  106. package/dist/{schemas-GIIbek2O.mjs → schemas-CgawwI_k.mjs} +4 -5
  107. package/dist/{search-h78uOYec.mjs → search-BWo7xSPP.mjs} +4 -5
  108. package/dist/segment-DMuYvFjg.mjs +19 -0
  109. package/dist/{set-BRDxcLcQ.mjs → set-7Nm2ZTb_.mjs} +7 -8
  110. package/dist/{setting-mKzZJpQY.mjs → setting-DSGXJehQ.mjs} +3 -3
  111. package/dist/{setup-WTIT2WbM.mjs → setup-aJLGLrIT.mjs} +6 -7
  112. package/dist/{skills-BkregMyb.mjs → skills-CY_FmaPo.mjs} +33 -2
  113. package/dist/skills-Q2AFsYvc.mjs +18 -0
  114. package/dist/snippet-Df2TrP7-.mjs +19 -0
  115. package/dist/{stash-DxoAJzcK.mjs → stash-DPQ0c-Cd.mjs} +7 -8
  116. package/dist/{status-B1dc3bbQ.mjs → status-CvAATvV0.mjs} +4 -5
  117. package/dist/{status-D0Ukfodl.mjs → status-CvKPrV5X.mjs} +6 -7
  118. package/dist/{summary-3qOMUcEX.mjs → summary-CeOnoOq2.mjs} +5 -6
  119. package/dist/sync-schema-aOPBc3CY.mjs +55 -0
  120. package/dist/{table-qDD2kApF.mjs → table-CkWja2UH.mjs} +1 -1
  121. package/dist/table-pK4OkVtL.mjs +19 -0
  122. package/dist/{transform-BKahefz_.mjs → transform--dviwMA1.mjs} +1 -0
  123. package/dist/transform-D60veFH8.mjs +24 -0
  124. package/dist/transform-job-DXt5LsrY.mjs +19 -0
  125. package/dist/{tree-DsnIPFyE.mjs → tree-MOQOBeAP.mjs} +4 -5
  126. package/dist/update-57uxZWcR.mjs +52 -0
  127. package/dist/{update-CLsqoEJ8.mjs → update-B6mg3AZD.mjs} +8 -9
  128. package/dist/{update-CZEd_Eej.mjs → update-BD9xkglP.mjs} +9 -10
  129. package/dist/{update-BEtl9LpG.mjs → update-BRrnfG0q.mjs} +8 -9
  130. package/dist/{update-DPouQi4U.mjs → update-BWyCK8QV.mjs} +13 -11
  131. package/dist/{update-DWn-nLPo.mjs → update-Bj9s0ri8.mjs} +8 -9
  132. package/dist/{update-BsgHRoZ8.mjs → update-BkMWBzvk.mjs} +11 -12
  133. package/dist/{update-Baya6OkO.mjs → update-CitS-QRN.mjs} +12 -13
  134. package/dist/{update-BRLcnSwK.mjs → update-DfNKr_vS.mjs} +10 -11
  135. package/dist/{update-UaPqSfPN.mjs → update-Dri4Zg2H.mjs} +10 -11
  136. package/dist/{update-dashcard-DK9X91ha.mjs → update-dashcard-D_-ura3Y.mjs} +8 -9
  137. package/dist/{upgrade-UqdvTikR.mjs → upgrade-CFkZ4USY.mjs} +34 -7
  138. package/dist/{uuid-BWCaWG4O.mjs → uuid-DpinhSxA.mjs} +3 -4
  139. package/dist/{validate-dPEOnOf8.mjs → validate-B62TRDGV.mjs} +1 -1
  140. package/dist/{validate-query-CYvOP8Ld.mjs → validate-query-BpiN1CFu.mjs} +2 -2
  141. package/dist/{values-D_wycrcr.mjs → values-BSS4DRxk.mjs} +5 -6
  142. package/dist/{verify-D7hb6VMy.mjs → verify-B_A7v8TY.mjs} +1 -1
  143. package/dist/{wait-B5IpNFCG.mjs → wait-D3iSnjMM.mjs} +6 -7
  144. package/dist/{wait-flags-CNIeSq0_.mjs → wait-flags-_LnHOeBA.mjs} +2 -2
  145. package/package.json +1 -1
  146. package/skill-data/core/SKILL.md +19 -32
  147. package/skill-data/document/SKILL.md +162 -0
  148. package/skill-data/git-sync/SKILL.md +8 -63
  149. package/skill-data/mbql/SKILL.md +95 -28
  150. package/skill-data/mbql/references/operators.md +13 -13
  151. package/skill-data/transform/SKILL.md +18 -7
  152. package/skills/metabase-cli/SKILL.md +1 -1
  153. package/dist/add-collection-DxtuNxeP.mjs +0 -11
  154. package/dist/auth-B9B4pUaH.mjs +0 -19
  155. package/dist/capabilities-7e9MgquN.mjs +0 -29
  156. package/dist/card-D54unw6r.mjs +0 -20
  157. package/dist/collection-B5kIKRTL.mjs +0 -20
  158. package/dist/create-6XE7GYxk.mjs +0 -45
  159. package/dist/create-C8gA-XP2.mjs +0 -54
  160. package/dist/credentials-CFA9iGZG.mjs +0 -88
  161. package/dist/dashboard-lw6IFfOs.mjs +0 -21
  162. package/dist/database-BPT6BrmF.mjs +0 -17
  163. package/dist/db-CBCj8sBg.mjs +0 -22
  164. package/dist/delete-CiV6f69N.mjs +0 -104
  165. package/dist/deprovision-C-qEnh-P.mjs +0 -67
  166. package/dist/docker-B-QQWThD.mjs +0 -515
  167. package/dist/field-DJmQ2pul.mjs +0 -18
  168. package/dist/git-sync-rmjYOGFK.mjs +0 -28
  169. package/dist/is-dirty-DFGgGLDi.mjs +0 -10
  170. package/dist/license-j0tDQLKI.mjs +0 -17
  171. package/dist/list-evetBTcH.mjs +0 -36
  172. package/dist/logs-jx5b_YDk.mjs +0 -60
  173. package/dist/measure-BfgxqewH.mjs +0 -19
  174. package/dist/parse-schemas-DDK9nXuh.mjs +0 -12
  175. package/dist/process-CM7Uu5q_.mjs +0 -105
  176. package/dist/provision-BJd6zO1D.mjs +0 -83
  177. package/dist/ps-CpyHEvv7.mjs +0 -11
  178. package/dist/ps-dEqRGeB3.mjs +0 -80
  179. package/dist/remove-BNQ1c6hB.mjs +0 -64
  180. package/dist/run-DTsx8bLb.mjs +0 -96
  181. package/dist/segment-CoElN2b-.mjs +0 -19
  182. package/dist/set-Dclba9xF.mjs +0 -68
  183. package/dist/skills-tMYd5d9v.mjs +0 -18
  184. package/dist/snippet-B84H3tfp.mjs +0 -19
  185. package/dist/start-B7ByBicB.mjs +0 -414
  186. package/dist/status-DAzD1Cn_.mjs +0 -34
  187. package/dist/stop-Cvexagxh.mjs +0 -87
  188. package/dist/sync-schema-CrmVX1cy.mjs +0 -44
  189. package/dist/table-B0fRQv91.mjs +0 -19
  190. package/dist/transform-K_kp6Rdm.mjs +0 -24
  191. package/dist/transform-job-CuNN8zgv.mjs +0 -19
  192. package/dist/update-hiJdbbsb.mjs +0 -78
  193. package/dist/url-LMJZRDv4.mjs +0 -56
  194. package/dist/wait-DHjXk3jD.mjs +0 -19
  195. package/dist/workspace-Bt8n3ojY.mjs +0 -25
  196. package/dist/workspace-D8HtUN0y.mjs +0 -72
  197. package/dist/workspace-credentials-8CBMQJFz.mjs +0 -100
  198. package/dist/yaml-Gv6wRFMF.mjs +0 -43
  199. package/skill-data/workspace/SKILL.md +0 -390
  200. /package/dist/{body-flags-D7q87Btw.mjs → body-flags-D78h_-Ua.mjs} +0 -0
  201. /package/dist/{dashboard-B4bn3z6t.mjs → dashboard-FY5UzJ_Z.mjs} +0 -0
  202. /package/dist/{field-E0IBy4Uw.mjs → field-MGxpNQUH.mjs} +0 -0
  203. /package/dist/{input-cMSEqISy.mjs → input-xewHccej.mjs} +0 -0
  204. /package/dist/{key-vkNkH82H.mjs → key-y4TtxKwU.mjs} +0 -0
  205. /package/dist/{measure-Bt3InQsA.mjs → measure-COGAoZpo.mjs} +0 -0
  206. /package/dist/{paginate-BexjkjbY.mjs → paginate-Dfm9eO9A.mjs} +0 -0
  207. /package/dist/{parse-enum-CrEWOhuY.mjs → parse-enum-Dr7ACrTR.mjs} +0 -0
  208. /package/dist/{parse-ref-DKag6a6I.mjs → parse-ref-BiETXmvm.mjs} +0 -0
  209. /package/dist/{prompt-CFKoys7k.mjs → prompt-u4WhE4T5.mjs} +0 -0
  210. /package/dist/{render-khznBlla.mjs → render-BQHJhSP1.mjs} +0 -0
  211. /package/dist/{revision-message-flag-DY29-cgz.mjs → revision-message-flag-Bo-Kvv6F.mjs} +0 -0
  212. /package/dist/{segment-DhBmcr_E.mjs → segment-d-708KKO.mjs} +0 -0
  213. /package/dist/{setting-BzCng1Ub.mjs → setting-CSJvi1-6.mjs} +0 -0
  214. /package/dist/{snippet-bi_0XbNT.mjs → snippet-BZvo05ua.mjs} +0 -0
  215. /package/dist/{transform-job-DjhoJbiV.mjs → transform-job-n8W6tLqF.mjs} +0 -0
@@ -1,78 +0,0 @@
1
- import "./command-augment-BH9qgQ5u.mjs";
2
- import { connectionFlags, outputFlags, profileFlag } from "./error-CTVL5CdB.mjs";
3
- import { defineMetabaseCommand } from "./runtime-B40L_bj8.mjs";
4
- import "./capabilities-7e9MgquN.mjs";
5
- import { renderSummary } from "./render-0_GsapXa.mjs";
6
- import "./input-cMSEqISy.mjs";
7
- import { parseId } from "./parse-id-D1LTTt9L.mjs";
8
- import { readBody } from "./body-DDYKoyMt.mjs";
9
- import { bodyInputFlags } from "./body-flags-D7q87Btw.mjs";
10
- import "./poll-DxpnK1wW.mjs";
11
- import { parseWaitFlags, waitFlags } from "./wait-flags-CNIeSq0_.mjs";
12
- import { Workspace, WorkspaceUpdateDatabaseInput, workspaceView } from "./workspace-D8HtUN0y.mjs";
13
- import { waitForDatabaseProvisioned } from "./wait-DHjXk3jD.mjs";
14
- import { parseSchemasCsv } from "./parse-schemas-DDK9nXuh.mjs";
15
-
16
- //#region src/commands/workspace/database/update.ts
17
- var update_default = defineMetabaseCommand({
18
- meta: {
19
- name: "update",
20
- description: "Update a workspace's database (deprovisions then re-provisions with new input schemas)"
21
- },
22
- capabilities: {
23
- minVersion: 62,
24
- tokenFeature: "workspaces"
25
- },
26
- args: {
27
- ...outputFlags,
28
- ...profileFlag,
29
- ...connectionFlags,
30
- ...bodyInputFlags,
31
- ...waitFlags,
32
- schemas: {
33
- type: "string",
34
- description: "Comma-separated input schemas (alternative to --body / --file)"
35
- },
36
- id: {
37
- type: "positional",
38
- description: "Workspace id",
39
- required: true
40
- },
41
- "db-id": {
42
- type: "positional",
43
- description: "Database id",
44
- required: true
45
- }
46
- },
47
- outputSchema: Workspace,
48
- examples: [
49
- "mb workspace database update 1 5 --schemas analytics,github",
50
- "mb workspace database update 1 5 --schemas analytics --wait",
51
- "mb workspace database update 1 5 --file update.json"
52
- ],
53
- async run({ args, ctx, getClient }) {
54
- const workspaceId = parseId(args.id);
55
- const databaseId = parseId(args["db-id"], "db-id");
56
- const schemasFlag = args.schemas;
57
- const wait = parseWaitFlags(args);
58
- let body;
59
- if (schemasFlag !== void 0 && schemasFlag !== "") {
60
- const input_schemas = parseSchemasCsv(schemasFlag);
61
- body = WorkspaceUpdateDatabaseInput.parse({ input_schemas });
62
- } else body = await readBody({
63
- flag: args.body,
64
- file: args.file
65
- }, WorkspaceUpdateDatabaseInput);
66
- const client = await getClient();
67
- const initial = await client.requestParsed(Workspace, `/api/ee/workspace-manager/${workspaceId}/database/${databaseId}`, {
68
- method: "PUT",
69
- body
70
- });
71
- const final = wait.enabled ? await waitForDatabaseProvisioned(client, workspaceId, databaseId, wait.schedule) : initial;
72
- const message = wait.enabled ? `Re-provisioned database ${databaseId} in workspace ${workspaceId}.` : `Started re-provisioning database ${databaseId} in workspace ${workspaceId}; rerun with --wait to block until ready.`;
73
- renderSummary(final, workspaceView, message, ctx);
74
- }
75
- });
76
-
77
- //#endregion
78
- export { update_default as default };
@@ -1,56 +0,0 @@
1
- import "./command-augment-BH9qgQ5u.mjs";
2
- import { outputFlags } from "./error-CTVL5CdB.mjs";
3
- import { defineMetabaseCommand, localUrl } from "./runtime-B40L_bj8.mjs";
4
- import "./capabilities-7e9MgquN.mjs";
5
- import { renderSummary } from "./render-0_GsapXa.mjs";
6
- import { parseId } from "./parse-id-D1LTTt9L.mjs";
7
- import "./poll-DxpnK1wW.mjs";
8
- import "./process-CM7Uu5q_.mjs";
9
- import { checkDockerReady, requireWorkspaceContainerLocation } from "./docker-B-QQWThD.mjs";
10
- import { z } from "zod";
11
-
12
- //#region src/commands/workspace/url.ts
13
- const UrlResult = z.object({
14
- workspace_id: z.number().int().positive(),
15
- url: z.string()
16
- });
17
- const urlResultView = {
18
- compactPick: UrlResult,
19
- tableColumns: [{
20
- key: "workspace_id",
21
- label: "ID"
22
- }, {
23
- key: "url",
24
- label: "URL"
25
- }]
26
- };
27
- var url_default = defineMetabaseCommand({
28
- meta: {
29
- name: "url",
30
- description: "Print the local URL the workspace's container is bound to"
31
- },
32
- capabilities: null,
33
- args: {
34
- ...outputFlags,
35
- id: {
36
- type: "positional",
37
- description: "Workspace id",
38
- required: true
39
- }
40
- },
41
- outputSchema: UrlResult,
42
- examples: ["mb workspace url 1", "mb workspace url 1 --json"],
43
- async run({ args, ctx }) {
44
- const workspaceId = parseId(args.id);
45
- await checkDockerReady();
46
- const { hostPort } = await requireWorkspaceContainerLocation(workspaceId);
47
- const result = {
48
- workspace_id: workspaceId,
49
- url: localUrl(hostPort)
50
- };
51
- renderSummary(result, urlResultView, result.url, ctx);
52
- }
53
- });
54
-
55
- //#endregion
56
- export { url_default as default };
@@ -1,19 +0,0 @@
1
- import { pollUntil } from "./poll-DxpnK1wW.mjs";
2
- import { Workspace } from "./workspace-D8HtUN0y.mjs";
3
-
4
- //#region src/commands/workspace/database/wait.ts
5
- async function waitForDatabaseProvisioned(client, workspaceId, databaseId, schedule) {
6
- return pollUntil(() => client.requestParsed(Workspace, `/api/ee/workspace-manager/${workspaceId}`), (workspace) => {
7
- const entry = workspace.databases?.find((row) => row.database_id === databaseId);
8
- return entry !== void 0 && entry.status === "provisioned";
9
- }, schedule);
10
- }
11
- async function waitForDatabaseGone(client, workspaceId, databaseId, schedule) {
12
- await pollUntil(() => client.requestParsed(Workspace, `/api/ee/workspace-manager/${workspaceId}`), (workspace) => {
13
- const entry = workspace.databases?.find((row) => row.database_id === databaseId);
14
- return entry === void 0;
15
- }, schedule);
16
- }
17
-
18
- //#endregion
19
- export { waitForDatabaseGone, waitForDatabaseProvisioned };
@@ -1,25 +0,0 @@
1
- import { defineCommand } from "citty";
2
-
3
- //#region src/commands/workspace/index.ts
4
- var workspace_default = defineCommand({
5
- meta: {
6
- name: "workspace",
7
- description: "Manage Metabase workspaces (workspace-manager)"
8
- },
9
- subCommands: {
10
- list: () => import("./list-evetBTcH.mjs").then((mod) => mod.default),
11
- create: () => import("./create-C8gA-XP2.mjs").then((mod) => mod.default),
12
- database: () => import("./database-BPT6BrmF.mjs").then((mod) => mod.default),
13
- start: () => import("./start-B7ByBicB.mjs").then((mod) => mod.default),
14
- stop: () => import("./stop-Cvexagxh.mjs").then((mod) => mod.default),
15
- delete: () => import("./delete-CiV6f69N.mjs").then((mod) => mod.default),
16
- logs: () => import("./logs-jx5b_YDk.mjs").then((mod) => mod.default),
17
- url: () => import("./url-LMJZRDv4.mjs").then((mod) => mod.default),
18
- credentials: () => import("./credentials-CFA9iGZG.mjs").then((mod) => mod.default),
19
- ps: () => import("./ps-CpyHEvv7.mjs").then((mod) => mod.default),
20
- license: () => import("./license-j0tDQLKI.mjs").then((mod) => mod.default)
21
- }
22
- });
23
-
24
- //#endregion
25
- export { workspace_default as default };
@@ -1,72 +0,0 @@
1
- import { z } from "zod";
2
-
3
- //#region src/domain/workspace.ts
4
- const WorkspaceDatabaseStatus = z.enum([
5
- "unprovisioned",
6
- "provisioning",
7
- "provisioned",
8
- "deprovisioning"
9
- ]);
10
- const WorkspaceDatabase = z.object({
11
- database_id: z.number().int(),
12
- output_namespace: z.string(),
13
- input_schemas: z.array(z.string().min(1)),
14
- status: WorkspaceDatabaseStatus
15
- }).loose();
16
- const WorkspaceCreator = z.object({
17
- id: z.number().int(),
18
- first_name: z.string().nullable(),
19
- last_name: z.string().nullable(),
20
- email: z.string(),
21
- common_name: z.string().nullable().optional()
22
- }).loose();
23
- const Workspace = z.object({
24
- id: z.number().int(),
25
- name: z.string(),
26
- creator: WorkspaceCreator.nullable(),
27
- created_at: z.string(),
28
- updated_at: z.string(),
29
- databases: z.array(WorkspaceDatabase).optional()
30
- }).loose();
31
- const WorkspaceCompact = Workspace.pick({
32
- id: true,
33
- name: true,
34
- databases: true
35
- }).strip();
36
- const WorkspaceDatabaseList = z.array(WorkspaceDatabase);
37
- const workspaceView = {
38
- compactPick: WorkspaceCompact,
39
- tableColumns: [
40
- {
41
- key: "id",
42
- label: "ID"
43
- },
44
- {
45
- key: "name",
46
- label: "Name"
47
- },
48
- {
49
- key: "databases",
50
- label: "Databases",
51
- format: (value) => formatDatabases(value)
52
- }
53
- ]
54
- };
55
- const WorkspaceCreateInput = z.object({ name: z.string().min(1) }).loose();
56
- const WorkspaceProvisionInput = z.object({
57
- database_id: z.number().int().positive(),
58
- input_schemas: z.array(z.string().min(1)).min(1)
59
- }).loose();
60
- const WorkspaceUpdateDatabaseInput = z.object({ input_schemas: z.array(z.string().min(1)).min(1) }).loose();
61
- function formatDatabases(value) {
62
- if (value === void 0) return "";
63
- const parsed = WorkspaceDatabaseList.safeParse(value);
64
- if (!parsed.success || parsed.data.length === 0) return "(none)";
65
- return parsed.data.map((entry) => {
66
- const schemas = entry.input_schemas.length === 0 ? "" : ` [${entry.input_schemas.join(", ")}]`;
67
- return `${entry.database_id} (${entry.status})${schemas}`;
68
- }).join("; ");
69
- }
70
-
71
- //#endregion
72
- export { Workspace, WorkspaceCompact, WorkspaceCreateInput, WorkspaceProvisionInput, WorkspaceUpdateDatabaseInput, workspaceView };
@@ -1,100 +0,0 @@
1
- import { ConfigError } from "./command-augment-BH9qgQ5u.mjs";
2
- import { parseYaml, stringifyYaml } from "./yaml-Gv6wRFMF.mjs";
3
- import { z } from "zod";
4
- import { randomBytes } from "node:crypto";
5
-
6
- //#region src/core/workspace-credentials.ts
7
- const API_KEY_NAME = "Workspace API Key";
8
- const API_KEY_GROUP = "admin";
9
- const PASSWORD_BYTE_LENGTH = 18;
10
- const API_KEY_BYTE_LENGTH = 32;
11
- const WorkspaceCredentials = z.object({
12
- workspace_id: z.number().int().positive(),
13
- user: z.object({
14
- first_name: z.string().min(1),
15
- last_name: z.string().min(1),
16
- password: z.string().min(1),
17
- email: z.string().min(1)
18
- }),
19
- api_key: z.object({
20
- name: z.string().min(1),
21
- group: z.enum(["admin", "all-users"]),
22
- creator: z.string().min(1),
23
- key: z.string().regex(/^mb_[A-Za-z0-9+/=]+$/)
24
- })
25
- });
26
- function generateWorkspaceCredentials(workspaceId) {
27
- const email = `workspace-${workspaceId}@workspace.local`;
28
- return {
29
- workspace_id: workspaceId,
30
- user: {
31
- first_name: "Workspace",
32
- last_name: "Admin",
33
- password: randomBase64Url(PASSWORD_BYTE_LENGTH),
34
- email
35
- },
36
- api_key: {
37
- name: API_KEY_NAME,
38
- group: API_KEY_GROUP,
39
- creator: email,
40
- key: `mb_${randomBytes(API_KEY_BYTE_LENGTH).toString("base64")}`
41
- }
42
- };
43
- }
44
- const credentialsJsonEncoder = new TextEncoder();
45
- function buildCredentialsJson(credentials) {
46
- return credentialsJsonEncoder.encode(`${JSON.stringify(credentials, null, 2)}\n`);
47
- }
48
- const ConfigEnvelopeShape = z.object({
49
- version: z.number().int(),
50
- config: z.looseObject({})
51
- }).loose();
52
- function injectCredentialsIntoConfig(yamlInput, credentials) {
53
- const envelope = parseYaml(yamlInput, ConfigEnvelopeShape, { source: "config.yml" });
54
- if ("users" in envelope.config || "api-keys" in envelope.config) throw new ConfigError("config.yml already declares users or api-keys — refusing to overwrite parent-supplied credentials");
55
- const merged = {
56
- ...envelope,
57
- config: {
58
- ...envelope.config,
59
- users: [credentials.user],
60
- "api-keys": [credentials.api_key]
61
- }
62
- };
63
- return stringifyYaml(merged);
64
- }
65
- const REPO_SYNC_MODES = ["read-write", "read-only"];
66
- const RepoSyncMode = z.enum(REPO_SYNC_MODES);
67
- const ConfigEnvelopeWithSettingsShape = z.object({
68
- version: z.number().int(),
69
- config: z.object({ settings: z.looseObject({}).optional() }).loose()
70
- }).loose();
71
- const REMOTE_SYNC_KEYS = [
72
- "remote-sync-url",
73
- "remote-sync-branch",
74
- "remote-sync-type"
75
- ];
76
- function injectRepoSettingsIntoConfig(yamlInput, repo) {
77
- const envelope = parseYaml(yamlInput, ConfigEnvelopeWithSettingsShape, { source: "config.yml" });
78
- const existingSettings = envelope.config.settings ?? {};
79
- const conflicts = REMOTE_SYNC_KEYS.filter((key) => key in existingSettings);
80
- if (conflicts.length > 0) throw new ConfigError(`config.yml already declares remote-sync settings (${conflicts.join(", ")}) — refusing to overwrite parent-supplied values`);
81
- const merged = {
82
- ...envelope,
83
- config: {
84
- ...envelope.config,
85
- settings: {
86
- ...existingSettings,
87
- "remote-sync-url": repo.url,
88
- "remote-sync-branch": repo.branch,
89
- "remote-sync-type": repo.mode
90
- }
91
- }
92
- };
93
- return stringifyYaml(merged);
94
- }
95
- function randomBase64Url(byteLength) {
96
- return randomBytes(byteLength).toString("base64url");
97
- }
98
-
99
- //#endregion
100
- export { REPO_SYNC_MODES, RepoSyncMode, WorkspaceCredentials, buildCredentialsJson, generateWorkspaceCredentials, injectCredentialsIntoConfig, injectRepoSettingsIntoConfig };
@@ -1,43 +0,0 @@
1
- import { ConfigError, ValidationError, errorMessage } from "./command-augment-BH9qgQ5u.mjs";
2
- import { YAMLParseError, parse, stringify } from "yaml";
3
-
4
- //#region src/runtime/yaml.ts
5
- function parseYaml(input, schema, opts = {}) {
6
- const result = parseYamlResult(input, schema, opts);
7
- if (!result.ok) throw result.error;
8
- return result.value;
9
- }
10
- function parseYamlResult(input, schema, opts = {}) {
11
- const sourcePrefix = opts.source ? `${opts.source}: ` : "";
12
- let raw;
13
- try {
14
- raw = parse(input);
15
- } catch (error) {
16
- if (error instanceof YAMLParseError) return {
17
- ok: false,
18
- error: new ConfigError(`${sourcePrefix}invalid YAML: ${error.message}`)
19
- };
20
- return {
21
- ok: false,
22
- error: new ConfigError(`${sourcePrefix}invalid YAML: ${errorMessage(error)}`)
23
- };
24
- }
25
- const parsed = schema.safeParse(raw);
26
- if (!parsed.success) return {
27
- ok: false,
28
- error: new ValidationError(`${sourcePrefix}value did not match expected schema`, {
29
- source: opts.source ?? "<input>",
30
- zodIssues: parsed.error.issues
31
- })
32
- };
33
- return {
34
- ok: true,
35
- value: parsed.data
36
- };
37
- }
38
- function stringifyYaml(value) {
39
- return stringify(value, { lineWidth: 0 });
40
- }
41
-
42
- //#endregion
43
- export { parseYaml, parseYamlResult, stringifyYaml };