@codingfactory/mediables-vue 2.0.1
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/dist/PixiFrameExporter-BTU38EVl.cjs +2 -0
- package/dist/PixiFrameExporter-BTU38EVl.cjs.map +1 -0
- package/dist/PixiFrameExporter-Bb3QNWP-.js +199 -0
- package/dist/PixiFrameExporter-Bb3QNWP-.js.map +1 -0
- package/dist/adapters/MediablesAdapter.d.ts +19 -0
- package/dist/adapters/SpatieAdapter.d.ts +18 -0
- package/dist/adapters/index.d.ts +18 -0
- package/dist/components/AdminMediaBrowser.vue.d.ts +11 -0
- package/dist/components/AdminMediaBrowserExample.vue.d.ts +2 -0
- package/dist/components/AdminMediaBulkActionsToolbar.vue.d.ts +2 -0
- package/dist/components/AdminMediaGrid.vue.d.ts +17 -0
- package/dist/components/AdminMediaListItem.vue.d.ts +10 -0
- package/dist/components/AdminMediaManager.vue.d.ts +25 -0
- package/dist/components/AdminMediaUploader.vue.d.ts +11 -0
- package/dist/components/AlbumBrowser.vue.d.ts +17 -0
- package/dist/components/AlbumManager.vue.d.ts +16 -0
- package/dist/components/AlbumMediaGrid.vue.d.ts +28 -0
- package/dist/components/AlbumTree.vue.d.ts +35 -0
- package/dist/components/BulkActionsToolbar.vue.d.ts +2 -0
- package/dist/components/ConversionProgressIndicator.vue.d.ts +2 -0
- package/dist/components/Editor.vue.d.ts +29 -0
- package/dist/components/ExampleGridAndList.vue.d.ts +2 -0
- package/dist/components/ExampleUsage.vue.d.ts +2 -0
- package/dist/components/Grid.vue.d.ts +2 -0
- package/dist/components/ImageEditor/ImageEditor.vue.d.ts +3 -0
- package/dist/components/ImageEditorModal.vue.d.ts +16 -0
- package/dist/components/ImagePicker.vue.d.ts +32 -0
- package/dist/components/ImageUploadZone.vue.d.ts +7 -0
- package/dist/components/Item.vue.d.ts +2 -0
- package/dist/components/Library.vue.d.ts +2 -0
- package/dist/components/ManagedMediaGallery.vue.d.ts +12 -0
- package/dist/components/MediaAttacher.vue.d.ts +21 -0
- package/dist/components/MediaBrowser.vue.d.ts +2 -0
- package/dist/components/MediaCard.vue.d.ts +2 -0
- package/dist/components/MediaFilters.vue.d.ts +2 -0
- package/dist/components/MediaGrid.vue.d.ts +31 -0
- package/dist/components/MediaInfoEditor.vue.d.ts +7 -0
- package/dist/components/MediaManager.vue.d.ts +2 -0
- package/dist/components/MediaUploadWithProgress.vue.d.ts +2 -0
- package/dist/components/MediaUploader.vue.d.ts +2 -0
- package/dist/components/MediaWorkspace.vue.d.ts +19 -0
- package/dist/components/Modal.vue.d.ts +2 -0
- package/dist/components/ModelMediaManager.vue.d.ts +80 -0
- package/dist/components/Pagination.vue.d.ts +2 -0
- package/dist/components/Search.vue.d.ts +2 -0
- package/dist/components/VideoEditorSimple.vue.d.ts +2 -0
- package/dist/components/VideoExportPanel.vue.d.ts +2 -0
- package/dist/components/VideoTimeline.vue.d.ts +2 -0
- package/dist/components/VideoTimelineSimple.vue.d.ts +2 -0
- package/dist/components/VideoToolsPanel.vue.d.ts +2 -0
- package/dist/components/albums/AlbumTreeNode.vue.d.ts +23 -0
- package/dist/components/attachment/MediaAttachment.vue.d.ts +23 -0
- package/dist/components/attachment/index.d.ts +4 -0
- package/dist/components/collection/MediaCollection.vue.d.ts +27 -0
- package/dist/components/collection/MediaCollectionDropzone.vue.d.ts +18 -0
- package/dist/components/collection/MediaCollectionItem.vue.d.ts +2 -0
- package/dist/components/collection/index.d.ts +6 -0
- package/dist/components/form/MediaHiddenFields.vue.d.ts +2 -0
- package/dist/components/form/index.d.ts +4 -0
- package/dist/components/image/ImageEditor.vue.d.ts +2 -0
- package/dist/components/image/ImageItem.vue.d.ts +2 -0
- package/dist/components/renderless/MediaAttachmentProvider.vue.d.ts +12 -0
- package/dist/components/renderless/MediaCollectionProvider.vue.d.ts +12 -0
- package/dist/components/renderless/index.d.ts +7 -0
- package/dist/components/timeline/TimeRuler.vue.d.ts +2 -0
- package/dist/components/timeline/VideoTrack.vue.d.ts +2 -0
- package/dist/components/tools/VideoFiltersPanel.vue.d.ts +7 -0
- package/dist/components/tools/VideoTextPanel.vue.d.ts +2 -0
- package/dist/components/video/AudioTrackManager.vue.d.ts +2 -0
- package/dist/components/video/EditorControls.vue.d.ts +2 -0
- package/dist/components/video/ExportPanel.vue.d.ts +2 -0
- package/dist/components/video/FilterSelector.vue.d.ts +2 -0
- package/dist/components/video/LiveStreamManager.vue.d.ts +2 -0
- package/dist/components/video/StreamCredentials.vue.d.ts +2 -0
- package/dist/components/video/StreamStatus.vue.d.ts +2 -0
- package/dist/components/video/TextOverlayPanel.vue.d.ts +2 -0
- package/dist/components/video/ThumbnailPicker.vue.d.ts +2 -0
- package/dist/components/video/TimelineClip.vue.d.ts +2 -0
- package/dist/components/video/TimelineControls.vue.d.ts +2 -0
- package/dist/components/video/TransitionSelector.vue.d.ts +2 -0
- package/dist/components/video/VideoControls.vue.d.ts +2 -0
- package/dist/components/video/VideoEditor.vue.d.ts +8 -0
- package/dist/components/video/VideoEditorDialog.vue.d.ts +12 -0
- package/dist/components/video/VideoFilterCarousel.vue.d.ts +2 -0
- package/dist/components/video/VideoFilterPreview.vue.d.ts +18 -0
- package/dist/components/video/VideoPlayer.vue.d.ts +2 -0
- package/dist/components/video/VideoPreview.vue.d.ts +3 -0
- package/dist/components/video/VideoPreviewCSS.vue.d.ts +2 -0
- package/dist/components/video/VideoPreviewEngine.vue.d.ts +3 -0
- package/dist/components/video/VideoTimeline.vue.d.ts +2 -0
- package/dist/components/video/VideoUploadProgress.vue.d.ts +2 -0
- package/dist/components/video/VideoUploader.vue.d.ts +29 -0
- package/dist/components/video/index.d.ts +19 -0
- package/dist/composables/useAccordion.d.ts +138 -0
- package/dist/composables/useAlbumDragDrop.d.ts +24 -0
- package/dist/composables/useAlbums.d.ts +17 -0
- package/dist/composables/useFloatingPills.d.ts +111 -0
- package/dist/composables/useHaptic.d.ts +10 -0
- package/dist/composables/useImageEditorModal.d.ts +277 -0
- package/dist/composables/useLiveStream.d.ts +66 -0
- package/dist/composables/useMediaAttachment.d.ts +105 -0
- package/dist/composables/useMediaCollection.d.ts +122 -0
- package/dist/composables/useMediaConversionProgress.d.ts +31 -0
- package/dist/composables/useMediaDragSort.d.ts +56 -0
- package/dist/composables/useMediaSelection.d.ts +27 -0
- package/dist/composables/useMediaUploadQueue.d.ts +61 -0
- package/dist/composables/useMediaValidation.d.ts +59 -0
- package/dist/composables/useRadialMenu.d.ts +116 -0
- package/dist/composables/useSanctumClient.d.ts +31 -0
- package/dist/composables/useTheme.d.ts +7 -0
- package/dist/composables/useToast.d.ts +25 -0
- package/dist/composables/useVideoEditor.d.ts +127 -0
- package/dist/composables/useVideoFilters.d.ts +176 -0
- package/dist/composables/useVideoPlayer.d.ts +50 -0
- package/dist/composables/useVideoUpload.d.ts +134 -0
- package/dist/filters/controlMapping.d.ts +31 -0
- package/dist/filters/css-registry.d.ts +83 -0
- package/dist/filters/definitions/adjustment.d.ts +2 -0
- package/dist/filters/definitions/adjustmentAdvanced.d.ts +2 -0
- package/dist/filters/definitions/advancedBloom.d.ts +2 -0
- package/dist/filters/definitions/alpha.d.ts +2 -0
- package/dist/filters/definitions/ascii.d.ts +2 -0
- package/dist/filters/definitions/backdropBlur.d.ts +2 -0
- package/dist/filters/definitions/bevel.d.ts +2 -0
- package/dist/filters/definitions/bloom.d.ts +2 -0
- package/dist/filters/definitions/blur.d.ts +2 -0
- package/dist/filters/definitions/bulgePinch.d.ts +2 -0
- package/dist/filters/definitions/colorGradient.d.ts +2 -0
- package/dist/filters/definitions/colorMap.d.ts +2 -0
- package/dist/filters/definitions/colorMatrix.d.ts +2 -0
- package/dist/filters/definitions/colorOverlay.d.ts +2 -0
- package/dist/filters/definitions/colorReplace.d.ts +2 -0
- package/dist/filters/definitions/convolution.d.ts +2 -0
- package/dist/filters/definitions/crossHatch.d.ts +2 -0
- package/dist/filters/definitions/crt.d.ts +2 -0
- package/dist/filters/definitions/displacement.d.ts +2 -0
- package/dist/filters/definitions/dot.d.ts +2 -0
- package/dist/filters/definitions/dropShadow.d.ts +2 -0
- package/dist/filters/definitions/emboss.d.ts +2 -0
- package/dist/filters/definitions/glitch.d.ts +2 -0
- package/dist/filters/definitions/glow.d.ts +2 -0
- package/dist/filters/definitions/godray.d.ts +2 -0
- package/dist/filters/definitions/grayscale.d.ts +2 -0
- package/dist/filters/definitions/hslAdjustment.d.ts +2 -0
- package/dist/filters/definitions/kawaseBlur.d.ts +2 -0
- package/dist/filters/definitions/lightmap.d.ts +2 -0
- package/dist/filters/definitions/motionBlur.d.ts +2 -0
- package/dist/filters/definitions/multiColorReplace.d.ts +2 -0
- package/dist/filters/definitions/noise.d.ts +2 -0
- package/dist/filters/definitions/oldFilm.d.ts +2 -0
- package/dist/filters/definitions/outline.d.ts +2 -0
- package/dist/filters/definitions/pixelate.d.ts +2 -0
- package/dist/filters/definitions/radialBlur.d.ts +2 -0
- package/dist/filters/definitions/reflection.d.ts +2 -0
- package/dist/filters/definitions/rgbSplit.d.ts +2 -0
- package/dist/filters/definitions/shockwave.d.ts +2 -0
- package/dist/filters/definitions/simplexNoise.d.ts +2 -0
- package/dist/filters/definitions/tiltShift.d.ts +2 -0
- package/dist/filters/definitions/twist.d.ts +2 -0
- package/dist/filters/definitions/vignette.d.ts +2 -0
- package/dist/filters/definitions/zoomBlur.d.ts +2 -0
- package/dist/filters/factory.d.ts +38 -0
- package/dist/filters/filters/controlMapping.d.ts +31 -0
- package/dist/filters/filters/definitions/adjustment.d.ts +2 -0
- package/dist/filters/filters/definitions/adjustmentAdvanced.d.ts +2 -0
- package/dist/filters/filters/definitions/advancedBloom.d.ts +2 -0
- package/dist/filters/filters/definitions/alpha.d.ts +2 -0
- package/dist/filters/filters/definitions/ascii.d.ts +2 -0
- package/dist/filters/filters/definitions/backdropBlur.d.ts +2 -0
- package/dist/filters/filters/definitions/bevel.d.ts +2 -0
- package/dist/filters/filters/definitions/bloom.d.ts +2 -0
- package/dist/filters/filters/definitions/blur.d.ts +2 -0
- package/dist/filters/filters/definitions/bulgePinch.d.ts +2 -0
- package/dist/filters/filters/definitions/colorGradient.d.ts +2 -0
- package/dist/filters/filters/definitions/colorMap.d.ts +2 -0
- package/dist/filters/filters/definitions/colorMatrix.d.ts +2 -0
- package/dist/filters/filters/definitions/colorOverlay.d.ts +2 -0
- package/dist/filters/filters/definitions/colorReplace.d.ts +2 -0
- package/dist/filters/filters/definitions/convolution.d.ts +2 -0
- package/dist/filters/filters/definitions/crossHatch.d.ts +2 -0
- package/dist/filters/filters/definitions/crt.d.ts +2 -0
- package/dist/filters/filters/definitions/displacement.d.ts +2 -0
- package/dist/filters/filters/definitions/dot.d.ts +2 -0
- package/dist/filters/filters/definitions/dropShadow.d.ts +2 -0
- package/dist/filters/filters/definitions/emboss.d.ts +2 -0
- package/dist/filters/filters/definitions/glitch.d.ts +2 -0
- package/dist/filters/filters/definitions/glow.d.ts +2 -0
- package/dist/filters/filters/definitions/godray.d.ts +2 -0
- package/dist/filters/filters/definitions/grayscale.d.ts +2 -0
- package/dist/filters/filters/definitions/hslAdjustment.d.ts +2 -0
- package/dist/filters/filters/definitions/kawaseBlur.d.ts +2 -0
- package/dist/filters/filters/definitions/lightmap.d.ts +2 -0
- package/dist/filters/filters/definitions/motionBlur.d.ts +2 -0
- package/dist/filters/filters/definitions/multiColorReplace.d.ts +2 -0
- package/dist/filters/filters/definitions/noise.d.ts +2 -0
- package/dist/filters/filters/definitions/oldFilm.d.ts +2 -0
- package/dist/filters/filters/definitions/outline.d.ts +2 -0
- package/dist/filters/filters/definitions/pixelate.d.ts +2 -0
- package/dist/filters/filters/definitions/radialBlur.d.ts +2 -0
- package/dist/filters/filters/definitions/reflection.d.ts +2 -0
- package/dist/filters/filters/definitions/rgbSplit.d.ts +2 -0
- package/dist/filters/filters/definitions/shockwave.d.ts +2 -0
- package/dist/filters/filters/definitions/simplexNoise.d.ts +2 -0
- package/dist/filters/filters/definitions/tiltShift.d.ts +2 -0
- package/dist/filters/filters/definitions/twist.d.ts +2 -0
- package/dist/filters/filters/definitions/vignette.d.ts +2 -0
- package/dist/filters/filters/definitions/zoomBlur.d.ts +2 -0
- package/dist/filters/filters/factory.d.ts +36 -0
- package/dist/filters/filters/index.d.ts +93 -0
- package/dist/filters/filters/registry.d.ts +89 -0
- package/dist/filters/index.d.ts +93 -0
- package/dist/filters/registry.d.ts +89 -0
- package/dist/filters/video-compatible.d.ts +77 -0
- package/dist/filters/video-css-filters.d.ts +153 -0
- package/dist/index-6yUGA--H.cjs +42 -0
- package/dist/index-6yUGA--H.cjs.map +1 -0
- package/dist/index-CcGWfCCV.js +7799 -0
- package/dist/index-CcGWfCCV.js.map +1 -0
- package/dist/index-DTUgsw7J.cjs +76 -0
- package/dist/index-DTUgsw7J.cjs.map +1 -0
- package/dist/index-VrUG0lmk.js +28655 -0
- package/dist/index-VrUG0lmk.js.map +1 -0
- package/dist/index.d.ts +62 -0
- package/dist/js/workers/material-color-extractor.js +215 -0
- package/dist/mediables-vanilla.cjs +2 -0
- package/dist/mediables-vanilla.cjs.map +1 -0
- package/dist/mediables-vanilla.mjs +12 -0
- package/dist/mediables-vanilla.mjs.map +1 -0
- package/dist/mediables-vue.cjs +2 -0
- package/dist/mediables-vue.cjs.map +1 -0
- package/dist/mediables-vue.mjs +67 -0
- package/dist/mediables-vue.mjs.map +1 -0
- package/dist/render-page/assets/index-hBfvGPpt.js +48933 -0
- package/dist/render-page/index.html +18 -0
- package/dist/services/VideoJobClient.d.ts +79 -0
- package/dist/stores/albumStore.d.ts +4 -0
- package/dist/stores/mediaVariantStore.d.ts +1 -0
- package/dist/stores/useAdminMediaStore.d.ts +16 -0
- package/dist/stores/useMediaStore.d.ts +25 -0
- package/dist/stores/useVideoStore.d.ts +21 -0
- package/dist/stores/variantPollStore.d.ts +5 -0
- package/dist/stores/video.d.ts +1 -0
- package/dist/style.css +1 -0
- package/dist/types/adapter.d.ts +181 -0
- package/dist/types/album.d.ts +28 -0
- package/dist/types/api.d.ts +88 -0
- package/dist/types/collection.d.ts +306 -0
- package/dist/types/editor.d.ts +172 -0
- package/dist/types/image.d.ts +210 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/media.d.ts +107 -0
- package/dist/types/types/address.d.ts +66 -0
- package/dist/types/types/admin/intelligent-po.d.ts +47 -0
- package/dist/types/types/admin/products/index.d.ts +17 -0
- package/dist/types/types/admin/purchase-order.d.ts +50 -0
- package/dist/types/types/admin/receipt.d.ts +86 -0
- package/dist/types/types/admin/vendor.d.ts +61 -0
- package/dist/types/types/ai.d.ts +63 -0
- package/dist/types/types/aiActions.d.ts +42 -0
- package/dist/types/types/aiDesigner.d.ts +77 -0
- package/dist/types/types/api-errors.d.ts +6 -0
- package/dist/types/types/api.d.ts +109 -0
- package/dist/types/types/bundle.d.ts +131 -0
- package/dist/types/types/bundles/analytics.d.ts +64 -0
- package/dist/types/types/bundles.d.ts +108 -0
- package/dist/types/types/cart.d.ts +81 -0
- package/dist/types/types/checkout.d.ts +40 -0
- package/dist/types/types/component-config.d.ts +26 -0
- package/dist/types/types/components.d.ts +32 -0
- package/dist/types/types/content.d.ts +138 -0
- package/dist/types/types/coupon.d.ts +32 -0
- package/dist/types/types/customer-product-history.d.ts +210 -0
- package/dist/types/types/drag-contracts.d.ts +40 -0
- package/dist/types/types/drag-drop.d.ts +19 -0
- package/dist/types/types/editor.d.ts +127 -0
- package/dist/types/types/errors.d.ts +36 -0
- package/dist/types/types/feedback.d.ts +122 -0
- package/dist/types/types/image.d.ts +210 -0
- package/dist/types/types/index.d.ts +62 -0
- package/dist/types/types/instagram.d.ts +86 -0
- package/dist/types/types/ionic-components.d.ts +152 -0
- package/dist/types/types/layout.d.ts +127 -0
- package/dist/types/types/media-gateway.d.ts +34 -0
- package/dist/types/types/media.d.ts +178 -0
- package/dist/types/types/notifications.d.ts +123 -0
- package/dist/types/types/order-management.d.ts +245 -0
- package/dist/types/types/pageBuilder/block.d.ts +34 -0
- package/dist/types/types/pageBuilder/blocks.d.ts +82 -0
- package/dist/types/types/pageBuilder/cache.d.ts +33 -0
- package/dist/types/types/pageBuilder/editor.d.ts +15 -0
- package/dist/types/types/pageBuilder/field.d.ts +11 -0
- package/dist/types/types/pageBuilder/index.d.ts +24 -0
- package/dist/types/types/pageBuilder/revisions.d.ts +40 -0
- package/dist/types/types/pageBuilder/templates.d.ts +62 -0
- package/dist/types/types/pattern.d.ts +40 -0
- package/dist/types/types/payment.d.ts +21 -0
- package/dist/types/types/payments.d.ts +10 -0
- package/dist/types/types/pipeline.d.ts +12 -0
- package/dist/types/types/pixi/filter-args.d.ts +274 -0
- package/dist/types/types/pixi/filters-extended.d.ts +157 -0
- package/dist/types/types/pixi/filters.d.ts +38 -0
- package/dist/types/types/preview.d.ts +36 -0
- package/dist/types/types/pricing.d.ts +31 -0
- package/dist/types/types/quickbooks.d.ts +43 -0
- package/dist/types/types/receipt.d.ts +121 -0
- package/dist/types/types/rewards.d.ts +110 -0
- package/dist/types/types/saved-cart.d.ts +51 -0
- package/dist/types/types/settings.d.ts +63 -0
- package/dist/types/types/shipment.d.ts +62 -0
- package/dist/types/types/shipping.d.ts +98 -0
- package/dist/types/types/sidebar-variations.d.ts +226 -0
- package/dist/types/types/slots.d.ts +2 -0
- package/dist/types/types/specification-types.d.ts +70 -0
- package/dist/types/types/specifications.d.ts +163 -0
- package/dist/types/types/store.d.ts +64 -0
- package/dist/types/types/template.d.ts +8 -0
- package/dist/types/types/user.d.ts +47 -0
- package/dist/types/types/variant-groups.d.ts +158 -0
- package/dist/types/types/wishlist.d.ts +73 -0
- package/dist/types/types/workflow-wizard.d.ts +12 -0
- package/dist/types/video.d.ts +449 -0
- package/dist/utils/category-tree-constants.d.ts +42 -0
- package/dist/utils/cookies.d.ts +3 -0
- package/dist/utils/crypto-polyfill.d.ts +4 -0
- package/dist/utils/datetime.d.ts +43 -0
- package/dist/utils/debounce.d.ts +10 -0
- package/dist/utils/debugConsole.d.ts +69 -0
- package/dist/utils/editor/argHelpers.d.ts +6 -0
- package/dist/utils/formatters.d.ts +105 -0
- package/dist/utils/isPresignedAwsUrl.d.ts +67 -0
- package/dist/utils/media-helpers.d.ts +34 -0
- package/dist/utils/normalisePricing.d.ts +11 -0
- package/dist/utils/recipe-generator.d.ts +34 -0
- package/dist/utils/string.d.ts +29 -0
- package/dist/utils/unwrapApiResponse.d.ts +5 -0
- package/dist/utils/uuid.d.ts +30 -0
- package/dist/utils/validators.d.ts +28 -0
- package/dist/utils/video-export.d.ts +60 -0
- package/dist/v3-ionic-1-demo.html +440 -0
- package/dist/video-engine/VideoEngine.d.ts +267 -0
- package/dist/video-engine/adapters/AudioManager.d.ts +106 -0
- package/dist/video-engine/adapters/CSSFilterAdapter.d.ts +106 -0
- package/dist/video-engine/adapters/ExportManager.d.ts +88 -0
- package/dist/video-engine/adapters/FilterBridge.d.ts +96 -0
- package/dist/video-engine/adapters/MediablesCompositionAdapter.d.ts +56 -0
- package/dist/video-engine/adapters/PixiFrameExporter.d.ts +52 -0
- package/dist/video-engine/adapters/RenderQueue.d.ts +119 -0
- package/dist/video-engine/adapters/TextOverlayManager.d.ts +93 -0
- package/dist/video-engine/adapters/TimelineAdapter.d.ts +58 -0
- package/dist/video-engine/adapters/TransitionManager.d.ts +76 -0
- package/dist/video-engine/adapters/WebCodecsExport.d.ts +36 -0
- package/dist/video-engine/compositions/examples/example.d.ts +2 -0
- package/dist/video-engine/filters/CSSFilterSystem.d.ts +213 -0
- package/dist/video-engine/index.d.ts +14 -0
- package/dist/video-engine/presets/ExportPresets.d.ts +70 -0
- package/dist/video-engine/types/index.d.ts +96 -0
- package/dist/video-engine/types.d.ts +1 -0
- package/dist/video-engine/utils/EventEmitter.d.ts +12 -0
- package/dist/video-engine/utils/MediaSourceResolver.d.ts +9 -0
- package/dist/video-engine/utils/error-reporter.d.ts +159 -0
- package/dist/video-engine/utils/keyboard-shortcuts.d.ts +120 -0
- package/dist/video-engine/utils/pixi-video-fallback.d.ts +2 -0
- package/docs/video-subsystem/README.md +490 -0
- package/docs/video-subsystem/api-reference.md +747 -0
- package/docs/video-subsystem/component-examples.md +1477 -0
- package/docs/video-subsystem/integration-guide.md +1021 -0
- package/package.json +102 -0
|
@@ -0,0 +1,747 @@
|
|
|
1
|
+
# Video Subsystem API Reference
|
|
2
|
+
|
|
3
|
+
**Version**: 1.0.0
|
|
4
|
+
**Base URL**: `/api/v1/video`
|
|
5
|
+
**Authentication**: Bearer token required for all endpoints
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
1. [Upload API](#upload-api)
|
|
10
|
+
2. [Playback API](#playback-api)
|
|
11
|
+
3. [Export API](#export-api)
|
|
12
|
+
4. [Live Streaming API](#live-streaming-api)
|
|
13
|
+
5. [Webhook API](#webhook-api)
|
|
14
|
+
6. [Error Responses](#error-responses)
|
|
15
|
+
|
|
16
|
+
## Upload API
|
|
17
|
+
|
|
18
|
+
### Create Upload URL
|
|
19
|
+
|
|
20
|
+
Request a signed upload URL for direct-to-provider video upload.
|
|
21
|
+
|
|
22
|
+
**Endpoint**: `POST /api/v1/video/upload`
|
|
23
|
+
|
|
24
|
+
**Request Body**:
|
|
25
|
+
```json
|
|
26
|
+
{
|
|
27
|
+
"filename": "my-video.mp4",
|
|
28
|
+
"size": 52428800,
|
|
29
|
+
"mime_type": "video/mp4",
|
|
30
|
+
"collection": "user-videos"
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Parameters**:
|
|
35
|
+
| Field | Type | Required | Description |
|
|
36
|
+
|-------|------|----------|-------------|
|
|
37
|
+
| filename | string | Yes | Original filename |
|
|
38
|
+
| size | integer | Yes | File size in bytes (max 5GB) |
|
|
39
|
+
| mime_type | string | Yes | MIME type (video/mp4, video/quicktime, video/webm) |
|
|
40
|
+
| collection | string | No | Media collection name (default: "videos") |
|
|
41
|
+
|
|
42
|
+
**Success Response** (201 Created):
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"upload_url": "https://video.bunnycdn.com/library/your-library-id/videos/video-guid-abc123",
|
|
46
|
+
"upload_id": "upload_abc123",
|
|
47
|
+
"media_uuid": "550e8400-e29b-41d4-a716-446655440000",
|
|
48
|
+
"expires_at": "2025-01-30T12:00:00Z"
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Error Responses**:
|
|
53
|
+
- `400 Bad Request`: Invalid parameters
|
|
54
|
+
- `401 Unauthorized`: Missing or invalid token
|
|
55
|
+
- `413 Payload Too Large`: File exceeds size limit
|
|
56
|
+
- `415 Unsupported Media Type`: Invalid video format
|
|
57
|
+
|
|
58
|
+
**Example cURL**:
|
|
59
|
+
```bash
|
|
60
|
+
curl -X POST https://api.example.com/api/v1/video/upload \
|
|
61
|
+
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
62
|
+
-H "Content-Type: application/json" \
|
|
63
|
+
-d '{
|
|
64
|
+
"filename": "demo.mp4",
|
|
65
|
+
"size": 10485760,
|
|
66
|
+
"mime_type": "video/mp4"
|
|
67
|
+
}'
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Complete Upload
|
|
71
|
+
|
|
72
|
+
Notify the server that client-side upload is complete.
|
|
73
|
+
|
|
74
|
+
**Endpoint**: `POST /api/v1/video/upload/{uuid}/complete`
|
|
75
|
+
|
|
76
|
+
**URL Parameters**:
|
|
77
|
+
| Field | Type | Description |
|
|
78
|
+
|-------|------|-------------|
|
|
79
|
+
| uuid | string | Media UUID from upload creation |
|
|
80
|
+
|
|
81
|
+
**Success Response** (200 OK):
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"message": "Upload completed, processing started",
|
|
85
|
+
"media": {
|
|
86
|
+
"uuid": "550e8400-e29b-41d4-a716-446655440000",
|
|
87
|
+
"status": "processing",
|
|
88
|
+
"processing_status": "pending"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Check Upload Status
|
|
94
|
+
|
|
95
|
+
Get the current status of a video upload.
|
|
96
|
+
|
|
97
|
+
**Endpoint**: `GET /api/v1/video/upload/{uuid}/status`
|
|
98
|
+
|
|
99
|
+
**Success Response** (200 OK):
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"uuid": "550e8400-e29b-41d4-a716-446655440000",
|
|
103
|
+
"status": "processing",
|
|
104
|
+
"processing_status": "encoding",
|
|
105
|
+
"processing_progress": 45,
|
|
106
|
+
"duration": null,
|
|
107
|
+
"playback_available": false
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Status Values**:
|
|
112
|
+
- `pending`: Upload created, waiting for file
|
|
113
|
+
- `uploading`: File upload in progress
|
|
114
|
+
- `processing`: Server processing video
|
|
115
|
+
- `ready`: Video ready for playback
|
|
116
|
+
- `failed`: Processing failed
|
|
117
|
+
|
|
118
|
+
## Playback API
|
|
119
|
+
|
|
120
|
+
### Get Playback URL
|
|
121
|
+
|
|
122
|
+
Get a signed playback URL for video streaming.
|
|
123
|
+
|
|
124
|
+
**Endpoint**: `GET /api/v1/video/{uuid}/playback`
|
|
125
|
+
|
|
126
|
+
**URL Parameters**:
|
|
127
|
+
| Field | Type | Description |
|
|
128
|
+
|-------|------|-------------|
|
|
129
|
+
| uuid | string | Media UUID |
|
|
130
|
+
|
|
131
|
+
**Query Parameters**:
|
|
132
|
+
| Field | Type | Description |
|
|
133
|
+
|-------|------|-------------|
|
|
134
|
+
| quality | string | Preferred quality (auto, 1080p, 720p, 480p) |
|
|
135
|
+
| thumbnail | boolean | Include thumbnail URL |
|
|
136
|
+
|
|
137
|
+
**Success Response** (200 OK):
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"playback_url": "https://your-cdn.b-cdn.net/your-library-id/play_video-guid-abc123/playlist.m3u8",
|
|
141
|
+
"thumbnail_url": "https://your-cdn.b-cdn.net/your-library-id/video-guid-abc123/thumbnail.jpg",
|
|
142
|
+
"token_expires_at": "2025-01-30T13:00:00Z",
|
|
143
|
+
"duration": 120.5,
|
|
144
|
+
"width": 1920,
|
|
145
|
+
"height": 1080,
|
|
146
|
+
"has_audio": true
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Error Responses**:
|
|
151
|
+
- `404 Not Found`: Media not found
|
|
152
|
+
- `403 Forbidden`: No access to media
|
|
153
|
+
- `503 Service Unavailable`: Video still processing
|
|
154
|
+
|
|
155
|
+
### Get Video Metadata
|
|
156
|
+
|
|
157
|
+
Retrieve detailed metadata about a video.
|
|
158
|
+
|
|
159
|
+
**Endpoint**: `GET /api/v1/video/{uuid}/metadata`
|
|
160
|
+
|
|
161
|
+
**Success Response** (200 OK):
|
|
162
|
+
```json
|
|
163
|
+
{
|
|
164
|
+
"uuid": "550e8400-e29b-41d4-a716-446655440000",
|
|
165
|
+
"filename": "my-video.mp4",
|
|
166
|
+
"duration": 120.5,
|
|
167
|
+
"aspect_ratio": "16:9",
|
|
168
|
+
"width": 1920,
|
|
169
|
+
"height": 1080,
|
|
170
|
+
"frame_rate": 29.97,
|
|
171
|
+
"bitrate": 4000000,
|
|
172
|
+
"has_audio": true,
|
|
173
|
+
"has_captions": false,
|
|
174
|
+
"codec": "h264",
|
|
175
|
+
"container": "mp4",
|
|
176
|
+
"size": 52428800,
|
|
177
|
+
"created_at": "2025-01-30T10:00:00Z",
|
|
178
|
+
"processing_status": "ready"
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Generate Thumbnail
|
|
183
|
+
|
|
184
|
+
Generate a thumbnail at a specific timestamp.
|
|
185
|
+
|
|
186
|
+
**Endpoint**: `POST /api/v1/video/{uuid}/thumbnail`
|
|
187
|
+
|
|
188
|
+
**Request Body**:
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"time": 5.0,
|
|
192
|
+
"width": 640,
|
|
193
|
+
"height": 360
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Parameters**:
|
|
198
|
+
| Field | Type | Required | Description |
|
|
199
|
+
|-------|------|----------|-------------|
|
|
200
|
+
| time | float | No | Timestamp in seconds (default: 0) |
|
|
201
|
+
| width | integer | No | Thumbnail width (default: 640) |
|
|
202
|
+
| height | integer | No | Thumbnail height (default: 360) |
|
|
203
|
+
|
|
204
|
+
**Success Response** (200 OK):
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"thumbnail_url": "https://cdn.example.com/thumbnails/abc123_5s.jpg",
|
|
208
|
+
"width": 640,
|
|
209
|
+
"height": 360,
|
|
210
|
+
"time": 5.0
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Export API
|
|
215
|
+
|
|
216
|
+
### Create Export Job
|
|
217
|
+
|
|
218
|
+
Start a video export job with edits and filters.
|
|
219
|
+
|
|
220
|
+
**Endpoint**: `POST /api/v1/video/{uuid}/export`
|
|
221
|
+
|
|
222
|
+
**Request Body**:
|
|
223
|
+
```json
|
|
224
|
+
{
|
|
225
|
+
"recipe": {
|
|
226
|
+
"version": "1.0",
|
|
227
|
+
"timeline": [
|
|
228
|
+
{
|
|
229
|
+
"type": "clip",
|
|
230
|
+
"id": "clip-1",
|
|
231
|
+
"start": 0,
|
|
232
|
+
"end": 30,
|
|
233
|
+
"source_in": 10,
|
|
234
|
+
"source_out": 40,
|
|
235
|
+
"speed": 1.0
|
|
236
|
+
}
|
|
237
|
+
],
|
|
238
|
+
"filters": [
|
|
239
|
+
{
|
|
240
|
+
"id": "vintage",
|
|
241
|
+
"params": {},
|
|
242
|
+
"intensity": 0.8
|
|
243
|
+
}
|
|
244
|
+
],
|
|
245
|
+
"audio": {
|
|
246
|
+
"volume": 1.0,
|
|
247
|
+
"fade_in": 0,
|
|
248
|
+
"fade_out": 2
|
|
249
|
+
},
|
|
250
|
+
"output": {
|
|
251
|
+
"format": "mp4",
|
|
252
|
+
"quality": "1080p",
|
|
253
|
+
"fps": 30
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Recipe Schema**:
|
|
260
|
+
| Field | Type | Description |
|
|
261
|
+
|-------|------|-------------|
|
|
262
|
+
| version | string | Recipe format version |
|
|
263
|
+
| timeline | array | Array of timeline clips |
|
|
264
|
+
| filters | array | Array of filters to apply |
|
|
265
|
+
| audio | object | Audio settings |
|
|
266
|
+
| output | object | Output format settings |
|
|
267
|
+
|
|
268
|
+
**Success Response** (202 Accepted):
|
|
269
|
+
```json
|
|
270
|
+
{
|
|
271
|
+
"job_id": "job_xyz789",
|
|
272
|
+
"status": "queued",
|
|
273
|
+
"estimated_time": 180,
|
|
274
|
+
"created_at": "2025-01-30T11:00:00Z"
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Check Export Status
|
|
279
|
+
|
|
280
|
+
Get the status of an export job.
|
|
281
|
+
|
|
282
|
+
**Endpoint**: `GET /api/v1/video/exports/{job_id}`
|
|
283
|
+
|
|
284
|
+
**Success Response** (200 OK):
|
|
285
|
+
```json
|
|
286
|
+
{
|
|
287
|
+
"job_id": "job_xyz789",
|
|
288
|
+
"status": "processing",
|
|
289
|
+
"progress": 65,
|
|
290
|
+
"started_at": "2025-01-30T11:00:00Z",
|
|
291
|
+
"estimated_completion": "2025-01-30T11:03:00Z",
|
|
292
|
+
"output_media_uuid": null
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
**Status Values**:
|
|
297
|
+
- `queued`: Job in queue
|
|
298
|
+
- `processing`: Export in progress
|
|
299
|
+
- `completed`: Export successful
|
|
300
|
+
- `failed`: Export failed
|
|
301
|
+
|
|
302
|
+
### Get Export Result
|
|
303
|
+
|
|
304
|
+
Retrieve the completed export result.
|
|
305
|
+
|
|
306
|
+
**Endpoint**: `GET /api/v1/video/exports/{job_id}/result`
|
|
307
|
+
|
|
308
|
+
**Success Response** (200 OK):
|
|
309
|
+
```json
|
|
310
|
+
{
|
|
311
|
+
"job_id": "job_xyz789",
|
|
312
|
+
"status": "completed",
|
|
313
|
+
"output_media_uuid": "650e8400-e29b-41d4-a716-446655440001",
|
|
314
|
+
"playback_url": "https://your-cdn.b-cdn.net/your-library-id/play_video-guid-def456/playlist.m3u8",
|
|
315
|
+
"duration": 30,
|
|
316
|
+
"size": 15728640,
|
|
317
|
+
"completed_at": "2025-01-30T11:03:00Z"
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Cancel Export
|
|
322
|
+
|
|
323
|
+
Cancel a running export job.
|
|
324
|
+
|
|
325
|
+
**Endpoint**: `DELETE /api/v1/video/exports/{job_id}`
|
|
326
|
+
|
|
327
|
+
**Success Response** (204 No Content)
|
|
328
|
+
|
|
329
|
+
## Live Streaming API
|
|
330
|
+
|
|
331
|
+
### Create Live Stream
|
|
332
|
+
|
|
333
|
+
Create a new live stream session.
|
|
334
|
+
|
|
335
|
+
**Endpoint**: `POST /api/v1/video/live`
|
|
336
|
+
|
|
337
|
+
**Request Body**:
|
|
338
|
+
```json
|
|
339
|
+
{
|
|
340
|
+
"title": "My Live Stream",
|
|
341
|
+
"description": "Stream description",
|
|
342
|
+
"low_latency": true,
|
|
343
|
+
"auto_record": true,
|
|
344
|
+
"max_duration": 3600
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
**Parameters**:
|
|
349
|
+
| Field | Type | Required | Description |
|
|
350
|
+
|-------|------|----------|-------------|
|
|
351
|
+
| title | string | No | Stream title |
|
|
352
|
+
| description | string | No | Stream description |
|
|
353
|
+
| low_latency | boolean | No | Enable low latency mode (5-7s delay) |
|
|
354
|
+
| auto_record | boolean | No | Auto-record for VOD (default: true) |
|
|
355
|
+
| max_duration | integer | No | Max duration in seconds |
|
|
356
|
+
|
|
357
|
+
**Success Response** (201 Created):
|
|
358
|
+
```json
|
|
359
|
+
{
|
|
360
|
+
"stream_id": "stream_abc123",
|
|
361
|
+
"media_uuid": "750e8400-e29b-41d4-a716-446655440002",
|
|
362
|
+
"stream_key": "live_xyz789",
|
|
363
|
+
"rtmp_url": "rtmp://ingest.bunny.live/live_xyz789",
|
|
364
|
+
"playback_url": "https://your-cdn.b-cdn.net/your-library-id/play_live123/playlist.m3u8",
|
|
365
|
+
"status": "idle",
|
|
366
|
+
"created_at": "2025-01-30T12:00:00Z"
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Get Stream Status
|
|
371
|
+
|
|
372
|
+
Get current status of a live stream.
|
|
373
|
+
|
|
374
|
+
**Endpoint**: `GET /api/v1/video/live/{stream_id}`
|
|
375
|
+
|
|
376
|
+
**Success Response** (200 OK):
|
|
377
|
+
```json
|
|
378
|
+
{
|
|
379
|
+
"stream_id": "stream_abc123",
|
|
380
|
+
"status": "live",
|
|
381
|
+
"started_at": "2025-01-30T12:05:00Z",
|
|
382
|
+
"duration": 300,
|
|
383
|
+
"viewer_count": 42,
|
|
384
|
+
"peak_viewers": 75,
|
|
385
|
+
"health": {
|
|
386
|
+
"bitrate": 4500000,
|
|
387
|
+
"framerate": 30,
|
|
388
|
+
"keyframe_interval": 2
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
**Status Values**:
|
|
394
|
+
- `idle`: Stream created, waiting for connection
|
|
395
|
+
- `connecting`: Encoder connecting
|
|
396
|
+
- `live`: Stream is live
|
|
397
|
+
- `disconnected`: Stream ended
|
|
398
|
+
|
|
399
|
+
### End Live Stream
|
|
400
|
+
|
|
401
|
+
Manually end a live stream session.
|
|
402
|
+
|
|
403
|
+
**Endpoint**: `POST /api/v1/video/live/{stream_id}/end`
|
|
404
|
+
|
|
405
|
+
**Success Response** (200 OK):
|
|
406
|
+
```json
|
|
407
|
+
{
|
|
408
|
+
"stream_id": "stream_abc123",
|
|
409
|
+
"status": "ended",
|
|
410
|
+
"duration": 1800,
|
|
411
|
+
"vod_media_uuid": "850e8400-e29b-41d4-a716-446655440003",
|
|
412
|
+
"ended_at": "2025-01-30T12:30:00Z"
|
|
413
|
+
}
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### Get Stream Metrics
|
|
417
|
+
|
|
418
|
+
Retrieve detailed metrics for a live stream.
|
|
419
|
+
|
|
420
|
+
**Endpoint**: `GET /api/v1/video/live/{stream_id}/metrics`
|
|
421
|
+
|
|
422
|
+
**Query Parameters**:
|
|
423
|
+
| Field | Type | Description |
|
|
424
|
+
|-------|------|-------------|
|
|
425
|
+
| interval | string | Metric interval (1m, 5m, 1h) |
|
|
426
|
+
| start | string | Start time (ISO 8601) |
|
|
427
|
+
| end | string | End time (ISO 8601) |
|
|
428
|
+
|
|
429
|
+
**Success Response** (200 OK):
|
|
430
|
+
```json
|
|
431
|
+
{
|
|
432
|
+
"stream_id": "stream_abc123",
|
|
433
|
+
"metrics": [
|
|
434
|
+
{
|
|
435
|
+
"timestamp": "2025-01-30T12:10:00Z",
|
|
436
|
+
"viewers": 45,
|
|
437
|
+
"bitrate": 4500000,
|
|
438
|
+
"framerate": 29.97,
|
|
439
|
+
"dropped_frames": 0,
|
|
440
|
+
"rebuffer_percentage": 0.1
|
|
441
|
+
}
|
|
442
|
+
],
|
|
443
|
+
"summary": {
|
|
444
|
+
"total_viewers": 250,
|
|
445
|
+
"peak_viewers": 75,
|
|
446
|
+
"average_viewers": 42,
|
|
447
|
+
"total_watch_time": 10800,
|
|
448
|
+
"engagement_score": 0.85
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
## Webhook API
|
|
454
|
+
|
|
455
|
+
### Bunny Webhooks
|
|
456
|
+
|
|
457
|
+
Handle webhooks from the Bunny video provider.
|
|
458
|
+
|
|
459
|
+
**Endpoint**: `POST /api/v1/video/webhooks/bunny`
|
|
460
|
+
|
|
461
|
+
**Headers**:
|
|
462
|
+
```
|
|
463
|
+
X-Webhook-Signature: webhook_signature_here
|
|
464
|
+
Content-Type: application/json
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
**Security**:
|
|
468
|
+
- Preferred: shared secret query parameter: `POST /api/v1/video/webhooks/bunny?secret=...`
|
|
469
|
+
- Optional: `X-Webhook-Signature` header (deployment-specific)
|
|
470
|
+
|
|
471
|
+
**Request Body** (Status Update):
|
|
472
|
+
```json
|
|
473
|
+
{
|
|
474
|
+
"VideoLibraryId": 12345,
|
|
475
|
+
"VideoGuid": "video-guid-abc123",
|
|
476
|
+
"Status": 3
|
|
477
|
+
}
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
**Notes**:
|
|
481
|
+
- `VideoGuid` is used to locate the `Media` record (`provider_asset_id`)
|
|
482
|
+
- `Status` indicates processing state (e.g. `3` = finished/ready)
|
|
483
|
+
|
|
484
|
+
**Success Response** (204 No Content)
|
|
485
|
+
|
|
486
|
+
**Error Response** (401 Unauthorized):
|
|
487
|
+
```json
|
|
488
|
+
{
|
|
489
|
+
"error": "Invalid signature"
|
|
490
|
+
}
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
## Error Responses
|
|
494
|
+
|
|
495
|
+
All API endpoints follow a consistent error response format.
|
|
496
|
+
|
|
497
|
+
### Error Response Format
|
|
498
|
+
|
|
499
|
+
```json
|
|
500
|
+
{
|
|
501
|
+
"error": {
|
|
502
|
+
"code": "VIDEO_NOT_FOUND",
|
|
503
|
+
"message": "The requested video could not be found",
|
|
504
|
+
"details": {
|
|
505
|
+
"uuid": "550e8400-e29b-41d4-a716-446655440000"
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
"timestamp": "2025-01-30T12:00:00Z",
|
|
509
|
+
"path": "/api/v1/video/550e8400-e29b-41d4-a716-446655440000/playback"
|
|
510
|
+
}
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### Common Error Codes
|
|
514
|
+
|
|
515
|
+
| Code | HTTP Status | Description |
|
|
516
|
+
|------|-------------|-------------|
|
|
517
|
+
| INVALID_REQUEST | 400 | Request validation failed |
|
|
518
|
+
| UNAUTHORIZED | 401 | Missing or invalid authentication |
|
|
519
|
+
| FORBIDDEN | 403 | Insufficient permissions |
|
|
520
|
+
| VIDEO_NOT_FOUND | 404 | Video not found |
|
|
521
|
+
| UPLOAD_TOO_LARGE | 413 | File exceeds size limit |
|
|
522
|
+
| UNSUPPORTED_FORMAT | 415 | Video format not supported |
|
|
523
|
+
| RATE_LIMITED | 429 | Too many requests |
|
|
524
|
+
| PROCESSING_ERROR | 500 | Server processing error |
|
|
525
|
+
| PROVIDER_ERROR | 502 | Video provider error |
|
|
526
|
+
| SERVICE_UNAVAILABLE | 503 | Service temporarily unavailable |
|
|
527
|
+
|
|
528
|
+
### Rate Limiting
|
|
529
|
+
|
|
530
|
+
API endpoints are rate limited to prevent abuse.
|
|
531
|
+
|
|
532
|
+
**Rate Limits**:
|
|
533
|
+
- Upload creation: 10 per minute
|
|
534
|
+
- Playback URLs: 60 per minute
|
|
535
|
+
- Export jobs: 5 per hour
|
|
536
|
+
- Live streams: 2 concurrent
|
|
537
|
+
- Webhooks: 1000 per minute
|
|
538
|
+
|
|
539
|
+
**Rate Limit Headers**:
|
|
540
|
+
```
|
|
541
|
+
X-RateLimit-Limit: 60
|
|
542
|
+
X-RateLimit-Remaining: 45
|
|
543
|
+
X-RateLimit-Reset: 1706621400
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
**Rate Limited Response** (429 Too Many Requests):
|
|
547
|
+
```json
|
|
548
|
+
{
|
|
549
|
+
"error": {
|
|
550
|
+
"code": "RATE_LIMITED",
|
|
551
|
+
"message": "Rate limit exceeded",
|
|
552
|
+
"details": {
|
|
553
|
+
"limit": 60,
|
|
554
|
+
"remaining": 0,
|
|
555
|
+
"reset_at": "2025-01-30T12:10:00Z"
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
```
|
|
560
|
+
|
|
561
|
+
## Authentication
|
|
562
|
+
|
|
563
|
+
All API endpoints require authentication using Bearer tokens.
|
|
564
|
+
|
|
565
|
+
### Request Headers
|
|
566
|
+
|
|
567
|
+
```
|
|
568
|
+
Authorization: Bearer YOUR_ACCESS_TOKEN
|
|
569
|
+
Content-Type: application/json
|
|
570
|
+
Accept: application/json
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
### Token Generation
|
|
574
|
+
|
|
575
|
+
```php
|
|
576
|
+
// Generate API token in Laravel
|
|
577
|
+
$token = $user->createToken('api-token', ['video:read', 'video:write'])->plainTextToken;
|
|
578
|
+
```
|
|
579
|
+
|
|
580
|
+
### Token Scopes
|
|
581
|
+
|
|
582
|
+
| Scope | Description |
|
|
583
|
+
|-------|-------------|
|
|
584
|
+
| video:read | View videos and metadata |
|
|
585
|
+
| video:write | Upload and edit videos |
|
|
586
|
+
| video:delete | Delete videos |
|
|
587
|
+
| video:export | Create export jobs |
|
|
588
|
+
| live:create | Create live streams |
|
|
589
|
+
| live:manage | Manage live streams |
|
|
590
|
+
|
|
591
|
+
## SDK Examples
|
|
592
|
+
|
|
593
|
+
### JavaScript/TypeScript
|
|
594
|
+
|
|
595
|
+
```typescript
|
|
596
|
+
import { MediablesVideo } from '@mediables/sdk'
|
|
597
|
+
|
|
598
|
+
const client = new MediablesVideo({
|
|
599
|
+
apiKey: 'YOUR_API_KEY',
|
|
600
|
+
baseUrl: 'https://api.example.com'
|
|
601
|
+
})
|
|
602
|
+
|
|
603
|
+
// Upload video
|
|
604
|
+
const upload = await client.uploads.create({
|
|
605
|
+
filename: 'video.mp4',
|
|
606
|
+
size: 10485760,
|
|
607
|
+
mimeType: 'video/mp4'
|
|
608
|
+
})
|
|
609
|
+
|
|
610
|
+
// Upload file to provider
|
|
611
|
+
await client.uploads.uploadFile(upload.uploadUrl, file)
|
|
612
|
+
|
|
613
|
+
// Get playback URL
|
|
614
|
+
const playback = await client.videos.getPlaybackUrl(upload.mediaUuid)
|
|
615
|
+
console.log('Watch at:', playback.playbackUrl)
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
### PHP
|
|
619
|
+
|
|
620
|
+
```php
|
|
621
|
+
use Mediables\VideoClient;
|
|
622
|
+
|
|
623
|
+
$client = new VideoClient([
|
|
624
|
+
'api_key' => 'YOUR_API_KEY',
|
|
625
|
+
'base_url' => 'https://api.example.com'
|
|
626
|
+
]);
|
|
627
|
+
|
|
628
|
+
// Request upload URL
|
|
629
|
+
$upload = $client->uploads->create([
|
|
630
|
+
'filename' => 'video.mp4',
|
|
631
|
+
'size' => 10485760,
|
|
632
|
+
'mime_type' => 'video/mp4'
|
|
633
|
+
]);
|
|
634
|
+
|
|
635
|
+
// Get playback URL
|
|
636
|
+
$playback = $client->videos->getPlaybackUrl($upload['media_uuid']);
|
|
637
|
+
echo "Watch at: " . $playback['playback_url'];
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
### Python
|
|
641
|
+
|
|
642
|
+
```python
|
|
643
|
+
from mediables import VideoClient
|
|
644
|
+
|
|
645
|
+
client = VideoClient(
|
|
646
|
+
api_key='YOUR_API_KEY',
|
|
647
|
+
base_url='https://api.example.com'
|
|
648
|
+
)
|
|
649
|
+
|
|
650
|
+
# Upload video
|
|
651
|
+
upload = client.uploads.create(
|
|
652
|
+
filename='video.mp4',
|
|
653
|
+
size=10485760,
|
|
654
|
+
mime_type='video/mp4'
|
|
655
|
+
)
|
|
656
|
+
|
|
657
|
+
# Get playback URL
|
|
658
|
+
playback = client.videos.get_playback_url(upload['media_uuid'])
|
|
659
|
+
print(f"Watch at: {playback['playback_url']}")
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
## Postman Collection
|
|
663
|
+
|
|
664
|
+
Download our Postman collection for easy API testing:
|
|
665
|
+
|
|
666
|
+
[Download Postman Collection](https://www.getpostman.com/collections/mediables-video-api)
|
|
667
|
+
|
|
668
|
+
## OpenAPI Specification
|
|
669
|
+
|
|
670
|
+
The complete OpenAPI 3.0 specification is available at:
|
|
671
|
+
|
|
672
|
+
```yaml
|
|
673
|
+
openapi: 3.0.0
|
|
674
|
+
info:
|
|
675
|
+
title: Mediables Video API
|
|
676
|
+
version: 1.0.0
|
|
677
|
+
description: Video management API for Mediables package
|
|
678
|
+
servers:
|
|
679
|
+
- url: https://api.example.com/api/v1
|
|
680
|
+
description: Production server
|
|
681
|
+
- url: http://localhost:8000/api/v1
|
|
682
|
+
description: Development server
|
|
683
|
+
paths:
|
|
684
|
+
/video/upload:
|
|
685
|
+
post:
|
|
686
|
+
summary: Create upload URL
|
|
687
|
+
tags: [Upload]
|
|
688
|
+
security:
|
|
689
|
+
- bearerAuth: []
|
|
690
|
+
requestBody:
|
|
691
|
+
required: true
|
|
692
|
+
content:
|
|
693
|
+
application/json:
|
|
694
|
+
schema:
|
|
695
|
+
type: object
|
|
696
|
+
required: [filename, size, mime_type]
|
|
697
|
+
properties:
|
|
698
|
+
filename:
|
|
699
|
+
type: string
|
|
700
|
+
example: video.mp4
|
|
701
|
+
size:
|
|
702
|
+
type: integer
|
|
703
|
+
example: 10485760
|
|
704
|
+
mime_type:
|
|
705
|
+
type: string
|
|
706
|
+
enum: [video/mp4, video/quicktime, video/webm]
|
|
707
|
+
collection:
|
|
708
|
+
type: string
|
|
709
|
+
example: user-videos
|
|
710
|
+
responses:
|
|
711
|
+
'201':
|
|
712
|
+
description: Upload URL created
|
|
713
|
+
content:
|
|
714
|
+
application/json:
|
|
715
|
+
schema:
|
|
716
|
+
type: object
|
|
717
|
+
properties:
|
|
718
|
+
upload_url:
|
|
719
|
+
type: string
|
|
720
|
+
upload_id:
|
|
721
|
+
type: string
|
|
722
|
+
media_uuid:
|
|
723
|
+
type: string
|
|
724
|
+
expires_at:
|
|
725
|
+
type: string
|
|
726
|
+
format: date-time
|
|
727
|
+
# ... Additional endpoints
|
|
728
|
+
```
|
|
729
|
+
|
|
730
|
+
## Changelog
|
|
731
|
+
|
|
732
|
+
### Version 1.0.0 (2025-01-30)
|
|
733
|
+
- Initial release
|
|
734
|
+
- Video upload with direct-to-provider support
|
|
735
|
+
- Playback with signed URLs
|
|
736
|
+
- Video export with FFmpeg processing
|
|
737
|
+
- Live streaming support
|
|
738
|
+
- Webhook handling for Bunny provider
|
|
739
|
+
|
|
740
|
+
## Support
|
|
741
|
+
|
|
742
|
+
For API support and questions:
|
|
743
|
+
|
|
744
|
+
- **Documentation**: https://mediables.dev/docs/api
|
|
745
|
+
- **GitHub Issues**: https://github.com/mediables/mediables/issues
|
|
746
|
+
- **API Status**: https://status.mediables.dev
|
|
747
|
+
- **Email**: api-support@mediables.dev
|