@clipwright/core 0.34.0 → 0.35.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 (179) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/README.md +3 -1
  3. package/dist/account-actors.d.ts +173 -14
  4. package/dist/account-actors.js +142 -10
  5. package/dist/account-actors.js.map +1 -1
  6. package/dist/actor-bounds.d.ts +4 -0
  7. package/dist/actor-bounds.js +4 -0
  8. package/dist/actor-bounds.js.map +1 -1
  9. package/dist/actors.d.ts +31 -0
  10. package/dist/actors.js +26 -0
  11. package/dist/actors.js.map +1 -1
  12. package/dist/assets.d.ts +17 -1
  13. package/dist/assets.js +19 -2
  14. package/dist/assets.js.map +1 -1
  15. package/dist/billing-terms.d.ts +69 -0
  16. package/dist/billing-terms.js +8 -0
  17. package/dist/billing-terms.js.map +1 -1
  18. package/dist/contract-dispositions.d.ts +485 -1
  19. package/dist/contract-dispositions.js +27 -3
  20. package/dist/contract-dispositions.js.map +1 -1
  21. package/dist/contracts/v1/workflow-brief.d.ts +1420 -0
  22. package/dist/contracts/v1/workflow-brief.js +4 -0
  23. package/dist/contracts/v1/workflow-brief.js.map +1 -1
  24. package/dist/contracts/v1/workflow-catalog.d.ts +2141 -105
  25. package/dist/contracts/v1/workflow-catalog.js +4 -2
  26. package/dist/contracts/v1/workflow-catalog.js.map +1 -1
  27. package/dist/contracts/v1/workflow-client.d.ts +1631 -3
  28. package/dist/contracts/v1/workflow-client.js +6 -3
  29. package/dist/contracts/v1/workflow-client.js.map +1 -1
  30. package/dist/contracts/v1/workflow-execution.d.ts +161 -9
  31. package/dist/contracts/v1/workflow-execution.js +15 -7
  32. package/dist/contracts/v1/workflow-execution.js.map +1 -1
  33. package/dist/contracts/v1/workflow-plan.d.ts +3167 -142
  34. package/dist/contracts/v1/workflow-primitives.d.ts +3 -1
  35. package/dist/contracts/v1/workflow-primitives.js +1 -1
  36. package/dist/contracts/v1/workflow-primitives.js.map +1 -1
  37. package/dist/contracts/v1/workflow-run-read.d.ts +114 -1
  38. package/dist/edit-billing.d.ts +12 -0
  39. package/dist/edit-billing.js +8 -0
  40. package/dist/edit-billing.js.map +1 -1
  41. package/dist/edit-long-form.d.ts +1 -1
  42. package/dist/edit-long-form.js +12 -2
  43. package/dist/edit-long-form.js.map +1 -1
  44. package/dist/endpoint-notes.d.ts +3 -0
  45. package/dist/endpoint-notes.js +66 -0
  46. package/dist/endpoint-notes.js.map +1 -0
  47. package/dist/endpoints.d.ts +4 -0
  48. package/dist/endpoints.js +13 -0
  49. package/dist/endpoints.js.map +1 -1
  50. package/dist/errors.d.ts +1 -1
  51. package/dist/errors.js +6 -0
  52. package/dist/errors.js.map +1 -1
  53. package/dist/face-billing.d.ts +55 -0
  54. package/dist/face-billing.js +22 -0
  55. package/dist/face-billing.js.map +1 -1
  56. package/dist/faceless-price.d.ts +26 -2
  57. package/dist/faceless-price.js +33 -6
  58. package/dist/faceless-price.js.map +1 -1
  59. package/dist/faceless-public.d.ts +6 -1
  60. package/dist/faceless-public.js +2 -2
  61. package/dist/faceless-public.js.map +1 -1
  62. package/dist/generations.js +15 -16
  63. package/dist/generations.js.map +1 -1
  64. package/dist/idempotency.d.ts +2 -0
  65. package/dist/idempotency.js +7 -4
  66. package/dist/idempotency.js.map +1 -1
  67. package/dist/index.d.ts +11 -0
  68. package/dist/index.js +13 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/long-form-pricing.d.ts +7 -4
  71. package/dist/long-form-pricing.js +13 -10
  72. package/dist/long-form-pricing.js.map +1 -1
  73. package/dist/long-form-revision.js +1 -1
  74. package/dist/long-form-revision.js.map +1 -1
  75. package/dist/openapi.d.ts +154 -0
  76. package/dist/openapi.js +334 -0
  77. package/dist/openapi.js.map +1 -0
  78. package/dist/pacing.d.ts +15 -0
  79. package/dist/pacing.js +30 -0
  80. package/dist/pacing.js.map +1 -1
  81. package/dist/parts-pricing.d.ts +84 -0
  82. package/dist/parts-pricing.js +105 -0
  83. package/dist/parts-pricing.js.map +1 -0
  84. package/dist/presenter-beats.d.ts +45 -0
  85. package/dist/presenter-beats.js +144 -0
  86. package/dist/presenter-beats.js.map +1 -0
  87. package/dist/prices.d.ts +98 -0
  88. package/dist/prices.js +189 -0
  89. package/dist/prices.js.map +1 -0
  90. package/dist/public-responses.d.ts +23 -0
  91. package/dist/public-responses.js +11 -0
  92. package/dist/public-responses.js.map +1 -0
  93. package/dist/reference-analysis.d.ts +683 -0
  94. package/dist/reference-analysis.js +91 -0
  95. package/dist/reference-analysis.js.map +1 -0
  96. package/dist/reference-kinds.d.ts +6 -0
  97. package/dist/reference-kinds.js +8 -0
  98. package/dist/reference-kinds.js.map +1 -0
  99. package/dist/reference-profile.d.ts +633 -0
  100. package/dist/reference-profile.js +151 -0
  101. package/dist/reference-profile.js.map +1 -0
  102. package/dist/reference-staging.d.ts +571 -0
  103. package/dist/reference-staging.js +151 -0
  104. package/dist/reference-staging.js.map +1 -0
  105. package/dist/reference-voice.d.ts +305 -0
  106. package/dist/reference-voice.js +108 -0
  107. package/dist/reference-voice.js.map +1 -0
  108. package/dist/resolved-timeline.d.ts +53 -1
  109. package/dist/resolved-timeline.js +50 -4
  110. package/dist/resolved-timeline.js.map +1 -1
  111. package/dist/run-static-warnings.js +14 -5
  112. package/dist/run-static-warnings.js.map +1 -1
  113. package/dist/runs.d.ts +75 -3
  114. package/dist/runs.js +6 -1
  115. package/dist/runs.js.map +1 -1
  116. package/dist/skills.d.ts +1805 -24
  117. package/dist/skills.js +129 -19
  118. package/dist/skills.js.map +1 -1
  119. package/dist/templates/callout.d.ts +2 -2
  120. package/dist/templates/callout.js +6 -6
  121. package/dist/templates/callout.js.map +1 -1
  122. package/dist/templates/checklist.js +2 -2
  123. package/dist/templates/checklist.js.map +1 -1
  124. package/dist/templates/index.d.ts +14 -7
  125. package/dist/templates/index.js +29 -17
  126. package/dist/templates/index.js.map +1 -1
  127. package/dist/templates/notification.js +2 -2
  128. package/dist/templates/notification.js.map +1 -1
  129. package/dist/templates/phone-call.d.ts +3 -0
  130. package/dist/templates/phone-call.js +14 -7
  131. package/dist/templates/phone-call.js.map +1 -1
  132. package/dist/templates/progress.js +2 -2
  133. package/dist/templates/progress.js.map +1 -1
  134. package/dist/templates/sounds.d.ts +357 -7
  135. package/dist/templates/sounds.js +34 -12
  136. package/dist/templates/sounds.js.map +1 -1
  137. package/dist/ugc-call.d.ts +89 -0
  138. package/dist/ugc-call.js +111 -0
  139. package/dist/ugc-call.js.map +1 -0
  140. package/dist/ugc-framing.d.ts +26 -0
  141. package/dist/ugc-framing.js +64 -0
  142. package/dist/ugc-framing.js.map +1 -0
  143. package/dist/ugc-layers.d.ts +5 -1
  144. package/dist/ugc-layers.js +6 -1
  145. package/dist/ugc-layers.js.map +1 -1
  146. package/dist/vendor-response.d.ts +4 -0
  147. package/dist/vendor-response.js +12 -0
  148. package/dist/vendor-response.js.map +1 -1
  149. package/dist/voice-admission.d.ts +409 -0
  150. package/dist/voice-listing.js +7 -1
  151. package/dist/voice-listing.js.map +1 -1
  152. package/dist/voice-pace.d.ts +34 -0
  153. package/dist/voice-pace.generated.json +72 -0
  154. package/dist/voice-pace.js +34 -0
  155. package/dist/voice-pace.js.map +1 -0
  156. package/dist/voices.d.ts +21 -8
  157. package/dist/voices.js +44 -19
  158. package/dist/voices.js.map +1 -1
  159. package/dist/workflows/catalog.js +2 -1
  160. package/dist/workflows/catalog.js.map +1 -1
  161. package/dist/workflows/index.d.ts +2 -0
  162. package/dist/workflows/index.js +2 -0
  163. package/dist/workflows/index.js.map +1 -1
  164. package/dist/workflows/methods/faceless-explainer.d.ts +377 -10
  165. package/dist/workflows/methods/kinetic-launch.d.ts +377 -10
  166. package/dist/workflows/methods/product-image-story.d.ts +377 -10
  167. package/dist/workflows/methods/reference-remake.d.ts +870 -0
  168. package/dist/workflows/methods/reference-remake.js +26 -0
  169. package/dist/workflows/methods/reference-remake.js.map +1 -0
  170. package/dist/workflows/methods/shared.d.ts +377 -10
  171. package/dist/workflows/methods/ugc-faq-answer.d.ts +377 -10
  172. package/dist/workflows/methods/ugc-product-intro.d.ts +377 -10
  173. package/dist/workflows/methods/website-proof-demo.d.ts +377 -10
  174. package/dist/workflows/reference-remake.d.ts +663 -0
  175. package/dist/workflows/reference-remake.js +598 -0
  176. package/dist/workflows/reference-remake.js.map +1 -0
  177. package/dist/workflows/validate.js +7 -4
  178. package/dist/workflows/validate.js.map +1 -1
  179. package/package.json +8 -2
