@giveitsmaller/contracts 0.4.0 → 0.5.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 (352) hide show
  1. package/asyncapi/events.yaml +455 -41
  2. package/availability/availability.json +527 -78
  3. package/dist/asyncapi/OperationType.d.ts +5 -1
  4. package/dist/asyncapi/OperationType.js +4 -0
  5. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +1 -1
  6. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +1 -1
  7. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +1 -1
  8. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +1 -1
  9. package/dist/openapi/models/AuthErrorResponse.d.ts +1 -1
  10. package/dist/openapi/models/AuthErrorResponse.js +1 -1
  11. package/dist/openapi/models/AuthErrorType.d.ts +1 -1
  12. package/dist/openapi/models/AuthErrorType.js +1 -1
  13. package/dist/openapi/models/AvailabilityValue.d.ts +1 -1
  14. package/dist/openapi/models/AvailabilityValue.js +1 -1
  15. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +1 -1
  16. package/dist/openapi/models/BalanceExhaustedResponse.js +1 -1
  17. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +1 -1
  18. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +1 -1
  19. package/dist/openapi/models/CallbackEventType.d.ts +1 -1
  20. package/dist/openapi/models/CallbackEventType.js +1 -1
  21. package/dist/openapi/models/ConnectionSource.d.ts +1 -1
  22. package/dist/openapi/models/ConnectionSource.js +1 -1
  23. package/dist/openapi/models/ContactRequest.d.ts +1 -1
  24. package/dist/openapi/models/ContactRequest.js +1 -1
  25. package/dist/openapi/models/ContactSubject.d.ts +1 -1
  26. package/dist/openapi/models/ContactSubject.js +1 -1
  27. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +1 -1
  28. package/dist/openapi/models/ContactValidationErrorResponse.js +1 -1
  29. package/dist/openapi/models/CreateExternalImport403Response.d.ts +1 -1
  30. package/dist/openapi/models/CreateExternalImport403Response.js +1 -1
  31. package/dist/openapi/models/CreateExternalImport422Response.d.ts +1 -1
  32. package/dist/openapi/models/CreateExternalImport422Response.js +1 -1
  33. package/dist/openapi/models/CreateWorkflow422Response.d.ts +3 -2
  34. package/dist/openapi/models/CreateWorkflow422Response.js +8 -1
  35. package/dist/openapi/models/CreditTransaction.d.ts +1 -1
  36. package/dist/openapi/models/CreditTransaction.js +1 -1
  37. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +1 -1
  38. package/dist/openapi/models/CreditTransactionSourceBucket.js +1 -1
  39. package/dist/openapi/models/CreditsBalanceResponse.d.ts +1 -1
  40. package/dist/openapi/models/CreditsBalanceResponse.js +1 -1
  41. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +1 -1
  42. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +1 -1
  43. package/dist/openapi/models/CreditsUsageResponse.d.ts +1 -1
  44. package/dist/openapi/models/CreditsUsageResponse.js +1 -1
  45. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +1 -1
  46. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +1 -1
  47. package/dist/openapi/models/Delivery.d.ts +1 -1
  48. package/dist/openapi/models/Delivery.js +1 -1
  49. package/dist/openapi/models/DeliveryOutputRef.d.ts +1 -1
  50. package/dist/openapi/models/DeliveryOutputRef.js +1 -1
  51. package/dist/openapi/models/DeliveryPlan.d.ts +1 -1
  52. package/dist/openapi/models/DeliveryPlan.js +1 -1
  53. package/dist/openapi/models/DeliveryPlanOutput.d.ts +1 -1
  54. package/dist/openapi/models/DeliveryPlanOutput.js +1 -1
  55. package/dist/openapi/models/DeliveryPlanReason.d.ts +1 -1
  56. package/dist/openapi/models/DeliveryPlanReason.js +1 -1
  57. package/dist/openapi/models/DeliverySelection.d.ts +1 -1
  58. package/dist/openapi/models/DeliverySelection.js +1 -1
  59. package/dist/openapi/models/ErrorEnvelope.d.ts +1 -1
  60. package/dist/openapi/models/ErrorEnvelope.js +1 -1
  61. package/dist/openapi/models/EstimateQuality.d.ts +1 -1
  62. package/dist/openapi/models/EstimateQuality.js +1 -1
  63. package/dist/openapi/models/EstimateRange.d.ts +1 -1
  64. package/dist/openapi/models/EstimateRange.js +1 -1
  65. package/dist/openapi/models/ExternalDestination.d.ts +1 -1
  66. package/dist/openapi/models/ExternalDestination.js +1 -1
  67. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +1 -1
  68. package/dist/openapi/models/ExternalImportCreatedResponse.js +1 -1
  69. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +1 -1
  70. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +1 -1
  71. package/dist/openapi/models/ExternalImportRequest.d.ts +1 -1
  72. package/dist/openapi/models/ExternalImportRequest.js +1 -1
  73. package/dist/openapi/models/ExternalImportToken.d.ts +1 -1
  74. package/dist/openapi/models/ExternalImportToken.js +1 -1
  75. package/dist/openapi/models/ExternalSource.d.ts +1 -1
  76. package/dist/openapi/models/ExternalSource.js +1 -1
  77. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +1 -1
  78. package/dist/openapi/models/FeatureNotAvailableResponse.js +1 -1
  79. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +1 -1
  80. package/dist/openapi/models/FeatureTierRestrictedResponse.js +1 -1
  81. package/dist/openapi/models/FeatureViolation.d.ts +1 -1
  82. package/dist/openapi/models/FeatureViolation.js +1 -1
  83. package/dist/openapi/models/JobDefinition.d.ts +17 -6
  84. package/dist/openapi/models/JobDefinition.js +1 -1
  85. package/dist/openapi/models/JobDownload.d.ts +1 -1
  86. package/dist/openapi/models/JobDownload.js +1 -1
  87. package/dist/openapi/models/JobInputV2.d.ts +16 -1
  88. package/dist/openapi/models/JobInputV2.js +1 -1
  89. package/dist/openapi/models/JobOutputSource.d.ts +1 -1
  90. package/dist/openapi/models/JobOutputSource.js +1 -1
  91. package/dist/openapi/models/JobResponse.d.ts +1 -1
  92. package/dist/openapi/models/JobResponse.js +1 -1
  93. package/dist/openapi/models/JobStatus.d.ts +1 -1
  94. package/dist/openapi/models/JobStatus.js +1 -1
  95. package/dist/openapi/models/JobType.d.ts +1 -1
  96. package/dist/openapi/models/JobType.js +1 -1
  97. package/dist/openapi/models/LivenessResponse.d.ts +1 -1
  98. package/dist/openapi/models/LivenessResponse.js +1 -1
  99. package/dist/openapi/models/LoginUser200Response.d.ts +1 -1
  100. package/dist/openapi/models/LoginUser200Response.js +1 -1
  101. package/dist/openapi/models/LoginUser200ResponseData.d.ts +1 -1
  102. package/dist/openapi/models/LoginUser200ResponseData.js +1 -1
  103. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +1 -1
  104. package/dist/openapi/models/LoginUser200ResponseDataUser.js +1 -1
  105. package/dist/openapi/models/LoginUserRequest.d.ts +1 -1
  106. package/dist/openapi/models/LoginUserRequest.js +1 -1
  107. package/dist/openapi/models/LogoutUser200Response.d.ts +1 -1
  108. package/dist/openapi/models/LogoutUser200Response.js +1 -1
  109. package/dist/openapi/models/MetadataResponse.d.ts +1 -1
  110. package/dist/openapi/models/MetadataResponse.js +1 -1
  111. package/dist/openapi/models/MetadataResponseDimensions.d.ts +1 -1
  112. package/dist/openapi/models/MetadataResponseDimensions.js +1 -1
  113. package/dist/openapi/models/MetadataResponseExif.d.ts +1 -1
  114. package/dist/openapi/models/MetadataResponseExif.js +1 -1
  115. package/dist/openapi/models/MetadataResponseExifGps.d.ts +1 -1
  116. package/dist/openapi/models/MetadataResponseExifGps.js +1 -1
  117. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +1 -1
  118. package/dist/openapi/models/MetadataSuccessEnvelope.js +1 -1
  119. package/dist/openapi/models/MimeGroupSchema.d.ts +1 -1
  120. package/dist/openapi/models/MimeGroupSchema.js +1 -1
  121. package/dist/openapi/models/MultipartCompleteRequest.d.ts +1 -1
  122. package/dist/openapi/models/MultipartCompleteRequest.js +1 -1
  123. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +1 -1
  124. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +1 -1
  125. package/dist/openapi/models/MultipartCompleteResponse.d.ts +1 -1
  126. package/dist/openapi/models/MultipartCompleteResponse.js +1 -1
  127. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +1 -1
  128. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +1 -1
  129. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +1 -1
  130. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +1 -1
  131. package/dist/openapi/models/MultipartInitiateResponse.d.ts +1 -1
  132. package/dist/openapi/models/MultipartInitiateResponse.js +1 -1
  133. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +1 -1
  134. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +1 -1
  135. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +1 -1
  136. package/dist/openapi/models/MultipartKeepaliveResponse.js +1 -1
  137. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +1 -1
  138. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +1 -1
  139. package/dist/openapi/models/MultipartPartListing.d.ts +1 -1
  140. package/dist/openapi/models/MultipartPartListing.js +1 -1
  141. package/dist/openapi/models/MultipartPresignRequest.d.ts +1 -1
  142. package/dist/openapi/models/MultipartPresignRequest.js +1 -1
  143. package/dist/openapi/models/MultipartPresignResponse.d.ts +1 -1
  144. package/dist/openapi/models/MultipartPresignResponse.js +1 -1
  145. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +1 -1
  146. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +1 -1
  147. package/dist/openapi/models/MultipartStatusResponse.d.ts +1 -1
  148. package/dist/openapi/models/MultipartStatusResponse.js +1 -1
  149. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +1 -1
  150. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +1 -1
  151. package/dist/openapi/models/OperationDefinition.d.ts +1 -1
  152. package/dist/openapi/models/OperationDefinition.js +1 -1
  153. package/dist/openapi/models/OperationDownload.d.ts +1 -1
  154. package/dist/openapi/models/OperationDownload.js +1 -1
  155. package/dist/openapi/models/OperationInputModel.d.ts +4 -3
  156. package/dist/openapi/models/OperationInputModel.js +4 -3
  157. package/dist/openapi/models/OperationResponse.d.ts +1 -1
  158. package/dist/openapi/models/OperationResponse.js +1 -1
  159. package/dist/openapi/models/OperationResult.d.ts +1 -1
  160. package/dist/openapi/models/OperationResult.js +1 -1
  161. package/dist/openapi/models/OperationResultMetrics.d.ts +1 -1
  162. package/dist/openapi/models/OperationResultMetrics.js +1 -1
  163. package/dist/openapi/models/OperationSchemaDefinition.d.ts +23 -2
  164. package/dist/openapi/models/OperationSchemaDefinition.js +4 -1
  165. package/dist/openapi/models/OperationStatus.d.ts +1 -1
  166. package/dist/openapi/models/OperationStatus.js +1 -1
  167. package/dist/openapi/models/OperationType.d.ts +10 -2
  168. package/dist/openapi/models/OperationType.js +11 -3
  169. package/dist/openapi/models/OperationsSchemaResponse.d.ts +1 -1
  170. package/dist/openapi/models/OperationsSchemaResponse.js +1 -1
  171. package/dist/openapi/models/OptionSchema.d.ts +1 -1
  172. package/dist/openapi/models/OptionSchema.js +1 -1
  173. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +47 -0
  174. package/dist/openapi/models/PerRoleCardinalityEntry.js +47 -0
  175. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +1 -1
  176. package/dist/openapi/models/PerValueAvailabilityEntry.js +1 -1
  177. package/dist/openapi/models/PresignedUrlPart.d.ts +1 -1
  178. package/dist/openapi/models/PresignedUrlPart.js +1 -1
  179. package/dist/openapi/models/ProbePendingResponse.d.ts +171 -0
  180. package/dist/openapi/models/ProbePendingResponse.js +75 -0
  181. package/dist/openapi/models/ProcessingClass.d.ts +1 -1
  182. package/dist/openapi/models/ProcessingClass.js +1 -1
  183. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +1 -1
  184. package/dist/openapi/models/ProcessingClassBandViolation.js +1 -1
  185. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +1 -1
  186. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +1 -1
  187. package/dist/openapi/models/ProcessingClassHint.d.ts +1 -1
  188. package/dist/openapi/models/ProcessingClassHint.js +1 -1
  189. package/dist/openapi/models/ProcessingClassReason.d.ts +1 -1
  190. package/dist/openapi/models/ProcessingClassReason.js +1 -1
  191. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +1 -1
  192. package/dist/openapi/models/ProcessingClassRejectReason.js +1 -1
  193. package/dist/openapi/models/ProcessingPlan.d.ts +1 -1
  194. package/dist/openapi/models/ProcessingPlan.js +1 -1
  195. package/dist/openapi/models/ProcessingPlanJob.d.ts +1 -1
  196. package/dist/openapi/models/ProcessingPlanJob.js +1 -1
  197. package/dist/openapi/models/ReadinessResponse.d.ts +1 -1
  198. package/dist/openapi/models/ReadinessResponse.js +1 -1
  199. package/dist/openapi/models/ResponseEnvelope.d.ts +1 -1
  200. package/dist/openapi/models/ResponseEnvelope.js +1 -1
  201. package/dist/openapi/models/RetryResponse.d.ts +1 -1
  202. package/dist/openapi/models/RetryResponse.js +1 -1
  203. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +1 -1
  204. package/dist/openapi/models/RetrySuccessEnvelope.js +1 -1
  205. package/dist/openapi/models/SseEventType.d.ts +1 -1
  206. package/dist/openapi/models/SseEventType.js +1 -1
  207. package/dist/openapi/models/SseJobCompletedData.d.ts +1 -1
  208. package/dist/openapi/models/SseJobCompletedData.js +1 -1
  209. package/dist/openapi/models/SseJobFailedData.d.ts +1 -1
  210. package/dist/openapi/models/SseJobFailedData.js +1 -1
  211. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +60 -0
  212. package/dist/openapi/models/SseMultiOutputCompletion.js +51 -0
  213. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +38 -0
  214. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +43 -0
  215. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +75 -0
  216. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +61 -0
  217. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +74 -0
  218. package/dist/openapi/models/SseMultiOutputResultEntry.js +51 -0
  219. package/dist/openapi/models/SseOperationCompletedData.d.ts +4 -4
  220. package/dist/openapi/models/SseOperationCompletedData.js +4 -4
  221. package/dist/openapi/models/SseOperationCompletionResult.d.ts +60 -0
  222. package/dist/openapi/models/SseOperationCompletionResult.js +47 -0
  223. package/dist/openapi/models/SseOperationFailedData.d.ts +1 -1
  224. package/dist/openapi/models/SseOperationFailedData.js +1 -1
  225. package/dist/openapi/models/SseOperationProgressData.d.ts +1 -1
  226. package/dist/openapi/models/SseOperationProgressData.js +1 -1
  227. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +72 -0
  228. package/dist/openapi/models/SseSingleOutputCompletion.js +62 -0
  229. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +1 -1
  230. package/dist/openapi/models/SseWorkflowTerminalData.js +1 -1
  231. package/dist/openapi/models/TierRestrictionKind.d.ts +1 -1
  232. package/dist/openapi/models/TierRestrictionKind.js +1 -1
  233. package/dist/openapi/models/TierRestrictionResponse.d.ts +1 -1
  234. package/dist/openapi/models/TierRestrictionResponse.js +1 -1
  235. package/dist/openapi/models/UploadConstraintsApplied.d.ts +1 -1
  236. package/dist/openapi/models/UploadConstraintsApplied.js +1 -1
  237. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +1 -1
  238. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +1 -1
  239. package/dist/openapi/models/UploadFile403Response.d.ts +1 -1
  240. package/dist/openapi/models/UploadFile403Response.js +1 -1
  241. package/dist/openapi/models/UploadFile422Response.d.ts +1 -1
  242. package/dist/openapi/models/UploadFile422Response.js +1 -1
  243. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +1 -1
  244. package/dist/openapi/models/UploadProbeMediaMetadata.js +1 -1
  245. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +1 -1
  246. package/dist/openapi/models/UploadProbeProcessingClass.js +1 -1
  247. package/dist/openapi/models/UploadProbeResponse.d.ts +4 -2
  248. package/dist/openapi/models/UploadProbeResponse.js +1 -1
  249. package/dist/openapi/models/UploadProbeStatus.d.ts +1 -1
  250. package/dist/openapi/models/UploadProbeStatus.js +1 -1
  251. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +56 -0
  252. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +54 -0
  253. package/dist/openapi/models/UploadResponse.d.ts +1 -1
  254. package/dist/openapi/models/UploadResponse.js +1 -1
  255. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +1 -1
  256. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +1 -1
  257. package/dist/openapi/models/UploadSource.d.ts +1 -1
  258. package/dist/openapi/models/UploadSource.js +1 -1
  259. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +1 -1
  260. package/dist/openapi/models/UploadSuccessEnvelope.js +1 -1
  261. package/dist/openapi/models/UploadThresholds.d.ts +1 -1
  262. package/dist/openapi/models/UploadThresholds.js +1 -1
  263. package/dist/openapi/models/UserTier.d.ts +1 -1
  264. package/dist/openapi/models/UserTier.js +1 -1
  265. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +1 -1
  266. package/dist/openapi/models/ValidationErrorEnvelope.js +1 -1
  267. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +1 -1
  268. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +1 -1
  269. package/dist/openapi/models/WarningType.d.ts +1 -1
  270. package/dist/openapi/models/WarningType.js +1 -1
  271. package/dist/openapi/models/WebhookOperationContext.d.ts +1 -1
  272. package/dist/openapi/models/WebhookOperationContext.js +1 -1
  273. package/dist/openapi/models/WebhookPayload.d.ts +1 -1
  274. package/dist/openapi/models/WebhookPayload.js +1 -1
  275. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +1 -1
  276. package/dist/openapi/models/WorkflowCancelBillingEffect.js +1 -1
  277. package/dist/openapi/models/WorkflowCancelResponse.d.ts +1 -1
  278. package/dist/openapi/models/WorkflowCancelResponse.js +1 -1
  279. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +1 -1
  280. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +1 -1
  281. package/dist/openapi/models/WorkflowCreateRequest.d.ts +1 -1
  282. package/dist/openapi/models/WorkflowCreateRequest.js +1 -1
  283. package/dist/openapi/models/WorkflowCreateResponse.d.ts +1 -1
  284. package/dist/openapi/models/WorkflowCreateResponse.js +1 -1
  285. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +1 -1
  286. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +1 -1
  287. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +1 -1
  288. package/dist/openapi/models/WorkflowDownloadResponse.js +1 -1
  289. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +1 -1
  290. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +1 -1
  291. package/dist/openapi/models/WorkflowEdge.d.ts +1 -1
  292. package/dist/openapi/models/WorkflowEdge.js +1 -1
  293. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +1 -1
  294. package/dist/openapi/models/WorkflowExpiredResponse.js +1 -1
  295. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +1 -1
  296. package/dist/openapi/models/WorkflowPauseRequiredAction.js +1 -1
  297. package/dist/openapi/models/WorkflowPausedDetail.d.ts +1 -1
  298. package/dist/openapi/models/WorkflowPausedDetail.js +1 -1
  299. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +1 -1
  300. package/dist/openapi/models/WorkflowPausedDetailLinks.js +1 -1
  301. package/dist/openapi/models/WorkflowProcessing.d.ts +1 -1
  302. package/dist/openapi/models/WorkflowProcessing.js +1 -1
  303. package/dist/openapi/models/WorkflowResumeResponse.d.ts +1 -1
  304. package/dist/openapi/models/WorkflowResumeResponse.js +1 -1
  305. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +1 -1
  306. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +1 -1
  307. package/dist/openapi/models/WorkflowSource.d.ts +1 -1
  308. package/dist/openapi/models/WorkflowSource.js +1 -1
  309. package/dist/openapi/models/WorkflowStatus.d.ts +1 -1
  310. package/dist/openapi/models/WorkflowStatus.js +1 -1
  311. package/dist/openapi/models/WorkflowStatusResponse.d.ts +1 -1
  312. package/dist/openapi/models/WorkflowStatusResponse.js +1 -1
  313. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +1 -1
  314. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +1 -1
  315. package/dist/openapi/models/WorkflowWarning.d.ts +1 -1
  316. package/dist/openapi/models/WorkflowWarning.js +1 -1
  317. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +1 -1
  318. package/dist/openapi/models/WorkflowWarningSeverity.js +1 -1
  319. package/dist/openapi/models/index.d.ts +9 -0
  320. package/dist/openapi/models/index.js +9 -0
  321. package/dist/openapi/runtime.d.ts +1 -1
  322. package/dist/openapi/runtime.js +1 -1
  323. package/dist/operations/audio_to_video.d.ts +20 -0
  324. package/dist/operations/audio_to_video.js +17 -0
  325. package/dist/operations/audio_to_video.metadata.d.ts +2 -0
  326. package/dist/operations/audio_to_video.metadata.js +29 -0
  327. package/dist/operations/image_watermark.d.ts +0 -18
  328. package/dist/operations/image_watermark.js +0 -12
  329. package/dist/operations/image_watermark.metadata.js +0 -41
  330. package/dist/operations/index.d.ts +8 -0
  331. package/dist/operations/index.js +8 -0
  332. package/dist/operations/metadata-types.d.ts +17 -0
  333. package/dist/operations/split.d.ts +50 -0
  334. package/dist/operations/split.js +34 -0
  335. package/dist/operations/split.metadata.d.ts +2 -0
  336. package/dist/operations/split.metadata.js +103 -0
  337. package/dist/operations/video_text_watermark.d.ts +31 -0
  338. package/dist/operations/video_text_watermark.js +22 -0
  339. package/dist/operations/video_text_watermark.metadata.d.ts +2 -0
  340. package/dist/operations/video_text_watermark.metadata.js +65 -0
  341. package/dist/operations/video_watermark.d.ts +18 -0
  342. package/dist/operations/video_watermark.js +13 -0
  343. package/dist/operations/video_watermark.metadata.d.ts +2 -0
  344. package/dist/operations/video_watermark.metadata.js +52 -0
  345. package/openapi/api.yaml +523 -72
  346. package/operations/schemas/audio_to_video.yaml +122 -0
  347. package/operations/schemas/image_watermark.yaml +15 -103
  348. package/operations/schemas/split.yaml +309 -0
  349. package/operations/schemas/thumbnail.yaml +7 -1
  350. package/operations/schemas/video_text_watermark.yaml +174 -0
  351. package/operations/schemas/video_watermark.yaml +136 -0
  352. package/package.json +8 -3
