@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.
Files changed (220) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +10 -6
  3. package/dist/api-key-DJeN1-7G.d.ts +46 -0
  4. package/dist/auth/credential.d.ts +1 -1
  5. package/dist/auth/oauth-login.d.ts +1 -1
  6. package/dist/auth/oauth-login.js +1 -1
  7. package/dist/auth/oauth-session.d.ts +1 -1
  8. package/dist/{card-BZx4NSr-.d.ts → card-CbV6hLYH.d.ts} +4 -4
  9. package/dist/{card-B6merEUN.d.ts → card-CrSywvOt.d.ts} +18 -18
  10. package/dist/{client-DNRvXFRm.d.ts → client-cBi6_RQs.d.ts} +289 -185
  11. package/dist/client.d.ts +1 -1
  12. package/dist/client.js +4 -0
  13. package/dist/{collection-Bib61WiV.d.ts → collection-Bmtisr3r.d.ts} +47 -47
  14. package/dist/{collection-CqtGPi4W.d.ts → collection-Q9FNMiRh.d.ts} +18 -4
  15. package/dist/{credential-6aOEGqMH.d.ts → credential-B6fKSvqp.d.ts} +1 -1
  16. package/dist/{dashboard-XTe46250.d.ts → dashboard-CknUcTp8.d.ts} +3 -3
  17. package/dist/{dashboard-z9i1VUZC.d.ts → dashboard-DBdEehA9.d.ts} +33 -25
  18. package/dist/{data-action-rS27f2Ji.d.ts → data-action-CqqZ0JYg.d.ts} +6 -4
  19. package/dist/data-app-MoMS9VUr.d.ts +76 -0
  20. package/dist/{database-DqTespfa.d.ts → database-Bs5WQOOZ.d.ts} +3 -3
  21. package/dist/{database-BLUMlywE.d.ts → database-CYNLJ8AZ.d.ts} +18 -18
  22. package/dist/{dataset-C6lX1-cr.d.ts → dataset-cg8ZZrOP.d.ts} +85 -85
  23. package/dist/{dataset-Cj3XuKLe.d.ts → dataset-dzWljE_C.d.ts} +3 -3
  24. package/dist/{dependency-fN5_7a22.d.ts → dependency-CL-YG9KH.d.ts} +26 -26
  25. package/dist/{dependency-D8Qs5Xdx.d.ts → dependency-VqvLTDAU.d.ts} +248 -196
  26. package/dist/{document-oZNDbDfx.d.ts → document-tLd6pYWe.d.ts} +2 -2
  27. package/dist/domain/api-key.d.ts +2 -0
  28. package/dist/domain/api-key.js +31 -0
  29. package/dist/domain/card.d.ts +1 -1
  30. package/dist/domain/collection.d.ts +1 -1
  31. package/dist/domain/dashboard.d.ts +2 -2
  32. package/dist/domain/dashboard.js +21 -4
  33. package/dist/domain/data-action.d.ts +2 -2
  34. package/dist/domain/data-action.js +8 -2
  35. package/dist/domain/data-app.d.ts +2 -0
  36. package/dist/domain/data-app.js +52 -0
  37. package/dist/domain/database.d.ts +1 -1
  38. package/dist/domain/dataset.d.ts +1 -1
  39. package/dist/domain/dependency.d.ts +1 -1
  40. package/dist/domain/dependency.js +6 -3
  41. package/dist/domain/document.d.ts +1 -1
  42. package/dist/domain/eid-translation.d.ts +1 -1
  43. package/dist/domain/field.d.ts +2 -2
  44. package/dist/domain/field.js +8 -2
  45. package/dist/domain/git-sync.d.ts +1 -1
  46. package/dist/domain/library.d.ts +2 -2
  47. package/dist/domain/library.js +8 -2
  48. package/dist/domain/measure.d.ts +1 -1
  49. package/dist/domain/measure.js +3 -1
  50. package/dist/domain/metric.d.ts +1 -1
  51. package/dist/domain/moderation-review.d.ts +1 -1
  52. package/dist/domain/notification.d.ts +2 -2
  53. package/dist/domain/notification.js +6 -1
  54. package/dist/domain/parameter.d.ts +1 -1
  55. package/dist/domain/pulse.d.ts +2 -2
  56. package/dist/domain/pulse.js +10 -3
  57. package/dist/domain/replacement.d.ts +1 -1
  58. package/dist/domain/revision.d.ts +2 -2
  59. package/dist/domain/revision.js +29 -2
  60. package/dist/domain/search.d.ts +1 -1
  61. package/dist/domain/segment.d.ts +1 -1
  62. package/dist/domain/segment.js +3 -1
  63. package/dist/domain/setup.d.ts +1 -1
  64. package/dist/domain/setup.js +1 -1
  65. package/dist/domain/snippet.d.ts +1 -1
  66. package/dist/domain/table.d.ts +2 -2
  67. package/dist/domain/table.js +35 -4
  68. package/dist/domain/timeline.d.ts +1 -1
  69. package/dist/domain/transform-dag-run.d.ts +1 -1
  70. package/dist/domain/transform-inspector.d.ts +1 -1
  71. package/dist/domain/transform-job.d.ts +2 -2
  72. package/dist/domain/transform-job.js +8 -2
  73. package/dist/domain/transform-python.d.ts +2 -2
  74. package/dist/domain/transform-python.js +15 -3
  75. package/dist/domain/transform-tag.d.ts +1 -1
  76. package/dist/domain/transform-test.d.ts +1 -1
  77. package/dist/domain/transform.d.ts +2 -2
  78. package/dist/domain/transform.js +76 -7
  79. package/dist/domain/user.d.ts +1 -1
  80. package/dist/domain/user.js +1 -1
  81. package/dist/{eid-translation-nuhr8St2.d.ts → eid-translation-aQSffx0o.d.ts} +40 -40
  82. package/dist/{erd-BujD227Y.d.ts → erd-DCgdEC2S.d.ts} +1 -1
  83. package/dist/errors.d.ts +1 -1
  84. package/dist/{features-CnFkUCj2.d.ts → features-SMSfJhB6.d.ts} +36 -2
  85. package/dist/{field-Bqn10Fq_.d.ts → field-ozrfbvUd.d.ts} +2 -2
  86. package/dist/{field-BCRO19mk.d.ts → field-tqQPtVuR.d.ts} +9 -7
  87. package/dist/{git-sync-gAMKsZgN.d.ts → git-sync-5lFWX1ds.d.ts} +3 -3
  88. package/dist/{git-sync-DNXrNVCW.d.ts → git-sync-QL9Nu6gP.d.ts} +10 -10
  89. package/dist/{glossary-CqFlzW33.d.ts → glossary-DwS7QVrl.d.ts} +1 -1
  90. package/dist/http/errors.d.ts +1 -1
  91. package/dist/http/oauth.d.ts +1 -1
  92. package/dist/http/oauth.js +47 -36
  93. package/dist/http/transport.d.ts +1 -1
  94. package/dist/index.d.ts +48 -46
  95. package/dist/index.js +8 -6
  96. package/dist/input-gate-registry-Dai7SfXb.js +14 -0
  97. package/dist/input-gates-DwKoTJVQ.d.ts +28 -0
  98. package/dist/{json-CZvjc3--.d.ts → json-DwGOvRtS.d.ts} +1 -1
  99. package/dist/json-pointer.d.ts +2 -1
  100. package/dist/json-pointer.js +4 -1
  101. package/dist/json.d.ts +1 -1
  102. package/dist/{library-Cx9h_RkU.d.ts → library-B9pEq7qP.d.ts} +8 -6
  103. package/dist/{measure-CuMqPbQX.d.ts → measure-CInoXeyH.d.ts} +1 -1
  104. package/dist/{measure-KuXdjZYJ.d.ts → measure-CgH14YQZ.d.ts} +1 -1
  105. package/dist/{metric-yvehaVCS.d.ts → metric-CYOmbcM5.d.ts} +10 -10
  106. package/dist/{moderation-review-B4RUTZ6_.d.ts → moderation-review-CWUQ3_HL.d.ts} +4 -4
  107. package/dist/{notification-BT2TDAd_.d.ts → notification-BY2JEjKp.d.ts} +68 -4
  108. package/dist/{notification-BiegPoSD.d.ts → notification-D-Hp82Pn.d.ts} +3 -3
  109. package/dist/{oauth-C4ordeoJ.d.ts → oauth-CVoZpuq8.d.ts} +4 -2
  110. package/dist/{oauth-login-D734Jvbq.js → oauth-login--tDagiZu.js} +29 -11
  111. package/dist/{oauth-login-CJsT_3EE.d.ts → oauth-login-SZ4Csai8.d.ts} +3 -2
  112. package/dist/{oauth-session-BlIlcd8Q.d.ts → oauth-session-COLH4puN.d.ts} +1 -1
  113. package/dist/{paginate-DZWvWvbm.d.ts → paginate-CaJ5usdp.d.ts} +1 -1
  114. package/dist/paginate.d.ts +1 -1
  115. package/dist/{parameter-ak-J-IOj.d.ts → parameter-BYo7uR-J.d.ts} +2 -2
  116. package/dist/{pulse-dylocLd9.d.ts → pulse-BTpSNxhT.d.ts} +2 -2
  117. package/dist/{pulse-CMc1Rwdj.d.ts → pulse-BUlfrJZH.d.ts} +23 -21
  118. package/dist/{replacement-CyvtbxGg.d.ts → replacement-BQian4vA.d.ts} +23 -23
  119. package/dist/{replacement-S9U3gApY.d.ts → replacement-Dbtvvrmz.d.ts} +11 -11
  120. package/dist/{requirement-check-CIA5IHC1.d.ts → requirement-check-CHHEHXcj.d.ts} +2 -2
  121. package/dist/{requirements-C0txASN8.d.ts → requirements-Dx_ZVzl7.d.ts} +11 -1
  122. package/dist/resources/api-key.d.ts +11 -0
  123. package/dist/resources/api-key.js +35 -0
  124. package/dist/resources/card.d.ts +1 -1
  125. package/dist/resources/collection.d.ts +1 -1
  126. package/dist/resources/collection.js +35 -6
  127. package/dist/resources/content-translation.d.ts +1 -1
  128. package/dist/resources/content-translation.js +1 -1
  129. package/dist/resources/dashboard.d.ts +1 -1
  130. package/dist/resources/dashboard.js +8 -5
  131. package/dist/resources/data-action.d.ts +3 -48
  132. package/dist/resources/data-action.js +9 -9
  133. package/dist/resources/data-app.d.ts +112 -0
  134. package/dist/resources/data-app.js +75 -0
  135. package/dist/resources/database.d.ts +1 -1
  136. package/dist/resources/dataset.d.ts +1 -1
  137. package/dist/resources/dependency.d.ts +1 -1
  138. package/dist/resources/dependency.js +13 -7
  139. package/dist/resources/document.d.ts +3 -10
  140. package/dist/resources/eid-translation.d.ts +2 -2
  141. package/dist/resources/erd.d.ts +1 -1
  142. package/dist/resources/field.d.ts +1 -1
  143. package/dist/resources/field.js +3 -2
  144. package/dist/resources/git-sync.d.ts +1 -1
  145. package/dist/resources/git-sync.js +1 -1
  146. package/dist/resources/glossary.d.ts +1 -1
  147. package/dist/resources/library.d.ts +4 -4
  148. package/dist/resources/library.js +2 -2
  149. package/dist/resources/measure.d.ts +1 -1
  150. package/dist/resources/metric.d.ts +1 -1
  151. package/dist/resources/moderation-review.d.ts +1 -1
  152. package/dist/resources/notification.d.ts +1 -1
  153. package/dist/resources/notification.js +2 -2
  154. package/dist/resources/optional-parsed.d.ts +1 -1
  155. package/dist/resources/permission.d.ts +1 -1
  156. package/dist/resources/pivot-export.d.ts +1 -1
  157. package/dist/resources/pulse.d.ts +1 -1
  158. package/dist/resources/pulse.js +3 -2
  159. package/dist/resources/replacement.d.ts +1 -1
  160. package/dist/resources/revision.d.ts +3 -3
  161. package/dist/resources/revision.js +5 -10
  162. package/dist/resources/search.d.ts +1 -1
  163. package/dist/resources/search.js +23 -2
  164. package/dist/resources/segment.d.ts +1 -1
  165. package/dist/resources/setting.d.ts +1 -1
  166. package/dist/resources/setup.d.ts +2 -2
  167. package/dist/resources/snippet.d.ts +1 -1
  168. package/dist/resources/table.d.ts +1 -1
  169. package/dist/resources/table.js +9 -10
  170. package/dist/resources/timeline-event.d.ts +2 -2
  171. package/dist/resources/timeline.d.ts +1 -1
  172. package/dist/resources/transform-dag-run.d.ts +2 -2
  173. package/dist/resources/transform-inspector.d.ts +4 -4
  174. package/dist/resources/transform-job.d.ts +1 -1
  175. package/dist/resources/transform-python.d.ts +11 -4
  176. package/dist/resources/transform-python.js +3 -2
  177. package/dist/resources/transform-tag.d.ts +1 -1
  178. package/dist/resources/transform-test.d.ts +1 -1
  179. package/dist/resources/transform.d.ts +1 -1
  180. package/dist/resources/transform.js +13 -3
  181. package/dist/resources/upload.d.ts +1 -1
  182. package/dist/resources/user.d.ts +2 -2
  183. package/dist/{revision-CQBPhohA.d.ts → revision-DNEw6S93.d.ts} +7 -5
  184. package/dist/{search-BxJipLN6.d.ts → search-BQWkdVg1.d.ts} +2 -2
  185. package/dist/{search-NZR6iRBs.d.ts → search-tK5lmRb8.d.ts} +23 -23
  186. package/dist/{segment-pj3wklGe.d.ts → segment-CbAgVO-5.d.ts} +1 -1
  187. package/dist/{segment-D2i34X9l.d.ts → segment-jyhBtOAZ.d.ts} +2 -2
  188. package/dist/{setup-Ez_U7GmM.d.ts → setup-JqcJ2unJ.d.ts} +1 -1
  189. package/dist/signal.d.ts +3 -2
  190. package/dist/signal.js +9 -4
  191. package/dist/{snippet-hEV429Pv.d.ts → snippet-C_Ilx7tR.d.ts} +2 -2
  192. package/dist/{snippet-RnnWa4TL.d.ts → snippet-DsgohpTV.d.ts} +2 -2
  193. package/dist/{table-B_lfuaHc.d.ts → table-B1pQSpTA.d.ts} +14 -14
  194. package/dist/{table-B3-UaPHa.d.ts → table-BAl8aPZZ.d.ts} +49 -44
  195. package/dist/{timeline-C2IEcRlP.d.ts → timeline-BdLvwRnl.d.ts} +2 -2
  196. package/dist/{timeline-folD3mQ_.d.ts → timeline-BfX1lMob.d.ts} +24 -24
  197. package/dist/{transform-CXOT5kFe.d.ts → transform-Ds74yPiY.d.ts} +48 -34
  198. package/dist/{transform-CDurgE1D.d.ts → transform-DwnIcpqV.d.ts} +153 -37
  199. package/dist/{transform-dag-run-BgZwv1yx.d.ts → transform-dag-run-BSrdrjaK.d.ts} +4 -4
  200. package/dist/{transform-inspector-BUYBt6--.d.ts → transform-inspector-BMaRqcRM.d.ts} +8 -8
  201. package/dist/{transform-job-29P6BULe.d.ts → transform-job-C85GxBHj.d.ts} +9 -9
  202. package/dist/{transform-job-CTJImaOd.d.ts → transform-job-Dfp9Ox0l.d.ts} +7 -5
  203. package/dist/{transform-python-DdDnW6yK.d.ts → transform-python-DtL3xxMj.d.ts} +49 -4
  204. package/dist/{transform-tag-DVUIZTEM.d.ts → transform-tag-C6j5EUkX.d.ts} +1 -1
  205. package/dist/{transform-test-A-CJYT6B.d.ts → transform-test-C3hiZ4AV.d.ts} +2 -2
  206. package/dist/{transform-test-BwuyrHpT.d.ts → transform-test-DROPvrkI.d.ts} +2 -2
  207. package/dist/{transport-E0ZaPNWJ.d.ts → transport-CS11mEqI.d.ts} +20 -6
  208. package/dist/{upload-B7PG3ePk.d.ts → upload-Bx1D7eNy.d.ts} +1 -1
  209. package/dist/{user-2r0OBoO6.d.ts → user-Sqqv7rqh.d.ts} +2 -2
  210. package/dist/version/capability-error.d.ts +1 -1
  211. package/dist/version/features.d.ts +2 -2
  212. package/dist/version/features.js +30 -2
  213. package/dist/version/input-gates.d.ts +2 -0
  214. package/dist/version/input-gates.js +13 -0
  215. package/dist/version/probe.d.ts +1 -1
  216. package/dist/version/profile.d.ts +1 -1
  217. package/dist/version/requirement-check.d.ts +1 -1
  218. package/dist/version/requirements.d.ts +1 -1
  219. package/dist/version/requirements.js +10 -0
  220. 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
- 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`.
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-6aOEGqMH.js";
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-CJsT_3EE.js";
1
+ import { n as OAuthLoginInput, r as oauthLogin, t as OAuthLoginDeps } from "../oauth-login-SZ4Csai8.js";
2
2
  export { OAuthLoginDeps, OAuthLoginInput, oauthLogin };
@@ -1,2 +1,2 @@
1
- import { t as oauthLogin } from "../oauth-login-D734Jvbq.js";
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-BlIlcd8Q.js";
1
+ import { n as revokeOAuthCredential, t as refreshOAuthCredential } from "../oauth-session-COLH4puN.js";
2
2
  export { refreshOAuthCredential, revokeOAuthCredential };
@@ -1,8 +1,8 @@
1
- import { a as CardListFilter, i as CardDetail, l as CardUpdateInput, o as CardQueryResult, r as CardCreateInput, t as Card } from "./card-B6merEUN.js";
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
- collection_id: z.ZodNullable<z.ZodNumber>;
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<{