{"version":3,"sources":["webpack:///./src/shared/components/index.ts","webpack:///./src/shared/api/services/index.ts","webpack:///./src/shared/api/services/ApiService.ts","webpack:///./src/shared/utils/index.ts","webpack:///./src/shared/components/Control.tsx","webpack:///./src/shared/components/CommonModalHeaderControls.tsx","webpack:///./src/shared/components/FeatureGroup.tsx","webpack:///./src/shared/utils/componentUtils.ts","webpack:///./src/shared/components/CommonModalFooterControls.tsx","webpack:///./src/shared/constants.ts","webpack:///./src/shared/components/LabelledControl.tsx","webpack:///./src/shared/components/WaitIndicator.tsx","webpack:///./src/shared/components/MITransferTable.tsx","webpack:///./src/shared/api/commUtil.ts","webpack:///./src/shared/utils/applicationUtils.ts","webpack:///./src/shared/components/LabelledProgressBar.tsx","webpack:///./src/shared/components/LoadingSpinner.tsx","webpack:///./src/shared/services/index.ts","webpack:///./src/shared/api/services/UsersApiService.ts","webpack:///./src/shared/components/ContentSectionWrapper.tsx","webpack:///./src/shared/components/FormattedLocaleDate.tsx","webpack:///./src/shared/components/Beltline.tsx","webpack:///./src/shared/api/services/PackagesApiService.ts","webpack:///./src/shared/api/services/TokenService.ts","webpack:///./src/shared/utils/formattingUtils.ts","webpack:///./src/shared/utils/fileUtils.ts","webpack:///./src/shared/utils/debugUtils.ts","webpack:///./src/shared/components/ErrorAlert.tsx","webpack:///./src/shared/components/WarningAlert.tsx","webpack:///./src/shared/components/ApplicationLinkButton.tsx","webpack:///./src/shared/components/DebouncedTextInput.tsx","webpack:///./src/shared/services/HashService.ts","webpack:///./src/shared/api/services/ContactsApiService.ts","webpack:///./src/shared/api/services/FoldersApiService.ts","webpack:///./src/shared/api/services/UploadApiService.ts","webpack:///./src/shared/api/services/DownloadValidateApiService.ts","webpack:///./src/shared/api/services/SettingsApiService.ts","webpack:///./src/shared/components/PageWrapper.tsx","webpack:///./src/shared/components/FeatureGroupNumericTitle.tsx","webpack:///./src/shared/components/FeatureGroupIconTitle.tsx","webpack:///./src/shared/components/FeatureGroupBoxedIconTitle.tsx","webpack:///./src/shared/components/FormikFieldGroup.tsx","webpack:///./src/shared/api/services/OrgsApiService.ts","webpack:///./src/shared/services/HelpUrlBuilderService.ts","webpack:///./src/shared/api/services/PublicDownloadLinkApiService.ts"],"names":["default","baseUrl","language","this","endsWith","substr","length","tokenService","TokenService","getInstance","get","url","params","preventCache","doRequestWithToken","token","fullUrl","getApiUrl","headers","Object","assign","getTokenHeaders","getNoCacheHeaders","then","response","data","post","options","getAxiosRequestConfig","put","delete","signOut","revokeToken","stopTokenRefresh","startTokenRefresh","requestFn","getTokenAndExecuteRequest","forceRefresh","getToken","catch","error","status","object","isString","Promise","reject","detail","message","genericHandler","onUploadProgress","progressHandler","event","defaults","validateStatus","cancelToken","ApiService","props","classes","className","children","helpButton","help","type","onClick","onHelp","closeButton","close","onClose","FeatureGroupContent","useToggle","initial","useState","flag","setFlag","useGetLatest","obj","ref","useRef","current","useCallback","useBoolean","value","output","replace","toLowerCase","defaultFn","defaultWait","debounceRef","getDefaultFn","getDefaultWait","promise","resolve","timeout","clearTimeout","setTimeout","args","document","createElement","action","method","keys","forEach","argName","field","name","appendChild","body","submit","e","alert","makeButton","variant","additionalClasses","Button","disabled","disable","label","primaryButton","primary","secondaryButton","secondary","cancelButton","cancel","Fragment","DEBOUNCE_INTERVAL","TRANSFER_DOC_VERSION","WaitIndicator","title","description","useWaitIndicator","setTrue","setFalse","waitElement","useMemo","useWaitOnPromise","showWait","hideWait","finally","columns","useTable","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","cellPadding","caption","map","headerGroup","ind1","getHeaderGroupProps","key","column","ind2","getHeaderProps","scope","render","row","getRowProps","cells","cell","getCellProps","relativeUrl","startsWith","Authorization","access_token","makeLinkPart","makeApplicationLink","linkParts","push","arg01","arg02","arg03","arg04","arg05","arg06","arg07","arg08","arg09","arg10","arg11","arg12","filter","x","join","navigateToApplicationLink","link","window","location","href","resolveLabel","match","group","String","Math","round","now","max","Row","Col","xs","labelLeft","labelRight","ProgressBar","min","classNames","getSelf","getUserList","usernameFilter","fullNameFilter","emailFilter","permissionFilter","statusFilter","page","perPage","sortField","sortDirection","username","fullName","email","permission","UsersApiService","sectionTitle","intl","useIntl","date","formatTransferLocaleDate","locale","Beltline","BeltlineItem","labelClass","content","contentClass","BeltlineQuantity","quantity","quantityTotal","formatMessage","id","part","total","getPackageRequirements","PackagesApiService","tokenServicePool","tokenPromise","timerHandle","refreshing","autoRefresh","tokenString","sessionStorage","getItem","JSON","parse","resetPool","getOwnPropertyNames","entry","resetTokenPromise","formHeaders","getFormHeaders","qs","stringify","clearToken","removeItem","unsetTimer","setTimer","expirationTimestamp","doAcquire","acquireToken","newToken","Date","isExpiredToken","TOKEN_REFRESH_THRESHOLD_SECONDS","shouldRefreshToken","refreshToken","processToken","expires_in","calculateTokenExpirationTimestamp","setItem","grant_type","refresh_token","dueTime","executeRefresh","formatNumber","num","Number","isInteger","toString","toFixed","formatDurationDescription","unit","adjustDateTimeString","dateTimeString","KiB","MiB","GiB","isNaN","floor","bytecount","gbCount","mbCount","kbCount","milliseconds","minimumUnit","duration","lessThanOne","getDurationDescription","assembleDescription","descriptionParts","asSeconds","asMinutes","asHours","asDays","asMonths","asYears","parts","years","months","days","hours","minutes","seconds","intlLocale","year","month","day","hour","minute","second","toLocaleDateString","time","toLocaleTimeString","getFileArrayFromFileList","items","Array","count","i","dataTransferItemIsFolder","item","webkitGetAsEntry","isDirectory","dataTransfer","files","getAsFile","getFileArrayFromDataTransferItemList","isDev","state","Alert","messageId","FormattedMessage","details","values","messageValues","DebouncedTextInput","timerId","setTimerId","clearTimer","useEffect","onChange","newValue","target","onImmediateChange","onDebouncedChange","debounceTime","debounceChange","placeholder","placeHolder","hashFile","file","onProgress","md","Rusha","createHash","hashNextPart","offset","blob","nextPart","slice","newOffset","fr","FileReader","addEventListener","result","readAsArrayBuffer","update","progress","size","hashParts","digest","getContacts","searchString","onBehalfOf","ContactsApiService","getFolderList","nameFilter","pathFilter","path","getFolderDetails","split","folderId","param","encodeURIComponent","FoldersApiService","initResumableUpload","fileName","fileSize","comments","FormData","append","continueResumableUpload","fileId","contentRange","fileHash","cancelTokenSource","totalSize","startOffset","endOffset","isLastChunk","UploadApiService","validateDownloadHash","hash","downloadId","logId","downloadid","fileid","logid","updateLogos","useCustomNotifBranding","leftLogo","rightLogo","backgroundLogo","resetRightLogo","resetBackgroundLogo","SettingsApiService","pageTitle","FeatureGroupNumericTitle","titleNumber","FeatureGroupIconTitle","iconClassName","FeatureGroupBoxedIconTitle","subtitle","alertBoxVariant","fragile","useField","meta","isInvalid","touched","htmlFor","Feedback","getPublicKeys","orgId","makeUrl","beginKeyRotationEstimate","removeKeyRotationEstimate","getKeyRotationPassphrase","validateKeyRotationPassphrase","passphrase","getKeyRotationReminder","setKeyRotationReminder","reminderDate","beginKeyRotation","schedule","pauseKeyRotation","resumeKeyRotation","setKeyRotationSchedule","getKeyRotationStatus","removeKeyRotationStatus","endpoint","userType","languageCode","getHelpUrl","targetId","generatePublicDownloadLink","publicLinkParams","getPublicLinkInfo","publicLinkId","deletePublicLink","PublicDownloadLinkApiService"],"mappings":"ozBAAA,aAAS,4EAAAA,WACT,aAAS,oFAAAA,WACT,aAAS,wFAAAA,WACT,aAAS,8FAAAA,WACT,aAAS,8FAAAA,WACT,aAAS,+EAAAA,WACT,aAAS,iFAAAA,WACT,aAAS,0FAAAA,WACT,YACA,a,0nBCTA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YAEA,aAAS,+FAAAA,WACT,YACA,a,0LCbA,gBAGA,SAGA,SAgBA,iBAII,WAAYC,EAAiBC,QAAA,IAAAA,MAAA,IAHZ,KAAAD,QAAkB,GAI/BE,KAAKF,QAAUA,EAEXE,KAAKF,QAAQG,SAAS,OACtBD,KAAKF,QAAUE,KAAKF,QAAQI,OAAO,EAAGF,KAAKF,QAAQK,OAAS,IAGhEH,KAAKI,aAAe,EAAAC,aAAaC,YAAYR,EAASC,GAsG9D,OAnGW,YAAAQ,IAAP,SAAcC,EAAaC,EAAiBC,GAA5C,WAWI,OAAOV,KAAKW,oBAVM,SAACC,GACf,IAAMC,GAAU,IAAAC,WAAU,EAAKhB,QAASU,GAClCO,EAAUC,OAAOC,OACnB,IACA,IAAAC,iBAAgBN,GAChBF,GAAe,IAAAS,qBAAsB,IAEzC,OAAO,UAAMZ,IAAIM,EAAS,CAAEE,QAAO,EAAEN,OAAM,IAAIW,MAAK,SAACC,GAAa,OAAAA,EAASC,YAM5E,YAAAC,KAAP,SACIf,EACAc,EACAP,EACAS,GAJJ,WAcI,OAAOxB,KAAKW,oBARM,SAACC,GACf,IAAMC,GAAU,IAAAC,WAAU,EAAKhB,QAASU,GAExC,OADAO,EAAUC,OAAOC,OAAO,IAAI,IAAAC,iBAAgBN,GAAQG,GAC7C,UACFQ,KAAKV,EAASS,EAAMG,EAAsBV,EAASS,IACnDJ,MAAK,SAACC,GAAa,OAAAA,EAASC,YAMlC,YAAAI,IAAP,SACIlB,EACAc,EACAP,EACAS,GAJJ,WAcI,OAAOxB,KAAKW,oBARM,SAACC,GACf,IAAMC,GAAU,IAAAC,WAAU,EAAKhB,QAASU,GAExC,OADAO,EAAUC,OAAOC,OAAO,IAAI,IAAAC,iBAAgBN,GAAQG,GAC7C,UACFW,IAAIb,EAASS,EAAMG,EAAsBV,EAASS,IAClDJ,MAAK,SAACC,GAAa,OAAAA,EAASC,YAMlC,YAAAK,OAAP,SAAiBnB,EAAaO,EAAkBS,GAAhD,WASI,OAAOxB,KAAKW,oBARM,SAACC,GACf,IAAMC,GAAU,IAAAC,WAAU,EAAKhB,QAASU,GAExC,OADAO,EAAUC,OAAOC,OAAO,IAAI,IAAAC,iBAAgBN,GAAQG,GAC7C,UACFY,OAAOd,EAASY,EAAsBV,EAASS,IAC/CJ,MAAK,SAACC,GAAa,OAAAA,EAASC,YAMlC,YAAAM,QAAP,WACI,OAAO5B,KAAKI,aAAayB,eAGtB,YAAAC,iBAAP,WACI9B,KAAKI,aAAa0B,oBAGf,YAAAC,kBAAP,WACI/B,KAAKI,aAAa2B,qBAGd,YAAApB,mBAAR,SAA8BqB,GAA9B,WACUC,EAA4B,SAACC,GAC/B,OAAO,EAAK9B,aAAa+B,SAASD,GAAcd,KAAKY,IAuBzD,OAAOC,GAA0B,GAAOG,OApBpB,SAACC,GACjB,GAAIA,EAAMhB,SAAU,CAChB,GAA8B,MAA1BgB,EAAMhB,SAASiB,OAIf,OAAOL,GAA0B,GAIrC,IAzGIM,EAyGWF,EAAMhB,SAASC,QA7G9C,SAAkBiB,GACd,MAAyB,iBAAXA,EAIIC,CAASD,IAAW,WAAYA,EAyGlC,OAAOE,QAAQC,OAAQL,EAAMhB,SAASC,KAAkBqB,QA1G5E,IAAoBJ,EAgHR,OAAOE,QAAQC,OAAOL,EAAMO,SAAWP,OAKnD,EAjHA,GAmHA,SAASZ,EAAsBV,EAAkBS,GAC7C,IAUAqB,EATA,MAAO,CACH9B,QAAO,EACP+B,mBAOJD,EAV2DrB,aAAO,EAAPA,EAASsB,kBAa9D,SAACC,GACGF,EAAeE,EAAgBC,QAEnC,OAbqC,UAAMC,SAASH,iBACtDI,eAAiB1B,GAAWA,EAAQ0B,gBAAmB,UAAMD,SAASC,eACtEC,YAAc3B,GAAWA,EAAQ2B,aAAgB,UAAMF,SAASE,aAzH3D,EAAAC,c,qgBCtBb,YACA,YACA,YACA,YACA,a,0yBCJA,cAEA,WAEA,OAYA,UANiD,SAAAC,GAC7C,IAAMC,GAAU,aAAW,mBAAoBD,EAAME,WAErD,OAAO,uBAAKA,UAAWD,GAAUD,EAAMG,Y,0tBCb3C,cAoCA,UA1BqF,SAAAH,GACjF,IAAMI,EAAaJ,EAAMK,KACrB,0BAAQC,KAAK,SAASJ,UAAU,iBAAiBK,QAASP,aAAK,EAALA,EAAOQ,QAC7D,qBAAGN,UAAU,4BAEjB,KAEEO,EAAcT,EAAMU,MACtB,0BACIJ,KAAK,SACLJ,UAAU,iBAAgB,cACd,4BACZK,QAASP,aAAK,EAALA,EAAOW,SAEhB,qBAAGT,UAAU,6BAEjB,KAEJ,OACI,uBAAKA,UAAU,kBACVE,EACAK,K,mnBC/Bb,cACA,WAEA,OAEa,EAAAG,oBAA6C,SAAC,G,IAAET,EAAQ,WACjE,OAAO,+BAAKD,UAAU,qBAAqBC,IAW/C,UAJ2D,SAAC,G,IAAED,EAAS,YAAEC,EAAQ,WAC7E,OAAO,+BAAKD,WAAW,aAAW,0BAA2BA,IAAaC,IAI9E,YACA,YACA,a,mtECpBA,cAEa,EAAAU,UAAY,SACrBC,QAAA,IAAAA,OAAA,GAEM,OAAkB,IAAAC,UAASD,GAA1BE,EAAI,KAAEC,EAAO,KAEpB,MAAO,CAACD,EADW,WAAM,OAAAC,GAASD,IACRC,IA+B9B,SAAgBC,EAA2BC,GACvC,IAAMC,EAAM,UAAMC,SAGlB,OAFAD,EAAIE,QAAUH,EAEP,UAAMI,aAAY,WAAM,OAAAH,EAAIE,UAAS,IAjCnC,EAAAE,WAAa,SACtBV,QAAA,IAAAA,OAAA,GAEM,OAAkB,IAAAC,UAASD,GAA1BE,EAAI,KAAEC,EAAO,KAGpB,MAAO,CAACD,EAFQ,WAAM,OAAAC,GAAQ,IACb,WAAM,OAAAA,GAAQ,IACEA,IASrC,2BAAgCQ,GAC5B,IAAIC,EAASD,GAAS,KAEtB,OADAC,EAASA,EAAOC,QAAQ,IAAK,KAAKC,eAYtC,iBAcA,4BACIC,EACAC,GAFJ,WAIUC,EAAc,UAAMV,OAKvB,IAGGW,EAAed,EAAaW,GAC5BI,EAAiBf,EAAaY,GAEpC,OAAO,UAAMP,aACT,W,IAAQ,sD,2EAyBJ,OAvBKQ,EAAYT,QAAQY,UACrBH,EAAYT,QAAQY,QAAU,IAAI9C,SAAQ,SAAC+C,EAAS9C,GAChD0C,EAAYT,QAAQa,QAAUA,EAC9BJ,EAAYT,QAAQjC,OAASA,MAIjC0C,EAAYT,QAAQc,SACpBC,aAAaN,EAAYT,QAAQc,SAGrCL,EAAYT,QAAQc,QAAUE,YAAW,gD,mEAE9BP,EAAYT,QAAQc,Q,iBAEK,O,uBAA5B,KAAAL,EAAYT,SAAQa,QAAQ,GAAMH,IAAc,aAAIO,I,cAApD,WAA4B,W,+BAE5BR,EAAYT,QAAQjC,OAAO,G,2BAEpB0C,EAAYT,QAAQY,Q,8BAEhCD,KAEI,CAAP,EAAOF,EAAYT,QAAQY,iBAE/B,CAACF,EAAcC,KAyBvB,8BAAmCM,GAC/B,IACI,IAAM,EAAOC,SAASC,cAAc,QACpC,EAAKC,OAAS,aACd,EAAKC,OAAS,OACdhF,OAAOiF,KAAKL,GAAMM,SAAQ,SAAAC,GACtB,IAAMC,EAAQP,SAASC,cAAc,SACrCM,EAAMzC,KAAO,SACbyC,EAAMC,KAAOF,EACbC,EAAMtB,MAAQc,EAAKO,IAAY,GAC/B,EAAKG,YAAYF,MAErBP,SAASU,KAAKD,YAAY,GAC1B,EAAKE,SACP,MAAOC,GACLC,MAAM,4BAA8BD,GAExC,OAAO,I,sKCzIX,cAEA,QACA,WA4BA,SAASE,EACLC,EACAvD,EACAwD,GAEA,OACI,wBAAC,EAAAC,OAAM,CACHF,QAASA,EACTrD,WAAW,aAAW,CAAEwD,SAAU1D,EAAM2D,SAAWH,GACnDjD,QAASP,EAAMO,QACfmD,SAAU1D,EAAM2D,QAAO,cACV,8BAAuBJ,IAEnCvD,EAAM4D,OAKnB,UAhCqF,SAAA5D,GACjF,IAAM6D,EAAgB7D,EAAM8D,QAAUR,EAAW,UAAWtD,EAAM8D,SAAW,KACvEC,EAAkB/D,EAAMgE,UAAYV,EAAW,YAAatD,EAAMgE,WAAa,KAC/EC,EAAejE,EAAMkE,OAASZ,EAAW,OAAQtD,EAAMkE,OAAQ,cAAgB,KAErF,OACI,wBAAC,UAAMC,SAAQ,KACVN,EACAE,EACAE,K,oIC1BA,EAAAG,kBAAoB,IACpB,EAAAC,qBAAuB,Q,0yBCDpC,cAGA,YAEA,OAiBA,UAXiE,SAAArE,GAC7D,OACI,gBAAC,UAAO,KACJ,yBAAOE,UAAU,0BACb,4BAAOF,EAAM4D,OACZ5D,EAAMG,a,uxBChBvB,cAEA,SAOa,EAAAmE,cAAuD,SAAC,G,IAAEC,EAAK,QAAEC,EAAW,cAErF,OACI,wBAAC,UAAML,SAAQ,KACX,+BAAKjE,UAAU,gCACf,+BAAKA,UAAU,0BACX,+BAAKA,UAAU,yBACX,+BAAKA,UAAU,yBACX,+BAAKA,UAAU,0BAEnB,+BAAKA,UAAU,sBACX,+BAAKA,UAAU,uBAAuBqE,GACtC,+BAAKrE,UAAU,6BAA6BsE,QAWvD,EAAAC,iBAAmB,SAC5BF,EACAC,GAEM,OAA4B,IAAAhD,aAAW,GAAtCR,EAAI,KAAE0D,EAAO,KAAEC,EAAQ,KACxBC,GAAc,IAAAC,UAChB,WAAM,+BAAC,EAAAP,cAAa,CAACC,MAAOA,EAAOC,YAAaA,MAChD,IAGJ,MAAO,CAACxD,EAAO4D,EAAc,KAAMF,EAASC,IAOnC,EAAAG,iBAAmB,SAC5BP,EACAC,GAEM,OAAoC,IAAAC,kBAAiBF,EAAOC,GAA3DI,EAAW,KAAEG,EAAQ,KAAEC,EAAQ,KAOtC,MAAO,CAACJ,EALa,SAAC1C,GAClB6C,IACA7C,EAAQ+C,QAAQD,O,8gCCzDxB,cACA,SACA,WAEA,OA8EA,UAvEwB,SAAmBhF,GACvC,IAAMkF,GAAuB,IAAAL,UAAQ,WAAM,OAAA7E,EAAMkF,UAAS,CAAClF,EAAMkF,UAE3D,GAAuE,IAAAC,UAAQ,OAC9EnF,GAAK,CACRkF,QAAO,KAFHE,EAAa,gBAAEC,EAAiB,oBAAEC,EAAY,eAAEC,EAAI,OAAEC,EAAU,aAKxE,OACI,qCAAWJ,IAAe,CAAEK,YAAY,IAAIvF,WAAW,aAAG,YAAaF,EAAME,aACzE,uCAAUF,EAAM0F,SAChB,iCAAOxF,UAAU,oBAEboF,EAAaK,KAAI,SAACC,EAAaC,GAAS,OAEpC,kCACQD,EAAYE,sBAAqB,CACrC5F,UAAU,aACV6F,IAAKF,EAAO,gBAGZD,EAAYlI,QAAQiI,KAAI,SAACK,EAAQC,GAAS,OAEtC,kCACQD,EAAOE,iBAAgB,CAC3BC,MAAM,MACNjG,UAAU,iCACV6F,IAAKE,EAAO,iBAGZD,EAAOI,OAAO,mBAOlC,qCAAWf,KAEPE,EAAKI,KAAI,SAACU,EAAKR,G,MAGX,OADAL,EAAWa,GAGP,kCACQA,EAAIC,cAAa,CACrBpG,WAAW,aAAG,iBAAe,KAAI,EAAC,iBAAW2F,EAAO,EAAK,KAAM,EAAI,IACnEE,IAAKF,EAAO,SAGZQ,EAAIE,MAAMZ,KAAI,SAACa,EAAMP,GAEjB,OACI,kCACQO,EAAKC,eAAc,CACvBvG,UAAU,0BACV6F,IAAKE,EAAO,UAGZO,EAAKJ,OAAO,oB,4JCpEpD,qBAA0B3J,EAAiBiK,GAKvC,OAJIA,IAAgBA,EAAYC,WAAW,OACvCD,EAAc,WAAIA,IAGfjK,EAAU,UAAYiK,GAGjC,4BACI,MAAO,CAAE,eAAgB,sCAG7B,2BAAgCnJ,GAC5B,OAAOA,EAAQ,CAAEqJ,cAAe,iBAAUrJ,EAAMsJ,eAAmB,IAIvE,+BACI,MAAO,CAAE,gBAAiB,WAAY,OAAU,WAAY,QAAW,K,iCCL3E,SAASC,EAAa9D,EAAcvB,GAChC,GAAIA,EACA,MAAO,UAAGuB,EAAI,YAAIvB,G,0GAIb,EAAAsF,oBAAsB,SAAC/G,GAChC,IAAMgH,EAAsB,GAe5B,OAbAA,EAAUC,KAAKH,EAAa,QAAS9G,EAAMkH,QAC3CF,EAAUC,KAAKH,EAAa,QAAS9G,EAAMmH,QAC3CH,EAAUC,KAAKH,EAAa,QAAS9G,EAAMoH,QAC3CJ,EAAUC,KAAKH,EAAa,QAAS9G,EAAMqH,QAC3CL,EAAUC,KAAKH,EAAa,QAAS9G,EAAMsH,QAC3CN,EAAUC,KAAKH,EAAa,QAAS9G,EAAMuH,QAC3CP,EAAUC,KAAKH,EAAa,QAAS9G,EAAMwH,QAC3CR,EAAUC,KAAKH,EAAa,QAAS9G,EAAMyH,QAC3CT,EAAUC,KAAKH,EAAa,QAAS9G,EAAM0H,QAC3CV,EAAUC,KAAKH,EAAa,QAAS9G,EAAM2H,QAC3CX,EAAUC,KAAKH,EAAa,QAAS9G,EAAM4H,QAC3CZ,EAAUC,KAAKH,EAAa,QAAS9G,EAAM6H,QAEpC,IAAMb,EAAUc,QAAO,SAAAC,GAAK,OAAAA,KAAGC,KAAK,MAGlC,EAAAC,0BAA4B,SAACjI,GACtC,IAAMkI,GAAO,IAAAnB,qBAAoB/G,GACjCmI,OAAOC,SAASC,KAAOH,I,0yBC1C3B,cAEA,QAEA,YAEA,OA2CA,UAjCyE,SAAAlI,GACrE,IAAMsI,EAAe,SAAC1E,GAClB,OAAOA,EAAMjC,QAAQ,aAAa,SAAC4G,EAAOC,GACtC,OAAQA,GACJ,IAAK,UACD,OAAOC,OAAOC,KAAKC,MAAO3I,EAAM4I,IAAM5I,EAAM6I,IAAO,MAAQ,IAC/D,QACI,MAAO,QAKvB,OACI,gBAAC,UAAO,KACJ,uBAAK3I,UAAU,yBACX,gBAAC,EAAA4I,IAAG,KACA,gBAAC,EAAAC,IAAG,CAACC,GAAI,EAAG9I,UAAU,cACjBoI,EAAatI,EAAMiJ,YAExB,gBAAC,EAAAF,IAAG,CAACC,GAAI,EAAG9I,UAAU,eACjBoI,EAAatI,EAAMkJ,cAG5B,gBAAC,EAAAJ,IAAG,KACA,gBAAC,EAAAC,IAAG,CAACC,GAAI,IACL,gBAAC,EAAAG,YAAW,CAACC,IAAKpJ,EAAMoJ,IAAKP,IAAK7I,EAAM6I,IAAKD,IAAK5I,EAAM4I,Y,sKCzChF,cACA,WASA,UAPmE,SAAC,G,IAAES,EAAU,aAAO,OAEnF,+BAAKnJ,WAAW,aAAG,wBAAyBmJ,IACxC,+BAAKnJ,UAAU,4B,2LCNvB,aAAS,gFAAA1D,Y,ykBCAT,IAMA,cACI,WAAYC,EAAiBC,G,OACzB,YAAMD,EAASC,IAAS,KAoChC,OAtCqC,OAK1B,YAAA4M,QAAP,WACI,OAAO3M,KAAKO,IAAsB,eAG/B,YAAAqM,YAAP,SACIC,EACAC,EACAC,EACAC,EAOAC,EACAC,EACAC,EACAC,EACAC,GAEA,YALA,IAAAH,MAAA,QACA,IAAAC,MAAA,SACA,IAAAC,MAAA,iBACA,IAAAC,MAAA,aAEOrN,KAAKO,IAAiC,QAAS,CAClD+M,SAAUT,EACVU,SAAUT,EACVU,MAAOT,EACPU,WAAYT,EACZ1K,OAAQ2K,EACRC,KAAI,EACJC,QAAO,EACPC,UAAS,EACTC,cAAa,KAGzB,EAtCA,CANA,OAMqCjK,YAAxB,EAAAsK,mB,sKCNb,cACA,WAEA,OAgBA,UAT6E,SAAArK,GACzE,OACI,+BAAKE,WAAW,aAAW,4BAA6BF,EAAME,YAC1D,8BAAIA,UAAU,uCAAuCF,EAAMsK,cAC1DtK,EAAMG,Y,sKCdnB,cACA,QACA,QAcA,UANyE,SAAAH,GACrE,IAAMuK,GAAO,IAAAC,WACPC,GAAO,IAAAC,0BAAyB1K,EAAMyK,KAAMzK,EAAM2K,QAAUJ,EAAKI,QACvE,OAAO3K,EAAME,UAAY,gCAAMA,UAAWF,EAAME,WAAYuK,GAAe,gDAAGA,K,0NCblF,cACA,QACA,WAEA,OAWa,EAAAG,SAA6C,SAAC,G,IAAEzK,EAAQ,WAAED,EAAS,YAC5E,OAAO,+BAAKA,WAAW,aAAW,qBAAsBA,IAAaC,IAU5D,EAAA0K,aAAoD,SAAC,G,IAC9DjH,EAAK,QACLkH,EAAU,aACVC,EAAO,UACPC,EAAY,eACZ9K,EAAS,YAET,OACI,+BAAKA,WAAW,aAAW,kBAAmBA,IAC1C,gCAAMA,WAAW,aAAW,wBAAyB4K,IAAclH,GACnE,gCAAM1D,WAAW,aAAW,0BAA2B8K,IAAgBD,KAatE,EAAAE,iBAAiE,SAAC,G,IAC3ErH,EAAK,QACLkH,EAAU,aACVI,EAAQ,WACRC,EAAa,gBACbH,EAAY,eACZ9K,EAAS,YAEHqK,GAAO,IAAAC,WACPO,EAAUI,EACZZ,EAAKa,cACD,CAAEC,GAAI,wBACN,CACIC,KAAM,gCAAMpL,UAAU,0BAA0BgL,GAChDK,MAAO,gCAAMrL,UAAU,2BAA2BiL,KAI1D,gCAAMjL,UAAU,2BAA2BgL,GAE/C,OACI,wBAAC,EAAAL,aAAY,CACT3K,WAAW,aAAW,oBAAqBA,GAC3C0D,MAAOA,EACPkH,WAAYA,EACZC,QAASA,EACTC,aAAcA,KAK1B,UAAe,EAAAJ,U,4kBC/Ef,IAGA,cACI,WAAYnO,EAAiBC,G,OACzB,YAAMD,EAASC,IAAS,KAMhC,OARwC,OAK7B,YAAA8O,uBAAP,WACI,OAAO7O,KAAKO,IAA8B,0BAElD,EARA,CAHA,OAGwC6C,YAA3B,EAAA0L,sB,g0BCJb,gBACA,YAIA,SAMMC,EAAyD,GAE/D,aAgCI,WAAoBjP,EAAiBC,GARpB,KAAAD,QAAkB,GAClB,KAAAC,SAAmB,GAC5B,KAAAa,MAAe,KACf,KAAAoO,aAA+B,KAC/B,KAAAC,YAAmB,KACnB,KAAAC,YAAsB,EACtB,KAAAC,aAAuB,EAG3BnP,KAAKF,QAAUA,EACfE,KAAKD,SAAWA,EAEhB,IAAMqP,EAAcC,eAAeC,QA1CX,gBA2CpBF,IACApP,KAAKY,MAAQ2O,KAAKC,MAAMJ,IAyIpC,OAzKkB,EAAA9O,YAAd,SAA0BR,EAAiBC,GAKvC,OAJKgP,EAAiBjP,KAClBiP,EAAiBjP,GAAW,IAAIO,EAAaP,EAASC,IAGnDgP,EAAiBjP,IAMd,EAAA2P,UAAd,WAEI,IADA,IACoB,MADAzO,OAAO0O,oBAAoBX,GAC3B,eAAa,CAA5B,IAAMY,EAAK,YACLZ,EAAiBY,KA0BzB,YAAAxN,SAAP,SAAgBD,GAKZ,OAJKA,IAAiBlC,KAAKkP,aAAgBlP,KAAKgP,eAC5ChP,KAAK4P,kBAAkB1N,GAGpBlC,KAAKgP,cAGT,YAAAnN,YAAP,sBACUrB,GAAM,IAAAM,WAAUd,KAAKF,QAAS,gBAC9BwB,EAAO,CAAEV,MAAOZ,KAAKY,MAAMsJ,cAC3B2F,GAAc,IAAAC,kBACpB,OAAO,UACFvO,KAAKf,EAAKuP,EAAGC,UAAU1O,GAAO,CAAEP,QAAS8O,IACzCzO,MAAK,WAAM,SAAK6O,iBAGlB,YAAAA,WAAP,WACIjQ,KAAKY,MAAQ,KACbZ,KAAKgP,aAAe,KACpBK,eAAea,WAxES,iBA2ErB,YAAApO,iBAAP,WACI9B,KAAKmP,aAAc,EACnBnP,KAAKmQ,cAGF,YAAApO,kBAAP,WACQ/B,KAAKmP,cAETnP,KAAKmP,aAAc,EACfnP,KAAKY,OACLZ,KAAKoQ,SAASpQ,KAAKY,MAAMyP,uBAIzB,YAAAT,kBAAR,SAA0B1N,GAA1B,WACIlC,KAAKmQ,aACLnQ,KAAKgP,aAAe,IAAIvM,SAAQ,SAAC+C,EAAS9C,GACtC,IA2FU9B,EA3FJ0P,EAAY,WACd,EAAKC,eAAenP,MAChB,SAACoP,GAAa,OAAAhL,EAAQgL,MACtB,SAACnO,GAAU,OAAAK,EAAOL,QAwFhBzB,EA7EO,EAAKA,SAiFlC,SAAwBA,GACpB,OAAOA,EAAMyP,qBAAuBI,KAAKxE,MAJtByE,CAAe9P,GA7ElBsB,GAoFpB,SAA4BtB,GACxB,OAAOA,EAAMyP,oBAAsBI,KAAKxE,MAAQ0E,IArFhBC,CAAmB,EAAKhQ,OAP5C,EAAKiQ,eAAezP,MAChB,SAACoP,GAAa,OAAAhL,EAAQgL,MACtB,WAAM,OAAAF,QASD,EAAKrB,aACN,EAAKmB,SAAS,EAAKxP,MAAMyP,qBAE7B7K,EAAQ,EAAK5E,QAGjB0P,QAKJ,YAAAQ,aAAR,SAAqBlQ,GAMjB,OALAA,EAAMyP,oBAwEd,SAA2CzP,GACvC,OAAO6P,KAAKxE,MAA2B,IAAnBrL,EAAMmQ,WAzEMC,CAAkCpQ,GAC9DyO,eAAe4B,QA5HS,eA4HwB1B,KAAKS,UAAUpP,IAC/DZ,KAAKoQ,SAASxP,EAAMyP,qBACpBrQ,KAAKY,MAAQA,EACbZ,KAAKkP,YAAa,EACXtO,GAGH,YAAA2P,aAAR,sBACU/P,GAAM,IAAAM,WAAUd,KAAKF,QAAS,SAC9BwB,EAAO,CACT4P,WAAY,UACZnR,SAAUC,KAAKD,UAGb8P,GAAc,IAAAC,kBACpB,OAAO,UACFvO,KAAKf,EAAKuP,EAAGC,UAAU1O,GAAO,CAAEP,QAAS8O,IACzCzO,MAAK,SAACC,GAAa,SAAKyP,aAAazP,EAASC,UAG/C,YAAAuP,aAAR,sBACI7Q,KAAKkP,YAAa,EAClB,IAAM1O,GAAM,IAAAM,WAAUd,KAAKF,QAAS,SAC9BwB,EAAO,CACT4P,WAAY,gBACZC,cAAenR,KAAKY,MAAMuQ,eAExBtB,GAAc,IAAAC,kBACpB,OAAO,UACFvO,KAAKf,EAAKuP,EAAGC,UAAU1O,GAAO,CAAEP,QAAS8O,IACzCzO,MAAK,SAACC,GAAa,SAAKyP,aAAazP,EAASC,UAO/C,YAAA8O,SAAR,SAAiBC,GAAjB,WACI,GAAKrQ,KAAKmP,YAAV,CAEA,IAAMiC,EACFf,EAAsBI,KAAKxE,MAAQ,KACjCoF,EAAiB,WAAM,SAAKzB,mBAAkB,IAEhDwB,EAAU,EACVpR,KAAKiP,YAActJ,WAAW0L,EAAgBD,GAE9CC,MAIA,YAAAlB,WAAR,WAC6B,OAArBnQ,KAAKiP,cACLvJ,aAAa1F,KAAKiP,aAClBjP,KAAKiP,YAAc,OAG/B,EA/KA,GAAa,EAAA5O,gB,mVCZb,cAsBA,SAAgBiR,EAAaC,GACzB,OAAOC,OAAOC,UAAUF,GAAOA,EAAIG,WAAaH,EAAII,QAAQ,GAoChE,SAAgBC,EACZ9M,EACA+M,EACAjE,GAEA,OAAc,IAAV9I,EACO8I,EAAKa,cACR,CAAEC,GAAI,uBACN,CACImD,KAAMjE,EAAKa,cAAc,CACrBC,GAAI,+BAAwBmD,EAAI,eAMzCjE,EAAKa,cACR,CAAEC,GAAI,4BACN,CACI5J,MAAK,EACL+M,KAAMjE,EAAKa,cAAc,CAAEC,GAAI,+BAAwBmD,OAwGnE,SAASC,EAAqB9D,EAAgB+D,GAS1C,OAPAA,EAAiBA,EAAe/M,QAAQ,WAAY,IAGrC,UAAXgJ,IACA+D,EAAiBA,EAAe/M,QAAQ,IAAK,OAG1C+M,EA9LE,EAAAC,IAAM,KACN,EAAAC,IAAM,EAAAD,IAAM,EAAAA,IACZ,EAAAE,IAAM,EAAAF,IAAM,EAAAC,IAOzB,yBAA8BV,GAC1B,OAAIC,OAAOW,MAAMZ,GACNzF,OAAO,GAEXA,OAAOC,KAAKqG,MAAMb,KAO7B,iBAWA,2BAAgCc,EAAmBzE,GAC/C,GAAIyE,GAAa,EAAAH,IAAK,CAClB,IAAMI,EAAUhB,EAAae,EAAY,EAAAH,KACzC,OAAOtE,EAAKa,cAAc,CAAEC,GAAI,yBAA2B,CAAE5J,MAAOwN,IAGxE,GAAID,GAAa,EAAAJ,IAAK,CAClB,IAAMM,EAAUjB,EAAae,EAAY,EAAAJ,KACzC,OAAOrE,EAAKa,cAAc,CAAEC,GAAI,yBAA2B,CAAE5J,MAAOyN,IAGxE,GAAIF,GAAa,EAAAL,IAAK,CAClB,IAAMQ,EAAUlB,EAAae,EAAY,EAAAL,KACzC,OAAOpE,EAAKa,cAAc,CAAEC,GAAI,yBAA2B,CAAE5J,MAAO0N,IAGxE,OAAO5E,EAAKa,cAAc,CAAEC,GAAI,qBAAuB,CAAE5J,MAAOuN,KAUpE,8BAgCA,0BACII,EACAC,EACA9E,GAEA,IAAM+E,EAAW,UAAOA,SAASF,GAEjC,SAASG,EAAYf,GACjB,OAAOjE,EAAKa,cACR,CAAEC,GAAI,+BACN,CAAEmD,KAAMjE,EAAKa,cAAc,CAAEC,GAAI,+BAAwBmD,EAAI,eAIrE,SAASgB,EACL/N,EACA+M,GAEA,OAAO/M,EAAQ,EAAI,GAAK8M,EAA0B9M,EAAO+M,EAAMjE,GAGnE,SAASkF,EAAoBC,GACzB,OAAOA,EAAiB5H,QAAO,SAAArG,GAAS,OAAAA,KAAOuG,KAAK,MAGxD,OAAQqH,GACJ,IAAK,UACD,GAAIC,EAASK,YAAc,EACvB,OAAOJ,EAAY,WAEvB,MACJ,IAAK,UACD,GAAID,EAASM,YAAc,EACvB,OAAOL,EAAY,WAEvB,MACJ,IAAK,QACD,GAAID,EAASO,UAAY,EACrB,OAAON,EAAY,SAEvB,MACJ,IAAK,OACD,GAAID,EAASQ,SAAW,EACpB,OAAOP,EAAY,QAEvB,MACJ,IAAK,SACD,GAAID,EAASS,WAAa,EACtB,OAAOR,EAAY,UAEvB,MACJ,IAAK,QACD,GAAID,EAASU,UAAY,EACrB,OAAOT,EAAY,SAK/B,IAAMU,EAAkB,GAGxB,OADAA,EAAMhJ,KAAKuI,EAAuBF,EAASY,QAAS,UAChC,UAAhBb,EACOI,EAAoBQ,IAG/BA,EAAMhJ,KAAKuI,EAAuBF,EAASa,SAAU,WACjC,WAAhBd,EACOI,EAAoBQ,IAG/BA,EAAMhJ,KAAKuI,EAAuBF,EAASc,OAAQ,SAC/B,SAAhBf,EACOI,EAAoBQ,IAG/BA,EAAMhJ,KAAKuI,EAAuBF,EAASe,QAAS,UAChC,UAAhBhB,EACOI,EAAoBQ,IAG/BA,EAAMhJ,KAAKuI,EAAuBF,EAASgB,UAAW,YAClC,YAAhBjB,GAIJY,EAAMhJ,KAAKuI,EAAuBF,EAASiB,UAAW,YAH3Cd,EAAoBQ,QAsBnC,oCAAyCxF,EAAY+F,GACjD,IAAI7F,EAAS6F,EAEPrS,EAAsC,CACxCsS,KAFY,UAGZC,MAHY,UAIZC,IAJY,UAKZC,KAAiB,UAAXjG,EAAqB,UALf,UAMZkG,OANY,UAOZC,OAPY,WAehB,MALe,UAAXnG,IAEAA,EAAS,SAGN8D,EAAqB9D,EAAQF,EAAKsG,mBAAmBpG,EAAQxM,KAGxE,oCAAyC6S,EAAYR,GACjD,IAAI7F,EAAS6F,EAEPrS,EAAsC,CACxCyS,KAAiB,UAAXjG,EAAqB,UAFf,UAGZkG,OAHY,WAWhB,MALe,UAAXlG,IAEAA,EAAS,SAGN8D,EAAqB9D,EAAQqG,EAAKC,mBAAmBtG,EAAQxM,M,iCCtMxE,SAAgB+S,EAAyBC,GAGrC,IAFA,IAAMzP,EAAS,IAAI0P,MACbC,EAAQF,EAAMrU,OACXwU,EAAI,EAAGA,EAAID,EAAOC,IACvB5P,EAAOuF,KAAKkK,EAAMG,IAGtB,OAAO5P,EAgBX,SAAS6P,EAAyBC,GAC9B,QAAIA,EAAKC,kBACaD,EAAKC,mBACNC,Y,2IAzDzB,8BAAmCC,GAC/B,IAAMR,EAAQQ,EAAaR,MACrBS,EAAQD,EAAaC,MAE3B,GAAIT,GAEA,IADA,IAAME,EAAQF,EAAMrU,OACXwU,EAAI,EAAGA,EAAID,EAAOC,IACvB,GAAIC,EAAyBJ,EAAMG,IAC/B,OAAO,OAOf,GAAqB,IAAjBM,EAAM9U,OACN,OAAO,EAIf,OAAO,GAGX,4CAAiD6U,GAC7C,IAAMR,EAAQQ,EAAaR,MACrBS,EAAQD,EAAaC,MAG3B,OAAOT,EAaX,SAA8CA,GAG1C,IAFA,IAAMzP,EAAS,IAAI0P,MACbC,EAAQF,EAAMrU,OACXwU,EAAI,EAAGA,EAAID,EAAOC,IAAK,CAC5B,IAAME,EAAOL,EAAMG,GACdC,EAAyBC,IAC1B9P,EAAOuF,KAAKuK,EAAKK,aAIzB,OAAOnQ,EAvBQoQ,CAAqCX,GAASD,EAAyBU,IAG1F,8B,uHC3BA,SAAgBG,IACZ,OAHiD,EAErD,UAIA,+BAAoCC,EAAYtP,M,wOCRhD,cACA,QACA,QAEA,OAmBA,UAXuD,SAAA1C,GACnD,OACI,wBAAC,EAAAiS,MAAK,CAAC1O,QAAQ,SAASrD,UAAU,eAC9B,+BAAKA,UAAU,uBACVF,EAAMkS,UAAY,wBAAC,EAAAC,iBAAgB,CAAC9G,GAAIrL,EAAMkS,YAAgBlS,EAAMT,WAEtES,EAAMoS,SAAW,+BAAKlS,UAAU,uBAAuBF,EAAMoS,Y,4LClB5E,cACA,QACA,QAEA,OAwBA,UAf2D,SAAApS,GACvD,OACI,wBAAC,EAAAiS,MAAK,CAAC1O,QAAQ,UAAUrD,UAAU,iBAC/B,+BAAKA,UAAU,yBACVF,EAAMkS,UACH,wBAAC,EAAAC,iBAAgB,CAAC9G,GAAIrL,EAAMkS,UAAWG,OAAQrS,EAAMsS,gBAErDtS,EAAa,WAGlBA,EAAMoS,SAAW,+BAAKlS,UAAU,yBAAyBF,EAAMoS,Y,4LCvB9E,cACA,QAGA,SAkBA,UAZ6E,SAAApS,GAKzE,OACI,wBAAC,EAAAyD,OAAM,CAACF,QAASvD,EAAMuD,QAAShD,QALhB,WAChB4H,OAAOC,SAASC,MAAO,IAAAtB,qBAAoB/G,KAKtCA,EAAMG,Y,svBCjBnB,cACA,OAUa,EAAAoS,mBAAiE,SAAAvS,GACpE,OAAwB,IAAAe,UAAS,MAAhCyR,EAAO,KAAEC,EAAU,KAK1B,SAASC,IACDF,GACAnQ,aAAamQ,GAerB,OAnBA,IAAAG,YAAU,WAAM,OAAAD,KAoBZ,yBACIpS,KAAK,OACLmB,MAAOzB,EAAMyB,MACbmR,SAVR,SAAsBxP,GAClB,IAAMyP,EAAWzP,EAAE0P,OAAOrR,MAC1BzB,EAAM+S,kBAAkBF,GAP5B,SAAwBA,GACpBH,IACAD,EAAWnQ,YAAW,WAAM,OAAAtC,EAAMgT,kBAAkBH,KAAW7S,EAAMiT,eAMrEC,CAAeL,IAQXM,YAAanT,EAAMoT,gB,0tBCpC/B,gBAEA,2BA4BA,OA3BW,YAAAC,SAAP,SAAgBC,EAAYC,GACxB,IAAMC,EAAKC,EAAMC,aAGjB,SAASC,EAAaC,GAClB,IAwBYC,EAxBNC,EAAWR,EAAKS,MAAMH,EAAQA,EAHtB,UAIRI,EAAYJ,EAJJ,SAMd,OAqBYC,EArBUC,EAsBvB,IAAI1U,SAAqB,SAAA+C,GAC5B,IAAM8R,EAAK,IAAIC,WACfD,EAAGE,iBAAiB,QAAQ,WAAM,OAAAhS,EAAQ8R,EAAGG,WAC7CH,EAAGI,kBAAkBR,OAzBe9V,MAAK,SAAAgN,GACjCyI,EAAGc,OAAOvJ,GAEV,IAAMwJ,EAAWP,EAAYV,EAAKkB,KAAOR,EAAYV,EAAKkB,KAE1D,OADAjB,WAAagB,GACNP,KAYf,OAAO,IAAI5U,SAAc,SAAA+C,GAAW,OARpC,SAASsS,EAAUb,EAAgBzR,GAC3ByR,GAAUN,EAAKkB,KACfrS,IAEAwR,EAAaC,GAAQ7V,MAAK,SAAAiW,GAAa,OAAAS,EAAUT,EAAW7R,MAIhCsS,CAAU,EAAGtS,MAAUpE,MAAK,WAAM,OAAAyV,EAAGkB,OAAO,WAExF,EA5BA,G,4qBCLA,IAKA,cACI,WAAYjY,EAAiBC,G,OACzB,YAAMD,EAASC,IAAS,KAoBhC,OAtBwC,OAKpC,YAAAiY,YAAA,SACI9K,EACAC,EACAC,EACAC,EACA4K,EACAC,GAEA,OAAOlY,KAAKO,IAA8B,WAAY,CAClD2M,KAAI,EACJC,QAAO,EACPC,UAAS,EACTC,cAAa,EACb4K,aAAY,EACZC,WAAU,KAGtB,EAtBA,CALA,OAKwC9U,YAA3B,EAAA+U,sB,8pBCLb,IAKA,cACI,WAAYrY,EAAiBC,G,OACzB,YAAMD,EAASC,IAAS,KA0BhC,OA5BuC,OAK5B,YAAAqY,cAAP,SACIC,EACAC,EACApL,EACAC,EACAC,EACAC,GAEA,YAPA,IAAAgL,MAAA,SACA,IAAAC,MAAA,SACA,IAAApL,MAAA,QACA,IAAAC,MAAA,SACA,IAAAC,MAAA,aACA,IAAAC,MAAA,aAEOrN,KAAKO,IAAmC,UAAW,CACtD8F,KAAMgS,EACNE,KAAMD,EACNpL,KAAI,EACJC,QAAO,EACPC,UAAS,EACTC,cAAa,KAId,YAAAmL,iBAAP,SAAwB9J,GACd,MAAmBA,EAAG+J,MAAM,KAA3BC,EAAQ,KAAEH,EAAI,KACfI,EAAQJ,EAAO,aAAeK,mBAAmBL,GAAQ,GAC/D,OAAOvY,KAAKO,IAAuB,kBAAWmY,GAAQ,OAAGC,KAEjE,EA5BA,CALA,OAKuCvV,YAA1B,EAAAyV,qB,m0BCLb,IAOA,cACI,WAAY/Y,EAAiBC,G,OACzB,YAAMD,EAASC,IAAS,KAgEhC,OAlEsC,OAK3B,YAAA+Y,oBAAP,SACIJ,EACAK,EACAC,EACAC,GAEA,IAAM3X,EAAO,IAAI4X,SAKjB,OAJA5X,EAAK6X,OAAO,OAAQJ,GACpBzX,EAAK6X,OAAO,OAAQH,EAAStH,YAC7BpQ,EAAK6X,OAAO,WAAYF,GAEjBjZ,KAAKuB,KACR,kBAAWmX,EAAQ,+BACnBpX,IAID,YAAA8X,wBAAP,SACIV,EACAW,EACA/X,EACAgY,EACAC,EACA3C,EACA4C,GAEA,IAqC6B1U,EArCvB/D,EAIF,CAEA,eAAgB,2BAChB,iBA8ByB+D,EA9BoBwU,EAgC1B,IAApBxU,EAAM2U,UAAkB,YAAc,gBAAS3U,EAAM4U,YAAW,YAAI5U,EAAM6U,UAAS,YAAI7U,EAAM2U,aA9B5FF,IACAxY,EAAQ,eAAiBwY,GAE7B,IAAM/X,EAA6B,CAC/BsB,iBAAkB8T,EAClBzT,YAAaqW,aAAiB,EAAjBA,EAAmB5Y,OAGpC,OAyBR,SAAqB0Y,GACjB,OAAkC,IAA3BA,EAAaG,WAAmBH,EAAaK,YAAcL,EAAaG,UAAY,EA1BnFG,CAAYN,KASZ9X,EAAQ0B,eAAiB,SAACZ,GAAmB,OAAW,MAAXA,IARtCtC,KAAK0B,IACR,kBAAWgX,EAAQ,8CAAsCW,GACzD/X,EACAP,EACAS,IAahB,EAlEA,CAPA,OAOsC4B,YAAzB,EAAAyW,oB,gjBCPb,IAIA,cAEI,WAAY/Z,EAAiBC,G,OACzB,YAAMD,EAASC,IAAS,KAsBhC,OAzBwD,OAM7C,YAAA+Z,qBAAP,SACIC,EACAC,EACAX,EACAY,GAEA,IACIxZ,EAUJ,OALIA,GAFEuZ,aAAU,EAAVA,EAAY7Z,QAEL,CAAE4Z,KAAI,EAAEG,WAAYF,GAGpB,CAAED,KAAI,EAAEI,OAAQd,EAAQe,MAAOH,GAErCja,KAAKO,IAXO,mBAW6BE,IAExD,EAzBA,CAJA,OAIwD2C,Y,4qBCJxD,IAIA,cACI,WAAYtD,EAAiBC,G,OACzB,YAAMD,EAASC,IAAS,KAgChC,OAlCwC,OAKpC,YAAAsa,YAAA,SACIC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAMrZ,EAAO,IAAI4X,SAmBjB,OAlBA5X,EAAK6X,OAAO,yBAA0BmB,EAAyB,IAAM,KAEjEC,GACAjZ,EAAK6X,OAAO,WAAYoB,EAAUA,EAASlU,MAG3CqU,EACApZ,EAAK6X,OAAO,iBAAkB,KACvBqB,GACPlZ,EAAK6X,OAAO,YAAaqB,EAAWA,EAAUnU,MAG9CsU,EACArZ,EAAK6X,OAAO,sBAAuB,KAC5BsB,GACPnZ,EAAK6X,OAAO,iBAAkBsB,EAAgBA,EAAepU,MAG1DrG,KAAKuB,KAAqB,kCAAmCD,IAE5E,EAlCA,CAJA,OAIwC8B,YAA3B,EAAAwX,sB,sKCJb,cACA,WAEA,OAgBA,UATyD,SAAAvX,GACrD,OACI,+BAAKE,WAAW,aAAW,yBAA0BF,EAAME,YACvD,8BAAIA,UAAU,gDAAgDF,EAAMwX,WACnExX,EAAMG,Y,gSCdnB,cACA,WAEA,OAQa,EAAAsX,yBAA6E,SAAC,G,IACvFlT,EAAK,QACLrE,EAAS,YACTwX,EAAW,cAEX,OACI,+BAAKxX,WAAW,aAAW,sBAAuBA,IAC9C,gCAAMA,UAAU,6BAA6BwX,GAC7C,+BAAKxX,UAAU,uBAAuBqE,M,2NCnBlD,cACA,WAQa,EAAAoT,sBAAuE,SAAC,G,IACjFpT,EAAK,QACLrE,EAAS,YACT0X,EAAa,gBAEb,OACI,+BAAK1X,WAAW,aAAW,sBAAuBA,IAC9C,gCAAMA,UAAW0X,EAAa,mBAC9B,+BAAK1X,UAAU,uBAAuBqE,M,0MCjBlD,cACA,WACA,QAEA,OAWa,EAAAsT,2BAAiF,SAAC,G,IAC3FtT,EAAK,QACLuT,EAAQ,WACR5X,EAAS,YACT6X,EAAe,kBACfH,EAAa,gBACblV,EAAM,SAEN,OACI,+BAAKxC,WAAW,aAAW,sBAAuBA,IAC9C,wBAAC,EAAA+R,MAAK,CAAC1O,QAASwU,EAAiB7X,UAAU,2BACvC,+BAAKA,UAAU,qDACX,oCACI,6BAAGA,UAAW0X,EAAa,mBAC1BrT,IACEuT,GACC,gCAAM5X,UAAU,oCAAoC4X,OAI7DpV,GAAU,+BAAKxC,UAAU,8BAA8BwC,O,+vBCnC1E,cACA,SACA,YACA,YACA,YACA,WA8CA,UAhCuF,SAAC,GACpF,IAAApC,EAAI,OACJJ,EAAS,YACT0D,EAAK,QACLoU,EAAO,UACJhY,EAAK,IAL4E,wCAO9E,GAAgB,IAAAiY,UAASjY,GAAxB+C,EAAK,KAAEmV,EAAI,KAEZC,EAAqBD,EAAKlZ,QAAUgZ,GAAWE,EAAKE,SAE1D,OACI,wBAAC,UAAS,CAAClY,WAAW,aAAGA,IACrB,wBAAC,UAAS,CAACmY,QAASrY,EAAMgD,MAAOY,GACjC,qCACQb,EACA/C,EAAK,CACTM,KAAMA,EACN+K,GAAIrL,EAAMgD,KACV9C,WAAW,aAAG,eAAgB,CAC1B,aAAciY,OAGrBA,GACG,wBAAC,UAAYG,SAAQ,eAAc,iBAAUtY,EAAMgD,MAAQ1C,KAAK,WAC3D4X,EAAKlZ,OAAS,O,skBC5CnC,IASA,cACI,WAAYvC,EAAiBC,G,OACzB,YAAMD,EAASC,IAAS,KA4FhC,OA9F4C,OAKjC,YAAA6b,cAAP,SACIC,EACA3O,EACAC,EACAC,EACAC,GAEA,YALA,IAAAH,MAAA,QACA,IAAAC,MAAA,SAEA,IAAAE,MAAA,cAEOrN,KAAKO,IACRP,KAAK8b,QAAQD,EAAO,SACpB,CACI3O,KAAI,EACJC,QAAO,EACPC,UAAS,EACTC,cAAa,IAEjB,IAID,YAAA0O,yBAAP,SAAgCF,GAC5B,OAAO7b,KAAKuB,KACRvB,KAAK8b,QAAQD,EAAO,2BACpB,KAID,YAAAG,0BAAP,SAAiCH,GAC7B,OAAO7b,KAAK2B,OAAa3B,KAAK8b,QAAQD,EAAO,6BAG1C,YAAAI,yBAAP,SAAgCJ,GAC5B,OAAO7b,KAAKO,IACRP,KAAK8b,QAAQD,EAAO,oBACpB,IACA,IAID,YAAAK,8BAAP,SAAqCL,EAAeM,GAChD,OAAOnc,KAAKuB,KAAWvB,KAAK8b,QAAQD,EAAO,oBAAqB,CAAEM,WAAU,KAGzE,YAAAC,uBAAP,SAA8BP,GAC1B,OAAO7b,KAAKO,IAAmBP,KAAK8b,QAAQD,EAAO,kBAAmB,IAAI,IAGvE,YAAAQ,uBAAP,SAA8BR,EAAeS,GACzC,OAAOtc,KAAKuB,KAAoBvB,KAAK8b,QAAQD,EAAO,kBAAmB,CAAES,aAAY,KAGlF,YAAAC,iBAAP,SACIV,EACAM,EACAK,GAEA,OAAOxc,KAAKuB,KAA6BvB,KAAK8b,QAAQD,EAAO,kBAAmB,CAC5EM,WAAU,EACVK,SAAQ,KAIT,YAAAC,iBAAP,SAAwBZ,GACpB,OAAO7b,KAAKuB,KAA6BvB,KAAK8b,QAAQD,EAAO,wBAAyB,KAGnF,YAAAa,kBAAP,SAAyBb,GACrB,OAAO7b,KAAKuB,KAA6BvB,KAAK8b,QAAQD,EAAO,yBAA0B,KAGpF,YAAAc,uBAAP,SACId,EACAW,GAEA,OAAOxc,KAAKuB,KAA6BvB,KAAK8b,QAAQD,EAAO,2BAA4B,CACrFW,SAAQ,KAIT,YAAAI,qBAAP,SAA4Bf,GACxB,OAAO7b,KAAKO,IAA4BP,KAAK8b,QAAQD,EAAO,kBAAmB,IAAI,IAGhF,YAAAgB,wBAAP,SAA+BhB,GAC3B,OAAO7b,KAAK2B,OAAa3B,KAAK8b,QAAQD,EAAO,oBAGzC,YAAAC,QAAR,SAAgBD,EAAeiB,GAC3B,MAAO,wBAAiBjB,GAAK,OAAGiB,IAExC,EA9FA,CATA,OAS4C1Z,Y,+FCR5C,aAEA,aAKI,WAA6B2Z,EAAmCC,GAAnC,KAAAD,WAAmC,KAAAC,eAF/C,KAAAld,QAAU,mCAO/B,OAHW,YAAAmd,WAAP,SAAkBC,GACd,MAAO,UAAGld,KAAKF,QAAO,mBAAW,EAAA4H,qBAAoB,iBAAS1H,KAAK+c,SAAQ,YAAI/c,KAAKgd,aAAY,YAAIE,EAAQ,SAEpH,EAVA,G,mmBCDA,IAGA,cAEI,WAAYpd,EAAiBC,G,OACzB,YAAMD,EAASC,IAAS,KAoBhC,OAvBkD,OAMvC,YAAAod,2BAAP,SACI9D,EACA+D,GAEA,OAAOpd,KAAKuB,KAA8B,gBAAS8X,EAAM,gBAAgB+D,IAGtE,YAAAC,kBAAP,SACIhE,EACAiE,GAEA,OAAOtd,KAAKO,IAAI,gBAAS8Y,EAAM,wBAAgBiE,KAG5C,YAAAC,iBAAP,SAAwBlE,EAAgBiE,GACpC,OAAOtd,KAAK2B,OAAO,gBAAS0X,EAAM,wBAAgBiE,KAE1D,EAvBA,CAHA,OAGkDla,YAArC,EAAAoa","file":"shared.rbundle.js","sourcesContent":["export { default as Control } from \"./Control\";\r\nexport { default as LabelledControl } from \"./LabelledControl\";\r\nexport { default as LabelledProgressBar } from \"./LabelledProgressBar\";\r\nexport { default as CommonModalHeaderControls } from \"./CommonModalHeaderControls\";\r\nexport { default as CommonModalFooterControls, ButtonProps } from \"./CommonModalFooterControls\";\r\nexport { default as ErrorAlert } from \"./ErrorAlert\";\r\nexport { default as WarningAlert } from \"./WarningAlert\";\r\nexport { default as ApplicationLinkButton } from \"./ApplicationLinkButton\";\r\nexport * from \"./DebouncedTextInput\";\r\nexport * from \"./WaitIndicator\";\r\n","export * from \"./ApiService\";\r\nexport * from \"./IApiService\";\r\nexport * from \"./ContactsApiService\";\r\nexport * from \"./IContactsApiService\";\r\nexport * from \"./FoldersApiService\";\r\nexport * from \"./IFoldersApiService\";\r\nexport * from \"./UsersApiService\";\r\nexport * from \"./IUsersApiService\";\r\nexport * from \"./IUploadApiService\";\r\nexport * from \"./UploadApiService\";\r\nexport { default as IDownloadValidateApiService } from \"./IDownloadValidateApiService\";\r\nexport { default as DownloadValidateApiService } from \"./DownloadValidateApiService\";\r\nexport * from \"./ISettingsApiService\";\r\nexport * from \"./SettingsApiService\";\r\n","import axios, { AxiosError, AxiosProgressEvent, AxiosRequestConfig } from \"axios\";\r\n\r\nimport { IApiService, ApiRequestOptions } from \"./IApiService\";\r\nimport { TokenService } from \"./TokenService\";\r\nimport { ITokenService } from \"./ITokenService\";\r\nimport { Token } from \"./Token\";\r\nimport { getApiUrl, getTokenHeaders, getNoCacheHeaders } from \"../commUtil\";\r\n\r\ninterface ApiError {\r\n title: string;\r\n errorCode: number;\r\n detail: string;\r\n}\r\n\r\nfunction isString(object: any): boolean {\r\n return typeof object === \"string\";\r\n}\r\n\r\nfunction isApiError(object: any): object is ApiError {\r\n return object && !isString(object) && \"detail\" in object;\r\n}\r\n\r\nexport class ApiService implements IApiService {\r\n private readonly baseUrl: string = \"\";\r\n private readonly tokenService: ITokenService;\r\n\r\n constructor(baseUrl: string, language: string = \"\") {\r\n this.baseUrl = baseUrl;\r\n\r\n if (this.baseUrl.endsWith(\"/\")) {\r\n this.baseUrl = this.baseUrl.substr(0, this.baseUrl.length - 1);\r\n }\r\n\r\n this.tokenService = TokenService.getInstance(baseUrl, language);\r\n }\r\n\r\n public get(url: string, params?: object, preventCache?: boolean): Promise {\r\n const doRequest = (token: Token): Promise => {\r\n const fullUrl = getApiUrl(this.baseUrl, url);\r\n const headers = Object.assign(\r\n {},\r\n getTokenHeaders(token),\r\n preventCache ? getNoCacheHeaders() : {}\r\n );\r\n return axios.get(fullUrl, { headers, params }).then((response) => response.data as T);\r\n };\r\n\r\n return this.doRequestWithToken(doRequest);\r\n }\r\n\r\n public post(\r\n url: string,\r\n data: any,\r\n headers?: object,\r\n options?: ApiRequestOptions\r\n ): Promise {\r\n const doRequest = (token: Token): Promise => {\r\n const fullUrl = getApiUrl(this.baseUrl, url);\r\n headers = Object.assign({}, getTokenHeaders(token), headers);\r\n return axios\r\n .post(fullUrl, data, getAxiosRequestConfig(headers, options))\r\n .then((response) => response.data as T);\r\n };\r\n\r\n return this.doRequestWithToken(doRequest);\r\n }\r\n\r\n public put(\r\n url: string,\r\n data: any,\r\n headers?: object,\r\n options?: ApiRequestOptions\r\n ): Promise {\r\n const doRequest = (token: Token): Promise => {\r\n const fullUrl = getApiUrl(this.baseUrl, url);\r\n headers = Object.assign({}, getTokenHeaders(token), headers);\r\n return axios\r\n .put(fullUrl, data, getAxiosRequestConfig(headers, options))\r\n .then((response) => response.data as T);\r\n };\r\n\r\n return this.doRequestWithToken(doRequest);\r\n }\r\n\r\n public delete(url: string, headers?: object, options?: ApiRequestOptions): Promise {\r\n const doRequest = (token: Token): Promise => {\r\n const fullUrl = getApiUrl(this.baseUrl, url);\r\n headers = Object.assign({}, getTokenHeaders(token), headers);\r\n return axios\r\n .delete(fullUrl, getAxiosRequestConfig(headers, options))\r\n .then((response) => response.data as T);\r\n };\r\n\r\n return this.doRequestWithToken(doRequest);\r\n }\r\n\r\n public signOut(): Promise {\r\n return this.tokenService.revokeToken();\r\n }\r\n\r\n public stopTokenRefresh(): void {\r\n this.tokenService.stopTokenRefresh();\r\n }\r\n\r\n public startTokenRefresh(): void {\r\n this.tokenService.startTokenRefresh();\r\n }\r\n\r\n private doRequestWithToken(requestFn: (token: Token) => Promise): Promise {\r\n const getTokenAndExecuteRequest = (forceRefresh: boolean): Promise => {\r\n return this.tokenService.getToken(forceRefresh).then(requestFn);\r\n };\r\n\r\n const handleError = (error: AxiosError): Promise => {\r\n if (error.response) {\r\n if (error.response.status === 401) {\r\n // This error typically means that our current token, while unexpired, has\r\n // become invalid, maybe because the server was restarted. Try refreshing\r\n // the token. If that doesn't work, a new token will be requested.\r\n return getTokenAndExecuteRequest(true);\r\n }\r\n\r\n // If we don't recognize the error, pass it on for higher level handling.\r\n if (isApiError(error.response.data)) {\r\n return Promise.reject((error.response.data as ApiError).detail);\r\n }\r\n }\r\n\r\n // If we can't get any specific detail from the error, reject with the error message,\r\n // or failing that, the error itself.\r\n return Promise.reject(error.message || error);\r\n };\r\n\r\n return getTokenAndExecuteRequest(false).catch(handleError);\r\n }\r\n}\r\n\r\nfunction getAxiosRequestConfig(headers?: object, options?: ApiRequestOptions): AxiosRequestConfig {\r\n const axiosUploadHander = createAxiosUploadProgressHandler(options?.onUploadProgress);\r\n return {\r\n headers,\r\n onUploadProgress: axiosUploadHander || axios.defaults.onUploadProgress,\r\n validateStatus: (options && options.validateStatus) || axios.defaults.validateStatus,\r\n cancelToken: (options && options.cancelToken) || axios.defaults.cancelToken,\r\n };\r\n}\r\n\r\nfunction createAxiosUploadProgressHandler(\r\n genericHandler: (e: ProgressEvent) => void\r\n): (progressHandler: AxiosProgressEvent) => void {\r\n return genericHandler\r\n ? (progressHandler: AxiosProgressEvent) => {\r\n genericHandler(progressHandler.event);\r\n }\r\n : null;\r\n}\r\n","export * from \"./formattingUtils\";\r\nexport * from \"./fileUtils\";\r\nexport * from \"./componentUtils\";\r\nexport * from \"./debugUtils\";\r\nexport * from \"./applicationUtils\";\r\n","import * as React from \"react\";\r\nimport { FunctionComponent } from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nimport \"./Control.scss\";\r\n\r\ninterface ControlProps {\r\n className?: string;\r\n}\r\n\r\nconst Control: FunctionComponent = props => {\r\n const classes = classNames(\"mi-react-control\", props.className);\r\n\r\n return
{props.children}
;\r\n};\r\n\r\nexport default Control;\r\n","import * as React from \"react\";\r\nimport { FunctionComponent } from \"react\";\r\n\r\ninterface CommonModalHeaderControlsProps {\r\n close?: boolean;\r\n onClose?: () => void;\r\n help?: boolean;\r\n onHelp?: () => void;\r\n}\r\n\r\nconst CommonModalHeaderControls: FunctionComponent = props => {\r\n const helpButton = props.help ? (\r\n \r\n ) : null;\r\n\r\n const closeButton = props.close ? (\r\n \r\n \r\n \r\n ) : null;\r\n\r\n return (\r\n
\r\n {helpButton}\r\n {closeButton}\r\n
\r\n );\r\n};\r\n\r\nexport default CommonModalHeaderControls;\r\n","import React, { FunctionComponent, ReactElement } from \"react\";\r\nimport classnames from \"classnames\";\r\n\r\nimport \"./FeatureGroup.scss\";\r\n\r\nexport const FeatureGroupContent: FunctionComponent<{}> = ({ children }) => {\r\n return
{children}
;\r\n};\r\n\r\nexport interface FeatureGroupProps {\r\n className?: string;\r\n}\r\n\r\nconst FeatureGroup: FunctionComponent = ({ className, children }) => {\r\n return
{children}
;\r\n};\r\n\r\nexport default FeatureGroup;\r\nexport * from \"./FeatureGroupNumericTitle\";\r\nexport * from \"./FeatureGroupIconTitle\";\r\nexport * from \"./FeatureGroupBoxedIconTitle\";\r\n","import React, { useState } from \"react\";\r\n\r\nexport const useToggle = (\r\n initial: boolean = false\r\n): [boolean, () => void, React.Dispatch>] => {\r\n const [flag, setFlag] = useState(initial);\r\n const toggleFlag = () => setFlag(!flag);\r\n return [flag, toggleFlag, setFlag];\r\n};\r\nexport const useBoolean = (\r\n initial: boolean = false\r\n): [boolean, () => void, () => void, React.Dispatch>] => {\r\n const [flag, setFlag] = useState(initial);\r\n const setTrue = () => setFlag(true);\r\n const setFalse = () => setFlag(false);\r\n return [flag, setTrue, setFalse, setFlag];\r\n};\r\n\r\n/**\r\n * MOVEit Transfer uses underscores to separate sublanguages,\r\n * whereas react-intl requires dashes. Also, all language\r\n * codes should be lowercase.\r\n * @param value - the locale value given by the Transfer WebApp\r\n */\r\nexport function getLanguageCode(value: string): string {\r\n let output = value || \"en\";\r\n output = output.replace(\"_\", \"-\").toLowerCase();\r\n return output;\r\n}\r\n\r\n/**\r\n * A utility that returns a getter function for the latest value/ref to the given object (shallow comparison).\r\n * (Useful such as when an argument is a prop value and you want an async function to always use the most up-to-date value regardless of invocation time.)\r\n * @param obj the object whose latest reference you always want returned by the returned getter function\r\n * @returns a getter function that always returns the latest value/ref to the given object.\r\n *\r\n * Source: https://github.com/tannerlinsley/react-table/blob/aa2835766a7a34f70cd6b579628e4f7e820970ab/src/publicUtils.js#L140 (MIT License)\r\n */\r\nexport function useGetLatest(obj: T) {\r\n const ref = React.useRef();\r\n ref.current = obj;\r\n\r\n return React.useCallback(() => ref.current, []);\r\n}\r\n\r\n/**\r\n * Debounces a given function for a given timespan.\r\n * @param defaultFn\r\n * @param defaultWait\r\n *\r\n * Source: https://github.com/tannerlinsley/react-table/blob/aa2835766a7a34f70cd6b579628e4f7e820970ab/src/publicUtils.js#L163 (MIT License)\r\n */\r\nexport function useAsyncDebounce any>(\r\n defaultFn: T,\r\n defaultWait: number\r\n): T {\r\n const debounceRef = React.useRef<{\r\n promise?: Promise;\r\n resolve?: (value: T | PromiseLike) => void;\r\n reject?: (reason?: any) => void;\r\n timeout?: NodeJS.Timeout;\r\n }>({});\r\n\r\n // the given args could be props, which change, so we want to always use latest definitions.\r\n const getDefaultFn = useGetLatest(defaultFn);\r\n const getDefaultWait = useGetLatest(defaultWait);\r\n\r\n return React.useCallback(\r\n (async (...args) => {\r\n // make a promise\r\n if (!debounceRef.current.promise) {\r\n debounceRef.current.promise = new Promise((resolve, reject) => {\r\n debounceRef.current.resolve = resolve;\r\n debounceRef.current.reject = reject;\r\n });\r\n }\r\n\r\n if (debounceRef.current.timeout) {\r\n clearTimeout(debounceRef.current.timeout);\r\n }\r\n\r\n debounceRef.current.timeout = setTimeout(async () => {\r\n // Executing a debounced call--don't let it be canceled.\r\n delete debounceRef.current.timeout;\r\n try {\r\n debounceRef.current.resolve(await getDefaultFn()(...args));\r\n } catch (err) {\r\n debounceRef.current.reject(err);\r\n } finally {\r\n delete debounceRef.current.promise;\r\n }\r\n }, getDefaultWait());\r\n\r\n return debounceRef.current.promise;\r\n }) as T,\r\n [getDefaultFn, getDefaultWait]\r\n );\r\n}\r\n\r\nexport interface ISILTransactionArgs {\r\n [key: string]: string; // alows object to be indexed\r\n transaction: string; // required\r\n csrfToken: string; // required\r\n arg01?: string;\r\n arg02?: string;\r\n arg03?: string;\r\n arg04?: string;\r\n arg05?: string;\r\n arg06?: string;\r\n arg07?: string;\r\n arg08?: string;\r\n arg09?: string;\r\n arg10?: string;\r\n arg11?: string;\r\n arg12?: string;\r\n}\r\n// Taken and typified from post.jsskel :(\r\n// This function is called in the onclick handler of an anchor element that we\r\n// want to change to a POST dynamically.\r\n// Call like example: return postTransactionUrl({transaction: \"becoeinstadmin\", csfrToken: \"abcd123\", arg01: \"something\"})\r\nexport function postTransactionUrl(args: ISILTransactionArgs) {\r\n try {\r\n const form = document.createElement(\"form\") as HTMLFormElement;\r\n form.action = \"human.aspx\";\r\n form.method = \"post\";\r\n Object.keys(args).forEach(argName => {\r\n const field = document.createElement(\"input\") as HTMLInputElement;\r\n field.type = \"hidden\";\r\n field.name = argName;\r\n field.value = args[argName] || \"\";\r\n form.appendChild(field);\r\n });\r\n document.body.appendChild(form);\r\n form.submit();\r\n } catch (e) {\r\n alert(\"Post Transaction Failed: \" + e);\r\n }\r\n return false;\r\n}\r\n","import React from \"react\";\r\nimport { FunctionComponent } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport classNames from \"classnames\";\r\n\r\nexport interface ButtonProps {\r\n label: string | JSX.Element;\r\n onClick: () => void;\r\n disable?: boolean;\r\n}\r\n\r\ninterface CommonModalFooterControlsProps {\r\n primary?: ButtonProps;\r\n secondary?: ButtonProps;\r\n cancel?: ButtonProps;\r\n}\r\n\r\nconst CommonModalFooterControls: FunctionComponent = props => {\r\n const primaryButton = props.primary ? makeButton(\"primary\", props.primary) : null;\r\n const secondaryButton = props.secondary ? makeButton(\"secondary\", props.secondary) : null;\r\n const cancelButton = props.cancel ? makeButton(\"link\", props.cancel, \"btn-cancel\") : null;\r\n\r\n return (\r\n \r\n {primaryButton}\r\n {secondaryButton}\r\n {cancelButton}\r\n \r\n );\r\n};\r\n\r\nfunction makeButton(\r\n variant: \"primary\" | \"secondary\" | \"link\",\r\n props: ButtonProps,\r\n additionalClasses?: string\r\n): JSX.Element {\r\n return (\r\n \r\n {props.label}\r\n \r\n );\r\n}\r\n\r\nexport default CommonModalFooterControls;\r\n","export const DEBOUNCE_INTERVAL = 500; // milliseconds\r\nexport const TRANSFER_DOC_VERSION = \"2022\"; // if changing this value be sure to change it in /skels/utility.xslskel and in mi-dmz/libs/MOVEit.DMZ.Core/Constants.cs as well\r\n","import * as React from \"react\";\r\nimport { FunctionComponent } from \"react\";\r\n\r\nimport Control from \"./Control\";\r\n\r\nimport \"./LabelledControl.scss\";\r\n\r\ninterface LabelledControlProps {\r\n label: string;\r\n}\r\n\r\nconst LabelledControl: FunctionComponent = props => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default LabelledControl;\r\n","import React, { FunctionComponent, ReactElement, useMemo } from \"react\";\r\n\r\nimport { useBoolean } from \"../utils/componentUtils\";\r\n\r\nexport interface WaitIndicatorProps {\r\n title: string;\r\n description: string;\r\n}\r\n\r\nexport const WaitIndicator: FunctionComponent = ({ title, description }) => {\r\n // NOTE: Styles for the classes used by this component are defined in commons-ui-styles\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{title}
\r\n
{description}
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Creates a wait element with methods to enable and disable it.\r\n */\r\nexport const useWaitIndicator = (\r\n title: string,\r\n description: string\r\n): [ReactElement, () => void, () => void] => {\r\n const [flag, setTrue, setFalse] = useBoolean(false);\r\n const waitElement = useMemo(\r\n () => ,\r\n []\r\n );\r\n\r\n return [flag ? waitElement : null, setTrue, setFalse];\r\n};\r\n\r\n/**\r\n * Creates a wait element with a method to display it while a provided\r\n * promise is active, and hide it when the promise settles.\r\n */\r\nexport const useWaitOnPromise = (\r\n title: string,\r\n description: string\r\n): [ReactElement, (promise: Promise) => void] => {\r\n const [waitElement, showWait, hideWait] = useWaitIndicator(title, description);\r\n\r\n const waitFunction = (promise: Promise): void => {\r\n showWait();\r\n promise.finally(hideWait);\r\n };\r\n\r\n return [waitElement, waitFunction];\r\n};\r\n","import React, { useMemo } from \"react\";\r\nimport { useTable, Column, UseTableOptions } from \"react-table\";\r\nimport cx from \"classnames\";\r\n\r\nimport \"./MITransferTable.scss\";\r\n\r\nexport interface MITransferTableProps extends UseTableOptions {\r\n caption?: string;\r\n className?: string;\r\n}\r\n\r\nconst MITransferTable = (props: MITransferTableProps) => {\r\n const columns: Column[] = useMemo(() => props.columns, [props.columns]);\r\n\r\n const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } = useTable({\r\n ...props,\r\n columns,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n {// Loop over the header rows\r\n headerGroups.map((headerGroup, ind1) => (\r\n // Apply the header row props\r\n \r\n {// Loop over the headers in each row\r\n headerGroup.headers.map((column, ind2) => (\r\n // Apply the header cell props\r\n \r\n {// Render the header\r\n column.render(\"Header\")}\r\n \r\n ))}\r\n \r\n ))}\r\n \r\n {/* Apply the table body props */}\r\n \r\n {// Loop over the table rows\r\n rows.map((row, ind1) => {\r\n // Prepare the row for display\r\n prepareRow(row);\r\n return (\r\n // Apply the row props\r\n \r\n {// Loop over the rows cells\r\n row.cells.map((cell, ind2) => {\r\n // Apply the cell props\r\n return (\r\n \r\n {// Render the cell contents\r\n cell.render(\"Cell\")}\r\n \r\n );\r\n })}\r\n \r\n );\r\n })}\r\n \r\n
{props.caption}
\r\n );\r\n};\r\n\r\nexport default MITransferTable;\r\n","import { Token } from \"./services/Token\";\r\n\r\nexport function getApiUrl(baseUrl: string, relativeUrl: string): string {\r\n if (relativeUrl && !relativeUrl.startsWith(\"/\")) {\r\n relativeUrl = `/${relativeUrl}`;\r\n }\r\n\r\n return baseUrl + \"/api/v1\" + relativeUrl;\r\n}\r\n\r\nexport function getFormHeaders(): object {\r\n return { \"Content-Type\": \"application/x-www-form-urlencoded\" };\r\n}\r\n\r\nexport function getTokenHeaders(token: Token): object {\r\n return token ? { Authorization: `Bearer ${token.access_token}` } : {};\r\n}\r\n\r\n// Necessary to stop IE from caching repeated GET requests of non-static content\r\nexport function getNoCacheHeaders(): object {\r\n return { \"Cache-Control\": \"no-cache\", \"Pragma\": \"no-cache\", \"Expires\": 0 };\r\n}\r\n","export interface ApplicationLinkProps {\r\n arg01?: string;\r\n arg02?: string;\r\n arg03?: string;\r\n arg04?: string;\r\n arg05?: string;\r\n arg06?: string;\r\n arg07?: string;\r\n arg08?: string;\r\n arg09?: string;\r\n arg10?: string;\r\n arg11?: string;\r\n arg12?: string;\r\n}\r\n\r\nfunction makeLinkPart(name: string, value?: string): string {\r\n if (value) {\r\n return `${name}=${value}`;\r\n }\r\n}\r\n\r\nexport const makeApplicationLink = (props: ApplicationLinkProps): string => {\r\n const linkParts: string[] = [];\r\n\r\n linkParts.push(makeLinkPart(\"arg01\", props.arg01));\r\n linkParts.push(makeLinkPart(\"arg02\", props.arg02));\r\n linkParts.push(makeLinkPart(\"arg03\", props.arg03));\r\n linkParts.push(makeLinkPart(\"arg04\", props.arg04));\r\n linkParts.push(makeLinkPart(\"arg05\", props.arg05));\r\n linkParts.push(makeLinkPart(\"arg06\", props.arg06));\r\n linkParts.push(makeLinkPart(\"arg07\", props.arg07));\r\n linkParts.push(makeLinkPart(\"arg08\", props.arg08));\r\n linkParts.push(makeLinkPart(\"arg09\", props.arg09));\r\n linkParts.push(makeLinkPart(\"arg10\", props.arg10));\r\n linkParts.push(makeLinkPart(\"arg11\", props.arg11));\r\n linkParts.push(makeLinkPart(\"arg12\", props.arg12));\r\n\r\n return \"?\" + linkParts.filter(x => x).join(\"&\");\r\n};\r\n\r\nexport const navigateToApplicationLink = (props: ApplicationLinkProps): void => {\r\n const link = makeApplicationLink(props);\r\n window.location.href = link;\r\n};\r\n","import * as React from \"react\";\r\nimport { FunctionComponent } from \"react\";\r\nimport { ProgressBar, Row, Col } from \"react-bootstrap\";\r\n\r\nimport Control from \"./Control\";\r\n\r\nimport \"./LabelledProgressBar.scss\";\r\n\r\ninterface LabelledProgressBarProps {\r\n min: number;\r\n max: number;\r\n now: number;\r\n labelLeft: string;\r\n labelRight: string;\r\n}\r\n\r\nconst LabelledProgressBar: FunctionComponent = props => {\r\n const resolveLabel = (label: string): string => {\r\n return label.replace(/\\{(\\w+)\\}/, (match, group): string => {\r\n switch (group) {\r\n case \"percent\":\r\n return String(Math.round((props.now / props.max) * 100)) + \"%\";\r\n default:\r\n return \"\";\r\n }\r\n });\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n {resolveLabel(props.labelLeft)}\r\n \r\n \r\n {resolveLabel(props.labelRight)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default LabelledProgressBar;\r\n","import React, { FunctionComponent } from \"react\";\r\nimport cn from \"classnames\";\r\n\r\nconst LoadingSpinner: FunctionComponent<{ classNames?: string }> = ({ classNames }) => (\r\n // NOTE: Styles for the classes used by this component are defined in commons-ui-styles\r\n
\r\n
\r\n
\r\n);\r\n\r\nexport default LoadingSpinner;\r\n","export { default as HashService } from \"./HashService\";\r\nexport { default as IHashService } from \"./IHashService\";\r\n","import { ApiService } from \".\";\r\nimport { IUsersApiService } from \"./IUsersApiService\";\r\nimport { UserDetailsModel } from \"../models/UserDetailsModel\";\r\nimport { SimpleUserModel } from \"../models/SimpleUserModel\";\r\nimport { PagedModel } from \"../models/PagedModel\";\r\n\r\nexport class UsersApiService extends ApiService implements IUsersApiService {\r\n constructor(baseUrl: string, language?: string) {\r\n super(baseUrl, language);\r\n }\r\n\r\n public getSelf(): Promise {\r\n return this.get(\"users/self\");\r\n }\r\n\r\n public getUserList(\r\n usernameFilter?: string,\r\n fullNameFilter?: string,\r\n emailFilter?: string,\r\n permissionFilter?:\r\n | \"EndUsers\"\r\n | \"Administrators\"\r\n | \"FileAdmins\"\r\n | \"GroupAdmins\"\r\n | \"TemporaryUsers\"\r\n | \"SysAdmins\",\r\n statusFilter?: \"ActiveUsers\" | \"InactiveUsers\" | \"NeverSignedOnUsers\" | \"TemplateUsers\",\r\n page: number = 1,\r\n perPage: number = 25,\r\n sortField: \"username\" | \"fullname\" | \"email\" | \"lastLoginStamp\" = \"username\",\r\n sortDirection: \"ascending\" | \"descending\" = \"ascending\"\r\n ): Promise> {\r\n return this.get>(\"users\", {\r\n username: usernameFilter,\r\n fullName: fullNameFilter,\r\n email: emailFilter,\r\n permission: permissionFilter,\r\n status: statusFilter,\r\n page,\r\n perPage,\r\n sortField,\r\n sortDirection,\r\n });\r\n }\r\n}\r\n","import React, { FunctionComponent } from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nimport \"./ContentSectionWrapper.scss\";\r\n\r\ninterface ContentSectionWrapperProps {\r\n sectionTitle: string;\r\n className?: string;\r\n}\r\n\r\nconst ContentSectionWrapper: FunctionComponent = props => {\r\n return (\r\n
\r\n