package/openapi/api.yaml CHANGED
@@ -75,7 +75,7 @@ info:
75
75
  of truth instead of hardcoding magic numbers. A runtime
76
76
  `GET /api/uploads/limits` endpoint for dynamic discovery
77
77
  (per-tier / per-environment overrides) is a deferred follow-up.
78
- version: 2.12.0
78
+ version: 2.15.3
79
79
  contact:
80
80
  name: API Support
81
81
 
@@ -968,82 +968,92 @@ paths:
968
968
  responses:
969
969
  '200':
970
970
  description: |
971
- Probe completed. The `probe_status` field indicates
971
+ Probe completed. The `data.probe_status` field indicates
972
972
  whether the file is workflow-ready (`ok`) or has issues
973
973
  that warrant exclusion / re-upload.
974
974
  content:
975
975
  application/json:
976
976
  schema:
977
- $ref: '#/components/schemas/UploadProbeResponse'
977
+ $ref: '#/components/schemas/UploadProbeSuccessEnvelope'
978
978
  examples:
979
979
  ok_short_form:
980
980
  summary: Short-form clip probed cleanly
981
981
  value:
982
- file_id: "019539ab-1111-7000-8000-000000000001"
983
- probe_status: "ok"
984
- media_metadata:
985
- duration_seconds: 187
986
- width: 1920
987
- height: 1080
988
- codec: "h264"
989
- container: "mp4"
990
- audio_layout: "stereo"
991
- probed_at: "2026-04-26T13:50:00Z"
992
- processing_class_pre_assignment: "short_form"
982
+ success: true
983
+ data:
984
+ file_id: "019539ab-1111-7000-8000-000000000001"
985
+ probe_status: "ok"
986
+ media_metadata:
987
+ duration_seconds: 187
988
+ width: 1920
989
+ height: 1080
990
+ codec: "h264"
991
+ container: "mp4"
992
+ audio_layout: "stereo"
993
+ probed_at: "2026-04-26T13:50:00Z"
994
+ processing_class_pre_assignment: "short_form"
993
995
  ok_long_form:
