@metabase/client 0.0.0-stage → 0.1.1

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 (337) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE +661 -0
  3. package/README.md +490 -2
  4. package/dist/api-key-DJeN1-7G.d.ts +46 -0
  5. package/dist/auth/credential.d.ts +2 -0
  6. package/dist/auth/credential.js +61 -0
  7. package/dist/auth/oauth-login.d.ts +2 -0
  8. package/dist/auth/oauth-login.js +2 -0
  9. package/dist/auth/oauth-session.d.ts +2 -0
  10. package/dist/auth/oauth-session.js +31 -0
  11. package/dist/card-BxBzr5Uj.d.ts +1392 -0
  12. package/dist/card-DN0sLkCG.d.ts +33 -0
  13. package/dist/client-DdXLlH1B.d.ts +3380 -0
  14. package/dist/client.d.ts +2 -0
  15. package/dist/client.js +99 -0
  16. package/dist/collection-DGnTvD6R.d.ts +294 -0
  17. package/dist/collection-fFahL-ub.d.ts +53 -0
  18. package/dist/content-translation-zfUkE_OG.d.ts +8 -0
  19. package/dist/credential-6aOEGqMH.d.ts +30 -0
  20. package/dist/cron-DThzerR6.d.ts +9 -0
  21. package/dist/csv-upload--K35QedP.d.ts +8 -0
  22. package/dist/dashboard-CM7RmNeE.d.ts +38 -0
  23. package/dist/dashboard-DtLXVgtf.d.ts +978 -0
  24. package/dist/data-action-CkXVrOUH.d.ts +97 -0
  25. package/dist/data-app-CqP5_fpB.d.ts +76 -0
  26. package/dist/database-B0JNZjDN.d.ts +27 -0
  27. package/dist/database-BxqDmfcj.d.ts +997 -0
  28. package/dist/dataset-BBNGPVec.d.ts +4144 -0
  29. package/dist/dataset-BUirJ1rO.d.ts +23 -0
  30. package/dist/dependency-CzpXmeu7.d.ts +299 -0
  31. package/dist/dependency-arB8Cr2H.d.ts +879 -0
  32. package/dist/document-tLd6pYWe.d.ts +115 -0
  33. package/dist/domain/api-key.d.ts +2 -0
  34. package/dist/domain/api-key.js +31 -0
  35. package/dist/domain/card.d.ts +2 -0
  36. package/dist/domain/card.js +140 -0
  37. package/dist/domain/collection.d.ts +2 -0
  38. package/dist/domain/collection.js +137 -0
  39. package/dist/domain/content-translation.d.ts +2 -0
  40. package/dist/domain/content-translation.js +5 -0
  41. package/dist/domain/cron.d.ts +2 -0
  42. package/dist/domain/cron.js +5 -0
  43. package/dist/domain/dashboard.d.ts +2 -0
  44. package/dist/domain/dashboard.js +211 -0
  45. package/dist/domain/data-action.d.ts +2 -0
  46. package/dist/domain/data-action.js +91 -0
  47. package/dist/domain/data-app.d.ts +2 -0
  48. package/dist/domain/data-app.js +52 -0
  49. package/dist/domain/database.d.ts +2 -0
  50. package/dist/domain/database.js +56 -0
  51. package/dist/domain/dataset.d.ts +2 -0
  52. package/dist/domain/dataset.js +56 -0
  53. package/dist/domain/dependency.d.ts +2 -0
  54. package/dist/domain/dependency.js +168 -0
  55. package/dist/domain/document.d.ts +2 -0
  56. package/dist/domain/document.js +94 -0
  57. package/dist/domain/eid-translation.d.ts +2 -0
  58. package/dist/domain/eid-translation.js +36 -0
  59. package/dist/domain/embedding.d.ts +2 -0
  60. package/dist/domain/embedding.js +9 -0
  61. package/dist/domain/erd.d.ts +2 -0
  62. package/dist/domain/erd.js +45 -0
  63. package/dist/domain/field.d.ts +2 -0
  64. package/dist/domain/field.js +274 -0
  65. package/dist/domain/git-sync.d.ts +2 -0
  66. package/dist/domain/git-sync.js +147 -0
  67. package/dist/domain/glossary.d.ts +2 -0
  68. package/dist/domain/glossary.js +30 -0
  69. package/dist/domain/library.d.ts +2 -0
  70. package/dist/domain/library.js +89 -0
  71. package/dist/domain/measure.d.ts +2 -0
  72. package/dist/domain/measure.js +43 -0
  73. package/dist/domain/metric.d.ts +2 -0
  74. package/dist/domain/metric.js +139 -0
  75. package/dist/domain/moderation-review.d.ts +2 -0
  76. package/dist/domain/moderation-review.js +31 -0
  77. package/dist/domain/notification.d.ts +2 -0
  78. package/dist/domain/notification.js +143 -0
  79. package/dist/domain/parameter.d.ts +2 -0
  80. package/dist/domain/parameter.js +109 -0
  81. package/dist/domain/permission.d.ts +2 -0
  82. package/dist/domain/permission.js +36 -0
  83. package/dist/domain/pulse.d.ts +2 -0
  84. package/dist/domain/pulse.js +140 -0
  85. package/dist/domain/query.d.ts +2 -0
  86. package/dist/domain/query.js +13 -0
  87. package/dist/domain/replacement.d.ts +2 -0
  88. package/dist/domain/replacement.js +93 -0
  89. package/dist/domain/revision.d.ts +2 -0
  90. package/dist/domain/revision.js +90 -0
  91. package/dist/domain/search.d.ts +2 -0
  92. package/dist/domain/search.js +63 -0
  93. package/dist/domain/segment.d.ts +2 -0
  94. package/dist/domain/segment.js +46 -0
  95. package/dist/domain/session-properties.d.ts +2 -0
  96. package/dist/domain/session-properties.js +14 -0
  97. package/dist/domain/setting.d.ts +2 -0
  98. package/dist/domain/setting.js +22 -0
  99. package/dist/domain/setup.d.ts +2 -0
  100. package/dist/domain/setup.js +21 -0
  101. package/dist/domain/snippet.d.ts +2 -0
  102. package/dist/domain/snippet.js +38 -0
  103. package/dist/domain/table.d.ts +2 -0
  104. package/dist/domain/table.js +187 -0
  105. package/dist/domain/text.d.ts +5 -0
  106. package/dist/domain/text.js +6 -0
  107. package/dist/domain/timeline.d.ts +2 -0
  108. package/dist/domain/timeline.js +97 -0
  109. package/dist/domain/transform-dag-run.d.ts +2 -0
  110. package/dist/domain/transform-dag-run.js +19 -0
  111. package/dist/domain/transform-inspector.d.ts +2 -0
  112. package/dist/domain/transform-inspector.js +142 -0
  113. package/dist/domain/transform-job.d.ts +2 -0
  114. package/dist/domain/transform-job.js +115 -0
  115. package/dist/domain/transform-python.d.ts +2 -0
  116. package/dist/domain/transform-python.js +51 -0
  117. package/dist/domain/transform-tag.d.ts +2 -0
  118. package/dist/domain/transform-tag.js +17 -0
  119. package/dist/domain/transform-test.d.ts +2 -0
  120. package/dist/domain/transform-test.js +176 -0
  121. package/dist/domain/transform.d.ts +2 -0
  122. package/dist/domain/transform.js +304 -0
  123. package/dist/domain/upload.d.ts +2 -0
  124. package/dist/domain/upload.js +13 -0
  125. package/dist/domain/user.d.ts +2 -0
  126. package/dist/domain/user.js +16 -0
  127. package/dist/eid-translation-CH6NPWd-.d.ts +143 -0
  128. package/dist/embedding-oU3gqfgX.d.ts +10 -0
  129. package/dist/erd-BdeFEeSy.d.ts +842 -0
  130. package/dist/erd-CbV7xvAc.d.ts +51 -0
  131. package/dist/errors-DdMlaXqq.js +330 -0
  132. package/dist/errors.d.ts +2 -0
  133. package/dist/errors.js +189 -0
  134. package/dist/features-SMSfJhB6.d.ts +295 -0
  135. package/dist/field-D1Pfk-0S.d.ts +50 -0
  136. package/dist/field-p9Rme2zB.d.ts +2549 -0
  137. package/dist/git-sync-BTf1aYHr.d.ts +205 -0
  138. package/dist/git-sync-C99SVdJ9.d.ts +258 -0
  139. package/dist/glossary-CHK3elPj.d.ts +35 -0
  140. package/dist/glossary-DFvnz-E5.d.ts +15 -0
  141. package/dist/http/errors.d.ts +2 -0
  142. package/dist/http/errors.js +2 -0
  143. package/dist/http/oauth.d.ts +2 -0
  144. package/dist/http/oauth.js +201 -0
  145. package/dist/http/retry.d.ts +19 -0
  146. package/dist/http/retry.js +33 -0
  147. package/dist/http/transport.d.ts +2 -0
  148. package/dist/http/transport.js +2 -0
  149. package/dist/index.d.ts +62 -0
  150. package/dist/index.js +64 -0
  151. package/dist/input-gate-registry-Dai7SfXb.js +14 -0
  152. package/dist/input-gates-DwKoTJVQ.d.ts +28 -0
  153. package/dist/json-BksZpXDC.d.ts +19 -0
  154. package/dist/json-pointer.d.ts +5 -0
  155. package/dist/json-pointer.js +10 -0
  156. package/dist/json.d.ts +2 -0
  157. package/dist/json.js +44 -0
  158. package/dist/known-range-DTOBgTEC.d.ts +7 -0
  159. package/dist/library-B9pEq7qP.d.ts +230 -0
  160. package/dist/list-BT_bBm9Z.d.ts +7 -0
  161. package/dist/list.d.ts +2 -0
  162. package/dist/list.js +1 -0
  163. package/dist/measure-CgH14YQZ.d.ts +44 -0
  164. package/dist/measure-lPz8qnwz.d.ts +108 -0
  165. package/dist/metric-DcYloqOQ.d.ts +2655 -0
  166. package/dist/moderation-review-B4RUTZ6_.d.ts +56 -0
  167. package/dist/network-error-5g4U1iul.js +62 -0
  168. package/dist/notification-Cp5GJErS.d.ts +22 -0
  169. package/dist/notification-D1MThyKE.d.ts +443 -0
  170. package/dist/oauth-C4ordeoJ.d.ts +59 -0
  171. package/dist/oauth-login-CJsT_3EE.d.ts +19 -0
  172. package/dist/oauth-login-D734Jvbq.js +179 -0
  173. package/dist/oauth-session-BlIlcd8Q.d.ts +6 -0
  174. package/dist/paginate-COuL0Gzl.d.ts +24 -0
  175. package/dist/paginate.d.ts +2 -0
  176. package/dist/paginate.js +49 -0
  177. package/dist/parameter-ak-J-IOj.d.ts +190 -0
  178. package/dist/permission-BnCQw5Kp.d.ts +149 -0
  179. package/dist/poll-CIwnee7h.d.ts +15 -0
  180. package/dist/poll.d.ts +2 -0
  181. package/dist/poll.js +47 -0
  182. package/dist/predicates.d.ts +10 -0
  183. package/dist/predicates.js +18 -0
  184. package/dist/pulse-0LG3K6qO.d.ts +598 -0
  185. package/dist/pulse-BzKmz3Yn.d.ts +18 -0
  186. package/dist/query-Xsin530u.d.ts +23 -0
  187. package/dist/refusal-B9aeHMc9.js +130 -0
  188. package/dist/replacement-BGyggp-G.d.ts +2467 -0
  189. package/dist/replacement-CVebCuNp.d.ts +128 -0
  190. package/dist/requirement-check-glU7wqhQ.d.ts +17 -0
  191. package/dist/requirements-Dx_ZVzl7.d.ts +227 -0
  192. package/dist/resources/api-key.d.ts +11 -0
  193. package/dist/resources/api-key.js +35 -0
  194. package/dist/resources/card.d.ts +2 -0
  195. package/dist/resources/card.js +103 -0
  196. package/dist/resources/collection.d.ts +2 -0
  197. package/dist/resources/collection.js +134 -0
  198. package/dist/resources/content-translation.d.ts +11 -0
  199. package/dist/resources/content-translation.js +27 -0
  200. package/dist/resources/csv-upload.d.ts +2 -0
  201. package/dist/resources/csv-upload.js +9 -0
  202. package/dist/resources/dashboard.d.ts +2 -0
  203. package/dist/resources/dashboard.js +221 -0
  204. package/dist/resources/data-action.d.ts +60 -0
  205. package/dist/resources/data-action.js +79 -0
  206. package/dist/resources/data-app.d.ts +112 -0
  207. package/dist/resources/data-app.js +75 -0
  208. package/dist/resources/database.d.ts +2 -0
  209. package/dist/resources/database.js +103 -0
  210. package/dist/resources/dataset.d.ts +2 -0
  211. package/dist/resources/dataset.js +81 -0
  212. package/dist/resources/dependency.d.ts +2 -0
  213. package/dist/resources/dependency.js +156 -0
  214. package/dist/resources/document.d.ts +55 -0
  215. package/dist/resources/document.js +60 -0
  216. package/dist/resources/eid-translation.d.ts +8 -0
  217. package/dist/resources/eid-translation.js +19 -0
  218. package/dist/resources/erd.d.ts +2 -0
  219. package/dist/resources/erd.js +26 -0
  220. package/dist/resources/field.d.ts +2 -0
  221. package/dist/resources/field.js +99 -0
  222. package/dist/resources/git-sync.d.ts +2 -0
  223. package/dist/resources/git-sync.js +362 -0
  224. package/dist/resources/glossary.d.ts +2 -0
  225. package/dist/resources/glossary.js +51 -0
  226. package/dist/resources/library.d.ts +85 -0
  227. package/dist/resources/library.js +90 -0
  228. package/dist/resources/measure.d.ts +2 -0
  229. package/dist/resources/measure.js +57 -0
  230. package/dist/resources/metric.d.ts +2 -0
  231. package/dist/resources/metric.js +50 -0
  232. package/dist/resources/moderation-review.d.ts +23 -0
  233. package/dist/resources/moderation-review.js +24 -0
  234. package/dist/resources/notification.d.ts +2 -0
  235. package/dist/resources/notification.js +93 -0
  236. package/dist/resources/optional-parsed.d.ts +7 -0
  237. package/dist/resources/optional-parsed.js +14 -0
  238. package/dist/resources/permission.d.ts +10 -0
  239. package/dist/resources/permission.js +31 -0
  240. package/dist/resources/pivot-export.d.ts +10 -0
  241. package/dist/resources/pivot-export.js +16 -0
  242. package/dist/resources/pulse.d.ts +2 -0
  243. package/dist/resources/pulse.js +76 -0
  244. package/dist/resources/replacement.d.ts +2 -0
  245. package/dist/resources/replacement.js +82 -0
  246. package/dist/resources/request-body.d.ts +9 -0
  247. package/dist/resources/request-body.js +13 -0
  248. package/dist/resources/revision.d.ts +70 -0
  249. package/dist/resources/revision.js +46 -0
  250. package/dist/resources/search.d.ts +2 -0
  251. package/dist/resources/search.js +78 -0
  252. package/dist/resources/segment.d.ts +2 -0
  253. package/dist/resources/segment.js +55 -0
  254. package/dist/resources/setting.d.ts +11 -0
  255. package/dist/resources/setting.js +43 -0
  256. package/dist/resources/setup.d.ts +8 -0
  257. package/dist/resources/setup.js +18 -0
  258. package/dist/resources/snippet.d.ts +2 -0
  259. package/dist/resources/snippet.js +52 -0
  260. package/dist/resources/table.d.ts +2 -0
  261. package/dist/resources/table.js +274 -0
  262. package/dist/resources/timeline-event.d.ts +12 -0
  263. package/dist/resources/timeline-event.js +51 -0
  264. package/dist/resources/timeline.d.ts +2 -0
  265. package/dist/resources/timeline.js +82 -0
  266. package/dist/resources/transform-dag-run.d.ts +22 -0
  267. package/dist/resources/transform-dag-run.js +32 -0
  268. package/dist/resources/transform-inspector.d.ts +214 -0
  269. package/dist/resources/transform-inspector.js +47 -0
  270. package/dist/resources/transform-job.d.ts +2 -0
  271. package/dist/resources/transform-job.js +90 -0
  272. package/dist/resources/transform-python.d.ts +59 -0
  273. package/dist/resources/transform-python.js +57 -0
  274. package/dist/resources/transform-tag.d.ts +35 -0
  275. package/dist/resources/transform-tag.js +47 -0
  276. package/dist/resources/transform-test.d.ts +2 -0
  277. package/dist/resources/transform-test.js +75 -0
  278. package/dist/resources/transform.d.ts +2 -0
  279. package/dist/resources/transform.js +227 -0
  280. package/dist/resources/upload.d.ts +2 -0
  281. package/dist/resources/upload.js +48 -0
  282. package/dist/resources/user.d.ts +8 -0
  283. package/dist/resources/user.js +11 -0
  284. package/dist/revision-Dyl-8p7d.d.ts +106 -0
  285. package/dist/search-Cm5IxKss.d.ts +92 -0
  286. package/dist/search-Cten2h0I.d.ts +26 -0
  287. package/dist/segment-CbAgVO-5.d.ts +47 -0
  288. package/dist/segment-DQLX6r1E.d.ts +16 -0
  289. package/dist/session-properties-COtlxAcK.d.ts +15 -0
  290. package/dist/setting-DXuQGXGF.d.ts +25 -0
  291. package/dist/setup-JqcJ2unJ.d.ts +26 -0
  292. package/dist/signal.d.ts +8 -0
  293. package/dist/signal.js +25 -0
  294. package/dist/snippet-C_Ilx7tR.d.ts +41 -0
  295. package/dist/snippet-Djn0rL21.d.ts +16 -0
  296. package/dist/table-CDZbLNow.d.ts +176 -0
  297. package/dist/table-Od6uvDVW.d.ts +3234 -0
  298. package/dist/tag-qzjGGci8.d.ts +48 -0
  299. package/dist/timeline-BK45hy-h.d.ts +218 -0
  300. package/dist/timeline-BTs6fuRp.d.ts +21 -0
  301. package/dist/transform-C5thnJwW.d.ts +559 -0
  302. package/dist/transform-WASQAXeA.d.ts +652 -0
  303. package/dist/transform-dag-run-BgZwv1yx.d.ts +49 -0
  304. package/dist/transform-inspector-CMCh8WKV.d.ts +374 -0
  305. package/dist/transform-job-D8jTQtdX.d.ts +98 -0
  306. package/dist/transform-job-DmTwKxhc.d.ts +237 -0
  307. package/dist/transform-python-DtL3xxMj.d.ts +101 -0
  308. package/dist/transform-tag-C6j5EUkX.d.ts +25 -0
  309. package/dist/transform-test-CR_i54IV.d.ts +412 -0
  310. package/dist/transform-test-CeMzDpUC.d.ts +346 -0
  311. package/dist/transport-BsXqRujn.d.ts +476 -0
  312. package/dist/transport-HP7cyo9N.js +397 -0
  313. package/dist/upload-B5YjVkSW.d.ts +12 -0
  314. package/dist/upload-UPfZFdbH.d.ts +22 -0
  315. package/dist/url-CI0pxHOc.d.ts +7 -0
  316. package/dist/url.d.ts +2 -0
  317. package/dist/url.js +34 -0
  318. package/dist/user-Sqqv7rqh.d.ts +18 -0
  319. package/dist/version/capability-error.d.ts +2 -0
  320. package/dist/version/capability-error.js +42 -0
  321. package/dist/version/features.d.ts +2 -0
  322. package/dist/version/features.js +171 -0
  323. package/dist/version/input-gates.d.ts +2 -0
  324. package/dist/version/input-gates.js +13 -0
  325. package/dist/version/known-range.d.ts +2 -0
  326. package/dist/version/known-range.js +7 -0
  327. package/dist/version/probe.d.ts +2 -0
  328. package/dist/version/probe.js +30 -0
  329. package/dist/version/profile.d.ts +2 -0
  330. package/dist/version/profile.js +64 -0
  331. package/dist/version/requirement-check.d.ts +2 -0
  332. package/dist/version/requirement-check.js +62 -0
  333. package/dist/version/requirements.d.ts +2 -0
  334. package/dist/version/requirements.js +229 -0
  335. package/dist/version/tag.d.ts +2 -0
  336. package/dist/version/tag.js +52 -0
  337. package/package.json +66 -4
