| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /* 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();
- } );
- } );
- } );
|