@clipwright/core 0.19.0 → 0.21.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 (135) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/__fixtures__/queue-promises.d.ts +5 -84
  3. package/dist/__fixtures__/queue-promises.js +7 -84
  4. package/dist/__fixtures__/queue-promises.js.map +1 -1
  5. package/dist/account-actors.d.ts +25 -25
  6. package/dist/account-actors.js +25 -25
  7. package/dist/account-actors.js.map +1 -1
  8. package/dist/account.d.ts +4 -10
  9. package/dist/account.js +6 -12
  10. package/dist/account.js.map +1 -1
  11. package/dist/actor-bounds.d.ts +4 -4
  12. package/dist/actor-bounds.js +4 -4
  13. package/dist/actor-bounds.js.map +1 -1
  14. package/dist/actor-qualities.d.ts +3 -3
  15. package/dist/actor-qualities.js +3 -3
  16. package/dist/actor-qualities.js.map +1 -1
  17. package/dist/actors.d.ts +8 -8
  18. package/dist/actors.js +9 -9
  19. package/dist/actors.js.map +1 -1
  20. package/dist/api-failure.d.ts +28 -129
  21. package/dist/api-failure.js +52 -225
  22. package/dist/api-failure.js.map +1 -1
  23. package/dist/aspect.d.ts +26 -96
  24. package/dist/aspect.js +32 -108
  25. package/dist/aspect.js.map +1 -1
  26. package/dist/contract-dispositions.d.ts +42 -167
  27. package/dist/contract-dispositions.js +54 -184
  28. package/dist/contract-dispositions.js.map +1 -1
  29. package/dist/endpoints.d.ts +5 -5
  30. package/dist/endpoints.js +5 -3
  31. package/dist/endpoints.js.map +1 -1
  32. package/dist/errors.d.ts +33 -101
  33. package/dist/errors.js +42 -108
  34. package/dist/errors.js.map +1 -1
  35. package/dist/faceless-cut-style.d.ts +115 -0
  36. package/dist/faceless-cut-style.js +109 -0
  37. package/dist/faceless-cut-style.js.map +1 -0
  38. package/dist/faceless-image-qualification.d.ts +97 -0
  39. package/dist/faceless-image-qualification.js +145 -0
  40. package/dist/faceless-image-qualification.js.map +1 -0
  41. package/dist/faceless-price.d.ts +21 -0
  42. package/dist/faceless-price.js +25 -0
  43. package/dist/faceless-price.js.map +1 -0
  44. package/dist/faceless-public-plan.d.ts +71 -0
  45. package/dist/faceless-public-plan.js +166 -0
  46. package/dist/faceless-public-plan.js.map +1 -0
  47. package/dist/faceless-public.d.ts +107 -0
  48. package/dist/faceless-public.js +74 -0
  49. package/dist/faceless-public.js.map +1 -0
  50. package/dist/faceless-short-61.d.ts +83 -0
  51. package/dist/faceless-short-61.js +152 -0
  52. package/dist/faceless-short-61.js.map +1 -0
  53. package/dist/faceless-storyboard-timing.d.ts +40 -0
  54. package/dist/faceless-storyboard-timing.js +97 -0
  55. package/dist/faceless-storyboard-timing.js.map +1 -0
  56. package/dist/faceless-storyboard-v2-plan.d.ts +3 -0
  57. package/dist/faceless-storyboard-v2-plan.js +112 -0
  58. package/dist/faceless-storyboard-v2-plan.js.map +1 -0
  59. package/dist/faceless-storyboard-v2-timing.d.ts +63 -0
  60. package/dist/faceless-storyboard-v2-timing.js +143 -0
  61. package/dist/faceless-storyboard-v2-timing.js.map +1 -0
  62. package/dist/faceless-storyboard-v2.d.ts +44 -0
  63. package/dist/faceless-storyboard-v2.js +43 -0
  64. package/dist/faceless-storyboard-v2.js.map +1 -0
  65. package/dist/faceless-storyboard.d.ts +55 -0
  66. package/dist/faceless-storyboard.js +105 -0
  67. package/dist/faceless-storyboard.js.map +1 -0
  68. package/dist/idempotency.d.ts +10 -44
  69. package/dist/idempotency.js +18 -44
  70. package/dist/idempotency.js.map +1 -1
  71. package/dist/index.d.ts +3 -0
  72. package/dist/index.js +24 -25
  73. package/dist/index.js.map +1 -1
  74. package/dist/long-form-pricing.d.ts +4 -4
  75. package/dist/long-form-pricing.js +4 -4
  76. package/dist/long-form-pricing.js.map +1 -1
  77. package/dist/long-form-profile.d.ts +2 -2
  78. package/dist/long-form-profile.js +2 -2
  79. package/dist/long-form-profile.js.map +1 -1
  80. package/dist/pacing.d.ts +1 -1
  81. package/dist/pacing.js +1 -1
  82. package/dist/pacing.js.map +1 -1
  83. package/dist/public-endpoints.d.ts +9 -11
  84. package/dist/public-endpoints.js +11 -13
  85. package/dist/public-endpoints.js.map +1 -1
  86. package/dist/rate-limit.d.ts +23 -130
  87. package/dist/rate-limit.js +27 -132
  88. package/dist/rate-limit.js.map +1 -1
  89. package/dist/render-backend.d.ts +30 -145
  90. package/dist/render-backend.js +4 -27
  91. package/dist/render-backend.js.map +1 -1
  92. package/dist/run-preflight.d.ts +4 -4
  93. package/dist/run-preflight.js +10 -10
  94. package/dist/run-preflight.js.map +1 -1
  95. package/dist/run-static-warnings.d.ts +8 -8
  96. package/dist/run-static-warnings.js +26 -24
  97. package/dist/run-static-warnings.js.map +1 -1
  98. package/dist/runs.d.ts +34 -55
  99. package/dist/runs.js +28 -94
  100. package/dist/runs.js.map +1 -1
  101. package/dist/script-integrity.d.ts +6 -7
  102. package/dist/script-integrity.js +7 -8
  103. package/dist/script-integrity.js.map +1 -1
  104. package/dist/semantic-inserts.d.ts +4 -4
  105. package/dist/semantic-inserts.js +6 -6
  106. package/dist/semantic-inserts.js.map +1 -1
  107. package/dist/skills.d.ts +37 -108
  108. package/dist/skills.js +77 -161
  109. package/dist/skills.js.map +1 -1
  110. package/dist/tts-backend.d.ts +13 -42
  111. package/dist/tts-backend.js +2 -10
  112. package/dist/tts-backend.js.map +1 -1
  113. package/dist/uploads.d.ts +4 -4
  114. package/dist/uploads.js +4 -4
  115. package/dist/uploads.js.map +1 -1
  116. package/dist/vendor-response.d.ts +17 -80
  117. package/dist/vendor-response.js +19 -67
  118. package/dist/vendor-response.js.map +1 -1
  119. package/dist/voice-admission.d.ts +5 -5
  120. package/dist/voice-admission.js +6 -6
  121. package/dist/voice-admission.js.map +1 -1
  122. package/dist/voice-catalog-data.d.ts +2 -2
  123. package/dist/voice-catalog-data.js +2 -2
  124. package/dist/voice-catalog-data.js.map +1 -1
  125. package/dist/voice-catalog.d.ts +5 -5
  126. package/dist/voice-catalog.generated.json +56 -54
  127. package/dist/voice-catalog.js +6 -6
  128. package/dist/voice-catalog.js.map +1 -1
  129. package/dist/voice-listing.d.ts +4 -4
  130. package/dist/voice-listing.js +6 -6
  131. package/dist/voice-listing.js.map +1 -1
  132. package/dist/voices.d.ts +40 -82
  133. package/dist/voices.js +56 -99
  134. package/dist/voices.js.map +1 -1
  135. package/package.json +1 -1
