@metabase/client 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE +661 -0
  3. package/README.md +490 -2
  4. package/dist/api-key-DJeN1-7G.d.ts +46 -0
  5. package/dist/auth/credential.d.ts +2 -0
  6. package/dist/auth/credential.js +61 -0
  7. package/dist/auth/oauth-login.d.ts +2 -0
  8. package/dist/auth/oauth-login.js +2 -0
  9. package/dist/auth/oauth-session.d.ts +2 -0
  10. package/dist/auth/oauth-session.js +31 -0
  11. package/dist/card-BxBzr5Uj.d.ts +1392 -0
  12. package/dist/card-DN0sLkCG.d.ts +33 -0
  13. package/dist/client-DdXLlH1B.d.ts +3380 -0
  14. package/dist/client.d.ts +2 -0
  15. package/dist/client.js +99 -0
  16. package/dist/collection-DGnTvD6R.d.ts +294 -0
  17. package/dist/collection-fFahL-ub.d.ts +53 -0
  18. package/dist/content-translation-zfUkE_OG.d.ts +8 -0
  19. package/dist/credential-6aOEGqMH.d.ts +30 -0
  20. package/dist/cron-DThzerR6.d.ts +9 -0
  21. package/dist/csv-upload--K35QedP.d.ts +8 -0
  22. package/dist/dashboard-CM7RmNeE.d.ts +38 -0
  23. package/dist/dashboard-DtLXVgtf.d.ts +978 -0
  24. package/dist/data-action-CkXVrOUH.d.ts +97 -0
  25. package/dist/data-app-CqP5_fpB.d.ts +76 -0
  26. package/dist/database-B0JNZjDN.d.ts +27 -0
  27. package/dist/database-BxqDmfcj.d.ts +997 -0
  28. package/dist/dataset-BBNGPVec.d.ts +4144 -0
  29. package/dist/dataset-BUirJ1rO.d.ts +23 -0
  30. package/dist/dependency-CzpXmeu7.d.ts +299 -0
  31. package/dist/dependency-arB8Cr2H.d.ts +879 -0
  32. package/dist/document-tLd6pYWe.d.ts +115 -0
  33. package/dist/domain/api-key.d.ts +2 -0
  34. package/dist/domain/api-key.js +31 -0
  35. package/dist/domain/card.d.ts +2 -0
  36. package/dist/domain/card.js +140 -0
  37. package/dist/domain/collection.d.ts +2 -0
  38. package/dist/domain/collection.js +137 -0
  39. package/dist/domain/content-translation.d.ts +2 -0
  40. package/dist/domain/content-translation.js +5 -0
  41. package/dist/domain/cron.d.ts +2 -0
  42. package/dist/domain/cron.js +5 -0
  43. package/dist/domain/dashboard.d.ts +2 -0
  44. package/dist/domain/dashboard.js +211 -0
  45. package/dist/domain/data-action.d.ts +2 -0
  46. package/dist/domain/data-action.js +91 -0
  47. package/dist/domain/data-app.d.ts +2 -0
  48. package/dist/domain/data-app.js +52 -0
  49. package/dist/domain/database.d.ts +2 -0
  50. package/dist/domain/database.js +56 -0
  51. package/dist/domain/dataset.d.ts +2 -0
  52. package/dist/domain/dataset.js +56 -0
  53. package/dist/domain/dependency.d.ts +2 -0
  54. package/dist/domain/dependency.js +168 -0
  55. package/dist/domain/document.d.ts +2 -0
  56. package/dist/domain/document.js +94 -0
  57. package/dist/domain/eid-translation.d.ts +2 -0
  58. package/dist/domain/eid-translation.js +36 -0
  59. package/dist/domain/embedding.d.ts +2 -0
  60. package/dist/domain/embedding.js +9 -0
  61. package/dist/domain/erd.d.ts +2 -0
  62. package/dist/domain/erd.js +45 -0
  63. package/dist/domain/field.d.ts +2 -0
  64. package/dist/domain/field.js +274 -0
  65. package/dist/domain/git-sync.d.ts +2 -0
  66. package/dist/domain/git-sync.js +147 -0
  67. package/dist/domain/glossary.d.ts +2 -0
  68. package/dist/domain/glossary.js +30 -0
  69. package/dist/domain/library.d.ts +2 -0
  70. package/dist/domain/library.js +89 -0
  71. package/dist/domain/measure.d.ts +2 -0
  72. package/dist/domain/measure.js +43 -0
  73. package/dist/domain/metric.d.ts +2 -0
  74. package/dist/domain/metric.js +139 -0
  75. package/dist/domain/moderation-review.d.ts +2 -0
  76. package/dist/domain/moderation-review.js +31 -0
  77. package/dist/domain/notification.d.ts +2 -0
  78. package/dist/domain/notification.js +143 -0
  79. package/dist/domain/parameter.d.ts +2 -0
  80. package/dist/domain/parameter.js +109 -0
  81. package/dist/domain/permission.d.ts +2 -0
  82. package/dist/domain/permission.js +36 -0
  83. package/dist/domain/pulse.d.ts +2 -0
  84. package/dist/domain/pulse.js +140 -0
  85. package/dist/domain/query.d.ts +2 -0
  86. package/dist/domain/query.js +13 -0
  87. package/dist/domain/replacement.d.ts +2 -0
  88. package/dist/domain/replacement.js +93 -0
  89. package/dist/domain/revision.d.ts +2 -0
  90. package/dist/domain/revision.js +90 -0
  91. package/dist/domain/search.d.ts +2 -0
  92. package/dist/domain/search.js +63 -0
  93. package/dist/domain/segment.d.ts +2 -0
  94. package/dist/domain/segment.js +46 -0
  95. package/dist/domain/session-properties.d.ts +2 -0
  96. package/dist/domain/session-properties.js +14 -0
  97. package/dist/domain/setting.d.ts +2 -0
  98. package/dist/domain/setting.js +22 -0
  99. package/dist/domain/setup.d.ts +2 -0
  100. package/dist/domain/setup.js +21 -0
  101. package/dist/domain/snippet.d.ts +2 -0
  102. package/dist/domain/snippet.js +38 -0
  103. package/dist/domain/table.d.ts +2 -0
  104. package/dist/domain/table.js +187 -0
  105. package/dist/domain/text.d.ts +5 -0
  106. package/dist/domain/text.js +6 -0
  107. package/dist/domain/timeline.d.ts +2 -0
  108. package/dist/domain/timeline.js +97 -0
  109. package/dist/domain/transform-dag-run.d.ts +2 -0
  110. package/dist/domain/transform-dag-run.js +19 -0
  111. package/dist/domain/transform-inspector.d.ts +2 -0
  112. package/dist/domain/transform-inspector.js +142 -0
  113. package/dist/domain/transform-job.d.ts +2 -0
  114. package/dist/domain/transform-job.js +115 -0
  115. package/dist/domain/transform-python.d.ts +2 -0
  116. package/dist/domain/transform-python.js +51 -0
  117. package/dist/domain/transform-tag.d.ts +2 -0
  118. package/dist/domain/transform-tag.js +17 -0
  119. package/dist/domain/transform-test.d.ts +2 -0
  120. package/dist/domain/transform-test.js +176 -0
  121. package/dist/domain/transform.d.ts +2 -0
  122. package/dist/domain/transform.js +304 -0
  123. package/dist/domain/upload.d.ts +2 -0
  124. package/dist/domain/upload.js +13 -0
  125. package/dist/domain/user.d.ts +2 -0
  126. package/dist/domain/user.js +16 -0
  127. package/dist/eid-translation-CH6NPWd-.d.ts +143 -0
  128. package/dist/embedding-oU3gqfgX.d.ts +10 -0
  129. package/dist/erd-BdeFEeSy.d.ts +842 -0
  130. package/dist/erd-CbV7xvAc.d.ts +51 -0
  131. package/dist/errors-DdMlaXqq.js +330 -0
  132. package/dist/errors.d.ts +2 -0
  133. package/dist/errors.js +189 -0
  134. package/dist/features-SMSfJhB6.d.ts +295 -0
  135. package/dist/field-D1Pfk-0S.d.ts +50 -0
  136. package/dist/field-p9Rme2zB.d.ts +2549 -0
  137. package/dist/git-sync-BTf1aYHr.d.ts +205 -0
  138. package/dist/git-sync-C99SVdJ9.d.ts +258 -0
  139. package/dist/glossary-CHK3elPj.d.ts +35 -0
  140. package/dist/glossary-DFvnz-E5.d.ts +15 -0
  141. package/dist/http/errors.d.ts +2 -0
  142. package/dist/http/errors.js +2 -0
  143. package/dist/http/oauth.d.ts +2 -0
  144. package/dist/http/oauth.js +201 -0
  145. package/dist/http/retry.d.ts +19 -0
  146. package/dist/http/retry.js +33 -0
  147. package/dist/http/transport.d.ts +2 -0
  148. package/dist/http/transport.js +2 -0
  149. package/dist/index.d.ts +62 -0
  150. package/dist/index.js +64 -0
  151. package/dist/input-gate-registry-Dai7SfXb.js +14 -0
  152. package/dist/input-gates-DwKoTJVQ.d.ts +28 -0
  153. package/dist/json-BksZpXDC.d.ts +19 -0
  154. package/dist/json-pointer.d.ts +5 -0
  155. package/dist/json-pointer.js +10 -0
  156. package/dist/json.d.ts +2 -0
  157. package/dist/json.js +44 -0
  158. package/dist/known-range-DTOBgTEC.d.ts +7 -0
  159. package/dist/library-B9pEq7qP.d.ts +230 -0
  160. package/dist/list-BT_bBm9Z.d.ts +7 -0
  161. package/dist/list.d.ts +2 -0
  162. package/dist/list.js +1 -0
  163. package/dist/measure-CgH14YQZ.d.ts +44 -0
  164. package/dist/measure-lPz8qnwz.d.ts +108 -0
  165. package/dist/metric-DcYloqOQ.d.ts +2655 -0
  166. package/dist/moderation-review-B4RUTZ6_.d.ts +56 -0
  167. package/dist/network-error-5g4U1iul.js +62 -0
  168. package/dist/notification-Cp5GJErS.d.ts +22 -0
  169. package/dist/notification-D1MThyKE.d.ts +443 -0
  170. package/dist/oauth-C4ordeoJ.d.ts +59 -0
  171. package/dist/oauth-login-CJsT_3EE.d.ts +19 -0
  172. package/dist/oauth-login-D734Jvbq.js +179 -0
  173. package/dist/oauth-session-BlIlcd8Q.d.ts +6 -0
  174. package/dist/paginate-COuL0Gzl.d.ts +24 -0
  175. package/dist/paginate.d.ts +2 -0
  176. package/dist/paginate.js +49 -0
  177. package/dist/parameter-ak-J-IOj.d.ts +190 -0
  178. package/dist/permission-BnCQw5Kp.d.ts +149 -0
  179. package/dist/poll-CIwnee7h.d.ts +15 -0
  180. package/dist/poll.d.ts +2 -0
  181. package/dist/poll.js +47 -0
  182. package/dist/predicates.d.ts +10 -0
  183. package/dist/predicates.js +18 -0
  184. package/dist/pulse-0LG3K6qO.d.ts +598 -0
  185. package/dist/pulse-BzKmz3Yn.d.ts +18 -0
  186. package/dist/query-Xsin530u.d.ts +23 -0
  187. package/dist/refusal-B9aeHMc9.js +130 -0
  188. package/dist/replacement-BGyggp-G.d.ts +2467 -0
  189. package/dist/replacement-CVebCuNp.d.ts +128 -0
  190. package/dist/requirement-check-glU7wqhQ.d.ts +17 -0
  191. package/dist/requirements-Dx_ZVzl7.d.ts +227 -0
  192. package/dist/resources/api-key.d.ts +11 -0
  193. package/dist/resources/api-key.js +35 -0
  194. package/dist/resources/card.d.ts +2 -0
  195. package/dist/resources/card.js +103 -0
  196. package/dist/resources/collection.d.ts +2 -0
  197. package/dist/resources/collection.js +134 -0
  198. package/dist/resources/content-translation.d.ts +11 -0
  199. package/dist/resources/content-translation.js +27 -0
  200. package/dist/resources/csv-upload.d.ts +2 -0
  201. package/dist/resources/csv-upload.js +9 -0
  202. package/dist/resources/dashboard.d.ts +2 -0
  203. package/dist/resources/dashboard.js +221 -0
  204. package/dist/resources/data-action.d.ts +60 -0
  205. package/dist/resources/data-action.js +79 -0
  206. package/dist/resources/data-app.d.ts +112 -0
  207. package/dist/resources/data-app.js +75 -0
  208. package/dist/resources/database.d.ts +2 -0
  209. package/dist/resources/database.js +103 -0
  210. package/dist/resources/dataset.d.ts +2 -0
  211. package/dist/resources/dataset.js +81 -0
  212. package/dist/resources/dependency.d.ts +2 -0
  213. package/dist/resources/dependency.js +156 -0
  214. package/dist/resources/document.d.ts +55 -0
  215. package/dist/resources/document.js +60 -0
  216. package/dist/resources/eid-translation.d.ts +8 -0
  217. package/dist/resources/eid-translation.js +19 -0
  218. package/dist/resources/erd.d.ts +2 -0
  219. package/dist/resources/erd.js +26 -0
  220. package/dist/resources/field.d.ts +2 -0
  221. package/dist/resources/field.js +99 -0
  222. package/dist/resources/git-sync.d.ts +2 -0
  223. package/dist/resources/git-sync.js +362 -0
  224. package/dist/resources/glossary.d.ts +2 -0
  225. package/dist/resources/glossary.js +51 -0
  226. package/dist/resources/library.d.ts +85 -0
  227. package/dist/resources/library.js +90 -0
  228. package/dist/resources/measure.d.ts +2 -0
  229. package/dist/resources/measure.js +57 -0
  230. package/dist/resources/metric.d.ts +2 -0
  231. package/dist/resources/metric.js +50 -0
  232. package/dist/resources/moderation-review.d.ts +23 -0
  233. package/dist/resources/moderation-review.js +24 -0
  234. package/dist/resources/notification.d.ts +2 -0
  235. package/dist/resources/notification.js +93 -0
  236. package/dist/resources/optional-parsed.d.ts +7 -0
  237. package/dist/resources/optional-parsed.js +14 -0
  238. package/dist/resources/permission.d.ts +10 -0
  239. package/dist/resources/permission.js +31 -0
  240. package/dist/resources/pivot-export.d.ts +10 -0
  241. package/dist/resources/pivot-export.js +16 -0
  242. package/dist/resources/pulse.d.ts +2 -0
  243. package/dist/resources/pulse.js +76 -0
  244. package/dist/resources/replacement.d.ts +2 -0
  245. package/dist/resources/replacement.js +82 -0
  246. package/dist/resources/request-body.d.ts +9 -0
  247. package/dist/resources/request-body.js +13 -0
  248. package/dist/resources/revision.d.ts +70 -0
  249. package/dist/resources/revision.js +46 -0
  250. package/dist/resources/search.d.ts +2 -0
  251. package/dist/resources/search.js +78 -0
  252. package/dist/resources/segment.d.ts +2 -0
  253. package/dist/resources/segment.js +55 -0
  254. package/dist/resources/setting.d.ts +11 -0
  255. package/dist/resources/setting.js +43 -0
  256. package/dist/resources/setup.d.ts +8 -0
  257. package/dist/resources/setup.js +18 -0
  258. package/dist/resources/snippet.d.ts +2 -0
  259. package/dist/resources/snippet.js +52 -0
  260. package/dist/resources/table.d.ts +2 -0
  261. package/dist/resources/table.js +274 -0
  262. package/dist/resources/timeline-event.d.ts +12 -0
  263. package/dist/resources/timeline-event.js +51 -0
  264. package/dist/resources/timeline.d.ts +2 -0
  265. package/dist/resources/timeline.js +82 -0
  266. package/dist/resources/transform-dag-run.d.ts +22 -0
  267. package/dist/resources/transform-dag-run.js +32 -0
  268. package/dist/resources/transform-inspector.d.ts +214 -0
  269. package/dist/resources/transform-inspector.js +47 -0
  270. package/dist/resources/transform-job.d.ts +2 -0
  271. package/dist/resources/transform-job.js +90 -0
  272. package/dist/resources/transform-python.d.ts +59 -0
  273. package/dist/resources/transform-python.js +57 -0
  274. package/dist/resources/transform-tag.d.ts +35 -0
  275. package/dist/resources/transform-tag.js +47 -0
  276. package/dist/resources/transform-test.d.ts +2 -0
  277. package/dist/resources/transform-test.js +75 -0
  278. package/dist/resources/transform.d.ts +2 -0
  279. package/dist/resources/transform.js +227 -0
  280. package/dist/resources/upload.d.ts +2 -0
  281. package/dist/resources/upload.js +48 -0
  282. package/dist/resources/user.d.ts +8 -0
  283. package/dist/resources/user.js +11 -0
  284. package/dist/revision-Dyl-8p7d.d.ts +106 -0
  285. package/dist/search-Cm5IxKss.d.ts +92 -0
  286. package/dist/search-Cten2h0I.d.ts +26 -0
  287. package/dist/segment-CbAgVO-5.d.ts +47 -0
  288. package/dist/segment-DQLX6r1E.d.ts +16 -0
  289. package/dist/session-properties-COtlxAcK.d.ts +15 -0
  290. package/dist/setting-DXuQGXGF.d.ts +25 -0
  291. package/dist/setup-JqcJ2unJ.d.ts +26 -0
  292. package/dist/signal.d.ts +8 -0
  293. package/dist/signal.js +25 -0
  294. package/dist/snippet-C_Ilx7tR.d.ts +41 -0
  295. package/dist/snippet-Djn0rL21.d.ts +16 -0
  296. package/dist/table-CDZbLNow.d.ts +176 -0
  297. package/dist/table-Od6uvDVW.d.ts +3234 -0
  298. package/dist/tag-qzjGGci8.d.ts +48 -0
  299. package/dist/timeline-BK45hy-h.d.ts +218 -0
  300. package/dist/timeline-BTs6fuRp.d.ts +21 -0
  301. package/dist/transform-C5thnJwW.d.ts +559 -0
  302. package/dist/transform-WASQAXeA.d.ts +652 -0
  303. package/dist/transform-dag-run-BgZwv1yx.d.ts +49 -0
  304. package/dist/transform-inspector-CMCh8WKV.d.ts +374 -0
  305. package/dist/transform-job-D8jTQtdX.d.ts +98 -0
  306. package/dist/transform-job-DmTwKxhc.d.ts +237 -0
  307. package/dist/transform-python-DtL3xxMj.d.ts +101 -0
  308. package/dist/transform-tag-C6j5EUkX.d.ts +25 -0
  309. package/dist/transform-test-CR_i54IV.d.ts +412 -0
  310. package/dist/transform-test-CeMzDpUC.d.ts +346 -0
  311. package/dist/transport-BsXqRujn.d.ts +476 -0
  312. package/dist/transport-HP7cyo9N.js +397 -0
  313. package/dist/upload-B5YjVkSW.d.ts +12 -0
  314. package/dist/upload-UPfZFdbH.d.ts +22 -0
  315. package/dist/url-CI0pxHOc.d.ts +7 -0
  316. package/dist/url.d.ts +2 -0
  317. package/dist/url.js +34 -0
  318. package/dist/user-Sqqv7rqh.d.ts +18 -0
  319. package/dist/version/capability-error.d.ts +2 -0
  320. package/dist/version/capability-error.js +42 -0
  321. package/dist/version/features.d.ts +2 -0
  322. package/dist/version/features.js +171 -0
  323. package/dist/version/input-gates.d.ts +2 -0
  324. package/dist/version/input-gates.js +13 -0
  325. package/dist/version/known-range.d.ts +2 -0
  326. package/dist/version/known-range.js +7 -0
  327. package/dist/version/probe.d.ts +2 -0
  328. package/dist/version/probe.js +30 -0
  329. package/dist/version/profile.d.ts +2 -0
  330. package/dist/version/profile.js +64 -0
  331. package/dist/version/requirement-check.d.ts +2 -0
  332. package/dist/version/requirement-check.js +62 -0
  333. package/dist/version/requirements.d.ts +2 -0
  334. package/dist/version/requirements.js +229 -0
  335. package/dist/version/tag.d.ts +2 -0
  336. package/dist/version/tag.js +52 -0
  337. package/package.json +66 -4
