@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.
- package/CHANGELOG.md +28 -0
- package/LICENSE +661 -0
- package/README.md +490 -2
- package/dist/api-key-DJeN1-7G.d.ts +46 -0
- package/dist/auth/credential.d.ts +2 -0
- package/dist/auth/credential.js +61 -0
- package/dist/auth/oauth-login.d.ts +2 -0
- package/dist/auth/oauth-login.js +2 -0
- package/dist/auth/oauth-session.d.ts +2 -0
- package/dist/auth/oauth-session.js +31 -0
- package/dist/card-BxBzr5Uj.d.ts +1392 -0
- package/dist/card-DN0sLkCG.d.ts +33 -0
- package/dist/client-DdXLlH1B.d.ts +3380 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.js +99 -0
- package/dist/collection-DGnTvD6R.d.ts +294 -0
- package/dist/collection-fFahL-ub.d.ts +53 -0
- package/dist/content-translation-zfUkE_OG.d.ts +8 -0
- package/dist/credential-6aOEGqMH.d.ts +30 -0
- package/dist/cron-DThzerR6.d.ts +9 -0
- package/dist/csv-upload--K35QedP.d.ts +8 -0
- package/dist/dashboard-CM7RmNeE.d.ts +38 -0
- package/dist/dashboard-DtLXVgtf.d.ts +978 -0
- package/dist/data-action-CkXVrOUH.d.ts +97 -0
- package/dist/data-app-CqP5_fpB.d.ts +76 -0
- package/dist/database-B0JNZjDN.d.ts +27 -0
- package/dist/database-BxqDmfcj.d.ts +997 -0
- package/dist/dataset-BBNGPVec.d.ts +4144 -0
- package/dist/dataset-BUirJ1rO.d.ts +23 -0
- package/dist/dependency-CzpXmeu7.d.ts +299 -0
- package/dist/dependency-arB8Cr2H.d.ts +879 -0
- package/dist/document-tLd6pYWe.d.ts +115 -0
- package/dist/domain/api-key.d.ts +2 -0
- package/dist/domain/api-key.js +31 -0
- package/dist/domain/card.d.ts +2 -0
- package/dist/domain/card.js +140 -0
- package/dist/domain/collection.d.ts +2 -0
- package/dist/domain/collection.js +137 -0
- package/dist/domain/content-translation.d.ts +2 -0
- package/dist/domain/content-translation.js +5 -0
- package/dist/domain/cron.d.ts +2 -0
- package/dist/domain/cron.js +5 -0
- package/dist/domain/dashboard.d.ts +2 -0
- package/dist/domain/dashboard.js +211 -0
- package/dist/domain/data-action.d.ts +2 -0
- package/dist/domain/data-action.js +91 -0
- package/dist/domain/data-app.d.ts +2 -0
- package/dist/domain/data-app.js +52 -0
- package/dist/domain/database.d.ts +2 -0
- package/dist/domain/database.js +56 -0
- package/dist/domain/dataset.d.ts +2 -0
- package/dist/domain/dataset.js +56 -0
- package/dist/domain/dependency.d.ts +2 -0
- package/dist/domain/dependency.js +168 -0
- package/dist/domain/document.d.ts +2 -0
- package/dist/domain/document.js +94 -0
- package/dist/domain/eid-translation.d.ts +2 -0
- package/dist/domain/eid-translation.js +36 -0
- package/dist/domain/embedding.d.ts +2 -0
- package/dist/domain/embedding.js +9 -0
- package/dist/domain/erd.d.ts +2 -0
- package/dist/domain/erd.js +45 -0
- package/dist/domain/field.d.ts +2 -0
- package/dist/domain/field.js +274 -0
- package/dist/domain/git-sync.d.ts +2 -0
- package/dist/domain/git-sync.js +147 -0
- package/dist/domain/glossary.d.ts +2 -0
- package/dist/domain/glossary.js +30 -0
- package/dist/domain/library.d.ts +2 -0
- package/dist/domain/library.js +89 -0
- package/dist/domain/measure.d.ts +2 -0
- package/dist/domain/measure.js +43 -0
- package/dist/domain/metric.d.ts +2 -0
- package/dist/domain/metric.js +139 -0
- package/dist/domain/moderation-review.d.ts +2 -0
- package/dist/domain/moderation-review.js +31 -0
- package/dist/domain/notification.d.ts +2 -0
- package/dist/domain/notification.js +143 -0
- package/dist/domain/parameter.d.ts +2 -0
- package/dist/domain/parameter.js +109 -0
- package/dist/domain/permission.d.ts +2 -0
- package/dist/domain/permission.js +36 -0
- package/dist/domain/pulse.d.ts +2 -0
- package/dist/domain/pulse.js +140 -0
- package/dist/domain/query.d.ts +2 -0
- package/dist/domain/query.js +13 -0
- package/dist/domain/replacement.d.ts +2 -0
- package/dist/domain/replacement.js +93 -0
- package/dist/domain/revision.d.ts +2 -0
- package/dist/domain/revision.js +90 -0
- package/dist/domain/search.d.ts +2 -0
- package/dist/domain/search.js +63 -0
- package/dist/domain/segment.d.ts +2 -0
- package/dist/domain/segment.js +46 -0
- package/dist/domain/session-properties.d.ts +2 -0
- package/dist/domain/session-properties.js +14 -0
- package/dist/domain/setting.d.ts +2 -0
- package/dist/domain/setting.js +22 -0
- package/dist/domain/setup.d.ts +2 -0
- package/dist/domain/setup.js +21 -0
- package/dist/domain/snippet.d.ts +2 -0
- package/dist/domain/snippet.js +38 -0
- package/dist/domain/table.d.ts +2 -0
- package/dist/domain/table.js +187 -0
- package/dist/domain/text.d.ts +5 -0
- package/dist/domain/text.js +6 -0
- package/dist/domain/timeline.d.ts +2 -0
- package/dist/domain/timeline.js +97 -0
- package/dist/domain/transform-dag-run.d.ts +2 -0
- package/dist/domain/transform-dag-run.js +19 -0
- package/dist/domain/transform-inspector.d.ts +2 -0
- package/dist/domain/transform-inspector.js +142 -0
- package/dist/domain/transform-job.d.ts +2 -0
- package/dist/domain/transform-job.js +115 -0
- package/dist/domain/transform-python.d.ts +2 -0
- package/dist/domain/transform-python.js +51 -0
- package/dist/domain/transform-tag.d.ts +2 -0
- package/dist/domain/transform-tag.js +17 -0
- package/dist/domain/transform-test.d.ts +2 -0
- package/dist/domain/transform-test.js +176 -0
- package/dist/domain/transform.d.ts +2 -0
- package/dist/domain/transform.js +304 -0
- package/dist/domain/upload.d.ts +2 -0
- package/dist/domain/upload.js +13 -0
- package/dist/domain/user.d.ts +2 -0
- package/dist/domain/user.js +16 -0
- package/dist/eid-translation-CH6NPWd-.d.ts +143 -0
- package/dist/embedding-oU3gqfgX.d.ts +10 -0
- package/dist/erd-BdeFEeSy.d.ts +842 -0
- package/dist/erd-CbV7xvAc.d.ts +51 -0
- package/dist/errors-DdMlaXqq.js +330 -0
- package/dist/errors.d.ts +2 -0
- package/dist/errors.js +189 -0
- package/dist/features-SMSfJhB6.d.ts +295 -0
- package/dist/field-D1Pfk-0S.d.ts +50 -0
- package/dist/field-p9Rme2zB.d.ts +2549 -0
- package/dist/git-sync-BTf1aYHr.d.ts +205 -0
- package/dist/git-sync-C99SVdJ9.d.ts +258 -0
- package/dist/glossary-CHK3elPj.d.ts +35 -0
- package/dist/glossary-DFvnz-E5.d.ts +15 -0
- package/dist/http/errors.d.ts +2 -0
- package/dist/http/errors.js +2 -0
- package/dist/http/oauth.d.ts +2 -0
- package/dist/http/oauth.js +201 -0
- package/dist/http/retry.d.ts +19 -0
- package/dist/http/retry.js +33 -0
- package/dist/http/transport.d.ts +2 -0
- package/dist/http/transport.js +2 -0
- package/dist/index.d.ts +62 -0
- package/dist/index.js +64 -0
- package/dist/input-gate-registry-Dai7SfXb.js +14 -0
- package/dist/input-gates-DwKoTJVQ.d.ts +28 -0
- package/dist/json-BksZpXDC.d.ts +19 -0
- package/dist/json-pointer.d.ts +5 -0
- package/dist/json-pointer.js +10 -0
- package/dist/json.d.ts +2 -0
- package/dist/json.js +44 -0
- package/dist/known-range-DTOBgTEC.d.ts +7 -0
- package/dist/library-B9pEq7qP.d.ts +230 -0
- package/dist/list-BT_bBm9Z.d.ts +7 -0
- package/dist/list.d.ts +2 -0
- package/dist/list.js +1 -0
- package/dist/measure-CgH14YQZ.d.ts +44 -0
- package/dist/measure-lPz8qnwz.d.ts +108 -0
- package/dist/metric-DcYloqOQ.d.ts +2655 -0
- package/dist/moderation-review-B4RUTZ6_.d.ts +56 -0
- package/dist/network-error-5g4U1iul.js +62 -0
- package/dist/notification-Cp5GJErS.d.ts +22 -0
- package/dist/notification-D1MThyKE.d.ts +443 -0
- package/dist/oauth-C4ordeoJ.d.ts +59 -0
- package/dist/oauth-login-CJsT_3EE.d.ts +19 -0
- package/dist/oauth-login-D734Jvbq.js +179 -0
- package/dist/oauth-session-BlIlcd8Q.d.ts +6 -0
- package/dist/paginate-COuL0Gzl.d.ts +24 -0
- package/dist/paginate.d.ts +2 -0
- package/dist/paginate.js +49 -0
- package/dist/parameter-ak-J-IOj.d.ts +190 -0
- package/dist/permission-BnCQw5Kp.d.ts +149 -0
- package/dist/poll-CIwnee7h.d.ts +15 -0
- package/dist/poll.d.ts +2 -0
- package/dist/poll.js +47 -0
- package/dist/predicates.d.ts +10 -0
- package/dist/predicates.js +18 -0
- package/dist/pulse-0LG3K6qO.d.ts +598 -0
- package/dist/pulse-BzKmz3Yn.d.ts +18 -0
- package/dist/query-Xsin530u.d.ts +23 -0
- package/dist/refusal-B9aeHMc9.js +130 -0
- package/dist/replacement-BGyggp-G.d.ts +2467 -0
- package/dist/replacement-CVebCuNp.d.ts +128 -0
- package/dist/requirement-check-glU7wqhQ.d.ts +17 -0
- package/dist/requirements-Dx_ZVzl7.d.ts +227 -0
- package/dist/resources/api-key.d.ts +11 -0
- package/dist/resources/api-key.js +35 -0
- package/dist/resources/card.d.ts +2 -0
- package/dist/resources/card.js +103 -0
- package/dist/resources/collection.d.ts +2 -0
- package/dist/resources/collection.js +134 -0
- package/dist/resources/content-translation.d.ts +11 -0
- package/dist/resources/content-translation.js +27 -0
- package/dist/resources/csv-upload.d.ts +2 -0
- package/dist/resources/csv-upload.js +9 -0
- package/dist/resources/dashboard.d.ts +2 -0
- package/dist/resources/dashboard.js +221 -0
- package/dist/resources/data-action.d.ts +60 -0
- package/dist/resources/data-action.js +79 -0
- package/dist/resources/data-app.d.ts +112 -0
- package/dist/resources/data-app.js +75 -0
- package/dist/resources/database.d.ts +2 -0
- package/dist/resources/database.js +103 -0
- package/dist/resources/dataset.d.ts +2 -0
- package/dist/resources/dataset.js +81 -0
- package/dist/resources/dependency.d.ts +2 -0
- package/dist/resources/dependency.js +156 -0
- package/dist/resources/document.d.ts +55 -0
- package/dist/resources/document.js +60 -0
- package/dist/resources/eid-translation.d.ts +8 -0
- package/dist/resources/eid-translation.js +19 -0
- package/dist/resources/erd.d.ts +2 -0
- package/dist/resources/erd.js +26 -0
- package/dist/resources/field.d.ts +2 -0
- package/dist/resources/field.js +99 -0
- package/dist/resources/git-sync.d.ts +2 -0
- package/dist/resources/git-sync.js +362 -0
- package/dist/resources/glossary.d.ts +2 -0
- package/dist/resources/glossary.js +51 -0
- package/dist/resources/library.d.ts +85 -0
- package/dist/resources/library.js +90 -0
- package/dist/resources/measure.d.ts +2 -0
- package/dist/resources/measure.js +57 -0
- package/dist/resources/metric.d.ts +2 -0
- package/dist/resources/metric.js +50 -0
- package/dist/resources/moderation-review.d.ts +23 -0
- package/dist/resources/moderation-review.js +24 -0
- package/dist/resources/notification.d.ts +2 -0
- package/dist/resources/notification.js +93 -0
- package/dist/resources/optional-parsed.d.ts +7 -0
- package/dist/resources/optional-parsed.js +14 -0
- package/dist/resources/permission.d.ts +10 -0
- package/dist/resources/permission.js +31 -0
- package/dist/resources/pivot-export.d.ts +10 -0
- package/dist/resources/pivot-export.js +16 -0
- package/dist/resources/pulse.d.ts +2 -0
- package/dist/resources/pulse.js +76 -0
- package/dist/resources/replacement.d.ts +2 -0
- package/dist/resources/replacement.js +82 -0
- package/dist/resources/request-body.d.ts +9 -0
- package/dist/resources/request-body.js +13 -0
- package/dist/resources/revision.d.ts +70 -0
- package/dist/resources/revision.js +46 -0
- package/dist/resources/search.d.ts +2 -0
- package/dist/resources/search.js +78 -0
- package/dist/resources/segment.d.ts +2 -0
- package/dist/resources/segment.js +55 -0
- package/dist/resources/setting.d.ts +11 -0
- package/dist/resources/setting.js +43 -0
- package/dist/resources/setup.d.ts +8 -0
- package/dist/resources/setup.js +18 -0
- package/dist/resources/snippet.d.ts +2 -0
- package/dist/resources/snippet.js +52 -0
- package/dist/resources/table.d.ts +2 -0
- package/dist/resources/table.js +274 -0
- package/dist/resources/timeline-event.d.ts +12 -0
- package/dist/resources/timeline-event.js +51 -0
- package/dist/resources/timeline.d.ts +2 -0
- package/dist/resources/timeline.js +82 -0
- package/dist/resources/transform-dag-run.d.ts +22 -0
- package/dist/resources/transform-dag-run.js +32 -0
- package/dist/resources/transform-inspector.d.ts +214 -0
- package/dist/resources/transform-inspector.js +47 -0
- package/dist/resources/transform-job.d.ts +2 -0
- package/dist/resources/transform-job.js +90 -0
- package/dist/resources/transform-python.d.ts +59 -0
- package/dist/resources/transform-python.js +57 -0
- package/dist/resources/transform-tag.d.ts +35 -0
- package/dist/resources/transform-tag.js +47 -0
- package/dist/resources/transform-test.d.ts +2 -0
- package/dist/resources/transform-test.js +75 -0
- package/dist/resources/transform.d.ts +2 -0
- package/dist/resources/transform.js +227 -0
- package/dist/resources/upload.d.ts +2 -0
- package/dist/resources/upload.js +48 -0
- package/dist/resources/user.d.ts +8 -0
- package/dist/resources/user.js +11 -0
- package/dist/revision-Dyl-8p7d.d.ts +106 -0
- package/dist/search-Cm5IxKss.d.ts +92 -0
- package/dist/search-Cten2h0I.d.ts +26 -0
- package/dist/segment-CbAgVO-5.d.ts +47 -0
- package/dist/segment-DQLX6r1E.d.ts +16 -0
- package/dist/session-properties-COtlxAcK.d.ts +15 -0
- package/dist/setting-DXuQGXGF.d.ts +25 -0
- package/dist/setup-JqcJ2unJ.d.ts +26 -0
- package/dist/signal.d.ts +8 -0
- package/dist/signal.js +25 -0
- package/dist/snippet-C_Ilx7tR.d.ts +41 -0
- package/dist/snippet-Djn0rL21.d.ts +16 -0
- package/dist/table-CDZbLNow.d.ts +176 -0
- package/dist/table-Od6uvDVW.d.ts +3234 -0
- package/dist/tag-qzjGGci8.d.ts +48 -0
- package/dist/timeline-BK45hy-h.d.ts +218 -0
- package/dist/timeline-BTs6fuRp.d.ts +21 -0
- package/dist/transform-C5thnJwW.d.ts +559 -0
- package/dist/transform-WASQAXeA.d.ts +652 -0
- package/dist/transform-dag-run-BgZwv1yx.d.ts +49 -0
- package/dist/transform-inspector-CMCh8WKV.d.ts +374 -0
- package/dist/transform-job-D8jTQtdX.d.ts +98 -0
- package/dist/transform-job-DmTwKxhc.d.ts +237 -0
- package/dist/transform-python-DtL3xxMj.d.ts +101 -0
- package/dist/transform-tag-C6j5EUkX.d.ts +25 -0
- package/dist/transform-test-CR_i54IV.d.ts +412 -0
- package/dist/transform-test-CeMzDpUC.d.ts +346 -0
- package/dist/transport-BsXqRujn.d.ts +476 -0
- package/dist/transport-HP7cyo9N.js +397 -0
- package/dist/upload-B5YjVkSW.d.ts +12 -0
- package/dist/upload-UPfZFdbH.d.ts +22 -0
- package/dist/url-CI0pxHOc.d.ts +7 -0
- package/dist/url.d.ts +2 -0
- package/dist/url.js +34 -0
- package/dist/user-Sqqv7rqh.d.ts +18 -0
- package/dist/version/capability-error.d.ts +2 -0
- package/dist/version/capability-error.js +42 -0
- package/dist/version/features.d.ts +2 -0
- package/dist/version/features.js +171 -0
- package/dist/version/input-gates.d.ts +2 -0
- package/dist/version/input-gates.js +13 -0
- package/dist/version/known-range.d.ts +2 -0
- package/dist/version/known-range.js +7 -0
- package/dist/version/probe.d.ts +2 -0
- package/dist/version/probe.js +30 -0
- package/dist/version/profile.d.ts +2 -0
- package/dist/version/profile.js +64 -0
- package/dist/version/requirement-check.d.ts +2 -0
- package/dist/version/requirement-check.js +62 -0
- package/dist/version/requirements.d.ts +2 -0
- package/dist/version/requirements.js +229 -0
- package/dist/version/tag.d.ts +2 -0
- package/dist/version/tag.js +52 -0
- 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,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 };
|