994
996
  summary: Long-form clip — full M2 union populated (video + audio fields)
995
997
  value:
996
- file_id: "019539ab-1111-7000-8000-000000000002"
997
- probe_status: "ok"
998
- media_metadata:
999
- duration_seconds: 5400
1000
- width: 3840
1001
- height: 2160
1002
- codec: "h265"
1003
- audio_codec: "aac"
1004
- container: "mp4"
1005
- fps: 23.976
1006
- bitrate_bps: 18000000
1007
- audio_layout: "stereo"
1008
- channels: 2
1009
- sample_rate_hz: 48000
1010
- probed_at: "2026-04-26T13:50:00Z"
1011
- processing_class_pre_assignment: "long_form"
998
+ success: true
999
+ data:
1000
+ file_id: "019539ab-1111-7000-8000-000000000002"
1001
+ probe_status: "ok"
1002
+ media_metadata:
1003
+ duration_seconds: 5400
1004
+ width: 3840
1005
+ height: 2160
1006
+ codec: "h265"
1007
+ audio_codec: "aac"
1008
+ container: "mp4"
1009
+ fps: 23.976
1010
+ bitrate_bps: 18000000
1011
+ audio_layout: "stereo"
1012
+ channels: 2
1013
+ sample_rate_hz: 48000
1014
+ probed_at: "2026-04-26T13:50:00Z"
1015
+ processing_class_pre_assignment: "long_form"
1012
1016
  corrupt:
