11import { messages } from '../constants/messages' ;
22import { client } from '../helpers/client/client' ;
33import { errorLog , generateErrorBody , generatePromiseObjects , isValidTransferSpec , randomUUID , throwError } from '../helpers/helpers' ;
4- import { getApiCall } from '../http-gateway/core' ;
4+ import { getApiCall , handleHttpGatewayDrop , httpGatewaySelectFileDialog , httpGatewaySelectFolderDialog } from '../http-gateway/core' ;
5+ import { HttpGatewayInfo } from '../http-gateway/models' ;
56import { asperaSdk } from '../index' ;
6- import { AsperaSdkInfo , TransferResponse } from '../models/aspera-sdk.model' ;
7+ import { AsperaSdkInfo , AsperaSdkClientInfo , TransferResponse } from '../models/aspera-sdk.model' ;
78import { CustomBrandingOptions , DataTransferResponse , AsperaSdkSpec , BrowserStyleFile , AsperaSdkTransfer , FileDialogOptions , FolderDialogOptions , InitOptions , ModifyTransferOptions , ResumeTransferOptions , SafariExtensionEvent , TransferSpec , WebsocketEvent } from '../models/models' ;
89
910/**
@@ -14,21 +15,24 @@ import {CustomBrandingOptions, DataTransferResponse, AsperaSdkSpec, BrowserStyle
1415 */
1516export const testConnection = ( ) : Promise < any > => {
1617 return client . request ( 'get_info' )
17- . then ( ( data : AsperaSdkInfo ) => {
18- asperaSdk . globals . AsperaSdkInfo = data ;
18+ . then ( ( data : AsperaSdkClientInfo ) => {
19+ asperaSdk . globals . asperaSdkInfo = data ;
1920 asperaSdk . globals . asperaAppVerified = true ;
20- return data ;
21+ return asperaSdk . globals . sdkResponseData ;
2122 } ) ;
2223} ;
2324
2425/**
25- * Initialize drag and drop.
26+ * Initialize drag and drop. HTTP Gateway does not need to init.
27+ * Ignore if only HTTP Gateway
2628 * @param initCall - Indicate if called via init flow and should not reject
2729 *
2830 * @returns a promise that resolves if the initialization was successful or not
2931 */
3032export const initDragDrop = ( initCall ?: boolean ) : Promise < boolean > => {
31- if ( ! asperaSdk . isReady ) {
33+ if ( asperaSdk . useHttpGateway ) {
34+ return Promise . resolve ( true ) ;
35+ } else if ( ! asperaSdk . isReady ) {
3236 return throwError ( messages . serverNotVerified ) ;
3337 }
3438
@@ -89,6 +93,7 @@ export const init = (options?: InitOptions): Promise<any> => {
8993 return asperaSdk . activityTracking . setup ( )
9094 . then ( ( ) => testConnection ( ) )
9195 . then ( ( ) => initDragDrop ( true ) )
96+ . then ( ( ) => asperaSdk . globals . sdkResponseData )
9297 . catch ( handleErrors ) ;
9398 } ;
9499
@@ -105,16 +110,20 @@ export const init = (options?: InitOptions): Promise<any> => {
105110
106111 asperaSdk . globals . httpGatewayUrl = finalHttpGatewayUrl ;
107112
108- return getApiCall ( 'INFO' ) . then ( ( ) => {
113+ return getApiCall ( 'INFO' ) . then ( ( response : HttpGatewayInfo ) => {
114+ asperaSdk . globals . httpGatewayInfo = response ;
109115 asperaSdk . globals . httpGatewayVerified = true ;
110116
111117 if ( options . forceHttpGateway ) {
112- return asperaSdk . activityTracking . setup ( )
113- . then ( ( ) => initDragDrop ( true ) )
114- . catch ( handleErrors ) ;
118+ return Promise . resolve ( asperaSdk . globals . sdkResponseData ) ;
115119 } else {
116120 return getDesktopStartCalls ( ) ;
117121 }
122+ } ) . catch ( error => {
123+ // If HTTP Gateway fails log and move on to desktop
124+ errorLog ( messages . httpInitFail , error ) ;
125+
126+ return getDesktopStartCalls ( ) ;
118127 } ) ;
119128 }
120129
@@ -338,7 +347,9 @@ export const resumeTransfer = (id: string, options?: ResumeTransferOptions): Pro
338347 * @returns a promise that resolves with the selected file(s) and rejects if user cancels dialog
339348 */
340349export const showSelectFileDialog = ( options ?: FileDialogOptions ) : Promise < DataTransferResponse > => {
341- if ( ! asperaSdk . isReady ) {
350+ if ( asperaSdk . useHttpGateway ) {
351+ return httpGatewaySelectFileDialog ( options ) ;
352+ } else if ( ! asperaSdk . isReady ) {
342353 return throwError ( messages . serverNotVerified ) ;
343354 }
344355
@@ -367,7 +378,9 @@ export const showSelectFileDialog = (options?: FileDialogOptions): Promise<DataT
367378 * @returns a promise that resolves with the selected folder(s) and rejects if user cancels dialog
368379 */
369380export const showSelectFolderDialog = ( options ?: FolderDialogOptions ) : Promise < DataTransferResponse > => {
370- if ( ! asperaSdk . isReady ) {
381+ if ( asperaSdk . useHttpGateway ) {
382+ return httpGatewaySelectFolderDialog ( options ) ;
383+ } else if ( ! asperaSdk . isReady ) {
371384 return throwError ( messages . serverNotVerified ) ;
372385 }
373386
@@ -567,7 +580,7 @@ export const setBranding = (id: string, options: CustomBrandingOptions): Promise
567580 * @param elementSelector the selector of the element on the page that should watch for drop events
568581 */
569582export const createDropzone = (
570- callback : ( data : { event : any ; files : DataTransferResponse } ) => void ,
583+ callback : ( data : { event : DragEvent ; files : DataTransferResponse } ) => void ,
571584 elementSelector : string ,
572585) : void => {
573586 const elements = document . querySelectorAll ( elementSelector ) ;
@@ -576,16 +589,19 @@ export const createDropzone = (
576589 return ;
577590 }
578591
579- const dragEvent = ( event : any ) => {
592+ const dragEvent = ( event : DragEvent ) => {
580593 event . preventDefault ( ) ;
581594 } ;
582595
583- const dropEvent = ( event : any ) => {
596+ const dropEvent = ( event : DragEvent ) => {
584597 event . preventDefault ( ) ;
585- const files : BrowserStyleFile [ ] = [ ] ;
586598 if ( event . dataTransfer && event . dataTransfer . files && event . dataTransfer . files . length && event . dataTransfer . files [ 0 ] ) {
599+ const files : BrowserStyleFile [ ] = [ ] ;
600+ const rawFiles : File [ ] = [ ] ;
601+
587602 for ( let i = 0 ; i < event . dataTransfer . files . length ; i ++ ) {
588603 const file = event . dataTransfer . files [ i ] ;
604+ rawFiles . push ( file ) ;
589605 files . push ( {
590606 lastModified : file . lastModified ,
591607 name : file . name ,
@@ -599,11 +615,17 @@ export const createDropzone = (
599615 app_id : asperaSdk . globals . appId ,
600616 } ;
601617
602- client . request ( 'dropped_files' , payload )
603- . then ( ( data : any ) => callback ( { event, files : data } ) )
604- . catch ( error => {
605- errorLog ( messages . unableToReadDropped , error ) ;
606- } ) ;
618+ handleHttpGatewayDrop ( rawFiles ) ;
619+
620+ if ( asperaSdk . isReady ) {
621+ client . request ( 'dropped_files' , payload )
622+ . then ( ( data : any ) => callback ( { event, files : data } ) )
623+ . catch ( error => {
624+ errorLog ( messages . unableToReadDropped , error ) ;
625+ } ) ;
626+ } else {
627+ callback ( { event, files : { dataTransfer : { files} } } ) ;
628+ }
607629 }
608630 } ;
609631
@@ -646,6 +668,6 @@ export const getInfo = (): Promise<AsperaSdkInfo> => {
646668 }
647669
648670 return new Promise ( ( resolve , _ ) => {
649- resolve ( asperaSdk . globals . AsperaSdkInfo ) ;
671+ resolve ( asperaSdk . globals . sdkResponseData ) ;
650672 } ) ;
651673} ;
0 commit comments