@@ -1,13 +1,5 @@
1
- /**
2
- * Склейка посимвольных таймингов в пословные.
3
- *
4
- * Живёт здесь, а не в адаптере ElevenLabs, потому что посимвольный формат
5
- * встречается у нескольких вендоров, и переписывать эту логику под каждого —
6
- * лишняя работа с одинаковыми граничными случаями.
7
- *
8
- * Границей слова считается пробельный символ; сам пробел в слово не входит,
9
- * но и не рвёт уже начатое. Пустые слова не порождаются.
10
- */
1
+ /** Joins per-character timings into words, shared by vendors with that format. Whitespace */
2
+ /** ends a word without joining it; empty words are never produced. */
11
3
  export function charTimingsToWords(characters, startTimes, endTimes) {
12
4
  if (characters.length !== startTimes.length || characters.length !== endTimes.length) {
13
5
  throw new Error(`character/timing length mismatch: ${characters.length} chars, ` +
@@ -1 +1 @@
1
- {"version":3,"file":"tts-backend.js","sourceRoot":"","sources":["../src/tts-backend.ts"],"names":[],"mappings":"AAsEA;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAA6B,EAC7B,UAA6B,EAC7B,QAA2B;IAE3B,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CACb,qCAAqC,UAAU,CAAC,MAAM,UAAU;YAC9D,GAAG,UAAU,CAAC,MAAM,YAAY,QAAQ,CAAC,MAAM,OAAO,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACxD,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;QAClC,CAAC;QACD,GAAG,IAAI,EAAE,CAAC;QACV,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;IAC9B,CAAC;IACD,KAAK,EAAE,CAAC;IAER,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"tts-backend.js","sourceRoot":"","sources":["../src/tts-backend.ts"],"names":[],"mappings":"AAmDA,6FAA6F;AAC7F,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAChC,UAA6B,EAC7B,UAA6B,EAC7B,QAA2B;IAE3B,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CACb,qCAAqC,UAAU,CAAC,MAAM,UAAU;YAC9D,GAAG,UAAU,CAAC,MAAM,YAAY,QAAQ,CAAC,MAAM,OAAO,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACxD,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,UAAU,CAAC,CAAC,CAAW,CAAC;QAClC,CAAC;QACD,GAAG,IAAI,EAAE,CAAC;QACV,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;IAC9B,CAAC;IACD,KAAK,EAAE,CAAC;IAER,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/uploads.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import { z } from "zod";
2
- /** Один потолок с пробой источника (`PROBE_MAX_BYTES` в service-core, сторож рядом с ней). */
2
+ /** The same cap as the source probe (`PROBE_MAX_BYTES` in service-core, guarded there). */
3
3
  export declare const UPLOAD_MAX_BYTES: number;
4
- /** Загрузок на аккаунт за скользящие сутки; ссылка живёт день, объект — семь (lifecycle R2). */
4
+ /** Uploads per account over a sliding day; a link lives one day, the object seven (storage lifecycle). */
5
5
  export declare const UPLOAD_DAILY_CAP = 20;
6
6
  export declare const UPLOAD_WINDOW_SECONDS = 86400;
7
7
  export declare const UPLOAD_URL_TTL_SECONDS = 86400;
8
8
  export declare const UPLOAD_OBJECT_RETENTION_DAYS = 7;
9
- /** WebP здесь нет намеренно: размеры из него проба не читает, а без них формат не проверить. */
9
+ /** No WebP on purpose: the probe cannot read its dimensions, and without them the format cannot be checked. */
10
10
  export declare const UPLOAD_MEDIA_TYPES: readonly ["image/png", "image/jpeg"];
11
11
  export type UploadMediaType = (typeof UPLOAD_MEDIA_TYPES)[number];
12
12
  export declare const UPLOADS_PATH = "/v1/uploads";
@@ -23,7 +23,7 @@ export declare const uploadResponse: z.ZodObject<{
23
23
  expires_at: z.ZodString;
24
24
  }, z.core.$strip>;
25
25
  export type UploadResponse = z.infer<typeof uploadResponse>;
26
- /** Тип по первым байтам, не по заголовку и не по расширению: их пишет отправитель. */
26
+ /** Type by the first bytes, not by header or extension: the sender writes those. */
27
27
  export declare function sniffUploadMediaType(bytes: Uint8Array): UploadMediaType | null;
28
28
  export declare function uploadExtension(mediaType: UploadMediaType): "png" | "jpg";
29
29
  export declare const UPLOAD_IMAGE_DESCRIPTION: string;
package/dist/uploads.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { z } from "zod";
2
- /** Один потолок с пробой источника (`PROBE_MAX_BYTES` в service-core, сторож рядом с ней). */
2
+ /** The same cap as the source probe (`PROBE_MAX_BYTES` in service-core, guarded there). */
3
3
  export const UPLOAD_MAX_BYTES = 10 * 1024 * 1024;
4
- /** Загрузок на аккаунт за скользящие сутки; ссылка живёт день, объект — семь (lifecycle R2). */
4
+ /** Uploads per account over a sliding day; a link lives one day, the object seven (storage lifecycle). */
5
5
  export const UPLOAD_DAILY_CAP = 20;
6
6
  export const UPLOAD_WINDOW_SECONDS = 86_400;
7
7
  export const UPLOAD_URL_TTL_SECONDS = 86_400;
8
8
  export const UPLOAD_OBJECT_RETENTION_DAYS = 7;
9
- /** WebP здесь нет намеренно: размеры из него проба не читает, а без них формат не проверить. */
9
+ /** No WebP on purpose: the probe cannot read its dimensions, and without them the format cannot be checked. */
10
10
  export const UPLOAD_MEDIA_TYPES = ["image/png", "image/jpeg"];
11
11
  export const UPLOADS_PATH = "/v1/uploads";
12
12
  export const uploadResponse = z.object({
@@ -19,7 +19,7 @@ export const uploadResponse = z.object({
19
19
  expires_at: z.string().datetime(),
20
20
  });
21
21
  const PNG_SIGNATURE = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
22
- /** Тип по первым байтам, не по заголовку и не по расширению: их пишет отправитель. */
22
+ /** Type by the first bytes, not by header or extension: the sender writes those. */
23
23
  export function sniffUploadMediaType(bytes) {
24
24
  if (bytes.length >= 8 && PNG_SIGNATURE.every((b, i) => bytes[i] === b))
25
25
  return "image/png";
@@ -1 +1 @@
1
- {"version":3,"file":"uploads.js","sourceRoot":"","sources":["../src/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8FAA8F;AAC9F,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,gGAAgG;AAChG,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C,gGAAgG;AAChG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,YAAY,CAAU,CAAC;AAGvE,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACjD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;IAC5C,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAGH,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvE,sFAAsF;AACtF,MAAM,UAAU,oBAAoB,CAAC,KAAiB;IACpD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IAC3F,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrF,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAA0B;IACxD,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GACnC,+FAA+F;IAC/F,+FAA+F;IAC/F,iGAAiG;IACjG,mGAAmG;IACnG,iGAAiG,CAAC"}
1
+ {"version":3,"file":"uploads.js","sourceRoot":"","sources":["../src/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,2FAA2F;AAC3F,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,0GAA0G;AAC1G,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAC7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C,+GAA+G;AAC/G,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,YAAY,CAAU,CAAC;AAGvE,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;AAE1C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACjD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;IAC5C,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACxD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACnC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAGH,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAEvE,oFAAoF;AACpF,MAAM,UAAU,oBAAoB,CAAC,KAAiB;IACpD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,WAAW,CAAC;IAC3F,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrF,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAA0B;IACxD,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GACnC,+FAA+F;IAC/F,+FAA+F;IAC/F,iGAAiG;IACjG,mGAAmG;IACnG,iGAAiG,CAAC"}
@@ -1,98 +1,35 @@
1
- /**
2
- * ЧТО УСПЕЛО СЛУЧИТЬСЯ С ПЛАТНЫМ ЗАПРОСОМ — ПРИЗНАК НА ОШИБКЕ, А НЕ ДОГАДКА ПО
3
- * ЕЁ ТЕКСТУ (US-606a).
4
- *
5
- * ЗАЧЕМ ЭТО СУЩЕСТВУЕТ. Провалившийся платный вызов кончается одним из трёх, и
6
- * различать их обязан код, а не человек, читающий лог:
7
- *
8
- * - платный запрос ещё НЕ УХОДИЛ (упал наш префлайт, бесплатный шаг, гард
9
- * длины) — денег не взяли точно;
10
- * - вендор ОТВЕТИЛ — дальше всё решает код: 4xx означает отказ без денег, а
11
- * 2xx, которым мы не смогли воспользоваться, означает, что работу приняли и
12
- * посчитали;
13
- * - ОТВЕТА НЕ БЫЛО ВОВСЕ (обрыв, тайм-аут) — взяли или нет, неизвестно.
14
- *
15
- * Третий случай — единственная причина, по которой US-606a вообще написана.
16
- * Свалив его в «не получилось», мы объявили бы неизвестность отсутствием траты,
17
- * то есть соврали бы в свою пользу ровно там, где ошибка дороже всего.
18
- *
19
- * ПОЧЕМУ ОТСУТСТВИЕ ПРИЗНАКА ЗНАЧИТ «НЕИЗВЕСТНО», А НЕ «НЕ УХОДИЛ». Это
20
- * fail-closed: непомеченная ошибка поднимает лишний алерт, непомеченная в
21
- * другую сторону — прячет возможную трату. Цена первой ошибки — внимание
22
- * владельца, цена второй — необнаруженное списание. Поэтому умолчание такое.
23
- *
24
- * ПОЧЕМУ РАЗБОР ТЕКСТА ОШИБКИ НЕ ГОДИТСЯ. Он завёл бы второй источник правды:
25
- * формат сообщений адаптера и его копию в парсере. Они расходятся на первой же
26
- * правке текста — молча, потому что парсер просто перестаёт узнавать строку.
27
- * Тот же довод уже стоил нам одного дефекта в `SpendRefusedError`.
28
- *
29
- * ПОЧЕМУ В `core`, А НЕ В СЕРВИСНОМ ПАКЕТЕ. Это обязанность реализаций
30
- * `RenderBackend` и `TtsBackend`, а оба контракта живут здесь — вместе с
31
- * требованием различать райтраебл и нерайтраебл ошибки, которое той же природы.
32
- * Модуль не тянет ничего: три функции над свойством объекта.
33
- */
34
- /**
35
- * Что известно о судьбе платного запроса к моменту броска.
36
- *
37
- * `unsent` — платный запрос не уходил. `responded` — вендор ответил, и код
38
- * ответа известен числом: флага «ответил» не хватило бы, потому что 200 и 402
39
- * — разные события с разной ценой.
40
- */
1
+ /** What is known about the paid request when it threw. `unsent`: it never left. `responded`: */
2
+ /** the vendor answered, with the status as a number, since 200 and 402 cost differently. */
41
3
  export type VendorDispatchFact = {
42
4
  readonly kind: "unsent";
43
5
  } | {
44
6
  readonly kind: "responded";
45
7
  readonly status: number;
46
8
  };
47
- /** Платный запрос ещё не уходил: упал префлайт, гард или бесплатный шаг. */
9
+ /** The paid request never left: a preflight, a guard or a free step failed. */
48
10
  export declare function markVendorUnsent<E>(error: E): E;
49
- /** Вендор ответил, и вот с каким кодом. */
11
+ /** The vendor answered, with this status. */
50
12
  export declare function markVendorResponse<E>(error: E, status: number): E;
51
- /**
52
- * Что известно о судьбе запроса. `undefined` — не известно НИЧЕГО, и это
53
- * утверждение о незнании, а не об отказе.
54
- *
55
- * Читает и не-Error значения: в `catch` приходит `unknown`, и бросить могли что
56
- * угодно.
57
- */
13
+ /** What is known about the request. `undefined` means NOTHING is known, a statement of */
14
+ /** ignorance, not of refusal. Reads non-Error values too, since `catch` gets `unknown`. */
58
15
  export declare function vendorDispatchFact(error: unknown): VendorDispatchFact | undefined;
59
- /**
60
- * ВЕРДИКТ ВЕНДОРА О САМОЙ ЗАДАЧЕ — вторая ось, отдельная от судьбы запроса.
61
- *
62
- * ЗАЧЕМ ОТДЕЛЬНО ОТ `VendorDispatchFact`. Тот отвечает на вопрос «дошёл ли
63
- * платный запрос»; этот — на вопрос «что вендор СКАЗАЛ о работе, которую уже
64
- * принял». Оси независимы: запрос дошёл и получил 200 (первая ось довольна), а
65
- * задача через десять минут поллинга объявлена проваленной (вторая ось — нет).
66
- *
67
- * ЗАЧЕМ ЭТО ВООБЩЕ ЕСТЬ. Без вердикта учёт не может отличить «мы не узнали, чем
68
- * кончилось» от «вендор сам сказал, что провалил». Первое обязано оставаться
69
- * незакрытым, второе — записаться: молчать о том, что знаешь, в аудиторском
70
- * следе так же плохо, как утверждать то, чего не знаешь. Круг 2 внешней приёмки
71
- * поймал первую ошибку, круг 3 — вторую.
72
- *
73
- * `succeeded` здесь означает «вендор довёл работу до конца», даже если
74
- * воспользоваться результатом мы не смогли (пришёл `completed` без
75
- * положительной длительности). Наша неспособность прочитать ответ — не провал
76
- * вендора и не повод записывать его в отчёт как провал.
77
- */
16
+ /** The vendor's verdict on the job itself, an axis apart from dispatch: an accepted request */
17
+ /** may still fail later. `succeeded` means the vendor finished, even if we could not use it. */
78
18
  export type VendorJobVerdict = "succeeded" | "failed";
79
- /** Помечает ошибку тем, что вендор сказал о САМОЙ задаче. */
19
+ /** Marks the error with what the vendor said about the job ITSELF. */
80
20
  export declare function markVendorJobVerdict<E>(error: E, verdict: VendorJobVerdict): E;
81
- /**
82
- * Вердикт вендора о задаче. `undefined` — вендор ничего терминального не
83
- * сказал: оборвался поллинг, вышел срок, ответил не тот код. Это незнание, и
84
- * закрывать по нему операцию нельзя.
85
- */
21
+ /** The vendor's verdict on the job. `undefined`: nothing terminal was said (polling broke, */
22
+ /** timed out, wrong status). That is ignorance, and an operation must not be closed on it. */
86
23
  export declare function vendorJobVerdict(error: unknown): VendorJobVerdict | undefined;
87
- /** Чья причина за отказом вендора. `unknown` — честный ответ и ПРЕЖНЕЕ */
88
- /** поведение (не ноль): разбор и цена обратного — `docs/18` §11.5. */
24
+ /** Whose fault a vendor refusal is. `unknown` is the honest answer and keeps the previous */
25
+ /** behavior (not zero). */
89
26
  export type VendorRefusalClass = "account_standing" | "vendor" | "unknown";
90
- /** Помечает ошибку тем, что о причине отказа сказал сам вендор. */
27
+ /** Marks the error with what the vendor itself said about the refusal cause. */
91
28
  export declare function markVendorRefusal<E>(error: E, refusal: VendorRefusalClass): E;
92
- /** Непомеченная ошибка — `unknown`: fail-closed здесь смотрит в прежнее поведение. */
29
+ /** An unmarked error is `unknown`: fail-closed here means the previous behavior. */
93
30
  export declare function vendorRefusalClass(error: unknown): VendorRefusalClass;
94
- /** Пометить класс отказа ответом САМОГО адаптера. Без неё обязательный член */
95
- /** задавал бы вендору вопрос, ответ на который никуда не едет (§11.6). */
31
+ /** Marks the refusal class with the adapter's OWN answer; otherwise the required member */
32
+ /** would ask the vendor a question whose answer goes nowhere. */
96
33
  export declare function withRefusalClass<T>(backend: {
97
34
  classifyRefusal(error: unknown): VendorRefusalClass;
98
35
  }, call: () => Promise<T>): Promise<T>;
@@ -1,50 +1,10 @@
1
- /**
2
- * ЧТО УСПЕЛО СЛУЧИТЬСЯ С ПЛАТНЫМ ЗАПРОСОМ — ПРИЗНАК НА ОШИБКЕ, А НЕ ДОГАДКА ПО
3
- * ЕЁ ТЕКСТУ (US-606a).
4
- *
5
- * ЗАЧЕМ ЭТО СУЩЕСТВУЕТ. Провалившийся платный вызов кончается одним из трёх, и
6
- * различать их обязан код, а не человек, читающий лог:
7
- *
8
- * - платный запрос ещё НЕ УХОДИЛ (упал наш префлайт, бесплатный шаг, гард
9
- * длины) — денег не взяли точно;
10
- * - вендор ОТВЕТИЛ — дальше всё решает код: 4xx означает отказ без денег, а
11
- * 2xx, которым мы не смогли воспользоваться, означает, что работу приняли и
12
- * посчитали;
13
- * - ОТВЕТА НЕ БЫЛО ВОВСЕ (обрыв, тайм-аут) — взяли или нет, неизвестно.
14
- *
15
- * Третий случай — единственная причина, по которой US-606a вообще написана.
16
- * Свалив его в «не получилось», мы объявили бы неизвестность отсутствием траты,
17
- * то есть соврали бы в свою пользу ровно там, где ошибка дороже всего.
18
- *
19
- * ПОЧЕМУ ОТСУТСТВИЕ ПРИЗНАКА ЗНАЧИТ «НЕИЗВЕСТНО», А НЕ «НЕ УХОДИЛ». Это
20
- * fail-closed: непомеченная ошибка поднимает лишний алерт, непомеченная в
21
- * другую сторону — прячет возможную трату. Цена первой ошибки — внимание
22
- * владельца, цена второй — необнаруженное списание. Поэтому умолчание такое.
23
- *
24
- * ПОЧЕМУ РАЗБОР ТЕКСТА ОШИБКИ НЕ ГОДИТСЯ. Он завёл бы второй источник правды:
25
- * формат сообщений адаптера и его копию в парсере. Они расходятся на первой же
26
- * правке текста — молча, потому что парсер просто перестаёт узнавать строку.
27
- * Тот же довод уже стоил нам одного дефекта в `SpendRefusedError`.
28
- *
29
- * ПОЧЕМУ В `core`, А НЕ В СЕРВИСНОМ ПАКЕТЕ. Это обязанность реализаций
30
- * `RenderBackend` и `TtsBackend`, а оба контракта живут здесь — вместе с
31
- * требованием различать райтраебл и нерайтраебл ошибки, которое той же природы.
32
- * Модуль не тянет ничего: три функции над свойством объекта.
33
- */
34
- /**
35
- * Имя свойства. Намеренно длинное и с префиксом проекта: свойство садится на
36
- * чужие объекты ошибок, и короткое имя вроде `status` затёрло бы поле, которое
37
- * туда положил кто-то другой.
38
- */
1
+ // What happened to a paid request, as a flag on the error rather than a guess from its text.
2
+ // No flag means "unknown", not "unsent": fail-closed, so a possible charge is never hidden.
3
+ /** Property name, long and project-prefixed: it lands on foreign error objects, and a short */
4
+ /** name like `status` would overwrite someone else's field. */
39
5
  const VENDOR_DISPATCH_FACT = "clipwrightVendorDispatchFact";
40
- /**
41
- * Общая запись признака. Неперечислимо: ошибки уезжают в логи и в `runs.error`,
42
- * и лишний ключ в их сериализации — шум, за который никто не просил.
43
- *
44
- * НА ПРИМИТИВЕ — НИЧЕГО НЕ ДЕЛАЕТ, И ЭТО НАЗВАННОЕ СВОЙСТВО, А НЕ НЕДОСМОТР:
45
- * `throw "строка"` пометить нечем, и такая ошибка попадёт в `unknown`. Это
46
- * сторона fail-closed (лишний алерт, а не потерянная трата), поэтому терпимо.
47
- */
6
+ /** Shared flag writer. Non-enumerable, so it does not clutter serialized logs. A primitive */
7
+ /** cannot be marked and reads as unknown, which is the fail-closed side. */
48
8
  function mark(error, fact) {
49
9
  if (typeof error !== "object" || error === null) {
50
10
  return error;
@@ -53,27 +13,22 @@ function mark(error, fact) {
53
13
  value: fact,
54
14
  enumerable: false,
55
15
  writable: false,
56
- // `configurable`, чтобы повторная пометка не бросала TypeError: ошибка
57
- // проходит несколько уровней адаптера, и внешний слой вправе уточнить факт.
16
+ // `configurable` so a second mark does not throw: an outer adapter layer may
17
+ // refine the fact.
58
18
  configurable: true,
59
19
  });
60
20
  return error;
61
21
  }
62
- /** Платный запрос ещё не уходил: упал префлайт, гард или бесплатный шаг. */
22
+ /** The paid request never left: a preflight, a guard or a free step failed. */
63
23
  export function markVendorUnsent(error) {
64
24
  return mark(error, { kind: "unsent" });
65
25
  }
66
- /** Вендор ответил, и вот с каким кодом. */
26
+ /** The vendor answered, with this status. */
67
27
  export function markVendorResponse(error, status) {
68
28
  return mark(error, { kind: "responded", status });
69
29
  }
70
- /**
71
- * Что известно о судьбе запроса. `undefined` — не известно НИЧЕГО, и это
72
- * утверждение о незнании, а не об отказе.
73
- *
74
- * Читает и не-Error значения: в `catch` приходит `unknown`, и бросить могли что
75
- * угодно.
76
- */
30
+ /** What is known about the request. `undefined` means NOTHING is known, a statement of */
31
+ /** ignorance, not of refusal. Reads non-Error values too, since `catch` gets `unknown`. */
77
32
  export function vendorDispatchFact(error) {
78
33
  if (typeof error !== "object" || error === null) {
79
34
  return undefined;
@@ -92,7 +47,7 @@ export function vendorDispatchFact(error) {
92
47
  return undefined;
93
48
  }
94
49
  const VENDOR_JOB_VERDICT = "clipwrightVendorJobVerdict";
95
- /** Помечает ошибку тем, что вендор сказал о САМОЙ задаче. */
50
+ /** Marks the error with what the vendor said about the job ITSELF. */
96
51
  export function markVendorJobVerdict(error, verdict) {
97
52
  if (typeof error !== "object" || error === null) {
98
53
  return error;
@@ -105,11 +60,8 @@ export function markVendorJobVerdict(error, verdict) {
105
60
  });
106
61
  return error;
107
62
  }
108
- /**
109
- * Вердикт вендора о задаче. `undefined` — вендор ничего терминального не
110
- * сказал: оборвался поллинг, вышел срок, ответил не тот код. Это незнание, и
111
- * закрывать по нему операцию нельзя.
112
- */
63
+ /** The vendor's verdict on the job. `undefined`: nothing terminal was said (polling broke, */
64
+ /** timed out, wrong status). That is ignorance, and an operation must not be closed on it. */
113
65
  export function vendorJobVerdict(error) {
114
66
  if (typeof error !== "object" || error === null) {
115
67
  return undefined;
@@ -118,7 +70,7 @@ export function vendorJobVerdict(error) {
118
70
  return value === "succeeded" || value === "failed" ? value : undefined;
119
71
  }
120
72
  const VENDOR_REFUSAL_CLASS = "clipwrightVendorRefusalClass";
121
- /** Помечает ошибку тем, что о причине отказа сказал сам вендор. */
73
+ /** Marks the error with what the vendor itself said about the refusal cause. */
122
74
  export function markVendorRefusal(error, refusal) {
123
75
  if (typeof error !== "object" || error === null) {
124
76
  return error;
@@ -131,7 +83,7 @@ export function markVendorRefusal(error, refusal) {
131
83
  });
132
84
  return error;
133
85
  }
134
- /** Непомеченная ошибка — `unknown`: fail-closed здесь смотрит в прежнее поведение. */
86
+ /** An unmarked error is `unknown`: fail-closed here means the previous behavior. */
135
87
  export function vendorRefusalClass(error) {
136
88
  if (typeof error !== "object" || error === null) {
137
89
  return "unknown";
@@ -139,8 +91,8 @@ export function vendorRefusalClass(error) {
139
91
  const value = error[VENDOR_REFUSAL_CLASS];
140
92
  return value === "account_standing" || value === "vendor" ? value : "unknown";
141
93
  }
142
- /** Пометить класс отказа ответом САМОГО адаптера. Без неё обязательный член */
143
- /** задавал бы вендору вопрос, ответ на который никуда не едет (§11.6). */
94
+ /** Marks the refusal class with the adapter's OWN answer; otherwise the required member */
95
+ /** would ask the vendor a question whose answer goes nowhere. */
144
96
  export async function withRefusalClass(backend, call) {
145
97
  try {
146
98
  return await call();
@@ -1 +1 @@
1
- {"version":3,"file":"vendor-response.js","sourceRoot":"","sources":["../src/vendor-response.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vendor-response.js","sourceRoot":"","sources":["../src/vendor-response.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { Gender } from "./default-actor.js";
2
2
  import { type CatalogFileVoice } from "./voice-catalog.js";
3
3
  import { type TtsModelId } from "./voices.js";
4
- /** Почему API не допускает имя голоса; `undefined` — пресет или живой голос каталога. */
4
+ /** Why the API refuses a voice name; `undefined` for a preset or a live catalog voice. */
5
5
  export declare function catalogVoiceRefusal(voice: string, voices?: readonly CatalogFileVoice[]): string | undefined;
6
6
  export declare const serverUgcInput: import("zod").ZodObject<{
7
7
  script: import("zod").ZodOptional<import("zod").ZodString>;
@@ -99,11 +99,11 @@ export declare const serverUgcInput: import("zod").ZodObject<{
99
99
  white: "white";
100
100
  }>>;
101
101
  }, import("zod/v4/core").$strip>;
102
- /** Пол голоса по имени: у пресета — наш факт, у каталожного — метка вендора. */
103
- /** Сырой `voice_id` пола не имеет, и это `undefined`, а не догадка (#210). */
102
+ /** Voice gender by name: our fact for a preset, the vendor label for a catalog voice. */
103
+ /** A raw `voice_id` has no gender, so `undefined`, not a guess. */
104
104
  export declare function voiceGenderOf(voice: string, voices?: readonly CatalogFileVoice[]): Gender | undefined;
105
- /** Предупреждение — только там, где НЕХВАТКА верификации что-то значит: у */
106
- /** `eleven_v3` её нет ни у кого, разбор — `docs/16` (clipwright#208). */
105
+ /** Warns only where MISSING verification means something: for `eleven_v3` no voice */
106
+ /** has it at all. */
107
107
  export declare function buildVoiceVerificationWarnings(input: {
108
108
  voice?: string | undefined;
109
109
  voice_id?: string | undefined;
@@ -3,8 +3,8 @@ import { normalizeVoiceLabel } from "./voice-catalog.js";
3
3
  import { VOICE_CATALOG } from "./voice-catalog-data.js";
4
4
  import { vendorVerifiedModels } from "./voice-listing.js";
5
5
  import { isVoicePresetName, resolveTtsModel, VOICE_PRESETS } from "./voices.js";
6
- // Подпуть, а не баррел: каталог весит сотни килобайт, и клиентам SDK он не нужен (docs/16).
7
- /** Почему API не допускает имя голоса; `undefined` — пресет или живой голос каталога. */
6
+ // A subpath, not the barrel: the catalog weighs hundreds of kilobytes and SDK clients do not need it.
7
+ /** Why the API refuses a voice name; `undefined` for a preset or a live catalog voice. */
8
8
  export function catalogVoiceRefusal(voice, voices = VOICE_CATALOG.voices) {
9
9
  if (isVoicePresetName(voice))
10
10
  return undefined;
@@ -19,8 +19,8 @@ export function catalogVoiceRefusal(voice, voices = VOICE_CATALOG.voices) {
19
19
  return undefined;
20
20
  }
21
21
  export const serverUgcInput = serverUgcInputWith((voice) => catalogVoiceRefusal(voice));
22
- /** Пол голоса по имени: у пресета — наш факт, у каталожного — метка вендора. */
23
- /** Сырой `voice_id` пола не имеет, и это `undefined`, а не догадка (#210). */
22
+ /** Voice gender by name: our fact for a preset, the vendor label for a catalog voice. */
23
+ /** A raw `voice_id` has no gender, so `undefined`, not a guess. */
24
24
  export function voiceGenderOf(voice, voices = VOICE_CATALOG.voices) {
25
25
  if (isVoicePresetName(voice))
26
26
  return VOICE_PRESETS[voice].gender;
@@ -28,8 +28,8 @@ export function voiceGenderOf(voice, voices = VOICE_CATALOG.voices) {
28
28
  const label = normalizeVoiceLabel(entry?.gender_raw);
29
29
  return label === "female" || label === "male" ? label : undefined;
30
30
  }
31
- /** Предупреждение — только там, где НЕХВАТКА верификации что-то значит: у */
32
- /** `eleven_v3` её нет ни у кого, разбор — `docs/16` (clipwright#208). */
31
+ /** Warns only where MISSING verification means something: for `eleven_v3` no voice */
32
+ /** has it at all. */
33
33
  export function buildVoiceVerificationWarnings(input, gender, voices = VOICE_CATALOG.voices) {
34
34
  const slug = input.voice;
35
35
  if (slug === undefined || isVoicePresetName(slug))
@@ -1 +1 @@
1
- {"version":3,"file":"voice-admission.js","sourceRoot":"","sources":["../src/voice-admission.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"voice-admission.js","sourceRoot":"","sources":["../src/voice-admission.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- /** Сгенерированные файлы, разобранные схемой. В баррел не входит: клиентам SDK */
2
- /** каталог не нужен, а подключать ли его подпутём, решает S5 (#164). */
1
+ /** The generated files, parsed by their schemas. Not in the barrel: SDK clients do not need */
2
+ /** the catalog. */
3
3
  export declare const VOICE_CATALOG: {
4
4
  shortfall: Partial<Record<"bg" | "cs" | "da" | "de" | "el" | "en" | "es" | "fi" | "fil" | "fr" | "hi" | "hr" | "hu" | "id" | "it" | "ja" | "ko" | "ms" | "nl" | "no" | "pl" | "pt" | "ro" | "ru" | "sk" | "sv" | "ta" | "tr" | "uk" | "vi" | "zh", {
5
5
  female?: number | undefined;
@@ -1,8 +1,8 @@
1
1
  import catalogJson from "./voice-catalog.generated.json" with { type: "json" };
2
2
  import modelsJson from "./tts-model-languages.generated.json" with { type: "json" };
3
3
  import { ttsModelLanguagesFile, voiceCatalogFile } from "./voice-catalog.js";
4
- /** Сгенерированные файлы, разобранные схемой. В баррел не входит: клиентам SDK */
5
- /** каталог не нужен, а подключать ли его подпутём, решает S5 (#164). */
4
+ /** The generated files, parsed by their schemas. Not in the barrel: SDK clients do not need */
5
+ /** the catalog. */
6
6
  export const VOICE_CATALOG = voiceCatalogFile.parse(catalogJson);
7
7
  export const TTS_MODEL_LANGUAGES = ttsModelLanguagesFile.parse(modelsJson);
8
8
  //# sourceMappingURL=voice-catalog-data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"voice-catalog-data.js","sourceRoot":"","sources":["../src/voice-catalog-data.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,gCAAgC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/E,OAAO,UAAU,MAAM,sCAAsC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,kFAAkF;AAClF,wEAAwE;AACxE,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"voice-catalog-data.js","sourceRoot":"","sources":["../src/voice-catalog-data.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,gCAAgC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/E,OAAO,UAAU,MAAM,sCAAsC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,+FAA+F;AAC/F,mBAAmB;AACnB,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import { z } from "zod";
2
- /** Языки каталога голосов — ЕДИНСТВЕННЫЙ список (#164); остальное выводится из него. */
2
+ /** Voice catalog languages: the ONLY list; everything else is derived from it. */
3
3
  export declare const CATALOG_LANGUAGES: readonly ["bg", "cs", "da", "de", "el", "en", "es", "fi", "fil", "fr", "hi", "hr", "hu", "id", "it", "ja", "ko", "ms", "nl", "no", "pl", "pt", "ro", "ru", "sk", "sv", "ta", "tr", "uk", "vi", "zh"];
4
4
  export type CatalogLanguage = (typeof CATALOG_LANGUAGES)[number];
5
5
  export declare const CATALOG_GENDERS: readonly ["female", "male"];
6
6
  export type CatalogGender = (typeof CATALOG_GENDERS)[number];
7
7
  export declare const CATALOG_VOICES_PER_GENDER = 5;
8
- /** Запись сгенерированного файла; не путать с `voiceCatalogEntry` — ответом `/v1/voices`. */
8
+ /** An entry of the generated file; not to be confused with `voiceCatalogEntry`, the `/v1/voices` response. */
9
9
  export declare const catalogFileVoice: z.ZodObject<{
10
10
  slug: z.ZodString;
11
11
  language: z.ZodEnum<{
@@ -171,8 +171,8 @@ export declare const ttsModelLanguagesFile: z.ZodObject<{
171
171
  }, z.core.$strict>>;
172
172
  }, z.core.$strict>;
173
173
  export type TtsModelLanguagesFile = z.infer<typeof ttsModelLanguagesFile>;
174
- /** Фильтры `/v1/voices`: разбор запроса, `inputSchema` MCP и параметры SDK. Метки */
175
- /** `age` и `use_case` берутся из данных каталога, поэтому их допустимый набор знает сервер. */
174
+ /** `/v1/voices` filters: request parsing, the MCP `inputSchema` and SDK parameters. `age` and */
175
+ /** `use_case` labels come from catalog data, so the server knows their allowed set. */
176
176
  export declare const voicesQueryShape: {
177
177
  language: z.ZodOptional<z.ZodEnum<{
178
178
  bg: "bg";
@@ -267,5 +267,5 @@ export declare const voicesQuery: z.ZodObject<{
267
267
  }, z.core.$strip>;
268
268
  export type VoicesQuery = z.infer<typeof voicesQuery>;
269
269
  export declare const VOICES_QUERY_FIELDS: (keyof VoicesQuery)[];
270
- /** Нормализация метки на чтении: `middle-aged` → `middle_aged`, пустая → нет метки. */
270
+ /** Label normalization on read: `middle-aged` → `middle_aged`, empty → no label. */
271
271
  export declare function normalizeVoiceLabel(raw: string | null | undefined): string | undefined;