1013
1017
  summary: File header damaged — caller should exclude
1014
1018
  value:
1015
- file_id: "019539ab-1111-7000-8000-000000000003"
1016
- probe_status: "corrupt"
1017
- media_metadata:
1018
- probed_at: "2026-04-26T13:50:00Z"
1019
- processing_class_pre_assignment: "blocked"
1019
+ success: true
1020
+ data:
1021
+ file_id: "019539ab-1111-7000-8000-000000000003"
1022
+ probe_status: "corrupt"
1023
+ media_metadata:
1024
+ probed_at: "2026-04-26T13:50:00Z"
1025
+ processing_class_pre_assignment: "blocked"
1020
1026
  unsupported_codec:
1021
1027
  summary: Container readable but codec unsupported
1022
1028
  value:
1023
- file_id: "019539ab-1111-7000-8000-000000000004"
1024
- probe_status: "unsupported_codec"
1025
- media_metadata:
1026
- duration_seconds: 600
1027
- width: 1280
1028
- height: 720
1029
- codec: "prores_4444"
1030
- container: "mov"
1031
- probed_at: "2026-04-26T13:50:00Z"
1032
- processing_class_pre_assignment: "blocked"
1029
+ success: true
1030
+ data:
1031
+ file_id: "019539ab-1111-7000-8000-000000000004"
1032
+ probe_status: "unsupported_codec"
1033
+ media_metadata:
1034
+ duration_seconds: 600
1035
+ width: 1280
1036
+ height: 720
1037
+ codec: "prores_4444"
1038
+ container: "mov"
1039
+ probed_at: "2026-04-26T13:50:00Z"
1040
+ processing_class_pre_assignment: "blocked"
1033
1041
  blocked_by_tier:
1034
1042
  summary: Free-tier caller probes a long-form clip
1035
1043
  value:
1036
- file_id: "019539ab-1111-7000-8000-000000000005"
1037
- probe_status: "ok"
1038
- media_metadata:
1039
- duration_seconds: 5400
1040
- width: 1920
1041
- height: 1080
1042
- codec: "h264"
1043
- container: "mp4"
1044
- audio_layout: "stereo"
1045
- probed_at: "2026-04-26T13:50:00Z"
1046
- processing_class_pre_assignment: "blocked"
1044
+ success: true
1045
+ data:
1046
+ file_id: "019539ab-1111-7000-8000-000000000005"
1047
+ probe_status: "ok"
1048
+ media_metadata:
1049
+ duration_seconds: 5400
1050
+ width: 1920
1051
+ height: 1080
1052
+ codec: "h264"
1053
+ container: "mp4"
1054
+ audio_layout: "stereo"
1055
+ probed_at: "2026-04-26T13:50:00Z"
1056
+ processing_class_pre_assignment: "blocked"
1047
1057
  '401':
1048
1058
  description: Authentication required.
1049
1059
  content:
@@ -1495,8 +1505,12 @@ paths:
1495
1505
  duck-type against. `FeatureNotAvailableResponse` carries
1496
1506
  `error_type: feature_not_available` + `violations[]`;
1497
1507
  `ProcessingClassExceedsBandResponse` carries `error_type:
1498
- processing_class_exceeds_band` + `violations[]`. The
1499
- `REQUIRES_REENCODE` flavour reuses `ValidationErrorEnvelope`
1508
+ processing_class_exceeds_band` + `violations[]`.
1509
+ `ProbePendingResponse` carries `error_type: probe_pending`
1510
+ + `job_ref` (and NO `violations[]` / `details[]`), emitted
1511
+ when the probe-pending gate is on and a job's upload has
1512
+ not yet been probed. The `REQUIRES_REENCODE` flavour reuses
1513
+ `ValidationErrorEnvelope`
1500
1514
  (a user-fixable validation error in the same family as
1501
1515
  `INVALID_OPTIONS`) and is distinguished by the stable
1502
1516
  `error: "REQUIRES_REENCODE"` string code rather than a new
@@ -1508,6 +1522,21 @@ paths:
1508
1522
  here because `ValidationErrorEnvelope` has no `error_type`
1509
1523
  field; OpenAPI 3.1 discriminators require the property to
1510
1524
  be present on every branch).
1525
+ headers:
1526
+ Retry-After:
1527
+ required: false
1528
+ description: |
1529
+ Optional, best-effort. Present only on the
1530
+ `probe_pending` branch — suggested seconds to wait
1531
+ before re-polling the upload probe and retrying the
1532
+ workflow. Delta-seconds (RFC 9110), mirroring the 429
1533
+ login path's `Retry-After` convention. Absent until the
1534
+ server-side probe-staleness bound (API `e1Idv6UL`)
1535
+ lands; consumers MUST treat absence as "retry on your
1536
+ own backoff schedule."
1537
+ schema:
1538
+ type: integer
1539
+ minimum: 0
1511
1540
  content:
1512
1541
  application/json:
1513
1542
  schema:
@@ -1515,6 +1544,7 @@ paths:
1515
1544
  - $ref: '#/components/schemas/ValidationErrorEnvelope'
1516
1545
  - $ref: '#/components/schemas/FeatureNotAvailableResponse'
1517
1546
  - $ref: '#/components/schemas/ProcessingClassExceedsBandResponse'
1547
+ - $ref: '#/components/schemas/ProbePendingResponse'
1518
1548
  examples:
1519
1549
  validation_error:
1520
1550
  summary: Generic validation error (legacy shape)
@@ -1541,6 +1571,19 @@ paths:
1541
1571
  documentation_url: "https://docs.giveitsmaller.com/operations/audio_overlay"
1542
1572
  - feature: "operation.merge.mime_group.image.option.transition.dissolve"
1543
1573
  availability: "experimental"
1574
+ probe_pending:
1575
+ summary: |
1576
+ Probe-pending gate is on and a single-op video
1577
+ compress references an upload whose server-side
1578
+ probe has not yet landed. Client polls the upload
1579
+ probe endpoint, then re-POSTs the workflow. The
1580
+ `Retry-After` header (5s here) hints the poll delay.
1581
+ value:
1582
+ success: false
1583
+ error: "Upload probe has not completed; poll the upload probe endpoint and retry"
1584
+ error_type: "probe_pending"
1585
+ job_ref: "job_0"
1586
+ message_key: "error.probe_pending"
1544
1587
  processing_class_exceeds_band_combined_size:
1545
1588
  summary: |
1546
1589
  merge job whose summed inputs (130 GB) exceed the
@@ -1766,6 +1809,35 @@ paths:
1766
1809
  event: workflow.completed
1767
1810
  data: {"workflow_id":"wf-uuid","status":"completed"}
1768
1811
  ```
