@metabase/client 0.1.0 → 0.1.2
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 +25 -0
- package/README.md +10 -6
- package/dist/api-key-DJeN1-7G.d.ts +46 -0
- package/dist/auth/credential.d.ts +1 -1
- package/dist/auth/oauth-login.d.ts +1 -1
- package/dist/auth/oauth-login.js +1 -1
- package/dist/auth/oauth-session.d.ts +1 -1
- package/dist/{card-BZx4NSr-.d.ts → card-CbV6hLYH.d.ts} +4 -4
- package/dist/{card-B6merEUN.d.ts → card-CrSywvOt.d.ts} +18 -18
- package/dist/{client-DNRvXFRm.d.ts → client-cBi6_RQs.d.ts} +289 -185
- package/dist/client.d.ts +1 -1
- package/dist/client.js +4 -0
- package/dist/{collection-Bib61WiV.d.ts → collection-Bmtisr3r.d.ts} +47 -47
- package/dist/{collection-CqtGPi4W.d.ts → collection-Q9FNMiRh.d.ts} +18 -4
- package/dist/{credential-6aOEGqMH.d.ts → credential-B6fKSvqp.d.ts} +1 -1
- package/dist/{dashboard-XTe46250.d.ts → dashboard-CknUcTp8.d.ts} +3 -3
- package/dist/{dashboard-z9i1VUZC.d.ts → dashboard-DBdEehA9.d.ts} +33 -25
- package/dist/{data-action-rS27f2Ji.d.ts → data-action-CqqZ0JYg.d.ts} +6 -4
- package/dist/data-app-MoMS9VUr.d.ts +76 -0
- package/dist/{database-DqTespfa.d.ts → database-Bs5WQOOZ.d.ts} +3 -3
- package/dist/{database-BLUMlywE.d.ts → database-CYNLJ8AZ.d.ts} +18 -18
- package/dist/{dataset-C6lX1-cr.d.ts → dataset-cg8ZZrOP.d.ts} +85 -85
- package/dist/{dataset-Cj3XuKLe.d.ts → dataset-dzWljE_C.d.ts} +3 -3
- package/dist/{dependency-fN5_7a22.d.ts → dependency-CL-YG9KH.d.ts} +26 -26
- package/dist/{dependency-D8Qs5Xdx.d.ts → dependency-VqvLTDAU.d.ts} +248 -196
- package/dist/{document-oZNDbDfx.d.ts → document-tLd6pYWe.d.ts} +2 -2
- package/dist/domain/api-key.d.ts +2 -0
- package/dist/domain/api-key.js +31 -0
- package/dist/domain/card.d.ts +1 -1
- package/dist/domain/collection.d.ts +1 -1
- package/dist/domain/dashboard.d.ts +2 -2
- package/dist/domain/dashboard.js +21 -4
- package/dist/domain/data-action.d.ts +2 -2
- package/dist/domain/data-action.js +8 -2
- package/dist/domain/data-app.d.ts +2 -0
- package/dist/domain/data-app.js +52 -0
- package/dist/domain/database.d.ts +1 -1
- package/dist/domain/dataset.d.ts +1 -1
- package/dist/domain/dependency.d.ts +1 -1
- package/dist/domain/dependency.js +6 -3
- package/dist/domain/document.d.ts +1 -1
- package/dist/domain/eid-translation.d.ts +1 -1
- package/dist/domain/field.d.ts +2 -2
- package/dist/domain/field.js +8 -2
- package/dist/domain/git-sync.d.ts +1 -1
- package/dist/domain/library.d.ts +2 -2
- package/dist/domain/library.js +8 -2
- package/dist/domain/measure.d.ts +1 -1
- package/dist/domain/measure.js +3 -1
- package/dist/domain/metric.d.ts +1 -1
- package/dist/domain/moderation-review.d.ts +1 -1
- package/dist/domain/notification.d.ts +2 -2
- package/dist/domain/notification.js +6 -1
- package/dist/domain/parameter.d.ts +1 -1
- package/dist/domain/pulse.d.ts +2 -2
- package/dist/domain/pulse.js +10 -3
- package/dist/domain/replacement.d.ts +1 -1
- package/dist/domain/revision.d.ts +2 -2
- package/dist/domain/revision.js +29 -2
- package/dist/domain/search.d.ts +1 -1
- package/dist/domain/segment.d.ts +1 -1
- package/dist/domain/segment.js +3 -1
- package/dist/domain/setup.d.ts +1 -1
- package/dist/domain/setup.js +1 -1
- package/dist/domain/snippet.d.ts +1 -1
- package/dist/domain/table.d.ts +2 -2
- package/dist/domain/table.js +35 -4
- package/dist/domain/timeline.d.ts +1 -1
- package/dist/domain/transform-dag-run.d.ts +1 -1
- package/dist/domain/transform-inspector.d.ts +1 -1
- package/dist/domain/transform-job.d.ts +2 -2
- package/dist/domain/transform-job.js +8 -2
- package/dist/domain/transform-python.d.ts +2 -2
- package/dist/domain/transform-python.js +15 -3
- package/dist/domain/transform-tag.d.ts +1 -1
- package/dist/domain/transform-test.d.ts +1 -1
- package/dist/domain/transform.d.ts +2 -2
- package/dist/domain/transform.js +76 -7
- package/dist/domain/user.d.ts +1 -1
- package/dist/domain/user.js +1 -1
- package/dist/{eid-translation-nuhr8St2.d.ts → eid-translation-aQSffx0o.d.ts} +40 -40
- package/dist/{erd-BujD227Y.d.ts → erd-DCgdEC2S.d.ts} +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/{features-CnFkUCj2.d.ts → features-SMSfJhB6.d.ts} +36 -2
- package/dist/{field-Bqn10Fq_.d.ts → field-ozrfbvUd.d.ts} +2 -2
- package/dist/{field-BCRO19mk.d.ts → field-tqQPtVuR.d.ts} +9 -7
- package/dist/{git-sync-gAMKsZgN.d.ts → git-sync-5lFWX1ds.d.ts} +3 -3
- package/dist/{git-sync-DNXrNVCW.d.ts → git-sync-QL9Nu6gP.d.ts} +10 -10
- package/dist/{glossary-CqFlzW33.d.ts → glossary-DwS7QVrl.d.ts} +1 -1
- package/dist/http/errors.d.ts +1 -1
- package/dist/http/oauth.d.ts +1 -1
- package/dist/http/oauth.js +47 -36
- package/dist/http/transport.d.ts +1 -1
- package/dist/index.d.ts +48 -46
- package/dist/index.js +8 -6
- package/dist/input-gate-registry-Dai7SfXb.js +14 -0
- package/dist/input-gates-DwKoTJVQ.d.ts +28 -0
- package/dist/{json-CZvjc3--.d.ts → json-DwGOvRtS.d.ts} +1 -1
- package/dist/json-pointer.d.ts +2 -1
- package/dist/json-pointer.js +4 -1
- package/dist/json.d.ts +1 -1
- package/dist/{library-Cx9h_RkU.d.ts → library-B9pEq7qP.d.ts} +8 -6
- package/dist/{measure-CuMqPbQX.d.ts → measure-CInoXeyH.d.ts} +1 -1
- package/dist/{measure-KuXdjZYJ.d.ts → measure-CgH14YQZ.d.ts} +1 -1
- package/dist/{metric-yvehaVCS.d.ts → metric-CYOmbcM5.d.ts} +10 -10
- package/dist/{moderation-review-B4RUTZ6_.d.ts → moderation-review-CWUQ3_HL.d.ts} +4 -4
- package/dist/{notification-BT2TDAd_.d.ts → notification-BY2JEjKp.d.ts} +68 -4
- package/dist/{notification-BiegPoSD.d.ts → notification-D-Hp82Pn.d.ts} +3 -3
- package/dist/{oauth-C4ordeoJ.d.ts → oauth-CVoZpuq8.d.ts} +4 -2
- package/dist/{oauth-login-D734Jvbq.js → oauth-login--tDagiZu.js} +29 -11
- package/dist/{oauth-login-CJsT_3EE.d.ts → oauth-login-SZ4Csai8.d.ts} +3 -2
- package/dist/{oauth-session-BlIlcd8Q.d.ts → oauth-session-COLH4puN.d.ts} +1 -1
- package/dist/{paginate-DZWvWvbm.d.ts → paginate-CaJ5usdp.d.ts} +1 -1
- package/dist/paginate.d.ts +1 -1
- package/dist/{parameter-ak-J-IOj.d.ts → parameter-BYo7uR-J.d.ts} +2 -2
- package/dist/{pulse-dylocLd9.d.ts → pulse-BTpSNxhT.d.ts} +2 -2
- package/dist/{pulse-CMc1Rwdj.d.ts → pulse-BUlfrJZH.d.ts} +23 -21
- package/dist/{replacement-CyvtbxGg.d.ts → replacement-BQian4vA.d.ts} +23 -23
- package/dist/{replacement-S9U3gApY.d.ts → replacement-Dbtvvrmz.d.ts} +11 -11
- package/dist/{requirement-check-CIA5IHC1.d.ts → requirement-check-CHHEHXcj.d.ts} +2 -2
- package/dist/{requirements-C0txASN8.d.ts → requirements-Dx_ZVzl7.d.ts} +11 -1
- package/dist/resources/api-key.d.ts +11 -0
- package/dist/resources/api-key.js +35 -0
- package/dist/resources/card.d.ts +1 -1
- package/dist/resources/collection.d.ts +1 -1
- package/dist/resources/collection.js +35 -6
- package/dist/resources/content-translation.d.ts +1 -1
- package/dist/resources/content-translation.js +1 -1
- package/dist/resources/dashboard.d.ts +1 -1
- package/dist/resources/dashboard.js +8 -5
- package/dist/resources/data-action.d.ts +3 -48
- package/dist/resources/data-action.js +9 -9
- package/dist/resources/data-app.d.ts +112 -0
- package/dist/resources/data-app.js +75 -0
- package/dist/resources/database.d.ts +1 -1
- package/dist/resources/dataset.d.ts +1 -1
- package/dist/resources/dependency.d.ts +1 -1
- package/dist/resources/dependency.js +13 -7
- package/dist/resources/document.d.ts +3 -10
- package/dist/resources/eid-translation.d.ts +2 -2
- package/dist/resources/erd.d.ts +1 -1
- package/dist/resources/field.d.ts +1 -1
- package/dist/resources/field.js +3 -2
- package/dist/resources/git-sync.d.ts +1 -1
- package/dist/resources/git-sync.js +1 -1
- package/dist/resources/glossary.d.ts +1 -1
- package/dist/resources/library.d.ts +4 -4
- package/dist/resources/library.js +2 -2
- package/dist/resources/measure.d.ts +1 -1
- package/dist/resources/metric.d.ts +1 -1
- package/dist/resources/moderation-review.d.ts +1 -1
- package/dist/resources/notification.d.ts +1 -1
- package/dist/resources/notification.js +2 -2
- package/dist/resources/optional-parsed.d.ts +1 -1
- package/dist/resources/permission.d.ts +1 -1
- package/dist/resources/pivot-export.d.ts +1 -1
- package/dist/resources/pulse.d.ts +1 -1
- package/dist/resources/pulse.js +3 -2
- package/dist/resources/replacement.d.ts +1 -1
- package/dist/resources/revision.d.ts +3 -3
- package/dist/resources/revision.js +5 -10
- package/dist/resources/search.d.ts +1 -1
- package/dist/resources/search.js +23 -2
- package/dist/resources/segment.d.ts +1 -1
- package/dist/resources/setting.d.ts +1 -1
- package/dist/resources/setup.d.ts +2 -2
- package/dist/resources/snippet.d.ts +1 -1
- package/dist/resources/table.d.ts +1 -1
- package/dist/resources/table.js +9 -10
- package/dist/resources/timeline-event.d.ts +2 -2
- package/dist/resources/timeline.d.ts +1 -1
- package/dist/resources/transform-dag-run.d.ts +2 -2
- package/dist/resources/transform-inspector.d.ts +4 -4
- package/dist/resources/transform-job.d.ts +1 -1
- package/dist/resources/transform-python.d.ts +11 -4
- package/dist/resources/transform-python.js +3 -2
- package/dist/resources/transform-tag.d.ts +1 -1
- package/dist/resources/transform-test.d.ts +1 -1
- package/dist/resources/transform.d.ts +1 -1
- package/dist/resources/transform.js +13 -3
- package/dist/resources/upload.d.ts +1 -1
- package/dist/resources/user.d.ts +2 -2
- package/dist/{revision-CQBPhohA.d.ts → revision-DNEw6S93.d.ts} +7 -5
- package/dist/{search-BxJipLN6.d.ts → search-BQWkdVg1.d.ts} +2 -2
- package/dist/{search-NZR6iRBs.d.ts → search-tK5lmRb8.d.ts} +23 -23
- package/dist/{segment-pj3wklGe.d.ts → segment-CbAgVO-5.d.ts} +1 -1
- package/dist/{segment-D2i34X9l.d.ts → segment-jyhBtOAZ.d.ts} +2 -2
- package/dist/{setup-Ez_U7GmM.d.ts → setup-JqcJ2unJ.d.ts} +1 -1
- package/dist/signal.d.ts +3 -2
- package/dist/signal.js +9 -4
- package/dist/{snippet-hEV429Pv.d.ts → snippet-C_Ilx7tR.d.ts} +2 -2
- package/dist/{snippet-RnnWa4TL.d.ts → snippet-DsgohpTV.d.ts} +2 -2
- package/dist/{table-B_lfuaHc.d.ts → table-B1pQSpTA.d.ts} +14 -14
- package/dist/{table-B3-UaPHa.d.ts → table-BAl8aPZZ.d.ts} +49 -44
- package/dist/{timeline-C2IEcRlP.d.ts → timeline-BdLvwRnl.d.ts} +2 -2
- package/dist/{timeline-folD3mQ_.d.ts → timeline-BfX1lMob.d.ts} +24 -24
- package/dist/{transform-CXOT5kFe.d.ts → transform-Ds74yPiY.d.ts} +48 -34
- package/dist/{transform-CDurgE1D.d.ts → transform-DwnIcpqV.d.ts} +153 -37
- package/dist/{transform-dag-run-BgZwv1yx.d.ts → transform-dag-run-BSrdrjaK.d.ts} +4 -4
- package/dist/{transform-inspector-BUYBt6--.d.ts → transform-inspector-BMaRqcRM.d.ts} +8 -8
- package/dist/{transform-job-29P6BULe.d.ts → transform-job-C85GxBHj.d.ts} +9 -9
- package/dist/{transform-job-CTJImaOd.d.ts → transform-job-Dfp9Ox0l.d.ts} +7 -5
- package/dist/{transform-python-DdDnW6yK.d.ts → transform-python-DtL3xxMj.d.ts} +49 -4
- package/dist/{transform-tag-DVUIZTEM.d.ts → transform-tag-C6j5EUkX.d.ts} +1 -1
- package/dist/{transform-test-A-CJYT6B.d.ts → transform-test-C3hiZ4AV.d.ts} +2 -2
- package/dist/{transform-test-BwuyrHpT.d.ts → transform-test-DROPvrkI.d.ts} +2 -2
- package/dist/{transport-E0ZaPNWJ.d.ts → transport-CS11mEqI.d.ts} +20 -6
- package/dist/{upload-B7PG3ePk.d.ts → upload-Bx1D7eNy.d.ts} +1 -1
- package/dist/{user-2r0OBoO6.d.ts → user-Sqqv7rqh.d.ts} +2 -2
- package/dist/version/capability-error.d.ts +1 -1
- package/dist/version/features.d.ts +2 -2
- package/dist/version/features.js +30 -2
- package/dist/version/input-gates.d.ts +2 -0
- package/dist/version/input-gates.js +13 -0
- package/dist/version/probe.d.ts +1 -1
- package/dist/version/profile.d.ts +1 -1
- package/dist/version/requirement-check.d.ts +1 -1
- package/dist/version/requirements.d.ts +1 -1
- package/dist/version/requirements.js +10 -0
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
Notable changes to `@metabase/client`.
|
|
4
4
|
|
|
5
|
+
## 0.1.2
|
|
6
|
+
|
|
7
|
+
- `oauthLogin` takes an optional `signal`. Aborting it, before or during the flow, rejects with the signal's reason when that is a `MetabaseError`, else with an `AbortError` carrying its message, frees the loopback callback port at once, and cancels discovery, client registration or the token exchange in flight. `tryDiscoverMetadata`, `discoverLoginMetadata`, `registerClient` and `exchangeCode` on `@metabase/client/http/oauth` take a signal too, and `@metabase/client/signal` exports `whenAborted`.
|
|
8
|
+
|
|
9
|
+
## 0.1.1
|
|
10
|
+
|
|
11
|
+
- `DashboardCreateInput` holds only the fields `POST /api/dashboard` reads, so a layout passed to `dashboard.create` fails to compile; send it as a `DashboardLayoutInput` through `dashboard.update`. At run time `dashboard.create` drops any other key before the request, as the server does, and refuses a blank `name`, as the server does.
|
|
12
|
+
- `DashboardLayoutInput` and `DatabaseUpdateInput` are on the barrel.
|
|
13
|
+
- `@metabase/client/json-pointer` exports `unescapeJsonPointerSegment`, the inverse of `escapeJsonPointerSegment`.
|
|
14
|
+
- `@metabase/client/version/input-gates` exports the input gates recorded on feature-gated body fields, with `gateTriggered` and `inputGatesOf`, and `featureAvailability` says which servers hold a feature.
|
|
15
|
+
- `dataAction.update` refuses a `collection_id` before the request on a server without `dataActionCollections`, which would drop it unread.
|
|
16
|
+
- `dashboard.get` and `dashboard.update` read a dashboard holding a text, heading or other dashcard bound to no card. The server answers a stub `card` such as `{ query_average_duration: null, download_perms: "none" }` for such a dashcard, which 0.1.0 refused; it reads as `null`, and `dashboardDetailSchema` on the dashboard subpath is the reader.
|
|
17
|
+
- A transform's Python `source-tables` entry reads without `database_id` or `schema`, as the server stores an entry whose table or database is gone. `TransformSourceTableEntry` is the stored entry, and `TransformSourceTableEntryInput`, on the barrel, is the entry the create, update and Python test-run bodies take, as strict as before.
|
|
18
|
+
- Every transform read on Metabase 59 accepts a Python transform, whose `source-tables` that server keys by alias. `transformRowSchema` and `transformDetailSchema` read it as the list later servers answer, taking each alias from its key; an entry naming its table by id alone reads `database_id`, `schema` and `table` as `null`, and one whose table that server could not find reads `table_id` as `null` too. `transformSourceTablesAsList` is the feature.
|
|
19
|
+
- The dependency readers accept the action nodes Metabase 65 adds: `DependencyType` and `DependencyUsageType` take `"action"`, and `DependencyEntityData.type` takes an action's `"implicit"` or `"query"`. `dependency.graph`, `dependency.dependents` and `dependency.broken` explain an older server's refusal of an action as the entity through `actionDependencyGraph`.
|
|
20
|
+
- `notification.get`, and the `update`, `archive` and `send` that read through it, refuse a dashboard subscription with the "not a question alert" `ConfigError` instead of a shape error on its payload. `AnyNotification` is the reader: a question alert in full, any other type read no further than `id` and `payload_type`. `CARD_PAYLOAD_TYPE` has the literal type `"notification/card"`.
|
|
21
|
+
- `CurrentUser.email` is any string, so `user.current` reads an account whose address Metabase accepts and a stricter email check refuses, such as one with `!` or `/` in the local part or a digit or one-letter top-level domain.
|
|
22
|
+
- `transform.create`, `transform.update` and `transformPython.testRun` send a Python source's tables keyed by alias to Metabase 58 and 59, which read no list: a transform entry as its reference less `alias`, which 59 reads and 58, taking only table ids, refuses, or as the bare table id when it names its table by id alone, and a test-run entry as its table id. `TransformSourceTableEntryInput` also takes that id-only entry, `{ alias, table_id }` with `database_id`, `schema` and `table` absent or `null`, so a transform read from 59 updates back unchanged. `pythonTestRun` holds from 58 on a server licensed for Python transforms.
|
|
23
|
+
- `SetupInput.user.email` is any string, so `setup.create` hands Metabase an address it accepts and a stricter email check refuses, and the server judges it.
|
|
24
|
+
- `collection.itemPages` walks the `trash` alias on every server. No Metabase routes `/api/collection/trash/items`, so the walk reads the trash collection's id from `GET /api/collection/trash` first and pages its items by that id.
|
|
25
|
+
- `search.query` and `collection.itemPages` explain an older server's 400 for a `models` value it does not take as the feature it lacks: `measure` in search through `measures`, `transform` through `transforms`, `exploration` through the new `explorations`, and among collection items `measure` through the new `collectionItemMeasures`.
|
|
26
|
+
- `collection.itemPages` applies `pinned_state` on Metabase 64 and later, which read it as `pinned-state` and drop the spelling 58 through 63 read.
|
|
27
|
+
- `TransformJobUpdateInput.active` records that it needs `transformJobActivation`; a server before 61 drops it unread and still answers the job as active.
|
|
28
|
+
- `LibraryPublishTablesInput.collection_id` records that only a server with `tablePublishTargetCollection` (62+) reads it; an older one publishes into its one Library data collection. It is sent on every server.
|
|
29
|
+
|
|
5
30
|
## 0.1.0
|
|
6
31
|
|
|
7
32
|
The first published release: the whole surface.
|
package/README.md
CHANGED
|
@@ -255,7 +255,7 @@ A 400 refusing a remote-sync move carries the content behind it: `nonRemoteSynce
|
|
|
255
255
|
The client registers no signal handler and reads no process state, so cancellation reaches it as an
|
|
256
256
|
`AbortSignal` the host owns. Three places take one and they compose: `ClientOptions.signal` cancels
|
|
257
257
|
every request a client makes, `RequestOptions.signal` cancels a single request, and
|
|
258
|
-
`PollOptions.signal` stops a wait loop. Each is folded together with the request timeout, so whichever
|
|
258
|
+
`PollOptions.signal` stops a wait loop. `OAuthLoginInput.signal` cancels a login, which runs before there is a client (see Auth). Each is folded together with the request timeout, so whichever
|
|
259
259
|
fires first ends the work. A method's first call may also wait on the client's one shared server probe; the method's `signal` ends that caller's wait, while the probe itself belongs to the client and is cancelled only by `ClientOptions.signal`, so a later call still finds it settled.
|
|
260
260
|
|
|
261
261
|
```ts
|
|
@@ -423,7 +423,9 @@ an `OAuthCredential`. `refreshOAuthCredential` exchanges the rotating refresh to
|
|
|
423
423
|
revocation endpoint. Types: `Credential` (the `ApiKeyCredential | OAuthCredential` union),
|
|
424
424
|
`OAuthLoginInput`, `OAuthLoginDeps`.
|
|
425
425
|
|
|
426
|
-
|
|
426
|
+
`OAuthLoginInput.signal` cancels a login at any point: before it starts, during discovery, client registration or the token exchange, or while it waits for the browser's redirect. The request in flight is cancelled, the loopback callback port is freed at once, and the login rejects with the signal's reason when that is a `MetabaseError`, else with an `AbortError` carrying its message.
|
|
427
|
+
|
|
428
|
+
Unless the caller passes `metadata` from `tryDiscoverMetadata`, which makes the same check, `oauthLogin` checks that the server grants the full-access scope the REST API needs: a discovery document that lists it in `scopes_supported` settles it (Metabase v62 from the patch that introduced the scope, and v63), and otherwise the server's version does (`oauthFullAccessScopeUnadvertised`), because v64 and newer grant the scope without advertising it; a server that cannot is refused with a `ConfigError`. `tryDiscoverMetadata` takes a signal as well.
|
|
427
429
|
|
|
428
430
|
### Versions and requirements
|
|
429
431
|
|
|
@@ -433,11 +435,13 @@ Unless the caller passes `metadata` from `tryDiscoverMetadata`, which makes the
|
|
|
433
435
|
|
|
434
436
|
`Features` is a record of named booleans over `FEATURE_RULES`, the one table that relates a behaviour to the majors and token feature it needs (`FeatureRule`: `{ since, until?, tokenFeature? }`); `evaluateFeatures(major, tokenFeatures)` evaluates it for a `RuleMajor` (a release major, or `"development"` for a build ahead of every release), `FEATURE_NAMES` lists the keys, and `isFeatureName` narrows a string to one. Names describe behaviour (`transformTargetTableId`, `libraryChildrenCarryType`), never a version. Consumers branch on a feature, never on a major — `features.ts` is the only module that compares one.
|
|
435
437
|
|
|
436
|
-
`METHOD_REQUIREMENTS` names, per client method (`"transform.get"`, `"gitSync.branches"` — the `MethodKey` as the method is reached on the client), the features it needs, strictest first; `methodRequirements(key)` reads one entry, `METHOD_KEYS` lists the keys, and `isMethodKey` narrows a string to one. When a gated method's request fails the way a server rejects what it lacks (a 402 premium refusal, an unrouted 404, or a 400 on a value outside an older enum or a body an older route reads in another shape), the client probes the server and throws a `CapabilityError` when that profile lacks a feature the method needs — a version gate reads `This operation requires Metabase v59+ (this server is v0.58.0). Upgrade Metabase to use it.`, a token gate `This operation requires the 'remote_sync' premium feature (not enabled on this server).` — and the error's `developerDetail` is a `RequirementFailure` carrying `reason`, `detail`, `feature`, `since`, `tokenFeature` and `serverVersion` — a Zod schema as well as a type (with `RequirementReason` for its `reason` enum), so a consumer that reports the refusal in its own output can describe it. A server that turns out to have every feature failed for another reason, and its own error stands. A 400 is also an ordinary validation failure, so it stands as the server's own `HttpError` when its field errors (`fieldErrors`, `specificFieldErrors`) name a field the missing parameter feature does not gate: a `mb.table.update` carrying a tier-named `data_layer` to a server that speaks medallions, alongside another field that server rejects, throws that field's rejection rather than the tier floor. A 400 that names no field, or one from a server lacking a feature the method itself needs, is the refusal. A method that needs nothing never consults the server; a newer release or a development build is placed past the newest known major, so only a token can explain a refusal there. `checkFeatures(features, profile)` is the check itself, over any feature list (`methodRequirements(key)` gives a method's), answering the first feature the profile lacks, and `featureFailures(features, profile)` answers every one, `featureGap(profile, feature)` says which half of a rule the profile fails (`FeatureGap`: `{ kind: "version" }` or `{ kind: "token", tokenFeature }`), and `ruleGap` is the same question asked of a bare rule. A consumer that describes what a server can do — gating a test lane, or filtering prose by the server it targets — reads the same check.
|
|
438
|
+
`METHOD_REQUIREMENTS` names, per client method (`"transform.get"`, `"gitSync.branches"` — the `MethodKey` as the method is reached on the client), the features it needs, strictest first; `methodRequirements(key)` reads one entry, `METHOD_KEYS` lists the keys, and `isMethodKey` narrows a string to one. When a gated method's request fails the way a server rejects what it lacks (a 402 premium refusal, an unrouted 404, or a 400 on a value outside an older enum or a body an older route reads in another shape), the client probes the server and throws a `CapabilityError` when that profile lacks a feature the method needs — a version gate reads `This operation requires Metabase v59+ (this server is v0.58.0). Upgrade Metabase to use it.`, a token gate `This operation requires the 'remote_sync' premium feature (not enabled on this server).` — and the error's `developerDetail` is a `RequirementFailure` carrying `reason`, `detail`, `feature`, `since`, `tokenFeature` and `serverVersion` — a Zod schema as well as a type (with `RequirementReason` for its `reason` enum), so a consumer that reports the refusal in its own output can describe it. A server that turns out to have every feature failed for another reason, and its own error stands. A 400 is also an ordinary validation failure, so it stands as the server's own `HttpError` when its field errors (`fieldErrors`, `specificFieldErrors`) name a field the missing parameter feature does not gate: a `mb.table.update` carrying a tier-named `data_layer` to a server that speaks medallions, alongside another field that server rejects, throws that field's rejection rather than the tier floor. A 400 that names no field, or one from a server lacking a feature the method itself needs, is the refusal. A method that needs nothing never consults the server; a newer release or a development build is placed past the newest known major, so only a token can explain a refusal there. `checkFeatures(features, profile)` is the check itself, over any feature list (`methodRequirements(key)` gives a method's), answering the first feature the profile lacks, and `featureFailures(features, profile)` answers every one, `featureGap(profile, feature)` says which half of a rule the profile fails (`FeatureGap`: `{ kind: "version" }` or `{ kind: "token", tokenFeature }`), and `ruleGap` is the same question asked of a bare rule. `featureAvailability(feature)` says which servers hold a feature, from its rule: `v64+`, or `token dashboard_subscription_filters` when every supported server meets the version floor. A consumer that describes what a server can do — gating a test lane, or filtering prose by the server it targets — reads the same check.
|
|
439
|
+
|
|
440
|
+
Some input fields take a value only some servers accept. `@metabase/client/version/input-gates` records each such field on the input schema that holds it, in a registry of the client's own rather than Zod's global one. `inputGatesOf(schema)` answers the `InputGate` entries recorded on a property node, or `null` when every server takes all its values. A gate names a `feature`, an `effect` (`"needs"`: the server must hold the feature; `"supersededBy"`: a server holding it reads the value as something else; `"droppedBy"`: a server holding it drops the value unread), and the `when` that triggers it (`GateTrigger`: the field `present`, one of `values`, or a `nonEmpty` array). `gateTriggered(gate, value)` says whether a value passed for the field triggers the gate. A `droppedBy` gate is a note and nothing enforces it: `TABLE_FROM_DEFINITION_GATE` on `table_id` of `MeasureCreateInput` and `SegmentCreateInput`, which a server holding `tableFromDefinition` drops, and every server is sent because one without the feature requires it. The domain modules export every other gate as a const the resource enforces it by: `DATA_SENSITIVITY_GATE` on `FieldUpdateInput.data_sensitivity`, `DATA_LAYER_TIER_GATE` and `DATA_LAYER_MEDALLION_GATE` on `TableUpdateInput.data_layer`, `DATA_AUTHORITY_WITHDRAWAL_GATE` on `data_authority` of `TableUpdateInput` and `TableBulkEditInput`, `DATA_ACTION_COLLECTION_GATE` on `DataActionUpdateInput.collection_id`, `SUBSCRIPTION_FILTERS_GATE` on `parameters` of `PulseCreateInput` and `PulseUpdateInput`, and `REVISION_ENTITY_GATES` (`measure`, `transform`, `transform-test`) on `RevisionRevertInput.entity`. A server lacking the feature is refused or explained the way its method's own requirement is.
|
|
437
441
|
|
|
438
|
-
A resource whose wire shape differs between generations exports from its `@metabase/client/domain/<r>` module, beside the canonical schema, a reader that picks the exact schema for a `Features` and converts forward: `transformDetailSchema(features)` and `transformRowSchema(features)` read a `Transform` (the older generations' hydrated `table` on the detail endpoint, and no link on the rest, become `target_table_id`), `fieldDetailSchema(features)` reads a `FieldDetail`, which is a `FieldWithDataSensitivity` (its `data_sensitivity` `null` for an unlabelled field) on a generation with the label and a plain `Field` without the key elsewhere, told apart by `hasDataSensitivity`, `fieldRemappedValueSchema(features, sameField)` reads a `FieldRemappedValue` from the first cells of a row a generation pads with display columns, `transformJobSchema(features)` reads a `TransformJob` whose `active` is `null` on a generation that cannot switch jobs off, `transformJobRunResultSchema(features)` reads a `TransformJobRunResult` (`{ message, started, run_id }` — a stub id is `started: null, run_id: null`, the request accepted and the outcome unsaid; a numeric or null id is `started: id !== null, run_id: id`), and `libraryWireSchema(features)` with `toLibrary(wire, listing)` reads a `Library` whose `LibraryChild` entries carry `type` from the wire where the generation sends it and `is_remote_synced` from the collection listing on every generation (`LibraryCollectionInfo`, `LibraryListing`). Each `null` in a canonical field means "this server cannot say". `ResponseShapeError.developerDetail.serverSkew` carries the profile's `skew`, and a `newer-than-known` server is named as such in the message's lead line.
|
|
442
|
+
A resource whose wire shape differs between generations exports from its `@metabase/client/domain/<r>` module, beside the canonical schema, a reader that picks the exact schema for a `Features` and converts forward: `transformDetailSchema(features)` and `transformRowSchema(features)` read a `Transform` (the older generations' hydrated `table` on the detail endpoint, and no link on the rest, become `target_table_id`, and a Python source's `source-tables` keyed by alias becomes the list of `TransformSourceTableEntry`, whose `database_id`, `schema` and `table` are `null` for a table named by id alone; `transform.create`, `transform.update` and `transformPython.testRun` send the list back keyed by alias to such a server, `transformSourceBody(source, features)` and `pythonTestRunBody(params, features)` being the writers), `fieldDetailSchema(features)` reads a `FieldDetail`, which is a `FieldWithDataSensitivity` (its `data_sensitivity` `null` for an unlabelled field) on a generation with the label and a plain `Field` without the key elsewhere, told apart by `hasDataSensitivity`, `fieldRemappedValueSchema(features, sameField)` reads a `FieldRemappedValue` from the first cells of a row a generation pads with display columns, `transformJobSchema(features)` reads a `TransformJob` whose `active` is `null` on a generation that cannot switch jobs off, `transformJobRunResultSchema(features)` reads a `TransformJobRunResult` (`{ message, started, run_id }` — a stub id is `started: null, run_id: null`, the request accepted and the outcome unsaid; a numeric or null id is `started: id !== null, run_id: id`), and `libraryWireSchema(features)` with `toLibrary(wire, listing)` reads a `Library` whose `LibraryChild` entries carry `type` from the wire where the generation sends it and `is_remote_synced` from the collection listing on every generation (`LibraryCollectionInfo`, `LibraryListing`). Each `null` in a canonical field means "this server cannot say". `ResponseShapeError.developerDetail.serverSkew` carries the profile's `skew`, and a `newer-than-known` server is named as such in the message's lead line.
|
|
439
443
|
|
|
440
|
-
Types: `ServerInfo`, `ServerProfile`, `ServerVersion`, `ReleaseVersion`, `DevelopmentBuild`, `Skew`, `Edition`, `FeatureName`, `FeatureRule`, `RuleMajor`, `Features`, `FeatureGap`, `VersionGap`, `TokenGap`, `MethodKey`, `RequirementFailure`, `RequirementReason`.
|
|
444
|
+
Types: `ServerInfo`, `ServerProfile`, `ServerVersion`, `ReleaseVersion`, `DevelopmentBuild`, `Skew`, `Edition`, `FeatureName`, `FeatureRule`, `RuleMajor`, `Features`, `FeatureGap`, `VersionGap`, `TokenGap`, `MethodKey`, `RequirementFailure`, `RequirementReason`, `InputGate`, `GateEffect`, `GateTrigger`, `PresentTrigger`, `ValuesTrigger`, `NonEmptyTrigger`.
|
|
441
445
|
|
|
442
446
|
### Resource schemas
|
|
443
447
|
|
|
@@ -472,7 +476,7 @@ dependency graph's `DependencyFindingError`, the entity relationship diagram's `
|
|
|
472
476
|
Request bodies (`<Resource>CreateInput`, `<Resource>UpdateInput`, and `MetricDefinition`, the expression
|
|
473
477
|
over metric and measure leaves that `metric.query` and `metric.breakoutValues` run) and the domain vocabulary enums
|
|
474
478
|
(`FieldBaseType`, `SearchModel`, `CollectionItemModel`, …) live in the same modules and are reached
|
|
475
|
-
at `@metabase/client/domain/<resource>`.
|
|
479
|
+
at `@metabase/client/domain/<resource>`. `DashboardCreateInput` holds only the fields `POST /api/dashboard` reads and refuses any other key, so a dashboard's layout (`dashcards`, `tabs`) is a `DashboardLayoutInput`, sent through `dashboard.update` once the dashboard exists.
|
|
476
480
|
|
|
477
481
|
### Utilities
|
|
478
482
|
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region src/domain/api-key.d.ts
|
|
3
|
+
declare const ApiKey: z.ZodObject<{
|
|
4
|
+
id: z.ZodNumber;
|
|
5
|
+
name: z.ZodString;
|
|
6
|
+
masked_key: z.ZodString;
|
|
7
|
+
group: z.ZodObject<{
|
|
8
|
+
id: z.ZodNumber;
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
}, z.core.$loose>;
|
|
11
|
+
created_at: z.ZodString;
|
|
12
|
+
updated_at: z.ZodString;
|
|
13
|
+
}, z.core.$loose>;
|
|
14
|
+
type ApiKey = z.infer<typeof ApiKey>;
|
|
15
|
+
declare const ApiKeyCompact: z.ZodObject<{
|
|
16
|
+
id: z.ZodNumber;
|
|
17
|
+
name: z.ZodString;
|
|
18
|
+
masked_key: z.ZodString;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
type ApiKeyCompact = z.infer<typeof ApiKeyCompact>;
|
|
21
|
+
declare const CreatedApiKey: z.ZodObject<{
|
|
22
|
+
id: z.ZodNumber;
|
|
23
|
+
name: z.ZodString;
|
|
24
|
+
masked_key: z.ZodString;
|
|
25
|
+
group: z.ZodObject<{
|
|
26
|
+
id: z.ZodNumber;
|
|
27
|
+
name: z.ZodString;
|
|
28
|
+
}, z.core.$loose>;
|
|
29
|
+
created_at: z.ZodString;
|
|
30
|
+
updated_at: z.ZodString;
|
|
31
|
+
unmasked_key: z.ZodString;
|
|
32
|
+
}, z.core.$loose>;
|
|
33
|
+
type CreatedApiKey = z.infer<typeof CreatedApiKey>;
|
|
34
|
+
declare const CreatedApiKeyCompact: z.ZodObject<{
|
|
35
|
+
id: z.ZodNumber;
|
|
36
|
+
name: z.ZodString;
|
|
37
|
+
unmasked_key: z.ZodString;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
type CreatedApiKeyCompact = z.infer<typeof CreatedApiKeyCompact>;
|
|
40
|
+
declare const ApiKeyCreateInput: z.ZodObject<{
|
|
41
|
+
name: z.ZodString;
|
|
42
|
+
group_id: z.ZodNumber;
|
|
43
|
+
}, z.core.$strict>;
|
|
44
|
+
type ApiKeyCreateInput = z.infer<typeof ApiKeyCreateInput>;
|
|
45
|
+
//#endregion
|
|
46
|
+
export { CreatedApiKeyCompact as a, CreatedApiKey as i, ApiKeyCompact as n, ApiKeyCreateInput as r, ApiKey as t };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as Credential, c as OAuthCredential, d as credentialSecrets, f as expiresAtFromNow, i as AuthHeader, l as assertCredentialHeaderSafe, m as oauthCredentialFromTokens, n as AUTHORIZATION_HEADER, o as CredentialRefresher, p as isOAuthExpired, r as ApiKeyCredential, s as DEFAULT_EXPIRES_IN_SECONDS, t as API_KEY_HEADER, u as credentialAuthHeader } from "../credential-
|
|
1
|
+
import { a as Credential, c as OAuthCredential, d as credentialSecrets, f as expiresAtFromNow, i as AuthHeader, l as assertCredentialHeaderSafe, m as oauthCredentialFromTokens, n as AUTHORIZATION_HEADER, o as CredentialRefresher, p as isOAuthExpired, r as ApiKeyCredential, s as DEFAULT_EXPIRES_IN_SECONDS, t as API_KEY_HEADER, u as credentialAuthHeader } from "../credential-B6fKSvqp.js";
|
|
2
2
|
export { API_KEY_HEADER, AUTHORIZATION_HEADER, ApiKeyCredential, AuthHeader, Credential, CredentialRefresher, DEFAULT_EXPIRES_IN_SECONDS, OAuthCredential, assertCredentialHeaderSafe, credentialAuthHeader, credentialSecrets, expiresAtFromNow, isOAuthExpired, oauthCredentialFromTokens };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as OAuthLoginInput, r as oauthLogin, t as OAuthLoginDeps } from "../oauth-login-
|
|
1
|
+
import { n as OAuthLoginInput, r as oauthLogin, t as OAuthLoginDeps } from "../oauth-login-SZ4Csai8.js";
|
|
2
2
|
export { OAuthLoginDeps, OAuthLoginInput, oauthLogin };
|
package/dist/auth/oauth-login.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as oauthLogin } from "../oauth-login
|
|
1
|
+
import { t as oauthLogin } from "../oauth-login--tDagiZu.js";
|
|
2
2
|
export { oauthLogin };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as revokeOAuthCredential, t as refreshOAuthCredential } from "../oauth-session-
|
|
1
|
+
import { n as revokeOAuthCredential, t as refreshOAuthCredential } from "../oauth-session-COLH4puN.js";
|
|
2
2
|
export { refreshOAuthCredential, revokeOAuthCredential };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { r as QueryMetadata } from "./dataset-C6lX1-cr.js";
|
|
3
|
-
import { n as ExportFormat } from "./query-Xsin530u.js";
|
|
4
|
-
import { f as RequestOptions, h as Transport } from "./transport-E0ZaPNWJ.js";
|
|
1
|
+
import { f as RequestOptions, h as Transport } from "./transport-CS11mEqI.js";
|
|
5
2
|
import { t as ListResult } from "./list-BT_bBm9Z.js";
|
|
3
|
+
import { a as CardListFilter, i as CardDetail, l as CardUpdateInput, o as CardQueryResult, r as CardCreateInput, t as Card } from "./card-CrSywvOt.js";
|
|
4
|
+
import { r as QueryMetadata } from "./dataset-cg8ZZrOP.js";
|
|
5
|
+
import { n as ExportFormat } from "./query-Xsin530u.js";
|
|
6
6
|
//#region src/resources/card.d.ts
|
|
7
7
|
interface CardListParams {
|
|
8
8
|
f?: CardListFilter | undefined;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
//#region src/domain/card.d.ts
|
|
3
3
|
declare const CardType: z.ZodEnum<{
|
|
4
|
-
metric: "metric";
|
|
5
4
|
question: "question";
|
|
6
5
|
model: "model";
|
|
6
|
+
metric: "metric";
|
|
7
7
|
}>;
|
|
8
8
|
type CardType = z.infer<typeof CardType>;
|
|
9
9
|
declare const CardListFilter: z.ZodEnum<{
|
|
10
|
-
database: "database";
|
|
11
|
-
table: "table";
|
|
12
10
|
archived: "archived";
|
|
13
11
|
all: "all";
|
|
14
12
|
mine: "mine";
|
|
15
13
|
bookmarked: "bookmarked";
|
|
14
|
+
database: "database";
|
|
15
|
+
table: "table";
|
|
16
16
|
using_model: "using_model";
|
|
17
17
|
using_segment: "using_segment";
|
|
18
18
|
}>;
|
|
@@ -278,16 +278,16 @@ declare const Card: z.ZodObject<{
|
|
|
278
278
|
id: z.ZodNumber;
|
|
279
279
|
name: z.ZodString;
|
|
280
280
|
type: z.ZodEnum<{
|
|
281
|
-
metric: "metric";
|
|
282
281
|
question: "question";
|
|
283
282
|
model: "model";
|
|
283
|
+
metric: "metric";
|
|
284
284
|
}>;
|
|
285
285
|
display: z.ZodString;
|
|
286
286
|
description: z.ZodNullable<z.ZodString>;
|
|
287
287
|
archived: z.ZodBoolean;
|
|
288
288
|
query_type: z.ZodNullable<z.ZodEnum<{
|
|
289
|
-
query: "query";
|
|
290
289
|
native: "native";
|
|
290
|
+
query: "query";
|
|
291
291
|
}>>;
|
|
292
292
|
database_id: z.ZodNullable<z.ZodNumber>;
|
|
293
293
|
table_id: z.ZodNullable<z.ZodNumber>;
|
|
@@ -320,16 +320,16 @@ declare const CardDetail: z.ZodObject<{
|
|
|
320
320
|
id: z.ZodNumber;
|
|
321
321
|
name: z.ZodString;
|
|
322
322
|
type: z.ZodEnum<{
|
|
323
|
-
metric: "metric";
|
|
324
323
|
question: "question";
|
|
325
324
|
model: "model";
|
|
325
|
+
metric: "metric";
|
|
326
326
|
}>;
|
|
327
327
|
display: z.ZodString;
|
|
328
328
|
description: z.ZodNullable<z.ZodString>;
|
|
329
329
|
archived: z.ZodBoolean;
|
|
330
330
|
query_type: z.ZodNullable<z.ZodEnum<{
|
|
331
|
-
query: "query";
|
|
332
331
|
native: "native";
|
|
332
|
+
query: "query";
|
|
333
333
|
}>>;
|
|
334
334
|
database_id: z.ZodNullable<z.ZodNumber>;
|
|
335
335
|
table_id: z.ZodNullable<z.ZodNumber>;
|
|
@@ -364,7 +364,6 @@ declare const CardDetail: z.ZodObject<{
|
|
|
364
364
|
id: "id";
|
|
365
365
|
date: "date";
|
|
366
366
|
text: "text";
|
|
367
|
-
"temporal-unit": "temporal-unit";
|
|
368
367
|
"date/single": "date/single";
|
|
369
368
|
category: "category";
|
|
370
369
|
"location/city": "location/city";
|
|
@@ -376,6 +375,7 @@ declare const CardDetail: z.ZodObject<{
|
|
|
376
375
|
"date/quarter-year": "date/quarter-year";
|
|
377
376
|
"date/relative": "date/relative";
|
|
378
377
|
"date/all-options": "date/all-options";
|
|
378
|
+
"temporal-unit": "temporal-unit";
|
|
379
379
|
"number/!=": "number/!=";
|
|
380
380
|
"number/<=": "number/<=";
|
|
381
381
|
"number/=": "number/=";
|
|
@@ -698,26 +698,26 @@ declare const CardDetail: z.ZodObject<{
|
|
|
698
698
|
type CardDetail = z.infer<typeof CardDetail>;
|
|
699
699
|
declare const CardCompact: z.ZodObject<{
|
|
700
700
|
type: z.ZodEnum<{
|
|
701
|
-
metric: "metric";
|
|
702
701
|
question: "question";
|
|
703
702
|
model: "model";
|
|
703
|
+
metric: "metric";
|
|
704
704
|
}>;
|
|
705
|
-
name: z.ZodString;
|
|
706
|
-
database_id: z.ZodNullable<z.ZodNumber>;
|
|
707
705
|
id: z.ZodNumber;
|
|
708
|
-
|
|
706
|
+
name: z.ZodString;
|
|
709
707
|
description: z.ZodNullable<z.ZodString>;
|
|
710
708
|
archived: z.ZodBoolean;
|
|
711
709
|
display: z.ZodString;
|
|
710
|
+
database_id: z.ZodNullable<z.ZodNumber>;
|
|
711
|
+
collection_id: z.ZodNullable<z.ZodNumber>;
|
|
712
712
|
dashboard_id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
713
713
|
}, z.core.$strip>;
|
|
714
714
|
type CardCompact = z.infer<typeof CardCompact>;
|
|
715
715
|
declare const CardCreateInput: z.ZodObject<{
|
|
716
716
|
name: z.ZodString;
|
|
717
717
|
type: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
718
|
-
metric: "metric";
|
|
719
718
|
question: "question";
|
|
720
719
|
model: "model";
|
|
720
|
+
metric: "metric";
|
|
721
721
|
}>>>;
|
|
722
722
|
dataset_query: z.ZodObject<{}, z.core.$loose>;
|
|
723
723
|
display: z.ZodString;
|
|
@@ -737,7 +737,6 @@ declare const CardCreateInput: z.ZodObject<{
|
|
|
737
737
|
id: "id";
|
|
738
738
|
date: "date";
|
|
739
739
|
text: "text";
|
|
740
|
-
"temporal-unit": "temporal-unit";
|
|
741
740
|
"date/single": "date/single";
|
|
742
741
|
category: "category";
|
|
743
742
|
"location/city": "location/city";
|
|
@@ -749,6 +748,7 @@ declare const CardCreateInput: z.ZodObject<{
|
|
|
749
748
|
"date/quarter-year": "date/quarter-year";
|
|
750
749
|
"date/relative": "date/relative";
|
|
751
750
|
"date/all-options": "date/all-options";
|
|
751
|
+
"temporal-unit": "temporal-unit";
|
|
752
752
|
"number/!=": "number/!=";
|
|
753
753
|
"number/<=": "number/<=";
|
|
754
754
|
"number/=": "number/=";
|
|
@@ -826,9 +826,9 @@ type CardCreateInput = z.infer<typeof CardCreateInput>;
|
|
|
826
826
|
declare const CardUpdateInput: z.ZodObject<{
|
|
827
827
|
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
828
828
|
type: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
829
|
-
metric: "metric";
|
|
830
829
|
question: "question";
|
|
831
830
|
model: "model";
|
|
831
|
+
metric: "metric";
|
|
832
832
|
}>>>;
|
|
833
833
|
dataset_query: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
|
|
834
834
|
display: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
@@ -856,7 +856,6 @@ declare const CardUpdateInput: z.ZodObject<{
|
|
|
856
856
|
id: "id";
|
|
857
857
|
date: "date";
|
|
858
858
|
text: "text";
|
|
859
|
-
"temporal-unit": "temporal-unit";
|
|
860
859
|
"date/single": "date/single";
|
|
861
860
|
category: "category";
|
|
862
861
|
"location/city": "location/city";
|
|
@@ -868,6 +867,7 @@ declare const CardUpdateInput: z.ZodObject<{
|
|
|
868
867
|
"date/quarter-year": "date/quarter-year";
|
|
869
868
|
"date/relative": "date/relative";
|
|
870
869
|
"date/all-options": "date/all-options";
|
|
870
|
+
"temporal-unit": "temporal-unit";
|
|
871
871
|
"number/!=": "number/!=";
|
|
872
872
|
"number/<=": "number/<=";
|
|
873
873
|
"number/=": "number/=";
|
|
@@ -1213,10 +1213,10 @@ declare const CardQueryResult: z.ZodObject<{
|
|
|
1213
1213
|
type CardQueryResult = z.infer<typeof CardQueryResult>;
|
|
1214
1214
|
declare const CardQueryResultCompact: z.ZodObject<{
|
|
1215
1215
|
error: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1216
|
-
error_type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1217
1216
|
status: z.ZodString;
|
|
1218
|
-
cached: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1219
1217
|
row_count: z.ZodOptional<z.ZodNumber>;
|
|
1218
|
+
cached: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1219
|
+
error_type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1220
1220
|
data: z.ZodOptional<z.ZodObject<{
|
|
1221
1221
|
rows: z.ZodArray<z.ZodArray<z.ZodUnknown>>;
|
|
1222
1222
|
cols: z.ZodArray<z.ZodObject<{
|