@giveitsmaller/contracts 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/asyncapi/events.yaml +548 -139
- package/availability/availability.json +59 -22
- package/dist/asyncapi/LongFormJobMessage.d.ts +11 -0
- package/dist/asyncapi/LongFormJobMessage.js +1 -0
- package/dist/asyncapi/LongFormOperationType.d.ts +5 -0
- package/dist/asyncapi/LongFormOperationType.js +6 -0
- package/dist/asyncapi/LongFormProcessingClass.d.ts +4 -0
- package/dist/asyncapi/LongFormProcessingClass.js +5 -0
- package/dist/asyncapi/SourceEntry.d.ts +2 -0
- package/dist/asyncapi/index.d.ts +3 -0
- package/dist/asyncapi/index.js +2 -0
- package/dist/openapi/models/AudioWatermarkDecodeRequest.d.ts +2 -2
- package/dist/openapi/models/AudioWatermarkDecodeRequest.js +2 -2
- package/dist/openapi/models/AudioWatermarkDecodeResponse.d.ts +2 -2
- package/dist/openapi/models/AudioWatermarkDecodeResponse.js +2 -2
- package/dist/openapi/models/AuthErrorResponse.d.ts +9 -6
- package/dist/openapi/models/AuthErrorResponse.js +2 -2
- package/dist/openapi/models/AuthErrorType.d.ts +2 -2
- package/dist/openapi/models/AuthErrorType.js +2 -2
- package/dist/openapi/models/AvailabilityValue.d.ts +2 -2
- package/dist/openapi/models/AvailabilityValue.js +2 -2
- package/dist/openapi/models/BalanceExhaustedResponse.d.ts +2 -2
- package/dist/openapi/models/BalanceExhaustedResponse.js +2 -2
- package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.d.ts +2 -2
- package/dist/openapi/models/BalanceExhaustedResponseAllOfLinks.js +2 -2
- package/dist/openapi/models/CallbackEventType.d.ts +2 -2
- package/dist/openapi/models/CallbackEventType.js +2 -2
- package/dist/openapi/models/ConnectionSource.d.ts +2 -2
- package/dist/openapi/models/ConnectionSource.js +2 -2
- package/dist/openapi/models/ContactRequest.d.ts +2 -2
- package/dist/openapi/models/ContactRequest.js +2 -2
- package/dist/openapi/models/ContactSubject.d.ts +2 -2
- package/dist/openapi/models/ContactSubject.js +2 -2
- package/dist/openapi/models/ContactValidationErrorResponse.d.ts +2 -2
- package/dist/openapi/models/ContactValidationErrorResponse.js +2 -2
- package/dist/openapi/models/CreateExternalImport403Response.d.ts +2 -2
- package/dist/openapi/models/CreateExternalImport403Response.js +2 -2
- package/dist/openapi/models/CreateExternalImport422Response.d.ts +7 -3
- package/dist/openapi/models/CreateExternalImport422Response.js +18 -22
- package/dist/openapi/models/CreateWorkflow422Response.d.ts +11 -3
- package/dist/openapi/models/CreateWorkflow422Response.js +28 -36
- package/dist/openapi/models/CreditTransaction.d.ts +2 -2
- package/dist/openapi/models/CreditTransaction.js +2 -2
- package/dist/openapi/models/CreditTransactionSourceBucket.d.ts +2 -2
- package/dist/openapi/models/CreditTransactionSourceBucket.js +2 -2
- package/dist/openapi/models/CreditsBalanceResponse.d.ts +2 -2
- package/dist/openapi/models/CreditsBalanceResponse.js +2 -2
- package/dist/openapi/models/CreditsBalanceSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/CreditsBalanceSuccessEnvelope.js +2 -2
- package/dist/openapi/models/CreditsUsageResponse.d.ts +2 -2
- package/dist/openapi/models/CreditsUsageResponse.js +2 -2
- package/dist/openapi/models/CreditsUsageSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/CreditsUsageSuccessEnvelope.js +2 -2
- package/dist/openapi/models/Delivery.d.ts +16 -3
- package/dist/openapi/models/Delivery.js +2 -2
- package/dist/openapi/models/DeliveryOutputRef.d.ts +2 -2
- package/dist/openapi/models/DeliveryOutputRef.js +2 -2
- package/dist/openapi/models/DeliveryPlan.d.ts +2 -2
- package/dist/openapi/models/DeliveryPlan.js +2 -2
- package/dist/openapi/models/DeliveryPlanOutput.d.ts +2 -2
- package/dist/openapi/models/DeliveryPlanOutput.js +2 -2
- package/dist/openapi/models/DeliveryPlanReason.d.ts +2 -2
- package/dist/openapi/models/DeliveryPlanReason.js +2 -2
- package/dist/openapi/models/DeliverySelection.d.ts +2 -2
- package/dist/openapi/models/DeliverySelection.js +2 -2
- package/dist/openapi/models/EndpointProjection.d.ts +2 -2
- package/dist/openapi/models/EndpointProjection.js +2 -2
- package/dist/openapi/models/ErrorEnvelope.d.ts +9 -6
- package/dist/openapi/models/ErrorEnvelope.js +2 -2
- package/dist/openapi/models/EstimateQuality.d.ts +2 -2
- package/dist/openapi/models/EstimateQuality.js +2 -2
- package/dist/openapi/models/EstimateRange.d.ts +2 -2
- package/dist/openapi/models/EstimateRange.js +2 -2
- package/dist/openapi/models/ExternalDestination.d.ts +2 -2
- package/dist/openapi/models/ExternalDestination.js +2 -2
- package/dist/openapi/models/ExternalImportCreatedResponse.d.ts +2 -2
- package/dist/openapi/models/ExternalImportCreatedResponse.js +2 -2
- package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/ExternalImportCreatedSuccessEnvelope.js +2 -2
- package/dist/openapi/models/ExternalImportRequest.d.ts +2 -2
- package/dist/openapi/models/ExternalImportRequest.js +2 -2
- package/dist/openapi/models/ExternalImportToken.d.ts +2 -2
- package/dist/openapi/models/ExternalImportToken.js +2 -2
- package/dist/openapi/models/ExternalSource.d.ts +2 -2
- package/dist/openapi/models/ExternalSource.js +2 -2
- package/dist/openapi/models/FeatureNotAvailableResponse.d.ts +15 -13
- package/dist/openapi/models/FeatureNotAvailableResponse.js +2 -2
- package/dist/openapi/models/FeatureTierRestrictedResponse.d.ts +9 -6
- package/dist/openapi/models/FeatureTierRestrictedResponse.js +2 -2
- package/dist/openapi/models/FeatureViolation.d.ts +2 -2
- package/dist/openapi/models/FeatureViolation.js +2 -2
- package/dist/openapi/models/JobDefinition.d.ts +9 -6
- package/dist/openapi/models/JobDefinition.js +2 -2
- package/dist/openapi/models/JobDownload.d.ts +2 -2
- package/dist/openapi/models/JobDownload.js +2 -2
- package/dist/openapi/models/JobInputV2.d.ts +2 -2
- package/dist/openapi/models/JobInputV2.js +2 -2
- package/dist/openapi/models/JobOutputSource.d.ts +2 -2
- package/dist/openapi/models/JobOutputSource.js +2 -2
- package/dist/openapi/models/JobResponse.d.ts +24 -2
- package/dist/openapi/models/JobResponse.js +5 -2
- package/dist/openapi/models/JobStatus.d.ts +2 -2
- package/dist/openapi/models/JobStatus.js +2 -2
- package/dist/openapi/models/JobType.d.ts +2 -2
- package/dist/openapi/models/JobType.js +2 -2
- package/dist/openapi/models/LivenessResponse.d.ts +2 -2
- package/dist/openapi/models/LivenessResponse.js +2 -2
- package/dist/openapi/models/LoginUser200Response.d.ts +2 -2
- package/dist/openapi/models/LoginUser200Response.js +2 -2
- package/dist/openapi/models/LoginUser200ResponseData.d.ts +2 -2
- package/dist/openapi/models/LoginUser200ResponseData.js +2 -2
- package/dist/openapi/models/LoginUser200ResponseDataUser.d.ts +2 -2
- package/dist/openapi/models/LoginUser200ResponseDataUser.js +2 -2
- package/dist/openapi/models/LoginUserRequest.d.ts +2 -2
- package/dist/openapi/models/LoginUserRequest.js +2 -2
- package/dist/openapi/models/LogoutUser200Response.d.ts +2 -2
- package/dist/openapi/models/LogoutUser200Response.js +2 -2
- package/dist/openapi/models/MetadataResponse.d.ts +2 -2
- package/dist/openapi/models/MetadataResponse.js +2 -2
- package/dist/openapi/models/MetadataResponseDimensions.d.ts +2 -2
- package/dist/openapi/models/MetadataResponseDimensions.js +2 -2
- package/dist/openapi/models/MetadataResponseExif.d.ts +2 -2
- package/dist/openapi/models/MetadataResponseExif.js +2 -2
- package/dist/openapi/models/MetadataResponseExifGps.d.ts +2 -2
- package/dist/openapi/models/MetadataResponseExifGps.js +2 -2
- package/dist/openapi/models/MetadataSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MetadataSuccessEnvelope.js +2 -2
- package/dist/openapi/models/MimeGroupSchema.d.ts +2 -2
- package/dist/openapi/models/MimeGroupSchema.js +2 -2
- package/dist/openapi/models/MultipartCompleteRequest.d.ts +2 -2
- package/dist/openapi/models/MultipartCompleteRequest.js +2 -2
- package/dist/openapi/models/MultipartCompleteRequestPartsInner.d.ts +2 -2
- package/dist/openapi/models/MultipartCompleteRequestPartsInner.js +2 -2
- package/dist/openapi/models/MultipartCompleteResponse.d.ts +2 -2
- package/dist/openapi/models/MultipartCompleteResponse.js +2 -2
- package/dist/openapi/models/MultipartCompleteSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MultipartCompleteSuccessEnvelope.js +2 -2
- package/dist/openapi/models/MultipartInitiateRequestMetadataHint.d.ts +2 -2
- package/dist/openapi/models/MultipartInitiateRequestMetadataHint.js +2 -2
- package/dist/openapi/models/MultipartInitiateResponse.d.ts +2 -2
- package/dist/openapi/models/MultipartInitiateResponse.js +2 -2
- package/dist/openapi/models/MultipartInitiateSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MultipartInitiateSuccessEnvelope.js +2 -2
- package/dist/openapi/models/MultipartKeepaliveResponse.d.ts +2 -2
- package/dist/openapi/models/MultipartKeepaliveResponse.js +2 -2
- package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MultipartKeepaliveSuccessEnvelope.js +2 -2
- package/dist/openapi/models/MultipartPartListing.d.ts +2 -2
- package/dist/openapi/models/MultipartPartListing.js +2 -2
- package/dist/openapi/models/MultipartPresignRequest.d.ts +2 -2
- package/dist/openapi/models/MultipartPresignRequest.js +2 -2
- package/dist/openapi/models/MultipartPresignResponse.d.ts +2 -2
- package/dist/openapi/models/MultipartPresignResponse.js +2 -2
- package/dist/openapi/models/MultipartPresignSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MultipartPresignSuccessEnvelope.js +2 -2
- package/dist/openapi/models/MultipartStatusResponse.d.ts +2 -2
- package/dist/openapi/models/MultipartStatusResponse.js +2 -2
- package/dist/openapi/models/MultipartStatusSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/MultipartStatusSuccessEnvelope.js +2 -2
- package/dist/openapi/models/OperationDefinition.d.ts +2 -2
- package/dist/openapi/models/OperationDefinition.js +2 -2
- package/dist/openapi/models/OperationDownload.d.ts +2 -2
- package/dist/openapi/models/OperationDownload.js +2 -2
- package/dist/openapi/models/OperationInputModel.d.ts +2 -2
- package/dist/openapi/models/OperationInputModel.js +2 -2
- package/dist/openapi/models/OperationResponse.d.ts +2 -2
- package/dist/openapi/models/OperationResponse.js +2 -2
- package/dist/openapi/models/OperationResult.d.ts +2 -2
- package/dist/openapi/models/OperationResult.js +2 -2
- package/dist/openapi/models/OperationResultMetrics.d.ts +21 -2
- package/dist/openapi/models/OperationResultMetrics.js +7 -2
- package/dist/openapi/models/OperationSchemaDefinition.d.ts +2 -2
- package/dist/openapi/models/OperationSchemaDefinition.js +2 -2
- package/dist/openapi/models/OperationStatus.d.ts +2 -2
- package/dist/openapi/models/OperationStatus.js +2 -2
- package/dist/openapi/models/OperationType.d.ts +15 -13
- package/dist/openapi/models/OperationType.js +15 -13
- package/dist/openapi/models/OperationsSchemaResponse.d.ts +9 -2
- package/dist/openapi/models/OperationsSchemaResponse.js +5 -2
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.d.ts +55 -0
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeatures.js +42 -0
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.d.ts +40 -0
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDelivery.js +45 -0
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.d.ts +45 -0
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliveryMode.js +43 -0
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.d.ts +33 -0
- package/dist/openapi/models/OperationsSchemaResponseWorkflowFeaturesDeliverySelection.js +42 -0
- package/dist/openapi/models/OptionSchema.d.ts +22 -2
- package/dist/openapi/models/OptionSchema.js +4 -2
- package/dist/openapi/models/PerRoleCardinalityEntry.d.ts +2 -2
- package/dist/openapi/models/PerRoleCardinalityEntry.js +2 -2
- package/dist/openapi/models/PerValueAvailabilityEntry.d.ts +2 -2
- package/dist/openapi/models/PerValueAvailabilityEntry.js +2 -2
- package/dist/openapi/models/PresignedUrlPart.d.ts +2 -2
- package/dist/openapi/models/PresignedUrlPart.js +2 -2
- package/dist/openapi/models/ProbePendingResponse.d.ts +16 -12
- package/dist/openapi/models/ProbePendingResponse.js +2 -2
- package/dist/openapi/models/ProcessingClass.d.ts +2 -2
- package/dist/openapi/models/ProcessingClass.js +2 -2
- package/dist/openapi/models/ProcessingClassBandViolation.d.ts +2 -2
- package/dist/openapi/models/ProcessingClassBandViolation.js +2 -2
- package/dist/openapi/models/ProcessingClassExceedsBandResponse.d.ts +15 -10
- package/dist/openapi/models/ProcessingClassExceedsBandResponse.js +2 -2
- package/dist/openapi/models/ProcessingClassHint.d.ts +2 -2
- package/dist/openapi/models/ProcessingClassHint.js +2 -2
- package/dist/openapi/models/ProcessingClassReason.d.ts +2 -2
- package/dist/openapi/models/ProcessingClassReason.js +2 -2
- package/dist/openapi/models/ProcessingClassRejectReason.d.ts +2 -2
- package/dist/openapi/models/ProcessingClassRejectReason.js +2 -2
- package/dist/openapi/models/ProcessingPlan.d.ts +2 -2
- package/dist/openapi/models/ProcessingPlan.js +2 -2
- package/dist/openapi/models/ProcessingPlanJob.d.ts +2 -2
- package/dist/openapi/models/ProcessingPlanJob.js +2 -2
- package/dist/openapi/models/ReEncodeDecision.d.ts +38 -0
- package/dist/openapi/models/ReEncodeDecision.js +56 -0
- package/dist/openapi/models/ReadinessResponse.d.ts +2 -2
- package/dist/openapi/models/ReadinessResponse.js +2 -2
- package/dist/openapi/models/ResponseEnvelope.d.ts +2 -2
- package/dist/openapi/models/ResponseEnvelope.js +2 -2
- package/dist/openapi/models/RetryResponse.d.ts +2 -2
- package/dist/openapi/models/RetryResponse.js +2 -2
- package/dist/openapi/models/RetrySuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/RetrySuccessEnvelope.js +2 -2
- package/dist/openapi/models/SseCompletionBase.d.ts +2 -2
- package/dist/openapi/models/SseCompletionBase.js +2 -2
- package/dist/openapi/models/SseEventType.d.ts +2 -2
- package/dist/openapi/models/SseEventType.js +2 -2
- package/dist/openapi/models/SseJobCompletedData.d.ts +2 -2
- package/dist/openapi/models/SseJobCompletedData.js +2 -2
- package/dist/openapi/models/SseJobFailedData.d.ts +2 -2
- package/dist/openapi/models/SseJobFailedData.js +2 -2
- package/dist/openapi/models/SseMultiOutputCompletion.d.ts +2 -2
- package/dist/openapi/models/SseMultiOutputCompletion.js +2 -2
- package/dist/openapi/models/SseMultiOutputCompletionMetrics.d.ts +2 -2
- package/dist/openapi/models/SseMultiOutputCompletionMetrics.js +2 -2
- package/dist/openapi/models/SseMultiOutputCompletionWithKind.d.ts +2 -2
- package/dist/openapi/models/SseMultiOutputCompletionWithKind.js +2 -2
- package/dist/openapi/models/SseMultiOutputResultEntry.d.ts +2 -2
- package/dist/openapi/models/SseMultiOutputResultEntry.js +2 -2
- package/dist/openapi/models/SseOperationCompletedData.d.ts +2 -2
- package/dist/openapi/models/SseOperationCompletedData.js +2 -2
- package/dist/openapi/models/SseOperationCompletionResult.d.ts +2 -2
- package/dist/openapi/models/SseOperationCompletionResult.js +2 -2
- package/dist/openapi/models/SseOperationFailedData.d.ts +2 -2
- package/dist/openapi/models/SseOperationFailedData.js +2 -2
- package/dist/openapi/models/SseOperationProgressData.d.ts +4 -3
- package/dist/openapi/models/SseOperationProgressData.js +2 -2
- package/dist/openapi/models/SseSingleOutputCompletion.d.ts +2 -2
- package/dist/openapi/models/SseSingleOutputCompletion.js +2 -2
- package/dist/openapi/models/SseWorkflowTerminalData.d.ts +2 -2
- package/dist/openapi/models/SseWorkflowTerminalData.js +2 -2
- package/dist/openapi/models/TierRestrictionKind.d.ts +2 -2
- package/dist/openapi/models/TierRestrictionKind.js +2 -2
- package/dist/openapi/models/TierRestrictionResponse.d.ts +9 -6
- package/dist/openapi/models/TierRestrictionResponse.js +2 -2
- package/dist/openapi/models/UploadConstraintsApplied.d.ts +2 -2
- package/dist/openapi/models/UploadConstraintsApplied.js +2 -2
- package/dist/openapi/models/UploadDurationExceedsTierResponse.d.ts +9 -6
- package/dist/openapi/models/UploadDurationExceedsTierResponse.js +2 -2
- package/dist/openapi/models/UploadFile403Response.d.ts +2 -2
- package/dist/openapi/models/UploadFile403Response.js +2 -2
- package/dist/openapi/models/UploadFile422Response.d.ts +2 -2
- package/dist/openapi/models/UploadFile422Response.js +2 -2
- package/dist/openapi/models/UploadProbeMediaMetadata.d.ts +16 -5
- package/dist/openapi/models/UploadProbeMediaMetadata.js +2 -2
- package/dist/openapi/models/UploadProbeProcessingClass.d.ts +2 -2
- package/dist/openapi/models/UploadProbeProcessingClass.js +2 -2
- package/dist/openapi/models/UploadProbeResponse.d.ts +2 -2
- package/dist/openapi/models/UploadProbeResponse.js +2 -2
- package/dist/openapi/models/UploadProbeStatus.d.ts +2 -2
- package/dist/openapi/models/UploadProbeStatus.js +2 -2
- package/dist/openapi/models/UploadProbeSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/UploadProbeSuccessEnvelope.js +2 -2
- package/dist/openapi/models/UploadResponse.d.ts +2 -2
- package/dist/openapi/models/UploadResponse.js +2 -2
- package/dist/openapi/models/UploadSizeExceedsTierResponse.d.ts +9 -6
- package/dist/openapi/models/UploadSizeExceedsTierResponse.js +2 -2
- package/dist/openapi/models/UploadSource.d.ts +2 -2
- package/dist/openapi/models/UploadSource.js +2 -2
- package/dist/openapi/models/UploadSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/UploadSuccessEnvelope.js +2 -2
- package/dist/openapi/models/UploadThresholds.d.ts +2 -2
- package/dist/openapi/models/UploadThresholds.js +2 -2
- package/dist/openapi/models/UserTier.d.ts +2 -2
- package/dist/openapi/models/UserTier.js +2 -2
- package/dist/openapi/models/ValidationErrorEnvelope.d.ts +33 -3
- package/dist/openapi/models/ValidationErrorEnvelope.js +12 -2
- package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.d.ts +2 -2
- package/dist/openapi/models/ValidationErrorEnvelopeDetailsInner.js +2 -2
- package/dist/openapi/models/WarningType.d.ts +2 -2
- package/dist/openapi/models/WarningType.js +2 -2
- package/dist/openapi/models/WebhookOperationContext.d.ts +2 -2
- package/dist/openapi/models/WebhookOperationContext.js +2 -2
- package/dist/openapi/models/WebhookPayload.d.ts +2 -2
- package/dist/openapi/models/WebhookPayload.js +2 -2
- package/dist/openapi/models/WorkflowCancelBillingEffect.d.ts +2 -2
- package/dist/openapi/models/WorkflowCancelBillingEffect.js +2 -2
- package/dist/openapi/models/WorkflowCancelResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowCancelResponse.js +2 -2
- package/dist/openapi/models/WorkflowCancelSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowCancelSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowCreateRequest.d.ts +2 -2
- package/dist/openapi/models/WorkflowCreateRequest.js +2 -2
- package/dist/openapi/models/WorkflowCreateResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowCreateResponse.js +2 -2
- package/dist/openapi/models/WorkflowCreateSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowCreateSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowDownloadResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowDownloadResponse.js +2 -2
- package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowDownloadSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowEdge.d.ts +2 -2
- package/dist/openapi/models/WorkflowEdge.js +2 -2
- package/dist/openapi/models/WorkflowExpiredResponse.d.ts +9 -6
- package/dist/openapi/models/WorkflowExpiredResponse.js +2 -2
- package/dist/openapi/models/WorkflowPauseRequiredAction.d.ts +2 -2
- package/dist/openapi/models/WorkflowPauseRequiredAction.js +2 -2
- package/dist/openapi/models/WorkflowPausedDetail.d.ts +2 -2
- package/dist/openapi/models/WorkflowPausedDetail.js +2 -2
- package/dist/openapi/models/WorkflowPausedDetailLinks.d.ts +2 -2
- package/dist/openapi/models/WorkflowPausedDetailLinks.js +2 -2
- package/dist/openapi/models/WorkflowProcessing.d.ts +2 -2
- package/dist/openapi/models/WorkflowProcessing.js +2 -2
- package/dist/openapi/models/WorkflowResumeResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowResumeResponse.js +2 -2
- package/dist/openapi/models/WorkflowResumeSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowResumeSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowSource.d.ts +2 -2
- package/dist/openapi/models/WorkflowSource.js +2 -2
- package/dist/openapi/models/WorkflowStatus.d.ts +2 -2
- package/dist/openapi/models/WorkflowStatus.js +2 -2
- package/dist/openapi/models/WorkflowStatusResponse.d.ts +2 -2
- package/dist/openapi/models/WorkflowStatusResponse.js +2 -2
- package/dist/openapi/models/WorkflowStatusSuccessEnvelope.d.ts +2 -2
- package/dist/openapi/models/WorkflowStatusSuccessEnvelope.js +2 -2
- package/dist/openapi/models/WorkflowWarning.d.ts +2 -2
- package/dist/openapi/models/WorkflowWarning.js +2 -2
- package/dist/openapi/models/WorkflowWarningSeverity.d.ts +2 -2
- package/dist/openapi/models/WorkflowWarningSeverity.js +2 -2
- package/dist/openapi/models/index.d.ts +5 -0
- package/dist/openapi/models/index.js +5 -0
- package/dist/openapi/runtime.d.ts +2 -2
- package/dist/openapi/runtime.js +2 -2
- package/dist/operations/audio_to_video.metadata.js +1 -1
- package/dist/operations/merge.metadata.js +0 -3
- package/dist/operations/split.metadata.js +5 -1
- package/dist/operations/video_watermark.metadata.js +2 -2
- package/openapi/api.yaml +415 -98
- package/operations/schemas/audio_to_video.yaml +6 -4
- package/operations/schemas/custom_luma.yaml +3 -4
- package/operations/schemas/merge.yaml +20 -16
- package/operations/schemas/split.yaml +11 -4
- package/operations/schemas/video_watermark.yaml +13 -5
- package/package.json +1 -1
package/asyncapi/events.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
asyncapi: 3.0.0
|
|
2
2
|
info:
|
|
3
3
|
title: GISL Compression Events
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.9.0
|
|
5
5
|
description: |
|
|
6
6
|
Asynchronous event contracts for the GISL (Give It Smaller) compression service.
|
|
7
7
|
|
|
@@ -21,16 +21,20 @@ 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
|
-
`
|
|
26
|
-
|
|
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
|
-
[`
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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` mime_group (worker live on
|
|
32
|
+
staging — [`vKI0CFDu`](https://trello.com/c/vKI0CFDu)); its
|
|
33
|
+
`image_gif`, `document_pdf`, and `video` mime_groups stay
|
|
34
|
+
`availability: planned`.
|
|
35
|
+
`audio_to_video` and `video_watermark` are `availability: beta`
|
|
36
|
+
(Wave A activation [`c3uthIP4`](https://trello.com/c/c3uthIP4) —
|
|
37
|
+
backends live; the API accepts + publishes, traffic flows).
|
|
34
38
|
`audio_watermark` additionally requires `enterprise` tier.
|
|
35
39
|
|
|
36
40
|
**Publisher branching rule** (implemented in `compression_api`'s
|
|
@@ -54,11 +58,13 @@ info:
|
|
|
54
58
|
**Thumbnail migration window.** The terraform topology has both the
|
|
55
59
|
legacy `ops-thumbnail` queue and four new sub-type queues
|
|
56
60
|
(`ops-thumbnail-{image,video,document,office}`) live simultaneously.
|
|
57
|
-
The API publisher
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
The API publisher emits the four sub-type values (`thumbnail_image`,
|
|
62
|
+
`thumbnail_video`, `thumbnail_document`, `thumbnail_office`) on the
|
|
63
|
+
SNS `operation_type` attribute, resolved from each operation's
|
|
64
|
+
effective input MIME; the legacy `operation_type=thumbnail` attribute
|
|
65
|
+
is retained as a valid routing target during the migration window but
|
|
66
|
+
is no longer emitted. Both routing targets are documented in this
|
|
67
|
+
contract because both remain valid during the migration.
|
|
62
68
|
|
|
63
69
|
**Notifications (Lambda -> API).** Lambda functions publish progress
|
|
64
70
|
and result notifications to the FIFO SNS topic
|
|
@@ -191,19 +197,23 @@ channels:
|
|
|
191
197
|
[I19](https://trello.com/c/Xr3Z4GBF) — same `feature_not_
|
|
192
198
|
available` 422 gating)
|
|
193
199
|
- `operation_type = audio_to_video` -> `ops-audio-to-video` queue
|
|
194
|
-
(
|
|
195
|
-
[`SlluxMBN`](https://trello.com/c/SlluxMBN)
|
|
196
|
-
`
|
|
200
|
+
(`availability: beta` — Wave A activated per
|
|
201
|
+
[`SlluxMBN`](https://trello.com/c/SlluxMBN) +
|
|
202
|
+
[`c3uthIP4`](https://trello.com/c/c3uthIP4); backend live, traffic
|
|
203
|
+
flows)
|
|
197
204
|
- `operation_type = video_watermark` -> `ops-video-watermark`
|
|
198
|
-
queue (
|
|
199
|
-
[`4NrRPCgh`](https://trello.com/c/4NrRPCgh)
|
|
205
|
+
queue (`availability: beta` — Wave A activated per
|
|
206
|
+
[`4NrRPCgh`](https://trello.com/c/4NrRPCgh) +
|
|
207
|
+
[`c3uthIP4`](https://trello.com/c/c3uthIP4); backend live)
|
|
200
208
|
- `operation_type = video_text_watermark` ->
|
|
201
209
|
`ops-video-text-watermark` queue (gated by
|
|
202
210
|
`availability: planned` until Lambda ships per
|
|
203
211
|
[`4NrRPCgh`](https://trello.com/c/4NrRPCgh) — same gating)
|
|
204
|
-
- `operation_type = split` -> `ops-split` queue (
|
|
205
|
-
`availability:
|
|
206
|
-
|
|
212
|
+
- `operation_type = split` -> `ops-split` queue (the `audio`
|
|
213
|
+
mime_group is `availability: beta` — audio split traffic
|
|
214
|
+
reaches this queue; `image_gif` / `document_pdf` / `video`
|
|
215
|
+
stay `availability: planned` until their Lambdas ship per
|
|
216
|
+
[`vKI0CFDu`](https://trello.com/c/vKI0CFDu);
|
|
207
217
|
long-form video splits route via `processing_class` to the
|
|
208
218
|
`split-video-fargate` worker, same OperationType, different
|
|
209
219
|
worker)
|
|
@@ -223,9 +233,11 @@ channels:
|
|
|
223
233
|
|
|
224
234
|
**Thumbnail migration window.** The legacy `ops-thumbnail` queue and
|
|
225
235
|
the four sub-type queues are all live simultaneously. The API
|
|
226
|
-
publisher
|
|
227
|
-
|
|
228
|
-
|
|
236
|
+
publisher emits the four sub-type values on the SNS `operation_type`
|
|
237
|
+
attribute (resolved from effective input MIME); the legacy
|
|
238
|
+
`operation_type=thumbnail` attribute is retained as a valid routing
|
|
239
|
+
target but is no longer emitted. Both paths are valid routing
|
|
240
|
+
targets today.
|
|
229
241
|
parameters:
|
|
230
242
|
env:
|
|
231
243
|
description: Environment (local, stg, prod)
|
|
@@ -245,6 +257,12 @@ channels:
|
|
|
245
257
|
SQS queue for image compression jobs.
|
|
246
258
|
Subscribed to the `job-requests` SNS topic with filter
|
|
247
259
|
`job_type = image`. Handles `compress` only for image inputs.
|
|
260
|
+
bindings:
|
|
261
|
+
sqs:
|
|
262
|
+
queue:
|
|
263
|
+
name: gisl-{env}-{region}-jobs-image
|
|
264
|
+
fifoQueue: false
|
|
265
|
+
bindingVersion: '0.2.0'
|
|
248
266
|
parameters:
|
|
249
267
|
env:
|
|
250
268
|
description: Environment (local, stg, prod)
|
|
@@ -260,6 +278,12 @@ channels:
|
|
|
260
278
|
SQS queue for video compression jobs.
|
|
261
279
|
Subscribed to the `job-requests` SNS topic with filter
|
|
262
280
|
`job_type = video`. Handles `compress` only for video inputs.
|
|
281
|
+
bindings:
|
|
282
|
+
sqs:
|
|
283
|
+
queue:
|
|
284
|
+
name: gisl-{env}-{region}-jobs-video
|
|
285
|
+
fifoQueue: false
|
|
286
|
+
bindingVersion: '0.2.0'
|
|
263
287
|
parameters:
|
|
264
288
|
env:
|
|
265
289
|
description: Environment (local, stg, prod)
|
|
@@ -275,6 +299,12 @@ channels:
|
|
|
275
299
|
SQS queue for audio compression jobs.
|
|
276
300
|
Subscribed to the `job-requests` SNS topic with filter
|
|
277
301
|
`job_type = audio`. Handles `compress` only for audio inputs.
|
|
302
|
+
bindings:
|
|
303
|
+
sqs:
|
|
304
|
+
queue:
|
|
305
|
+
name: gisl-{env}-{region}-jobs-audio
|
|
306
|
+
fifoQueue: false
|
|
307
|
+
bindingVersion: '0.2.0'
|
|
278
308
|
parameters:
|
|
279
309
|
env:
|
|
280
310
|
description: Environment (local, stg, prod)
|
|
@@ -290,6 +320,12 @@ channels:
|
|
|
290
320
|
SQS queue for document compression jobs.
|
|
291
321
|
Subscribed to the `job-requests` SNS topic with filter
|
|
292
322
|
`job_type = document`. Handles `compress` only for document inputs.
|
|
323
|
+
bindings:
|
|
324
|
+
sqs:
|
|
325
|
+
queue:
|
|
326
|
+
name: gisl-{env}-{region}-jobs-document
|
|
327
|
+
fifoQueue: false
|
|
328
|
+
bindingVersion: '0.2.0'
|
|
293
329
|
parameters:
|
|
294
330
|
env:
|
|
295
331
|
description: Environment (local, stg, prod)
|
|
@@ -350,12 +386,14 @@ channels:
|
|
|
350
386
|
Subscribed to the `operations` SNS topic with filter
|
|
351
387
|
`operation_type = thumbnail`.
|
|
352
388
|
|
|
353
|
-
**Migration window**: This is the legacy routing target
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
`thumbnail_document`, `thumbnail_office`)
|
|
389
|
+
**Migration window**: This is the legacy routing target. It is
|
|
390
|
+
retained as a valid routing target (via `operation_type=thumbnail`)
|
|
391
|
+
and handles thumbnail requests for all media types, but the API
|
|
392
|
+
publisher no longer emits it — the publisher now emits the four
|
|
393
|
+
sub-type values (`thumbnail_image`, `thumbnail_video`,
|
|
394
|
+
`thumbnail_document`, `thumbnail_office`), resolved from each
|
|
395
|
+
operation's effective input MIME. Retirement of this legacy queue
|
|
396
|
+
follows once no traffic remains.
|
|
359
397
|
parameters:
|
|
360
398
|
env:
|
|
361
399
|
description: Environment (local, stg, prod)
|
|
@@ -373,9 +411,10 @@ channels:
|
|
|
373
411
|
`operation_type = thumbnail_image`. Backed by the Rust image
|
|
374
412
|
thumbnail Lambda (`operation-thumbnail-image`).
|
|
375
413
|
|
|
376
|
-
|
|
377
|
-
`operation_type=
|
|
378
|
-
|
|
414
|
+
Receives traffic for image inputs — the API publisher emits
|
|
415
|
+
`operation_type=thumbnail_image` on the SNS attribute (resolved from
|
|
416
|
+
the operation's effective input MIME); the payload `operation_type`
|
|
417
|
+
field stays `thumbnail`.
|
|
379
418
|
parameters:
|
|
380
419
|
env:
|
|
381
420
|
description: Environment (local, stg, prod)
|
|
@@ -393,9 +432,10 @@ channels:
|
|
|
393
432
|
`operation_type = thumbnail_video`. Backed by the FFmpeg video
|
|
394
433
|
thumbnail Lambda (`operation-thumbnail-video`).
|
|
395
434
|
|
|
396
|
-
|
|
397
|
-
`operation_type=
|
|
398
|
-
|
|
435
|
+
Receives traffic for video inputs — the API publisher emits
|
|
436
|
+
`operation_type=thumbnail_video` on the SNS attribute (resolved from
|
|
437
|
+
the operation's effective input MIME); the payload `operation_type`
|
|
438
|
+
field stays `thumbnail`.
|
|
399
439
|
parameters:
|
|
400
440
|
env:
|
|
401
441
|
description: Environment (local, stg, prod)
|
|
@@ -413,10 +453,10 @@ channels:
|
|
|
413
453
|
`operation_type = thumbnail_document`. Backed by the Ghostscript
|
|
414
454
|
document thumbnail Lambda (`operation-thumbnail-document`).
|
|
415
455
|
|
|
416
|
-
|
|
417
|
-
`operation_type=
|
|
418
|
-
|
|
419
|
-
|
|
456
|
+
Receives traffic for PDF/EPUB inputs — the API publisher emits
|
|
457
|
+
`operation_type=thumbnail_document` on the SNS attribute (resolved
|
|
458
|
+
from the operation's effective input MIME); the payload
|
|
459
|
+
`operation_type` field stays `thumbnail`.
|
|
420
460
|
parameters:
|
|
421
461
|
env:
|
|
422
462
|
description: Environment (local, stg, prod)
|
|
@@ -435,10 +475,10 @@ channels:
|
|
|
435
475
|
`operation_type = thumbnail_office`. Backed by the LibreOffice
|
|
436
476
|
thumbnail Lambda (`operation-thumbnail-office`).
|
|
437
477
|
|
|
438
|
-
|
|
439
|
-
`operation_type=
|
|
440
|
-
|
|
441
|
-
|
|
478
|
+
Receives traffic for office-document inputs — the API publisher
|
|
479
|
+
emits `operation_type=thumbnail_office` on the SNS attribute
|
|
480
|
+
(resolved from the operation's effective input MIME); the payload
|
|
481
|
+
`operation_type` field stays `thumbnail`.
|
|
442
482
|
parameters:
|
|
443
483
|
env:
|
|
444
484
|
description: Environment (local, stg, prod)
|
|
@@ -614,11 +654,11 @@ channels:
|
|
|
614
654
|
`role: overlay` image OPTIONAL — see `per_role_cardinality`
|
|
615
655
|
on the operation schema).
|
|
616
656
|
|
|
617
|
-
`availability:
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
657
|
+
`availability: beta` per the operation schema (Wave A activated,
|
|
658
|
+
[`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API accepts +
|
|
659
|
+
publishes, so traffic flows to this queue (MUST NOT 422). Backed
|
|
660
|
+
by the `operation-audio-to-video` Lambda (live; lambdas pre-launch
|
|
661
|
+
epic Wave A).
|
|
622
662
|
|
|
623
663
|
Per ADR-0004 + ADR-0015
|
|
624
664
|
([`SlluxMBN`](https://trello.com/c/SlluxMBN)).
|
|
@@ -642,10 +682,12 @@ channels:
|
|
|
642
682
|
(no operation-specific conditional needed in
|
|
643
683
|
OperationRequestAttributes).
|
|
644
684
|
|
|
645
|
-
`availability:
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
685
|
+
`availability: beta` for the `audio` mime_group (worker live on
|
|
686
|
+
staging — audio split traffic reaches this queue); the
|
|
687
|
+
`image_gif`, `document_pdf`, and `video` mime_groups stay
|
|
688
|
+
`availability: planned`, and the API rejects their
|
|
689
|
+
workflow-create with `feature_not_available` (422) until those
|
|
690
|
+
Lambdas ship. Backed by the `operation-split` Lambda (cross-repo
|
|
649
691
|
follow-up — lambdas pre-launch epic Wave A, ticket
|
|
650
692
|
[DbpJpVtm-sibling-L1](https://trello.com/c/vKI0CFDu)
|
|
651
693
|
[`vKI0CFDu`](https://trello.com/c/vKI0CFDu)).
|
|
@@ -678,11 +720,12 @@ channels:
|
|
|
678
720
|
(Path B with `role: base` video + `role: overlay` image,
|
|
679
721
|
exactly one of each per `per_role_cardinality`).
|
|
680
722
|
|
|
681
|
-
`availability:
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
723
|
+
`availability: beta` per the operation schema (Wave A activated,
|
|
724
|
+
[`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API accepts +
|
|
725
|
+
publishes, so traffic flows to this queue (MUST NOT 422). The
|
|
726
|
+
`short_form` processing class is beta; `long_form` stays planned
|
|
727
|
+
(no live Fargate worker). Backed by the `operation-video-watermark`
|
|
728
|
+
Lambda (live; lambdas pre-launch epic Wave A, ticket
|
|
686
729
|
[DbpJpVtm](https://trello.com/c/DbpJpVtm)).
|
|
687
730
|
|
|
688
731
|
Distinct from `image_watermark` (pure-Rust image-only) — see
|
|
@@ -900,9 +943,9 @@ channels:
|
|
|
900
943
|
description: |
|
|
901
944
|
DLQ for failed audio_to_video operations (per ticket
|
|
902
945
|
[`SlluxMBN`](https://trello.com/c/SlluxMBN) / ADR-0015).
|
|
903
|
-
Messages land here after 5 failed processing attempts.
|
|
904
|
-
|
|
905
|
-
|
|
946
|
+
Messages land here after 5 failed processing attempts.
|
|
947
|
+
audio_to_video is `availability: beta` (Wave A activated) so
|
|
948
|
+
this queue now receives real failures.
|
|
906
949
|
parameters:
|
|
907
950
|
env:
|
|
908
951
|
description: Environment (local, stg, prod)
|
|
@@ -914,9 +957,9 @@ channels:
|
|
|
914
957
|
description: |
|
|
915
958
|
DLQ for failed video_watermark operations (per ticket
|
|
916
959
|
[`4NrRPCgh`](https://trello.com/c/4NrRPCgh) / ADR-0013).
|
|
917
|
-
Messages land here after 5 failed processing attempts.
|
|
918
|
-
|
|
919
|
-
|
|
960
|
+
Messages land here after 5 failed processing attempts.
|
|
961
|
+
video_watermark is `availability: beta` (Wave A activated) so
|
|
962
|
+
this queue now receives real failures.
|
|
920
963
|
parameters:
|
|
921
964
|
env:
|
|
922
965
|
description: Environment (local, stg, prod)
|
|
@@ -942,9 +985,10 @@ channels:
|
|
|
942
985
|
description: |
|
|
943
986
|
DLQ for failed split operations (per ticket
|
|
944
987
|
[`vKI0CFDu`](https://trello.com/c/vKI0CFDu) / ADR-0014).
|
|
945
|
-
Messages land here after 5 failed processing attempts.
|
|
946
|
-
|
|
947
|
-
|
|
988
|
+
Messages land here after 5 failed processing attempts. Live for
|
|
989
|
+
the `split` `audio` mime_group (now `availability: beta`); the
|
|
990
|
+
`image_gif`, `document_pdf`, and `video` groups stay
|
|
991
|
+
`availability: planned` and carry no traffic yet.
|
|
948
992
|
parameters:
|
|
949
993
|
env:
|
|
950
994
|
description: Environment (local, stg, prod)
|
|
@@ -1112,6 +1156,79 @@ channels:
|
|
|
1112
1156
|
region:
|
|
1113
1157
|
description: AWS region abbreviation (euw1, use1, etc.)
|
|
1114
1158
|
|
|
1159
|
+
# ============================================
|
|
1160
|
+
# LONG-FORM CLAIM-CHECK QUEUES (direct-to-SQS, Fargate-processed)
|
|
1161
|
+
# ============================================
|
|
1162
|
+
# Distinct delivery mechanism from the SNS-fanout jobs/ops families:
|
|
1163
|
+
# the API publishes a LongFormJobMessage claim-check DIRECTLY to these
|
|
1164
|
+
# per-op-class SQS queues (no SNS topic, no filter routing). A
|
|
1165
|
+
# terraform-owned launcher (EventBridge Pipe, filter=none) consumes
|
|
1166
|
+
# and forks a Fargate task. Two classes are live (compress, merge);
|
|
1167
|
+
# split-video-longform (queue provisioned, publisher deferred per
|
|
1168
|
+
# rcwvUKhI) and audio-overlay-longform (reserve-name-only, no queue)
|
|
1169
|
+
# are NOT modeled as channels — they carry no traffic yet.
|
|
1170
|
+
|
|
1171
|
+
longformCompressVideo:
|
|
1172
|
+
address: gisl-{env}-{region}-ops-compress-video-longform
|
|
1173
|
+
description: |
|
|
1174
|
+
SQS queue for long-form video compression jobs (`compress.video.long_form`,
|
|
1175
|
+
`availability: beta`). The API publishes a `LongFormJobMessage` claim-check
|
|
1176
|
+
here directly (NOT via SNS); a terraform-owned launcher reads the spec from
|
|
1177
|
+
S3 (`pointer`) and runs a Fargate task. `max_receive_count = 2` (ADR-0007).
|
|
1178
|
+
|
|
1179
|
+
On this queue the publisher always sets `operation_type: compress`. The
|
|
1180
|
+
shared `LongFormJobMessage` enum permits `{compress, merge}` (mirroring the
|
|
1181
|
+
shared `JobRequestMessage` across the per-media `jobs-*` queues); per-queue
|
|
1182
|
+
`operation_type` is a publisher invariant documented here, not a separate
|
|
1183
|
+
message schema.
|
|
1184
|
+
parameters:
|
|
1185
|
+
env:
|
|
1186
|
+
description: Environment (local, stg, prod)
|
|
1187
|
+
region:
|
|
1188
|
+
description: AWS region abbreviation (euw1, use1, etc.)
|
|
1189
|
+
messages:
|
|
1190
|
+
longFormJob:
|
|
1191
|
+
$ref: '#/components/messages/LongFormJobMessage'
|
|
1192
|
+
|
|
1193
|
+
longformCompressVideoDlq:
|
|
1194
|
+
address: gisl-{env}-{region}-ops-compress-video-longform-dlq
|
|
1195
|
+
description: DLQ for failed long-form video compression jobs. Messages land here after 2 failed processing attempts (ADR-0007).
|
|
1196
|
+
parameters:
|
|
1197
|
+
env:
|
|
1198
|
+
description: Environment (local, stg, prod)
|
|
1199
|
+
region:
|
|
1200
|
+
description: AWS region abbreviation (euw1, use1, etc.)
|
|
1201
|
+
|
|
1202
|
+
longformMergeVideoReencode:
|
|
1203
|
+
address: gisl-{env}-{region}-ops-merge-video-longform-reencode
|
|
1204
|
+
description: |
|
|
1205
|
+
SQS queue for long-form merge re-encode jobs (`merge.video.long_form_re_encode`,
|
|
1206
|
+
`availability: beta`). The API publishes a `LongFormJobMessage` claim-check
|
|
1207
|
+
here directly (NOT via SNS); a terraform-owned launcher reads the spec from
|
|
1208
|
+
S3 (`pointer`) and runs a Fargate task. `max_receive_count = 2` (ADR-0007).
|
|
1209
|
+
|
|
1210
|
+
On this queue the publisher always sets `operation_type: merge` (shared
|
|
1211
|
+
`LongFormJobMessage` enum permits `{compress, merge}`; per-queue
|
|
1212
|
+
`operation_type` is a publisher invariant documented here, not a separate
|
|
1213
|
+
schema).
|
|
1214
|
+
parameters:
|
|
1215
|
+
env:
|
|
1216
|
+
description: Environment (local, stg, prod)
|
|
1217
|
+
region:
|
|
1218
|
+
description: AWS region abbreviation (euw1, use1, etc.)
|
|
1219
|
+
messages:
|
|
1220
|
+
longFormJob:
|
|
1221
|
+
$ref: '#/components/messages/LongFormJobMessage'
|
|
1222
|
+
|
|
1223
|
+
longformMergeVideoReencodeDlq:
|
|
1224
|
+
address: gisl-{env}-{region}-ops-merge-video-longform-reencode-dlq
|
|
1225
|
+
description: DLQ for failed long-form merge re-encode jobs. Messages land here after 2 failed processing attempts (ADR-0007).
|
|
1226
|
+
parameters:
|
|
1227
|
+
env:
|
|
1228
|
+
description: Environment (local, stg, prod)
|
|
1229
|
+
region:
|
|
1230
|
+
description: AWS region abbreviation (euw1, use1, etc.)
|
|
1231
|
+
|
|
1115
1232
|
operations:
|
|
1116
1233
|
# ============================================
|
|
1117
1234
|
# PUBLISH OPERATIONS (API -> SNS)
|
|
@@ -1235,9 +1352,10 @@ operations:
|
|
|
1235
1352
|
description: |
|
|
1236
1353
|
The legacy thumbnail Lambda consumes thumbnail requests routed
|
|
1237
1354
|
by `operation_type=thumbnail`. Handles thumbnail generation for
|
|
1238
|
-
all media types in a single Lambda.
|
|
1239
|
-
|
|
1240
|
-
|
|
1355
|
+
all media types in a single Lambda. Retained as a valid routing
|
|
1356
|
+
target during the migration window, but the API publisher no
|
|
1357
|
+
longer emits `operation_type=thumbnail` (it emits the four
|
|
1358
|
+
sub-type values); this queue is retired once no traffic remains.
|
|
1241
1359
|
messages:
|
|
1242
1360
|
- $ref: '#/channels/opsThumbnail/messages/operationRequest'
|
|
1243
1361
|
|
|
@@ -1249,7 +1367,7 @@ operations:
|
|
|
1249
1367
|
description: |
|
|
1250
1368
|
The image thumbnail Lambda consumes thumbnail requests routed by
|
|
1251
1369
|
`operation_type=thumbnail_image`. Backed by a Rust image crate.
|
|
1252
|
-
|
|
1370
|
+
Receives traffic for image inputs — see channel description.
|
|
1253
1371
|
messages:
|
|
1254
1372
|
- $ref: '#/channels/opsThumbnailImage/messages/operationRequest'
|
|
1255
1373
|
|
|
@@ -1260,8 +1378,8 @@ operations:
|
|
|
1260
1378
|
summary: Process video thumbnail operation
|
|
1261
1379
|
description: |
|
|
1262
1380
|
The video thumbnail Lambda consumes thumbnail requests routed by
|
|
1263
|
-
`operation_type=thumbnail_video`. Backed by FFmpeg.
|
|
1264
|
-
|
|
1381
|
+
`operation_type=thumbnail_video`. Backed by FFmpeg. Receives
|
|
1382
|
+
traffic for video inputs — see channel description.
|
|
1265
1383
|
messages:
|
|
1266
1384
|
- $ref: '#/channels/opsThumbnailVideo/messages/operationRequest'
|
|
1267
1385
|
|
|
@@ -1273,7 +1391,8 @@ operations:
|
|
|
1273
1391
|
description: |
|
|
1274
1392
|
The document (PDF/EPUB) thumbnail Lambda consumes thumbnail
|
|
1275
1393
|
requests routed by `operation_type=thumbnail_document`. Backed by
|
|
1276
|
-
Ghostscript.
|
|
1394
|
+
Ghostscript. Receives traffic for PDF/EPUB inputs — see channel
|
|
1395
|
+
description.
|
|
1277
1396
|
messages:
|
|
1278
1397
|
- $ref: '#/channels/opsThumbnailDocument/messages/operationRequest'
|
|
1279
1398
|
|
|
@@ -1285,8 +1404,8 @@ operations:
|
|
|
1285
1404
|
description: |
|
|
1286
1405
|
The office document (DOCX/XLSX/PPTX/ODT/ODS/ODP) thumbnail Lambda
|
|
1287
1406
|
consumes thumbnail requests routed by
|
|
1288
|
-
`operation_type=thumbnail_office`. Backed by LibreOffice.
|
|
1289
|
-
|
|
1407
|
+
`operation_type=thumbnail_office`. Backed by LibreOffice. Receives
|
|
1408
|
+
traffic for office-document inputs — see channel description.
|
|
1290
1409
|
messages:
|
|
1291
1410
|
- $ref: '#/channels/opsThumbnailOffice/messages/operationRequest'
|
|
1292
1411
|
|
|
@@ -1401,14 +1520,18 @@ operations:
|
|
|
1401
1520
|
$ref: '#/channels/opsSplit'
|
|
1402
1521
|
summary: Process split operation
|
|
1403
1522
|
description: |
|
|
1404
|
-
The `operation-split` Lambda (
|
|
1405
|
-
|
|
1406
|
-
|
|
1523
|
+
The `operation-split` Lambda (lambdas pre-launch epic Wave A)
|
|
1524
|
+
consumes split requests routed by `operation_type=split`. Its
|
|
1525
|
+
`audio` path is live on staging (lambdas #161); the
|
|
1526
|
+
`image_gif` / `document_pdf` / `video` workers remain a
|
|
1527
|
+
cross-repo follow-up. Single-input —
|
|
1407
1528
|
`media_group` derives from the input MIME prefix per the
|
|
1408
|
-
existing single-input rule. `availability:
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1529
|
+
existing single-input rule. `availability: beta` for the `audio`
|
|
1530
|
+
mime_group (worker live on staging); the `image_gif`,
|
|
1531
|
+
`document_pdf`, and `video` mime_groups stay `availability:
|
|
1532
|
+
planned`, and the API rejects their workflow-create with
|
|
1533
|
+
`feature_not_available` (422) until those Lambdas ship.
|
|
1534
|
+
Long-form video splits route to a separate
|
|
1412
1535
|
`split-video-fargate` worker via `processing_class`.
|
|
1413
1536
|
Per ADR-0004 + ADR-0014
|
|
1414
1537
|
([`vKI0CFDu`](https://trello.com/c/vKI0CFDu)).
|
|
@@ -1422,14 +1545,14 @@ operations:
|
|
|
1422
1545
|
summary: Process video_watermark operation
|
|
1423
1546
|
description: |
|
|
1424
1547
|
The `operation-video-watermark` Lambda (cross-repo follow-up —
|
|
1425
|
-
lambdas pre-launch epic Wave A,
|
|
1548
|
+
lambdas pre-launch epic Wave A, live) consumes
|
|
1426
1549
|
video_watermark requests routed by
|
|
1427
1550
|
`operation_type=video_watermark`. Multi-input role-based with
|
|
1428
1551
|
`role: base` video + `role: overlay` image (exactly one of
|
|
1429
|
-
each per `per_role_cardinality`). `availability:
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1552
|
+
each per `per_role_cardinality`). `availability: beta` (Wave A
|
|
1553
|
+
activated, [`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API
|
|
1554
|
+
accepts + publishes (MUST NOT 422), so traffic flows to this
|
|
1555
|
+
channel. `short_form` is beta; `long_form` stays planned.
|
|
1433
1556
|
Per ADR-0004 + ADR-0013
|
|
1434
1557
|
([`4NrRPCgh`](https://trello.com/c/4NrRPCgh)).
|
|
1435
1558
|
messages:
|
|
@@ -1461,14 +1584,14 @@ operations:
|
|
|
1461
1584
|
summary: Process audio_to_video operation
|
|
1462
1585
|
description: |
|
|
1463
1586
|
The `operation-audio-to-video` Lambda (cross-repo follow-up —
|
|
1464
|
-
lambdas pre-launch epic Wave A,
|
|
1587
|
+
lambdas pre-launch epic Wave A, live) consumes
|
|
1465
1588
|
audio_to_video requests routed by
|
|
1466
1589
|
`operation_type=audio_to_video`. Multi-input role-based with
|
|
1467
1590
|
role asymmetry (Path B with `role: base` audio REQUIRED +
|
|
1468
1591
|
`role: overlay` image OPTIONAL per `per_role_cardinality`).
|
|
1469
|
-
`availability:
|
|
1470
|
-
`
|
|
1471
|
-
traffic
|
|
1592
|
+
`availability: beta` (Wave A activated,
|
|
1593
|
+
[`c3uthIP4`](https://trello.com/c/c3uthIP4)): the API accepts +
|
|
1594
|
+
publishes (MUST NOT 422), so traffic flows to this channel.
|
|
1472
1595
|
Per ADR-0004 + ADR-0015
|
|
1473
1596
|
([`SlluxMBN`](https://trello.com/c/SlluxMBN)).
|
|
1474
1597
|
messages:
|
|
@@ -1606,6 +1729,64 @@ operations:
|
|
|
1606
1729
|
messages:
|
|
1607
1730
|
- $ref: '#/channels/uploadProbeCompletionsQueue/messages/uploadProbeCompletion'
|
|
1608
1731
|
|
|
1732
|
+
# ============================================
|
|
1733
|
+
# LONG-FORM CLAIM-CHECK PRODUCERS (API -> SQS, direct)
|
|
1734
|
+
# ============================================
|
|
1735
|
+
|
|
1736
|
+
publishLongFormCompressVideo:
|
|
1737
|
+
action: send
|
|
1738
|
+
channel:
|
|
1739
|
+
$ref: '#/channels/longformCompressVideo'
|
|
1740
|
+
summary: Publish a long-form video compression claim-check.
|
|
1741
|
+
description: |
|
|
1742
|
+
The API (`SqsLongFormOperationPublisherAdapter`) writes the full job
|
|
1743
|
+
spec to S3 and publishes a `LongFormJobMessage` claim-check **directly**
|
|
1744
|
+
to this SQS queue (NOT via SNS — no message attributes). `operation_type`
|
|
1745
|
+
is `compress`, `processing_class` is `long_form`.
|
|
1746
|
+
messages:
|
|
1747
|
+
- $ref: '#/channels/longformCompressVideo/messages/longFormJob'
|
|
1748
|
+
|
|
1749
|
+
publishLongFormMergeVideoReencode:
|
|
1750
|
+
action: send
|
|
1751
|
+
channel:
|
|
1752
|
+
$ref: '#/channels/longformMergeVideoReencode'
|
|
1753
|
+
summary: Publish a long-form merge re-encode claim-check.
|
|
1754
|
+
description: |
|
|
1755
|
+
As `publishLongFormCompressVideo`, for `operation_type = merge`
|
|
1756
|
+
(`merge.video.long_form_re_encode`). Direct-to-SQS claim-check; no SNS.
|
|
1757
|
+
messages:
|
|
1758
|
+
- $ref: '#/channels/longformMergeVideoReencode/messages/longFormJob'
|
|
1759
|
+
|
|
1760
|
+
# ============================================
|
|
1761
|
+
# LONG-FORM CLAIM-CHECK CONSUMERS (launcher -> Fargate)
|
|
1762
|
+
# ============================================
|
|
1763
|
+
|
|
1764
|
+
consumeLongFormCompressVideo:
|
|
1765
|
+
action: receive
|
|
1766
|
+
channel:
|
|
1767
|
+
$ref: '#/channels/longformCompressVideo'
|
|
1768
|
+
summary: Consume a long-form video compression claim-check.
|
|
1769
|
+
description: |
|
|
1770
|
+
A terraform-owned launcher (EventBridge Pipe, filter=none -> launcher
|
|
1771
|
+
Lambda) reads the `LongFormJobMessage` from this queue, resolves the
|
|
1772
|
+
full job spec from S3 via `pointer`, and runs a Fargate task. The
|
|
1773
|
+
launcher forks on `operation_type` (`compress`) + `processing_class`
|
|
1774
|
+
(`long_form`). Failures redrive to the DLQ after `max_receive_count = 2`.
|
|
1775
|
+
messages:
|
|
1776
|
+
- $ref: '#/channels/longformCompressVideo/messages/longFormJob'
|
|
1777
|
+
|
|
1778
|
+
consumeLongFormMergeVideoReencode:
|
|
1779
|
+
action: receive
|
|
1780
|
+
channel:
|
|
1781
|
+
$ref: '#/channels/longformMergeVideoReencode'
|
|
1782
|
+
summary: Consume a long-form merge re-encode claim-check.
|
|
1783
|
+
description: |
|
|
1784
|
+
As `consumeLongFormCompressVideo`, for `operation_type = merge`
|
|
1785
|
+
(`merge.video.long_form_re_encode`). The launcher resolves the spec
|
|
1786
|
+
from S3 via `pointer` and runs the merge-re-encode Fargate task.
|
|
1787
|
+
messages:
|
|
1788
|
+
- $ref: '#/channels/longformMergeVideoReencode/messages/longFormJob'
|
|
1789
|
+
|
|
1609
1790
|
components:
|
|
1610
1791
|
messages:
|
|
1611
1792
|
# ============================================
|
|
@@ -1689,7 +1870,7 @@ components:
|
|
|
1689
1870
|
**non-compression** operation (thumbnail, image_watermark,
|
|
1690
1871
|
text_watermark, merge, archive, convert, custom_luma,
|
|
1691
1872
|
audio_overlay, audio_watermark, audio_to_video,
|
|
1692
|
-
video_watermark, video_text_watermark). Published to the
|
|
1873
|
+
video_watermark, video_text_watermark, split). Published to the
|
|
1693
1874
|
`operations` SNS topic; routed by the single-attribute
|
|
1694
1875
|
filter `operation_type` to one of the ops-family queues.
|
|
1695
1876
|
|
|
@@ -1699,8 +1880,8 @@ components:
|
|
|
1699
1880
|
`thumbnail_office`, `image_watermark`, `text_watermark`,
|
|
1700
1881
|
`merge`, `archive`, `convert`, `custom_luma`,
|
|
1701
1882
|
`audio_overlay`, `audio_watermark`, `audio_to_video`,
|
|
1702
|
-
`video_watermark`, `video_text_watermark`. Used by
|
|
1703
|
-
the filter attribute on the `operations` topic.
|
|
1883
|
+
`video_watermark`, `video_text_watermark`, `split`. Used by
|
|
1884
|
+
SNS as the filter attribute on the `operations` topic.
|
|
1704
1885
|
- `media_group`: informational metadata, present for every
|
|
1705
1886
|
operation except `archive` (which is media-agnostic). Values:
|
|
1706
1887
|
`image`, `video`, `audio`, `document`. **Not** used by SNS as
|
|
@@ -1709,7 +1890,8 @@ components:
|
|
|
1709
1890
|
|
|
1710
1891
|
**Input models:**
|
|
1711
1892
|
- Single-input operations (thumbnail, text_watermark, convert,
|
|
1712
|
-
audio_watermark): use
|
|
1893
|
+
audio_watermark, video_text_watermark, split): use
|
|
1894
|
+
`source_bucket` + `source_key`.
|
|
1713
1895
|
`file_type` required. For `thumbnail`, the SNS
|
|
1714
1896
|
`operation_type` attribute is permitted to carry a per-media
|
|
1715
1897
|
sub-type value for routing (see `OperationRequestAttributes`
|
|
@@ -1719,23 +1901,29 @@ components:
|
|
|
1719
1901
|
`required_tier: enterprise` so workflow-create rejects with
|
|
1720
1902
|
422 + 403 today.
|
|
1721
1903
|
- Multi-input operations (merge, archive, image_watermark,
|
|
1722
|
-
custom_luma, audio_overlay, audio_to_video):
|
|
1723
|
-
array. Merge additionally requires `output_type`.
|
|
1724
|
-
image_watermark, custom_luma, audio_overlay,
|
|
1725
|
-
|
|
1904
|
+
custom_luma, audio_overlay, audio_to_video, video_watermark):
|
|
1905
|
+
use `sources` array. Merge additionally requires `output_type`.
|
|
1906
|
+
image_watermark, custom_luma, audio_overlay, audio_to_video,
|
|
1907
|
+
and video_watermark use `role` per `JobInputV2.role`.
|
|
1726
1908
|
audio_to_video has role asymmetry — REQUIRED `base` (audio)
|
|
1727
1909
|
+ OPTIONAL `overlay` (image 0..1) per
|
|
1728
1910
|
`per_role_cardinality`; sum-of-role-minima drives the
|
|
1729
1911
|
minimum `sources` count (1 for audio_to_video; 2 for all
|
|
1730
|
-
other role-based ops today). custom_luma
|
|
1731
|
-
|
|
1732
|
-
|
|
1912
|
+
other role-based ops today). custom_luma and audio_overlay
|
|
1913
|
+
are `availability: planned` so workflow-create rejects with
|
|
1914
|
+
422 today (audio_to_video and video_watermark are now `beta` —
|
|
1915
|
+
Wave A activated).
|
|
1733
1916
|
|
|
1734
1917
|
**Migration window note.** During the thumbnail sub-type
|
|
1735
1918
|
migration, both `operation_type=thumbnail` (legacy) and
|
|
1736
1919
|
`operation_type=thumbnail_{image,video,document,office}` (new)
|
|
1737
|
-
are valid routing targets. The API publisher
|
|
1738
|
-
|
|
1920
|
+
are valid routing targets. The API publisher emits the per-media
|
|
1921
|
+
sub-type value on the SNS `operation_type` attribute (resolved
|
|
1922
|
+
from the operation's effective input MIME); the payload
|
|
1923
|
+
`operation_type` field always remains `thumbnail`. The legacy
|
|
1924
|
+
bare `thumbnail` attribute value is retained as a valid routing
|
|
1925
|
+
target during the migration window but is no longer emitted by
|
|
1926
|
+
the publisher.
|
|
1739
1927
|
contentType: application/json
|
|
1740
1928
|
headers:
|
|
1741
1929
|
$ref: '#/components/schemas/OperationRequestAttributes'
|
|
@@ -1912,6 +2100,48 @@ components:
|
|
|
1912
2100
|
options:
|
|
1913
2101
|
format: "zip"
|
|
1914
2102
|
|
|
2103
|
+
# ============================================
|
|
2104
|
+
# LONG-FORM CLAIM-CHECK JOB MESSAGE (direct-to-SQS, no SNS)
|
|
2105
|
+
# ============================================
|
|
2106
|
+
|
|
2107
|
+
LongFormJobMessage:
|
|
2108
|
+
name: LongFormJob
|
|
2109
|
+
title: Long-Form Claim-Check Job Message
|
|
2110
|
+
summary: Claim-check job message for long-form (Fargate) operations
|
|
2111
|
+
description: |
|
|
2112
|
+
Published by the API **directly to a per-op-class long-form SQS queue**
|
|
2113
|
+
(not via SNS) and consumed by a terraform-owned launcher (EventBridge
|
|
2114
|
+
Pipe, filter=none -> launcher Lambda -> ECS RunTask). The launcher reads
|
|
2115
|
+
the message body, resolves the full job spec from S3 via `pointer`, and
|
|
2116
|
+
forks the Fargate task on `operation_type` + `processing_class`.
|
|
2117
|
+
|
|
2118
|
+
**No SNS message attributes / headers** — long-form does not flow
|
|
2119
|
+
through an SNS topic, so unlike `JobRequestMessage` /
|
|
2120
|
+
`OperationRequestMessage` this message carries no `headers` block.
|
|
2121
|
+
|
|
2122
|
+
See the `LongFormJobMessage` schema for the claim-check field set and
|
|
2123
|
+
the `processing_class` ratification rationale.
|
|
2124
|
+
contentType: application/json
|
|
2125
|
+
payload:
|
|
2126
|
+
$ref: '#/components/schemas/LongFormJobMessage'
|
|
2127
|
+
examples:
|
|
2128
|
+
- name: Long-form video compression
|
|
2129
|
+
summary: compress.video.long_form claim-check
|
|
2130
|
+
payload:
|
|
2131
|
+
pointer: "job-specs/018f9c42-5d6b-7481-b3df-9fd0a0a5e112.json"
|
|
2132
|
+
job_id: "018f9c42-5d6b-7481-b3df-9fd0a0a5e112"
|
|
2133
|
+
operation_id: "018f9c42-5d6b-7481-b3df-9fd0a0a5e200"
|
|
2134
|
+
operation_type: "compress"
|
|
2135
|
+
processing_class: "long_form"
|
|
2136
|
+
- name: Long-form merge re-encode
|
|
2137
|
+
summary: merge.video.long_form_re_encode claim-check
|
|
2138
|
+
payload:
|
|
2139
|
+
pointer: "job-specs/018f9c42-5d6b-7481-b3df-9fd0a0a5e113.json"
|
|
2140
|
+
job_id: "018f9c42-5d6b-7481-b3df-9fd0a0a5e113"
|
|
2141
|
+
operation_id: "018f9c42-5d6b-7481-b3df-9fd0a0a5e201"
|
|
2142
|
+
operation_type: "merge"
|
|
2143
|
+
processing_class: "long_form"
|
|
2144
|
+
|
|
1915
2145
|
# ============================================
|
|
1916
2146
|
# OPERATION PROGRESS MESSAGE
|
|
1917
2147
|
# ============================================
|
|
@@ -2450,9 +2680,10 @@ components:
|
|
|
2450
2680
|
prefix per ADR-0015 — the operation is multi-input
|
|
2451
2681
|
role-based with role asymmetry: required audio base +
|
|
2452
2682
|
optional image overlay; routing follows the `base` role).
|
|
2453
|
-
The operation is `availability:
|
|
2454
|
-
[`SlluxMBN`](https://trello.com/c/SlluxMBN)
|
|
2455
|
-
|
|
2683
|
+
The operation is `availability: beta` per
|
|
2684
|
+
[`SlluxMBN`](https://trello.com/c/SlluxMBN) +
|
|
2685
|
+
[`c3uthIP4`](https://trello.com/c/c3uthIP4) (Wave A activated),
|
|
2686
|
+
so this constraint is exercised on live traffic.
|
|
2456
2687
|
- For `operation_type = image_watermark`, `media_group` must
|
|
2457
2688
|
equal `image` while only the stable `image` mime_group is
|
|
2458
2689
|
dispatchable. The schema declares `image_gif` and `video`
|
|
@@ -2630,17 +2861,18 @@ components:
|
|
|
2630
2861
|
API to SNS, consumed by Lambda from SQS.
|
|
2631
2862
|
|
|
2632
2863
|
**Single-input operations** (compress, thumbnail, text_watermark,
|
|
2633
|
-
convert): use
|
|
2634
|
-
`file_type` is
|
|
2864
|
+
convert, audio_watermark, video_text_watermark, split): use
|
|
2865
|
+
`source_bucket` + `source_key` for the input file. `file_type` is
|
|
2866
|
+
required.
|
|
2635
2867
|
|
|
2636
2868
|
**Multi-input operations** (merge, archive, image_watermark,
|
|
2637
|
-
custom_luma, audio_overlay, audio_to_video):
|
|
2638
|
-
array. Each entry has `bucket` + `key`. Merge
|
|
2639
|
-
include per-input overrides (e.g. transition type).
|
|
2640
|
-
also requires `output_type`. custom_luma
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2869
|
+
custom_luma, audio_overlay, audio_to_video, video_watermark):
|
|
2870
|
+
use `sources` array. Each entry has `bucket` + `key`. Merge
|
|
2871
|
+
entries may include per-input overrides (e.g. transition type).
|
|
2872
|
+
Merge also requires `output_type`. custom_luma and audio_overlay
|
|
2873
|
+
are `availability: planned` so workflow-create rejects with 422
|
|
2874
|
+
today (audio_to_video + video_watermark are now `beta` — Wave A
|
|
2875
|
+
activated, backends live); the wire shape is contract-defined.
|
|
2644
2876
|
|
|
2645
2877
|
Note: `media_group` is **not** a field in this payload. It exists
|
|
2646
2878
|
only as an SNS MessageAttribute on the non-compression branch; on
|
|
@@ -2738,12 +2970,13 @@ components:
|
|
|
2738
2970
|
description: |
|
|
2739
2971
|
Input files for multi-input operations (merge, archive,
|
|
2740
2972
|
image_watermark, custom_luma, audio_overlay,
|
|
2741
|
-
audio_to_video). Each entry specifies an
|
|
2742
|
-
Order matters for merge (concatenation order).
|
|
2743
|
-
overrides (e.g. transition) can be inlined on each
|
|
2744
|
-
Role-based multi-input operations (image_watermark,
|
|
2745
|
-
custom_luma, audio_overlay, audio_to_video)
|
|
2746
|
-
`role` discriminator on each entry — see
|
|
2973
|
+
audio_to_video, video_watermark). Each entry specifies an
|
|
2974
|
+
S3 location. Order matters for merge (concatenation order).
|
|
2975
|
+
Per-input overrides (e.g. transition) can be inlined on each
|
|
2976
|
+
entry. Role-based multi-input operations (image_watermark,
|
|
2977
|
+
custom_luma, audio_overlay, audio_to_video, video_watermark)
|
|
2978
|
+
require a `role` discriminator on each entry — see
|
|
2979
|
+
`SourceEntry.role`.
|
|
2747
2980
|
|
|
2748
2981
|
**Minimum source count = sum of role minima** declared in
|
|
2749
2982
|
the operation's `per_role_cardinality` (per ticket
|
|
@@ -2795,11 +3028,84 @@ components:
|
|
|
2795
3028
|
Not used in V1 — all outputs go to GISL-managed S3 buckets.
|
|
2796
3029
|
additionalProperties: true
|
|
2797
3030
|
|
|
3031
|
+
LongFormJobMessage:
|
|
3032
|
+
type: object
|
|
3033
|
+
description: |
|
|
3034
|
+
Claim-check job message for long-form (Fargate-processed) operations.
|
|
3035
|
+
Emitted by the API **directly to the per-op-class long-form SQS queues**
|
|
3036
|
+
(NOT via SNS) — see the `longformCompressVideo` / `longformMergeVideoReencode`
|
|
3037
|
+
channels. The full job spec is written to S3 and this message carries only
|
|
3038
|
+
a `pointer` (the claim check) plus routing/identity fields; the consumer
|
|
3039
|
+
(a terraform-owned launcher Lambda fronting a Fargate worker, invoked via
|
|
3040
|
+
an EventBridge Pipe with no filter) reads the spec from S3 and forks the
|
|
3041
|
+
task on `operation_type` + `processing_class`.
|
|
3042
|
+
|
|
3043
|
+
Distinct from `OperationRequest` (the SNS-routed short-form payload):
|
|
3044
|
+
long-form has its own dedicated SQS queues, carries no SNS message
|
|
3045
|
+
attributes/headers, and uses a claim-check body. `processing_class` is
|
|
3046
|
+
ratified here — and ONLY here — as the logical long-form discriminator
|
|
3047
|
+
(per [ADR-0014](../docs/decisions/0014-split-operation.md) §D10 and
|
|
3048
|
+
`schemas/FORMAT.md` §F8). The physical worker / `execution_pool` /
|
|
3049
|
+
backend-dotted form (e.g. `compress.video.long_form`) is deliberately
|
|
3050
|
+
NOT on the wire — the launcher mints it internally.
|
|
3051
|
+
|
|
3052
|
+
**Live `operation_type` subset: `compress`, `merge`** — the two
|
|
3053
|
+
long-form classes flipped to `availability: beta` (CON-1). `split`
|
|
3054
|
+
long-form (queue provisioned, publisher deferred —
|
|
3055
|
+
[`rcwvUKhI`](https://trello.com/c/rcwvUKhI)) and `audio_overlay`
|
|
3056
|
+
long-form (reserve-name-only, no queue) are NOT yet produced and are
|
|
3057
|
+
therefore absent from this enum; they get added when their publishers
|
|
3058
|
+
ship.
|
|
3059
|
+
|
|
3060
|
+
**Scope: the API producer's first-publish.** This schema models the
|
|
3061
|
+
message the API publishes to the long-form queues — the 5 fields above.
|
|
3062
|
+
It is intentionally an **open object** (no `additionalProperties: false`):
|
|
3063
|
+
these queues may also carry downstream-produced messages (e.g. a
|
|
3064
|
+
`FargateRunner` retry republish of chained long-form ops) whose body
|
|
3065
|
+
shape is owned by the worker/lambdas contract, NOT this schema. Those
|
|
3066
|
+
are out of scope here and are not constrained by `LongFormJobMessage`;
|
|
3067
|
+
consumers validating against this schema MUST tolerate additional or
|
|
3068
|
+
differently-shaped redriven messages. The producer contract this schema
|
|
3069
|
+
pins is the **required** set.
|
|
3070
|
+
required:
|
|
3071
|
+
- pointer
|
|
3072
|
+
- job_id
|
|
3073
|
+
- operation_id
|
|
3074
|
+
- operation_type
|
|
3075
|
+
- processing_class
|
|
3076
|
+
properties:
|
|
3077
|
+
pointer:
|
|
3078
|
+
type: string
|
|
3079
|
+
pattern: '^job-specs/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.json$'
|
|
3080
|
+
description: |
|
|
3081
|
+
Claim-check pointer to the full job spec: an S3 object **key**
|
|
3082
|
+
(NOT a full `s3://` URI, NOT a `{bucket,key}` object), resolved
|
|
3083
|
+
relative to the **input bucket** — the bucket is not encoded in
|
|
3084
|
+
the pointer; the consumer resolves it from its own input-bucket
|
|
3085
|
+
config. Const prefix `job-specs/`; the object is `<jobId>.json`
|
|
3086
|
+
(UUID v7).
|
|
3087
|
+
example: "job-specs/018f9c42-5d6b-7481-b3df-9fd0a0a5e112.json"
|
|
3088
|
+
job_id:
|
|
3089
|
+
type: string
|
|
3090
|
+
format: uuid
|
|
3091
|
+
description: Parent job identifier (UUID v7).
|
|
3092
|
+
example: "018f9c42-5d6b-7481-b3df-9fd0a0a5e112"
|
|
3093
|
+
operation_id:
|
|
3094
|
+
type: string
|
|
3095
|
+
format: uuid
|
|
3096
|
+
description: Unique operation identifier (UUID v7).
|
|
3097
|
+
example: "018f9c42-5d6b-7481-b3df-9fd0a0a5e200"
|
|
3098
|
+
operation_type:
|
|
3099
|
+
$ref: '#/components/schemas/LongFormOperationType'
|
|
3100
|
+
processing_class:
|
|
3101
|
+
$ref: '#/components/schemas/LongFormProcessingClass'
|
|
3102
|
+
|
|
2798
3103
|
SourceEntry:
|
|
2799
3104
|
type: object
|
|
2800
3105
|
description: |
|
|
2801
3106
|
A single source file for multi-input operations (merge,
|
|
2802
|
-
archive, image_watermark, custom_luma, audio_overlay
|
|
3107
|
+
archive, image_watermark, custom_luma, audio_overlay,
|
|
3108
|
+
audio_to_video, video_watermark).
|
|
2803
3109
|
Provides the S3 location, optional per-input overrides, and
|
|
2804
3110
|
the `role` discriminator for role-based multi-input
|
|
2805
3111
|
operations.
|
|
@@ -2822,9 +3128,52 @@ components:
|
|
|
2822
3128
|
transition:
|
|
2823
3129
|
type: string
|
|
2824
3130
|
description: |
|
|
2825
|
-
Per-input transition override for
|
|
2826
|
-
|
|
3131
|
+
Per-input transition override for the join point before this
|
|
3132
|
+
input. Applies to both video and audio merge — see the
|
|
3133
|
+
per-media per-input transition catalogs in
|
|
3134
|
+
`schemas/operations/merge.yaml`
|
|
3135
|
+
(`merge.video.per_input_options` / `merge.audio.per_input_options`),
|
|
3136
|
+
which the API validates against. Overrides the global
|
|
3137
|
+
`options.transition` for this join point.
|
|
2827
3138
|
example: "none"
|
|
3139
|
+
crossfade_duration:
|
|
3140
|
+
type: number
|
|
3141
|
+
minimum: 0
|
|
3142
|
+
maximum: 10.0
|
|
3143
|
+
description: |
|
|
3144
|
+
Per-input crossfade duration override, in seconds, for the
|
|
3145
|
+
join point before this input. Overrides the global
|
|
3146
|
+
`options.crossfade_duration` for this join point. Per the
|
|
3147
|
+
`depends_on` on `merge.*.per_input_options.crossfade_duration`
|
|
3148
|
+
(which resolves against the sibling per-input option, see
|
|
3149
|
+
FORMAT.md), this takes effect only when this input's own
|
|
3150
|
+
`transition` override is `crossfade` — pair it with
|
|
3151
|
+
`transition: crossfade` on the same entry; it does NOT key off
|
|
3152
|
+
the global `options.transition`. Mirrors
|
|
3153
|
+
`merge.*.per_input_options.crossfade_duration` in
|
|
3154
|
+
`schemas/operations/merge.yaml` — the API validates this
|
|
3155
|
+
per-input value but, until this slot existed, dropped it at the
|
|
3156
|
+
wire boundary (the slot lets the merge Lambda's audio path
|
|
3157
|
+
honour it). The 0–10s bound here is a broad transport envelope;
|
|
3158
|
+
the effective per-media limits (video crossfade `0.1`–`5.0`,
|
|
3159
|
+
audio `0`–`10`) are enforced by the per-mime-group
|
|
3160
|
+
operation-options schema in `merge.yaml`, which the API
|
|
3161
|
+
validates against before publishing.
|
|
3162
|
+
example: 1.0
|
|
3163
|
+
gap_duration:
|
|
3164
|
+
type: number
|
|
3165
|
+
minimum: 0
|
|
3166
|
+
maximum: 10.0
|
|
3167
|
+
description: |
|
|
3168
|
+
Per-input silence/gap duration override, in seconds, inserted
|
|
3169
|
+
before this input at the join point. Overrides the global
|
|
3170
|
+
`options.gap_duration` for this join point. Mirrors
|
|
3171
|
+
`merge.audio.per_input_options.gap_duration` in
|
|
3172
|
+
`schemas/operations/merge.yaml` (no transition dependency) —
|
|
3173
|
+
added alongside `crossfade_duration` so the API does not
|
|
3174
|
+
silently drop this sibling per-input audio override at the wire
|
|
3175
|
+
boundary.
|
|
3176
|
+
example: 0.5
|
|
2828
3177
|
|
|
2829
3178
|
# ============================================
|
|
2830
3179
|
# OPERATION PROGRESS SCHEMA
|
|
@@ -2891,8 +3240,9 @@ components:
|
|
|
2891
3240
|
`phase_input_index`. For single-input operations (most
|
|
2892
3241
|
ops) `phase_total_inputs: 1` and `phase_input_index: 1`
|
|
2893
3242
|
during the relevant phase. For multi-input merge,
|
|
2894
|
-
archive, image_watermark, custom_luma,
|
|
2895
|
-
this matches the
|
|
3243
|
+
archive, image_watermark, custom_luma, audio_overlay,
|
|
3244
|
+
audio_to_video, and video_watermark, this matches the
|
|
3245
|
+
inputs[] count. Per ticket I27.
|
|
2896
3246
|
example: 4
|
|
2897
3247
|
|
|
2898
3248
|
# ============================================
|
|
@@ -3567,12 +3917,22 @@ components:
|
|
|
3567
3917
|
description: Container-reported duration (audio + video).
|
|
3568
3918
|
width:
|
|
3569
3919
|
type: integer
|
|
3920
|
+
format: int64
|
|
3570
3921
|
minimum: 1
|
|
3571
|
-
description:
|
|
3922
|
+
description: |
|
|
3923
|
+
Pixel width (image + video; best-effort document). Declared
|
|
3924
|
+
`int64` so Rust SDK generators emit `i64` instead of the
|
|
3925
|
+
default `i32`; `i32` is fine for everything ffmpeg/libcaesium
|
|
3926
|
+
handles today but the format hint keeps the door open for
|
|
3927
|
+
scientific / RAW imagery without future SDK churn (per
|
|
3928
|
+
ticket [`0sTmbUsc`](https://trello.com/c/0sTmbUsc)).
|
|
3572
3929
|
height:
|
|
3573
3930
|
type: integer
|
|
3931
|
+
format: int64
|
|
3574
3932
|
minimum: 1
|
|
3575
|
-
description:
|
|
3933
|
+
description: |
|
|
3934
|
+
Pixel height (image + video; best-effort document). See
|
|
3935
|
+
`width` for the `format: int64` rationale.
|
|
3576
3936
|
codec:
|
|
3577
3937
|
type: string
|
|
3578
3938
|
description: |
|
|
@@ -3607,12 +3967,16 @@ components:
|
|
|
3607
3967
|
`29.97`, `23.976`).
|
|
3608
3968
|
bitrate_bps:
|
|
3609
3969
|
type: integer
|
|
3970
|
+
format: int64
|
|
3610
3971
|
minimum: 0
|
|
3611
3972
|
description: |
|
|
3612
3973
|
Overall stream bitrate, **bits per second**. Units in
|
|
3613
3974
|
the field name, mirroring `duration_seconds`, so SDKs
|
|
3614
3975
|
avoid the kbps-vs-bps guessing trap. Container-reported
|
|
3615
|
-
for video + audio.
|
|
3976
|
+
for video + audio. Declared `int64` so Rust SDK
|
|
3977
|
+
generators emit `i64` instead of `i32`; `i32` caps at
|
|
3978
|
+
~2.1 Gbps which is tight for future 4K/8K/RAW workloads
|
|
3979
|
+
(per ticket [`0sTmbUsc`](https://trello.com/c/0sTmbUsc)).
|
|
3616
3980
|
audio_layout:
|
|
3617
3981
|
type: string
|
|
3618
3982
|
description: |
|
|
@@ -3759,10 +4123,10 @@ components:
|
|
|
3759
4123
|
the first OPTIONAL role on the contract — `role: base`
|
|
3760
4124
|
audio required, `role: overlay` image 0..1 per
|
|
3761
4125
|
`per_role_cardinality`). When overlay is omitted, the video
|
|
3762
|
-
uses a solid background colour. `availability:
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
traffic
|
|
4126
|
+
uses a solid background colour. `availability: beta` (Wave A,
|
|
4127
|
+
[`c3uthIP4`](https://trello.com/c/c3uthIP4)) — the Lambda
|
|
4128
|
+
backend is live, so the API accepts + publishes (MUST NOT 422);
|
|
4129
|
+
traffic flows to SNS. `media_group` is derived
|
|
3766
4130
|
from the `base` role input MIME prefix per ADR-0015 (always
|
|
3767
4131
|
`audio` for audio_to_video). Routes via
|
|
3768
4132
|
`operation_type=audio_to_video` to `ops-audio-to-video`.
|
|
@@ -3773,7 +4137,9 @@ components:
|
|
|
3773
4137
|
of each per `per_role_cardinality { base: 1/1, overlay:
|
|
3774
4138
|
1/1 }`). Re-encode required; audio stream-copy passthrough.
|
|
3775
4139
|
Distinct from `image_watermark` (pure-Rust/image-only —
|
|
3776
|
-
see ADR-0013). `availability:
|
|
4140
|
+
see ADR-0013). `availability: beta` (Wave A, `c3uthIP4` —
|
|
4141
|
+
Lambda backend live; `short_form` beta, `long_form` stays
|
|
4142
|
+
`planned`); routes via
|
|
3777
4143
|
`operation_type=video_watermark` to `ops-video-watermark`.
|
|
3778
4144
|
Per ADR-0004 + ADR-0013
|
|
3779
4145
|
([`4NrRPCgh`](https://trello.com/c/4NrRPCgh)).
|
|
@@ -3795,8 +4161,10 @@ components:
|
|
|
3795
4161
|
a separate `split-video-fargate` worker via
|
|
3796
4162
|
`processing_class`. `media_group` derives from the input
|
|
3797
4163
|
MIME prefix per the existing single-input rule (no
|
|
3798
|
-
operation-specific conditional needed). `availability:
|
|
3799
|
-
|
|
4164
|
+
operation-specific conditional needed). `availability: beta`
|
|
4165
|
+
for the `audio` mime_group (`image_gif` / `document_pdf` /
|
|
4166
|
+
`video` stay `planned`); routes via `operation_type=split`
|
|
4167
|
+
to `ops-split`.
|
|
3800
4168
|
Per ADR-0004 + ADR-0014
|
|
3801
4169
|
([`vKI0CFDu`](https://trello.com/c/vKI0CFDu)).
|
|
3802
4170
|
enum:
|
|
@@ -3934,6 +4302,47 @@ components:
|
|
|
3934
4302
|
- stream_copy
|
|
3935
4303
|
- re_encode
|
|
3936
4304
|
|
|
4305
|
+
LongFormOperationType:
|
|
4306
|
+
type: string
|
|
4307
|
+
description: |
|
|
4308
|
+
Coarse operation verb for the long-form claim-check job
|
|
4309
|
+
(`LongFormJobMessage.operation_type`). Deliberately a call-site
|
|
4310
|
+
**subset** of `OperationType` — only the long-form classes the API
|
|
4311
|
+
actually publishes today (`compress`, `merge`). NOT the full
|
|
4312
|
+
`OperationType` enum (which would over-promise the wire). Future
|
|
4313
|
+
long-form publishers (e.g. `split` per
|
|
4314
|
+
[`rcwvUKhI`](https://trello.com/c/rcwvUKhI)) widen this enum when
|
|
4315
|
+
they ship.
|
|
4316
|
+
|
|
4317
|
+
Named-schema form lifted from inline at
|
|
4318
|
+
`LongFormJobMessage.operation_type` per ticket
|
|
4319
|
+
[`A3DyuYUd`](https://trello.com/c/A3DyuYUd) — generated SDK bindings
|
|
4320
|
+
emit a stable typed name instead of an `AnonymousSchema_N`
|
|
4321
|
+
placeholder.
|
|
4322
|
+
enum:
|
|
4323
|
+
- compress
|
|
4324
|
+
- merge
|
|
4325
|
+
|
|
4326
|
+
LongFormProcessingClass:
|
|
4327
|
+
type: string
|
|
4328
|
+
description: |
|
|
4329
|
+
Logical processing class on the long-form claim-check wire
|
|
4330
|
+
(`LongFormJobMessage.processing_class`) — always the literal
|
|
4331
|
+
`long_form` (never `short_form` / `blocked`; those exist only on the
|
|
4332
|
+
upload-probe response and HTTP plan surfaces). The launcher forks on
|
|
4333
|
+
this field; do not confuse it with the backend worker identity, which
|
|
4334
|
+
stays off the wire per `schemas/FORMAT.md` §F8.
|
|
4335
|
+
|
|
4336
|
+
A single-value enum (not a JSON-Schema `const`): named + `enum` is the
|
|
4337
|
+
repo's proven typed-codegen form (mirrors `JobInputRole` /
|
|
4338
|
+
`ReEncodeDecision`), whereas `const` degraded to an unconstrained
|
|
4339
|
+
`String` in SDK generators. Lifted from inline at
|
|
4340
|
+
`LongFormJobMessage.processing_class` per ticket
|
|
4341
|
+
[`A3DyuYUd`](https://trello.com/c/A3DyuYUd). Single-member enum
|
|
4342
|
+
validates identically to the prior `const long_form`.
|
|
4343
|
+
enum:
|
|
4344
|
+
- long_form
|
|
4345
|
+
|
|
3937
4346
|
ProgressStatus:
|
|
3938
4347
|
type: string
|
|
3939
4348
|
description: |
|