1812
+
1813
+ **Reconnect & delivery semantics:**
1814
+
1815
+ Delivery is **at-least-once per connection with no client-driven
1816
+ resume**. The server does **not** read an inbound `Last-Event-ID`
1817
+ header; each connection re-derives state from scratch and replays
1818
+ every underlying stream from the start. Consequently **terminal events
1819
+ (`operation.completed` / `operation.failed`, `job.completed` /
1820
+ `job.failed`, `workflow.completed` / `workflow.failed` /
1821
+ `workflow.partially_failed`) are re-delivered on every (re)connection**.
1822
+ Within a single connection events are not duplicated (the cursor
1823
+ advances as events are sent), so duplicates only arise across
1824
+ reconnects. Clients MUST therefore treat the stream as idempotent and
1825
+ dedupe terminal events themselves (e.g. by `operation_id` + event type,
1826
+ or by workflow/job terminal status) rather than relying on
1827
+ resume-from-cursor. Resume-from-`Last-Event-ID` is **not** implemented;
1828
+ if added later it will be a separate, explicitly-specified feature.
1829
+
1830
+ **`id:` field (SSE event id):** emitted **only on operation frames**
1831
+ (`operation.progress` / `operation.completed` / `operation.failed`),
1832
+ where it carries the underlying stream's event id. **Transition frames**
1833
+ (`job.completed` / `job.failed`, `workflow.*`) carry **no `id:`**.
1834
+ Because there is no `Last-Event-ID` resume, any emitted `id:` is
1835
+ informational only — clients cannot use it to resume a stream.
1836
+
1837
+ **Framing vs payload:** the `Sse*Data` component schemas describe only
1838
+ the `data:` JSON payload of each event. The SSE envelope framing itself
1839
+ (the `id:` and `event:` lines) is transport-level and intentionally
1840
+ **not** schema-described.
1769
1841
  operationId: streamWorkflowEvents
1770
1842
  tags:
1771
1843
  - Workflow
@@ -3498,6 +3570,62 @@ components:
3498
3570
  additionalProperties:
3499
3571
  $ref: '#/components/schemas/PerValueAvailabilityEntry'
3500
3572
 
