summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/modules/videopress/js')
-rw-r--r--plugins/jetpack/modules/videopress/js/gutenberg-video-upload.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/plugins/jetpack/modules/videopress/js/gutenberg-video-upload.js b/plugins/jetpack/modules/videopress/js/gutenberg-video-upload.js
new file mode 100644
index 00000000..c3ba1739
--- /dev/null
+++ b/plugins/jetpack/modules/videopress/js/gutenberg-video-upload.js
@@ -0,0 +1,63 @@
+/* globals wp, lodash */
+
+wp.apiFetch.use( function( options, next ) {
+ var path = options.path;
+ var method = options.method;
+ var body = options.body;
+ var file = body ? body.get( 'file' ) : null;
+
+ // Override only requests to the WP REST API media endpoint uploading new videos.
+ if ( ! path || path.indexOf( '/wp/v2/media' ) === -1 ) {
+ return next( options );
+ }
+ if ( ! method || 'post' !== method.toLowerCase() ) {
+ return next( options );
+ }
+ if ( ! file || file.type.indexOf( 'video/' ) !== 0 ) {
+ return next( options );
+ }
+
+ // Get upload token.
+ wp.media
+ .ajax( 'videopress-get-upload-token', { async: false, data: { filename: file.name } } )
+ .done( function( response ) {
+ // Set auth header with upload token.
+ var headers = options.headers || {};
+ headers.Authorization =
+ 'X_UPLOAD_TOKEN token="' +
+ response.upload_token +
+ '" blog_id="' +
+ response.upload_blog_id +
+ '"';
+ options.headers = headers;
+
+ // Replace upload URL.
+ delete options.path;
+ options.url = response.upload_action_url;
+
+ // Handle CORS.
+ options.credentials = 'omit';
+
+ // Set data in expected param by WP.com media endpoint.
+ body.set( 'media[]', file );
+ body.delete( 'file' );
+ options.body = body;
+ } );
+
+ var result = next( options );
+
+ return new Promise( function( resolve, reject ) {
+ result
+ .then( function( data ) {
+ var wpcomMediaObject = lodash.get( data, 'media[0]' );
+ var id = lodash.get( wpcomMediaObject, 'ID' );
+ var gutenbergMediaObject = wp.apiFetch( {
+ path: '/wp/v2/media/' + id,
+ } );
+ resolve( gutenbergMediaObject );
+ } )
+ .catch( function() {
+ reject();
+ } );
+ } );
+} );