64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
/* 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();
|
|
} );
|
|
} );
|
|
} );
|