3573
+ PerRoleCardinality:
3574
+ type: object
3575
+ description: |
3576
+ Map of role-name → `PerRoleCardinalityEntry`. Attached to
3577
+ a role-based multi-input operation's `per_role_cardinality`
3578
+ field to declare the required and maximum input count per
3579
+ role. **Cardinality overlay, not availability overlay** —
3580
+ sits alongside `PerValueAvailability` / `PerMimeAvailability`
3581
+ structurally but expresses a different concern.
3582
+
3583
+ Keys MUST be a subset of the `JobInputRole` enum
3584
+ (CI-checked by `scripts/check-per-role-cardinality.py`).
3585
+ The script additionally enforces arithmetic-consistency:
3586
+ `sum(role.min) == OperationSchemaDefinition.min_inputs`
3587
+ and `sum(role.max) == OperationSchemaDefinition.max_inputs`
3588
+ — this is the load-bearing invariant that makes the
3589
+ primitive useful.
3590
+
3591
+ Absence of `per_role_cardinality` on a role-based op keeps
3592
+ the current prose-only semantics (image_watermark /
3593
+ audio_overlay / custom_luma encode their role rules in
3594
+ prose at `JobInputRole`'s description today; migration to
3595
+ predicate form is per-op follow-up work).
3596
+
3597
+ Per ticket [`SlluxMBN`](https://trello.com/c/SlluxMBN) /
3598
+ ADR-0015. Consumed by `OperationInputRoleValidator` in
3599
+ `compression_api` (rule table becomes data-driven) and by
3600
+ SDK generators when emitting typed role-binding helpers.
3601
+ additionalProperties:
3602
+ $ref: '#/components/schemas/PerRoleCardinalityEntry'
3603
+
3604
+ PerRoleCardinalityEntry:
3605
+ type: object
3606
+ description: |
3607
+ Per-role cardinality entry. `min: 0` makes the role optional.
3608
+ `max: 1` is the most common upper bound (one base, one
3609
+ overlay); future role-based ops may declare higher maxima
3610
+ (e.g. multi-overlay video composites). Both fields default to
3611
+ `1` when absent on a role key — but consumers SHOULD treat
3612
+ absence of either field as a contract bug surfaced by
3613
+ `scripts/check-per-role-cardinality.py` rather than silently
3614
+ defaulting.
3615
+ required:
3616
+ - min
3617
+ - max
3618
+ properties:
3619
+ min:
3620
+ type: integer
3621
+ minimum: 0
3622
+ description: Minimum input count for this role (0 = optional).
3623
+ max:
3624
+ type: integer
3625
+ minimum: 1
3626
+ description: |
3627
+ Maximum input count for this role. MUST be >= `min`.
3628
+
3501
3629
  # ============================================
3502
3630
  # EXTERNAL SOURCES + DESTINATIONS
3503
3631
  # ============================================
@@ -4745,6 +4873,54 @@ components:
4745
4873
  items:
4746
4874
  $ref: '#/components/schemas/FeatureViolation'
4747
4875
 
4876
+ ProbePendingResponse:
4877
+ description: |
4878
+ 422 response on `POST /api/workflows` when the probe-pending
4879
+ gate (API `av1J0rEF`, shipped behind a default-OFF feature flag)
4880
+ is enabled and a job references an upload whose server-side
4881
+ probe has not yet completed at workflow-create time. Rather than
4882
+ silently routing the job as `short_form` (which hard-fails long
4883
+ video clips), the server rejects with this envelope so the
4884
+ client can recover deterministically.
4885
+
4886
+ **Recovery contract.** Poll `POST /api/uploads/{id}/probe` for
4887
+ the pending upload until its `probe_status` is terminal
4888
+ (`ok` → re-`POST /api/workflows` the same request; `corrupt` /
4889
+ `unsupported_codec` → surface the probe error, do not retry).
4890
+ The `Retry-After` response header (when present) carries the
4891
+ suggested delay in seconds before the next poll/retry.
4892
+
4893
+ Delivered alongside `ValidationErrorEnvelope`,
4894
+ `FeatureNotAvailableResponse`, and
4895
+ `ProcessingClassExceedsBandResponse` via the naked `oneOf` on
4896
+ the 422 response — duck-typed on required-field shape: this
4897
+ branch is the only one carrying `error_type: probe_pending`
4898
+ and it has neither `details` (ValidationErrorEnvelope) nor
4899
+ `violations` (the other two typed envelopes), so it matches
4900
+ exactly one branch.
4901
+ allOf:
4902
+ - $ref: '#/components/schemas/ErrorEnvelope'
4903
+ - type: object
4904
+ required:
4905
+ - error_type
4906
+ - job_ref
4907
+ properties:
4908
+ error_type:
4909
+ type: string
4910
+ enum:
4911
+ - probe_pending
4912
+ description: Discriminator for the 422 oneOf. Always `probe_pending`.
4913
+ job_ref:
4914
+ type: string
4915
+ description: |
4916
+ Workflow-local identifier of the job whose upload-probe
4917
+ has not landed — `JobDefinition.id` if the caller
4918
+ supplied one, else the auto-generated `job_N` token.
4919
+ Mirrors `ProcessingClassBandViolation.job_ref`; NOT
4920
+ `format: uuid` because workflow-create rejects fire
4921
+ before server-side UUIDs are assigned.
4922
+ example: "job_0"
4923
+
4748
4924
  ProcessingClassRejectReason:
4749
4925
  type: string
4750
4926
  description: |
@@ -5154,7 +5330,7 @@ components:
5154
5330
  - thumbnail_office: Office document (DOCX/XLSX/PPTX/ODT/ODS/ODP)
5155
5331
  thumbnail sub-type. Backed by a dedicated LibreOffice Lambda.
5156
5332
  Not yet emitted.
5157
- - image_watermark: Image overlay (file or external_source) onto a base media asset. Multi-input (Path B with role: base + overlay). Stable for image bases (jpeg/png/webp); animated GIF and video bases are advertised as `planned` via parallel mime_groups (`image_gif`, `video`) — dispatch returns `feature_not_available` (422) until Lambda support ships. Per ADR-0004 + I4-CONS + I5 (Trello AKZiOXnd).
5333
+ - image_watermark: Image overlay (file or external_source) onto a base IMAGE asset. Multi-input (Path B with role: base + overlay). Stable for static-image bases (jpeg/png/webp); animated GIF is advertised as `planned` via the `image_gif` mime_group — dispatch returns `feature_not_available` (422) until Lambda support ships. Video bases are NOT supported by image_watermark — use the dedicated `video_watermark` operation per ADR-0013. Per ADR-0004 + I4-CONS + I5 (Trello AKZiOXnd).
5158
5334
  - text_watermark: Text overlay rendered onto an image (Liberation Sans). Single-input. Per ADR-0004 + I4-CONS.
5159
5335
  - merge: Concatenate/combine multiple files into one (images, video, audio). Multi-input. Image inputs merge into animated GIF or slideshow video; image collage/grid and PDF concatenation are not supported by the V1 Lambda.
5160
5336
  - archive: Bundle files into ZIP/tar.gz (all types). Multi-input.
@@ -5162,6 +5338,10 @@ components:
5162
5338
  - custom_luma: Apply a caller-uploaded luma matte to a base video for a custom luma-matte transition effect. Multi-input (`role: base` + `role: transition_mask`). `availability: planned` + `required_tier: pro`; dispatch returns `feature_not_available` (422) until Lambda ships. Distinct from FFmpeg `xfade=custom` (which is an expression, not an operation). Per ticket I29 (Trello EPUE5Vs1).
5163
5339
  - audio_overlay: Mix a secondary audio asset over a primary audio or video base (DJ tags, podcast intros/outros, station IDs, jingles). Multi-input (`role: base` + `role: overlay`). `availability: planned`; dispatch returns `feature_not_available` (422) until Lambda ships. **NOT** the same as `audio_watermark` — that operation is steganographic (imperceptible identifier embedded for ownership tracking), tracked separately by I20. Per ticket I19 (Trello Xr3Z4GBF).
5164
5340
  - audio_watermark: Embed a steganographic forensic watermark into an audio asset (or a video's audio track) — Cinavia / Resemble PerTh territory. Single-input. `availability: planned` + `required_tier: enterprise`; dispatch returns `feature_not_available` (422) until Lambda ships. Pairs with `POST /api/audio-watermark/decode` for own-watermarks-only extraction. Per ticket I20 (Trello omiCq7Vn).
5341
+ - audio_to_video: Produce a video from an audio input plus an OPTIONAL still image overlay. Multi-input role-based with the first OPTIONAL role on the contract (`role: base` audio required, `role: overlay` image 0..1 — see `per_role_cardinality`). When overlay is omitted, the video uses a solid background colour. `availability: planned`; dispatch returns `feature_not_available` (422) until Lambda ships. Per ticket [`SlluxMBN`](https://trello.com/c/SlluxMBN) + ADR-0015 (introduces `per_role_cardinality` vocab).
5342
+ - video_watermark: Apply an image overlay onto a base video via FFmpeg's `overlay` filter. Multi-input role-based (`role: base` video + `role: overlay` image, exactly one of each per `per_role_cardinality`). Re-encode required; audio stream-copy passthrough. Distinct from `image_watermark` (pure-Rust/image-only). `availability: planned`; dispatch returns `feature_not_available` (422) until Lambda ships. Per ticket [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) + ADR-0013.
5343
+ - video_text_watermark: Render a text overlay onto a base video via FFmpeg's `drawtext` filter. Single-input — text and styling in options. Same `watermark_mode` (single/tiled), anchor + margin vocab as `text_watermark`. Re-encode required; audio stream-copy passthrough. `availability: planned`; dispatch returns `feature_not_available` (422) until Lambda ships. Per ticket [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) + ADR-0013.
5344
+ - split: Fan one input file into N outputs across GIF / PDF / audio / video MIME families. Single-input per-mime-group catalog (mirrors merge/convert): GIF uses `frame_range` (REQUIRED) + `output_format`; PDF uses `page_range` OR `page_groups` (mutually exclusive); audio + video use a `mode` discriminator (interval/count/cut_points) + numeric-seconds wire format + `precision` flag (fast/exact). 200-output hard cap per ADR-0009 §D5 with per-mode preflight math; output naming `output-001..output-200`. Long-form video routes to a separate `split-video-fargate` worker via `processing_class`. `availability: planned`; dispatch returns `feature_not_available` (422) until Lambda ships. Per ticket [`vKI0CFDu`](https://trello.com/c/vKI0CFDu) + ADR-0014.
5165
5345
 
5166
5346
  Both the legacy `thumbnail` value and the four sub-type values
5167
5347
  are valid routing targets today during the thumbnail migration
@@ -5186,6 +5366,10 @@ components:
5186
5366
  - custom_luma
5187
5367
  - audio_overlay
5188
5368
  - audio_watermark
5369
+ - audio_to_video
5370
+ - video_watermark
5371
+ - video_text_watermark
5372
+ - split
5189
5373
 
5190
5374
  OperationInputModel:
5191
5375
  type: string
@@ -5193,8 +5377,9 @@ components:
5193
5377
  Whether the operation accepts a single file or multiple files:
5194
5378
  - single: One input file (compress, thumbnail, thumbnail_image,
5195
5379
  thumbnail_video, thumbnail_document, thumbnail_office,
5196
- text_watermark, convert, audio_watermark)
5197
- - multi: Multiple input files (merge, archive, image_watermark, custom_luma, audio_overlay)
5380
+ text_watermark, convert, audio_watermark,
5381
+ video_text_watermark, split)
5382
+ - multi: Multiple input files (merge, archive, image_watermark, custom_luma, audio_overlay, audio_to_video, video_watermark). audio_to_video is the first role-based op with an OPTIONAL role (min_inputs=1, max_inputs=2 — see `per_role_cardinality`); video_watermark mirrors `image_watermark`'s 2-required pattern on video bases.
5198
5383
  enum:
5199
5384
  - single
5200
5385
  - multi
@@ -6142,10 +6327,21 @@ components:
6142
6327
  type: array
6143
6328
  description: |
6144
6329
  Multi-input list for `merge`, `archive`, `image_watermark`,
6145
- `custom_luma`, and `audio_overlay`. Each entry is a
6146
- `JobInputV2` with its own `WorkflowSource`. Mutually
6147
- exclusive with `source`.
6148
- minItems: 2
6330
+ `custom_luma`, `audio_overlay`, and `audio_to_video`. Each
6331
+ entry is a `JobInputV2` with its own `WorkflowSource`.
6332
+ Mutually exclusive with `source` — the V2 shape boundary
6333
+ stays `source` (single-input) XOR `inputs[]` (multi-input
6334
+ role-based) per ADR-0004 / I12.
6335
+
6336
+ **Minimum input count = sum of role minima** declared in
6337
+ the operation's `per_role_cardinality` (per ticket
6338
+ [`SlluxMBN`](https://trello.com/c/SlluxMBN) ADR-0015).
6339
+ `audio_to_video` requires 1 input (`base` audio; `overlay`
6340
+ optional, 0..1); all other role-based ops require 2+ today.
6341
+ The schema floor here is `minItems: 1` to admit the
6342
+ audio_to_video case; per-operation gates enforce the
6343
+ actual count via `OperationSchemaDefinition.min_inputs`.
6344
+ minItems: 1
6149
6345
  items:
6150
6346
  $ref: '#/components/schemas/JobInputV2'
6151
6347
  operations:
@@ -6157,8 +6353,8 @@ components:
6157
6353
 
6158
6354
  Multi-input jobs (with `inputs[]`) must have exactly one
6159
6355
  operation, and it must be a multi-input type (`merge`,
6160
- `archive`, `image_watermark`, `custom_luma`, or
6161
- `audio_overlay`).
6356
+ `archive`, `image_watermark`, `custom_luma`,
6357
+ `audio_overlay`, or `audio_to_video`).
6162
6358
  items:
6163
6359
  $ref: '#/components/schemas/OperationDefinition'
6164
6360
  deliver:
@@ -6189,7 +6385,7 @@ components:
6189
6385
  items:
6190
6386
  properties:
6191
6387
  type:
6192
- enum: [merge, archive, image_watermark, custom_luma, audio_overlay]
6388
+ enum: [merge, archive, image_watermark, custom_luma, audio_overlay, audio_to_video, video_watermark]
6193
6389
  required: [operations]
6194
6390
  description: |
6195
6391
  Multi-input jobs must have exactly one operation, and it
@@ -6236,6 +6432,21 @@ components:
6236
6432
  `overlay` value already declared for `image_watermark`
6237
6433
  — semantics differ by operation type, but the same
6238
6434
  role label keeps the enum compact.
6435
+ - `audio_to_video`: REQUIRED `base` (audio source); OPTIONAL
6436
+ `overlay` (still image, 0..1). FIRST role-based op with
6437
+ an OPTIONAL role — see `per_role_cardinality` for the
6438
+ machine-readable cardinality declaration (per ticket
6439
+ [`SlluxMBN`](https://trello.com/c/SlluxMBN) /
6440
+ ADR-0015). Reuses `base` + `overlay` role values
6441
+ already declared for `image_watermark` / `audio_overlay`.
6442
+ - `video_watermark`: REQUIRED; values `base` (the source
6443
+ video) or `overlay` (the watermark image). Exactly one
6444
+ of each per job — `per_role_cardinality { base: 1/1,
6445
+ overlay: 1/1 }`. First non-introductory adoption of the
6446
+ `per_role_cardinality` vocab (per ticket
6447
+ [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) /
6448
+ ADR-0013). `video_text_watermark` is single-input (no
6449
+ `role` field — text comes from options).
6239
6450
  - `merge` / `archive`: omit (all inputs share the same role).
6240
6451
 
6241
6452
  `text_watermark` is single-input via `JobDefinition.source`
@@ -6867,7 +7078,9 @@ components:
6867
7078
  UploadProbeResponse:
6868
7079
  type: object
6869
7080
  description: |
6870
- Response body for `POST /api/uploads/{id}/probe` per ticket
7081
+ Payload schema carried on the `data` field of
7082
+ `UploadProbeSuccessEnvelope` returned by
7083
+ `POST /api/uploads/{id}/probe`, per ticket
6871
7084
  [I28 `KbVAnGCm`](https://trello.com/c/KbVAnGCm). Designed
6872
7085
  so SDKs can compile a `client.preflight_clips([file_ids])`
6873
7086
  helper into N parallel probes and aggregate by
@@ -6888,6 +7101,29 @@ components:
6888
7101
  processing_class_pre_assignment:
6889
7102
  $ref: '#/components/schemas/UploadProbeProcessingClass'
6890
7103
 
7104
+ UploadProbeSuccessEnvelope:
7105
+ type: object
7106
+ description: |
7107
+ Success envelope wrapping `UploadProbeResponse` on
7108
+ `POST /api/uploads/{id}/probe` 200 responses, per ticket
7109
+ [`9XlWEnZU`](https://trello.com/c/9XlWEnZU). Mirrors the
7110
+ spec-wide `*SuccessEnvelope` convention (`{success: true,
7111
+ data: <payload>}`) used by every other 2xx endpoint; the
7112
+ probe endpoint shipped during the v2.3 declared-but-pending
7113
+ phase missing the wrap. The API
7114
+ (`ApiResponseTrait::respondSuccess` in `compression_api`)
7115
+ already emits this shape — the envelope brings the contract
7116
+ in line with the wire.
7117
+ required:
7118
+ - success
7119
+ - data
7120
+ properties:
7121
+ success:
7122
+ type: boolean
7123
+ enum: [true]
7124
+ data:
7125
+ $ref: '#/components/schemas/UploadProbeResponse'
7126
+
6891
7127
  # ============================================
6892
7128
  # UPLOAD-SIDE GATING (per ticket I15-CONS F8.1)
6893
7129
  # ============================================
@@ -7479,7 +7715,207 @@ components:
7479
7715
  type: integer
7480
7716
  const: 100
7481
7717
  result:
7482
- $ref: '#/components/schemas/OperationResult'
7718
+ $ref: '#/components/schemas/SseOperationCompletionResult'
7719
+
7720
+ SseOperationCompletionResult:
7721
+ description: |
7722
+ Result payload carried on the SSE `operation.completed` event
7723
+ (`SseOperationCompletedData.result`). A 2-branch `oneOf` mirroring the
7724
+ single-output vs multi-output completion split of the AsyncAPI
7725
+ `OperationResult` union (per [ADR-0009](../docs/decisions/0009-multi-output-result-envelope.md)),
7726
+ projected into the client-facing (download-URL) shape rather than the
7727
+ S3-wire shape.
7728
+
7729
+ - **Single-output**: `SseSingleOutputCompletion` (allOf wrap of
7730
+ `OperationResult` + a `result_kind: "single"` discriminator field).
7731
+ `download_url` + `size_bytes`, optional `export_key` / `metrics`. Every
7732
+ operation that produces one canonical output.
7733
+ - **Multi-output**: `SseMultiOutputCompletionWithKind` (allOf wrap of
7734
+ `SseMultiOutputCompletion` + a `result_kind: "multi"` discriminator
7735
+ field). `outputs[]` + `total_output_size_bytes`. Used by convert
7736
+ PDF->image and future fan-out operations.
7737
+
7738
+ Failure is **not** a branch here — it is carried by the separate
7739
+ `operation.failed` event (`SseOperationFailedData`), unlike the AsyncAPI
7740
+ `OperationResult` which folds failure into the same union.
7741
+
7742
+ **Branch dispatch via `result_kind` discriminator.** The branches are
7743
+ disambiguated by an explicit `result_kind` field (`"single"` |
7744
+ `"multi"`) that the API SSE emitter populates. The wrapper allOf shape
7745
+ keeps the underlying `OperationResult` and `SseMultiOutputCompletion`
7746
+ schemas unchanged (they continue to be used elsewhere — REST polling,
7747
+ AsyncAPI Lambda→API — without the discriminator). The discriminator
7748
+ approach replaces the v2.15.1 bare-`$ref` design, which dispatched
7749
+ correctly at validation but generated TS deserialization code that
7750
+ checked camelCase property names against snake_case wire payloads —
7751
+ silent data-loss on every single-output completion. The
7752
+ discriminator-based dispatch reads the snake_case wire key directly
7753
+ (`switch (json['result_kind'])`), avoiding the case-mismatch bug
7754
+ entirely.
7755
+ oneOf:
7756
+ - $ref: '#/components/schemas/SseSingleOutputCompletion'
7757
+ - $ref: '#/components/schemas/SseMultiOutputCompletionWithKind'
7758
+ discriminator:
7759
+ propertyName: result_kind
7760
+ mapping:
7761
+ single: '#/components/schemas/SseSingleOutputCompletion'
7762
+ multi: '#/components/schemas/SseMultiOutputCompletionWithKind'
7763
+
7764
+ SseSingleOutputCompletion:
7765
+ description: |
7766
+ Single-output branch of `SseOperationCompletionResult` — wraps
7767
+ `OperationResult` with a `result_kind: "single"` discriminator field
7768
+ so the openapi-generator dispatch can route by wire-format key
7769
+ (`result_kind`) rather than by structural property presence.
7770
+ See `SseOperationCompletionResult` description for the rationale.
7771
+ allOf:
7772
+ - $ref: '#/components/schemas/OperationResult'
7773
+ - type: object
7774
+ required:
7775
+ - result_kind
7776
+ properties:
7777
+ result_kind:
7778
+ type: string
7779
+ enum: [single]
7780
+ description: |
7781
+ Discriminator. Always the literal `"single"` for this branch.
7782
+ Emitted by the API SSE serializer; consumed by
7783
+ `SseOperationCompletionResult` dispatch.
7784
+
7785
+ SseMultiOutputCompletionWithKind:
7786
+ description: |
7787
+ Multi-output branch of `SseOperationCompletionResult` — wraps
7788
+ `SseMultiOutputCompletion` with a `result_kind: "multi"` discriminator
7789
+ field. See `SseOperationCompletionResult` description for the
7790
+ rationale.
7791
+ allOf:
7792
+ - $ref: '#/components/schemas/SseMultiOutputCompletion'
7793
+ - type: object
7794
+ required:
7795
+ - result_kind
7796
+ properties:
7797
+ result_kind:
7798
+ type: string
7799
+ enum: [multi]
7800
+ description: |
7801
+ Discriminator. Always the literal `"multi"` for this branch.
7802
+ Emitted by the API SSE serializer; consumed by
7803
+ `SseOperationCompletionResult` dispatch.
7804
+
7805
+ SseMultiOutputCompletion:
7806
+ type: object
7807
+ description: |
7808
+ Multi-output completion body for the SSE `operation.completed` event.
7809
+ Per-output details plus an aggregate size, mirroring the AsyncAPI
7810
+ `MultiOutputCompletion` branch of `OperationResult` (per
7811
+ [ADR-0009](../docs/decisions/0009-multi-output-result-envelope.md)) in
7812
+ the client-facing (download-URL) projection.
7813
+ required:
7814
+ - outputs
7815
+ - total_output_size_bytes
7816
+ properties:
7817
+ outputs:
7818
+ type: array
7819
+ minItems: 1
7820
+ maxItems: 200
7821
+ description: |
7822
+ Per-output deliverables for a multi-output operation (e.g. convert
7823
+ PDF->image emits one entry per page). Consumers use `outputs.length`
7824
+ for the count — per ADR-0009 §D4 a denormalised `output_count` was
7825
+ deliberately rejected. `maxItems: 200` mirrors the AsyncAPI
7826
+ `OperationResult.outputs` transport bound.
7827
+ items:
7828
+ $ref: '#/components/schemas/SseMultiOutputResultEntry'
7829
+ total_output_size_bytes:
7830
+ type: integer
7831
+ format: int64
7832
+ minimum: 0
7833
+ description: |
7834
+ Aggregate size of all `outputs[]` in bytes. Equals
7835
+ `sum(outputs[].size_bytes)`. Per ADR-0009 §D4 this is denormalised
7836
+ against the per-entry sum; consumers SHOULD trust the per-entry sum
7837
+ if the two disagree (and log a warning).
7838
+ example: 786432
7839
+ metrics:
7840
+ type: object
7841
+ description: Operation-specific performance metrics (aggregate)
7842
+ properties:
7843
+ compression_ratio:
7844
+ type: number
7845
+ format: double
7846
+ description: Ratio of output size to input size (e.g. 0.45 = 55% reduction)
7847
+ duration_ms:
7848
+ type: integer
7849
+ description: Processing time in milliseconds
7850
+
7851
+ SseMultiOutputResultEntry:
7852
+ type: object
7853
+ description: |
7854
+ A single deliverable output file in an SSE multi-output
7855
+ `operation.completed` result (`SseMultiOutputCompletion.outputs[]`).
7856
+ This is the SSE-local, client-facing twin of the AsyncAPI
7857
+ `OperationResultOutputEntry` (which is S3-wire: `output_key`) and is
7858
+ deliberately **decoupled** from the REST `OperationDownload` schema — it
7859
+ carries `download_url` + `size_bytes` and the same `page_index` /
7860
+ `position` indexing model defined per
7861
+ [ADR-0009](../docs/decisions/0009-multi-output-result-envelope.md) §D2
7862
+ (`page_index` for PDF-page outputs, `position` for generic ordinals,
7863
+ mutually exclusive within an entry).
7864
+ required:
7865
+ - download_url
7866
+ - size_bytes
7867
+ oneOf:
7868
+ - title: PageIndexed
7869
+ description: PDF-page output (convert PDF->image).
7870
+ required: [page_index]
7871
+ not: { required: [position] }
7872
+ - title: PositionIndexed
7873
+ description: Generic ordinal output (frame strip, chapter split).
7874
+ required: [position]
7875
+ not: { required: [page_index] }
7876
+ - title: Unindexed
7877
+ description: |
7878
+ Output without an explicit indexing field. Reserved for future
7879
+ operations that index by something other than page/position.
7880
+ Schema-valid but not currently emitted by any operation.
7881
+ not:
7882
+ anyOf:
7883
+ - required: [page_index]
7884
+ - required: [position]
7885
+ properties:
7886
+ download_url:
7887
+ type: string
7888
+ format: uri
7889
+ description: Pre-signed download URL for this individual output file.
7890
+ size_bytes:
7891
+ type: integer
7892
+ format: int64
7893
+ minimum: 0
7894
+ description: |
7895
+ Size of this individual output file in bytes. `minimum: 0` mirrors
7896
+ the AsyncAPI `OperationResultOutputEntry.output_size_bytes` bound and
7897
+ keeps `total_output_size_bytes` (the sum of these) internally
7898
+ consistent.
7899
+ page_index:
7900
+ type: integer
7901
+ minimum: 1
7902
+ description: |
7903
+ 1-based page number for PDF-page fan-out outputs (convert
7904
+ PDF->image). Gapless within an operation (an N-page conversion
7905
+ emits `page_index` 1..N). Mutually exclusive with `position`.
7906
+ Absent on non-indexed outputs. Mirrors
7907
+ `OperationResultOutputEntry.page_index`. Per ADR-0009 §D2.
7908
+ example: 1
7909
+ position:
7910
+ type: integer
7911
+ minimum: 0
7912
+ description: |
7913
+ 0-based ordinal for non-PDF multi-output operations (e.g. frame
7914
+ strip, chapter split). Mutually exclusive with `page_index`.
7915
+ Absent on non-indexed outputs. Forward-looking — not emitted by any
7916
+ current operation; declared for parity with
7917
+ `OperationResultOutputEntry.position`. Per ADR-0009 §D2.
7918
+ example: 0
7483
7919
 
7484
7920
  SseOperationFailedData:
7485
7921
  type: object
@@ -7726,11 +8162,26 @@ components:
7726
8162
  $ref: '#/components/schemas/OperationInputModel'
7727
8163
  min_inputs:
7728
8164
  type: integer
7729
- description: Minimum number of inputs (multi-input operations only)
7730
- minimum: 2
8165
+ description: |
8166
+ Minimum number of inputs (multi-input operations only).
8167
+ `audio_to_video` declares `min_inputs: 1` (first
8168
+ role-based op with an optional role); all other
8169
+ role-based ops declare `min_inputs: 2`. Per
8170
+ `per_role_cardinality` semantics (ADR-0015), this value
8171
+ equals the sum of role-level minima.
8172
+ minimum: 1
7731
8173
  max_inputs:
7732
8174
  type: integer
7733
8175
  description: Maximum number of inputs (multi-input operations only)
8176
+ per_role_cardinality:
8177
+ $ref: '#/components/schemas/PerRoleCardinality'
8178
+ description: |
8179
+ Optional per-role input-count overlay for role-based
8180
+ multi-input operations. Per ticket
8181
+ [`SlluxMBN`](https://trello.com/c/SlluxMBN) / ADR-0015.
8182
+ Absent on operations whose role rules are still encoded
8183
+ in prose only (image_watermark, audio_overlay,
8184
+ custom_luma — per-op migration follow-ups).
7734
8185
  accepts_mixed_types:
7735
8186
  type: boolean
7736
8187
  description: Whether mixed MIME types are allowed (archive only)