@metabase/client 0.1.3 → 0.1.5

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 (194) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +2 -2
  3. package/dist/{card-DkHtPMK4.d.ts → card-B3vHu_sj.d.ts} +3 -3
  4. package/dist/{card-BBLDmhtp.d.ts → card-Dq_X3Ol2.d.ts} +16 -16
  5. package/dist/{client-eOkt3tTd.d.ts → client-DdKXWHXy.d.ts} +135 -156
  6. package/dist/client.d.ts +1 -1
  7. package/dist/client.js +3 -1
  8. package/dist/{collection-DWjkDrln.d.ts → collection-CHEIzIE_.d.ts} +4 -4
  9. package/dist/{collection-BtjnSckn.d.ts → collection-CyZqHB2n.d.ts} +23 -23
  10. package/dist/{dashboard-DtLXVgtf.d.ts → dashboard-5ZMYiLrS.d.ts} +28 -28
  11. package/dist/{dashboard-B4qWeR10.d.ts → dashboard-DSuW_p6d.d.ts} +3 -3
  12. package/dist/{data-action-DqwcRA7B.d.ts → data-action-DBO2a_Sf.d.ts} +2 -2
  13. package/dist/data-app-CeF4Tazv.d.ts +111 -0
  14. package/dist/{database-DULVEXki.d.ts → database-C69Mg39B.d.ts} +11 -11
  15. package/dist/{database-Cw8ICtQi.d.ts → database-jfZpzZcH.d.ts} +3 -3
  16. package/dist/{dataset-Du1GRHhd.d.ts → dataset-IbEfvqlT.d.ts} +23 -23
  17. package/dist/{dataset-26H-dH4N.d.ts → dataset-jwm9qB3h.d.ts} +3 -3
  18. package/dist/{dependency-elYkHuk5.d.ts → dependency-BDwZJL_k.d.ts} +13 -13
  19. package/dist/{dependency-B8aPt_IM.d.ts → dependency-BitZZ45o.d.ts} +24 -24
  20. package/dist/domain/card.d.ts +1 -1
  21. package/dist/domain/collection.d.ts +1 -1
  22. package/dist/domain/dashboard.d.ts +1 -1
  23. package/dist/domain/data-action.d.ts +1 -1
  24. package/dist/domain/data-app.d.ts +2 -2
  25. package/dist/domain/data-app.js +27 -14
  26. package/dist/domain/database.d.ts +1 -1
  27. package/dist/domain/dataset.d.ts +1 -1
  28. package/dist/domain/dependency.d.ts +1 -1
  29. package/dist/domain/eid-translation.d.ts +1 -1
  30. package/dist/domain/embedding.d.ts +1 -1
  31. package/dist/domain/field.d.ts +1 -1
  32. package/dist/domain/git-sync.d.ts +1 -1
  33. package/dist/domain/glossary.d.ts +1 -1
  34. package/dist/domain/library.d.ts +1 -1
  35. package/dist/domain/metric.d.ts +1 -1
  36. package/dist/domain/moderation-review.d.ts +1 -1
  37. package/dist/domain/notification.d.ts +1 -1
  38. package/dist/domain/parameter.d.ts +1 -1
  39. package/dist/domain/pulse.d.ts +1 -1
  40. package/dist/domain/replacement.d.ts +1 -1
  41. package/dist/domain/revision.d.ts +1 -1
  42. package/dist/domain/search.d.ts +1 -1
  43. package/dist/domain/table.d.ts +1 -1
  44. package/dist/domain/timeline.d.ts +1 -1
  45. package/dist/domain/transform-dag-run.d.ts +1 -1
  46. package/dist/domain/transform-inspector.d.ts +1 -1
  47. package/dist/domain/transform-job.d.ts +1 -1
  48. package/dist/domain/transform-python.d.ts +1 -1
  49. package/dist/domain/transform-test.d.ts +2 -2
  50. package/dist/domain/transform-test.js +5 -1
  51. package/dist/domain/transform.d.ts +1 -1
  52. package/dist/{eid-translation-CP79Tz71.d.ts → eid-translation-nuhr8St2.d.ts} +10 -10
  53. package/dist/{embedding-oU3gqfgX.d.ts → embedding-Cz3RUJYf.d.ts} +1 -1
  54. package/dist/{erd-D2fpjDTj.d.ts → erd-DqG1DNRX.d.ts} +1 -1
  55. package/dist/{errors-DdMlaXqq.js → errors-D5mjCJCW.js} +12 -4
  56. package/dist/errors.d.ts +1 -1
  57. package/dist/{features-SMSfJhB6.d.ts → features-CpR6ZyvS.d.ts} +5 -1
  58. package/dist/{field-D-kF3G7v.d.ts → field-BhqgbKia.d.ts} +2 -2
  59. package/dist/{field-awM3Y7IP.d.ts → field-D84ql2Go.d.ts} +2 -2
  60. package/dist/{git-sync-8Tk8TirZ.d.ts → git-sync-ClRBckWI.d.ts} +1 -1
  61. package/dist/{git-sync-nvbSaNfS.d.ts → git-sync-_E3O8gGu.d.ts} +6 -6
  62. package/dist/{glossary-CQMSJmIx.d.ts → glossary-BHhfqyvP.d.ts} +2 -2
  63. package/dist/{glossary-CHK3elPj.d.ts → glossary-D2Q66pW3.d.ts} +1 -1
  64. package/dist/http/errors.d.ts +1 -1
  65. package/dist/http/errors.js +1 -1
  66. package/dist/http/oauth.js +1 -1
  67. package/dist/http/transport.d.ts +1 -1
  68. package/dist/http/transport.js +1 -1
  69. package/dist/index.d.ts +38 -38
  70. package/dist/index.js +5 -5
  71. package/dist/{input-gates-DwKoTJVQ.d.ts → input-gates-DQuCzfo6.d.ts} +1 -1
  72. package/dist/{json-DvOVLFVY.d.ts → json-BqBfc8w1.d.ts} +1 -1
  73. package/dist/json.d.ts +1 -1
  74. package/dist/{library-B9pEq7qP.d.ts → library-BihgcDZS.d.ts} +2 -2
  75. package/dist/{measure-D4ArCbsa.d.ts → measure-CO6dcDQ2.d.ts} +1 -1
  76. package/dist/{metric-BtEVH_Yp.d.ts → metric-DXbXFDOk.d.ts} +5 -5
  77. package/dist/{moderation-review-B4RUTZ6_.d.ts → moderation-review-B33XQU68.d.ts} +3 -3
  78. package/dist/{notification-D1MThyKE.d.ts → notification-BY2JEjKp.d.ts} +2 -2
  79. package/dist/{notification-BsuPAfMW.d.ts → notification-D7X382Y9.d.ts} +2 -2
  80. package/dist/{paginate-Du9kUbXZ.d.ts → paginate-Bgcj4F03.d.ts} +1 -1
  81. package/dist/paginate.d.ts +1 -1
  82. package/dist/{parameter-ak-J-IOj.d.ts → parameter-YAZEmuDI.d.ts} +4 -4
  83. package/dist/{pulse-0LG3K6qO.d.ts → pulse-DlEp937s.d.ts} +13 -13
  84. package/dist/{pulse-drQKS_pg.d.ts → pulse-mD_qiUho.d.ts} +2 -2
  85. package/dist/{refusal-B9aeHMc9.js → refusal-CvN0pxPR.js} +1 -1
  86. package/dist/{replacement-CyvtbxGg.d.ts → replacement-Bpn3UQWy.d.ts} +13 -13
  87. package/dist/{replacement-g3IKzPPj.d.ts → replacement-DIPomAwo.d.ts} +3 -3
  88. package/dist/{requirement-check-Nv0trVbp.d.ts → requirement-check-DH-EZ8Nx.d.ts} +2 -2
  89. package/dist/{requirements-Dx_ZVzl7.d.ts → requirements-CGEeSEwC.d.ts} +5 -5
  90. package/dist/resources/api-key.d.ts +1 -1
  91. package/dist/resources/card.d.ts +1 -1
  92. package/dist/resources/collection.d.ts +1 -1
  93. package/dist/resources/collection.js +1 -1
  94. package/dist/resources/content-translation.d.ts +1 -1
  95. package/dist/resources/content-translation.js +1 -1
  96. package/dist/resources/dashboard.d.ts +1 -1
  97. package/dist/resources/dashboard.js +1 -1
  98. package/dist/resources/data-action.d.ts +2 -2
  99. package/dist/resources/data-action.js +1 -1
  100. package/dist/resources/data-app.d.ts +35 -52
  101. package/dist/resources/data-app.js +23 -38
  102. package/dist/resources/database.d.ts +1 -1
  103. package/dist/resources/dataset.d.ts +1 -1
  104. package/dist/resources/dependency.d.ts +1 -1
  105. package/dist/resources/dependency.js +1 -1
  106. package/dist/resources/document.d.ts +2 -9
  107. package/dist/resources/document.js +1 -1
  108. package/dist/resources/eid-translation.d.ts +2 -2
  109. package/dist/resources/erd.d.ts +1 -1
  110. package/dist/resources/erd.js +1 -1
  111. package/dist/resources/field.d.ts +1 -1
  112. package/dist/resources/field.js +1 -1
  113. package/dist/resources/git-sync.d.ts +1 -1
  114. package/dist/resources/git-sync.js +2 -2
  115. package/dist/resources/glossary.d.ts +1 -1
  116. package/dist/resources/library.d.ts +1 -1
  117. package/dist/resources/library.js +1 -1
  118. package/dist/resources/measure.d.ts +1 -1
  119. package/dist/resources/measure.js +1 -1
  120. package/dist/resources/metric.d.ts +1 -1
  121. package/dist/resources/metric.js +1 -1
  122. package/dist/resources/moderation-review.d.ts +1 -1
  123. package/dist/resources/moderation-review.js +1 -1
  124. package/dist/resources/notification.d.ts +1 -1
  125. package/dist/resources/optional-parsed.d.ts +1 -1
  126. package/dist/resources/permission.d.ts +1 -1
  127. package/dist/resources/pivot-export.d.ts +1 -1
  128. package/dist/resources/pulse.d.ts +1 -1
  129. package/dist/resources/replacement.d.ts +1 -1
  130. package/dist/resources/replacement.js +1 -1
  131. package/dist/resources/revision.d.ts +1 -1
  132. package/dist/resources/revision.js +1 -1
  133. package/dist/resources/search.d.ts +1 -1
  134. package/dist/resources/search.js +1 -1
  135. package/dist/resources/segment.d.ts +1 -1
  136. package/dist/resources/session.d.ts +8 -0
  137. package/dist/resources/session.js +14 -0
  138. package/dist/resources/setting.d.ts +1 -1
  139. package/dist/resources/setup.d.ts +1 -1
  140. package/dist/resources/snippet.d.ts +1 -1
  141. package/dist/resources/table.d.ts +1 -1
  142. package/dist/resources/table.js +1 -1
  143. package/dist/resources/timeline-event.d.ts +2 -2
  144. package/dist/resources/timeline.d.ts +1 -1
  145. package/dist/resources/transform-dag-run.d.ts +2 -2
  146. package/dist/resources/transform-dag-run.js +1 -1
  147. package/dist/resources/transform-inspector.d.ts +2 -2
  148. package/dist/resources/transform-inspector.js +1 -1
  149. package/dist/resources/transform-job.d.ts +1 -1
  150. package/dist/resources/transform-job.js +1 -1
  151. package/dist/resources/transform-python.d.ts +1 -1
  152. package/dist/resources/transform-python.js +1 -1
  153. package/dist/resources/transform-tag.d.ts +1 -1
  154. package/dist/resources/transform-tag.js +1 -1
  155. package/dist/resources/transform-test.d.ts +1 -1
  156. package/dist/resources/transform-test.js +1 -1
  157. package/dist/resources/transform.d.ts +1 -1
  158. package/dist/resources/transform.js +1 -1
  159. package/dist/resources/upload.d.ts +1 -1
  160. package/dist/resources/user.d.ts +1 -1
  161. package/dist/{revision-Cft5Lcev.d.ts → revision-C3d3H6M1.d.ts} +1 -1
  162. package/dist/{search-DX1IVRRC.d.ts → search-CcMYvNrg.d.ts} +2 -2
  163. package/dist/{search-BUr4r7d2.d.ts → search-VlZ0qE4k.d.ts} +9 -9
  164. package/dist/{segment-c2EDEJNd.d.ts → segment-vL_lWbxX.d.ts} +1 -1
  165. package/dist/signal.d.ts +1 -1
  166. package/dist/{snippet-CSt-f812.d.ts → snippet-CR3Qw7Vj.d.ts} +1 -1
  167. package/dist/{table-R-q8w__K.d.ts → table-CYBfgiXd.d.ts} +21 -21
  168. package/dist/{table-BA-k8Zgt.d.ts → table-MNH1ybH1.d.ts} +10 -10
  169. package/dist/{timeline-B35sx1FM.d.ts → timeline-BdF_aI5F.d.ts} +1 -1
  170. package/dist/{timeline-D3Clk0_n.d.ts → timeline-DR-yCbB2.d.ts} +2 -2
  171. package/dist/{transform-C5thnJwW.d.ts → transform-DXcm0NVR.d.ts} +15 -15
  172. package/dist/{transform-DzgPup_a.d.ts → transform-Dh1ZDOJ7.d.ts} +12 -12
  173. package/dist/{transform-dag-run-BgZwv1yx.d.ts → transform-dag-run-BSrdrjaK.d.ts} +4 -4
  174. package/dist/{transform-inspector-BUYBt6--.d.ts → transform-inspector-DMXcBC0h.d.ts} +3 -3
  175. package/dist/{transform-job-D8jTQtdX.d.ts → transform-job-DHAQGfWg.d.ts} +4 -4
  176. package/dist/{transform-job-DtLWrsyH.d.ts → transform-job-DzP5HoUy.d.ts} +6 -6
  177. package/dist/{transform-python-DtL3xxMj.d.ts → transform-python-igNhtjTv.d.ts} +1 -1
  178. package/dist/{transform-test-B_HR-yKA.d.ts → transform-test-CPlCdxNq.d.ts} +2 -2
  179. package/dist/{transform-test-CeMzDpUC.d.ts → transform-test-DpTJm7H7.d.ts} +3 -2
  180. package/dist/{transport-HP7cyo9N.js → transport-D52WFGBR.js} +1 -1
  181. package/dist/{transport-CyHAGDqx.d.ts → transport-DZjspEuv.d.ts} +7 -3
  182. package/dist/{upload-BSixoElJ.d.ts → upload-B3qYWIWN.d.ts} +1 -1
  183. package/dist/version/capability-error.d.ts +1 -1
  184. package/dist/version/capability-error.js +1 -1
  185. package/dist/version/features.d.ts +1 -1
  186. package/dist/version/features.js +1 -0
  187. package/dist/version/input-gates.d.ts +1 -1
  188. package/dist/version/probe.d.ts +1 -1
  189. package/dist/version/profile.d.ts +1 -1
  190. package/dist/version/requirement-check.d.ts +1 -1
  191. package/dist/version/requirements.d.ts +1 -1
  192. package/dist/version/requirements.js +4 -4
  193. package/package.json +1 -1
  194. package/dist/data-app-CqP5_fpB.d.ts +0 -76
