codai-sdk 0.69.0 → 0.71.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.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- //#region src/http.ts
1
+ // src/http.ts
2
2
  var CodaiError = class extends Error {
3
3
  status;
4
4
  body;
@@ -258,16 +258,14 @@ function sleep(ms) {
258
258
  return new Promise((r) => setTimeout(r, ms));
259
259
  }
260
260
 
261
- //#endregion
262
- //#region src/resources/_shared.ts
261
+ // src/resources/_shared.ts
263
262
  function stripUndefined(obj) {
264
263
  const out = {};
265
264
  for (const [k, v] of Object.entries(obj)) if (v !== void 0) out[k] = v;
266
265
  return out;
267
266
  }
268
267
 
269
- //#endregion
270
- //#region src/resources/account.ts
268
+ // src/resources/account.ts
271
269
  var Account = class {
272
270
  http;
273
271
  constructor(http) {
@@ -341,8 +339,7 @@ var PhoneModels = class {
341
339
  }
342
340
  };
343
341
 
344
- //#endregion
345
- //#region src/resources/agents.ts
342
+ // src/resources/agents.ts
346
343
  /** `/v1/agents/*` — synchronous runs and the persisted async run lifecycle. */
347
344
  var AgentRuns = class {
348
345
  http;
@@ -436,8 +433,7 @@ var Agents = class {
436
433
  }
437
434
  };
438
435
 
439
- //#endregion
440
- //#region src/resources/audio.ts
436
+ // src/resources/audio.ts
441
437
  /** `POST /v1/audio/transcriptions`, `POST /v1/audio/speech` and `POST /v1/audio/speech/stream`. */
442
438
  function base64ToBytes$1(b64) {
443
439
  const bin = atob(b64);
@@ -564,8 +560,7 @@ var Audio = class {
564
560
  }
565
561
  };
566
562
 
567
- //#endregion
568
- //#region src/resources/billing.ts
563
+ // src/resources/billing.ts
569
564
  var Billing = class {
570
565
  http;
571
566
  constructor(http) {
@@ -637,8 +632,7 @@ var Billing = class {
637
632
  }
638
633
  };
639
634
 
640
- //#endregion
641
- //#region src/resources/cards.ts
635
+ // src/resources/cards.ts
642
636
  var Cards = class {
643
637
  http;
644
638
  constructor(http) {
@@ -765,8 +759,7 @@ var Cards = class {
765
759
  }
766
760
  };
767
761
 
768
- //#endregion
769
- //#region src/resources/chat.ts
762
+ // src/resources/chat.ts
770
763
  /** `POST /v1/chat/completions` — OpenAI-compatible completions (JSON + SSE). */
771
764
  function toUsage(u) {
772
765
  if (!u) return null;
@@ -905,8 +898,7 @@ var Chat = class {
905
898
  }
906
899
  };
907
900
 
908
- //#endregion
909
- //#region src/resources/devices.ts
901
+ // src/resources/devices.ts
910
902
  var Devices = class {
911
903
  http;
912
904
  constructor(http) {
@@ -960,8 +952,7 @@ var Devices = class {
960
952
  }
961
953
  };
962
954
 
963
- //#endregion
964
- //#region src/resources/embeddings.ts
955
+ // src/resources/embeddings.ts
965
956
  var Embeddings = class {
966
957
  http;
967
958
  constructor(http) {
@@ -987,8 +978,7 @@ var Embeddings = class {
987
978
  }
988
979
  };
989
980
 
990
- //#endregion
991
- //#region src/resources/environments.ts
981
+ // src/resources/environments.ts
992
982
  const envPath = (id, suffix = "") => `/v1/environments/${encodeURIComponent(id)}${suffix}`;
993
983
  /** Absolute environment path → `/files/<each segment URL-encoded>`. */
994
984
  const filePath$1 = (path) => path.replace(/^\/+/, "").split("/").map((s) => encodeURIComponent(s)).join("/");
@@ -1332,8 +1322,7 @@ var Environments = class {
1332
1322
  }
1333
1323
  };
1334
1324
 
1335
- //#endregion
1336
- //#region src/resources/health.ts
1325
+ // src/resources/health.ts
1337
1326
  var Health = class {
1338
1327
  http;
1339
1328
  constructor(http) {
@@ -1370,8 +1359,7 @@ var Health = class {
1370
1359
  }
1371
1360
  };
1372
1361
 
1373
- //#endregion
1374
- //#region src/resources/hosts.ts
1362
+ // src/resources/hosts.ts
1375
1363
  /** `/v1/hosts/*` — host relay (desktop announces itself; clients exec ops on it). */
1376
1364
  var Hosts = class {
1377
1365
  http;
@@ -1438,8 +1426,7 @@ var Hosts = class {
1438
1426
  }
1439
1427
  };
1440
1428
 
1441
- //#endregion
1442
- //#region src/resources/assets.ts
1429
+ // src/resources/assets.ts
1443
1430
  /** True for a `data` item that is a stored asset rather than inline base64. */
1444
1431
  function isAssetDto(item) {
1445
1432
  return typeof item === "object" && item !== null && "asset_id" in item;
@@ -1514,8 +1501,7 @@ var Assets = class {
1514
1501
  }
1515
1502
  };
1516
1503
 
1517
- //#endregion
1518
- //#region src/resources/images.ts
1504
+ // src/resources/images.ts
1519
1505
  /** Image generation typically takes 5–30 s; the gateway allows 120 s upstream. */
1520
1506
  const MIN_IMAGE_TIMEOUT_MS = 15e4;
1521
1507
  function decodeBase64$1(b64) {
@@ -1573,8 +1559,7 @@ var Images = class {
1573
1559
  }
1574
1560
  };
1575
1561
 
1576
- //#endregion
1577
- //#region src/resources/media.ts
1562
+ // src/resources/media.ts
1578
1563
  /** Lyria 3 Pro can take minutes for a long song; the gateway allows 240 s upstream (+ lyrics check). */
1579
1564
  const MIN_MUSIC_TIMEOUT_MS = 3e5;
1580
1565
  function decodeBase64(b64) {
@@ -1583,7 +1568,7 @@ function decodeBase64(b64) {
1583
1568
  for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);
1584
1569
  return out;
1585
1570
  }
1586
- function abortableSleep$7(ms, signal) {
1571
+ function abortableSleep$8(ms, signal) {
1587
1572
  return new Promise((resolve, reject) => {
1588
1573
  if (signal?.aborted) return reject(signal.reason ?? /* @__PURE__ */ new Error("Aborted"));
1589
1574
  const t = setTimeout(() => {
@@ -1698,7 +1683,7 @@ var Videos = class {
1698
1683
  }
1699
1684
  if (st.status === "failed" || st.status === "filtered") throw new Error(`codai video job ${st.status}: ${st.error ?? "no details"}`);
1700
1685
  if (Date.now() + pollIntervalMs > deadline) throw new Error(`codai video job ${job.id} did not finish within ${timeoutMs} ms`);
1701
- await abortableSleep$7(pollIntervalMs, signal);
1686
+ await abortableSleep$8(pollIntervalMs, signal);
1702
1687
  }
1703
1688
  }
1704
1689
  };
@@ -1797,14 +1782,13 @@ var Renders = class {
1797
1782
  }
1798
1783
  if (st.status === "failed") throw new Error(`codai render failed: ${st.error ?? "no details"}`);
1799
1784
  if (Date.now() + pollIntervalMs > deadline) throw new Error(`codai render ${job.id} did not finish within ${timeoutMs} ms`);
1800
- await abortableSleep$7(pollIntervalMs, signal);
1785
+ await abortableSleep$8(pollIntervalMs, signal);
1801
1786
  }
1802
1787
  }
1803
1788
  };
1804
1789
 
1805
- //#endregion
1806
- //#region src/resources/documents.ts
1807
- function abortableSleep$6(ms, signal) {
1790
+ // src/resources/documents.ts
1791
+ function abortableSleep$7(ms, signal) {
1808
1792
  return new Promise((resolve, reject) => {
1809
1793
  if (signal?.aborted) return reject(signal.reason ?? /* @__PURE__ */ new Error("Aborted"));
1810
1794
  const t = setTimeout(() => {
@@ -1897,7 +1881,7 @@ var Documents = class {
1897
1881
  if (st.status === "succeeded") return st;
1898
1882
  if (st.status === "failed") throw new Error(`codai document preview failed: ${st.error ?? "no details"}`);
1899
1883
  if (Date.now() + pollIntervalMs > deadline) throw new Error(`codai document preview ${job.id} did not finish within ${timeoutMs} ms`);
1900
- await abortableSleep$6(pollIntervalMs, signal);
1884
+ await abortableSleep$7(pollIntervalMs, signal);
1901
1885
  }
1902
1886
  }
1903
1887
  /** Queue a deck video and poll `renders.retrieve` until it succeeds. Throws on `failed` or timeout. */
@@ -1929,15 +1913,14 @@ var Documents = class {
1929
1913
  }
1930
1914
  if (st.status === "failed") throw new Error(`codai deck video failed: ${st.error ?? "no details"}`);
1931
1915
  if (Date.now() + pollIntervalMs > deadline) throw new Error(`codai deck video ${accepted.id} did not finish within ${timeoutMs} ms`);
1932
- await abortableSleep$6(pollIntervalMs, signal);
1916
+ await abortableSleep$7(pollIntervalMs, signal);
1933
1917
  }
1934
1918
  }
1935
1919
  };
1936
1920
 
1937
- //#endregion
1938
- //#region src/resources/exports.ts
1939
- const path$6 = (id) => `/v1/studio/exports/${encodeURIComponent(id)}`;
1940
- function abortableSleep$5(ms, signal) {
1921
+ // src/resources/exports.ts
1922
+ const path$7 = (id) => `/v1/studio/exports/${encodeURIComponent(id)}`;
1923
+ function abortableSleep$6(ms, signal) {
1941
1924
  return new Promise((resolve, reject) => {
1942
1925
  if (signal?.aborted) return reject(signal.reason ?? /* @__PURE__ */ new Error("Aborted"));
1943
1926
  const t = setTimeout(() => {
@@ -1958,7 +1941,7 @@ var Exports = class {
1958
1941
  }
1959
1942
  /** The export: `queued` / `running`, then `succeeded` (signed `url`, valid 1 h) or `failed` (`error`). Free. */
1960
1943
  retrieve(id, opts = {}) {
1961
- return this.http.json(path$6(id), {
1944
+ return this.http.json(path$7(id), {
1962
1945
  ext: opts.ext,
1963
1946
  signal: opts.signal
1964
1947
  });
@@ -1978,16 +1961,15 @@ var Exports = class {
1978
1961
  });
1979
1962
  if (st.status === "succeeded" || st.status === "failed") return st;
1980
1963
  if (Date.now() + intervalMs > deadline) throw new Error(`codai export ${id} did not finish within ${timeoutMs} ms`);
1981
- await abortableSleep$5(intervalMs, signal);
1964
+ await abortableSleep$6(intervalMs, signal);
1982
1965
  }
1983
1966
  }
1984
1967
  };
1985
1968
 
1986
- //#endregion
1987
- //#region src/resources/creatives.ts
1969
+ // src/resources/creatives.ts
1988
1970
  /** True when a `build` answer is the 202 carousel / print export job (poll `exports.wait(r.export.id)`). */
1989
1971
  const isPagedBuild = (r) => "export" in r && r.export != null;
1990
- const path$5 = (id, tail = "") => `/v1/studio/creatives/${encodeURIComponent(id)}${tail}`;
1972
+ const path$6 = (id, tail = "") => `/v1/studio/creatives/${encodeURIComponent(id)}${tail}`;
1991
1973
  const lottieQuery = (q) => ({
1992
1974
  format: q.format,
1993
1975
  formats: q.formats,
@@ -2027,7 +2009,7 @@ var Creatives = class {
2027
2009
  }
2028
2010
  /** The document at the head (or `seq`) with signed `assets` (1 h URLs). */
2029
2011
  retrieve(id, query = {}, opts = {}) {
2030
- return this.http.json(path$5(id), {
2012
+ return this.http.json(path$6(id), {
2031
2013
  query: { seq: query.seq },
2032
2014
  ext: opts.ext,
2033
2015
  signal: opts.signal
@@ -2035,14 +2017,14 @@ var Creatives = class {
2035
2017
  }
2036
2018
  /** Compact text outline (+ formats and vars) — the cheapest structure for a prompt. */
2037
2019
  outline(id, opts = {}) {
2038
- return this.http.json(path$5(id, "/outline"), {
2020
+ return this.http.json(path$6(id, "/outline"), {
2039
2021
  ext: opts.ext,
2040
2022
  signal: opts.signal
2041
2023
  });
2042
2024
  }
2043
2025
  /** Node ids matching `query` (a string = text/name/id substring, or `{ text, type, sceneId, assetId, locked }`). */
2044
2026
  find(id, query, opts = {}) {
2045
- return this.http.json(path$5(id, "/find"), {
2027
+ return this.http.json(path$6(id, "/find"), {
2046
2028
  method: "POST",
2047
2029
  body: { query },
2048
2030
  ext: opts.ext,
@@ -2051,7 +2033,7 @@ var Creatives = class {
2051
2033
  }
2052
2034
  /** Full JSON of `ids` (scene ids return whole scenes) or of one `sceneId`. */
2053
2035
  subtree(id, body, opts = {}) {
2054
- return this.http.json(path$5(id, "/subtree"), {
2036
+ return this.http.json(path$6(id, "/subtree"), {
2055
2037
  method: "POST",
2056
2038
  body,
2057
2039
  ext: opts.ext,
@@ -2064,7 +2046,7 @@ var Creatives = class {
2064
2046
  * ops throw 400 with `code` (`invalid`, `not_found`, `locked`, `duplicate_id`).
2065
2047
  */
2066
2048
  edit(id, body, opts = {}) {
2067
- return this.http.json(path$5(id, "/ops"), {
2049
+ return this.http.json(path$6(id, "/ops"), {
2068
2050
  method: "POST",
2069
2051
  body: {
2070
2052
  base_seq: body.baseSeq,
@@ -2080,7 +2062,7 @@ var Creatives = class {
2080
2062
  }
2081
2063
  /** Version history, newest first (`beforeSeq` pages). */
2082
2064
  versions(id, query = {}, opts = {}) {
2083
- return this.http.json(path$5(id, "/versions"), {
2065
+ return this.http.json(path$6(id, "/versions"), {
2084
2066
  query: {
2085
2067
  before_seq: query.beforeSeq,
2086
2068
  limit: query.limit
@@ -2091,7 +2073,7 @@ var Creatives = class {
2091
2073
  }
2092
2074
  /** New head whose document is version `seq`'s (undo / redo). */
2093
2075
  revert(id, seq, opts = {}) {
2094
- return this.http.json(path$5(id, "/revert"), {
2076
+ return this.http.json(path$6(id, "/revert"), {
2095
2077
  method: "POST",
2096
2078
  body: { seq },
2097
2079
  ext: opts.ext,
@@ -2101,7 +2083,7 @@ var Creatives = class {
2101
2083
  }
2102
2084
  /** New creative from version `seq` (default the head). */
2103
2085
  fork(id, body = {}, opts = {}) {
2104
- return this.http.json(path$5(id, "/fork"), {
2086
+ return this.http.json(path$6(id, "/fork"), {
2105
2087
  method: "POST",
2106
2088
  body,
2107
2089
  ext: opts.ext,
@@ -2111,7 +2093,7 @@ var Creatives = class {
2111
2093
  }
2112
2094
  /** Soft-delete the creative. */
2113
2095
  delete(id, opts = {}) {
2114
- return this.http.json(path$5(id), {
2096
+ return this.http.json(path$6(id), {
2115
2097
  method: "DELETE",
2116
2098
  ext: opts.ext,
2117
2099
  signal: opts.signal
@@ -2124,7 +2106,7 @@ var Creatives = class {
2124
2106
  * `text_overflow_locale`); 404 `Locale not found.` for an unknown locale.
2125
2107
  */
2126
2108
  lint(id, body = {}, opts = {}) {
2127
- return this.http.json(path$5(id, "/lint"), {
2109
+ return this.http.json(path$6(id, "/lint"), {
2128
2110
  method: "POST",
2129
2111
  ...body.locale !== void 0 ? { body: { locale: body.locale } } : {},
2130
2112
  ext: opts.ext,
@@ -2133,7 +2115,7 @@ var Creatives = class {
2133
2115
  }
2134
2116
  /** Preview HTML (signed asset URLs) for `format` / one `scene` / a translation (`locale`). */
2135
2117
  compiled(id, query = {}, opts = {}) {
2136
- return this.http.json(path$5(id, "/compiled"), {
2118
+ return this.http.json(path$6(id, "/compiled"), {
2137
2119
  query: {
2138
2120
  format: query.format,
2139
2121
  scene: query.scene,
@@ -2152,7 +2134,7 @@ var Creatives = class {
2152
2134
  * `corner` when the creative uses TTS narration or AI images, else `none` (`none` with narration: 400 `ai_label_required`).
2153
2135
  */
2154
2136
  render(id, body = {}, opts = {}) {
2155
- return this.http.json(path$5(id, "/render"), {
2137
+ return this.http.json(path$6(id, "/render"), {
2156
2138
  method: "POST",
2157
2139
  body,
2158
2140
  ext: opts.ext,
@@ -2169,7 +2151,7 @@ var Creatives = class {
2169
2151
  * 400 `empty_audio` / `too_long` (20 min) / `no_lyrics`; video creatives use `render`.
2170
2152
  */
2171
2153
  renderAudio(id, body = {}, opts = {}) {
2172
- return this.http.json(path$5(id, "/render"), {
2154
+ return this.http.json(path$6(id, "/render"), {
2173
2155
  method: "POST",
2174
2156
  body,
2175
2157
  headers: opts.idempotencyKey ? { "Idempotency-Key": opts.idempotencyKey } : void 0,
@@ -2185,7 +2167,7 @@ var Creatives = class {
2185
2167
  * jobs per UTC day are free, then billed (`billed_micro_usd`).
2186
2168
  */
2187
2169
  frame(id, body, opts = {}) {
2188
- return this.http.json(path$5(id, "/frame"), {
2170
+ return this.http.json(path$6(id, "/frame"), {
2189
2171
  method: "POST",
2190
2172
  body,
2191
2173
  ext: opts.ext,
@@ -2200,7 +2182,7 @@ var Creatives = class {
2200
2182
  * Token-metered like any `codai` text call.
2201
2183
  */
2202
2184
  comment(id, body, opts = {}) {
2203
- return this.http.json(path$5(id, "/comments"), {
2185
+ return this.http.json(path$6(id, "/comments"), {
2204
2186
  method: "POST",
2205
2187
  body,
2206
2188
  ext: opts.ext,
@@ -2215,7 +2197,7 @@ var Creatives = class {
2215
2197
  * until `pickVariant`. 422 `no_edit` when no valid variant came back, 504 `timeout` after 90 s. Token-metered.
2216
2198
  */
2217
2199
  variants(id, body, opts = {}) {
2218
- return this.http.json(path$5(id, "/variants"), {
2200
+ return this.http.json(path$6(id, "/variants"), {
2219
2201
  method: "POST",
2220
2202
  body,
2221
2203
  ext: opts.ext,
@@ -2225,7 +2207,7 @@ var Creatives = class {
2225
2207
  }
2226
2208
  /** The latest variant group of a creative (`group_id: null` when none) with statuses and stored render state. */
2227
2209
  listVariants(id, opts = {}) {
2228
- return this.http.json(path$5(id, "/variants"), {
2210
+ return this.http.json(path$6(id, "/variants"), {
2229
2211
  ext: opts.ext,
2230
2212
  signal: opts.signal
2231
2213
  });
@@ -2235,7 +2217,7 @@ var Creatives = class {
2235
2217
  * else); the winner is marked `winner`, the rest of its group `rejected`.
2236
2218
  */
2237
2219
  pickVariant(id, variantId, body, opts = {}) {
2238
- return this.http.json(path$5(id, `/variants/${encodeURIComponent(variantId)}/pick`), {
2220
+ return this.http.json(path$6(id, `/variants/${encodeURIComponent(variantId)}/pick`), {
2239
2221
  method: "POST",
2240
2222
  body,
2241
2223
  ext: opts.ext,
@@ -2249,7 +2231,7 @@ var Creatives = class {
2249
2231
  * 400 `node_not_found` / `invalid_pick` / `duplicate_key`. Free.
2250
2232
  */
2251
2233
  saveTemplate(id, body, opts = {}) {
2252
- return this.http.json(path$5(id, "/template"), {
2234
+ return this.http.json(path$6(id, "/template"), {
2253
2235
  method: "POST",
2254
2236
  body,
2255
2237
  ext: opts.ext,
@@ -2264,7 +2246,7 @@ var Creatives = class {
2264
2246
  * rendered seconds are billed (final render price). 400 `unsupported_kind` / `unsupported_format` / `too_long`.
2265
2247
  */
2266
2248
  exportFcpxml(id, query = {}, opts = {}) {
2267
- return this.http.json(path$5(id, "/export.fcpxml"), {
2249
+ return this.http.json(path$6(id, "/export.fcpxml"), {
2268
2250
  query: {
2269
2251
  format: query.format,
2270
2252
  seq: query.seq
@@ -2282,7 +2264,7 @@ var Creatives = class {
2282
2264
  * 400 `unsupported_kind` / `invalid_request`, 413 `too_large` (over 20 MB).
2283
2265
  */
2284
2266
  exportLottie(id, query = {}, opts = {}) {
2285
- return this.http.json(path$5(id, "/export.lottie"), {
2267
+ return this.http.json(path$6(id, "/export.lottie"), {
2286
2268
  query: lottieQuery(query),
2287
2269
  ext: opts.ext,
2288
2270
  signal: opts.signal,
@@ -2294,7 +2276,7 @@ var Creatives = class {
2294
2276
  * for a dotLottie archive or a zip of JSON files (`formats: 'all'`). Same options and errors as `exportLottie`. Free.
2295
2277
  */
2296
2278
  async downloadLottie(id, query = {}, opts = {}) {
2297
- const res = await this.http.request(path$5(id, "/export.lottie"), {
2279
+ const res = await this.http.request(path$6(id, "/export.lottie"), {
2298
2280
  query: {
2299
2281
  ...lottieQuery(query),
2300
2282
  download: "1"
@@ -2335,7 +2317,7 @@ var Creatives = class {
2335
2317
  * `buildAndWait`.
2336
2318
  */
2337
2319
  build(id, body = {}, opts = {}) {
2338
- return this.http.json(path$5(id, "/build"), {
2320
+ return this.http.json(path$6(id, "/build"), {
2339
2321
  method: "POST",
2340
2322
  body: stripUndefined(body),
2341
2323
  ext: opts.ext,
@@ -2365,7 +2347,7 @@ var Creatives = class {
2365
2347
  * `not_supported_for_kind`, 422 `no_post_copy`, 504 `timeout`. `idempotencyKey` replays a retry (24 h).
2366
2348
  */
2367
2349
  postCopy(id, body = {}, opts = {}) {
2368
- return this.http.json(path$5(id, "/post-copy"), {
2350
+ return this.http.json(path$6(id, "/post-copy"), {
2369
2351
  method: "POST",
2370
2352
  body: stripUndefined(body),
2371
2353
  headers: opts.idempotencyKey ? { "Idempotency-Key": opts.idempotencyKey } : void 0,
@@ -2381,7 +2363,7 @@ var Creatives = class {
2381
2363
  * (run `captions` on that clip first) or `stale`; video creatives only.
2382
2364
  */
2383
2365
  transcriptCut(id, body, opts = {}) {
2384
- return this.http.json(path$5(id, "/transcript-cut"), {
2366
+ return this.http.json(path$6(id, "/transcript-cut"), {
2385
2367
  method: "POST",
2386
2368
  body: stripUndefined(body),
2387
2369
  ext: opts.ext,
@@ -2397,7 +2379,7 @@ var Creatives = class {
2397
2379
  * replays a retry (24 h).
2398
2380
  */
2399
2381
  regenerateNode(id, nodeId, body, opts = {}) {
2400
- return this.http.json(path$5(id, `/nodes/${encodeURIComponent(nodeId)}/regenerate`), {
2382
+ return this.http.json(path$6(id, `/nodes/${encodeURIComponent(nodeId)}/regenerate`), {
2401
2383
  method: "POST",
2402
2384
  body: stripUndefined(body),
2403
2385
  headers: opts.idempotencyKey ? { "Idempotency-Key": opts.idempotencyKey } : void 0,
@@ -2413,7 +2395,7 @@ var Creatives = class {
2413
2395
  * logo is registered too. `base_seq` defaults to the head (rebased like `edit`, 409 `stale` else). Free.
2414
2396
  */
2415
2397
  restyle(id, body, opts = {}) {
2416
- return this.http.json(path$5(id, "/restyle"), {
2398
+ return this.http.json(path$6(id, "/restyle"), {
2417
2399
  method: "POST",
2418
2400
  body: stripUndefined(body),
2419
2401
  ext: opts.ext,
@@ -2429,7 +2411,7 @@ var Creatives = class {
2429
2411
  * `unsupported_kind`); 403 `residency_unavailable`, 503 `transcription_unavailable`.
2430
2412
  */
2431
2413
  captions(id, body = {}, opts = {}) {
2432
- return this.http.json(path$5(id, "/captions"), {
2414
+ return this.http.json(path$6(id, "/captions"), {
2433
2415
  method: "POST",
2434
2416
  body: stripUndefined(body),
2435
2417
  ext: opts.ext,
@@ -2439,7 +2421,7 @@ var Creatives = class {
2439
2421
  }
2440
2422
  /** The captions as SubRip text on the document timeline (`node_id`, `seq` optional); 404 without captions. Free. */
2441
2423
  async captionsSrt(id, query = {}, opts = {}) {
2442
- return (await this.http.request(path$5(id, "/captions.srt"), {
2424
+ return (await this.http.request(path$6(id, "/captions.srt"), {
2443
2425
  query: {
2444
2426
  node_id: query.node_id,
2445
2427
  seq: query.seq,
@@ -2451,7 +2433,7 @@ var Creatives = class {
2451
2433
  }
2452
2434
  /** The captions as WebVTT text on the document timeline (`node_id`, `seq` optional); 404 without captions. Free. */
2453
2435
  async captionsVtt(id, query = {}, opts = {}) {
2454
- return (await this.http.request(path$5(id, "/captions.vtt"), {
2436
+ return (await this.http.request(path$6(id, "/captions.vtt"), {
2455
2437
  query: {
2456
2438
  node_id: query.node_id,
2457
2439
  seq: query.seq,
@@ -2467,7 +2449,7 @@ var Creatives = class {
2467
2449
  * `focal: 'vision'` (token-metered) finds the focal point of full-bleed images; it fails open. Free otherwise.
2468
2450
  */
2469
2451
  adapt(id, body, opts = {}) {
2470
- return this.http.json(path$5(id, "/adapt"), {
2452
+ return this.http.json(path$6(id, "/adapt"), {
2471
2453
  method: "POST",
2472
2454
  body: stripUndefined(body),
2473
2455
  ext: opts.ext,
@@ -2481,7 +2463,7 @@ var Creatives = class {
2481
2463
  * to one `codai` turn. Nothing to fix: the current `seq`, empty `fixed`, no new version.
2482
2464
  */
2483
2465
  lintFix(id, body = {}, opts = {}) {
2484
- return this.http.json(path$5(id, "/lint/fix"), {
2466
+ return this.http.json(path$6(id, "/lint/fix"), {
2485
2467
  method: "POST",
2486
2468
  body: stripUndefined(body),
2487
2469
  ext: opts.ext,
@@ -2494,7 +2476,7 @@ var Creatives = class {
2494
2476
  * values with a `setVar` op and controls with a `setControl` op (`edit`). Free.
2495
2477
  */
2496
2478
  controls(id, opts = {}) {
2497
- return this.http.json(path$5(id, "/controls"), {
2479
+ return this.http.json(path$6(id, "/controls"), {
2498
2480
  ext: opts.ext,
2499
2481
  signal: opts.signal
2500
2482
  });
@@ -2504,7 +2486,7 @@ var Creatives = class {
2504
2486
  * With `locale` (+ `units`, default 1) also the units of that locale (paged with `offset` / `limit` ≤ 500). Free.
2505
2487
  */
2506
2488
  locales(id, query = {}, opts = {}) {
2507
- return this.http.json(path$5(id, "/locales"), {
2489
+ return this.http.json(path$6(id, "/locales"), {
2508
2490
  query: {
2509
2491
  locale: query.locale,
2510
2492
  units: query.units,
@@ -2522,7 +2504,7 @@ var Creatives = class {
2522
2504
  * 400 `nothing_to_translate`; 503 `localize_unavailable` when every locale failed.
2523
2505
  */
2524
2506
  localize(id, body, opts = {}) {
2525
- return this.http.json(path$5(id, "/localize"), {
2507
+ return this.http.json(path$6(id, "/localize"), {
2526
2508
  method: "POST",
2527
2509
  body: stripUndefined(body),
2528
2510
  ext: opts.ext,
@@ -2535,7 +2517,7 @@ var Creatives = class {
2535
2517
  * title `<title> (<locale>)`). 404 `Locale not found.`. Free (HTTP 201).
2536
2518
  */
2537
2519
  forkLocale(id, locale, body = {}, opts = {}) {
2538
- return this.http.json(path$5(id, `/locales/${encodeURIComponent(locale)}/fork`), {
2520
+ return this.http.json(path$6(id, `/locales/${encodeURIComponent(locale)}/fork`), {
2539
2521
  method: "POST",
2540
2522
  body: stripUndefined(body),
2541
2523
  ext: opts.ext,
@@ -2549,7 +2531,7 @@ var Creatives = class {
2549
2531
  * only in this answer (HTTP 201). 400 `unknown_seq`; 409 `too_many_shares` (20 active links). Free.
2550
2532
  */
2551
2533
  createShare(id, body, opts = {}) {
2552
- return this.http.json(path$5(id, "/shares"), {
2534
+ return this.http.json(path$6(id, "/shares"), {
2553
2535
  method: "POST",
2554
2536
  body: stripUndefined(body),
2555
2537
  ext: opts.ext,
@@ -2559,14 +2541,14 @@ var Creatives = class {
2559
2541
  }
2560
2542
  /** The active links (not revoked, not expired), newest first; `url` is always null. Free. */
2561
2543
  listShares(id, opts = {}) {
2562
- return this.http.json(path$5(id, "/shares"), {
2544
+ return this.http.json(path$6(id, "/shares"), {
2563
2545
  ext: opts.ext,
2564
2546
  signal: opts.signal
2565
2547
  });
2566
2548
  }
2567
2549
  /** Revoke a link: it answers 404 from now on. 404 when unknown or already revoked. Free. */
2568
2550
  async revokeShare(id, shareId, opts = {}) {
2569
- await this.http.request(path$5(id, `/shares/${encodeURIComponent(shareId)}`), {
2551
+ await this.http.request(path$6(id, `/shares/${encodeURIComponent(shareId)}`), {
2570
2552
  method: "DELETE",
2571
2553
  ext: opts.ext,
2572
2554
  signal: opts.signal
@@ -2577,14 +2559,14 @@ var Creatives = class {
2577
2559
  * version (`approved_is_head` false once the creative changed), decider and thread counts. Free.
2578
2560
  */
2579
2561
  review(id, opts = {}) {
2580
- return this.http.json(path$5(id, "/review"), {
2562
+ return this.http.json(path$6(id, "/review"), {
2581
2563
  ext: opts.ext,
2582
2564
  signal: opts.signal
2583
2565
  });
2584
2566
  }
2585
2567
  /** Send the head to review (`in_review`, earlier decision cleared) so approver links can decide. Free. */
2586
2568
  requestReview(id, opts = {}) {
2587
- return this.http.json(path$5(id, "/review"), {
2569
+ return this.http.json(path$6(id, "/review"), {
2588
2570
  method: "POST",
2589
2571
  body: { action: "request" },
2590
2572
  ext: opts.ext,
@@ -2593,7 +2575,7 @@ var Creatives = class {
2593
2575
  }
2594
2576
  /** Back to `draft` (decision cleared, comments kept). Free. */
2595
2577
  resetReview(id, opts = {}) {
2596
- return this.http.json(path$5(id, "/review"), {
2578
+ return this.http.json(path$6(id, "/review"), {
2597
2579
  method: "POST",
2598
2580
  body: { action: "reset" },
2599
2581
  ext: opts.ext,
@@ -2602,7 +2584,7 @@ var Creatives = class {
2602
2584
  }
2603
2585
  /** Comment threads, newest first (≤ 200), replies oldest first; `status` `open` | `resolved` | `all`. Free. */
2604
2586
  reviewThreads(id, query = {}, opts = {}) {
2605
- return this.http.json(path$5(id, "/review/threads"), {
2587
+ return this.http.json(path$6(id, "/review/threads"), {
2606
2588
  query: { status: query.status },
2607
2589
  ext: opts.ext,
2608
2590
  signal: opts.signal
@@ -2613,7 +2595,7 @@ var Creatives = class {
2613
2595
  * 400 `unknown_node` / `unknown_scene`; HTTP 201). 409 `too_many_comments`. Free.
2614
2596
  */
2615
2597
  createReviewThread(id, body, opts = {}) {
2616
- return this.http.json(path$5(id, "/review/threads"), {
2598
+ return this.http.json(path$6(id, "/review/threads"), {
2617
2599
  method: "POST",
2618
2600
  body: stripUndefined(body),
2619
2601
  ext: opts.ext,
@@ -2623,7 +2605,7 @@ var Creatives = class {
2623
2605
  }
2624
2606
  /** Reply in a thread as the owner (HTTP 201) — returns the whole thread. Free. */
2625
2607
  replyReviewThread(id, threadId, body, opts = {}) {
2626
- return this.http.json(path$5(id, `/review/threads/${encodeURIComponent(threadId)}/replies`), {
2608
+ return this.http.json(path$6(id, `/review/threads/${encodeURIComponent(threadId)}/replies`), {
2627
2609
  method: "POST",
2628
2610
  body: { body: body.body },
2629
2611
  ext: opts.ext,
@@ -2633,7 +2615,7 @@ var Creatives = class {
2633
2615
  }
2634
2616
  /** Resolve a thread. Free. */
2635
2617
  resolveReviewThread(id, threadId, opts = {}) {
2636
- return this.http.json(path$5(id, `/review/threads/${encodeURIComponent(threadId)}/resolve`), {
2618
+ return this.http.json(path$6(id, `/review/threads/${encodeURIComponent(threadId)}/resolve`), {
2637
2619
  method: "POST",
2638
2620
  ext: opts.ext,
2639
2621
  signal: opts.signal
@@ -2641,7 +2623,7 @@ var Creatives = class {
2641
2623
  }
2642
2624
  /** Reopen a resolved thread. Free. */
2643
2625
  reopenReviewThread(id, threadId, opts = {}) {
2644
- return this.http.json(path$5(id, `/review/threads/${encodeURIComponent(threadId)}/reopen`), {
2626
+ return this.http.json(path$6(id, `/review/threads/${encodeURIComponent(threadId)}/reopen`), {
2645
2627
  method: "POST",
2646
2628
  ext: opts.ext,
2647
2629
  signal: opts.signal
@@ -2649,7 +2631,7 @@ var Creatives = class {
2649
2631
  }
2650
2632
  /** Delete any comment (owner moderation; deleting a root hides the thread). 404 when unknown. Free. */
2651
2633
  async deleteReviewComment(id, commentId, opts = {}) {
2652
- await this.http.request(path$5(id, `/review/comments/${encodeURIComponent(commentId)}`), {
2634
+ await this.http.request(path$6(id, `/review/comments/${encodeURIComponent(commentId)}`), {
2653
2635
  method: "DELETE",
2654
2636
  ext: opts.ext,
2655
2637
  signal: opts.signal
@@ -2657,16 +2639,15 @@ var Creatives = class {
2657
2639
  }
2658
2640
  /** Poll a frame job: frames when done (`status: 'succeeded'`), `status: 'running'` meanwhile; 404 unknown job. */
2659
2641
  frameJob(id, jobId, opts = {}) {
2660
- return this.http.json(path$5(id, `/frames/${encodeURIComponent(jobId)}`), {
2642
+ return this.http.json(path$6(id, `/frames/${encodeURIComponent(jobId)}`), {
2661
2643
  ext: opts.ext,
2662
2644
  signal: opts.signal
2663
2645
  });
2664
2646
  }
2665
2647
  };
2666
2648
 
2667
- //#endregion
2668
- //#region src/resources/brand-kits.ts
2669
- const path$4 = (id, tail = "") => `/v1/studio/brand-kits/${encodeURIComponent(id)}${tail}`;
2649
+ // src/resources/brand-kits.ts
2650
+ const path$5 = (id, tail = "") => `/v1/studio/brand-kits/${encodeURIComponent(id)}${tail}`;
2670
2651
  var BrandKits = class {
2671
2652
  http;
2672
2653
  constructor(http) {
@@ -2691,7 +2672,7 @@ var BrandKits = class {
2691
2672
  * `logo_asset_id: null` removes the logo. Creatives keep their tokens until `creatives.restyle`. Free.
2692
2673
  */
2693
2674
  update(id, body, opts = {}) {
2694
- return this.http.json(path$4(id), {
2675
+ return this.http.json(path$5(id), {
2695
2676
  method: "PATCH",
2696
2677
  body,
2697
2678
  ext: opts.ext,
@@ -2701,7 +2682,7 @@ var BrandKits = class {
2701
2682
  }
2702
2683
  /** The kit as a DTCG 2025.10 JSON document (`$extensions['ro.codai']` = kit id, name, logo asset id). Free. */
2703
2684
  exportDtcg(id, opts = {}) {
2704
- return this.http.json(path$4(id, "/dtcg"), {
2685
+ return this.http.json(path$5(id, "/dtcg"), {
2705
2686
  ext: opts.ext,
2706
2687
  signal: opts.signal
2707
2688
  });
@@ -2731,14 +2712,14 @@ var BrandKits = class {
2731
2712
  }
2732
2713
  /** One kit with a signed logo URL (1 h), its `dtcg` and the WCAG `contrast` pairs. Free. */
2733
2714
  retrieve(id, opts = {}) {
2734
- return this.http.json(path$4(id), {
2715
+ return this.http.json(path$5(id), {
2735
2716
  ext: opts.ext,
2736
2717
  signal: opts.signal
2737
2718
  });
2738
2719
  }
2739
2720
  /** Delete a kit (creatives keep their tokens; the logo asset stays). Free. */
2740
2721
  delete(id, opts = {}) {
2741
- return this.http.json(path$4(id), {
2722
+ return this.http.json(path$5(id), {
2742
2723
  method: "DELETE",
2743
2724
  ext: opts.ext,
2744
2725
  signal: opts.signal
@@ -2746,9 +2727,8 @@ var BrandKits = class {
2746
2727
  }
2747
2728
  };
2748
2729
 
2749
- //#endregion
2750
- //#region src/resources/templates.ts
2751
- const path$3 = (id) => `/v1/studio/templates/${encodeURIComponent(id)}`;
2730
+ // src/resources/templates.ts
2731
+ const path$4 = (id) => `/v1/studio/templates/${encodeURIComponent(id)}`;
2752
2732
  var Templates = class {
2753
2733
  http;
2754
2734
  constructor(http) {
@@ -2775,14 +2755,14 @@ var Templates = class {
2775
2755
  }
2776
2756
  /** One template with its variables and `doc`. Free. */
2777
2757
  retrieve(id, opts = {}) {
2778
- return this.http.json(path$3(id), {
2758
+ return this.http.json(path$4(id), {
2779
2759
  ext: opts.ext,
2780
2760
  signal: opts.signal
2781
2761
  });
2782
2762
  }
2783
2763
  /** Delete a template (creatives made from it are not affected). Free. */
2784
2764
  delete(id, opts = {}) {
2785
- return this.http.json(path$3(id), {
2765
+ return this.http.json(path$4(id), {
2786
2766
  method: "DELETE",
2787
2767
  ext: opts.ext,
2788
2768
  signal: opts.signal
@@ -2790,10 +2770,9 @@ var Templates = class {
2790
2770
  }
2791
2771
  };
2792
2772
 
2793
- //#endregion
2794
- //#region src/resources/productions.ts
2795
- const path$2 = (id) => `/v1/studio/productions/${encodeURIComponent(id)}`;
2796
- function abortableSleep$4(ms, signal) {
2773
+ // src/resources/productions.ts
2774
+ const path$3 = (id) => `/v1/studio/productions/${encodeURIComponent(id)}`;
2775
+ function abortableSleep$5(ms, signal) {
2797
2776
  return new Promise((resolve, reject) => {
2798
2777
  if (signal?.aborted) return reject(signal.reason ?? /* @__PURE__ */ new Error("Aborted"));
2799
2778
  const t = setTimeout(() => {
@@ -2826,7 +2805,7 @@ var Productions = class {
2826
2805
  }
2827
2806
  /** `GET /v1/studio/productions/{id}` — advances the production and returns it (another account's id is a 404). */
2828
2807
  retrieve(id, opts = {}) {
2829
- return this.http.json(path$2(id), {
2808
+ return this.http.json(path$3(id), {
2830
2809
  ext: opts.ext,
2831
2810
  signal: opts.signal
2832
2811
  });
@@ -2842,7 +2821,7 @@ var Productions = class {
2842
2821
  const p = await this.retrieve(id, opts);
2843
2822
  if (isProductionFinished(p)) return p;
2844
2823
  if (Date.now() + interval > deadline) throw new Error(`codai: production ${id} did not finish in time (phase ${p.phase})`);
2845
- await abortableSleep$4(interval, opts.signal);
2824
+ await abortableSleep$5(interval, opts.signal);
2846
2825
  }
2847
2826
  }
2848
2827
  /** `create` + `wait`. */
@@ -2852,8 +2831,110 @@ var Productions = class {
2852
2831
  }
2853
2832
  };
2854
2833
 
2855
- //#endregion
2856
- //#region src/resources/media-ops.ts
2834
+ // src/resources/music-room.ts
2835
+ const BASE$2 = "/v1/studio/music-room";
2836
+ const path$2 = (id) => `${BASE$2}/${encodeURIComponent(id)}`;
2837
+ function abortableSleep$4(ms, signal) {
2838
+ return new Promise((resolve, reject) => {
2839
+ if (signal?.aborted) return reject(signal.reason ?? /* @__PURE__ */ new Error("Aborted"));
2840
+ const t = setTimeout(() => {
2841
+ signal?.removeEventListener("abort", onAbort);
2842
+ resolve();
2843
+ }, ms);
2844
+ const onAbort = () => {
2845
+ clearTimeout(t);
2846
+ reject(signal?.reason ?? /* @__PURE__ */ new Error("Aborted"));
2847
+ };
2848
+ signal?.addEventListener("abort", onAbort, { once: true });
2849
+ });
2850
+ }
2851
+ /** The song reached a terminal state (`succeeded` or `failed`). */
2852
+ const isMusicRoomFinished = (r) => r.status === "succeeded" || r.status === "failed";
2853
+ var MusicRoom = class {
2854
+ http;
2855
+ constructor(http) {
2856
+ this.http = http;
2857
+ }
2858
+ /** `POST /v1/studio/music-room` — start a song (202; the producer plans it, then it waits at the plan gate). */
2859
+ create(body, opts = {}) {
2860
+ return this.http.json(BASE$2, {
2861
+ method: "POST",
2862
+ body,
2863
+ headers: opts.idempotencyKey ? { "Idempotency-Key": opts.idempotencyKey } : void 0,
2864
+ noRetry: !opts.idempotencyKey,
2865
+ ext: opts.ext,
2866
+ signal: opts.signal
2867
+ });
2868
+ }
2869
+ /** `GET /v1/studio/music-room/{id}` — advances the workflow and returns the song (another account's id is a 404). */
2870
+ get(id, opts = {}) {
2871
+ return this.http.json(path$2(id), {
2872
+ ext: opts.ext,
2873
+ signal: opts.signal
2874
+ });
2875
+ }
2876
+ /** `GET /v1/studio/music-room` — your songs, newest first; page with `before` while `has_more`. */
2877
+ list(query = {}, opts = {}) {
2878
+ return this.http.json(BASE$2, {
2879
+ query: {
2880
+ limit: query.limit,
2881
+ before: query.before
2882
+ },
2883
+ ext: opts.ext,
2884
+ signal: opts.signal
2885
+ });
2886
+ }
2887
+ /**
2888
+ * `POST /v1/studio/music-room/{id}/choose` — answer the open gate: `{ gate: 'plan', variant }`,
2889
+ * `{ gate: 'demo', approve: true }` or `{ gate: 'final', approve: true }` (409 `not_at_gate` otherwise).
2890
+ */
2891
+ choose(id, answer, opts = {}) {
2892
+ return this.http.json(`${path$2(id)}/choose`, {
2893
+ method: "POST",
2894
+ body: answer,
2895
+ ext: opts.ext,
2896
+ signal: opts.signal
2897
+ });
2898
+ }
2899
+ /**
2900
+ * `POST /v1/studio/music-room/{id}/direct` — one player re-plays its part following `direction` and the demo is
2901
+ * re-rendered (202; only at the demo or final gate).
2902
+ */
2903
+ direct(id, body, opts = {}) {
2904
+ return this.http.json(`${path$2(id)}/direct`, {
2905
+ method: "POST",
2906
+ body,
2907
+ headers: opts.idempotencyKey ? { "Idempotency-Key": opts.idempotencyKey } : void 0,
2908
+ noRetry: !opts.idempotencyKey,
2909
+ ext: opts.ext,
2910
+ signal: opts.signal
2911
+ });
2912
+ }
2913
+ /** `GET /v1/studio/music-room/quota` — `{ plan, included, used, remaining, period_end }` for this calendar month. */
2914
+ quota(opts = {}) {
2915
+ return this.http.json(`${BASE$2}/quota`, {
2916
+ ext: opts.ext,
2917
+ signal: opts.signal
2918
+ });
2919
+ }
2920
+ /**
2921
+ * Poll `get` every `intervalMs` (default 10 s) until the song `succeeded` or `failed` (a failed one resolves too —
2922
+ * check `status` / `error`), or with `untilGate: true` until it waits at a gate. Throws after `timeoutMs`
2923
+ * (default 30 min) or when `signal` aborts.
2924
+ */
2925
+ async wait(id, opts = {}) {
2926
+ const interval = opts.intervalMs ?? 1e4;
2927
+ const deadline = Date.now() + (opts.timeoutMs ?? 18e5);
2928
+ for (;;) {
2929
+ const r = await this.get(id, opts);
2930
+ if (isMusicRoomFinished(r) || opts.untilGate && r.status === "waiting") return r;
2931
+ if (Date.now() + interval > deadline) throw new Error(`codai: music room ${id} did not finish in time (phase ${r.phase})`);
2932
+ await abortableSleep$4(interval, opts.signal);
2933
+ }
2934
+ }
2935
+ };
2936
+
2937
+ // src/resources/media-ops.ts
2857
2938
  const BASE$1 = "/v1/studio/media-ops";
2858
2939
  const opPath = (op) => `${BASE$1}/${encodeURIComponent(op)}`;
2859
2940
  function abortableSleep$3(ms, signal) {
@@ -2941,8 +3022,7 @@ var MediaOps = class {
2941
3022
  }
2942
3023
  };
2943
3024
 
2944
- //#endregion
2945
- //#region src/resources/lyrics.ts
3025
+ // src/resources/lyrics.ts
2946
3026
  const BASE = "/v1/studio/lyrics";
2947
3027
  var LyricsResource = class {
2948
3028
  http;
@@ -2977,8 +3057,7 @@ var LyricsResource = class {
2977
3057
  }
2978
3058
  };
2979
3059
 
2980
- //#endregion
2981
- //#region src/resources/jam.ts
3060
+ // src/resources/jam.ts
2982
3061
  const JAM_SUBPROTOCOL = "codai-jam";
2983
3062
  /** WebSocket close codes of `/v1/studio/jam`. */
2984
3063
  const JAM_CLOSE_CODES = {
@@ -3139,8 +3218,7 @@ var Jam = class {
3139
3218
  }
3140
3219
  };
3141
3220
 
3142
- //#endregion
3143
- //#region src/resources/batches.ts
3221
+ // src/resources/batches.ts
3144
3222
  const BATCH_DONE = [
3145
3223
  "completed",
3146
3224
  "failed",
@@ -3274,8 +3352,7 @@ var Batches = class {
3274
3352
  }
3275
3353
  };
3276
3354
 
3277
- //#endregion
3278
- //#region src/resources/shares.ts
3355
+ // src/resources/shares.ts
3279
3356
  const SHARE_TOKEN_RE = /^[A-Za-z0-9_-]{43}$/;
3280
3357
  /**
3281
3358
  * The share token in `input`: a raw token, or any `https://…/s/<token>` / `…/r/<token>` URL (query and fragment
@@ -3390,8 +3467,7 @@ var Shares = class {
3390
3467
  }
3391
3468
  };
3392
3469
 
3393
- //#endregion
3394
- //#region src/resources/voice-revocations.ts
3470
+ // src/resources/voice-revocations.ts
3395
3471
  var VoiceRevocations = class {
3396
3472
  http;
3397
3473
  constructor(http) {
@@ -3409,8 +3485,40 @@ var VoiceRevocations = class {
3409
3485
  }
3410
3486
  };
3411
3487
 
3412
- //#endregion
3413
- //#region src/resources/vault.ts
3488
+ // src/resources/voices.ts
3489
+ const singing = (id) => `/v1/studio/voices/${encodeURIComponent(id)}/singing-consent`;
3490
+ var Voices = class {
3491
+ http;
3492
+ constructor(http) {
3493
+ this.http = http;
3494
+ }
3495
+ /**
3496
+ * `POST /v1/studio/voices/{id}/singing-consent` — add the singing purpose from a finished singing recording session
3497
+ * (liveness-checked statement + sung sample). Returns the voice with `singing.status: 'active'`. Never retried.
3498
+ */
3499
+ addSingingConsent(id, body, opts = {}) {
3500
+ return this.http.json(singing(id), {
3501
+ method: "POST",
3502
+ body,
3503
+ ext: opts.ext,
3504
+ signal: opts.signal,
3505
+ noRetry: true
3506
+ });
3507
+ }
3508
+ /**
3509
+ * `DELETE /v1/studio/voices/{id}/singing-consent` — revoke ONLY the singing purpose (204). The sung sample is deleted
3510
+ * at once; the voice keeps working for narration. Idempotent.
3511
+ */
3512
+ async revokeSingingConsent(id, opts = {}) {
3513
+ await this.http.request(singing(id), {
3514
+ method: "DELETE",
3515
+ ext: opts.ext,
3516
+ signal: opts.signal
3517
+ });
3518
+ }
3519
+ };
3520
+
3521
+ // src/resources/vault.ts
3414
3522
  /** The UTF-8 message an unlock proof covers: `codai-vault/unlock/v1|<challenge>|<device_id or "passkey">`. */
3415
3523
  function vaultUnlockMessage(challenge, deviceIdOrPasskey) {
3416
3524
  return `codai-vault/unlock/v1|${challenge}|${deviceIdOrPasskey}`;
@@ -3641,8 +3749,7 @@ var Vault = class {
3641
3749
  }
3642
3750
  };
3643
3751
 
3644
- //#endregion
3645
- //#region src/resources/abuse-reports.ts
3752
+ // src/resources/abuse-reports.ts
3646
3753
  var AbuseReports = class {
3647
3754
  http;
3648
3755
  constructor(http) {
@@ -3660,8 +3767,7 @@ var AbuseReports = class {
3660
3767
  }
3661
3768
  };
3662
3769
 
3663
- //#endregion
3664
- //#region src/resources/provenance.ts
3770
+ // src/resources/provenance.ts
3665
3771
  /** Largest file the checker accepts (25 MB). */
3666
3772
  const PROVENANCE_MAX_BYTES = 26214400;
3667
3773
  var Provenance = class {
@@ -3686,8 +3792,7 @@ var Provenance = class {
3686
3792
  }
3687
3793
  };
3688
3794
 
3689
- //#endregion
3690
- //#region src/resources/messages.ts
3795
+ // src/resources/messages.ts
3691
3796
  /** `POST /v1/messages` — Anthropic Messages wire (JSON + named-event SSE). */
3692
3797
  var Messages = class {
3693
3798
  http;
@@ -3790,8 +3895,7 @@ var Messages = class {
3790
3895
  }
3791
3896
  };
3792
3897
 
3793
- //#endregion
3794
- //#region src/resources/models.ts
3898
+ // src/resources/models.ts
3795
3899
  var Models = class {
3796
3900
  http;
3797
3901
  constructor(http) {
@@ -3806,8 +3910,7 @@ var Models = class {
3806
3910
  }
3807
3911
  };
3808
3912
 
3809
- //#endregion
3810
- //#region src/resources/orgs.ts
3913
+ // src/resources/orgs.ts
3811
3914
  var OrgMembers = class {
3812
3915
  http;
3813
3916
  constructor(http) {
@@ -3861,8 +3964,7 @@ var Orgs = class {
3861
3964
  }
3862
3965
  };
3863
3966
 
3864
- //#endregion
3865
- //#region src/resources/projects.ts
3967
+ // src/resources/projects.ts
3866
3968
  var Projects = class {
3867
3969
  http;
3868
3970
  constructor(http) {
@@ -3909,8 +4011,7 @@ var Projects = class {
3909
4011
  }
3910
4012
  };
3911
4013
 
3912
- //#endregion
3913
- //#region src/resources/realtime.ts
4014
+ // src/resources/realtime.ts
3914
4015
  const OPEN = 1;
3915
4016
  function toBytes(audio) {
3916
4017
  if (audio instanceof ArrayBuffer) return new Uint8Array(audio);
@@ -4093,8 +4194,7 @@ var Realtime = class {
4093
4194
  }
4094
4195
  };
4095
4196
 
4096
- //#endregion
4097
- //#region src/resources/referrals.ts
4197
+ // src/resources/referrals.ts
4098
4198
  var Referrals = class {
4099
4199
  http;
4100
4200
  constructor(http) {
@@ -4129,8 +4229,7 @@ var Referrals = class {
4129
4229
  }
4130
4230
  };
4131
4231
 
4132
- //#endregion
4133
- //#region src/resources/resolve.ts
4232
+ // src/resources/resolve.ts
4134
4233
  /**
4135
4234
  * Verify a Resolve webhook delivery: `x-codai-signature: t=<unix>,v1=<hex>`
4136
4235
  * with `v1 = HMAC-SHA256(callback_secret, "<t>.<rawBody>")`. Pass the RAW
@@ -4515,8 +4614,7 @@ function abortableSleep$1(ms, signal) {
4515
4614
  });
4516
4615
  }
4517
4616
 
4518
- //#endregion
4519
- //#region src/resources/responses.ts
4617
+ // src/resources/responses.ts
4520
4618
  /** `POST /v1/responses` — OpenAI Responses API compatibility (JSON + named-event SSE). */
4521
4619
  var Responses = class {
4522
4620
  http;
@@ -4599,8 +4697,7 @@ var Responses = class {
4599
4697
  }
4600
4698
  };
4601
4699
 
4602
- //#endregion
4603
- //#region src/resources/sessions.ts
4700
+ // src/resources/sessions.ts
4604
4701
  /**
4605
4702
  * `/v1/sessions/*` — shared-sessions protocol v2 (events, controls, lease,
4606
4703
  * dispatch, SSE stream) plus the per-session shares under `/shares`.
@@ -4836,8 +4933,7 @@ var Sessions = class {
4836
4933
  }
4837
4934
  };
4838
4935
 
4839
- //#endregion
4840
- //#region src/resources/settings.ts
4936
+ // src/resources/settings.ts
4841
4937
  /**
4842
4938
  * `/v1/settings` — account-level settings shared by every device of the account (per user, not per key). Reads
4843
4939
  * always return the full object with defaults applied; writes deep-merge a partial and are validated strictly.
@@ -4880,8 +4976,7 @@ var Settings = class {
4880
4976
  }
4881
4977
  };
4882
4978
 
4883
- //#endregion
4884
- //#region src/resources/os-gate.ts
4979
+ // src/resources/os-gate.ts
4885
4980
  var OsGate = class {
4886
4981
  http;
4887
4982
  constructor(http) {
@@ -4908,8 +5003,7 @@ var OsGate = class {
4908
5003
  }
4909
5004
  };
4910
5005
 
4911
- //#endregion
4912
- //#region src/resources/sfx.ts
5006
+ // src/resources/sfx.ts
4913
5007
  var Sfx = class {
4914
5008
  http;
4915
5009
  constructor(http) {
@@ -4947,8 +5041,7 @@ var Sfx = class {
4947
5041
  }
4948
5042
  };
4949
5043
 
4950
- //#endregion
4951
- //#region src/resources/system-one.ts
5044
+ // src/resources/system-one.ts
4952
5045
  var SystemOne = class {
4953
5046
  http;
4954
5047
  constructor(http) {
@@ -4967,8 +5060,7 @@ var SystemOne = class {
4967
5060
  }
4968
5061
  };
4969
5062
 
4970
- //#endregion
4971
- //#region src/resources/tasks.ts
5063
+ // src/resources/tasks.ts
4972
5064
  var Tasks = class {
4973
5065
  http;
4974
5066
  constructor(http) {
@@ -5018,8 +5110,7 @@ var Tasks = class {
5018
5110
  }
5019
5111
  };
5020
5112
 
5021
- //#endregion
5022
- //#region src/resources/triggers.ts
5113
+ // src/resources/triggers.ts
5023
5114
  var Triggers = class {
5024
5115
  http;
5025
5116
  constructor(http) {
@@ -5169,8 +5260,7 @@ var Notifications = class {
5169
5260
  }
5170
5261
  };
5171
5262
 
5172
- //#endregion
5173
- //#region src/resources/prompts.ts
5263
+ // src/resources/prompts.ts
5174
5264
  /** `/v1/prompts/*` — pending prompts: ready-to-paste prompts left for a future chat (handoffs, follow-ups). */
5175
5265
  const one$3 = (id, suffix = "") => `/v1/prompts/${encodeURIComponent(id)}${suffix}`;
5176
5266
  function filterQuery(q) {
@@ -5327,8 +5417,7 @@ var Prompts = class {
5327
5417
  }
5328
5418
  };
5329
5419
 
5330
- //#endregion
5331
- //#region src/resources/schedules.ts
5420
+ // src/resources/schedules.ts
5332
5421
  /** `/v1/schedules/*`, `/v1/schedule-runs/*`, `/v1/scheduler/*` — the codai Scheduler (ADR 0006). */
5333
5422
  const one$2 = (id, suffix = "") => `/v1/schedules/${encodeURIComponent(id)}${suffix}`;
5334
5423
  const run = (id, suffix) => `/v1/schedule-runs/${encodeURIComponent(id)}${suffix}`;
@@ -5599,8 +5688,7 @@ var Schedules = class {
5599
5688
  }
5600
5689
  };
5601
5690
 
5602
- //#endregion
5603
- //#region src/resources/lists.ts
5691
+ // src/resources/lists.ts
5604
5692
  /** `/v1/lists/*`, `/v1/share` — lists and the share-sheet entry point. */
5605
5693
  const one$1 = (id, suffix = "") => `/v1/lists/${encodeURIComponent(id)}${suffix}`;
5606
5694
  const item = (id, suffix = "") => `/v1/lists/items/${encodeURIComponent(id)}${suffix}`;
@@ -5732,8 +5820,7 @@ var Lists = class {
5732
5820
  }
5733
5821
  };
5734
5822
 
5735
- //#endregion
5736
- //#region src/resources/memory.ts
5823
+ // src/resources/memory.ts
5737
5824
  var Memory = class {
5738
5825
  http;
5739
5826
  constructor(http) {
@@ -5793,8 +5880,7 @@ var Memory = class {
5793
5880
  }
5794
5881
  };
5795
5882
 
5796
- //#endregion
5797
- //#region src/resources/sandboxes.ts
5883
+ // src/resources/sandboxes.ts
5798
5884
  /**
5799
5885
  * `/v1/sandboxes` — agent sandboxes: isolated gVisor containers with a persistent `/workspace`, no network
5800
5886
  * by default, artifacts from `/workspace/out` as scanned, signed links. Backend `v2` (default) = long-lived
@@ -6037,8 +6123,7 @@ function execTimeoutMs(timeoutSeconds) {
6037
6123
  return ((timeoutSeconds ?? 120) + 60) * 1e3;
6038
6124
  }
6039
6125
 
6040
- //#endregion
6041
- //#region src/resources/transcripts.ts
6126
+ // src/resources/transcripts.ts
6042
6127
  /**
6043
6128
  * `/v1/transcripts/*` + `/v1/transcript-folders` + `/v1/transcript-vocabulary` + tus `/v1/uploads` — voice
6044
6129
  * recordings → diarized RO/EN transcripts → insights (summary, key points, actions, suggested agent prompts).
@@ -6462,8 +6547,7 @@ var Transcripts = class {
6462
6547
  }
6463
6548
  };
6464
6549
 
6465
- //#endregion
6466
- //#region src/resources/tokens.ts
6550
+ // src/resources/tokens.ts
6467
6551
  var Tokens = class {
6468
6552
  http;
6469
6553
  constructor(http) {
@@ -6491,8 +6575,7 @@ var Tokens = class {
6491
6575
  }
6492
6576
  };
6493
6577
 
6494
- //#endregion
6495
- //#region src/resources/tools.ts
6578
+ // src/resources/tools.ts
6496
6579
  var Tools = class {
6497
6580
  http;
6498
6581
  constructor(http) {
@@ -6532,8 +6615,7 @@ var Tools = class {
6532
6615
  }
6533
6616
  };
6534
6617
 
6535
- //#endregion
6536
- //#region src/resources/research.ts
6618
+ // src/resources/research.ts
6537
6619
  const path = (id) => `/v1/research/${encodeURIComponent(id)}`;
6538
6620
  function abortableSleep(ms, signal) {
6539
6621
  return new Promise((resolve, reject) => {
@@ -6608,8 +6690,7 @@ var Research = class {
6608
6690
  }
6609
6691
  };
6610
6692
 
6611
- //#endregion
6612
- //#region src/resources/usage-keys.ts
6693
+ // src/resources/usage-keys.ts
6613
6694
  var Usage = class {
6614
6695
  http;
6615
6696
  constructor(http) {
@@ -6658,8 +6739,7 @@ var Keys = class {
6658
6739
  }
6659
6740
  };
6660
6741
 
6661
- //#endregion
6662
- //#region src/resources/verify.ts
6742
+ // src/resources/verify.ts
6663
6743
  var Verify = class {
6664
6744
  http;
6665
6745
  constructor(http) {
@@ -6680,8 +6760,7 @@ var Verify = class {
6680
6760
  }
6681
6761
  };
6682
6762
 
6683
- //#endregion
6684
- //#region src/operations.ts
6763
+ // src/operations.ts
6685
6764
  /**
6686
6765
  * Single source of truth for OpenAPI parity: every `operationId` in
6687
6766
  * `apps/docs/openapi/en/gateway.yaml` maps to exactly one dotted method path
@@ -6782,6 +6861,8 @@ const OPERATION_METHODS = {
6782
6861
  reopenPublicReviewThread: "shares.reopen",
6783
6862
  decidePublicReview: "shares.decide",
6784
6863
  createVoiceRevocation: "voiceRevocations.create",
6864
+ addStudioVoiceSingingConsent: "voices.addSingingConsent",
6865
+ revokeStudioVoiceSingingConsent: "voices.revokeSingingConsent",
6785
6866
  getVaultAccount: "vault.account",
6786
6867
  putVaultAccount: "vault.putAccount",
6787
6868
  patchVaultSettings: "vault.updateSettings",
@@ -6828,6 +6909,12 @@ const OPERATION_METHODS = {
6828
6909
  listCreativeTemplates: "templates.list",
6829
6910
  createStudioProduction: "productions.create",
6830
6911
  getStudioProduction: "productions.retrieve",
6912
+ createStudioMusicRoom: "studio.musicRoom.create",
6913
+ listStudioMusicRooms: "studio.musicRoom.list",
6914
+ getStudioMusicRoomQuota: "studio.musicRoom.quota",
6915
+ getStudioMusicRoom: "studio.musicRoom.get",
6916
+ chooseStudioMusicRoom: "studio.musicRoom.choose",
6917
+ directStudioMusicRoom: "studio.musicRoom.direct",
6831
6918
  listStudioMediaOps: "mediaOps.list",
6832
6919
  quoteStudioMediaOp: "mediaOps.quote",
6833
6920
  runStudioMediaOp: "mediaOps.run",
@@ -7107,8 +7194,7 @@ const RESOLVE_OPERATION_METHODS = {
7107
7194
  getResolveBalance: "resolve.balance"
7108
7195
  };
7109
7196
 
7110
- //#endregion
7111
- //#region src/resources/apps.ts
7197
+ // src/resources/apps.ts
7112
7198
  /**
7113
7199
  * `CodaiApps` — management client for host apps (studiai.ro, …) that resell
7114
7200
  * codai to their own end users. It talks to the mgmt API (`api.codai.ro`),
@@ -7274,8 +7360,7 @@ var CodaiApps = class {
7274
7360
  }
7275
7361
  };
7276
7362
 
7277
- //#endregion
7278
- //#region src/index.ts
7363
+ // src/index.ts
7279
7364
  /**
7280
7365
  * codai-sdk — official TypeScript client for the codai AI gateway.
7281
7366
  *
@@ -7305,6 +7390,8 @@ var CodaiApps = class {
7305
7390
  * built-in starters; free; use with creatives.create({ kind, template, vars }))
7306
7391
  * client.productions.create / .retrieve / .wait / .run (codai Studio brief → promo video: storyboard, images,
7307
7392
  * voice-over, editable creative, draft render, one review + repair; billed as the parts are produced)
7393
+ * client.studio.musicRoom.create / .get / .list / .choose / .direct / .quota / .wait (codai Studio Music Room: a team
7394
+ * of role agents writes, plays, sings and mixes a song with three approval gates; free within the plan quota)
7308
7395
  * client.mediaOps.list / .quote / .run / .job / .wait / .runAndWait (codai Studio media operations on your assets:
7309
7396
  * background removal, upscale, inpaint / outpaint / erase, stems, denoise, MIDI, mastering, analysis, ACE-Step
7310
7397
  * music and sound effects; quote held, measured cost billed; async ops return a job)
@@ -7319,6 +7406,8 @@ var CodaiApps = class {
7319
7406
  * client.shares.get / .remix / .comment / .reply / .resolve / .reopen / .decide (codai Studio share links from the
7320
7407
  * outside: read a shared creative, remix a view link, comment and decide through a review link; free)
7321
7408
  * client.voiceRevocations.create (public takedown ticket for a voice cloned in codai Studio; no key needed)
7409
+ * client.voices.addSingingConsent / .revokeSingingConsent (voice passport, beta: your own custom voice singing in
7410
+ * Music Room songs; a separate, revocable consent; free)
7322
7411
  * client.vault.account / .items / .putItem / .rules / .approvals / .decide / .catalog / .use / .httpCall / .resolve
7323
7412
  * client.vault.devices.challenge / .enroll / .list / .rename / .revoke (device approval keys, V-27)
7324
7413
  * client.vault.updateSettings / .lock / .unlockChallenge / .unlock / .limits / .setLimits / .revokeTaskGrants (guards, v4)
@@ -7380,6 +7469,11 @@ var Codai = class {
7380
7469
  templates;
7381
7470
  /** codai Studio productions (`productions.run({ brief, language: 'ro' })` → a finished promo video + editable creative). */
7382
7471
  productions;
7472
+ /**
7473
+ * codai Studio namespace. `studio.musicRoom.create({ brief, language: 'ro' })` → a team of role agents makes a song;
7474
+ * answer its gates with `studio.musicRoom.choose(id, …)`, poll with `studio.musicRoom.wait(id, { untilGate: true })`.
7475
+ */
7476
+ studio;
7383
7477
  /** codai Studio media operations (`mediaOps.run('audio.separate_stems', { assetIds })` → job; `mediaOps.wait(id)`). */
7384
7478
  mediaOps;
7385
7479
  /** codai Studio lyrics (`lyrics.write({ brief, language: 'ro' })`, `lyrics.align({ creative_id, clip_id, lyrics_text })`). */
@@ -7394,6 +7488,8 @@ var Codai = class {
7394
7488
  shares;
7395
7489
  /** Public takedown tickets for voices cloned in codai Studio (`voiceRevocations.create({ email, … })`; no key needed). */
7396
7490
  voiceRevocations;
7491
+ /** codai Studio custom voices: the voice passport singing consent (`voices.addSingingConsent(id, { session_id })`). */
7492
+ voices;
7397
7493
  /** Zero-knowledge credentials vault (`vault.items()`, `vault.use({ handle, mode, action })`, `vault.decide(id, …)`). */
7398
7494
  vault;
7399
7495
  /** Public abuse reports about codai Studio share / review links (`abuseReports.create({ share_token, … })`; no key needed). */
@@ -7490,6 +7586,7 @@ var Codai = class {
7490
7586
  this.brandKits = new BrandKits(http);
7491
7587
  this.templates = new Templates(http);
7492
7588
  this.productions = new Productions(http);
7589
+ this.studio = { musicRoom: new MusicRoom(http) };
7493
7590
  this.mediaOps = new MediaOps(http);
7494
7591
  this.lyrics = new LyricsResource(http);
7495
7592
  this.jam = new Jam({
@@ -7500,6 +7597,7 @@ var Codai = class {
7500
7597
  this.batches = new Batches(http);
7501
7598
  this.shares = new Shares(http);
7502
7599
  this.voiceRevocations = new VoiceRevocations(http);
7600
+ this.voices = new Voices(http);
7503
7601
  this.vault = new Vault(http);
7504
7602
  this.abuseReports = new AbuseReports(http);
7505
7603
  this.provenance = new Provenance(http);
@@ -7629,6 +7727,5 @@ function allKeys(obj) {
7629
7727
  return [...keys];
7630
7728
  }
7631
7729
 
7632
- //#endregion
7633
- export { AbuseReports, Account, AgentRuns, Agents, Assets, Audio, Batches, Billing, BrandKits, Cards, Chat, ChatCompletions, Codai, Codai as default, CodaiApps, CodaiError, Creatives, Devices, Documents, Embeddings, EnvironmentFiles, EnvironmentJobs, EnvironmentMembers, EnvironmentPorts, EnvironmentSecrets, EnvironmentTasks, Environments, Exports, Feedback, Health, Heartbeats, Hosts, HttpClient, Images, JAM_CLOSE_CODES, JAM_SCALES, JAM_SUBPROTOCOL, Jam, JamSession, Keys, Lists, LyricsResource, MediaOps, Memory, Messages, Models, Music, Notifications, OPERATION_METHODS, OrgMembers, Orgs, OsGate, PROVENANCE_MAX_BYTES, PhoneModels, Productions, Projects, Prompts, Provenance, RESOLVE_ATTESTATION_PAYLOAD_TYPE, RESOLVE_OPERATION_METHODS, RESOLVE_TERMINAL_STATUSES, Realtime, RealtimeSession, Receipts, Referrals, Renders, Research, Resolve, ResolveError, ResolveInsufficientFundsError, Responses, STREAMING_OPERATIONS, SandboxFiles, Sandboxes, ScheduleExecutor, SchedulerHosts, Schedules, SessionControls, SessionEvents, SessionLease, SessionShares, Sessions, Settings, Sfx, Shares, SystemOne, TUS_CHUNK_BYTES, Tasks, Templates, Tokens, Tools, Transcripts, Triggers, Usage, Vault, VaultDevices, Verify, Videos, VoiceRevocations, extensionHeaders, frameJson, isAssetDto, isMediaOpJob, isMediaOpJobFinished, isPagedBuild, isProductionFinished, isResearchFinished, jamUrl, mergeToolCall, readSse, realtimeUrl, resolveAttestationStatement, settingsConflictCurrent, shareTokenFrom, uploadIdFromLocation, vaultUnlockMessage, verifyAttestationWithKeys, verifyResolveWebhook };
7730
+ export { AbuseReports, Account, AgentRuns, Agents, Assets, Audio, Batches, Billing, BrandKits, Cards, Chat, ChatCompletions, Codai, Codai as default, CodaiApps, CodaiError, Creatives, Devices, Documents, Embeddings, EnvironmentFiles, EnvironmentJobs, EnvironmentMembers, EnvironmentPorts, EnvironmentSecrets, EnvironmentTasks, Environments, Exports, Feedback, Health, Heartbeats, Hosts, HttpClient, Images, JAM_CLOSE_CODES, JAM_SCALES, JAM_SUBPROTOCOL, Jam, JamSession, Keys, Lists, LyricsResource, MediaOps, Memory, Messages, Models, Music, MusicRoom, Notifications, OPERATION_METHODS, OrgMembers, Orgs, OsGate, PROVENANCE_MAX_BYTES, PhoneModels, Productions, Projects, Prompts, Provenance, RESOLVE_ATTESTATION_PAYLOAD_TYPE, RESOLVE_OPERATION_METHODS, RESOLVE_TERMINAL_STATUSES, Realtime, RealtimeSession, Receipts, Referrals, Renders, Research, Resolve, ResolveError, ResolveInsufficientFundsError, Responses, STREAMING_OPERATIONS, SandboxFiles, Sandboxes, ScheduleExecutor, SchedulerHosts, Schedules, SessionControls, SessionEvents, SessionLease, SessionShares, Sessions, Settings, Sfx, Shares, SystemOne, TUS_CHUNK_BYTES, Tasks, Templates, Tokens, Tools, Transcripts, Triggers, Usage, Vault, VaultDevices, Verify, Videos, VoiceRevocations, Voices, extensionHeaders, frameJson, isAssetDto, isMediaOpJob, isMediaOpJobFinished, isMusicRoomFinished, isPagedBuild, isProductionFinished, isResearchFinished, jamUrl, mergeToolCall, readSse, realtimeUrl, resolveAttestationStatement, settingsConflictCurrent, shareTokenFrom, uploadIdFromLocation, vaultUnlockMessage, verifyAttestationWithKeys, verifyResolveWebhook };
7634
7731
  //# sourceMappingURL=index.js.map