{props.sectionTitle}

\r\n {props.children}\r\n
\r\n );\r\n};\r\n\r\nexport default ContentSectionWrapper;\r\n","import React, { FunctionComponent } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport { formatTransferLocaleDate } from \"../utils\";\r\n\r\ninterface FormattedLocaleDateProps {\r\n date: Date;\r\n locale?: string;\r\n className?: string; // will use a span if present\r\n}\r\n\r\nconst FormattedLocaleDate: FunctionComponent = props => {\r\n const intl = useIntl();\r\n const date = formatTransferLocaleDate(props.date, props.locale || intl.locale);\r\n return props.className ? {date} : <>{date};\r\n};\r\n\r\nexport default FormattedLocaleDate;\r\n","import React, { FunctionComponent, ReactElement } from \"react\";\r\nimport { useIntl } from \"react-intl\";\r\nimport classNames from \"classnames\";\r\n\r\nimport \"./Beltline.scss\";\r\n\r\nexport interface BeltlineProps {\r\n children: ReactElement[];\r\n className?: string;\r\n}\r\n\r\n/**\r\n * A heavily-styled family of flex components for displaying a wrapping row of related data fields and/or actions in a \"beltline\"\r\n * @param props\r\n */\r\nexport const Beltline: FunctionComponent = ({ children, className }) => {\r\n return
{children}
;\r\n};\r\n\r\nexport interface BeltineItemProps {\r\n label: {};\r\n content: {};\r\n labelClass?: string;\r\n contentClass?: string;\r\n className?: string;\r\n}\r\nexport const BeltlineItem: FunctionComponent = ({\r\n label,\r\n labelClass,\r\n content,\r\n contentClass,\r\n className,\r\n}) => {\r\n return (\r\n
\r\n {label}\r\n {content}\r\n
\r\n );\r\n};\r\n\r\nexport interface BeltlineItemQuantityProps {\r\n label: {};\r\n quantity: number | string | boolean | ReactElement;\r\n quantityTotal?: number | string | boolean | ReactElement;\r\n labelClass?: string;\r\n contentClass?: string;\r\n className?: string;\r\n}\r\nexport const BeltlineQuantity: FunctionComponent = ({\r\n label,\r\n labelClass,\r\n quantity,\r\n quantityTotal,\r\n contentClass,\r\n className,\r\n}) => {\r\n const intl = useIntl();\r\n const content = quantityTotal ? (\r\n intl.formatMessage(\r\n { id: \"common.unit.fraction\" },\r\n {\r\n part: {quantity},\r\n total: {quantityTotal},\r\n }\r\n )\r\n ) : (\r\n {quantity}\r\n );\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default Beltline;\r\n","import { PackageRequirementsModel } from \"../models/PackageRequirementsModel\";\r\nimport { ApiService } from \"./ApiService\";\r\nimport { IPackagesApiService } from \"./IPackagesApiService\";\r\n\r\nexport class PackagesApiService extends ApiService implements IPackagesApiService {\r\n constructor(baseUrl: string, language?: string) {\r\n super(baseUrl, language);\r\n }\r\n\r\n public getPackageRequirements(): Promise {\r\n return this.get(\"packages/requirements\");\r\n }\r\n}\r\n","import axios from \"axios\";\r\nimport * as qs from \"qs\";\r\n\r\nimport { Token } from \"./Token\";\r\nimport { ITokenService } from \"./ITokenService\";\r\nimport { getApiUrl, getFormHeaders } from \"../commUtil\";\r\n\r\nconst SESSIONSTORAGEKEY_TOKEN = \"moveit.token\";\r\n/** Number of seconds prior to token expiration within which we should refresh the token. */\r\nconst TOKEN_REFRESH_THRESHOLD_SECONDS = 60;\r\n\r\nconst tokenServicePool: { [baseUrl: string]: ITokenService } = {};\r\n\r\nexport class TokenService implements ITokenService {\r\n /**\r\n * Returns an ITokenService instance for the given base URL.\r\n * Uses an instance pool such that two calls with the\r\n * same base URL argument will return the same instance.\r\n */\r\n public static getInstance(baseUrl: string, language: string) {\r\n if (!tokenServicePool[baseUrl]) {\r\n tokenServicePool[baseUrl] = new TokenService(baseUrl, language);\r\n }\r\n\r\n return tokenServicePool[baseUrl];\r\n }\r\n\r\n /**\r\n * Clears all entries from the instance pool.\r\n */\r\n public static resetPool() {\r\n const poolEntries = Object.getOwnPropertyNames(tokenServicePool);\r\n for (const entry of poolEntries) {\r\n delete tokenServicePool[entry];\r\n }\r\n }\r\n\r\n private readonly baseUrl: string = \"\";\r\n private readonly language: string = \"\";\r\n private token: Token = null;\r\n private tokenPromise: Promise = null;\r\n private timerHandle: any = null;\r\n private refreshing: boolean = false;\r\n private autoRefresh: boolean = false;\r\n\r\n private constructor(baseUrl: string, language: string) {\r\n this.baseUrl = baseUrl;\r\n this.language = language;\r\n\r\n const tokenString = sessionStorage.getItem(SESSIONSTORAGEKEY_TOKEN);\r\n if (tokenString) {\r\n this.token = JSON.parse(tokenString) as Token;\r\n // Do not start token reset timer until a token is actually requested\r\n //if (isValidToken(this.token)) {\r\n // this.setTimer(this.token.expirationTimestamp);\r\n //}\r\n }\r\n }\r\n\r\n public getToken(forceRefresh?: boolean): Promise {\r\n if ((forceRefresh && !this.refreshing) || !this.tokenPromise) {\r\n this.resetTokenPromise(forceRefresh);\r\n }\r\n\r\n return this.tokenPromise;\r\n }\r\n\r\n public revokeToken(): Promise {\r\n const url = getApiUrl(this.baseUrl, \"token/revoke\");\r\n const data = { token: this.token.access_token };\r\n const formHeaders = getFormHeaders();\r\n return axios\r\n .post(url, qs.stringify(data), { headers: formHeaders })\r\n .then(() => this.clearToken());\r\n }\r\n\r\n public clearToken(): void {\r\n this.token = null;\r\n this.tokenPromise = null;\r\n sessionStorage.removeItem(SESSIONSTORAGEKEY_TOKEN);\r\n }\r\n\r\n public stopTokenRefresh(): void {\r\n this.autoRefresh = false;\r\n this.unsetTimer();\r\n }\r\n\r\n public startTokenRefresh(): void {\r\n if (this.autoRefresh) return; // Automatic token refresh is already enabled\r\n\r\n this.autoRefresh = true;\r\n if (this.token) {\r\n this.setTimer(this.token.expirationTimestamp);\r\n }\r\n }\r\n\r\n private resetTokenPromise(forceRefresh: boolean): void {\r\n this.unsetTimer();\r\n this.tokenPromise = new Promise((resolve, reject) => {\r\n const doAcquire = (): void => {\r\n this.acquireToken().then(\r\n (newToken) => resolve(newToken),\r\n (error) => reject(error)\r\n );\r\n };\r\n\r\n const doRefresh = (): void => {\r\n this.refreshToken().then(\r\n (newToken) => resolve(newToken),\r\n () => doAcquire()\r\n );\r\n };\r\n\r\n if (isValidToken(this.token)) {\r\n if (forceRefresh || shouldRefreshToken(this.token)) {\r\n doRefresh();\r\n } else {\r\n // Set refresh timer if not already set\r\n if (!this.timerHandle) {\r\n this.setTimer(this.token.expirationTimestamp);\r\n }\r\n resolve(this.token);\r\n }\r\n } else {\r\n doAcquire();\r\n }\r\n });\r\n }\r\n\r\n private processToken(token: Token): Token {\r\n token.expirationTimestamp = calculateTokenExpirationTimestamp(token);\r\n sessionStorage.setItem(SESSIONSTORAGEKEY_TOKEN, JSON.stringify(token));\r\n this.setTimer(token.expirationTimestamp);\r\n this.token = token;\r\n this.refreshing = false; // reset refresh status\r\n return token;\r\n }\r\n\r\n private acquireToken(): Promise {\r\n const url = getApiUrl(this.baseUrl, \"token\");\r\n const data = {\r\n grant_type: \"session\",\r\n language: this.language,\r\n };\r\n\r\n const formHeaders = getFormHeaders();\r\n return axios\r\n .post(url, qs.stringify(data), { headers: formHeaders })\r\n .then((response) => this.processToken(response.data as Token));\r\n }\r\n\r\n private refreshToken(): Promise {\r\n this.refreshing = true; // don't let extra refresh requests go through\r\n const url = getApiUrl(this.baseUrl, \"token\");\r\n const data = {\r\n grant_type: \"refresh_token\",\r\n refresh_token: this.token.refresh_token,\r\n };\r\n const formHeaders = getFormHeaders();\r\n return axios\r\n .post(url, qs.stringify(data), { headers: formHeaders })\r\n .then((response) => this.processToken(response.data as Token));\r\n }\r\n\r\n /**\r\n * Sets a timer that refreshes the token just after the refresh threshold\r\n * has been reached based on the provided token expiration timestamp.\r\n */\r\n private setTimer(expirationTimestamp: number): void {\r\n if (!this.autoRefresh) return;\r\n\r\n const dueTime =\r\n expirationTimestamp - Date.now() - (TOKEN_REFRESH_THRESHOLD_SECONDS - 1) * 1000;\r\n const executeRefresh = () => this.resetTokenPromise(false);\r\n\r\n if (dueTime > 0) {\r\n this.timerHandle = setTimeout(executeRefresh, dueTime);\r\n } else {\r\n executeRefresh();\r\n }\r\n }\r\n\r\n private unsetTimer(): void {\r\n if (this.timerHandle !== null) {\r\n clearTimeout(this.timerHandle);\r\n this.timerHandle = null;\r\n }\r\n }\r\n}\r\n\r\nfunction isValidToken(token: Token): boolean {\r\n return !!token && !isExpiredToken(token);\r\n}\r\n\r\nfunction isExpiredToken(token: Token): boolean {\r\n return token.expirationTimestamp <= Date.now();\r\n}\r\n\r\nfunction shouldRefreshToken(token: Token): boolean {\r\n return token.expirationTimestamp - Date.now() < TOKEN_REFRESH_THRESHOLD_SECONDS * 1000;\r\n}\r\n\r\nfunction calculateTokenExpirationTimestamp(token: Token): number {\r\n return Date.now() + token.expires_in * 1000;\r\n}\r\n","import { IntlShape } from \"react-intl\";\r\nimport moment from \"moment\";\r\n\r\nexport const KiB = 1024;\r\nexport const MiB = KiB * KiB;\r\nexport const GiB = KiB * MiB;\r\n\r\n/**\r\n * Checks for valid input and returns 0 if invalid.\r\n * Returns the floor of the number, to make sure we don't report 100%\r\n * if value is less than 100.\r\n */\r\nexport function formatPercent(num: number): string {\r\n if (Number.isNaN(num)) {\r\n return String(0);\r\n }\r\n return String(Math.floor(num));\r\n}\r\n\r\n/**\r\n * Returns the number if it is whole, or the number rounded to a single\r\n * decimal point if it is not whole, as a string.\r\n */\r\nexport function formatNumber(num: number): string {\r\n return Number.isInteger(num) ? num.toString() : num.toFixed(1);\r\n}\r\n\r\n/**\r\n * Returns a formatted bytecount with the appropriate translated unit\r\n * string appended.\r\n *\r\n * @param bytecount Bytecount to format.\r\n * @param intl Internationalization service object from react-intl.\r\n */\r\nexport function formatBytecount(bytecount: number, intl: IntlShape): string {\r\n if (bytecount >= GiB) {\r\n const gbCount = formatNumber(bytecount / GiB);\r\n return intl.formatMessage({ id: \"common.unit.gigabytes\" }, { value: gbCount });\r\n }\r\n\r\n if (bytecount >= MiB) {\r\n const mbCount = formatNumber(bytecount / MiB);\r\n return intl.formatMessage({ id: \"common.unit.megabytes\" }, { value: mbCount });\r\n }\r\n\r\n if (bytecount >= KiB) {\r\n const kbCount = formatNumber(bytecount / KiB);\r\n return intl.formatMessage({ id: \"common.unit.kilobytes\" }, { value: kbCount });\r\n }\r\n\r\n return intl.formatMessage({ id: \"common.unit.bytes\" }, { value: bytecount });\r\n}\r\n\r\n/**\r\n * Returns a simple formatted duration string with the provided value and unit string.\r\n *\r\n * @param value Value to display\r\n * @param unit Unit to display\r\n * @param intl Internationalization service object from react-intl\r\n */\r\nexport function formatDurationDescription(\r\n value: number,\r\n unit: \"seconds\" | \"minutes\" | \"hours\" | \"days\" | \"months\" | \"years\",\r\n intl: IntlShape\r\n): string {\r\n if (value === 1) {\r\n return intl.formatMessage(\r\n { id: \"common.duration.one\" },\r\n {\r\n unit: intl.formatMessage({\r\n id: `common.duration.unit.${unit}.single`,\r\n }),\r\n }\r\n );\r\n }\r\n\r\n return intl.formatMessage(\r\n { id: \"common.duration.multiple\" },\r\n {\r\n value,\r\n unit: intl.formatMessage({ id: `common.duration.unit.${unit}` }),\r\n }\r\n );\r\n}\r\n\r\n/**\r\n * Returns a formatted duration value with the appropriate translated units.\r\n *\r\n * @param milliseconds Length of duration\r\n * @param minimumUnit Smallest unit to include in resulting string\r\n * @param intl Internationalization service object from react-intl\r\n */\r\nexport function formatDuration(\r\n milliseconds: number,\r\n minimumUnit: \"seconds\" | \"minutes\" | \"hours\" | \"days\" | \"months\" | \"years\",\r\n intl: IntlShape\r\n): string {\r\n const duration = moment.duration(milliseconds);\r\n\r\n function lessThanOne(unit: string): string {\r\n return intl.formatMessage(\r\n { id: \"common.duration.lessThanOne\" },\r\n { unit: intl.formatMessage({ id: `common.duration.unit.${unit}.single` }) }\r\n );\r\n }\r\n\r\n function getDurationDescription(\r\n value: number,\r\n unit: \"seconds\" | \"minutes\" | \"hours\" | \"days\" | \"months\" | \"years\"\r\n ): string {\r\n return value < 1 ? \"\" : formatDurationDescription(value, unit, intl);\r\n }\r\n\r\n function assembleDescription(descriptionParts: string[]): string {\r\n return descriptionParts.filter(value => value).join(\", \");\r\n }\r\n\r\n switch (minimumUnit) {\r\n case \"seconds\":\r\n if (duration.asSeconds() < 1) {\r\n return lessThanOne(\"seconds\");\r\n }\r\n break;\r\n case \"minutes\":\r\n if (duration.asMinutes() < 1) {\r\n return lessThanOne(\"minutes\");\r\n }\r\n break;\r\n case \"hours\":\r\n if (duration.asHours() < 1) {\r\n return lessThanOne(\"hours\");\r\n }\r\n break;\r\n case \"days\":\r\n if (duration.asDays() < 1) {\r\n return lessThanOne(\"days\");\r\n }\r\n break;\r\n case \"months\":\r\n if (duration.asMonths() < 1) {\r\n return lessThanOne(\"months\");\r\n }\r\n break;\r\n case \"years\":\r\n if (duration.asYears() < 1) {\r\n return lessThanOne(\"years\");\r\n }\r\n break;\r\n }\r\n\r\n const parts: string[] = [];\r\n\r\n parts.push(getDurationDescription(duration.years(), \"years\"));\r\n if (minimumUnit === \"years\") {\r\n return assembleDescription(parts);\r\n }\r\n\r\n parts.push(getDurationDescription(duration.months(), \"months\"));\r\n if (minimumUnit === \"months\") {\r\n return assembleDescription(parts);\r\n }\r\n\r\n parts.push(getDurationDescription(duration.days(), \"days\"));\r\n if (minimumUnit === \"days\") {\r\n return assembleDescription(parts);\r\n }\r\n\r\n parts.push(getDurationDescription(duration.hours(), \"hours\"));\r\n if (minimumUnit === \"hours\") {\r\n return assembleDescription(parts);\r\n }\r\n\r\n parts.push(getDurationDescription(duration.minutes(), \"minutes\"));\r\n if (minimumUnit === \"minutes\") {\r\n return assembleDescription(parts);\r\n }\r\n\r\n parts.push(getDurationDescription(duration.seconds(), \"seconds\"));\r\n return assembleDescription(parts);\r\n}\r\n\r\n// Adjusts a formatted datetime string to match MOVEit Transfer's existing datetime formatting\r\n// for various locales; these account for differences between .NET datetime formatting and\r\n// javascript datetime formatting.\r\nfunction adjustDateTimeString(locale: string, dateTimeString: string): string {\r\n // Remove commas and French à character\r\n dateTimeString = dateTimeString.replace(/,| (?:à)/, \"\");\r\n\r\n // Add space after character for Taiwanese\r\n if (locale === \"zh-TW\") {\r\n dateTimeString = dateTimeString.replace(/午/, \"午 \");\r\n }\r\n\r\n return dateTimeString;\r\n}\r\n\r\nexport function formatTransferLocaleDate(date: Date, intlLocale: string): string {\r\n let locale = intlLocale;\r\n const NUMERIC = \"numeric\";\r\n const options: Intl.DateTimeFormatOptions = {\r\n year: NUMERIC,\r\n month: NUMERIC,\r\n day: NUMERIC,\r\n hour: locale === \"zh-TW\" ? \"2-digit\" : NUMERIC, // zh-TW uses 12 hour time, but two digit hours\r\n minute: NUMERIC,\r\n second: NUMERIC,\r\n };\r\n\r\n if (locale === \"zh-CN\") {\r\n // Chinese-Simple should have same format as Japanese\r\n locale = \"ja-JP\";\r\n }\r\n\r\n return adjustDateTimeString(locale, date.toLocaleDateString(locale, options));\r\n}\r\n\r\nexport function formatTransferLocaleTime(time: Date, intlLocale: string): string {\r\n let locale = intlLocale;\r\n const NUMERIC = \"numeric\";\r\n const options: Intl.DateTimeFormatOptions = {\r\n hour: locale === \"zh-TW\" ? \"2-digit\" : NUMERIC, // zh-TW uses 12 hour time, but two digit hours\r\n minute: NUMERIC,\r\n };\r\n\r\n if (locale === \"zh-CN\") {\r\n // Chinese-Simple should have same format as Japanese\r\n locale = \"ja-JP\";\r\n }\r\n\r\n return adjustDateTimeString(locale, time.toLocaleTimeString(locale, options));\r\n}\r\n","export function foldersWereDropped(dataTransfer: DataTransfer): boolean {\r\n const items = dataTransfer.items;\r\n const files = dataTransfer.files;\r\n\r\n if (items) {\r\n const count = items.length;\r\n for (let i = 0; i < count; i++) {\r\n if (dataTransferItemIsFolder(items[i])) {\r\n return true;\r\n }\r\n }\r\n } else {\r\n // IE does not have an items collection on drag events,\r\n // and will return a zero-length files collection if\r\n // a folder was dropped.\r\n if (files.length === 0) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexport function getFileArrayFromDragDataTransfer(dataTransfer: DataTransfer): File[] {\r\n const items = dataTransfer.items;\r\n const files = dataTransfer.files;\r\n\r\n // IE will not have an items collection on drag events.\r\n return items ? getFileArrayFromDataTransferItemList(items) : getFileArrayFromFileList(files);\r\n}\r\n\r\nexport function getFileArrayFromFileList(items: FileList): File[] {\r\n const output = new Array();\r\n const count = items.length;\r\n for (let i = 0; i < count; i++) {\r\n output.push(items[i]);\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction getFileArrayFromDataTransferItemList(items: DataTransferItemList): File[] {\r\n const output = new Array();\r\n const count = items.length;\r\n for (let i = 0; i < count; i++) {\r\n const item = items[i];\r\n if (!dataTransferItemIsFolder(item)) {\r\n output.push(item.getAsFile());\r\n }\r\n }\r\n\r\n return output;\r\n}\r\n\r\nfunction dataTransferItemIsFolder(item: DataTransferItem): boolean {\r\n if (item.webkitGetAsEntry) {\r\n const entryItem = item.webkitGetAsEntry();\r\n return entryItem.isDirectory;\r\n }\r\n\r\n return false;\r\n}\r\n","import { Action } from \"../Action\";\r\n\r\nconst development: boolean = process.env.NODE_ENV && process.env.NODE_ENV === \"development\";\r\n\r\nexport function isDev(): boolean {\r\n return development;\r\n}\r\n\r\nexport function logDispatchedAction(state: any, action: Action): void {\r\n if (!isDev()) return;\r\n console.log(\r\n `\r\n%cAction Dispatched: %c%s\r\n%cCurrent State: %O\r\nPayload: %O\r\n `,\r\n \"font-weight: bold\",\r\n \"font-weight: bold; color: red;\",\r\n action.type,\r\n \"font-weight: normal\",\r\n state,\r\n action.payload\r\n );\r\n}\r\n","import React, { FunctionComponent } from \"react\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nimport { Alert } from \"react-bootstrap\";\r\n\r\nimport \"./ErrorAlert.scss\";\r\n\r\ninterface ErrorAlertProps {\r\n messageId: string;\r\n message?: string;\r\n details?: string;\r\n}\r\n\r\nconst ErrorAlert: FunctionComponent = props => {\r\n return (\r\n \r\n
\r\n {props.messageId ? : props.message}\r\n
\r\n {!!props.details &&
{props.details}
}\r\n
\r\n );\r\n};\r\n\r\nexport default ErrorAlert;\r\n","import React, { FunctionComponent } from \"react\";\r\nimport { FormattedMessage } from \"react-intl\";\r\nimport { Alert } from \"react-bootstrap\";\r\n\r\nimport \"./WarningAlert.scss\";\r\n\r\ninterface WarningAlertProps {\r\n messageId: string;\r\n messageValues?: {};\r\n message?: string;\r\n details?: string;\r\n}\r\n\r\nconst WarningAlert: FunctionComponent = props => {\r\n return (\r\n \r\n
\r\n {props.messageId ? (\r\n \r\n ) : (\r\n props.message\r\n )}\r\n
\r\n {!!props.details &&
{props.details}
}\r\n
\r\n );\r\n};\r\n\r\nexport default WarningAlert;\r\n","import React, { FunctionComponent } from \"react\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { ButtonVariant } from \"react-bootstrap/types\";\r\n\r\nimport { ApplicationLinkProps, makeApplicationLink } from \"../utils/applicationUtils\";\r\n\r\ninterface ApplicationLinkButtonProps extends ApplicationLinkProps {\r\n variant: ButtonVariant;\r\n}\r\n\r\nconst ApplicationLinkButton: FunctionComponent = props => {\r\n const handleClick = (): void => {\r\n window.location.href = makeApplicationLink(props);\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default ApplicationLinkButton;\r\n","import * as React from \"react\";\r\nimport { FunctionComponent, ChangeEvent, useState, useEffect } from \"react\";\r\n\r\nexport interface DebouncedTextInputProps {\r\n value: string;\r\n placeHolder: string;\r\n onImmediateChange: (value: string) => void;\r\n onDebouncedChange: (value: string) => void;\r\n debounceTime: number;\r\n}\r\n\r\nexport const DebouncedTextInput: FunctionComponent = props => {\r\n const [timerId, setTimerId] = useState(null);\r\n\r\n // Clear the timer when unmounted\r\n useEffect(() => clearTimer);\r\n\r\n function clearTimer() {\r\n if (timerId) {\r\n clearTimeout(timerId);\r\n }\r\n }\r\n\r\n function debounceChange(newValue: string) {\r\n clearTimer();\r\n setTimerId(setTimeout(() => props.onDebouncedChange(newValue), props.debounceTime));\r\n }\r\n\r\n function handleChange(e: ChangeEvent) {\r\n const newValue = e.target.value;\r\n props.onImmediateChange(newValue);\r\n debounceChange(newValue);\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import IHashService from \"./IHashService\";\r\n// Rusha has no TS types definition, so we need to ignore that in the compiler and just go with it\r\n//@ts-ignore\r\nimport * as Rusha from \"rusha\";\r\n\r\nexport default class HashService implements IHashService {\r\n public hashFile(file: File, onProgress?: (progress: number) => void): Promise {\r\n const md = Rusha.createHash();\r\n const chunksize = 10 * 1024 * 1024; // 10 MiB\r\n\r\n function hashNextPart(offset: number): Promise {\r\n const nextPart = file.slice(offset, offset + chunksize);\r\n const newOffset = offset + chunksize;\r\n\r\n return getBlobContent(nextPart).then(content => {\r\n md.update(content);\r\n // report progress\r\n const progress = newOffset < file.size ? newOffset : file.size;\r\n onProgress?.(progress);\r\n return newOffset;\r\n });\r\n }\r\n\r\n function hashParts(offset: number, resolve: () => void) {\r\n if (offset >= file.size) {\r\n resolve();\r\n } else {\r\n hashNextPart(offset).then(newOffset => hashParts(newOffset, resolve));\r\n }\r\n }\r\n\r\n return new Promise(resolve => hashParts(0, resolve)).then(() => md.digest(\"hex\"));\r\n }\r\n}\r\n\r\nfunction getBlobContent(blob: Blob): Promise {\r\n return new Promise(resolve => {\r\n const fr = new FileReader();\r\n fr.addEventListener(\"load\", () => resolve(fr.result as ArrayBuffer));\r\n fr.readAsArrayBuffer(blob);\r\n });\r\n}\r\n","import { ApiService } from \"./ApiService\";\r\nimport { IContactsApiService } from \"./IContactsApiService\";\r\nimport { ContactModel } from \"../models/ContactModel\";\r\nimport { PagedModel } from \"../models/PagedModel\";\r\n\r\nexport class ContactsApiService extends ApiService implements IContactsApiService {\r\n constructor(baseUrl: string, language?: string) {\r\n super(baseUrl, language);\r\n }\r\n\r\n getContacts(\r\n page?: number,\r\n perPage?: number,\r\n sortField?: \"name\" | \"email\",\r\n sortDirection?: \"ascending\" | \"descending\",\r\n searchString?: string,\r\n onBehalfOf?: string\r\n ): Promise> {\r\n return this.get>(\"contacts\", {\r\n page,\r\n perPage,\r\n sortField,\r\n sortDirection,\r\n searchString,\r\n onBehalfOf,\r\n });\r\n }\r\n}\r\n","import { ApiService } from \".\";\r\nimport { IFoldersApiService } from \"./IFoldersApiService\";\r\nimport { PagedModel } from \"../models/PagedModel\";\r\nimport { SimpleFolderModel } from \"../models/SimpleFolderModel\";\r\n\r\nexport class FoldersApiService extends ApiService implements IFoldersApiService {\r\n constructor(baseUrl: string, language?: string) {\r\n super(baseUrl, language);\r\n }\r\n\r\n public getFolderList(\r\n nameFilter: string = \"\",\r\n pathFilter: string = \"\",\r\n page: number = 1,\r\n perPage: number = 25,\r\n sortField: \"Name\" | \"Type\" | \"Path\" = \"Path\",\r\n sortDirection: \"ascending\" | \"descending\" = \"ascending\"\r\n ): Promise> {\r\n return this.get>(\"folders\", {\r\n name: nameFilter,\r\n path: pathFilter,\r\n page,\r\n perPage,\r\n sortField,\r\n sortDirection,\r\n });\r\n }\r\n\r\n public getFolderDetails(id: string): Promise {\r\n const [folderId, path] = id.split(\"-\");\r\n const param = path ? \"?pathhash=\" + encodeURIComponent(path) : \"\";\r\n return this.get(`folders/${folderId}${param}`);\r\n }\r\n}\r\n","import { ApiService } from \"./ApiService\";\r\nimport { IUploadApiService, ContentRange } from \"./IUploadApiService\";\r\nimport { SimpleFileModel } from \"../models/SimpleFileModel\";\r\nimport { FileUploadResponseModel } from \"../models/FileUploadResponseModel\";\r\nimport { ApiRequestOptions } from \"./IApiService\";\r\nimport axios, { CancelTokenSource } from \"axios\";\r\n\r\nexport class UploadApiService extends ApiService implements IUploadApiService {\r\n constructor(baseUrl: string, language?: string) {\r\n super(baseUrl, language);\r\n }\r\n\r\n public initResumableUpload(\r\n folderId: string,\r\n fileName: string,\r\n fileSize: number,\r\n comments: string\r\n ): Promise {\r\n const data = new FormData();\r\n data.append(\"name\", fileName);\r\n data.append(\"size\", fileSize.toString());\r\n data.append(\"comments\", comments);\r\n\r\n return this.post(\r\n `folders/${folderId}/files?uploadType=resumable`,\r\n data\r\n );\r\n }\r\n\r\n public continueResumableUpload(\r\n folderId: string,\r\n fileId: string,\r\n data: Blob,\r\n contentRange: ContentRange,\r\n fileHash?: string,\r\n onProgress?: (e: ProgressEvent) => void,\r\n cancelTokenSource?: CancelTokenSource\r\n ): Promise {\r\n const headers: {\r\n \"Content-Type\": string;\r\n \"Content-Range\": string;\r\n \"X-File-Hash\"?: string;\r\n } = {\r\n // We are sending raw data, so override the default content type to be octet-stream\r\n \"Content-Type\": \"application/octet-stream\",\r\n \"Content-Range\": makeContentRangeHeaderValue(contentRange),\r\n };\r\n if (fileHash) {\r\n headers[\"X-File-Hash\"] = fileHash;\r\n }\r\n const options: ApiRequestOptions = {\r\n onUploadProgress: onProgress,\r\n cancelToken: cancelTokenSource?.token,\r\n };\r\n\r\n if (isLastChunk(contentRange)) {\r\n return this.put(\r\n `folders/${folderId}/files?uploadType=resumable&fileId=${fileId}`,\r\n data,\r\n headers,\r\n options\r\n );\r\n } else {\r\n // Non-final chunk uploads should return a 308 status on success\r\n options.validateStatus = (status: number) => status === 308;\r\n return this.put(\r\n `folders/${folderId}/files?uploadType=resumable&fileId=${fileId}`,\r\n data,\r\n headers,\r\n options\r\n );\r\n }\r\n }\r\n}\r\n\r\nfunction makeContentRangeHeaderValue(value: ContentRange): string {\r\n // When uploading an empty file Content-Range: bytes 0-0/0 is an invalid header. bytes */0 is a valid header\r\n return value.totalSize === 0 ? `bytes */0` : `bytes ${value.startOffset}-${value.endOffset}/${value.totalSize}`;\r\n}\r\n\r\nfunction isLastChunk(contentRange: ContentRange): boolean {\r\n return contentRange.totalSize === 0 || contentRange.endOffset === contentRange.totalSize - 1;\r\n}\r\n","import { ApiService } from \"./ApiService\";\r\nimport IDownloadValidateApiService from \"./IDownloadValidateApiService\";\r\nimport ValidationResponse from \"../models/DownloadValidationResponseModel\";\r\n\r\nexport default class DownloadValidateApiService extends ApiService\r\n implements IDownloadValidateApiService {\r\n constructor(baseUrl: string, language?: string) {\r\n super(baseUrl, language);\r\n }\r\n\r\n public validateDownloadHash(\r\n hash: string,\r\n downloadId?: string,\r\n fileId?: string,\r\n logId?: string\r\n ): Promise {\r\n const requestUrl = \"/downloads/check\";\r\n let params:\r\n | { hash: string; downloadid: string }\r\n | { hash: string; fileid: string; logid: string };\r\n if (!!downloadId?.length) {\r\n // use downloadId\r\n params = { hash, downloadid: downloadId };\r\n } else {\r\n // use fileId and logId\r\n params = { hash, fileid: fileId, logid: logId };\r\n }\r\n return this.get(requestUrl, params);\r\n }\r\n}\r\n","import { ApiService } from \".\";\r\nimport { ISettingsApiService } from \"./ISettingsApiService\";\r\nimport { LogosInfoModel } from \"../models/LogosInfoModel\";\r\n\r\nexport class SettingsApiService extends ApiService implements ISettingsApiService {\r\n constructor(baseUrl: string, language?: string) {\r\n super(baseUrl, language);\r\n }\r\n\r\n updateLogos(\r\n useCustomNotifBranding: boolean,\r\n leftLogo?: File,\r\n rightLogo?: File,\r\n backgroundLogo?: File,\r\n resetRightLogo?: boolean,\r\n resetBackgroundLogo?: boolean\r\n ): Promise {\r\n const data = new FormData();\r\n data.append(\"useCustomNotifBranding\", useCustomNotifBranding ? \"1\" : \"0\");\r\n\r\n if (leftLogo) {\r\n data.append(\"leftLogo\", leftLogo, leftLogo.name);\r\n }\r\n\r\n if (resetRightLogo) {\r\n data.append(\"resetRightLogo\", \"1\");\r\n } else if (rightLogo) {\r\n data.append(\"rightLogo\", rightLogo, rightLogo.name);\r\n }\r\n\r\n if (resetBackgroundLogo) {\r\n data.append(\"resetBackgroundLogo\", \"1\");\r\n } else if (backgroundLogo) {\r\n data.append(\"backgroundLogo\", backgroundLogo, backgroundLogo.name);\r\n }\r\n\r\n return this.post(\"settings/appearance/brand/logos\", data);\r\n }\r\n}\r\n","import React, { FunctionComponent } from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nimport \"./PageWrapper.scss\";\r\n\r\ninterface PageWrapperProps {\r\n pageTitle: string;\r\n className?: string;\r\n}\r\n\r\nconst PageWrapper: FunctionComponent = props => {\r\n return (\r\n
\r\n