package/CHANGELOG.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  Notable changes to `@metabase/client`.
4
4
 
5
+ ## 0.1.5
6
+
7
+ - `session.properties()` returns the server's session properties (`GET /api/session/properties`): the settings the caller may read, including the server's version and the premium features its license grants. It always sends the request, never answering from a profile the client holds. The client treats the answer as it treats its own probe of the server: the answer becomes the profile `client.server()` and `client.verifiedServer()` return, and is passed to `onServerProbed`.
8
+
9
+ ## 0.1.4
10
+
11
+ - A data app changes in Metabase only through a repository import, so `dataApp.create`, `dataApp.replaceBundle`, `dataApp.typedSchema` and `dataApp.remove` are gone, with `DataAppCreateInput`. `dataApp.update` takes only `enabled` (`DataAppUpdateInput`).
12
+ - `dataApp.list` takes no filter, and `DataAppListFilter` is gone.
13
+ - `dataApp.generateSchema`, `dataApp.generateQueries` and `dataApp.generateActions` return the files of an app's repository as `DataAppGeneratedFiles`: its `src/metabase.schema.ts`, and the YAML of the questions and implicit actions its `defineQuery` and `defineAction` exports define (`DataAppGenerateQueriesInput`, `DataAppGenerateActionsInput`, `DataAppQueryDefinition`, `DataAppActionDefinition`).
14
+
5
15
  ## 0.1.3