@@ -0,0 +1,334 @@
1
+ import { createRequire } from "node:module";
2
+ import { z } from "zod";
3
+ import { createActorInput, createActorQuote, personalActorId } from "./account-actors.js";
4
+ import { account } from "./account.js";
5
+ import { actorsResponse } from "./actors.js";
6
+ import { asset, assetId, ASSET_PUT_MEDIA_TYPES, assetBytesQuery, assetList, assetListQuery, createAssetRequest, pendingAsset, updateAssetRequest, } from "./assets.js";
7
+ import { actorDefaults, actorDefaultsInput } from "./broll-policy.js";
8
+ import { offeredUgcInput } from "./contract-dispositions.js";
9
+ import { workflowCatalogResponse, workflowMethodResponse } from "./contracts/v1/workflow-catalog.js";
10
+ import { launchWorkflow, workflowLaunchResponse, workflowQuoteBinding } from "./contracts/v1/workflow-execution.js";
11
+ import { approveWorkflowPlan, createWorkflowPlan, saveWorkflowPlan, workflowPlanRead } from "./contracts/v1/workflow-plan.js";
12
+ import { workflowId, workflowMethodId } from "./contracts/v1/workflow-primitives.js";
13
+ import { workflowRun } from "./contracts/v1/workflow-run-read.js";
14
+ import { candidateQuote, candidateRequest, runCandidates } from "./edit-candidate.js";
15
+ import { runEdit, saveRunEdit } from "./edit-document.js";
16
+ import { revisionQuote, revisionRequest } from "./edit-revision.js";
17
+ import { runShots } from "./edit-shots.js";
18
+ import { ENDPOINT_NOTES } from "./endpoint-notes.js";
19
+ import { API_ERROR_CODES } from "./errors.js";
20
+ import { API_ENDPOINTS, endpointLabel } from "./endpoints.js";
21
+ import { facelessQuoteResponse } from "./faceless-public.js";
22
+ import { generateImageRequest, generateVideoRequest, generationModels, generationQuote } from "./generations.js";
23
+ import { pricesResponse } from "./prices.js";
24
+ import { PUBLIC_API_BASE_URL, PUBLIC_APP_BASE_URL } from "./public-endpoints.js";
25
+ import { healthResponse, publicSkillsResponse } from "./public-responses.js";
26
+ import { analysisQuoteResponse, analyzeReferenceRequest, referenceAnalysis, referenceAnalysisId } from "./reference-analysis.js";
27
+ import { runId } from "./runs.js";
28
+ import { quoteResponse } from "./skills.js";
29
+ import { templateSoundsList } from "./templates/sounds.js";
30
+ import { UPLOAD_MEDIA_TYPES, uploadId, uploadImportRequest, uploadIntentRequest, uploadIntentResponse, uploadItemResponse, uploadList, uploadResponse, } from "./uploads.js";
31
+ import { serverFacelessInput } from "./voice-admission.js";
32
+ import { serverVoicesQuery } from "./voice-listing.js";
33
+ import { voicesResponse } from "./voices.js";
34
+ import { planReferenceRemake } from "./workflows/reference-remake.js";
35
+ const named = (name, schema) => ({ name, schema });
36
+ const TAGS = {
37
+ Service: "The API host itself.",
38
+ Skills: "Quote and start runs. A quote charges nothing; a run holds credits and answers at once.",
39
+ Runs: "One namespace for every run: state, shots, drafts, revisions and shot candidates.",
40
+ Workflows: "Workflow methods and account plans compiled into native runs.",
41
+ Uploads: "Pictures you send for a run, kept for a limited time.",
42
+ Assets: "Pictures and clips kept on the account until you delete them.",
43
+ Actors: "Actors saved on the account and their defaults.",
44
+ Catalogs: "Voices, template sounds, generation models, skills and prices.",
45
+ "Reference analysis": "A reference video read into a profile a remake plan takes.",
46
+ Account: "Balance, debt and holds.",
47
+ };
48
+ /** The shared refusal (`docs/03-api.md` §6): `code` is a registered one, typed refusals add their own fields. */
49
+ export const errorEnvelope = z.object({
50
+ error: z.looseObject({ code: z.enum(API_ERROR_CODES), message: z.string().min(1) }),
51
+ });
52
+ const Run = named("Run", workflowRun);
53
+ // Strict: the API refuses a key outside the offered fields (`unknown_field`) before the schema runs.
54
+ const MakeUgcInput = named("MakeUgcInput", offeredUgcInput.strict());
55
+ const RAW_UPLOAD = { mediaTypes: UPLOAD_MEDIA_TYPES };
56
+ const AssetItem = named("AssetItem", z.union([asset, pendingAsset]));
57
+ const RUN = { id: runId };
58
+ const ACTOR = { id: personalActorId };
59
+ const ASSET = { id: assetId };
60
+ const PLAN = { id: workflowId };
61
+ const openApiDocumentShape = z.looseObject({ openapi: z.string(), info: z.looseObject({}), paths: z.record(z.string(), z.unknown()) });
62
+ /** Keyed by `endpointLabel`; the test proves the keys are exactly the registry's. */
63
+ export const OPENAPI_ROUTES = {
64
+ "POST /v1/skills/make_faceless/quote": { exposure: "public", operationId: "quoteMakeFaceless", tag: "Skills",
65
+ body: named("MakeFacelessInput", serverFacelessInput), responses: { 200: named("FacelessQuote", facelessQuoteResponse) } },
66
+ "POST /v1/skills/make_faceless/run": { exposure: "public", operationId: "runMakeFaceless", tag: "Skills",
67
+ body: named("MakeFacelessInput", serverFacelessInput), responses: { 202: Run, 200: Run } },
68
+ "GET /health": { exposure: "public", operationId: "getHealth", tag: "Service", anonymous: true,
69
+ responses: { 200: named("Health", healthResponse) } },
70
+ "GET /": { exposure: "excluded", reason: "The host root names the human docs for crawlers; it is not an operation a client calls." },
71
+ "GET /robots.txt": { exposure: "excluded", reason: "A plain-text crawler directive for the API host, not part of the client contract." },
72
+ "GET /openapi.json": { exposure: "public", operationId: "getOpenApiDocument", tag: "Service", anonymous: true,
73
+ responses: { 200: named("OpenApiDocument", openApiDocumentShape) } },
74
+ "GET /v1/voices": { exposure: "public", operationId: "listVoices", tag: "Catalogs", query: serverVoicesQuery,
75
+ responses: { 200: named("Voices", voicesResponse) } },
76
+ "GET /v1/template-sounds": { exposure: "public", operationId: "listTemplateSounds", tag: "Catalogs",
77
+ responses: { 200: named("TemplateSounds", templateSoundsList) } },
78
+ "GET /v1/account": { exposure: "public", operationId: "getAccount", tag: "Account", responses: { 200: named("Account", account) } },
79
+ "POST /v1/skills/make_ugc/quote": { exposure: "public", operationId: "quoteMakeUgc", tag: "Skills",
80
+ body: MakeUgcInput, responses: { 200: named("UgcQuote", quoteResponse) } },
81
+ "GET /v1/runs/{id}": { exposure: "public", operationId: "getRun", tag: "Runs", params: RUN, responses: { 200: Run } },
82
+ "GET /v1/runs/{id}/shots": { exposure: "public", operationId: "getRunShots", tag: "Runs", params: RUN,
83
+ responses: { 200: named("RunShots", runShots) } },
84
+ "GET /v1/runs/{id}/edit": { exposure: "public", operationId: "getRunEdit", tag: "Runs", params: RUN, responses: { 200: named("RunEdit", runEdit) } },
85
+ "POST /v1/runs/{id}/edit": { exposure: "public", operationId: "saveRunEdit", tag: "Runs", params: RUN,
86
+ body: named("SaveRunEdit", saveRunEdit), responses: { 200: named("RunEdit", runEdit) } },
87
+ "POST /v1/runs/{id}/revisions/quote": { exposure: "public", operationId: "quoteRevision", tag: "Runs", params: RUN,
88
+ body: named("RevisionRequest", revisionRequest), responses: { 200: named("RevisionQuote", revisionQuote) } },
89
+ "POST /v1/runs/{id}/revisions": { exposure: "public", operationId: "startRevision", tag: "Runs", params: RUN,
90
+ body: named("RevisionRequest", revisionRequest), responses: { 202: Run, 200: Run } },
91
+ "POST /v1/runs/{id}/candidates/quote": { exposure: "public", operationId: "quoteCandidate", tag: "Runs", params: RUN,
92
+ body: named("CandidateRequest", candidateRequest), responses: { 200: named("CandidateQuote", candidateQuote) } },
93
+ "POST /v1/runs/{id}/candidates": { exposure: "public", operationId: "createCandidate", tag: "Runs", params: RUN,
94
+ body: named("CandidateRequest", candidateRequest), responses: { 202: Run, 200: Run } },
95
+ "GET /v1/runs/{id}/candidates": { exposure: "public", operationId: "listCandidates", tag: "Runs", params: RUN,
96
+ responses: { 200: named("RunCandidates", runCandidates) } },
97
+ "POST /v1/skills/make_ugc/run": { exposure: "public", operationId: "runMakeUgc", tag: "Skills",
98
+ body: MakeUgcInput, responses: { 202: Run, 200: Run } },
99
+ "GET /v1/public/skills": { exposure: "public", operationId: "listPublicSkills", tag: "Catalogs", anonymous: true,
100
+ responses: { 200: named("PublicSkills", publicSkillsResponse) } },
101
+ "GET /v1/public/prices": { exposure: "public", operationId: "listPrices", tag: "Catalogs", anonymous: true,
102
+ responses: { 200: named("Prices", pricesResponse) } },
103
+ "GET /v1/actors": { exposure: "public", operationId: "listActors", tag: "Actors", responses: { 200: named("Actors", actorsResponse) } },
104
+ "DELETE /v1/actors/{id}": { exposure: "public", operationId: "deleteActor", tag: "Actors", params: ACTOR, responses: { 204: null } },
105
+ "GET /v1/actors/{id}/defaults": { exposure: "public", operationId: "getActorDefaults", tag: "Actors", params: ACTOR,
106
+ responses: { 200: named("ActorDefaults", actorDefaults) } },
107
+ "POST /v1/actors/{id}/defaults": { exposure: "public", operationId: "setActorDefaults", tag: "Actors", params: ACTOR,
108
+ body: named("ActorDefaultsInput", actorDefaultsInput), responses: { 200: named("ActorDefaults", actorDefaults) } },
109
+ "POST /v1/skills/create_actor/quote": { exposure: "public", operationId: "quoteCreateActor", tag: "Skills",
110
+ body: named("CreateActorInput", createActorInput), responses: { 200: named("CreateActorQuote", createActorQuote) } },
111
+ "POST /v1/skills/create_actor/run": { exposure: "public", operationId: "runCreateActor", tag: "Skills",
112
+ body: named("CreateActorInput", createActorInput), responses: { 202: Run, 200: Run } },
113
+ "POST /v1/uploads": { exposure: "public", operationId: "uploadImage", tag: "Uploads", body: RAW_UPLOAD,
114
+ responses: { 201: named("Upload", uploadResponse) } },
115
+ "GET /v1/uploads": { exposure: "public", operationId: "listUploads", tag: "Uploads", responses: { 200: named("Uploads", uploadList) } },
116
+ "POST /v1/uploads/import": { exposure: "public", operationId: "importUpload", tag: "Uploads", optionalIdempotencyKey: true,
117
+ body: named("UploadImportRequest", uploadImportRequest), responses: { 201: named("Upload", uploadResponse), 200: named("Upload", uploadResponse) } },
118
+ "POST /v1/uploads/intents": { exposure: "public", operationId: "createUploadIntent", tag: "Uploads", optionalIdempotencyKey: true,
119
+ body: named("UploadIntentRequest", uploadIntentRequest),
120
+ responses: { 201: named("UploadIntent", uploadIntentResponse), 200: named("UploadIntent", uploadIntentResponse) } },
121
+ "GET /v1/uploads/{id}": { exposure: "public", operationId: "getUpload", tag: "Uploads", params: { id: uploadId },
122
+ responses: { 200: named("UploadItem", uploadItemResponse) } },
123
+ "POST /v1/assets": { exposure: "public", operationId: "createAsset", tag: "Assets", optionalIdempotencyKey: true,
124
+ body: named("CreateAssetRequest", createAssetRequest), responses: { 201: AssetItem, 202: AssetItem, 200: AssetItem } },
125
+ "POST /v1/assets/bytes": { exposure: "public", operationId: "createAssetFromBytes", tag: "Assets", optionalIdempotencyKey: true,
126
+ body: { mediaTypes: ASSET_PUT_MEDIA_TYPES }, query: assetBytesQuery, responses: { 201: AssetItem, 202: AssetItem, 200: AssetItem } },
127
+ "GET /v1/assets": { exposure: "public", operationId: "listAssets", tag: "Assets", query: assetListQuery,
128
+ responses: { 200: named("Assets", assetList) } },
129
+ "GET /v1/assets/{id}": { exposure: "public", operationId: "getAsset", tag: "Assets", params: ASSET, responses: { 200: AssetItem } },
130
+ "POST /v1/assets/{id}": { exposure: "public", operationId: "updateAsset", tag: "Assets", params: ASSET,
131
+ body: named("UpdateAssetRequest", updateAssetRequest), responses: { 200: named("Asset", asset) } },
132
+ "DELETE /v1/assets/{id}": { exposure: "public", operationId: "deleteAsset", tag: "Assets", params: ASSET, responses: { 204: null } },
133
+ "GET /internal/portfolio-metrics": { exposure: "excluded",
134
+ reason: "Internal funnel aggregates behind their own secret, outside the client contract (docs/03-api.md section 12)." },
135
+ "GET /v1/public/workflows": { exposure: "public", operationId: "listWorkflows", tag: "Workflows", anonymous: true,
136
+ responses: { 200: named("WorkflowCatalog", workflowCatalogResponse) } },
137
+ "GET /v1/public/workflows/{id}": { exposure: "public", operationId: "getWorkflow", tag: "Workflows", anonymous: true, params: { id: workflowMethodId },
138
+ responses: { 200: named("WorkflowMethod", workflowMethodResponse) } },
139
+ "POST /v1/workflow-plans": { exposure: "public", operationId: "createWorkflowPlan", tag: "Workflows",
140
+ body: named("CreateWorkflowPlan", createWorkflowPlan), responses: { 201: named("WorkflowPlan", workflowPlanRead) } },
141
+ "GET /v1/workflow-plans/{id}": { exposure: "public", operationId: "getWorkflowPlan", tag: "Workflows", params: PLAN,
142
+ responses: { 200: named("WorkflowPlan", workflowPlanRead) } },
143
+ "POST /v1/workflow-plans/reference-remake": { exposure: "public", operationId: "planReferenceRemake", tag: "Workflows",
144
+ body: named("PlanReferenceRemake", planReferenceRemake), responses: { 201: named("WorkflowPlan", workflowPlanRead) } },
145
+ "POST /v1/workflow-plans/{id}/revisions": { exposure: "public", operationId: "saveWorkflowPlan", tag: "Workflows", params: PLAN,
146
+ body: named("SaveWorkflowPlan", saveWorkflowPlan), responses: { 200: named("WorkflowPlan", workflowPlanRead) } },
147
+ "POST /v1/workflow-plans/{id}/approve": { exposure: "public", operationId: "approveWorkflowPlan", tag: "Workflows", params: PLAN,
148
+ body: named("ApproveWorkflowPlan", approveWorkflowPlan), responses: { 200: named("WorkflowPlan", workflowPlanRead) } },
149
+ "POST /v1/workflow-plans/{id}/quote": { exposure: "public", operationId: "quoteWorkflowPlan", tag: "Workflows", params: PLAN,
150
+ responses: { 200: named("WorkflowQuote", workflowQuoteBinding) } },
151
+ "POST /v1/workflow-plans/{id}/run": { exposure: "public", operationId: "runWorkflowPlan", tag: "Workflows", params: PLAN,
152
+ body: named("LaunchWorkflow", launchWorkflow),
153
+ responses: { 202: named("WorkflowLaunch", workflowLaunchResponse), 200: named("WorkflowLaunch", workflowLaunchResponse) } },
154
+ "GET /v1/generations/models": { exposure: "public", operationId: "listGenerationModels", tag: "Catalogs",
155
+ responses: { 200: named("GenerationModels", generationModels) } },
156
+ "POST /v1/skills/generate_image/quote": { exposure: "public", operationId: "quoteImage", tag: "Skills",
157
+ body: named("GenerateImageRequest", generateImageRequest), responses: { 200: named("GenerationQuote", generationQuote) } },
158
+ "POST /v1/skills/generate_image/run": { exposure: "public", operationId: "generateImage", tag: "Skills",
159
+ body: named("GenerateImageRequest", generateImageRequest), responses: { 202: Run, 200: Run } },
160
+ "POST /v1/skills/generate_video/quote": { exposure: "public", operationId: "quoteVideo", tag: "Skills",
161
+ body: named("GenerateVideoRequest", generateVideoRequest), responses: { 200: named("GenerationQuote", generationQuote) } },
162
+ "POST /v1/skills/generate_video/run": { exposure: "public", operationId: "generateVideo", tag: "Skills",
163
+ body: named("GenerateVideoRequest", generateVideoRequest), responses: { 202: Run, 200: Run } },
164
+ "POST /v1/reference-analyses/quote": { exposure: "public", operationId: "quoteAnalysis", tag: "Reference analysis",
165
+ body: named("AnalyzeReferenceRequest", analyzeReferenceRequest), responses: { 200: named("AnalysisQuote", analysisQuoteResponse) } },
166
+ "POST /v1/reference-analyses": { exposure: "public", operationId: "analyzeReference", tag: "Reference analysis",
167
+ billedWithoutKey: "one live analysis per asset: a resend answers the same analysis, and only a succeeded one is charged",
168
+ body: named("AnalyzeReferenceRequest", analyzeReferenceRequest),
169
+ responses: { 202: named("ReferenceAnalysis", referenceAnalysis), 200: named("ReferenceAnalysis", referenceAnalysis) } },
170
+ "GET /v1/reference-analyses/{id}": { exposure: "public", operationId: "getReferenceAnalysis", tag: "Reference analysis", params: { id: referenceAnalysisId },
171
+ responses: { 200: named("ReferenceAnalysis", referenceAnalysis) } },
172
+ };
173
+ function routeOf(endpoint) {
174
+ const route = OPENAPI_ROUTES[endpointLabel(endpoint)];
175
+ if (route === undefined)
176
+ throw new Error(`no OpenAPI marking for ${endpointLabel(endpoint)}`);
177
+ return route;
178
+ }
179
+ /** Registry order, public rows only. */
180
+ export function publicOpenApiRoutes() {
181
+ return API_ENDPOINTS.flatMap((endpoint) => {
182
+ const route = routeOf(endpoint);
183
+ return route.exposure === "public" ? [{ endpoint, route }] : [];
184
+ });
185
+ }
186
+ /** `:id` in Hono notation is `{id}` in OpenAPI. */
187
+ export const openApiOperationPath = (path) => path.replace(/:(\w+)/g, "{$1}");
188
+ /** The declared body of a success status: a schema, `null` for no body, `undefined` when undeclared. */
189
+ export function openApiResponse(endpoint, status) {
190
+ const route = routeOf(endpoint);
191
+ if (route.exposure !== "public")
192
+ return undefined;
193
+ return route.responses[status];
194
+ }
195
+ const SCHEMA_REF = "#/components/schemas/";
196
+ const WARNINGS = { type: "array", items: { type: "string" } };
197
+ /** zod's local `$defs` would resolve against the document root, so they become components of their own. */
198
+ function toComponent(entry, io, schemas) {
199
+ const json = z.toJSONSchema(entry.schema, { io, unrepresentable: "any" });
200
+ const defs = (json.$defs ?? {});
201
+ delete json.$schema;
202
+ delete json.$defs;
203
+ const rewrite = (node, key) => {
204
+ if (Array.isArray(node))
205
+ return node.map((item) => rewrite(item));
206
+ if (node === null || typeof node !== "object")
207
+ return node;
208
+ const object = node;
209
+ if (typeof object.$ref === "string" && object.$ref.startsWith("#/$defs/")) {
210
+ return { ...object, $ref: `${SCHEMA_REF}${entry.name}.${object.$ref.slice("#/$defs/".length)}` };
211
+ }
212
+ // Rule 3: an unmet parameter is a warning, never silence; the shared component says so once.
213
+ if (key === "warnings" && object.type === "array" && JSON.stringify(object.items) === JSON.stringify(WARNINGS.items)) {
214
+ const { type: _type, items: _items, ...rest } = object;
215
+ return { $ref: `${SCHEMA_REF}Warnings`, ...rest };
216
+ }
217
+ if (object.properties !== null && typeof object.properties === "object") {
218
+ const properties = Object.fromEntries(Object.entries(object.properties).map(([name, value]) => [name, rewrite(value, name)]));
219
+ return Object.fromEntries(Object.entries(object).map(([name, value]) => [name, name === "properties" ? properties : rewrite(value)]));
220
+ }
221
+ return Object.fromEntries(Object.entries(object).map(([name, value]) => [name, rewrite(value)]));
222
+ };
223
+ schemas[entry.name] = rewrite(json);
224
+ for (const [name, def] of Object.entries(defs))
225
+ schemas[`${entry.name}.${name}`] = rewrite(def);
226
+ }
227
+ const { version: PACKAGE_VERSION } = createRequire(import.meta.url)("../package.json");
228
+ /** Routes whose 200 replays an earlier answer and whose fresh answer has another status. */
229
+ const SUCCESS_REPLAY = new Set(Object.entries(OPENAPI_ROUTES).flatMap(([label, route]) => route.exposure === "public" && 200 in route.responses && (201 in route.responses || 202 in route.responses) ? [label] : []));
230
+ /** Pure: the same document from the same code, so the API builds it once and serves it from memory. */
231
+ export function buildOpenApiDocument() {
232
+ const schemas = {
233
+ Warnings: { ...WARNINGS, description: "What the request named and the API did not honour; it is never dropped silently." },
234
+ };
235
+ const seen = new Map();
236
+ const ref = (entry, io) => {
237
+ const known = seen.get(entry.name);
238
+ if (known !== undefined && known !== entry.schema)
239
+ throw new Error(`two schemas share the component name ${entry.name}`);
240
+ if (known === undefined) {
241
+ seen.set(entry.name, entry.schema);
242
+ toComponent(entry, io, schemas);
243
+ }
244
+ return { $ref: `${SCHEMA_REF}${entry.name}` };
245
+ };
246
+ ref(named("ErrorEnvelope", errorEnvelope), "output");
247
+ const paths = {};
248
+ for (const { endpoint, route } of publicOpenApiRoutes()) {
249
+ const label = endpointLabel(endpoint);
250
+ const note = ENDPOINT_NOTES[label];
251
+ if (note === undefined)
252
+ throw new Error(`no note for ${label}`);
253
+ const pathNames = [...endpoint.path.matchAll(/:(\w+)/g)].map(([, name]) => name);
254
+ if (JSON.stringify(pathNames) !== JSON.stringify(Object.keys(route.params ?? {}))) {
255
+ throw new Error(`${label} names path parameters [${pathNames.join(", ")}], its marking [${Object.keys(route.params ?? {}).join(", ")}]`);
256
+ }
257
+ const parameters = pathNames.map((name) => {
258
+ const { $schema: _schema, ...schema } = z.toJSONSchema(route.params[name], { io: "input", unrepresentable: "any" });
259
+ return { name, in: "path", required: true, schema };
260
+ });
261
+ if (route.query !== undefined) {
262
+ const query = z.toJSONSchema(route.query, { io: "input", unrepresentable: "any" });
263
+ for (const [name, schema] of Object.entries(query.properties ?? {})) {
264
+ const { description, ...rest } = schema;
265
+ parameters.push({ name, in: "query", required: query.required?.includes(name) ?? false, schema: rest,
266
+ ...(typeof description === "string" && { description }) });
267
+ }
268
+ }
269
+ if ((endpoint.billed && route.billedWithoutKey === undefined) || route.optionalIdempotencyKey) {
270
+ parameters.push({ name: "Idempotency-Key", in: "header", required: endpoint.billed, schema: { type: "string", minLength: 1 },
271
+ description: endpoint.billed
272
+ ? "Required: a resend with the same key and body returns the first run instead of charging again."
273
+ : "Optional: a resend with the same key and body returns the first answer." });
274
+ }
275
+ const responses = {};
276
+ for (const [status, entry] of Object.entries(route.responses)) {
277
+ responses[status] = entry === null
278
+ ? { description: "No content." }
279
+ : { description: status === "200" && SUCCESS_REPLAY.has(label) ? "The earlier answer to the same request." : "Success.",
280
+ content: { "application/json": { schema: ref(entry, "output") } } };
281
+ }
282
+ if (!route.anonymous) {
283
+ responses["401"] = { $ref: "#/components/responses/Unauthorized" };
284
+ responses["429"] = { $ref: "#/components/responses/RateLimited" };
285
+ }
286
+ responses.default = { $ref: "#/components/responses/Error" };
287
+ const body = route.body === undefined ? undefined : "mediaTypes" in route.body
288
+ ? { required: true, content: Object.fromEntries(route.body.mediaTypes.map((type) => [type, {}])) }
289
+ : { required: true, content: { "application/json": { schema: ref(route.body, "input") } } };
290
+ const item = paths[openApiOperationPath(endpoint.path)] ?? {};
291
+ paths[openApiOperationPath(endpoint.path)] = item;
292
+ item[endpoint.method.toLowerCase()] = {
293
+ operationId: route.operationId,
294
+ tags: [route.tag],
295
+ summary: note.split(/(?<=\.)\s/)[0],
296
+ description: note,
297
+ security: route.anonymous ? [] : [{ apiKey: [] }],
298
+ ...(parameters.length > 0 && { parameters }),
299
+ ...(body !== undefined && { requestBody: body }),
300
+ responses,
301
+ };
302
+ }
303
+ const envelope = { "application/json": { schema: { $ref: `${SCHEMA_REF}ErrorEnvelope` } } };
304
+ return {
305
+ openapi: "3.1.1",
306
+ info: {
307
+ title: "Clipwright API",
308
+ version: PACKAGE_VERSION,
309
+ summary: "Agent-native video generation: UGC, faceless and long-form presenter videos.",
310
+ description: "Quotes are free; a run holds credits and answers at once, and GET /v1/runs/{id} reports every run. "
311
+ + "Parameters the API does not honour come back in warnings[], never silently. "
312
+ + "Every refusal is one envelope, { error: { code, message } }, with typed fields for the codes that carry numbers.",
313
+ contact: { name: "Clipwright", url: "https://clipwright.io/docs" },
314
+ },
315
+ servers: [{ url: PUBLIC_API_BASE_URL }],
316
+ security: [{ apiKey: [] }],
317
+ tags: Object.entries(TAGS).map(([name, description]) => ({ name, description })),
318
+ paths,
319
+ components: {
320
+ securitySchemes: {
321
+ apiKey: { type: "http", scheme: "bearer", bearerFormat: "cw_*",
322
+ description: `A key starting with cw_, issued at ${PUBLIC_APP_BASE_URL}/api-keys and shown once.` },
323
+ },
324
+ responses: {
325
+ Error: { description: "A refusal in the shared error envelope.", content: envelope },
326
+ Unauthorized: { description: "The key is missing, malformed or revoked; nothing was charged.", content: envelope },
327
+ RateLimited: { description: "Too many requests for the account's bucket; retry after Retry-After seconds.", content: envelope,
328
+ headers: { "Retry-After": { schema: { type: "integer", minimum: 0 }, description: "Seconds until a retry can succeed." } } },
329
+ },
330
+ schemas,
331
+ },
332
+ };
333
+ }
334
+ //# sourceMappingURL=openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"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"}
package/dist/pacing.d.ts CHANGED
@@ -1,4 +1,19 @@
1
+ import { type TtsModelId } from "./voices.js";
1
2
  /** Speech pacing: 2–4 words per second. */
