@giveitsmaller/contracts 0.8.0 → 0.16.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 (453) hide show
  1. package/asyncapi/events.yaml +806 -173
  2. package/availability/availability.json +355 -98
  3. package/dist/asyncapi/Failure.d.ts +2 -0
  4. package/dist/asyncapi/LongFormJobMessage.d.ts +4 -3
  5. package/dist/asyncapi/LongFormOperationType.d.ts +5 -0
  6. package/dist/asyncapi/LongFormOperationType.js +6 -0
  7. package/dist/asyncapi/LongFormProcessingClass.d.ts +4 -0
  8. package/dist/asyncapi/LongFormProcessingClass.js +5 -0
  9. package/dist/asyncapi/MultiOutputCompletion.d.ts +2 -0
  10. package/dist/asyncapi/{NotificationsOperationsQueue.d.ts → NotificationsJobsQueue.d.ts} +2 -2
  11. package/dist/asyncapi/OperationResultMetadata.d.ts +4 -0
  12. package/dist/asyncapi/OperationResultMetadata.js +1 -0
  13. package/dist/asyncapi/OperationType.d.ts +2 -1
  14. package/dist/asyncapi/OperationType.js +1 -0
  15. package/dist/asyncapi/PageIndexed.d.ts +1 -0
  16. package/dist/asyncapi/PositionIndexed.d.ts +1 -0
  17. package/dist/asyncapi/SingleOutputCompletion.d.ts +2 -0
  18. package/dist/asyncapi/SourceEntry.d.ts +4 -0
  19. package/dist/asyncapi/Unindexed.d.ts +1 -0
  20. package/dist/asyncapi/index.d.ts +4 -2
  21. package/dist/asyncapi/index.js +2 -1
  22. package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +2 -2
  23. package/dist/openapi/models/AudioWatermarkDecodeRequest.js +2 -2
  24. package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +2 -2
  25. package/dist/openapi/models/AudioWatermarkDecodeResponse.js +2 -2
  26. package/dist/openapi/models/AuthErrorResponse.d.ts +13 -2
  27. package/dist/openapi/models/AuthErrorResponse.js +2 -2
  28. package/dist/openapi/models/AuthErrorType.d.ts +2 -2
  29. package/dist/openapi/models/AuthErrorType.js +2 -2
  30. package/dist/openapi/models/AuthRejectionEnvelope.d.ts +126 -0
  31. package/dist/openapi/models/AuthRejectionEnvelope.js +72 -0
  32. package/dist/openapi/models/AvailabilityValue.d.ts +2 -2
  33. package/dist/openapi/models/AvailabilityValue.js +2 -2
  34. package/dist/openapi/models/BalanceExhaustedResponse.d.ts +13 -2
  35. package/dist/openapi/models/BalanceExhaustedResponse.js +2 -2
  36. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +2 -2
  37. package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +2 -2
  38. package/dist/openapi/models/CallbackEventType.d.ts +2 -2
  39. package/dist/openapi/models/CallbackEventType.js +2 -2
  40. package/dist/openapi/models/ChangePasswordRequest.d.ts +38 -0
  41. package/dist/openapi/models/ChangePasswordRequest.js +47 -0
  42. package/dist/openapi/models/CompositionPlan.d.ts +72 -0
  43. package/dist/openapi/models/CompositionPlan.js +53 -0
  44. package/dist/openapi/models/CompositionPlanJob.d.ts +39 -0
  45. package/dist/openapi/models/CompositionPlanJob.js +48 -0
  46. package/dist/openapi/models/CompositionPlanOperation.d.ts +116 -0
  47. package/dist/openapi/models/CompositionPlanOperation.js +62 -0
  48. package/dist/openapi/models/ConfirmEmailChange200Response.d.ts +46 -0
  49. package/dist/openapi/models/ConfirmEmailChange200Response.js +54 -0
  50. package/dist/openapi/models/ConfirmEmailChange200ResponseData.d.ts +32 -0
  51. package/dist/openapi/models/ConfirmEmailChange200ResponseData.js +43 -0
  52. package/dist/openapi/models/ConfirmEmailChangeRequest.d.ts +32 -0
  53. package/dist/openapi/models/ConfirmEmailChangeRequest.js +43 -0
  54. package/dist/openapi/models/ConnectionSource.d.ts +2 -2
  55. package/dist/openapi/models/ConnectionSource.js +2 -2
  56. package/dist/openapi/models/ContactRequest.d.ts +2 -2
  57. package/dist/openapi/models/ContactRequest.js +2 -2
  58. package/dist/openapi/models/ContactSubject.d.ts +2 -2
  59. package/dist/openapi/models/ContactSubject.js +2 -2
  60. package/dist/openapi/models/ContactValidationErrorResponse.d.ts +2 -2
  61. package/dist/openapi/models/ContactValidationErrorResponse.js +2 -2
  62. package/dist/openapi/models/CreateApiKey201Response.d.ts +46 -0
  63. package/dist/openapi/models/CreateApiKey201Response.js +54 -0
  64. package/dist/openapi/models/CreateApiKey201ResponseData.d.ts +56 -0
  65. package/dist/openapi/models/CreateApiKey201ResponseData.js +59 -0
  66. package/dist/openapi/models/CreateApiKeyRequest.d.ts +32 -0
  67. package/dist/openapi/models/CreateApiKeyRequest.js +43 -0
  68. package/dist/openapi/models/CreateExternalImport403Response.d.ts +2 -2
  69. package/dist/openapi/models/CreateExternalImport403Response.js +2 -2
  70. package/dist/openapi/models/CreateExternalImport422Response.d.ts +7 -3
  71. package/dist/openapi/models/CreateExternalImport422Response.js +18 -22
  72. package/dist/openapi/models/CreateWorkflow422Response.d.ts +11 -3
  73. package/dist/openapi/models/CreateWorkflow422Response.js +28 -36
  74. package/dist/openapi/models/CreditTransaction.d.ts +2 -2
  75. package/dist/openapi/models/CreditTransaction.js +2 -2
  76. package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +2 -2
  77. package/dist/openapi/models/CreditTransactionSourceBucket.js +2 -2
  78. package/dist/openapi/models/CreditsBalanceResponse.d.ts +2 -2
  79. package/dist/openapi/models/CreditsBalanceResponse.js +2 -2
  80. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +2 -2
  81. package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +2 -2
  82. package/dist/openapi/models/CreditsUsageResponse.d.ts +2 -2
  83. package/dist/openapi/models/CreditsUsageResponse.js +2 -2
  84. package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +2 -2
  85. package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +2 -2
  86. package/dist/openapi/models/Delivery.d.ts +2 -2
  87. package/dist/openapi/models/Delivery.js +2 -2
  88. package/dist/openapi/models/DeliveryOutputRef.d.ts +9 -2
  89. package/dist/openapi/models/DeliveryOutputRef.js +2 -2
  90. package/dist/openapi/models/DeliveryPlan.d.ts +2 -2
  91. package/dist/openapi/models/DeliveryPlan.js +2 -2
  92. package/dist/openapi/models/DeliveryPlanOutput.d.ts +17 -2
  93. package/dist/openapi/models/DeliveryPlanOutput.js +4 -2
  94. package/dist/openapi/models/DeliveryPlanReason.d.ts +2 -2
  95. package/dist/openapi/models/DeliveryPlanReason.js +2 -2
  96. package/dist/openapi/models/DeliverySelection.d.ts +6 -4
  97. package/dist/openapi/models/DeliverySelection.js +2 -2
  98. package/dist/openapi/models/EmptySuccessEnvelope.d.ts +58 -0
  99. package/dist/openapi/models/EmptySuccessEnvelope.js +53 -0
  100. package/dist/openapi/models/EndpointProjection.d.ts +12 -3
  101. package/dist/openapi/models/EndpointProjection.js +2 -2
  102. package/dist/openapi/models/ErrorEnvelope.d.ts +13 -2
  103. package/dist/openapi/models/ErrorEnvelope.js +2 -2
  104. package/dist/openapi/models/EstimateQuality.d.ts +2 -2
  105. package/dist/openapi/models/EstimateQuality.js +2 -2
  106. package/dist/openapi/models/EstimateRange.d.ts +2 -2
  107. package/dist/openapi/models/EstimateRange.js +2 -2
  108. package/dist/openapi/models/ExternalDestination.d.ts +2 -2
  109. package/dist/openapi/models/ExternalDestination.js +2 -2
  110. package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +2 -2
  111. package/dist/openapi/models/ExternalImportCreatedResponse.js +2 -2
  112. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +2 -2
  113. package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +2 -2
  114. package/dist/openapi/models/ExternalImportRequest.d.ts +2 -2
  115. package/dist/openapi/models/ExternalImportRequest.js +2 -2
  116. package/dist/openapi/models/ExternalImportToken.d.ts +2 -2
  117. package/dist/openapi/models/ExternalImportToken.js +2 -2
  118. package/dist/openapi/models/ExternalSource.d.ts +2 -2
  119. package/dist/openapi/models/ExternalSource.js +2 -2
  120. package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +19 -9
  121. package/dist/openapi/models/FeatureNotAvailableResponse.js +2 -2
  122. package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +13 -2
  123. package/dist/openapi/models/FeatureTierRestrictedResponse.js +2 -2
  124. package/dist/openapi/models/FeatureViolation.d.ts +2 -2
  125. package/dist/openapi/models/FeatureViolation.js +2 -2
  126. package/dist/openapi/models/ForgotPasswordRequest.d.ts +32 -0
  127. package/dist/openapi/models/ForgotPasswordRequest.js +43 -0
  128. package/dist/openapi/models/ImageEncodeCapabilities.d.ts +65 -0
  129. package/dist/openapi/models/ImageEncodeCapabilities.js +55 -0
  130. package/dist/openapi/models/JobDefinition.d.ts +27 -8
  131. package/dist/openapi/models/JobDefinition.js +2 -2
  132. package/dist/openapi/models/JobDownload.d.ts +2 -2
  133. package/dist/openapi/models/JobDownload.js +2 -2
  134. package/dist/openapi/models/JobInputV2.d.ts +13 -9
  135. package/dist/openapi/models/JobInputV2.js +5 -5
  136. package/dist/openapi/models/JobMediaClass.d.ts +34 -0
  137. package/dist/openapi/models/JobMediaClass.js +52 -0
  138. package/dist/openapi/models/JobOutputSource.d.ts +2 -2
  139. package/dist/openapi/models/JobOutputSource.js +2 -2
  140. package/dist/openapi/models/JobResponse.d.ts +24 -2
  141. package/dist/openapi/models/JobResponse.js +5 -2
  142. package/dist/openapi/models/JobStatus.d.ts +2 -2
  143. package/dist/openapi/models/JobStatus.js +2 -2
  144. package/dist/openapi/models/JobType.d.ts +2 -2
  145. package/dist/openapi/models/JobType.js +2 -2
  146. package/dist/openapi/models/LivenessResponse.d.ts +2 -2
  147. package/dist/openapi/models/LivenessResponse.js +2 -2
  148. package/dist/openapi/models/LoginUser200Response.d.ts +2 -2
  149. package/dist/openapi/models/LoginUser200Response.js +2 -2
  150. package/dist/openapi/models/LoginUser200ResponseData.d.ts +2 -2
  151. package/dist/openapi/models/LoginUser200ResponseData.js +2 -2
  152. package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +2 -2
  153. package/dist/openapi/models/LoginUser200ResponseDataUser.js +2 -2
  154. package/dist/openapi/models/LoginUserRequest.d.ts +2 -2
  155. package/dist/openapi/models/LoginUserRequest.js +2 -2
  156. package/dist/openapi/models/MetadataResponse.d.ts +2 -2
  157. package/dist/openapi/models/MetadataResponse.js +2 -2
  158. package/dist/openapi/models/MetadataResponseDimensions.d.ts +2 -2
  159. package/dist/openapi/models/MetadataResponseDimensions.js +2 -2
  160. package/dist/openapi/models/MetadataResponseExif.d.ts +2 -2
  161. package/dist/openapi/models/MetadataResponseExif.js +2 -2
  162. package/dist/openapi/models/MetadataResponseExifGps.d.ts +2 -2
  163. package/dist/openapi/models/MetadataResponseExifGps.js +2 -2
  164. package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +2 -2
  165. package/dist/openapi/models/MetadataSuccessEnvelope.js +2 -2
  166. package/dist/openapi/models/MimeGroupSchema.d.ts +37 -2
  167. package/dist/openapi/models/MimeGroupSchema.js +5 -2
  168. package/dist/openapi/models/MultiInputSource.d.ts +41 -0
  169. package/dist/openapi/models/MultiInputSource.js +52 -0
  170. package/dist/openapi/models/MultipartCompleteRequest.d.ts +2 -2
  171. package/dist/openapi/models/MultipartCompleteRequest.js +2 -2
  172. package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +2 -2
  173. package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +2 -2
  174. package/dist/openapi/models/MultipartCompleteResponse.d.ts +2 -2
  175. package/dist/openapi/models/MultipartCompleteResponse.js +2 -2
  176. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +2 -2
  177. package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +2 -2
  178. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +2 -2
  179. package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +2 -2
  180. package/dist/openapi/models/MultipartInitiateResponse.d.ts +2 -2
  181. package/dist/openapi/models/MultipartInitiateResponse.js +2 -2
  182. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +2 -2
  183. package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +2 -2
  184. package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +2 -2
  185. package/dist/openapi/models/MultipartKeepaliveResponse.js +2 -2
  186. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +2 -2
  187. package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +2 -2
  188. package/dist/openapi/models/MultipartPartListing.d.ts +2 -2
  189. package/dist/openapi/models/MultipartPartListing.js +2 -2
  190. package/dist/openapi/models/MultipartPresignRequest.d.ts +2 -2
  191. package/dist/openapi/models/MultipartPresignRequest.js +2 -2
  192. package/dist/openapi/models/MultipartPresignResponse.d.ts +2 -2
  193. package/dist/openapi/models/MultipartPresignResponse.js +2 -2
  194. package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +2 -2
  195. package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +2 -2
  196. package/dist/openapi/models/MultipartStatusResponse.d.ts +2 -2
  197. package/dist/openapi/models/MultipartStatusResponse.js +2 -2
  198. package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +2 -2
  199. package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +2 -2
  200. package/dist/openapi/models/OperationDefinition.d.ts +27 -2
  201. package/dist/openapi/models/OperationDefinition.js +11 -2
  202. package/dist/openapi/models/OperationDownload.d.ts +30 -2
  203. package/dist/openapi/models/OperationDownload.js +6 -2
  204. package/dist/openapi/models/OperationInputModel.d.ts +3 -3
  205. package/dist/openapi/models/OperationInputModel.js +3 -3
  206. package/dist/openapi/models/OperationResponse.d.ts +18 -2
  207. package/dist/openapi/models/OperationResponse.js +5 -2
  208. package/dist/openapi/models/OperationResult.d.ts +2 -2
  209. package/dist/openapi/models/OperationResult.js +2 -2
  210. package/dist/openapi/models/OperationResultMetadata.d.ts +48 -0
  211. package/dist/openapi/models/OperationResultMetadata.js +41 -0
  212. package/dist/openapi/models/OperationResultMetrics.d.ts +16 -3
  213. package/dist/openapi/models/OperationResultMetrics.js +2 -2
  214. package/dist/openapi/models/OperationSchemaDefinition.d.ts +6 -5
  215. package/dist/openapi/models/OperationSchemaDefinition.js +2 -2
  216. package/dist/openapi/models/OperationStatus.d.ts +2 -2
  217. package/dist/openapi/models/OperationStatus.js +2 -2
  218. package/dist/openapi/models/OperationType.d.ts +19 -14
  219. package/dist/openapi/models/OperationType.js +20 -15
  220. package/dist/openapi/models/OperationsSchemaResponse.d.ts +39 -4
  221. package/dist/openapi/models/OperationsSchemaResponse.js +8 -2
  222. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +55 -0
  223. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +42 -0
  224. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +40 -0
  225. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +45 -0
  226. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +45 -0
  227. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +43 -0
  228. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +33 -0
  229. package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +42 -0
  230. package/dist/openapi/models/OptionSchema.d.ts +2 -2
  231. package/dist/openapi/models/OptionSchema.js +2 -2
  232. package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +2 -2
  233. package/dist/openapi/models/PerRoleCardinalityEntry.js +2 -2
  234. package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +2 -2
  235. package/dist/openapi/models/PerValueAvailabilityEntry.js +2 -2
  236. package/dist/openapi/models/PresignedUrlPart.d.ts +2 -2
  237. package/dist/openapi/models/PresignedUrlPart.js +2 -2
  238. package/dist/openapi/models/ProbePendingResponse.d.ts +20 -8
  239. package/dist/openapi/models/ProbePendingResponse.js +2 -2
  240. package/dist/openapi/models/ProcessingClass.d.ts +2 -2
  241. package/dist/openapi/models/ProcessingClass.js +2 -2
  242. package/dist/openapi/models/ProcessingClassBandViolation.d.ts +2 -2
  243. package/dist/openapi/models/ProcessingClassBandViolation.js +2 -2
  244. package/dist/openapi/models/ProcessingClassConstraints.d.ts +69 -0
  245. package/dist/openapi/models/ProcessingClassConstraints.js +49 -0
  246. package/dist/openapi/models/ProcessingClassEntry.d.ts +93 -0
  247. package/dist/openapi/models/ProcessingClassEntry.js +57 -0
  248. package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +19 -6
  249. package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +2 -2
  250. package/dist/openapi/models/ProcessingClassHint.d.ts +2 -2
  251. package/dist/openapi/models/ProcessingClassHint.js +2 -2
  252. package/dist/openapi/models/ProcessingClassReason.d.ts +2 -2
  253. package/dist/openapi/models/ProcessingClassReason.js +2 -2
  254. package/dist/openapi/models/ProcessingClassRejectReason.d.ts +2 -2
  255. package/dist/openapi/models/ProcessingClassRejectReason.js +2 -2
  256. package/dist/openapi/models/ProcessingPlan.d.ts +2 -2
  257. package/dist/openapi/models/ProcessingPlan.js +2 -2
  258. package/dist/openapi/models/ProcessingPlanJob.d.ts +2 -2
  259. package/dist/openapi/models/ProcessingPlanJob.js +2 -2
  260. package/dist/openapi/models/ReEncodeDecision.d.ts +2 -2
  261. package/dist/openapi/models/ReEncodeDecision.js +2 -2
  262. package/dist/openapi/models/ReadinessResponse.d.ts +2 -2
  263. package/dist/openapi/models/ReadinessResponse.js +2 -2
  264. package/dist/openapi/models/RegisterUser422Response.d.ts +27 -0
  265. package/dist/openapi/models/RegisterUser422Response.js +47 -0
  266. package/dist/openapi/models/RegisterUserRequest.d.ts +38 -0
  267. package/dist/openapi/models/RegisterUserRequest.js +47 -0
  268. package/dist/openapi/models/ResetPasswordRequest.d.ts +38 -0
  269. package/dist/openapi/models/ResetPasswordRequest.js +47 -0
  270. package/dist/openapi/models/ResponseEnvelope.d.ts +2 -2
  271. package/dist/openapi/models/ResponseEnvelope.js +2 -2
  272. package/dist/openapi/models/RetryResponse.d.ts +2 -2
  273. package/dist/openapi/models/RetryResponse.js +2 -2
  274. package/dist/openapi/models/RetrySuccessEnvelope.d.ts +2 -2
  275. package/dist/openapi/models/RetrySuccessEnvelope.js +2 -2
  276. package/dist/openapi/models/SseCompletionBase.d.ts +2 -2
  277. package/dist/openapi/models/SseCompletionBase.js +2 -2
  278. package/dist/openapi/models/SseEventType.d.ts +2 -2
  279. package/dist/openapi/models/SseEventType.js +2 -2
  280. package/dist/openapi/models/SseJobCompletedData.d.ts +2 -2
  281. package/dist/openapi/models/SseJobCompletedData.js +2 -2
  282. package/dist/openapi/models/SseJobFailedData.d.ts +2 -2
  283. package/dist/openapi/models/SseJobFailedData.js +2 -2
  284. package/dist/openapi/models/SseMultiOutputCompletion.d.ts +2 -2
  285. package/dist/openapi/models/SseMultiOutputCompletion.js +2 -2
  286. package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +2 -2
  287. package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +2 -2
  288. package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +2 -2
  289. package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +2 -2
  290. package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +2 -2
  291. package/dist/openapi/models/SseMultiOutputResultEntry.js +2 -2
  292. package/dist/openapi/models/SseOperationCompletedData.d.ts +17 -3
  293. package/dist/openapi/models/SseOperationCompletedData.js +2 -2
  294. package/dist/openapi/models/SseOperationCompletionResult.d.ts +2 -2
  295. package/dist/openapi/models/SseOperationCompletionResult.js +2 -2
  296. package/dist/openapi/models/SseOperationFailedData.d.ts +2 -2
  297. package/dist/openapi/models/SseOperationFailedData.js +2 -2
  298. package/dist/openapi/models/SseOperationProgressData.d.ts +4 -3
  299. package/dist/openapi/models/SseOperationProgressData.js +2 -2
  300. package/dist/openapi/models/SseSingleOutputCompletion.d.ts +2 -2
  301. package/dist/openapi/models/SseSingleOutputCompletion.js +2 -2
  302. package/dist/openapi/models/SseWorkflowTerminalData.d.ts +2 -2
  303. package/dist/openapi/models/SseWorkflowTerminalData.js +2 -2
  304. package/dist/openapi/models/TierRestrictionKind.d.ts +2 -2
  305. package/dist/openapi/models/TierRestrictionKind.js +2 -2
  306. package/dist/openapi/models/TierRestrictionResponse.d.ts +13 -2
  307. package/dist/openapi/models/TierRestrictionResponse.js +2 -2
  308. package/dist/openapi/models/UpdateProfile200Response.d.ts +46 -0
  309. package/dist/openapi/models/UpdateProfile200Response.js +54 -0
  310. package/dist/openapi/models/UpdateProfile200ResponseData.d.ts +71 -0
  311. package/dist/openapi/models/UpdateProfile200ResponseData.js +67 -0
  312. package/dist/openapi/models/UpdateProfile422Response.d.ts +27 -0
  313. package/dist/openapi/models/UpdateProfile422Response.js +47 -0
  314. package/dist/openapi/models/UpdateProfileRequest.d.ts +44 -0
  315. package/dist/openapi/models/UpdateProfileRequest.js +47 -0
  316. package/dist/openapi/models/UploadConstraintsApplied.d.ts +2 -2
  317. package/dist/openapi/models/UploadConstraintsApplied.js +2 -2
  318. package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +13 -2
  319. package/dist/openapi/models/UploadDurationExceedsTierResponse.js +2 -2
  320. package/dist/openapi/models/UploadFile403Response.d.ts +2 -2
  321. package/dist/openapi/models/UploadFile403Response.js +2 -2
  322. package/dist/openapi/models/UploadFile422Response.d.ts +2 -2
  323. package/dist/openapi/models/UploadFile422Response.js +2 -2
  324. package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +2 -2
  325. package/dist/openapi/models/UploadProbeMediaMetadata.js +2 -2
  326. package/dist/openapi/models/UploadProbeProcessingClass.d.ts +2 -2
  327. package/dist/openapi/models/UploadProbeProcessingClass.js +2 -2
  328. package/dist/openapi/models/UploadProbeResponse.d.ts +2 -2
  329. package/dist/openapi/models/UploadProbeResponse.js +2 -2
  330. package/dist/openapi/models/UploadProbeStatus.d.ts +2 -2
  331. package/dist/openapi/models/UploadProbeStatus.js +2 -2
  332. package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +2 -2
  333. package/dist/openapi/models/UploadProbeSuccessEnvelope.js +2 -2
  334. package/dist/openapi/models/UploadResponse.d.ts +2 -2
  335. package/dist/openapi/models/UploadResponse.js +2 -2
  336. package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +13 -2
  337. package/dist/openapi/models/UploadSizeExceedsTierResponse.js +2 -2
  338. package/dist/openapi/models/UploadSource.d.ts +2 -2
  339. package/dist/openapi/models/UploadSource.js +2 -2
  340. package/dist/openapi/models/UploadSuccessEnvelope.d.ts +2 -2
  341. package/dist/openapi/models/UploadSuccessEnvelope.js +2 -2
  342. package/dist/openapi/models/UploadThresholds.d.ts +2 -2
  343. package/dist/openapi/models/UploadThresholds.js +2 -2
  344. package/dist/openapi/models/UserTier.d.ts +2 -2
  345. package/dist/openapi/models/UserTier.js +2 -2
  346. package/dist/openapi/models/ValidationErrorEnvelope.d.ts +32 -5
  347. package/dist/openapi/models/ValidationErrorEnvelope.js +12 -2
  348. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +2 -2
  349. package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +2 -2
  350. package/dist/openapi/models/VerifyEmailRequest.d.ts +32 -0
  351. package/dist/openapi/models/VerifyEmailRequest.js +43 -0
  352. package/dist/openapi/models/WarningType.d.ts +2 -2
  353. package/dist/openapi/models/WarningType.js +2 -2
  354. package/dist/openapi/models/WebhookOperationContext.d.ts +2 -2
  355. package/dist/openapi/models/WebhookOperationContext.js +2 -2
  356. package/dist/openapi/models/WebhookPayload.d.ts +2 -2
  357. package/dist/openapi/models/WebhookPayload.js +2 -2
  358. package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +2 -2
  359. package/dist/openapi/models/WorkflowCancelBillingEffect.js +2 -2
  360. package/dist/openapi/models/WorkflowCancelResponse.d.ts +2 -2
  361. package/dist/openapi/models/WorkflowCancelResponse.js +2 -2
  362. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +2 -2
  363. package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +2 -2
  364. package/dist/openapi/models/WorkflowCreateRequest.d.ts +64 -4
  365. package/dist/openapi/models/WorkflowCreateRequest.js +10 -6
  366. package/dist/openapi/models/WorkflowCreateResponse.d.ts +24 -2
  367. package/dist/openapi/models/WorkflowCreateResponse.js +5 -2
  368. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +2 -2
  369. package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +2 -2
  370. package/dist/openapi/models/WorkflowDownloadResponse.d.ts +2 -2
  371. package/dist/openapi/models/WorkflowDownloadResponse.js +2 -2
  372. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +2 -2
  373. package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +2 -2
  374. package/dist/openapi/models/WorkflowEdge.d.ts +2 -2
  375. package/dist/openapi/models/WorkflowEdge.js +2 -2
  376. package/dist/openapi/models/WorkflowExpiredResponse.d.ts +13 -2
  377. package/dist/openapi/models/WorkflowExpiredResponse.js +2 -2
  378. package/dist/openapi/models/WorkflowListResponse.d.ts +50 -0
  379. package/dist/openapi/models/WorkflowListResponse.js +50 -0
  380. package/dist/openapi/models/WorkflowListSuccessEnvelope.d.ts +46 -0
  381. package/dist/openapi/models/WorkflowListSuccessEnvelope.js +54 -0
  382. package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +2 -2
  383. package/dist/openapi/models/WorkflowPauseRequiredAction.js +2 -2
  384. package/dist/openapi/models/WorkflowPausedDetail.d.ts +2 -2
  385. package/dist/openapi/models/WorkflowPausedDetail.js +2 -2
  386. package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +2 -2
  387. package/dist/openapi/models/WorkflowPausedDetailLinks.js +2 -2
  388. package/dist/openapi/models/WorkflowProcessing.d.ts +2 -2
  389. package/dist/openapi/models/WorkflowProcessing.js +2 -2
  390. package/dist/openapi/models/WorkflowResumeResponse.d.ts +2 -2
  391. package/dist/openapi/models/WorkflowResumeResponse.js +2 -2
  392. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +2 -2
  393. package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +2 -2
  394. package/dist/openapi/models/WorkflowSource.d.ts +7 -4
  395. package/dist/openapi/models/WorkflowSource.js +2 -2
  396. package/dist/openapi/models/WorkflowStatus.d.ts +2 -2
  397. package/dist/openapi/models/WorkflowStatus.js +2 -2
  398. package/dist/openapi/models/WorkflowStatusResponse.d.ts +21 -2
  399. package/dist/openapi/models/WorkflowStatusResponse.js +5 -2
  400. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +2 -2
  401. package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +2 -2
  402. package/dist/openapi/models/WorkflowSummary.d.ts +60 -0
  403. package/dist/openapi/models/WorkflowSummary.js +57 -0
  404. package/dist/openapi/models/WorkflowSummaryJob.d.ts +57 -0
  405. package/dist/openapi/models/WorkflowSummaryJob.js +57 -0
  406. package/dist/openapi/models/WorkflowWarning.d.ts +2 -2
  407. package/dist/openapi/models/WorkflowWarning.js +2 -2
  408. package/dist/openapi/models/WorkflowWarningSeverity.d.ts +2 -2
  409. package/dist/openapi/models/WorkflowWarningSeverity.js +2 -2
  410. package/dist/openapi/models/index.d.ts +35 -1
  411. package/dist/openapi/models/index.js +35 -1
  412. package/dist/openapi/runtime.d.ts +2 -2
  413. package/dist/openapi/runtime.js +2 -2
  414. package/dist/operations/audio_to_video.metadata.js +1 -1
  415. package/dist/operations/compress.d.ts +0 -9
  416. package/dist/operations/compress.js +0 -6
  417. package/dist/operations/compress.metadata.js +4 -12
  418. package/dist/operations/index.d.ts +3 -0
  419. package/dist/operations/index.js +3 -0
  420. package/dist/operations/merge.d.ts +4 -0
  421. package/dist/operations/merge.metadata.js +12 -3
  422. package/dist/operations/passthrough.metadata.d.ts +2 -0
  423. package/dist/operations/passthrough.metadata.js +6 -0
  424. package/dist/operations/render_variants.d.ts +24 -0
  425. package/dist/operations/render_variants.js +14 -0
  426. package/dist/operations/render_variants.metadata.d.ts +2 -0
  427. package/dist/operations/render_variants.metadata.js +18 -0
  428. package/dist/operations/split.d.ts +8 -1
  429. package/dist/operations/split.js +5 -0
  430. package/dist/operations/split.metadata.js +22 -5
  431. package/dist/operations/video_watermark.metadata.js +2 -2
  432. package/openapi/api.yaml +2566 -288
  433. package/operations/schemas/archive.yaml +1 -1
  434. package/operations/schemas/audio_overlay.yaml +29 -13
  435. package/operations/schemas/audio_to_video.yaml +12 -9
  436. package/operations/schemas/audio_watermark.yaml +18 -16
  437. package/operations/schemas/compress.yaml +34 -32
  438. package/operations/schemas/custom_luma.yaml +21 -7
  439. package/operations/schemas/image_watermark.yaml +22 -7
  440. package/operations/schemas/merge.yaml +94 -41
  441. package/operations/schemas/passthrough.yaml +49 -0
  442. package/operations/schemas/render_variants.yaml +117 -0
  443. package/operations/schemas/split.yaml +76 -15
  444. package/operations/schemas/text_watermark.yaml +6 -6
  445. package/operations/schemas/thumbnail.yaml +1 -1
  446. package/operations/schemas/video_text_watermark.yaml +2 -2
  447. package/operations/schemas/video_watermark.yaml +20 -9
  448. package/package.json +3 -1
  449. package/dist/asyncapi/AnonymousSchema_253.d.ts +0 -5
  450. package/dist/asyncapi/AnonymousSchema_253.js +0 -6
  451. package/dist/openapi/models/LogoutUser200Response.d.ts +0 -50
  452. package/dist/openapi/models/LogoutUser200Response.js +0 -53
  453. /package/dist/asyncapi/{NotificationsOperationsQueue.js → NotificationsJobsQueue.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  asyncapi: 3.0.0
2
2
  info:
3
3
  title: GISL Compression Events
4
- version: 3.3.0
4
+ version: 3.18.0
5
5
  description: |
6
6
  Asynchronous event contracts for the GISL (Give It Smaller) compression service.
7
7
 
@@ -21,16 +21,21 @@ info:
21
21
  video_watermark, video_text_watermark, split). Filter attribute:
22
22
  `operation_type`. Subscriptions: one queue per operation type,
23
23
  plus four thumbnail sub-type queues during the migration window.
24
- `custom_luma`, `audio_overlay`, `audio_watermark`,
25
- `audio_to_video`, `video_watermark`, `video_text_watermark`, and
26
- `split` are `availability: planned` (per
27
- [I29](https://trello.com/c/EPUE5Vs1) +
24
+ `custom_luma`, `audio_overlay`, `audio_watermark`, and
25
+ `video_text_watermark` are `availability: planned`
26
+ (per [I29](https://trello.com/c/EPUE5Vs1) +
28
27
  [I19](https://trello.com/c/Xr3Z4GBF) +
29
28
  [I20](https://trello.com/c/omiCq7Vn) +
30
- [`SlluxMBN`](https://trello.com/c/SlluxMBN) +
31
- [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) +
32
- [`vKI0CFDu`](https://trello.com/c/vKI0CFDu)) their queues are
33
- declared but receive no traffic until Lambda ships.
29
+ [`4NrRPCgh`](https://trello.com/c/4NrRPCgh)) — their queues are
30
+ declared but receive no traffic until Lambda ships. `split` is
31
+ `availability: beta` for its `audio` and `video` mime_groups
32
+ (workers live on staging [`vKI0CFDu`](https://trello.com/c/vKI0CFDu);
33
+ video short-form only — `long_form` / `split-video-fargate` stays
34
+ planned); its `image_gif` and `document_pdf` mime_groups stay
35
+ `availability: planned`.
36
+ `audio_to_video` and `video_watermark` are `availability: beta`
37
+ (Wave A activation [`c3uthIP4`](https://trello.com/c/c3uthIP4) —
38
+ backends live; the API accepts + publishes, traffic flows).
34
39
  `audio_watermark` additionally requires `enterprise` tier.
35
40
 
36
41
  **Publisher branching rule** (implemented in `compression_api`'s
@@ -54,15 +59,17 @@ info:
54
59
  **Thumbnail migration window.** The terraform topology has both the
55
60
  legacy `ops-thumbnail` queue and four new sub-type queues
56
61
  (`ops-thumbnail-{image,video,document,office}`) live simultaneously.
57
- The API publisher currently emits the legacy `operation_type=thumbnail`
58
- only; adoption of the four sub-type values (`thumbnail_image`,
59
- `thumbnail_video`, `thumbnail_document`, `thumbnail_office`) is a
60
- follow-up API PR. Both routing targets are documented in this contract
61
- because both are valid during the migration.
62
+ The API publisher emits the four sub-type values (`thumbnail_image`,
63
+ `thumbnail_video`, `thumbnail_document`, `thumbnail_office`) on the
64
+ SNS `operation_type` attribute, resolved from each operation's
65
+ effective input MIME; the legacy `operation_type=thumbnail` attribute
66
+ is retained as a valid routing target during the migration window but
67
+ is no longer emitted. Both routing targets are documented in this
68
+ contract because both remain valid during the migration.
62
69
 
63
70
  **Notifications (Lambda -> API).** Lambda functions publish progress
64
71
  and result notifications to the FIFO SNS topic
65
- `gisl-{env}-{region}-notifications-operations.fifo`. The API consumes
72
+ `gisl-{env}-{region}-notifications-jobs.fifo`. The API consumes
66
73
  from the corresponding FIFO SQS queue via a Raw Message Delivery
67
74
  subscription. This notification path is unchanged from previous
68
75
  releases.
@@ -191,27 +198,37 @@ channels:
191
198
  [I19](https://trello.com/c/Xr3Z4GBF) — same `feature_not_
192
199
  available` 422 gating)
193
200
  - `operation_type = audio_to_video` -> `ops-audio-to-video` queue
194
- (gated by `availability: planned` until Lambda ships per
195
- [`SlluxMBN`](https://trello.com/c/SlluxMBN) — same
196
- `feature_not_available` 422 gating)
201
+ (`availability: beta` Wave A activated per
202
+ [`SlluxMBN`](https://trello.com/c/SlluxMBN) +
203
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4); backend live, traffic
204
+ flows)
197
205
  - `operation_type = video_watermark` -> `ops-video-watermark`
198
- queue (gated by `availability: planned` until Lambda ships per
199
- [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) — same gating)
206
+ queue (`availability: beta` Wave A activated per
207
+ [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) +
208
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4); backend live)
200
209
  - `operation_type = video_text_watermark` ->
201
210
  `ops-video-text-watermark` queue (gated by
202
211
  `availability: planned` until Lambda ships per
203
212
  [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) — same gating)
204
- - `operation_type = split` -> `ops-split` queue (gated by
205
- `availability: planned` until Lambda ships per
206
- [`vKI0CFDu`](https://trello.com/c/vKI0CFDu) same gating;
213
+ - `operation_type = split` -> `ops-split` queue (the `audio` and
214
+ `video` mime_groups are `availability: beta` audio + short-form
215
+ video split traffic reaches this queue; `image_gif` /
216
+ `document_pdf` stay `availability: planned` until their Lambdas
217
+ ship per [`vKI0CFDu`](https://trello.com/c/vKI0CFDu);
207
218
  long-form video splits route via `processing_class` to the
208
- `split-video-fargate` worker, same OperationType, different
209
- worker)
219
+ `split-video-fargate` worker same OperationType, different
220
+ worker — and stay `availability: planned` until it ships)
210
221
  - `operation_type = audio_watermark` -> `ops-audio-watermark`
211
222
  queue (gated by `availability: planned` +
212
223
  `required_tier: enterprise` per
213
224
  [I20](https://trello.com/c/omiCq7Vn) — same 422 gating, plus
214
225
  a 403 `feature_tier_restricted` for non-enterprise callers)
226
+ - `operation_type = render_variants` -> `ops-render-variants`
227
+ queue (gated by `availability: planned` until the worker +
228
+ SNS subscription ship per
229
+ [`w3EwzHYd`](https://trello.com/c/w3EwzHYd) /
230
+ [`MNuDYJaY`](https://trello.com/c/MNuDYJaY) — same
231
+ `feature_not_available` 422 gating)
215
232
 
216
233
  The API's Option A publisher sets `operation_type` as the filter
217
234
  attribute and additionally sets `media_group` as an **informational**
@@ -223,9 +240,11 @@ channels:
223
240
 
224
241
  **Thumbnail migration window.** The legacy `ops-thumbnail` queue and
225
242
  the four sub-type queues are all live simultaneously. The API
226
- publisher currently emits `operation_type=thumbnail` (legacy);
227
- adoption of the four sub-type values is a follow-up API PR. Both
228
- paths are valid routing targets today.
243
+ publisher emits the four sub-type values on the SNS `operation_type`
244
+ attribute (resolved from effective input MIME); the legacy
245
+ `operation_type=thumbnail` attribute is retained as a valid routing
246
+ target but is no longer emitted. Both paths are valid routing
247
+ targets today.
229
248
  parameters:
230
249
  env:
231
250
  description: Environment (local, stg, prod)
@@ -245,6 +264,12 @@ channels:
245
264
  SQS queue for image compression jobs.
246
265
  Subscribed to the `job-requests` SNS topic with filter
247
266
  `job_type = image`. Handles `compress` only for image inputs.
267
+ bindings:
268
+ sqs:
269
+ queue:
270
+ name: gisl-{env}-{region}-jobs-image
271
+ fifoQueue: false
272
+ bindingVersion: '0.2.0'
248
273
  parameters:
249
274
  env:
250
275
  description: Environment (local, stg, prod)
@@ -260,6 +285,12 @@ channels:
260
285
  SQS queue for video compression jobs.
261
286
  Subscribed to the `job-requests` SNS topic with filter
262
287
  `job_type = video`. Handles `compress` only for video inputs.
288
+ bindings:
289
+ sqs:
290
+ queue:
291
+ name: gisl-{env}-{region}-jobs-video
292
+ fifoQueue: false
293
+ bindingVersion: '0.2.0'
263
294
  parameters:
264
295
  env:
265
296
  description: Environment (local, stg, prod)
@@ -275,6 +306,12 @@ channels:
275
306
  SQS queue for audio compression jobs.
276
307
  Subscribed to the `job-requests` SNS topic with filter
277
308
  `job_type = audio`. Handles `compress` only for audio inputs.
309
+ bindings:
310
+ sqs:
311
+ queue:
312
+ name: gisl-{env}-{region}-jobs-audio
313
+ fifoQueue: false
314
+ bindingVersion: '0.2.0'
278
315
  parameters:
279
316
  env:
280
317
  description: Environment (local, stg, prod)
@@ -290,6 +327,12 @@ channels:
290
327
  SQS queue for document compression jobs.
291
328
  Subscribed to the `job-requests` SNS topic with filter
292
329
  `job_type = document`. Handles `compress` only for document inputs.
330
+ bindings:
331
+ sqs:
332
+ queue:
333
+ name: gisl-{env}-{region}-jobs-document
334
+ fifoQueue: false
335
+ bindingVersion: '0.2.0'
293
336
  parameters:
294
337
  env:
295
338
  description: Environment (local, stg, prod)
@@ -350,12 +393,20 @@ channels:
350
393
  Subscribed to the `operations` SNS topic with filter
351
394
  `operation_type = thumbnail`.
352
395
 
353
- **Migration window**: This is the legacy routing target and is
354
- currently the only one the API publisher emits for (via
355
- `operation_type=thumbnail`). It handles thumbnail requests for all
356
- media types. Retirement is planned after the API publisher adopts
357
- the four sub-type values (`thumbnail_image`, `thumbnail_video`,
358
- `thumbnail_document`, `thumbnail_office`) in a follow-up API PR.
396
+ **Migration window**: This is the legacy routing target. It is
397
+ retained as a valid routing target (via `operation_type=thumbnail`)
398
+ and handles thumbnail requests for all media types, but the API
399
+ publisher no longer emits it the publisher now emits the four
400
+ sub-type values (`thumbnail_image`, `thumbnail_video`,
401
+ `thumbnail_document`, `thumbnail_office`), resolved from each
402
+ operation's effective input MIME. Retirement of this legacy queue
403
+ follows once no traffic remains.
404
+ bindings:
405
+ sqs:
406
+ queue:
407
+ name: gisl-{env}-{region}-ops-thumbnail
408
+ fifoQueue: false
409
+ bindingVersion: '0.2.0'
359
410
  parameters:
360
411
  env:
361
412
  description: Environment (local, stg, prod)
@@ -373,9 +424,16 @@ channels:
373
424
  `operation_type = thumbnail_image`. Backed by the Rust image
374
425
  thumbnail Lambda (`operation-thumbnail-image`).
375
426
 
376
- Not yet receiving traffic — the API publisher currently emits
377
- `operation_type=thumbnail` (legacy) and will flip to
378
- `thumbnail_image` after a follow-up API PR adds input-MIME dispatch.
427
+ Receives traffic for image inputs — the API publisher emits
428
+ `operation_type=thumbnail_image` on the SNS attribute (resolved from
429
+ the operation's effective input MIME); the payload `operation_type`
430
+ field stays `thumbnail`.
431
+ bindings:
432
+ sqs:
433
+ queue:
434
+ name: gisl-{env}-{region}-ops-thumbnail-image
435
+ fifoQueue: false
436
+ bindingVersion: '0.2.0'
379
437
  parameters:
380
438
  env:
381
439
  description: Environment (local, stg, prod)
@@ -393,9 +451,16 @@ channels:
393
451
  `operation_type = thumbnail_video`. Backed by the FFmpeg video
394
452
  thumbnail Lambda (`operation-thumbnail-video`).
395
453
 
396
- Not yet receiving traffic — the API publisher currently emits
397
- `operation_type=thumbnail` (legacy) and will flip to
398
- `thumbnail_video` after a follow-up API PR adds input-MIME dispatch.
454
+ Receives traffic for video inputs — the API publisher emits
455
+ `operation_type=thumbnail_video` on the SNS attribute (resolved from
456
+ the operation's effective input MIME); the payload `operation_type`
457
+ field stays `thumbnail`.
458
+ bindings:
459
+ sqs:
460
+ queue:
461
+ name: gisl-{env}-{region}-ops-thumbnail-video
462
+ fifoQueue: false
463
+ bindingVersion: '0.2.0'
399
464
  parameters:
400
465
  env:
401
466
  description: Environment (local, stg, prod)
@@ -413,10 +478,16 @@ channels:
413
478
  `operation_type = thumbnail_document`. Backed by the Ghostscript
414
479
  document thumbnail Lambda (`operation-thumbnail-document`).
415
480
 
416
- Not yet receiving traffic — the API publisher currently emits
417
- `operation_type=thumbnail` (legacy) and will flip to
418
- `thumbnail_document` after a follow-up API PR adds input-MIME
419
- dispatch.
481
+ Receives traffic for PDF/EPUB inputs — the API publisher emits
482
+ `operation_type=thumbnail_document` on the SNS attribute (resolved
483
+ from the operation's effective input MIME); the payload
484
+ `operation_type` field stays `thumbnail`.
485
+ bindings:
486
+ sqs:
487
+ queue:
488
+ name: gisl-{env}-{region}-ops-thumbnail-document
489
+ fifoQueue: false
490
+ bindingVersion: '0.2.0'
420
491
  parameters:
421
492
  env:
422
493
  description: Environment (local, stg, prod)
@@ -435,10 +506,16 @@ channels:
435
506
  `operation_type = thumbnail_office`. Backed by the LibreOffice
436
507
  thumbnail Lambda (`operation-thumbnail-office`).
437
508
 
438
- Not yet receiving traffic — the API publisher currently emits
439
- `operation_type=thumbnail` (legacy) and will flip to
440
- `thumbnail_office` after a follow-up API PR adds input-MIME
441
- dispatch.
509
+ Receives traffic for office-document inputs — the API publisher
510
+ emits `operation_type=thumbnail_office` on the SNS attribute
511
+ (resolved from the operation's effective input MIME); the payload
512
+ `operation_type` field stays `thumbnail`.
513
+ bindings:
514
+ sqs:
515
+ queue:
516
+ name: gisl-{env}-{region}-ops-thumbnail-office
517
+ fifoQueue: false
518
+ bindingVersion: '0.2.0'
442
519
  parameters:
443
520
  env:
444
521
  description: Environment (local, stg, prod)
@@ -467,6 +544,12 @@ channels:
467
544
  queue. Video bases are NOT routed here — they go to
468
545
  `ops-video-watermark` for the dedicated `video_watermark`
469
546
  operation per ADR-0013. Per ADR-0004 + I4-CONS + I5 + ADR-0013.
547
+ bindings:
548
+ sqs:
549
+ queue:
550
+ name: gisl-{env}-{region}-ops-image-watermark
551
+ fifoQueue: false
552
+ bindingVersion: '0.2.0'
470
553
  parameters:
471
554
  env:
472
555
  description: Environment (local, stg, prod)
@@ -485,6 +568,12 @@ channels:
485
568
  (Liberation Sans) — supports `single` (one label at anchor) and
486
569
  `tiled` (Cinavia-style angled fill) modes. Backed by the
487
570
  operation-text-watermark Lambda. Per ADR-0004 + I4-CONS.
571
+ bindings:
572
+ sqs:
573
+ queue:
574
+ name: gisl-{env}-{region}-ops-text-watermark
575
+ fifoQueue: false
576
+ bindingVersion: '0.2.0'
488
577
  parameters:
489
578
  env:
490
579
  description: Environment (local, stg, prod)
@@ -504,6 +593,12 @@ channels:
504
593
  concat) — the `output_type` field on the request determines the
505
594
  encoding path internally, not the routing. Image collage and PDF
506
595
  concatenation are not supported by the V1 Lambda.
596
+ bindings:
597
+ sqs:
598
+ queue:
599
+ name: gisl-{env}-{region}-ops-merge
600
+ fifoQueue: false
601
+ bindingVersion: '0.2.0'
507
602
  parameters:
508
603
  env:
509
604
  description: Environment (local, stg, prod)
@@ -520,6 +615,12 @@ channels:
520
615
  Subscribed to the `operations` SNS topic with filter
521
616
  `operation_type = archive`. Media-agnostic: accepts mixed input
522
617
  types. Backed by the archive Lambda (`operation-archive`).
618
+ bindings:
619
+ sqs:
620
+ queue:
621
+ name: gisl-{env}-{region}-ops-archive
622
+ fifoQueue: false
623
+ bindingVersion: '0.2.0'
523
624
  parameters:
524
625
  env:
525
626
  description: Environment (local, stg, prod)
@@ -537,6 +638,12 @@ channels:
537
638
  `operation_type = convert`. Handles format conversion across all
538
639
  media types (image, video, audio, document). Backed by the convert
539
640
  Lambda (`operation-convert`).
641
+ bindings:
642
+ sqs:
643
+ queue:
644
+ name: gisl-{env}-{region}-ops-convert
645
+ fifoQueue: false
646
+ bindingVersion: '0.2.0'
540
647
  parameters:
541
648
  env:
542
649
  description: Environment (local, stg, prod)
@@ -562,6 +669,12 @@ channels:
562
669
  `operation-custom-luma` Lambda (cross-repo follow-up; not yet
563
670
  shipped).
564
671
  Per ADR-0004 + I29 (Trello EPUE5Vs1).
672
+ bindings:
673
+ sqs:
674
+ queue:
675
+ name: gisl-{env}-{region}-ops-custom-luma
676
+ fifoQueue: false
677
+ bindingVersion: '0.2.0'
565
678
  parameters:
566
679
  env:
567
680
  description: Environment (local, stg, prod)
@@ -594,6 +707,12 @@ channels:
594
707
  / "audio branding".
595
708
 
596
709
  Per ADR-0004 + I19 (Trello Xr3Z4GBF).
710
+ bindings:
711
+ sqs:
712
+ queue:
713
+ name: gisl-{env}-{region}-ops-audio-overlay
714
+ fifoQueue: false
715
+ bindingVersion: '0.2.0'
597
716
  parameters:
598
717
  env:
599
718
  description: Environment (local, stg, prod)
@@ -614,14 +733,20 @@ channels:
614
733
  `role: overlay` image OPTIONAL — see `per_role_cardinality`
615
734
  on the operation schema).
616
735
 
617
- `availability: planned` per the operation schema; the API
618
- rejects workflow-create with `feature_not_available` (422)
619
- until the Lambda ships, so traffic does not reach this queue
620
- today. Backed by the `operation-audio-to-video` Lambda
621
- (cross-repo follow-up — lambdas pre-launch epic Wave A).
736
+ `availability: beta` per the operation schema (Wave A activated,
737
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API accepts +
738
+ publishes, so traffic flows to this queue (MUST NOT 422). Backed
739
+ by the `operation-audio-to-video` Lambda (live; lambdas pre-launch
740
+ epic Wave A).
622
741
 
623
742
  Per ADR-0004 + ADR-0015
624
743
  ([`SlluxMBN`](https://trello.com/c/SlluxMBN)).
744
+ bindings:
745
+ sqs:
746
+ queue:
747
+ name: gisl-{env}-{region}-ops-audio-to-video
748
+ fifoQueue: false
749
+ bindingVersion: '0.2.0'
625
750
  parameters:
626
751
  env:
627
752
  description: Environment (local, stg, prod)
@@ -642,10 +767,13 @@ channels:
642
767
  (no operation-specific conditional needed in
643
768
  OperationRequestAttributes).
644
769
 
645
- `availability: planned` per the operation schema; the API
646
- rejects workflow-create with `feature_not_available` (422)
647
- until the Lambda ships, so traffic does not reach this queue
648
- today. Backed by the `operation-split` Lambda (cross-repo
770
+ `availability: beta` for the `audio` and `video` mime_groups
771
+ (workers live on staging — audio + short-form video split traffic
772
+ reaches this queue; video `long_form` / `split-video-fargate` stays
773
+ planned); the `image_gif` and `document_pdf` mime_groups stay
774
+ `availability: planned`, and the API rejects their
775
+ workflow-create with `feature_not_available` (422) until those
776
+ Lambdas ship. Backed by the `operation-split` Lambda (cross-repo
649
777
  follow-up — lambdas pre-launch epic Wave A, ticket
650
778
  [DbpJpVtm-sibling-L1](https://trello.com/c/vKI0CFDu)
651
779
  [`vKI0CFDu`](https://trello.com/c/vKI0CFDu)).
@@ -659,6 +787,12 @@ channels:
659
787
  MIME detection.
660
788
 
661
789
  Per ADR-0004 + ADR-0014.
790
+ bindings:
791
+ sqs:
792
+ queue:
793
+ name: gisl-{env}-{region}-ops-split
794
+ fifoQueue: false
795
+ bindingVersion: '0.2.0'
662
796
  parameters:
663
797
  env:
664
798
  description: Environment (local, stg, prod)
@@ -678,11 +812,12 @@ channels:
678
812
  (Path B with `role: base` video + `role: overlay` image,
679
813
  exactly one of each per `per_role_cardinality`).
680
814
 
681
- `availability: planned` per the operation schema; the API
682
- rejects workflow-create with `feature_not_available` (422)
683
- until the Lambda ships, so traffic does not reach this queue
684
- today. Backed by the `operation-video-watermark` Lambda (cross-
685
- repo follow-up lambdas pre-launch epic Wave A, ticket
815
+ `availability: beta` per the operation schema (Wave A activated,
816
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API accepts +
817
+ publishes, so traffic flows to this queue (MUST NOT 422). The
818
+ `short_form` processing class is beta; `long_form` stays planned
819
+ (no live Fargate worker). Backed by the `operation-video-watermark`
820
+ Lambda (live; lambdas pre-launch epic Wave A, ticket
686
821
  [DbpJpVtm](https://trello.com/c/DbpJpVtm)).
687
822
 
688
823
  Distinct from `image_watermark` (pure-Rust image-only) — see
@@ -690,6 +825,12 @@ channels:
690
825
 
691
826
  Per ADR-0004 + ADR-0013
692
827
  ([`4NrRPCgh`](https://trello.com/c/4NrRPCgh)).
828
+ bindings:
829
+ sqs:
830
+ queue:
831
+ name: gisl-{env}-{region}-ops-video-watermark
832
+ fifoQueue: false
833
+ bindingVersion: '0.2.0'
693
834
  parameters:
694
835
  env:
695
836
  description: Environment (local, stg, prod)
@@ -720,6 +861,12 @@ channels:
720
861
 
721
862
  Per ADR-0004 + ADR-0013
722
863
  ([`4NrRPCgh`](https://trello.com/c/4NrRPCgh)).
864
+ bindings:
865
+ sqs:
866
+ queue:
867
+ name: gisl-{env}-{region}-ops-video-text-watermark
868
+ fifoQueue: false
869
+ bindingVersion: '0.2.0'
723
870
  parameters:
724
871
  env:
725
872
  description: Environment (local, stg, prod)
@@ -754,6 +901,37 @@ channels:
754
901
  own-watermarks-only extraction (declared in `openapi/api.yaml`).
755
902
 
756
903
  Per ADR-0004 + I20 (Trello omiCq7Vn).
904
+ bindings:
905
+ sqs:
906
+ queue:
907
+ name: gisl-{env}-{region}-ops-audio-watermark
908
+ fifoQueue: false
909
+ bindingVersion: '0.2.0'
910
+ parameters:
911
+ env:
912
+ description: Environment (local, stg, prod)
913
+ region:
914
+ description: AWS region abbreviation (euw1, use1, etc.)
915
+ messages:
916
+ operationRequest:
917
+ $ref: '#/components/messages/OperationRequestMessage'
918
+
919
+ opsRenderVariants:
920
+ address: gisl-{env}-{region}-ops-render-variants
921
+ description: |
922
+ SQS queue for render_variants operations (image fan-out — one
923
+ source image to N resized / re-encoded variants). Subscribed to the
924
+ `operations` SNS topic with filter `operation_type = render_variants`.
925
+ Backed by the render_variants Lambda (`operation-render-variants`).
926
+ No traffic reaches this queue while render_variants is
927
+ `availability: planned` (per ticket w3EwzHYd — same `feature_not_
928
+ available` 422 gating until the worker + this subscription ship).
929
+ bindings:
930
+ sqs:
931
+ queue:
932
+ name: gisl-{env}-{region}-ops-render-variants
933
+ fifoQueue: false
934
+ bindingVersion: '0.2.0'
757
935
  parameters:
758
936
  env:
759
937
  description: Environment (local, stg, prod)
@@ -895,14 +1073,26 @@ channels:
895
1073
  region:
896
1074
  description: AWS region abbreviation (euw1, use1, etc.)
897
1075
 
1076
+ opsRenderVariantsDlq:
1077
+ address: gisl-{env}-{region}-ops-render-variants-dlq
1078
+ description: |
1079
+ DLQ for failed render_variants operations (per ticket w3EwzHYd).
1080
+ Messages land here after 5 failed processing attempts. No traffic
1081
+ reaches this queue while render_variants is `availability: planned`.
1082
+ parameters:
1083
+ env:
1084
+ description: Environment (local, stg, prod)
1085
+ region:
1086
+ description: AWS region abbreviation (euw1, use1, etc.)
1087
+
898
1088
  opsAudioToVideoDlq:
899
1089
  address: gisl-{env}-{region}-ops-audio-to-video-dlq
900
1090
  description: |
901
1091
  DLQ for failed audio_to_video operations (per ticket
902
1092
  [`SlluxMBN`](https://trello.com/c/SlluxMBN) / ADR-0015).
903
- Messages land here after 5 failed processing attempts. No
904
- traffic reaches this queue while audio_to_video is
905
- `availability: planned`.
1093
+ Messages land here after 5 failed processing attempts.
1094
+ audio_to_video is `availability: beta` (Wave A activated) so
1095
+ this queue now receives real failures.
906
1096
  parameters:
907
1097
  env:
908
1098
  description: Environment (local, stg, prod)
@@ -914,9 +1104,9 @@ channels:
914
1104
  description: |
915
1105
  DLQ for failed video_watermark operations (per ticket
916
1106
  [`4NrRPCgh`](https://trello.com/c/4NrRPCgh) / ADR-0013).
917
- Messages land here after 5 failed processing attempts. No
918
- traffic reaches this queue while video_watermark is
919
- `availability: planned`.
1107
+ Messages land here after 5 failed processing attempts.
1108
+ video_watermark is `availability: beta` (Wave A activated) so
1109
+ this queue now receives real failures.
920
1110
  parameters:
921
1111
  env:
922
1112
  description: Environment (local, stg, prod)
@@ -942,9 +1132,10 @@ channels:
942
1132
  description: |
943
1133
  DLQ for failed split operations (per ticket
944
1134
  [`vKI0CFDu`](https://trello.com/c/vKI0CFDu) / ADR-0014).
945
- Messages land here after 5 failed processing attempts. No
946
- traffic reaches this queue while split is `availability:
947
- planned`.
1135
+ Messages land here after 5 failed processing attempts. Live for
1136
+ the `split` `audio` + `video` mime_groups (now `availability: beta`,
1137
+ video short-form only); the `image_gif` and `document_pdf` groups
1138
+ stay `availability: planned` and carry no traffic yet.
948
1139
  parameters:
949
1140
  env:
950
1141
  description: Environment (local, stg, prod)
@@ -997,6 +1188,12 @@ channels:
997
1188
 
998
1189
  Standard (non-FIFO) — each probe request is independent; no
999
1190
  ordering guarantees are required across uploads.
1191
+ bindings:
1192
+ sqs:
1193
+ queue:
1194
+ name: gisl-{env}-{region}-upload-probe
1195
+ fifoQueue: false
1196
+ bindingVersion: '0.2.0'
1000
1197
  parameters:
1001
1198
  env:
1002
1199
  description: Environment (local, stg, prod)
@@ -1037,6 +1234,12 @@ channels:
1037
1234
  The sync `POST /api/uploads/{id}/probe` path does not publish
1038
1235
  here — sync results are returned inline via the Lambda
1039
1236
  RequestResponse return value.
1237
+ bindings:
1238
+ sqs:
1239
+ queue:
1240
+ name: gisl-{env}-{region}-upload-probe-completions
1241
+ fifoQueue: false
1242
+ bindingVersion: '0.2.0'
1040
1243
  parameters:
1041
1244
  env:
1042
1245
  description: Environment (local, stg, prod)
@@ -1063,8 +1266,8 @@ channels:
1063
1266
  # NOTIFICATIONS (Lambda -> API)
1064
1267
  # ============================================
1065
1268
 
1066
- notificationsOperationsTopic:
1067
- address: gisl-{env}-{region}-notifications-operations.fifo
1269
+ notificationsJobsTopic:
1270
+ address: gisl-{env}-{region}-notifications-jobs.fifo
1068
1271
  description: |
1069
1272
  FIFO SNS topic where Lambdas publish all operation notifications (progress and results).
1070
1273
  API subscribes via FIFO SQS with Raw Message Delivery enabled.
@@ -1072,6 +1275,13 @@ channels:
1072
1275
  **FIFO Publishing Requirements:**
1073
1276
  - MessageGroupId: Use operation_id (ensures ordering per operation)
1074
1277
  - MessageDeduplicationId: Not required (content-based deduplication enabled)
1278
+ bindings:
1279
+ sns:
1280
+ name: gisl-{env}-{region}-notifications-jobs.fifo
1281
+ ordering:
1282
+ type: FIFO
1283
+ contentBasedDeduplication: true
1284
+ bindingVersion: '0.1.0'
1075
1285
  parameters:
1076
1286
  env:
1077
1287
  description: Environment (local, stg, prod)
@@ -1083,15 +1293,21 @@ channels:
1083
1293
  operationResult:
1084
1294
  $ref: '#/components/messages/OperationResultMessage'
1085
1295
 
1086
- notificationsOperationsQueue:
1087
- address: gisl-{env}-{region}-notifications-operations.fifo
1296
+ notificationsJobsQueue:
1297
+ address: gisl-{env}-{region}-notifications-jobs.fifo
1088
1298
  description: |
1089
- FIFO SQS queue subscribed to notifications-operations SNS topic.
1299
+ FIFO SQS queue subscribed to notifications-jobs SNS topic.
1090
1300
  Receives both OperationProgress and OperationResult messages.
1091
1301
  Raw Message Delivery enabled (no SNS envelope).
1092
1302
 
1093
1303
  FIFO ensures message ordering per operation (operation_id used as MessageGroupId).
1094
1304
  This guarantees OperationProgress messages arrive before OperationResult.
1305
+ bindings:
1306
+ sqs:
1307
+ queue:
1308
+ name: gisl-{env}-{region}-notifications-jobs.fifo
1309
+ fifoQueue: true
1310
+ bindingVersion: '0.2.0'
1095
1311
  parameters:
1096
1312
  env:
1097
1313
  description: Environment (local, stg, prod)
@@ -1103,8 +1319,8 @@ channels:
1103
1319
  operationResult:
1104
1320
  $ref: '#/components/messages/OperationResultMessage'
1105
1321
 
1106
- notificationsOperationsDlq:
1107
- address: gisl-{env}-{region}-notifications-operations-dlq.fifo
1322
+ notificationsJobsDlq:
1323
+ address: gisl-{env}-{region}-notifications-jobs-dlq.fifo
1108
1324
  description: DLQ for failed notification processing. Messages land here after 5 failed processing attempts.
1109
1325
  parameters:
1110
1326
  env:
@@ -1137,6 +1353,12 @@ channels:
1137
1353
  shared `JobRequestMessage` across the per-media `jobs-*` queues); per-queue
1138
1354
  `operation_type` is a publisher invariant documented here, not a separate
1139
1355
  message schema.
1356
+ bindings:
1357
+ sqs:
1358
+ queue:
1359
+ name: gisl-{env}-{region}-ops-compress-video-longform
1360
+ fifoQueue: false
1361
+ bindingVersion: '0.2.0'
1140
1362
  parameters:
1141
1363
  env:
1142
1364
  description: Environment (local, stg, prod)
@@ -1167,6 +1389,12 @@ channels:
1167
1389
  `LongFormJobMessage` enum permits `{compress, merge}`; per-queue
1168
1390
  `operation_type` is a publisher invariant documented here, not a separate
1169
1391
  schema).
1392
+ bindings:
1393
+ sqs:
1394
+ queue:
1395
+ name: gisl-{env}-{region}-ops-merge-video-longform-reencode
1396
+ fifoQueue: false
1397
+ bindingVersion: '0.2.0'
1170
1398
  parameters:
1171
1399
  env:
1172
1400
  description: Environment (local, stg, prod)
@@ -1247,6 +1475,12 @@ operations:
1247
1475
  action: receive
1248
1476
  channel:
1249
1477
  $ref: '#/channels/jobsImage'
1478
+ bindings:
1479
+ sqs:
1480
+ queues:
1481
+ - name: gisl-{env}-{region}-jobs-image
1482
+ fifoQueue: false
1483
+ bindingVersion: '0.2.0'
1250
1484
  summary: Process image compression job
1251
1485
  description: |
1252
1486
  The image compression Lambda consumes jobs for image inputs.
@@ -1261,6 +1495,12 @@ operations:
1261
1495
  action: receive
1262
1496
  channel:
1263
1497
  $ref: '#/channels/jobsVideo'
1498
+ bindings:
1499
+ sqs:
1500
+ queues:
1501
+ - name: gisl-{env}-{region}-jobs-video
1502
+ fifoQueue: false
1503
+ bindingVersion: '0.2.0'
1264
1504
  summary: Process video compression job
1265
1505
  description: |
1266
1506
  The video compression Lambda consumes jobs for video inputs.
@@ -1274,6 +1514,12 @@ operations:
1274
1514
  action: receive
1275
1515
  channel:
1276
1516
  $ref: '#/channels/jobsAudio'
1517
+ bindings:
1518
+ sqs:
1519
+ queues:
1520
+ - name: gisl-{env}-{region}-jobs-audio
1521
+ fifoQueue: false
1522
+ bindingVersion: '0.2.0'
1277
1523
  summary: Process audio compression job
1278
1524
  description: |
1279
1525
  The audio compression Lambda consumes jobs for audio inputs.
@@ -1287,6 +1533,12 @@ operations:
1287
1533
  action: receive
1288
1534
  channel:
1289
1535
  $ref: '#/channels/jobsDocument'
1536
+ bindings:
1537
+ sqs:
1538
+ queues:
1539
+ - name: gisl-{env}-{region}-jobs-document
1540
+ fifoQueue: false
1541
+ bindingVersion: '0.2.0'
1290
1542
  summary: Process document compression job
1291
1543
  description: |
1292
1544
  The document compression Lambda consumes jobs for document inputs.
@@ -1304,13 +1556,20 @@ operations:
1304
1556
  action: receive
1305
1557
  channel:
1306
1558
  $ref: '#/channels/opsThumbnail'
1559
+ bindings:
1560
+ sqs:
1561
+ queues:
1562
+ - name: gisl-{env}-{region}-ops-thumbnail
1563
+ fifoQueue: false
1564
+ bindingVersion: '0.2.0'
1307
1565
  summary: Process legacy thumbnail operation
1308
1566
  description: |
1309
1567
  The legacy thumbnail Lambda consumes thumbnail requests routed
1310
1568
  by `operation_type=thumbnail`. Handles thumbnail generation for
1311
- all media types in a single Lambda. This is the current live
1312
- routing target for the API publisher; it will be retired after
1313
- the publisher adopts the four sub-type values.
1569
+ all media types in a single Lambda. Retained as a valid routing
1570
+ target during the migration window, but the API publisher no
1571
+ longer emits `operation_type=thumbnail` (it emits the four
1572
+ sub-type values); this queue is retired once no traffic remains.
1314
1573
  messages:
1315
1574
  - $ref: '#/channels/opsThumbnail/messages/operationRequest'
1316
1575
 
@@ -1318,11 +1577,17 @@ operations:
1318
1577
  action: receive
1319
1578
  channel:
1320
1579
  $ref: '#/channels/opsThumbnailImage'
1580
+ bindings:
1581
+ sqs:
1582
+ queues:
1583
+ - name: gisl-{env}-{region}-ops-thumbnail-image
1584
+ fifoQueue: false
1585
+ bindingVersion: '0.2.0'
1321
1586
  summary: Process image thumbnail operation
1322
1587
  description: |
1323
1588
  The image thumbnail Lambda consumes thumbnail requests routed by
1324
1589
  `operation_type=thumbnail_image`. Backed by a Rust image crate.
1325
- Not yet receiving traffic — see channel description.
1590
+ Receives traffic for image inputs — see channel description.
1326
1591
  messages:
1327
1592
  - $ref: '#/channels/opsThumbnailImage/messages/operationRequest'
1328
1593
 
@@ -1330,11 +1595,17 @@ operations:
1330
1595
  action: receive
1331
1596
  channel:
1332
1597
  $ref: '#/channels/opsThumbnailVideo'
1598
+ bindings:
1599
+ sqs:
1600
+ queues:
1601
+ - name: gisl-{env}-{region}-ops-thumbnail-video
1602
+ fifoQueue: false
1603
+ bindingVersion: '0.2.0'
1333
1604
  summary: Process video thumbnail operation
1334
1605
  description: |
1335
1606
  The video thumbnail Lambda consumes thumbnail requests routed by
1336
- `operation_type=thumbnail_video`. Backed by FFmpeg. Not yet
1337
- receiving traffic — see channel description.
1607
+ `operation_type=thumbnail_video`. Backed by FFmpeg. Receives
1608
+ traffic for video inputs — see channel description.
1338
1609
  messages:
1339
1610
  - $ref: '#/channels/opsThumbnailVideo/messages/operationRequest'
1340
1611
 
@@ -1342,11 +1613,18 @@ operations:
1342
1613
  action: receive
1343
1614
  channel:
1344
1615
  $ref: '#/channels/opsThumbnailDocument'
1616
+ bindings:
1617
+ sqs:
1618
+ queues:
1619
+ - name: gisl-{env}-{region}-ops-thumbnail-document
1620
+ fifoQueue: false
1621
+ bindingVersion: '0.2.0'
1345
1622
  summary: Process document thumbnail operation
1346
1623
  description: |
1347
1624
  The document (PDF/EPUB) thumbnail Lambda consumes thumbnail
1348
1625
  requests routed by `operation_type=thumbnail_document`. Backed by
1349
- Ghostscript. Not yet receiving traffic — see channel description.
1626
+ Ghostscript. Receives traffic for PDF/EPUB inputs — see channel
1627
+ description.
1350
1628
  messages:
1351
1629
  - $ref: '#/channels/opsThumbnailDocument/messages/operationRequest'
1352
1630
 
@@ -1354,12 +1632,18 @@ operations:
1354
1632
  action: receive
1355
1633
  channel:
1356
1634
  $ref: '#/channels/opsThumbnailOffice'
1635
+ bindings:
1636
+ sqs:
1637
+ queues:
1638
+ - name: gisl-{env}-{region}-ops-thumbnail-office
1639
+ fifoQueue: false
1640
+ bindingVersion: '0.2.0'
1357
1641
  summary: Process office document thumbnail operation
1358
1642
  description: |
1359
1643
  The office document (DOCX/XLSX/PPTX/ODT/ODS/ODP) thumbnail Lambda
1360
1644
  consumes thumbnail requests routed by
1361
- `operation_type=thumbnail_office`. Backed by LibreOffice. Not yet
1362
- receiving traffic — see channel description.
1645
+ `operation_type=thumbnail_office`. Backed by LibreOffice. Receives
1646
+ traffic for office-document inputs — see channel description.
1363
1647
  messages:
1364
1648
  - $ref: '#/channels/opsThumbnailOffice/messages/operationRequest'
1365
1649
 
@@ -1367,6 +1651,12 @@ operations:
1367
1651
  action: receive
1368
1652
  channel:
1369
1653
  $ref: '#/channels/opsImageWatermark'
1654
+ bindings:
1655
+ sqs:
1656
+ queues:
1657
+ - name: gisl-{env}-{region}-ops-image-watermark
1658
+ fifoQueue: false
1659
+ bindingVersion: '0.2.0'
1370
1660
  summary: Process image_watermark operation
1371
1661
  description: |
1372
1662
  The operation-image-watermark Lambda consumes image_watermark
@@ -1385,6 +1675,12 @@ operations:
1385
1675
  action: receive
1386
1676
  channel:
1387
1677
  $ref: '#/channels/opsTextWatermark'
1678
+ bindings:
1679
+ sqs:
1680
+ queues:
1681
+ - name: gisl-{env}-{region}-ops-text-watermark
1682
+ fifoQueue: false
1683
+ bindingVersion: '0.2.0'
1388
1684
  summary: Process text_watermark operation
1389
1685
  description: |
1390
1686
  The operation-text-watermark Lambda consumes text_watermark
@@ -1398,6 +1694,12 @@ operations:
1398
1694
  action: receive
1399
1695
  channel:
1400
1696
  $ref: '#/channels/opsMerge'
1697
+ bindings:
1698
+ sqs:
1699
+ queues:
1700
+ - name: gisl-{env}-{region}-ops-merge
1701
+ fifoQueue: false
1702
+ bindingVersion: '0.2.0'
1401
1703
  summary: Process merge operation
1402
1704
  description: |
1403
1705
  The merge Lambda consumes merge requests routed by
@@ -1413,6 +1715,12 @@ operations:
1413
1715
  action: receive
1414
1716
  channel:
1415
1717
  $ref: '#/channels/opsArchive'
1718
+ bindings:
1719
+ sqs:
1720
+ queues:
1721
+ - name: gisl-{env}-{region}-ops-archive
1722
+ fifoQueue: false
1723
+ bindingVersion: '0.2.0'
1416
1724
  summary: Process archive operation
1417
1725
  description: |
1418
1726
  The archive Lambda consumes archive requests routed by
@@ -1425,6 +1733,12 @@ operations:
1425
1733
  action: receive
1426
1734
  channel:
1427
1735
  $ref: '#/channels/opsConvert'
1736
+ bindings:
1737
+ sqs:
1738
+ queues:
1739
+ - name: gisl-{env}-{region}-ops-convert
1740
+ fifoQueue: false
1741
+ bindingVersion: '0.2.0'
1428
1742
  summary: Process convert operation
1429
1743
  description: |
1430
1744
  The convert Lambda consumes convert requests routed by
@@ -1437,6 +1751,12 @@ operations:
1437
1751
  action: receive
1438
1752
  channel:
1439
1753
  $ref: '#/channels/opsCustomLuma'
1754
+ bindings:
1755
+ sqs:
1756
+ queues:
1757
+ - name: gisl-{env}-{region}-ops-custom-luma
1758
+ fifoQueue: false
1759
+ bindingVersion: '0.2.0'
1440
1760
  summary: Process custom_luma operation
1441
1761
  description: |
1442
1762
  The `operation-custom-luma` Lambda (cross-repo follow-up — not
@@ -1454,6 +1774,12 @@ operations:
1454
1774
  action: receive
1455
1775
  channel:
1456
1776
  $ref: '#/channels/opsAudioOverlay'
1777
+ bindings:
1778
+ sqs:
1779
+ queues:
1780
+ - name: gisl-{env}-{region}-ops-audio-overlay
1781
+ fifoQueue: false
1782
+ bindingVersion: '0.2.0'
1457
1783
  summary: Process audio_overlay operation
1458
1784
  description: |
1459
1785
  The `operation-audio-overlay` Lambda (cross-repo follow-up —
@@ -1472,16 +1798,27 @@ operations:
1472
1798
  action: receive
1473
1799
  channel:
1474
1800
  $ref: '#/channels/opsSplit'
1801
+ bindings:
1802
+ sqs:
1803
+ queues:
1804
+ - name: gisl-{env}-{region}-ops-split
1805
+ fifoQueue: false
1806
+ bindingVersion: '0.2.0'
1475
1807
  summary: Process split operation
1476
1808
  description: |
1477
- The `operation-split` Lambda (cross-repo follow-up lambdas
1478
- pre-launch epic Wave A, not yet shipped) consumes split
1479
- requests routed by `operation_type=split`. Single-input
1809
+ The `operation-split` Lambda (lambdas pre-launch epic Wave A)
1810
+ consumes split requests routed by `operation_type=split`. Its
1811
+ `audio` + short-form `video` paths are live on staging (lambdas
1812
+ #161 / [`vKI0CFDu`](https://trello.com/c/vKI0CFDu)); the
1813
+ `image_gif` / `document_pdf` workers (and video `long_form` via
1814
+ `split-video-fargate`) remain a cross-repo follow-up. Single-input —
1480
1815
  `media_group` derives from the input MIME prefix per the
1481
- existing single-input rule. `availability: planned`; the API
1482
- rejects workflow-create with `feature_not_available` (422)
1483
- until the Lambda ships, so traffic does not reach this channel
1484
- today. Long-form video splits route to a separate
1816
+ existing single-input rule. `availability: beta` for the `audio`
1817
+ and `video` (short-form) mime_groups (workers live on staging); the
1818
+ `image_gif` and `document_pdf` mime_groups stay `availability:
1819
+ planned`, and the API rejects their workflow-create with
1820
+ `feature_not_available` (422) until those Lambdas ship.
1821
+ Long-form video splits route to a separate
1485
1822
  `split-video-fargate` worker via `processing_class`.
1486
1823
  Per ADR-0004 + ADR-0014
1487
1824
  ([`vKI0CFDu`](https://trello.com/c/vKI0CFDu)).
@@ -1492,17 +1829,23 @@ operations:
1492
1829
  action: receive
1493
1830
  channel:
1494
1831
  $ref: '#/channels/opsVideoWatermark'
1832
+ bindings:
1833
+ sqs:
1834
+ queues:
1835
+ - name: gisl-{env}-{region}-ops-video-watermark
1836
+ fifoQueue: false
1837
+ bindingVersion: '0.2.0'
1495
1838
  summary: Process video_watermark operation
1496
1839
  description: |
1497
1840
  The `operation-video-watermark` Lambda (cross-repo follow-up —
1498
- lambdas pre-launch epic Wave A, not yet shipped) consumes
1841
+ lambdas pre-launch epic Wave A, live) consumes
1499
1842
  video_watermark requests routed by
1500
1843
  `operation_type=video_watermark`. Multi-input role-based with
1501
1844
  `role: base` video + `role: overlay` image (exactly one of
1502
- each per `per_role_cardinality`). `availability: planned`; the
1503
- API rejects workflow-create with `feature_not_available` (422)
1504
- until the Lambda ships, so traffic does not reach this channel
1505
- today.
1845
+ each per `per_role_cardinality`). `availability: beta` (Wave A
1846
+ activated, [`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API
1847
+ accepts + publishes (MUST NOT 422), so traffic flows to this
1848
+ channel. `short_form` is beta; `long_form` stays planned.
1506
1849
  Per ADR-0004 + ADR-0013
1507
1850
  ([`4NrRPCgh`](https://trello.com/c/4NrRPCgh)).
1508
1851
  messages:
@@ -1512,6 +1855,12 @@ operations:
1512
1855
  action: receive
1513
1856
  channel:
1514
1857
  $ref: '#/channels/opsVideoTextWatermark'
1858
+ bindings:
1859
+ sqs:
1860
+ queues:
1861
+ - name: gisl-{env}-{region}-ops-video-text-watermark
1862
+ fifoQueue: false
1863
+ bindingVersion: '0.2.0'
1515
1864
  summary: Process video_text_watermark operation
1516
1865
  description: |
1517
1866
  The `operation-video-text-watermark` Lambda (cross-repo
@@ -1531,17 +1880,23 @@ operations:
1531
1880
  action: receive
1532
1881
  channel:
1533
1882
  $ref: '#/channels/opsAudioToVideo'
1883
+ bindings:
1884
+ sqs:
1885
+ queues:
1886
+ - name: gisl-{env}-{region}-ops-audio-to-video
1887
+ fifoQueue: false
1888
+ bindingVersion: '0.2.0'
1534
1889
  summary: Process audio_to_video operation
1535
1890
  description: |
1536
1891
  The `operation-audio-to-video` Lambda (cross-repo follow-up —
1537
- lambdas pre-launch epic Wave A, not yet shipped) consumes
1892
+ lambdas pre-launch epic Wave A, live) consumes
1538
1893
  audio_to_video requests routed by
1539
1894
  `operation_type=audio_to_video`. Multi-input role-based with
1540
1895
  role asymmetry (Path B with `role: base` audio REQUIRED +
1541
1896
  `role: overlay` image OPTIONAL per `per_role_cardinality`).
1542
- `availability: planned`; the API rejects workflow-create with
1543
- `feature_not_available` (422) until the Lambda ships, so
1544
- traffic does not reach this channel today.
1897
+ `availability: beta` (Wave A activated,
1898
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API accepts +
1899
+ publishes (MUST NOT 422), so traffic flows to this channel.
1545
1900
  Per ADR-0004 + ADR-0015
1546
1901
  ([`SlluxMBN`](https://trello.com/c/SlluxMBN)).
1547
1902
  messages:
@@ -1551,6 +1906,12 @@ operations:
1551
1906
  action: receive
1552
1907
  channel:
1553
1908
  $ref: '#/channels/opsAudioWatermark'
1909
+ bindings:
1910
+ sqs:
1911
+ queues:
1912
+ - name: gisl-{env}-{region}-ops-audio-watermark
1913
+ fifoQueue: false
1914
+ bindingVersion: '0.2.0'
1554
1915
  summary: Process audio_watermark operation
1555
1916
  description: |
1556
1917
  The `operation-audio-watermark` Lambda (cross-repo follow-up —
@@ -1565,6 +1926,29 @@ operations:
1565
1926
  messages:
1566
1927
  - $ref: '#/channels/opsAudioWatermark/messages/operationRequest'
1567
1928
 
1929
+ consumeRenderVariantsOperation:
1930
+ action: receive
1931
+ channel:
1932
+ $ref: '#/channels/opsRenderVariants'
1933
+ bindings:
1934
+ sqs:
1935
+ queues:
1936
+ - name: gisl-{env}-{region}-ops-render-variants
1937
+ fifoQueue: false
1938
+ bindingVersion: '0.2.0'
1939
+ summary: Process render_variants operation
1940
+ description: |
1941
+ The `operation-render-variants` Lambda (cross-repo follow-up —
1942
+ not yet shipped) consumes render_variants requests routed by
1943
+ `operation_type=render_variants`. Single-input image fan-out (one
1944
+ source image to N resized / re-encoded variants). `availability:
1945
+ planned`; the API rejects workflow-create with
1946
+ `feature_not_available` (422) until the Lambda + this subscription
1947
+ ship, so traffic does not reach this channel today. Per ticket
1948
+ w3EwzHYd.
1949
+ messages:
1950
+ - $ref: '#/channels/opsRenderVariants/messages/operationRequest'
1951
+
1568
1952
  # ============================================
1569
1953
  # NOTIFICATION OPERATIONS
1570
1954
  # ============================================
@@ -1572,37 +1956,67 @@ operations:
1572
1956
  publishOperationProgress:
1573
1957
  action: send
1574
1958
  channel:
1575
- $ref: '#/channels/notificationsOperationsTopic'
1959
+ $ref: '#/channels/notificationsJobsTopic'
1960
+ # Operation-level SNS binding: Microcks reads OPERATION bindings (not
1961
+ # the channel binding) for protocol detection — without it the SEND op
1962
+ # registers under Microcks' Kafka default and SNS conformance can't
1963
+ # bind. The cli@6.0.0-bundled SNS 0.1.0 schema requires a non-empty
1964
+ # consumers[] EVEN on send ops (the "consumers only for receive" rule
1965
+ # is 1.0.0, which cli rejects), so we declare the topic's real consumer
1966
+ # — the API FIFO SQS queue with raw message delivery. bindingVersion
1967
+ # 0.1.0 mirrors the channel pin. Per z7VkTNmN producer pillar.
1968
+ bindings:
1969
+ sns:
1970
+ consumers:
1971
+ - protocol: sqs
1972
+ endpoint:
1973
+ name: gisl-{env}-{region}-notifications-jobs.fifo
1974
+ rawMessageDelivery: true
1975
+ bindingVersion: '0.1.0'
1576
1976
  summary: Publish operation progress update
1577
1977
  description: |
1578
1978
  Lambda publishes progress updates during operation processing.
1579
1979
  These are lightweight messages for real-time status tracking.
1580
1980
  messages:
1581
- - $ref: '#/channels/notificationsOperationsTopic/messages/operationProgress'
1981
+ - $ref: '#/channels/notificationsJobsTopic/messages/operationProgress'
1582
1982
 
1583
1983
  publishOperationResult:
1584
1984
  action: send
1585
1985
  channel:
1586
- $ref: '#/channels/notificationsOperationsTopic'
1986
+ $ref: '#/channels/notificationsJobsTopic'
1987
+ bindings:
1988
+ sns:
1989
+ consumers:
1990
+ - protocol: sqs
1991
+ endpoint:
1992
+ name: gisl-{env}-{region}-notifications-jobs.fifo
1993
+ rawMessageDelivery: true
1994
+ bindingVersion: '0.1.0'
1587
1995
  summary: Publish operation result
1588
1996
  description: |
1589
1997
  Lambda publishes the final result when operation completes or fails.
1590
1998
  This is a terminal message with full details.
1591
1999
  messages:
1592
- - $ref: '#/channels/notificationsOperationsTopic/messages/operationResult'
2000
+ - $ref: '#/channels/notificationsJobsTopic/messages/operationResult'
1593
2001
 
1594
2002
  consumeOperationNotifications:
1595
2003
  action: receive
1596
2004
  channel:
1597
- $ref: '#/channels/notificationsOperationsQueue'
2005
+ $ref: '#/channels/notificationsJobsQueue'
2006
+ bindings:
2007
+ sqs:
2008
+ queues:
2009
+ - name: gisl-{env}-{region}-notifications-jobs.fifo
2010
+ fifoQueue: true
2011
+ bindingVersion: '0.2.0'
1598
2012
  summary: Consume operation notifications
1599
2013
  description: |
1600
2014
  API worker consumes both progress and result notifications from SQS.
1601
2015
  - OperationProgress: Update Redis cache for real-time status (forwarded to frontend via SSE)
1602
2016
  - OperationResult: Update database Operation entity, derive Job/Workflow status
1603
2017
  messages:
1604
- - $ref: '#/channels/notificationsOperationsQueue/messages/operationProgress'
1605
- - $ref: '#/channels/notificationsOperationsQueue/messages/operationResult'
2018
+ - $ref: '#/channels/notificationsJobsQueue/messages/operationProgress'
2019
+ - $ref: '#/channels/notificationsJobsQueue/messages/operationResult'
1606
2020
 
1607
2021
  # ============================================
1608
2022
  # UPLOAD-PROBE OPERATIONS (per ticket vBlEurU7)
@@ -1631,6 +2045,12 @@ operations:
1631
2045
  action: receive
1632
2046
  channel:
1633
2047
  $ref: '#/channels/uploadProbeQueue'
2048
+ bindings:
2049
+ sqs:
2050
+ queues:
2051
+ - name: gisl-{env}-{region}-upload-probe
2052
+ fifoQueue: false
2053
+ bindingVersion: '0.2.0'
1634
2054
  summary: Consume an upload-probe request (async branch)
1635
2055
  description: |
1636
2056
  The upload-probe Lambda consumes from the SQS queue subscribed
@@ -1648,6 +2068,12 @@ operations:
1648
2068
  action: send
1649
2069
  channel:
1650
2070
  $ref: '#/channels/uploadProbeCompletionsQueue'
2071
+ bindings:
2072
+ sqs:
2073
+ queues:
2074
+ - name: gisl-{env}-{region}-upload-probe-completions
2075
+ fifoQueue: false
2076
+ bindingVersion: '0.2.0'
1651
2077
  summary: Publish an upload-probe completion (async branch)
1652
2078
  description: |
1653
2079
  The upload-probe Lambda publishes the result of the async
@@ -1669,6 +2095,12 @@ operations:
1669
2095
  action: receive
1670
2096
  channel:
1671
2097
  $ref: '#/channels/uploadProbeCompletionsQueue'
2098
+ bindings:
2099
+ sqs:
2100
+ queues:
2101
+ - name: gisl-{env}-{region}-upload-probe-completions
2102
+ fifoQueue: false
2103
+ bindingVersion: '0.2.0'
1672
2104
  summary: Consume an upload-probe completion (async branch)
1673
2105
  description: |
1674
2106
  The API consumer worker reads completions from this queue and
@@ -1687,6 +2119,12 @@ operations:
1687
2119
  action: send
1688
2120
  channel:
1689
2121
  $ref: '#/channels/longformCompressVideo'
2122
+ bindings:
2123
+ sqs:
2124
+ queues:
2125
+ - name: gisl-{env}-{region}-ops-compress-video-longform
2126
+ fifoQueue: false
2127
+ bindingVersion: '0.2.0'
1690
2128
  summary: Publish a long-form video compression claim-check.
1691
2129
  description: |
1692
2130
  The API (`SqsLongFormOperationPublisherAdapter`) writes the full job
@@ -1700,6 +2138,12 @@ operations:
1700
2138
  action: send
1701
2139
  channel:
1702
2140
  $ref: '#/channels/longformMergeVideoReencode'
2141
+ bindings:
2142
+ sqs:
2143
+ queues:
2144
+ - name: gisl-{env}-{region}-ops-merge-video-longform-reencode
2145
+ fifoQueue: false
2146
+ bindingVersion: '0.2.0'
1703
2147
  summary: Publish a long-form merge re-encode claim-check.
1704
2148
  description: |
1705
2149
  As `publishLongFormCompressVideo`, for `operation_type = merge`
@@ -1715,6 +2159,12 @@ operations:
1715
2159
  action: receive
1716
2160
  channel:
1717
2161
  $ref: '#/channels/longformCompressVideo'
2162
+ bindings:
2163
+ sqs:
2164
+ queues:
2165
+ - name: gisl-{env}-{region}-ops-compress-video-longform
2166
+ fifoQueue: false
2167
+ bindingVersion: '0.2.0'
1718
2168
  summary: Consume a long-form video compression claim-check.
1719
2169
  description: |
1720
2170
  A terraform-owned launcher (EventBridge Pipe, filter=none -> launcher
@@ -1729,6 +2179,12 @@ operations:
1729
2179
  action: receive
1730
2180
  channel:
1731
2181
  $ref: '#/channels/longformMergeVideoReencode'
2182
+ bindings:
2183
+ sqs:
2184
+ queues:
2185
+ - name: gisl-{env}-{region}-ops-merge-video-longform-reencode
2186
+ fifoQueue: false
2187
+ bindingVersion: '0.2.0'
1732
2188
  summary: Consume a long-form merge re-encode claim-check.
1733
2189
  description: |
1734
2190
  As `consumeLongFormCompressVideo`, for `operation_type = merge`
@@ -1820,7 +2276,7 @@ components:
1820
2276
  **non-compression** operation (thumbnail, image_watermark,
1821
2277
  text_watermark, merge, archive, convert, custom_luma,
1822
2278
  audio_overlay, audio_watermark, audio_to_video,
1823
- video_watermark, video_text_watermark). Published to the
2279
+ video_watermark, video_text_watermark, split). Published to the
1824
2280
  `operations` SNS topic; routed by the single-attribute
1825
2281
  filter `operation_type` to one of the ops-family queues.
1826
2282
 
@@ -1830,8 +2286,8 @@ components:
1830
2286
  `thumbnail_office`, `image_watermark`, `text_watermark`,
1831
2287
  `merge`, `archive`, `convert`, `custom_luma`,
1832
2288
  `audio_overlay`, `audio_watermark`, `audio_to_video`,
1833
- `video_watermark`, `video_text_watermark`. Used by SNS as
1834
- the filter attribute on the `operations` topic.
2289
+ `video_watermark`, `video_text_watermark`, `split`. Used by
2290
+ SNS as the filter attribute on the `operations` topic.
1835
2291
  - `media_group`: informational metadata, present for every
1836
2292
  operation except `archive` (which is media-agnostic). Values:
1837
2293
  `image`, `video`, `audio`, `document`. **Not** used by SNS as
@@ -1840,7 +2296,8 @@ components:
1840
2296
 
1841
2297
  **Input models:**
1842
2298
  - Single-input operations (thumbnail, text_watermark, convert,
1843
- audio_watermark): use `source_bucket` + `source_key`.
2299
+ audio_watermark, video_text_watermark, split): use
2300
+ `source_bucket` + `source_key`.
1844
2301
  `file_type` required. For `thumbnail`, the SNS
1845
2302
  `operation_type` attribute is permitted to carry a per-media
1846
2303
  sub-type value for routing (see `OperationRequestAttributes`
@@ -1850,23 +2307,29 @@ components:
1850
2307
  `required_tier: enterprise` so workflow-create rejects with
1851
2308
  422 + 403 today.
1852
2309
  - Multi-input operations (merge, archive, image_watermark,
1853
- custom_luma, audio_overlay, audio_to_video): use `sources`
1854
- array. Merge additionally requires `output_type`.
1855
- image_watermark, custom_luma, audio_overlay, and
1856
- audio_to_video use `role` per `JobInputV2.role`.
2310
+ custom_luma, audio_overlay, audio_to_video, video_watermark):
2311
+ use `sources` array. Merge additionally requires `output_type`.
2312
+ image_watermark, custom_luma, audio_overlay, audio_to_video,
2313
+ and video_watermark use `role` per `JobInputV2.role`.
1857
2314
  audio_to_video has role asymmetry — REQUIRED `base` (audio)
1858
2315
  + OPTIONAL `overlay` (image 0..1) per
1859
2316
  `per_role_cardinality`; sum-of-role-minima drives the
1860
2317
  minimum `sources` count (1 for audio_to_video; 2 for all
1861
- other role-based ops today). custom_luma, audio_overlay,
1862
- and audio_to_video are `availability: planned` so
1863
- workflow-create rejects with 422 today.
2318
+ other role-based ops today). custom_luma and audio_overlay
2319
+ are `availability: planned` so workflow-create rejects with
2320
+ 422 today (audio_to_video and video_watermark are now `beta` —
2321
+ Wave A activated).
1864
2322
 
1865
2323
  **Migration window note.** During the thumbnail sub-type
1866
2324
  migration, both `operation_type=thumbnail` (legacy) and
1867
2325
  `operation_type=thumbnail_{image,video,document,office}` (new)
1868
- are valid routing targets. The API publisher currently emits
1869
- the legacy value only; sub-type adoption is a follow-up API PR.
2326
+ are valid routing targets. The API publisher emits the per-media
2327
+ sub-type value on the SNS `operation_type` attribute (resolved
2328
+ from the operation's effective input MIME); the payload
2329
+ `operation_type` field always remains `thumbnail`. The legacy
2330
+ bare `thumbnail` attribute value is retained as a valid routing
2331
+ target during the migration window but is no longer emitted by
2332
+ the publisher.
1870
2333
  contentType: application/json
1871
2334
  headers:
1872
2335
  $ref: '#/components/schemas/OperationRequestAttributes'
@@ -2623,9 +3086,10 @@ components:
2623
3086
  prefix per ADR-0015 — the operation is multi-input
2624
3087
  role-based with role asymmetry: required audio base +
2625
3088
  optional image overlay; routing follows the `base` role).
2626
- The operation is `availability: planned` per
2627
- [`SlluxMBN`](https://trello.com/c/SlluxMBN), so this
2628
- constraint is contract-defined but not exercised today.
3089
+ The operation is `availability: beta` per
3090
+ [`SlluxMBN`](https://trello.com/c/SlluxMBN) +
3091
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4) (Wave A activated),
3092
+ so this constraint is exercised on live traffic.
2629
3093
  - For `operation_type = image_watermark`, `media_group` must
2630
3094
  equal `image` while only the stable `image` mime_group is
2631
3095
  dispatchable. The schema declares `image_gif` and `video`
@@ -2651,6 +3115,13 @@ components:
2651
3115
  Operation type used as the SNS filter attribute on the
2652
3116
  `operations` topic. The sole routing key for non-compression
2653
3117
  traffic.
3118
+
3119
+ **`passthrough` is deliberately excluded** from this enum: a
3120
+ `passthrough` operation never goes on the wire. The API
3121
+ self-completes a passthrough source job at publish (terminal
3122
+ output = the upload bytes unchanged), so nothing is published
3123
+ to SNS and there is no `ops-passthrough` queue. Per ticket
3124
+ `4som89Uh`.
2654
3125
  enum:
2655
3126
  - thumbnail
2656
3127
  - thumbnail_image
@@ -2669,6 +3140,7 @@ components:
2669
3140
  - video_watermark
2670
3141
  - video_text_watermark
2671
3142
  - split
3143
+ - render_variants
2672
3144
  media_group:
2673
3145
  type: string
2674
3146
  description: |
@@ -2803,17 +3275,18 @@ components:
2803
3275
  API to SNS, consumed by Lambda from SQS.
2804
3276
 
2805
3277
  **Single-input operations** (compress, thumbnail, text_watermark,
2806
- convert): use `source_bucket` + `source_key` for the input file.
2807
- `file_type` is required.
3278
+ convert, audio_watermark, video_text_watermark, split): use
3279
+ `source_bucket` + `source_key` for the input file. `file_type` is
3280
+ required.
2808
3281
 
2809
3282
  **Multi-input operations** (merge, archive, image_watermark,
2810
- custom_luma, audio_overlay, audio_to_video): use `sources`
2811
- array. Each entry has `bucket` + `key`. Merge entries may
2812
- include per-input overrides (e.g. transition type). Merge
2813
- also requires `output_type`. custom_luma, audio_overlay, and
2814
- audio_to_video are
2815
- `availability: planned` so workflow-create rejects with 422
2816
- today; the wire shape is contract-defined.
3283
+ custom_luma, audio_overlay, audio_to_video, video_watermark):
3284
+ use `sources` array. Each entry has `bucket` + `key`. Merge
3285
+ entries may include per-input overrides (e.g. transition type).
3286
+ Merge also requires `output_type`. custom_luma and audio_overlay
3287
+ are `availability: planned` so workflow-create rejects with 422
3288
+ today (audio_to_video + video_watermark are now `beta` — Wave A
3289
+ activated, backends live); the wire shape is contract-defined.
2817
3290
 
2818
3291
  Note: `media_group` is **not** a field in this payload. It exists
2819
3292
  only as an SNS MessageAttribute on the non-compression branch; on
@@ -2825,6 +3298,11 @@ components:
2825
3298
  - operation_type
2826
3299
  - output_bucket
2827
3300
  - output_key_prefix
3301
+ # No `passthrough` branch below: a passthrough source job is
3302
+ # self-completed by the API at publish (output = upload bytes
3303
+ # unchanged) and is never published as an OperationRequest message,
3304
+ # so it has no single-input/multi-input required-field branch here.
3305
+ # Per ticket 4som89Uh.
2828
3306
  allOf:
2829
3307
  - if:
2830
3308
  properties:
@@ -2837,6 +3315,7 @@ components:
2837
3315
  - audio_watermark
2838
3316
  - video_text_watermark
2839
3317
  - split
3318
+ - render_variants
2840
3319
  then:
2841
3320
  required:
2842
3321
  - file_type
@@ -2911,12 +3390,13 @@ components:
2911
3390
  description: |
2912
3391
  Input files for multi-input operations (merge, archive,
2913
3392
  image_watermark, custom_luma, audio_overlay,
2914
- audio_to_video). Each entry specifies an S3 location.
2915
- Order matters for merge (concatenation order). Per-input
2916
- overrides (e.g. transition) can be inlined on each entry.
2917
- Role-based multi-input operations (image_watermark,
2918
- custom_luma, audio_overlay, audio_to_video) require a
2919
- `role` discriminator on each entry — see `SourceEntry.role`.
3393
+ audio_to_video, video_watermark). Each entry specifies an
3394
+ S3 location. Order matters for merge (concatenation order).
3395
+ Per-input overrides (e.g. transition) can be inlined on each
3396
+ entry. Role-based multi-input operations (image_watermark,
3397
+ custom_luma, audio_overlay, audio_to_video, video_watermark)
3398
+ require a `role` discriminator on each entry — see
3399
+ `SourceEntry.role`.
2920
3400
 
2921
3401
  **Minimum source count = sum of role minima** declared in
2922
3402
  the operation's `per_role_cardinality` (per ticket
@@ -3036,30 +3516,16 @@ components:
3036
3516
  description: Unique operation identifier (UUID v7).
3037
3517
  example: "018f9c42-5d6b-7481-b3df-9fd0a0a5e200"
3038
3518
  operation_type:
3039
- type: string
3040
- enum:
3041
- - compress
3042
- - merge
3043
- description: |
3044
- Coarse operation verb for the long-form job. Deliberately a
3045
- call-site subset of `OperationType` — only the long-form classes
3046
- the API actually publishes today (`compress`, `merge`). NOT the
3047
- full `OperationType` enum (which would over-promise the wire).
3519
+ $ref: '#/components/schemas/LongFormOperationType'
3048
3520
  processing_class:
3049
- type: string
3050
- const: long_form
3051
- description: |
3052
- Logical processing class — always the literal `long_form` on this
3053
- wire (never `short_form` / `blocked`; those exist only on the
3054
- upload-probe response and HTTP plan surfaces). The launcher forks
3055
- on this field; do not confuse it with the backend worker identity,
3056
- which stays off the wire per `schemas/FORMAT.md` §F8.
3521
+ $ref: '#/components/schemas/LongFormProcessingClass'
3057
3522
 
3058
3523
  SourceEntry:
3059
3524
  type: object
3060
3525
  description: |
3061
3526
  A single source file for multi-input operations (merge,
3062
- archive, image_watermark, custom_luma, audio_overlay).
3527
+ archive, image_watermark, custom_luma, audio_overlay,
3528
+ audio_to_video, video_watermark).
3063
3529
  Provides the S3 location, optional per-input overrides, and
3064
3530
  the `role` discriminator for role-based multi-input
3065
3531
  operations.
@@ -3082,9 +3548,79 @@ components:
3082
3548
  transition:
3083
3549
  type: string
3084
3550
  description: |
3085
- Per-input transition override for video merge.
3086
- Overrides the global transition option for the join point before this input.
3551
+ Per-input transition override for the join point before this
3552
+ input. Applies to both video and audio merge see the
3553
+ per-media per-input transition catalogs in
3554
+ `schemas/operations/merge.yaml`
3555
+ (`merge.video.per_input_options` / `merge.audio.per_input_options`),
3556
+ which the API validates against. Overrides the global
3557
+ `options.transition` for this join point.
3087
3558
  example: "none"
3559
+ crossfade_duration:
3560
+ type: number
3561
+ minimum: 0
3562
+ maximum: 10.0
3563
+ description: |
3564
+ Per-input crossfade duration override, in seconds, for the
3565
+ join point before this input. Overrides the global
3566
+ `options.crossfade_duration` for this join point. Per the
3567
+ `depends_on` on `merge.*.per_input_options.crossfade_duration`
3568
+ (which resolves against the sibling per-input option, see
3569
+ FORMAT.md), this takes effect only when this input's own
3570
+ `transition` override is `crossfade` — pair it with
3571
+ `transition: crossfade` on the same entry; it does NOT key off
3572
+ the global `options.transition`. Mirrors
3573
+ `merge.*.per_input_options.crossfade_duration` in
3574
+ `schemas/operations/merge.yaml` — the API validates this
3575
+ per-input value but, until this slot existed, dropped it at the
3576
+ wire boundary (the slot lets the merge Lambda's audio path
3577
+ honour it). The 0–10s bound here is a broad transport envelope;
3578
+ the effective per-media limits (video crossfade `0.1`–`5.0`,
3579
+ audio `0`–`10`) are enforced by the per-mime-group
3580
+ operation-options schema in `merge.yaml`, which the API
3581
+ validates against before publishing.
3582
+ example: 1.0
3583
+ gap_duration:
3584
+ type: number
3585
+ minimum: 0
3586
+ maximum: 10.0
3587
+ description: |
3588
+ Per-input silence/gap duration override, in seconds, inserted
3589
+ before this input at the join point. Overrides the global
3590
+ `options.gap_duration` for this join point. Mirrors
3591
+ `merge.audio.per_input_options.gap_duration` in
3592
+ `schemas/operations/merge.yaml` (no transition dependency) —
3593
+ added alongside `crossfade_duration` so the API does not
3594
+ silently drop this sibling per-input audio override at the wire
3595
+ boundary.
3596
+ example: 0.5
3597
+ trim_start:
3598
+ type: number
3599
+ minimum: 0
3600
+ description: |
3601
+ Per-input trim from the beginning, in seconds, applied to
3602
+ this input BEFORE the transition/crossfade step. Mirrors
3603
+ `merge.{video,audio}.per_input_options.trim_start` in
3604
+ `schemas/operations/merge.yaml`; same "trim from beginning"
3605
+ semantic as `compress` trim. No `maximum` — the upper bound
3606
+ is the input's own duration, enforced by the worker, not
3607
+ statically bounded at the wire. Wire slot added so the API
3608
+ does not drop this per-input override at the boundary
3609
+ (mirrors the crossfade_duration/gap_duration precedent).
3610
+ example: 1.5
3611
+ trim_end:
3612
+ type: number
3613
+ minimum: 0
3614
+ description: |
3615
+ Per-input trim from the end, in seconds, applied to this
3616
+ input BEFORE the transition/crossfade step. Mirrors
3617
+ `merge.{video,audio}.per_input_options.trim_end` in
3618
+ `schemas/operations/merge.yaml`; same "trim from end"
3619
+ semantic as `compress` trim. No `maximum` — bounded by the
3620
+ input's own duration at the worker, not statically. Wire
3621
+ slot added so the API does not drop this per-input override
3622
+ at the boundary.
3623
+ example: 2.0
3088
3624
 
3089
3625
  # ============================================
3090
3626
  # OPERATION PROGRESS SCHEMA
@@ -3151,8 +3687,9 @@ components:
3151
3687
  `phase_input_index`. For single-input operations (most
3152
3688
  ops) `phase_total_inputs: 1` and `phase_input_index: 1`
3153
3689
  during the relevant phase. For multi-input merge,
3154
- archive, image_watermark, custom_luma, and audio_overlay,
3155
- this matches the inputs[] count. Per ticket I27.
3690
+ archive, image_watermark, custom_luma, audio_overlay,
3691
+ audio_to_video, and video_watermark, this matches the
3692
+ inputs[] count. Per ticket I27.
3156
3693
  example: 4
3157
3694
 
3158
3695
  # ============================================
@@ -3329,6 +3866,8 @@ components:
3329
3866
 
3330
3867
  metrics:
3331
3868
  $ref: '#/components/schemas/OperationMetrics'
3869
+ result_metadata:
3870
+ $ref: '#/components/schemas/OperationResultMetadata'
3332
3871
 
3333
3872
  # Failure fields
3334
3873
  error_code:
@@ -3348,6 +3887,32 @@ components:
3348
3887
  description: Progress percentage when the operation failed (failed only)
3349
3888
  example: 10
3350
3889
 
3890
+ OperationResultMetadata:
3891
+ type: object
3892
+ additionalProperties: false
3893
+ description: |
3894
+ Whitelisted, named operation-level result metadata — a **CLOSED**
3895
+ set of declared keys carried on the wire result (Lambda → API). The
3896
+ API persists only declared keys and serves only declared keys (a
3897
+ whitelist projection on the read side), never the raw bag, so
3898
+ internal diagnostics never leak. New keys are **additive named
3899
+ cuts**. Twin of the OpenAPI `OperationResultMetadata` (wire ↔ read
3900
+ parity — same named-prop shape). Distinct from the deliverable
3901
+ output (`output_key` / `outputs[]`): small per-operation metadata,
3902
+ not the file. Per ticket EurbZLMH (B1).
3903
+ properties:
3904
+ watermark_id:
3905
+ type: string
3906
+ format: uuid
3907
+ description: |
3908
+ UUIDv7 of the watermark embedded by an `audio_watermark`
3909
+ operation (for later decode/verify). **Display-only / not yet
3910
+ populated** — gated on the audio_watermark Lambda (EvPl5fkH, B3)
3911
+ + the watermark registry (B2, deferred). The field + whitelist
3912
+ ship now (additive) so the pipeline + read projection land
3913
+ without a later contract bump; absent until B3 is live.
3914
+ example: "018f9c42-5d6b-7481-b3df-9fd0a0a5e112"
3915
+
3351
3916
  OperationResultOutputEntry:
3352
3917
  type: object
3353
3918
  description: |
@@ -3373,9 +3938,11 @@ components:
3373
3938
  not: { required: [page_index] }
3374
3939
  - title: Unindexed
3375
3940
  description: |
3376
- Output without an explicit indexing field. Reserved for future
3377
- operations that index by something other than page/position.
3378
- Schema-valid but not currently emitted by any operation.
3941
+ Output without a page/position indexing field. Covers legacy
3942
+ single-output entries AND `render_variants` variant outputs (the
3943
+ latter carry the optional `target_id` correlation field — the
3944
+ image-fan-out addressing contract — but are not page/position
3945
+ indexed). Per ADR-0009 §D2.
3379
3946
  not:
3380
3947
  anyOf:
3381
3948
  - required: [page_index]
@@ -3412,6 +3979,18 @@ components:
3412
3979
  strip, chapter split). Mutually exclusive with `page_index`.
3413
3980
  Per ADR-0009 §D2.
3414
3981
  example: 0
3982
+ target_id:
3983
+ type: string
3984
+ pattern: '^[A-Za-z0-9._-]+$'
3985
+ maxLength: 64
3986
+ description: |
3987
+ The caller-assigned `id` of the `render_variants` target that
3988
+ produced this output, echoed verbatim — the addressing contract
3989
+ for image fan-out. Carried on the `Unindexed` branch (variant
3990
+ outputs are not page/position indexed); no operation emits
3991
+ `target_id` together with `page_index` / `position`. Per ticket
3992
+ `w3EwzHYd`.
3993
+ example: "thumb-2x"
3415
3994
 
3416
3995
  # ============================================
3417
3996
  # WORKFLOW STATE CHANGED (per ticket I24)
@@ -4033,10 +4612,10 @@ components:
4033
4612
  the first OPTIONAL role on the contract — `role: base`
4034
4613
  audio required, `role: overlay` image 0..1 per
4035
4614
  `per_role_cardinality`). When overlay is omitted, the video
4036
- uses a solid background colour. `availability: planned` per
4037
- the operation schema; the API rejects workflow-create with
4038
- `feature_not_available` (422) until the Lambda ships, so
4039
- traffic does not reach SNS today. `media_group` is derived
4615
+ uses a solid background colour. `availability: beta` (Wave A,
4616
+ [`c3uthIP4`](https://trello.com/c/c3uthIP4)) the Lambda
4617
+ backend is live, so the API accepts + publishes (MUST NOT 422);
4618
+ traffic flows to SNS. `media_group` is derived
4040
4619
  from the `base` role input MIME prefix per ADR-0015 (always
4041
4620
  `audio` for audio_to_video). Routes via
4042
4621
  `operation_type=audio_to_video` to `ops-audio-to-video`.
@@ -4047,7 +4626,9 @@ components:
4047
4626
  of each per `per_role_cardinality { base: 1/1, overlay:
4048
4627
  1/1 }`). Re-encode required; audio stream-copy passthrough.
4049
4628
  Distinct from `image_watermark` (pure-Rust/image-only —
4050
- see ADR-0013). `availability: planned`; routes via
4629
+ see ADR-0013). `availability: beta` (Wave A, `c3uthIP4` —
4630
+ Lambda backend live; `short_form` beta, `long_form` stays
4631
+ `planned`); routes via
4051
4632
  `operation_type=video_watermark` to `ops-video-watermark`.
4052
4633
  Per ADR-0004 + ADR-0013
4053
4634
  ([`4NrRPCgh`](https://trello.com/c/4NrRPCgh)).
@@ -4069,10 +4650,20 @@ components:
4069
4650
  a separate `split-video-fargate` worker via
4070
4651
  `processing_class`. `media_group` derives from the input
4071
4652
  MIME prefix per the existing single-input rule (no
4072
- operation-specific conditional needed). `availability:
4073
- planned`; routes via `operation_type=split` to `ops-split`.
4653
+ operation-specific conditional needed). `availability: beta`
4654
+ for the `audio` and `video` (short-form) mime_groups
4655
+ (`image_gif` / `document_pdf` and video `long_form` stay
4656
+ `planned`); routes via `operation_type=split`
4657
+ to `ops-split`.
4074
4658
  Per ADR-0004 + ADR-0014
4075
4659
  ([`vKI0CFDu`](https://trello.com/c/vKI0CFDu)).
4660
+
4661
+ Note: the `passthrough` OpenAPI operation is **deliberately
4662
+ absent** from this payload enum. A passthrough source job is
4663
+ self-completed by the API at publish (its output is the upload
4664
+ bytes unchanged) and is never dispatched as an
4665
+ `OperationRequest` message — so it carries no wire payload and
4666
+ needs no SNS routing value. Per ticket `4som89Uh`.
4076
4667
  enum:
4077
4668
  - compress
4078
4669
  - thumbnail
@@ -4088,6 +4679,7 @@ components:
4088
4679
  - video_watermark
4089
4680
  - video_text_watermark
4090
4681
  - split
4682
+ - render_variants
4091
4683
 
4092
4684
  MediaGroup:
4093
4685
  type: string
@@ -4208,6 +4800,47 @@ components:
4208
4800
  - stream_copy
4209
4801
  - re_encode
4210
4802
 
4803
+ LongFormOperationType:
4804
+ type: string
4805
+ description: |
4806
+ Coarse operation verb for the long-form claim-check job
4807
+ (`LongFormJobMessage.operation_type`). Deliberately a call-site
4808
+ **subset** of `OperationType` — only the long-form classes the API
4809
+ actually publishes today (`compress`, `merge`). NOT the full
4810
+ `OperationType` enum (which would over-promise the wire). Future
4811
+ long-form publishers (e.g. `split` per
4812
+ [`rcwvUKhI`](https://trello.com/c/rcwvUKhI)) widen this enum when
4813
+ they ship.
4814
+
4815
+ Named-schema form lifted from inline at
4816
+ `LongFormJobMessage.operation_type` per ticket
4817
+ [`A3DyuYUd`](https://trello.com/c/A3DyuYUd) — generated SDK bindings
4818
+ emit a stable typed name instead of an `AnonymousSchema_N`
4819
+ placeholder.
4820
+ enum:
4821
+ - compress
4822
+ - merge
4823
+
4824
+ LongFormProcessingClass:
4825
+ type: string
4826
+ description: |
4827
+ Logical processing class on the long-form claim-check wire
4828
+ (`LongFormJobMessage.processing_class`) — always the literal
4829
+ `long_form` (never `short_form` / `blocked`; those exist only on the
4830
+ upload-probe response and HTTP plan surfaces). The launcher forks on
4831
+ this field; do not confuse it with the backend worker identity, which
4832
+ stays off the wire per `schemas/FORMAT.md` §F8.
4833
+
4834
+ A single-value enum (not a JSON-Schema `const`): named + `enum` is the
4835
+ repo's proven typed-codegen form (mirrors `JobInputRole` /
4836
+ `ReEncodeDecision`), whereas `const` degraded to an unconstrained
4837
+ `String` in SDK generators. Lifted from inline at
4838
+ `LongFormJobMessage.processing_class` per ticket
4839
+ [`A3DyuYUd`](https://trello.com/c/A3DyuYUd). Single-member enum
4840
+ validates identically to the prior `const long_form`.
4841
+ enum:
4842
+ - long_form
4843
+
4211
4844
  ProgressStatus:
4212
4845
  type: string
4213
4846
  description: |