{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/ts/config/production/Config.ts","webpack:///./node_modules/lodash/_cloneArrayBuffer.js","webpack:///./src/ts/helpers/DownloadSkypeHelper.ts","webpack:///./node_modules/lodash/_baseMerge.js","webpack:///./node_modules/lodash/_initCloneObject.js","webpack:///./node_modules/@skype/ecsclient/dist/EcsClient.js","webpack:///./src/ts/components/common/Captcha.tsx","webpack:///./node_modules/@skype/ecsclient/dist/TelemetryEvents.js","webpack:///./src/ts/components/meetings/Launcher.tsx","webpack:///./src/ts/helpers/SilentLoginHelper.ts","webpack:///./src/ts/helpers/LoggerHelper.ts","webpack:///./src/ts/components/do/RootView.tsx","webpack:///./node_modules/lodash/isArrayLikeObject.js","webpack:///./src/ts/index.tsx","webpack:///./node_modules/@skype/ecsclient/dist/AppActiveData.js","webpack:///./node_modules/uuid/dist/esm-browser/rng.js","webpack:///./node_modules/uuid/dist/esm-browser/regex.js","webpack:///./node_modules/uuid/dist/esm-browser/stringify.js","webpack:///./node_modules/uuid/dist/esm-browser/validate.js","webpack:///./node_modules/uuid/dist/esm-browser/v1.js","webpack:///./node_modules/uuid/dist/esm-browser/parse.js","webpack:///./node_modules/uuid/dist/esm-browser/v35.js","webpack:///./node_modules/uuid/dist/esm-browser/md5.js","webpack:///./node_modules/uuid/dist/esm-browser/v3.js","webpack:///./node_modules/uuid/dist/esm-browser/v4.js","webpack:///./node_modules/uuid/dist/esm-browser/sha1.js","webpack:///./node_modules/uuid/dist/esm-browser/v5.js","webpack:///./node_modules/uuid/dist/esm-browser/nil.js","webpack:///./node_modules/uuid/dist/esm-browser/version.js","webpack:///./src/ts/helpers/RedirectHelper.ts","webpack:///./src/ts/components/common/Padder.tsx","webpack:///./node_modules/lodash/_cloneBuffer.js","webpack:///./node_modules/lodash/_nativeKeysIn.js","webpack:///./node_modules/lodash/uniq.js","webpack:///./src/ts/components/common/StackNavigationView.tsx","webpack:///./src/ts/contexts/ErrorContext.ts","webpack:///./src/ts/components/common/ErrorBoundary.tsx","webpack:///./src/ts/components/meetings/login/GuestLogin.tsx","webpack:///./src/ts/contexts/meetings/MeetingContext.ts","webpack:///./src/ts/components/meetings/LoginView.tsx","webpack:///./src/ts/helpers/EcsHelper.ts","webpack:///./src/ts/components/meetings/login/GuestRedirect.tsx","webpack:///./src/ts/config/BaseConfig.ts","webpack:///./node_modules/lodash/_baseRest.js","webpack:///./src/ts/components/channels/ChannelLauncher.tsx","webpack:///./src/ts/models/SharedTypes.ts","webpack:///./src/ts/helpers/LocalizerHelper.ts","webpack:///./src/ts/components/bots/BotInfo.tsx","webpack:///./src/ts/components/profiles/Launcher.tsx","webpack:///./src/ts/helpers/SafariRedirectHelper.ts","webpack:///./src/ts/components/bots/BotLauncher.tsx","webpack:///./src/ts/components/channels/withChannelsContext.tsx","webpack:///./node_modules/lodash/_overRest.js","webpack:///./src/ts/components/common/ARootView.tsx","webpack:///./src/ts/rest/ChannelsApiClient.ts","webpack:///./node_modules/subscribableevent/dist-es2015/SubscribableEvent.js","webpack:///./node_modules/@skype/ecsclient/dist/TelemetryEventBase.js","webpack:///./src/ts/rest/BotsRestClient.ts","webpack:///./node_modules/clipboard-polyfill/dist/clipboard-polyfill.esm.js","webpack:///./node_modules/@skype/ecsclient/dist/Cache.js","webpack:///./node_modules/lodash/_baseUniq.js","webpack:///./node_modules/lodash/_getPrototype.js","webpack:///./node_modules/lodash/_createAssigner.js","webpack:///./src/ts/components/meetings/JoinLink.tsx","webpack:///./src/ts/rest/MeetingsApiClientUtils.ts","webpack:///./src/ts/components/meetings/login/UnifiedLoginMethod.tsx","webpack:///./node_modules/lodash/_assignValue.js","webpack:///./src/ts/themes/common.ts","webpack:///./src/ts/components/bots/RootView.tsx","webpack:///./src/ts/helpers/UrlHelper.ts","webpack:///./src/ts/components/common/ErrorModal.tsx","webpack:///./src/ts/contexts/ConfigContext.ts","webpack:///./src/ts/themes/index.ts","webpack:///./src/ts/components/meetings/RootView.tsx","webpack:///./node_modules/lodash/_baseKeysIn.js","webpack:///./node_modules/lodash/merge.js","webpack:///./src/ts/meetnow/MeetNowEdgeHandler.ts","webpack:///./src/ts/meetnow/FallbackFlow.ts","webpack:///./node_modules/lodash/_baseMergeDeep.js","webpack:///./src/ts/contexts/AriaContext.ts","webpack:///./src/ts/contexts/bots/BotsContext.ts","webpack:///./src/ts/components/meetings/login/LoginMethod.tsx","webpack:///./src/ts/helpers/SkypeTokenHelper.ts","webpack:///./src/ts/components/profiles/RootView.tsx","webpack:///./src/ts/components/channels/ChannelView.tsx","webpack:///./src/ts/contexts/StackNavigationContext.ts","webpack:///./src/ts/components/channels/RootView.tsx","webpack:///./node_modules/lodash/_arrayIncludesWith.js","webpack:///./node_modules/@skype/ecsclient/dist/Config.js","webpack:///./node_modules/lodash/isPlainObject.js","webpack:///./src/ts/contexts/channels/ChannelsContext.ts","webpack:///./node_modules/@skype/ecsclient/dist/RestClient.js","webpack:///./src/ts/components/invites/InviteView.tsx","webpack:///./src/ts/models/OffSkypeInviteServiceModel.ts","webpack:///./src/ts/contexts/do/DoContext.ts","webpack:///./src/ts/themes/light.ts","webpack:///./src/ts/rest/BaseRestClient.ts","webpack:///./node_modules/lodash/_createSet.js","webpack:///./node_modules/@skype/ecsclient/dist/AllowBackgroundFetchData.js","webpack:///./src/ts/components/common/LoadingView.tsx","webpack:///./src/ts/helpers/CookieHelper.ts","webpack:///./src/ts/rest/MeetingsApiClient.ts","webpack:///./node_modules/@skype/ecsclient/dist/Scheduler.js","webpack:///./node_modules/lodash/_baseAssignValue.js","webpack:///./src/ts/meetnow/MeetNowSettings.ts","webpack:///./src/ts/components/common/NestedStackNavigationView.tsx","webpack:///./node_modules/lodash/_safeGet.js","webpack:///./src/ts/components/meetings/UnifiedView.tsx","webpack:///./src/ts/components/do/Launcher.tsx","webpack:///./src/ts/helpers/ClipboardHelper.ts","webpack:///./node_modules/lodash/toPlainObject.js","webpack:///./node_modules/@skype/ecsclient/dist/TelemetryManager.js","webpack:///./node_modules/lodash/_copyObject.js","webpack:///./src/ts/helpers/DomHelper.ts","webpack:///./src/ts/App.tsx","webpack:///./src/ts/themes/teams.ts","webpack:///./src/ts/components/invites/Launcher.tsx","webpack:///./node_modules/@skype/ecsclient/dist/Models.js","webpack:///./src/ts/components/common/Spinner.tsx","webpack:///./node_modules/lodash/keysIn.js","webpack:///./node_modules/lodash/_isIterateeCall.js","webpack:///./src/ts/rest/HuddleApiClient.ts","webpack:///./src/ts/contexts/invites/InviteContext.ts","webpack:///./src/ts/components/common/AriaLive.tsx","webpack:///./src/ts/components/bots/AddBotView.tsx","webpack:///./src/ts/components/meetings/JoinView.tsx","webpack:///./src/ts/helpers/ErrorHelper.ts","webpack:///./src/ts/meetnowJoin/JoinHandler.ts","webpack:///./src/ts/helpers/DateHelper.ts","webpack:///./src/ts/contexts/UserContext.ts","webpack:///./src/ts/components/do/DoView.tsx","webpack:///./src/ts/components/common/Select.tsx","webpack:///./src/ts/components/common/ALauncher.tsx","webpack:///./src/ts/components/common/ErrorDetails.tsx","webpack:///./src/ts/contexts/profiles/ProfilesContext.ts","webpack:///./src/ts/components/common/Header.tsx","webpack:///./node_modules/lodash/_assignMergeValue.js","webpack:///./node_modules/@skype/ecsclient/dist/SkypeTokenData.js","webpack:///./src/ts/components/common/Footer.tsx","webpack:///./src/ts/components/invites/RootView.tsx","webpack:///./src/ts/helpers/EnvironmentHelper.ts","webpack:///./node_modules/lodash/_cloneTypedArray.js","webpack:///./src/ts/contexts/EcsContext.ts","webpack:///./src/ts/components/profiles/ProfileView.tsx","webpack:///./src/ts/app.less?0651","webpack:///./vendor/silentLogin.js","webpack:///./src/ts/app.less","webpack:///./src/ts/rest/ProfileRestClient.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","2","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","BaseConfig_1","Uint8Array","arrayBuffer","constructor","byteLength","set","threadId","url","LoggerHelper_1","action","sessionFinished","completionType","EnvironmentHelper_1","Android","config_1","urls","app","downloadAndroid","MacOS","downloadDesktop","download","location","href","Stack","assignMergeValue","baseFor","baseMergeDeep","isObject","keysIn","safeGet","baseMerge","source","srcIndex","customizer","stack","srcValue","newValue","undefined","baseCreate","getPrototype","isPrototype","AllowBackgroundFetchData_1","AppActiveData_1","Cache_1","Config_1","Models","Scheduler_1","SkypeTokenData_1","TelemetryManager_1","EcsClient","this","_allowBackgroundFetchData","default","_appActiveData","_config","_cache","_skypeTokenData","_telemetryManager","_scheduler","telemetryEventAdded","configUpdated","initialize","config","_this","putSkypeTokenData","initialSkypeTokenData","putAppActive","initialAppActiveState","then","getConfig","getEcsConfig","getConfigType","cacheConfig","configType","requestUpdate","pause","resume","setAllowBackgroundFetch","allowBackgroundFetch","putBackgroundFetchAllowed","useSkypeToken","skypeToken","skypeTokenExpiration","setAppActive","active","setConfigsToFetch","types","updateConfigsToFetch","setFetchTimeout","fetchTimeout","props","_super","event","target","state","currentSolution","setState","onSolutionUpdated","challenge","__extends","Captcha","React","AriaContext_1","ariaContext","id","className","ref","announce","assertive","text","bew_localization_1","getString","src","onChange","autoFocus","PureComponent","extendStatics","b","setPrototypeOf","__proto__","Array","__","EcsConfigFetchResponse","_responseTime","_responseCode","_fetchAttempts","_hasValidToken","_serverEndpoint","_etag","_fetchDurationValid","_cacheAvailable","_responseSize","_configAge","_configExpired","_fetchStart","_fetchEnd","getEventName","getAttributes","attributes","TelemetryEventBase","Launcher","conv","conversation","sessionId","getCorrelationId","launcher","intentUri","toLowerCase","resource","shortId","universalUri","skypeUri","ALauncher_1","silentLogin","deferral","startTime","Date","getTime","SKYPE","login","Silent","SyncTasks","Defer","init","setCallback","response","skypetoken","resolve","expiration","expires_in","error","reject","errorDescription","error_description","load","promise","done","logger","status","Success","duration","fail","Fail","SilentLoginStatus","CommonProperty","_logger","webjs_sdk_1","getLogger","_commonProperties","_sessionStartDate","_wasLoggedIn","_wasUnifiedView","_prefix","getSessionId","priority","Normal","_log","network","navigation","sessionStarted","wasPreLoggedin","useUnifiedView","sessionIntermediateStep","wasLoggedIn","sessionDurationInMs","DateHelper_1","meetNowFallbackFlow","correlationIdFromQuery","UrlHelper_1","getQueryParameterAsString","setName","eventProperties","setType","setCommonProperties","keys","forEach","piiKind","setPropertyWithPii","setProperty","env","setProperties","properties","propertyPrefix","setPiiProperties","piiProperties","NotSet","type","_onError","message","file","line","col","LoggerHelper","ariaTenantId","prefix","logging","ariaTenant","canSendStatEvent","enableAutoUserSession","onerror","removeEventListener","flushAndTeardown","addEventListener","isGuest","initCommonProperty","UserId","SkypeTokenHelper_1","Identity","String","MsaCidHex","setEventPriority","isArray","logEvent","oldState","launcherKey","doContext","RootView","getParamsFromUrl","getQueryParameters","recipient","correlationId","Source","CorrelationId","skypeId","toString","SharedTypes_1","Call","Chat","params","ErrorHelper_1","Generic","Desktop","webClientUrl","getWebClientUrlWithCorrelationId","assign","CookieHelper_1","getCookie","cookies","csrf","singleValue","DoContext_1","Launcher_1","do","StackNavigationView_1","loading","initialView","DoView_1","onLaunchClick","_onLaunchClick","initialViewProps","eventViewName","ARootView_1","isArrayLike","isObjectLike","require","theme","container","document","getElementById","htmlElement","getElementsByTagName","language","lang","basePath","getAttribute","injectedEntryPoint","injectedSkypetoken","dataRegion","entryPoint","App_1","Meetings","rawTheme","getQueryParameter","values","includes","ReactDOM","render","country","AppActiveData","_isActive","isActive","isAppActive","_appActiveDeferral","waitForAppActive","Resolved","getRandomValues","rnds8","rng","crypto","msCrypto","Error","uuid","test","byteToHex","substr","_nodeId","_clockseq","arr","offset","arguments","TypeError","_lastMSecs","_lastNSecs","options","buf","node","clockseq","seedBytes","random","msecs","now","nsecs","dt","tl","tmh","v","parseInt","generateUUID","namespace","str","unescape","encodeURIComponent","bytes","charCodeAt","stringToBytes","hashfunc","version","err","DNS","URL","getOutputLength","inputLength8","safeAdd","x","y","lsw","md5cmn","q","a","num","cnt","md5ff","md5gg","md5hh","md5ii","v35","msg","input","output","length32","hex","charAt","md5ToHexEncodedArray","len","olda","oldb","oldc","oldd","wordsToMd5","length8","Uint32Array","bytesToWords","rnds","f","z","ROTL","K","H","N","Math","ceil","M","_i","pow","floor","_i2","W","_t","e","_t2","T","form","body","appendChild","submit","createElement","method","style","display","map_1","curry_1","Padder","flex","freeExports","nodeType","freeModule","Buffer","root","allocUnsafe","buffer","isDeep","copy","baseUniq","array","views","current","view","isRoot","parentContext","eventPriority","ariaMessage","prevState","animating","StackNavigationContext_1","animation","None","setTimeout","_track","previous","usedAnimation","pop","__assign","prev","Fade","FadeOut","Slide","SlideOut","visible","fullscreenClassName","_getAnimationStyle","visibility","mainContentId","role","candidate","Overlay","renderPrevView","renderCurrentView","_push","_pop","pushRoot","popRoot","pushParent","popParent","StackNavigationView","LoadingView_1","renderViews","context","createContext","setError","noop_1","clear","Provider","Consumer","faq","skypeCom","downloadUrl","errorInfo","_alternatives","contentLocString","descriptonLocString","linkTextLocString","linkClickHandler","_onFaqClick","_onExploreClick","_onDownloadClick","ErrorBoundary","isDisplayableError","title","pageTitleLocString","ErrorDetails_1","showSkype","_renderAlternatives","children","map","item","index","_renderAlternativeItem","react_1","as","content","description","ConfigContext_1","configContext","onClick","guestName","joinButtonEnabled","stackNavigationContext","meetingContext","errorContext","ecsContext","joinParams","joinButtonSpinEnabled","captchaState","show","_captchaSolution","_joinAsGuest","preventDefault","stopPropagation","ecsSettings","settings","joinAsGuestMeetingsApi","retries","maxRetries","joinThread","useJoinThread","MeetingsApiClient_1","joinAsGuest","flowId","displayName","includesCaptcha","guestUser","GuestRedirect_1","username","catch","newState","statusCode","enrichErrorFromWebResponse","JoinDisabled","InviteNotFound","TooManyUsers","ready","captchaPayload","challengeId","azureRegion","Busy","solutionValue","solution","useMeetingsApi","GuestLogin","_prevProps","_renderTitle","_renderExpirationWarning","_renderInput","Captcha_1","_onCaptchaSolutionUpdated","width","height","size","styles","color","marginTop","weight","EcsContext_1","ErrorContext_1","MeetingContext_1","_renderTosAndPrivacy","_createGuest","disabled","Spinner_1","_updateGuestName","fontSize","marginBottom","placeholder","textAlign","linkPrivacy","linkTerms","background","siteVariables","brand","NestedStackNavigationView_1","LoginMethod_1","Footer_1","dark","LoginView","renderThemeAware","_ecsClient","ecsclient_1","EcsHelper","callback","fallback","clientName","clientVersion","configsToFetch","Models_1","User","Default","hosts","ecs","getEcsParameters","clientId","subscribe","SWG_WebClient","deviceId","localStorage","getItem","deviceIdLocalStorageKey","uuid_1","setItem","instance","GuestRedirect","_autoSubmit","SafariRedirectHelper_1","skype","path","maxAge","domain","client_id","redirect_uri","api","profile","huddle","meetings","invite","channels","captcha","rand","redirectUri","logout","s4lWeb","webSubDomain","inviteId","channelId","botLogin","botId","useBotLauncherQueryParam","loginUri","cookiePolicy","join","origin","fallbackUri","inviteLauncher","offSkypeInviteId","botLauncher","channelLauncher","doLauncher","meetNowJoinLauncher","exp","video","mic","identity","overRest","setToString","func","start","ChannelLauncher","Themes","AppIds","Actions","initSync","locale","localizedTable","I18NBUNDLE","fallbackTable","I18NBUNDLE_FALLBACK","BotInfo","BotsContext_1","botContext","_renderAvatar","botInfo","isTrusted","developer","avatarImage","avatarUrl","objectFit","position","margin","image","allowDesktopSafariGuestFlow","webSubdomainForRedirect","BotLauncher","botSkypeId","Klass","ChannelsContext_1","channelContext","nativeMax","max","transform","args","otherArgs","Component","ChannelsRestClient","genericEventPath","performApiGet","BaseRestClient_1","SubscriptionToken","_event","_callback","unsubscribe","SubscribableEvent","_allowStopPropagation","fire","subs","_subscribers","ret","dispose","concat","filter","BotsRestClient","headers","performApiPut","Promise","u","next","throw","label","sent","trys","ops","return","iterator","console","warn","log","setData","indexOf","getData","C","clipboardData","g","navigator","userAgent","setAttribute","textContent","removeChild","attachShadow","innerText","D","execCommand","E","clipboard","writeText","h","readText","k","w","DT","setDebugLog","suppressWarnings","write","read","success","getSelection","createRange","selectNodeContents","removeAllRanges","addRange","ClipboardEvent","subscribableevent_1","Cache","_cachedConfigs","_a","databaseInterface","dbFetchPromises","_loop_1","this_1","ecsConfig","configsToFetch_1","all","EcsConfigType","getEcsConfigByType","putConfig","oldEcsConfig","currentEcsConfig","putData","SetCache","arrayIncludes","arrayIncludesWith","cacheHas","createSet","setToArray","iteratee","comparator","isCommon","seen","outer","computed","seenIndex","overArg","getPrototypeOf","baseRest","isIterateeCall","assigner","sources","guard","joinLink","ClipboardHelper_1","copyToClipboard","copied","keyCode","_getClickHandler","JoinLink","joinLinkClassName","tabIndex","onKeyDown","_getKeyDownHandler","replace","model","longId","errResp","simplerestclients_1","RetryCountedWithBackoff","DoNotRetry","isMeetingRedirectInProgress","_canJoinOnWebWithSafariException","downloadSkype","primary","eventType","meetNowSettings","JoinHandler_1","getShortIdFromUrl","handleJoinError","GuestLogin_1","isUnauthenticatedFlow","UnifiedLoginMethod","_renderActions","UserContext_1","userContext","canJoinOnWebWithSafariException","_renderAuthenticatedActions","_renderUnauthenticatedActions","renderDownloadButton","renderDesktopBody","ErrorModal_1","assetsBasePath","onClose","userProfile","_renderAccounts","_renderWhatsThis","email","emails","firstname","lastname","currentAccountAvatar","currentAccountText","vertical","end","currentAccount","_joinOnWeb","main","otherAccountIcon","backgroundColor","borderRadius","padding","otherAccountText","otherAccount","_joinOnWebOtherAccount","_renderDataProcessingStatement","_joinOnWebAsGuest","learnMoreLink","refundLink","privacyStatementLink","_renderTextWithLink","linkUrl","linkClickTelemetryLoggerAction","baseAssignValue","eq","objValue","componentStyles","Button","isAddBotInProgress","isAddedAsContact","isLoginInProgress","_getBotIdFromUrl","BotNotFound","BotId","_getBotInfo","prevProps","_isLoading","AddBotView_1","onProgress","handleAddBotViewProgress","onAdd","handleAddBotViewAdd","onError","handleAddBotViewError","BotsRestClient_1","getBotInfo","Rejected","pathname","split","UrlHelper","getWebClientUrl","allowedParameters","param","pair","search","decodeURIComponent","reduce","ShortIdFromUrl","ErrorModal","react_2","determineIsItUnifiedView","MeetNowSettings_1","UnifiedView_1","Mobile","JoinView_1","_getShortIdFromUrl","legacyMobileFlowView","useNewMobileJoinFlow","loadConversationFromMeetingsApi","loadConversationFromHuddleApi","loadingConversation","_silentLoginStatus","silentLoginNotSupported","Skipped","Started","loadConversation","Ended","_preRequisitesLoadCompleted","isLoading","getLoginView","unifiedViewEcsSettings","HuddleApiClient_1","getConversation","ThreadId","GenericData","nativeKeysIn","isProto","merge","createAssigner","meeting","ShortId","addSkypeIdAndMsaCidHexCommonProperties","createGuestMeeting","DefaultMeetingTitle","MeetNowEdgeNumberOfFetchRetries","localizedGuestDefaultName","_b","meetnowGuest","loginResult","createAuthenticatedMeeting","SkypeToken","conversion","conversationServiceModel","meetnowGuestServiceModel","isNewJoinFlowFromJoinLink","webClientRedirectParams","skypeid","msacidhex","High","queryParams","MeetNowEdgeAllowedQueryParameters","RedirectHelper_1","fallbackCorrelationId","getAllowedQueryParameters","find","triggerFallbackFlow","reason","showErrorMessage","handleReloadButton","handleNavigateToWebClientButton","pageTitle","querySelector","fallbackSection","reloadPageButton","reload","goToSkypeButton","cloneBuffer","cloneTypedArray","copyArray","initCloneObject","isArguments","isArrayLikeObject","isBuffer","isFunction","isPlainObject","isTypedArray","toPlainObject","mergeFunc","stacked","isArr","isBuff","isTyped","secondaryButtonTransparentStyle","LoginMethod","parseSkypeToken","token","parts","header","JSON","parse","atob","payload","signature","tokenContent","cid","toUpperCase","getSkypeIdFromUrl","Profile","profilesContext","ProfilesContext_1","ProfileView_1","channelInfo","iconUrl","getInitials","_getInitials","words","substring","open","ChannelViewKlass","Header_1","Padder_1","renderHeader","renderChannelDetails","renderControls","renderMobileBody","renderAvatar","renderIsCertified","renderTitle","renderFollowers","renderDescription","_getAvatarContent","formatter","Intl","NumberFormat","getLocale","notation","followers","followers_count","format","_downloadSkype","download_skype","textDecoration","withChannelsContext_1","ViewType","AnimationType","Fullscreen","noop","isComponentMounted","shortIdLength","ChannelNotFound","ChannelsApiClient_1","getChannelInfo","channel","_safeSetState","ChannelId","ChannelLauncher_1","ChannelView_1","Config","baseGetTag","funcProto","Function","objectProto","funcToString","objectCtorString","proto","Ctor","lastResponseTime","currentRequestTime","TelemetryEvents","EcsFetcher","_getUserConfig","parameters","_apiPath","paramList","_blockRequestUntil","isSkypeTokenValid","isBackgroundFetchAllowed","race","waitForBackgroundFetchAllowed","waitForValidSkypeToken","_getHeaders","getSkypeToken","timeout","performApiGetDetailed","GenericRestClient","_ecsFailureBackoffTimer","ExponentialTime","_cacheMaxAgeRegex","_serverIndex","NaN","oldConfig","userConfig","isNaN","deferred","fetchAttempts","callConfigServer","etag","eTag","fetcher","res","eTagHeader","expirationHeader","Headers","ETag","Expires","stringify","ecsData","updatedExpiration","_calculateExpirationDate","cacheUpdateTime","lastFetchTokenHash","getSkypeTokenHash","requestHeaders","appVersion","fetchDelayMs","fetchDurationValid","cacheAge","sendTelemetryEvent","reset","getTimeAndCalculateNext","forceFetchTime","responseDate","clockSkew","headerExpirationTime","min","match","exec","lastIndex","Number","inviteContext","inviterSkypeId","InviteView","InviteContext_1","user_name","inviterName","clientSource","ClientSource","InviterName","InviterSkypeId","LongId","colors","brand02","brand04","brand06","brand08","brand12","brand14","brand16","brandIcon","unwrap","resp","contentType","acceptType","customPropertiesProvider","endTime","responseUrl","_endpointUrl","eventUrl","responseTime","statusText","host","custom","BaseRestClient","apiPath","networkCallback","objToPost","performApiPostDetailed","objToPatch","performApiPatchDetailed","objToPut","performApiPutDetailed","objToDelete","performApiDeleteDetailed","Set","AllowBackgroundFetchData","_isAllowed","isAllowed","_isAllowedDeferral","LoadingView","CookieHelper","hasCookie","cookieValuesObject","round","TS","TM","cookieObjectToString","getExpirationDate","toUTCString","optionsString","cookie","setCookie","separatorPos","trim","parseCookieValues","cookieObject","cookieSeparator","cookieObjectKeys","cookieValue","cookieObjectKey","splitCookieValue","splitParams","seconds","MeetingsApiClient","performApiPost","customErrorHandler","MeetingsApiClientUtils_1","createMeeting","RestClient_1","Scheduler","appActiveData","allowBackgroundFetchData","telemetryManager","_isFetchingSettings","_pendingFetch","_paused","_fetchEcsSettingsIfNeeded","cachedConfig","configExpirationMs","_fetchSkypeEcsSettings","bypassPause","skypeTokenChanged","_c","cachedData","allowedQueryParameters","currentSettings","MeetNowSettings","MeetNowEdgeAriaTenantId","MeetNowEdgeJoinApiHost","rootElement","dataset","parsedSettings","childProps","NestedStackNavigationView","_renderNested","_","UnifiedLoginMethod_1","UnifiedView","ClipboardHelper","copyObject","TelemetryManager","eventName","eventData","telemetryEnabled","clientTelemetryConfig","_containsEcsClientTelemetryConfig","ECSCONFIG","ecsClientTelemetry","assignValue","isNew","DomHelper","currentTarget","click","element","focus","EntryPoint","setCookieValue","ProfileRestClient_1","getUserProfileInfo","SkypeId","loadingTranslations","loadingEcs","switchLanguage","_switchLanguage","merge_1","localThemes","common","Teams","teams","light","_canUseSilentLogin","_setErrorContext","_clearErrorContext","_announce","App","Safari","head","innerHTML","LocalizerHelper_1","silentLoginPromise_1","SilentLoginHelper_1","_getProfileAsync","raceTimer","timedOut","cancel","_startLoadingEcs","htmlFontSize","ErrorBoundary_1","AriaLive_1","_getRootView","_renderErrorPortal","trapFocus","isClickableOutsideFocusTrap","_renderErrorPortalContent","EcsHelper_1","loadConfig","Boolean","_determineIsItUnifiedView","quickJoinFlowSupportedBrowsers","updateEnvironmentSettings","_d","_e","_f","Bots","RootView_5","Invites","RootView_4","RootView_1","Channels","RootView_2","Do","RootView_3","Profiles","RootView_6","spinner","keyframe","from","to","iterationCount","viewBox","xmlns","fill","fillRule","strokeLinecap","stroke","strokeWidth","Spinner","animations","arrayLikeKeys","baseKeysIn","isIndex","Action","FlowId","Id","Resource","HuddleApiClient","OffSkypeInviteServiceModel_1","AriaLive","AddBotView","BotInfo_1","botsContext","_renderBotAddedContent","_renderBotAddPromptContent","showOnlyLegalInfo","addAsContactAllowed","_renderAddButton","_renderBotDetails","BotLauncher_1","_addBotToContacts","privacyAndTos","privacyStatement","tos","_renderCapabilities","capabilities","botCapabilities","capabilitiestoLocStringMap","uniqueLocalizedCapabilities","uniq_1","cap","localizer","addBotToContacts","BotTooManyContacts","_redirectToLogin","useBotsLauncherQueryParam","isIOSInAppBrowserFlow","JoinView","DownloadSkypeHelper_1","LoginView_1","joinMeeting","_isFallbackFlow","JoinLink_1","renderLogo","headerLocString","descriptionLocString","emoticonPath","InviteIdFromUrl","ErrorHelper","arg","displayableError","webResponse","getErrorFromWebErrorResponse","joinLinkRegex","MeetNowEdgeHandler_1","redirectParams","guestUserServiceModel","normalizedJoinLink","joinLinkDomain","trimmedJoinLink","startsWith","startDate","endDate","valueOf","DoView","renderBody","defaultEmptyOption","option","selectedCountry","searchOption","selected","focused","el","_domReference","setFocus","Select","nextProps","wrapperAdditionalClass","ariaLabel","_onChange","_autoFocus","onFocus","_onFocus","onBlur","_onBlur","renderOptions","launchUrl","_getLauncherUrl","ALauncher","_getLoggerAction","ErrorDetails","convertToGenericDisplayableError","_debounce","clearTimeout","_updateDimension","browserSupportDimension","_browserSupportElement","clientHeight","clientWidth","Header","_updateDimensionDebouncer","list_supported_browser","Win","WinRT","Linux","minHeight","_setBrowserSupport","onLoad","alignSelf","marginLeft","renderJoinOnWebDisclaimer","SkypeTokenData","initialData","_data","_validSkypeTokenDeferral","tokenData","mem","languages","matchingLanguage","_footerElement","footerDimension","Footer","separator","_setElement","Select_1","_changeLanguage","_selectedLanguage","YEAR","getFullYear","getOffSkypeInvite","OffSkypeInvites","InviteSkypeId","InviteView_1","OperatingSystems","Browsers","osRegExps","WinPhone","iOS","ChromeOS","DeviceTypes","browserRegExps","Opera","EdgeOld","Edge","MSIE","Chrome","Firefox","Facebook","EnvironmentHelper","minimumVersion","getBrowserName","getSafariBrowserVersion","major","minor","iOSVersionMatches","_uaParser","getUA","RegExp","osInformation","getOS","detectedOs","_getOsFallback","maxTouchPoints","browserName","getBrowser","_getBrowserNameFallback","bugfix","isSafariBrowserVersionAtLeast","Ubuntu","AndroidX86","Unknown","WebOS","Tizen","Other","_currentBrowserSupportsQuickJoinOnWeb","_screen","screen","_navigator","userLanguage","_os","_browser","knownInAppBrowsers","android","Chromium","Yandex","ios","SafariMobile","mac","windows","others","customUaParser","_quickJoinFlowSupportedBrowsers","ua_parser_js_1","getSupportedBrowsersDefault","currentBrowser","currentOs","supportedBrowsers","osKey","browserKey","getDeviceType","isQuickWebJoinSupported","getScreenResolution","getLanguage","platform","isSafariBrowserEligibleForMeetingGuestFlow","cloneArrayBuffer","typedArray","byteOffset","ecsDefaults","ProfileView","fontWeight","locals","ancestorElement","loginDomains","ssoLoginDomains","originCheckMap","iFrameReference","timeoutObj","originCheckHosts","eventRegistered","processing","logEnabled","_messageListener","_destroySilentLogin","_callCallback","_handleTimeout","_getFrameSource","qa","live","isSsoCompatible","debug","tokens","prop","originCheckPassed","ex","receivedState","attr","timestamp","domainMap","query","response_type","partner","_accept","_nc","_createQuery","attachEvent","callbackFunction","protocol","_validateSettings","frameBorder","getSkypetoken","getFullResponse","ProfileRestClient"],"mappings":"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","file":"js/meetings.8ce98f72c44966346e74.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://join.secure.skypeassets.com/static/14.475\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([\"3rxE\",0,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import config, { Config, CookieConfig } from '../BaseConfig';\r\n\r\nconst override: Partial = {\r\n};\r\n\r\n// Export here should mirror parent, so webpack can do his magic with alias\r\nexport { Config, CookieConfig };\r\nexport default { ...config, ...override };\r\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","import config from 'config';\r\nimport { OperatingSystems, os } from './EnvironmentHelper';\r\nimport { logger } from './LoggerHelper';\r\n\r\nexport const downloadSkype = (threadId?: string) => {\r\n return () => {\r\n logger.action({ name: 'download' });\r\n logger.sessionFinished({completionType: 'DownloadSkypeButton'});\r\n\r\n let url: string;\r\n if (os === OperatingSystems.Android) {\r\n url = config.urls.app.downloadAndroid(threadId);\r\n } else if (os === OperatingSystems.MacOS) {\r\n url = config.urls.app.downloadDesktop;\r\n } else {\r\n url = config.urls.app.download;\r\n }\r\n\r\n window.location.href = url;\r\n };\r\n};\r\n","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn'),\n safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n","\"use strict\";\r\n/**\r\n*\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* ECS Module\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar AllowBackgroundFetchData_1 = require(\"./AllowBackgroundFetchData\");\r\nvar AppActiveData_1 = require(\"./AppActiveData\");\r\nvar Cache_1 = require(\"./Cache\");\r\nvar Config_1 = require(\"./Config\");\r\nvar Models = require(\"./Models\");\r\nexports.Models = Models;\r\nvar Scheduler_1 = require(\"./Scheduler\");\r\nvar SkypeTokenData_1 = require(\"./SkypeTokenData\");\r\nvar TelemetryManager_1 = require(\"./TelemetryManager\");\r\nvar EcsClient = /** @class */ (function () {\r\n function EcsClient() {\r\n this._allowBackgroundFetchData = new AllowBackgroundFetchData_1.default();\r\n this._appActiveData = new AppActiveData_1.default();\r\n this._config = new Config_1.default();\r\n this._cache = new Cache_1.default(this._config);\r\n this._skypeTokenData = new SkypeTokenData_1.default();\r\n this._telemetryManager = new TelemetryManager_1.default(this._cache);\r\n this._scheduler = new Scheduler_1.default(this._config, this._skypeTokenData, this._cache, this._appActiveData, this._allowBackgroundFetchData, this._telemetryManager);\r\n // Typescript 3.X has started inlining type requires for inferred type-only imports if the import isn't used elsewhere in the file\r\n // Older versions of typescript do not support this so specify it here for backwards definition file compatibility\r\n this.telemetryEventAdded = this._telemetryManager.telemetryEventAdded;\r\n this.configUpdated = this._cache.configUpdated;\r\n }\r\n EcsClient.prototype.initialize = function (config) {\r\n var _this = this;\r\n this._config.initialize(config);\r\n this._skypeTokenData.putSkypeTokenData(config.initialSkypeTokenData);\r\n this._appActiveData.putAppActive(config.initialAppActiveState);\r\n return this._cache.initialize().then(function () {\r\n _this._scheduler.initialize();\r\n });\r\n };\r\n EcsClient.prototype.getConfig = function () {\r\n return this._cache.getEcsConfig();\r\n };\r\n EcsClient.prototype.getConfigType = function () {\r\n var cacheConfig = this._cache.getEcsConfig();\r\n if (!cacheConfig) {\r\n return undefined;\r\n }\r\n return cacheConfig.configType;\r\n };\r\n EcsClient.prototype.requestUpdate = function () {\r\n this._scheduler.requestUpdate();\r\n };\r\n EcsClient.prototype.pause = function () {\r\n this._scheduler.pause();\r\n };\r\n EcsClient.prototype.resume = function () {\r\n this._scheduler.resume();\r\n };\r\n EcsClient.prototype.setAllowBackgroundFetch = function (allowBackgroundFetch) {\r\n this._allowBackgroundFetchData.putBackgroundFetchAllowed(allowBackgroundFetch);\r\n };\r\n EcsClient.prototype.useSkypeToken = function (skypeToken, skypeTokenExpiration) {\r\n this._skypeTokenData.putSkypeTokenData({ skypeToken: skypeToken, skypeTokenExpiration: skypeTokenExpiration });\r\n };\r\n EcsClient.prototype.setAppActive = function (active) {\r\n this._appActiveData.putAppActive(active);\r\n };\r\n EcsClient.prototype.setConfigsToFetch = function (types) {\r\n var _this = this;\r\n this._config.setConfigsToFetch(types);\r\n return this._cache.updateConfigsToFetch().then(function () {\r\n _this._scheduler.updateConfigsToFetch();\r\n });\r\n };\r\n EcsClient.prototype.setFetchTimeout = function (fetchTimeout) {\r\n this._config.setFetchTimeout(fetchTimeout);\r\n };\r\n return EcsClient;\r\n}());\r\nexports.default = EcsClient;\r\n","import { localizer } from '@skype/bew-localization';\r\nimport * as React from 'react';\r\nimport { AriaContextConsumer } from 'src/ts/contexts/AriaContext';\r\n\r\nexport interface CaptchaSolution {\r\n solution: string; // \"dhjdprwgyn\",\r\n challengeId: string;\r\n azureRegion: string;\r\n}\r\n\r\nexport interface CaptchaProps {\r\n challengeId: string;\r\n challenge: string;\r\n azureRegion: string;\r\n onSolutionUpdated: (solutionValue: string) => void;\r\n}\r\n\r\nexport interface CaptchaState {\r\n currentSolution: string;\r\n}\r\n\r\nexport class Captcha extends React.PureComponent {\r\n private challenge: string;\r\n constructor(props: CaptchaProps) {\r\n super(props);\r\n this.state = {\r\n currentSolution: '',\r\n };\r\n this.challenge = props.challenge;\r\n }\r\n\r\n render() {\r\n return <>\r\n { (ariaContext) =>\r\n
{\r\n ariaContext.announce({ assertive: true, text: localizer.getString('Common.a11y_announce_captcha') });\r\n } }>\r\n \r\n \r\n
\r\n
\r\n }
\r\n ;\r\n }\r\n\r\n private onSolutionUpdated = (event: React.ChangeEvent) => {\r\n const newValue = event.target.value;\r\n if (newValue !== this.state.currentSolution) {\r\n this.setState({\r\n currentSolution: newValue,\r\n });\r\n this.props.onSolutionUpdated(newValue);\r\n }\r\n }\r\n}\r\n","\"use strict\";\r\n/**\r\n* TelemetryEvents.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* All the ECS client telemetry events\r\n*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar TelemetryEventBase_1 = require(\"./TelemetryEventBase\");\r\nvar EcsConfigFetchResponse = /** @class */ (function (_super) {\r\n __extends(EcsConfigFetchResponse, _super);\r\n function EcsConfigFetchResponse(_responseTime, _responseCode, _fetchAttempts, _hasValidToken, _serverEndpoint, _etag, _fetchDurationValid, _cacheAvailable, _responseSize, _configAge, _configExpired, _fetchStart, _fetchEnd) {\r\n var _this = _super.call(this) || this;\r\n _this._responseTime = _responseTime;\r\n _this._responseCode = _responseCode;\r\n _this._fetchAttempts = _fetchAttempts;\r\n _this._hasValidToken = _hasValidToken;\r\n _this._serverEndpoint = _serverEndpoint;\r\n _this._etag = _etag;\r\n _this._fetchDurationValid = _fetchDurationValid;\r\n _this._cacheAvailable = _cacheAvailable;\r\n _this._responseSize = _responseSize;\r\n _this._configAge = _configAge;\r\n _this._configExpired = _configExpired;\r\n _this._fetchStart = _fetchStart;\r\n _this._fetchEnd = _fetchEnd;\r\n return _this;\r\n }\r\n EcsConfigFetchResponse.prototype.getEventName = function () {\r\n return 'ecs_tsclient_fetch_config';\r\n };\r\n EcsConfigFetchResponse.prototype.getAttributes = function () {\r\n var attributes = _super.prototype.getAttributes.call(this);\r\n attributes['fetch_delay_ms'] = this._responseTime;\r\n attributes['fetch_response_code'] = this._responseCode;\r\n attributes['fetch_attempts'] = this._fetchAttempts;\r\n attributes['authenticated_user'] = this._hasValidToken;\r\n attributes['url'] = this._serverEndpoint;\r\n attributes['fetched_etag'] = this._etag;\r\n attributes['fetch_duration_valid'] = this._fetchDurationValid;\r\n attributes['cache_available'] = this._cacheAvailable;\r\n attributes['response_size'] = this._responseSize;\r\n attributes['config_age'] = this._configAge;\r\n attributes['config_expired'] = this._configExpired;\r\n attributes['fetch_start'] = this._fetchStart;\r\n attributes['fetch_end'] = this._fetchEnd;\r\n return attributes;\r\n };\r\n return EcsConfigFetchResponse;\r\n}(TelemetryEventBase_1.TelemetryEventBase));\r\nexports.EcsConfigFetchResponse = EcsConfigFetchResponse;\r\n","import config from 'config';\r\nimport { Actions } from 'src/ts/models/SharedTypes';\r\nimport { isIOSInAppBrowserFlow, OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { logger } from '../../helpers/LoggerHelper';\r\nimport { ConversationServiceModel } from '../../models/ConversationServiceModel';\r\nimport { ALauncher } from '../common/ALauncher';\r\n\r\ninterface LauncherProps {\r\n conversation: ConversationServiceModel;\r\n}\r\n\r\nexport class Launcher extends ALauncher {\r\n\r\n protected _getLauncherUrl() {\r\n const conv = this.props.conversation;\r\n const sessionId = logger.getCorrelationId();\r\n\r\n if (os === OperatingSystems.Android) {\r\n return config.urls.launcher.intentUri(\r\n conv.action.toLowerCase() as Actions,\r\n conv.resource,\r\n sessionId,\r\n 'launcher',\r\n config.urls.app.downloadAndroid(conv.resource));\r\n } else if (isIOSInAppBrowserFlow && conv.shortId) {\r\n return config.urls.launcher.universalUri(conv.shortId, sessionId);\r\n }\r\n\r\n return config.urls.launcher.skypeUri(conv.action.toLowerCase() as Actions, conv.resource, sessionId, 'launcher');\r\n }\r\n\r\n protected _getLoggerAction() {\r\n return 'join';\r\n }\r\n}\r\n","import config from 'config';\r\nimport * as SyncTasks from 'synctasks';\r\nimport { logger, SilentLoginStatus } from './LoggerHelper';\r\n\r\nexport interface SilentLoginResult {\r\n skypetoken: string;\r\n expiration: number;\r\n}\r\n\r\nexport const silentLoginAsync = () => {\r\n const initLogin = (): SyncTasks.Promise => {\r\n\r\n const silentLogin = (window as any).SKYPE.login.Silent;\r\n const deferral = SyncTasks.Defer();\r\n\r\n silentLogin.init(config.silentLogin)\r\n .setCallback((response: any) => {\r\n if (response && response.skypetoken) {\r\n deferral.resolve({ skypetoken: response.skypetoken, expiration: response.expires_in });\r\n return;\r\n }\r\n if (response && response.error) {\r\n deferral.reject({ error: response.error, errorDescription: response.error_description || '' });\r\n return;\r\n }\r\n deferral.reject();\r\n })\r\n .load();\r\n\r\n return deferral.promise();\r\n };\r\n\r\n const startTime = new Date().getTime();\r\n\r\n return initLogin()\r\n .done(() => logger.silentLogin({ status: SilentLoginStatus.Success, duration: new Date().getTime() - startTime }))\r\n .fail((response) => logger.silentLogin({\r\n status: SilentLoginStatus.Fail,\r\n duration: new Date().getTime() - startTime,\r\n error: response.error,\r\n errorDescription: response.errorDescription,\r\n }));\r\n};\r\n","import { AWTEventPriority, AWTEventProperties, AWTLogger, AWTLogManager, AWTPiiKind, AWTPropertyType } from '@aria/webjs-sdk';\r\nimport Config from 'config';\r\nimport { Dictionary } from '../models/SharedTypes';\r\nimport { getDiffInMS } from './DateHelper';\r\nimport { browser, deviceType, os } from './EnvironmentHelper';\r\nimport { getMsaCidHexFromSkypeToken, getSkypeIdFromSkypeToken } from './SkypeTokenHelper';\r\nimport { UrlHelper } from './UrlHelper';\r\n\r\nexport interface NetworkEvent {\r\n host: string;\r\n path: string;\r\n url: string;\r\n method: string;\r\n statusCode: number;\r\n statusText?: string;\r\n responseTime: number;\r\n custom?: any;\r\n}\r\n\r\nexport type NavigationEventType = 'push' | 'pop';\r\nexport interface NavigationEvent {\r\n view: string;\r\n type: NavigationEventType;\r\n isRoot: boolean;\r\n}\r\n\r\nexport interface SessionStartedEvent {\r\n useUnifiedView: boolean;\r\n wasPreLoggedin: boolean;\r\n}\r\n\r\nexport interface SessionFinishedEvent {\r\n useUnifiedView?: boolean;\r\n sessionDurationInMs?: number;\r\n completionType: string;\r\n wasLoggedIn?: boolean;\r\n}\r\n\r\nexport interface SessionIntermediateEvent {\r\n useUnifiedView?: boolean;\r\n wasLoggedIn?: boolean;\r\n eventType: string;\r\n}\r\n\r\nexport interface ActionEvent {\r\n name: string;\r\n}\r\n\r\nexport enum SilentLoginStatus {\r\n Success = 'success',\r\n Fail = 'fail',\r\n}\r\nexport interface SilentLoginEvent {\r\n status: SilentLoginStatus;\r\n duration: number;\r\n error?: string;\r\n errorDescription?: string;\r\n}\r\n\r\nexport interface FallbackFlowEvent {\r\n message: string;\r\n reason: string;\r\n}\r\n\r\nconst defaultPrefix = 'ui_';\r\n\r\nexport enum CommonProperty {\r\n SkypeId = 'UserInfo.SkypeId',\r\n ThreadId = 'Meeting.ThreadId',\r\n ShortId = 'Meeting.ShortId',\r\n InviteSkypeId = 'Invite.SkypeId',\r\n BotId = 'Bot.BotId',\r\n ChannelId = 'Channel.ChannelId',\r\n EntryPoint = 'Page.EntryPoint',\r\n CorrelationId = 'Page.CorrelationId',\r\n Source = 'Page.Source',\r\n Profile = 'Profile.SkypeId',\r\n IsLoggedIn = 'UserInfo.IsLoggedIn',\r\n UserId = 'UserInfo.Id',\r\n MsaCidHex = 'MSACIDHEX',\r\n IsUnsupportedPlatformOrBrowser = 'IsUnsupportedPlatformOrBrowser',\r\n}\r\n\r\nexport interface Property {\r\n key: CommonProperty;\r\n value: string | number | boolean | Date;\r\n piiKind?: AWTPiiKind;\r\n type?: AWTPropertyType;\r\n}\r\n\r\nclass LoggerHelper {\r\n private _logger: AWTLogger = AWTLogManager.getLogger();\r\n private _commonProperties: Dictionary = {};\r\n private _sessionStartDate: Date = new Date();\r\n private _wasLoggedIn: boolean = false;\r\n private _wasUnifiedView: boolean = false;\r\n private _prefix: string = defaultPrefix;\r\n\r\n init(ariaTenantId = Config.logging.ariaTenant, prefix?: string) {\r\n if (prefix) {\r\n this._prefix = prefix;\r\n }\r\n\r\n AWTLogManager.initialize(ariaTenantId, {\r\n canSendStatEvent: () => false,\r\n enableAutoUserSession: true,\r\n });\r\n\r\n window.onerror = this._onError;\r\n\r\n // Current implementation of the flushAndTeardown method has wrong context when used as callback\r\n // therefore asynchronous pending events would be lost, let's fix it\r\n window.removeEventListener('beforeunload', AWTLogManager.flushAndTeardown);\r\n window.addEventListener('beforeunload', AWTLogManager.flushAndTeardown.bind(AWTLogManager));\r\n }\r\n\r\n getSessionId = () => this._logger.getSessionId();\r\n\r\n public initCommonProperty(property: Property) {\r\n this._commonProperties[property.key] = property;\r\n }\r\n\r\n public addSkypeIdAndMsaCidHexCommonProperties(skypeToken: string | undefined, isGuest: boolean) {\r\n this.initCommonProperty({\r\n key: CommonProperty.UserId,\r\n value: getSkypeIdFromSkypeToken(skypeToken) || '',\r\n piiKind: isGuest ? AWTPiiKind.NotSet : AWTPiiKind.Identity, // guest skypeId is not considered PII as it's anonymous and valid for 24 hours\r\n type: AWTPropertyType.String,\r\n });\r\n\r\n this.initCommonProperty({\r\n key: CommonProperty.MsaCidHex,\r\n value: getMsaCidHexFromSkypeToken(skypeToken) || '',\r\n piiKind: AWTPiiKind.NotSet,\r\n type: AWTPropertyType.String,\r\n });\r\n }\r\n\r\n error = (event: Error, priority: AWTEventPriority = AWTEventPriority.Normal) => {\r\n this._log(event, priority, 'error', 'Error');\r\n }\r\n\r\n network = (event: NetworkEvent, priority: AWTEventPriority = AWTEventPriority.Normal) => {\r\n this._log(event, priority, 'network_event', 'Network');\r\n }\r\n\r\n navigation = (event: NavigationEvent, priority: AWTEventPriority = AWTEventPriority.Normal) => {\r\n this._log(event, priority, 'navigation', 'Navigation');\r\n }\r\n\r\n action = (event: ActionEvent, priority: AWTEventPriority = AWTEventPriority.Normal) => {\r\n this._log(event, priority, 'action', 'Action');\r\n }\r\n\r\n silentLogin = (event: SilentLoginEvent, priority: AWTEventPriority = AWTEventPriority.Normal) => {\r\n this._log(event, priority, 'silent_login', 'SilentLogin');\r\n }\r\n\r\n sessionStarted = (event: SessionStartedEvent, priority: AWTEventPriority = AWTEventPriority.Normal) => {\r\n this._sessionStartDate = new Date();\r\n this._wasLoggedIn = event.wasPreLoggedin;\r\n this._wasUnifiedView = event.useUnifiedView;\r\n this._log(event, priority, 'session_started', 'SessionStarted');\r\n }\r\n\r\n sessionIntermediateStep = (event: SessionIntermediateEvent, priority: AWTEventPriority = AWTEventPriority.Normal) => {\r\n event.wasLoggedIn = event.wasLoggedIn === undefined ? this._wasLoggedIn : event.wasLoggedIn;\r\n event.useUnifiedView = this._wasUnifiedView;\r\n this._log(event, priority, 'session_intermediate', 'SessionIntermediateEvent');\r\n }\r\n\r\n sessionFinished = (event: SessionFinishedEvent, priority: AWTEventPriority = AWTEventPriority.Normal) => {\r\n event.sessionDurationInMs = getDiffInMS(this._sessionStartDate);\r\n event.wasLoggedIn = this._wasLoggedIn;\r\n event.useUnifiedView = this._wasUnifiedView;\r\n\r\n this._log(event, priority, 'session_finished', 'SessionFinished');\r\n }\r\n\r\n meetNowFallbackFlow = (event: FallbackFlowEvent) => {\r\n this._log(event, AWTEventPriority.Normal, 'fallback_flow_started', 'FallbackFlowStarted');\r\n }\r\n\r\n getCorrelationId = () => {\r\n const correlationIdFromQuery = UrlHelper.getQueryParameterAsString('correlationId');\r\n if (correlationIdFromQuery) {\r\n return correlationIdFromQuery;\r\n }\r\n\r\n return this.getSessionId();\r\n }\r\n\r\n private setName = (eventProperties: AWTEventProperties, name: string) => {\r\n eventProperties.setName(this._prefix + name);\r\n eventProperties.setType(name);\r\n }\r\n\r\n private setCommonProperties = (eventProperties: AWTEventProperties) => {\r\n Object.keys(this._commonProperties).forEach((key) => {\r\n const property = (this._commonProperties as any)[key] as Property;\r\n if (property.piiKind) {\r\n eventProperties.setPropertyWithPii(property.key, property.value, property.piiKind);\r\n } else {\r\n eventProperties.setProperty(property.key, property.value);\r\n }\r\n });\r\n eventProperties.setProperty('DeviceInfo.Custom.Os', os);\r\n eventProperties.setProperty('DeviceInfo.Custom.Browser', browser);\r\n eventProperties.setProperty('DeviceInfo.Custom.DeviceType', deviceType);\r\n eventProperties.setProperty('Config.Env', Config.env);\r\n eventProperties.setProperty('Source', UrlHelper.getQueryParameterAsString('source'));\r\n eventProperties.setProperty('Exp', UrlHelper.getQueryParameterAsString('exp'));\r\n eventProperties.setProperty('Call', UrlHelper.getQueryParameterAsString('call'));\r\n eventProperties.setProperty('Video', UrlHelper.getQueryParameterAsString('video'));\r\n eventProperties.setProperty('Mic', UrlHelper.getQueryParameterAsString('mic'));\r\n eventProperties.setProperty('CorrelationId', this.getCorrelationId());\r\n eventProperties.setProperty('session_id', this.getCorrelationId()); // this is used as an actor in Interana\r\n }\r\n\r\n private setProperties = (eventProperties: AWTEventProperties, properties: any, propertyPrefix: string) => {\r\n Object.keys(properties).forEach((property) => {\r\n if (typeof properties[property] === 'object' && properties[property]) {\r\n this.setProperties(eventProperties, properties[property], propertyPrefix + '.' + property);\r\n } else {\r\n eventProperties.setProperty(propertyPrefix + '.' + property, properties[property]);\r\n }\r\n });\r\n }\r\n\r\n private setPiiProperties = (eventProperties: AWTEventProperties, piiProperties: Property[], propertyPrefix: string) => {\r\n piiProperties.forEach((property: Property) => {\r\n eventProperties.setPropertyWithPii(propertyPrefix + '.' + property.key, property.value, property.piiKind || AWTPiiKind.NotSet, property.type);\r\n });\r\n }\r\n\r\n private _onError = (message: any, file: any, line: any, col: any, error: any) => {\r\n this._log({\r\n message,\r\n file,\r\n line,\r\n col,\r\n error,\r\n }, AWTEventPriority.Normal, 'js_onerror', 'Error');\r\n }\r\n\r\n private _log(event: any, priority: AWTEventPriority, name: string, propertyPrefix: string, piiProperties?: Property[]) {\r\n const eventProperties = new AWTEventProperties();\r\n eventProperties.setEventPriority(priority);\r\n this.setName(eventProperties, name);\r\n this.setCommonProperties(eventProperties);\r\n this.setProperties(eventProperties, event, propertyPrefix);\r\n\r\n if (piiProperties && Array.isArray(piiProperties)) {\r\n this.setPiiProperties(eventProperties, piiProperties, propertyPrefix);\r\n }\r\n\r\n this._logger.logEvent(eventProperties);\r\n }\r\n}\r\n\r\nexport const logger = new LoggerHelper();\r\n","import config from 'config';\r\nimport * as React from 'react';\r\nimport { DoContext, DoContextProvider } from 'src/ts/contexts/do/DoContext';\r\nimport { CookieHelper } from 'src/ts/helpers/CookieHelper';\r\nimport { displayableErrors } from 'src/ts/helpers/ErrorHelper';\r\nimport { Actions } from 'src/ts/models/SharedTypes';\r\nimport { AriaContextConsumer } from '../../contexts/AriaContext';\r\nimport { deviceType, DeviceTypes } from '../../helpers/EnvironmentHelper';\r\nimport { CommonProperty, logger } from '../../helpers/LoggerHelper';\r\nimport { UrlHelper } from '../../helpers/UrlHelper';\r\nimport { ARootView, ARootViewProps } from '../common/ARootView';\r\nimport { StackNavigationView } from '../common/StackNavigationView';\r\nimport { DoView } from './DoView';\r\nimport { Launcher } from './Launcher';\r\n\r\nexport interface RootViewState {\r\n launcherKey: number;\r\n doContext: DoContext;\r\n error?: Error | undefined;\r\n}\r\n\r\nexport class RootView extends ARootView {\r\n\r\n static getParamsFromUrl() {\r\n const { recipient, action, correlationId, source } = UrlHelper.getQueryParameters();\r\n\r\n logger.initCommonProperty({\r\n key: CommonProperty.Source,\r\n value: source as string,\r\n });\r\n logger.initCommonProperty({\r\n key: CommonProperty.CorrelationId,\r\n value: correlationId as string,\r\n });\r\n\r\n // S4L handle all of 'skype:8:myskypeid', 'skype:myskypeid', 'skype:19:mythreadid'\r\n // Thread will only work if '19:' prefix is provided.\r\n // Original spec does not say anything about ThreadId #564363, and also the page we are rewriting does not prepend '19:' suffix\r\n // Also, original implementation does not populate utm properties as specified in PBI. We also drop it because there is no handling on S4L level.\r\n return {\r\n skypeId: recipient,\r\n action: !action || action.toString().toLowerCase() === 'chat' ? Actions.Chat : Actions.Call,\r\n } as DoContext;\r\n }\r\n\r\n constructor(props: ARootViewProps) {\r\n super(props);\r\n this.state = {\r\n launcherKey: 0,\r\n doContext: RootView.getParamsFromUrl(),\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const params = RootView.getParamsFromUrl();\r\n if (!params.action || !params.skypeId) {\r\n throw displayableErrors.Generic;\r\n }\r\n\r\n if (deviceType === DeviceTypes.Desktop) {\r\n logger.action({ name: 'join-do' });\r\n\r\n const webClientUrl = UrlHelper.getWebClientUrlWithCorrelationId({ threadId: params.skypeId });\r\n window.location.assign(config.urls.app.login(webClientUrl, CookieHelper.getCookie(config.cookies.csrf).singleValue));\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.error) {\r\n throw this.state.error;\r\n }\r\n\r\n return \r\n { !!this.state.launcherKey && }\r\n { (ariaContext) =>\r\n }\r\n initialViewProps={ { eventViewName: 'do-view' } } />\r\n }\r\n ;\r\n }\r\n\r\n private _onLaunchClick = () => {\r\n this.setState((oldState) => {\r\n return { launcherKey: oldState.launcherKey + 1 };\r\n });\r\n }\r\n}\r\n","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\n\r\nimport { App, EntryPoint } from './App';\r\nimport './app.less';\r\nimport { logger } from './helpers/LoggerHelper';\r\nimport { UrlHelper } from './helpers/UrlHelper';\r\nimport { Themes } from './models/SharedTypes';\r\n\r\nconst container = document.getElementById('launcherApp')!!!;\r\nconst htmlElement = document.getElementsByTagName('html')[0];\r\nconst language = htmlElement.lang;\r\nconst basePath = container.getAttribute('basePath')!!!;\r\nconst injectedEntryPoint = container.getAttribute('entryPoint');\r\nconst injectedSkypetoken = container.getAttribute('skypetoken');\r\nconst dataRegion = htmlElement.getAttribute('data-region') || undefined;\r\n\r\nconst entryPoint = (injectedEntryPoint && injectedEntryPoint !== '{ENTRYPOINT}') ? injectedEntryPoint as EntryPoint : EntryPoint.Meetings;\r\nconst skypetoken = (injectedSkypetoken && injectedSkypetoken !== '{SKYPETOKEN}') ? injectedSkypetoken : undefined;\r\n\r\nconst rawTheme = UrlHelper.getQueryParameter('theme') as any;\r\nlet theme: Themes | undefined;\r\nif (Object.values(Themes).includes(rawTheme)) {\r\n theme = rawTheme as Themes;\r\n}\r\n\r\nlogger.init();\r\nReactDOM.render(, container);\r\n","\"use strict\";\r\n/**\r\n* AppActiveData.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* Holder for App Active (foreground/background) information\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar SyncTasks = require(\"synctasks\");\r\nvar AppActiveData = /** @class */ (function () {\r\n function AppActiveData() {\r\n this._isActive = false;\r\n }\r\n AppActiveData.prototype.putAppActive = function (isActive) {\r\n this._isActive = isActive;\r\n if (this.isAppActive() && this._appActiveDeferral) {\r\n var deferral = this._appActiveDeferral;\r\n this._appActiveDeferral = undefined;\r\n deferral.resolve(void 0);\r\n }\r\n };\r\n AppActiveData.prototype.isAppActive = function () {\r\n return this._isActive;\r\n };\r\n AppActiveData.prototype.waitForAppActive = function () {\r\n if (this.isAppActive()) {\r\n return SyncTasks.Resolved();\r\n }\r\n // Set up deferral to wait for app to become active\r\n if (!this._appActiveDeferral) {\r\n this._appActiveDeferral = SyncTasks.Defer();\r\n }\r\n return this._appActiveDeferral.promise();\r\n };\r\n return AppActiveData;\r\n}());\r\nexports.default = AppActiveData;\r\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = options.random || (options.rng || rng)();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (namespace.length !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n var bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL;\n return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var i = 0; i < msg.length; ++i) {\n bytes[i] = msg.charCodeAt(i);\n }\n }\n\n return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n output.push(hex);\n }\n\n return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n /* append padding */\n x[len >> 5] |= 0x80 << len % 32;\n x[getOutputLength(len) - 1] = len;\n var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var oldd = d;\n a = md5ff(a, b, c, d, x[i], 7, -680876936);\n d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n b = md5gg(b, c, d, a, x[i], 20, -373897302);\n a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n d = md5hh(d, a, b, c, x[i], 11, -358537222);\n c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n a = md5ii(a, b, c, d, x[i], 6, -198630844);\n d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n a = safeAdd(a, olda);\n b = safeAdd(b, oldb);\n c = safeAdd(c, oldc);\n d = safeAdd(d, oldd);\n }\n\n return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n if (input.length === 0) {\n return [];\n }\n\n var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var i = 0; i < length8; i += 8) {\n output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n }\n\n return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n var lsw = (x & 0xffff) + (y & 0xffff);\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var j = 0; j < 16; ++j) {\n arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n }\n\n M[_i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _t = 16; _t < 80; ++_t) {\n W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n }\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","import curry from 'lodash/curry';\r\nimport map from 'lodash/map';\r\n\r\nexport const doPostRedirect = (url: string, params: object) => {\r\n const form = buildForm(url, params);\r\n\r\n document.body.appendChild(form);\r\n form.submit();\r\n};\r\n\r\n/**\r\n * This helper is not using React to render the \"utility form\" because on Meet Now Edge page, React is not included in the package.\r\n *\r\n * @param url\r\n * @param params\r\n */\r\nexport const buildForm = (url: string, params: object): HTMLFormElement => {\r\n const form = document.createElement('form');\r\n form.method = 'POST';\r\n form.style.display = 'none';\r\n form.action = url;\r\n\r\n addParameters(form, params);\r\n\r\n return form;\r\n};\r\n\r\nexport const addParameters = (form: HTMLFormElement, params: object) => {\r\n map(params, addParameter(form));\r\n};\r\n\r\nexport const addParameter = curry((form: HTMLFormElement, value: string, key: string) => {\r\n const input = document.createElement('input');\r\n input.type = 'hidden';\r\n input.name = key;\r\n input.value = value;\r\n\r\n form.appendChild(input);\r\n});\r\n","import * as React from 'react';\r\n\r\nexport class Padder extends React.PureComponent {\r\n\r\n render() {\r\n return
;\r\n }\r\n}\r\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var baseUniq = require('./_baseUniq');\n\n/**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\nfunction uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n}\n\nmodule.exports = uniq;\n","import * as React from 'react';\r\nimport { AriaContext } from 'src/ts/contexts/AriaContext';\r\nimport { logger, NavigationEventType } from 'src/ts/helpers/LoggerHelper';\r\nimport { Dimension, mainContentId } from 'src/ts/models/SharedTypes';\r\nimport {\r\n AnimationType, defaultStackViewProperties, StackAnimation, StackNavigationContext,\r\n StackNavigationContextProvider, StackView, StackViewProperties, ViewType,\r\n} from '../../contexts/StackNavigationContext';\r\nimport { ARootViewProps } from './ARootView';\r\nimport { LoadingView } from './LoadingView';\r\n\r\nexport interface StackNavigationProps extends ARootViewProps {\r\n ariaContext: AriaContext;\r\n loading?: boolean;\r\n parentContext?: StackNavigationContext;\r\n readonly initialView: React.ReactNode;\r\n readonly initialViewProps?: Partial;\r\n onDimensionUpdate?: (dimension: Dimension) => void;\r\n}\r\n\r\nexport interface StackNavigationState extends StackNavigationContext {\r\n mainContentId?: string;\r\n}\r\n\r\nexport class StackNavigationView extends React.PureComponent {\r\n constructor(props: StackNavigationProps) {\r\n super(props);\r\n\r\n this.state = {\r\n animating: false,\r\n views: [{ view: props.initialView, properties: { ...defaultStackViewProperties, ...props.initialViewProps } }],\r\n push: this._push,\r\n pop: this._pop,\r\n pushRoot: props.parentContext ? props.parentContext.pushRoot : this._push,\r\n popRoot: props.parentContext ? props.parentContext.popRoot : this._pop,\r\n pushParent: props.parentContext ? props.parentContext.push : this._push,\r\n popParent: props.parentContext ? props.parentContext.pop : this._pop,\r\n mainContentId: props.parentContext ? undefined : mainContentId,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this._track('push');\r\n }\r\n\r\n componentWillUnmount() {\r\n this._track('pop');\r\n }\r\n\r\n render() {\r\n return \r\n { this.props.loading ? : this.renderViews() }\r\n ;\r\n }\r\n\r\n private _track = (type: NavigationEventType) => {\r\n const views = this.state.views;\r\n if (!views.length) {\r\n return;\r\n }\r\n\r\n const current = views[views.length - 1];\r\n if (current.properties.eventViewName) {\r\n logger.navigation({ view: current.properties.eventViewName, type, isRoot: !this.props.parentContext }, current.properties.eventPriority);\r\n }\r\n }\r\n\r\n private _push = (view: React.ReactNode, properties?: Partial) => {\r\n if (properties && properties.ariaMessage) {\r\n this.props.ariaContext.announce(properties.ariaMessage);\r\n }\r\n\r\n this.setState((prevState) => {\r\n if (prevState.animating) {\r\n return null;\r\n }\r\n\r\n const views = [...prevState.views];\r\n views.push({\r\n view,\r\n properties: { ...defaultStackViewProperties, ...properties },\r\n });\r\n\r\n let animating = false;\r\n if (properties && properties.animation && properties.animation.type !== AnimationType.None) {\r\n animating = true;\r\n setTimeout(() => {\r\n this.setState({ animating: false });\r\n }, properties.animation.duration * 1000);\r\n }\r\n\r\n return {\r\n views,\r\n animating,\r\n };\r\n }, () => this._track('push'));\r\n }\r\n\r\n private _pop = () => {\r\n this._track('pop');\r\n\r\n if (this.state.views.length > 1) {\r\n const previous = this.state.views[this.state.views.length - 2];\r\n if (previous.properties.ariaMessage) {\r\n this.props.ariaContext.announce(previous.properties.ariaMessage);\r\n }\r\n }\r\n\r\n this.setState((prevState, props) => {\r\n if (prevState.animating) {\r\n return null;\r\n }\r\n\r\n const views = [...prevState.views];\r\n if (!views.length) {\r\n return null;\r\n }\r\n\r\n let animating = false;\r\n const current = views[views.length - 1];\r\n const usedAnimation = current.properties.animation;\r\n\r\n if (current.properties.eventViewName) {\r\n logger.navigation({ view: current.properties.eventViewName, type: 'pop', isRoot: !props.parentContext });\r\n }\r\n if (usedAnimation.type === AnimationType.None) {\r\n views.pop();\r\n } else {\r\n animating = true;\r\n current.properties.animation = { ...usedAnimation, type: `${ usedAnimation.type }Out` as AnimationType };\r\n setTimeout(() => {\r\n animating = false;\r\n views.pop();\r\n this.setState({\r\n views,\r\n animating,\r\n });\r\n }, current.properties.animation.duration * 1000);\r\n }\r\n\r\n return {\r\n views,\r\n animating,\r\n };\r\n });\r\n }\r\n\r\n private _getAnimationStyle = (animation: StackAnimation, prev: boolean): React.CSSProperties => {\r\n switch (animation.type) {\r\n case AnimationType.Fade:\r\n return prev ?\r\n { animation: `stackFadeOut ${ animation.duration }s forwards` }\r\n : { animation: `stackFade ${ animation.duration }s forwards` };\r\n case AnimationType.FadeOut:\r\n return prev ?\r\n { animation: `stackFade ${ animation.duration }s forwards` }\r\n : { animation: `stackFadeOut ${ animation.duration }s forwards` };\r\n case AnimationType.Slide:\r\n return prev ?\r\n { animation: `stackFadeOut ${ animation.duration }s forwards, stackRightOut ${ animation.duration }s forwards` }\r\n : { animation: `stackFade ${ animation.duration }s forwards, stackLeft ${ animation.duration }s forwards` };\r\n case AnimationType.SlideOut:\r\n return prev ?\r\n { animation: `stackFade ${ animation.duration }s forwards, stackRight ${ animation.duration }s forwards` }\r\n : { animation: `stackFadeOut ${ animation.duration }s forwards, stackLeftOut ${ animation.duration }s forwards` };\r\n case AnimationType.None:\r\n return {};\r\n default:\r\n throw new Error('Not implemented yet');\r\n }\r\n }\r\n\r\n private renderPrevView = (current: StackView, prev: StackView, visible = true) => {\r\n const fullscreenClassName = !this.props.parentContext ? 'fullscreen' : 'nested';\r\n\r\n return
{ prev.view }
;\r\n }\r\n\r\n private renderCurrentView = (current: StackView) => {\r\n const fullscreenClassName = !this.props.parentContext ? 'fullscreen' : 'nested';\r\n\r\n return
{ current.view }
;\r\n }\r\n\r\n private renderViews = () => {\r\n if (!this.state.views.length) {\r\n return undefined;\r\n }\r\n\r\n const current = this.state.views[this.state.views.length - 1];\r\n let prev: StackView | undefined;\r\n for (let i = this.state.views.length - 1; i > 0; i--) {\r\n const candidate = this.state.views[i - 1];\r\n if (candidate.properties.type !== ViewType.Overlay) {\r\n prev = candidate;\r\n break;\r\n }\r\n }\r\n if (prev && this.state.animating) {\r\n return <>\r\n { this.renderPrevView(current, prev) }\r\n { this.renderCurrentView(current) }\r\n ;\r\n } else if (prev && current.properties.type === ViewType.Overlay) {\r\n // Modal should always be displayed on top of a screen, in order to keep the state and have a proper close animation\r\n // Visibility hidden prevent user from tabbing inside the 'prev' view\r\n return <>\r\n { this.renderPrevView(current, prev, false) }\r\n { this.renderCurrentView(current) }\r\n ;\r\n }\r\n\r\n return <>\r\n { this.renderCurrentView(current) }\r\n ;\r\n }\r\n}\r\n","import noop from 'lodash/noop';\r\nimport * as React from 'react';\r\nimport { DisplayableError } from '../helpers/ErrorHelper';\r\n\r\nexport interface ErrorContext {\r\n error: DisplayableError | undefined;\r\n setError: (error: DisplayableError) => void;\r\n clear: () => void;\r\n}\r\n\r\n// Default context does not mean much sense here\r\nconst context = React.createContext({\r\n error: undefined,\r\n setError: noop,\r\n clear: noop,\r\n});\r\n\r\nexport const ErrorContextProvider = context.Provider;\r\n\r\nexport const ErrorContextConsumer = context.Consumer;\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Button, Header } from '@stardust-ui/react';\r\nimport * as React from 'react';\r\nimport { ConfigContext, ConfigContextConsumer } from '../../contexts/ConfigContext';\r\nimport { OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { ErrorHelper } from '../../helpers/ErrorHelper';\r\nimport { logger } from '../../helpers/LoggerHelper';\r\nimport { mainContentId } from '../../models/SharedTypes';\r\nimport { ErrorDetails } from './ErrorDetails';\r\n\r\ninterface ErrorBoundaryState {\r\n error: Error | undefined;\r\n errorInfo: React.ErrorInfo | undefined;\r\n}\r\n\r\ninterface AlternativeItem {\r\n contentLocString: string;\r\n descriptonLocString: string;\r\n linkTextLocString: string;\r\n linkClickHandler: (config: ConfigContext) => void;\r\n}\r\n\r\nexport class ErrorBoundary extends React.PureComponent<{}, ErrorBoundaryState> {\r\n private readonly _alternatives: AlternativeItem[];\r\n\r\n constructor(props: {}) {\r\n super(props);\r\n\r\n this.state = {\r\n error: undefined,\r\n errorInfo: undefined,\r\n };\r\n\r\n this._alternatives = [\r\n {\r\n contentLocString: 'txt_helpBox_got_question',\r\n descriptonLocString: 'txt_helpBox_have_your_queries',\r\n linkTextLocString: 'txt_helpBox_see_faq',\r\n linkClickHandler: this._onFaqClick,\r\n },\r\n {\r\n contentLocString: 'txt_helpBox_explore_skype',\r\n descriptonLocString: 'txt_helpBox_have_your_queries',\r\n linkTextLocString: 'txt_helpBox_see_faq',\r\n linkClickHandler: this._onExploreClick,\r\n },\r\n {\r\n contentLocString: 'txt_helpBox_need_to_use_skype',\r\n descriptonLocString: 'txt_helpBox_download_on_device',\r\n linkTextLocString: 'txt_helpBox_get_the_app',\r\n linkClickHandler: this._onDownloadClick,\r\n },\r\n ];\r\n }\r\n\r\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\r\n logger.error(error);\r\n\r\n this.setState({\r\n error,\r\n errorInfo,\r\n });\r\n\r\n if (ErrorHelper.isDisplayableError(error)) {\r\n document.title = localizer.getString(error.pageTitleLocString);\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.error) {\r\n return
\r\n \r\n { this._renderAlternatives() }\r\n
;\r\n }\r\n\r\n return this.props.children;\r\n }\r\n\r\n private _renderAlternatives() {\r\n return
\r\n { this._alternatives.map((item, index) => this._renderAlternativeItem(item, index)) }\r\n
;\r\n }\r\n\r\n private _renderAlternativeItem(item: AlternativeItem, index: number) {\r\n return
\r\n \r\n \r\n { (configContext) => \r\n }\r\n \r\n
;\r\n }\r\n\r\n private _onFaqClick = (config: ConfigContext) => {\r\n window.location.href = config.urls.app.faq;\r\n }\r\n\r\n private _onExploreClick = (config: ConfigContext) => {\r\n window.location.href = config.urls.app.skypeCom;\r\n }\r\n\r\n private _onDownloadClick = (config: ConfigContext) => {\r\n const downloadUrl = os === OperatingSystems.MacOS ? config.urls.app.downloadDesktop : config.urls.app.download;\r\n window.location.href = downloadUrl;\r\n }\r\n}\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Button, ICSSInJSStyle, Input, Text } from '@stardust-ui/react';\r\nimport * as React from 'react';\r\nimport { WebErrorResponse } from 'simplerestclients';\r\nimport { EcsContext, EcsContextConsumer } from 'src/ts/contexts/EcsContext';\r\nimport MeetingsApiClient from 'src/ts/rest/MeetingsApiClient';\r\nimport { ErrorContext, ErrorContextConsumer } from '../../../contexts/ErrorContext';\r\nimport { MeetingContext, MeetingContextConsumer } from '../../../contexts/meetings/MeetingContext';\r\nimport { StackNavigationContext, StackNavigationContextConsumer } from '../../../contexts/StackNavigationContext';\r\nimport { DisplayableError, displayableErrors, ErrorHelper } from '../../../helpers/ErrorHelper';\r\nimport { logger } from '../../../helpers/LoggerHelper';\r\nimport { GuestJoinPayloadMeetingsApiWithCaptcha } from '../../../models/GuestJoinPayloadMeetingsApiWithCaptcha';\r\nimport { Captcha, CaptchaSolution } from '../../common/Captcha';\r\nimport { Spinner } from '../../common/Spinner';\r\nimport { GuestRedirect } from './GuestRedirect';\r\n\r\ninterface GuestLoginState {\r\n guestName: string;\r\n joinButtonEnabled: boolean;\r\n joinButtonSpinEnabled: boolean;\r\n captchaState: CaptchaState;\r\n captchaPayload: CaptchaPayload | undefined;\r\n error?: Error;\r\n ecsContext: EcsContext;\r\n}\r\n\r\ninterface CaptchaState {\r\n show: boolean;\r\n ready: boolean;\r\n error?: string;\r\n}\r\n\r\ninterface CaptchaPayload {\r\n challenge: string;\r\n challengeId: string;\r\n azureRegion: string;\r\n}\r\n\r\ninterface JoinAsGuestBaseParams {\r\n meetingContext: MeetingContext;\r\n stackNavigationContext: StackNavigationContext;\r\n errorContext: ErrorContext;\r\n}\r\n\r\ninterface JoinAsGuestParams extends JoinAsGuestBaseParams {\r\n ecsContext: EcsContext;\r\n}\r\n\r\ninterface JoinAsGuestMeetingsApiParams extends JoinAsGuestBaseParams {\r\n joinThread?: boolean;\r\n retries?: number;\r\n}\r\n\r\nconst maxGuestNameLength = 50;\r\nexport class GuestLogin extends React.PureComponent<{}, GuestLoginState> {\r\n private _captchaSolution?: CaptchaSolution;\r\n\r\n constructor(props: {}) {\r\n super(props);\r\n this.state = {\r\n guestName: '',\r\n joinButtonEnabled: false,\r\n joinButtonSpinEnabled: false,\r\n captchaPayload: undefined,\r\n captchaState: {\r\n show: false,\r\n ready: false,\r\n },\r\n ecsContext: {\r\n settings: {\r\n useMeetingsApi: true,\r\n useUnifiedView: false,\r\n useJoinThread: false,\r\n maxRetries: 0,\r\n },\r\n },\r\n };\r\n }\r\n\r\n componentWillUnmount() {\r\n delete this._captchaSolution;\r\n }\r\n\r\n componentDidUpdate(_prevProps: {}, prevState: GuestLoginState) {\r\n if (prevState.captchaState.show && !this.state.captchaState.show) {\r\n delete this._captchaSolution;\r\n }\r\n }\r\n\r\n render() {\r\n return
\r\n { this._renderTitle() }\r\n { this._renderExpirationWarning() }\r\n { this._renderInput() }\r\n { this.state.captchaState.show && this.state.captchaPayload &&\r\n }\r\n { this.state.captchaState.show && !this.state.captchaState.ready &&
\r\n
\r\n
\r\n
\r\n
}\r\n { this.state.captchaState.error && * { this.state.captchaState.error } }\r\n\r\n
\r\n { (stackNavigationContext) =>\r\n <>\r\n { (ecsContext) =>\r\n { (errorContext) =>\r\n { (meetingContext) => meetingContext && meetingContext.conversation &&\r\n <>\r\n { this._renderTosAndPrivacy() }\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\n private _renderTitle() {\r\n return \r\n { localizer.getString('Login.btn_join_as_guest') }\r\n ;\r\n }\r\n\r\n private _renderExpirationWarning() {\r\n return (\r\n
\r\n { (ecsContext) =>\r\n ecsContext.settings.useUnifiedView ? \r\n { localizer.getString('Login.txt_guest_account_expiration') }\r\n : <>\r\n }\r\n
);\r\n }\r\n\r\n private _renderInput() {\r\n const styles: ICSSInJSStyle = {\r\n fontSize: '1rem',\r\n marginTop: '2rem',\r\n marginBottom: '1rem',\r\n };\r\n return ;\r\n }\r\n\r\n private _renderTosAndPrivacy() {\r\n const styles: ICSSInJSStyle = {\r\n fontSize: '0.75rem',\r\n marginBottom: '1rem',\r\n textAlign: 'center',\r\n };\r\n return \r\n { localizer.get('txt_launch_guest_accept_tos', {\r\n linkPrivacy: { type: 'a', href: 'https://go.microsoft.com/fwlink/?LinkId=521839' },\r\n linkTerms: { type: 'a', href: 'https://go.microsoft.com/fwlink/?LinkID=246338' },\r\n }) }\r\n ;\r\n }\r\n\r\n private _updateGuestName = (event: React.ChangeEvent) => {\r\n if (event.target.value && event.target.value.length > maxGuestNameLength) {\r\n return;\r\n }\r\n\r\n this.setState({\r\n guestName: event.target.value,\r\n joinButtonEnabled: !!event.target.value && event.target.value.length > 0,\r\n });\r\n }\r\n\r\n private _createGuest = (stackNavigationContext: StackNavigationContext, meetingContext: MeetingContext, errorContext: ErrorContext, ecsContext: EcsContext) => {\r\n return (e: React.MouseEvent) => {\r\n const joinParams: JoinAsGuestParams = {\r\n stackNavigationContext,\r\n meetingContext,\r\n errorContext,\r\n ecsContext,\r\n };\r\n\r\n logger.action({ name: 'create-guest' });\r\n this.setState({ joinButtonEnabled: false, joinButtonSpinEnabled: true });\r\n\r\n if (this.state.captchaState.show && this._captchaSolution) {\r\n this._joinAsGuest(joinParams);\r\n } else {\r\n this._joinAsGuest(joinParams);\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n };\r\n }\r\n\r\n private _joinAsGuest = (params: JoinAsGuestParams) => {\r\n const { ecsContext, ...joinParams } = params;\r\n const ecsSettings = ecsContext.settings;\r\n\r\n logger.sessionFinished({completionType: 'JoinOnWebAsGuest'});\r\n\r\n return this.joinAsGuestMeetingsApi({\r\n ...joinParams,\r\n retries: ecsSettings.maxRetries,\r\n joinThread: ecsSettings.useJoinThread,\r\n });\r\n }\r\n\r\n private joinAsGuestMeetingsApi = (params: JoinAsGuestMeetingsApiParams) => {\r\n return MeetingsApiClient.joinAsGuest({\r\n flowId: logger.getCorrelationId(),\r\n displayName: this.state.guestName,\r\n threadId: params.meetingContext.conversation.resource,\r\n shortId: params.meetingContext.shortId,\r\n },\r\n params.retries,\r\n params.joinThread,\r\n this._captchaSolution,\r\n () => ({ includesCaptcha: !!this._captchaSolution }))\r\n .then((guestUser) => {\r\n params.stackNavigationContext.push(\r\n ,\r\n { eventViewName: 'guest-redirect' },\r\n );\r\n }).catch((response: WebErrorResponse) => {\r\n this.setState((oldState) => {\r\n const newState: GuestLoginState = { ...oldState, joinButtonSpinEnabled: false, joinButtonEnabled: true };\r\n\r\n const createGuestRequest = 'Create guest user';\r\n let error: DisplayableError | undefined;\r\n this._captchaSolution = undefined;\r\n switch (response.statusCode) {\r\n case 403:\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.JoinDisabled, response, createGuestRequest);\r\n break;\r\n case 404:\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.InviteNotFound, response, createGuestRequest);\r\n break;\r\n case 412: // @todo review all response codes\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.TooManyUsers, response, createGuestRequest);\r\n break;\r\n case 429:\r\n newState.joinButtonEnabled = false;\r\n newState.captchaState = {\r\n ready: true,\r\n show: true,\r\n };\r\n newState.captchaPayload = {\r\n challenge: response.body.challenge,\r\n challengeId: response.body.challengeId,\r\n azureRegion: response.body.azureRegion,\r\n };\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.TooManyUsers, response, createGuestRequest);\r\n break;\r\n case 500:\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.Generic, response, createGuestRequest);\r\n break;\r\n default:\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.Busy, response, createGuestRequest);\r\n break;\r\n }\r\n if (error) {\r\n params.errorContext.setError(error);\r\n logger.error(error);\r\n }\r\n\r\n return newState;\r\n });\r\n });\r\n }\r\n\r\n private _onCaptchaSolutionUpdated = (solutionValue: string) => {\r\n if (solutionValue && this.state.captchaPayload) {\r\n if (this._captchaSolution) {\r\n this._captchaSolution.solution = solutionValue;\r\n } else {\r\n this._captchaSolution = {\r\n solution: solutionValue,\r\n challengeId: this.state.captchaPayload.challengeId,\r\n azureRegion: this.state.captchaPayload.azureRegion,\r\n };\r\n }\r\n this.setState({\r\n joinButtonEnabled: true,\r\n });\r\n } else if (!solutionValue && this.state.joinButtonEnabled) {\r\n this.setState({\r\n joinButtonEnabled: false,\r\n });\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { ConversationServiceModel } from '../../models/ConversationServiceModel';\r\n\r\nexport interface MeetingContext {\r\n conversation: ConversationServiceModel;\r\n shortId: string;\r\n}\r\n\r\n// Default context does not mean much sense here\r\nconst context = React.createContext(undefined);\r\n\r\nexport const MeetingContextProvider = context.Provider;\r\n\r\nexport const MeetingContextConsumer = context.Consumer;\r\n","import { Image, ProviderConsumer, ThemePrepared } from '@stardust-ui/react';\r\nimport * as React from 'react';\r\nimport { AriaContextConsumer } from 'src/ts/contexts/AriaContext';\r\nimport { ConfigContextConsumer } from '../../contexts/ConfigContext';\r\nimport { Footer } from '../common/Footer';\r\nimport { NestedStackNavigationView } from '../common/NestedStackNavigationView';\r\nimport { LoginMethod } from './login/LoginMethod';\r\n\r\nexport class LoginView extends React.PureComponent {\r\n\r\n renderThemeAware = (theme: ThemePrepared) => {\r\n return
\r\n\r\n
\r\n { (configContext) =>\r\n \r\n }\r\n { (ariaContext) =>\r\n } initialViewProps={ { eventViewName: 'login-method' } } />\r\n }\r\n
\r\n\r\n
\r\n
;\r\n }\r\n\r\n render() {\r\n return ;\r\n }\r\n}\r\n","import EcsClient from '@skype/ecsclient';\r\nimport { EcsConfigType, EcsResponseBase } from '@skype/ecsclient/dist/Models';\r\nimport config from 'config';\r\nimport * as SyncTasks from 'synctasks';\r\nimport { STPromise } from 'synctasks';\r\nimport { v4 } from 'uuid';\r\nimport { EcsSettings, EcsSettings as EcsResponse } from '../contexts/EcsContext';\r\n\r\nexport interface EcsSettingsResponse extends EcsResponseBase {\r\n SWG_WebClient: EcsSettings;\r\n}\r\n\r\nclass EcsHelper {\r\n private static readonly deviceIdLocalStorageKey = 'mvt.device_id';\r\n private _ecsClient = new EcsClient();\r\n\r\n public loadConfig(\r\n skypetoken: string | undefined,\r\n expiration: number | undefined,\r\n callback: ((settings: EcsResponse) => void),\r\n fallback: EcsResponse): STPromise {\r\n return this._ecsClient.initialize({\r\n clientName: 'Launcher',\r\n clientVersion: '1.0.0.0', // @todo use version from build?\r\n configsToFetch: (!!skypetoken) ? [EcsConfigType.User] : [EcsConfigType.Default],\r\n hosts: [config.urls.ecs],\r\n initialAppActiveState: true,\r\n getEcsParameters: () => SyncTasks.Resolved({ clientId: EcsHelper.clientId}),\r\n initialSkypeTokenData: {\r\n skypeToken: skypetoken,\r\n skypeTokenExpiration: Date.now() + (expiration || 0),\r\n },\r\n }).then(() => {\r\n this._ecsClient.configUpdated.subscribe(() => {\r\n const response = this._ecsClient.getConfig();\r\n if (!!response && !!response.config) {\r\n callback(response.config.SWG_WebClient);\r\n } else {\r\n callback(fallback);\r\n }\r\n });\r\n });\r\n }\r\n\r\n private static get clientId() {\r\n let deviceId;\r\n try {\r\n deviceId = localStorage.getItem(EcsHelper.deviceIdLocalStorageKey);\r\n } catch (e) {\r\n return '';\r\n }\r\n\r\n if (!deviceId) {\r\n deviceId = v4();\r\n try {\r\n localStorage.setItem(EcsHelper.deviceIdLocalStorageKey, deviceId);\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n\r\n return deviceId;\r\n }\r\n}\r\n\r\nexport const ecsHelper = new EcsHelper();\r\n","import config from 'config';\r\nimport * as React from 'react';\r\nimport { UrlHelper } from 'src/ts/helpers/UrlHelper';\r\nimport { EcsContextConsumer } from '../../../contexts/EcsContext';\r\nimport { MeetingContextConsumer } from '../../../contexts/meetings/MeetingContext';\r\nimport { CookieHelper } from '../../../helpers/CookieHelper';\r\nimport { getRedirectSubdomain } from '../../../helpers/SafariRedirectHelper';\r\n\r\nexport interface GuestRedirectProps {\r\n username: string;\r\n skypetoken: string;\r\n}\r\n\r\nexport class GuestRedirect extends React.PureComponent {\r\n\r\n render() {\r\n return { (meetingContext) => meetingContext && meetingContext.conversation &&\r\n { (ecsContext) =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n };\r\n }\r\n\r\n private _autoSubmit = (instance: HTMLFormElement | null) => {\r\n if (instance) {\r\n instance.submit();\r\n }\r\n }\r\n}\r\n","import { Actions } from '../models/SharedTypes';\r\n\r\nexport interface CookieConfig {\r\n name: string;\r\n key?: string;\r\n path?: string;\r\n maxAge?: number;\r\n domain?: string;\r\n}\r\n\r\nexport interface S4LParameters {\r\n threadId?: string;\r\n inviteId?: string;\r\n skypeId?: string;\r\n channelId?: string;\r\n}\r\n\r\nexport interface Config {\r\n env: 'dev' | 'latest' | 'qa' | 'dogfood' | 'production';\r\n cookies: {\r\n skype: CookieConfig;\r\n csrf: CookieConfig;\r\n };\r\n silentLogin: {\r\n env: string;\r\n client_id: string;\r\n redirect_uri: string;\r\n };\r\n logging: {\r\n ariaTenant: string;\r\n };\r\n urls: {\r\n ecs: string,\r\n api: {\r\n profile: string;\r\n huddle: string;\r\n meetings: string;\r\n invite: string;\r\n channels: string;\r\n captcha: (lang: string, flowId: string, rand: string) => string;\r\n }\r\n app: {\r\n faq: string;\r\n login: (redirectUri: string, state: string) => string;\r\n logout: (redirectUri: string, state: string) => string;\r\n s4lWeb: (params: S4LParameters, webSubDomain?: string) => string;\r\n botLogin: (botId: string, useBotLauncherQueryParam?: boolean) => string;\r\n download: string;\r\n downloadAndroid: (threadId?: string) => string;\r\n downloadDesktop: string; // Remove once we have access to goLink CMS, the first one should be enough\r\n cookiePolicy: string;\r\n skypeCom: string,\r\n join: string,\r\n },\r\n launcher: {\r\n skypeUri: (action: Actions, threadId: string, sessionId: string, origin: string) => string;\r\n intentUri: (action: Actions, threadId: string, sessionId: string, origin: string, fallbackUri: string) => string;\r\n universalUri: (shortId: string, sessionId: string) => string;\r\n },\r\n inviteLauncher: {\r\n skypeUri: (skypeId: string, sessionId: string, offSkypeInviteId: string, origin: string) => string;\r\n intentUri: (skypeId: string, sessionId: string, offSkypeInviteId: string, origin: string, fallbackUri: string) => string;\r\n },\r\n botLauncher: {\r\n skypeUri: (botId: string, sessionId: string, origin: string) => string;\r\n intentUri: (botId: string, sessionId: string, origin: string, fallbackUri: string) => string;\r\n },\r\n channelLauncher: {\r\n skypeUri: (channelId: string, sessionId: string, origin: string) => string;\r\n intentUri: (channelId: string, sessionId: string, origin: string, fallbackUri: string) => string;\r\n },\r\n doLauncher: {\r\n skypeUri: (action: Actions, skypeId: string, sessionId: string, origin: string) => string;\r\n intentUri: (action: Actions, skypeId: string, sessionId: string, origin: string, fallbackUri: string) => string;\r\n },\r\n meetNowJoinLauncher: {\r\n skypeUri: (action: Actions, source: string, exp: string, call: string, video: string, mic: string, sessionId: string, origin: string) => string;\r\n intentUri: (action: Actions, source: string, exp: string, call: string, video: string, mic: string, sessionId: string, origin: string, fallbackUri: string) => string;\r\n },\r\n };\r\n}\r\n\r\nconst config: Config = {\r\n env: 'production',\r\n cookies: {\r\n skype: {\r\n name: 'SC',\r\n path: '/',\r\n maxAge: 3600 * 24 * 90, // 90 days\r\n domain: '.skype.com',\r\n },\r\n csrf: {\r\n name: 'x-csrf-token',\r\n },\r\n },\r\n logging: {\r\n ariaTenant: '36f18b389f2543c0b54bf5c5555e3587-e50b4ede-9173-4805-ab3a-7c8564e50b52-6674',\r\n },\r\n silentLogin: {\r\n env: 'live',\r\n client_id: '371752',\r\n redirect_uri: 'https://join.skype.com',\r\n },\r\n urls: {\r\n ecs: 'https://a.config.skype.com',\r\n api: {\r\n profile: 'https://profile.skype.com/profile',\r\n huddle: 'https://join.skype.com/api',\r\n meetings: 'https://api.join.skype.com',\r\n invite: 'https://inviteconnector.skype.com',\r\n channels: 'https://channels.skype.com',\r\n captcha: (lang: string, flowId: string, rand: string) =>\r\n `https://client.hip.live.com/GetHIP/GetWLSPHIP0/WLSPHIP0?mkt=${ lang }&fid=${ flowId }&id=skypeguest&type=visual&rnd=${ rand }`,\r\n },\r\n app: {\r\n faq: 'https://go.skype.com/faq.invites',\r\n login: (redirectUri: string, state: string) =>\r\n `https://login.skype.com/login?client_id=578134&redirect_uri=${ encodeURIComponent(redirectUri) }&state=${ state }`,\r\n logout: (redirectUri: string, state: string) =>\r\n `https://login.skype.com/logout?client_id=578134&redirect_uri=${ encodeURIComponent(redirectUri) }&state=${ state }`,\r\n s4lWeb: (params, webSubDomain) => {\r\n const url = `https://${ !!webSubDomain ? `${ webSubDomain }.` : '' }web.skype.com`;\r\n if (params.threadId) {\r\n return `${ url }/${ params.threadId }`;\r\n }\r\n\r\n if (params.inviteId && params.skypeId) {\r\n return `${ url }/8:${ params.skypeId }?inviteId=${ params.inviteId }`;\r\n }\r\n\r\n if (params.channelId) {\r\n return `${ url }/channel/${ params.channelId }`;\r\n }\r\n\r\n return url;\r\n },\r\n botLogin: (botId: string, useBotLauncherQueryParam?: boolean) => {\r\n const loginUri = `https://login.skype.com/login?client_id=708557&redirect_uri=https%3A%2F%2Fjoin.skype.com%2Fbot%2F${ botId }`;\r\n if (useBotLauncherQueryParam) {\r\n return loginUri + '?botsLauncher=true';\r\n }\r\n\r\n return loginUri;\r\n },\r\n download: 'https://go.skype.com/spaces.getskype',\r\n downloadAndroid: (threadId?: string) =>\r\n `https://play.google.com/store/apps/details?id=com.skype.raider&referrer=${threadId && encodeURIComponent(\r\n `utm_source=invite&utm_thread=${threadId}`)}`,\r\n downloadDesktop: 'https://go.skype.com/download-skype/',\r\n cookiePolicy: 'https://go.skype.com/privacy',\r\n skypeCom: 'https://www.skype.com',\r\n join: 'https://join.skype.com',\r\n },\r\n launcher: {\r\n skypeUri: (action, threadId, sessionId, origin) => `skype:?${ action }&threadId=${ threadId }&correlationId=${ sessionId }&origin=${ origin }`,\r\n intentUri: (action, threadId, sessionId, origin, fallbackUri) =>\r\n `intent://?${ action }&threadId=${ threadId }&correlationId=${ sessionId }&origin=${ origin }`\r\n + `#Intent;scheme=skype;package=com.skype.raider;S.browser_fallback_url=${ encodeURIComponent(fallbackUri) };end;`,\r\n universalUri: (shortId, sessionId) => `https://www.skype.com/meetnow/${ shortId }?fallback=true&correlationId=${sessionId}`,\r\n },\r\n inviteLauncher: {\r\n skypeUri: (skypeId, sessionId, offSkypeInviteId, origin) =>\r\n `skype:${ skypeId }?chat&correlationId=${ sessionId }&utm_source=buddy&utm_content=${ offSkypeInviteId }&origin=${ origin }`,\r\n intentUri: (skypeId, sessionId, offSkypeInviteId, origin, fallbackUri) =>\r\n `intent://${ skypeId }?chat&correlationId=${ sessionId }&utm_source=buddy&utm_content=${ offSkypeInviteId }&origin=${ origin }`\r\n + `#Intent;scheme=skype;S.browser_fallback_url=${ encodeURIComponent(fallbackUri) };end;`,\r\n },\r\n botLauncher: {\r\n skypeUri: (botId, sessionId, origin) => `skype:${ botId }?chat&correlationId=${ sessionId }&origin=${ origin }`,\r\n intentUri: (botId, sessionId, origin, fallbackUri) =>\r\n `intent://${ botId }?chat&correlationId=${ sessionId }&origin=${ origin }#Intent;scheme=skype;S.browser_fallback_url=${ encodeURIComponent(fallbackUri) };end;`,\r\n },\r\n channelLauncher: {\r\n skypeUri: (channelId, sessionId, origin) => `skype:?channel=${ encodeURIComponent(channelId) }&correlationId=${ sessionId }&origin=${ origin }`,\r\n intentUri: (channelId, sessionId, origin, fallbackUri) =>\r\n `intent://?channel=${ encodeURIComponent(channelId) }&correlationId=${ sessionId }&origin=${ origin }`\r\n + `#Intent;scheme=skype;S.browser_fallback_url=${ encodeURIComponent(fallbackUri) };end;`,\r\n },\r\n doLauncher: {\r\n skypeUri: (action, skypeId, sessionId, origin) =>\r\n `skype:${ skypeId }?${ action }&correlationId=${ sessionId }&origin=${ origin }`,\r\n intentUri: (action, skypeId, sessionId, origin, fallbackUri) =>\r\n `intent://${ skypeId }?${ action }&correlationId=${ sessionId }&origin=${ origin }`\r\n + `#Intent;scheme=skype;S.browser_fallback_url=${ encodeURIComponent(fallbackUri) };end;`,\r\n },\r\n meetNowJoinLauncher: {\r\n skypeUri: (action, source, exp, call, video, mic, sessionId, origin) =>\r\n `skype:?action=${ action }&source=${ source }&exp=${ exp }&correlationId=${ sessionId }&origin=${ origin }&call=${ call }&video=${ video}&mic=${ mic }`,\r\n intentUri: (action, source, exp, call, video, mic, sessionId, origin, fallbackUri) =>\r\n `intent://?action=${ action }&source=${ source }&exp=${ exp }&correlationId=${ sessionId }&origin=${ origin }&call=${ call }&video=${ video}&mic=${ mic }`\r\n + `#Intent;scheme=skype;package=com.skype.raider;S.browser_fallback_url=${ encodeURIComponent(fallbackUri) };end;`,\r\n },\r\n },\r\n};\r\n\r\nexport default config;\r\n","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","import config from 'config';\r\nimport { OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { logger } from '../../helpers/LoggerHelper';\r\nimport { ALauncher } from '../common/ALauncher';\r\n\r\ninterface ChannelLauncherProps {\r\n channelId: string;\r\n}\r\n\r\nexport class ChannelLauncher extends ALauncher {\r\n\r\n protected _getLauncherUrl() {\r\n const sessionId = logger.getCorrelationId();\r\n if (os === OperatingSystems.Android) {\r\n return config.urls.channelLauncher.intentUri(this.props.channelId, sessionId, 'launcher', config.urls.app.download);\r\n }\r\n return config.urls.channelLauncher.skypeUri(this.props.channelId, sessionId, 'launcher');\r\n }\r\n\r\n protected _getLoggerAction() {\r\n return 'channel-launch';\r\n }\r\n}\r\n","export interface Dictionary {\r\n [index: string]: T;\r\n}\r\n\r\nexport enum Themes {\r\n Teams = 'teams',\r\n Light = 'light',\r\n}\r\n\r\nexport enum AppIds {\r\n Meetings = 'wl',\r\n OffSkypeInvites = 'oi',\r\n}\r\n\r\nexport enum Actions {\r\n Chat = 'chat',\r\n Call = 'call',\r\n MeetNowJoin = 'meetnowjoin',\r\n}\r\n\r\nexport interface Dimension { width: number; height: number; }\r\nexport const defaultDimension: Dimension = { width: 0, height: 0 };\r\nexport const mainContentId = 'mainContent';\r\nexport const COUNTRY_CHINA = 'cn';\r\n","import { localizer } from '@skype/bew-localization';\r\n\r\nexport const loadTranslation = (language: string) => {\r\n localizer.initSync({\r\n locale: language,\r\n localizedTable: (window as any).I18NBUNDLE,\r\n fallback: 'en',\r\n fallbackTable: (window as any).I18NBUNDLE_FALLBACK || (window as any).I18NBUNDLE,\r\n });\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { localizer } from '@skype/bew-localization';\r\nimport { Avatar, Header, Image, Text } from '@stardust-ui/react';\r\nimport { BotsContextConsumer } from '../../contexts/bots/BotsContext';\r\nimport { ConfigContext, ConfigContextConsumer } from '../../contexts/ConfigContext';\r\nimport { BotInfoServiceModel } from '../../models/BotServiceModel';\r\n\r\nexport class BotInfo extends React.PureComponent {\r\n\r\n render() {\r\n return
\r\n \r\n { (botContext) => botContext &&\r\n <>\r\n \r\n { (configContext) => this._renderAvatar(configContext, botContext.botInfo) }\r\n \r\n { botContext.botInfo.isTrusted &&
\r\n \r\n { (configContext) =>\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\n private _renderAvatar(configContext: ConfigContext, botInfo: BotInfoServiceModel) {\r\n const avatarImage = {\r\n src: botInfo.avatarUrl || `${ configContext.basePath }/images/avatar.jpg`,\r\n styles: { width: '100%', height: '100%', objectFit: 'cover' },\r\n };\r\n\r\n return
\r\n \r\n \r\n
;\r\n }\r\n}\r\n","import config from 'config';\r\nimport { ProfilesContext } from '../../contexts/profiles/ProfilesContext';\r\nimport { OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { logger } from '../../helpers/LoggerHelper';\r\nimport { Actions } from '../../models/SharedTypes';\r\nimport { ALauncher } from '../common/ALauncher';\r\n\r\ninterface LauncherProps {\r\n profile: ProfilesContext;\r\n}\r\n\r\nexport class Launcher extends ALauncher {\r\n\r\n protected _getLauncherUrl() {\r\n if (os === OperatingSystems.Android) {\r\n return config.urls.doLauncher.intentUri(Actions.Chat, this.props.profile.skypeId, logger.getCorrelationId(), 'launcher', config.urls.app.download);\r\n }\r\n return config.urls.doLauncher.skypeUri(Actions.Chat, this.props.profile.skypeId, logger.getCorrelationId(), 'launcher');\r\n }\r\n\r\n protected _getLoggerAction() {\r\n return 'join-profile';\r\n }\r\n}\r\n","import { EcsSettings } from '../contexts/EcsContext';\r\nimport { isSafariBrowserEligibleForMeetingGuestFlow } from './EnvironmentHelper';\r\n\r\nexport const getRedirectSubdomain = (settings: EcsSettings): string | undefined => {\r\n if (settings.allowDesktopSafariGuestFlow && isSafariBrowserEligibleForMeetingGuestFlow) {\r\n return settings.webSubdomainForRedirect;\r\n }\r\n\r\n return undefined;\r\n};\r\n","import config from 'config';\r\nimport { OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { logger } from '../../helpers/LoggerHelper';\r\nimport { ALauncher } from '../common/ALauncher';\r\n\r\ninterface BotLauncherProps {\r\n botSkypeId: string;\r\n}\r\n\r\nexport class BotLauncher extends ALauncher {\r\n\r\n protected _getLauncherUrl() {\r\n const sessionId = logger.getCorrelationId();\r\n if (os === OperatingSystems.Android) {\r\n return config.urls.botLauncher.intentUri(this.props.botSkypeId, sessionId, 'launcher', config.urls.app.download);\r\n }\r\n return config.urls.botLauncher.skypeUri(this.props.botSkypeId, sessionId, 'launcher');\r\n }\r\n\r\n protected _getLoggerAction() {\r\n return 'bot-launch';\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { ChannelsContext, ChannelsContextConsumer } from 'src/ts/contexts/channels/ChannelsContext';\r\n\r\nexport interface WithChannelsContextProps {\r\n channelContext?: ChannelsContext;\r\n}\r\n\r\nexport const withChannelsContext = (Klass: React.ComponentType) => (props: T) => (\r\n \r\n {(channelContext: ChannelsContext) => }\r\n \r\n);\r\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n","import * as React from 'react';\r\n\r\nexport interface ARootViewProps {\r\n loading?: boolean;\r\n}\r\n\r\nexport abstract class ARootView

extends React.Component {\r\n protected mainContentId = 'mainContent';\r\n}\r\n","import config from 'config';\r\nimport * as SyncTasks from 'synctasks';\r\nimport { ChannelInfoServiceModel } from '../models/ChannelServiceModel';\r\nimport { ApiCallOptions, BaseRestClient } from './BaseRestClient';\r\n\r\nclass ChannelsRestClient extends BaseRestClient {\r\n getChannelInfo(shortId: string): SyncTasks.Promise {\r\n const basePath = '/api/v2/channels/info/';\r\n const options: ApiCallOptions = {\r\n eventProperties: {\r\n genericEventPath: basePath,\r\n },\r\n };\r\n\r\n return this.performApiGet(basePath + `?shortId=${encodeURIComponent(shortId)}`, options);\r\n }\r\n\r\n}\r\n\r\nexport default new ChannelsRestClient(config.urls.api.channels);\r\n","/**\n * SubscribableEvent.ts\n *\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT license.\n *\n * A simple strongly-typed pub/sub/fire eventing system.\n */\nvar SubscriptionToken = /** @class */ (function () {\n function SubscriptionToken(_event, _callback) {\n this._event = _event;\n this._callback = _callback;\n }\n SubscriptionToken.prototype.unsubscribe = function () {\n this._event.unsubscribe(this._callback);\n };\n return SubscriptionToken;\n}());\nexport { SubscriptionToken };\nvar SubscribableEvent = /** @class */ (function () {\n // By default, SubscribableEvent will fire to all subscribers regardless of any conditions.\n // If you enable allowStopPropagation, then a subscription callback can return a truthy response and it will halt further callbacks.\n function SubscribableEvent(_allowStopPropagation) {\n if (_allowStopPropagation === void 0) { _allowStopPropagation = false; }\n var _this = this;\n this._allowStopPropagation = _allowStopPropagation;\n this.fire = (function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // Keep reference to the original readonly array. We don't want to have it change while we're firing\n var subs = _this._subscribers;\n // Execute handlers in the reverse order in which they were registered.\n for (var i = subs.length - 1; i >= 0; i--) {\n var ret = subs[i].apply(null, args);\n if (_this._allowStopPropagation && !!ret) {\n // If the value was handled, early out.\n return true;\n }\n }\n return false;\n });\n this._subscribers = [];\n }\n SubscribableEvent.prototype.dispose = function () {\n this._subscribers = [];\n };\n SubscribableEvent.prototype.subscribe = function (callback) {\n this._subscribers = this._subscribers.concat(callback);\n return new SubscriptionToken(this, callback);\n };\n SubscribableEvent.prototype.unsubscribe = function (callback) {\n this._subscribers = this._subscribers.filter(function (value) { return value !== callback; });\n };\n return SubscribableEvent;\n}());\nexport default SubscribableEvent;\n","\"use strict\";\r\n/**\r\n* TelemetryEventBase.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* Holds ECS client telemetry event base\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar TelemetryEventBase = /** @class */ (function () {\r\n function TelemetryEventBase() {\r\n }\r\n TelemetryEventBase.prototype.getAttributes = function () {\r\n var attributes = {\r\n 'Source': 'ecs_client'\r\n };\r\n return attributes;\r\n };\r\n return TelemetryEventBase;\r\n}());\r\nexports.TelemetryEventBase = TelemetryEventBase;\r\n","import config from 'config';\r\nimport * as SyncTasks from 'synctasks';\r\nimport { BotInfoServiceModel } from '../models/BotServiceModel';\r\nimport { ApiCallOptions, BaseRestClient } from './BaseRestClient';\r\n\r\nclass BotsRestClient extends BaseRestClient {\r\n getBotInfo(botId: string): SyncTasks.Promise {\r\n const basePath = '/v1/bots/info/';\r\n const options: ApiCallOptions = {\r\n eventProperties: {\r\n genericEventPath: basePath,\r\n },\r\n };\r\n\r\n return this.performApiGet(basePath + botId, options);\r\n }\r\n\r\n addBotToContacts(botId: string, skypetoken: string) {\r\n const basePath = '/v1/bots/add/';\r\n const options: ApiCallOptions = {\r\n headers: {\r\n 'X-Skypetoken': skypetoken,\r\n },\r\n eventProperties: {\r\n genericEventPath: basePath,\r\n },\r\n };\r\n\r\n return this.performApiPut(basePath + botId, {}, options);\r\n }\r\n}\r\n\r\nexport default new BotsRestClient(config.urls.api.huddle);\r\n","function t(t,e,n,r){return new(n||(n=Promise))(function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function c(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){t.done?o(t.value):new n(function(e){e(t.value)}).then(a,c)}u((r=r.apply(t,e||[])).next())})}function e(t,e){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},\"function\"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw new TypeError(\"Generator is already executing.\");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]-1)return a('UA \"Edge\" => assuming success'),[2];if(x(document.body,n))return a(\"copyUsingTempSelection worked\"),[2];if(function(t){var e=document.createElement(\"div\");e.setAttribute(\"style\",\"-webkit-user-select: text !important\"),e.textContent=\"temporary element\",document.body.appendChild(e);var n=x(e,t);return document.body.removeChild(e),n}(n))return a(\"copyUsingTempElem worked\"),[2];if(void 0!==(t=n.getData(s))&&function(t){a(\"copyTextUsingDOM\");var e=document.createElement(\"div\");e.setAttribute(\"style\",\"-webkit-user-select: text !important\");var n=e;e.attachShadow&&(a(\"Using shadow DOM.\"),n=e.attachShadow({mode:\"open\"}));var r=document.createElement(\"span\");r.innerText=t,n.appendChild(r),document.body.appendChild(e),D(r);var o=document.execCommand(\"copy\");return E(),document.body.removeChild(e),o}(t))return a(\"copyTextUsingDOM worked\"),[2];throw new Error(\"Copy command failed.\")})})}function p(n){return t(this,void 0,void 0,function(){return e(this,function(t){return navigator.clipboard&&navigator.clipboard.writeText?(a(\"Using `navigator.clipboard.writeText()`.\"),[2,navigator.clipboard.writeText(n)]):[2,f(T(n))]})})}function v(){return t(this,void 0,void 0,function(){var t;return e(this,function(e){switch(e.label){case 0:return t=T,[4,h()];case 1:return[2,t.apply(void 0,[e.sent()])]}})})}function h(){return t(this,void 0,void 0,function(){return e(this,function(t){if(navigator.clipboard&&navigator.clipboard.readText)return a(\"Using `navigator.clipboard.readText()`.\"),[2,navigator.clipboard.readText()];if(C())return a(\"Reading text using IE strategy.\"),[2,k()];throw new Error(\"Read is not supported in your browser.\")})})}var b=!1;function m(){b||(c&&u('The deprecated default object of `clipboard-polyfill` was called. Please switch to `import * as clipboard from \"clipboard-polyfill\"` and see https://github.com/lgarron/clipboard-polyfill/issues/101 for more info.'),b=!0)}var w={DT:i,setDebugLog:function(t){return m(),l(t)},suppressWarnings:function(){return m(),d()},write:function(n){return t(this,void 0,void 0,function(){return e(this,function(t){return m(),[2,f(n)]})})},writeText:function(n){return t(this,void 0,void 0,function(){return e(this,function(t){return m(),[2,p(n)]})})},read:function(){return t(this,void 0,void 0,function(){return e(this,function(t){return m(),[2,v()]})})},readText:function(){return t(this,void 0,void 0,function(){return e(this,function(t){return m(),[2,h()]})})}},y=function(){this.success=!1};function g(t){var e=new y,n=function(t,e,n){a(\"listener called\"),t.success=!0,e.forEach(function(e,r){var o=n.clipboardData;o.setData(r,e),r===s&&o.getData(r)!==e&&(a(\"setting text/plain failed\"),t.success=!1)}),n.preventDefault()}.bind(this,e,t);document.addEventListener(\"copy\",n);try{document.execCommand(\"copy\")}finally{document.removeEventListener(\"copy\",n)}return e.success}function x(t,e){D(t);var n=g(e);return E(),n}function D(t){var e=document.getSelection();if(e){var n=document.createRange();n.selectNodeContents(t),e.removeAllRanges(),e.addRange(n)}}function E(){var t=document.getSelection();t&&t.removeAllRanges()}function T(t){var e=new i;return e.setData(s,t),e}function C(){return\"undefined\"==typeof ClipboardEvent&&void 0!==window.clipboardData&&void 0!==window.clipboardData.setData}function k(){return t(this,void 0,void 0,function(){var t;return e(this,function(e){if(\"\"===(t=window.clipboardData.getData(\"Text\")))throw new Error(\"Empty clipboard or could not read plain text from clipboard\");return[2,t]})})}export default w;export{i as DT,v as read,h as readText,l as setDebugLog,d as suppressWarnings,f as write,p as writeText};\n//# sourceMappingURL=clipboard-polyfill.esm.js.map\n","\"use strict\";\r\n/**\r\n* Cache.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* ECS data cache\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar subscribableevent_1 = require(\"subscribableevent\");\r\nvar SyncTasks = require(\"synctasks\");\r\nvar Models_1 = require(\"./Models\");\r\nvar Cache = /** @class */ (function () {\r\n function Cache(_config) {\r\n this._config = _config;\r\n this.configUpdated = new subscribableevent_1.default();\r\n this._cachedConfigs = {};\r\n // noop\r\n }\r\n Cache.prototype.initialize = function () {\r\n return this.updateConfigsToFetch();\r\n };\r\n Cache.prototype.updateConfigsToFetch = function () {\r\n var _this = this;\r\n var _a = this._config.getConfig(), databaseInterface = _a.databaseInterface, configsToFetch = _a.configsToFetch;\r\n // If we don't have DB support, we can't pre-populate any cache\r\n if (!databaseInterface) {\r\n return SyncTasks.Resolved();\r\n }\r\n var dbFetchPromises = [];\r\n var _loop_1 = function (configType) {\r\n // If we've already retrieved from the cache, don't fetch again\r\n if (this_1._cachedConfigs[configType]) {\r\n return \"continue\";\r\n }\r\n dbFetchPromises.push(databaseInterface.getData(configType).then(function (ecsConfig) {\r\n if (ecsConfig) {\r\n _this._cachedConfigs[configType] = ecsConfig;\r\n }\r\n }).catch(function () {\r\n // Return resolved no matter what happens\r\n return SyncTasks.Resolved();\r\n }));\r\n };\r\n var this_1 = this;\r\n for (var _i = 0, configsToFetch_1 = configsToFetch; _i < configsToFetch_1.length; _i++) {\r\n var configType = configsToFetch_1[_i];\r\n _loop_1(configType);\r\n }\r\n return SyncTasks.all(dbFetchPromises).then(function () {\r\n // If we fetched 1 or more configs, trigger a change\r\n if (dbFetchPromises.length > 0) {\r\n _this.configUpdated.fire();\r\n }\r\n });\r\n };\r\n Cache.prototype.getEcsConfig = function () {\r\n // Try user, then fallback to default\r\n return (this._cachedConfigs[Models_1.EcsConfigType.User] || this._cachedConfigs[Models_1.EcsConfigType.Default]);\r\n };\r\n Cache.prototype.getEcsConfigByType = function (configType) {\r\n return this._cachedConfigs[configType];\r\n };\r\n Cache.prototype.putConfig = function (ecsConfig) {\r\n // Store the config that we used before putting\r\n var oldEcsConfig = this.getEcsConfig();\r\n // Store new config\r\n this._cachedConfigs[ecsConfig.configType] = ecsConfig;\r\n var currentEcsConfig = this.getEcsConfig();\r\n // Only notify if the config of the same type changed or we've changed config types\r\n if (currentEcsConfig && currentEcsConfig.configType === ecsConfig.configType ||\r\n (oldEcsConfig && currentEcsConfig && oldEcsConfig.configType !== currentEcsConfig.configType)) {\r\n this.configUpdated.fire();\r\n }\r\n var databaseInterface = this._config.getConfig().databaseInterface;\r\n // If we don't have DB support, we can't pre-populate any cache\r\n if (!databaseInterface) {\r\n return SyncTasks.Resolved();\r\n }\r\n return databaseInterface.putData(ecsConfig.configType, ecsConfig);\r\n };\r\n return Cache;\r\n}());\r\nexports.default = Cache;\r\n","var SetCache = require('./_SetCache'),\n arrayIncludes = require('./_arrayIncludes'),\n arrayIncludesWith = require('./_arrayIncludesWith'),\n cacheHas = require('./_cacheHas'),\n createSet = require('./_createSet'),\n setToArray = require('./_setToArray');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\nmodule.exports = baseUniq;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","import { localizer } from '@skype/bew-localization';\r\nimport config from 'config';\r\nimport * as React from 'react';\r\nimport { clipboardHelper } from '../../helpers/ClipboardHelper';\r\n\r\nexport interface JoinLinkProps {\r\n shortId: string;\r\n}\r\n\r\ninterface JoinLinkState {\r\n copied: boolean;\r\n}\r\n\r\nconst removeProtocol = (url: string): string => url.replace('https://', '');\r\n\r\nexport class JoinLink extends React.Component {\r\n constructor(props: JoinLinkProps) {\r\n super(props);\r\n\r\n this.state = {\r\n copied: false,\r\n };\r\n }\r\n\r\n componentDidUpdate() {\r\n if (!this.state.copied) {\r\n return;\r\n }\r\n\r\n setTimeout(() => this.setState({\r\n copied: false,\r\n }), 5000);\r\n }\r\n\r\n render() {\r\n const copied = this.state.copied;\r\n const joinLink = `${ config.urls.app.join }/${ this.props.shortId }`;\r\n const joinLinkClassName = `joinLink ${ copied ? 'copied' : '' }`;\r\n\r\n return (\r\n

\r\n { localizer.getString('txt_launch_universal_link_fallback') }\r\n\r\n
\r\n { removeProtocol(joinLink) }\r\n
\r\n\r\n { copied &&
\r\n { localizer.getString('txt_launch_link_copied') }\r\n
}\r\n
\r\n );\r\n }\r\n\r\n private _getClickHandler = (joinLink: string) => () => {\r\n clipboardHelper.copyToClipboard(joinLink);\r\n\r\n this.setState({\r\n copied: true,\r\n });\r\n }\r\n\r\n private _getKeyDownHandler = (joinLink: string) => (e: React.KeyboardEvent) => {\r\n if (13 !== e.keyCode) {\r\n return;\r\n }\r\n\r\n this._getClickHandler(joinLink)();\r\n }\r\n}\r\n","import { ErrorHandlingType, WebErrorResponse } from 'simplerestclients';\r\nimport { ConversationServiceModel, RawConversationServiceModel } from '../models/ConversationServiceModel';\r\n\r\ntype Transform = (model: RawConversationServiceModel) => ConversationServiceModel;\r\n\r\nfunction transform(model: RawConversationServiceModel): ConversationServiceModel {\r\n return {\r\n action: 'Chat',\r\n flowId: model.flowId,\r\n id: model.longId,\r\n resource: model.threadId,\r\n };\r\n}\r\n\r\nexport const transformWrapper = (shortId: string): Transform =>\r\n (model: RawConversationServiceModel): ConversationServiceModel => ({\r\n ...transform(model),\r\n shortId,\r\n });\r\n\r\nconst shouldRetry = (statusCode: number): boolean =>\r\n statusCode === 0 || (statusCode >= 500 && statusCode < 600);\r\n\r\n// @todo: add logging if needed\r\nexport const customErrorHandler = ({ }, errResp: WebErrorResponse): ErrorHandlingType =>\r\n shouldRetry(errResp.statusCode) ? ErrorHandlingType.RetryCountedWithBackoff : ErrorHandlingType.DoNotRetry;\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Avatar, Button, Header, Icon, Layout, Text } from '@stardust-ui/react';\r\nimport config from 'config';\r\nimport * as React from 'react';\r\nimport { ConfigContext, ConfigContextConsumer } from 'src/ts/contexts/ConfigContext';\r\nimport { canJoinOnWeb, deviceType, DeviceTypes, isSafariBrowserEligibleForMeetingGuestFlow, OperatingSystems, os } from 'src/ts/helpers/EnvironmentHelper';\r\nimport { logger } from 'src/ts/helpers/LoggerHelper';\r\nimport { UrlHelper } from 'src/ts/helpers/UrlHelper';\r\nimport { IMeetNowSettings } from 'src/ts/meetnow/MeetNowSettings';\r\nimport { handleJoin } from 'src/ts/meetnowJoin/JoinHandler';\r\nimport { EcsContextConsumer } from '../../../contexts/EcsContext';\r\nimport { MeetingContext, MeetingContextConsumer } from '../../../contexts/meetings/MeetingContext';\r\nimport { StackNavigationContext, StackNavigationContextConsumer } from '../../../contexts/StackNavigationContext';\r\nimport { UserContextConsumer } from '../../../contexts/UserContext';\r\nimport { CookieHelper } from '../../../helpers/CookieHelper';\r\nimport { getRedirectSubdomain } from '../../../helpers/SafariRedirectHelper';\r\nimport { UserProfile } from '../../../models/ProfileServiceModel';\r\nimport { COUNTRY_CHINA } from '../../../models/SharedTypes';\r\nimport { ErrorModal } from '../../common/ErrorModal';\r\nimport { GuestLogin } from './GuestLogin';\r\n\r\ninterface UnifiedLoginMethodProps {\r\n onLaunchClick: () => void;\r\n allowDesktopSafariGuestFlow: boolean;\r\n meetNowSettings: IMeetNowSettings;\r\n country?: string;\r\n}\r\n\r\ninterface UnifiedLoginMethodState {\r\n isMeetingRedirectInProgress: boolean;\r\n handleJoinError?: Error;\r\n}\r\n\r\nexport class UnifiedLoginMethod extends React.PureComponent {\r\n public readonly state: UnifiedLoginMethodState = { isMeetingRedirectInProgress: false };\r\n\r\n render() {\r\n return
\r\n { this._renderTitle() }\r\n { this._renderActions() }\r\n
;\r\n }\r\n\r\n private _renderTitle() {\r\n return { (userContext) =>\r\n
\r\n { userContext.profile ?\r\n localizer.getString('Login.txt_sign_in_with_title')\r\n :\r\n localizer.getString('Meetings.txt_join_meeting_title')\r\n }\r\n
\r\n }
;\r\n }\r\n\r\n private _renderActions() {\r\n return { (userContext) => {\r\n const canJoinOnWebWithSafariException = this._canJoinOnWebWithSafariException(!userContext.profile);\r\n\r\n return
\r\n
\r\n { canJoinOnWebWithSafariException ? (\r\n userContext.profile ?\r\n this._renderAuthenticatedActions(userContext.profile) :\r\n this._renderUnauthenticatedActions()\r\n ) : (\r\n <>\r\n { this.renderDownloadButton(!userContext.profile) }\r\n { this.renderDesktopBody(!userContext.profile) }\r\n \r\n ) }\r\n
\r\n { canJoinOnWebWithSafariException && this.renderDownloadButton(!userContext.profile) }\r\n { canJoinOnWebWithSafariException && this.renderDesktopBody(!userContext.profile) }\r\n {\r\n this.state.handleJoinError &&\r\n \r\n {\r\n (configContext) => this.state.handleJoinError && (\r\n {\r\n this.setState({\r\n handleJoinError: undefined,\r\n });\r\n }\r\n } />\r\n )\r\n }\r\n \r\n }\r\n
;\r\n }}
;\r\n }\r\n\r\n private renderDesktopBody = (isGuest: boolean) => {\r\n if (deviceType !== DeviceTypes.Desktop) {\r\n return null;\r\n }\r\n\r\n if (this._canJoinOnWebWithSafariException(isGuest)) {\r\n return (\r\n \r\n { localizer.getString('Meetings.txt_join_meeting_description') } \r\n { { localizer.getString('Meetings.lnk_join_meeting_retry') }\r\n }\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n \r\n { localizer.getString('Meetings.txt_join_meeting_description') }\r\n \r\n \r\n { localizer.getString('Meetings.lnk_join_meeting_retry') }\r\n \r\n \r\n );\r\n }\r\n\r\n private renderDownloadButton = (isGuest: boolean) => {\r\n if (this._canJoinOnWebWithSafariException(isGuest)) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private downloadSkype = () => {\r\n logger.sessionFinished({completionType: 'DownloadSkypeButton'});\r\n const downloadUrl = os === OperatingSystems.MacOS ? config.urls.app.downloadDesktop : config.urls.app.download;\r\n window.location.href = downloadUrl;\r\n }\r\n\r\n private _renderAuthenticatedActions(userProfile: UserProfile) {\r\n return { (meetingContext) => meetingContext &&\r\n <>\r\n { (configContext) =>\r\n this._renderAccounts(userProfile, meetingContext, configContext) }\r\n \r\n { this._renderWhatsThis() }\r\n \r\n };\r\n }\r\n\r\n private _renderAccounts(userProfile: UserProfile, meetingContext: MeetingContext, configContext: ConfigContext) {\r\n const email: string | undefined = userProfile.emails && userProfile.emails.length ?\r\n userProfile.emails[0] : undefined;\r\n const name: string = userProfile.firstname && userProfile.lastname ?\r\n `${ userProfile.firstname } ${ userProfile.lastname }` : userProfile.username;\r\n const avatarImage = {\r\n src: userProfile.avatarUrl || `${ configContext.basePath }/images/avatar.jpg`,\r\n styles: { width: '100%', height: '100%', objectFit: 'cover' },\r\n };\r\n\r\n const currentAccountAvatar = ;\r\n const currentAccountText = { name } }\r\n end={ { email } } />;\r\n const currentAccount = { (ecsContext) =>\r\n \r\n };\r\n\r\n const otherAccountIcon = ;\r\n const otherAccountText = { localizer.getString('Login.btn_use_other_account') } } />;\r\n const otherAccount = { (ecsContext) =>\r\n \r\n };\r\n\r\n return
\r\n \r\n
;\r\n }\r\n\r\n private _joinOnWebAsGuest = (stackNavigationContext: StackNavigationContext, meetingContext: MeetingContext) => {\r\n return () => {\r\n logger.action({ name: 'join-as-guest' });\r\n logger.sessionIntermediateStep({eventType: 'JoinOnWebAsGuestInitialClickUnifiedView'});\r\n\r\n if (canJoinOnWeb) {\r\n if (this.props.meetNowSettings) {\r\n this.setState({\r\n isMeetingRedirectInProgress: true,\r\n });\r\n\r\n handleJoin(this.props.meetNowSettings, {\r\n action: 'joinmeetnow',\r\n flowId: logger.getCorrelationId(),\r\n id: '',\r\n resource: meetingContext.conversation.resource,\r\n shortId: UrlHelper.getShortIdFromUrl(),\r\n }, undefined, true).then(() => {\r\n this.setState({\r\n isMeetingRedirectInProgress: false,\r\n });\r\n }).catch((err) => {\r\n logger.error(err);\r\n this.setState({\r\n isMeetingRedirectInProgress: false,\r\n handleJoinError: err,\r\n });\r\n });\r\n } else {\r\n logger.action({ name: 'join-as-guest-fallback' });\r\n stackNavigationContext.push(, { eventViewName: 'guest-login' });\r\n }\r\n } else {\r\n logger.action({ name: 'join-as-guest-fallback' });\r\n stackNavigationContext.push(, { eventViewName: 'guest-login' });\r\n }\r\n };\r\n }\r\n\r\n private _joinOnWebOtherAccount = (meetingContext: MeetingContext, webSubdomainForRedirect: string | undefined) => {\r\n return () => {\r\n logger.action({ name: 'join-logout' });\r\n logger.sessionFinished({completionType: 'JoinOnWebOtherAccount'});\r\n const webClientUrl = UrlHelper.getWebClientUrlWithCorrelationId({ threadId: meetingContext.conversation.resource }, webSubdomainForRedirect);\r\n window.location.href = config.urls.app.logout(webClientUrl, CookieHelper.getCookie(config.cookies.csrf).singleValue);\r\n };\r\n }\r\n\r\n private _joinOnWeb = (meetingContext: MeetingContext, isUnauthenticatedFlow: boolean, webSubdomainForRedirect: string | undefined) => {\r\n return () => {\r\n logger.action({ name: 'join-login' });\r\n logger.sessionFinished({completionType: 'JoinOnWeb'});\r\n if (isUnauthenticatedFlow) {\r\n const webClientUrl = UrlHelper.getWebClientUrlWithCorrelationId({ threadId: meetingContext.conversation.resource }, webSubdomainForRedirect);\r\n window.location.href = config.urls.app.logout(webClientUrl, CookieHelper.getCookie(config.cookies.csrf).singleValue);\r\n } else {\r\n window.location.assign(UrlHelper.getWebClientUrlWithCorrelationId({ threadId: meetingContext.conversation.resource }, webSubdomainForRedirect));\r\n }\r\n };\r\n }\r\n\r\n private _renderUnauthenticatedActions() {\r\n return <>\r\n {\r\n this.props.country === COUNTRY_CHINA && this._renderDataProcessingStatement()\r\n }\r\n { (stackNavigationContext) =>\r\n { (meetingContext) => meetingContext &&\r\n \r\n }\r\n \r\n }\r\n {canJoinOnWeb && { (meetingContext) => meetingContext &&\r\n { (ecsContext) =>\r\n <>\r\n \r\n { this._renderWhatsThis() }\r\n \r\n }\r\n }}\r\n ;\r\n }\r\n private _renderDataProcessingStatement() {\r\n return (\r\n <>\r\n \r\n { localizer.getString('china_data_processing.header') }\r\n

{ localizer.get('china_data_processing.paragraph_1', {\r\n learnMoreLink: {\r\n type: 'a', href: 'https://support.microsoft.com/topic/' +\r\n 'why-does-my-data-need-to-transfer-from-china-to-another-country-when-i-use-this-microsoft-product-b7b538b0-fd1c-4177-ba24-8b8c97defef6',\r\n },\r\n }) }

\r\n

{ localizer.get('china_data_processing.paragraph_2', {\r\n learnMoreLink: {\r\n type: 'a', href: 'https://support.microsoft.com/topic/' +\r\n 'why-does-my-data-need-to-transfer-from-china-to-another-country-when-i-use-this-microsoft-product-b7b538b0-fd1c-4177-ba24-8b8c97defef6',\r\n },\r\n refundLink: { type: 'a', href: 'https://aka.ms/refund' },\r\n }) }

\r\n

{ localizer.get('china_data_processing.paragraph_3', {\r\n learnMoreLink: {\r\n type: 'a', href: 'https://support.microsoft.com/topic/' +\r\n 'why-does-my-data-need-to-transfer-from-china-to-another-country-when-i-use-this-microsoft-product-b7b538b0-fd1c-4177-ba24-8b8c97defef6',\r\n },\r\n privacyStatementLink: { type: 'a', href: 'https://privacy.microsoft.com/privacystatement' },\r\n }) }

\r\n
\r\n \r\n );\r\n }\r\n\r\n private _renderWhatsThis() {\r\n return this._renderTextWithLink(\r\n 'help',\r\n localizer.getString('Login.txt_use_ms_account'),\r\n 'https://go.skype.com/help.password.faq.unifiedview',\r\n 'what-is-msa',\r\n localizer.getString('Login.lnk_a11y_what_is_ms_account'));\r\n }\r\n\r\n private _renderTextWithLink(className: string, text: string, linkUrl: string, linkClickTelemetryLoggerAction: string, label: string) {\r\n return \r\n { text }\r\n  \r\n logger.action({ name: linkClickTelemetryLoggerAction }) }\r\n target='_blank'\r\n style={ { color: '#0078d4' } }\r\n aria-label={ label } >\r\n { label }\r\n \r\n ;\r\n }\r\n\r\n private _canJoinOnWebWithSafariException = (isGuest: boolean): boolean => {\r\n if (this.props.allowDesktopSafariGuestFlow && isGuest && os === OperatingSystems.MacOS) {\r\n return canJoinOnWeb || isSafariBrowserEligibleForMeetingGuestFlow;\r\n }\r\n\r\n return canJoinOnWeb;\r\n }\r\n}\r\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n","import { ThemeInput } from '@stardust-ui/react';\r\n\r\nconst theme: ThemeInput = {\r\n componentStyles: {\r\n Button: {\r\n root: {\r\n fontSize: '80%',\r\n height: '3.5rem',\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport default theme;\r\n","import { localizer } from '@skype/bew-localization';\r\nimport * as React from 'react';\r\nimport { WebErrorResponse } from 'simplerestclients';\r\nimport * as SyncTasks from 'synctasks';\r\nimport { AriaContextConsumer } from '../../contexts/AriaContext';\r\nimport { BotsContext, BotsContextProvider } from '../../contexts/bots/BotsContext';\r\nimport { UserContext, UserContextConsumer } from '../../contexts/UserContext';\r\nimport { displayableErrors, ErrorHelper } from '../../helpers/ErrorHelper';\r\nimport { CommonProperty, logger } from '../../helpers/LoggerHelper';\r\nimport BotsRestClient from '../../rest/BotsRestClient';\r\nimport { ARootView, ARootViewProps } from '../common/ARootView';\r\nimport { StackNavigationView } from '../common/StackNavigationView';\r\nimport { AddBotView } from './AddBotView';\r\n\r\nexport interface RootViewState {\r\n context?: BotsContext;\r\n error?: Error | undefined;\r\n isAddBotInProgress: boolean;\r\n}\r\n\r\ninterface RootViewProps extends ARootViewProps {\r\n skypetoken: string | undefined;\r\n}\r\n\r\nexport class RootView extends ARootView {\r\n public readonly state: RootViewState = { isAddBotInProgress: false };\r\n\r\n componentDidMount() {\r\n const botId = this._getBotIdFromUrl();\r\n if (!botId) {\r\n throw displayableErrors.BotNotFound;\r\n }\r\n\r\n logger.initCommonProperty({ key: CommonProperty.BotId, value: botId });\r\n\r\n this._getBotInfo(botId)\r\n .then((botInfo) => {\r\n const context: BotsContext = { botId, botInfo, isAddedAsContact: false };\r\n this.setState({ context });\r\n }).catch((error: Error) => {\r\n this.setState({\r\n error,\r\n });\r\n });\r\n }\r\n\r\n componentDidUpdate(prevProps: ARootViewProps) {\r\n if (prevProps.loading && !this.props.loading) {\r\n document.title = localizer.getString('add_bot_to_contacts');\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.error) {\r\n throw this.state.error;\r\n }\r\n\r\n return \r\n \r\n { (userContext) =>\r\n { (ariaContext) =>\r\n \r\n )}\r\n initialViewProps={ { eventViewName: 'add-bot-view' } } />\r\n }\r\n }\r\n \r\n ;\r\n }\r\n\r\n private readonly handleAddBotViewProgress = () => this.setState({ isAddBotInProgress: true });\r\n\r\n private readonly handleAddBotViewAdd =\r\n () => this.setState((state) => ({ context: { ...state.context!, isAddedAsContact: true }, isAddBotInProgress: false }))\r\n\r\n private readonly handleAddBotViewError = (error: Error) => this.setState({ error, isAddBotInProgress: false });\r\n\r\n private _getBotInfo(botId: string) {\r\n return BotsRestClient.getBotInfo(botId)\r\n .catch((response: WebErrorResponse) => {\r\n const error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.BotNotFound, response, 'Get bot info');\r\n return SyncTasks.Rejected(error);\r\n });\r\n }\r\n\r\n private _isLoading = (userContext: UserContext) => {\r\n return this.props.loading || !(this.state.context && this.state.context.botInfo) || userContext.isLoginInProgress || this.state.isAddBotInProgress;\r\n }\r\n\r\n private _getBotIdFromUrl() {\r\n const pathName = window.location.pathname.replace(/\\/+$/, '');\r\n const pathParts = pathName.split('/');\r\n\r\n return pathParts.pop();\r\n }\r\n}\r\n","import config from 'config';\r\nimport { S4LParameters } from '../config/BaseConfig';\r\nimport { Dictionary } from '../models/SharedTypes';\r\nimport { displayableErrors } from './ErrorHelper';\r\nimport { logger } from './LoggerHelper';\r\n\r\ninterface KeyValuePair {\r\n key: string;\r\n value: string;\r\n}\r\n\r\nexport class UrlHelper {\r\n\r\n static getWebClientUrl(params: S4LParameters, webSubdomainForRedirect?: string | undefined) {\r\n // Websubdomain allow us to try out the integration with different version of webshell\r\n // Current up to date list is available: candidate, preview, dev, alpha, beta\r\n const { webSubDomain } = UrlHelper.getQueryParameters() as Dictionary;\r\n\r\n // webSubDomain passed by query param takes precedence to ECS config\r\n return config.urls.app.s4lWeb(params, webSubDomain || webSubdomainForRedirect);\r\n }\r\n\r\n static getWebClientUrlWithCorrelationId(params: S4LParameters, webSubdomainForRedirect?: string | undefined) {\r\n const url = UrlHelper.getWebClientUrl(params, webSubdomainForRedirect);\r\n\r\n return `${url}${url.includes('?') ? '&' : '?'}correlationId=${logger.getCorrelationId()}`;\r\n }\r\n\r\n static getAllowedQueryParameters(allowedParameters: string[]): KeyValuePair[] {\r\n return allowedParameters\r\n .map((param: string) => ({\r\n key: param,\r\n value: UrlHelper.getQueryParameter(param),\r\n } as KeyValuePair))\r\n .filter((pair: KeyValuePair) => pair.value);\r\n }\r\n\r\n static getQueryParameters() {\r\n if (!location.search || location.search.length < 1) {\r\n return {} as Dictionary;\r\n }\r\n\r\n return location.search\r\n .substr(1)\r\n .split('&')\r\n .map((value) => {\r\n const split = value.split('=');\r\n return {\r\n key: decodeURIComponent(split[0]),\r\n value: decodeURIComponent(split[1] || ''),\r\n } as KeyValuePair;\r\n })\r\n .reduce((prev, current) => {\r\n if (!!prev[current.key]) {\r\n const prevValue = prev[current.key];\r\n if (typeof prevValue === 'string') {\r\n prev[current.key] = [prev[current.key] as string];\r\n }\r\n (prev[current.key] as string[]).push(current.value);\r\n } else {\r\n prev[current.key] = current.value;\r\n }\r\n return prev;\r\n }, {} as Dictionary);\r\n }\r\n\r\n static getQueryParameter(key: string): string | string[] {\r\n return UrlHelper.getQueryParameters()[key];\r\n }\r\n\r\n static getQueryParameterAsString(key: string): string {\r\n return `${UrlHelper.getQueryParameter(key) || ''}`;\r\n }\r\n\r\n static getShortIdFromUrl(): string {\r\n const pathName = window.location.pathname.replace(/\\/+$/, '');\r\n const pathParts = pathName.split('/');\r\n const shortId = pathParts.pop();\r\n\r\n if (!shortId) {\r\n throw displayableErrors.ShortIdFromUrl;\r\n }\r\n\r\n return shortId;\r\n }\r\n}\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Button } from '@stardust-ui/react';\r\nimport React from 'react';\r\nimport { ErrorDetails } from './ErrorDetails';\r\n\r\nexport interface ErrorModalProps {\r\n error: Error;\r\n assetsBasePath?: string;\r\n onClose: () => void;\r\n}\r\n\r\nexport class ErrorModal extends React.PureComponent {\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import { Config } from 'config';\r\nimport * as React from 'react';\r\n\r\nexport interface ConfigContext extends Config {\r\n basePath: string;\r\n language: string;\r\n switchLanguage: (language: string) => void;\r\n}\r\n\r\n// Default context does not mean much sense here\r\nconst context = React.createContext({} as ConfigContext);\r\n\r\nexport const ConfigContextProvider = context.Provider;\r\n\r\nexport const ConfigContextConsumer = context.Consumer;\r\n","export { default as common } from './common';\r\nexport { default as light } from './light';\r\nexport { default as teams } from './teams';\r\n","import { AWTPiiKind } from '@aria/webjs-sdk';\r\nimport { localizer } from '@skype/bew-localization';\r\nimport * as React from 'react';\r\nimport { WebErrorResponse } from 'simplerestclients';\r\nimport { AriaContextConsumer } from 'src/ts/contexts/AriaContext';\r\nimport { EcsSettings } from 'src/ts/contexts/EcsContext';\r\nimport { UserContext } from 'src/ts/contexts/UserContext';\r\nimport { UrlHelper } from 'src/ts/helpers/UrlHelper';\r\nimport getMeetNowSettings from 'src/ts/meetnow/MeetNowSettings';\r\nimport { handleJoin } from 'src/ts/meetnowJoin/JoinHandler';\r\nimport { AppIds } from 'src/ts/models/SharedTypes';\r\nimport HuddleApiClient from 'src/ts/rest/HuddleApiClient';\r\nimport MeetingsApiClient from 'src/ts/rest/MeetingsApiClient';\r\nimport { MeetingContext, MeetingContextProvider } from '../../contexts/meetings/MeetingContext';\r\nimport { canJoinOnWeb, deviceType, DeviceTypes } from '../../helpers/EnvironmentHelper';\r\nimport { displayableErrors, ErrorHelper } from '../../helpers/ErrorHelper';\r\nimport { CommonProperty, logger } from '../../helpers/LoggerHelper';\r\nimport { ARootView, ARootViewProps } from '../common/ARootView';\r\nimport { LoadingView } from '../common/LoadingView';\r\nimport { StackNavigationView } from '../common/StackNavigationView';\r\nimport { JoinView } from './JoinView';\r\nimport { Launcher } from './Launcher';\r\nimport { UnifiedView } from './UnifiedView';\r\n\r\nexport interface RootViewState {\r\n launcherKey: number;\r\n meetingContext?: MeetingContext;\r\n error?: Error;\r\n loadingConversation: boolean;\r\n}\r\n\r\ninterface RootViewProps extends ARootViewProps {\r\n userContext: UserContext;\r\n ecsSettings: EcsSettings;\r\n country?: string;\r\n}\r\n\r\nenum SilentLoginStatus {\r\n Started,\r\n Ended,\r\n Skipped,\r\n}\r\n\r\nexport class RootView extends ARootView {\r\n\r\n private _silentLoginStatus: SilentLoginStatus;\r\n private _preRequisitesLoadCompleted = false;\r\n\r\n constructor(props: RootViewProps) {\r\n super(props);\r\n\r\n this.state = {\r\n launcherKey: deviceType === DeviceTypes.Desktop ? 1 : 0,\r\n loadingConversation: true,\r\n };\r\n\r\n this._silentLoginStatus = !!props.userContext.silentLoginNotSupported ? SilentLoginStatus.Skipped : SilentLoginStatus.Started;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.userContext && !this.props.userContext.isLoginInProgress && !this.props.loading) {\r\n this.loadConversation();\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: RootViewProps) {\r\n if (prevProps.loading && !this.props.loading) {\r\n document.title = localizer.getString('hdr_launch_title');\r\n }\r\n\r\n if (prevProps && !!prevProps.userContext &&\r\n prevProps.userContext.isLoginInProgress && !this.props.userContext.isLoginInProgress) {\r\n this._silentLoginStatus = SilentLoginStatus.Ended;\r\n }\r\n\r\n if (prevProps.loading && !this.props.loading) {\r\n this._preRequisitesLoadCompleted = true;\r\n }\r\n\r\n if ((this._silentLoginStatus === SilentLoginStatus.Skipped || this._silentLoginStatus === SilentLoginStatus.Ended) &&\r\n this._preRequisitesLoadCompleted &&\r\n !this.state.meetingContext &&\r\n !this.state.error) {\r\n this.loadConversation();\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.error) {\r\n throw this.state.error;\r\n }\r\n\r\n const conversation = this.state.meetingContext ? this.state.meetingContext.conversation : undefined;\r\n const isLoading = this.props.loading || this.state.loadingConversation;\r\n return \r\n { !!this.state.launcherKey && conversation && }\r\n { (ariaContext) => {\r\n if (isLoading) {\r\n return ;\r\n } else {\r\n return ;\r\n }\r\n }\r\n }\r\n ;\r\n }\r\n\r\n private getLoginView = () => {\r\n const useUnifiedView = this.determineIsItUnifiedView(this.props.ecsSettings.useUnifiedView);\r\n const meetNowSettings = getMeetNowSettings();\r\n if (useUnifiedView) {\r\n return ;\r\n }\r\n\r\n const threadId = this.state.meetingContext && this.state.meetingContext.conversation ? this.state.meetingContext.conversation.resource : undefined;\r\n if (deviceType !== DeviceTypes.Mobile || threadId === undefined) {\r\n return ;\r\n } else {\r\n const legacyMobileFlowView =\r\n ;\r\n if (canJoinOnWeb && !!this.props.ecsSettings.useNewMobileJoinFlow) {\r\n try {\r\n if (meetNowSettings) {\r\n // For supported mobile browsers, attempt to go straight to a call if we didn't deep-link into the app already\r\n // (since most likely, the app is not installed on the device, or the user pasted the link in the browser)\r\n handleJoin(meetNowSettings, {\r\n action: 'joinmeetnow',\r\n flowId: logger.getCorrelationId(),\r\n id: '',\r\n resource: threadId,\r\n shortId: this._getShortIdFromUrl(),\r\n }, this.props.userContext?.skypetoken, true).catch((err) => {\r\n logger.error(err);\r\n this.setState({\r\n error: err,\r\n });\r\n });\r\n return null;\r\n } else {\r\n return legacyMobileFlowView;\r\n }\r\n } catch (err) {\r\n logger.error(err);\r\n return legacyMobileFlowView;\r\n }\r\n } else {\r\n // For unsupported mobile browsers, fallback to old mobile join page allowing users to \"Download Skype\"\r\n return legacyMobileFlowView;\r\n }\r\n }\r\n }\r\n\r\n private determineIsItUnifiedView(unifiedViewEcsSettings: boolean) {\r\n return (unifiedViewEcsSettings && deviceType === DeviceTypes.Desktop);\r\n }\r\n\r\n private loadConversation = () => {\r\n const shortId = this._getShortIdFromUrl();\r\n\r\n if (this.props.userContext) {\r\n if (this.props.ecsSettings.useMeetingsApi) {\r\n this.loadConversationFromMeetingsApi(shortId);\r\n } else {\r\n this.loadConversationFromHuddleApi(shortId);\r\n }\r\n }\r\n }\r\n\r\n private loadConversationFromHuddleApi(shortId: string) {\r\n HuddleApiClient.getConversation({\r\n shortId,\r\n type: AppIds.Meetings,\r\n }).then((conversation) => {\r\n this.setState({\r\n loadingConversation: false,\r\n meetingContext: {\r\n conversation,\r\n shortId,\r\n },\r\n });\r\n logger.initCommonProperty({ key: CommonProperty.ThreadId, value: conversation.resource, piiKind: AWTPiiKind.GenericData });\r\n }).catch((response: WebErrorResponse) => {\r\n const error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.ShortIdFromUrl, response, 'Get conversation details');\r\n this.setState({\r\n error,\r\n });\r\n });\r\n }\r\n\r\n private loadConversationFromMeetingsApi(shortId: string) {\r\n MeetingsApiClient.getConversation({\r\n shortId,\r\n type: AppIds.Meetings,\r\n }, this.props.ecsSettings.maxRetries).then((conversation) => {\r\n this.setState({\r\n loadingConversation: false,\r\n meetingContext: {\r\n conversation,\r\n shortId,\r\n },\r\n });\r\n logger.initCommonProperty({ key: CommonProperty.ThreadId, value: conversation.resource, piiKind: AWTPiiKind.GenericData });\r\n }).catch((response: WebErrorResponse) => {\r\n const error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.ShortIdFromUrl, response, 'Get conversation details');\r\n this.setState({\r\n error,\r\n });\r\n });\r\n }\r\n\r\n private _getShortIdFromUrl(): string {\r\n return UrlHelper.getShortIdFromUrl();\r\n }\r\n\r\n private _onLaunchClick = () => {\r\n logger.sessionFinished({completionType: 'LaunchSkypeNowButton'});\r\n this.setState((oldState) => {\r\n return { launcherKey: oldState.launcherKey + 1 };\r\n });\r\n }\r\n}\r\n","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n","import { AWTEventPriority, AWTPiiKind, AWTPropertyType } from '@aria/webjs-sdk';\r\nimport config from 'config';\r\nimport curry from 'lodash/curry';\r\nimport { CookieHelper } from '../helpers/CookieHelper';\r\nimport { CommonProperty, logger } from '../helpers/LoggerHelper';\r\nimport { doPostRedirect } from '../helpers/RedirectHelper';\r\nimport { SilentLoginResult } from '../helpers/SilentLoginHelper';\r\nimport { getMsaCidHexFromSkypeToken, getSkypeIdFromSkypeToken } from '../helpers/SkypeTokenHelper';\r\nimport { UrlHelper } from '../helpers/UrlHelper';\r\nimport { ConversationServiceModel } from '../models/ConversationServiceModel';\r\nimport {\r\n CreateMeetingServiceModel,\r\n MeetnowGuestServiceModel,\r\n WebClientRedirectParams,\r\n} from '../models/GuestUserServiceModel';\r\nimport { AppIds } from '../models/SharedTypes';\r\nimport MeetingsApiClient from '../rest/MeetingsApiClient';\r\nimport { triggerFallbackFlow } from './FallbackFlow';\r\nimport { IMeetNowSettings } from './MeetNowSettings';\r\n\r\nexport const getShortIdFromJoinLink = (joinLink: string): string => joinLink.split('/').pop() || '';\r\n\r\nexport const getSource = () => {\r\n const source = UrlHelper.getQueryParameter('source');\r\n return source ? `${source}` : undefined;\r\n};\r\n\r\nexport const logShortIdAndThreadId = (meeting: CreateMeetingServiceModel): CreateMeetingServiceModel => {\r\n logger.initCommonProperty({\r\n key: CommonProperty.ShortId,\r\n value: getShortIdFromJoinLink(meeting.joinLink),\r\n piiKind: AWTPiiKind.GenericData,\r\n type: AWTPropertyType.String,\r\n });\r\n logger.initCommonProperty({\r\n key: CommonProperty.ThreadId,\r\n value: meeting.threadId,\r\n piiKind: AWTPiiKind.GenericData,\r\n type: AWTPropertyType.String,\r\n });\r\n\r\n return meeting;\r\n};\r\n\r\nexport const logUserId = (meeting: MeetnowGuestServiceModel): MeetnowGuestServiceModel => {\r\n logger.addSkypeIdAndMsaCidHexCommonProperties(meeting.skypetoken, true);\r\n\r\n return meeting;\r\n};\r\n\r\nexport const createConversationServiceModel = (meeting: CreateMeetingServiceModel): ConversationServiceModel => {\r\n return {\r\n shortId: getShortIdFromJoinLink(meeting.joinLink),\r\n resource: meeting.threadId,\r\n id: '',\r\n flowId: '',\r\n action: '',\r\n };\r\n};\r\n\r\nexport const createGuestMeeting = (settings: IMeetNowSettings, source = 'HuddleUi') => {\r\n return MeetingsApiClient.createGuestMeeting({ title: settings.DefaultMeetingTitle, source }, settings.MeetNowEdgeNumberOfFetchRetries);\r\n};\r\n\r\nexport const createMeetnowGuest = (settings: IMeetNowSettings, source = 'HuddleUi') => {\r\n const localizedGuestDefaultName = document.getElementById('meetnowContainer')?.getAttribute('data-guest-user-localized-text') ?? 'Guest user';\r\n return MeetingsApiClient.meetnowGuest({\r\n displayName: localizedGuestDefaultName,\r\n source,\r\n }, settings.MeetNowEdgeNumberOfFetchRetries);\r\n};\r\n\r\nexport const createAuthenticatedMeeting = (settings: IMeetNowSettings, loginResult: SilentLoginResult, source = 'HuddleUi') => {\r\n return MeetingsApiClient\r\n .createAuthenticatedMeeting({ title: settings.DefaultMeetingTitle, SkypeToken: loginResult.skypetoken, source }, settings.MeetNowEdgeNumberOfFetchRetries);\r\n};\r\n\r\nexport const getThreadId = curry((settings: IMeetNowSettings, shortId: string) => {\r\n const params = {\r\n shortId,\r\n type: AppIds.Meetings,\r\n };\r\n\r\n return MeetingsApiClient\r\n .getConversation(params, settings.MeetNowEdgeNumberOfFetchRetries)\r\n .then((conversion) => {\r\n logger.initCommonProperty({\r\n key: CommonProperty.ThreadId,\r\n value: conversion.resource,\r\n piiKind: AWTPiiKind.GenericData,\r\n type: AWTPropertyType.String,\r\n });\r\n return conversion;\r\n })\r\n .then((conversion) => ({ shortId, ...conversion }));\r\n});\r\n\r\nexport const buildWebClientRedirectParamsForAuthenticatedFlow =\r\n curry((loginResult: SilentLoginResult, conversationServiceModel: ConversationServiceModel): WebClientRedirectParams => {\r\n return {\r\n threadId: conversationServiceModel.resource,\r\n shortId: conversationServiceModel.shortId,\r\n skypetoken: loginResult.skypetoken,\r\n skypeId: getSkypeIdFromSkypeToken(loginResult.skypetoken) || '',\r\n };\r\n });\r\n\r\nexport const buildWebClientRedirectParamsFromMeetnowGuestServiceModel = (meetnowGuestServiceModel: MeetnowGuestServiceModel): WebClientRedirectParams => {\r\n return {\r\n skypetoken: meetnowGuestServiceModel.skypetoken,\r\n skypeId: meetnowGuestServiceModel.skypeId,\r\n threadId: meetnowGuestServiceModel.threadId,\r\n shortId: getShortIdFromJoinLink(meetnowGuestServiceModel.joinLink),\r\n };\r\n};\r\nexport const redirectToSkypeClient = curry((\r\n settings: IMeetNowSettings,\r\n completionType: string,\r\n action: string,\r\n isNewJoinFlowFromJoinLink: boolean,\r\n webClientRedirectParams: WebClientRedirectParams): void => {\r\n const params = {\r\n skypetoken: webClientRedirectParams.skypetoken,\r\n expires_in: 24 * 3600,\r\n skypeid: webClientRedirectParams.skypeId,\r\n state: CookieHelper.getCookie(config.cookies.csrf).singleValue,\r\n msacidhex: getMsaCidHexFromSkypeToken(webClientRedirectParams.skypetoken) || '',\r\n };\r\n\r\n logger.sessionFinished({ completionType }, AWTEventPriority.High);\r\n\r\n const queryParams = `action=${action}&${buildRedirectQueryParameters(settings.MeetNowEdgeAllowedQueryParameters, logger.getCorrelationId(), isNewJoinFlowFromJoinLink)}`;\r\n doPostRedirect(`${UrlHelper.getWebClientUrl({ threadId: webClientRedirectParams.threadId })}?${queryParams}`, params);\r\n});\r\n\r\nexport const buildRedirectQueryParameters = (allowedParameters: string[], fallbackCorrelationId: string, isNewJoinFlowFromJoinLink = false): string => {\r\n const params = UrlHelper.getAllowedQueryParameters(allowedParameters);\r\n\r\n if (!params.find((param) => param.key === 'correlationId')) {\r\n params.push({ key: 'correlationId', value: fallbackCorrelationId });\r\n }\r\n\r\n if (isNewJoinFlowFromJoinLink) {\r\n params.push({ key: 'source', value: 'NewJoinLinkFlow' });\r\n }\r\n\r\n return params\r\n .map((param) => `${encodeURIComponent(param.key)}=${encodeURIComponent(param.value)}`)\r\n .join('&');\r\n};\r\n\r\nexport const processMeetNowEdgeGuestRequest = (settings: IMeetNowSettings): void => {\r\n createMeetnowGuest(settings, getSource())\r\n .then(logShortIdAndThreadId)\r\n .then(logUserId)\r\n .then(buildWebClientRedirectParamsFromMeetnowGuestServiceModel)\r\n .then(redirectToSkypeClient(settings, 'MeetNowEdgeIntegration', 'createmeetnow', false))\r\n .catch((error) => triggerFallbackFlow(error, 'processMeetNowEdgeGuestRequest failure'));\r\n};\r\n\r\nexport const processMeetNowEdgeAuthenticatedRequest = (settings: IMeetNowSettings, loginResult: SilentLoginResult): void => {\r\n createAuthenticatedMeeting(settings, loginResult, getSource())\r\n .then(logShortIdAndThreadId)\r\n .then(createConversationServiceModel)\r\n .then(buildWebClientRedirectParamsForAuthenticatedFlow(loginResult))\r\n .then(redirectToSkypeClient(settings, 'MeetNowEdgeIntegration', 'createmeetnow', false))\r\n .catch((error) => triggerFallbackFlow(error, 'processMeetNowEdgeAuthenticatedRequest failure'));\r\n};\r\n","import Config from 'config';\r\nimport { logger } from '../helpers/LoggerHelper';\r\n\r\nexport const triggerFallbackFlow = (error: Error, reason: string) => {\r\n logger.init(Config.logging.ariaTenant, 'meetnow_edge_');\r\n logger.meetNowFallbackFlow({ message: error.message, reason });\r\n\r\n showErrorMessage();\r\n handleReloadButton();\r\n handleNavigateToWebClientButton();\r\n};\r\n\r\nconst showErrorMessage = () => {\r\n const pageTitle = document.querySelector('.splashScreen');\r\n if (pageTitle) {\r\n pageTitle.style.display = 'none';\r\n }\r\n\r\n const fallbackSection = document.getElementById('fallbackSection');\r\n if (fallbackSection) {\r\n fallbackSection.style.display = 'block';\r\n }\r\n};\r\n\r\nconst handleReloadButton = () => {\r\n const reloadPageButton = document.getElementById('reloadPageButton');\r\n if (reloadPageButton) {\r\n reloadPageButton.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n logger.action({ name: 'reloadFallback' });\r\n window.location.reload();\r\n });\r\n }\r\n};\r\n\r\nconst handleNavigateToWebClientButton = () => {\r\n const goToSkypeButton = document.getElementById('goToSkypeButton');\r\n if (goToSkypeButton) {\r\n goToSkypeButton.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n logger.action({ name: 'goToSkypeFallback' });\r\n window.location.href = Config.urls.app.s4lWeb({});\r\n });\r\n }\r\n};\r\n","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n safeGet = require('./_safeGet'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","import * as React from 'react';\r\n\r\nexport interface AriaMessage {\r\n assertive: boolean;\r\n text: string;\r\n}\r\n\r\nexport interface AriaContext {\r\n message: AriaMessage;\r\n announce: (message: AriaMessage) => void;\r\n}\r\n\r\n// Default context does not mean much sense here\r\nconst context = React.createContext({} as AriaContext);\r\n\r\nexport const AriaContextProvider = context.Provider;\r\n\r\nexport const AriaContextConsumer = context.Consumer;\r\n","import * as React from 'react';\r\nimport { BotInfoServiceModel } from '../../models/BotServiceModel';\r\n\r\nexport interface BotsContext {\r\n botInfo: BotInfoServiceModel;\r\n botId: string;\r\n isAddedAsContact: boolean;\r\n}\r\n\r\n// Default context does not mean much sense here\r\nconst context = React.createContext(undefined);\r\n\r\nexport const BotsContextProvider = context.Provider;\r\n\r\nexport const BotsContextConsumer = context.Consumer;\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Avatar, Button, Icon, Layout, Text } from '@stardust-ui/react';\r\nimport config from 'config';\r\nimport * as React from 'react';\r\nimport { ConfigContext, ConfigContextConsumer } from 'src/ts/contexts/ConfigContext';\r\nimport { logger } from 'src/ts/helpers/LoggerHelper';\r\nimport { UrlHelper } from 'src/ts/helpers/UrlHelper';\r\nimport { MeetingContext, MeetingContextConsumer } from '../../../contexts/meetings/MeetingContext';\r\nimport { StackNavigationContext, StackNavigationContextConsumer } from '../../../contexts/StackNavigationContext';\r\nimport { UserContextConsumer } from '../../../contexts/UserContext';\r\nimport { CookieHelper } from '../../../helpers/CookieHelper';\r\nimport { UserProfile } from '../../../models/ProfileServiceModel';\r\nimport { GuestLogin } from './GuestLogin';\r\n\r\nconst secondaryButtonTransparentStyle = { backgroundColor: 'transparent', color: 'white' };\r\nexport class LoginMethod extends React.PureComponent {\r\n\r\n render() {\r\n return
\r\n { this._renderTitle() }\r\n { this._renderActions() }\r\n
;\r\n }\r\n\r\n private _renderTitle() {\r\n return { (userContext) =>\r\n \r\n { userContext.profile ?\r\n localizer.getString('Login.txt_sign_in_with_title')\r\n :\r\n localizer.getString('hdr_welcome') }\r\n \r\n };\r\n }\r\n\r\n private _renderActions() {\r\n return { (userContext) =>\r\n
\r\n { userContext.profile ?\r\n this._renderAuthenticatedActions(userContext.profile) :\r\n this._renderUnauthenticatedActions() }\r\n
\r\n }
;\r\n }\r\n\r\n private _renderAuthenticatedActions(userProfile: UserProfile) {\r\n return { (meetingContext) => meetingContext &&\r\n <>\r\n { (configContext) =>\r\n this._renderAccounts(userProfile, meetingContext, configContext) }\r\n \r\n { this._renderWhatsThis() }\r\n \r\n };\r\n }\r\n\r\n private _renderAccounts(userProfile: UserProfile, meetingContext: MeetingContext, configContext: ConfigContext) {\r\n const email: string | undefined = userProfile.emails && userProfile.emails.length ?\r\n userProfile.emails[0] : undefined;\r\n const name: string = userProfile.firstname && userProfile.lastname ?\r\n `${ userProfile.firstname } ${ userProfile.lastname }` : userProfile.username;\r\n const avatarImage = {\r\n src: userProfile.avatarUrl || `${ configContext.basePath }/images/avatar.jpg`,\r\n styles: { width: '100%', height: '100%', objectFit: 'cover' },\r\n };\r\n\r\n const currentAccountAvatar = ;\r\n const currentAccountText = { name } }\r\n end={ { email } } />;\r\n const currentAccount = ;\r\n\r\n const otherAccountIcon = ;\r\n const otherAccountText = { localizer.getString('Login.btn_use_other_account') } } />;\r\n const otherAccount = ;\r\n\r\n return
\r\n \r\n
;\r\n }\r\n\r\n private _joinOnWebAsGuest = (stackNavigationContext: StackNavigationContext) => {\r\n return () => {\r\n logger.action({ name: 'join-as-guest' });\r\n logger.sessionIntermediateStep({eventType: 'JoinOnWebAsGuestSecondClickOldView'});\r\n stackNavigationContext.push(, { eventViewName: 'guest-login' });\r\n };\r\n }\r\n\r\n private _joinOnWebOtherAccount = (meetingContext: MeetingContext) => {\r\n return () => {\r\n logger.action({ name: 'join-logout' });\r\n logger.sessionFinished({completionType: 'JoinOnWebOtherAccount'});\r\n const webClientUrl = UrlHelper.getWebClientUrlWithCorrelationId({ threadId: meetingContext.conversation.resource });\r\n window.location.href = config.urls.app.logout(webClientUrl, CookieHelper.getCookie(config.cookies.csrf).singleValue);\r\n };\r\n }\r\n\r\n private _joinOnWeb = (meetingContext: MeetingContext) => {\r\n return () => {\r\n logger.action({ name: 'join-login' });\r\n logger.sessionFinished({completionType: 'JoinOnWeb'});\r\n window.location.assign(UrlHelper.getWebClientUrlWithCorrelationId({ threadId: meetingContext.conversation.resource }));\r\n };\r\n }\r\n\r\n private _renderUnauthenticatedActions() {\r\n return <>\r\n { (stackNavigationContext) =>\r\n \r\n }\r\n { (meetingContext) => meetingContext &&\r\n <>\r\n \r\n { this._renderWhatsThis() }\r\n \r\n }\r\n ;\r\n }\r\n\r\n private _renderWhatsThis() {\r\n return \r\n { localizer.getString('Login.txt_use_ms_account') }\r\n  \r\n logger.action({ name: 'what-is-msa' }) }\r\n target='_blank'\r\n aria-label={ localizer.getString('Login.lnk_a11y_what_is_ms_account') } >\r\n { localizer.getString('Login.lnk_what_is_ms_account') }\r\n \r\n ;\r\n }\r\n}\r\n","export interface SkypeTokenContentHeader {\r\n alg: string;\r\n kid: string;\r\n typ: string;\r\n}\r\n\r\nexport interface SkypeTokenContentPayload {\r\n aat: number;\r\n cid: string;\r\n csi: string;\r\n exp: number;\r\n iat: number;\r\n scp: number;\r\n skypeid: string;\r\n}\r\n\r\nexport interface SkypeTokenContent {\r\n header: SkypeTokenContentHeader;\r\n payload: SkypeTokenContentPayload;\r\n signature: string;\r\n}\r\n\r\nexport function parseSkypeToken(token: string | undefined): SkypeTokenContent | undefined {\r\n if (!token) {\r\n return;\r\n }\r\n\r\n const parts = token.split('.');\r\n if (parts.length !== 3) {\r\n return;\r\n }\r\n\r\n try {\r\n const header: SkypeTokenContentHeader = JSON.parse(atob(parts[0]));\r\n const payload: SkypeTokenContentPayload = JSON.parse(atob(parts[1]));\r\n const signature = parts[2];\r\n\r\n if (!payload.skypeid) {\r\n return;\r\n }\r\n\r\n return { header, payload, signature };\r\n } catch (e) {\r\n return;\r\n }\r\n}\r\n\r\nexport function getSkypeIdFromSkypeToken(token: string | undefined): string | undefined {\r\n const tokenContent = parseSkypeToken(token);\r\n if (tokenContent) {\r\n return tokenContent.payload.skypeid;\r\n }\r\n\r\n return;\r\n}\r\n\r\nexport function getMsaCidHexFromSkypeToken(token: string | undefined): string | undefined {\r\n const tokenContent = parseSkypeToken(token);\r\n if (tokenContent && tokenContent.payload && tokenContent.payload.cid) {\r\n return tokenContent.payload.cid.toUpperCase();\r\n }\r\n\r\n return;\r\n}\r\n","import * as React from 'react';\r\nimport { AriaContextConsumer } from '../../contexts/AriaContext';\r\nimport { ProfilesContext, ProfilesContextProvider } from '../../contexts/profiles/ProfilesContext';\r\nimport { displayableErrors } from '../../helpers/ErrorHelper';\r\nimport { CommonProperty, logger } from '../../helpers/LoggerHelper';\r\nimport { ARootView, ARootViewProps } from '../common/ARootView';\r\nimport { StackNavigationView } from '../common/StackNavigationView';\r\nimport { Launcher } from './Launcher';\r\nimport { ProfileView } from './ProfileView';\r\n\r\nexport interface RootViewState {\r\n launcherKey: number;\r\n profilesContext: ProfilesContext;\r\n error?: Error | undefined;\r\n}\r\n\r\nexport class RootView extends ARootView {\r\n\r\n static getSkypeIdFromUrl() {\r\n const pathName = window.location.pathname.replace(/\\/+$/, '');\r\n const pathParts = pathName.split('/');\r\n\r\n return pathParts.pop();\r\n }\r\n\r\n constructor(props: ARootViewProps) {\r\n super(props);\r\n\r\n const skypeId = RootView.getSkypeIdFromUrl();\r\n if (!skypeId) {\r\n throw displayableErrors.Generic;\r\n }\r\n\r\n logger.initCommonProperty({\r\n key: CommonProperty.Profile,\r\n value: skypeId,\r\n });\r\n\r\n this.state = {\r\n launcherKey: 0,\r\n profilesContext: { skypeId },\r\n };\r\n }\r\n\r\n render() {\r\n if (this.state.error) {\r\n throw this.state.error;\r\n }\r\n\r\n return \r\n { !!this.state.launcherKey && }\r\n { (ariaContext) =>\r\n }\r\n initialViewProps={ { eventViewName: 'profile-view' } } />\r\n }\r\n ;\r\n }\r\n\r\n private _onLaunchClick = () => {\r\n this.setState((oldState) => {\r\n return { launcherKey: oldState.launcherKey + 1 };\r\n });\r\n }\r\n}\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Avatar, Button, Header, Image, Text } from '@stardust-ui/react';\r\nimport config from 'config';\r\nimport * as React from 'react';\r\nimport { ChannelsContext } from 'src/ts/contexts/channels/ChannelsContext';\r\nimport { logger } from 'src/ts/helpers/LoggerHelper';\r\nimport { UrlHelper } from 'src/ts/helpers/UrlHelper';\r\nimport { ConfigContextConsumer } from '../../contexts/ConfigContext';\r\nimport { CookieHelper } from '../../helpers/CookieHelper';\r\nimport { canJoinOnWeb, deviceType, DeviceTypes, OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { Footer } from '../common/Footer';\r\nimport { Header as PageHeader } from '../common/Header';\r\nimport { Padder } from '../common/Padder';\r\nimport { withChannelsContext, WithChannelsContextProps } from './withChannelsContext';\r\n\r\ninterface ChannelViewProps extends WithChannelsContextProps {\r\n onLaunchClick: () => void;\r\n}\r\n\r\nclass ChannelViewKlass extends React.PureComponent {\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n
\r\n { this.renderHeader() }\r\n { this.renderChannelDetails() }\r\n { this.renderControls() }\r\n { this.renderMobileBody() }\r\n { this.renderDesktopBody() }\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n renderHeader() {\r\n return
;\r\n }\r\n\r\n renderChannelDetails() {\r\n return (\r\n
\r\n { this.renderAvatar() }\r\n { this.renderIsCertified()}\r\n { this.renderTitle() }\r\n { this.renderFollowers() }\r\n { this.renderDescription() }\r\n
\r\n );\r\n }\r\n\r\n renderAvatar() {\r\n return this.props.channelContext &&\r\n ;\r\n }\r\n\r\n renderIsCertified() {\r\n return (\r\n this.props.channelContext?.channelInfo.isTrusted &&\r\n
\r\n \r\n { (configContext) =>\r\n }\r\n \r\n
\r\n );\r\n }\r\n\r\n renderTitle() {\r\n return this.props.channelContext &&
;\r\n }\r\n\r\n renderFollowers() {\r\n const formatter = Intl.NumberFormat(localizer.getLocale(), {\r\n // @ts-ignore\r\n notation: 'compact',\r\n });\r\n const { channelContext } = this.props;\r\n return channelContext && channelContext.channelInfo.followers > 0 &&\r\n
{formatter.format(channelContext.channelInfo.followers)}})\r\n } />;\r\n }\r\n\r\n renderDescription() {\r\n return this.props.channelContext && ;\r\n }\r\n\r\n renderDesktopBody() {\r\n if (deviceType !== DeviceTypes.Desktop) {\r\n return null;\r\n }\r\n\r\n return \r\n { localizer.getString('Channels.already_have_skype') } \r\n { { localizer.getString('Channels.lnk_launch_skype') }\r\n }\r\n ;\r\n }\r\n\r\n renderControls() {\r\n if (deviceType === DeviceTypes.Mobile) {\r\n return ;\r\n }\r\n\r\n return this.props.channelContext &&\r\n <>\r\n { canJoinOnWeb && }\r\n\r\n \r\n ;\r\n }\r\n\r\n renderMobileBody() {\r\n if (deviceType !== DeviceTypes.Mobile) {\r\n return null;\r\n }\r\n\r\n return <>\r\n \r\n { localizer.getString('Channels.txt_launch_first_time_device') }\r\n \r\n \r\n { localizer.get('txt_launch_please_download', {\r\n download_skype: \r\n { localizer.getString('Channels.btn_launch_download_skype') }\r\n ,\r\n }) }\r\n \r\n ;\r\n }\r\n\r\n // If a channel's iconUrl is available, use it as an avatar; otherwise, generate initials.\r\n private _getAvatarContent = (channelContext: ChannelsContext) => {\r\n return channelContext.channelInfo.iconUrl ?\r\n {\r\n image: {\r\n src: channelContext.channelInfo.iconUrl,\r\n styles: { width: '100%', height: '100%', objectFit: 'cover' },\r\n className: 'channelsAvatar',\r\n },\r\n } :\r\n {\r\n name: channelContext.channelInfo.name,\r\n getInitials: this._getInitials,\r\n className: 'custom-avatar',\r\n };\r\n }\r\n\r\n // Provide initials for the initial two words or the first two characters of the first word if there's only one word.\r\n private _getInitials = (name: string) => {\r\n const words = name.split(' ');\r\n return words.length > 1 ? words[0].charAt(0) + words[1].charAt(0) : name.substring(0, 2);\r\n }\r\n\r\n private _joinOnWeb = (channelContext: ChannelsContext) => {\r\n return () => {\r\n logger.action({ name: 'join-channel' });\r\n\r\n const webClientUrl = UrlHelper.getWebClientUrlWithCorrelationId({\r\n channelId: channelContext.channelInfo.id,\r\n });\r\n window.location.href = config.urls.app.login(webClientUrl, CookieHelper.getCookie(config.cookies.csrf).singleValue);\r\n };\r\n }\r\n\r\n private _downloadSkype = () => {\r\n return () => {\r\n logger.action({ name: 'download' });\r\n const downloadUrl = os === OperatingSystems.MacOS ? config.urls.app.downloadDesktop : config.urls.app.download;\r\n window.open(downloadUrl, '_blank');\r\n };\r\n }\r\n}\r\n\r\nexport const ChannelView = withChannelsContext(ChannelViewKlass);\r\n","import { AWTEventPriority } from '@aria/webjs-sdk';\r\nimport * as React from 'react';\r\nimport { AriaMessage } from './AriaContext';\r\n\r\nexport interface StackNavigationContext {\r\n views: StackView[];\r\n animating: boolean;\r\n push: (view: React.ReactNode, properties?: Partial) => void;\r\n pop: () => void;\r\n pushRoot: (view: React.ReactNode, properties?: Partial) => void;\r\n popRoot: () => void;\r\n pushParent: (view: React.ReactNode, properties?: Partial) => void;\r\n popParent: () => void;\r\n}\r\n\r\nexport interface StackView {\r\n view: React.ReactNode;\r\n properties: StackViewProperties;\r\n}\r\n\r\nexport interface StackAnimation {\r\n type: AnimationType;\r\n duration: number;\r\n}\r\n\r\nexport interface StackViewProperties {\r\n type: ViewType;\r\n animation: StackAnimation;\r\n ariaMessage?: AriaMessage;\r\n eventViewName?: string;\r\n eventPriority?: AWTEventPriority;\r\n}\r\n\r\nexport enum ViewType {\r\n Fullscreen, Overlay,\r\n}\r\n\r\nexport enum AnimationType {\r\n None = 'none',\r\n Fade = 'fade',\r\n FadeOut = 'fadeOut',\r\n Left = 'left',\r\n LeftOut = 'leftOut',\r\n Slide = 'slide',\r\n SlideOut = 'slideOut',\r\n}\r\n\r\nexport const defaultSlideAnimation: StackAnimation = { type: AnimationType.Slide, duration: 0.2 };\r\nexport const defaultFadeAnimation: StackAnimation = { type: AnimationType.Fade, duration: 0.5 };\r\n\r\nexport const defaultStackViewProperties: StackViewProperties = {\r\n type: ViewType.Fullscreen,\r\n animation: { type: AnimationType.None, duration: 0 },\r\n};\r\n\r\n// tslint:disable-next-line:no-empty\r\nconst noop = () => { };\r\nconst context = React.createContext({\r\n animating: false,\r\n views: [],\r\n push: noop,\r\n pop: noop,\r\n pushRoot: noop,\r\n popRoot: noop,\r\n pushParent: noop,\r\n popParent: noop,\r\n});\r\nexport const StackNavigationContextProvider = context.Provider;\r\n\r\nexport const StackNavigationContextConsumer = context.Consumer;\r\n","import * as React from 'react';\r\nimport { AriaContextConsumer } from 'src/ts/contexts/AriaContext';\r\nimport { ChannelsContext, ChannelsContextProvider } from 'src/ts/contexts/channels/ChannelsContext';\r\nimport ChannelsApiClient from 'src/ts/rest/ChannelsApiClient';\r\nimport { deviceType, DeviceTypes } from '../../helpers/EnvironmentHelper';\r\nimport { displayableErrors } from '../../helpers/ErrorHelper';\r\nimport { CommonProperty, logger } from '../../helpers/LoggerHelper';\r\nimport { ARootView, ARootViewProps } from '../common/ARootView';\r\nimport { StackNavigationView } from '../common/StackNavigationView';\r\nimport { ChannelLauncher } from './ChannelLauncher';\r\nimport { ChannelView } from './ChannelView';\r\n\r\nexport interface RootViewState {\r\n launcherKey: number;\r\n channelContext?: ChannelsContext;\r\n error?: Error | undefined;\r\n}\r\n\r\nexport class RootView extends ARootView {\r\n // Setup according to the logic in url shortener service and current configuration in its storage.\r\n private readonly shortIdLength = 12;\r\n private isComponentMounted = false;\r\n\r\n constructor(props: ARootViewProps) {\r\n super(props);\r\n this.state = {\r\n launcherKey: deviceType === DeviceTypes.Desktop ? 1 : 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.isComponentMounted = true;\r\n const shortId = this._getShortIdFromUrl();\r\n if (!shortId || shortId.length < this.shortIdLength) {\r\n throw displayableErrors.ChannelNotFound;\r\n }\r\n\r\n ChannelsApiClient.getChannelInfo(shortId)\r\n .then((channel) => {\r\n this._safeSetState({\r\n channelContext: {\r\n channelId: shortId,\r\n channelInfo: channel,\r\n },\r\n });\r\n logger.initCommonProperty({ key: CommonProperty.ChannelId, value: shortId });\r\n }).catch((error: Error) => {\r\n this._safeSetState({ error });\r\n });\r\n }\r\n\r\n componentWillUnmount() {\r\n this.isComponentMounted = false;\r\n }\r\n\r\n render() {\r\n if (this.state.error) {\r\n throw this.state.error;\r\n }\r\n\r\n const channelId = this.state.channelContext?.channelInfo ? this.state.channelContext.channelInfo.id : undefined;\r\n return \r\n { !!this.state.launcherKey && channelId && }\r\n { (ariaContext) =>\r\n }\r\n initialViewProps={ { eventViewName: 'join-channel-view' } } />\r\n }\r\n ;\r\n }\r\n\r\n private _getShortIdFromUrl() {\r\n const pathName = window.location.pathname.replace(/\\/+$/, '');\r\n const pathParts = pathName.split('/');\r\n\r\n // Remove any additional charachters appended to the shortId.\r\n return pathParts.pop()?.substring(0, this.shortIdLength);\r\n }\r\n\r\n private _onLaunchClick = () => {\r\n this.setState((oldState) => {\r\n return { launcherKey: oldState.launcherKey + 1 };\r\n });\r\n }\r\n\r\n private _safeSetState(state: Partial) {\r\n if (!this.isComponentMounted) {\r\n return;\r\n }\r\n this.setState(state as RootViewState);\r\n }\r\n}\r\n","/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arrayIncludesWith;\n","\"use strict\";\r\n/**\r\n* Config.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* ECS global configuration\r\n*/\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Config = /** @class */ (function () {\r\n function Config() {\r\n }\r\n Config.prototype.initialize = function (config) {\r\n if (this._config) {\r\n throw 'ECS Configuration already initialized';\r\n }\r\n this._config = config;\r\n };\r\n Config.prototype.getConfig = function () {\r\n if (!this._config) {\r\n throw 'ECS Configuration not yet initialized';\r\n }\r\n return this._config;\r\n };\r\n Config.prototype.setConfigsToFetch = function (configsToFetch) {\r\n // Create a new config object since it's fully read-only\r\n if (!this._config) {\r\n throw 'ECS Configuration not yet initialized';\r\n }\r\n this._config = __assign({}, this._config, { configsToFetch: configsToFetch });\r\n };\r\n Config.prototype.setFetchTimeout = function (fetchTimeout) {\r\n // Create a new config object since it's fully read-only\r\n if (!this._config) {\r\n throw 'ECS Configuration not yet initialized';\r\n }\r\n this._config = __assign({}, this._config, { fetchTimeout: fetchTimeout });\r\n };\r\n return Config;\r\n}());\r\nexports.default = Config;\r\n","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","import * as React from 'react';\r\nimport { ChannelInfoServiceModel } from '../../models/ChannelServiceModel';\r\n\r\nexport interface ChannelsContext {\r\n channelInfo: ChannelInfoServiceModel;\r\n // Short id\r\n channelId: string;\r\n}\r\n\r\n// Default context does not mean much sense here\r\nconst context = React.createContext(undefined);\r\n\r\nexport const ChannelsContextProvider = context.Provider;\r\n\r\nexport const ChannelsContextConsumer = context.Consumer;\r\n","\"use strict\";\r\n/**\r\n* RestClient.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* Client helper for accessing ECS.\r\n*/\r\nvar __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar simplerestclients_1 = require(\"simplerestclients\");\r\nvar SyncTasks = require(\"synctasks\");\r\nvar Models_1 = require(\"./Models\");\r\nvar TelemetryEvents = require(\"./TelemetryEvents\");\r\nvar ForceFetchTimeout = (48 * 60 * 60 * 1000); // Fetch every 48 hours at a minimum\r\nvar EcsExpirationFallbackDuration = 30 * 60 * 1000; // 30 minutes\r\nvar EcsFetchDurationLimit = (365 * 24 * 60 * 60 * 1000); // fetch duration beyond 1 year is considered invalid\r\nvar EcsMinFetchTimeout = (30 * 1000); // Fail-safe lower bound for the fetchTimeout config parameter\r\nvar lastResponseTime;\r\nvar currentRequestTime;\r\n// Fetches the ECS configuration from a specific ECS endpoint and project\r\nvar EcsFetcher = /** @class */ (function (_super) {\r\n __extends(EcsFetcher, _super);\r\n function EcsFetcher(url, _config, _skypeTokenData, _appActiveData, _allowBackgroundFetchData, _etag, _getUserConfig, parameters) {\r\n var _this = _super.call(this, url) || this;\r\n _this._config = _config;\r\n _this._skypeTokenData = _skypeTokenData;\r\n _this._appActiveData = _appActiveData;\r\n _this._allowBackgroundFetchData = _allowBackgroundFetchData;\r\n _this._etag = _etag;\r\n _this._getUserConfig = _getUserConfig;\r\n _this._apiPath = '/config/v1/' + _this._config.getConfig().clientName + '/' + _this._config.getConfig().clientVersion;\r\n if (parameters) {\r\n var paramList = Object.keys(parameters).map(function (key) {\r\n return encodeURIComponent(key) + '=' + encodeURIComponent(parameters[key].toString());\r\n });\r\n if (paramList) {\r\n _this._apiPath += '?' + paramList.join('&');\r\n }\r\n }\r\n return _this;\r\n }\r\n EcsFetcher.prototype._blockRequestUntil = function (options) {\r\n var _this = this;\r\n if (this._getUserConfig && !this._skypeTokenData.isSkypeTokenValid()) {\r\n console.log('ECS - Delaying User config fetch until we have a valid SkypeToken');\r\n }\r\n if (!this._appActiveData.isAppActive() && !this._allowBackgroundFetchData.isBackgroundFetchAllowed()) {\r\n var configType = this._getUserConfig ? 'User config' : 'config';\r\n console.log(\"ECS - Delaying \" + configType + \" fetch until the app is active (or background fetch is allowed)\");\r\n }\r\n return SyncTasks.race([\r\n this._appActiveData.waitForAppActive(),\r\n this._allowBackgroundFetchData.waitForBackgroundFetchAllowed()\r\n ]).then(function () {\r\n if (_this._getUserConfig) {\r\n return _this._skypeTokenData.waitForValidSkypeToken();\r\n }\r\n }).then(function () {\r\n currentRequestTime = Date.now();\r\n });\r\n };\r\n EcsFetcher.prototype._getHeaders = function () {\r\n var headers = {};\r\n if (this._etag) {\r\n headers['If-None-Match'] = this._etag;\r\n }\r\n if (this._getUserConfig) {\r\n headers['Authorization'] = this._skypeTokenData.getSkypeToken();\r\n }\r\n return headers;\r\n };\r\n EcsFetcher.prototype.getConfig = function () {\r\n // Make sure the timeout is undefined, 0, or at least EcsMinFetchTimeout\r\n var timeout = this._config.getConfig().fetchTimeout;\r\n if (timeout !== undefined) {\r\n if (timeout < 0) {\r\n timeout = 0;\r\n }\r\n else if (timeout > 0 && timeout < EcsMinFetchTimeout) {\r\n timeout = EcsMinFetchTimeout;\r\n }\r\n }\r\n return _super.prototype.performApiGetDetailed.call(this, this._apiPath, { timeout: timeout });\r\n };\r\n return EcsFetcher;\r\n}(simplerestclients_1.GenericRestClient));\r\n// Main ECS client. Supports alternate ECS backend URLs and configuration fetch retries.\r\nvar EcsClient = /** @class */ (function () {\r\n function EcsClient(_config, _skypeTokenData, _appActiveData, _allowBackgroundFetchData, _telemetryManager) {\r\n this._config = _config;\r\n this._skypeTokenData = _skypeTokenData;\r\n this._appActiveData = _appActiveData;\r\n this._allowBackgroundFetchData = _allowBackgroundFetchData;\r\n this._telemetryManager = _telemetryManager;\r\n this._ecsFailureBackoffTimer = new simplerestclients_1.ExponentialTime(1000, 300000);\r\n this._cacheMaxAgeRegex = /.*max-age=(\\d+).*/ig;\r\n this._serverIndex = NaN;\r\n }\r\n EcsClient.prototype.getConfig = function (oldConfig, userConfig, parameters) {\r\n var _this = this;\r\n var urls = this._config.getConfig().hosts;\r\n // Randomly select the ECS server url to issue the first request against and store the index\r\n if (isNaN(this._serverIndex) || this._serverIndex > urls.length - 1) {\r\n this._serverIndex = Math.floor(Math.random() * urls.length);\r\n }\r\n if (!urls || !urls.length) {\r\n return SyncTasks.Rejected(new Error('no configuration service endpoint'));\r\n }\r\n var deferred = SyncTasks.Defer();\r\n var fetchAttempts = 0;\r\n // Keep trying to fetch config (w/ Exponential Backoff) until it's fetched succesfully\r\n var callConfigServer = function () {\r\n var etag = oldConfig && oldConfig.eTag ? oldConfig.eTag : undefined;\r\n var fetcher = new EcsFetcher(urls[_this._serverIndex], _this._config, _this._skypeTokenData, _this._appActiveData, _this._allowBackgroundFetchData, etag, userConfig, parameters);\r\n fetchAttempts++;\r\n fetcher.getConfig().then(function (res) {\r\n var eTagHeader = res.headers['etag'];\r\n var expirationHeader = res.headers['expires'];\r\n if (res.body && res.body.Headers) {\r\n // If the service headers are missing, try to get them from the response body\r\n if (!eTagHeader) {\r\n eTagHeader = res.body.Headers.ETag;\r\n }\r\n if (!expirationHeader) {\r\n expirationHeader = res.body.Headers.Expires;\r\n }\r\n }\r\n lastResponseTime = Date.now();\r\n // As per ECS guidance, if ETag or expiration are missing, treat as a failure.\r\n if (!eTagHeader || !expirationHeader) {\r\n console.warn('ECS - Service returned an empty ETag or Expiration header: ' +\r\n JSON.stringify(res));\r\n return SyncTasks.Rejected();\r\n }\r\n // Override to deal with client clock skew.\r\n var updatedExpiration = new Date(_this._calculateExpirationDate(res.headers)).getTime();\r\n var ecsData;\r\n if (res.statusCode === 304 && oldConfig) {\r\n // Etag matched, so no change. Use old config values and continue as normal.\r\n // Use a shallow clone since we don't need to make a full clone of the config data.\r\n ecsData = __assign({}, oldConfig);\r\n ecsData.eTag = eTagHeader;\r\n ecsData.expiration = updatedExpiration;\r\n ecsData.cacheUpdateTime = lastResponseTime;\r\n ecsData.lastFetchTokenHash = _this._skypeTokenData.getSkypeTokenHash(res.requestHeaders['Authorization']);\r\n }\r\n else {\r\n if (typeof res.body !== 'object') {\r\n console.warn('ECS - Service returned invalid response ' + JSON.stringify(res));\r\n return SyncTasks.Rejected();\r\n }\r\n // Take from response\r\n ecsData = {\r\n config: res.body,\r\n configType: userConfig ? Models_1.EcsConfigType.User : Models_1.EcsConfigType.Default,\r\n eTag: eTagHeader,\r\n expiration: updatedExpiration,\r\n cacheUpdateTime: currentRequestTime,\r\n lastFetchTokenHash: _this._skypeTokenData.getSkypeTokenHash(res.requestHeaders['Authorization']),\r\n appVersion: _this._config.getConfig().clientVersion\r\n };\r\n }\r\n var fetchDelayMs = lastResponseTime - currentRequestTime;\r\n var fetchDurationValid = (fetchDelayMs < 0 || fetchDelayMs > EcsFetchDurationLimit) ? false : true;\r\n var cacheAge = oldConfig ? (Date.now() - oldConfig.cacheUpdateTime) : 0;\r\n _this._telemetryManager.sendTelemetryEvent(new TelemetryEvents.EcsConfigFetchResponse(fetchDelayMs, res.statusCode, fetchAttempts, _this._skypeTokenData.isSkypeTokenValid(), urls[_this._serverIndex], eTagHeader, fetchDurationValid, etag ? true : false, JSON.stringify(res).length, cacheAge, (oldConfig && oldConfig.expiration - Date.now() > 0) ? false : true, currentRequestTime, lastResponseTime));\r\n _this._ecsFailureBackoffTimer.reset();\r\n deferred.resolve(ecsData);\r\n }).catch(function () {\r\n // Backoff and Switch ECS servers if possible.\r\n _this._serverIndex = (_this._serverIndex + 1) % (urls.length);\r\n setTimeout(function () {\r\n callConfigServer();\r\n }, _this._ecsFailureBackoffTimer.getTimeAndCalculateNext());\r\n });\r\n };\r\n callConfigServer();\r\n return deferred.promise();\r\n };\r\n EcsClient.prototype._calculateExpirationDate = function (headers) {\r\n var forceFetchTime = Date.now() + ForceFetchTimeout;\r\n if (headers['date'] && headers['expires']) {\r\n // Calculate client clock skew\r\n var responseDate = new Date(headers['date']).getTime();\r\n var clockSkew = Date.now() - responseDate;\r\n // Ensure we don't do Math.min(forceFetchTime, NaN) => NaN\r\n var headerExpirationTime = new Date(headers['expires']).getTime();\r\n if (isNaN(headerExpirationTime)) {\r\n return forceFetchTime;\r\n }\r\n return Math.min(forceFetchTime, headerExpirationTime + clockSkew);\r\n }\r\n // This is a fix for browsers that don't implement Access-Control-Expose-Headers header properly\r\n // and Date header is not propagated (IE, Edge). We take the value from the cache-control\r\n // header (seconds) and add it to the client's current time.\r\n var match = this._cacheMaxAgeRegex.exec(headers['cache-control']);\r\n this._cacheMaxAgeRegex.lastIndex = 0;\r\n if (match && match.length === 2) {\r\n return Math.min(forceFetchTime, Date.now() + (Number(match[1]) * 1000));\r\n }\r\n // Backup - send next request in 30 minutes.\r\n return Date.now() + EcsExpirationFallbackDuration;\r\n };\r\n return EcsClient;\r\n}());\r\nexports.default = EcsClient;\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Avatar, Button, Header, Text } from '@stardust-ui/react';\r\nimport config from 'config';\r\nimport * as React from 'react';\r\nimport { InviteContext, InviteContextConsumer } from 'src/ts/contexts/invites/InviteContext';\r\nimport { logger } from 'src/ts/helpers/LoggerHelper';\r\nimport { UrlHelper } from 'src/ts/helpers/UrlHelper';\r\nimport { CookieHelper } from '../../helpers/CookieHelper';\r\nimport { canJoinOnWeb, deviceType, DeviceTypes, OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { Footer } from '../common/Footer';\r\nimport { Header as PageHeader } from '../common/Header';\r\nimport { Padder } from '../common/Padder';\r\n\r\ninterface InviteViewProps {\r\n onLaunchClick: () => void;\r\n}\r\n\r\nexport class InviteView extends React.PureComponent {\r\n\r\n renderAvatar() {\r\n return { (inviteContext) => inviteContext &&\r\n \r\n };\r\n }\r\n\r\n renderTitle() {\r\n return { (inviteContext) => inviteContext &&\r\n
{ localizer.getString('txt_off_skype_invites_join_skype', { user_name: inviteContext.invite.inviterName }) }
\r\n }
;\r\n }\r\n\r\n renderDesktopBody() {\r\n if (deviceType !== DeviceTypes.Desktop) {\r\n return null;\r\n }\r\n\r\n return \r\n { localizer.getString('Meetings.txt_join_meeting_description') } \r\n { { localizer.getString('Meetings.lnk_join_meeting_retry') }\r\n }\r\n ;\r\n }\r\n\r\n renderControls() {\r\n if (deviceType === DeviceTypes.Mobile) {\r\n return ;\r\n }\r\n\r\n return { (inviteContext) => inviteContext &&\r\n <>\r\n { canJoinOnWeb && }\r\n\r\n \r\n \r\n };\r\n }\r\n\r\n renderMobileBody() {\r\n if (deviceType !== DeviceTypes.Mobile) {\r\n return null;\r\n }\r\n\r\n return <>\r\n \r\n { localizer.getString('txt_launch_first_time_device') }\r\n \r\n \r\n { localizer.get('txt_launch_please_download', {\r\n download_skype: \r\n { localizer.getString('btn_launch_download_skype') }\r\n ,\r\n }) }\r\n \r\n ;\r\n }\r\n\r\n render() {\r\n return
\r\n \r\n \r\n
\r\n { this.renderAvatar() }\r\n { this.renderTitle() }\r\n { this.renderControls() }\r\n { this.renderMobileBody() }\r\n { this.renderDesktopBody() }\r\n
\r\n \r\n
\r\n
;\r\n }\r\n\r\n private _joinOnWeb = (inviteContext: InviteContext) => {\r\n return () => {\r\n logger.action({ name: 'join-login' });\r\n\r\n const webClientUrl = UrlHelper.getWebClientUrlWithCorrelationId({\r\n inviteId: inviteContext.invite.longId,\r\n skypeId: inviteContext.invite.inviterSkypeId,\r\n });\r\n window.location.href = config.urls.app.login(webClientUrl, CookieHelper.getCookie(config.cookies.csrf).singleValue);\r\n };\r\n }\r\n\r\n private _downloadSkype = () => {\r\n return () => {\r\n logger.action({ name: 'download' });\r\n const downloadUrl = os === OperatingSystems.MacOS ? config.urls.app.downloadDesktop : config.urls.app.download;\r\n window.open(downloadUrl, '_blank');\r\n };\r\n }\r\n}\r\n","export interface OffSkypeInviteServiceModel {\r\n readonly clientSource: string;\r\n readonly inviterName: string;\r\n readonly inviterSkypeId: string;\r\n readonly longId: string;\r\n}\r\n\r\nexport interface RawOffSkypeInviteServiceModel {\r\n readonly ClientSource: string;\r\n readonly InviterName: string;\r\n readonly InviterSkypeId: string;\r\n readonly LongId: string;\r\n}\r\n\r\nexport function transform(model: RawOffSkypeInviteServiceModel): OffSkypeInviteServiceModel {\r\n return {\r\n clientSource: model.ClientSource,\r\n inviterName: model.InviterName,\r\n inviterSkypeId: model.InviterSkypeId,\r\n longId: model.LongId,\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport { Actions } from 'src/ts/models/SharedTypes';\r\n\r\nexport interface DoContext {\r\n action: Actions;\r\n skypeId: string;\r\n}\r\n\r\n// Default context does not mean much sense here\r\nconst context = React.createContext(undefined);\r\n\r\nexport const DoContextProvider = context.Provider;\r\n\r\nexport const DoContextConsumer = context.Consumer;\r\n","import { ThemeInput } from '@stardust-ui/react';\r\n\r\n// https://github.com/stardust-ui/react/blob/master/src/themes/teams/colors.ts\r\nconst colors = {\r\n 50: '#E7F2FB',\r\n 100: '#B9DAF3',\r\n 200: '#8BC1EB',\r\n 300: '#5CA9E3',\r\n 400: '#2E90DB',\r\n 500: '#0078d4',\r\n 600: '#0063AE',\r\n 700: '#004D87',\r\n 800: '#003761',\r\n 900: '#00213A',\r\n};\r\n\r\n// tslint:disable:object-literal-key-quotes\r\nconst theme: ThemeInput = {\r\n siteVariables: { // https://github.com/stardust-ui/react/tree/master/src/themes/teams/siteVariables.ts\r\n brand: colors[500],\r\n brand02: colors[900],\r\n brand04: colors[700],\r\n brand06: colors[500],\r\n brand08: colors[300],\r\n brand12: colors[200],\r\n brand14: colors[100],\r\n brand16: colors[50],\r\n brandIcon: '/images/icons/skype-logo-blue-new.png',\r\n },\r\n componentStyles: {\r\n Button: {\r\n root: {\r\n borderRadius: '6rem',\r\n ':focus': {\r\n '::after': {\r\n // tslint:disable-next-line:max-line-length\r\n borderRadius: '6rem !important', // borderRadius 3px is hardCoded in stardust https://github.com/stardust-ui/react/blob/86e896e8b21ecd22c0fdfc151e6e2562af0d6cfe/src/themes/teams/components/Button/buttonStyles.ts#L115\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport default theme;\r\n","import { AWTEventPriority } from '@aria/webjs-sdk';\r\nimport { ApiCallOptions as BaseApiCallOptions, GenericRestClient, WebResponse } from 'simplerestclients';\r\nimport * as SyncTasks from 'synctasks';\r\nimport { logger } from '../helpers/LoggerHelper';\r\n\r\nexport interface EventProperties {\r\n priority?: AWTEventPriority;\r\n genericEventPath?: string; // Override default path for telemtry if it contains sensitive information\r\n customPropertiesProvider?: ((response: WebResponse) => any); // Append any custom field from response to the event\r\n}\r\n\r\nexport interface ApiCallOptions extends BaseApiCallOptions {\r\n eventProperties?: EventProperties;\r\n}\r\n\r\nconst unwrap: (resp: WebResponse) => T = (resp) => resp.body;\r\nexport class BaseRestClient extends GenericRestClient {\r\n protected _defaultOptions: ApiCallOptions = {\r\n contentType: 'application/json',\r\n acceptType: 'application/json',\r\n };\r\n\r\n performApiGet(apiPath: string, options?: ApiCallOptions): SyncTasks.Promise {\r\n return this.performApiGetDetailed(apiPath, options).then(unwrap);\r\n }\r\n\r\n performApiGetDetailed(apiPath: string, options?: ApiCallOptions): SyncTasks.Promise> {\r\n const startTime = new Date().getTime();\r\n const promise = super.performApiGetDetailed(apiPath, options);\r\n promise.then(this.networkCallback(startTime, options), this.networkCallback(startTime, options));\r\n return promise;\r\n }\r\n\r\n performApiPost(apiPath: string, objToPost: any, options?: ApiCallOptions): SyncTasks.Promise {\r\n return this.performApiPostDetailed(apiPath, objToPost, options).then(unwrap);\r\n }\r\n\r\n performApiPostDetailed(apiPath: string, objToPost: any, options?: ApiCallOptions): SyncTasks.Promise> {\r\n const startTime = new Date().getTime();\r\n const promise = super.performApiPostDetailed(apiPath, objToPost, options);\r\n promise.then(this.networkCallback(startTime, options), this.networkCallback(startTime, options));\r\n return promise;\r\n }\r\n\r\n performApiPatch(apiPath: string, objToPatch: any, options?: ApiCallOptions): SyncTasks.Promise {\r\n return this.performApiPatchDetailed(apiPath, objToPatch, options).then(unwrap);\r\n }\r\n\r\n performApiPatchDetailed(apiPath: string, objToPatch: any, options?: ApiCallOptions): SyncTasks.Promise> {\r\n const startTime = new Date().getTime();\r\n const promise = super.performApiPatchDetailed(apiPath, objToPatch, options);\r\n promise.then(this.networkCallback(startTime, options), this.networkCallback(startTime, options));\r\n return promise;\r\n }\r\n\r\n performApiPut(apiPath: string, objToPut: any, options?: ApiCallOptions): SyncTasks.Promise {\r\n return this.performApiPutDetailed(apiPath, objToPut, options).then(unwrap);\r\n }\r\n\r\n performApiPutDetailed(apiPath: string, objToPut: any, options?: ApiCallOptions): SyncTasks.Promise> {\r\n const startTime = new Date().getTime();\r\n const promise = super.performApiPutDetailed(apiPath, objToPut, options);\r\n promise.then(this.networkCallback(startTime, options), this.networkCallback(startTime, options));\r\n return promise;\r\n }\r\n\r\n performApiDelete(apiPath: string, objToDelete?: any, options?: ApiCallOptions): SyncTasks.Promise {\r\n return this.performApiDeleteDetailed(apiPath, objToDelete, options).then(unwrap);\r\n }\r\n\r\n performApiDeleteDetailed(apiPath: string, objToDelete: any, options?: ApiCallOptions): SyncTasks.Promise> {\r\n const startTime = new Date().getTime();\r\n const promise = super.performApiDeleteDetailed(apiPath, objToDelete, options);\r\n promise.then(this.networkCallback(startTime, options), this.networkCallback(startTime, options));\r\n return promise;\r\n }\r\n\r\n protected networkCallback = (startTime: number, options?: ApiCallOptions): ((response: WebResponse) => void) => {\r\n const eventProperties = options && options.eventProperties;\r\n const genericEventPath = eventProperties && eventProperties.genericEventPath;\r\n const customPropertiesProvider = eventProperties && eventProperties.customPropertiesProvider;\r\n const eventPriority = eventProperties && eventProperties.priority;\r\n return (response: WebResponse) => {\r\n const endTime = new Date().getTime();\r\n const responseUrl = genericEventPath ? this._endpointUrl + genericEventPath : response.url;\r\n const eventUrl = responseUrl ? responseUrl.split('?', 1).join('') : responseUrl;\r\n const path = eventUrl ? eventUrl.replace(this._endpointUrl, '') : eventUrl;\r\n logger.network({\r\n method: response.method,\r\n responseTime: endTime - startTime,\r\n statusCode: response.statusCode,\r\n statusText: response.statusText,\r\n url: eventUrl,\r\n host: this._endpointUrl,\r\n path,\r\n custom: customPropertiesProvider ? customPropertiesProvider(response) : undefined,\r\n }, eventPriority);\r\n };\r\n }\r\n}\r\n","var Set = require('./_Set'),\n noop = require('./noop'),\n setToArray = require('./_setToArray');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nmodule.exports = createSet;\n","\"use strict\";\r\n/**\r\n* AllowBackgroundFetchData.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* Holder for information if background fetch is allowed\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar SyncTasks = require(\"synctasks\");\r\nvar AllowBackgroundFetchData = /** @class */ (function () {\r\n function AllowBackgroundFetchData() {\r\n this._isAllowed = false;\r\n }\r\n AllowBackgroundFetchData.prototype.putBackgroundFetchAllowed = function (isAllowed) {\r\n this._isAllowed = isAllowed;\r\n if (this.isBackgroundFetchAllowed() && this._isAllowedDeferral) {\r\n var deferral = this._isAllowedDeferral;\r\n this._isAllowedDeferral = undefined;\r\n deferral.resolve(void 0);\r\n }\r\n };\r\n AllowBackgroundFetchData.prototype.isBackgroundFetchAllowed = function () {\r\n return this._isAllowed;\r\n };\r\n AllowBackgroundFetchData.prototype.waitForBackgroundFetchAllowed = function () {\r\n if (this.isBackgroundFetchAllowed()) {\r\n return SyncTasks.Resolved();\r\n }\r\n // Set up deferral to wait until background fetch is allowed\r\n if (!this._isAllowedDeferral) {\r\n this._isAllowedDeferral = SyncTasks.Defer();\r\n }\r\n return this._isAllowedDeferral.promise();\r\n };\r\n return AllowBackgroundFetchData;\r\n}());\r\nexports.default = AllowBackgroundFetchData;\r\n","import * as React from 'react';\r\n\r\nexport class LoadingView extends React.PureComponent {\r\n\r\n render() {\r\n return
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
;\r\n }\r\n}\r\n","import { CookieConfig } from 'config';\r\nimport { Dictionary } from '../models/SharedTypes';\r\n\r\nconst defaultValueSeparator = ':';\r\n\r\nexport class CookieHelper {\r\n\r\n /**\r\n * Get the cookie\r\n *\r\n * param {string} name\r\n *\r\n * @return {object}\r\n */\r\n static getCookie(config: CookieConfig) {\r\n return (CookieHelper.hasCookie(config) === true) ? CookieHelper.parse()[config.name] : {};\r\n }\r\n\r\n /**\r\n * Set the cookie\r\n *\r\n * @param {string}\r\n *\r\n * @return void\r\n */\r\n static setCookie(config: CookieConfig, cookieValuesObject: object ) {\r\n const now = Math.round(Date.now() / 1000); // seconds\r\n let value = cookieValuesObject as any;\r\n\r\n // We have to add TS if cookie does not exist\r\n if (CookieHelper.hasCookie(config) === false) {\r\n value.TS = now;\r\n }\r\n\r\n // we need to add modification timestamp\r\n value.TM = now;\r\n\r\n value = CookieHelper.cookieObjectToString(value);\r\n\r\n const options = [];\r\n if (config.domain) {\r\n options.push('domain=' + config.domain);\r\n }\r\n if (config.path) {\r\n options.push('path=' + config.path);\r\n }\r\n if (config.maxAge) {\r\n options.push('expires=' + CookieHelper.getExpirationDate(config.maxAge).toUTCString());\r\n }\r\n\r\n const optionsString = options.length ? ';' + options.join(';') : '';\r\n\r\n document.cookie = config.name + '=' + value + optionsString;\r\n }\r\n\r\n /**\r\n * If cookie is present\r\n *\r\n * @return boolean\r\n */\r\n static hasCookie(config: CookieConfig) {\r\n return CookieHelper.parse().hasOwnProperty(config.name);\r\n }\r\n\r\n /**\r\n * Get cookie value\r\n *\r\n * @param {string} key\r\n *\r\n * @return {string} key value\r\n */\r\n static getCookieValue(config: CookieConfig, key: string = 'singleValue') {\r\n const params = CookieHelper.getCookie(config);\r\n\r\n return params && params[key] ? params[key] : undefined;\r\n }\r\n\r\n /**\r\n * Set cookie value\r\n *\r\n * @param {string} key\r\n * @param {string} value\r\n *\r\n */\r\n static setCookieValue(config: CookieConfig, value: string, key = 'singleValue') {\r\n const params = CookieHelper.getCookie(config);\r\n params[config.key || key] = value;\r\n\r\n CookieHelper.setCookie(config, params);\r\n }\r\n\r\n /**\r\n *\r\n */\r\n static removeCookie(config: CookieConfig) {\r\n if (!CookieHelper.hasCookie(config)) {\r\n return;\r\n }\r\n\r\n CookieHelper.setCookie({ name: config.name }, {});\r\n }\r\n\r\n /**\r\n * Parse document.cookie to JSON\r\n *\r\n * @example {'SC': 'LC=en:CCY=EUR', 'SWA':'webapp'}\r\n *\r\n *\r\n * @return {object}\r\n */\r\n static parse() {\r\n if (!document.cookie) {\r\n return {};\r\n }\r\n\r\n const cookies: any = {};\r\n document.cookie.split(';').forEach((cookie) => {\r\n const separatorPos = cookie.indexOf('=');\r\n\r\n const key = cookie.substring(0, separatorPos).trim();\r\n const value = cookie.substring(separatorPos + 1).trim();\r\n cookies[key] = CookieHelper.parseCookieValues(value);\r\n });\r\n\r\n return cookies;\r\n }\r\n /**\r\n * Turns object to string\r\n *\r\n * @param {object} cookieObject\r\n * @param {string} cookieSeparator\r\n *\r\n * @return {string}\r\n */\r\n private static cookieObjectToString(cookieObject: object, cookieSeparator = defaultValueSeparator) {\r\n const cookieObjectKeys = Object.keys(cookieObject);\r\n const cookieValue: string[] = [];\r\n\r\n if (cookieObject.hasOwnProperty('singleValue')) {\r\n return (cookieObject as any).singleValue;\r\n }\r\n\r\n cookieObjectKeys.forEach((cookieObjectKey) => {\r\n cookieValue.push(cookieObjectKey + '=' + (cookieObject as any)[cookieObjectKey]);\r\n });\r\n\r\n return cookieValue.join(cookieSeparator);\r\n }\r\n\r\n /**\r\n * Parse cookie values into JSON\r\n *\r\n * @example {'LC':'en','CCY':'EUR'}\r\n *\r\n * @param {string} cookieSeparator\r\n *\r\n * @return {object}\r\n */\r\n private static parseCookieValues(cookieValue: string, cookieSeparator = defaultValueSeparator) {\r\n const params: Dictionary = {};\r\n\r\n cookieValue.split(cookieSeparator).forEach((splitCookieValue) => {\r\n let splitParams: string[];\r\n if (splitCookieValue.indexOf('=') !== -1) {\r\n splitParams = splitCookieValue.split('=');\r\n } else {\r\n splitParams = ['singleValue', splitCookieValue];\r\n }\r\n\r\n params[splitParams[0].trim()] = splitParams[1].trim();\r\n });\r\n return params;\r\n }\r\n\r\n /**\r\n * Get the date object for expiration\r\n *\r\n * @param {int} seconds Number of seconds to add\r\n *\r\n * @return {Date}\r\n */\r\n private static getExpirationDate(seconds: number) {\r\n return new Date((seconds * 1000) + Date.now());\r\n }\r\n}\r\n","import config from 'config';\r\nimport * as SyncTasks from 'synctasks';\r\nimport { CaptchaSolution } from '../components/common/Captcha';\r\nimport { logger } from '../helpers/LoggerHelper';\r\nimport { ConversationPayload, ConversationServiceModel, RawConversationServiceModel } from '../models/ConversationServiceModel';\r\nimport {\r\n CreateAuthenticatedMeetingPayloadMeetingsApi,\r\n CreateMeetingPayloadMeetingsApi,\r\n CreateMeetingServiceModel,\r\n GuestJoinPayloadMeetingsApi,\r\n GuestUserServiceModel,\r\n MeetnowGuestServiceModel,\r\n} from '../models/GuestUserServiceModel';\r\nimport { BaseRestClient } from './BaseRestClient';\r\nimport { customErrorHandler, transformWrapper } from './MeetingsApiClientUtils';\r\n\r\nconst SessionIdHeaderKey = 'x-sessionId';\r\nconst SupportsCaptchaHeader = 'X-Skype-SupportsCaptcha';\r\nconst CaptchaSolutionHeader = 'X-Skype-CaptchaSolution';\r\nconst CaptchaChallengeIdHeader = 'X-Skype-CaptchaChallengeId';\r\nconst CaptchaAzureRegionHeader = 'X-Skype-CaptchaAzureRegion';\r\n\r\nclass MeetingsApiClient extends BaseRestClient {\r\n joinAsGuest(\r\n payload: T,\r\n retries: number = 0,\r\n joinThread: boolean = false,\r\n captcha?: CaptchaSolution | undefined,\r\n customPropertiesProvider?: () => object): SyncTasks.Promise {\r\n const genericEventPath = joinThread ?\r\n `/v1/threads/{threadId}/members` : `/v1/meetings/{shortId}/members`;\r\n const apiPath = joinThread ?\r\n `/v1/threads/${payload.threadId}/members` : `/v1/meetings/${payload.shortId}/members`;\r\n const headers: { [key: string]: string } = {};\r\n headers[SessionIdHeaderKey] = logger.getCorrelationId();\r\n if (captcha?.solution) {\r\n headers[SupportsCaptchaHeader] = 'yes';\r\n headers[CaptchaSolutionHeader] = captcha.solution;\r\n headers[CaptchaChallengeIdHeader] = captcha.challengeId;\r\n headers[CaptchaAzureRegionHeader] = captcha.azureRegion;\r\n }\r\n\r\n return this.performApiPost(\r\n apiPath,\r\n {\r\n displayName: payload.displayName,\r\n },\r\n {\r\n customErrorHandler,\r\n eventProperties: {\r\n genericEventPath,\r\n customPropertiesProvider,\r\n },\r\n retries,\r\n headers,\r\n });\r\n }\r\n\r\n getConversation(payload: ConversationPayload, retries: number = 0): SyncTasks.Promise {\r\n const shortId = payload.shortId;\r\n const headers: { [key: string]: string } = {};\r\n headers[SessionIdHeaderKey] = logger.getCorrelationId();\r\n\r\n return this.performApiGet(\r\n `/v1/meetings/${ shortId }`,\r\n {\r\n customErrorHandler,\r\n eventProperties: {\r\n genericEventPath: '/v1/meetings/{shortId}',\r\n },\r\n retries,\r\n headers,\r\n },\r\n ).then(transformWrapper(shortId));\r\n }\r\n\r\n createGuestMeeting(payload: CreateMeetingPayloadMeetingsApi, retries: number = 0): SyncTasks.Promise {\r\n return this.createMeeting('/v1/meetnow/createjoinlinkguest', payload, retries);\r\n }\r\n\r\n createAuthenticatedMeeting(payload: CreateAuthenticatedMeetingPayloadMeetingsApi, retries: number = 0): SyncTasks.Promise {\r\n return this.createMeeting('/v1/meetnow/createjoinlink', payload, retries);\r\n }\r\n\r\n meetnowGuest(payload: CreateMeetingPayloadMeetingsApi, retries: number = 0): SyncTasks.Promise {\r\n return this.createMeeting('/v1/meetnow/guest', payload, retries);\r\n }\r\n\r\n private createMeeting(path: string, payload: CreateMeetingPayloadMeetingsApi, retries: number): SyncTasks.Promise {\r\n const headers: { [key: string]: string } = {};\r\n headers[SessionIdHeaderKey] = logger.getCorrelationId();\r\n\r\n return this.performApiPost(\r\n path,\r\n payload,\r\n {\r\n customErrorHandler,\r\n eventProperties: {\r\n genericEventPath: path,\r\n },\r\n retries,\r\n headers,\r\n },\r\n );\r\n }\r\n}\r\n\r\nexport default new MeetingsApiClient(config.urls.api.meetings);\r\n","\"use strict\";\r\n/**\r\n* Scheduler.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* Scheduling module for fetching ECS config\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Models_1 = require(\"./Models\");\r\nvar RestClient_1 = require(\"./RestClient\");\r\nvar Scheduler = /** @class */ (function () {\r\n function Scheduler(_config, _skypeTokenData, _cache, appActiveData, allowBackgroundFetchData, telemetryManager) {\r\n var _this = this;\r\n this._config = _config;\r\n this._skypeTokenData = _skypeTokenData;\r\n this._cache = _cache;\r\n this._isFetchingSettings = {};\r\n this._pendingFetch = {};\r\n this._paused = false;\r\n this._fetchEcsSettingsIfNeeded = function (configType) {\r\n var config = _this._config.getConfig();\r\n var cachedConfig = _this._cache.getEcsConfigByType(configType);\r\n // If we don't care about this config, abort\r\n if (config.configsToFetch.indexOf(configType) === -1) {\r\n return;\r\n }\r\n // Don't refresh if we're already fetching.\r\n if (_this._isFetchingSettings[configType]) {\r\n return;\r\n }\r\n if (!cachedConfig && _this._pendingFetch[configType]) {\r\n _this._fetchSkypeEcsSettings(configType);\r\n return;\r\n }\r\n // Get time until expiration, negative if we have no config.\r\n var configExpirationMs = cachedConfig ? cachedConfig.expiration - Date.now() : -1;\r\n // If config expired, fetch now.\r\n if (configExpirationMs <= 0) {\r\n _this._fetchSkypeEcsSettings(configType);\r\n return;\r\n }\r\n // If SkypeToken used to fetch has changed, fetchNow\r\n if (cachedConfig && configType === Models_1.EcsConfigType.User && _this._skypeTokenData.isSkypeTokenValid() &&\r\n cachedConfig.lastFetchTokenHash !== _this._skypeTokenData.getSkypeTokenHash(_this._skypeTokenData.getSkypeToken())) {\r\n _this._fetchSkypeEcsSettings(configType);\r\n return;\r\n }\r\n // Schedule another check.\r\n setTimeout(function () { return _this._fetchEcsSettingsIfNeeded(configType); }, configExpirationMs);\r\n };\r\n this._fetchSkypeEcsSettings = function (configType, bypassPause) {\r\n if (bypassPause === void 0) { bypassPause = false; }\r\n if (_this._isFetchingSettings[configType] || (_this._paused && !bypassPause)) {\r\n _this._pendingFetch[configType] = true;\r\n return;\r\n }\r\n _this._pendingFetch[configType] = false;\r\n _this._isFetchingSettings[configType] = true;\r\n var config = _this._config.getConfig();\r\n // will never fail. We'll keep trying to fetch with exponential backoff until the end of time.\r\n config.getEcsParameters()\r\n .catch(function () {\r\n // If we fail to get parameters, continue with none\r\n console.warn('ECS - Failed to fetch ECS fetching parameters');\r\n return {};\r\n })\r\n .then(function (parameters) {\r\n return _this._ecsClient\r\n .getConfig(_this._cache.getEcsConfig(), configType === Models_1.EcsConfigType.User, parameters);\r\n })\r\n .then(function (ecsConfig) {\r\n console.log('ECS - Config fetch complete');\r\n _this._isFetchingSettings[configType] = false;\r\n _this._cache.putConfig(ecsConfig);\r\n // Queue a refresh\r\n _this._fetchEcsSettingsIfNeeded(configType);\r\n });\r\n };\r\n this._ecsClient = new RestClient_1.default(this._config, this._skypeTokenData, appActiveData, allowBackgroundFetchData, telemetryManager);\r\n }\r\n Scheduler.prototype.initialize = function () {\r\n var _this = this;\r\n this.updateConfigsToFetch();\r\n // Re-fetch user settings when skype token changes\r\n this._skypeTokenData.skypeTokenChanged.subscribe(function () { return _this._fetchEcsSettingsIfNeeded(Models_1.EcsConfigType.User); });\r\n };\r\n Scheduler.prototype.updateConfigsToFetch = function () {\r\n var config = this._config.getConfig();\r\n for (var _i = 0, _a = config.configsToFetch; _i < _a.length; _i++) {\r\n var configType = _a[_i];\r\n if (!(configType in this._isFetchingSettings)) {\r\n this._isFetchingSettings[configType] = false;\r\n }\r\n if (!(configType in this._isFetchingSettings)) {\r\n this._pendingFetch[configType] = false;\r\n }\r\n }\r\n // If we haven't downloaded a config yet (which should happen only on\r\n // first run), download it immediately so we have the settings by the time\r\n // the UI loads, and we can enable or disable specific UI features.\r\n for (var _b = 0, _c = config.configsToFetch; _b < _c.length; _b++) {\r\n var configType = _c[_b];\r\n var cachedData = this._cache.getEcsConfigByType(configType);\r\n if (!cachedData || (cachedData.appVersion && cachedData.appVersion !== config.clientVersion)) {\r\n this._fetchSkypeEcsSettings(configType, true);\r\n }\r\n else {\r\n this._fetchEcsSettingsIfNeeded(configType);\r\n }\r\n }\r\n };\r\n Scheduler.prototype.requestUpdate = function () {\r\n var config = this._config.getConfig();\r\n for (var _i = 0, _a = config.configsToFetch; _i < _a.length; _i++) {\r\n var configType = _a[_i];\r\n this._fetchSkypeEcsSettings(configType);\r\n }\r\n };\r\n Scheduler.prototype.pause = function () {\r\n this._paused = true;\r\n };\r\n Scheduler.prototype.resume = function () {\r\n this._paused = false;\r\n var config = this._config.getConfig();\r\n for (var _i = 0, _a = config.configsToFetch; _i < _a.length; _i++) {\r\n var configType = _a[_i];\r\n this._fetchEcsSettingsIfNeeded(configType);\r\n }\r\n };\r\n return Scheduler;\r\n}());\r\nexports.default = Scheduler;\r\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n","export interface IMeetNowSettings {\r\n MeetNowEdgeJoinApiHost: string;\r\n MeetNowEdgeNumberOfFetchRetries: number;\r\n MeetNowEdgeAriaTenantId: string;\r\n MeetNowEdgeAllowedQueryParameters: string[];\r\n DefaultMeetingTitle: string;\r\n}\r\n\r\nconst rootElementId = 'meetnowContainer';\r\nconst settingsDataAttributeName = 'meetnowEdgeSettings';\r\nconst allowedQueryParameters = ['source', 'exp', 'correlationId', 'call', 'video', 'mic'];\r\nconst defaultMeetingTitle = 'Meet Now';\r\n\r\nlet settings: MeetNowSettings;\r\n\r\nconst init = () => {\r\n const rootElement = document.getElementById(rootElementId);\r\n if (rootElement) {\r\n const data = rootElement.dataset[settingsDataAttributeName] || '';\r\n const parsedSettings = JSON.parse(data) as IMeetNowSettings;\r\n settings = new MeetNowSettings(parsedSettings);\r\n } else {\r\n throw new Error('Config not found.');\r\n }\r\n};\r\n\r\nclass MeetNowSettings implements IMeetNowSettings {\r\n private readonly settings: IMeetNowSettings;\r\n\r\n constructor(currentSettings: IMeetNowSettings) {\r\n this.settings = currentSettings;\r\n }\r\n\r\n get MeetNowEdgeAriaTenantId() {\r\n return this.settings.MeetNowEdgeAriaTenantId;\r\n }\r\n get MeetNowEdgeJoinApiHost() {\r\n return this.settings.MeetNowEdgeJoinApiHost;\r\n }\r\n get MeetNowEdgeNumberOfFetchRetries() {\r\n return this.settings.MeetNowEdgeNumberOfFetchRetries;\r\n }\r\n get MeetNowEdgeAllowedQueryParameters() {\r\n return allowedQueryParameters;\r\n }\r\n get DefaultMeetingTitle() {\r\n return defaultMeetingTitle;\r\n }\r\n}\r\n\r\nconst getMeetNowSettings = (): MeetNowSettings => {\r\n if (settings) {\r\n return settings;\r\n }\r\n\r\n init();\r\n return settings;\r\n};\r\n\r\nexport default getMeetNowSettings;\r\n","import * as React from 'react';\r\nimport { StackNavigationContext, StackNavigationContextConsumer } from '../../contexts/StackNavigationContext';\r\nimport { StackNavigationProps, StackNavigationView } from './StackNavigationView';\r\n\r\nexport class NestedStackNavigationView extends React.PureComponent {\r\n\r\n render() {\r\n return { (parentContext) => this._renderNested(parentContext) };\r\n }\r\n private _renderNested = (parentContext: StackNavigationContext) => {\r\n const childProps = { ...this.props, parentContext };\r\n return React.createElement(StackNavigationView, childProps);\r\n }\r\n}\r\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nmodule.exports = safeGet;\n","import { Image, ProviderConsumer, ThemePrepared } from '@stardust-ui/react';\r\nimport * as React from 'react';\r\nimport { IMeetNowSettings } from 'src/ts/meetnow/MeetNowSettings';\r\nimport { AriaContextConsumer } from '../../contexts/AriaContext';\r\nimport { ConfigContextConsumer } from '../../contexts/ConfigContext';\r\nimport { Footer } from '../common/Footer';\r\nimport { NestedStackNavigationView } from '../common/NestedStackNavigationView';\r\nimport { UnifiedLoginMethod } from './login/UnifiedLoginMethod';\r\n\r\ninterface UnifiedViewProps {\r\n onLaunchClick: () => void;\r\n allowDesktopSafariGuestFlow: boolean;\r\n meetNowSettings: IMeetNowSettings;\r\n country?: string;\r\n}\r\n\r\nexport class UnifiedView extends React.PureComponent {\r\n\r\n renderThemeAware = (_: ThemePrepared) => {\r\n return
\r\n\r\n
\r\n { (configContext) =>\r\n \r\n }\r\n { (ariaContext) =>\r\n \r\n }\r\n initialViewProps={\r\n { eventViewName: 'login-method' }\r\n }\r\n />\r\n }\r\n
\r\n\r\n
\r\n
;\r\n }\r\n\r\n render() {\r\n return ;\r\n }\r\n}\r\n","import config from 'config';\r\nimport { DoContext } from 'src/ts/contexts/do/DoContext';\r\nimport { OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { logger } from '../../helpers/LoggerHelper';\r\nimport { ALauncher } from '../common/ALauncher';\r\n\r\ninterface LauncherProps {\r\n do: DoContext;\r\n}\r\n\r\nexport class Launcher extends ALauncher {\r\n\r\n protected _getLauncherUrl() {\r\n if (os === OperatingSystems.Android) {\r\n return config.urls.doLauncher.intentUri(this.props.do.action, this.props.do.skypeId, logger.getCorrelationId(), 'launcher', config.urls.app.download);\r\n }\r\n return config.urls.doLauncher.skypeUri(this.props.do.action, this.props.do.skypeId, logger.getCorrelationId(), 'launcher');\r\n }\r\n\r\n protected _getLoggerAction() {\r\n return 'join-do';\r\n }\r\n}\r\n","import * as clipboard from 'clipboard-polyfill';\r\n\r\nclass ClipboardHelper {\r\n public copyToClipboard(text: string) {\r\n clipboard.writeText(text);\r\n }\r\n}\r\n\r\nexport const clipboardHelper = new ClipboardHelper();\r\n","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","\"use strict\";\r\n/**\r\n* TelemetryManager.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* Record new telemtry events and fires update\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar subscribableevent_1 = require(\"subscribableevent\");\r\nvar TelemetryManager = /** @class */ (function () {\r\n function TelemetryManager(_cache) {\r\n this._cache = _cache;\r\n this.telemetryEventAdded = new subscribableevent_1.default();\r\n //noop\r\n }\r\n TelemetryManager.prototype.sendTelemetryEvent = function (event) {\r\n var eventName = event.getEventName();\r\n var eventData = event.getAttributes();\r\n var telemetryEnabled = false;\r\n var clientTelemetryConfig = this._cache.getEcsConfig();\r\n if (clientTelemetryConfig && TelemetryManager._containsEcsClientTelemetryConfig(clientTelemetryConfig.config)) {\r\n var ecsConfig = clientTelemetryConfig.config.ECSCONFIG;\r\n if (ecsConfig && ecsConfig.ecsClientTelemetry) {\r\n telemetryEnabled = !!ecsConfig.ecsClientTelemetry[eventName];\r\n }\r\n }\r\n if (telemetryEnabled) {\r\n this.telemetryEventAdded.fire(eventName, eventData);\r\n }\r\n };\r\n TelemetryManager._containsEcsClientTelemetryConfig = function (config) {\r\n return !!config && !!config.ECSCONFIG && !!config.ECSCONFIG.ecsClientTelemetry;\r\n };\r\n return TelemetryManager;\r\n}());\r\nexports.default = TelemetryManager;\r\n","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n","import * as React from 'react';\r\n\r\nexport class DomHelper {\r\n\r\n public static fakeButtonAccessibilityKey = (e: React.KeyboardEvent, callback?: (e: React.SyntheticEvent) => void) => {\r\n if (e.key === ' ' || e.key === 'Enter') {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!!callback) {\r\n callback(e);\r\n } else {\r\n e.currentTarget.click();\r\n }\r\n }\r\n }\r\n\r\n public static setFocus = (element: HTMLElement | null) => {\r\n if (element) {\r\n element.focus();\r\n }\r\n }\r\n}\r\n","import { AWTPiiKind } from '@aria/webjs-sdk';\r\nimport { localizer } from '@skype/bew-localization';\r\nimport { Button, Portal, Provider, ThemeInput, themes } from '@stardust-ui/react';\r\nimport config from 'config';\r\nimport merge from 'lodash/merge';\r\nimport noop from 'lodash/noop';\r\nimport * as React from 'react';\r\nimport * as SyncTasks from 'synctasks';\r\nimport '../../vendor/silentLogin';\r\nimport { RootView as BotsRootView } from './components/bots/RootView';\r\nimport { RootView as ChannelsRootView } from './components/channels/RootView';\r\nimport { AriaLive } from './components/common/AriaLive';\r\nimport { ErrorBoundary } from './components/common/ErrorBoundary';\r\nimport { ErrorDetails } from './components/common/ErrorDetails';\r\nimport { RootView as DoRootView } from './components/do/RootView';\r\nimport { RootView as InvitesRootView } from './components/invites/RootView';\r\nimport { RootView as MeetingsRootView } from './components/meetings/RootView';\r\nimport { RootView as ProfilesRootView } from './components/profiles/RootView';\r\nimport { AriaContext, AriaContextProvider, AriaMessage } from './contexts/AriaContext';\r\nimport { ConfigContext, ConfigContextProvider } from './contexts/ConfigContext';\r\nimport { EcsConfigFallback, EcsContext, EcsContextProvider } from './contexts/EcsContext';\r\nimport { ErrorContext, ErrorContextProvider } from './contexts/ErrorContext';\r\nimport { UserContext, UserContextProvider } from './contexts/UserContext';\r\nimport { CookieHelper } from './helpers/CookieHelper';\r\nimport { ecsHelper } from './helpers/EcsHelper';\r\nimport { browser, Browsers, canJoinOnWeb, deviceType, DeviceTypes, EnvironmentHelper } from './helpers/EnvironmentHelper';\r\nimport { DisplayableError } from './helpers/ErrorHelper';\r\nimport { loadTranslation } from './helpers/LocalizerHelper';\r\nimport { CommonProperty, logger } from './helpers/LoggerHelper';\r\nimport { silentLoginAsync, SilentLoginResult } from './helpers/SilentLoginHelper';\r\nimport { mainContentId, Themes } from './models/SharedTypes';\r\nimport ProfileRestClient from './rest/ProfileRestClient';\r\nimport * as localThemes from './themes';\r\n\r\nexport enum EntryPoint {\r\n Meetings = 'meetings',\r\n Invites = 'invites',\r\n Bots = 'bots',\r\n Channels = 'channels',\r\n Do = 'do',\r\n Profiles = 'profiles',\r\n}\r\n\r\nexport interface AppProps {\r\n readonly language: string;\r\n readonly basePath: string;\r\n readonly entryPoint: EntryPoint;\r\n readonly skypetoken?: string;\r\n readonly theme?: Themes;\r\n readonly country?: string;\r\n}\r\n\r\nexport interface AppState {\r\n loadingTranslations: boolean;\r\n loadingEcs: boolean;\r\n theme: ThemeInput;\r\n userContext: UserContext;\r\n configContext: ConfigContext;\r\n errorContext: ErrorContext;\r\n ariaContext: AriaContext;\r\n ecsContext: EcsContext;\r\n}\r\n\r\nconst SilentLoginTimeout = 8000;\r\n\r\nexport class App extends React.Component {\r\n\r\n constructor(props: AppProps) {\r\n super(props);\r\n this.state = {\r\n loadingTranslations: true,\r\n loadingEcs: true,\r\n configContext: {\r\n ...config,\r\n basePath: this.props.basePath,\r\n language: props.language,\r\n switchLanguage: this._switchLanguage,\r\n },\r\n theme: merge({}, localThemes.common, props.theme === Themes.Teams ? localThemes.teams : localThemes.light),\r\n userContext: {\r\n skypetoken: undefined,\r\n expiration: undefined,\r\n profile: undefined,\r\n isLoginInProgress: this._canUseSilentLogin(),\r\n silentLoginNotSupported: !this._canUseSilentLogin(),\r\n },\r\n errorContext: {\r\n error: undefined,\r\n setError: this._setErrorContext,\r\n clear: this._clearErrorContext,\r\n },\r\n ariaContext: {\r\n message: { assertive: false, text: '' },\r\n announce: this._announce,\r\n },\r\n ecsContext: {\r\n settings: EcsConfigFallback,\r\n },\r\n };\r\n\r\n logger.initCommonProperty({ key: CommonProperty.EntryPoint, value: props.entryPoint });\r\n }\r\n\r\n componentDidMount() {\r\n // Injecting browser specific styles in \r\n const style = document.createElement('style');\r\n if (browser === Browsers.Safari && deviceType === DeviceTypes.Mobile && document.head) {\r\n style.innerHTML = `.meetings .ui-button, .bots .ui-button, .invites .ui-button { display: block; }`;\r\n document.head.appendChild(style);\r\n }\r\n\r\n loadTranslation(this.props.language);\r\n this.setState({ loadingTranslations: false });\r\n\r\n if (this._canUseSilentLogin()) {\r\n const silentLoginPromise = silentLoginAsync()\r\n .then(this._getProfileAsync)\r\n .then((userContext) => {\r\n this.setState({ userContext });\r\n })\r\n .catch((error) => {\r\n logger.error(error);\r\n this.setState({\r\n userContext: {\r\n profile: undefined,\r\n skypetoken: undefined,\r\n expiration: undefined,\r\n isLoginInProgress: false,\r\n },\r\n });\r\n }); // it's ok if the user is not logged in\r\n\r\n SyncTasks.raceTimer(silentLoginPromise, SilentLoginTimeout).then((result) => {\r\n if (result.timedOut) {\r\n logger.error(new Error('Silent Login TimeOut'));\r\n silentLoginPromise.cancel();\r\n this._startLoadingEcs();\r\n this.setState({\r\n userContext: {\r\n profile: undefined,\r\n skypetoken: undefined,\r\n expiration: undefined,\r\n isLoginInProgress: false,\r\n },\r\n });\r\n }\r\n });\r\n } else {\r\n this._startLoadingEcs();\r\n }\r\n }\r\n\r\n componentDidUpdate(_: AppProps, prevState: AppState) {\r\n if (prevState.userContext.isLoginInProgress && !this.state.userContext.isLoginInProgress) {\r\n this._startLoadingEcs();\r\n }\r\n }\r\n\r\n render() {\r\n return <>\r\n { !this.state.loadingTranslations && { localizer.getString('Common.a11y_lnk_skip_content') } }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { this._getRootView() }\r\n { this._renderErrorPortal() }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ;\r\n }\r\n\r\n private _renderErrorPortal() {\r\n const error = this.state.errorContext && this.state.errorContext.error;\r\n if (!error) {\r\n return;\r\n }\r\n return ;\r\n }\r\n\r\n private _renderErrorPortalContent(error: DisplayableError) {\r\n return
\r\n
\r\n \r\n
\r\n
;\r\n }\r\n\r\n private _startLoadingEcs() {\r\n ecsHelper.loadConfig(this.state.userContext.skypetoken, this.state.userContext.expiration, (settings) => {\r\n const wasPreLoggedin = Boolean(this.props && this.state.userContext && this.state.userContext.skypetoken);\r\n const useUnifiedView = this._determineIsItUnifiedView(settings.useUnifiedView);\r\n const quickJoinFlowSupportedBrowsers = settings.quickJoinFlowSupportedBrowsers ?? EcsConfigFallback.quickJoinFlowSupportedBrowsers;\r\n EnvironmentHelper.updateEnvironmentSettings(quickJoinFlowSupportedBrowsers);\r\n logger.sessionStarted({useUnifiedView, wasPreLoggedin});\r\n this.setState({\r\n loadingEcs: false,\r\n ecsContext: {\r\n settings: {\r\n useUnifiedView,\r\n quickJoinFlowSupportedBrowsers,\r\n useMeetingsApi: settings.useMeetingsApi ?? EcsConfigFallback.useMeetingsApi,\r\n maxRetries: settings.maxRetries ?? EcsConfigFallback.maxRetries,\r\n useNewMobileJoinFlow: settings.useMeetingsApi ?? EcsConfigFallback.useNewMobileJoinFlow,\r\n allowDesktopSafariGuestFlow: settings.allowDesktopSafariGuestFlow ?? EcsConfigFallback.allowDesktopSafariGuestFlow,\r\n useJoinThread: settings.useJoinThread ?? EcsConfigFallback.useJoinThread,\r\n },\r\n },\r\n });\r\n }, EcsConfigFallback);\r\n }\r\n\r\n private _determineIsItUnifiedView(unifiedViewEcsSettings: boolean) {\r\n return (unifiedViewEcsSettings && deviceType === DeviceTypes.Desktop);\r\n }\r\n\r\n private _canUseSilentLogin() {\r\n if (this.props.entryPoint === EntryPoint.Meetings && !canJoinOnWeb) {\r\n return false;\r\n }\r\n\r\n return this.props.entryPoint !== EntryPoint.Bots;\r\n }\r\n\r\n private _getRootView() {\r\n switch (this.props.entryPoint) {\r\n case EntryPoint.Meetings:\r\n return ;\r\n case EntryPoint.Invites:\r\n return ;\r\n case EntryPoint.Bots:\r\n return ;\r\n case EntryPoint.Channels:\r\n return ;\r\n case EntryPoint.Do:\r\n return ;\r\n case EntryPoint.Profiles:\r\n return ;\r\n }\r\n }\r\n\r\n private _switchLanguage = (language: string) => {\r\n CookieHelper.setCookieValue(this.state.configContext.cookies.skype, language, 'LC');\r\n window.location.reload();\r\n }\r\n\r\n private _announce = (message: AriaMessage) => {\r\n this.setState((prevState) => {\r\n const { ariaContext } = prevState;\r\n ariaContext.message = message;\r\n return { ariaContext };\r\n });\r\n }\r\n\r\n private _setErrorContext = (error: DisplayableError) => {\r\n this.setState((prevState) => {\r\n const { errorContext } = prevState;\r\n errorContext.error = error;\r\n return {\r\n errorContext,\r\n };\r\n });\r\n }\r\n\r\n private _clearErrorContext = () => {\r\n this.setState((prevState) => {\r\n const { errorContext } = prevState;\r\n errorContext.error = undefined;\r\n return {\r\n errorContext,\r\n };\r\n });\r\n }\r\n\r\n private _getProfileAsync = (loginResult: SilentLoginResult | undefined): SyncTasks.Promise => {\r\n if (!loginResult || !loginResult.skypetoken) {\r\n return SyncTasks.Resolved({\r\n profile: undefined,\r\n skypetoken: undefined,\r\n expiration: undefined,\r\n isLoginInProgress: false,\r\n });\r\n }\r\n\r\n return ProfileRestClient.getUserProfileInfo(loginResult.skypetoken)\r\n .then((profile) => {\r\n const userContext: UserContext = {\r\n profile,\r\n skypetoken: loginResult.skypetoken,\r\n expiration: loginResult.expiration,\r\n isLoginInProgress: false,\r\n };\r\n\r\n logger.initCommonProperty({ key: CommonProperty.SkypeId, value: profile.username, piiKind: AWTPiiKind.Identity });\r\n return userContext;\r\n });\r\n }\r\n}\r\n","import { ThemeInput } from '@stardust-ui/react';\r\n\r\nconst theme: ThemeInput = {\r\n siteVariables: {\r\n brandIcon: '/images/icons/teams-96x96.png',\r\n },\r\n};\r\n\r\nexport default theme;\r\n","import config from 'config';\r\nimport { OffSkypeInviteServiceModel } from 'src/ts/models/OffSkypeInviteServiceModel';\r\nimport { OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { logger } from '../../helpers/LoggerHelper';\r\nimport { ALauncher } from '../common/ALauncher';\r\n\r\ninterface LauncherProps {\r\n invite: OffSkypeInviteServiceModel;\r\n}\r\n\r\nexport class Launcher extends ALauncher {\r\n\r\n protected _getLauncherUrl() {\r\n const invite = this.props.invite;\r\n const sessionId = logger.getCorrelationId();\r\n if (os === OperatingSystems.Android) {\r\n return config.urls.inviteLauncher.intentUri(invite.inviterSkypeId, sessionId, invite.longId, 'launcher', config.urls.app.download);\r\n }\r\n return config.urls.inviteLauncher.skypeUri(invite.inviterSkypeId, sessionId, invite.longId, 'launcher');\r\n }\r\n\r\n protected _getLoggerAction() {\r\n return 'join-invite';\r\n }\r\n}\r\n","\"use strict\";\r\n/**\r\n* Models.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* ECS models\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EcsConfigType;\r\n(function (EcsConfigType) {\r\n EcsConfigType[EcsConfigType[\"Default\"] = 0] = \"Default\";\r\n EcsConfigType[EcsConfigType[\"User\"] = 1] = \"User\";\r\n})(EcsConfigType = exports.EcsConfigType || (exports.EcsConfigType = {}));\r\n","import { Animation, Provider, ProviderConsumer, ThemePrepared } from '@stardust-ui/react';\r\nimport * as React from 'react';\r\n\r\nconst spinner = {\r\n keyframe: {\r\n from: {\r\n transform: 'rotate(0deg)',\r\n },\r\n to: {\r\n transform: 'rotate(360deg)',\r\n },\r\n },\r\n duration: '5s',\r\n iterationCount: 'infinite',\r\n};\r\n\r\nexport interface SpinnerProps {\r\n style?: React.CSSProperties;\r\n}\r\n\r\n// tslint:disable:max-line-length\r\nexport class Spinner extends React.PureComponent {\r\n\r\n renderThemeAware = (theme: ThemePrepared) => {\r\n return
\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\n render() {\r\n const theme = {\r\n animations: {\r\n spinner,\r\n },\r\n };\r\n\r\n return \r\n \r\n ;\r\n }\r\n}\r\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","import config from 'config';\r\nimport * as SyncTasks from 'synctasks';\r\nimport { CaptchaSolution } from '../components/common/Captcha';\r\nimport { ConversationServiceModel } from '../models/ConversationServiceModel';\r\nimport { GuestUserServiceModel } from '../models/GuestUserServiceModel';\r\nimport { OffSkypeInviteServiceModel, RawOffSkypeInviteServiceModel, transform as transformOffNetwork } from '../models/OffSkypeInviteServiceModel';\r\nimport { BaseRestClient } from './BaseRestClient';\r\n\r\nexport interface GuestJoinPayloadHuddleApi {\r\n captcha?: CaptchaSolution;\r\n flowId: string;\r\n name: string;\r\n threadId: string;\r\n}\r\n\r\nexport interface ConversationPayload {\r\n shortId: string;\r\n type: string;\r\n}\r\n\r\nexport interface OffSkypeInvitePayload {\r\n shortId: string;\r\n type: string;\r\n}\r\n\r\nexport interface RawConversationServiceModel {\r\n readonly FlowId: string;\r\n readonly Id: string;\r\n readonly Resource: string;\r\n readonly Action: string;\r\n}\r\n\r\nfunction transform(model: RawConversationServiceModel): ConversationServiceModel {\r\n return {\r\n action: model.Action,\r\n flowId: model.FlowId,\r\n id: model.Id,\r\n resource: model.Resource,\r\n };\r\n}\r\n\r\nclass HuddleApiClient extends BaseRestClient {\r\n joinAsGuest(payload: GuestJoinPayloadHuddleApi): SyncTasks.Promise {\r\n return this.performApiPost(\r\n '/v1/users/guests',\r\n payload,\r\n {\r\n eventProperties: {\r\n customPropertiesProvider: () => {\r\n return {\r\n includesCaptcha: !!payload.captcha,\r\n };\r\n },\r\n },\r\n });\r\n }\r\n\r\n getConversation(payload: ConversationPayload): SyncTasks.Promise {\r\n return this.performApiPost('/v2/conversation/', payload).then(transform);\r\n }\r\n\r\n getOffSkypeInvite(payload: OffSkypeInvitePayload): SyncTasks.Promise {\r\n return this.performApiPost('/v2/offskypeinvites', payload).then(transformOffNetwork);\r\n }\r\n}\r\n\r\nexport default new HuddleApiClient(config.urls.api.huddle);\r\n","import * as React from 'react';\r\nimport { OffSkypeInviteServiceModel } from '../../models/OffSkypeInviteServiceModel';\r\n\r\nexport interface InviteContext {\r\n invite: OffSkypeInviteServiceModel;\r\n}\r\n\r\n// Default context does not mean much sense here\r\nconst context = React.createContext(undefined);\r\n\r\nexport const InviteContextProvider = context.Provider;\r\n\r\nexport const InviteContextConsumer = context.Consumer;\r\n","import * as React from 'react';\r\nimport { AriaContextConsumer } from 'src/ts/contexts/AriaContext';\r\n\r\n// AriaLive need to re-render when its context is being updated. This does not make it candidate for PureComponent\r\nexport class AriaLive extends React.Component {\r\n render() {\r\n // ariaLive refs should stay unchanged for the lifecycle of the application\r\n // It means that conditional rendering of div[role=region] won't work, but its content will\r\n return { (ariaContext) =>\r\n <>\r\n
\r\n { ariaContext.message.assertive && ariaContext.message.text }\r\n
\r\n
\r\n { !ariaContext.message.assertive && ariaContext.message.text }\r\n
\r\n \r\n }
;\r\n\r\n }\r\n}\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Button, Header, Text } from '@stardust-ui/react';\r\nimport config from 'config';\r\nimport uniq from 'lodash/uniq';\r\nimport * as React from 'react';\r\nimport { WebErrorResponse } from 'simplerestclients';\r\nimport { OperatingSystems, os } from 'src/ts/helpers/EnvironmentHelper';\r\nimport { displayableErrors, ErrorHelper } from 'src/ts/helpers/ErrorHelper';\r\nimport { UrlHelper } from 'src/ts/helpers/UrlHelper';\r\nimport BotsRestClient from 'src/ts/rest/BotsRestClient';\r\nimport { BotsContext, BotsContextConsumer } from '../../contexts/bots/BotsContext';\r\nimport { logger } from '../../helpers/LoggerHelper';\r\nimport { Footer } from '../common/Footer';\r\nimport { Padder } from '../common/Padder';\r\nimport { BotInfo } from './BotInfo';\r\nimport { BotLauncher } from './BotLauncher';\r\n\r\ninterface AddBotViewProps {\r\n skypetoken?: string;\r\n onProgress: () => void;\r\n onAdd: () => void;\r\n onError: (error: Error) => void;\r\n}\r\n\r\nexport class AddBotView extends React.PureComponent {\r\n\r\n render() {\r\n return
\r\n \r\n
\r\n
\r\n
\r\n \r\n { (botsContext) => botsContext &&\r\n (botsContext.isAddedAsContact ? this._renderBotAddedContent(botsContext) : this._renderBotAddPromptContent(botsContext))\r\n }\r\n
\r\n
\r\n \r\n
\r\n
;\r\n }\r\n\r\n private _renderBotAddPromptContent(botContext: BotsContext) {\r\n return <>\r\n { botContext.botInfo.addAsContactAllowed && this._renderAddButton(botContext) }\r\n { this._renderBotDetails(botContext) }\r\n ;\r\n }\r\n\r\n private _renderBotAddedContent(botContext: BotsContext) {\r\n return
\r\n \r\n \r\n \r\n
;\r\n }\r\n\r\n private _renderAddButton(botContext: BotsContext) {\r\n return ;\r\n }\r\n\r\n private _renderBotDetails(botContext: BotsContext) {\r\n const privacyAndTos = botContext.botInfo.privacyStatement && botContext.botInfo.tos ?\r\n localizer.get('privacy_and_terms', {\r\n linkPrivacy: { type: 'a', href: botContext.botInfo.privacyStatement},\r\n linkTerms: { type: 'a', href: botContext.botInfo.tos},\r\n }) : undefined;\r\n return
\r\n \r\n { this._renderCapabilities(botContext.botInfo.capabilities) }\r\n \r\n
\r\n { privacyAndTos }\r\n
\r\n
;\r\n }\r\n\r\n private _renderCapabilities(botCapabilities: string[]) {\r\n\r\n const capabilitiestoLocStringMap: { [key: string]: string; } = {\r\n 'im.sendReceive': 'capability_im_send_receive',\r\n 'im.send': 'capability_im_send_receive',\r\n 'im.receive': 'capability_im_send_receive',\r\n 'audio.send': 'capability_audio_send',\r\n };\r\n\r\n const uniqueLocalizedCapabilities = uniq(botCapabilities\r\n .filter((cap) => !!capabilitiestoLocStringMap[cap])\r\n .map((cap) => localizer.getString(capabilitiestoLocStringMap[cap])));\r\n\r\n return
\r\n
\r\n
    \r\n { uniqueLocalizedCapabilities.map((cap, index) =>
  • ) }\r\n
\r\n
;\r\n }\r\n\r\n private _addBotToContacts(botContext: BotsContext) {\r\n return () => {\r\n logger.action({name: 'bot-add-contact'});\r\n const { skypetoken } = this.props;\r\n if (!skypetoken) {\r\n this._redirectToLogin(botContext.botId);\r\n return;\r\n }\r\n\r\n this.props.onProgress();\r\n BotsRestClient.addBotToContacts(botContext.botId, skypetoken)\r\n .then(() => this.props.onAdd())\r\n .catch((response: WebErrorResponse) => {\r\n const error = response && response.statusCode === 412 ?\r\n ErrorHelper.enrichErrorFromWebResponse(displayableErrors.BotTooManyContacts, response, 'Add bot request') :\r\n ErrorHelper.enrichErrorFromWebResponse(displayableErrors.Generic, response, 'Add bot request');\r\n this.props.onError(error);\r\n });\r\n };\r\n }\r\n\r\n private _redirectToLogin(botId: string) {\r\n const useBotsLauncherQueryParam = !!UrlHelper.getQueryParameter('botsLauncher');\r\n window.location.href = config.urls.app.botLogin(botId, useBotsLauncherQueryParam);\r\n }\r\n\r\n private _downloadSkype = () => {\r\n logger.action({ name: 'download' });\r\n const downloadUrl = os === OperatingSystems.MacOS ? config.urls.app.downloadDesktop : config.urls.app.download;\r\n window.open(downloadUrl, '_blank');\r\n }\r\n}\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Button, Header, Image, ProviderConsumer, Text, ThemePrepared } from '@stardust-ui/react';\r\nimport * as React from 'react';\r\nimport { logger } from 'src/ts/helpers/LoggerHelper';\r\nimport { ConfigContextConsumer } from '../../contexts/ConfigContext';\r\nimport { defaultFadeAnimation, StackNavigationContextConsumer } from '../../contexts/StackNavigationContext';\r\nimport { downloadSkype } from '../../helpers/DownloadSkypeHelper';\r\nimport { canJoinOnWeb, deviceType, DeviceTypes, isIOSInAppBrowserFlow } from '../../helpers/EnvironmentHelper';\r\nimport { UrlHelper } from '../../helpers/UrlHelper';\r\nimport { Footer } from '../common/Footer';\r\nimport { Header as PageHeader } from '../common/Header';\r\nimport { Padder } from '../common/Padder';\r\nimport { JoinLink, JoinLinkProps } from './JoinLink';\r\nimport { LoginView } from './LoginView';\r\n\r\ninterface JoinViewProps extends JoinLinkProps {\r\n onLaunchClick: () => void;\r\n threadId?: string;\r\n}\r\n\r\nexport class JoinView extends React.PureComponent {\r\n\r\n renderLogo(theme: ThemePrepared) {\r\n return (\r\n \r\n { (configContext) => }\r\n \r\n );\r\n }\r\n\r\n renderTitle() {\r\n return <>\r\n
{ localizer.getString('Meetings.txt_join_meeting_title') }
\r\n ;\r\n }\r\n\r\n renderDesktopBody() {\r\n if (deviceType !== DeviceTypes.Desktop) {\r\n return null;\r\n }\r\n\r\n return \r\n { localizer.getString('Meetings.txt_join_meeting_description') } \r\n { { localizer.getString('Meetings.lnk_join_meeting_retry') }\r\n }\r\n ;\r\n }\r\n\r\n renderControls() {\r\n if (deviceType === DeviceTypes.Mobile) {\r\n return ;\r\n }\r\n\r\n return <>\r\n { canJoinOnWeb && { (stackNavigationContext) =>\r\n \r\n } }\r\n \r\n ;\r\n }\r\n\r\n renderMobileBody() {\r\n if (deviceType !== DeviceTypes.Mobile) {\r\n return null;\r\n }\r\n\r\n const joinMeeting = this._isFallbackFlow() ?\r\n :\r\n \r\n \r\n { localizer.getString('btn_launch_join') }\r\n \r\n ;\r\n\r\n return <>\r\n \r\n { localizer.getString('Meetings.txt_join_meeting_description') }\r\n \r\n\r\n { joinMeeting }\r\n ;\r\n }\r\n\r\n render() {\r\n return
\r\n \r\n \r\n
\r\n \r\n { this.renderTitle() }\r\n { this.renderControls() }\r\n { this.renderMobileBody() }\r\n { this.renderDesktopBody() }\r\n
\r\n \r\n
\r\n
;\r\n }\r\n\r\n private _isFallbackFlow = (): boolean => isIOSInAppBrowserFlow && undefined !== UrlHelper.getQueryParameter('fallback');\r\n}\r\n","import { WebErrorResponse } from 'simplerestclients';\r\n\r\nexport interface DisplayableError extends Error {\r\n headerLocString: string;\r\n descriptionLocString: string;\r\n pageTitleLocString: string;\r\n emoticonPath?: string;\r\n}\r\n\r\nexport const displayableErrors = {\r\n ShortIdFromUrl: {\r\n name: 'ShortIdFromUrl',\r\n message: 'Cannot retrieve the shortId from url.',\r\n headerLocString: 'hdr_not_found_page_oops',\r\n descriptionLocString: 'txt_not_found_page_redirect',\r\n pageTitleLocString: 'hdr_not_found_page_title',\r\n emoticonPath: '/images/emoticons/error.png',\r\n } as DisplayableError,\r\n InviteIdFromUrl: {\r\n name: 'InviteIdFromUrl',\r\n message: 'Cannot retrieve the inviteId from url.',\r\n headerLocString: 'hdr_not_found_page_oops',\r\n descriptionLocString: 'txt_not_found_page_redirect',\r\n pageTitleLocString: 'hdr_not_found_page_title',\r\n emoticonPath: '/images/emoticons/error.png',\r\n } as DisplayableError,\r\n TooManyUsers: {\r\n name: 'TooManyUsers',\r\n message: 'TooManyUsers',\r\n headerLocString: 'hdr_toomanyusers_page_oops',\r\n descriptionLocString: 'txt_toomanyusers_page_explanation',\r\n emoticonPath: '/images/emoticons/busy.png',\r\n pageTitleLocString: 'hdr_toomanyusers_page_title',\r\n } as DisplayableError,\r\n Busy: {\r\n name: 'Busy',\r\n message: 'Busy',\r\n headerLocString: 'hdr_busy_page_oops',\r\n descriptionLocString: 'txt_busy_page_explanation',\r\n pageTitleLocString: 'hdr_busy_page_title',\r\n emoticonPath: '/images/emoticons/busy.png',\r\n } as DisplayableError,\r\n InviteNotFound: {\r\n name: 'InviteNotFound',\r\n message: 'InviteNotFound',\r\n headerLocString: 'hdr_not_found_page_oops',\r\n descriptionLocString: 'txt_not_found_offskypeinvite_page_redirect',\r\n pageTitleLocString: 'hdr_not_found_page_title',\r\n emoticonPath: '/images/emoticons/busy.png',\r\n } as DisplayableError,\r\n JoinDisabled: {\r\n name: 'JoinDisabled',\r\n message: 'JoinDisabled',\r\n headerLocString: 'hdr_joindisabled_page_oops',\r\n descriptionLocString: 'txt_joindisabled_page_explanation',\r\n pageTitleLocString: 'hdr_joindisabled_page_title',\r\n emoticonPath: '/images/emoticons/busy.png',\r\n } as DisplayableError,\r\n Generic: {\r\n name: 'Generic',\r\n message: 'Generic error',\r\n headerLocString: 'hdr_error_page_oops',\r\n descriptionLocString: 'txt_error_page_explanation',\r\n pageTitleLocString: 'hdr_error_page_title',\r\n emoticonPath: '/images/emoticons/error.png',\r\n } as DisplayableError,\r\n BotNotFound: {\r\n name: 'BotIdFromUrl',\r\n message: 'Cannot retrieve the bot id from url.',\r\n headerLocString: 'hdr_not_found_page_oops',\r\n descriptionLocString: 'bot_not_found',\r\n pageTitleLocString: 'hdr_not_found_page_title',\r\n emoticonPath: '/images/emoticons/error.png',\r\n } as DisplayableError,\r\n BotTooManyContacts: {\r\n name: 'BotTooManyContacts',\r\n message: 'BotTooManyContacts',\r\n headerLocString: 'bot_problem_page_oops',\r\n descriptionLocString: 'bot_too_many_contacts_page_redirect',\r\n pageTitleLocString: 'bot_too_many_contacts_page_title',\r\n emoticonPath: '/images/emoticons/error.png',\r\n } as DisplayableError,\r\n ChannelNotFound: {\r\n name: 'ChannelIdFromUrl',\r\n message: 'Cannot retrieve the channel short id from url.',\r\n headerLocString: 'hdr_not_found_page_oops',\r\n descriptionLocString: 'channels.channel_not_found',\r\n pageTitleLocString: 'hdr_not_found_page_title',\r\n emoticonPath: '/images/emoticons/error.png',\r\n } as DisplayableError,\r\n};\r\n\r\nexport class ErrorHelper {\r\n\r\n static convertToGenericDisplayableError(error: Error): DisplayableError {\r\n return {\r\n ...error,\r\n headerLocString: 'hdr_error_page_oops',\r\n descriptionLocString: 'txt_error_page_explanation',\r\n pageTitleLocString: 'hdr_error_page_title',\r\n emoticonPath: '/images/emoticons/error.png',\r\n };\r\n }\r\n\r\n static isDisplayableError(arg: any): arg is DisplayableError {\r\n return (arg as DisplayableError).headerLocString !== undefined && (arg as DisplayableError).descriptionLocString !== undefined;\r\n }\r\n\r\n static enrichErrorFromWebResponse(displayableError: DisplayableError, webResponse: WebErrorResponse, description?: string): DisplayableError {\r\n return {\r\n ...displayableError,\r\n ...ErrorHelper.getErrorFromWebErrorResponse(webResponse, description),\r\n };\r\n }\r\n\r\n private static getErrorFromWebErrorResponse(response: WebErrorResponse, description?: string): Error {\r\n return {\r\n name: description || `Request failed`,\r\n message: `${response.method} request failed: ${response.statusCode} ${response.statusText}`,\r\n };\r\n }\r\n}\r\n","import { AWTPiiKind, AWTPropertyType } from '@aria/webjs-sdk';\r\nimport { localizer } from '@skype/bew-localization';\r\nimport curry from 'lodash/curry';\r\nimport { WebErrorResponse } from 'simplerestclients';\r\nimport * as SyncTasks from 'synctasks';\r\nimport config from '../config/BaseConfig';\r\nimport { canJoinOnWeb } from '../helpers/EnvironmentHelper';\r\nimport { DisplayableError, displayableErrors, ErrorHelper } from '../helpers/ErrorHelper';\r\nimport { CommonProperty, logger } from '../helpers/LoggerHelper';\r\nimport { getSkypeIdFromSkypeToken } from '../helpers/SkypeTokenHelper';\r\nimport { buildRedirectQueryParameters, getShortIdFromJoinLink, getThreadId, redirectToSkypeClient } from '../meetnow/MeetNowEdgeHandler';\r\nimport { IMeetNowSettings } from '../meetnow/MeetNowSettings';\r\nimport { ConversationServiceModel } from '../models/ConversationServiceModel';\r\nimport { GuestJoinPayloadMeetingsApi, GuestUserServiceModel, WebClientRedirectParams } from '../models/GuestUserServiceModel';\r\nimport MeetingsApiClient from '../rest/MeetingsApiClient';\r\n\r\nconst joinLinkRegex = /^https:\\/\\/join\\.skype\\.com\\/[a-zA-Z0-9]{7,20}$/;\r\n\r\nexport const handleJoin = (\r\n settings: IMeetNowSettings,\r\n conversationServiceModel: ConversationServiceModel,\r\n skypeToken?: string,\r\n isNewJoinFlowFromJoinLink = false) => {\r\n logger.initCommonProperty({\r\n key: CommonProperty.ThreadId,\r\n value: conversationServiceModel.resource,\r\n piiKind: AWTPiiKind.GenericData,\r\n type: AWTPropertyType.String,\r\n });\r\n\r\n if (conversationServiceModel.shortId) {\r\n logger.initCommonProperty({\r\n key: CommonProperty.ShortId,\r\n value: conversationServiceModel.shortId,\r\n piiKind: AWTPiiKind.GenericData,\r\n type: AWTPropertyType.String,\r\n });\r\n }\r\n\r\n // For unsupported devices we navigate users to regular join flow where they an an opportunity to launch a desktop client or download it\r\n if (!canJoinOnWeb) {\r\n logger.action({ name: 'redirectToJoinPageUnsupportedDevice' });\r\n window.location.href =\r\n `/${ conversationServiceModel.shortId }?${\r\n buildRedirectQueryParameters(\r\n settings.MeetNowEdgeAllowedQueryParameters,\r\n logger.getCorrelationId(),\r\n isNewJoinFlowFromJoinLink)\r\n }`;\r\n return SyncTasks.Resolved();\r\n }\r\n\r\n if (skypeToken) {\r\n const redirectParams: WebClientRedirectParams = {\r\n threadId: conversationServiceModel.resource,\r\n skypetoken: skypeToken,\r\n shortId: conversationServiceModel.shortId,\r\n skypeId: getSkypeIdFromSkypeToken(skypeToken) || '',\r\n };\r\n\r\n redirectToSkypeClient(settings, 'MeetNowJoin', 'joinmeetnow', isNewJoinFlowFromJoinLink, redirectParams);\r\n return SyncTasks.Resolved();\r\n } else {\r\n return addUserToMeeting(settings, conversationServiceModel)\r\n .then(redirectToSkypeClient(settings, 'MeetNowJoin', 'joinmeetnow', isNewJoinFlowFromJoinLink));\r\n }\r\n};\r\n\r\nexport const addUserToMeeting = curry((settings: IMeetNowSettings, conversationServiceModel: ConversationServiceModel) => {\r\n if (!conversationServiceModel.shortId) {\r\n throw new Error('ShortId not provided to addUserToMeeting function');\r\n }\r\n\r\n const localizedGuestDefaultName = localizer.getString('Meetings.txt_guest_user_name') ?? 'Guest user';\r\n const params: GuestJoinPayloadMeetingsApi = {\r\n displayName: localizedGuestDefaultName,\r\n threadId: conversationServiceModel.resource,\r\n flowId: conversationServiceModel.flowId,\r\n shortId: conversationServiceModel.shortId,\r\n };\r\n\r\n return MeetingsApiClient\r\n .joinAsGuest(params, settings.MeetNowEdgeNumberOfFetchRetries, true)\r\n .then((guestUserServiceModel: GuestUserServiceModel) => ({\r\n threadId: conversationServiceModel.resource,\r\n shortId: conversationServiceModel.shortId,\r\n ...guestUserServiceModel,\r\n }))\r\n .catch((response: WebErrorResponse) => {\r\n let error: DisplayableError | undefined;\r\n const createGuestRequest = 'Create guest user';\r\n switch (response.statusCode) {\r\n case 403:\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.JoinDisabled, response, createGuestRequest);\r\n break;\r\n case 404:\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.InviteNotFound, response, createGuestRequest);\r\n break;\r\n case 412:\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.TooManyUsers, response, createGuestRequest);\r\n break;\r\n case 429:\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.TooManyUsers, response, createGuestRequest);\r\n break;\r\n case 500:\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.Generic, response, createGuestRequest);\r\n break;\r\n default:\r\n error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.Busy, response, createGuestRequest);\r\n break;\r\n }\r\n\r\n throw error;\r\n });\r\n});\r\n\r\nexport const validateJoinLinkOrCode = async (settings: IMeetNowSettings, joinLink: string) => {\r\n const normalizedJoinLink = normalizeJoinLink(config.urls.app.join, joinLink);\r\n\r\n if (!normalizedJoinLink.match(joinLinkRegex)) {\r\n return false;\r\n }\r\n\r\n const conversationServiceModel: ConversationServiceModel = await getThreadId(settings, getShortIdFromJoinLink(normalizedJoinLink));\r\n if (conversationServiceModel && conversationServiceModel.resource) {\r\n return conversationServiceModel;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport const normalizeJoinLink = (joinLinkDomain: string, joinLink: string) => {\r\n const trimmedJoinLink = joinLink.replace(/(^\\s*)|(\\s*\\.*\\s*$)/g, '');\r\n\r\n if (!trimmedJoinLink.startsWith(joinLinkDomain)) {\r\n return `${ joinLinkDomain }/${ trimmedJoinLink }`;\r\n }\r\n return trimmedJoinLink;\r\n};\r\n","export const getDiffInMS = (startDate: Date, endDate = new Date()): number => endDate.valueOf() - startDate.valueOf();\r\n","import * as React from 'react';\r\nimport { UserProfile } from '../models/ProfileServiceModel';\r\n\r\nexport interface UserContext {\r\n skypetoken: string | undefined;\r\n expiration: number | undefined;\r\n profile: UserProfile | undefined;\r\n isLoginInProgress: boolean;\r\n silentLoginNotSupported?: boolean;\r\n}\r\n\r\n// Default context does not mean much sense here\r\nconst context = React.createContext({} as UserContext);\r\n\r\nexport const UserContextProvider = context.Provider;\r\n\r\nexport const UserContextConsumer = context.Consumer;\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Button, Header, Image, Text } from '@stardust-ui/react';\r\nimport config from 'config';\r\nimport * as React from 'react';\r\nimport { ConfigContextConsumer } from 'src/ts/contexts/ConfigContext';\r\nimport { logger } from 'src/ts/helpers/LoggerHelper';\r\nimport { OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { Footer } from '../common/Footer';\r\nimport { Padder } from '../common/Padder';\r\n\r\ninterface DoViewProps {\r\n onLaunchClick: () => void;\r\n}\r\n\r\nexport class DoView extends React.PureComponent {\r\n\r\n renderLogo() {\r\n return \r\n { (configContext) => ;\r\n }\r\n\r\n renderTitle() {\r\n return
{ localizer.getString('hdr_launch_joining_conversation') }
;\r\n }\r\n\r\n renderControls() {\r\n return <>\r\n \r\n ;\r\n }\r\n\r\n renderBody() {\r\n return <>\r\n \r\n { localizer.getString('txt_launch_first_time_device') }\r\n \r\n \r\n { localizer.get('txt_launch_please_download', {\r\n download_skype: \r\n { localizer.getString('btn_launch_download_skype') }\r\n ,\r\n }) }\r\n \r\n ;\r\n }\r\n\r\n render() {\r\n return
\r\n \r\n
\r\n { this.renderLogo() }\r\n { this.renderTitle() }\r\n { this.renderControls() }\r\n { this.renderBody() }\r\n
\r\n \r\n
\r\n
;\r\n }\r\n\r\n private _downloadSkype = () => {\r\n logger.action({ name: 'download' });\r\n\r\n const downloadUrl = os === OperatingSystems.MacOS ? config.urls.app.downloadDesktop : config.urls.app.download;\r\n window.open(downloadUrl, '_blank');\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { DomHelper } from 'src/ts/helpers/DomHelper';\r\n\r\nexport interface SelectProps {\r\n options: OptionProps[];\r\n value?: OptionProps;\r\n disabled?: boolean;\r\n onChange: (value: string) => void;\r\n ariaLabel: string;\r\n autoFocus?: boolean;\r\n}\r\n\r\nexport interface SelectState {\r\n selected: OptionProps;\r\n focused: boolean;\r\n}\r\n\r\nexport interface OptionProps {\r\n value: string;\r\n text: string;\r\n}\r\n\r\nconst defaultEmptyOption = { value: 'NOT', text: '' };\r\n\r\nexport class Select extends React.Component {\r\n private _domReference: HTMLSelectElement | null;\r\n\r\n constructor(props: SelectProps) {\r\n super(props);\r\n this.state = {\r\n selected: props.value || defaultEmptyOption,\r\n focused: props.autoFocus || false,\r\n };\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(nextProps: SelectProps) {\r\n if (this.props.value !== nextProps.value) {\r\n this.setState({\r\n selected: nextProps.value || this.state.selected,\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n let wrapperAdditionalClass = '';\r\n if (this.props.options.length <= 1) {\r\n wrapperAdditionalClass += ' noOptions';\r\n }\r\n if (this.state.focused) {\r\n wrapperAdditionalClass += ' focused';\r\n }\r\n return (\r\n
\r\n \r\n { this.props.options.length > 1 && \r\n { this.renderOptions() }\r\n }\r\n
\r\n );\r\n }\r\n\r\n private renderOptions = () => {\r\n return this.props.options.map((option: OptionProps) => {\r\n return ;\r\n }).concat();\r\n }\r\n\r\n private _onChange = (event: React.ChangeEvent) => {\r\n const selectedCountry = event.target.value;\r\n const searchOption = this.props.options.filter((option) => option.value === event.target.value);\r\n this.setState({\r\n selected: searchOption.length ? searchOption[0] : defaultEmptyOption,\r\n }, () => this.props.onChange(selectedCountry));\r\n }\r\n\r\n private _onFocus = () => {\r\n if (this.state.focused) {\r\n return;\r\n }\r\n this.setState({\r\n focused: true,\r\n });\r\n }\r\n\r\n private _onBlur = () => {\r\n if (!this.state.focused) {\r\n return;\r\n }\r\n this.setState({\r\n focused: false,\r\n });\r\n }\r\n\r\n private _autoFocus = (el: HTMLSelectElement | null) => {\r\n if (this.props.autoFocus && el && !this._domReference) {\r\n this._domReference = el;\r\n window.setTimeout(() => DomHelper.setFocus(this._domReference), 200);\r\n }\r\n }\r\n}\r\n","import * as React from 'react';\r\nimport { deviceType, DeviceTypes } from '../../helpers/EnvironmentHelper';\r\nimport { logger } from '../../helpers/LoggerHelper';\r\n\r\ninterface LauncherState {\r\n launchUrl: string;\r\n}\r\n\r\nexport abstract class ALauncher

extends React.PureComponent {\r\n\r\n constructor(props: P) {\r\n super(props);\r\n this.state = {\r\n launchUrl: this._getLauncherUrl(),\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n logger.action({ name: this._getLoggerAction() });\r\n if (deviceType !== DeviceTypes.Desktop) {\r\n window.location.href = this.state.launchUrl;\r\n }\r\n }\r\n\r\n render() {\r\n return ;\r\n }\r\n\r\n protected abstract _getLauncherUrl(): string;\r\n protected abstract _getLoggerAction(): string;\r\n}\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Header, Image, Text } from '@stardust-ui/react';\r\nimport * as React from 'react';\r\nimport { ConfigContextConsumer } from '../../contexts/ConfigContext';\r\nimport { DisplayableError, ErrorHelper } from '../../helpers/ErrorHelper';\r\n\r\nexport interface ErrorDetailsProps {\r\n error: Error;\r\n showSkype?: boolean;\r\n assetsBasePath?: string;\r\n}\r\n\r\nexport class ErrorDetails extends React.PureComponent {\r\n constructor(props: ErrorDetailsProps) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n const displayableError: DisplayableError = ErrorHelper.isDisplayableError(this.props.error)\r\n ? this.props.error\r\n : ErrorHelper.convertToGenericDisplayableError(this.props.error);\r\n\r\n return

\r\n { this.props.showSkype &&
}\r\n \r\n { (configContext) => displayableError.emoticonPath &&\r\n \r\n }\r\n \r\n
\r\n \r\n { localizer.getString(displayableError.descriptionLocString) }\r\n \r\n
;\r\n }\r\n}\r\n","import * as React from 'react';\r\n\r\nexport interface ProfilesContext {\r\n skypeId: string;\r\n}\r\n\r\n// Default context does not mean much sense here\r\nconst context = React.createContext({} as ProfilesContext);\r\n\r\nexport const ProfilesContextProvider = context.Provider;\r\n\r\nexport const ProfilesContextConsumer = context.Consumer;\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Image, Text } from '@stardust-ui/react';\r\nimport * as React from 'react';\r\nimport { ConfigContextConsumer } from '../../contexts/ConfigContext';\r\nimport { canJoinOnWeb, deviceType, DeviceTypes, OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { defaultDimension, Dimension } from '../../models/SharedTypes';\r\n\r\ninterface HeaderState {\r\n browserSupportDimension: Dimension;\r\n}\r\n\r\nexport class Header extends React.PureComponent<{}, HeaderState> {\r\n\r\n private _browserSupportElement?: HTMLDivElement;\r\n private _debounce: number;\r\n\r\n constructor(props: {}) {\r\n super(props);\r\n this.state = {\r\n browserSupportDimension: defaultDimension,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('resize', this._updateDimensionDebouncer);\r\n this._updateDimension();\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this._updateDimensionDebouncer);\r\n delete this._browserSupportElement;\r\n }\r\n\r\n renderJoinOnWebDisclaimer(): React.ReactNode {\r\n // Join on web only available in desktop\r\n if (deviceType !== DeviceTypes.Desktop || canJoinOnWeb) {\r\n return null;\r\n }\r\n\r\n let param;\r\n switch (os) {\r\n case OperatingSystems.MacOS:\r\n param = { list_supported_browser: localizer.getString('Meetings.txt_list_supported_browser_macos') };\r\n break;\r\n\r\n case OperatingSystems.Win:\r\n case OperatingSystems.WinRT:\r\n param = { list_supported_browser: localizer.getString('Meetings.txt_list_supported_browser_win') };\r\n break;\r\n\r\n case OperatingSystems.Linux:\r\n default:\r\n param = { list_supported_browser: localizer.getString('Meetings.txt_list_supported_browser_linux') };\r\n break;\r\n }\r\n\r\n return
\r\n
\r\n { (configContext) =>\r\n \r\n }\r\n \r\n { localizer.getString('Meetings.txt_banner_unsupported_browser', param) }\r\n \r\n
\r\n
;\r\n }\r\n\r\n render() {\r\n return <>\r\n { this.renderJoinOnWebDisclaimer() }\r\n ;\r\n }\r\n\r\n private _updateDimensionDebouncer = () => {\r\n if (this._debounce) {\r\n window.clearTimeout(this._debounce);\r\n }\r\n\r\n this._debounce = window.setTimeout(() => {\r\n this._updateDimension();\r\n }, 100);\r\n }\r\n\r\n private _updateDimension = () => {\r\n this.setState(() => {\r\n let browserSupportDimension: Dimension = defaultDimension;\r\n if (this._browserSupportElement) {\r\n browserSupportDimension = {\r\n height: this._browserSupportElement.clientHeight,\r\n width: this._browserSupportElement.clientWidth,\r\n };\r\n }\r\n return {\r\n browserSupportDimension,\r\n };\r\n });\r\n }\r\n\r\n private _setBrowserSupport = (element?: HTMLDivElement | null) => {\r\n if (element) {\r\n this._browserSupportElement = element;\r\n }\r\n }\r\n}\r\n","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n","\"use strict\";\r\n/**\r\n* SkypeTokenData.ts\r\n* Author: CALIB http://aka.ms/CALIB\r\n* Copyright: Microsoft 2017\r\n*\r\n* Holder for SkypeToken information\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar subscribableevent_1 = require(\"subscribableevent\");\r\nvar SyncTasks = require(\"synctasks\");\r\nvar SkypeTokenData = /** @class */ (function () {\r\n function SkypeTokenData() {\r\n this.skypeTokenChanged = new subscribableevent_1.default();\r\n }\r\n SkypeTokenData.prototype.putSkypeTokenData = function (initialData) {\r\n this._data = initialData;\r\n if (this.isSkypeTokenValid()) {\r\n this.skypeTokenChanged.fire();\r\n }\r\n if (this.isSkypeTokenValid() && this._validSkypeTokenDeferral) {\r\n var deferral = this._validSkypeTokenDeferral;\r\n this._validSkypeTokenDeferral = undefined;\r\n deferral.resolve(void 0);\r\n }\r\n };\r\n SkypeTokenData.prototype.isSkypeTokenValid = function () {\r\n var tokenData = this._data;\r\n return !!tokenData && !!tokenData.skypeToken && tokenData.skypeTokenExpiration > Date.now();\r\n };\r\n SkypeTokenData.prototype.getSkypeToken = function () {\r\n var tokenData = this._data;\r\n if (!tokenData || !tokenData.skypeToken) {\r\n throw 'No Skype Token provided';\r\n }\r\n return tokenData.skypeToken;\r\n };\r\n SkypeTokenData.prototype.getSkypeTokenHash = function (token) {\r\n if (token === undefined) {\r\n return 0;\r\n }\r\n return token.split('').reduce(function (mem, next) { return (mem * 101 + next.charCodeAt(0)) % 999727999; }, token.length);\r\n };\r\n SkypeTokenData.prototype.waitForValidSkypeToken = function () {\r\n if (this.isSkypeTokenValid()) {\r\n return SyncTasks.Resolved();\r\n }\r\n // Need to wait for a new one to be poked in\r\n if (!this._validSkypeTokenDeferral) {\r\n this._validSkypeTokenDeferral = SyncTasks.Defer();\r\n }\r\n return this._validSkypeTokenDeferral.promise();\r\n };\r\n return SkypeTokenData;\r\n}());\r\nexports.default = SkypeTokenData;\r\n","import { localizer } from '@skype/bew-localization';\r\nimport * as React from 'react';\r\nimport { logger } from 'src/ts/helpers/LoggerHelper';\r\nimport { ConfigContext, ConfigContextConsumer } from '../../contexts/ConfigContext';\r\nimport { defaultDimension, Dimension } from '../../models/SharedTypes';\r\nimport { OptionProps, Select } from './Select';\r\n\r\nconst languages: OptionProps[] = [\r\n { value: 'en', text: 'English' },\r\n { value: 'ar', text: 'عربي' },\r\n { value: 'bg', text: 'Български' },\r\n { value: 'cs', text: 'Česky' },\r\n { value: 'da', text: 'Dansk' },\r\n { value: 'de', text: 'Deutsch' },\r\n { value: 'el', text: 'Ελληνικά' },\r\n { value: 'es', text: 'Español' },\r\n { value: 'et', text: 'Eesti' },\r\n { value: 'fi', text: 'Suomi' },\r\n { value: 'fr', text: 'Français' },\r\n { value: 'he', text: 'עברית' },\r\n { value: 'hi', text: 'हिन्दी' },\r\n { value: 'hu', text: 'Magyar' },\r\n { value: 'id', text: 'Bahasa Indonesia' },\r\n { value: 'it', text: 'Italiano' },\r\n { value: 'ja', text: '日本語' },\r\n { value: 'ko', text: '한국어' },\r\n { value: 'nl', text: 'Nederlands' },\r\n { value: 'no', text: 'Norsk' },\r\n { value: 'pl', text: 'Polski' },\r\n { value: 'pt', text: 'Português' },\r\n { value: 'pt-br', text: 'Português (Brasileiro)' },\r\n { value: 'ro', text: 'Română' },\r\n { value: 'ru', text: 'Русский' },\r\n { value: 'sv', text: 'Svenska' },\r\n { value: 'tr', text: 'Türkçe' },\r\n { value: 'uk', text: 'Українська' },\r\n { value: 'zh-Hans', text: '中文(简体)' },\r\n { value: 'zh-Hant', text: '中文 (繁體)' },\r\n];\r\n\r\ninterface FooterState {\r\n language: string;\r\n footerDimension: Dimension;\r\n}\r\n\r\ninterface FooterProps {\r\n dark?: boolean;\r\n showOnlyLegalInfo?: boolean;\r\n}\r\n\r\nexport class Footer extends React.PureComponent {\r\n private _footerElement?: HTMLDivElement;\r\n private _debounce: number;\r\n\r\n constructor(props: FooterProps) {\r\n super(props);\r\n\r\n const matchingLanguage = languages.filter((language) => language.value === localizer.getLocale());\r\n this.state = {\r\n language: matchingLanguage[0].value || 'en',\r\n footerDimension: defaultDimension,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('resize', this._updateDimensionDebouncer);\r\n this._updateDimension();\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this._updateDimensionDebouncer);\r\n delete this._footerElement;\r\n }\r\n\r\n render() {\r\n const separator =
·
;\r\n return { (configContext) =>\r\n
\r\n
\r\n
\r\n { !this.props.showOnlyLegalInfo && <>\r\n logger.action({ name: 'faq' }) }>\r\n { localizer.getString('footer_btn_FAQ') }\r\n \r\n { separator }\r\n
\r\n \r\n \r\n }\r\n
\r\n
\r\n logger.action({ name: 'terms' }) }>\r\n { localizer.getString('footer_btn_terms') }\r\n \r\n { separator }\r\n logger.action({ name: 'privacy' }) }>\r\n { localizer.getString('footer_btn_privacy') }\r\n \r\n { separator }\r\n { localizer.getString('footer_btn_copyright', { YEAR: new Date().getFullYear().toString() }) }\r\n
\r\n
\r\n
\r\n }
;\r\n }\r\n\r\n private _selectedLanguage = () => {\r\n const matchingLanguage = languages.filter((language) => language.value === this.state.language);\r\n return matchingLanguage ? matchingLanguage[0] : undefined;\r\n }\r\n\r\n private _setElement = (element?: HTMLDivElement | null) => {\r\n if (element) {\r\n this._footerElement = element;\r\n }\r\n }\r\n\r\n private _updateDimensionDebouncer = () => {\r\n if (this._debounce) {\r\n window.clearTimeout(this._debounce);\r\n }\r\n\r\n this._debounce = window.setTimeout(() => {\r\n this._updateDimension();\r\n }, 100);\r\n }\r\n\r\n private _updateDimension = () => {\r\n this.setState(() => {\r\n let footerDimension: Dimension = defaultDimension;\r\n if (this._footerElement) {\r\n footerDimension = {\r\n height: this._footerElement.clientHeight,\r\n width: this._footerElement.clientWidth,\r\n };\r\n }\r\n return { footerDimension };\r\n });\r\n }\r\n\r\n private _changeLanguage = (configContext: ConfigContext) => {\r\n return (value: string) => {\r\n configContext.switchLanguage(value);\r\n };\r\n }\r\n}\r\n","import { AWTPiiKind } from '@aria/webjs-sdk';\r\nimport { localizer } from '@skype/bew-localization';\r\nimport * as React from 'react';\r\nimport { WebErrorResponse } from 'simplerestclients';\r\nimport { AriaContextConsumer } from 'src/ts/contexts/AriaContext';\r\nimport { InviteContext, InviteContextProvider } from 'src/ts/contexts/invites/InviteContext';\r\nimport { AppIds } from 'src/ts/models/SharedTypes';\r\nimport HuddleApiClient from 'src/ts/rest/HuddleApiClient';\r\nimport { deviceType, DeviceTypes } from '../../helpers/EnvironmentHelper';\r\nimport { displayableErrors, ErrorHelper } from '../../helpers/ErrorHelper';\r\nimport { CommonProperty, logger } from '../../helpers/LoggerHelper';\r\nimport { ARootView, ARootViewProps } from '../common/ARootView';\r\nimport { StackNavigationView } from '../common/StackNavigationView';\r\nimport { InviteView } from './InviteView';\r\nimport { Launcher } from './Launcher';\r\n\r\nexport interface RootViewState {\r\n launcherKey: number;\r\n inviteContext?: InviteContext;\r\n error?: Error | undefined;\r\n}\r\n\r\nexport class RootView extends ARootView {\r\n\r\n constructor(props: ARootViewProps) {\r\n super(props);\r\n this.state = {\r\n launcherKey: deviceType === DeviceTypes.Desktop ? 1 : 0,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const shortId = this._getShortIdFromUrl();\r\n if (!shortId) {\r\n throw displayableErrors.InviteIdFromUrl;\r\n }\r\n\r\n HuddleApiClient.getOffSkypeInvite({\r\n shortId,\r\n type: AppIds.OffSkypeInvites,\r\n }).then((invite) => {\r\n this.setState({\r\n inviteContext: { invite },\r\n });\r\n logger.initCommonProperty({ key: CommonProperty.InviteSkypeId, value: invite.inviterSkypeId, piiKind: AWTPiiKind.Identity });\r\n }).catch((response: WebErrorResponse) => {\r\n const error = ErrorHelper.enrichErrorFromWebResponse(displayableErrors.InviteNotFound, response, 'Get invite details');\r\n this.setState({\r\n error,\r\n });\r\n });\r\n }\r\n\r\n componentDidUpdate(prevProps: ARootViewProps) {\r\n if (prevProps.loading && !this.props.loading) {\r\n document.title = localizer.getString('hdr_launch_title');\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.error) {\r\n throw this.state.error;\r\n }\r\n\r\n const invite = this.state.inviteContext ? this.state.inviteContext.invite : undefined;\r\n return \r\n { !!this.state.launcherKey && invite && }\r\n { (ariaContext) =>\r\n }\r\n initialViewProps={ { eventViewName: 'invite-view' } } />\r\n }\r\n ;\r\n }\r\n\r\n private _getShortIdFromUrl() {\r\n const pathName = window.location.pathname.replace(/\\/+$/, '');\r\n const pathParts = pathName.split('/');\r\n\r\n return pathParts.pop();\r\n }\r\n\r\n private _onLaunchClick = () => {\r\n this.setState((oldState) => {\r\n return { launcherKey: oldState.launcherKey + 1 };\r\n });\r\n }\r\n}\r\n","import UAParser from 'ua-parser-js';\r\nimport { QuickJoinFlowSupportedBrowsers } from '../contexts/EcsContext';\r\nimport { Dictionary } from '../models/SharedTypes';\r\n\r\nexport enum OperatingSystems {\r\n WinPhone = 'Windows Phone',\r\n WinRT = 'Windows RT',\r\n Win = 'Windows',\r\n iOS = 'iOS',\r\n MacOS = 'Mac OS',\r\n Android = 'Android',\r\n AndroidX86 = 'Android -x86',\r\n ChromeOS = 'ChromeOS',\r\n Linux = 'Linux',\r\n Tizen = 'Tizen',\r\n Ubuntu = 'Ubuntu',\r\n WebOS = 'WebOS',\r\n Unknown = 'Unknown',\r\n}\r\n\r\nexport enum Browsers {\r\n AndroidBrowser = 'Android Browser',\r\n Avast = 'Avast',\r\n AVG = 'AVG',\r\n Bolt = 'Bolt',\r\n ChromeWebView = 'Chrome WebView',\r\n Chrome = 'Chrome',\r\n Chromium = 'Chromium',\r\n Dolphin = 'Dolphin',\r\n EdgeOld = 'EdgeOld',\r\n Edge = 'Edge',\r\n Electron = 'Electron',\r\n Facebook = 'Facebook',\r\n Firefox = 'Firefox',\r\n Instagram = 'Instagram',\r\n Kindle = 'Kindle',\r\n Opera = 'Opera',\r\n OperaMini = 'Opera Mini',\r\n OperaMobile = 'Opera Mobile',\r\n MSIE = 'IE',\r\n Mozilla = 'Mozilla',\r\n Safari = 'Safari',\r\n SafariMobile = 'Mobile Safari',\r\n PhantomJS = 'PhantomJS',\r\n SamsungBrowser = 'Samsung Browser',\r\n SkypeShell = 'SkypeShell',\r\n Tesla = 'Tesla',\r\n Tizen = 'Tizen Browser',\r\n Yandex = 'Yandex',\r\n WeChat = 'WeChat',\r\n Baidu = 'baidu',\r\n Unknown = 'Unknown',\r\n}\r\n\r\nconst osRegExps: Dictionary = {};\r\nosRegExps[OperatingSystems.WinPhone] = /windows\\sphone/i;\r\nosRegExps[OperatingSystems.WinRT] = /arm;/i;\r\nosRegExps[OperatingSystems.Win] = /(windows|win32)/i;\r\nosRegExps[OperatingSystems.iOS] = /(iPad|iPhone|iPod)/i;\r\nosRegExps[OperatingSystems.MacOS] = /(macintosh|mac os x)/i;\r\nosRegExps[OperatingSystems.Android] = /android/i;\r\nosRegExps[OperatingSystems.ChromeOS] = /CrOS/i;\r\nosRegExps[OperatingSystems.Linux] = /(linux|x11)/i;\r\n\r\nconst browserRegExps: Dictionary = {};\r\nbrowserRegExps[Browsers.Opera] = /(OPR\\/|Opera)/i;\r\nbrowserRegExps[Browsers.EdgeOld] = /Edge/i;\r\nbrowserRegExps[Browsers.Edge] = /Edg/i;\r\nbrowserRegExps[Browsers.MSIE] = /Trident/i;\r\nbrowserRegExps[Browsers.Chrome] = /Chrome/i;\r\nbrowserRegExps[Browsers.Firefox] = /Firefox/i;\r\nbrowserRegExps[Browsers.Safari] = /Safari/i;\r\nbrowserRegExps[Browsers.Facebook] = /(FBAN|FBAV)/i;\r\n\r\nexport interface IBrowserVersion {\r\n major: number;\r\n minor: number;\r\n bugfix?: number;\r\n}\r\n\r\nexport enum DeviceTypes {\r\n Desktop = 'desktop',\r\n Mobile = 'mobile',\r\n Other = 'other',\r\n}\r\n\r\nexport class EnvironmentHelper {\r\n\r\n /**\r\n * Returns the Operating System the code is executed in\r\n *\r\n * @return {string}\r\n */\r\n static getOS = (): OperatingSystems => {\r\n const osInformation = EnvironmentHelper._uaParser.getOS();\r\n const detectedOs = osInformation?.name as OperatingSystems ?? EnvironmentHelper._getOsFallback(EnvironmentHelper._uaParser.getUA() || window.navigator.userAgent);\r\n // iPads send by default MacOS user agent to so correctly detect iPad we use this trick\r\n if (detectedOs === OperatingSystems.MacOS && (navigator?.maxTouchPoints ?? 0) > 1) {\r\n return OperatingSystems.iOS;\r\n }\r\n\r\n return detectedOs;\r\n }\r\n\r\n /**\r\n * Returns the browser name\r\n *\r\n * @return {string}\r\n */\r\n static getBrowserName = (): Browsers => {\r\n const browserName = EnvironmentHelper._uaParser.getBrowser();\r\n return browserName?.name as Browsers ?? EnvironmentHelper._getBrowserNameFallback(EnvironmentHelper._uaParser.getUA() || window.navigator.userAgent);\r\n }\r\n\r\n static getSafariBrowserVersion = (): IBrowserVersion | undefined => {\r\n const version = EnvironmentHelper._uaParser.getUA().match(/version\\/(\\d+)\\.(\\d+)(\\.(\\d+))?/i);\r\n\r\n if (!version) {\r\n return;\r\n }\r\n\r\n return {\r\n major: parseInt(version[1], 10),\r\n minor: parseInt(version[2], 10),\r\n bugfix: parseInt(version[4], 10) || undefined,\r\n };\r\n }\r\n\r\n static isSafariBrowserVersionAtLeast(minimumVersion: IBrowserVersion): boolean {\r\n if (EnvironmentHelper.getBrowserName() !== Browsers.Safari) {\r\n return false;\r\n }\r\n\r\n const version = EnvironmentHelper.getSafariBrowserVersion();\r\n\r\n if (!version) {\r\n return false;\r\n }\r\n\r\n return version.major > minimumVersion.major\r\n || (version.major === minimumVersion.major && version.minor >= minimumVersion.minor);\r\n }\r\n\r\n static isSafariBrowserEligibleForMeetingGuestFlow = (): boolean => {\r\n return EnvironmentHelper.isSafariBrowserVersionAtLeast({\r\n major: 13,\r\n minor: 1,\r\n });\r\n }\r\n\r\n /**\r\n * Returns the device type\r\n *\r\n * @return {string}\r\n */\r\n static getDeviceType = (): DeviceTypes => {\r\n switch (EnvironmentHelper.getOS()) {\r\n case OperatingSystems.Win:\r\n case OperatingSystems.MacOS:\r\n case OperatingSystems.WinRT:\r\n case OperatingSystems.ChromeOS:\r\n case OperatingSystems.Linux:\r\n case OperatingSystems.Ubuntu:\r\n return DeviceTypes.Desktop;\r\n\r\n case OperatingSystems.WinPhone:\r\n case OperatingSystems.iOS:\r\n case OperatingSystems.Android:\r\n case OperatingSystems.AndroidX86:\r\n return DeviceTypes.Mobile;\r\n\r\n case OperatingSystems.Unknown:\r\n case OperatingSystems.WebOS:\r\n case OperatingSystems.Tizen:\r\n default:\r\n return DeviceTypes.Other;\r\n }\r\n }\r\n\r\n static isQuickWebJoinSupported = (): boolean => {\r\n return EnvironmentHelper._currentBrowserSupportsQuickJoinOnWeb();\r\n }\r\n\r\n /**\r\n * Returns current screen resolution\r\n *\r\n * @return {string}\r\n */\r\n static getScreenResolution = (_screen = window.screen) => {\r\n if (_screen.width == null || typeof _screen.width === 'undefined' ||\r\n _screen.height == null || typeof _screen.height === 'undefined') {\r\n\r\n return 'Unknown';\r\n }\r\n\r\n return _screen.width + 'x' + _screen.height;\r\n }\r\n\r\n /**\r\n * Returns language from the browser\r\n *\r\n * @return {string}\r\n */\r\n static getLanguage = (_navigator = window.navigator) => {\r\n const lang = _navigator.language || (_navigator as any).userLanguage;\r\n\r\n if (lang !== undefined && lang.length > 2) {\r\n return lang.substr(0, 2);\r\n }\r\n\r\n return lang;\r\n }\r\n\r\n /**\r\n * Returns the iOS version\r\n * Based on detectDevice can returns iPhone/iPad or just version number\r\n *\r\n * @return {string}\r\n */\r\n static getIOSVersion() {\r\n\r\n const iOSVersionMatches = EnvironmentHelper._uaParser.getUA().match(\r\n new RegExp('(iPhone OS|CPU OS)' + ' ([\\\\d_]+)'),\r\n );\r\n\r\n if (iOSVersionMatches) {\r\n return iOSVersionMatches[2].replace(/_/g, '.');\r\n }\r\n\r\n return 'Unknown';\r\n }\r\n\r\n static isIOSInAppBrowserFlow = (_os: OperatingSystems = os, _browser: Browsers = browser): boolean => {\r\n const knownInAppBrowsers = [\r\n Browsers.Facebook,\r\n ];\r\n\r\n return _os === OperatingSystems.iOS && knownInAppBrowsers.indexOf(browser) > -1;\r\n }\r\n\r\n static getSupportedBrowsersDefault = (): QuickJoinFlowSupportedBrowsers => {\r\n return {\r\n android: [Browsers.Chrome, Browsers.Chromium, Browsers.Edge, Browsers.Firefox, Browsers.Opera, Browsers.Yandex],\r\n ios: [Browsers.Safari, Browsers.SafariMobile, Browsers.Chrome, Browsers.Chromium, Browsers.Edge, Browsers.Firefox, Browsers.Opera, Browsers.Yandex],\r\n mac: [Browsers.Safari, Browsers.Chrome, Browsers.Chromium, Browsers.Edge, Browsers.Firefox, Browsers.Opera, Browsers.Yandex],\r\n windows: [Browsers.Chrome, Browsers.Chromium, Browsers.Edge, Browsers.EdgeOld, Browsers.Firefox, Browsers.Opera, Browsers.Yandex],\r\n others: [Browsers.Chrome, Browsers.Chromium, Browsers.Edge, Browsers.Firefox, Browsers.Opera, Browsers.Yandex],\r\n };\r\n }\r\n\r\n static updateEnvironmentSettings = (quickJoinFlowSupportedBrowsers?: QuickJoinFlowSupportedBrowsers, customUaParser?: UAParser) => {\r\n EnvironmentHelper._quickJoinFlowSupportedBrowsers = quickJoinFlowSupportedBrowsers ?? EnvironmentHelper._quickJoinFlowSupportedBrowsers;\r\n if (customUaParser) {\r\n EnvironmentHelper._uaParser = customUaParser;\r\n }\r\n }\r\n\r\n private static _uaParser = new UAParser();\r\n private static _quickJoinFlowSupportedBrowsers = EnvironmentHelper.getSupportedBrowsersDefault();\r\n\r\n private static _currentBrowserSupportsQuickJoinOnWeb = (): boolean => {\r\n const currentBrowser = EnvironmentHelper.getBrowserName();\r\n const currentOs = EnvironmentHelper.getOS();\r\n const supportedBrowsers = EnvironmentHelper._quickJoinFlowSupportedBrowsers;\r\n switch (currentOs) {\r\n case OperatingSystems.Android:\r\n case OperatingSystems.AndroidX86:\r\n case OperatingSystems.ChromeOS:\r\n return supportedBrowsers.android.includes(currentBrowser);\r\n\r\n case OperatingSystems.iOS:\r\n return supportedBrowsers.ios.includes(currentBrowser);\r\n\r\n case OperatingSystems.MacOS:\r\n return supportedBrowsers.mac.includes(currentBrowser);\r\n\r\n case OperatingSystems.Win:\r\n case OperatingSystems.WinRT:\r\n return supportedBrowsers.windows.includes(currentBrowser);\r\n\r\n default:\r\n return supportedBrowsers.others.includes(currentBrowser);\r\n }\r\n }\r\n\r\n private static _getOsFallback = (userAgent: string): OperatingSystems => {\r\n for (const osKey in osRegExps) {\r\n if (userAgent.match(osRegExps[osKey])) {\r\n // iPads send by default MacOS user agent to so correctly detect iPad we use this trick\r\n if (osKey === OperatingSystems.MacOS && (navigator?.maxTouchPoints ?? 0) > 1) {\r\n return OperatingSystems.iOS;\r\n }\r\n\r\n return osKey as OperatingSystems;\r\n }\r\n }\r\n\r\n return OperatingSystems.Unknown;\r\n }\r\n\r\n private static _getBrowserNameFallback = (userAgent: string): Browsers => {\r\n for (const browserKey in browserRegExps) {\r\n if (userAgent.match(browserRegExps[browserKey])) {\r\n return browserKey as Browsers;\r\n }\r\n }\r\n\r\n return Browsers.Unknown;\r\n }\r\n}\r\n\r\n// PlatformVersion: Helpers.Environment.pureOSVersion,\r\n// Platform: Helpers.Environment.platform,\r\n// Language: Helpers.Environment.language,\r\n// ScreenResolution: Helpers.Environment.screenResolution\r\n\r\nexport const os = EnvironmentHelper.getOS();\r\nexport const browser = EnvironmentHelper.getBrowserName();\r\nexport const deviceType = EnvironmentHelper.getDeviceType();\r\nexport const canJoinOnWeb = EnvironmentHelper.isQuickWebJoinSupported();\r\nexport const screenResolution = EnvironmentHelper.getScreenResolution();\r\nexport const deviceLanguage = EnvironmentHelper.getLanguage();\r\nexport const platform = window.navigator.platform;\r\nexport const isIOSInAppBrowserFlow = EnvironmentHelper.isIOSInAppBrowserFlow();\r\nexport const isSafariBrowserEligibleForMeetingGuestFlow = EnvironmentHelper.isSafariBrowserEligibleForMeetingGuestFlow();\r\nexport const getSupportedBrowsersDefault = EnvironmentHelper.getSupportedBrowsersDefault();\r\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","import * as React from 'react';\r\nimport { getSupportedBrowsersDefault } from './../helpers/EnvironmentHelper';\r\n\r\nexport interface EcsSettings {\r\n useMeetingsApi: boolean;\r\n useUnifiedView: boolean;\r\n useJoinThread?: boolean;\r\n maxRetries?: number;\r\n allowDesktopSafariGuestFlow?: boolean;\r\n webSubdomainForRedirect?: string;\r\n useNewMobileJoinFlow?: boolean;\r\n quickJoinFlowSupportedBrowsers?: QuickJoinFlowSupportedBrowsers;\r\n}\r\n\r\nexport interface QuickJoinFlowSupportedBrowsers {\r\n windows: string[];\r\n mac: string[];\r\n ios: string[];\r\n android: string[];\r\n others: string[];\r\n}\r\n\r\nexport interface EcsContext {\r\n settings: EcsSettings;\r\n}\r\n\r\nconst context = React.createContext({} as EcsContext);\r\n\r\nconst ecsDefaults: EcsSettings = {\r\n useMeetingsApi: true,\r\n useUnifiedView: true,\r\n useJoinThread: true,\r\n maxRetries: 0,\r\n useNewMobileJoinFlow: true,\r\n allowDesktopSafariGuestFlow: true,\r\n quickJoinFlowSupportedBrowsers: getSupportedBrowsersDefault,\r\n};\r\n\r\nexport const EcsContextProvider = context.Provider;\r\n\r\nexport const EcsContextConsumer = context.Consumer;\r\n\r\nexport const EcsConfigFallback = ecsDefaults;\r\n","import { localizer } from '@skype/bew-localization';\r\nimport { Avatar, Button, Header, Text } from '@stardust-ui/react';\r\nimport config from 'config';\r\nimport * as React from 'react';\r\nimport { logger } from 'src/ts/helpers/LoggerHelper';\r\nimport { ProfilesContextConsumer } from '../../contexts/profiles/ProfilesContext';\r\nimport { OperatingSystems, os } from '../../helpers/EnvironmentHelper';\r\nimport { Footer } from '../common/Footer';\r\nimport { Padder } from '../common/Padder';\r\n\r\ninterface ProfileViewProps {\r\n onLaunchClick: () => void;\r\n}\r\n\r\nexport class ProfileView extends React.PureComponent {\r\n\r\n renderAvatar() {\r\n return { (profilesContext) =>\r\n \r\n };\r\n }\r\n\r\n renderTitle() {\r\n return { (profilesContext) =>\r\n
{ localizer.get('add_to_contacts_user', {\r\n user_name: { profilesContext.skypeId },\r\n }) }
\r\n }
;\r\n }\r\n\r\n renderControls() {\r\n return <>\r\n \r\n ;\r\n }\r\n\r\n renderBody() {\r\n return <>\r\n \r\n { localizer.getString('txt_launch_first_time_device') }\r\n \r\n \r\n { localizer.get('txt_launch_please_download', {\r\n download_skype: \r\n { localizer.getString('btn_launch_download_skype') }\r\n ,\r\n }) }\r\n \r\n ;\r\n }\r\n\r\n render() {\r\n return
\r\n \r\n
\r\n { this.renderAvatar() }\r\n { this.renderTitle() }\r\n { this.renderControls() }\r\n { this.renderBody() }\r\n
\r\n \r\n
\r\n
;\r\n }\r\n\r\n private _downloadSkype = () => {\r\n logger.action({ name: 'download' });\r\n\r\n const downloadUrl = os === OperatingSystems.MacOS ? config.urls.app.downloadDesktop : config.urls.app.download;\r\n window.open(downloadUrl, '_blank');\r\n }\r\n}\r\n","\nvar content = require(\"!!../../node_modules/css-loader/index.js??ref--6-1!../../node_modules/postcss-loader/lib/index.js??ref--6-2!../../node_modules/less-loader/dist/cjs.js!./app.less\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../node_modules/css-loader/index.js??ref--6-1!../../node_modules/postcss-loader/lib/index.js??ref--6-2!../../node_modules/less-loader/dist/cjs.js!./app.less\", function() {\n\t\tvar newContent = require(\"!!../../node_modules/css-loader/index.js??ref--6-1!../../node_modules/postcss-loader/lib/index.js??ref--6-2!../../node_modules/less-loader/dist/cjs.js!./app.less\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","/**\r\n * @copyright © Microsoft. All rights reserved.\r\n *\r\n * Skype Silent Login SDK\r\n */\r\n(function() {\r\n \"use strict\";\r\n\r\n if (typeof window.SKYPE === \"undefined\") {\r\n window.SKYPE = {};\r\n }\r\n window.SKYPE.login = window.SKYPE.login || {};\r\n\r\n window.SKYPE.login.Silent = (function() {\r\n var loginDomains = {\r\n qa: \"https://a.qa.lw.skype.net\",\r\n live: \"https://a.lw.skype.com\"\r\n },\r\n ssoLoginDomains = {\r\n qa: \"https://a.qalogin.skype.net\",\r\n live: \"https://a.login.skype.com\"\r\n },\r\n originCheckMap = {\r\n qa: [\"https://a.qa.lw.skype.net\", \"https://a.qalogin.skype.net\"],\r\n live: [\"https://a.lw.skype.com\", \"https://a.login.skype.com\"]\r\n },\r\n endpoint = \"/login/silent\", // Silent login endpoint uri\r\n endpointVersion = \"1.0\", // Endpoint version\r\n iFrameReference = null, // iFrame object reference\r\n ancestorElement, // iFrame's ancestor\r\n callback, // Callback function\r\n response = {}, // Response object\r\n timeout = 5000, // Timeout for the call in ms\r\n timeoutObj = null, // Timeout reference\r\n host = null, // Selected login hostname\r\n originCheckHosts = null, // Array of hosts for postmessage origin check\r\n state = \"\", // State passed through the silent login\r\n eventRegistered = false, // Post message event listener registered\r\n processing = false, // Processing the Silent login request\r\n logEnabled = null; // Debug logging enabled\r\n\r\n /**\r\n * Settings object. will be overriden by init()\r\n */\r\n var settings = {\r\n env: \"live\",\r\n client_id: null,\r\n redirect_uri: null,\r\n isSsoCompatible: false\r\n };\r\n\r\n /**\r\n * Simple debug logger\r\n *\r\n * @param string message Logged message\r\n * @param Object debug Optional debug data\r\n *\r\n * @return void\r\n */\r\n var _log = function(message, debug) {\r\n if (logEnabled === null) {\r\n logEnabled = (window.location.host.match(/^(pre|dev|qa).*\\.net$/) || document.cookie.indexOf(\"debug\") > -1 || window.location.search.indexOf(\"debug\") > -1);\r\n }\r\n if (!logEnabled) {\r\n return;\r\n }\r\n try {\r\n if (typeof debug === \"object\") {\r\n var tokens = [];\r\n\r\n for (var prop in debug) {\r\n if (prop === \"skypetoken\") {\r\n // Hide the skypetoken from console\r\n tokens.push(prop + \": \" + \"\");\r\n } else {\r\n tokens.push(prop + \": \" + JSON.stringify(debug[prop]));\r\n }\r\n }\r\n\r\n message += \" - \" + tokens.join(\", \");\r\n } else if (typeof debug === \"string\") {\r\n message += \" - \" + debug;\r\n }\r\n message = \"[silentlogin.js] - \" + message;\r\n console.log(message);\r\n } catch (e) {}\r\n };\r\n\r\n /**\r\n * Post message event listener\r\n *\r\n * @return void\r\n */\r\n var _messageListener = function(e) {\r\n _log(\"Received message from \" + e.origin);\r\n\r\n // Verify the message origin\r\n var originCheckPassed = false;\r\n\r\n if (!originCheckHosts) {\r\n return;\r\n }\r\n\r\n for (var i = 0; i < originCheckHosts.length; i++) {\r\n if (e.origin === originCheckHosts[i]) {\r\n originCheckPassed = true;\r\n break;\r\n }\r\n }\r\n\r\n if (!originCheckPassed) {\r\n return;\r\n }\r\n\r\n var data = e.data;\r\n\r\n // If the postMessage sends just a string, try to JSON parse it\r\n if (typeof e.data === \"string\") {\r\n try {\r\n data = JSON.parse(e.data);\r\n } catch (ex) {}\r\n }\r\n _log(\"Message data\", data);\r\n\r\n // Verify the message state\r\n var receivedState = data.state || null;\r\n if (state !== receivedState) {\r\n _log(\"State \" + receivedState + \" doesn't match the last submitted state \" + state);\r\n return;\r\n }\r\n // Response is trusted\r\n window.clearTimeout(timeoutObj);\r\n // Clone the response data\r\n response = {};\r\n for (var attr in data) {\r\n if (data.hasOwnProperty(attr)) {\r\n response[attr] = data[attr];\r\n }\r\n }\r\n\r\n _callCallback();\r\n };\r\n\r\n /**\r\n * Create the silent login iframe and start loading\r\n *\r\n * @return void\r\n */\r\n var _createSilentLogin = function(source) {\r\n _destroySilentLogin();\r\n if (typeof ancestorElement === \"undefined\") {\r\n // Use body as the ancestor, but when it's not available yet, use head instead.\r\n // document.head is not available in IE8, so fallback is to get it by tag name.\r\n ancestorElement = document.body || document.head || document.getElementsByTagName('head')[0];\r\n }\r\n iFrameReference = document.createElement(\"iframe\");\r\n iFrameReference.frameBorder = 0;\r\n iFrameReference.width = \"1px\";\r\n iFrameReference.height = \"1px\";\r\n iFrameReference.style.display = \"none\";\r\n iFrameReference.style.visibility = \"hidden\";\r\n iFrameReference.id = \"silentLoginFrame\" + Math.floor((Math.random() * 10) + 1);\r\n iFrameReference.setAttribute(\"src\", source);\r\n ancestorElement.appendChild(iFrameReference);\r\n _log(\"Created iFrame: \" + source);\r\n };\r\n\r\n /**\r\n * Destroy the silent login iframe\r\n *\r\n * @return void\r\n */\r\n var _destroySilentLogin = function() {\r\n if (iFrameReference) {\r\n ancestorElement.removeChild(iFrameReference);\r\n iFrameReference = null;\r\n }\r\n };\r\n\r\n /**\r\n * Verify if the provided settings are valid. Initialize the redirect uri if missing.\r\n *\r\n * @return void\r\n */\r\n var _validateSettings = function() {\r\n if (!settings.client_id) {\r\n throw \"[silentlogin.js] client_id not initialized. Call init() first.\";\r\n }\r\n\r\n if (!settings.redirect_uri) {\r\n // If redirect_uri not set, use the page location (without parameters)\r\n settings.redirect_uri = window.location.protocol + \"//\" + window.location.host + window.location.pathname;\r\n }\r\n };\r\n\r\n /**\r\n * Check if the browser supports postMessage and JSON.parse\r\n *\r\n * @return boolean\r\n */\r\n var _isSupportedBrowser = function() {\r\n return (\"postMessage\" in window) && (typeof JSON === \"object\" && JSON.parse);\r\n };\r\n\r\n /**\r\n * Call the callback function and pass the response object to it.\r\n *\r\n * @return void\r\n */\r\n var _callCallback = function() {\r\n _log(\"Calling callback function\", response);\r\n\r\n // No longer processing request. Unlock.\r\n processing = false;\r\n\r\n if (typeof callback === \"function\") {\r\n callback(response);\r\n }\r\n };\r\n\r\n /**\r\n * Handle timeout event and call the callback function.\r\n *\r\n * @return void\r\n */\r\n var _handleTimeout = function() {\r\n _destroySilentLogin();\r\n response = {};\r\n response.error = \"timeout\";\r\n _callCallback();\r\n };\r\n\r\n /**\r\n * Serialize object into query parameters\r\n *\r\n * @param Object query Object holding the parameters to serialize\r\n * @return string Serialized query string\r\n */\r\n var _createQuery = function(query) {\r\n var str = [];\r\n for (var k in query) {\r\n if (query.hasOwnProperty(k)) {\r\n str.push(encodeURIComponent(k) + \"=\" + encodeURIComponent(query[k]));\r\n }\r\n }\r\n return str.join(\"&\");\r\n };\r\n\r\n /**\r\n * Get the iFrame source url\r\n *\r\n * @return string Frame url\r\n */\r\n var _getFrameSource = function() {\r\n var timestamp = new Date().getTime(),\r\n domainMap = settings.isSsoCompatible ? ssoLoginDomains : loginDomains;\r\n\r\n state = \"silentloginsdk_\" + timestamp;\r\n var query = {\r\n response_type: \"postmessage\",\r\n client_id: settings.client_id,\r\n partner: \"999\",\r\n redirect_uri: settings.redirect_uri,\r\n state: state,\r\n _accept: endpointVersion,\r\n _nc: timestamp\r\n };\r\n\r\n originCheckHosts = originCheckMap[settings.env] || originCheckMap.live;\r\n host = domainMap[settings.env] || domainMap.live;\r\n return host + endpoint + \"?\" + _createQuery(query);\r\n };\r\n\r\n /**\r\n * Initialize the Silent login before using it\r\n *\r\n * Pass in the settings object:\r\n *
\r\n         * {\r\n         *  env: \"\", // Skype environment to be used: Live (default), QA. Optional.\r\n         *  client_id: , // Client id of your application. Mandatory.\r\n         *  redirect_uri: , // Redirect uri of your application. If left empty, will be autodetected from current location. (Optional, recommended)\r\n         * }\r\n         * 
\r\n *\r\n * @param Object options Silent login options\r\n * @return SKYPE.login.Silent\r\n */\r\n var init = function(options) {\r\n if (typeof options === \"object\") {\r\n options = options || {};\r\n // If callback function passed into init method, set it correctly\r\n if (options.hasOwnProperty(\"callback\")) {\r\n setCallback(options.callback);\r\n }\r\n // Copy overrides to settings\r\n for (var k in settings) {\r\n if (options.hasOwnProperty(k)) {\r\n settings[k] = options[k];\r\n }\r\n }\r\n }\r\n // Register the message listener\r\n if (!eventRegistered) {\r\n eventRegistered = true;\r\n if (!window.addEventListener) {\r\n window.attachEvent(\"onmessage\", _messageListener);\r\n } else {\r\n window.addEventListener(\"message\", _messageListener, false);\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Set the callback function, which will be called once we get the result.\r\n * Note the function parameter will contain the response object.\r\n *\r\n * @param function callbackFunction Callback function\r\n * @return SKYPE.login.Silent\r\n */\r\n var setCallback = function(callbackFunction) {\r\n if (typeof callbackFunction === \"function\") {\r\n callback = callbackFunction;\r\n }\r\n return this;\r\n };\r\n\r\n /**\r\n * Trigger loading the Silent login iFrame. Registered callback will be called once finished.\r\n *\r\n * @return void\r\n */\r\n var load = function() {\r\n // Prevent multiple simultaneous calls\r\n if (processing) {\r\n return;\r\n }\r\n _validateSettings();\r\n processing = true;\r\n // If this browser doesn't support postMessage, we're done.\r\n if (!_isSupportedBrowser()) {\r\n response = {error: \"unsupported_browser\"};\r\n _callCallback();\r\n return;\r\n }\r\n // Initialize timer\r\n window.clearTimeout(timeoutObj);\r\n timeoutObj = window.setTimeout(_handleTimeout, timeout);\r\n // Start loading the iFrame\r\n _createSilentLogin(_getFrameSource());\r\n };\r\n\r\n /**\r\n * Get the Skypetoken from response or null if not provided\r\n *\r\n * @return string|null Skypetoken or null\r\n */\r\n var getSkypetoken = function() {\r\n return response.skypetoken || null;\r\n };\r\n\r\n /**\r\n * Get the full response object\r\n *\r\n * @return Object Response object\r\n */\r\n var getFullResponse = function() {\r\n return response;\r\n };\r\n\r\n return {\r\n init: init,\r\n setCallback: setCallback,\r\n load: load,\r\n getSkypetoken: getSkypetoken,\r\n getFullResponse: getFullResponse\r\n };\r\n }());\r\n}());\r\n","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".footer{position:absolute;left:0;right:0;bottom:0;background-color:#f2f2f2;color:#2b2c33;display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex:0 0 auto;-webkit-box-flex:0;flex:0 0 auto;-ms-flex-direction:row;-webkit-box-orient:horizontal;-webkit-box-direction:normal;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-justify-content:space-between;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:9.6px;font-size:.6rem;font-weight:700;min-height:19.2px;min-height:1.2rem;padding:5px 10px}@media only screen and (max-width:600px){.footer{text-align:center}}.footer.dark{background-color:transparent;color:#fff}.footer .link{color:#000;opacity:.8;text-decoration:none}.footer.dark .link{opacity:1;color:#fff}.footer .link:focus,.footer .link:hover{color:#000}.footer_link:focus{color:#000;text-decoration:underline}.footer .separator{display:inline-block;margin:0;padding:0 3px}@media only screen and (max-width:600px){.footer .app{width:100%}}@media only screen and (max-width:600px){.footer .legal{opacity:.5;width:100%}}@media only screen and (max-width:412px){.footer .legal .footer .separator:last-of-type{display:none}}.rtl .footer .app{margin-left:20px;margin-right:0}@media only screen and (max-width:412px){.copyright{display:block;width:100%}}.language-selector{display:inline-block;position:relative}.language-selector .selected{line-height:15px;display:inline-block}.language-selector .select{border:none;cursor:pointer;height:100%;left:0;font-size:11px;opacity:0;position:absolute;top:0;width:100%;z-index:20}.rtl .language-selector .select{left:auto;right:0}.header{position:absolute;left:0;right:0;top:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.header.dark{background-color:#2b2c33;color:#fff}.header-flex{-ms-flex-item-align:start;align-self:flex-start}.header a.light{text-decoration:none;color:#0078d4}.stack.fullscreen,.stack.fullscreen>div{min-height:100%;width:100%;position:absolute}.stack.nested{height:100%;width:100%}.stack>div{box-sizing:border-box;display:-ms-flexbox;display:-webkit-box;display:flex;-ms-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-ms-justify-content:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.stack.prev{z-index:0;overflow:hidden}.stack.current{z-index:1;overflow-x:hidden}@-webkit-keyframes stackFade{0%{opacity:0}to{opacity:1}}@keyframes stackFade{0%{opacity:0}to{opacity:1}}@-webkit-keyframes stackFadeOut{0%{opacity:1}to{opacity:0}}@keyframes stackFadeOut{0%{opacity:1}to{opacity:0}}@-webkit-keyframes stackLeft{0%{left:100%}to{left:0}}@keyframes stackLeft{0%{left:100%}to{left:0}}@-webkit-keyframes stackLeftOut{0%{left:0}to{left:100%}}@keyframes stackLeftOut{0%{left:0}to{left:100%}}@-webkit-keyframes stackRight{0%{right:100%}to{right:0}}@keyframes stackRight{0%{right:100%}to{right:0}}@-webkit-keyframes stackRightOut{0%{right:0}to{right:100%}}@keyframes stackRightOut{0%{right:0}to{right:100%}}.meetings.joinView{padding:0 1rem}.meetings.joinView .ui-button:not(.fakeLink){min-width:192px;min-width:12rem;min-height:56px;min-height:3.5rem;width:100%;margin:1rem 0 0}.meetings.joinView .ui-button.fakeLink{height:100%;font-size:100%;margin:0;padding:0;vertical-align:baseline;vertical-align:initial}.meetings.joinView .title{margin-top:1rem;max-width:320px;max-width:20rem;text-align:center;font-size:24px;font-size:1.5rem;font-weight:100}.meetings.joinView .body{margin:1rem 0;text-align:center}@font-face{font-family:SkypeAssetsLight;src:url(https://meetnow.azureedge.net/assets/v2/SkypeAssets-Light.woff) format(\\\"woff\\\")}.meetings.joinView .joinLinkContainer{font-size:16px;font-size:1rem;text-align:center;width:100%}.meetings.joinView .joinLinkContainer .joinLink{background-color:#f1f1f4;border-radius:11px;box-sizing:border-box;color:#2b2c33;font-size:18px;height:50px;line-height:50px;margin:10px 0;overflow:hidden;padding:0 45px;position:relative;text-align:left;text-overflow:ellipsis;width:100%}[dir=rtl] .meetings.joinView .joinLinkContainer .joinLink{text-align:right}.meetings.joinView .joinLinkContainer .joinLink:after,.meetings.joinView .joinLinkContainer .joinLink:before{cursor:pointer;font-family:SkypeAssetsLight;font-size:20px;position:absolute;top:0;width:20px}.meetings.joinView .joinLinkContainer .joinLink:before{color:#7b7b7b;content:\\\"\\\\E612\\\"}.meetings.joinView .joinLinkContainer .joinLink:after{content:\\\"\\\\E941\\\"}.meetings.joinView .joinLinkContainer .joinLink.copied:after{color:green;content:\\\"\\\\E412\\\"}[dir=ltr] .meetings.joinView .joinLinkContainer .joinLink:before,[dir=rtl] .meetings.joinView .joinLinkContainer .joinLink:after{left:15px}[dir=ltr] .meetings.joinView .joinLinkContainer .joinLink:after,[dir=rtl] .meetings.joinView .joinLinkContainer .joinLink:before{right:15px}.guestLogin .ui-input input{background:transparent;border-bottom:1px solid #fff;border-radius:0;color:#fff;text-align:center;line-height:normal}.guestLogin .ui-input input::-webkit-input-placeholder{color:#fff}.guestLogin .ui-input input:-ms-input-placeholder{color:#fff}.guestLogin .ui-input input::placeholder{color:#fff}.loginView .body{color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%}.loginView .body a{color:#fff;text-decoration:underline}.loginView .actions>.ui-button{margin:1rem 0 0;width:100%;min-width:192px;min-width:12rem;height:48px;height:3rem}.loginView .body .actions{padding:1rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.loginView .body .actions .help{font-size:small;margin-top:1rem}.loginView .body .actions .active{background:#fff;color:#000;border-radius:10px;cursor:pointer}.loginView .body .actions .active .ui-button{width:100%;height:auto;border-radius:0;margin:0;color:#000;min-width:0}.loginView .body .actions .active .login-option{width:100%}.loginView .body .actions .active .login-option>.ui-layout__main{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;padding-left:1rem}.loginView .body .actions .active .ui-button:focus,.loginView .body .actions .active .ui-button:hover{background-color:#f1f1f4}.loginView .body .actions .active .ui-layout__start>.ui-button:focus,.loginView .body .actions .active .ui-layout__start>.ui-button:hover{border-top-left-radius:10px;border-top-right-radius:10px}.loginView .body .actions .active .ui-layout__end>.ui-button:focus,.loginView .body .actions .active .ui-layout__end>.ui-button:hover{border-bottom-left-radius:10px;border-bottom-right-radius:10px}.loginView .captcha-container :focus{outline-color:#fff}.unifiedView .body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%}.unifiedView .title{margin-top:1rem;max-width:320px;max-width:20rem;text-align:center;font-size:24px;font-size:1.5rem;font-weight:100}.unifiedView .privacy-statement{margin-top:1rem;max-width:672px;max-width:42rem;padding:0 2rem;text-align:justify;font-size:16px;font-size:1rem;font-weight:100}.unifiedView .privacy-statement a{color:#0078d4!important}.unifiedView .actions-container{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;width:100%}.unifiedView .actions-container,.unifiedView .text-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.unifiedView .text-body{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.unifiedView .ui-button.fakeLink{height:100%;font-size:100%;margin:0;padding:0;vertical-align:baseline;vertical-align:initial}.unifiedView .margin-top{margin-top:1rem}.unifiedView .actions>.ui-button{margin:1rem 0 0;width:100%;min-width:192px;min-width:12rem;height:48px;height:3rem}.unifiedView .body .actions{padding:1rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;margin-bottom:20px}.unifiedView .body .actions .help{font-size:small;margin-top:1rem}.unifiedView .body .actions .active{background:#fff;color:#000;border-radius:10px;cursor:pointer}.unifiedView .body .actions .active .ui-button{width:100%;height:auto;border-radius:0;margin:0;color:#000;min-width:0}.unifiedView .body .actions .active .login-option{width:100%}.unifiedView .body .actions .active .login-option>.ui-layout__main{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;padding-left:1rem}.unifiedView .body .actions .active .ui-button:focus,.unifiedView .body .actions .active .ui-button:hover{background-color:#f1f1f4}.unifiedView .body .actions .active .ui-layout__start>.ui-button:focus,.unifiedView .body .actions .active .ui-layout__start>.ui-button:hover{border-top-left-radius:10px;border-top-right-radius:10px}.unifiedView .body .actions .active .ui-layout__end>.ui-button:focus,.unifiedView .body .actions .active .ui-layout__end>.ui-button:hover{border-bottom-left-radius:10px;border-bottom-right-radius:10px}.unifiedView .body a{color:#000}.unifiedView .guestLogin .ui-input input{background:transparent;border-bottom:1px solid #0078ca;border-radius:0;text-align:center;color:#000;line-height:normal}.unifiedView .guestLogin .ui-input input:focus{box-shadow:none}.unifiedView .guestLogin .ui-input input::-webkit-input-placeholder{color:#a8abad}.unifiedView .guestLogin .ui-input input:-ms-input-placeholder{color:#a8abad}.unifiedView .guestLogin .ui-input input::placeholder{color:#a8abad}.unifiedView .footer{background-color:transparent}.unifiedView div.selectWrapper,.unifiedView span.copyright{color:#000;opacity:.8}.unifiedView .captcha-container input.solution{background:transparent;border-width:1px!important;border-bottom:1px solid #a8abad;color:#a8abad;text-align:center!important;line-height:normal}.unifiedView .captcha-container :focus{outline-color:#000}.unifiedView .guestLogin button:first-of-type{background-color:#0078ca;color:#fff}.unifiedView .guestLogin button:first-of-type[disabled]{background-color:#d5d9de}.unifiedView .guestLogin button:last-of-type .ui-text{color:#000}.unifiedView .guestLogin .spinnerContainer{width:16px;width:1rem;height:16px;height:1rem;line-height:16px;line-height:1rem;margin:0 .5rem 0 -1.5rem}[dir=rtl] .unifiedView .guestLogin .spinnerContainer{margin:0 -1.5rem 0 .5rem}.unifiedView .guestLogin .spinnerContainer .ui-animation g[stroke]{stroke:#fff}.invites.inviteView{padding:0 1rem}.invites.inviteView .ui-button:not(.fakeLink){min-width:192px;min-width:12rem;min-height:56px;min-height:3.5rem;width:100%;margin:1rem 0 0}.invites.inviteView .ui-button.fakeLink{height:100%;font-size:100%;margin:0;padding:0;vertical-align:baseline;vertical-align:initial}.invites.inviteView .title{margin-top:1rem;max-width:320px;max-width:20rem;text-align:center;font-size:24px;font-size:1.5rem;font-weight:100}.invites.inviteView .body{margin:1rem 0;text-align:center}.captcha-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1;flex:1}.captcha-container table{border-collapse:collapse;border-spacing:0}.captcha-container td,.captcha-container th{border:none}.captcha-container input.solution{padding:.375rem .75rem!important;outline:0;overflow:visible;font-family:inherit;font-size:16px;font-size:1rem;margin:0!important;width:222px!important;background:transparent;border-width:1px!important;border:none;border-bottom:1px solid #fff;color:#fff;text-align:center!important;line-height:normal}.captcha-container a.link{font-size:16px;font-size:1rem}.captcha-container .menu{text-align:center}.captcha-container img{padding-left:10px}.errorDetails{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:.5rem}.errorDetails .title{text-align:center;font-weight:100}@media only screen and (max-width:767px){.errorDetails h2{font-size:1.5rem}}.errorDetails .description{text-align:center;max-width:400px;margin:0 auto}.errorBoundary{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;padding:0 4%;overflow:auto}.errorBoundary,.errorBoundary .alternatives{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-direction:normal;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.errorBoundary .alternatives{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row;padding-top:100px}@media only screen and (max-width:767px){.errorBoundary .alternatives{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-ms-flex:1;flex:1}}.errorBoundary .alternatives .item{max-width:250px;padding:30px 20px}@media only screen and (max-width:767px){.errorBoundary .alternatives .item{max-width:none;padding:1rem}}.errorBoundary .alternatives .item .ui-button{margin:0;padding:0}.errorBoundary .alternatives .item .ui-header{font-weight:100}@media only screen and (max-width:767px){.errorBoundary .alternatives .item .ui-header{margin-top:1rem;font-size:1.5rem}}.errorBoundary .alternatives .item .ui-header__description{font-size:16px;font-size:1rem;margin-bottom:0}.bots.addBotView{text-align:center;padding:0 1rem}.bots.addBotView .body{max-width:815px}.bots.addBotView h1{margin:1rem;font-weight:100}.bots.addBotView .ui-button{min-width:192px;min-width:12rem;min-height:56px;min-height:3.5rem;width:100%;margin-bottom:1rem}@media only screen and (max-width:767px){.bots.addBotView .ui-button{min-width:10rem;min-height:3rem;margin:2rem 0}}.botDetails{text-align:justify;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;max-width:815px}.botDetails .capabilities{margin:2rem 0}.botDetails .capabilities ul{list-style:none;margin:0;padding:0 0 0 .1rem}.botDetails .capabilities li{text-indent:-1.6px;text-indent:-.1rem;line-height:16px;line-height:1rem}.botDetails .capabilities li span{display:inline;display:initial}.botDetails .capabilities li:before{content:\\\"- \\\"}.botDetails .capabilities h3{margin:0;font-size:16px;font-size:1rem}.botDetails .disclaimer{text-align:justify}.botDetails .privacy{text-align:center;font-size:16px;font-size:1rem;margin:2rem 0}.botDetails .privacy a{text-decoration:none}.botDetails .privacy a:hover{text-decoration:underline}.botInfoContainer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-bottom:1px solid #eff5f8;border-top:1px solid #eff5f8;margin:1.5rem 0;padding:1.5rem 0;width:100%}@media only screen and (max-width:767px){.botInfoContainer{margin:0;padding:0;border:0}}.botInfoContainer .certified{margin-bottom:.5rem;margin-right:.5rem}.botInfoContainer h2{margin:0;font-size:32px;font-size:2rem;font-weight:100}.botInfoContainer h3{margin:0;font-size:16px;font-size:1rem;font-weight:100}.botInfoContainer .ui-avatar{height:120px;height:7.5rem;width:120px;width:7.5rem}.botInfoContainer .avatarMask{height:100%;left:0;position:absolute;top:0;width:100%}.channels.channelView{padding:0 1rem}.channels.channelView .body{max-width:815px}.channels.channelView h1{margin:1rem;font-weight:100}.channels.channelView h2{margin:0;font-size:32px;font-size:2rem;font-weight:100}.channels.channelView h3{font-size:16px;font-size:1rem;font-weight:100}.channels.channelView .channelInfoContainer{width:100%;border-top:1px solid #eff5f8;border-bottom:1px solid #eff5f8}.channelInfoContainer .certified{margin-bottom:.5rem;margin-right:.5rem}.channelInfoContainer .followers{color:#6e6e6e;margin-top:0;margin-bottom:.5rem}.channels.channelView .ui-button:not(.fakeLink){min-width:192px;min-width:12rem;min-height:56px;min-height:3.5rem;width:100%;margin:1rem 0 0}.channels.channelView .ui-button.fakeLink{height:100%;font-size:100%;margin:0;padding:0;vertical-align:baseline;vertical-align:initial}.channels.channelView .title{margin-top:1rem;max-width:320px;max-width:20rem;text-align:center;font-size:24px;font-size:1.5rem;font-weight:100}.channels.channelView .body{margin:1rem 0;text-align:center}.custom-avatar .ui-label{color:#fff;background-color:#b1e5fa}.channelsAvatar{border-radius:6.6px!important}.certifiedChannelIcon{width:15px;height:15px}.do.doView{padding:0 1rem}.do.doView .ui-button:not(.fakeLink){min-width:192px;min-width:12rem;min-height:56px;min-height:3.5rem;width:100%;margin:1rem 0 0}.do.doView .ui-button.fakeLink{height:100%;font-size:100%;margin:0;padding:0;vertical-align:baseline;vertical-align:initial}.do.doView .title{margin-top:1rem;max-width:320px;max-width:20rem;text-align:center;font-size:24px;font-size:1.5rem;font-weight:100}.do.doView .body{margin:1rem 0;text-align:center}.profiles.profileView{padding:0 1rem}.profiles.profileView .ui-button:not(.fakeLink){min-width:192px;min-width:12rem;min-height:56px;min-height:3.5rem;width:100%;margin:1rem 0 0}.profiles.profileView .ui-button.fakeLink{height:100%;font-size:100%;margin:0;padding:0;vertical-align:baseline;vertical-align:initial}.profiles.profileView .title{margin-top:1rem;max-width:320px;max-width:20rem;text-align:center;font-size:24px;font-size:1.5rem;font-weight:100}.profiles.profileView .body{margin:1rem 0;text-align:center}body[data-platform=macIos],body[data-platform=macIos] button,body[data-platform=macIos] input,body[data-platform=macIos] select,body[data-platform=macIos] textarea{font-family:-apple-system,BlinkMacSystemFont,Tahoma,Helvetica Neue,Helvetica,Meiryo UI,Meiryo,Arial Unicode MS,sans-serif!important}body[data-platform=android],body[data-platform=android] button,body[data-platform=android] input,body[data-platform=android] select,body[data-platform=android] textarea{font-family:Roboto,Tahoma,Helvetica Neue,Helvetica,Meiryo UI,Meiryo,Arial Unicode MS,sans-serif!important}html[lang=bg] body,html[lang=bg] button,html[lang=bg] input,html[lang=bg] select,html[lang=bg] textarea,html[lang=ru] body,html[lang=ru] button,html[lang=ru] input,html[lang=ru] select,html[lang=ru] textarea,html[lang=uk] body,html[lang=uk] button,html[lang=uk] input,html[lang=uk] select,html[lang=uk] textarea{font-family:Segoe UI,Segoe WP,Segoe UI Cyrillic Web,Tahoma,Helvetica Neue,Helvetica,Meiryo UI,Meiryo,Arial Unicode MS,sans-serif}html[lang=el] body,html[lang=el] button,html[lang=el] input,html[lang=el] select,html[lang=el] textarea{font-family:Segoe UI,Segoe WP,Segoe UI Greek Web,Tahoma,Helvetica Neue,Helvetica,Meiryo UI,Meiryo,Arial Unicode MS,sans-serif}html[lang=he] body,html[lang=he] button,html[lang=he] input,html[lang=he] select textarea{font-family:Segoe UI,Segoe WP,Segoe UI Hebrew Web,Tahoma,Helvetica Neue,Helvetica,Meiryo UI,Meiryo,Arial Unicode MS,sans-serif}html[lang=hi] body,html[lang=hi] button,html[lang=hi] input,html[lang=hi] select,html[lang=hi] textarea{font-family:Local Hindi,Segoe UI,Segoe WP,Tahoma,Helvetica Neue,Helvetica,Meiryo UI,Meiryo,Arial Unicode MS,sans-serif}html[lang=ja] body,html[lang=ja] button,html[lang=ja] input,html[lang=ja] select,html[lang=ja] textarea{font-family:Meiryo,Segoe UI,Segoe WP,Tahoma,Verdana,Arial,sans-serif}html[lang=ko] body,html[lang=ko] button,html[lang=ko] input,html[lang=ko] select,html[lang=ko] textarea{font-family:Malgun Gothic,Gulim,Segoe UI,Segoe WP,Tahoma,Verdana,Arial,sans-serif}html[lang=zh-Hant] body,html[lang=zh-Hant] button,html[lang=zh-Hant] input,html[lang=zh-Hant] select,html[lang=zh-Hant] textarea{font-family:微軟正黑體Microsoft JhengHei,微軟正黑體 Microsoft JhengHei,Microsoft JhengHei,微軟正黑體,Segoe UI,Segoe WP,Tahoma,Verdana,Arial,sans-serif}html[lang=zh_CN] body,html[lang=zh_CN] button,html[lang=zh_CN] input,html[lang=zh_CN] select,html[lang=zh_CN] textarea{font-family:Microsoft yahei,微软雅黑,Segoe UI,Segoe WP,Tahoma,Verdana,Arial,sans-serif}b,strong{font-weight:600}.fontSizeH1{font-size:4em;margin-bottom:.48387em}.fontSizeH1,.fontSizeH2{font-weight:100;letter-spacing:normal;line-height:1.16129em}.fontSizeH2{font-size:60px;margin:0;font-size:2.5em}@media only screen and (max-width:600px){.fontSizeH2{font-size:40px}}.fontSizeH3{font-size:1.7em;font-weight:300;letter-spacing:.013em;line-height:1.4em;margin-bottom:.48387em;margin-top:0}@media only screen and (max-width:600px){.fontSizeH3{margin:0 auto;font-size:1.2em}}.fontSizeH4{font-size:1em;font-weight:400;letter-spacing:normal;line-height:1.33333em;margin-bottom:.83333em}.button{background-color:#008cc0;border:1px solid transparent;border-radius:50px;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-size:18px;line-height:24px;margin:0;max-width:440px;min-width:150px;padding:5px 0 8px;text-align:center;text-decoration:none;vertical-align:middle;width:100%;word-wrap:break-word}@media only screen and (min-width:767px){.button{font-size:20px;padding:7px 0 10px;width:auto}}.button:focus{outline:1px dotted #333534}.button:focus,.button:hover{text-decoration:none;background-color:#0c7daf}.button--disabled{background-color:#a3d0ed!important;cursor:not-allowed}.buttonBlue,.buttonSimple,.buttonWhite,.newButton,.portalContent .closeButton{box-sizing:border-box;border:1px solid transparent;border-radius:100px;cursor:pointer;display:inline-block;font-size:18px;font-weight:400;margin:0 7px 10px;position:relative;text-align:center;text-decoration:none;word-wrap:break-word;padding:19px 30px;min-width:260px;-webkit-transition:background-color .1s ease-in-out;transition:background-color .1s ease-in-out}.newButton .button__text{padding:0}@media only screen and (max-width:600px){.buttonBlue,.buttonSimple,.buttonWhite,.newButton,.portalContent .closeButton{padding:9px 30px;min-width:190px;font-size:14px}}.buttonBlue{color:#fff;background-color:#0078ca}.buttonBlue:active,.buttonBlue:hover{background-color:#0b64a4}.buttonWhite{color:#2b2c33;border:1px solid #2b2c33}.buttonWhite:active,.buttonWhite:hover{background-color:#2b2c33;color:#fff}.buttonSimple,.portalContent .closeButton{color:#0078ca;border:none}.buttonSimple:active,.buttonSimple:hover{color:#0b64a4}.portalContainer{position:absolute;top:0;bottom:0;right:0;left:0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:1000;background-color:rgba(0,0,0,.5)}.portalContainer,.portalContent{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.portalContent{background-color:#fff;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:15px;box-shadow:0 5px 10px rgba(0,0,0,.3);border:1px solid rgba(0,0,0,.3);border-radius:5px;max-width:450px}.portalContent .logo{width:96px;width:6rem;height:96px;height:6rem;-ms-flex-negative:0;flex-shrink:0}.portalContent .title{font-weight:400;text-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;max-width:100%;margin:1rem 0}.portalContent .closeButton{margin-top:20px;color:#000;background-color:#e5e4e8}.portalContent .closeButton:active,.portalContent .closeButton:hover{background-color:#cecdd0}img.logo{width:96px;width:6rem;height:96px;height:6rem;-ms-flex-negative:0;flex-shrink:0;margin-top:2rem}.hidden{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.rtl .hidden{left:auto;right:-1000px}.scrollable-y{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow-y:auto;padding:1rem;-webkit-overflow-scrolling:touch;width:100%}.focused{outline:1px solid;outline:auto}.ariaLive{width:0!important;height:0!important;overflow:hidden!important}\", \"\"]);\n\n// exports\n","import config from 'config';\r\nimport * as SyncTasks from 'synctasks';\r\nimport { UserProfile } from '../models/ProfileServiceModel';\r\nimport { ApiCallOptions, BaseRestClient } from './BaseRestClient';\r\n\r\nclass ProfileRestClient extends BaseRestClient {\r\n getUserProfileInfo(skypetoken: string): SyncTasks.Promise {\r\n const uri = '/v1/users/self/profile';\r\n const options: ApiCallOptions = {\r\n headers: {\r\n 'X-Skypetoken': skypetoken,\r\n },\r\n };\r\n\r\n return this.performApiGet(uri, options);\r\n }\r\n}\r\n\r\nexport default new ProfileRestClient(config.urls.api.profile);\r\n"],"sourceRoot":""}