{props.pageTitle}

\r\n {props.children}\r\n
\r\n );\r\n};\r\n\r\nexport default PageWrapper;\r\n","import React, { FunctionComponent } from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nimport \"./FeatureGroupNumericTitle.scss\";\r\n\r\nexport interface FeatureGroupNumericTitleProps {\r\n title: string;\r\n className?: string;\r\n titleNumber: number;\r\n}\r\n\r\nexport const FeatureGroupNumericTitle: FunctionComponent = ({\r\n title,\r\n className,\r\n titleNumber,\r\n}) => {\r\n return (\r\n
\r\n {titleNumber}\r\n
{title}
\r\n
\r\n );\r\n};\r\n","import React, { ReactElement, FunctionComponent } from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nexport interface FeatureGroupIconTitleProps {\r\n title: string | ReactElement;\r\n className?: string;\r\n iconClassName: string;\r\n}\r\n\r\nexport const FeatureGroupIconTitle: FunctionComponent = ({\r\n title,\r\n className,\r\n iconClassName,\r\n}) => {\r\n return (\r\n
\r\n \r\n
{title}
\r\n
\r\n );\r\n};\r\n","import React, { ReactElement, FunctionComponent } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport { Alert } from \"react-bootstrap\";\r\n\r\nimport \"./FeatureGroupBoxedIconTitle.scss\";\r\n\r\nexport interface FeatureGroupBoxedIconTitleProps {\r\n title: string | ReactElement;\r\n subtitle?: string | ReactElement;\r\n className?: string;\r\n alertBoxVariant: string;\r\n iconClassName: string;\r\n action?: ReactElement;\r\n}\r\n\r\nexport const FeatureGroupBoxedIconTitle: FunctionComponent = ({\r\n title,\r\n subtitle,\r\n className,\r\n alertBoxVariant,\r\n iconClassName,\r\n action,\r\n}) => {\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n {title}\r\n {!!subtitle && (\r\n {subtitle}\r\n )}\r\n \r\n
\r\n {!!action &&
{action}
}\r\n
\r\n
\r\n );\r\n};\r\n","import React from \"react\";\r\nimport { useField, FieldConfig } from \"formik\";\r\nimport FormGroup from \"react-bootstrap/FormGroup\";\r\nimport FormLabel from \"react-bootstrap/FormLabel\";\r\nimport FormControl from \"react-bootstrap/FormControl\";\r\nimport cn from \"classnames\";\r\n\r\ninterface FormikFieldGroupProps {\r\n type: string;\r\n className?: string;\r\n label?: string;\r\n placeholder?: string;\r\n maxLength?: number;\r\n disabled?: boolean;\r\n readOnly?: boolean;\r\n checked?: boolean;\r\n fragile?: boolean; // when true, an invalid field will display error even when touched is false\r\n}\r\n\r\nconst FormikFieldGroup: React.FunctionComponent = ({\r\n type,\r\n className,\r\n label,\r\n fragile,\r\n ...props\r\n}) => {\r\n const [field, meta] = useField(props);\r\n\r\n const isInvalid: boolean = meta.error && (fragile || meta.touched);\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {isInvalid && (\r\n \r\n {meta.error || \"\"}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default FormikFieldGroup;\r\n","import { ApiService } from \".\";\r\nimport IOrgsApiService from \"./IOrgsApiService\";\r\nimport { PagedModel } from \"../models/PagedModel\";\r\nimport OrgKeyModel from \"../models/OrgKeyModel\";\r\nimport KeyRotationPassphraseModel from \"../models/KeyRotationPassphraseModel\";\r\nimport KeyRotationStatusModel from \"../models/KeyRotationStatusModel\";\r\nimport ScheduleModel from \"../models/ScheduleModel\";\r\nimport ReminderModel from \"../models/KeyRotationReminderModel\";\r\n\r\nexport default class OrgsApiService extends ApiService implements IOrgsApiService {\r\n constructor(baseUrl: string, language?: string) {\r\n super(baseUrl, language);\r\n }\r\n\r\n public getPublicKeys(\r\n orgId: string,\r\n page: number = 1,\r\n perPage: number = 25,\r\n sortField: \"timestamp\",\r\n sortDirection: \"ascending\" | \"descending\" = \"descending\"\r\n ): Promise> {\r\n return this.get>(\r\n this.makeUrl(orgId, \"/keys\"),\r\n {\r\n page,\r\n perPage,\r\n sortField,\r\n sortDirection,\r\n },\r\n true\r\n );\r\n }\r\n\r\n public beginKeyRotationEstimate(orgId: string): Promise {\r\n return this.post(\r\n this.makeUrl(orgId, \"/keys/rotation/estimate\"),\r\n {}\r\n );\r\n }\r\n\r\n public removeKeyRotationEstimate(orgId: string): Promise {\r\n return this.delete(this.makeUrl(orgId, \"/keys/rotation/estimate\"));\r\n }\r\n\r\n public getKeyRotationPassphrase(orgId: string): Promise {\r\n return this.get(\r\n this.makeUrl(orgId, \"/keys/passphrase\"),\r\n {},\r\n true\r\n );\r\n }\r\n\r\n public validateKeyRotationPassphrase(orgId: string, passphrase: string): Promise {\r\n return this.post(this.makeUrl(orgId, \"/keys/passphrase\"), { passphrase });\r\n }\r\n\r\n public getKeyRotationReminder(orgId: string): Promise {\r\n return this.get(this.makeUrl(orgId, \"/keys/reminder\"), {}, true);\r\n }\r\n\r\n public setKeyRotationReminder(orgId: string, reminderDate: Date): Promise {\r\n return this.post(this.makeUrl(orgId, \"/keys/reminder\"), { reminderDate });\r\n }\r\n\r\n public beginKeyRotation(\r\n orgId: string,\r\n passphrase: string,\r\n schedule: ScheduleModel\r\n ): Promise {\r\n return this.post(this.makeUrl(orgId, \"/keys/rotation\"), {\r\n passphrase,\r\n schedule,\r\n });\r\n }\r\n\r\n public pauseKeyRotation(orgId: string): Promise {\r\n return this.post(this.makeUrl(orgId, \"/keys/rotation/pause\"), {});\r\n }\r\n\r\n public resumeKeyRotation(orgId: string): Promise {\r\n return this.post(this.makeUrl(orgId, \"/keys/rotation/resume\"), {});\r\n }\r\n\r\n public setKeyRotationSchedule(\r\n orgId: string,\r\n schedule: ScheduleModel\r\n ): Promise {\r\n return this.post(this.makeUrl(orgId, \"/keys/rotation/schedule\"), {\r\n schedule,\r\n });\r\n }\r\n\r\n public getKeyRotationStatus(orgId: string): Promise {\r\n return this.get(this.makeUrl(orgId, \"/keys/rotation\"), {}, true);\r\n }\r\n\r\n public removeKeyRotationStatus(orgId: string): Promise {\r\n return this.delete(this.makeUrl(orgId, \"/keys/rotation\"));\r\n }\r\n\r\n private makeUrl(orgId: string, endpoint?: string) {\r\n return `organizations/${orgId}${endpoint}`;\r\n }\r\n}\r\n","import IHelpUrlBuilderService from \"./IHelpUrlBuilderService\";\r\nimport { TRANSFER_DOC_VERSION } from \"../constants\";\r\n\r\nexport default class HelpUrlBuilderService implements IHelpUrlBuilderService {\r\n // full structure: http://docs.ipswitch.com/MOVEit/Transfer/Help///.htm\r\n // If changing this value be sure to also change it in /skels/utility.xslskel\r\n private readonly baseUrl = \"http://docs.ipswitch.com/MOVEit/\";\r\n // TODO: add user api service to dynamically fetch user type\r\n constructor(private readonly userType: string, private readonly languageCode: string) {}\r\n\r\n public getHelpUrl(targetId: string) {\r\n return `${this.baseUrl}Transfer${TRANSFER_DOC_VERSION}/Help/${this.userType}/${this.languageCode}/${targetId}.htm`;\r\n }\r\n}\r\n","import { PublicDownloadLinkModel } from \"../models/PublicDownloadLinkModel\";\r\nimport { PublicDownloadLinkRequestModel } from \"../models/PublicDownloadLinkRequestModel\";\r\nimport { ApiService } from \"./ApiService\";\r\nimport { IPublicDownloadLinkApiService } from \"./IPublicDownloadLinkApiService\";\r\n\r\nexport class PublicDownloadLinkApiService extends ApiService\r\n implements IPublicDownloadLinkApiService {\r\n constructor(baseUrl: string, language?: string) {\r\n super(baseUrl, language);\r\n }\r\n\r\n public generatePublicDownloadLink(\r\n fileId: number,\r\n publicLinkParams: PublicDownloadLinkRequestModel\r\n ): Promise {\r\n return this.post(`files/${fileId}/publiclinks`, publicLinkParams);\r\n }\r\n\r\n public getPublicLinkInfo(\r\n fileId: number,\r\n publicLinkId: string\r\n ): Promise {\r\n return this.get(`files/${fileId}/publiclinks/${publicLinkId}`);\r\n }\r\n\r\n public deletePublicLink(fileId: number, publicLinkId: string): Promise {\r\n return this.delete(`files/${fileId}/publiclinks/${publicLinkId}`);\r\n }\r\n}\r\n"],"sourceRoot":""}