@clipwright/sdk 0.19.0 → 0.20.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/CHANGELOG.md +14 -0
- package/dist/client-id.js +7 -20
- package/dist/client-id.js.map +1 -1
- package/dist/index.d.ts +37 -82
- package/dist/index.js +89 -250
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -16,6 +16,20 @@ a customer reading it should not miss what appeared in the product. Like *Server
|
|
|
16
16
|
they are live from the day the web app was deployed, not from the package release they are
|
|
17
17
|
listed under.
|
|
18
18
|
|
|
19
|
+
## [0.20.0] - 2026-09-25
|
|
20
|
+
|
|
21
|
+
The MCP server is ready for directories: it has a name in the official MCP
|
|
22
|
+
Registry, and every tool tells the host whether it only reads or writes.
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- Every MCP tool now carries a `title` and the `readOnlyHint`/`destructiveHint`
|
|
27
|
+
annotations: quotes, lists and reads are read-only, `delete_actor` is
|
|
28
|
+
destructive, and `make_ugc`, `create_actor`, `upload_image` and
|
|
29
|
+
`set_actor_defaults` write.
|
|
30
|
+
- `@clipwright/mcp-server` declares `mcpName: io.clipwright/mcp` for the official
|
|
31
|
+
MCP Registry.
|
|
32
|
+
|
|
19
33
|
## [0.19.0] - 2026-09-22
|
|
20
34
|
|
|
21
35
|
A paid video that arrived after we stopped waiting can now be collected: the run
|
package/dist/client-id.js
CHANGED
|
@@ -2,22 +2,9 @@ import { randomUUID } from "node:crypto";
|
|
|
2
2
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* ЗАЧЕМ ЭТО ВООБЩЕ СУЩЕСТВУЕТ (C1): ключ идемпотентности склеивается из хеша
|
|
9
|
-
* входа И идентичности клиента. Хеш входа один и тот же на любой машине, поэтому
|
|
10
|
-
* без стабильного per-установка `clientId` дедупликация повторного `POST /run`
|
|
11
|
-
* либо не работает между перезапусками процесса, либо, наоборот, схлопывает
|
|
12
|
-
* раны разных пользователей. Одна установка = одна идентичность = один денежный
|
|
13
|
-
* контур дедупа.
|
|
14
|
-
*
|
|
15
|
-
* ПОЧЕМУ ПАДЕНИЕ, А НЕ ЭФЕМЕРНЫЙ id ПРИ ОШИБКЕ ФС: тихий фолбэк на случайный
|
|
16
|
-
* id при каждом запуске ВЫКЛЮЧАЕТ C1 целиком (каждый старт — новый клиент →
|
|
17
|
-
* дедуп мёртв → повторный рендер за деньги). Лучше громко потребовать выставить
|
|
18
|
-
* `CLIPWRIGHT_CLIENT_ID`, чем молча жечь кредиты.
|
|
19
|
-
*/
|
|
20
|
-
/** Приоритетный источник — явный env: не читает и не пишет файл вовсе. */
|
|
5
|
+
/** Stable per-install identity that prefixes the idempotency key, so retries */
|
|
6
|
+
/** deduplicate across restarts without merging different users' runs. */
|
|
7
|
+
/** An explicit env value wins and skips the file entirely. */
|
|
21
8
|
const ENV_VAR = "CLIPWRIGHT_CLIENT_ID";
|
|
22
9
|
export function resolveClientId() {
|
|
23
10
|
const fromEnv = process.env[ENV_VAR];
|
|
@@ -33,16 +20,16 @@ export function resolveClientId() {
|
|
|
33
20
|
return existing;
|
|
34
21
|
}
|
|
35
22
|
}
|
|
36
|
-
//
|
|
37
|
-
//
|
|
23
|
+
// First run on this install: persist a stable id. Dashless UUID keeps the
|
|
24
|
+
// Idempotency-Key header short.
|
|
38
25
|
const id = randomUUID().replace(/-/g, "");
|
|
39
26
|
mkdirSync(dir, { recursive: true });
|
|
40
27
|
writeFileSync(file, id, "utf8");
|
|
41
28
|
return id;
|
|
42
29
|
}
|
|
43
30
|
catch (cause) {
|
|
44
|
-
//
|
|
45
|
-
//
|
|
31
|
+
// No silent ephemeral id: a fresh id per start disables dedup and turns
|
|
32
|
+
// every retry into a second paid render.
|
|
46
33
|
throw new Error(`Cannot read or create ~/.clipwright/client-id. Set the ${ENV_VAR} ` +
|
|
47
34
|
`environment variable to a stable per-install identifier so idempotent ` +
|
|
48
35
|
`retries deduplicate instead of billing twice.`, { cause });
|
package/dist/client-id.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-id.js","sourceRoot":"","sources":["../src/client-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC
|
|
1
|
+
{"version":3,"file":"client-id.js","sourceRoot":"","sources":["../src/client-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,gFAAgF;AAChF,yEAAyE;AAEzE,8DAA8D;AAC9D,MAAM,OAAO,GAAG,sBAAsB,CAAC;AAEvC,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAEpC,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,gCAAgC;QAChC,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1C,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,wEAAwE;QACxE,yCAAyC;QACzC,MAAM,IAAI,KAAK,CACb,0DAA0D,OAAO,GAAG;YAClE,wEAAwE;YACxE,+CAA+C,EACjD,EAAE,KAAK,EAAE,CACV,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,131 +2,86 @@ import { type Account, type ActorDefaults, type ActorDefaultsInput, type ActorCa
|
|
|
2
2
|
export interface ClipwrightClientOptions {
|
|
3
3
|
apiKey: string;
|
|
4
4
|
baseUrl?: string | undefined;
|
|
5
|
-
/**
|
|
5
|
+
/** Run status polling interval, ms. */
|
|
6
6
|
pollIntervalMs?: number | undefined;
|
|
7
|
-
/**
|
|
8
|
-
/**
|
|
7
|
+
/** Timeout of ONE request, ms (default 30_000). `maxWaitMs` bounds the */
|
|
8
|
+
/** whole `makeUgc`; this bounds each call separately. */
|
|
9
9
|
requestTimeoutMs?: number | undefined;
|
|
10
10
|
}
|
|
11
|
-
/**
|
|
11
|
+
/** Run start options. `attempt` sets the `:N` suffix; an explicit key overrides it. */
|
|
12
12
|
export interface StartUgcOptions {
|
|
13
|
-
/**
|
|
13
|
+
/** Attempt number (default 1) → `:N` suffix of the idempotency key. */
|
|
14
14
|
attempt?: number | undefined;
|
|
15
|
-
/**
|
|
15
|
+
/** Explicit key for an intentionally new run; overrides the computed one. */
|
|
16
16
|
idempotencyKey?: string | undefined;
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
18
|
+
/** Options of the blocking `makeUgc`: `attempt` plus a polling deadline. */
|
|
19
19
|
export interface MakeUgcOptions {
|
|
20
20
|
attempt?: number | undefined;
|
|
21
|
-
/**
|
|
21
|
+
/** Deadline for reaching a terminal state, ms (default 10 min). */
|
|
22
22
|
maxWaitMs?: number | undefined;
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
25
|
-
|
|
26
|
-
*
|
|
27
|
-
* Обе беды приходят из zod и до этого класса были неотличимы снаружи: и
|
|
28
|
-
* `makeUgcInput.parse` на входе, и `run.parse` на ответе бросали `ZodError`.
|
|
29
|
-
* Внешнее ревью (круг 9) показало цену этой неразличимости. CLI печатал любую
|
|
30
|
-
* такую ошибку как «запрос отвергнут ДО отправки» — а на битом ответе `POST
|
|
31
|
-
* /run` это ложь в самую дорогую сторону: запрос ушёл, ран создан и, возможно,
|
|
32
|
-
* уже оплачен, но человеку сказано, что ничего не произошло, и `run_id` он не
|
|
33
|
-
* получил.
|
|
34
|
-
*
|
|
35
|
-
* Поэтому провал разбора ОТВЕТА получает собственный класс и собственный текст,
|
|
36
|
-
* который прямо называет, мог ли вызов иметь последствия.
|
|
37
|
-
*/
|
|
24
|
+
/** An unparseable server response, distinct from rejected input: after */
|
|
25
|
+
/** `POST /run` the run may already exist and be charged. */
|
|
38
26
|
export declare class ClipwrightResponseError extends Error {
|
|
39
27
|
#private;
|
|
40
|
-
/**
|
|
28
|
+
/** Path whose response failed to parse. */
|
|
41
29
|
readonly path: string;
|
|
42
|
-
/**
|
|
30
|
+
/** Whether the request may already have changed state (created a run, spent credits). */
|
|
43
31
|
readonly mayHaveTakenEffect: boolean;
|
|
44
|
-
/**
|
|
45
|
-
|
|
46
|
-
* прежнее `delivered` читалось как «не доставлено», хотя `false` означает лишь
|
|
47
|
-
* ОТСУТСТВИЕ ПОДТВЕРЖДЕНИЯ. Отличить «не дошло» от «дошло, а ответ потерян»
|
|
48
|
-
* у HTTP способа нет, и потребитель, прочитавший поле как отрицание, запустил
|
|
49
|
-
* бы `attempt: 2` и оплатил второй рендер.
|
|
50
|
-
*/
|
|
32
|
+
/** `false` means delivery is unconfirmed, not that it failed: HTTP cannot */
|
|
33
|
+
/** tell a lost request from a lost response. */
|
|
51
34
|
readonly deliveryConfirmed: boolean;
|
|
52
35
|
constructor(path: string, mayHaveTakenEffect: boolean, cause: unknown, deliveryConfirmed?: boolean);
|
|
53
36
|
}
|
|
54
|
-
/**
|
|
55
|
-
/**
|
|
37
|
+
/** One `/v1/voices` preset, derived from the response schema so the two */
|
|
38
|
+
/** shapes cannot drift apart. */
|
|
56
39
|
export type VoiceCatalogEntry = CoreVoiceCatalogEntry;
|
|
57
|
-
/**
|
|
58
|
-
|
|
59
|
-
*
|
|
60
|
-
* ЧТО БЫЛО ДО. `#request` сводил любой не-2xx к `new Error(message)`: статус,
|
|
61
|
-
* код и назначенная сервером пауза терялись на границе SDK. Вызыватель мог
|
|
62
|
-
* только напечатать текст — отличить «подожди две секунды» от «пополни счёт»
|
|
63
|
-
* было нечем, и поллинг умирал на первом же 429.
|
|
64
|
-
*
|
|
65
|
-
* ЧЕГО ЗДЕСЬ НАМЕРЕННО НЕТ — СВОЕЙ ФОРМЫ ОТКАЗА. Класс не объявляет ни кодов,
|
|
66
|
-
* ни полей с числами: всё это лежит в `ApiFailure` из `@clipwright/core`, и
|
|
67
|
-
* `code`/`report()` выводятся оттуда же (правило проекта №2). Объяви SDK свою
|
|
68
|
-
* копию — и MCP с CLI получили бы вторую, а «повторять или нет» стало бы
|
|
69
|
-
* вопросом, на который три поверхности отвечают порознь.
|
|
70
|
-
*/
|
|
40
|
+
/** An API refusal with status, code and server-set pause intact. The shape */
|
|
41
|
+
/** comes from core, so SDK, CLI and MCP answer "retry or not" identically. */
|
|
71
42
|
export declare class ClipwrightApiError extends Error {
|
|
72
|
-
/**
|
|
43
|
+
/** Parsed refusal: kind, numbers, pause. Shape comes from core. */
|
|
73
44
|
readonly failure: ApiFailure;
|
|
74
45
|
readonly status: number;
|
|
75
|
-
/**
|
|
46
|
+
/** Refusal code; `http_<status>` for foreign bodies without one. */
|
|
76
47
|
readonly code: string;
|
|
77
|
-
/**
|
|
48
|
+
/** Server-set pause in seconds; `undefined` if the server named none. */
|
|
78
49
|
readonly retryAfterSeconds: number | undefined;
|
|
79
50
|
constructor(failure: ApiFailure);
|
|
80
|
-
/**
|
|
51
|
+
/** Whether repeating the same call makes sense. Core decides, not this surface. */
|
|
81
52
|
get retryable(): boolean;
|
|
82
|
-
/**
|
|
53
|
+
/** The refusal expanded for an agent: numbers, instruction, retry flag. */
|
|
83
54
|
report(): AgentFailureReport;
|
|
84
55
|
}
|
|
85
56
|
export declare class ClipwrightClient {
|
|
86
57
|
#private;
|
|
87
58
|
constructor(opts: ClipwrightClientOptions);
|
|
88
|
-
/**
|
|
59
|
+
/** Cost estimate; spends no credits. */
|
|
89
60
|
quoteUgc(input: MakeUgcInputArgs): Promise<QuoteResponse>;
|
|
90
|
-
/**
|
|
91
|
-
|
|
92
|
-
*
|
|
93
|
-
* Ключ идемпотентности формируется ЗДЕСЬ, а не на вызывающей поверхности:
|
|
94
|
-
* суффикс `:N` (по `attempt`, дефолт 1) пишется ВСЕГДА, иначе MCP дал бы
|
|
95
|
-
* `<hash>`, а CLI `<hash>:1` — межповерхностный шов, в котором дедуп ломается.
|
|
96
|
-
*/
|
|
61
|
+
/** Starts a render and returns the run at once (state=queued). The key is built */
|
|
62
|
+
/** here with an always-present `:N` suffix, so MCP and CLI dedupe alike. */
|
|
97
63
|
startUgc(input: MakeUgcInputArgs, opts?: StartUgcOptions): Promise<Run>;
|
|
98
|
-
/**
|
|
99
|
-
* Курируемый каталог голосов для `voice`/`voice_id` (US-516). Отдаёт то же,
|
|
100
|
-
* что и `/v1/voices` — статический список из @clipwright/core, БЕЗ вендорских
|
|
101
|
-
* id (они не покидают адаптер воркера). Каталог курируемый по дизайну: это
|
|
102
|
-
* не полный список голосов вендора — остальные достижимы сырым `voice_id`.
|
|
103
|
-
*/
|
|
64
|
+
/** Uploads an image; returns its reference for later runs. */
|
|
104
65
|
uploadImage(bytes: Uint8Array<ArrayBuffer>, mediaType: UploadMediaType): Promise<UploadResponse>;
|
|
66
|
+
/** Curated voice catalog for `voice`/`voice_id`; other voices stay reachable by raw `voice_id`. */
|
|
105
67
|
listVoices(filters?: VoicesQuery): Promise<VoiceCatalogEntry[]>;
|
|
106
|
-
/**
|
|
68
|
+
/** Account state via `GET /v1/account`. Free. */
|
|
107
69
|
getAccount(): Promise<Account>;
|
|
108
70
|
listActors(): Promise<ActorCatalogEntry[]>;
|
|
109
71
|
getActorDefaults(id: string): Promise<ActorDefaults>;
|
|
110
72
|
setActorDefaults(id: string, input: ActorDefaultsInput): Promise<ActorDefaults>;
|
|
111
|
-
/**
|
|
73
|
+
/** `create_actor` estimate; spends no credits. */
|
|
112
74
|
quoteActor(input: CreateActorInputArgs): Promise<CreateActorQuote>;
|
|
113
|
-
/**
|
|
114
|
-
/**
|
|
75
|
+
/** Starts `create_actor`; returns the run at once (state=queued), like `startUgc`. */
|
|
76
|
+
/** The key uses its own schema: the `make_ugc` one would strip actor fields. */
|
|
115
77
|
createActor(input: CreateActorInputArgs, opts?: StartUgcOptions): Promise<Run>;
|
|
116
|
-
/**
|
|
78
|
+
/** Deletes a personal actor. The answer is 204 with no body. */
|
|
117
79
|
deleteActor(id: string): Promise<void>;
|
|
118
|
-
/**
|
|
119
|
-
|
|
120
|
-
* добавить стадию, которой не знает установленный SDK (docs/12:198). Поэтому
|
|
121
|
-
* `safeParse` с деградацией к сырому телу вместо строгого `run.parse` — иначе
|
|
122
|
-
* неизвестная стадия уронила бы `getRun` у каждого уже установленного MCP.
|
|
123
|
-
* Тип возврата — `RunRead` (`state: string`), а НЕ узкий `Run` (условие
|
|
124
|
-
* Architect №3): иначе `isTerminal(state)` не типчекнулся бы и потребители
|
|
125
|
-
* приняли бы `state` за закрытый enum.
|
|
126
|
-
*/
|
|
80
|
+
/** Reads a run tolerantly (`state: string`): a newer server stage must not */
|
|
81
|
+
/** break installed clients, so parsing falls back to the raw body. */
|
|
127
82
|
getRun(runId: string): Promise<RunRead>;
|
|
128
|
-
/**
|
|
129
|
-
/**
|
|
83
|
+
/** Start plus polling to a terminal state. `maxWaitMs` is one deadline that */
|
|
84
|
+
/** aborts both the pause and the request itself. */
|
|
130
85
|
makeUgc(input: MakeUgcInputArgs, opts?: MakeUgcOptions, onProgress?: (run: RunRead) => void): Promise<RunRead>;
|
|
131
86
|
}
|
|
132
87
|
export { resolveClientId } from "./client-id.js";
|
package/dist/index.js
CHANGED
|
@@ -1,43 +1,18 @@
|
|
|
1
1
|
import { account as accountSchema, ACTORS_PATH, actorDefaults, actorDefaultsPath, actorItemPath, actorsResponse, CREATE_ACTOR_QUOTE_PATH, CREATE_ACTOR_RUN_PATH, createActorQuote, agentFailureReport, isRetryableFailure, parseApiFailure, PUBLIC_API_BASE_URL, retryDelayMs, run as runSchema, runRead as runReadSchema, isTerminal, FAILED_STATE, quoteResponse, RETRY_AFTER_HEADER, UPLOADS_PATH, uploadResponse, voicesResponse, } from "@clipwright/core";
|
|
2
2
|
import { actorIdempotencyKeyFor, idempotencyKeyFor } from "@clipwright/core/idempotency";
|
|
3
3
|
import { resolveClientId } from "./client-id.js";
|
|
4
|
-
/**
|
|
5
|
-
* Прод-API по умолчанию: SDK «просто работает» без явного baseUrl.
|
|
6
|
-
*
|
|
7
|
-
* Значение приезжает из `@clipwright/core` (US-614): тот же адрес печатает
|
|
8
|
-
* лендинг в копируемой команде `curl`, и два литерала разошлись бы так, что
|
|
9
|
-
* заметил бы это посетитель. Разбор — у самой константы.
|
|
10
|
-
*/
|
|
4
|
+
/** Production API by default; shared with core so every surface names one address. */
|
|
11
5
|
const DEFAULT_BASE_URL = PUBLIC_API_BASE_URL;
|
|
12
|
-
/**
|
|
6
|
+
/** Default polling deadline: several times the expected render time. */
|
|
13
7
|
const DEFAULT_MAX_WAIT_MS = 600_000;
|
|
14
|
-
/**
|
|
15
|
-
/**
|
|
8
|
+
/** Default per-request timeout. Node's `fetch` has none, so a silent */
|
|
9
|
+
/** accepted connection would hang forever. */
|
|
16
10
|
const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
*
|
|
20
|
-
* ЧТО БЫВАЕТ БЕЗ УЧЁТА ЭТОГО ПРЕДЕЛА, проверено запуском:
|
|
21
|
-
* `setTimeout(fn, 2_592_000_000)` (тридцать суток) печатает
|
|
22
|
-
* `TimeoutOverflowWarning` и стреляет ЧЕРЕЗ 0 мс. То есть самая длинная пауза
|
|
23
|
-
* превращается в её полное отсутствие, и клиент, которому сервер велел
|
|
24
|
-
* подождать тридцать суток, начинает долбить его без пауз.
|
|
25
|
-
*
|
|
26
|
-
* Живёт этот предел в SDK, а не в `@clipwright/core`, потому что он — свойство
|
|
27
|
-
* платформы, а не контракта: `retryDelayMs` обязан честно возвращать то, что
|
|
28
|
-
* назначил сервер.
|
|
29
|
-
*/
|
|
11
|
+
/** Max delay of ONE `setTimeout` (2^31−1 ms); a larger value fires after 0 ms. */
|
|
12
|
+
/** A platform limit, so it lives here and not in core. */
|
|
30
13
|
const MAX_TIMER_DELAY_MS = 2_147_483_647;
|
|
31
|
-
/**
|
|
32
|
-
|
|
33
|
-
*
|
|
34
|
-
* ОТКАЗ ГРОМКИЙ, А НЕ ТИХАЯ ПОДСТАНОВКА ДЕФОЛТА. `Number(process.env.POLL_MS)`
|
|
35
|
-
* на незаданной переменной даёт `NaN`, и молчаливая замена его пятью секундами
|
|
36
|
-
* скрыла бы от вызывателя, что его настройка не применилась. Здесь он узнаёт об
|
|
37
|
-
* этом на первой же строке, а не по странному поведению поллинга.
|
|
38
|
-
*
|
|
39
|
-
* `undefined` — законный вход: это «не задавал», и тогда берётся дефолт.
|
|
40
|
-
*/
|
|
14
|
+
/** Milliseconds, or a loud rejection: silently defaulting a `NaN` would hide */
|
|
15
|
+
/** a misconfiguration. `undefined` means "not set" and takes the fallback. */
|
|
41
16
|
function positiveMs(value, fallback, name) {
|
|
42
17
|
if (value === undefined)
|
|
43
18
|
return fallback;
|
|
@@ -46,32 +21,15 @@ function positiveMs(value, fallback, name) {
|
|
|
46
21
|
}
|
|
47
22
|
return value;
|
|
48
23
|
}
|
|
49
|
-
/**
|
|
50
|
-
|
|
51
|
-
*
|
|
52
|
-
* Обе беды приходят из zod и до этого класса были неотличимы снаружи: и
|
|
53
|
-
* `makeUgcInput.parse` на входе, и `run.parse` на ответе бросали `ZodError`.
|
|
54
|
-
* Внешнее ревью (круг 9) показало цену этой неразличимости. CLI печатал любую
|
|
55
|
-
* такую ошибку как «запрос отвергнут ДО отправки» — а на битом ответе `POST
|
|
56
|
-
* /run` это ложь в самую дорогую сторону: запрос ушёл, ран создан и, возможно,
|
|
57
|
-
* уже оплачен, но человеку сказано, что ничего не произошло, и `run_id` он не
|
|
58
|
-
* получил.
|
|
59
|
-
*
|
|
60
|
-
* Поэтому провал разбора ОТВЕТА получает собственный класс и собственный текст,
|
|
61
|
-
* который прямо называет, мог ли вызов иметь последствия.
|
|
62
|
-
*/
|
|
24
|
+
/** An unparseable server response, distinct from rejected input: after */
|
|
25
|
+
/** `POST /run` the run may already exist and be charged. */
|
|
63
26
|
export class ClipwrightResponseError extends Error {
|
|
64
|
-
/**
|
|
27
|
+
/** Path whose response failed to parse. */
|
|
65
28
|
path;
|
|
66
|
-
/**
|
|
29
|
+
/** Whether the request may already have changed state (created a run, spent credits). */
|
|
67
30
|
mayHaveTakenEffect;
|
|
68
|
-
/**
|
|
69
|
-
|
|
70
|
-
* прежнее `delivered` читалось как «не доставлено», хотя `false` означает лишь
|
|
71
|
-
* ОТСУТСТВИЕ ПОДТВЕРЖДЕНИЯ. Отличить «не дошло» от «дошло, а ответ потерян»
|
|
72
|
-
* у HTTP способа нет, и потребитель, прочитавший поле как отрицание, запустил
|
|
73
|
-
* бы `attempt: 2` и оплатил второй рендер.
|
|
74
|
-
*/
|
|
31
|
+
/** `false` means delivery is unconfirmed, not that it failed: HTTP cannot */
|
|
32
|
+
/** tell a lost request from a lost response. */
|
|
75
33
|
deliveryConfirmed;
|
|
76
34
|
constructor(path, mayHaveTakenEffect, cause, deliveryConfirmed = true) {
|
|
77
35
|
super(ClipwrightResponseError.#describe(path, mayHaveTakenEffect, deliveryConfirmed), { cause });
|
|
@@ -80,19 +38,8 @@ export class ClipwrightResponseError extends Error {
|
|
|
80
38
|
this.mayHaveTakenEffect = mayHaveTakenEffect;
|
|
81
39
|
this.deliveryConfirmed = deliveryConfirmed;
|
|
82
40
|
}
|
|
83
|
-
/**
|
|
84
|
-
|
|
85
|
-
*
|
|
86
|
-
* Разница между ними — деньги. Сказать «ничего не произошло» там, где ран уже
|
|
87
|
-
* создан, значит подтолкнуть человека к `--retry 2`, то есть ко второму
|
|
88
|
-
* платному рендеру. Сказать «возможно, вы заплатили» на неудачном `quote`
|
|
89
|
-
* значит пугать без причины и обесценить предупреждение там, где оно нужно.
|
|
90
|
-
*
|
|
91
|
-
* НИ ОДИН ИЗ ТРЁХ ТЕКСТОВ НЕ НАЗЫВАЕТ ВИНОВНИКА. Ответ не по контракту с тем
|
|
92
|
-
* же успехом мог прислать шлюз или CDN, а не наш сервер; ровно за эту
|
|
93
|
-
* бездоказательную атрибуцию внешнее ревью сняло две прежние формулировки
|
|
94
|
-
* (круги 13 и 14), и здесь она повторена не будет.
|
|
95
|
-
*/
|
|
41
|
+
/** Three messages because the money differs; none blames the server, since a */
|
|
42
|
+
/** gateway or CDN may have sent the off-contract response. */
|
|
96
43
|
static #describe(path, mayHaveTakenEffect, deliveryConfirmed) {
|
|
97
44
|
if (!mayHaveTakenEffect) {
|
|
98
45
|
return deliveryConfirmed
|
|
@@ -116,58 +63,25 @@ function parseResponse(schema, body, path, mayHaveTakenEffect) {
|
|
|
116
63
|
throw new ClipwrightResponseError(path, mayHaveTakenEffect, cause);
|
|
117
64
|
}
|
|
118
65
|
}
|
|
119
|
-
/**
|
|
120
|
-
|
|
121
|
-
*
|
|
122
|
-
* ЗДЕСЬ ПРОХОДИТ ДЕНЕЖНАЯ ГРАНИЦА, и молчаливого прохода на ней быть не должно.
|
|
123
|
-
* Суффикс участвует в ключе, а РАЗНЫЙ ключ — это РАЗНЫЙ платный рендер. Пока
|
|
124
|
-
* проверки не было, `?? 1` ловил только `null`/`undefined`, и `NaN` доезжал
|
|
125
|
-
* до ключа как строка `:NaN`: ключ отличался от `:1`, сервер видел новый
|
|
126
|
-
* запрос и запускал вторую платную генерацию. Внешнее ревью (круг 5) нашло
|
|
127
|
-
* живой путь до этого входа — `clipwright make --retry banana`, где
|
|
128
|
-
* `parseInt("banana")` даёт `NaN`.
|
|
129
|
-
*
|
|
130
|
-
* Отказ громкий, потому что тихий здесь стоит денег: пользователь, опечатавшийся
|
|
131
|
-
* в номере попытки, получит сообщение, а не счёт.
|
|
132
|
-
*/
|
|
66
|
+
/** Attempt number → idempotency key suffix. A different key is a different paid */
|
|
67
|
+
/** render, so garbage such as `NaN` is rejected instead of passed through. */
|
|
133
68
|
function attemptSuffix(attempt) {
|
|
134
69
|
if (attempt === undefined)
|
|
135
70
|
return 1;
|
|
136
|
-
// `isSafeInteger
|
|
137
|
-
//
|
|
138
|
-
// становится `…992` (проверено запуском). Два РАЗНЫХ номера попытки дали бы
|
|
139
|
-
// один суффикс, то есть один ключ, — и запрошенный новый платный рендер молча
|
|
140
|
-
// вернул бы прежний ран.
|
|
71
|
+
// `isSafeInteger`: beyond the safe range distinct numbers collapse into one,
|
|
72
|
+
// and a requested new render would silently return the old run.
|
|
141
73
|
if (!Number.isSafeInteger(attempt) || attempt < 1) {
|
|
142
74
|
throw new TypeError(`attempt must be a positive integer (1, 2, 3, …), got ${String(attempt)}. ` +
|
|
143
75
|
"It selects which paid run to deduplicate against, so a wrong value can start a second render.");
|
|
144
76
|
}
|
|
145
77
|
return attempt;
|
|
146
78
|
}
|
|
147
|
-
/**
|
|
148
|
-
|
|
149
|
-
*
|
|
150
|
-
* ПОЧЕМУ НЕ ПРОСТО ОБРЕЗАТЬ. Первая редакция ограничивала сон потолком выше и
|
|
151
|
-
* объясняла это тем, что цикл всё равно перепроверит условия. Внешнее ревью
|
|
152
|
-
* (круг 2) показало, что объяснение неверно: сразу после сна цикл делает
|
|
153
|
-
* `getRun()`, поэтому обрезка — это не «более ранняя перепроверка», а более
|
|
154
|
-
* ранний ЗАПРОС. На паузе в тридцать суток второй запрос уходил бы через 24.86
|
|
155
|
-
* суток — на пять суток раньше разрешённого сервером времени, то есть ровно то
|
|
156
|
-
* нарушение, ради недопущения которого пауза и соблюдается.
|
|
157
|
-
*
|
|
158
|
-
* Цепочка сохраняет и предел платформы, и назначенную длительность.
|
|
159
|
-
*/
|
|
79
|
+
/** Sleep of any length as a CHAIN of timers: clamping would send the next */
|
|
80
|
+
/** request earlier than the server allowed. */
|
|
160
81
|
function sleep(ms) {
|
|
161
82
|
return new Promise((resolve) => {
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
// Node трактует как одну миллисекунду, и цикл планирует таймеры до
|
|
165
|
-
// скончания века: промис не завершается, дедлайн больше не проверяется, а
|
|
166
|
-
// таймер держит процесс Node живым — `clipwright make` не вернул бы
|
|
167
|
-
// управление вовсе. Сюда `NaN` попадает из `pollIntervalMs`, вычисленного
|
|
168
|
-
// вызывателем (`Number(process.env.…)`); конструктор такой ввод теперь
|
|
169
|
-
// отвергает, но защита стоит и здесь: у цикла с таймерами цена ошибки —
|
|
170
|
-
// зависший процесс, а не неверное число.
|
|
83
|
+
// A non-number must end the sleep: with `NaN` the loop would schedule
|
|
84
|
+
// timers forever and keep the process alive.
|
|
171
85
|
let left = Number.isFinite(ms) ? Math.max(ms, 0) : 0;
|
|
172
86
|
const tick = () => {
|
|
173
87
|
if (left <= 0) {
|
|
@@ -181,48 +95,32 @@ function sleep(ms) {
|
|
|
181
95
|
tick();
|
|
182
96
|
});
|
|
183
97
|
}
|
|
184
|
-
/**
|
|
185
|
-
|
|
186
|
-
*
|
|
187
|
-
* ЧТО БЫЛО ДО. `#request` сводил любой не-2xx к `new Error(message)`: статус,
|
|
188
|
-
* код и назначенная сервером пауза терялись на границе SDK. Вызыватель мог
|
|
189
|
-
* только напечатать текст — отличить «подожди две секунды» от «пополни счёт»
|
|
190
|
-
* было нечем, и поллинг умирал на первом же 429.
|
|
191
|
-
*
|
|
192
|
-
* ЧЕГО ЗДЕСЬ НАМЕРЕННО НЕТ — СВОЕЙ ФОРМЫ ОТКАЗА. Класс не объявляет ни кодов,
|
|
193
|
-
* ни полей с числами: всё это лежит в `ApiFailure` из `@clipwright/core`, и
|
|
194
|
-
* `code`/`report()` выводятся оттуда же (правило проекта №2). Объяви SDK свою
|
|
195
|
-
* копию — и MCP с CLI получили бы вторую, а «повторять или нет» стало бы
|
|
196
|
-
* вопросом, на который три поверхности отвечают порознь.
|
|
197
|
-
*/
|
|
98
|
+
/** An API refusal with status, code and server-set pause intact. The shape */
|
|
99
|
+
/** comes from core, so SDK, CLI and MCP answer "retry or not" identically. */
|
|
198
100
|
export class ClipwrightApiError extends Error {
|
|
199
|
-
/**
|
|
101
|
+
/** Parsed refusal: kind, numbers, pause. Shape comes from core. */
|
|
200
102
|
failure;
|
|
201
103
|
status;
|
|
202
|
-
/**
|
|
104
|
+
/** Refusal code; `http_<status>` for foreign bodies without one. */
|
|
203
105
|
code;
|
|
204
|
-
/**
|
|
106
|
+
/** Server-set pause in seconds; `undefined` if the server named none. */
|
|
205
107
|
retryAfterSeconds;
|
|
206
108
|
constructor(failure) {
|
|
207
109
|
super(failure.message);
|
|
208
110
|
this.name = "ClipwrightApiError";
|
|
209
111
|
this.failure = failure;
|
|
210
112
|
this.status = failure.status;
|
|
211
|
-
//
|
|
212
|
-
//
|
|
213
|
-
// говорили бы об одном отказе разными словами. Плюс следствие, которое
|
|
214
|
-
// поймал сканер источников: перечисляя виды отказа тут (`failure.kind ===
|
|
215
|
-
// …`), эта поверхность заводила бы у себя копию их названий — то есть
|
|
216
|
-
// ровно тот второй источник, который правило проекта №2 запрещает.
|
|
113
|
+
// Code and pause come from the shared report, so CLI and MCP name one
|
|
114
|
+
// refusal with the same words.
|
|
217
115
|
const report = agentFailureReport(failure);
|
|
218
116
|
this.code = report.code;
|
|
219
117
|
this.retryAfterSeconds = report.retry_after_seconds;
|
|
220
118
|
}
|
|
221
|
-
/**
|
|
119
|
+
/** Whether repeating the same call makes sense. Core decides, not this surface. */
|
|
222
120
|
get retryable() {
|
|
223
121
|
return isRetryableFailure(this.failure);
|
|
224
122
|
}
|
|
225
|
-
/**
|
|
123
|
+
/** The refusal expanded for an agent: numbers, instruction, retry flag. */
|
|
226
124
|
report() {
|
|
227
125
|
return agentFailureReport(this.failure);
|
|
228
126
|
}
|
|
@@ -232,13 +130,8 @@ export class ClipwrightClient {
|
|
|
232
130
|
#baseUrl;
|
|
233
131
|
#pollIntervalMs;
|
|
234
132
|
#requestTimeoutMs;
|
|
235
|
-
/**
|
|
236
|
-
|
|
237
|
-
* кэшируется здесь. Конструктор её НЕ трогает: MCP-сервер строит клиент НА
|
|
238
|
-
* ИМПОРТЕ модуля, ДО `server.connect`; если бы резолвер (пишущий в ~/.clipwright)
|
|
239
|
-
* падал в конструкторе на read-only HOME, он убил бы ВЕСЬ MCP, включая
|
|
240
|
-
* `quote_ugc`, которому clientId вообще не нужен.
|
|
241
|
-
*/
|
|
133
|
+
/** Resolved lazily on first run start: the MCP server builds the client at */
|
|
134
|
+
/** import, and a read-only HOME must not break tools that never need it. */
|
|
242
135
|
#clientId;
|
|
243
136
|
constructor(opts) {
|
|
244
137
|
this.#apiKey = opts.apiKey;
|
|
@@ -246,40 +139,23 @@ export class ClipwrightClient {
|
|
|
246
139
|
this.#pollIntervalMs = positiveMs(opts.pollIntervalMs, 5_000, "pollIntervalMs");
|
|
247
140
|
this.#requestTimeoutMs = positiveMs(opts.requestTimeoutMs, DEFAULT_REQUEST_TIMEOUT_MS, "requestTimeoutMs");
|
|
248
141
|
}
|
|
249
|
-
/**
|
|
142
|
+
/** Lazy resolve and cache of the install identity (see `#clientId`). */
|
|
250
143
|
#getClientId() {
|
|
251
144
|
if (this.#clientId === undefined) {
|
|
252
145
|
this.#clientId = resolveClientId();
|
|
253
146
|
}
|
|
254
147
|
return this.#clientId;
|
|
255
148
|
}
|
|
256
|
-
/**
|
|
257
|
-
|
|
258
|
-
*
|
|
259
|
-
* ТЕЛО ЧИТАЕТСЯ ТЕКСТОМ, А НЕ `res.json()`, и это не стилистика (US-622).
|
|
260
|
-
* `res.json()` на не-JSON бросает `SyntaxError` ДО того, как мы посмотрели на
|
|
261
|
-
* статус, — и вызыватель видит «Unexpected token <» вместо «слишком часто».
|
|
262
|
-
* Отдать HTML-страницу вместо нашего тела может любой прокси между клиентом и
|
|
263
|
-
* API: edge тарифа, корпоративный шлюз, страница обслуживания. Разбор текста
|
|
264
|
-
* в `parseApiFailure` эту ветку закрывает, потому что решение принимается по
|
|
265
|
-
* статусу, а тело лишь уточняет причину.
|
|
266
|
-
*/
|
|
149
|
+
/** One API request. The body is read as text, not `res.json()`: a proxy may */
|
|
150
|
+
/** return HTML, and the status must decide before the body is parsed. */
|
|
267
151
|
async #request(path,
|
|
268
|
-
/**
|
|
269
|
-
* Мог ли ЭТОТ вызов что-то изменить на сервере. Знает это только вызыватель,
|
|
270
|
-
* и знание обязано дойти сюда: провал разбора успешного ответа на `POST
|
|
271
|
-
* /run` и на `GET /voices` — разные новости, и молчать о разнице дороже
|
|
272
|
-
* всего именно там, где ран уже мог быть создан и оплачен.
|
|
273
|
-
*/
|
|
152
|
+
/** Whether THIS call could change server state; only the caller knows. */
|
|
274
153
|
mayHaveTakenEffect, init) {
|
|
275
|
-
//
|
|
276
|
-
//
|
|
277
|
-
// предупреждения про деньги — то есть ровно там, где ран уже создан, клиент
|
|
278
|
-
// молчал о последствиях. Сюда же отнесён и провал самого `fetch`: доставку
|
|
279
|
-
// он не опровергает, и на платном пути честнее сказать «неизвестно».
|
|
154
|
+
// Anything failing after send is reported alike: a failed `fetch` does not
|
|
155
|
+
// disprove delivery, so a paid path says "unknown".
|
|
280
156
|
let res;
|
|
281
|
-
//
|
|
282
|
-
//
|
|
157
|
+
// Cancellation reaches the network: a per-request timeout plus the caller's
|
|
158
|
+
// signal, pulled out of `init` so it cannot bypass the timeout.
|
|
283
159
|
const { signal: callerSignal, ...rest } = init ?? {};
|
|
284
160
|
const timeout = AbortSignal.timeout(this.#requestTimeoutMs);
|
|
285
161
|
const signal = callerSignal ? AbortSignal.any([callerSignal, timeout]) : timeout;
|
|
@@ -295,27 +171,24 @@ export class ClipwrightClient {
|
|
|
295
171
|
});
|
|
296
172
|
}
|
|
297
173
|
catch (cause) {
|
|
298
|
-
//
|
|
299
|
-
//
|
|
174
|
+
// On free paths the network error stays itself: its own message (DNS,
|
|
175
|
+
// refused connection) is more useful than our wrapper.
|
|
300
176
|
if (!mayHaveTakenEffect)
|
|
301
177
|
throw cause;
|
|
302
178
|
throw new ClipwrightResponseError(path, true, cause, false);
|
|
303
179
|
}
|
|
304
|
-
//
|
|
180
|
+
// Headers are read before the body, which may never finish arriving.
|
|
305
181
|
const retryAfterHeader = res.headers.get(RETRY_AFTER_HEADER);
|
|
306
182
|
let bodyText;
|
|
307
183
|
try {
|
|
308
184
|
bodyText = await res.text();
|
|
309
185
|
}
|
|
310
186
|
catch (cause) {
|
|
311
|
-
//
|
|
312
|
-
//
|
|
313
|
-
// контракта — и 429 на поллинге переставал быть ретрайным: `makeUgc`
|
|
314
|
-
// бросал уже оплаченный ран вместо того, чтобы выждать паузу. Статус и
|
|
315
|
-
// заголовки к этому моменту получены целиком, их и достаточно.
|
|
187
|
+
// A broken body read must not erase a known status: a 429 while polling
|
|
188
|
+
// stays retryable instead of abandoning a paid run.
|
|
316
189
|
if (!res.ok) {
|
|
317
190
|
throw new ClipwrightApiError(
|
|
318
|
-
// `undefined`,
|
|
191
|
+
// `undefined`, not an empty string: the body is unavailable, not empty.
|
|
319
192
|
parseApiFailure({ status: res.status, bodyText: undefined, retryAfterHeader }));
|
|
320
193
|
}
|
|
321
194
|
throw new ClipwrightResponseError(path, mayHaveTakenEffect, cause);
|
|
@@ -327,25 +200,20 @@ export class ClipwrightClient {
|
|
|
327
200
|
retryAfterHeader,
|
|
328
201
|
}));
|
|
329
202
|
}
|
|
330
|
-
// 204
|
|
331
|
-
//
|
|
203
|
+
// 204 means "no body" (actor deletion answers so); parsing the empty string
|
|
204
|
+
// would report a contract violation that never happened.
|
|
332
205
|
if (res.status === 204)
|
|
333
206
|
return undefined;
|
|
334
207
|
try {
|
|
335
208
|
return JSON.parse(bodyText);
|
|
336
209
|
}
|
|
337
210
|
catch (cause) {
|
|
338
|
-
//
|
|
339
|
-
//
|
|
340
|
-
// предупреждения «ран мог быть создан и оплачен»: сервер, ответивший на
|
|
341
|
-
// `POST /run` пустым телом или HTML, оставлял человека в уверенности, что
|
|
342
|
-
// ничего не произошло, — и следующий шаг `--retry 2` оплачивал второй
|
|
343
|
-
// рендер. Тело не-JSON и тело не по схеме — одна и та же беда, «ответ не
|
|
344
|
-
// соответствует контракту», и говорить о ней надо одинаково.
|
|
211
|
+
// Same class as a schema failure: a non-JSON body is also an off-contract
|
|
212
|
+
// response and must carry the "may have been charged" warning.
|
|
345
213
|
throw new ClipwrightResponseError(path, mayHaveTakenEffect, cause);
|
|
346
214
|
}
|
|
347
215
|
}
|
|
348
|
-
/**
|
|
216
|
+
/** Cost estimate; spends no credits. */
|
|
349
217
|
async quoteUgc(input) {
|
|
350
218
|
const body = await this.#request("/v1/skills/make_ugc/quote", false, {
|
|
351
219
|
method: "POST",
|
|
@@ -353,35 +221,24 @@ export class ClipwrightClient {
|
|
|
353
221
|
});
|
|
354
222
|
return parseResponse(quoteResponse, body, "/v1/skills/make_ugc/quote", false);
|
|
355
223
|
}
|
|
356
|
-
/**
|
|
357
|
-
|
|
358
|
-
*
|
|
359
|
-
* Ключ идемпотентности формируется ЗДЕСЬ, а не на вызывающей поверхности:
|
|
360
|
-
* суффикс `:N` (по `attempt`, дефолт 1) пишется ВСЕГДА, иначе MCP дал бы
|
|
361
|
-
* `<hash>`, а CLI `<hash>:1` — межповерхностный шов, в котором дедуп ломается.
|
|
362
|
-
*/
|
|
224
|
+
/** Starts a render and returns the run at once (state=queued). The key is built */
|
|
225
|
+
/** here with an always-present `:N` suffix, so MCP and CLI dedupe alike. */
|
|
363
226
|
async startUgc(input, opts) {
|
|
364
227
|
return this.#startUgc(input, opts);
|
|
365
228
|
}
|
|
366
|
-
/** `signal`
|
|
229
|
+
/** `signal` is internal only: the `makeUgc` deadline also aborts the start. */
|
|
367
230
|
async #startUgc(input, opts, signal) {
|
|
368
231
|
const key = opts?.idempotencyKey ?? `${idempotencyKeyFor(input, this.#getClientId())}:${attemptSuffix(opts?.attempt)}`;
|
|
369
|
-
// `true`:
|
|
232
|
+
// `true`: once sent, the run may have been created and charged.
|
|
370
233
|
const body = await this.#request("/v1/skills/make_ugc/run", true, {
|
|
371
234
|
method: "POST",
|
|
372
235
|
body: JSON.stringify(input),
|
|
373
236
|
headers: { "Idempotency-Key": key },
|
|
374
237
|
signal: signal ?? null,
|
|
375
238
|
});
|
|
376
|
-
// `hasSideEffect: true` — запрос уже ушёл и ран мог быть создан и оплачен.
|
|
377
239
|
return parseResponse(runSchema, body, "/v1/skills/make_ugc/run", true);
|
|
378
240
|
}
|
|
379
|
-
/**
|
|
380
|
-
* Курируемый каталог голосов для `voice`/`voice_id` (US-516). Отдаёт то же,
|
|
381
|
-
* что и `/v1/voices` — статический список из @clipwright/core, БЕЗ вендорских
|
|
382
|
-
* id (они не покидают адаптер воркера). Каталог курируемый по дизайну: это
|
|
383
|
-
* не полный список голосов вендора — остальные достижимы сырым `voice_id`.
|
|
384
|
-
*/
|
|
241
|
+
/** Uploads an image; returns its reference for later runs. */
|
|
385
242
|
async uploadImage(bytes, mediaType) {
|
|
386
243
|
const body = await this.#request(UPLOADS_PATH, true, {
|
|
387
244
|
method: "POST",
|
|
@@ -390,15 +247,16 @@ export class ClipwrightClient {
|
|
|
390
247
|
});
|
|
391
248
|
return parseResponse(uploadResponse, body, UPLOADS_PATH, true);
|
|
392
249
|
}
|
|
250
|
+
/** Curated voice catalog for `voice`/`voice_id`; other voices stay reachable by raw `voice_id`. */
|
|
393
251
|
async listVoices(filters = {}) {
|
|
394
|
-
//
|
|
252
|
+
// Keys pass as is: the server rejects an unknown one (`unknown_field`); the client does not strip it.
|
|
395
253
|
const query = new URLSearchParams(Object.entries(filters).flatMap(([key, value]) => (value === undefined ? [] : [[key, String(value)]]))).toString();
|
|
396
254
|
const body = await this.#request(query === "" ? "/v1/voices" : `/v1/voices?${query}`, false);
|
|
397
|
-
//
|
|
398
|
-
//
|
|
255
|
+
// Parsed with the server's own schema, so a malformed body fails here and
|
|
256
|
+
// not later in the caller.
|
|
399
257
|
return parseResponse(voicesResponse, body, "/v1/voices", false).voices;
|
|
400
258
|
}
|
|
401
|
-
/**
|
|
259
|
+
/** Account state via `GET /v1/account`. Free. */
|
|
402
260
|
async getAccount() {
|
|
403
261
|
const body = await this.#request("/v1/account", false);
|
|
404
262
|
return parseResponse(accountSchema, body, "/v1/account", false);
|
|
@@ -416,7 +274,7 @@ export class ClipwrightClient {
|
|
|
416
274
|
const body = await this.#request(path, false, { method: "POST", body: JSON.stringify(input) });
|
|
417
275
|
return parseResponse(actorDefaults, body, path, false);
|
|
418
276
|
}
|
|
419
|
-
/**
|
|
277
|
+
/** `create_actor` estimate; spends no credits. */
|
|
420
278
|
async quoteActor(input) {
|
|
421
279
|
const body = await this.#request(CREATE_ACTOR_QUOTE_PATH, false, {
|
|
422
280
|
method: "POST",
|
|
@@ -424,12 +282,12 @@ export class ClipwrightClient {
|
|
|
424
282
|
});
|
|
425
283
|
return parseResponse(createActorQuote, body, CREATE_ACTOR_QUOTE_PATH, false);
|
|
426
284
|
}
|
|
427
|
-
/**
|
|
428
|
-
/**
|
|
285
|
+
/** Starts `create_actor`; returns the run at once (state=queued), like `startUgc`. */
|
|
286
|
+
/** The key uses its own schema: the `make_ugc` one would strip actor fields. */
|
|
429
287
|
async createActor(input, opts) {
|
|
430
288
|
const key = opts?.idempotencyKey ??
|
|
431
289
|
`${actorIdempotencyKeyFor(input, this.#getClientId())}:${attemptSuffix(opts?.attempt)}`;
|
|
432
|
-
// `true`:
|
|
290
|
+
// `true`: once sent, the run may have been created and charged.
|
|
433
291
|
const body = await this.#request(CREATE_ACTOR_RUN_PATH, true, {
|
|
434
292
|
method: "POST",
|
|
435
293
|
body: JSON.stringify(input),
|
|
@@ -437,60 +295,47 @@ export class ClipwrightClient {
|
|
|
437
295
|
});
|
|
438
296
|
return parseResponse(runSchema, body, CREATE_ACTOR_RUN_PATH, true);
|
|
439
297
|
}
|
|
440
|
-
/**
|
|
298
|
+
/** Deletes a personal actor. The answer is 204 with no body. */
|
|
441
299
|
async deleteActor(id) {
|
|
442
300
|
await this.#request(actorItemPath(id), true, { method: "DELETE" });
|
|
443
301
|
}
|
|
444
|
-
/**
|
|
445
|
-
|
|
446
|
-
* добавить стадию, которой не знает установленный SDK (docs/12:198). Поэтому
|
|
447
|
-
* `safeParse` с деградацией к сырому телу вместо строгого `run.parse` — иначе
|
|
448
|
-
* неизвестная стадия уронила бы `getRun` у каждого уже установленного MCP.
|
|
449
|
-
* Тип возврата — `RunRead` (`state: string`), а НЕ узкий `Run` (условие
|
|
450
|
-
* Architect №3): иначе `isTerminal(state)` не типчекнулся бы и потребители
|
|
451
|
-
* приняли бы `state` за закрытый enum.
|
|
452
|
-
*/
|
|
302
|
+
/** Reads a run tolerantly (`state: string`): a newer server stage must not */
|
|
303
|
+
/** break installed clients, so parsing falls back to the raw body. */
|
|
453
304
|
async getRun(runId) {
|
|
454
305
|
return this.#getRun(runId);
|
|
455
306
|
}
|
|
456
|
-
/** `signal`
|
|
307
|
+
/** `signal` is internal only: the `makeUgc` deadline also aborts the poll. */
|
|
457
308
|
async #getRun(runId, signal) {
|
|
458
309
|
const body = await this.#request(`/v1/runs/${runId}`, false, { signal: signal ?? null });
|
|
459
310
|
const parsed = runReadSchema.safeParse(body);
|
|
460
311
|
return parsed.success ? parsed.data : body;
|
|
461
312
|
}
|
|
462
|
-
/**
|
|
463
|
-
/**
|
|
313
|
+
/** Start plus polling to a terminal state. `maxWaitMs` is one deadline that */
|
|
314
|
+
/** aborts both the pause and the request itself. */
|
|
464
315
|
async makeUgc(input, opts, onProgress) {
|
|
465
316
|
const maxWaitMs = positiveMs(opts?.maxWaitMs, DEFAULT_MAX_WAIT_MS, "maxWaitMs");
|
|
466
317
|
const deadline = Date.now() + maxWaitMs;
|
|
467
|
-
//
|
|
318
|
+
// The deadline as an abort signal, capped like `sleep`.
|
|
468
319
|
const callDeadline = AbortSignal.timeout(Math.min(maxWaitMs, MAX_TIMER_DELAY_MS));
|
|
469
|
-
//
|
|
470
|
-
//
|
|
320
|
+
// Widened to `RunRead` for the tolerant `getRun`. A start aborted by the
|
|
321
|
+
// deadline propagates as is: the run may have been charged.
|
|
471
322
|
let current = await this.#startUgc(input, { attempt: opts?.attempt }, callDeadline);
|
|
472
|
-
//
|
|
473
|
-
// опрос заменяет её паузой, назначенной сервером (US-622).
|
|
323
|
+
// Pause before the NEXT poll; a refused poll replaces it with the server's.
|
|
474
324
|
let nextDelayMs = this.#pollIntervalMs;
|
|
475
|
-
//
|
|
476
|
-
// упёрся в дедлайн из-за 429, и ран, который просто долго рендерится, — это
|
|
477
|
-
// разные новости, и человеку они нужны разными.
|
|
325
|
+
// Kept only to explain a timeout: throttled and merely slow runs differ.
|
|
478
326
|
let lastRetried;
|
|
479
|
-
/**
|
|
327
|
+
/** One timeout message for both places the deadline fires. */
|
|
480
328
|
const timedOut = () => new Error(`makeUgc timed out after ${maxWaitMs}ms; run ${current.run_id} is still ` +
|
|
481
329
|
`${current.state}. Poll it later with getRun("${current.run_id}").` +
|
|
482
330
|
(lastRetried === undefined
|
|
483
331
|
? ""
|
|
484
332
|
: ` The last status check was refused with HTTP ${lastRetried.status}: ` +
|
|
485
333
|
`${lastRetried.message}`));
|
|
486
|
-
//
|
|
487
|
-
//
|
|
488
|
-
// `maxWaitMs` и даёт чистый таймаут с `run_id`, а не вечный цикл (PM4).
|
|
334
|
+
// Shared `isTerminal`: an unknown server state is polled until `maxWaitMs`
|
|
335
|
+
// and ends in a clean timeout with `run_id`, not an endless loop.
|
|
489
336
|
while (!isTerminal(current.state)) {
|
|
490
|
-
//
|
|
491
|
-
//
|
|
492
|
-
// и цепочка 429 продлевала бы ожидание бесконечно, ровно вопреки тому,
|
|
493
|
-
// ради чего `maxWaitMs` существует (US-207).
|
|
337
|
+
// One deadline per call, never reset by a retry; otherwise a chain of 429s
|
|
338
|
+
// would extend the wait forever.
|
|
494
339
|
const remaining = deadline - Date.now();
|
|
495
340
|
if (remaining <= 0)
|
|
496
341
|
throw timedOut();
|
|
@@ -501,16 +346,11 @@ export class ClipwrightClient {
|
|
|
501
346
|
onProgress?.(current);
|
|
502
347
|
}
|
|
503
348
|
catch (error) {
|
|
504
|
-
//
|
|
505
|
-
// опросами: новость одна, значит и текст один.
|
|
349
|
+
// A deadline that aborts the poll itself is the same timeout.
|
|
506
350
|
if (callDeadline.aborted && !(error instanceof ClipwrightApiError))
|
|
507
351
|
throw timedOut();
|
|
508
|
-
//
|
|
509
|
-
//
|
|
510
|
-
// работу, за которую заплатили. Повторяем — но только то, что повторять
|
|
511
|
-
// ИМЕЕТ СМЫСЛ, и решает это core: 402 и прочие 4xx летят наружу
|
|
512
|
-
// немедленно, потому что повтор даст тот же ответ, а агент тем временем
|
|
513
|
-
// выест лимит частоты вместо того, чтобы сказать человеку правду.
|
|
352
|
+
// A refused poll is not a failed run: retry only what core calls
|
|
353
|
+
// retryable; 402 and other 4xx propagate at once.
|
|
514
354
|
if (!(error instanceof ClipwrightApiError) || !isRetryableFailure(error.failure)) {
|
|
515
355
|
throw error;
|
|
516
356
|
}
|
|
@@ -518,9 +358,8 @@ export class ClipwrightClient {
|
|
|
518
358
|
nextDelayMs = retryDelayMs(error.failure, this.#pollIntervalMs);
|
|
519
359
|
}
|
|
520
360
|
}
|
|
521
|
-
//
|
|
522
|
-
//
|
|
523
|
-
// успех/провал).
|
|
361
|
+
// Outcome by core's named constant, not an array index that reordering
|
|
362
|
+
// could silently invert.
|
|
524
363
|
if (current.state === FAILED_STATE) {
|
|
525
364
|
throw new Error(current.error ?? "run failed");
|
|
526
365
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clipwright/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "TypeScript client for the Clipwright UGC video API",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Dimantika Sp. z o.o.",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"zod": "^4.4.3",
|
|
27
|
-
"@clipwright/core": "0.
|
|
27
|
+
"@clipwright/core": "0.20.0"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "^26.1.1"
|