@@ -0,0 +1,134 @@
1
+ import { Collection, CollectionItem, CollectionTreeNode } from "../domain/collection.js";
2
+ import { paginatePages } from "../paginate.js";
3
+ import { t as explainer } from "../refusal-B9aeHMc9.js";
4
+ import { z } from "zod";
5
+ //#region src/resources/collection.ts
6
+ const CollectionApiList = z.array(Collection);
7
+ const CollectionTreeApiList = z.array(CollectionTreeNode);
8
+ const COLLECTION_LIST_QUERY = {
9
+ all: {},
10
+ archived: { archived: true },
11
+ personal: { "personal-only": true }
12
+ };
13
+ const DEFAULT_LIST_FILTER = "all";
14
+ const TRASH_ALIAS = "trash";
15
+ const MODELS_FIELDS = ["models"];
16
+ const ITEM_MODEL_FEATURES = {
17
+ transform: "transforms",
18
+ measure: "collectionItemMeasures",
19
+ exploration: "explorations"
20
+ };
21
+ function itemModelFeatures(_ref, params = {}) {
22
+ if (params.models === void 0) return [];
23
+ return params.models.flatMap((model) => {
24
+ const feature = ITEM_MODEL_FEATURES[model];
25
+ return feature === void 0 ? [] : [{
26
+ feature,
27
+ fields: MODELS_FIELDS
28
+ }];
29
+ });
30
+ }
31
+ function refPath(ref) {
32
+ return encodeURIComponent(ref);
33
+ }
34
+ /**
35
+ * List every collection the caller can read, the Library and its children among them, parsing each
36
+ * through the caller's own projection. `Collection` pins `type`, `namespace` and `authority_level`
37
+ * to closed enums, so a consumer reading a few fields off every collection on the instance narrows
38
+ * here: one collection carrying a server value outside those sets then costs nothing to a caller
39
+ * that never reads the field.
40
+ */
41
+ async function listCollectionsAs(transport, schema, options = {}) {
42
+ return transport.requestParsed(z.array(schema), "/api/collection", { ...options });
43
+ }
44
+ function collectionResource(transport) {
45
+ const { explainWalk } = explainer(transport, "collection");
46
+ /**
47
+ * List collections. `filter` picks a server-side preset: everything, archived, or personal. Every
48
+ * preset includes the Library collections that match it. `namespace` lists that namespace's
49
+ * collections, with its root, instead of the default namespace's.
50
+ */
51
+ async function list(params = {}, options = {}) {
52
+ return {
53
+ data: await transport.requestParsed(CollectionApiList, "/api/collection", {
54
+ ...options,
55
+ query: {
56
+ ...COLLECTION_LIST_QUERY[params.filter ?? DEFAULT_LIST_FILTER],
57
+ namespace: params.namespace
58
+ }
59
+ }),
60
+ total: null
61
+ };
62
+ }
63
+ /** Get one collection by id, entity id, or the `root`/`trash` alias. */
64
+ async function get(ref, options = {}) {
65
+ return transport.requestParsed(Collection, `/api/collection/${refPath(ref)}`, { ...options });
66
+ }
67
+ /** Create a new collection. */
68
+ async function create(params, options = {}) {
69
+ return transport.requestParsed(Collection, "/api/collection", {
70
+ ...options,
71
+ method: "POST",
72
+ body: params
73
+ });
74
+ }
75
+ /**
76
+ * Update a collection, patching the fields the body carries. The server reads an absent
77
+ * `archived` as `false`, so a patch without it restores an archived collection, and a patch that
78
+ * moves a collection into the trash ignores `parent_id`.
79
+ */
80
+ async function update(ref, params, options = {}) {
81
+ return transport.requestParsed(Collection, `/api/collection/${refPath(ref)}`, {
82
+ ...options,
83
+ method: "PUT",
84
+ body: params
85
+ });
86
+ }
87
+ /** Archive (soft-delete) a collection. Metabase models this as an update, not its own endpoint. */
88
+ async function archive(ref, options = {}) {
89
+ return update(ref, { archived: true }, options);
90
+ }
91
+ /**
92
+ * Walk the items inside a collection one page at a time. This endpoint pages on the server, so
93
+ * the caller consumes pages rather than a single list and decides how far to pull. The `trash`
94
+ * alias costs one more request, which reads the trash collection's id. A `models` filter takes
95
+ * `transform` only with `transforms`, `measure` only with `collectionItemMeasures`, and
96
+ * `exploration` only with `explorations`.
97
+ */
98
+ async function* itemPages(ref, params = {}, options = {}) {
99
+ const withSignal = options.signal !== void 0 && { signal: options.signal };
100
+ yield* paginatePages(transport, `/api/collection/${refPath(ref === TRASH_ALIAS ? (await get(TRASH_ALIAS, { ...withSignal })).id : ref)}/items`, CollectionItem, {
101
+ query: {
102
+ models: params.models,
103
+ archived: params.archived,
104
+ pinned_state: params.pinned_state,
105
+ "pinned-state": params.pinned_state
106
+ },
107
+ ...options.offset !== void 0 && { offset: options.offset },
108
+ ...options.max !== void 0 && { max: options.max },
109
+ ...options.pageSize !== void 0 && { pageSize: options.pageSize },
110
+ ...withSignal
111
+ });
112
+ }
113
+ /** Fetch the collection hierarchy as a forest of nested nodes. */
114
+ async function tree(params = {}, options = {}) {
115
+ return {
116
+ data: await transport.requestParsed(CollectionTreeApiList, "/api/collection/tree", {
117
+ ...options,
118
+ query: { "include-library": params["include-library"] }
119
+ }),
120
+ total: null
121
+ };
122
+ }
123
+ return {
124
+ list,
125
+ get,
126
+ create,
127
+ update,
128
+ archive,
129
+ itemPages: explainWalk("itemPages", itemPages, itemModelFeatures),
130
+ tree
131
+ };
132
+ }
133
+ //#endregion
134
+ export { collectionResource, listCollectionsAs };
@@ -0,0 +1,11 @@
1
+ import { f as RequestOptions, h as Transport } from "../transport-BsXqRujn.js";
2
+ import { t as CsvFile } from "../csv-upload--K35QedP.js";
3
+ //#region src/resources/content-translation.d.ts
4
+ declare function contentTranslationResource(transport: Transport): {
5
+ download: (options?: RequestOptions | undefined) => Promise<ReadableStream<Uint8Array<ArrayBufferLike>>>;
6
+ upload: (file: CsvFile, options?: RequestOptions | undefined) => Promise<{
7
+ success: true;
8
+ }>;
9
+ };
10
+ //#endregion
11
+ export { contentTranslationResource };
@@ -0,0 +1,27 @@
1
+ import { t as explainer } from "../refusal-B9aeHMc9.js";
2
+ import { ContentTranslationUploadResult } from "../domain/content-translation.js";
3
+ import { buildCsvFormData } from "./csv-upload.js";
4
+ //#region src/resources/content-translation.ts
5
+ const CONTENT_TRANSLATION_PATH = "/api/ee/content-translation";
6
+ function contentTranslationResource(transport) {
7
+ const { explain } = explainer(transport, "contentTranslation");
8
+ /** Download the complete content translation dictionary as CSV. */
9
+ async function download(options = {}) {
10
+ return transport.requestStream(`${CONTENT_TRANSLATION_PATH}/csv`, options);
11
+ }
12
+ /** Replace the complete content translation dictionary with the attached CSV. */
13
+ async function upload(file, options = {}) {
14
+ const form = buildCsvFormData(file);
15
+ return transport.requestParsed(ContentTranslationUploadResult, `${CONTENT_TRANSLATION_PATH}/upload-dictionary`, {
16
+ ...options,
17
+ method: "POST",
18
+ body: form
19
+ });
20
+ }
21
+ return {
22
+ download: explain("download", download),
23
+ upload: explain("upload", upload)
24
+ };
25
+ }
26
+ //#endregion
27
+ export { contentTranslationResource };
@@ -0,0 +1,2 @@
1
+ import { n as buildCsvFormData, t as CsvFile } from "../csv-upload--K35QedP.js";
2
+ export { CsvFile, buildCsvFormData };
@@ -0,0 +1,9 @@
1
+ //#region src/resources/csv-upload.ts
2
+ const CSV_CONTENT_TYPE = "text/csv";
3
+ function buildCsvFormData(file) {
4
+ const form = new FormData();
5
+ form.append("file", new Blob([file.bytes], { type: CSV_CONTENT_TYPE }), file.filename);
6
+ return form;
7
+ }
8
+ //#endregion
9
+ export { buildCsvFormData };
@@ -0,0 +1,2 @@
1
+ import { a as DashcardCardProblem, i as DashcardCardMissing, n as DashcardCardArchived, o as DashcardCardUnreadable, r as DashcardCardIssue, s as dashboardResource, t as DashboardListParams } from "../dashboard-CM7RmNeE.js";
2
+ export { DashboardListParams, DashcardCardArchived, DashcardCardIssue, DashcardCardMissing, DashcardCardProblem, DashcardCardUnreadable, dashboardResource };
@@ -0,0 +1,221 @@
1
+ import { ConfigError } from "../errors.js";
2
+ import { a as HttpError } from "../errors-DdMlaXqq.js";
3
+ import { ParameterValues } from "../domain/parameter.js";
4
+ import { cardResource } from "./card.js";
5
+ import { Dashboard, DashboardCopy, DashboardCreateInput, Dashcard, dashboardDetailSchema } from "../domain/dashboard.js";
6
+ import { parseRequestBody } from "./request-body.js";
7
+ import { z } from "zod";
8
+ //#region src/resources/dashboard.ts
9
+ const DashboardApiList = z.array(Dashboard);
10
+ const PreflightDashcard = z.looseObject({ card_id: z.number().int().nullable().optional() });
11
+ function dashboardResource(transport) {
12
+ const card = cardResource(transport);
13
+ /** List dashboards. `f` picks a server-side preset. */
14
+ async function list(params = {}, options = {}) {
15
+ return {
16
+ data: await transport.requestParsed(DashboardApiList, "/api/dashboard", {
17
+ ...options,
18
+ query: { f: params.f }
19
+ }),
20
+ total: null
21
+ };
22
+ }
23
+ /** Get one dashboard by id, with its dashcards, tabs and parameters. */
24
+ async function get(id, options = {}) {
25
+ return transport.requestParsed(dashboardDetailSchema, `/api/dashboard/${id}`, { ...options });
26
+ }
27
+ /**
28
+ * Create a dashboard. The endpoint accepts no dashcards or tabs — a follow-up `update` is what
29
+ * puts content on a fresh dashboard. A key `DashboardCreateInput` does not declare is dropped
30
+ * before the request, as the server drops it.
31
+ */
32
+ async function create(params, options = {}) {
33
+ const body = parseRequestBody(DashboardCreateInput, params, "dashboard");
34
+ return transport.requestParsed(Dashboard, "/api/dashboard", {
35
+ ...options,
36
+ method: "POST",
37
+ body
38
+ });
39
+ }
40
+ /**
41
+ * Update a dashboard by id, patching only the fields the body carries. `dashcards` and `tabs` are
42
+ * full replacements: whatever the arrays omit is deleted from the dashboard. A body with
43
+ * `dashcards` and no `tabs` key keeps the current tabs, read first: the server takes the missing
44
+ * key for an empty list and deletes every tab, or fails on a dashcard that still names one.
45
+ */
46
+ async function update(id, params, options = {}) {
47
+ const body = await withCurrentTabs(id, params, options);
48
+ return transport.requestParsed(dashboardDetailSchema, `/api/dashboard/${id}`, {
49
+ ...options,
50
+ method: "PUT",
51
+ body
52
+ });
53
+ }
54
+ async function withCurrentTabs(id, params, options) {
55
+ if (params.dashcards === void 0 || params.tabs !== void 0) return params;
56
+ const current = await get(id, options);
57
+ return {
58
+ ...params,
59
+ tabs: tabWrites(current.tabs)
60
+ };
61
+ }
62
+ /**
63
+ * Copy a dashboard, with its tabs and dashcards, into `collection_id` (root when absent). A deep
64
+ * copy duplicates its questions and metrics and references its models. With `is_deep_copy`
65
+ * false or absent the copy references every card, and a dashboard holding unarchived dashboard
66
+ * questions is refused. Archived cards, cards the caller cannot read, and every card on a
67
+ * dashcard whose main card the caller cannot read are left out and reported as `uncopied`, once
68
+ * per dashcard they sat on. A left-out main card takes its dashcard with it; a left-out series
69
+ * card stays on a dashcard whose main card is referenced and is dropped from one whose main card
70
+ * is duplicated. Action, link and placeholder dashcards are not copied.
71
+ */
72
+ async function copy(id, params = {}, options = {}) {
73
+ return transport.requestParsed(DashboardCopy, `/api/dashboard/${id}/copy`, {
74
+ ...options,
75
+ method: "POST",
76
+ body: params
77
+ });
78
+ }
79
+ /**
80
+ * Archive (soft-delete) a dashboard by id. Metabase models this as an update, not its own
81
+ * endpoint. The answer is read as `Dashboard` rather than the `DashboardDetail` `update` returns:
82
+ * an archive is a state change on the dashboard itself, and its dashcards are not part of it.
83
+ */
84
+ async function archive(id, options = {}) {
85
+ return transport.requestParsed(Dashboard, `/api/dashboard/${id}`, {
86
+ ...options,
87
+ method: "PUT",
88
+ body: { archived: true }
89
+ });
90
+ }
91
+ /**
92
+ * Patch one dashcard on a dashboard. Metabase exposes no dashcard endpoint and its dashboard PUT
93
+ * is a full replace of `dashcards`, so the patch is read-modify-written over the dashboard as it
94
+ * currently stands, its tabs sent back unchanged.
95
+ */
96
+ async function updateDashcard(dashboardId, dashcardId, params, options = {}) {
97
+ const dashboard = await get(dashboardId, options);
98
+ const target = dashboard.dashcards.find((dashcard) => dashcard.id === dashcardId);
99
+ if (target === void 0) throw new ConfigError(`dashcard ${dashcardId} not found on dashboard ${dashboardId}`);
100
+ const patched = Dashcard.parse({
101
+ ...target,
102
+ ...params
103
+ });
104
+ const refreshed = (await update(dashboardId, {
105
+ dashcards: dashboard.dashcards.map((dashcard) => stripEntityId(dashcard.id === dashcardId ? patched : dashcard)),
106
+ tabs: tabWrites(dashboard.tabs)
107
+ }, options)).dashcards.find((dashcard) => dashcard.id === dashcardId);
108
+ if (refreshed === void 0) throw new Error(`PUT /api/dashboard/${dashboardId}: dashcard ${dashcardId} missing from response`);
109
+ return refreshed;
110
+ }
111
+ /**
112
+ * Check every card a `dashcards` body references before writing it, through `GET /api/card/{id}`
113
+ * once per distinct id. Reports one issue per reference whose card is missing, archived, or
114
+ * unreadable, so an empty result means the body is safe to send; an id the server answers for in
115
+ * any other way propagates as the failure it was.
116
+ */
117
+ async function checkCardReferences(dashcards, options = {}) {
118
+ const grouped = groupByCardId(collectCardReferences(dashcards));
119
+ return (await Promise.all(Array.from(grouped.entries()).map(async ([cardId, references]) => ({
120
+ references,
121
+ problem: await inspectCard(cardId, options)
122
+ })))).flatMap((check) => {
123
+ const problem = check.problem;
124
+ if (problem === null) return [];
125
+ return check.references.map((reference) => ({
126
+ ...reference,
127
+ problem
128
+ }));
129
+ });
130
+ }
131
+ async function inspectCard(cardId, options) {
132
+ try {
133
+ return (await card.get(cardId, options)).archived ? { reason: "archived" } : null;
134
+ } catch (error) {
135
+ if (!(error instanceof HttpError)) throw error;
136
+ if (error.kind === "resource-missing") return { reason: "missing" };
137
+ if (error.kind === "auth" || error.kind === "forbidden") return {
138
+ reason: "unreadable",
139
+ detail: error.userMessage
140
+ };
141
+ throw error;
142
+ }
143
+ }
144
+ /**
145
+ * Fetch the selectable values for a dashboard parameter, through the chain-filter value endpoint.
146
+ * `constraints` sets other parameters' values, which narrow the values of a parameter linked to
147
+ * them.
148
+ */
149
+ async function parameterValues(dashboardId, parameterId, constraints = {}, options = {}) {
150
+ return transport.requestParsed(ParameterValues, `/api/dashboard/${dashboardId}/params/${encodeURIComponent(parameterId)}/values`, {
151
+ ...options,
152
+ query: constraints
153
+ });
154
+ }
155
+ /**
156
+ * Search a dashboard parameter's selectable values: the server returns only values containing the
157
+ * substring, capped at the first 1000 matches. `constraints` narrows them as `parameterValues`
158
+ * does.
159
+ */
160
+ async function searchParameterValues(dashboardId, parameterId, query, constraints = {}, options = {}) {
161
+ const parameter = encodeURIComponent(parameterId);
162
+ return transport.requestParsed(ParameterValues, `/api/dashboard/${dashboardId}/params/${parameter}/search/${encodeURIComponent(query)}`, {
163
+ ...options,
164
+ query: constraints
165
+ });
166
+ }
167
+ return {
168
+ list,
169
+ get,
170
+ create,
171
+ update,
172
+ archive,
173
+ copy,
174
+ updateDashcard,
175
+ checkCardReferences,
176
+ parameterValues,
177
+ searchParameterValues
178
+ };
179
+ }
180
+ function collectCardReferences(dashcards) {
181
+ if (dashcards === void 0 || dashcards === null) return [];
182
+ const references = [];
183
+ dashcards.forEach((dashcard, index) => {
184
+ const parsed = PreflightDashcard.safeParse(dashcard);
185
+ if (!parsed.success) return;
186
+ const cardId = parsed.data.card_id;
187
+ if (typeof cardId === "number" && cardId > 0) references.push({
188
+ cardId,
189
+ path: `/dashcards/${index}/card_id`
190
+ });
191
+ });
192
+ return references;
193
+ }
194
+ function groupByCardId(references) {
195
+ const grouped = /* @__PURE__ */ new Map();
196
+ for (const reference of references) {
197
+ const existing = grouped.get(reference.cardId);
198
+ if (existing === void 0) grouped.set(reference.cardId, [reference]);
199
+ else existing.push(reference);
200
+ }
201
+ return grouped;
202
+ }
203
+ function tabWrites(tabs) {
204
+ return tabs.map(({ id, name }) => ({
205
+ id,
206
+ name
207
+ }));
208
+ }
209
+ function stripEntityId(dashcard) {
210
+ const { entity_id: _entity_id, id, size_x, size_y, row, col, ...rest } = dashcard;
211
+ return {
212
+ ...rest,
213
+ id,
214
+ size_x,
215
+ size_y,
216
+ row,
217
+ col
218
+ };
219
+ }
220
+ //#endregion
221
+ export { dashboardResource };
@@ -0,0 +1,60 @@
1
+ import { f as RequestOptions, h as Transport } from "../transport-BsXqRujn.js";
2
+ import { t as ListResult } from "../list-BT_bBm9Z.js";
3
+ import { a as DataActionExecuteInput, c as DataActionUpdateInput, n as DataAction, o as DataActionExecuteResult } from "../data-action-CkXVrOUH.js";
4
+ //#region src/resources/data-action.d.ts
5
+ declare function dataActionResource(transport: Transport): {
6
+ list: (options?: RequestOptions) => Promise<ListResult<DataAction>>;
7
+ get: (id: number, options?: RequestOptions) => Promise<DataAction>;
8
+ create: (params: {
9
+ name: string;
10
+ type: "query";
11
+ database_id: number;
12
+ dataset_query: {
13
+ [x: string]: unknown;
14
+ };
15
+ parameters?: {
16
+ [x: string]: unknown;
17
+ id: string;
18
+ type: string;
19
+ target: unknown;
20
+ name?: string | undefined;
21
+ slug?: string | undefined;
22
+ required?: boolean | undefined;
23
+ }[] | undefined;
24
+ collection_id?: number | null | undefined;
25
+ description?: string | null | undefined;
26
+ visualization_settings?: unknown;
27
+ }, options?: RequestOptions | undefined) => Promise<{
28
+ [x: string]: unknown;
29
+ id: number;
30
+ name: string;
31
+ description: string | null;
32
+ type: string;
33
+ model_id: number | null;
34
+ parameters: {
35
+ [x: string]: unknown;
36
+ id: string;
37
+ type: string;
38
+ name?: string | undefined;
39
+ slug?: string | undefined;
40
+ target?: unknown;
41
+ required?: boolean | undefined;
42
+ }[] | null;
43
+ visualization_settings: unknown;
44
+ archived: boolean;
45
+ public_uuid: string | null;
46
+ entity_id: string | null;
47
+ creator_id: number;
48
+ created_at: string;
49
+ updated_at: string;
50
+ collection_id: number | null;
51
+ database_id?: number | null | undefined;
52
+ dataset_query?: unknown;
53
+ }>;
54
+ update: (id: number, params: DataActionUpdateInput, options?: RequestOptions) => Promise<DataAction>;
55
+ archive: (id: number, options?: RequestOptions) => Promise<DataAction>;
56
+ delete: (id: number, options?: RequestOptions) => Promise<void>;
57
+ execute: (id: number, params: DataActionExecuteInput, options?: RequestOptions) => Promise<DataActionExecuteResult>;
58
+ };
59
+ //#endregion
60
+ export { dataActionResource };
@@ -0,0 +1,79 @@
1
+ import { t as explainer } from "../refusal-B9aeHMc9.js";
2
+ import { DATA_ACTION_COLLECTION_GATE, DataActionExecuteResult, dataActionSchema } from "../domain/data-action.js";
3
+ import { gateTriggered } from "../version/input-gates.js";
4
+ import { z } from "zod";
5
+ //#region src/resources/data-action.ts
6
+ function dataActionResource(transport) {
7
+ const { explain } = explainer(transport, "dataAction");
8
+ async function readSchema(options) {
9
+ const { features } = await transport.server(options);
10
+ return dataActionSchema(features);
11
+ }
12
+ /** List the unarchived data actions the caller can see. `GET /api/action` answers a bare array. */
13
+ async function list(options = {}) {
14
+ const schema = await readSchema(options);
15
+ return {
16
+ data: await transport.requestParsed(z.array(schema), "/api/action", { ...options }),
17
+ total: null
18
+ };
19
+ }
20
+ /** Get one unarchived data action by id. */
21
+ async function get(id, options = {}) {
22
+ const schema = await readSchema(options);
23
+ return transport.requestParsed(schema, `/api/action/${id}`, { ...options });
24
+ }
25
+ /** Create a data action — a parameterized native query that writes to a database — in a collection. */
26
+ async function create(params, options = {}) {
27
+ const schema = await readSchema(options);
28
+ return transport.requestParsed(schema, "/api/action", {
29
+ ...options,
30
+ method: "POST",
31
+ body: params
32
+ });
33
+ }
34
+ /**
35
+ * Update a data action by id, patching only the fields the body carries. A server whose data
36
+ * actions have no collection never moves the action, and from 58.31 it strips the undeclared key and
37
+ * answers as if it had. So the field is refused there before the wire.
38
+ */
39
+ async function update(id, params, options = {}) {
40
+ await transport.requireFeatures(gateTriggered(DATA_ACTION_COLLECTION_GATE, params.collection_id) ? [DATA_ACTION_COLLECTION_GATE.feature] : [], options);
41
+ const schema = await readSchema(options);
42
+ return transport.requestParsed(schema, `/api/action/${id}`, {
43
+ ...options,
44
+ method: "PUT",
45
+ body: params
46
+ });
47
+ }
48
+ /** Archive (soft-delete) a data action by id. Metabase models this as an update, not its own endpoint. */
49
+ async function archive(id, options = {}) {
50
+ return update(id, { archived: true }, options);
51
+ }
52
+ /** Delete a data action by id, removing it and the dashboard buttons that run it. */
53
+ async function remove(id, options = {}) {
54
+ await transport.requestRaw(`/api/action/${id}`, {
55
+ ...options,
56
+ method: "DELETE",
57
+ expectContentType: "binary"
58
+ });
59
+ }
60
+ /** Execute a data action by id with parameter values keyed by parameter id. */
61
+ async function execute(id, params, options = {}) {
62
+ return transport.requestParsed(DataActionExecuteResult, `/api/action/${id}/execute`, {
63
+ ...options,
64
+ method: "POST",
65
+ body: params
66
+ });
67
+ }
68
+ return {
69
+ list,
70
+ get,
71
+ create: explain("create", create),
72
+ update,
73
+ archive,
74
+ delete: remove,
75
+ execute
76
+ };
77
+ }
78
+ //#endregion
79
+ export { dataActionResource };
@@ -0,0 +1,112 @@
1
+ import { f as RequestOptions, h as Transport } from "../transport-BsXqRujn.js";
2
+ import { t as ListResult } from "../list-BT_bBm9Z.js";
3
+ //#region src/resources/data-app.d.ts
4
+ declare function dataAppResource(transport: Transport): {
5
+ list: (filter?: {
6
+ available?: boolean | undefined;
7
+ } | undefined, options?: RequestOptions | undefined) => Promise<ListResult<{
8
+ [x: string]: unknown;
9
+ id: number;
10
+ name: string;
11
+ display_name: string;
12
+ description: string | null;
13
+ version: number;
14
+ outdated: boolean;
15
+ bundle_path: string;
16
+ enabled: boolean;
17
+ allowed_hosts: string[];
18
+ resource_collection_id: number;
19
+ bundle_hash: string | null;
20
+ created_at: string;
21
+ updated_at: string;
22
+ } | {
23
+ name: string;
24
+ display_name: string;
25
+ }>>;
26
+ get: (slug: string, options?: RequestOptions | undefined) => Promise<{
27
+ [x: string]: unknown;
28
+ id: number;
29
+ name: string;
30
+ display_name: string;
31
+ description: string | null;
32
+ version: number;
33
+ outdated: boolean;
34
+ bundle_path: string;
35
+ enabled: boolean;
36
+ allowed_hosts: string[];
37
+ resource_collection_id: number;
38
+ bundle_hash: string | null;
39
+ created_at: string;
40
+ updated_at: string;
41
+ } | {
42
+ name: string;
43
+ display_name: string;
44
+ }>;
45
+ create: (params: {
46
+ name: string;
47
+ display_name?: string | undefined;
48
+ description?: string | null | undefined;
49
+ version?: number | undefined;
50
+ bundle_path?: string | undefined;
51
+ allowed_hosts?: string[] | undefined;
52
+ enabled?: boolean | undefined;
53
+ }, options?: RequestOptions | undefined) => Promise<{
54
+ [x: string]: unknown;
55
+ id: number;
56
+ name: string;
57
+ display_name: string;
58
+ description: string | null;
59
+ version: number;
60
+ outdated: boolean;
61
+ bundle_path: string;
62
+ enabled: boolean;
63
+ allowed_hosts: string[];
64
+ resource_collection_id: number;
65
+ bundle_hash: string | null;
66
+ created_at: string;
67
+ updated_at: string;
68
+ }>;
69
+ update: (slug: string, params: {
70
+ display_name?: string | undefined;
71
+ description?: string | null | undefined;
72
+ version?: number | undefined;
73
+ bundle_path?: string | undefined;
74
+ allowed_hosts?: string[] | undefined;
75
+ enabled?: boolean | undefined;
76
+ }, options?: RequestOptions | undefined) => Promise<{
77
+ [x: string]: unknown;
78
+ id: number;
79
+ name: string;
80
+ display_name: string;
81
+ description: string | null;
82
+ version: number;
83
+ outdated: boolean;
84
+ bundle_path: string;
85
+ enabled: boolean;
86
+ allowed_hosts: string[];
87
+ resource_collection_id: number;
88
+ bundle_hash: string | null;
89
+ created_at: string;
90
+ updated_at: string;
91
+ }>;
92
+ replaceBundle: (slug: string, bundle: string, options?: RequestOptions | undefined) => Promise<{
93
+ [x: string]: unknown;
94
+ id: number;
95
+ name: string;
96
+ display_name: string;
97
+ description: string | null;
98
+ version: number;
99
+ outdated: boolean;
100
+ bundle_path: string;
101
+ enabled: boolean;
102
+ allowed_hosts: string[];
103
+ resource_collection_id: number;
104
+ bundle_hash: string | null;
105
+ created_at: string;
106
+ updated_at: string;
107
+ }>;
108
+ typedSchema: (slug: string, options?: RequestOptions | undefined) => Promise<string>;
109
+ delete: (slug: string, options?: RequestOptions | undefined) => Promise<void>;
110
+ };
111
+ //#endregion
112
+ export { dataAppResource };