6
16
 
7
17
  - `dataAction.create` creates an implicit action on a table as well as a query action. `DataActionCreateInput` is a union on `type`: a `"query"` body takes `dataset_query`, an `"implicit"` one takes `kind` (`ImplicitActionKind`, on the barrel) and `table_id`. Neither takes `database_id`, which the server derives from the query.
package/README.md CHANGED
@@ -405,7 +405,7 @@ An `HttpError`'s `serverMessage` is what the server itself said about the failur
405
405
 
406
406
  `PartialWriteError` (category `partial-write`, not retryable) is a write the server answered as a success having applied all but one field: neither a failure nor a success, and repeating it rewrites what landed while leaving that field as it was. Its `PartialWriteDetail` names the `method`, `path` and `field`, the value `requested`, and in `answered` a `PartialWriteAnswer`: `PartialWriteReported` (`{ kind: "reported", value: number | null }`, the value the server's answer reported, `null` when it reported the field empty) or `PartialWriteUnreported` (`{ kind: "unreported" }`, an answer that left the field out).
407
407
 
408
- An `HttpError` also carries `errorCode`, the envelope's `error-code` when the throw site published a machine-readable name for the answer, else `null`. A transform test's `create`, `update` and `run` refuse that way when the server declines to run the test at all, and `isTransformTestRefusalCode(code)` narrows the code to the closed `TransformTestRefusalCode` vocabulary. `create` and `update` answer the authoring refusals at 400 (`transform-test.missing-inputs`, `unused-inputs`, `duplicate-input-table`, `unparseable-source`, `unremapped-reference`) and the environment ones at 422 (`unsupported-transform`, `unsupported-driver`); `run` adds `setup-failed` and `transform-failed`, also 422. The remaining names in the vocabulary (`unknown-column`, `ambiguous-column`, `unsupported-format`, `expectation-failed`) never refuse a run: they arrive as one expectation's own `error`, whose `type` is the server's internal name for the same code. A failing expectation is a result, not a refusal: `run` answers a `TransformTestRunResult` whose `status` is `failed` and whose expectations report what they found.
408
+ An `HttpError` also carries `errorCode`, the envelope's `error-code` when the throw site published a machine-readable name for the answer, else `null`. A transform test's `create`, `update` and `run` refuse that way when the server declines to run the test at all, and `isTransformTestRefusalCode(code)` narrows the code to the closed `TransformTestRefusalCode` vocabulary, while `isTransformTestCode(code)` accepts any `transform-test.*` code, including one newer than this client. A refusal that names tables (`missing-inputs`, `unused-inputs`, `duplicate-input-table`) carries them on `HttpError.tables`. `create` and `update` answer the authoring refusals at 400 (`transform-test.missing-inputs`, `unused-inputs`, `duplicate-input-table`, `unparseable-source`, `unremapped-reference`) and the environment ones at 422 (`unsupported-transform`, `unsupported-driver`); `run` adds `setup-failed` and `transform-failed`, also 422. The remaining names in the vocabulary (`unknown-column`, `ambiguous-column`, `unsupported-format`, `expectation-failed`) never refuse a run: they arrive as one expectation's own `error`, whose `type` is the server's internal name for the same code. A failing expectation is a result, not a refusal: `run` answers a `TransformTestRunResult` whose `status` is `failed` and whose expectations report what they found.
409
409
 
410
410
  Two helpers read raw thrown values away from the HTTP boundary. `isFileNotFoundError(value)` reports a
411
411
  Node `ENOENT` filesystem error — a missing file on disk, never an HTTP 404, which arrives as an
@@ -431,7 +431,7 @@ Unless the caller passes `metadata` from `tryDiscoverMetadata`, which makes the
431
431
 
432
432
  `probeServer(client)` reads `/api/session/properties` and returns a `ServerInfo`: the version, the edition the tag stamps, the build date and hash, and the token-feature map, each but the version `null` when the server does not report it. `parseTag(tag)` reads a tag into a `ServerVersion`, a `ReleaseVersion` (`{ kind: "release", tag, major, patch }`) or a `DevelopmentBuild` (`{ kind: "development", tag }`); `describeVersion(version)` words it for a message (the tag, or `development build <tag>`); `StoredServerVersion` reads a persisted version back by re-deriving it from its tag; `editionFromTag(tag)` reads the `Edition` (`"oss"` | `"ee"`) Metabase stamps into the tag's leading number (`v0.` / `v1.`, a hotfix's fourth number and a `-SNAPSHOT` suffix included), `null` when the tag carries none.