2
3
  export declare const WORDS_PER_SECOND_MIN = 2;
3
4
  export declare const WORDS_PER_SECOND_MAX = 4;
4
5
  export declare function countWords(script: string): number;
6
+ /** Average pace for duration ESTIMATES: two live ElevenLabs renders (Sarah), 74 words → 27.1 s and 32 words → 13.07 s. */
7
+ /** The earlier 3 words/s missed by −18.9% against the ±15% gate. */
8
+ export declare const ESTIMATE_WORDS_PER_SECOND = 2.6;
9
+ /** Russian on eleven_v3 reads slower: 153 words in 66.13 s, 2.31 words/s (#164). */
10
+ /** The speech-duration floor uses ESTIMATE_WORDS_PER_SECOND; only a measurement may raise it. */
11
+ export declare const ESTIMATE_WORDS_PER_SECOND_CYRILLIC = 2.3;
12
+ /** Cyrillic on eleven_v4: 153 words in 70.32 s, one take at Stability 0.5 (#452). */
13
+ export declare const ESTIMATE_WORDS_PER_SECOND_CYRILLIC_V4 = 2.18;
14
+ /** Cyrillic on gemini-3.8-flash-tts: 153 words in 71.04 s and 65.68 s, mean 2.24, rounded down (#453). */
15
+ export declare const ESTIMATE_WORDS_PER_SECOND_CYRILLIC_GOOGLE = 2.2;
16
+ /** Only make_ugc admission names the model; without it the script family alone sets the pace. */
17
+ export declare function estimateWordsPerSecond(script: string, model?: TtsModelId): number;
18
+ /** An ESTIMATE from the script's pace, not a fact: the charge follows the measured duration. */
19
+ export declare function estimateDurationSec(script: string, model?: TtsModelId): number;
package/dist/pacing.js CHANGED
@@ -1,7 +1,37 @@
1
+ import { detectScriptFamily, GOOGLE_TTS_MODEL } from "./voices.js";
1
2
  /** Speech pacing: 2–4 words per second. */