@@ -0,0 +1,51 @@
1
+ import { f as RequestOptions, h as Transport } from "./transport-BsXqRujn.js";
2
+ //#region src/resources/erd.d.ts
3
+ interface ErdParams {
4
+ "database-id": number;
5
+ "table-ids"?: readonly number[] | undefined;
6
+ schema?: string | undefined;
7
+ }
8
+ declare function erdResource(transport: Transport): {
9
+ get: (params: ErdParams, options?: RequestOptions | undefined) => Promise<{
10
+ [x: string]: unknown;
11
+ nodes: {
12
+ [x: string]: unknown;
13
+ table_id: number;
14
+ name: string;
15
+ display_name: string;
16
+ description: string | null;
17
+ owner: {
18
+ [x: string]: unknown;
19
+ email: string;
20
+ id?: number | undefined;
21
+ first_name?: string | null | undefined;
22
+ last_name?: string | null | undefined;
23
+ } | null;
24
+ schema: string | null;
25
+ visibility_type: "hidden" | "technical" | "cruft" | null;
26
+ db_id: number;
27
+ fields: {
28
+ [x: string]: unknown;
29
+ id: number;
30
+ name: string;
31
+ display_name: string;
32
+ database_type: string;
33
+ base_type: "type/*" | "type/field-values-unsupported" | "type/fingerprint-unsupported" | "type/Large" | "type/Number" | "type/Integer" | "type/BigInteger" | "type/Float" | "type/Double" | "type/Decimal" | "type/Text" | "type/UUID" | "type/OracleCLOB" | "type/Temporal" | "type/HasDate" | "type/HasTime" | "type/Date" | "type/Time" | "type/TimeWithTZ" | "type/TimeWithLocalTZ" | "type/TimeWithZoneOffset" | "type/DateTime" | "type/DateTimeWithTZ" | "type/DateTimeWithLocalTZ" | "type/DateTimeWithZoneOffset" | "type/DateTimeWithZoneID" | "type/Instant" | "type/Interval" | "type/Boolean" | "type/DruidHyperUnique" | "type/SnowflakeVariant" | "type/TextLike" | "type/MongoBSONID" | "type/MongoBinData" | "type/MySQLEnum" | "type/PostgresEnum" | "type/PostgresBitString" | "type/IPAddress" | "type/Collection" | "type/Dictionary" | "type/Array" | "type/Structured" | "type/JSON" | "type/DruidJSON" | "type/XML" | "type/AvatarURL" | "type/Birthdate" | "type/CancelationDate" | "type/CancelationTime" | "type/CancelationTimestamp" | "type/City" | "type/Comment" | "type/Coordinate" | "type/Cost" | "type/Country" | "type/CreationDate" | "type/CreationTime" | "type/CreationTimestamp" | "type/Currency" | "type/DeletionDate" | "type/DeletionTime" | "type/DeletionTimestamp" | "type/Description" | "type/Discount" | "type/Duration" | "type/Email" | "type/GrossMargin" | "type/ImageURL" | "type/Income" | "type/JoinDate" | "type/JoinTime" | "type/JoinTimestamp" | "type/Latitude" | "type/Longitude" | "type/Name" | "type/Percentage" | "type/Price" | "type/Quantity" | "type/Score" | "type/SerializedJSON" | "type/Share" | "type/State" | "type/Title" | "type/URL" | "type/UpdatedDate" | "type/UpdatedTime" | "type/UpdatedTimestamp" | "type/ZipCode" | null;
34
+ effective_type: "type/*" | "type/field-values-unsupported" | "type/fingerprint-unsupported" | "type/Large" | "type/Number" | "type/Integer" | "type/BigInteger" | "type/Float" | "type/Double" | "type/Decimal" | "type/Text" | "type/UUID" | "type/OracleCLOB" | "type/Temporal" | "type/HasDate" | "type/HasTime" | "type/Date" | "type/Time" | "type/TimeWithTZ" | "type/TimeWithLocalTZ" | "type/TimeWithZoneOffset" | "type/DateTime" | "type/DateTimeWithTZ" | "type/DateTimeWithLocalTZ" | "type/DateTimeWithZoneOffset" | "type/DateTimeWithZoneID" | "type/Instant" | "type/Interval" | "type/Boolean" | "type/DruidHyperUnique" | "type/SnowflakeVariant" | "type/TextLike" | "type/MongoBSONID" | "type/MongoBinData" | "type/MySQLEnum" | "type/PostgresEnum" | "type/PostgresBitString" | "type/IPAddress" | "type/Collection" | "type/Dictionary" | "type/Array" | "type/Structured" | "type/JSON" | "type/DruidJSON" | "type/XML" | "type/AvatarURL" | "type/Birthdate" | "type/CancelationDate" | "type/CancelationTime" | "type/CancelationTimestamp" | "type/City" | "type/Comment" | "type/Coordinate" | "type/Cost" | "type/Country" | "type/CreationDate" | "type/CreationTime" | "type/CreationTimestamp" | "type/Currency" | "type/DeletionDate" | "type/DeletionTime" | "type/DeletionTimestamp" | "type/Description" | "type/Discount" | "type/Duration" | "type/Email" | "type/GrossMargin" | "type/ImageURL" | "type/Income" | "type/JoinDate" | "type/JoinTime" | "type/JoinTimestamp" | "type/Latitude" | "type/Longitude" | "type/Name" | "type/Percentage" | "type/Price" | "type/Quantity" | "type/Score" | "type/SerializedJSON" | "type/Share" | "type/State" | "type/Title" | "type/URL" | "type/UpdatedDate" | "type/UpdatedTime" | "type/UpdatedTimestamp" | "type/ZipCode" | null;
35
+ semantic_type: "type/IPAddress" | "type/Structured" | "type/JSON" | "type/DruidJSON" | "type/XML" | "type/AvatarURL" | "type/Birthdate" | "type/CancelationDate" | "type/CancelationTime" | "type/CancelationTimestamp" | "type/City" | "type/Comment" | "type/Coordinate" | "type/Cost" | "type/Country" | "type/CreationDate" | "type/CreationTime" | "type/CreationTimestamp" | "type/Currency" | "type/DeletionDate" | "type/DeletionTime" | "type/DeletionTimestamp" | "type/Description" | "type/Discount" | "type/Duration" | "type/Email" | "type/GrossMargin" | "type/ImageURL" | "type/Income" | "type/JoinDate" | "type/JoinTime" | "type/JoinTimestamp" | "type/Latitude" | "type/Longitude" | "type/Name" | "type/Percentage" | "type/Price" | "type/Quantity" | "type/Score" | "type/SerializedJSON" | "type/Share" | "type/State" | "type/Title" | "type/URL" | "type/UpdatedDate" | "type/UpdatedTime" | "type/UpdatedTimestamp" | "type/ZipCode" | "Semantic/*" | "Relation/*" | "type/Location" | "type/Address" | "type/Category" | "type/Enum" | "type/Product" | "type/Company" | "type/Subscription" | "type/Source" | "type/CreationTemporal" | "type/JoinTemporal" | "type/CancelationTemporal" | "type/DeletionTemporal" | "type/UpdatedTemporal" | "type/User" | "type/Author" | "type/Owner" | "type/FK" | "type/PK" | null;
36
+ fk_target_field_id: number | null;
37
+ fk_target_table_id: number | null;
38
+ }[];
39
+ }[];
40
+ edges: {
41
+ [x: string]: unknown;
42
+ source_table_id: number;
43
+ source_field_id: number;
44
+ target_table_id: number;
45
+ target_field_id: number;
46
+ relationship: "one-to-one" | "many-to-one";
47
+ }[];
48
+ }>;
49
+ };
50
+ //#endregion
51
+ export { erdResource as n, ErdParams as t };
@@ -0,0 +1,330 @@
1
+ import { ChainedRequestError, MetabaseError } from "./errors.js";
2
+ import { parseJsonResult } from "./json.js";
3
+ import { isPlainObject } from "./predicates.js";
4
+ import { z } from "zod";
5
+ //#region src/http/sanitize.ts
6
+ const SECRET_HEADER_NAMES = /* @__PURE__ */ new Set([
7
+ "authorization",
8
+ "x-api-key",
9
+ "x-metabase-session",
10
+ "cookie",
11
+ "set-cookie",
12
+ "proxy-authorization"
13
+ ]);
14
+ const REDACTED = "[REDACTED]";
15
+ function redactHeaders(headers) {
16
+ const result = {};
17
+ const entries = headers instanceof Headers ? headers.entries() : Object.entries(headers);
18
+ for (const [key, value] of entries) result[key] = SECRET_HEADER_NAMES.has(key.toLowerCase()) ? REDACTED : value;
19
+ return result;
20
+ }
21
+ function redactBody(body, ctx) {
22
+ let result = body;
23
+ for (const secret of ctx.knownSecrets) {
24
+ if (secret.length === 0) continue;
25
+ result = result.replaceAll(secret, REDACTED);
26
+ }
27
+ return result;
28
+ }
29
+ //#endregion
30
+ //#region src/http/errors.ts
31
+ const BAD_REQUEST_STATUS = 400;
32
+ const UNAUTHORIZED_STATUS = 401;
33
+ const PAYMENT_REQUIRED_STATUS = 402;
34
+ const FORBIDDEN_STATUS = 403;
35
+ const NOT_FOUND_STATUS = 404;
36
+ const CONFLICT_STATUS = 409;
37
+ const TOO_MANY_REQUESTS_STATUS = 429;
38
+ const INTERNAL_SERVER_ERROR_STATUS = 500;
39
+ const SERVER_ERROR_STATUSES_START = 500;
40
+ const SERVER_ERROR_STATUSES_END = 600;
41
+ const TEXT_CONTENT_TYPE = "text/plain";
42
+ const ROUTE_MISSING_LITERAL = "API endpoint does not exist.";
43
+ const RESOURCE_MISSING_LITERAL = "Not found.";
44
+ const STATUS_CLASSIFICATIONS = {
45
+ 401: { retryable: false },
46
+ 403: {
47
+ retryable: false,
48
+ message: "The request was refused (403): the signed-in user is not allowed to do this."
49
+ },
50
+ 404: { retryable: false },
51
+ 409: {
52
+ retryable: false,
53
+ message: "The request was refused (409): it conflicts with what already exists."
54
+ },
55
+ 408: {
56
+ retryable: true,
57
+ message: "Metabase timed out responding."
58
+ },
59
+ 425: { retryable: true },
60
+ 429: {
61
+ retryable: true,
62
+ message: "Metabase rate-limited the request."
63
+ },
64
+ 500: { retryable: true },
65
+ 502: { retryable: true },
66
+ 503: { retryable: true },
67
+ 504: {
68
+ retryable: true,
69
+ message: "Metabase timed out responding."
70
+ }
71
+ };
72
+ const ErrorEnvelope = z.object({
73
+ message: z.string().optional(),
74
+ error: z.string().optional(),
75
+ "error-message": z.string().optional(),
76
+ via: z.array(z.object({ message: z.string().optional() }).loose()).optional(),
77
+ "specific-errors": z.unknown().optional(),
78
+ errors: z.unknown().optional(),
79
+ "error-code": z.string().optional(),
80
+ "non-remote-synced-models": z.unknown().optional(),
81
+ "remote-synced-models": z.unknown().optional()
82
+ }).loose();
83
+ const NonRemoteSyncedDependencies = z.array(z.number().int()).min(1);
84
+ const RemoteSyncedDependent = z.record(z.string(), z.number().int());
85
+ const RemoteSyncedDependents = z.array(RemoteSyncedDependent).min(1);
86
+ const MAX_LISTED_REMOTE_SYNC_ENTRIES = 20;
87
+ const REMOTE_SYNC_ENTRY_SEPARATOR = ", ";
88
+ const NON_REMOTE_SYNCED_REMEDY = "Move that content into a synced collection first, or move the collection that holds it.";
89
+ const REMOTE_SYNCED_REMEDY = "Update that content so it no longer uses this first, or move it out of sync along with this.";
90
+ const FieldErrorNodeSchema = z.lazy(() => z.union([
91
+ z.string(),
92
+ z.array(z.string()),
93
+ z.record(z.string(), FieldErrorNodeSchema)
94
+ ]));
95
+ const FieldErrorTree = z.record(z.string(), FieldErrorNodeSchema);
96
+ const FIELD_MESSAGE_SEPARATOR = "; ";
97
+ const FIELD_PATH_SEPARATOR = ".";
98
+ const MAX_EXTRACTED_MESSAGE_LEN = 500;
99
+ const ELLIPSIS = "…";
100
+ const GOT_VALUE_PATTERN = /got: ((?:[^"\\]|\\.)*)/g;
101
+ const MAX_GOT_VALUE_LEN = 60;
102
+ var HttpError = class extends MetabaseError {
103
+ category = "http";
104
+ status;
105
+ kind;
106
+ serverMessage;
107
+ developerDetail;
108
+ constructor(input) {
109
+ const sanitizedBody = sanitizeBody(input.rawBody, input.redactionContext);
110
+ const redactedHeaders = redactHeaders(input.responseHeaders);
111
+ const kind = classifyKind(input.status, sanitizedBody, redactedHeaders);
112
+ const said = {
113
+ envelope: parseEnvelopeMessage(sanitizedBody),
114
+ text: plainTextMessage(sanitizedBody, redactedHeaders)
115
+ };
116
+ super(input.overrideUserMessage ?? buildUserMessage(kind, input, said));
117
+ const fields = extractEnvelopeViews(sanitizedBody);
118
+ this.name = "HttpError";
119
+ this.status = input.status;
120
+ this.kind = kind;
121
+ this.serverMessage = said.envelope ?? said.text;
122
+ this.developerDetail = {
123
+ status: input.status,
124
+ statusText: input.statusText,
125
+ method: input.method,
126
+ url: input.url,
127
+ responseHeaders: redactedHeaders,
128
+ body: sanitizedBody,
129
+ fieldErrors: fields.fieldErrors,
130
+ specificFieldErrors: fields.specificFieldErrors,
131
+ errorCode: fields.errorCode,
132
+ nonRemoteSyncedDependencies: fields.nonRemoteSyncedDependencies,
133
+ remoteSyncedDependents: fields.remoteSyncedDependents
134
+ };
135
+ }
136
+ get isRetryable() {
137
+ return isRetryableStatus(this.status);
138
+ }
139
+ get fieldErrors() {
140
+ return this.developerDetail.fieldErrors;
141
+ }
142
+ get specificFieldErrors() {
143
+ return this.developerDetail.specificFieldErrors;
144
+ }
145
+ get errorCode() {
146
+ return this.developerDetail.errorCode;
147
+ }
148
+ get nonRemoteSyncedDependencies() {
149
+ return this.developerDetail.nonRemoteSyncedDependencies;
150
+ }
151
+ get remoteSyncedDependents() {
152
+ return this.developerDetail.remoteSyncedDependents;
153
+ }
154
+ };
155
+ function isHttpNotFound(error) {
156
+ return error instanceof HttpError && error.status === 404;
157
+ }
158
+ function chainRequestFailure(cause, message) {
159
+ if (cause instanceof HttpError) return new HttpError({
160
+ status: cause.status,
161
+ statusText: cause.developerDetail.statusText,
162
+ method: cause.developerDetail.method,
163
+ url: cause.developerDetail.url,
164
+ responseHeaders: cause.developerDetail.responseHeaders,
165
+ rawBody: cause.developerDetail.body,
166
+ overrideUserMessage: message
167
+ });
168
+ return new ChainedRequestError(message, cause);
169
+ }
170
+ function isRetryableStatus(status) {
171
+ return STATUS_CLASSIFICATIONS[status]?.retryable === true;
172
+ }
173
+ function sanitizeBody(rawBody, ctx) {
174
+ if (rawBody === null) return null;
175
+ if (ctx === void 0) return rawBody;
176
+ return redactBody(rawBody, ctx);
177
+ }
178
+ function classifyKind(status, sanitizedBody, redactedHeaders) {
179
+ if (status === 401) return "auth";
180
+ if (status === 403) return "forbidden";
181
+ if (status === 409) return "conflict";
182
+ if (status === 404) return isRouteMissingResponse(sanitizedBody, redactedHeaders) ? "route-missing" : "resource-missing";
183
+ if (status === 429) return "rate-limit";
184
+ if (status >= SERVER_ERROR_STATUSES_START && status < SERVER_ERROR_STATUSES_END) return "server-error";
185
+ return "generic";
186
+ }
187
+ function isRouteMissingResponse(sanitizedBody, redactedHeaders) {
188
+ if (sanitizedBody?.includes(ROUTE_MISSING_LITERAL)) return true;
189
+ if (sanitizedBody?.includes(RESOURCE_MISSING_LITERAL)) return false;
190
+ if (redactedHeaders["content-type"]?.includes("application/json")) return false;
191
+ if (sanitizedBody === null || sanitizedBody.trim() === "") return true;
192
+ return parseEnvelope(sanitizedBody) === null;
193
+ }
194
+ function buildUserMessage(kind, input, said) {
195
+ if (kind === "route-missing") return buildRouteMissingMessage(input);
196
+ if (kind === "resource-missing") return `Not found: ${input.method} ${pathFromUrl(input.url)}.`;
197
+ if (said.envelope !== null) return said.envelope;
198
+ if (kind === "auth") return `Invalid or unauthorized API key (host: ${hostFromUrl(input.url)}).`;
199
+ if (said.text !== null) return said.text;
200
+ return defaultMessageForStatus(input.status);
201
+ }
202
+ function plainTextMessage(sanitizedBody, redactedHeaders) {
203
+ if (sanitizedBody === null || !redactedHeaders["content-type"]?.includes(TEXT_CONTENT_TYPE)) return null;
204
+ const trimmed = sanitizedBody.trim();
205
+ return trimmed === "" ? null : condenseMessage(trimmed);
206
+ }
207
+ function buildRouteMissingMessage(input) {
208
+ const path = pathFromUrl(input.url);
209
+ if (!input.serverTag) return `This endpoint is not available on the connected Metabase: ${input.method} ${path}.`;
210
+ return `This endpoint is not available on Metabase ${input.serverTag}: ${input.method} ${path}. It may require a newer Metabase major version.`;
211
+ }
212
+ function pathFromUrl(url) {
213
+ const parsed = new URL(url);
214
+ return parsed.pathname + parsed.search;
215
+ }
216
+ function hostFromUrl(url) {
217
+ return new URL(url).host;
218
+ }
219
+ function parseEnvelope(sanitizedBody) {
220
+ if (!sanitizedBody) return null;
221
+ const result = parseJsonResult(sanitizedBody, ErrorEnvelope);
222
+ return result.ok ? result.value : null;
223
+ }
224
+ const NO_ENVELOPE_VIEWS = {
225
+ fieldErrors: null,
226
+ specificFieldErrors: null,
227
+ errorCode: null,
228
+ nonRemoteSyncedDependencies: null,
229
+ remoteSyncedDependents: null
230
+ };
231
+ function extractEnvelopeViews(sanitizedBody) {
232
+ const envelope = parseEnvelope(sanitizedBody);
233
+ if (envelope === null) return NO_ENVELOPE_VIEWS;
234
+ return {
235
+ fieldErrors: parseFieldErrors(envelope.errors),
236
+ specificFieldErrors: parseFieldErrors(envelope["specific-errors"]),
237
+ errorCode: envelope["error-code"] ?? null,
238
+ nonRemoteSyncedDependencies: parseOrNull(NonRemoteSyncedDependencies, envelope["non-remote-synced-models"]),
239
+ remoteSyncedDependents: parseOrNull(RemoteSyncedDependents, envelope["remote-synced-models"])
240
+ };
241
+ }
242
+ function parseOrNull(schema, value) {
243
+ const parsed = schema.safeParse(value);
244
+ return parsed.success ? parsed.data : null;
245
+ }
246
+ function parseFieldErrors(value) {
247
+ const parsed = FieldErrorTree.safeParse(value);
248
+ if (!parsed.success) return null;
249
+ const entries = collectLeafEntries(parsed.data, []);
250
+ if (entries.length === 0) return null;
251
+ return Object.fromEntries(entries.map((entry) => [entry.path, entry.message]));
252
+ }
253
+ function parseEnvelopeMessage(sanitizedBody) {
254
+ const envelope = parseEnvelope(sanitizedBody);
255
+ if (envelope === null) return null;
256
+ const topLevel = envelope.message ?? envelope.error ?? envelope["error-message"];
257
+ if (topLevel) return appendRemoteSyncConflict(condenseMessage(topLevel), envelope);
258
+ const viaMessage = envelope.via?.find((entry) => entry.message)?.message;
259
+ if (viaMessage) return condenseMessage(viaMessage);
260
+ const specific = formatErrorTree(envelope["specific-errors"]);
261
+ if (specific) return condenseMessage(specific);
262
+ const generic = formatErrorTree(envelope.errors);
263
+ if (generic) return condenseMessage(generic);
264
+ return null;
265
+ }
266
+ function appendRemoteSyncConflict(message, envelope) {
267
+ const dependencies = parseOrNull(NonRemoteSyncedDependencies, envelope["non-remote-synced-models"]);
268
+ if (dependencies !== null) {
269
+ const ids = listRemoteSyncEntries(dependencies.map(String));
270
+ return `${withoutTrailingPeriod(message)}: ids ${ids}. ${NON_REMOTE_SYNCED_REMEDY}`;
271
+ }
272
+ const dependents = parseOrNull(RemoteSyncedDependents, envelope["remote-synced-models"]);
273
+ if (dependents !== null) {
274
+ const named = listRemoteSyncEntries([...new Set(dependents.map(formatRemoteSyncedDependent))]);
275
+ return `${withoutTrailingPeriod(message)}: ${named}. ${REMOTE_SYNCED_REMEDY}`;
276
+ }
277
+ return message;
278
+ }
279
+ function formatRemoteSyncedDependent(dependent) {
280
+ return Object.entries(dependent).map(([model, id]) => `${model} ${id}`).join(" / ");
281
+ }
282
+ function listRemoteSyncEntries(entries) {
283
+ const listed = entries.slice(0, MAX_LISTED_REMOTE_SYNC_ENTRIES).join(REMOTE_SYNC_ENTRY_SEPARATOR);
284
+ const unlisted = entries.length - MAX_LISTED_REMOTE_SYNC_ENTRIES;
285
+ return unlisted > 0 ? `${listed}${REMOTE_SYNC_ENTRY_SEPARATOR}and ${unlisted} more` : listed;
286
+ }
287
+ function withoutTrailingPeriod(message) {
288
+ return message.endsWith(".") ? message.slice(0, -1) : message;
289
+ }
290
+ function formatErrorTree(value) {
291
+ const entries = collectLeafEntries(value, []);
292
+ if (entries.length === 0) return null;
293
+ return entries.map(formatLeafEntry).join(FIELD_MESSAGE_SEPARATOR);
294
+ }
295
+ function formatLeafEntry(entry) {
296
+ return entry.path === "" ? entry.message : `${entry.path}: ${entry.message}`;
297
+ }
298
+ function collectLeafEntries(value, path) {
299
+ if (typeof value === "string") {
300
+ const trimmed = value.trim();
301
+ return trimmed === "" ? [] : [{
302
+ path: path.join("."),
303
+ message: trimmed
304
+ }];
305
+ }
306
+ if (Array.isArray(value)) {
307
+ const messages = value.filter((entry) => typeof entry === "string" && entry.trim() !== "");
308
+ if (messages.length === 0) return [];
309
+ return [{
310
+ path: path.join("."),
311
+ message: messages.join(FIELD_MESSAGE_SEPARATOR)
312
+ }];
313
+ }
314
+ if (isPlainObject(value)) return Object.entries(value).flatMap(([key, child]) => collectLeafEntries(child, [...path, key]));
315
+ return [];
316
+ }
317
+ function condenseMessage(message) {
318
+ const trimmed = message.replace(GOT_VALUE_PATTERN, trimGotValue);
319
+ if (trimmed.length <= MAX_EXTRACTED_MESSAGE_LEN) return trimmed;
320
+ return trimmed.slice(0, MAX_EXTRACTED_MESSAGE_LEN - 1) + ELLIPSIS;
321
+ }
322
+ function trimGotValue(match, value) {
323
+ if (value.length <= MAX_GOT_VALUE_LEN) return match;
324
+ return `got: ${value.slice(0, MAX_GOT_VALUE_LEN)}${ELLIPSIS}`;
325
+ }
326
+ function defaultMessageForStatus(status) {
327
+ return STATUS_CLASSIFICATIONS[status]?.message ?? `Metabase returned ${status}.`;
328
+ }
329
+ //#endregion
330
+ export { HttpError as a, PAYMENT_REQUIRED_STATUS as c, chainRequestFailure as d, isHttpNotFound as f, FORBIDDEN_STATUS as i, TOO_MANY_REQUESTS_STATUS as l, CONFLICT_STATUS as n, INTERNAL_SERVER_ERROR_STATUS as o, isRetryableStatus as p, FIELD_PATH_SEPARATOR as r, NOT_FOUND_STATUS as s, BAD_REQUEST_STATUS as t, UNAUTHORIZED_STATUS as u };
@@ -0,0 +1,2 @@
1
+ import { $ as PartialWriteAnswer, G as DecodedResponseShapeDetail, H as AbortError, J as HttpTimeoutDetail, K as ErrorCategory, Q as NetworkErrorDetail, U as ChainedRequestError, W as ConfigError, X as MetabaseError, Y as InternalError, Z as NetworkError, _t as isNonInterruptFailure, at as ResponseShapeError, ct as TimeoutErrorDetail, dt as ValidationError, et as PartialWriteDetail, ft as ValidationErrorDetail, gt as isFileNotFoundError, ht as formatZodIssue, it as PollingTimeoutDetail, lt as UnknownError, mt as errorMessage, nt as PartialWriteReported, ot as ResponseShapeErrorDetail, pt as ZodResponseShapeDetail, q as FailedResultError, rt as PartialWriteUnreported, st as TimeoutError, tt as PartialWriteError, ut as UnknownErrorDetail, vt as toMetabaseError } from "./transport-BsXqRujn.js";
2
+ export { AbortError, ChainedRequestError, ConfigError, DecodedResponseShapeDetail, ErrorCategory, FailedResultError, HttpTimeoutDetail, InternalError, MetabaseError, NetworkError, NetworkErrorDetail, PartialWriteAnswer, PartialWriteDetail, PartialWriteError, PartialWriteReported, PartialWriteUnreported, PollingTimeoutDetail, ResponseShapeError, ResponseShapeErrorDetail, TimeoutError, TimeoutErrorDetail, UnknownError, UnknownErrorDetail, ValidationError, ValidationErrorDetail, ZodResponseShapeDetail, errorMessage, formatZodIssue, isFileNotFoundError, isNonInterruptFailure, toMetabaseError };
package/dist/errors.js ADDED
@@ -0,0 +1,189 @@
1
+ import { escapeJsonPointerSegment } from "./json-pointer.js";
2
+ import { KNOWN_RANGE } from "./version/known-range.js";
3
+ import { ZodError, core } from "zod";
4
+ //#region src/errors.ts
5
+ var MetabaseError = class extends Error {
6
+ get userMessage() {
7
+ return this.message;
8
+ }
9
+ };
10
+ var NetworkError = class extends MetabaseError {
11
+ category = "network";
12
+ isRetryable = true;
13
+ developerDetail;
14
+ constructor(message, developerDetail) {
15
+ super(message);
16
+ this.name = "NetworkError";
17
+ this.developerDetail = developerDetail;
18
+ }
19
+ };
20
+ var TimeoutError = class extends MetabaseError {
21
+ category = "timeout";
22
+ isRetryable = true;
23
+ developerDetail;
24
+ constructor(message, developerDetail) {
25
+ super(message);
26
+ this.name = "TimeoutError";
27
+ this.developerDetail = developerDetail;
28
+ }
29
+ };
30
+ var ValidationError = class extends MetabaseError {
31
+ category = "validation";
32
+ isRetryable = false;
33
+ developerDetail;
34
+ constructor(message, developerDetail) {
35
+ super(message);
36
+ this.name = "ValidationError";
37
+ this.developerDetail = developerDetail;
38
+ }
39
+ get userMessage() {
40
+ const issues = this.developerDetail.zodIssues;
41
+ if (issues.length === 0) return this.message;
42
+ return `${this.message}\n${formatIssueLines(issues, VALIDATION_ISSUE_FORMAT)}`;
43
+ }
44
+ };
45
+ const VALIDATION_MAX_ISSUES = 10;
46
+ const RESPONSE_SHAPE_MAX_ISSUES = 5;
47
+ const VALIDATION_ISSUE_FORMAT = {
48
+ max: VALIDATION_MAX_ISSUES,
49
+ formatIssue: (issue) => `${formatZodIssuePointer(issue.path)}: ${issue.message}`
50
+ };
51
+ const RESPONSE_SHAPE_ISSUE_FORMAT = {
52
+ max: RESPONSE_SHAPE_MAX_ISSUES,
53
+ formatIssue: formatZodIssue
54
+ };
55
+ function formatIssueLines(issues, format) {
56
+ const head = issues.slice(0, format.max).map(format.formatIssue);
57
+ const overflow = issues.length - format.max;
58
+ if (overflow > 0) head.push(`... and ${overflow} more`);
59
+ return head.map((line) => ` ${line}`).join("\n");
60
+ }
61
+ function formatZodIssuePointer(path) {
62
+ if (path.length === 0) return "/";
63
+ return path.map((key) => `/${escapeJsonPointerSegment(key)}`).join("");
64
+ }
65
+ const RESPONSE_SHAPE_LEAD_UNKNOWN_VERSION = "Metabase returned unexpected response shape";
66
+ var ResponseShapeError = class ResponseShapeError extends MetabaseError {
67
+ category = "response-shape";
68
+ isRetryable = false;
69
+ developerDetail;
70
+ constructor(message, developerDetail) {
71
+ super(message);
72
+ this.name = "ResponseShapeError";
73
+ this.developerDetail = developerDetail;
74
+ }
75
+ static fromZodIssues(developerDetail) {
76
+ return new ResponseShapeError(formatResponseShapeMessage(developerDetail), developerDetail);
77
+ }
78
+ };
79
+ function formatResponseShapeMessage(detail) {
80
+ const { zodIssues: issues, serverTag, serverSkew } = detail;
81
+ const lead = serverTag === null ? RESPONSE_SHAPE_LEAD_UNKNOWN_VERSION : `On Metabase ${describeServer(serverTag, serverSkew)} the response shape was unexpected`;
82
+ if (issues.length === 0) return lead;
83
+ return `${lead}:\n${formatIssueLines(issues, RESPONSE_SHAPE_ISSUE_FORMAT)}`;
84
+ }
85
+ function describeServer(tag, skew) {
86
+ if (skew === "newer-than-known") return `${tag} (newer than this client supports, up to v${KNOWN_RANGE.max})`;
87
+ if (skew === "development") return `development build ${tag} (newer than every release)`;
88
+ return tag;
89
+ }
90
+ var ConfigError = class extends MetabaseError {
91
+ category = "config";
92
+ isRetryable = false;
93
+ developerDetail = null;
94
+ constructor(message) {
95
+ super(message);
96
+ this.name = "ConfigError";
97
+ }
98
+ };
99
+ var InternalError = class extends MetabaseError {
100
+ category = "internal";
101
+ isRetryable = false;
102
+ developerDetail = null;
103
+ constructor(message) {
104
+ super(message);
105
+ this.name = "InternalError";
106
+ }
107
+ };
108
+ var FailedResultError = class extends MetabaseError {
109
+ category = "failed";
110
+ isRetryable = false;
111
+ developerDetail = null;
112
+ constructor(message) {
113
+ super(message);
114
+ this.name = "FailedResultError";
115
+ }
116
+ };
117
+ var AbortError = class extends MetabaseError {
118
+ category = "abort";
119
+ isRetryable = false;
120
+ developerDetail = null;
121
+ constructor(message = "aborted") {
122
+ super(message);
123
+ this.name = "AbortError";
124
+ }
125
+ };
126
+ function isNonInterruptFailure(error) {
127
+ return error instanceof MetabaseError && !(error instanceof AbortError);
128
+ }
129
+ var ChainedRequestError = class extends MetabaseError {
130
+ cause;
131
+ constructor(message, cause) {
132
+ super(message);
133
+ this.name = "ChainedRequestError";
134
+ this.cause = cause;
135
+ }
136
+ get category() {
137
+ return this.cause.category;
138
+ }
139
+ get isRetryable() {
140
+ return this.cause.isRetryable;
141
+ }
142
+ get developerDetail() {
143
+ return this.cause.developerDetail;
144
+ }
145
+ };
146
+ var UnknownError = class extends MetabaseError {
147
+ category = "unknown";
148
+ isRetryable = false;
149
+ developerDetail;
150
+ constructor(input) {
151
+ super(input.originalMessage);
152
+ this.name = "UnknownError";
153
+ this.developerDetail = input;
154
+ }
155
+ };
156
+ var PartialWriteError = class extends MetabaseError {
157
+ category = "partial-write";
158
+ isRetryable = false;
159
+ developerDetail;
160
+ constructor(message, developerDetail) {
161
+ super(message);
162
+ this.name = "PartialWriteError";
163
+ this.developerDetail = developerDetail;
164
+ }
165
+ };
166
+ function toMetabaseError(error) {
167
+ if (error instanceof MetabaseError) return error;
168
+ if (error instanceof ZodError) return new ConfigError(error.issues.map(formatZodIssue).join("; "));
169
+ if (error instanceof Error) return new UnknownError({
170
+ originalMessage: error.message,
171
+ stack: error.stack ?? null
172
+ });
173
+ return new UnknownError({
174
+ originalMessage: String(error),
175
+ stack: null
176
+ });
177
+ }
178
+ function formatZodIssue(issue) {
179
+ const path = core.toDotPath(issue.path);
180
+ return path === "" ? issue.message : `${path}: ${issue.message}`;
181
+ }
182
+ function isFileNotFoundError(value) {
183
+ return value instanceof Error && "code" in value && value.code === "ENOENT";
184
+ }
185
+ function errorMessage(value) {
186
+ return value instanceof Error ? value.message : String(value);
187
+ }
188
+ //#endregion
189
+ export { AbortError, ChainedRequestError, ConfigError, FailedResultError, InternalError, MetabaseError, NetworkError, PartialWriteError, ResponseShapeError, TimeoutError, UnknownError, ValidationError, errorMessage, formatZodIssue, isFileNotFoundError, isNonInterruptFailure, toMetabaseError };