diff options
Diffstat (limited to 'plugins/jetpack/modules/videopress/js/videopress-token-bridge.js')
-rw-r--r-- | plugins/jetpack/modules/videopress/js/videopress-token-bridge.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/plugins/jetpack/modules/videopress/js/videopress-token-bridge.js b/plugins/jetpack/modules/videopress/js/videopress-token-bridge.js new file mode 100644 index 00000000..75b763c0 --- /dev/null +++ b/plugins/jetpack/modules/videopress/js/videopress-token-bridge.js @@ -0,0 +1,54 @@ +( function () { + window.addEventListener( 'message', function ( event ) { + var allowed_origins = [ 'https://videopress.com', 'https://video.wordpress.com' ]; + if ( -1 === allowed_origins.indexOf( event.origin ) ) { + return; + } + + if ( event.data.event !== 'videopress_token_request' ) { + return; + } + + if ( ! window.videopressAjax ) { + return; + } + + var fetchData = { + action: 'videopress-get-playback-jwt', + guid: event.data.guid, + post_id: window.videopressAjax.post_id || 0, + }; + + fetch( window.videopressAjax.ajaxUrl, { + method: 'POST', + credentials: 'same-origin', + body: new URLSearchParams( fetchData ), + } ) + .then( function ( response ) { + if ( response.ok ) { + return response.json(); + } + throw Error( 'Response is not ok' ); + } ) + .then( function ( jsonResponse ) { + if ( !! jsonResponse.success && jsonResponse.data ) { + event.source.postMessage( + { + event: 'videopress_token_received', + guid: fetchData.guid, + jwt: jsonResponse.data.jwt, + }, + '*' + ); + } else { + event.source.postMessage( + { + event: 'videopress_token_error', + guid: fetchData.guid, + }, + '*' + ); + } + } ); + } ); +} )(); |