433
433
 
434
- `createServerProfile(info)` turns a `ServerInfo` into the `ServerProfile` the client reasons with: the raw facts (`version`, `buildDate`, `hash`, `edition`, `tokenFeatures`), the derived `features`, and `skew` (`Skew`) — `"supported"` inside `KNOWN_RANGE` (`{ min, max }`, the majors the client is built against), `"older-than-known"` below it (the server keeps its real major and each refusal is explained feature by feature), `"newer-than-known"` above it, `"development"` for a development build. A newer release is evaluated as `KNOWN_RANGE.max + 1`, a development build as `"development"` (`RuleMajor`), which passes every `since` and fails every `until`; the edition of a server whose tag carries none is `"ee"` when any premium feature is granted and `"oss"` otherwise. `client.server()` returns the profile a read chooses its shape by: the profile in force, which is the newest probe answer this client applied, else the one passed as `ClientOptions.server`, else one probed now; the newest probe started is awaited while it is in flight, and its failure falls back to the profile in force by then; `client.verifiedServer()` returns a profile the client probed itself, never the one passed in: every caller shares the newest probe started, in flight or settled, and when it fails the newest answer the client applied stands in for it. That answer is memoized until the client reads the session properties again (a git-sync branch read does, and so does a pivoted export's check of the `enable-pivoted-exports` setting), so a long-lived consumer whose server is upgraded or licensed mid-session builds a new client to see it. Probes are ordered by when they started, and an answer is applied unless a probe started after it has been applied already. `ClientOptions.onServerProbed(info, profile)` is called with the `ServerInfo` of every probe answer the client applies and the `ServerProfile` derived from it, so a consumer that passes a cached profile can keep its cache current: it never sees an older answer after a newer one, and an answer outliving a later probe that failed still reaches it; it runs before the calls waiting on the probe resume and is not awaited, so a consumer with slow work (a cache write) keeps that promise and settles it itself; and a hook that throws fails the probe, which is then not applied. `client.probesSettled()` resolves once no probe the client started is in flight, whatever each answered, and starts none, so a consumer about to exit can wait for every call of the hook first; each probe is bounded by its own timeout and the client's signal. A shape error names the profile in force when its request started — the newest probe answer applied, or else the one passed in — which is the profile its reader was chosen for; `getServerTag` names the server in an HTTP error and in a shape error read with no profile in force, and defaults to the tag of the profile in force. There is no option to assume a version.
434
+ `createServerProfile(info)` turns a `ServerInfo` into the `ServerProfile` the client reasons with: the raw facts (`version`, `buildDate`, `hash`, `edition`, `tokenFeatures`), the derived `features`, and `skew` (`Skew`) — `"supported"` inside `KNOWN_RANGE` (`{ min, max }`, the majors the client is built against), `"older-than-known"` below it (the server keeps its real major and each refusal is explained feature by feature), `"newer-than-known"` above it, `"development"` for a development build. A newer release is evaluated as `KNOWN_RANGE.max + 1`, a development build as `"development"` (`RuleMajor`), which passes every `since` and fails every `until`; the edition of a server whose tag carries none is `"ee"` when any premium feature is granted and `"oss"` otherwise. `client.server()` returns the profile a read chooses its shape by: the profile in force, which is the newest probe answer this client applied, else the one passed as `ClientOptions.server`, else one probed now; the newest probe started is awaited while it is in flight, and its failure falls back to the profile in force by then; `client.verifiedServer()` returns a profile the client probed itself, never the one passed in: every caller shares the newest probe started, in flight or settled, and when it fails the newest answer the client applied stands in for it. That answer is memoized until the client reads the session properties again (`mb.session.properties()` does, a git-sync branch read does, and so does a pivoted export's check of the `enable-pivoted-exports` setting), so a long-lived consumer whose server is upgraded or licensed mid-session builds a new client to see it. Probes are ordered by when they started, and an answer is applied unless a probe started after it has been applied already. `ClientOptions.onServerProbed(info, profile)` is called with the `ServerInfo` of every probe answer the client applies and the `ServerProfile` derived from it, so a consumer that passes a cached profile can keep its cache current: it never sees an older answer after a newer one, and an answer outliving a later probe that failed still reaches it; it runs before the calls waiting on the probe resume and is not awaited, so a consumer with slow work (a cache write) keeps that promise and settles it itself; and a hook that throws fails the probe, which is then not applied. `client.probesSettled()` resolves once no probe the client started is in flight, whatever each answered, and starts none, so a consumer about to exit can wait for every call of the hook first; each probe is bounded by its own timeout and the client's signal. A shape error names the profile in force when its request started — the newest probe answer applied, or else the one passed in — which is the profile its reader was chosen for; `getServerTag` names the server in an HTTP error and in a shape error read with no profile in force, and defaults to the tag of the profile in force. There is no option to assume a version.
435
435
 
436
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.
437
437
 
@@ -1,7 +1,7 @@
1
- import { f as RequestOptions, h as Transport } from "./transport-CyHAGDqx.js";
1
+ import { f as RequestOptions, h as Transport } from "./transport-DZjspEuv.js";
2
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-BBLDmhtp.js";
4
- import { r as QueryMetadata } from "./dataset-Du1GRHhd.js";
3
+ import { a as CardListFilter, i as CardDetail, l as CardUpdateInput, o as CardQueryResult, r as CardCreateInput, t as Card } from "./card-Dq_X3Ol2.js";
4
+ import { r as QueryMetadata } from "./dataset-IbEfvqlT.js";
5
5
  import { n as ExportFormat } from "./query-Xsin530u.js";
6
6
  //#region src/resources/card.d.ts
7
7
  interface CardListParams {
@@ -2,8 +2,8 @@ import { z } from "zod";
2
2
  //#region src/domain/card.d.ts
3
3
  declare const CardType: z.ZodEnum<{
4
4
  metric: "metric";
5
- model: "model";
6
5
  question: "question";
6
+ model: "model";
7
7
  }>;
8
8
  type CardType = z.infer<typeof CardType>;
9
9
  declare const CardListFilter: z.ZodEnum<{
@@ -279,8 +279,8 @@ declare const Card: z.ZodObject<{
279
279
  name: z.ZodString;
280
280
  type: z.ZodEnum<{
281
281
  metric: "metric";
282
- model: "model";
283
282
  question: "question";
283
+ model: "model";
284
284
  }>;
285
285
  display: z.ZodString;
286
286
  description: z.ZodNullable<z.ZodString>;
@@ -321,8 +321,8 @@ declare const CardDetail: z.ZodObject<{
321
321
  name: z.ZodString;
322
322
  type: z.ZodEnum<{
323
323
  metric: "metric";
324
- model: "model";
325
324
  question: "question";
325
+ model: "model";
326
326
  }>;
327
327
  display: z.ZodString;
328
328
  description: z.ZodNullable<z.ZodString>;
@@ -362,9 +362,8 @@ declare const CardDetail: z.ZodObject<{
362
362
  number: "number";
363
363
  boolean: "boolean";
364
364
  id: "id";
365
- date: "date";
366
365
  text: "text";
367
- "temporal-unit": "temporal-unit";
366
+ date: "date";
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/=";
@@ -699,25 +699,25 @@ type CardDetail = z.infer<typeof CardDetail>;
699
699
  declare const CardCompact: z.ZodObject<{
700
700
  type: z.ZodEnum<{
701
701
  metric: "metric";
702
- model: "model";
703
702
  question: "question";
703
+ model: "model";
704
704
  }>;
705
705
  id: z.ZodNumber;
706
706
  name: z.ZodString;
707
707
  description: z.ZodNullable<z.ZodString>;
708
708
  archived: z.ZodBoolean;
709
709
  collection_id: z.ZodNullable<z.ZodNumber>;
710
+ dashboard_id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
710
711
  display: z.ZodString;
711
712
  database_id: z.ZodNullable<z.ZodNumber>;
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
718
  metric: "metric";
719
- model: "model";
720
719
  question: "question";
720
+ model: "model";
721
721
  }>>>;
722
722
  dataset_query: z.ZodObject<{}, z.core.$loose>;
723
723
  display: z.ZodString;
@@ -735,9 +735,8 @@ declare const CardCreateInput: z.ZodObject<{
735
735
  number: "number";
736
736
  boolean: "boolean";
737
737
  id: "id";
738
- date: "date";
739
738
  text: "text";
740
- "temporal-unit": "temporal-unit";
739
+ date: "date";
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/=";
@@ -827,8 +827,8 @@ declare const CardUpdateInput: z.ZodObject<{
827
827
  name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
828
828
  type: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
829
829
  metric: "metric";
830
- model: "model";
831
830
  question: "question";
831
+ model: "model";
832
832
  }>>>;
833
833
  dataset_query: z.ZodOptional<z.ZodObject<{}, z.core.$loose>>;
834
834
  display: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -838,8 +838,8 @@ declare const CardUpdateInput: z.ZodObject<{
838
838
  enable_embedding: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
839
839
  embedding_type: z.ZodOptional<z.ZodNullable<z.ZodString>>;
840
840
  embedding_params: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodEnum<{
841
- enabled: "enabled";
842
841
  disabled: "disabled";
842
+ enabled: "enabled";
843
843
  locked: "locked";
844
844
  }>>>>;
845
845
  collection_id: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -854,9 +854,8 @@ declare const CardUpdateInput: z.ZodObject<{
854
854
  number: "number";
855
855
  boolean: "boolean";
856
856
  id: "id";
857
- date: "date";
858
857
  text: "text";
859
- "temporal-unit": "temporal-unit";
858
+ date: "date";
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<{