2
3
  export const WORDS_PER_SECOND_MIN = 2;
3
4
  export const WORDS_PER_SECOND_MAX = 4;
4
5
  export function countWords(script) {
5
6
  return script.trim().split(/\s+/).filter(Boolean).length;
6
7
  }
8
+ /** Average pace for duration ESTIMATES: two live ElevenLabs renders (Sarah), 74 words → 27.1 s and 32 words → 13.07 s. */
9
+ /** The earlier 3 words/s missed by −18.9% against the ±15% gate. */
10
+ export const ESTIMATE_WORDS_PER_SECOND = 2.6;
11
+ /** Russian on eleven_v3 reads slower: 153 words in 66.13 s, 2.31 words/s (#164). */
12
+ /** The speech-duration floor uses ESTIMATE_WORDS_PER_SECOND; only a measurement may raise it. */
13
+ export const ESTIMATE_WORDS_PER_SECOND_CYRILLIC = 2.3;
14
+ /** Cyrillic on eleven_v4: 153 words in 70.32 s, one take at Stability 0.5 (#452). */
15
+ export const ESTIMATE_WORDS_PER_SECOND_CYRILLIC_V4 = 2.18;
16
+ /** Cyrillic on gemini-3.8-flash-tts: 153 words in 71.04 s and 65.68 s, mean 2.24, rounded down (#453). */
17
+ export const ESTIMATE_WORDS_PER_SECOND_CYRILLIC_GOOGLE = 2.2;
18
+ /** Cyrillic pace for models with their own measurement; any other model reads at the script family's pace. */
19
+ const CYRILLIC_WORDS_PER_SECOND_BY_MODEL = {
20
+ eleven_v4: ESTIMATE_WORDS_PER_SECOND_CYRILLIC_V4,
21
+ [GOOGLE_TTS_MODEL]: ESTIMATE_WORDS_PER_SECOND_CYRILLIC_GOOGLE,
22
+ };
23
+ /** Only make_ugc admission names the model; without it the script family alone sets the pace. */
24
+ export function estimateWordsPerSecond(script, model) {
25
+ if (detectScriptFamily(script) !== "cyrillic")
26
+ return ESTIMATE_WORDS_PER_SECOND;
27
+ const measured = model !== undefined && Object.hasOwn(CYRILLIC_WORDS_PER_SECOND_BY_MODEL, model)
28
+ ? CYRILLIC_WORDS_PER_SECOND_BY_MODEL[model]
29
+ : undefined;
30
+ return measured ?? ESTIMATE_WORDS_PER_SECOND_CYRILLIC;
31
+ }
32
+ /** An ESTIMATE from the script's pace, not a fact: the charge follows the measured duration. */
33
+ export function estimateDurationSec(script, model) {
34
+ const words = countWords(script);
35
+ return Math.max(1, Math.round(words / estimateWordsPerSecond(script, model)));
36
+ }
7
37
  //# sourceMappingURL=pacing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pacing.js","sourceRoot":"","sources":["../src/pacing.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"pacing.js","sourceRoot":"","sources":["../src/pacing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAEpF,2CAA2C;AAC3C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;AAC3D,CAAC;AAED,0HAA0H;AAC1H,oEAAoE;AACpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C,oFAAoF;AACpF,iGAAiG;AACjG,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAG,CAAC;AAEtD,qFAAqF;AACrF,MAAM,CAAC,MAAM,qCAAqC,GAAG,IAAI,CAAC;AAE1D,0GAA0G;AAC1G,MAAM,CAAC,MAAM,yCAAyC,GAAG,GAAG,CAAC;AAE7D,8GAA8G;AAC9G,MAAM,kCAAkC,GAAwC;IAC9E,SAAS,EAAE,qCAAqC;IAChD,CAAC,gBAAgB,CAAC,EAAE,yCAAyC;CAC9D,CAAC;AAEF,iGAAiG;AACjG,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,KAAkB;IACvE,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,UAAU;QAAE,OAAO,yBAAyB,CAAC;IAChF,MAAM,QAAQ,GACZ,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,kCAAkC,EAAE,KAAK,CAAC;QAC7E,CAAC,CAAC,kCAAkC,CAAC,KAAK,CAAC;QAC3C,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,QAAQ,IAAI,kCAAkC,CAAC;AACxD,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,KAAkB;IACpE,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,84 @@
