@meshy-ai/cli 0.1.0

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 (265) hide show
  1. package/.env.example +14 -0
  2. package/LICENSE +21 -0
  3. package/README.md +376 -0
  4. package/dist/client/endpoints/analyze-printability.d.ts +5 -0
  5. package/dist/client/endpoints/analyze-printability.d.ts.map +1 -0
  6. package/dist/client/endpoints/analyze-printability.js +7 -0
  7. package/dist/client/endpoints/analyze-printability.js.map +1 -0
  8. package/dist/client/endpoints/animate.d.ts +6 -0
  9. package/dist/client/endpoints/animate.d.ts.map +1 -0
  10. package/dist/client/endpoints/animate.js +8 -0
  11. package/dist/client/endpoints/animate.js.map +1 -0
  12. package/dist/client/endpoints/balance.d.ts +9 -0
  13. package/dist/client/endpoints/balance.d.ts.map +1 -0
  14. package/dist/client/endpoints/balance.js +27 -0
  15. package/dist/client/endpoints/balance.js.map +1 -0
  16. package/dist/client/endpoints/base.d.ts +24 -0
  17. package/dist/client/endpoints/base.d.ts.map +1 -0
  18. package/dist/client/endpoints/base.js +87 -0
  19. package/dist/client/endpoints/base.js.map +1 -0
  20. package/dist/client/endpoints/convert.d.ts +5 -0
  21. package/dist/client/endpoints/convert.d.ts.map +1 -0
  22. package/dist/client/endpoints/convert.js +7 -0
  23. package/dist/client/endpoints/convert.js.map +1 -0
  24. package/dist/client/endpoints/image-to-3d.d.ts +5 -0
  25. package/dist/client/endpoints/image-to-3d.d.ts.map +1 -0
  26. package/dist/client/endpoints/image-to-3d.js +7 -0
  27. package/dist/client/endpoints/image-to-3d.js.map +1 -0
  28. package/dist/client/endpoints/image-to-image.d.ts +5 -0
  29. package/dist/client/endpoints/image-to-image.d.ts.map +1 -0
  30. package/dist/client/endpoints/image-to-image.js +7 -0
  31. package/dist/client/endpoints/image-to-image.js.map +1 -0
  32. package/dist/client/endpoints/multi-color-print.d.ts +5 -0
  33. package/dist/client/endpoints/multi-color-print.d.ts.map +1 -0
  34. package/dist/client/endpoints/multi-color-print.js +7 -0
  35. package/dist/client/endpoints/multi-color-print.js.map +1 -0
  36. package/dist/client/endpoints/multi-image-to-3d.d.ts +5 -0
  37. package/dist/client/endpoints/multi-image-to-3d.d.ts.map +1 -0
  38. package/dist/client/endpoints/multi-image-to-3d.js +7 -0
  39. package/dist/client/endpoints/multi-image-to-3d.js.map +1 -0
  40. package/dist/client/endpoints/remesh.d.ts +5 -0
  41. package/dist/client/endpoints/remesh.d.ts.map +1 -0
  42. package/dist/client/endpoints/remesh.js +7 -0
  43. package/dist/client/endpoints/remesh.js.map +1 -0
  44. package/dist/client/endpoints/repair-printability.d.ts +5 -0
  45. package/dist/client/endpoints/repair-printability.d.ts.map +1 -0
  46. package/dist/client/endpoints/repair-printability.js +7 -0
  47. package/dist/client/endpoints/repair-printability.js.map +1 -0
  48. package/dist/client/endpoints/resize.d.ts +5 -0
  49. package/dist/client/endpoints/resize.d.ts.map +1 -0
  50. package/dist/client/endpoints/resize.js +7 -0
  51. package/dist/client/endpoints/resize.js.map +1 -0
  52. package/dist/client/endpoints/retexture.d.ts +5 -0
  53. package/dist/client/endpoints/retexture.d.ts.map +1 -0
  54. package/dist/client/endpoints/retexture.js +7 -0
  55. package/dist/client/endpoints/retexture.js.map +1 -0
  56. package/dist/client/endpoints/rigging.d.ts +6 -0
  57. package/dist/client/endpoints/rigging.d.ts.map +1 -0
  58. package/dist/client/endpoints/rigging.js +8 -0
  59. package/dist/client/endpoints/rigging.js.map +1 -0
  60. package/dist/client/endpoints/text-to-3d.d.ts +6 -0
  61. package/dist/client/endpoints/text-to-3d.d.ts.map +1 -0
  62. package/dist/client/endpoints/text-to-3d.js +8 -0
  63. package/dist/client/endpoints/text-to-3d.js.map +1 -0
  64. package/dist/client/endpoints/text-to-image.d.ts +5 -0
  65. package/dist/client/endpoints/text-to-image.d.ts.map +1 -0
  66. package/dist/client/endpoints/text-to-image.js +7 -0
  67. package/dist/client/endpoints/text-to-image.js.map +1 -0
  68. package/dist/client/errors.d.ts +23 -0
  69. package/dist/client/errors.d.ts.map +1 -0
  70. package/dist/client/errors.js +82 -0
  71. package/dist/client/errors.js.map +1 -0
  72. package/dist/client/index.d.ts +48 -0
  73. package/dist/client/index.d.ts.map +1 -0
  74. package/dist/client/index.js +147 -0
  75. package/dist/client/index.js.map +1 -0
  76. package/dist/client/types.d.ts +298 -0
  77. package/dist/client/types.d.ts.map +1 -0
  78. package/dist/client/types.js +97 -0
  79. package/dist/client/types.js.map +1 -0
  80. package/dist/cmd/analyze-printability.d.ts +8 -0
  81. package/dist/cmd/analyze-printability.d.ts.map +1 -0
  82. package/dist/cmd/analyze-printability.js +34 -0
  83. package/dist/cmd/analyze-printability.js.map +1 -0
  84. package/dist/cmd/animate.d.ts +9 -0
  85. package/dist/cmd/animate.d.ts.map +1 -0
  86. package/dist/cmd/animate.js +51 -0
  87. package/dist/cmd/animate.js.map +1 -0
  88. package/dist/cmd/api.d.ts +9 -0
  89. package/dist/cmd/api.d.ts.map +1 -0
  90. package/dist/cmd/api.js +50 -0
  91. package/dist/cmd/api.js.map +1 -0
  92. package/dist/cmd/auth.d.ts +19 -0
  93. package/dist/cmd/auth.d.ts.map +1 -0
  94. package/dist/cmd/auth.js +583 -0
  95. package/dist/cmd/auth.js.map +1 -0
  96. package/dist/cmd/balance.d.ts +6 -0
  97. package/dist/cmd/balance.d.ts.map +1 -0
  98. package/dist/cmd/balance.js +14 -0
  99. package/dist/cmd/balance.js.map +1 -0
  100. package/dist/cmd/convert.d.ts +8 -0
  101. package/dist/cmd/convert.d.ts.map +1 -0
  102. package/dist/cmd/convert.js +40 -0
  103. package/dist/cmd/convert.js.map +1 -0
  104. package/dist/cmd/delete.d.ts +7 -0
  105. package/dist/cmd/delete.d.ts.map +1 -0
  106. package/dist/cmd/delete.js +19 -0
  107. package/dist/cmd/delete.js.map +1 -0
  108. package/dist/cmd/image-to-3d.d.ts +12 -0
  109. package/dist/cmd/image-to-3d.d.ts.map +1 -0
  110. package/dist/cmd/image-to-3d.js +97 -0
  111. package/dist/cmd/image-to-3d.js.map +1 -0
  112. package/dist/cmd/image-to-image.d.ts +5 -0
  113. package/dist/cmd/image-to-image.d.ts.map +1 -0
  114. package/dist/cmd/image-to-image.js +56 -0
  115. package/dist/cmd/image-to-image.js.map +1 -0
  116. package/dist/cmd/make.d.ts +31 -0
  117. package/dist/cmd/make.d.ts.map +1 -0
  118. package/dist/cmd/make.js +195 -0
  119. package/dist/cmd/make.js.map +1 -0
  120. package/dist/cmd/multi-color-print.d.ts +6 -0
  121. package/dist/cmd/multi-color-print.d.ts.map +1 -0
  122. package/dist/cmd/multi-color-print.js +44 -0
  123. package/dist/cmd/multi-color-print.js.map +1 -0
  124. package/dist/cmd/multi-image-to-3d.d.ts +5 -0
  125. package/dist/cmd/multi-image-to-3d.d.ts.map +1 -0
  126. package/dist/cmd/multi-image-to-3d.js +72 -0
  127. package/dist/cmd/multi-image-to-3d.js.map +1 -0
  128. package/dist/cmd/remesh.d.ts +8 -0
  129. package/dist/cmd/remesh.d.ts.map +1 -0
  130. package/dist/cmd/remesh.js +49 -0
  131. package/dist/cmd/remesh.js.map +1 -0
  132. package/dist/cmd/repair-printability.d.ts +7 -0
  133. package/dist/cmd/repair-printability.d.ts.map +1 -0
  134. package/dist/cmd/repair-printability.js +32 -0
  135. package/dist/cmd/repair-printability.js.map +1 -0
  136. package/dist/cmd/resize.d.ts +8 -0
  137. package/dist/cmd/resize.d.ts.map +1 -0
  138. package/dist/cmd/resize.js +51 -0
  139. package/dist/cmd/resize.js.map +1 -0
  140. package/dist/cmd/resources.d.ts +18 -0
  141. package/dist/cmd/resources.d.ts.map +1 -0
  142. package/dist/cmd/resources.js +59 -0
  143. package/dist/cmd/resources.js.map +1 -0
  144. package/dist/cmd/retexture.d.ts +5 -0
  145. package/dist/cmd/retexture.d.ts.map +1 -0
  146. package/dist/cmd/retexture.js +64 -0
  147. package/dist/cmd/retexture.js.map +1 -0
  148. package/dist/cmd/rigging.d.ts +6 -0
  149. package/dist/cmd/rigging.d.ts.map +1 -0
  150. package/dist/cmd/rigging.js +40 -0
  151. package/dist/cmd/rigging.js.map +1 -0
  152. package/dist/cmd/text-to-3d.d.ts +14 -0
  153. package/dist/cmd/text-to-3d.d.ts.map +1 -0
  154. package/dist/cmd/text-to-3d.js +76 -0
  155. package/dist/cmd/text-to-3d.js.map +1 -0
  156. package/dist/cmd/text-to-image.d.ts +5 -0
  157. package/dist/cmd/text-to-image.d.ts.map +1 -0
  158. package/dist/cmd/text-to-image.js +53 -0
  159. package/dist/cmd/text-to-image.js.map +1 -0
  160. package/dist/index.d.ts +6 -0
  161. package/dist/index.d.ts.map +1 -0
  162. package/dist/index.js +46 -0
  163. package/dist/index.js.map +1 -0
  164. package/dist/internal/config.d.ts +46 -0
  165. package/dist/internal/config.d.ts.map +1 -0
  166. package/dist/internal/config.js +94 -0
  167. package/dist/internal/config.js.map +1 -0
  168. package/dist/internal/credentials.d.ts +106 -0
  169. package/dist/internal/credentials.d.ts.map +1 -0
  170. package/dist/internal/credentials.js +297 -0
  171. package/dist/internal/credentials.js.map +1 -0
  172. package/dist/internal/device-state.d.ts +45 -0
  173. package/dist/internal/device-state.d.ts.map +1 -0
  174. package/dist/internal/device-state.js +180 -0
  175. package/dist/internal/device-state.js.map +1 -0
  176. package/dist/internal/device.d.ts +79 -0
  177. package/dist/internal/device.d.ts.map +1 -0
  178. package/dist/internal/device.js +374 -0
  179. package/dist/internal/device.js.map +1 -0
  180. package/dist/internal/download.d.ts +34 -0
  181. package/dist/internal/download.d.ts.map +1 -0
  182. package/dist/internal/download.js +283 -0
  183. package/dist/internal/download.js.map +1 -0
  184. package/dist/internal/errors.d.ts +66 -0
  185. package/dist/internal/errors.d.ts.map +1 -0
  186. package/dist/internal/errors.js +169 -0
  187. package/dist/internal/errors.js.map +1 -0
  188. package/dist/internal/file-input.d.ts +24 -0
  189. package/dist/internal/file-input.d.ts.map +1 -0
  190. package/dist/internal/file-input.js +164 -0
  191. package/dist/internal/file-input.js.map +1 -0
  192. package/dist/internal/flags.d.ts +9 -0
  193. package/dist/internal/flags.d.ts.map +1 -0
  194. package/dist/internal/flags.js +31 -0
  195. package/dist/internal/flags.js.map +1 -0
  196. package/dist/internal/global-options.d.ts +16 -0
  197. package/dist/internal/global-options.d.ts.map +1 -0
  198. package/dist/internal/global-options.js +57 -0
  199. package/dist/internal/global-options.js.map +1 -0
  200. package/dist/internal/headless.d.ts +69 -0
  201. package/dist/internal/headless.d.ts.map +1 -0
  202. package/dist/internal/headless.js +101 -0
  203. package/dist/internal/headless.js.map +1 -0
  204. package/dist/internal/image-models.d.ts +20 -0
  205. package/dist/internal/image-models.d.ts.map +1 -0
  206. package/dist/internal/image-models.js +40 -0
  207. package/dist/internal/image-models.js.map +1 -0
  208. package/dist/internal/logger.d.ts +14 -0
  209. package/dist/internal/logger.d.ts.map +1 -0
  210. package/dist/internal/logger.js +42 -0
  211. package/dist/internal/logger.js.map +1 -0
  212. package/dist/internal/make-plan.d.ts +41 -0
  213. package/dist/internal/make-plan.d.ts.map +1 -0
  214. package/dist/internal/make-plan.js +67 -0
  215. package/dist/internal/make-plan.js.map +1 -0
  216. package/dist/internal/oauth.d.ts +95 -0
  217. package/dist/internal/oauth.d.ts.map +1 -0
  218. package/dist/internal/oauth.js +365 -0
  219. package/dist/internal/oauth.js.map +1 -0
  220. package/dist/internal/output.d.ts +15 -0
  221. package/dist/internal/output.d.ts.map +1 -0
  222. package/dist/internal/output.js +66 -0
  223. package/dist/internal/output.js.map +1 -0
  224. package/dist/internal/payload.d.ts +9 -0
  225. package/dist/internal/payload.d.ts.map +1 -0
  226. package/dist/internal/payload.js +42 -0
  227. package/dist/internal/payload.js.map +1 -0
  228. package/dist/internal/poll.d.ts +17 -0
  229. package/dist/internal/poll.d.ts.map +1 -0
  230. package/dist/internal/poll.js +27 -0
  231. package/dist/internal/poll.js.map +1 -0
  232. package/dist/internal/pricing.d.ts +23 -0
  233. package/dist/internal/pricing.d.ts.map +1 -0
  234. package/dist/internal/pricing.js +24 -0
  235. package/dist/internal/pricing.js.map +1 -0
  236. package/dist/internal/report.d.ts +40 -0
  237. package/dist/internal/report.d.ts.map +1 -0
  238. package/dist/internal/report.js +48 -0
  239. package/dist/internal/report.js.map +1 -0
  240. package/dist/internal/runtime.d.ts +66 -0
  241. package/dist/internal/runtime.d.ts.map +1 -0
  242. package/dist/internal/runtime.js +160 -0
  243. package/dist/internal/runtime.js.map +1 -0
  244. package/dist/internal/task-command.d.ts +39 -0
  245. package/dist/internal/task-command.d.ts.map +1 -0
  246. package/dist/internal/task-command.js +189 -0
  247. package/dist/internal/task-command.js.map +1 -0
  248. package/dist/internal/update-notifier.d.ts +160 -0
  249. package/dist/internal/update-notifier.d.ts.map +1 -0
  250. package/dist/internal/update-notifier.js +445 -0
  251. package/dist/internal/update-notifier.js.map +1 -0
  252. package/dist/internal/user-agent.d.ts +6 -0
  253. package/dist/internal/user-agent.d.ts.map +1 -0
  254. package/dist/internal/user-agent.js +7 -0
  255. package/dist/internal/user-agent.js.map +1 -0
  256. package/dist/internal/version.d.ts +2 -0
  257. package/dist/internal/version.d.ts.map +1 -0
  258. package/dist/internal/version.js +11 -0
  259. package/dist/internal/version.js.map +1 -0
  260. package/dist/root.d.ts +13 -0
  261. package/dist/root.d.ts.map +1 -0
  262. package/dist/root.js +148 -0
  263. package/dist/root.js.map +1 -0
  264. package/package.json +65 -0
  265. package/skills/meshy-cli/SKILL.md +99 -0
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Output rendering. Keep stdout machine-parseable by default; `pretty` is
3
+ * opt-in for human eyes.
4
+ *
5
+ * Note: stdout JSON may carry `_notice.update` when a newer meshy-cli version
6
+ * is available. See update-notifier.ts for the two-channel design.
7
+ */
8
+ import { writeFileSync } from "node:fs";
9
+ import { attachUpdateNotice, getUpdateNotice, printHumanUpdateHint } from "./update-notifier.js";
10
+ export function emit(value, opts) {
11
+ const notice = getUpdateNotice();
12
+ const decorated = attachUpdateNotice(value, opts.format, notice);
13
+ const text = render(decorated, opts.format);
14
+ if (opts.file) {
15
+ writeFileSync(opts.file, text.endsWith("\n") ? text : `${text}\n`, "utf8");
16
+ }
17
+ else {
18
+ process.stdout.write(text.endsWith("\n") ? text : `${text}\n`);
19
+ }
20
+ // After the output write in both branches: interactive users get the hint
21
+ // even when JSON goes to a file; -o task flows don't double-print because
22
+ // they bypass emit() via printReport.
23
+ printHumanUpdateHint(notice, process);
24
+ }
25
+ function render(value, format) {
26
+ switch (format) {
27
+ case "json":
28
+ return JSON.stringify(value, null, 2);
29
+ case "ndjson":
30
+ if (Array.isArray(value))
31
+ return value.map((v) => JSON.stringify(v)).join("\n");
32
+ return JSON.stringify(value);
33
+ case "pretty":
34
+ return renderPretty(value);
35
+ }
36
+ }
37
+ function renderPretty(value, indent = 0) {
38
+ const pad = " ".repeat(indent);
39
+ if (value === null || value === undefined)
40
+ return `${pad}-`;
41
+ if (typeof value !== "object")
42
+ return `${pad}${String(value)}`;
43
+ if (Array.isArray(value)) {
44
+ if (value.length === 0)
45
+ return `${pad}[]`;
46
+ return value.map((v) => `${pad}- ${renderPretty(v, indent + 1).trimStart()}`).join("\n");
47
+ }
48
+ const entries = Object.entries(value);
49
+ if (entries.length === 0)
50
+ return `${pad}{}`;
51
+ return entries
52
+ .map(([k, v]) => {
53
+ if (v !== null && typeof v === "object") {
54
+ return `${pad}${k}:\n${renderPretty(v, indent + 1)}`;
55
+ }
56
+ return `${pad}${k}: ${v === null || v === undefined ? "-" : String(v)}`;
57
+ })
58
+ .join("\n");
59
+ }
60
+ export function parseOutputFormat(raw) {
61
+ const v = (raw ?? "json").toLowerCase();
62
+ if (v === "json" || v === "pretty" || v === "ndjson")
63
+ return v;
64
+ throw new Error(`invalid --format '${raw}'. Expected: json | pretty | ndjson`);
65
+ }
66
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/internal/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Build a request payload from structured CLI flags and optional raw JSON.
3
+ * Merge order (later wins): CLI defaults < --data < flag-supplied fields —
4
+ * pinned defaults must never clobber an explicit --data payload.
5
+ */
6
+ export declare function parseJsonFlag(raw: string | undefined, flag: string): Record<string, unknown>;
7
+ export declare function dropNullish(input: Record<string, unknown>): Record<string, unknown>;
8
+ export declare function mergePayload(...layers: Record<string, unknown>[]): Record<string, unknown>;
9
+ //# sourceMappingURL=payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/internal/payload.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAe5F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOnF;AAED,wBAAgB,YAAY,CAAC,GAAG,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAO1F"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Build a request payload from structured CLI flags and optional raw JSON.
3
+ * Merge order (later wins): CLI defaults < --data < flag-supplied fields —
4
+ * pinned defaults must never clobber an explicit --data payload.
5
+ */
6
+ import { readFileSync } from "node:fs";
7
+ export function parseJsonFlag(raw, flag) {
8
+ if (!raw)
9
+ return {};
10
+ const trimmed = raw.trim();
11
+ const text = trimmed.startsWith("@") ? readFileSync(trimmed.slice(1), "utf8") : trimmed;
12
+ let parsed;
13
+ try {
14
+ parsed = JSON.parse(text);
15
+ }
16
+ catch (err) {
17
+ const msg = err instanceof Error ? err.message : String(err);
18
+ throw new Error(`invalid JSON passed to ${flag}: ${msg}`);
19
+ }
20
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
21
+ throw new Error(`${flag} must be a JSON object (got ${Array.isArray(parsed) ? "array" : typeof parsed})`);
22
+ }
23
+ return parsed;
24
+ }
25
+ export function dropNullish(input) {
26
+ const out = {};
27
+ for (const [k, v] of Object.entries(input)) {
28
+ if (v === undefined || v === null)
29
+ continue;
30
+ out[k] = v;
31
+ }
32
+ return out;
33
+ }
34
+ export function mergePayload(...layers) {
35
+ const merged = {};
36
+ for (const layer of layers) {
37
+ // Within a layer an undefined value must not erase a weaker layer's value.
38
+ Object.assign(merged, dropNullish(layer));
39
+ }
40
+ return merged;
41
+ }
42
+ //# sourceMappingURL=payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/internal/payload.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,UAAU,aAAa,CAAC,GAAuB,EAAE,IAAY;IACjE,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACxF,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,+BAA+B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,MAAM,GAAG,CAAC,CAAC;IAC5G,CAAC;IACD,OAAO,MAAiC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAA8B;IACxD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAG,MAAiC;IAC/D,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,2EAA2E;QAC3E,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Poll a task endpoint until it reaches a terminal status or the deadline hits.
3
+ * Backoff grows 1.5× per iteration up to a 20s cap.
4
+ */
5
+ import type { TaskEndpoint } from "../client/endpoints/base.js";
6
+ import { type Task } from "../client/types.js";
7
+ export interface PollOptions {
8
+ timeoutSeconds: number;
9
+ intervalMs: number;
10
+ onTick?: (task: Task) => void;
11
+ }
12
+ export interface PollResult {
13
+ task: Task;
14
+ timedOut: boolean;
15
+ }
16
+ export declare function pollUntilTerminal(endpoint: TaskEndpoint, taskId: string, opts: PollOptions): Promise<PollResult>;
17
+ //# sourceMappingURL=poll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../../src/internal/poll.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAqB,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,UAAU,CAAC,CAiBrB"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Poll a task endpoint until it reaches a terminal status or the deadline hits.
3
+ * Backoff grows 1.5× per iteration up to a 20s cap.
4
+ */
5
+ import { TERMINAL_STATUSES } from "../client/types.js";
6
+ export async function pollUntilTerminal(endpoint, taskId, opts) {
7
+ const deadline = Date.now() + Math.max(0, opts.timeoutSeconds) * 1000;
8
+ const baseInterval = Math.max(250, opts.intervalMs);
9
+ let interval = baseInterval;
10
+ const cap = Math.max(baseInterval, 20_000);
11
+ while (true) {
12
+ const task = await endpoint.retrieve(taskId);
13
+ opts.onTick?.(task);
14
+ if (TERMINAL_STATUSES.has(task.status)) {
15
+ return { task, timedOut: false };
16
+ }
17
+ const remaining = deadline - Date.now();
18
+ if (remaining <= 0)
19
+ return { task, timedOut: true };
20
+ await sleep(Math.min(interval, Math.max(remaining, 100)));
21
+ interval = Math.min(cap, Math.floor(interval * 1.5));
22
+ }
23
+ }
24
+ function sleep(ms) {
25
+ return new Promise((resolve) => setTimeout(resolve, ms));
26
+ }
27
+ //# sourceMappingURL=poll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/internal/poll.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAa,MAAM,oBAAoB,CAAC;AAalE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAsB,EACtB,MAAc,EACd,IAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,QAAQ,GAAG,YAAY,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAE3C,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC;QACD,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACpD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1D,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Credit estimates for the chains `make` runs.
3
+ *
4
+ * Deliberately narrow: only the operations `make` can start are listed. A
5
+ * fuller table would rot silently — nothing in the CLI verifies these numbers
6
+ * against the server, so every value here is an *estimate* shown before the
7
+ * spend, never an accounting record. `meshy balance` is the source of truth.
8
+ *
9
+ * Prices: https://docs.meshy.ai/en/api/pricing
10
+ */
11
+ export declare const PRICING_DOCS = "https://docs.meshy.ai/en/api/pricing";
12
+ /** Per-operation estimates, keyed by the step name `make` reports. */
13
+ export declare const CREDIT_ESTIMATES: {
14
+ /** text-to-3d --mode preview: geometry only. */
15
+ readonly "text-to-3d:preview": 20;
16
+ /** text-to-3d --mode refine: textures the preview it came from. */
17
+ readonly "text-to-3d:refine": 10;
18
+ /** image-to-3d --should-texture true: geometry and textures in one task. */
19
+ readonly "image-to-3d:textured": 30;
20
+ };
21
+ export type PricedOperation = keyof typeof CREDIT_ESTIMATES;
22
+ export declare function estimateFor(op: PricedOperation): number;
23
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/internal/pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,YAAY,yCAAyC,CAAC;AAEnE,sEAAsE;AACtE,eAAO,MAAM,gBAAgB;IAC3B,gDAAgD;;IAEhD,mEAAmE;;IAEnE,4EAA4E;;CAEpE,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE5D,wBAAgB,WAAW,CAAC,EAAE,EAAE,eAAe,GAAG,MAAM,CAEvD"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Credit estimates for the chains `make` runs.
3
+ *
4
+ * Deliberately narrow: only the operations `make` can start are listed. A
5
+ * fuller table would rot silently — nothing in the CLI verifies these numbers
6
+ * against the server, so every value here is an *estimate* shown before the
7
+ * spend, never an accounting record. `meshy balance` is the source of truth.
8
+ *
9
+ * Prices: https://docs.meshy.ai/en/api/pricing
10
+ */
11
+ export const PRICING_DOCS = "https://docs.meshy.ai/en/api/pricing";
12
+ /** Per-operation estimates, keyed by the step name `make` reports. */
13
+ export const CREDIT_ESTIMATES = {
14
+ /** text-to-3d --mode preview: geometry only. */
15
+ "text-to-3d:preview": 20,
16
+ /** text-to-3d --mode refine: textures the preview it came from. */
17
+ "text-to-3d:refine": 10,
18
+ /** image-to-3d --should-texture true: geometry and textures in one task. */
19
+ "image-to-3d:textured": 30,
20
+ };
21
+ export function estimateFor(op) {
22
+ return CREDIT_ESTIMATES[op];
23
+ }
24
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/internal/pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,sCAAsC,CAAC;AAEnE,sEAAsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,gDAAgD;IAChD,oBAAoB,EAAE,EAAE;IACxB,mEAAmE;IACnE,mBAAmB,EAAE,EAAE;IACvB,4EAA4E;IAC5E,sBAAsB,EAAE,EAAE;CAClB,CAAC;AAIX,MAAM,UAAU,WAAW,CAAC,EAAmB;IAC7C,OAAO,gBAAgB,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Human-readable status report printed when `-o` is in play.
3
+ *
4
+ * Format:
5
+ * Status: SUCCESS | FAIL
6
+ * Task Id: <id>
7
+ * Generated <type>
8
+ * Saved to:
9
+ * - <path>
10
+ * - <path>
11
+ * Metadata path: <path>
12
+ * [optional update notice line when a newer version is available]
13
+ *
14
+ * Success reports list every saved file and the meta.json path. Failure
15
+ * reports include the task_error.message (if present) and skip the Saved
16
+ * to / Metadata path lines since nothing is written.
17
+ */
18
+ import type { Task } from "../client/types.js";
19
+ import type { UpdateNotice } from "./update-notifier.js";
20
+ export interface SuccessReport {
21
+ status: "SUCCESS";
22
+ taskId: string;
23
+ type: string;
24
+ savedFiles: string[];
25
+ metadataPath: string;
26
+ _notice?: UpdateNotice;
27
+ }
28
+ export interface FailReport {
29
+ status: "FAIL";
30
+ taskId: string;
31
+ type: string;
32
+ error?: string;
33
+ timedOut?: boolean;
34
+ _notice?: UpdateNotice;
35
+ }
36
+ export type Report = SuccessReport | FailReport;
37
+ export declare function formatReport(r: Report): string;
38
+ export declare function printReport(r: Report): void;
39
+ export declare function reportFromTask(task: Task, resource: string): Pick<Report, "taskId" | "type">;
40
+ //# sourceMappingURL=report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/internal/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,MAAM,MAAM,GAAG,aAAa,GAAG,UAAU,CAAC;AAEhD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAkB9C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC,CAK5F"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Human-readable status report printed when `-o` is in play.
3
+ *
4
+ * Format:
5
+ * Status: SUCCESS | FAIL
6
+ * Task Id: <id>
7
+ * Generated <type>
8
+ * Saved to:
9
+ * - <path>
10
+ * - <path>
11
+ * Metadata path: <path>
12
+ * [optional update notice line when a newer version is available]
13
+ *
14
+ * Success reports list every saved file and the meta.json path. Failure
15
+ * reports include the task_error.message (if present) and skip the Saved
16
+ * to / Metadata path lines since nothing is written.
17
+ */
18
+ export function formatReport(r) {
19
+ const lines = [];
20
+ lines.push(`Status: ${r.status}`);
21
+ lines.push(`Task Id: ${r.taskId}`);
22
+ lines.push(`Generated ${r.type || "(unknown)"}`);
23
+ if (r.status === "SUCCESS") {
24
+ lines.push("Saved to:");
25
+ for (const file of r.savedFiles)
26
+ lines.push(`- ${file}`);
27
+ lines.push(`Metadata path: ${r.metadataPath}`);
28
+ }
29
+ else {
30
+ if (r.timedOut)
31
+ lines.push("Error: polling timed out before the task reached a terminal status");
32
+ else if (r.error)
33
+ lines.push(`Error: ${r.error}`);
34
+ }
35
+ if (r._notice)
36
+ lines.push(r._notice.message);
37
+ return `${lines.join("\n")}\n`;
38
+ }
39
+ export function printReport(r) {
40
+ process.stdout.write(formatReport(r));
41
+ }
42
+ export function reportFromTask(task, resource) {
43
+ return {
44
+ taskId: task.id,
45
+ type: task.type || resource,
46
+ };
47
+ }
48
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/internal/report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAyBH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;IAEjD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,CAAC,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;aAC5F,IAAI,CAAC,CAAC,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7C,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAU,EAAE,QAAgB;IACzD,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ;KAC5B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Shared execution context bound to the root command — lazy-loads the client
3
+ * so sub-commands that don't need credentials (e.g. --help) still work.
4
+ *
5
+ * buildRuntime is async so it can silently refresh an expiring OAuth token
6
+ * before constructing the client. All callers are async command actions.
7
+ */
8
+ import { Command } from "commander";
9
+ import { MeshyClient } from "../client/index.js";
10
+ import { type ConfigOverrides, type MeshyConfig } from "./config.js";
11
+ import type { LogLevel } from "./logger.js";
12
+ import type { OutputFormat } from "./output.js";
13
+ export interface GlobalFlags {
14
+ apiKey?: string;
15
+ baseUrlV1?: string;
16
+ baseUrlV2?: string;
17
+ format: OutputFormat;
18
+ json?: boolean;
19
+ output?: string;
20
+ verbose: boolean;
21
+ logLevel?: LogLevel;
22
+ }
23
+ export interface Runtime {
24
+ readonly flags: GlobalFlags;
25
+ readonly config: MeshyConfig;
26
+ readonly client: MeshyClient;
27
+ }
28
+ /**
29
+ * Silently refresh an OAuth credential when it is near expiry or already
30
+ * expired, then return the config to use (refreshed+reloaded, or original).
31
+ *
32
+ * No-ops unless:
33
+ * - credentialSource === "file"
34
+ * - the active profile is kind "oauth" with a refresh_token
35
+ * - the access_token expires within REFRESH_SKEW_MS (or is already past)
36
+ *
37
+ * On a successful refresh the new tokens are written back to the credentials
38
+ * file and loadConfig is re-run so the returned config carries the fresh token.
39
+ *
40
+ * On refresh failure:
41
+ * - B3 concurrent-rotation check: if another process already rotated the
42
+ * token (different access_token in the file, comfortably unexpired), adopt
43
+ * it and proceed.
44
+ * - Token already expired and no rotation detected → throws authRequiredError.
45
+ * - Token still valid and no rotation detected → swallows, returns original.
46
+ *
47
+ * `overrides` must be the same ConfigOverrides used to produce `config` so
48
+ * that loadConfig re-runs with identical flag/env inputs.
49
+ */
50
+ export declare function refreshOAuthCredentialIfNeeded(config: MeshyConfig, overrides: ConfigOverrides): Promise<MeshyConfig>;
51
+ /**
52
+ * Build (or return the cached) runtime context.
53
+ *
54
+ * When the active credential is an OAuth profile with a refresh_token and the
55
+ * access_token is within REFRESH_SKEW_MS of expiry (or already expired), this
56
+ * silently refreshes the token, writes the new tokens back to the credentials
57
+ * file, and re-runs loadConfig so the client carries the fresh token.
58
+ *
59
+ * Refresh network/5xx failures with an unexpired token are swallowed (debug-
60
+ * logged only) so they never fail the command. If the token is already expired
61
+ * and refresh fails, throws authRequiredError pointing at `meshy auth login`.
62
+ */
63
+ export declare function buildRuntime(flags: GlobalFlags): Promise<Runtime>;
64
+ /** Pull the resolved global flags from the top-level command. */
65
+ export declare function readGlobalFlags(cmd: Command): GlobalFlags;
66
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/internal/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAc,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAKjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;CAC9B;AAOD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,WAAW,CAAC,CA4EtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAevE;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAuBzD"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Shared execution context bound to the root command — lazy-loads the client
3
+ * so sub-commands that don't need credentials (e.g. --help) still work.
4
+ *
5
+ * buildRuntime is async so it can silently refresh an expiring OAuth token
6
+ * before constructing the client. All callers are async command actions.
7
+ */
8
+ import { MeshyClient } from "../client/index.js";
9
+ import { loadConfig } from "./config.js";
10
+ import { credentialsPath, readCredentials, saveProfile } from "./credentials.js";
11
+ import { authRequiredError } from "./errors.js";
12
+ import { logger } from "./logger.js";
13
+ import { refreshTokens } from "./oauth.js";
14
+ let cached = null;
15
+ /** 60-second skew window: refresh if token expires within this many ms. */
16
+ const REFRESH_SKEW_MS = 60_000;
17
+ /**
18
+ * Silently refresh an OAuth credential when it is near expiry or already
19
+ * expired, then return the config to use (refreshed+reloaded, or original).
20
+ *
21
+ * No-ops unless:
22
+ * - credentialSource === "file"
23
+ * - the active profile is kind "oauth" with a refresh_token
24
+ * - the access_token expires within REFRESH_SKEW_MS (or is already past)
25
+ *
26
+ * On a successful refresh the new tokens are written back to the credentials
27
+ * file and loadConfig is re-run so the returned config carries the fresh token.
28
+ *
29
+ * On refresh failure:
30
+ * - B3 concurrent-rotation check: if another process already rotated the
31
+ * token (different access_token in the file, comfortably unexpired), adopt
32
+ * it and proceed.
33
+ * - Token already expired and no rotation detected → throws authRequiredError.
34
+ * - Token still valid and no rotation detected → swallows, returns original.
35
+ *
36
+ * `overrides` must be the same ConfigOverrides used to produce `config` so
37
+ * that loadConfig re-runs with identical flag/env inputs.
38
+ */
39
+ export async function refreshOAuthCredentialIfNeeded(config, overrides) {
40
+ if (config.credentialSource !== "file" || !config.credentialProfile) {
41
+ return config;
42
+ }
43
+ const credFile = credentialsPath(config.baseUrlV1);
44
+ const stored = readCredentials(credFile);
45
+ const profile = stored?.profiles[config.credentialProfile];
46
+ if (!profile ||
47
+ profile.kind !== "oauth" ||
48
+ !profile.refresh_token ||
49
+ !profile.access_token) {
50
+ return config;
51
+ }
52
+ const expiresAt = profile.expires_at ?? 0;
53
+ const needsRefresh = expiresAt - Date.now() < REFRESH_SKEW_MS;
54
+ if (!needsRefresh)
55
+ return config;
56
+ const alreadyExpired = expiresAt <= Date.now();
57
+ // Snapshot the access token we started with so we can detect a
58
+ // concurrent rotation after a refresh failure (B3).
59
+ const originalAccessToken = profile.access_token;
60
+ const profileName = config.credentialProfile;
61
+ try {
62
+ const tok = await refreshTokens({
63
+ baseUrlV1: config.baseUrlV1,
64
+ refreshToken: profile.refresh_token,
65
+ });
66
+ // Write back: preserve profile name and created_at, update tokens.
67
+ saveProfile(credFile, profileName, {
68
+ kind: "oauth",
69
+ access_token: tok.access_token,
70
+ refresh_token: tok.refresh_token,
71
+ expires_at: Date.now() + tok.expires_in * 1000,
72
+ user_id: tok.user_id ?? profile.user_id,
73
+ created_at: profile.created_at,
74
+ }, { makeActive: false });
75
+ // Re-run loadConfig so the caller carries the fresh token.
76
+ return loadConfig(overrides);
77
+ }
78
+ catch (err) {
79
+ // B3: Read-after-write — another concurrent CLI process may have
80
+ // already rotated the token (server-side refresh-token rotation).
81
+ // Re-read the file; if the active profile now holds a DIFFERENT
82
+ // access token that is comfortably unexpired (>REFRESH_SKEW_MS),
83
+ // adopt it and proceed rather than failing the command.
84
+ const afterFailure = readCredentials(credFile);
85
+ const afterProfile = profileName ? afterFailure?.profiles[profileName] : undefined;
86
+ if (afterProfile?.kind === "oauth" &&
87
+ afterProfile.access_token &&
88
+ afterProfile.access_token !== originalAccessToken &&
89
+ (afterProfile.expires_at ?? 0) - Date.now() > REFRESH_SKEW_MS) {
90
+ // Another process already rotated — adopt the new token.
91
+ logger.debug("OAuth refresh failed but concurrent rotation detected; adopting new token");
92
+ return loadConfig(overrides);
93
+ }
94
+ else if (alreadyExpired) {
95
+ throw authRequiredError("OAuth token expired and refresh failed. Run: meshy auth login");
96
+ }
97
+ else {
98
+ // Unexpired token, no concurrent rotation: swallow and proceed.
99
+ logger.debug("OAuth refresh failed (token still valid, proceeding)", err);
100
+ return config;
101
+ }
102
+ }
103
+ }
104
+ /**
105
+ * Build (or return the cached) runtime context.
106
+ *
107
+ * When the active credential is an OAuth profile with a refresh_token and the
108
+ * access_token is within REFRESH_SKEW_MS of expiry (or already expired), this
109
+ * silently refreshes the token, writes the new tokens back to the credentials
110
+ * file, and re-runs loadConfig so the client carries the fresh token.
111
+ *
112
+ * Refresh network/5xx failures with an unexpired token are swallowed (debug-
113
+ * logged only) so they never fail the command. If the token is already expired
114
+ * and refresh fails, throws authRequiredError pointing at `meshy auth login`.
115
+ */
116
+ export async function buildRuntime(flags) {
117
+ if (cached)
118
+ return cached;
119
+ const overrides = {
120
+ apiKey: flags.apiKey,
121
+ baseUrlV1: flags.baseUrlV1,
122
+ baseUrlV2: flags.baseUrlV2,
123
+ logLevel: flags.verbose ? "debug" : flags.logLevel,
124
+ };
125
+ const config = await refreshOAuthCredentialIfNeeded(loadConfig(overrides), overrides);
126
+ const client = new MeshyClient(config);
127
+ cached = { flags, config, client };
128
+ return cached;
129
+ }
130
+ /** Pull the resolved global flags from the top-level command. */
131
+ export function readGlobalFlags(cmd) {
132
+ const opts = cmd.optsWithGlobals();
133
+ // --json is an alias for --format json; --json wins if both are set.
134
+ const format = opts.json ? "json" : normalizeFormat(opts.format);
135
+ return {
136
+ apiKey: opts.apiKey,
137
+ baseUrlV1: opts.baseUrlV1,
138
+ baseUrlV2: opts.baseUrlV2,
139
+ format,
140
+ json: opts.json,
141
+ output: opts.output,
142
+ verbose: Boolean(opts.verbose),
143
+ logLevel: normalizeLogLevel(opts.logLevel),
144
+ };
145
+ }
146
+ function normalizeFormat(raw) {
147
+ const v = (raw ?? "json").toLowerCase();
148
+ if (v === "json" || v === "pretty" || v === "ndjson")
149
+ return v;
150
+ throw new Error(`invalid --format '${raw}'. Expected: json | pretty | ndjson`);
151
+ }
152
+ function normalizeLogLevel(raw) {
153
+ if (!raw)
154
+ return undefined;
155
+ const v = raw.toLowerCase();
156
+ if (v === "debug" || v === "info" || v === "warn" || v === "error" || v === "silent")
157
+ return v;
158
+ throw new Error(`invalid --log-level '${raw}'. Expected: debug | info | warn | error | silent`);
159
+ }
160
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/internal/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAA0C,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAqB3C,IAAI,MAAM,GAAmB,IAAI,CAAC;AAElC,2EAA2E;AAC3E,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,MAAmB,EACnB,SAA0B;IAE1B,IAAI,MAAM,CAAC,gBAAgB,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE3D,IACE,CAAC,OAAO;QACR,OAAO,CAAC,IAAI,KAAK,OAAO;QACxB,CAAC,OAAO,CAAC,aAAa;QACtB,CAAC,OAAO,CAAC,YAAY,EACrB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;IAC9D,IAAI,CAAC,YAAY;QAAE,OAAO,MAAM,CAAC;IAEjC,MAAM,cAAc,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;IAC/C,+DAA+D;IAC/D,oDAAoD;IACpD,MAAM,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC;YAC9B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,YAAY,EAAE,OAAO,CAAC,aAAa;SACpC,CAAC,CAAC;QACH,mEAAmE;QACnE,WAAW,CACT,QAAQ,EACR,WAAW,EACX;YACE,IAAI,EAAE,OAAO;YACb,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI;YAC9C,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;YACvC,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,EACD,EAAE,UAAU,EAAE,KAAK,EAAE,CACtB,CAAC;QACF,2DAA2D;QAC3D,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iEAAiE;QACjE,kEAAkE;QAClE,gEAAgE;QAChE,iEAAiE;QACjE,wDAAwD;QACxD,MAAM,YAAY,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,IACE,YAAY,EAAE,IAAI,KAAK,OAAO;YAC9B,YAAY,CAAC,YAAY;YACzB,YAAY,CAAC,YAAY,KAAK,mBAAmB;YACjD,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,EAC7D,CAAC;YACD,yDAAyD;YACzD,MAAM,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;YAC1F,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;aAAM,IAAI,cAAc,EAAE,CAAC;YAC1B,MAAM,iBAAiB,CACrB,+DAA+D,CAChE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,gEAAgE;YAChE,MAAM,CAAC,KAAK,CAAC,sDAAsD,EAAE,GAAG,CAAC,CAAC;YAC1E,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAkB;IACnD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,SAAS,GAAoB;QACjC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;KACnD,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IAEtF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,eAAe,EAS5B,CAAC;IACL,qEAAqE;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,MAAM;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAC9B,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAuB;IAC9C,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,qCAAqC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAuB;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC/F,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,mDAAmD,CAAC,CAAC;AAClG,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Factory that wires the uniform get/list/delete/wait/create subcommands for
3
+ * any async-task resource. Keeps the per-resource modules focused on their
4
+ * unique create-flag shape.
5
+ */
6
+ import { Command } from "commander";
7
+ import type { TaskEndpoint } from "../client/endpoints/base.js";
8
+ import type { MeshyClient, ResourceName } from "../client/index.js";
9
+ import { type Runtime } from "./runtime.js";
10
+ import { type Task } from "../client/types.js";
11
+ export interface CreateSpec {
12
+ description: string;
13
+ /** Attach resource-specific flags; return a structured payload. */
14
+ configure(cmd: Command): Command;
15
+ /** Convert parsed command options into a JSON payload merged into --data. */
16
+ toPayload(opts: Record<string, unknown>): Record<string, unknown>;
17
+ /**
18
+ * Pinned CLI defaults — the weakest payload layer, overridable by --data
19
+ * and by explicit flags. Computed defaults may read other options but must
20
+ * not throw (validation belongs in toPayload).
21
+ */
22
+ toDefaults?(opts: Record<string, unknown>): Record<string, unknown>;
23
+ }
24
+ export interface ResourceCommandSpec {
25
+ name: ResourceName;
26
+ description: string;
27
+ supportsList?: boolean;
28
+ create: CreateSpec;
29
+ endpointOf(client: MeshyClient): TaskEndpoint;
30
+ }
31
+ export declare function buildResourceCommand(spec: ResourceCommandSpec): Command;
32
+ /**
33
+ * Decide how to report a task whose status is (expected to be) terminal:
34
+ * - with `-o`: download artifacts to the filesystem and print the status
35
+ * report. Failed/timed-out tasks print the FAIL form without downloads.
36
+ * - without `-o`: emit the familiar JSON/pretty summary to stdout.
37
+ */
38
+ export declare function emitTerminalOutcome(task: Task, timedOut: boolean, elapsedSeconds: number | undefined, resourceName: string, runtime: Runtime): Promise<void>;
39
+ //# sourceMappingURL=task-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-command.d.ts","sourceRoot":"","sources":["../../src/internal/task-command.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQpE,OAAO,EAAgB,KAAK,OAAO,EAAmB,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAoC,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAIjF,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,6EAA6E;IAC7E,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClE;;;;OAIG;IACH,UAAU,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,CAAC;CAC/C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CA2HvE;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,OAAO,EACjB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAgDf"}