1
+ import { z } from "zod";
2
+ import { type FaceBillingInterval, type PartsFaceTariff, type PresenterEngine } from "./face-billing.js";
3
+ export declare const PARTS_PRICING_VERSION = "parts-v1";
4
+ /** Credits per second a presenter is in the video, covered or not (owner 22.10), by the engine that rendered the take. */
5
+ export declare const PRESENTER_CREDITS_PER_SECOND: Readonly<Record<PresenterEngine, number>>;
6
+ /** Voice and render, per second of the finished video. */
7
+ export declare const PRODUCTION_CREDITS_PER_SECOND = 1;
8
+ /** A call scene's live avatar: one HeyGen photo avatar of the still, per still in the delivered video. */
9
+ export declare const LIVE_AVATAR_STILL_CREDITS = 400;
10
+ /** The least a delivered video costs. */
11
+ export declare const DELIVERED_VIDEO_MINIMUM_CREDITS = 50;
12
+ export declare const PRESENTER_ENGINE_LABELS: Readonly<Record<PresenterEngine, string>>;
13
+ /** The long-form run's tariff, frozen at admission in `run_billing_terms` like long-form-v1 before it. */
14
+ export declare const PARTS_FACE_TARIFF: PartsFaceTariff;
15
+ /** The face tariffs new runs are admitted on, as a LIST: public text walks it, so another tariff cannot ship silently. */
16
+ export declare const FACE_BILLING_TARIFFS: readonly PartsFaceTariff[];
17
+ /** A short run's tariff: one take, so the presenter is in every second of the video. Its failures keep the short run's outcomes. */
18
+ export declare const durationPartsTariffSchema: z.ZodReadonly<z.ZodObject<{
19
+ version: z.ZodLiteral<1>;
20
+ pricingVersion: z.ZodString;
21
+ presenterCreditsPerSecond: z.ZodReadonly<z.ZodObject<{
22
+ heygen: z.ZodNumber;
23
+ omnihuman: z.ZodNumber;
24
+ }, z.core.$strict>>;
25
+ productionCreditsPerSecond: z.ZodNumber;
26
+ minimumCredits: z.ZodNumber;
27
+ }, z.core.$strict>>;
28
+ export type DurationPartsTariff = z.infer<typeof durationPartsTariffSchema>;
29
+ export declare const PARTS_DURATION_TARIFF: DurationPartsTariff;
30
+ /** One line of an itemized price: what was counted, how many, at what rate, and the product. */
31
+ export declare const partsLineSchema: z.ZodObject<{
32
+ label: z.ZodString;
33
+ unit: z.ZodEnum<{
34
+ face_second: "face_second";
35
+ second: "second";
36
+ still: "still";
37
+ }>;
38
+ quantity: z.ZodNumber;
39
+ unit_credits: z.ZodNumber;
40
+ credits: z.ZodNumber;
41
+ }, z.core.$strict>;
42
+ export type PartsLine = z.infer<typeof partsLineSchema>;
43
+ export interface PartsCharge {
44
+ lines: PartsLine[];
45
+ /** The lines added up, before the minimum. */
46
+ usageCredits: number;
47
+ credits: number;
48
+ minimumApplied: boolean;
49
+ /** Presenter frames over all engines, an overlap counted once. */
50
+ faceFrames: number;
51
+ billableFaceSeconds: number;
52
+ }
53
+ export interface PartsMeasure {
54
+ /** Each engine's presenter intervals: a take's whole slot, covered or not. */
55
+ presenter: Partial<Record<PresenterEngine, readonly FaceBillingInterval[]>>;
56
+ outputFrames: number;
57
+ fps: number;
58
+ liveAvatarStills: number;
59
+ }
60
+ /** A long-form video's price under a parts tariff: each engine's presenter seconds rounded up once over the video, every */
61
+ /** second of the video, each witnessed still; the minimum when delivered. Failure policy is settlement's, not this function's. */
62
+ export declare function calculatePartsCharge(measure: PartsMeasure, tariffInput: PartsFaceTariff, delivered: boolean): PartsCharge;
63
+ /** A short video's price: the presenter is in every second of its one take. Rounding is the legacy rule: whole seconds, at least one. */
64
+ export declare function calculateDurationPartsCharge(durationSec: number, engine: PresenterEngine, tariffInput: DurationPartsTariff, delivered: boolean): PartsCharge;
65
+ /** What a delivered parts-tariff video records about its price. */
66
+ export declare const partsBillingSummarySchema: z.ZodReadonly<z.ZodObject<{
67
+ pricingVersion: z.ZodString;
68
+ lines: z.ZodArray<z.ZodObject<{
69
+ label: z.ZodString;
70
+ unit: z.ZodEnum<{
71
+ face_second: "face_second";
72
+ second: "second";
73
+ still: "still";
74
+ }>;
75
+ quantity: z.ZodNumber;
76
+ unit_credits: z.ZodNumber;
77
+ credits: z.ZodNumber;
78
+ }, z.core.$strict>>;
79
+ minimumCredits: z.ZodNumber;
80
+ minimumApplied: z.ZodBoolean;
81
+ actualDurationSec: z.ZodNumber;
82
+ finalCreditsCharged: z.ZodNumber;
83
+ }, z.core.$strict>>;
84
+ export type PartsBillingSummary = z.infer<typeof partsBillingSummarySchema>;