1 line
No EOL
834 KiB
Text
1 line
No EOL
834 KiB
Text
{"version":3,"sources":["webpack:///index.js","webpack:///webpack/bootstrap ab248b8a96a96b3ce431","webpack:///external \"react\"","webpack:///external \"react-redux\"","webpack:///external \"winston\"","webpack:///./config/siteConfig.js","webpack:///external \"react-router-dom\"","webpack:///./client/containers/NavBar/index.js","webpack:///./client/actions/publish.js","webpack:///./client/components/SEO/index.js","webpack:///./client/utils/request.js","webpack:///./server/models/index.js","webpack:///./client/components/ProgressBar/index.jsx","webpack:///./client/actions/show.js","webpack:///./client/pages/ErrorPage/index.jsx","webpack:///./client/components/GAListener/index.jsx","webpack:///external \"prop-types\"","webpack:///./client/containers/ChannelLoginForm/index.js","webpack:///./client/containers/ChannelCreateForm/index.js","webpack:///./client/containers/AssetDisplay/index.js","webpack:///./client/containers/Dropzone/index.js","webpack:///./client/constants/show_action_types.js","webpack:///./client/pages/AboutPage/index.jsx","webpack:///./client/components/Logo/index.jsx","webpack:///./client/components/NavBarChannelOptionsDropdown/index.jsx","webpack:///./client/pages/LoginPage/index.js","webpack:///./client/components/ActiveStatusBar/index.jsx","webpack:///./client/components/InactiveStatusBar/index.jsx","webpack:///./client/pages/ShowPage/index.js","webpack:///./client/containers/ShowAssetLite/index.js","webpack:///./client/selectors/show.js","webpack:///./client/containers/ShowAssetDetails/index.js","webpack:///./client/containers/AssetTitle/index.js","webpack:///./client/containers/AssetInfo/index.js","webpack:///./client/containers/ShowChannel/index.js","webpack:///./client/containers/ChannelClaimsDisplay/index.js","webpack:///./client/components/AssetPreview/index.js","webpack:///./client/containers/FourOhFourPage/index.jsx","webpack:///./client/components/ExpandingTextArea/index.jsx","webpack:///./client/components/PublishPreview/index.jsx","webpack:///./client/components/PublishUrlMiddleDisplay/index.jsx","webpack:///./client/containers/ChannelSelect/index.js","webpack:///./client/containers/PublishDetails/index.js","webpack:///./client/containers/PublishTitleInput/index.js","webpack:///./client/containers/PublishUrlInput/index.js","webpack:///./client/containers/PublishThumbnailInput/index.js","webpack:///./client/containers/PublishMetadataInputs/index.js","webpack:///./client/containers/PublishDisabledMessage/index.js","webpack:///./client/containers/PublishStatus/index.js","webpack:///./client/containers/PublishTool/index.js","webpack:///external \"react-helmet\"","webpack:///external \"redux-saga/effects\"","webpack:///./client/components/index.js","webpack:///external \"path\"","webpack:///./client/containers/index.js","webpack:///./client/pages/index.js","webpack:///./client/pages/HomePage/index.jsx","webpack:///./server/helpers/lbryApi.js","webpack:///./server/helpers/googleAnalytics.js","webpack:///external \"redux\"","webpack:///./client/utils/dynamicImport.js","webpack:///./client/utils/canonicalLink.js","webpack:///./client/utils/file.js","webpack:///./client/utils/lbryUri.js","webpack:///./client/utils/metaTags.js","webpack:///./client/utils/pageTitle.js","webpack:///./client/actions/channel.js","webpack:///./client/containers/NavBar/view.jsx","webpack:///./client/components/SEO/view.jsx","webpack:///./client/pages/LoginPage/view.jsx","webpack:///./client/containers/ChannelLoginForm/view.jsx","webpack:///./client/containers/ChannelCreateForm/view.jsx","webpack:///./client/pages/ShowPage/view.jsx","webpack:///./client/containers/ShowAssetLite/view.jsx","webpack:///./client/containers/AssetDisplay/view.jsx","webpack:///./client/containers/ShowAssetDetails/view.jsx","webpack:///./client/containers/AssetTitle/view.jsx","webpack:///./client/containers/AssetInfo/view.jsx","webpack:///./client/containers/ShowChannel/view.jsx","webpack:///./client/containers/ChannelClaimsDisplay/view.jsx","webpack:///./client/components/AssetPreview/view.jsx","webpack:///./client/containers/FourOhFourPage/view.jsx","webpack:///./build/getFolderNames.js","webpack:///./client/containers/ChannelSelect/view.jsx","webpack:///./client/containers/Dropzone/view.jsx","webpack:///./client/containers/PublishDetails/view.jsx","webpack:///./client/containers/PublishTitleInput/view.jsx","webpack:///./client/containers/PublishUrlInput/view.jsx","webpack:///./client/containers/PublishThumbnailInput/view.jsx","webpack:///./client/containers/PublishMetadataInputs/view.jsx","webpack:///./client/containers/PublishDisabledMessage/view.jsx","webpack:///./client/containers/PublishStatus/view.jsx","webpack:///./client/containers/PublishTool/view.jsx","webpack:///external \"passport\"","webpack:///./config/mysqlConfig.js","webpack:///./config/slackConfig.js","webpack:///external \"passport-local\"","webpack:///external \"sequelize\"","webpack:///./server/helpers/sequelizeHelpers.js","webpack:///./server/helpers/publishHelpers.js","webpack:///external \"fs\"","webpack:///./server/helpers/errorHandlers.js","webpack:///./server/controllers/serveController.js","webpack:///./server/helpers/handlePageRender.jsx","webpack:///external \"react-dom/server\"","webpack:///./client/reducers/index.js","webpack:///./client/constants/publish_action_types.js","webpack:///./client/constants/publish_channel_select_states.js","webpack:///./client/constants/channel_action_types.js","webpack:///./client/constants/asset_display_states.js","webpack:///./client/app.js","webpack:///./client/utils ^.*$","webpack:///./client/utils/publish.js","webpack:///./client/utils/validate.js","webpack:///./client/constants/show_request_types.js","webpack:///./server/helpers/renderFullPage.js","webpack:///./client/selectors/site.js","webpack:///external \"babel-polyfill\"","webpack:///external \"whatwg-fetch\"","webpack:///./speech.js","webpack:///./server/server.js","webpack:///external \"express\"","webpack:///external \"body-parser\"","webpack:///external \"express-handlebars\"","webpack:///external \"handlebars\"","webpack:///external \"helmet\"","webpack:///./server/helpers/authHelpers.js","webpack:///external \"cookie-session\"","webpack:///external \"http\"","webpack:///./server/passport/local-signup.js","webpack:///external \"axios\"","webpack:///./config/lbryConfig.js","webpack:///external \"universal-analytics\"","webpack:///./server/models/certificate.js","webpack:///./server/models/channel.js","webpack:///./server/models/claim.js","webpack:///./server/models/file.js","webpack:///./server/models/request.js","webpack:///./server/models/user.js","webpack:///external \"bcrypt\"","webpack:///./server/passport/local-login.js","webpack:///./server/routes/auth-routes.js","webpack:///./server/routes/api-routes.js","webpack:///external \"connect-multiparty\"","webpack:///./server/controllers/publishController.js","webpack:///./server/auth/authentication.js","webpack:///./server/helpers/channelPagination.js","webpack:///./server/routes/page-routes.js","webpack:///./client/reducers/publish.js","webpack:///./client/reducers/channel.js","webpack:///./client/reducers/show.js","webpack:///./client/reducers/site.js","webpack:///external \"react-ga\"","webpack:///external \"cross-fetch/polyfill\"","webpack:///./server/routes/asset-routes.js","webpack:///./server/helpers/serveHelpers.js","webpack:///./server/helpers/lbryUri.js","webpack:///./server/helpers/handleShowRender.jsx","webpack:///external \"redux-saga\"","webpack:///./client/sagas/show_uri.js","webpack:///./client/sagas/show_asset.js","webpack:///./client/api/assetApi.js","webpack:///./client/sagas/show_channel.js","webpack:///./client/api/channelApi.js","webpack:///./server/routes/fallback-routes.js","webpack:///./server/helpers/configureLogger.js","webpack:///./config/loggerConfig.js","webpack:///./server/helpers/configureSlack.js","webpack:///external \"winston-slack-webhook\"","webpack:///./client/components ^\\.\\/.*$","webpack:///./client/containers ^\\.\\/.*$","webpack:///./client/constants/publish_claim_states.js","webpack:///./client/pages ^\\.\\/.*$"],"names":["module","exports","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","require","SiteConfig","_this","this","analytics","googleId","assetDefaults","description","thumbnail","title","auth","sessionKey","customComponents","components","containers","pages","details","host","port","twitter","publishing","additionalClaimAddresses","disabled","disabledMessage","primaryClaimAddress","thumbnailChannel","thumbnailChannelId","uploadDirectory","configure","config","console","log","value","_reactRedux","_channel","_publish","_view","_view2","obj","default","mapStateToProps","_ref","channel","site","channelName","loggedInChannel","channelShortId","shortId","channelLongId","longId","siteDescription","mapDispatchToProps","dispatch","onChannelLogin","updateLoggedInChannel","updateSelectedChannel","onChannelLogout","connect","selectFile","file","type","actions","FILE_SELECTED","data","clearFile","FILE_CLEAR","updateMetadata","METADATA_UPDATE","updateClaim","CLAIM_UPDATE","setPublishInChannel","SET_PUBLISH_IN_CHANNEL","updatePublishStatus","status","message","PUBLISH_STATUS_UPDATE","updateError","ERROR_UPDATE","SELECTED_CHANNEL_UPDATE","toggleMetadataInputs","showMetadataInputs","TOGGLE_METADATA_INPUTS","onNewThumbnail","THUMBNAIL_NEW","startPublish","history","PUBLISH_START","_publish_action_types","newObj","key","defaultDescription","defaultThumbnail","siteHost","siteTitle","siteTwitter","parseJSON","response","json","checkStatus","jsonResponse","error","Error","request","url","options","fetch","then","Promise","all","_ref2","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","undefined","_s","_i","Symbol","iterator","next","done","push","length","err","Array","isArray","TypeError","Sequelize","logger","_require","database","username","password","db","sequelize","dialect","dialectOptions","decimalNumbers","logging","pool","max","min","idle","acquire","authenticate","info","catch","Certificate","Channel","Claim","File","Request","User","import","keys","forEach","modelName","associate","upsert","Model","values","condition","tableName","findOne","where","debug","update","create","_interopRequireDefault","_classCallCheck","instance","Constructor","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","constructor","writable","setPrototypeOf","__proto__","_createClass","defineProperties","target","props","descriptor","protoProps","staticProps","_react","_react2","_propTypes","_propTypes2","_ActiveStatusBar","_ActiveStatusBar2","_InactiveStatusBar","_InactiveStatusBar2","ProgressBar","_React$Component","getPrototypeOf","state","bars","index","incrementer","createBars","bind","startProgressBar","updateProgressBar","stopProgressBar","size","isActive","setState","updateInterval","setInterval","clearInterval","createElement","map","bar","Component","propTypes","number","isRequired","onHandleShowPageUri","params","HANDLE_SHOW_URI","onRequestError","REQUEST_ERROR","onNewChannelRequest","channelId","requestType","requestId","CHANNEL_REQUEST_NEW","onNewAssetRequest","id","extension","ASSET_REQUEST_NEW","modifier","onRequestUpdate","REQUEST_UPDATE","addRequestToRequestList","REQUEST_LIST_ADD","addAssetToAssetList","claimId","claimData","ASSET_ADD","addNewChannelToChannelList","claimsData","CHANNEL_ADD","onUpdateChannelClaims","channelKey","page","CHANNEL_CLAIMS_UPDATE_ASYNC","updateChannelClaims","channelListId","CHANNEL_CLAIMS_UPDATE_SUCCESS","fileRequested","FILE_REQUESTED","updateFileAvailability","FILE_AVAILABILITY_UPDATE","updateDisplayAssetError","DISPLAY_ASSET_ERROR","_show_action_types","_show_request_types","_NavBar","_NavBar2","ErrorPage","apply","arguments","className","string","_reactGa","_reactGa2","_reactRouterDom","initialize","GAListener","sendPageView","location","listen","set","pathname","pageview","children","withRouter","_show","_show2","show","displayAsset","asset","selectAsset","onFileRequest","publish","fileError","setFileError","_SEO","_SEO2","AboutPage","pageTitle","pageUri","href","Logo","version","x","y","height","viewBox","enableBackground","Link","to","transform","fontSize","fontFamily","fill","stroke","strokeWidth","strokeLinecap","NavBarChannelDropdown","handleSelection","defaultSelection","VIEW","LOGOUT","onChange","loggedInChannelName","ActiveStatusBar","InactiveStatusBar","requestList","assetList","assetKey","selectShowState","previousRequest","channelList","defaults","_ref$site","_objectWithoutProperties","indexOf","_extends","assign","source","ExpandingTextarea","_Component","_handleChange","adjustTextarea","event","_ref$target","el","style","scrollHeight","_this2","rest","ref","func","PublishPreview","imgSource","setPreviewImageSource","newProps","setPreviewImageSourceFromFile","previewReader","FileReader","readAsDataURL","onloadend","result","src","dimPreview","alt","bool","UrlMiddle","publishInChannel","selectedChannel","loggedInChannelShortId","channelError","onPublishInChannelChange","onChannelSelect","metadata","onMetadataChange","fileName","claim","urlError","onClaimChange","onUrlError","license","nsfw","onToggleMetadataInputs","Path","getSubDirectoryNames","thisFolder","resolve","__dirname","_PublishTool","_PublishTool2","HomePage","axios","_require$api","api","apiHost","apiPort","lbryApiUri","_require2","chooseGaLbrynetPublishLabel","sendGATimingEvent","handleLbrynetResponse","reject","JSON","stringify","publishClaim","publishParams","gaStartTime","Date","now","post","method","getClaim","uri","timeout","getClaimList","claimName","resolveUri","getDownloadDirectory","_ref3","download_directory","createChannel","channel_name","amount","createServeEventParams","headers","ip","originalUrl","eventCategory","eventAction","eventLabel","ipOverride","userAgentOverride","createPublishTimingEventParams","category","variable","label","startTime","endTime","userTimingCategory","userTimingVariableName","userTimingTime","userTimingLabel","sendGoogleAnalyticsEvent","visitorId","replace","ua","strictCidFormat","https","sendGoogleAnalyticsTiming","timing","sendGAServeEvent","channel_id","getDeepestChildValue","parent","childrenKeys","childKey","shift","child","_typeof","dynamicImport","filePath","folders","split","filter","folderName","component","createBasicCanonicalLink","createAssetCanonicalLink","certificateId","_asset$claimData","createChannelCanonicalLink","createCanonicalLink","validateFile","test","REGEXP_INVALID_CLAIM","REGEXP_INVALID_CHANNEL","REGEXP_ADDRESS","CHANNEL_CHAR","parseIdentifier","identifier","componentsRegex","RegExp","_componentsRegex$exec","exec","match","_componentsRegex$exec2","modifierSeperator","isChannel","startsWith","nameBadChars","join","channelClaimId","parseClaim","_componentsRegex$exec3","_componentsRegex$exec4","extensionSeperator","determineOgThumbnailContentType","substring","lastIndexOf","createBasicMetaTags","content","createChannelMetaTags","createAssetMetaTags","contentType","embedUrl","showUrl","fileExt","ogTitle","ogDescription","ogThumbnailContentType","ogThumbnail","metaTags","createMetaTags","createPageTitle","CHANNEL_UPDATE","_channel_action_types","_Logo","_Logo2","_NavBarChannelOptionsDropdown","_NavBarChannelOptionsDropdown2","_request","_request2","NavBar","checkForLoggedInUser","logoutUser","credentials","shortChannelId","_this3","selectedOptions","NavLink","activeClassName","exact","_reactHelmet","_reactHelmet2","_pageTitle","_metaTags","_canonicalLink","SEO","_props","_props2","canonicalLink","meta","link","rel","_ChannelLoginForm","_ChannelLoginForm2","_ChannelCreateForm","_ChannelCreateForm2","LoginPage","_defineProperty","ChannelLoginForm","handleInput","loginToChannel","preventDefault","body","Headers","Content-Type","success","htmlFor","placeholder","channelPassword","onClick","_ProgressBar","_ProgressBar2","ChannelCreateForm","handleChannelInput","input","cleanseChannelInput","updateIsChannelAvailable","channelWithAtSymbol","checkIsPasswordProvided","checkIsChannelAvailable","makePublishChannelRequest","_ErrorPage","_ErrorPage2","_ShowAssetLite","_ShowAssetLite2","_ShowAssetDetails","_ShowAssetDetails2","_ShowChannel","_ShowChannel2","ShowPage","nextProps","CHANNEL","ASSET_LITE","ASSET_DETAILS","_AssetDisplay","_AssetDisplay2","ShowLite","_asset_display_states","AssetDisplay","_props$asset$claimDat","_props$asset$claimDat2","controls","poster","_AssetTitle","_AssetTitle2","_AssetInfo","_AssetInfo2","ShowAssetDetails","AssetTitle","AssetInfo","copyToClipboard","elementToCopy","dataset","elementtocopy","document","getElementById","select","execCommand","_props$asset","hidden","readOnly","spellCheck","data-elementtocopy","download","_ChannelClaimsDisplay","_ChannelClaimsDisplay2","ShowChannel","_AssetPreview","_AssetPreview2","ChannelClaimsDisplay","showNextResultsPage","showPreviousResultsPage","currentPage","previousPage","parseInt","showNewPage","nextPage","_props$channel","_props$channel$claims","claims","totalPages","AssetPreview","_ref$claimData","directSourceLink","showUrlLink","FourOhForPage","lstatSync","readdirSync","root","fullPath","isDirectory","_publish_channel_select_states","states","ChannelSelect","toggleAnonymousPublish","selectedOption","checked","LOGIN","CREATE","_file","_PublishPreview","_PublishPreview2","Dropzone","dragOver","mouseOver","handleDrop","handleDragOver","handleDragEnd","handleDragEnter","handleDragLeave","handleMouseEnter","handleMouseLeave","handleClick","handleFileInput","chooseFile","dt","dataTransfer","items","kind","droppedFile","getAsFile","remove","clearData","click","fileList","files","accept","encType","onDrop","onDragOver","onDragEnd","onDragEnter","onDragLeave","onMouseEnter","onMouseLeave","_Dropzone","_Dropzone2","_PublishTitleInput","_PublishTitleInput2","_PublishUrlInput","_PublishUrlInput2","_PublishThumbnailInput","_PublishThumbnailInput2","_PublishMetadataInputs","_PublishMetadataInputs2","_ChannelSelect","_ChannelSelect2","PublishDetails","onPublishSubmit","PublishTitleInput","e","_PublishUrlMiddleDisplay","_PublishUrlMiddleDisplay2","PublishUrlInput","setClaimName","validateClaim","cleanseInput","fileNameWithoutEnding","cleanClaimName","dataURItoBlob","dataURI","byteString","atob","mimeString","ia","Uint8Array","charCodeAt","Blob","PublishThumbnailInput","videoSource","sliderMinRange","sliderMaxRange","sliderValue","handleVideoLoadedData","handleSliderChange","createThumbnail","setVideoSource","dataUri","blob","URL","createObjectURL","duration","totalMinutes","Math","floor","totalSeconds","currentTime","video","canvas","width","videoWidth","videoHeight","getContext","drawImage","dataUrl","toDataURL","snapshot","_state","preload","muted","display","playsInline","onLoadedData","onSeeked","_ExpandingTextArea","_ExpandingTextArea2","PublishMetadataInputs","toggleShowInputs","handleSelect","rows","maxLength","maxHeight","PublishDisabledMessage","_publish_claim_states","publishStates","PublishStatus","LOAD_START","LOADING","PUBLISHING","SUCCESS","FAILED","_PublishDetails","_PublishDetails2","_PublishStatus","_PublishStatus2","_PublishDisabledMessage","_PublishDisabledMessage2","PublishTool","MysqlConfig","SlackConfig","slackWebHook","slackErrorChannel","slackInfoChannel","returnShortId","claimsArray","claimIndex","shortIdLength","findIndex","element","possibleMatches","slice","fs","parsePublishApiRequestBody","parsePublishApiRequestFiles","path","validateFileTypeAndSize","fileType","thumbnailFileName","thumbnailFilePath","thumbnailFileType","createBasicPublishParams","trim","file_path","bid","author","language","claim_address","createThumbnailPublishParams","deleteTemporaryFile","unlink","addGetResultsToFileData","fileInfo","getResult","file_name","download_path","createFileData","outpoint","address","handleErrorResponse","res","useObjectPropertiesIfNoKeys","_module$exports$retur","returnErrorMessageAndStatus","_module$exports$retur2","createErrorResponsePayload","code","newErrorObject","getOwnPropertyNames","returnPaginatedChannelClaims","getClaimId","getClaimIdByChannel","getClaimIdByClaim","getLongClaimId","longClaimId","getLongChannelId","longChannelId","getClaimIdByLongChannelId","getChannelData","longChannelClaimId","getShortChannelIdFromLongChannelId","_ref4","shortChannelClaimId","getChannelClaims","getAllChannelClaims","_ref5","_ref6","channelClaimsArray","paginatedChannelViewData","getLocalFileRecord","dataValues","_server","_redux","_reducers","_reducers2","_GAListener","_GAListener2","_app","_app2","_renderFullPage","_renderFullPage2","req","context","store","createStore","html","renderToString","Provider","StaticRouter","helmet","renderStatic","redirect","preloadedState","getState","send","_publish2","_channel2","_site","_site2","combineReducers","LOCAL_CHECK","UNAVAILABLE","ERROR","AVAILABLE","_dynamicImport","_AboutPage","_AboutPage2","_LoginPage","_LoginPage2","_ShowPage","_ShowPage2","_FourOhFourPage","_FourOhFourPage2","App","Switch","Route","webpackContext","webpackContextResolve","./canonicalLink","./canonicalLink.js","./dynamicImport","./dynamicImport.js","./file","./file.js","./lbryUri","./lbryUri.js","./metaTags","./metaTags.js","./pageTitle","./pageTitle.js","./publish","./publish.js","./request","./request.js","./validate","./validate.js","createPublishMetadata","createPublishFormData","fd","FormData","append","createThumbnailUrl","validateChannelSelection","validatePublishParams","toString","selectSiteState","selectSiteHost","Server","Components","Containers","Pages","configureMysql","mysqlConfig","configureSite","siteConfig","PORT","configureSlack","slackConfig","createApp","app","express","enable","use","static","bodyParser","urlencoded","extended","verbose","passport","serializeUser","serializeSpeechUser","deserializeUser","deserializeSpeechUser","localSignupStrategy","localLoginStrategy","cookieSession","maxAge","session","hbs","expressHandlebars","defaultLayout","handlebars","Handlebars","engine","server","http","start","sync","user","PassportLocalStrategy","Strategy","lbryApi","usernameField","passwordField","userInfo","tx","userData","userName","channelData","claim_id","certificateData","newUser","newChannel","newCertificate","setChannel","setUser","lbryConfig","STRING","BOOLEAN","INTEGER","TEXT","DECIMAL","define","claimSequence","decodedClaim","depth","effectiveAmount","hasSignature","hex","nout","txid","validAtHeight","valueVersion","claimType","certificateVersion","keyType","publicKey","freezeTableName","belongsTo","foreignKey","allowNull","findAll","order","getLongChannelIdFromShortChannelId","$like","getLongChannelIdFromChannelName","validateLongChannelId","_this4","hasOne","determineFileExtensionFromContentType","determineThumbnail","storedThumbnail","prepareClaimData","licenseUrl","preview","metadataVersion","sourceType","sourceVersion","streamVersion","getShortClaimIdFromLongClaimId","raw","getLongClaimIdFromShortClaimId","getTopFreeClaimIdByClaimName","_this5","validateLongClaimId","_this6","resolveClaim","_this7","claimArray","defaultValue","trendingEligible","hasMany","getRecentClaims","limit","action","ipAddress","bcrypt","comparePassword","compare","changePassword","newPassword","genSalt","saltError","salt","hash","hashError","hook","returnUserAndChannelInfo","userInstance","getChannel","isMatch","logIn","logout","multipart","multipartMiddleware","uploadDir","claimNameIsAvailable","checkChannelAvailability","_require3","_require4","errorHandlers","_require5","_require6","authenticateUser","_require7","availableName","claimsList","resolveResult","fileData","_ref7","_ref8","_ref9","_ref10","_ref10$","completed","_ref11","_ref12","resolvedUri","_ref13","_parsePublishApiReque","_parsePublishApiReque2","_ref14","_ref15","_ref15$","thumbnailPublishParams","lbryTx","_ref16","_ref17","_ref18","claimInfo","_ref19","publishHelpers","_require$publishing","Op","publishResults","fileRecord","claimRecord","upsertCriteria","setClaim","setFile","claimAddresses","attributes","or","authenticateChannelCredentials","userPassword","channelFindParams","determineTotalPages","paginationPage","getPageFromQuery","extractPageFromClaims","determinePreviousPage","determineNextPage","totalResults","determineTotalClaims","pageNumber","claimStartIndex","claimEndIndex","totalClaims","fullPages","handlePageRender","render","layout","initialState","publishSubmit","googleAnalyticsId","_siteConfig$assetDefa","_siteConfig$details","determineResponseType","flipClaimNameAndIdForBackwardsCompatibility","logRequestData","getClaimIdAndServeAsset","lbryUri","handleShowRender","hasFileExtension","parseModifier","responseType","_lbryUri$parseIdentif","_flipClaimNameAndIdFo","_flipClaimNameAndIdFo2","clientAcceptsHtml","requestIsFromBrowser","clientWantsAsset","range","imageIsWanted","videoIsWanted","isValidClaimId","isValidShortId","isValidShortIdOrClaimId","serveAssetToClient","NO_FILE","sendFileOptions","X-Content-Type-Options","sendFile","fullClaimId","tempName","proto","_componentsRegex$exec5","_componentsRegex$exec6","_index","_index2","_index3","_index4","_reduxSaga","_reduxSaga2","_effects","_show_uri","returnSagaWithParams","saga","regeneratorRuntime","mark","_callee","wrap","_context","prev","stop","sagaMiddleware","middleware","applyMiddleware","run","parseAndUpdateIdentifierAndClaim","_lbryUri$parseClaim","_lbryUri2","t0","put","abrupt","sent","_show_asset","newAssetRequest","_marked","parseAndUpdateClaimOnly","_lbryUri$parseIdentif2","_lbryUri$parseClaim2","_context2","_show_channel","newChannelRequest","t1","_marked2","handleShowPageUri","_action$data","_context3","_marked3","watchHandleShowPageUri","_context4","takeLatest","_marked4","_lbryUri","_assetApi","getShortId","getClaimData","t2","watchNewAssetRequest","_ref$data","_channelApi","watchNewChannelRequest","getNewClaimsAndUpdateChannel","_action$data2","watchUpdateChannelClaims","logLevel","winston","transports","Console","level","timestamp","colorize","prettyPrint","handleExceptions","humanReadableUnhandledException","warn","silly","loggerConfig","winstonSlackWebHook","SlackWebHook","add","webhookUrl","iconEmoji","./","./ActiveStatusBar","./ActiveStatusBar/","./ActiveStatusBar/index","./ActiveStatusBar/index.jsx","./AssetPreview","./AssetPreview/","./AssetPreview/index","./AssetPreview/index.js","./AssetPreview/view","./AssetPreview/view.jsx","./ExpandingTextArea","./ExpandingTextArea/","./ExpandingTextArea/index","./ExpandingTextArea/index.jsx","./GAListener","./GAListener/","./GAListener/index","./GAListener/index.jsx","./InactiveStatusBar","./InactiveStatusBar/","./InactiveStatusBar/index","./InactiveStatusBar/index.jsx","./Logo","./Logo/","./Logo/index","./Logo/index.jsx","./NavBarChannelOptionsDropdown","./NavBarChannelOptionsDropdown/","./NavBarChannelOptionsDropdown/index","./NavBarChannelOptionsDropdown/index.jsx","./ProgressBar","./ProgressBar/","./ProgressBar/index","./ProgressBar/index.jsx","./PublishPreview","./PublishPreview/","./PublishPreview/index","./PublishPreview/index.jsx","./PublishUrlMiddleDisplay","./PublishUrlMiddleDisplay/","./PublishUrlMiddleDisplay/index","./PublishUrlMiddleDisplay/index.jsx","./SEO","./SEO/","./SEO/index","./SEO/index.js","./SEO/view","./SEO/view.jsx","./index","./index.js","./AssetDisplay","./AssetDisplay/","./AssetDisplay/index","./AssetDisplay/index.js","./AssetDisplay/view","./AssetDisplay/view.jsx","./AssetInfo","./AssetInfo/","./AssetInfo/index","./AssetInfo/index.js","./AssetInfo/view","./AssetInfo/view.jsx","./AssetTitle","./AssetTitle/","./AssetTitle/index","./AssetTitle/index.js","./AssetTitle/view","./AssetTitle/view.jsx","./ChannelClaimsDisplay","./ChannelClaimsDisplay/","./ChannelClaimsDisplay/index","./ChannelClaimsDisplay/index.js","./ChannelClaimsDisplay/view","./ChannelClaimsDisplay/view.jsx","./ChannelCreateForm","./ChannelCreateForm/","./ChannelCreateForm/index","./ChannelCreateForm/index.js","./ChannelCreateForm/view","./ChannelCreateForm/view.jsx","./ChannelLoginForm","./ChannelLoginForm/","./ChannelLoginForm/index","./ChannelLoginForm/index.js","./ChannelLoginForm/view","./ChannelLoginForm/view.jsx","./ChannelSelect","./ChannelSelect/","./ChannelSelect/index","./ChannelSelect/index.js","./ChannelSelect/view","./ChannelSelect/view.jsx","./Dropzone","./Dropzone/","./Dropzone/index","./Dropzone/index.js","./Dropzone/view","./Dropzone/view.jsx","./FourOhFourPage","./FourOhFourPage/","./FourOhFourPage/index","./FourOhFourPage/index.jsx","./FourOhFourPage/view","./FourOhFourPage/view.jsx","./NavBar","./NavBar/","./NavBar/index","./NavBar/index.js","./NavBar/view","./NavBar/view.jsx","./PublishDetails","./PublishDetails/","./PublishDetails/index","./PublishDetails/index.js","./PublishDetails/view","./PublishDetails/view.jsx","./PublishDisabledMessage","./PublishDisabledMessage/","./PublishDisabledMessage/index","./PublishDisabledMessage/index.js","./PublishDisabledMessage/view","./PublishDisabledMessage/view.jsx","./PublishMetadataInputs","./PublishMetadataInputs/","./PublishMetadataInputs/index","./PublishMetadataInputs/index.js","./PublishMetadataInputs/view","./PublishMetadataInputs/view.jsx","./PublishStatus","./PublishStatus/","./PublishStatus/index","./PublishStatus/index.js","./PublishStatus/view","./PublishStatus/view.jsx","./PublishThumbnailInput","./PublishThumbnailInput/","./PublishThumbnailInput/index","./PublishThumbnailInput/index.js","./PublishThumbnailInput/view","./PublishThumbnailInput/view.jsx","./PublishTitleInput","./PublishTitleInput/","./PublishTitleInput/index","./PublishTitleInput/index.js","./PublishTitleInput/view","./PublishTitleInput/view.jsx","./PublishTool","./PublishTool/","./PublishTool/index","./PublishTool/index.js","./PublishTool/view","./PublishTool/view.jsx","./PublishUrlInput","./PublishUrlInput/","./PublishUrlInput/index","./PublishUrlInput/index.js","./PublishUrlInput/view","./PublishUrlInput/view.jsx","./ShowAssetDetails","./ShowAssetDetails/","./ShowAssetDetails/index","./ShowAssetDetails/index.js","./ShowAssetDetails/view","./ShowAssetDetails/view.jsx","./ShowAssetLite","./ShowAssetLite/","./ShowAssetLite/index","./ShowAssetLite/index.js","./ShowAssetLite/view","./ShowAssetLite/view.jsx","./ShowChannel","./ShowChannel/","./ShowChannel/index","./ShowChannel/index.js","./ShowChannel/view","./ShowChannel/view.jsx","./AboutPage","./AboutPage/","./AboutPage/index","./AboutPage/index.jsx","./ErrorPage","./ErrorPage/","./ErrorPage/index","./ErrorPage/index.jsx","./HomePage","./HomePage/","./HomePage/index","./HomePage/index.jsx","./LoginPage","./LoginPage/","./LoginPage/index","./LoginPage/index.js","./LoginPage/view","./LoginPage/view.jsx","./ShowPage","./ShowPage/","./ShowPage/index","./ShowPage/index.js","./ShowPage/view","./ShowPage/view.jsx"],"mappings":"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","file":"index.js","sourcesContent":["module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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 = \"/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 115);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react\");\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-redux\");\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"winston\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction SiteConfig() {\n var _this = this;\n\n this.analytics = {\n googleId: 'default'\n };\n this.assetDefaults = {\n description: 'An asset published on Spee.ch',\n thumbnail: 'https://spee.ch/assets/img/video_thumb_default.png',\n title: 'Spee.ch'\n };\n this.auth = {\n sessionKey: 'default'\n };\n this.customComponents = {\n components: {},\n containers: {},\n pages: {}\n };\n this.details = {\n description: 'Open-source, decentralized image and video sharing.',\n host: 'default',\n port: 3000,\n title: 'Spee.ch',\n twitter: '@spee_ch'\n };\n this.publishing = {\n additionalClaimAddresses: [],\n disabled: false,\n disabledMessage: 'Please check back soon.',\n primaryClaimAddress: 'default',\n thumbnailChannel: 'default',\n thumbnailChannelId: 'default',\n uploadDirectory: '/home/lbry/Uploads'\n };\n this.configure = function (config) {\n if (!config) {\n return console.log('No site config received.');\n }\n var analytics = config.analytics,\n assetDefaults = config.assetDefaults,\n auth = config.auth,\n customComponents = config.customComponents,\n details = config.details,\n publishing = config.publishing;\n\n _this.analytics = analytics;\n _this.assetDefaults = assetDefaults;\n _this.auth = auth;\n _this.details = details;\n _this.publishing = publishing;\n _this.customComponents = customComponents;\n };\n};\n\nmodule.exports = new SiteConfig();\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-router-dom\");\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(64);\n\nvar _publish = __webpack_require__(6);\n\nvar _view = __webpack_require__(65);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n site = _ref.site;\n\n return {\n channelName: channel.loggedInChannel.name,\n channelShortId: channel.loggedInChannel.shortId,\n channelLongId: channel.loggedInChannel.longId,\n siteDescription: site.description\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n },\n onChannelLogout: function onChannelLogout() {\n dispatch((0, _channel.updateLoggedInChannel)(null, null, null));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.selectFile = selectFile;\nexports.clearFile = clearFile;\nexports.updateMetadata = updateMetadata;\nexports.updateClaim = updateClaim;\nexports.setPublishInChannel = setPublishInChannel;\nexports.updatePublishStatus = updatePublishStatus;\nexports.updateError = updateError;\nexports.updateSelectedChannel = updateSelectedChannel;\nexports.toggleMetadataInputs = toggleMetadataInputs;\nexports.onNewThumbnail = onNewThumbnail;\nexports.startPublish = startPublish;\n\nvar _publish_action_types = __webpack_require__(104);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// export action creators\nfunction selectFile(file) {\n return {\n type: actions.FILE_SELECTED,\n data: file\n };\n};\n\nfunction clearFile() {\n return {\n type: actions.FILE_CLEAR\n };\n};\n\nfunction updateMetadata(name, value) {\n return {\n type: actions.METADATA_UPDATE,\n data: {\n name: name,\n value: value\n }\n };\n};\n\nfunction updateClaim(value) {\n return {\n type: actions.CLAIM_UPDATE,\n data: value\n };\n};\n\nfunction setPublishInChannel(channel) {\n return {\n type: actions.SET_PUBLISH_IN_CHANNEL,\n channel: channel\n };\n};\n\nfunction updatePublishStatus(status, message) {\n return {\n type: actions.PUBLISH_STATUS_UPDATE,\n data: {\n status: status,\n message: message\n }\n };\n};\n\nfunction updateError(name, value) {\n return {\n type: actions.ERROR_UPDATE,\n data: {\n name: name,\n value: value\n }\n };\n};\n\nfunction updateSelectedChannel(channelName) {\n return {\n type: actions.SELECTED_CHANNEL_UPDATE,\n data: channelName\n };\n};\n\nfunction toggleMetadataInputs(showMetadataInputs) {\n return {\n type: actions.TOGGLE_METADATA_INPUTS,\n data: showMetadataInputs\n };\n};\n\nfunction onNewThumbnail(file) {\n return {\n type: actions.THUMBNAIL_NEW,\n data: file\n };\n};\n\nfunction startPublish(history) {\n return {\n type: actions.PUBLISH_START,\n data: { history: history }\n };\n}\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(66);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var site = _ref.site;\n var defaultDescription = site.defaultDescription,\n defaultThumbnail = site.defaultThumbnail,\n siteDescription = site.description,\n siteHost = site.host,\n siteTitle = site.title,\n siteTwitter = site.twitter;\n\n return {\n defaultDescription: defaultDescription,\n defaultThumbnail: defaultThumbnail,\n siteDescription: siteDescription,\n siteHost: siteHost,\n siteTitle: siteTitle,\n siteTwitter: siteTwitter\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = request;\n\n__webpack_require__(152);\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param {object} response A response from a network request\n *\n * @return {object} The parsed JSON from the request\n */\nfunction parseJSON(response) {\n if (response.status === 204 || response.status === 205) {\n return null;\n }\n return response.json();\n}\n\n/**\n * Parses the status returned by a network request\n *\n * @param {object} response A response from a network request\n * @param {object} response The parsed JSON from the network request\n *\n * @return {object | undefined} Returns object with status and statusText, or undefined\n */\nfunction checkStatus(response, jsonResponse) {\n if (response.status >= 200 && response.status < 300) {\n return jsonResponse;\n }\n var error = new Error(jsonResponse.message);\n error.response = response;\n throw error;\n}\n\n/**\n * Requests a URL, returning a promise\n *\n * @param {string} url The URL we want to request\n * @param {object} [options] The options we want to pass to \"fetch\"\n *\n * @return {object} The response data\n */\n\nfunction request(url, options) {\n return fetch(url, options).then(function (response) {\n return Promise.all([response, parseJSON(response)]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n response = _ref2[0],\n jsonResponse = _ref2[1];\n\n return checkStatus(response, jsonResponse);\n });\n}\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Sequelize = __webpack_require__(95);\nvar logger = __webpack_require__(2);\n\nconsole.log('exporting sequelize models');\n\nvar _require = __webpack_require__(92),\n database = _require.database,\n username = _require.username,\n password = _require.password;\n\nvar db = {};\n// set sequelize options\nvar sequelize = new Sequelize(database, username, password, {\n host: 'localhost',\n dialect: 'mysql',\n dialectOptions: { decimalNumbers: true }, // fix to ensure DECIMAL will not be stored as a string\n logging: false,\n pool: {\n max: 5,\n min: 0,\n idle: 10000,\n acquire: 10000\n }\n});\n\n// establish mysql connection\nsequelize.authenticate().then(function () {\n logger.info('Sequelize has established mysql connection successfully.');\n}).catch(function (err) {\n logger.error('Sequelize was unable to connect to the database:', err);\n});\n\n// manually add each model to the db object\nvar Certificate = __webpack_require__(132);\nvar Channel = __webpack_require__(133);\nvar Claim = __webpack_require__(134);\nvar File = __webpack_require__(135);\nvar Request = __webpack_require__(136);\nvar User = __webpack_require__(137);\ndb['Certificate'] = sequelize.import('Certificate', Certificate);\ndb['Channel'] = sequelize.import('Channel', Channel);\ndb['Claim'] = sequelize.import('Claim', Claim);\ndb['File'] = sequelize.import('File', File);\ndb['Request'] = sequelize.import('Request', Request);\ndb['User'] = sequelize.import('User', User);\n\n// run model.association for each model in the db object that has an association\nObject.keys(db).forEach(function (modelName) {\n if (db[modelName].associate) {\n logger.info('Associating model:', modelName);\n db[modelName].associate(db);\n }\n});\n\ndb.sequelize = sequelize;\ndb.Sequelize = Sequelize;\n\n// add an 'upsert' method to the db object\ndb.upsert = function (Model, values, condition, tableName) {\n return Model.findOne({\n where: condition\n }).then(function (obj) {\n if (obj) {\n // update\n logger.debug('updating record in db.' + tableName);\n return obj.update(values);\n } else {\n // insert\n logger.debug('creating record in db.' + tableName);\n return Model.create(values);\n }\n }).catch(function (error) {\n logger.error(tableName + '.upsert error', error);\n throw error;\n });\n};\n\nmodule.exports = db;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(14);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _ActiveStatusBar = __webpack_require__(24);\n\nvar _ActiveStatusBar2 = _interopRequireDefault(_ActiveStatusBar);\n\nvar _InactiveStatusBar = __webpack_require__(25);\n\nvar _InactiveStatusBar2 = _interopRequireDefault(_InactiveStatusBar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ProgressBar = function (_React$Component) {\n _inherits(ProgressBar, _React$Component);\n\n function ProgressBar(props) {\n _classCallCheck(this, ProgressBar);\n\n var _this = _possibleConstructorReturn(this, (ProgressBar.__proto__ || Object.getPrototypeOf(ProgressBar)).call(this, props));\n\n _this.state = {\n bars: [],\n index: 0,\n incrementer: 1\n };\n _this.createBars = _this.createBars.bind(_this);\n _this.startProgressBar = _this.startProgressBar.bind(_this);\n _this.updateProgressBar = _this.updateProgressBar.bind(_this);\n _this.stopProgressBar = _this.stopProgressBar.bind(_this);\n return _this;\n }\n\n _createClass(ProgressBar, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.createBars();\n this.startProgressBar();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.stopProgressBar();\n }\n }, {\n key: 'createBars',\n value: function createBars() {\n var bars = [];\n for (var i = 0; i <= this.props.size; i++) {\n bars.push({ isActive: false });\n }\n this.setState({ bars: bars });\n }\n }, {\n key: 'startProgressBar',\n value: function startProgressBar() {\n this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);\n }\n }, {\n key: 'updateProgressBar',\n value: function updateProgressBar() {\n var index = this.state.index;\n var incrementer = this.state.incrementer;\n var bars = this.state.bars;\n // flip incrementer if necessary, to stay in bounds\n if (index < 0 || index > this.props.size) {\n incrementer = incrementer * -1;\n index += incrementer;\n }\n // update the indexed bar\n if (incrementer > 0) {\n bars[index].isActive = true;\n } else {\n bars[index].isActive = false;\n };\n // increment index\n index += incrementer;\n // update state\n this.setState({\n bars: bars,\n incrementer: incrementer,\n index: index\n });\n }\n }, {\n key: 'stopProgressBar',\n value: function stopProgressBar() {\n clearInterval(this.updateInterval);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n this.state.bars.map(function (bar, index) {\n return bar.isActive ? _react2.default.createElement(_ActiveStatusBar2.default, { key: index }) : _react2.default.createElement(_InactiveStatusBar2.default, { key: index });\n })\n );\n }\n }]);\n\n return ProgressBar;\n}(_react2.default.Component);\n\n;\n\nProgressBar.propTypes = {\n size: _propTypes2.default.number.isRequired\n};\n\nexports.default = ProgressBar;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.onHandleShowPageUri = onHandleShowPageUri;\nexports.onRequestError = onRequestError;\nexports.onNewChannelRequest = onNewChannelRequest;\nexports.onNewAssetRequest = onNewAssetRequest;\nexports.onRequestUpdate = onRequestUpdate;\nexports.addRequestToRequestList = addRequestToRequestList;\nexports.addAssetToAssetList = addAssetToAssetList;\nexports.addNewChannelToChannelList = addNewChannelToChannelList;\nexports.onUpdateChannelClaims = onUpdateChannelClaims;\nexports.updateChannelClaims = updateChannelClaims;\nexports.fileRequested = fileRequested;\nexports.updateFileAvailability = updateFileAvailability;\nexports.updateDisplayAssetError = updateDisplayAssetError;\n\nvar _show_action_types = __webpack_require__(19);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show_request_types = __webpack_require__(112);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// basic request parsing\nfunction onHandleShowPageUri(params) {\n return {\n type: actions.HANDLE_SHOW_URI,\n data: params\n };\n};\n\nfunction onRequestError(error) {\n return {\n type: actions.REQUEST_ERROR,\n data: error\n };\n};\n\nfunction onNewChannelRequest(channelName, channelId) {\n var requestType = _show_request_types.CHANNEL;\n var requestId = 'cr#' + channelName + '#' + channelId;\n return {\n type: actions.CHANNEL_REQUEST_NEW,\n data: { requestType: requestType, requestId: requestId, channelName: channelName, channelId: channelId }\n };\n};\n\nfunction onNewAssetRequest(name, id, channelName, channelId, extension) {\n var requestType = extension ? _show_request_types.ASSET_LITE : _show_request_types.ASSET_DETAILS;\n var requestId = 'ar#' + name + '#' + id + '#' + channelName + '#' + channelId;\n return {\n type: actions.ASSET_REQUEST_NEW,\n data: {\n requestType: requestType,\n requestId: requestId,\n name: name,\n modifier: {\n id: id,\n channel: {\n name: channelName,\n id: channelId\n }\n }\n }\n };\n};\n\nfunction onRequestUpdate(requestType, requestId) {\n return {\n type: actions.REQUEST_UPDATE,\n data: {\n requestType: requestType,\n requestId: requestId\n }\n };\n};\n\nfunction addRequestToRequestList(id, error, key) {\n return {\n type: actions.REQUEST_LIST_ADD,\n data: { id: id, error: error, key: key }\n };\n};\n\n// asset actions\n\nfunction addAssetToAssetList(id, error, name, claimId, shortId, claimData) {\n return {\n type: actions.ASSET_ADD,\n data: { id: id, error: error, name: name, claimId: claimId, shortId: shortId, claimData: claimData }\n };\n}\n\n// channel actions\n\nfunction addNewChannelToChannelList(id, name, shortId, longId, claimsData) {\n return {\n type: actions.CHANNEL_ADD,\n data: { id: id, name: name, shortId: shortId, longId: longId, claimsData: claimsData }\n };\n};\n\nfunction onUpdateChannelClaims(channelKey, name, longId, page) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,\n data: { channelKey: channelKey, name: name, longId: longId, page: page }\n };\n};\n\nfunction updateChannelClaims(channelListId, claimsData) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,\n data: { channelListId: channelListId, claimsData: claimsData }\n };\n};\n\n// display a file\n\nfunction fileRequested(name, claimId) {\n return {\n type: actions.FILE_REQUESTED,\n data: { name: name, claimId: claimId }\n };\n};\n\nfunction updateFileAvailability(status) {\n return {\n type: actions.FILE_AVAILABILITY_UPDATE,\n data: status\n };\n};\n\nfunction updateDisplayAssetError(error) {\n return {\n type: actions.DISPLAY_ASSET_ERROR,\n data: error\n };\n};\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(14);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _NavBar = __webpack_require__(5);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ErrorPage = function (_React$Component) {\n _inherits(ErrorPage, _React$Component);\n\n function ErrorPage() {\n _classCallCheck(this, ErrorPage);\n\n return _possibleConstructorReturn(this, (ErrorPage.__proto__ || Object.getPrototypeOf(ErrorPage)).apply(this, arguments));\n }\n\n _createClass(ErrorPage, [{\n key: 'render',\n value: function render() {\n var error = this.props.error;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'p',\n null,\n error\n )\n )\n );\n }\n }]);\n\n return ErrorPage;\n}(_react2.default.Component);\n\n;\n\nErrorPage.propTypes = {\n error: _propTypes2.default.string.isRequired\n};\n\nexports.default = ErrorPage;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactGa = __webpack_require__(151);\n\nvar _reactGa2 = _interopRequireDefault(_reactGa);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _require = __webpack_require__(3),\n googleId = _require.analytics.googleId;\n\n_reactGa2.default.initialize(googleId);\n\nvar GAListener = function (_React$Component) {\n _inherits(GAListener, _React$Component);\n\n function GAListener() {\n _classCallCheck(this, GAListener);\n\n return _possibleConstructorReturn(this, (GAListener.__proto__ || Object.getPrototypeOf(GAListener)).apply(this, arguments));\n }\n\n _createClass(GAListener, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.sendPageView(this.props.history.location);\n this.props.history.listen(this.sendPageView);\n }\n }, {\n key: 'sendPageView',\n value: function sendPageView(location) {\n _reactGa2.default.set({ page: location.pathname });\n _reactGa2.default.pageview(location.pathname);\n }\n }, {\n key: 'render',\n value: function render() {\n return this.props.children;\n }\n }]);\n\n return GAListener;\n}(_react2.default.Component);\n\nexports.default = (0, _reactRouterDom.withRouter)(GAListener);\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"prop-types\");\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(64);\n\nvar _view = __webpack_require__(68);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _publish = __webpack_require__(6);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _channel = __webpack_require__(64);\n\nvar _view = __webpack_require__(69);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _publish = __webpack_require__(6);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onChannelLogin: function onChannelLogin(name, shortId, longId) {\n dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));\n dispatch((0, _publish.updateSelectedChannel)(name));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(72);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(11);\n\nvar _show2 = __webpack_require__(28);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select error and status\n var error = show.displayAsset.error;\n var status = show.displayAsset.status;\n // select asset\n var asset = (0, _show2.selectAsset)(show);\n // return props\n return {\n error: error,\n status: status,\n asset: asset\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onFileRequest: function onFileRequest(name, claimId) {\n dispatch((0, _show.fileRequested)(name, claimId));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(6);\n\nvar _view = __webpack_require__(82);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n file: publish.file,\n thumbnail: publish.thumbnail,\n fileError: publish.error.file\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n selectFile: function selectFile(file) {\n dispatch((0, _publish.selectFile)(file));\n },\n setFileError: function setFileError(value) {\n dispatch((0, _publish.clearFile)());\n dispatch((0, _publish.updateError)('file', value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// request actions\nvar HANDLE_SHOW_URI = exports.HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';\nvar REQUEST_ERROR = exports.REQUEST_ERROR = 'REQUEST_ERROR';\nvar REQUEST_UPDATE = exports.REQUEST_UPDATE = 'REQUEST_UPDATE';\nvar ASSET_REQUEST_NEW = exports.ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';\nvar CHANNEL_REQUEST_NEW = exports.CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';\nvar REQUEST_LIST_ADD = exports.REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';\n\n// asset actions\nvar ASSET_ADD = exports.ASSET_ADD = 'ASSET_ADD';\n\n// channel actions\nvar CHANNEL_ADD = exports.CHANNEL_ADD = 'CHANNEL_ADD';\n\nvar CHANNEL_CLAIMS_UPDATE_ASYNC = exports.CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';\nvar CHANNEL_CLAIMS_UPDATE_SUCCESS = exports.CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';\n\n// asset/file display actions\nvar FILE_REQUESTED = exports.FILE_REQUESTED = 'FILE_REQUESTED';\nvar FILE_AVAILABILITY_UPDATE = exports.FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';\nvar DISPLAY_ASSET_ERROR = exports.DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _NavBar = __webpack_require__(5);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _SEO = __webpack_require__(7);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AboutPage = function (_React$Component) {\n _inherits(AboutPage, _React$Component);\n\n function AboutPage() {\n _classCallCheck(this, AboutPage);\n\n return _possibleConstructorReturn(this, (AboutPage.__proto__ || Object.getPrototypeOf(AboutPage)).apply(this, arguments));\n }\n\n _createClass(AboutPage, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: 'About', pageUri: 'about' }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n { className: 'pull-quote' },\n 'Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://twitter.com/spee_ch' },\n 'TWITTER'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch' },\n 'GITHUB'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://discord.gg/YjYbwhS' },\n 'DISCORD CHANNEL'\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch/blob/master/README.md' },\n 'DOCUMENTATION'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n null,\n 'Spee.ch is a media-hosting site that reads from and publishes content to the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://lbry.io' },\n 'LBRY'\n ),\n ' blockchain.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://lbry.io/get' },\n 'LBRY'\n ),\n ' network. This means that your images are stored in multiple locations without a single point of failure.'\n ),\n _react2.default.createElement(\n 'h3',\n null,\n 'Contribute'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you have an idea for your own spee.ch-like site on top of LBRY, fork our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch' },\n 'github repo'\n ),\n ' and go to town!'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you want to improve spee.ch, join our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS' },\n 'discord channel'\n ),\n ' or solve one of our ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://github.com/lbryio/spee.ch/issues' },\n 'github issues'\n ),\n '.'\n )\n )\n )\n )\n );\n }\n }]);\n\n return AboutPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = AboutPage;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Logo() {\n return _react2.default.createElement(\n 'svg',\n { version: '1.1', id: 'Layer_1', x: '0px', y: '0px', height: '24px', viewBox: '0 0 80 31', enableBackground: 'new 0 0 80 31', className: 'nav-bar-logo' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: '/' },\n _react2.default.createElement(\n 'title',\n null,\n 'Logo'\n ),\n _react2.default.createElement(\n 'desc',\n null,\n 'Spee.ch logo'\n ),\n _react2.default.createElement(\n 'g',\n { id: 'About' },\n _react2.default.createElement(\n 'g',\n { id: 'Publish-Form-V2-_x28_filled_x29_', transform: 'translate(-42.000000, -23.000000)' },\n _react2.default.createElement(\n 'g',\n { id: 'Group-17', transform: 'translate(42.000000, 22.000000)' },\n _react2.default.createElement(\n 'text',\n { transform: 'matrix(1 0 0 1 0 20)', fontSize: '25', fontFamily: 'Roboto' },\n 'Spee<h'\n ),\n _react2.default.createElement(\n 'g',\n { id: 'Group-16', transform: 'translate(0.000000, 30.000000)' },\n _react2.default.createElement('path', { id: 'Line-8', fill: 'none', stroke: '#09F911', strokeWidth: '1', strokeLinecap: 'square', d: 'M0.5,1.5h15' }),\n _react2.default.createElement('path', { id: 'Line-8-Copy', fill: 'none', stroke: '#029D74', strokeWidth: '1', strokeLinecap: 'square', d: 'M16.5,1.5h15' }),\n _react2.default.createElement('path', { id: 'Line-8-Copy-2', fill: 'none', stroke: '#E35BD8', strokeWidth: '1', strokeLinecap: 'square', d: 'M32.5,1.5h15' }),\n _react2.default.createElement('path', { id: 'Line-8-Copy-3', fill: 'none', stroke: '#4156C5', strokeWidth: '1', strokeLinecap: 'square', d: 'M48.5,1.5h15' }),\n _react2.default.createElement('path', { id: 'Line-8-Copy-4', fill: 'none', stroke: '#635688', strokeWidth: '1', strokeLinecap: 'square', d: 'M64.5,1.5h15' })\n )\n )\n )\n )\n )\n );\n};\n\nexports.default = Logo;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction NavBarChannelDropdown(_ref) {\n var channelName = _ref.channelName,\n handleSelection = _ref.handleSelection,\n defaultSelection = _ref.defaultSelection,\n VIEW = _ref.VIEW,\n LOGOUT = _ref.LOGOUT;\n\n return _react2.default.createElement(\n 'select',\n { type: 'text', id: 'nav-bar-channel-select', className: 'select select--arrow link--nav', onChange: handleSelection, value: defaultSelection },\n _react2.default.createElement(\n 'option',\n { id: 'nav-bar-channel-select-channel-option' },\n channelName\n ),\n _react2.default.createElement(\n 'option',\n { value: VIEW },\n 'View'\n ),\n _react2.default.createElement(\n 'option',\n { value: LOGOUT },\n 'Logout'\n )\n );\n};\n\nexports.default = NavBarChannelDropdown;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(67);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ActiveStatusBar = function ActiveStatusBar() {\n return _react2.default.createElement(\n 'span',\n { className: 'progress-bar progress-bar--active' },\n '| '\n );\n};\n\nexports.default = ActiveStatusBar;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar InactiveStatusBar = function InactiveStatusBar() {\n return _react2.default.createElement(\n 'span',\n { className: 'progress-bar progress-bar--inactive' },\n '| '\n );\n};\n\nexports.default = InactiveStatusBar;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _show = __webpack_require__(11);\n\nvar _view = __webpack_require__(70);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n return {\n error: show.request.error,\n requestType: show.request.type\n };\n};\n\nvar mapDispatchToProps = {\n onHandleShowPageUri: _show.onHandleShowPageUri\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(71);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select asset info\n var asset = void 0;\n var request = show.requestList[requestId] || null;\n var assetList = show.assetList;\n if (request && assetList) {\n var assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectAsset = exports.selectAsset = function selectAsset(show) {\n var request = show.requestList[show.request.id];\n var assetKey = request.key;\n return show.assetList[assetKey];\n};\n\nvar selectShowState = exports.selectShowState = function selectShowState(state) {\n return state.show;\n};\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(73);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select asset info\n var asset = void 0;\n var request = show.requestList[requestId] || null;\n var assetList = show.assetList;\n if (request && assetList) {\n var assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(74);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(28);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n var _selectAsset = (0, _show.selectAsset)(show),\n title = _selectAsset.claimData.title;\n\n return {\n title: title\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(75);\n\nvar _view2 = _interopRequireDefault(_view);\n\nvar _show = __webpack_require__(28);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select asset\n var asset = (0, _show.selectAsset)(show);\n // return props\n return {\n asset: asset\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(76);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select request info\n var requestId = show.request.id;\n // select request\n var previousRequest = show.requestList[requestId] || null;\n // select channel\n var channel = void 0;\n if (previousRequest) {\n var channelKey = previousRequest.key;\n channel = show.channelList[channelKey] || null;\n }\n return {\n channel: channel\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _show = __webpack_require__(11);\n\nvar _view = __webpack_require__(77);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var show = _ref.show;\n\n // select channel key\n var request = show.requestList[show.request.id];\n var channelKey = request.key;\n // select channel claims\n var channel = show.channelList[channelKey] || null;\n // return props\n return {\n channelKey: channelKey,\n channel: channel\n };\n};\n\nvar mapDispatchToProps = {\n onUpdateChannelClaims: _show.onUpdateChannelClaims\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(78);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var defaultThumbnail = _ref.site.defaults.defaultThumbnail;\n\n return {\n defaultThumbnail: defaultThumbnail\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(79);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var _ref$site = _ref.site,\n host = _ref$site.host,\n title = _ref$site.title;\n\n return {\n host: host,\n title: title\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(14);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ExpandingTextarea = function (_Component) {\n _inherits(ExpandingTextarea, _Component);\n\n function ExpandingTextarea(props) {\n _classCallCheck(this, ExpandingTextarea);\n\n var _this = _possibleConstructorReturn(this, (ExpandingTextarea.__proto__ || Object.getPrototypeOf(ExpandingTextarea)).call(this, props));\n\n _this._handleChange = _this._handleChange.bind(_this);\n return _this;\n }\n\n _createClass(ExpandingTextarea, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.adjustTextarea({});\n }\n }, {\n key: '_handleChange',\n value: function _handleChange(event) {\n var onChange = this.props.onChange;\n\n if (onChange) onChange(event);\n this.adjustTextarea(event);\n }\n }, {\n key: 'adjustTextarea',\n value: function adjustTextarea(_ref) {\n var _ref$target = _ref.target,\n target = _ref$target === undefined ? this.el : _ref$target;\n\n target.style.height = 0;\n target.style.height = target.scrollHeight + 'px';\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var rest = _objectWithoutProperties(this.props, []);\n\n return _react2.default.createElement('textarea', _extends({}, rest, {\n ref: function ref(x) {\n return _this2.el = x;\n },\n onChange: this._handleChange\n }));\n }\n }]);\n\n return ExpandingTextarea;\n}(_react.Component);\n\nExpandingTextarea.propTypes = {\n onChange: _propTypes2.default.func\n};\n\nexports.default = ExpandingTextarea;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(14);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishPreview = function (_React$Component) {\n _inherits(PublishPreview, _React$Component);\n\n function PublishPreview(props) {\n _classCallCheck(this, PublishPreview);\n\n var _this = _possibleConstructorReturn(this, (PublishPreview.__proto__ || Object.getPrototypeOf(PublishPreview)).call(this, props));\n\n _this.state = {\n imgSource: '',\n defaultThumbnail: '/assets/img/video_thumb_default.png'\n };\n return _this;\n }\n\n _createClass(PublishPreview, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.setPreviewImageSource(this.props.file);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(newProps) {\n if (newProps.file !== this.props.file) {\n this.setPreviewImageSource(newProps.file);\n }\n if (newProps.thumbnail !== this.props.thumbnail) {\n if (newProps.thumbnail) {\n this.setPreviewImageSourceFromFile(newProps.thumbnail);\n } else {\n this.setState({ imgSource: this.state.defaultThumbnail });\n }\n }\n }\n }, {\n key: 'setPreviewImageSourceFromFile',\n value: function setPreviewImageSourceFromFile(file) {\n var _this2 = this;\n\n var previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = function () {\n _this2.setState({ imgSource: previewReader.result });\n };\n }\n }, {\n key: 'setPreviewImageSource',\n value: function setPreviewImageSource(file) {\n if (file.type !== 'video/mp4') {\n this.setPreviewImageSourceFromFile(file);\n } else {\n if (this.props.thumbnail) {\n this.setPreviewImageSourceFromFile(this.props.thumbnail);\n }\n this.setState({ imgSource: this.state.defaultThumbnail });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement('img', {\n id: 'dropzone-preview',\n src: this.state.imgSource,\n className: this.props.dimPreview ? 'dim' : '',\n alt: 'publish preview'\n });\n }\n }]);\n\n return PublishPreview;\n}(_react2.default.Component);\n\n;\n\nPublishPreview.propTypes = {\n dimPreview: _propTypes2.default.bool.isRequired,\n file: _propTypes2.default.object.isRequired,\n thumbnail: _propTypes2.default.object\n};\n\nexports.default = PublishPreview;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(14);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction UrlMiddle(_ref) {\n var publishInChannel = _ref.publishInChannel,\n selectedChannel = _ref.selectedChannel,\n loggedInChannelName = _ref.loggedInChannelName,\n loggedInChannelShortId = _ref.loggedInChannelShortId;\n\n if (publishInChannel) {\n if (selectedChannel === loggedInChannelName) {\n return _react2.default.createElement(\n 'span',\n { id: 'url-channel', className: 'url-text--secondary' },\n loggedInChannelName,\n ':',\n loggedInChannelShortId,\n ' /'\n );\n }\n return _react2.default.createElement(\n 'span',\n { id: 'url-channel-placeholder', className: 'url-text--secondary tooltip' },\n '@channel',\n _react2.default.createElement(\n 'span',\n {\n className: 'tooltip-text' },\n 'Select a channel below'\n ),\n ' /'\n );\n }\n return _react2.default.createElement(\n 'span',\n { id: 'url-no-channel-placeholder', className: 'url-text--secondary tooltip' },\n 'xyz',\n _react2.default.createElement(\n 'span',\n { className: 'tooltip-text' },\n 'This will be a random id'\n ),\n ' /'\n );\n}\n\nUrlMiddle.propTypes = {\n publishInChannel: _propTypes2.default.bool.isRequired,\n loggedInChannelName: _propTypes2.default.string,\n loggedInChannelShortId: _propTypes2.default.string\n};\n\nexports.default = UrlMiddle;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(6);\n\nvar _view = __webpack_require__(81);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n publishInChannel: publish.publishInChannel,\n selectedChannel: publish.selectedChannel,\n channelError: publish.error.channel\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onPublishInChannelChange: function onPublishInChannelChange(value) {\n dispatch((0, _publish.updateError)('channel', null));\n dispatch((0, _publish.setPublishInChannel)(value));\n },\n onChannelSelect: function onChannelSelect(value) {\n dispatch((0, _publish.updateError)('channel', null));\n dispatch((0, _publish.updateSelectedChannel)(value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(6);\n\nvar _view = __webpack_require__(83);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n file: publish.file\n };\n};\n\nvar mapDispatchToProps = {\n clearFile: _publish.clearFile,\n startPublish: _publish.startPublish\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(6);\n\nvar _view = __webpack_require__(84);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n title: publish.metadata.title\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onMetadataChange: function onMetadataChange(name, value) {\n dispatch((0, _publish.updateMetadata)(name, value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _publish = __webpack_require__(6);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(85);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var channel = _ref.channel,\n publish = _ref.publish;\n\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n loggedInChannelShortId: channel.loggedInChannel.shortId,\n fileName: publish.file.name,\n publishInChannel: publish.publishInChannel,\n selectedChannel: publish.selectedChannel,\n claim: publish.claim,\n urlError: publish.error.url\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onClaimChange: function onClaimChange(value) {\n dispatch((0, _publish.updateClaim)(value));\n dispatch((0, _publish.updateError)('publishSubmit', null));\n },\n onUrlError: function onUrlError(value) {\n dispatch((0, _publish.updateError)('url', value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(6);\n\nvar _view = __webpack_require__(86);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var file = _ref.publish.file;\n\n return {\n file: file\n };\n};\n\nvar mapDispatchToProps = {\n onNewThumbnail: _publish.onNewThumbnail\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(6);\n\nvar _view = __webpack_require__(87);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n showMetadataInputs: publish.showMetadataInputs,\n description: publish.metadata.description,\n license: publish.metadata.license,\n nsfw: publish.metadata.nsfw\n };\n};\n\nvar mapDispatchToProps = function mapDispatchToProps(dispatch) {\n return {\n onMetadataChange: function onMetadataChange(name, value) {\n dispatch((0, _publish.updateMetadata)(name, value));\n },\n onToggleMetadataInputs: function onToggleMetadataInputs(value) {\n dispatch((0, _publish.toggleMetadataInputs)(value));\n }\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(88);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n message: publish.disabledMessage\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _publish = __webpack_require__(6);\n\nvar _view = __webpack_require__(89);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n status: publish.status.status,\n message: publish.status.message\n };\n};\n\nvar mapDispatchToProps = {\n clearFile: _publish.clearFile\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _view = __webpack_require__(90);\n\nvar _view2 = _interopRequireDefault(_view);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar mapStateToProps = function mapStateToProps(_ref) {\n var publish = _ref.publish;\n\n return {\n disabled: publish.disabled,\n file: publish.file,\n status: publish.status.status\n };\n};\n\nexports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-helmet\");\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux-saga/effects\");\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Path = __webpack_require__(51);\n\nvar _require = __webpack_require__(80),\n getSubDirectoryNames = _require.getSubDirectoryNames;\n\nvar thisFolder = Path.resolve(__dirname, 'client/components/');\nvar modules = {};\n\ngetSubDirectoryNames(thisFolder).forEach(function (name) {\n modules[name] = __webpack_require__(168)(\"./\" + name).default;\n});\n\nmodule.exports = modules;\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"path\");\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Path = __webpack_require__(51);\n\nvar _require = __webpack_require__(80),\n getSubDirectoryNames = _require.getSubDirectoryNames;\n\nvar thisFolder = Path.resolve(__dirname, 'client/containers/');\n\nvar modules = {};\n\ngetSubDirectoryNames(thisFolder).forEach(function (name) {\n modules[name] = __webpack_require__(169)(\"./\" + name).default;\n});\n\nmodule.exports = modules;\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Path = __webpack_require__(51);\n\nvar _require = __webpack_require__(80),\n getSubDirectoryNames = _require.getSubDirectoryNames;\n\nvar thisFolder = Path.resolve(__dirname, 'client/pages/');\n\nvar modules = {};\n\ngetSubDirectoryNames(thisFolder).forEach(function (name) {\n modules[name] = __webpack_require__(171)(\"./\" + name).default;\n});\n\nmodule.exports = modules;\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(7);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(5);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _PublishTool = __webpack_require__(47);\n\nvar _PublishTool2 = _interopRequireDefault(_PublishTool);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar HomePage = function (_React$Component) {\n _inherits(HomePage, _React$Component);\n\n function HomePage() {\n _classCallCheck(this, HomePage);\n\n return _possibleConstructorReturn(this, (HomePage.__proto__ || Object.getPrototypeOf(HomePage)).apply(this, arguments));\n }\n\n _createClass(HomePage, [{\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column' },\n _react2.default.createElement(_SEO2.default, null),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded flex-container--column' },\n _react2.default.createElement(_PublishTool2.default, null)\n )\n );\n }\n }]);\n\n return HomePage;\n}(_react2.default.Component);\n\n;\n\nexports.default = HomePage;\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar axios = __webpack_require__(129);\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(130),\n _require$api = _require.api,\n apiHost = _require$api.apiHost,\n apiPort = _require$api.apiPort;\n\nvar lbryApiUri = 'http://' + apiHost + ':' + apiPort;\n\nvar _require2 = __webpack_require__(56),\n chooseGaLbrynetPublishLabel = _require2.chooseGaLbrynetPublishLabel,\n sendGATimingEvent = _require2.sendGATimingEvent;\n\nvar handleLbrynetResponse = function handleLbrynetResponse(_ref, resolve, reject) {\n var data = _ref.data;\n\n logger.debug('lbry api data:', data);\n if (data.result) {\n // check for an error\n if (data.result.error) {\n logger.debug('Lbrynet api error:', data.result.error);\n reject(new Error(data.result.error));\n return;\n };\n resolve(data.result);\n return;\n }\n // fallback in case it just timed out\n reject(JSON.stringify(data));\n};\n\nmodule.exports = {\n publishClaim: function publishClaim(publishParams) {\n logger.debug('lbryApi >> Publishing claim to \"' + publishParams.name + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'publish',\n params: publishParams\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'publish', chooseGaLbrynetPublishLabel(publishParams), gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaim: function getClaim(uri) {\n logger.debug('lbryApi >> Getting Claim for \"' + uri + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'get',\n params: { uri: uri, timeout: 20 }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'getClaim', 'GET', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaimList: function getClaimList(claimName) {\n logger.debug('lbryApi >> Getting claim_list for \"' + claimName + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'claim_list',\n params: { name: claimName }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'getClaimList', 'CLAIM_LIST', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n resolveUri: function resolveUri(uri) {\n logger.debug('lbryApi >> Resolving URI for \"' + uri + '\"');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'resolve',\n params: { uri: uri }\n }).then(function (_ref2) {\n var data = _ref2.data;\n\n sendGATimingEvent('lbrynet', 'resolveUri', 'RESOLVE', gaStartTime, Date.now());\n if (data.result[uri].error) {\n // check for errors\n reject(data.result[uri].error);\n } else {\n // if no errors, resolve\n resolve(data.result[uri]);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getDownloadDirectory: function getDownloadDirectory() {\n logger.debug('lbryApi >> Retrieving the download directory path from lbry daemon...');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'settings_get'\n }).then(function (_ref3) {\n var data = _ref3.data;\n\n sendGATimingEvent('lbrynet', 'getDownloadDirectory', 'SETTINGS_GET', gaStartTime, Date.now());\n if (data.result) {\n resolve(data.result.download_directory);\n } else {\n return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.');\n }\n }).catch(function (error) {\n logger.error('Lbrynet Error:', error);\n resolve('/home/lbry/Downloads/');\n });\n });\n },\n createChannel: function createChannel(name) {\n logger.debug('lbryApi >> Creating channel for ' + name + '...');\n var gaStartTime = Date.now();\n return new Promise(function (resolve, reject) {\n axios.post(lbryApiUri, {\n method: 'channel_new',\n params: {\n channel_name: name,\n amount: 0.1\n }\n }).then(function (response) {\n sendGATimingEvent('lbrynet', 'createChannel', 'CHANNEL_NEW', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n }).catch(function (error) {\n reject(error);\n });\n });\n }\n};\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar ua = __webpack_require__(131);\n\nvar _require = __webpack_require__(3),\n googleId = _require.analytics.googleId,\n title = _require.details.title;\n\nfunction createServeEventParams(headers, ip, originalUrl) {\n return {\n eventCategory: 'client requests',\n eventAction: 'serve request',\n eventLabel: originalUrl,\n ipOverride: ip,\n userAgentOverride: headers['user-agent']\n };\n};\n\nfunction createPublishTimingEventParams(category, variable, label, startTime, endTime) {\n var duration = endTime - startTime;\n return {\n userTimingCategory: category,\n userTimingVariableName: variable,\n userTimingTime: duration,\n userTimingLabel: label\n };\n};\n\nfunction sendGoogleAnalyticsEvent(ip, params) {\n var visitorId = ip.replace(/\\./g, '-');\n var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.event(params, function (err) {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n });\n};\n\nfunction sendGoogleAnalyticsTiming(visitorId, params) {\n var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.timing(params, function (err) {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n logger.debug('Timing event successfully sent to google analytics');\n });\n};\n\nmodule.exports = {\n sendGAServeEvent: function sendGAServeEvent(headers, ip, originalUrl) {\n var params = createServeEventParams(headers, ip, originalUrl);\n sendGoogleAnalyticsEvent(ip, params);\n },\n sendGATimingEvent: function sendGATimingEvent(category, variable, label, startTime, endTime) {\n var params = createPublishTimingEventParams(category, variable, label, startTime, endTime);\n sendGoogleAnalyticsTiming(title, params);\n },\n chooseGaLbrynetPublishLabel: function chooseGaLbrynetPublishLabel(_ref) {\n var channelName = _ref.channel_name,\n channelId = _ref.channel_id;\n\n return channelName || channelId ? 'PUBLISH_IN_CHANNEL_CLAIM' : 'PUBLISH_ANONYMOUS_CLAIM';\n }\n};\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux\");\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _require = __webpack_require__(3),\n customComponents = _require.customComponents;\n\nfunction getDeepestChildValue(parent, childrenKeys) {\n var childKey = childrenKeys.shift(); // .shift() retrieves the first element of array and removes it from array\n var child = parent[childKey];\n if (childrenKeys.length >= 1) {\n return getDeepestChildValue(child, childrenKeys);\n }\n return child;\n}\n\nvar dynamicImport = exports.dynamicImport = function dynamicImport(filePath) {\n // validate inputs\n if (!filePath) {\n throw new Error('no file path provided to dynamicImport()');\n }\n if (typeof filePath !== 'string') {\n console.log('dynamicImport > filePath:', filePath);\n console.log('dynamicImport > filePath type:', typeof filePath === 'undefined' ? 'undefined' : _typeof(filePath));\n throw new Error('file path provided to dynamicImport() must be a string');\n }\n if (!customComponents) {\n return __webpack_require__(109)(\"\" + filePath);\n }\n // split out the file folders // filter out any empty or white-space-only strings\n var folders = filePath.split('/').filter(function (folderName) {\n return folderName.replace(/\\s/g, '').length;\n });\n // check for the component corresponding to file path in the site config object\n // i.e. customComponents[folders[0]][folders[2][...][folders[n]]\n var component = getDeepestChildValue(customComponents, folders);\n if (component) {\n return component; // return custom component\n } else {\n return __webpack_require__(109)(\"\" + filePath);\n }\n};\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createBasicCanonicalLink = function createBasicCanonicalLink(page, siteHost) {\n return siteHost + \"/\" + page;\n};\n\nvar createAssetCanonicalLink = function createAssetCanonicalLink(asset, siteHost) {\n var channelName = void 0,\n certificateId = void 0,\n name = void 0,\n claimId = void 0;\n if (asset.claimData) {\n var _asset$claimData = asset.claimData;\n channelName = _asset$claimData.channelName;\n certificateId = _asset$claimData.certificateId;\n name = _asset$claimData.name;\n claimId = _asset$claimData.claimId;\n };\n if (channelName) {\n return siteHost + \"/\" + channelName + \":\" + certificateId + \"/\" + name;\n };\n return siteHost + \"/\" + claimId + \"/\" + name;\n};\n\nvar createChannelCanonicalLink = function createChannelCanonicalLink(channel, siteHost) {\n var name = channel.name,\n longId = channel.longId;\n\n return siteHost + \"/\" + name + \":\" + longId;\n};\n\nvar createCanonicalLink = exports.createCanonicalLink = function createCanonicalLink(asset, channel, page, siteHost) {\n if (asset) {\n return createAssetCanonicalLink(asset, siteHost);\n }\n if (channel) {\n return createChannelCanonicalLink(channel, siteHost);\n }\n return createBasicCanonicalLink(page, siteHost);\n};\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n validateFile: function validateFile(file) {\n if (!file) {\n throw new Error('no file provided');\n }\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate size and type\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n throw new Error('Sorry, GIFs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n }\n};\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR: '@',\n parseIdentifier: function parseIdentifier(identifier) {\n var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec = componentsRegex // eslint-disable-line no-unused-vars\n .exec(identifier).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),\n proto = _componentsRegex$exec2[0],\n value = _componentsRegex$exec2[1],\n modifierSeperator = _componentsRegex$exec2[2],\n modifier = _componentsRegex$exec2[3];\n\n // Validate and process name\n\n\n if (!value) {\n throw new Error('Check your URL. No channel name provided before \"' + modifierSeperator + '\"');\n }\n var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n var channelName = isChannel ? value : null;\n var claimId = void 0;\n if (isChannel) {\n if (!channelName) {\n throw new Error('Check your URL. No channel name after \"@\".');\n }\n var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error('Check your URL. Invalid characters in channel name: \"' + nameBadChars.join(', ') + '\".');\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n var channelClaimId = void 0;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('Check your URL. No modifier provided after separator \"' + modifierSeperator + '\"');\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error('Check your URL. The \"' + modifierSeperator + '\" modifier is not currently supported');\n }\n }\n return {\n isChannel: isChannel,\n channelName: channelName,\n channelClaimId: channelClaimId || null,\n claimId: claimId || null\n };\n },\n parseClaim: function parseClaim(name) {\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first extension)\n '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec3 = componentsRegex // eslint-disable-line no-unused-vars\n .exec(name).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),\n proto = _componentsRegex$exec4[0],\n claimName = _componentsRegex$exec4[1],\n extensionSeperator = _componentsRegex$exec4[2],\n extension = _componentsRegex$exec4[3];\n\n // Validate and process name\n\n\n if (!claimName) {\n throw new Error('Check your URL. No claim name provided before \".\"');\n }\n var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error('Check your URL. Invalid characters in claim name: \"' + nameBadChars.join(', ') + '\".');\n }\n // Validate and process extension\n if (extensionSeperator) {\n if (!extension) {\n throw new Error('Check your URL. No file extension provided after separator \"' + extensionSeperator + '\".');\n }\n if (extensionSeperator !== '.') {\n throw new Error('Check your URL. The \"' + extensionSeperator + '\" separator is not supported in the claim name.');\n }\n }\n return {\n claimName: claimName,\n extension: extension || null\n };\n }\n};\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar determineOgThumbnailContentType = function determineOgThumbnailContentType(thumbnail) {\n if (thumbnail) {\n var fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));\n switch (fileExt) {\n case 'jpeg':\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'gif':\n return 'image/gif';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n }\n return '';\n};\n\nvar createBasicMetaTags = function createBasicMetaTags(siteHost, siteDescription, siteTitle, siteTwitter) {\n return [{ property: 'og:title', content: siteTitle }, { property: 'og:url', content: siteHost }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: siteDescription }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }];\n};\n\nvar createChannelMetaTags = function createChannelMetaTags(siteTitle, siteHost, siteTwitter, channel) {\n var name = channel.name,\n longId = channel.longId;\n\n return [{ property: 'og:title', content: name + ' on ' + siteTitle }, { property: 'og:url', content: siteHost + '/' + name + ':' + longId }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: name + ', a channel on ' + siteTitle }, { property: 'twitter:site', content: siteTwitter }, { property: 'twitter:card', content: 'summary' }];\n};\n\nvar createAssetMetaTags = function createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) {\n var claimData = asset.claimData;\n var contentType = claimData.contentType;\n\n var embedUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;\n var showUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;\n var source = siteHost + '/' + claimData.claimId + '/' + claimData.name + '.' + claimData.fileExt;\n var ogTitle = claimData.title || claimData.name;\n var ogDescription = claimData.description || defaultDescription;\n var ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);\n var ogThumbnail = claimData.thumbnail || defaultThumbnail;\n var metaTags = [{ property: 'og:title', content: ogTitle }, { property: 'og:url', content: showUrl }, { property: 'og:site_name', content: siteTitle }, { property: 'og:description', content: ogDescription }, { property: 'og:image:width', content: 600 }, { property: 'og:image:height', content: 315 }, { property: 'twitter:site', content: siteTwitter }];\n if (contentType === 'video/mp4' || contentType === 'video/webm') {\n metaTags.push({ property: 'og:video', content: source });\n metaTags.push({ property: 'og:video:secure_url', content: source });\n metaTags.push({ property: 'og:video:type', content: contentType });\n metaTags.push({ property: 'og:image', content: ogThumbnail });\n metaTags.push({ property: 'og:image:type', content: ogThumbnailContentType });\n metaTags.push({ property: 'og:type', content: 'video' });\n metaTags.push({ property: 'twitter:card', content: 'player' });\n metaTags.push({ property: 'twitter:player', content: embedUrl });\n metaTags.push({ property: 'twitter:player:width', content: 600 });\n metaTags.push({ property: 'twitter:text:player_width', content: 600 });\n metaTags.push({ property: 'twitter:player:height', content: 337 });\n metaTags.push({ property: 'twitter:player:stream', content: source });\n metaTags.push({ property: 'twitter:player:stream:content_type', content: contentType });\n } else {\n metaTags.push({ property: 'og:image', content: source });\n metaTags.push({ property: 'og:image:type', content: contentType });\n metaTags.push({ property: 'og:type', content: 'article' });\n metaTags.push({ property: 'twitter:card', content: 'summary_large_image' });\n }\n return metaTags;\n};\n\nvar createMetaTags = exports.createMetaTags = function createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) {\n if (asset) {\n return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);\n };\n if (channel) {\n return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);\n };\n return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);\n};\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createPageTitle = exports.createPageTitle = function createPageTitle(siteTitle, pageTitle) {\n if (!pageTitle) {\n return \"\" + siteTitle;\n }\n return siteTitle + \" - \" + pageTitle;\n};\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.updateLoggedInChannel = updateLoggedInChannel;\n\nvar _channel_action_types = __webpack_require__(106);\n\nvar actions = _interopRequireWildcard(_channel_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// export action creators\n\nfunction updateLoggedInChannel(name, shortId, longId) {\n return {\n type: actions.CHANNEL_UPDATE,\n data: {\n name: name,\n shortId: shortId,\n longId: longId\n }\n };\n};\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nvar _Logo = __webpack_require__(21);\n\nvar _Logo2 = _interopRequireDefault(_Logo);\n\nvar _NavBarChannelOptionsDropdown = __webpack_require__(22);\n\nvar _NavBarChannelOptionsDropdown2 = _interopRequireDefault(_NavBarChannelOptionsDropdown);\n\nvar _request = __webpack_require__(8);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar VIEW = 'VIEW';\nvar LOGOUT = 'LOGOUT';\n\nvar NavBar = function (_React$Component) {\n _inherits(NavBar, _React$Component);\n\n function NavBar(props) {\n _classCallCheck(this, NavBar);\n\n var _this = _possibleConstructorReturn(this, (NavBar.__proto__ || Object.getPrototypeOf(NavBar)).call(this, props));\n\n _this.checkForLoggedInUser = _this.checkForLoggedInUser.bind(_this);\n _this.logoutUser = _this.logoutUser.bind(_this);\n _this.handleSelection = _this.handleSelection.bind(_this);\n return _this;\n }\n\n _createClass(NavBar, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n // check to see if the user is already logged in\n this.checkForLoggedInUser();\n }\n }, {\n key: 'checkForLoggedInUser',\n value: function checkForLoggedInUser() {\n var _this2 = this;\n\n var params = { credentials: 'include' };\n (0, _request2.default)('/user', params).then(function (_ref) {\n var data = _ref.data;\n\n _this2.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);\n }).catch(function (error) {\n console.log('/user error:', error.message);\n });\n }\n }, {\n key: 'logoutUser',\n value: function logoutUser() {\n var _this3 = this;\n\n var params = { credentials: 'include' };\n (0, _request2.default)('/logout', params).then(function () {\n _this3.props.onChannelLogout();\n }).catch(function (error) {\n console.log('/logout error', error.message);\n });\n }\n }, {\n key: 'handleSelection',\n value: function handleSelection(event) {\n var value = event.target.selectedOptions[0].value;\n switch (value) {\n case LOGOUT:\n this.logoutUser();\n break;\n case VIEW:\n // redirect to channel page\n this.props.history.push('/' + this.props.channelName + ':' + this.props.channelLongId);\n break;\n default:\n break;\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var siteDescription = this.props.siteDescription;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--wide nav-bar' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--short flex-container--row flex-container--space-between-center' },\n _react2.default.createElement(_Logo2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'nav-bar--center' },\n _react2.default.createElement(\n 'span',\n { className: 'nav-bar-tagline' },\n siteDescription\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'nav-bar--right' },\n _react2.default.createElement(\n _reactRouterDom.NavLink,\n { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/', exact: true },\n 'Publish'\n ),\n _react2.default.createElement(\n _reactRouterDom.NavLink,\n { className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/about' },\n 'About'\n ),\n this.props.channelName ? _react2.default.createElement(_NavBarChannelOptionsDropdown2.default, {\n channelName: this.props.channelName,\n handleSelection: this.handleSelection,\n defaultSelection: this.props.channelName,\n VIEW: VIEW,\n LOGOUT: LOGOUT\n }) : _react2.default.createElement(\n _reactRouterDom.NavLink,\n { id: 'nav-bar-login-link', className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/login' },\n 'Channel'\n )\n )\n )\n );\n }\n }]);\n\n return NavBar;\n}(_react2.default.Component);\n\nexports.default = (0, _reactRouterDom.withRouter)(NavBar);\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactHelmet = __webpack_require__(48);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nvar _propTypes = __webpack_require__(14);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _pageTitle = __webpack_require__(63);\n\nvar _metaTags = __webpack_require__(62);\n\nvar _canonicalLink = __webpack_require__(59);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SEO = function (_React$Component) {\n _inherits(SEO, _React$Component);\n\n function SEO() {\n _classCallCheck(this, SEO);\n\n return _possibleConstructorReturn(this, (SEO.__proto__ || Object.getPrototypeOf(SEO)).apply(this, arguments));\n }\n\n _createClass(SEO, [{\n key: 'render',\n value: function render() {\n // props from state\n var _props = this.props,\n defaultDescription = _props.defaultDescription,\n defaultThumbnail = _props.defaultThumbnail,\n siteDescription = _props.siteDescription,\n siteHost = _props.siteHost,\n siteTitle = _props.siteTitle,\n siteTwitter = _props.siteTwitter;\n // props from parent\n\n var _props2 = this.props,\n asset = _props2.asset,\n channel = _props2.channel,\n pageUri = _props2.pageUri;\n var pageTitle = this.props.pageTitle;\n // create page title, tags, and canonical link\n\n pageTitle = (0, _pageTitle.createPageTitle)(siteTitle, pageTitle);\n var metaTags = (0, _metaTags.createMetaTags)(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);\n var canonicalLink = (0, _canonicalLink.createCanonicalLink)(asset, channel, pageUri, siteHost);\n // render results\n return _react2.default.createElement(_reactHelmet2.default, {\n title: pageTitle,\n meta: metaTags,\n link: [{ rel: 'canonical', href: canonicalLink }]\n });\n }\n }]);\n\n return SEO;\n}(_react2.default.Component);\n\n;\n\nSEO.propTypes = {\n pageTitle: _propTypes2.default.string,\n pageUri: _propTypes2.default.string,\n channel: _propTypes2.default.object,\n asset: _propTypes2.default.object\n};\n\nexports.default = SEO;\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nvar _SEO = __webpack_require__(7);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(5);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ChannelLoginForm = __webpack_require__(15);\n\nvar _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);\n\nvar _ChannelCreateForm = __webpack_require__(16);\n\nvar _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar LoginPage = function (_React$Component) {\n _inherits(LoginPage, _React$Component);\n\n function LoginPage() {\n _classCallCheck(this, LoginPage);\n\n return _possibleConstructorReturn(this, (LoginPage.__proto__ || Object.getPrototypeOf(LoginPage)).apply(this, arguments));\n }\n\n _createClass(LoginPage, [{\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(newProps) {\n // re-route the user to the homepage if the user is logged in\n if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {\n this.props.history.push('/');\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: 'Login', pageUri: 'login' }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'p',\n null,\n 'Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you\\'re ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: '/@catalonia2017:43dcf47163caa21d8404d9fe9b30f78ef3e146a8' },\n 'documenting important events'\n ),\n ', or making a public repository for ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: '/@catGifs' },\n 'cat gifs'\n ),\n ' (password: \\'1234\\'), try creating a channel for it!'\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'h3',\n { className: 'h3--no-bottom' },\n 'Log in to an existing channel:'\n ),\n _react2.default.createElement(_ChannelLoginForm2.default, null),\n _react2.default.createElement(\n 'h3',\n { className: 'h3--no-bottom' },\n 'Create a brand new channel:'\n ),\n _react2.default.createElement(_ChannelCreateForm2.default, null)\n )\n )\n )\n );\n }\n }]);\n\n return LoginPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _reactRouterDom.withRouter)(LoginPage);\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _request = __webpack_require__(8);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelLoginForm = function (_React$Component) {\n _inherits(ChannelLoginForm, _React$Component);\n\n function ChannelLoginForm(props) {\n _classCallCheck(this, ChannelLoginForm);\n\n var _this = _possibleConstructorReturn(this, (ChannelLoginForm.__proto__ || Object.getPrototypeOf(ChannelLoginForm)).call(this, props));\n\n _this.state = {\n error: null,\n name: '',\n password: ''\n };\n _this.handleInput = _this.handleInput.bind(_this);\n _this.loginToChannel = _this.loginToChannel.bind(_this);\n return _this;\n }\n\n _createClass(ChannelLoginForm, [{\n key: 'handleInput',\n value: function handleInput(event) {\n var name = event.target.name;\n var value = event.target.value;\n this.setState(_defineProperty({}, name, value));\n }\n }, {\n key: 'loginToChannel',\n value: function loginToChannel(event) {\n var _this2 = this;\n\n event.preventDefault();\n var params = {\n method: 'POST',\n body: JSON.stringify({ username: this.state.name, password: this.state.password }),\n headers: new Headers({\n 'Content-Type': 'application/json'\n }),\n credentials: 'include'\n };\n (0, _request2.default)('login', params).then(function (_ref) {\n var success = _ref.success,\n channelName = _ref.channelName,\n shortChannelId = _ref.shortChannelId,\n channelClaimId = _ref.channelClaimId,\n message = _ref.message;\n\n if (success) {\n _this2.props.onChannelLogin(channelName, shortChannelId, channelClaimId);\n } else {\n _this2.setState({ 'error': message });\n };\n }).catch(function (error) {\n if (error.message) {\n _this2.setState({ 'error': error.message });\n } else {\n _this2.setState({ 'error': error });\n }\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'form',\n { id: 'channel-login-form' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-login-name-input' },\n 'Name:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary flex-container--row flex-container--left-bottom' },\n _react2.default.createElement(\n 'span',\n null,\n '@'\n ),\n _react2.default.createElement('input', { type: 'text', id: 'channel-login-name-input', className: 'input-text', name: 'name', placeholder: 'Your Channel Name', value: this.state.channelName, onChange: this.handleInput })\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-login-password-input' },\n 'Password:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary' },\n _react2.default.createElement('input', { type: 'password', id: 'channel-login-password-input', name: 'password', className: 'input-text', placeholder: '', value: this.state.channelPassword, onChange: this.handleInput })\n )\n )\n ),\n this.state.error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.state.error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Enter the name and password for your channel'\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary', onClick: this.loginToChannel },\n 'Authenticate'\n )\n )\n );\n }\n }]);\n\n return ChannelLoginForm;\n}(_react2.default.Component);\n\nexports.default = ChannelLoginForm;\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(10);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _request = __webpack_require__(8);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelCreateForm = function (_React$Component) {\n _inherits(ChannelCreateForm, _React$Component);\n\n function ChannelCreateForm(props) {\n _classCallCheck(this, ChannelCreateForm);\n\n var _this = _possibleConstructorReturn(this, (ChannelCreateForm.__proto__ || Object.getPrototypeOf(ChannelCreateForm)).call(this, props));\n\n _this.state = {\n error: null,\n channel: '',\n password: '',\n status: null\n };\n _this.handleChannelInput = _this.handleChannelInput.bind(_this);\n _this.handleInput = _this.handleInput.bind(_this);\n _this.createChannel = _this.createChannel.bind(_this);\n return _this;\n }\n\n _createClass(ChannelCreateForm, [{\n key: 'cleanseChannelInput',\n value: function cleanseChannelInput(input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n }, {\n key: 'handleChannelInput',\n value: function handleChannelInput(event) {\n var value = event.target.value;\n value = this.cleanseChannelInput(value);\n this.setState({ channel: value });\n if (value) {\n this.updateIsChannelAvailable(value);\n } else {\n this.setState({ error: 'Please enter a channel name' });\n }\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var name = event.target.name;\n var value = event.target.value;\n this.setState(_defineProperty({}, name, value));\n }\n }, {\n key: 'updateIsChannelAvailable',\n value: function updateIsChannelAvailable(channel) {\n var _this2 = this;\n\n var channelWithAtSymbol = '@' + channel;\n (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol).then(function () {\n _this2.setState({ 'error': null });\n }).catch(function (error) {\n _this2.setState({ 'error': error.message });\n });\n }\n }, {\n key: 'checkIsChannelAvailable',\n value: function checkIsChannelAvailable(channel) {\n var channelWithAtSymbol = '@' + channel;\n return (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol);\n }\n }, {\n key: 'checkIsPasswordProvided',\n value: function checkIsPasswordProvided(password) {\n return new Promise(function (resolve, reject) {\n if (!password || password.length < 1) {\n return reject(new Error('Please provide a password'));\n }\n resolve();\n });\n }\n }, {\n key: 'makePublishChannelRequest',\n value: function makePublishChannelRequest(username, password) {\n var params = {\n method: 'POST',\n body: JSON.stringify({ username: username, password: password }),\n headers: new Headers({\n 'Content-Type': 'application/json'\n }),\n credentials: 'include'\n };\n return new Promise(function (resolve, reject) {\n (0, _request2.default)('/signup', params).then(function (result) {\n return resolve(result);\n }).catch(function (error) {\n reject(new Error('Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ' + error.message));\n });\n });\n }\n }, {\n key: 'createChannel',\n value: function createChannel(event) {\n var _this3 = this;\n\n event.preventDefault();\n this.checkIsPasswordProvided(this.state.password).then(function () {\n return _this3.checkIsChannelAvailable(_this3.state.channel);\n }).then(function () {\n _this3.setState({ status: 'We are publishing your new channel. Sit tight...' });\n return _this3.makePublishChannelRequest(_this3.state.channel, _this3.state.password);\n }).then(function (result) {\n _this3.setState({ status: null });\n _this3.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);\n }).catch(function (error) {\n if (error.message) {\n _this3.setState({ 'error': error.message, status: null });\n } else {\n _this3.setState({ 'error': error, status: null });\n };\n });\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n !this.state.status ? _react2.default.createElement(\n 'form',\n { id: 'publish-channel-form' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'new-channel-name' },\n 'Name:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary flex-container--row flex-container--left-bottom span--relative' },\n _react2.default.createElement(\n 'span',\n null,\n '@'\n ),\n _react2.default.createElement('input', { type: 'text', name: 'channel', id: 'new-channel-name', className: 'input-text', placeholder: 'exampleChannelName', value: this.state.channel, onChange: this.handleChannelInput }),\n this.state.channel && !this.state.error && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--success span--absolute' },\n '\\u2713'\n ),\n this.state.error && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },\n '\\u2716'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide row--short' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--sml-10' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'new-channel-password' },\n 'Password:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--6 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary' },\n _react2.default.createElement('input', { type: 'password', name: 'password', id: 'new-channel-password', className: 'input-text', placeholder: '', value: this.state.password, onChange: this.handleInput })\n )\n )\n ),\n this.state.error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.state.error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Choose a name and password for your channel'\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary', onClick: this.createChannel },\n 'Create Channel'\n )\n )\n ) : _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n this.state.status\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 })\n )\n );\n }\n }]);\n\n return ChannelCreateForm;\n}(_react2.default.Component);\n\nexports.default = ChannelCreateForm;\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ErrorPage = __webpack_require__(12);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _ShowAssetLite = __webpack_require__(27);\n\nvar _ShowAssetLite2 = _interopRequireDefault(_ShowAssetLite);\n\nvar _ShowAssetDetails = __webpack_require__(29);\n\nvar _ShowAssetDetails2 = _interopRequireDefault(_ShowAssetDetails);\n\nvar _ShowChannel = __webpack_require__(32);\n\nvar _ShowChannel2 = _interopRequireDefault(_ShowChannel);\n\nvar _show_request_types = __webpack_require__(112);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowPage = function (_React$Component) {\n _inherits(ShowPage, _React$Component);\n\n function ShowPage() {\n _classCallCheck(this, ShowPage);\n\n return _possibleConstructorReturn(this, (ShowPage.__proto__ || Object.getPrototypeOf(ShowPage)).apply(this, arguments));\n }\n\n _createClass(ShowPage, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.props.onHandleShowPageUri(this.props.match.params);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n if (nextProps.match.params !== this.props.match.params) {\n this.props.onHandleShowPageUri(nextProps.match.params);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n error = _props.error,\n requestType = _props.requestType;\n\n if (error) {\n return _react2.default.createElement(_ErrorPage2.default, { error: error });\n }\n switch (requestType) {\n case _show_request_types.CHANNEL:\n return _react2.default.createElement(_ShowChannel2.default, null);\n case _show_request_types.ASSET_LITE:\n return _react2.default.createElement(_ShowAssetLite2.default, null);\n case _show_request_types.ASSET_DETAILS:\n return _react2.default.createElement(_ShowAssetDetails2.default, null);\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'loading...'\n );\n }\n }\n }]);\n\n return ShowPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowPage;\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(7);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nvar _AssetDisplay = __webpack_require__(17);\n\nvar _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowLite = function (_React$Component) {\n _inherits(ShowLite, _React$Component);\n\n function ShowLite() {\n _classCallCheck(this, ShowLite);\n\n return _possibleConstructorReturn(this, (ShowLite.__proto__ || Object.getPrototypeOf(ShowLite)).apply(this, arguments));\n }\n\n _createClass(ShowLite, [{\n key: 'render',\n value: function render() {\n var asset = this.props.asset;\n\n if (asset) {\n var _asset$claimData = asset.claimData,\n name = _asset$claimData.name,\n claimId = _asset$claimData.claimId;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column flex-container--center-center show-lite-container' },\n _react2.default.createElement(_SEO2.default, { pageTitle: name, asset: asset }),\n _react2.default.createElement(_AssetDisplay2.default, null),\n _react2.default.createElement(\n _reactRouterDom.Link,\n { id: 'asset-boilerpate', className: 'link--primary fine-print', to: '/' + claimId + '/' + name },\n 'hosted via Spee.ch'\n )\n );\n }\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded flex-container--column flex-container--center-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'loading asset data...'\n )\n );\n }\n }]);\n\n return ShowLite;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowLite;\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(10);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _asset_display_states = __webpack_require__(107);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AssetDisplay = function (_React$Component) {\n _inherits(AssetDisplay, _React$Component);\n\n function AssetDisplay() {\n _classCallCheck(this, AssetDisplay);\n\n return _possibleConstructorReturn(this, (AssetDisplay.__proto__ || Object.getPrototypeOf(AssetDisplay)).apply(this, arguments));\n }\n\n _createClass(AssetDisplay, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props$asset$claimDat = this.props.asset.claimData,\n name = _props$asset$claimDat.name,\n claimId = _props$asset$claimDat.claimId;\n\n this.props.onFileRequest(name, claimId);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n status = _props.status,\n error = _props.error,\n _props$asset$claimDat2 = _props.asset.claimData,\n name = _props$asset$claimDat2.name,\n claimId = _props$asset$claimDat2.claimId,\n contentType = _props$asset$claimDat2.contentType,\n fileExt = _props$asset$claimDat2.fileExt,\n thumbnail = _props$asset$claimDat2.thumbnail;\n\n return _react2.default.createElement(\n 'div',\n { id: 'asset-display-component' },\n status === _asset_display_states.LOCAL_CHECK && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Checking to see if Spee.ch has your asset locally...'\n )\n ),\n status === _asset_display_states.UNAVAILABLE && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Sit tight, we\\'re searching the LBRY blockchain for your asset!'\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 }),\n _react2.default.createElement(\n 'p',\n null,\n 'Curious what magic is happening here? ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },\n 'Learn more.'\n )\n )\n ),\n status === _asset_display_states.ERROR && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'p',\n null,\n 'Unfortunately, we couldn\\'t download your asset from LBRY. You can help us out by sharing the below error message in the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },\n 'LBRY discord'\n ),\n '.'\n ),\n _react2.default.createElement(\n 'i',\n null,\n _react2.default.createElement(\n 'p',\n { id: 'error-message' },\n error\n )\n )\n ),\n status === _asset_display_states.AVAILABLE && function () {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n return _react2.default.createElement('img', {\n className: 'asset',\n src: '/' + claimId + '/' + name + '.' + fileExt,\n alt: name });\n case 'image/gif':\n return _react2.default.createElement('img', {\n className: 'asset',\n src: '/' + claimId + '/' + name + '.' + fileExt,\n alt: name\n });\n case 'video/mp4':\n return _react2.default.createElement(\n 'video',\n { className: 'asset video', controls: true, poster: thumbnail },\n _react2.default.createElement('source', {\n src: '/' + claimId + '/' + name + '.' + fileExt\n }),\n _react2.default.createElement(\n 'p',\n null,\n 'Your browser does not support the ',\n _react2.default.createElement(\n 'code',\n null,\n 'video'\n ),\n ' element.'\n )\n );\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'Unsupported file type'\n );\n }\n }()\n );\n }\n }]);\n\n return AssetDisplay;\n}(_react2.default.Component);\n\n;\n\nexports.default = AssetDisplay;\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(7);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _NavBar = __webpack_require__(5);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ErrorPage = __webpack_require__(12);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _AssetTitle = __webpack_require__(30);\n\nvar _AssetTitle2 = _interopRequireDefault(_AssetTitle);\n\nvar _AssetDisplay = __webpack_require__(17);\n\nvar _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);\n\nvar _AssetInfo = __webpack_require__(31);\n\nvar _AssetInfo2 = _interopRequireDefault(_AssetInfo);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowAssetDetails = function (_React$Component) {\n _inherits(ShowAssetDetails, _React$Component);\n\n function ShowAssetDetails() {\n _classCallCheck(this, ShowAssetDetails);\n\n return _possibleConstructorReturn(this, (ShowAssetDetails.__proto__ || Object.getPrototypeOf(ShowAssetDetails)).apply(this, arguments));\n }\n\n _createClass(ShowAssetDetails, [{\n key: 'render',\n value: function render() {\n var asset = this.props.asset;\n\n if (asset) {\n var name = asset.claimData.name;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: name + ' - details', asset: asset }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_AssetTitle2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded show-details-container' },\n _react2.default.createElement(_AssetDisplay2.default, null)\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(_AssetInfo2.default, null)\n )\n )\n )\n );\n };\n return _react2.default.createElement(_ErrorPage2.default, { error: 'loading asset data...' });\n }\n }]);\n\n return ShowAssetDetails;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowAssetDetails;\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AssetTitle = function AssetTitle(_ref) {\n var title = _ref.title;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'span',\n { className: 'text--large' },\n title\n )\n );\n};\n\nexports.default = AssetTitle;\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AssetInfo = function (_React$Component) {\n _inherits(AssetInfo, _React$Component);\n\n function AssetInfo(props) {\n _classCallCheck(this, AssetInfo);\n\n var _this = _possibleConstructorReturn(this, (AssetInfo.__proto__ || Object.getPrototypeOf(AssetInfo)).call(this, props));\n\n _this.copyToClipboard = _this.copyToClipboard.bind(_this);\n return _this;\n }\n\n _createClass(AssetInfo, [{\n key: 'copyToClipboard',\n value: function copyToClipboard(event) {\n var elementToCopy = event.target.dataset.elementtocopy;\n var element = document.getElementById(elementToCopy);\n element.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n this.setState({ error: 'Oops, unable to copy' });\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _props$asset = this.props.asset,\n shortId = _props$asset.shortId,\n _props$asset$claimDat = _props$asset.claimData,\n channelName = _props$asset$claimDat.channelName,\n certificateId = _props$asset$claimDat.certificateId,\n description = _props$asset$claimDat.description,\n name = _props$asset$claimDat.name,\n claimId = _props$asset$claimDat.claimId,\n fileExt = _props$asset$claimDat.fileExt,\n contentType = _props$asset$claimDat.contentType,\n thumbnail = _props$asset$claimDat.thumbnail,\n host = _props$asset$claimDat.host;\n\n return _react2.default.createElement(\n 'div',\n null,\n channelName && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Channel:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: '/' + channelName + ':' + certificateId },\n channelName\n )\n )\n )\n ),\n description && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n description\n )\n ),\n _react2.default.createElement(\n 'div',\n { id: 'show-share-buttons' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Share:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n {\n className: 'row row--short row--wide flex-container--row flex-container--space-between-bottom flex-container--wrap' },\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://twitter.com/intent/tweet?text=' + host + '/' + shortId + '/' + name },\n 'twitter'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://www.facebook.com/sharer/sharer.php?u=' + host + '/' + shortId + '/' + name },\n 'facebook'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'http://tumblr.com/widgets/share/tool?canonicalUrl=' + host + '/' + shortId + '/' + name },\n 'tumblr'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://www.reddit.com/submit?url=' + host + '/' + shortId + '/' + name + '&title=' + name },\n 'reddit'\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--wide row--no-top' },\n _react2.default.createElement(\n 'div',\n { id: 'show-short-link' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Link:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--short row--wide' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'div',\n { className: 'input-error', id: 'input-error-copy-short-link', hidden: 'true' },\n 'error here'\n ),\n _react2.default.createElement('input', { type: 'text', id: 'short-link', className: 'input-disabled input-text--full-width', readOnly: true,\n spellCheck: 'false',\n value: host + '/' + shortId + '/' + name + '.' + fileExt,\n onClick: this.select })\n ),\n _react2.default.createElement('div', { className: 'column column--1' }),\n _react2.default.createElement(\n 'div',\n { className: 'column column--2' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary button--wide', 'data-elementtocopy': 'short-link',\n onClick: this.copyToClipboard },\n 'copy'\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { id: 'show-embed-code' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--2 column--med-10' },\n _react2.default.createElement(\n 'span',\n { className: 'text' },\n 'Embed:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--8 column--med-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--short row--wide' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'div',\n { className: 'input-error', id: 'input-error-copy-embed-text', hidden: 'true' },\n 'error here'\n ),\n contentType === 'video/mp4' ? _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,\n onClick: this.select, spellCheck: 'false',\n value: '<video width=\"100%\" controls poster=\"' + thumbnail + '\" src=\"' + host + '/' + claimId + '/' + name + '.' + fileExt + '\"/></video>' }) : _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,\n onClick: this.select, spellCheck: 'false',\n value: '<img src=\"' + host + '/' + claimId + '/' + name + '.' + fileExt + '\"/>'\n })\n ),\n _react2.default.createElement('div', { className: 'column column--1' }),\n _react2.default.createElement(\n 'div',\n { className: 'column column--2' },\n _react2.default.createElement(\n 'button',\n { className: 'button--primary button--wide', 'data-elementtocopy': 'embed-text',\n onClick: this.copyToClipboard },\n 'copy'\n )\n )\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'flex-container--row flex-container--space-between-bottom' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { className: 'link--primary', to: '/' + shortId + '/' + name + '.' + fileExt },\n _react2.default.createElement(\n 'span',\n {\n className: 'text' },\n 'Direct Link'\n )\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: host + '/' + claimId + '/' + name + '.' + fileExt, download: name },\n 'Download'\n ),\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://lbry.io/dmca' },\n 'Report'\n )\n )\n );\n }\n }]);\n\n return AssetInfo;\n}(_react2.default.Component);\n\n;\n\nexports.default = AssetInfo;\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SEO = __webpack_require__(7);\n\nvar _SEO2 = _interopRequireDefault(_SEO);\n\nvar _ErrorPage = __webpack_require__(12);\n\nvar _ErrorPage2 = _interopRequireDefault(_ErrorPage);\n\nvar _NavBar = __webpack_require__(5);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _ChannelClaimsDisplay = __webpack_require__(33);\n\nvar _ChannelClaimsDisplay2 = _interopRequireDefault(_ChannelClaimsDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ShowChannel = function (_React$Component) {\n _inherits(ShowChannel, _React$Component);\n\n function ShowChannel() {\n _classCallCheck(this, ShowChannel);\n\n return _possibleConstructorReturn(this, (ShowChannel.__proto__ || Object.getPrototypeOf(ShowChannel)).apply(this, arguments));\n }\n\n _createClass(ShowChannel, [{\n key: 'render',\n value: function render() {\n var channel = this.props.channel;\n\n if (channel) {\n var name = channel.name,\n longId = channel.longId,\n shortId = channel.shortId;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_SEO2.default, { pageTitle: name, channel: channel }),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--tall row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(\n 'h2',\n null,\n 'channel name: ',\n name\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'full channel id: ',\n longId\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'short channel id: ',\n shortId\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_ChannelClaimsDisplay2.default, null)\n )\n )\n );\n };\n return _react2.default.createElement(_ErrorPage2.default, { error: 'loading channel data...' });\n }\n }]);\n\n return ShowChannel;\n}(_react2.default.Component);\n\n;\n\nexports.default = ShowChannel;\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _AssetPreview = __webpack_require__(34);\n\nvar _AssetPreview2 = _interopRequireDefault(_AssetPreview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelClaimsDisplay = function (_React$Component) {\n _inherits(ChannelClaimsDisplay, _React$Component);\n\n function ChannelClaimsDisplay(props) {\n _classCallCheck(this, ChannelClaimsDisplay);\n\n var _this = _possibleConstructorReturn(this, (ChannelClaimsDisplay.__proto__ || Object.getPrototypeOf(ChannelClaimsDisplay)).call(this, props));\n\n _this.showNextResultsPage = _this.showNextResultsPage.bind(_this);\n _this.showPreviousResultsPage = _this.showPreviousResultsPage.bind(_this);\n return _this;\n }\n\n _createClass(ChannelClaimsDisplay, [{\n key: 'showPreviousResultsPage',\n value: function showPreviousResultsPage() {\n var currentPage = this.props.channel.claimsData.currentPage;\n\n var previousPage = parseInt(currentPage) - 1;\n this.showNewPage(previousPage);\n }\n }, {\n key: 'showNextResultsPage',\n value: function showNextResultsPage() {\n var currentPage = this.props.channel.claimsData.currentPage;\n\n var nextPage = parseInt(currentPage) + 1;\n this.showNewPage(nextPage);\n }\n }, {\n key: 'showNewPage',\n value: function showNewPage(page) {\n var _props = this.props,\n channelKey = _props.channelKey,\n _props$channel = _props.channel,\n name = _props$channel.name,\n longId = _props$channel.longId;\n\n this.props.onUpdateChannelClaims(channelKey, name, longId, page);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props$channel$claims = this.props.channel.claimsData,\n claims = _props$channel$claims.claims,\n currentPage = _props$channel$claims.currentPage,\n totalPages = _props$channel$claims.totalPages;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall' },\n claims.length > 0 ? _react2.default.createElement(\n 'div',\n null,\n claims.map(function (claim, index) {\n return _react2.default.createElement(_AssetPreview2.default, {\n claimData: claim,\n key: claim.name + '-' + index\n });\n }),\n _react2.default.createElement(\n 'div',\n null,\n currentPage > 1 && _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.showPreviousResultsPage },\n 'Previous Page'\n ),\n currentPage < totalPages && _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.showNextResultsPage },\n 'Next Page'\n )\n )\n ) : _react2.default.createElement(\n 'p',\n null,\n 'There are no claims in this channel'\n )\n );\n }\n }]);\n\n return ChannelClaimsDisplay;\n}(_react2.default.Component);\n\n;\n\nexports.default = ChannelClaimsDisplay;\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AssetPreview = function AssetPreview(_ref) {\n var defaultThumbnail = _ref.defaultThumbnail,\n _ref$claimData = _ref.claimData,\n name = _ref$claimData.name,\n claimId = _ref$claimData.claimId,\n fileExt = _ref$claimData.fileExt,\n contentType = _ref$claimData.contentType,\n thumbnail = _ref$claimData.thumbnail;\n\n var directSourceLink = claimId + '/' + name + '.' + fileExt;\n var showUrlLink = '/' + claimId + '/' + name;\n return _react2.default.createElement(\n 'div',\n { className: 'asset-holder' },\n _react2.default.createElement(\n _reactRouterDom.Link,\n { to: showUrlLink },\n function () {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'image/gif':\n return _react2.default.createElement('img', {\n className: 'asset-preview',\n src: directSourceLink,\n alt: name\n });\n case 'video/mp4':\n return _react2.default.createElement('img', {\n className: 'asset-preview video',\n src: thumbnail || defaultThumbnail,\n alt: name\n });\n default:\n return _react2.default.createElement(\n 'p',\n null,\n 'unsupported file type'\n );\n }\n }()\n )\n );\n};\n\nexports.default = AssetPreview;\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _NavBar = __webpack_require__(5);\n\nvar _NavBar2 = _interopRequireDefault(_NavBar);\n\nvar _reactHelmet = __webpack_require__(48);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar FourOhForPage = function (_React$Component) {\n _inherits(FourOhForPage, _React$Component);\n\n function FourOhForPage() {\n _classCallCheck(this, FourOhForPage);\n\n return _possibleConstructorReturn(this, (FourOhForPage.__proto__ || Object.getPrototypeOf(FourOhForPage)).apply(this, arguments));\n }\n\n _createClass(FourOhForPage, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n title = _props.title,\n host = _props.host;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n _reactHelmet2.default,\n null,\n _react2.default.createElement(\n 'title',\n null,\n title,\n ' - 404'\n ),\n _react2.default.createElement('link', { rel: 'canonical', href: host + '/404' })\n ),\n _react2.default.createElement(_NavBar2.default, null),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(\n 'h2',\n null,\n '404'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'That page does not exist'\n )\n )\n );\n }\n }]);\n\n return FourOhForPage;\n}(_react2.default.Component);\n\n;\n\nexports.default = FourOhForPage;\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _require = __webpack_require__(98),\n lstatSync = _require.lstatSync,\n readdirSync = _require.readdirSync;\n\nvar _require2 = __webpack_require__(51),\n join = _require2.join;\n\nvar getSubDirectoryNames = exports.getSubDirectoryNames = function getSubDirectoryNames(root) {\n return readdirSync(root).filter(function (name) {\n var fullPath = join(root, name);\n return lstatSync(fullPath).isDirectory();\n });\n};\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ChannelLoginForm = __webpack_require__(15);\n\nvar _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);\n\nvar _ChannelCreateForm = __webpack_require__(16);\n\nvar _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);\n\nvar _publish_channel_select_states = __webpack_require__(105);\n\nvar states = _interopRequireWildcard(_publish_channel_select_states);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ChannelSelect = function (_React$Component) {\n _inherits(ChannelSelect, _React$Component);\n\n function ChannelSelect(props) {\n _classCallCheck(this, ChannelSelect);\n\n var _this = _possibleConstructorReturn(this, (ChannelSelect.__proto__ || Object.getPrototypeOf(ChannelSelect)).call(this, props));\n\n _this.toggleAnonymousPublish = _this.toggleAnonymousPublish.bind(_this);\n _this.handleSelection = _this.handleSelection.bind(_this);\n return _this;\n }\n\n _createClass(ChannelSelect, [{\n key: 'toggleAnonymousPublish',\n value: function toggleAnonymousPublish(event) {\n var value = event.target.value;\n if (value === 'anonymous') {\n this.props.onPublishInChannelChange(false);\n } else {\n this.props.onPublishInChannelChange(true);\n }\n }\n }, {\n key: 'handleSelection',\n value: function handleSelection(event) {\n var selectedOption = event.target.selectedOptions[0].value;\n this.props.onChannelSelect(selectedOption);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'form',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10' },\n _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'anonymous-radio', className: 'input-radio', value: 'anonymous', checked: !this.props.publishInChannel, onChange: this.toggleAnonymousPublish }),\n _react2.default.createElement(\n 'label',\n { className: 'label label--pointer', htmlFor: 'anonymous-radio' },\n 'Anonymous'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--med-10' },\n _react2.default.createElement('input', { type: 'radio', name: 'anonymous-or-channel', id: 'channel-radio', className: 'input-radio', value: 'in a channel', checked: this.props.publishInChannel, onChange: this.toggleAnonymousPublish }),\n _react2.default.createElement(\n 'label',\n { className: 'label label--pointer', htmlFor: 'channel-radio' },\n 'In a channel'\n )\n ),\n this.props.channelError ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n this.props.channelError\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Publish anonymously or in a channel'\n )\n ),\n this.props.publishInChannel && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'column column--3' },\n _react2.default.createElement(\n 'label',\n { className: 'label', htmlFor: 'channel-name-select' },\n 'Channel:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement(\n 'select',\n { type: 'text', id: 'channel-name-select', className: 'select select--arrow', value: this.props.selectedChannel, onChange: this.handleSelection },\n this.props.loggedInChannelName && _react2.default.createElement(\n 'option',\n { value: this.props.loggedInChannelName, id: 'publish-channel-select-channel-option' },\n this.props.loggedInChannelName\n ),\n _react2.default.createElement(\n 'option',\n { value: states.LOGIN },\n 'Existing'\n ),\n _react2.default.createElement(\n 'option',\n { value: states.CREATE },\n 'New'\n )\n )\n ),\n this.props.selectedChannel === states.LOGIN && _react2.default.createElement(_ChannelLoginForm2.default, null),\n this.props.selectedChannel === states.CREATE && _react2.default.createElement(_ChannelCreateForm2.default, null)\n )\n );\n }\n }]);\n\n return ChannelSelect;\n}(_react2.default.Component);\n\nexports.default = ChannelSelect;\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _file = __webpack_require__(60);\n\nvar _PublishPreview = __webpack_require__(37);\n\nvar _PublishPreview2 = _interopRequireDefault(_PublishPreview);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Dropzone = function (_React$Component) {\n _inherits(Dropzone, _React$Component);\n\n function Dropzone(props) {\n _classCallCheck(this, Dropzone);\n\n var _this = _possibleConstructorReturn(this, (Dropzone.__proto__ || Object.getPrototypeOf(Dropzone)).call(this, props));\n\n _this.state = {\n dragOver: false,\n mouseOver: false,\n dimPreview: false\n };\n _this.handleDrop = _this.handleDrop.bind(_this);\n _this.handleDragOver = _this.handleDragOver.bind(_this);\n _this.handleDragEnd = _this.handleDragEnd.bind(_this);\n _this.handleDragEnter = _this.handleDragEnter.bind(_this);\n _this.handleDragLeave = _this.handleDragLeave.bind(_this);\n _this.handleMouseEnter = _this.handleMouseEnter.bind(_this);\n _this.handleMouseLeave = _this.handleMouseLeave.bind(_this);\n _this.handleClick = _this.handleClick.bind(_this);\n _this.handleFileInput = _this.handleFileInput.bind(_this);\n _this.chooseFile = _this.chooseFile.bind(_this);\n return _this;\n }\n\n _createClass(Dropzone, [{\n key: 'handleDrop',\n value: function handleDrop(event) {\n event.preventDefault();\n this.setState({ dragOver: false });\n // if dropped items aren't files, reject them\n var dt = event.dataTransfer;\n if (dt.items) {\n if (dt.items[0].kind === 'file') {\n var droppedFile = dt.items[0].getAsFile();\n this.chooseFile(droppedFile);\n }\n }\n }\n }, {\n key: 'handleDragOver',\n value: function handleDragOver(event) {\n event.preventDefault();\n }\n }, {\n key: 'handleDragEnd',\n value: function handleDragEnd(event) {\n var dt = event.dataTransfer;\n if (dt.items) {\n for (var i = 0; i < dt.items.length; i++) {\n dt.items.remove(i);\n }\n } else {\n event.dataTransfer.clearData();\n }\n }\n }, {\n key: 'handleDragEnter',\n value: function handleDragEnter() {\n this.setState({ dragOver: true, dimPreview: true });\n }\n }, {\n key: 'handleDragLeave',\n value: function handleDragLeave() {\n this.setState({ dragOver: false, dimPreview: false });\n }\n }, {\n key: 'handleMouseEnter',\n value: function handleMouseEnter() {\n this.setState({ mouseOver: true, dimPreview: true });\n }\n }, {\n key: 'handleMouseLeave',\n value: function handleMouseLeave() {\n this.setState({ mouseOver: false, dimPreview: false });\n }\n }, {\n key: 'handleClick',\n value: function handleClick(event) {\n event.preventDefault();\n document.getElementById('file_input').click();\n }\n }, {\n key: 'handleFileInput',\n value: function handleFileInput(event) {\n event.preventDefault();\n var fileList = event.target.files;\n this.chooseFile(fileList[0]);\n }\n }, {\n key: 'chooseFile',\n value: function chooseFile(file) {\n if (file) {\n try {\n (0, _file.validateFile)(file); // validate the file's name, type, and size\n } catch (error) {\n return this.props.setFileError(error.message);\n }\n // stage it so it will be ready when the publish button is clicked\n this.props.selectFile(file);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column' },\n _react2.default.createElement(\n 'form',\n null,\n _react2.default.createElement('input', { className: 'input-file', type: 'file', id: 'file_input', name: 'file_input', accept: 'video/*,image/*', onChange: this.handleFileInput, encType: 'multipart/form-data' })\n ),\n _react2.default.createElement(\n 'div',\n { id: 'preview-dropzone', className: 'row row--padded row--tall dropzone' + (this.state.dragOver ? ' dropzone--drag-over' : ''), onDrop: this.handleDrop, onDragOver: this.handleDragOver, onDragEnd: this.handleDragEnd, onDragEnter: this.handleDragEnter, onDragLeave: this.handleDragLeave, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, onClick: this.handleClick },\n this.props.file ? _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(_PublishPreview2.default, {\n dimPreview: this.state.dimPreview,\n file: this.props.file,\n thumbnail: this.props.thumbnail\n }),\n _react2.default.createElement(\n 'div',\n { id: 'dropzone-text-holder', className: 'flex-container--column flex-container--center-center' },\n this.state.dragOver ? _react2.default.createElement(\n 'div',\n { id: 'dropzone-dragover' },\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n 'Drop it.'\n )\n ) : null,\n this.state.mouseOver ? _react2.default.createElement(\n 'div',\n { id: 'dropzone-instructions' },\n _react2.default.createElement(\n 'p',\n { className: 'info-message-placeholder info-message--failure', id: 'input-error-file-selection' },\n this.props.fileError\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'Drag & drop image or video here to publish'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'OR'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue--underlined' },\n 'CHOOSE FILE'\n )\n ) : null\n )\n ) : _react2.default.createElement(\n 'div',\n { id: 'dropzone-text-holder', className: 'flex-container--column flex-container--center-center' },\n this.state.dragOver ? _react2.default.createElement(\n 'div',\n { id: 'dropzone-dragover' },\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n 'Drop it.'\n )\n ) : _react2.default.createElement(\n 'div',\n { id: 'dropzone-instructions' },\n _react2.default.createElement(\n 'p',\n { className: 'info-message-placeholder info-message--failure', id: 'input-error-file-selection' },\n this.props.fileError\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'Drag & drop image or video here to publish'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'OR'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue--underlined' },\n 'CHOOSE FILE'\n )\n )\n )\n )\n );\n }\n }]);\n\n return Dropzone;\n}(_react2.default.Component);\n\n;\n\nexports.default = Dropzone;\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nvar _Dropzone = __webpack_require__(18);\n\nvar _Dropzone2 = _interopRequireDefault(_Dropzone);\n\nvar _PublishTitleInput = __webpack_require__(41);\n\nvar _PublishTitleInput2 = _interopRequireDefault(_PublishTitleInput);\n\nvar _PublishUrlInput = __webpack_require__(42);\n\nvar _PublishUrlInput2 = _interopRequireDefault(_PublishUrlInput);\n\nvar _PublishThumbnailInput = __webpack_require__(43);\n\nvar _PublishThumbnailInput2 = _interopRequireDefault(_PublishThumbnailInput);\n\nvar _PublishMetadataInputs = __webpack_require__(44);\n\nvar _PublishMetadataInputs2 = _interopRequireDefault(_PublishMetadataInputs);\n\nvar _ChannelSelect = __webpack_require__(39);\n\nvar _ChannelSelect2 = _interopRequireDefault(_ChannelSelect);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishDetails = function (_React$Component) {\n _inherits(PublishDetails, _React$Component);\n\n function PublishDetails(props) {\n _classCallCheck(this, PublishDetails);\n\n var _this = _possibleConstructorReturn(this, (PublishDetails.__proto__ || Object.getPrototypeOf(PublishDetails)).call(this, props));\n\n _this.onPublishSubmit = _this.onPublishSubmit.bind(_this);\n return _this;\n }\n\n _createClass(PublishDetails, [{\n key: 'onPublishSubmit',\n value: function onPublishSubmit() {\n this.props.startPublish(this.props.history);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { className: 'row row--no-bottom' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--10' },\n _react2.default.createElement(_PublishTitleInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded' },\n _react2.default.createElement(_Dropzone2.default, null)\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--5 column--sml-10 align-content-top' },\n _react2.default.createElement(\n 'div',\n { id: 'publish-active-area', className: 'row row--padded' },\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide' },\n _react2.default.createElement(_PublishUrlInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide' },\n _react2.default.createElement(_ChannelSelect2.default, null)\n ),\n this.props.file.type === 'video/mp4' && _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--wide ' },\n _react2.default.createElement(_PublishThumbnailInput2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-top row--no-bottom row--wide' },\n _react2.default.createElement(_PublishMetadataInputs2.default, null)\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--wide align-content-center' },\n _react2.default.createElement(\n 'button',\n { id: 'publish-submit', className: 'button--primary button--large', onClick: this.onPublishSubmit },\n 'Publish'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--padded row--no-bottom align-content-center' },\n _react2.default.createElement(\n 'button',\n { className: 'button--cancel', onClick: this.props.clearFile },\n 'Cancel'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--short align-content-center' },\n _react2.default.createElement(\n 'p',\n { className: 'fine-print' },\n 'By clicking \\'Publish\\', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: 'https://lbry.io/learn' },\n 'Read more.'\n )\n )\n )\n )\n )\n );\n }\n }]);\n\n return PublishDetails;\n}(_react2.default.Component);\n\n;\n\nexports.default = (0, _reactRouterDom.withRouter)(PublishDetails);\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishTitleInput = function (_React$Component) {\n _inherits(PublishTitleInput, _React$Component);\n\n function PublishTitleInput(props) {\n _classCallCheck(this, PublishTitleInput);\n\n var _this = _possibleConstructorReturn(this, (PublishTitleInput.__proto__ || Object.getPrototypeOf(PublishTitleInput)).call(this, props));\n\n _this.handleInput = _this.handleInput.bind(_this);\n return _this;\n }\n\n _createClass(PublishTitleInput, [{\n key: 'handleInput',\n value: function handleInput(e) {\n var name = e.target.name;\n var value = e.target.value;\n this.props.onMetadataChange(name, value);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement('input', { type: 'text', id: 'publish-title', className: 'input-text text--large input-text--full-width', name: 'title', placeholder: 'Give your post a title...', onChange: this.handleInput, value: this.props.title });\n }\n }]);\n\n return PublishTitleInput;\n}(_react2.default.Component);\n\nexports.default = PublishTitleInput;\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _request = __webpack_require__(8);\n\nvar _request2 = _interopRequireDefault(_request);\n\nvar _PublishUrlMiddleDisplay = __webpack_require__(38);\n\nvar _PublishUrlMiddleDisplay2 = _interopRequireDefault(_PublishUrlMiddleDisplay);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishUrlInput = function (_React$Component) {\n _inherits(PublishUrlInput, _React$Component);\n\n function PublishUrlInput(props) {\n _classCallCheck(this, PublishUrlInput);\n\n var _this = _possibleConstructorReturn(this, (PublishUrlInput.__proto__ || Object.getPrototypeOf(PublishUrlInput)).call(this, props));\n\n _this.handleInput = _this.handleInput.bind(_this);\n return _this;\n }\n\n _createClass(PublishUrlInput, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var _props = this.props,\n claim = _props.claim,\n fileName = _props.fileName;\n\n if (!claim) {\n this.setClaimName(fileName);\n }\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(_ref) {\n var claim = _ref.claim,\n fileName = _ref.fileName;\n\n // if a new file was chosen, update the claim name\n if (fileName !== this.props.fileName) {\n return this.setClaimName(fileName);\n }\n // if the claim has updated, check its availability\n if (claim !== this.props.claim) {\n this.validateClaim(claim);\n }\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var value = event.target.value;\n value = this.cleanseInput(value);\n // update the state\n this.props.onClaimChange(value);\n }\n }, {\n key: 'cleanseInput',\n value: function cleanseInput(input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n }, {\n key: 'setClaimName',\n value: function setClaimName(fileName) {\n var fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));\n var cleanClaimName = this.cleanseInput(fileNameWithoutEnding);\n this.props.onClaimChange(cleanClaimName);\n }\n }, {\n key: 'validateClaim',\n value: function validateClaim(claim) {\n var _this2 = this;\n\n if (!claim) {\n return this.props.onUrlError('Enter a url above');\n }\n (0, _request2.default)('/api/claim/availability/' + claim).then(function () {\n _this2.props.onUrlError(null);\n }).catch(function (error) {\n _this2.props.onUrlError(error.message);\n });\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n claim = _props2.claim,\n loggedInChannelName = _props2.loggedInChannelName,\n loggedInChannelShortId = _props2.loggedInChannelShortId,\n publishInChannel = _props2.publishInChannel,\n selectedChannel = _props2.selectedChannel,\n urlError = _props2.urlError;\n\n return _react2.default.createElement(\n 'div',\n { className: 'column column--10 column--sml-10' },\n _react2.default.createElement(\n 'div',\n { className: 'input-text--primary span--relative' },\n _react2.default.createElement(\n 'span',\n { className: 'url-text--secondary' },\n 'spee.ch / '\n ),\n _react2.default.createElement(_PublishUrlMiddleDisplay2.default, {\n publishInChannel: publishInChannel,\n selectedChannel: selectedChannel,\n loggedInChannelName: loggedInChannelName,\n loggedInChannelShortId: loggedInChannelShortId\n }),\n _react2.default.createElement('input', { type: 'text', id: 'claim-name-input', className: 'input-text', name: 'claim', placeholder: 'your-url-here', onChange: this.handleInput, value: claim }),\n claim && !urlError && _react2.default.createElement(\n 'span',\n { id: 'input-success-claim-name', className: 'info-message--success span--absolute' },\n '\\u2713'\n ),\n urlError && _react2.default.createElement(\n 'span',\n { id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },\n '\\u2716'\n )\n ),\n _react2.default.createElement(\n 'div',\n null,\n urlError ? _react2.default.createElement(\n 'p',\n { id: 'input-error-claim-name', className: 'info-message--failure' },\n urlError\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Choose a custom url'\n )\n )\n );\n }\n }]);\n\n return PublishUrlInput;\n}(_react2.default.Component);\n\nexports.default = PublishUrlInput;\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction dataURItoBlob(dataURI) {\n // convert base64/URLEncoded data component to raw binary data held in a string\n var byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n var ia = new Uint8Array(byteString.length);\n for (var i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], { type: mimeString });\n}\n\nvar PublishThumbnailInput = function (_React$Component) {\n _inherits(PublishThumbnailInput, _React$Component);\n\n function PublishThumbnailInput(props) {\n _classCallCheck(this, PublishThumbnailInput);\n\n var _this = _possibleConstructorReturn(this, (PublishThumbnailInput.__proto__ || Object.getPrototypeOf(PublishThumbnailInput)).call(this, props));\n\n _this.state = {\n videoSource: null,\n error: null,\n sliderMinRange: 1,\n sliderMaxRange: null,\n sliderValue: null\n };\n _this.handleVideoLoadedData = _this.handleVideoLoadedData.bind(_this);\n _this.handleSliderChange = _this.handleSliderChange.bind(_this);\n _this.createThumbnail = _this.createThumbnail.bind(_this);\n return _this;\n }\n\n _createClass(PublishThumbnailInput, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var file = this.props.file;\n\n this.setVideoSource(file);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n // if file changes\n if (nextProps.file && nextProps.file !== this.props.file) {\n var file = nextProps.file;\n\n this.setVideoSource(file);\n };\n }\n }, {\n key: 'setVideoSource',\n value: function setVideoSource(file) {\n var _this2 = this;\n\n var previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = function () {\n var dataUri = previewReader.result;\n var blob = dataURItoBlob(dataUri);\n var videoSource = URL.createObjectURL(blob);\n _this2.setState({ videoSource: videoSource });\n };\n }\n }, {\n key: 'handleVideoLoadedData',\n value: function handleVideoLoadedData(event) {\n var duration = event.target.duration;\n var totalMinutes = Math.floor(duration / 60);\n var totalSeconds = Math.floor(duration % 60);\n // set the slider\n this.setState({\n sliderMaxRange: duration * 100,\n sliderValue: duration * 100 / 2,\n totalMinutes: totalMinutes,\n totalSeconds: totalSeconds\n });\n // update the current time of the video\n var video = document.getElementById('video-thumb-player');\n video.currentTime = duration / 2;\n }\n }, {\n key: 'handleSliderChange',\n value: function handleSliderChange(event) {\n var value = parseInt(event.target.value);\n // update the slider value\n this.setState({\n sliderValue: value\n });\n // update the current time of the video\n var video = document.getElementById('video-thumb-player');\n video.currentTime = value / 100;\n }\n }, {\n key: 'createThumbnail',\n value: function createThumbnail() {\n // take a snapshot\n var video = document.getElementById('video-thumb-player');\n var canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);\n var dataUrl = canvas.toDataURL();\n var blob = dataURItoBlob(dataUrl);\n var snapshot = new File([blob], 'thumbnail.png', {\n type: 'image/png'\n });\n // set the thumbnail in redux store\n if (snapshot) {\n this.props.onNewThumbnail(snapshot);\n }\n }\n }, {\n key: 'render',\n value: function render() {\n var _state = this.state,\n error = _state.error,\n videoSource = _state.videoSource,\n sliderMinRange = _state.sliderMinRange,\n sliderMaxRange = _state.sliderMaxRange,\n sliderValue = _state.sliderValue,\n totalMinutes = _state.totalMinutes,\n totalSeconds = _state.totalSeconds;\n\n return _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'label',\n { className: 'label' },\n 'Thumbnail:'\n ),\n _react2.default.createElement('video', {\n id: 'video-thumb-player',\n preload: 'metadata',\n muted: true,\n style: { display: 'none' },\n playsInline: true,\n onLoadedData: this.handleVideoLoadedData,\n src: videoSource,\n onSeeked: this.createThumbnail\n }),\n sliderValue ? _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'flex-container--row flex-container--space-between-center', style: { width: '100%' } },\n _react2.default.createElement(\n 'span',\n { className: 'info-message' },\n '0\\'00\"'\n ),\n _react2.default.createElement(\n 'span',\n { className: 'info-message' },\n totalMinutes,\n '\\'',\n totalSeconds,\n '\"'\n )\n ),\n _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement('input', {\n type: 'range',\n min: sliderMinRange,\n max: sliderMaxRange,\n value: sliderValue,\n className: 'slider',\n onChange: this.handleSliderChange\n })\n )\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'loading... '\n ),\n error ? _react2.default.createElement(\n 'p',\n { className: 'info-message--failure' },\n error\n ) : _react2.default.createElement(\n 'p',\n { className: 'info-message' },\n 'Use slider to set thumbnail'\n )\n );\n }\n }]);\n\n return PublishThumbnailInput;\n}(_react2.default.Component);\n\nexports.default = PublishThumbnailInput;\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ExpandingTextArea = __webpack_require__(36);\n\nvar _ExpandingTextArea2 = _interopRequireDefault(_ExpandingTextArea);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishMetadataInputs = function (_React$Component) {\n _inherits(PublishMetadataInputs, _React$Component);\n\n function PublishMetadataInputs(props) {\n _classCallCheck(this, PublishMetadataInputs);\n\n var _this = _possibleConstructorReturn(this, (PublishMetadataInputs.__proto__ || Object.getPrototypeOf(PublishMetadataInputs)).call(this, props));\n\n _this.toggleShowInputs = _this.toggleShowInputs.bind(_this);\n _this.handleInput = _this.handleInput.bind(_this);\n _this.handleSelect = _this.handleSelect.bind(_this);\n return _this;\n }\n\n _createClass(PublishMetadataInputs, [{\n key: 'toggleShowInputs',\n value: function toggleShowInputs() {\n this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);\n }\n }, {\n key: 'handleInput',\n value: function handleInput(event) {\n var target = event.target;\n var value = target.type === 'checkbox' ? target.checked : target.value;\n var name = target.name;\n this.props.onMetadataChange(name, value);\n }\n }, {\n key: 'handleSelect',\n value: function handleSelect(event) {\n var name = event.target.name;\n var selectedOption = event.target.selectedOptions[0].value;\n this.props.onMetadataChange(name, selectedOption);\n }\n }, {\n key: 'render',\n value: function render() {\n return _react2.default.createElement(\n 'div',\n { id: 'publish-details', className: 'row row--padded row--no-top row--wide' },\n this.props.showMetadataInputs && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10 align-content-top' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-license', className: 'label' },\n 'Description:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--sml-10' },\n _react2.default.createElement(_ExpandingTextArea2.default, {\n id: 'publish-description',\n className: 'textarea textarea--primary textarea--full-width',\n rows: 1,\n maxLength: 2000,\n style: { maxHeight: 200 },\n name: 'description',\n placeholder: 'Optional description',\n value: this.props.description,\n onChange: this.handleInput })\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3 column--med-10' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-license', className: 'label' },\n 'License:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7 column--sml-10' },\n _react2.default.createElement(\n 'select',\n { type: 'text', name: 'license', id: 'publish-license', className: 'select select--primary', onChange: this.handleSelect },\n _react2.default.createElement(\n 'option',\n { value: ' ' },\n 'Unspecified'\n ),\n _react2.default.createElement(\n 'option',\n { value: 'Public Domain' },\n 'Public Domain'\n ),\n _react2.default.createElement(\n 'option',\n { value: 'Creative Commons' },\n 'Creative Commons'\n )\n )\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'row row--no-top' },\n _react2.default.createElement(\n 'div',\n { className: 'column column--3' },\n _react2.default.createElement(\n 'label',\n { htmlFor: 'publish-nsfw', className: 'label' },\n 'Mature:'\n )\n ),\n _react2.default.createElement(\n 'div',\n { className: 'column column--7' },\n _react2.default.createElement('input', { className: 'input-checkbox', type: 'checkbox', id: 'publish-nsfw', name: 'nsfw', value: this.props.nsfw, onChange: this.handleInput })\n )\n )\n ),\n _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: this.toggleShowInputs },\n this.props.showMetadataInputs ? 'less' : 'more'\n )\n );\n }\n }]);\n\n return PublishMetadataInputs;\n}(_react2.default.Component);\n\nexports.default = PublishMetadataInputs;\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishDisabledMessage = function (_React$Component) {\n _inherits(PublishDisabledMessage, _React$Component);\n\n function PublishDisabledMessage() {\n _classCallCheck(this, PublishDisabledMessage);\n\n return _possibleConstructorReturn(this, (PublishDisabledMessage.__proto__ || Object.getPrototypeOf(PublishDisabledMessage)).apply(this, arguments));\n }\n\n _createClass(PublishDisabledMessage, [{\n key: 'render',\n value: function render() {\n var message = this.props.message;\n console.log('this.props.message:', message);\n return _react2.default.createElement(\n 'div',\n { className: 'row dropzone--disabled row--tall flex-container--column flex-container--center-center' },\n _react2.default.createElement(\n 'p',\n { className: 'text--disabled' },\n 'Publishing is currently disabled.'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'text--disabled' },\n message\n )\n );\n }\n }]);\n\n return PublishDisabledMessage;\n}(_react2.default.Component);\n\nexports.default = PublishDisabledMessage;\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _ProgressBar = __webpack_require__(10);\n\nvar _ProgressBar2 = _interopRequireDefault(_ProgressBar);\n\nvar _publish_claim_states = __webpack_require__(170);\n\nvar publishStates = _interopRequireWildcard(_publish_claim_states);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishStatus = function (_React$Component) {\n _inherits(PublishStatus, _React$Component);\n\n function PublishStatus() {\n _classCallCheck(this, PublishStatus);\n\n return _possibleConstructorReturn(this, (PublishStatus.__proto__ || Object.getPrototypeOf(PublishStatus)).apply(this, arguments));\n }\n\n _createClass(PublishStatus, [{\n key: 'render',\n value: function render() {\n var _props = this.props,\n status = _props.status,\n message = _props.message,\n clearFile = _props.clearFile;\n\n return _react2.default.createElement(\n 'div',\n { className: 'row row--tall flex-container--column flex-container--center-center' },\n status === publishStates.LOAD_START && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'File is loading to server'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n '0%'\n )\n ),\n status === publishStates.LOADING && _react2.default.createElement(\n 'div',\n null,\n _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'File is loading to server'\n ),\n _react2.default.createElement(\n 'p',\n { className: 'blue' },\n message\n )\n )\n ),\n status === publishStates.PUBLISHING && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Upload complete. Your file is now being published on the blockchain...'\n ),\n _react2.default.createElement(_ProgressBar2.default, { size: 12 }),\n _react2.default.createElement(\n 'p',\n null,\n 'Curious what magic is happening here? ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },\n 'Learn more.'\n )\n )\n ),\n status === publishStates.SUCCESS && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Your publish is complete! You are being redirected to it now.'\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'If you are not automatically redirected, ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', target: '_blank', href: message },\n 'click here.'\n )\n )\n ),\n status === publishStates.FAILED && _react2.default.createElement(\n 'div',\n { className: 'row align-content-center' },\n _react2.default.createElement(\n 'p',\n null,\n 'Something went wrong...'\n ),\n _react2.default.createElement(\n 'p',\n null,\n _react2.default.createElement(\n 'strong',\n null,\n message\n )\n ),\n _react2.default.createElement(\n 'p',\n null,\n 'For help, post the above error text in the #speech channel on the ',\n _react2.default.createElement(\n 'a',\n { className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },\n 'lbry discord'\n )\n ),\n _react2.default.createElement(\n 'button',\n { className: 'button--secondary', onClick: clearFile },\n 'Reset'\n )\n )\n );\n }\n }]);\n\n return PublishStatus;\n}(_react2.default.Component);\n\n;\n\nexports.default = PublishStatus;\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Dropzone = __webpack_require__(18);\n\nvar _Dropzone2 = _interopRequireDefault(_Dropzone);\n\nvar _PublishDetails = __webpack_require__(40);\n\nvar _PublishDetails2 = _interopRequireDefault(_PublishDetails);\n\nvar _PublishStatus = __webpack_require__(46);\n\nvar _PublishStatus2 = _interopRequireDefault(_PublishStatus);\n\nvar _PublishDisabledMessage = __webpack_require__(45);\n\nvar _PublishDisabledMessage2 = _interopRequireDefault(_PublishDisabledMessage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PublishTool = function (_React$Component) {\n _inherits(PublishTool, _React$Component);\n\n function PublishTool() {\n _classCallCheck(this, PublishTool);\n\n return _possibleConstructorReturn(this, (PublishTool.__proto__ || Object.getPrototypeOf(PublishTool)).apply(this, arguments));\n }\n\n _createClass(PublishTool, [{\n key: 'render',\n value: function render() {\n if (this.props.disabled) {\n console.log('publish is disabled');\n return _react2.default.createElement(_PublishDisabledMessage2.default, null);\n } else {\n console.log('publish is not disabled');\n if (this.props.file) {\n if (this.props.status) {\n return _react2.default.createElement(_PublishStatus2.default, null);\n } else {\n return _react2.default.createElement(_PublishDetails2.default, null);\n }\n }\n return _react2.default.createElement(_Dropzone2.default, null);\n }\n }\n }]);\n\n return PublishTool;\n}(_react2.default.Component);\n\n;\n\nexports.default = PublishTool;\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"passport\");\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction MysqlConfig() {\n var _this = this;\n\n this.database = 'default';\n this.username = 'default';\n this.password = 'default';\n this.configure = function (config) {\n if (!config) {\n return console.log('No MySQL config received.');\n }\n var database = config.database,\n username = config.username,\n password = config.password;\n\n _this.database = database;\n _this.username = username;\n _this.password = password;\n };\n};\n\nmodule.exports = new MysqlConfig();\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction SlackConfig() {\n var _this = this;\n\n this.slackWebHook = 'default';\n this.slackErrorChannel = 'default';\n this.slackInfoChannel = 'default';\n this.configure = function (config) {\n if (!config) {\n return console.log('No slack config received.');\n }\n var slackWebHook = config.slackWebHook,\n slackErrorChannel = config.slackErrorChannel,\n slackInfoChannel = config.slackInfoChannel;\n\n _this.slackWebHook = slackWebHook;\n _this.slackErrorChannel = slackErrorChannel;\n _this.slackInfoChannel = slackInfoChannel;\n };\n};\n\nmodule.exports = new SlackConfig();\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"passport-local\");\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"sequelize\");\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n returnShortId: function returnShortId(claimsArray, longId) {\n var claimIndex = void 0;\n var shortId = longId.substring(0, 1); // default short id is the first letter\n var shortIdLength = 0;\n // find the index of this claim id\n claimIndex = claimsArray.findIndex(function (element) {\n return element.claimId === longId;\n });\n if (claimIndex < 0) {\n throw new Error('claim id not found in claims list');\n }\n // get an array of all claims with lower height\n var possibleMatches = claimsArray.slice(0, claimIndex);\n // remove certificates with the same prefixes until none are left.\n while (possibleMatches.length > 0) {\n shortIdLength += 1;\n shortId = longId.substring(0, shortIdLength);\n possibleMatches = possibleMatches.filter(function (element) {\n return element.claimId && element.claimId.substring(0, shortIdLength) === shortId;\n });\n }\n return shortId;\n }\n};\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar fs = __webpack_require__(98);\n\nvar _require = __webpack_require__(3),\n details = _require.details,\n publishing = _require.publishing;\n\nmodule.exports = {\n parsePublishApiRequestBody: function parsePublishApiRequestBody(_ref) {\n var name = _ref.name,\n nsfw = _ref.nsfw,\n license = _ref.license,\n title = _ref.title,\n description = _ref.description,\n thumbnail = _ref.thumbnail;\n\n // validate name\n if (!name) {\n throw new Error('no name field found in request');\n }\n var invalidNameCharacters = /[^A-Za-z0-9,-]/.exec(name);\n if (invalidNameCharacters) {\n throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and \"-\"');\n }\n // optional parameters\n nsfw = nsfw === 'true';\n license = license || null;\n title = title || null;\n description = description || null;\n thumbnail = thumbnail || null;\n // return results\n return {\n name: name,\n nsfw: nsfw,\n license: license,\n title: title,\n description: description,\n thumbnail: thumbnail\n };\n },\n parsePublishApiRequestFiles: function parsePublishApiRequestFiles(_ref2) {\n var file = _ref2.file,\n thumbnail = _ref2.thumbnail;\n\n // make sure a file was provided\n if (!file) {\n throw new Error('no file with key of [file] found in request');\n }\n if (!file.path) {\n throw new Error('no file path found');\n }\n if (!file.type) {\n throw new Error('no file type found');\n }\n if (!file.size) {\n throw new Error('no file type found');\n }\n // validate the file name\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate the file\n module.exports.validateFileTypeAndSize(file);\n // return results\n return {\n fileName: file.name,\n filePath: file.path,\n fileType: file.type,\n thumbnailFileName: thumbnail ? thumbnail.name : null,\n thumbnailFilePath: thumbnail ? thumbnail.path : null,\n thumbnailFileType: thumbnail ? thumbnail.type : null\n };\n },\n validateFileTypeAndSize: function validateFileTypeAndSize(file) {\n // check file type and size\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n logger.debug('publish > file validation > .jpeg/.jpg/.png was too big');\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .gif was too big');\n throw new Error('Sorry, .gifs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .mp4 was too big');\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n logger.debug('publish > file validation > unrecognized file type');\n throw new Error('The ' + file.type + ' content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n return file;\n },\n createBasicPublishParams: function createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail) {\n logger.debug('Creating Publish Parameters');\n // provide defaults for title\n if (title === null || title.trim() === '') {\n title = name;\n }\n // provide default for description\n if (description === null || description.trim() === '') {\n description = '';\n }\n // provide default for license\n if (license === null || license.trim() === '') {\n license = ' '; // default to empty string\n }\n // create the publish params\n var publishParams = {\n name: name,\n file_path: filePath,\n bid: 0.01,\n metadata: {\n description: description,\n title: title,\n author: details.title,\n language: 'en',\n license: license,\n nsfw: nsfw\n },\n claim_address: publishing.primaryClaimAddress\n };\n // add thumbnail to channel if video\n if (thumbnail) {\n publishParams['metadata']['thumbnail'] = thumbnail;\n }\n return publishParams;\n },\n createThumbnailPublishParams: function createThumbnailPublishParams(thumbnailFilePath, claimName, license, nsfw) {\n if (!thumbnailFilePath) {\n return;\n }\n logger.debug('Creating Thumbnail Publish Parameters');\n // create the publish params\n return {\n name: claimName + '-thumb',\n file_path: thumbnailFilePath,\n bid: 0.01,\n metadata: {\n title: claimName + ' thumbnail',\n description: 'a thumbnail for ' + claimName,\n author: details.title,\n language: 'en',\n license: license,\n nsfw: nsfw\n },\n claim_address: publishing.primaryClaimAddress,\n channel_name: publishing.thumbnailChannel,\n channel_id: publishing.thumbnailChannelId\n };\n },\n deleteTemporaryFile: function deleteTemporaryFile(filePath) {\n fs.unlink(filePath, function (err) {\n if (err) {\n logger.error('error deleting temporary file ' + filePath);\n throw err;\n }\n logger.debug('successfully deleted ' + filePath);\n });\n },\n addGetResultsToFileData: function addGetResultsToFileData(fileInfo, getResult) {\n fileInfo.fileName = getResult.file_name;\n fileInfo.filePath = getResult.download_path;\n return fileInfo;\n },\n createFileData: function createFileData(_ref3) {\n var name = _ref3.name,\n claimId = _ref3.claimId,\n outpoint = _ref3.outpoint,\n height = _ref3.height,\n address = _ref3.address,\n nsfw = _ref3.nsfw,\n contentType = _ref3.contentType;\n\n return {\n name: name,\n claimId: claimId,\n outpoint: outpoint,\n height: height,\n address: address,\n fileName: '',\n filePath: '',\n fileType: contentType,\n nsfw: nsfw\n };\n }\n};\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"fs\");\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n handleErrorResponse: function handleErrorResponse(originalUrl, ip, error, res) {\n logger.error('Error on ' + originalUrl, module.exports.useObjectPropertiesIfNoKeys(error));\n\n var _module$exports$retur = module.exports.returnErrorMessageAndStatus(error),\n _module$exports$retur2 = _slicedToArray(_module$exports$retur, 2),\n status = _module$exports$retur2[0],\n message = _module$exports$retur2[1];\n\n res.status(status).json(module.exports.createErrorResponsePayload(status, message));\n },\n returnErrorMessageAndStatus: function returnErrorMessageAndStatus(error) {\n var status = void 0,\n message = void 0;\n // check for daemon being turned off\n if (error.code === 'ECONNREFUSED') {\n status = 503;\n message = 'Connection refused. The daemon may not be running.';\n // fallback for everything else\n } else {\n status = 400;\n if (error.message) {\n message = error.message;\n } else {\n message = error;\n };\n };\n return [status, message];\n },\n useObjectPropertiesIfNoKeys: function useObjectPropertiesIfNoKeys(err) {\n if (Object.keys(err).length === 0) {\n var newErrorObject = {};\n Object.getOwnPropertyNames(err).forEach(function (key) {\n newErrorObject[key] = err[key];\n });\n return newErrorObject;\n }\n return err;\n },\n createErrorResponsePayload: function createErrorResponsePayload(status, message) {\n return {\n status: status,\n success: false,\n message: message\n };\n }\n};\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar db = __webpack_require__(9);\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(145),\n returnPaginatedChannelClaims = _require.returnPaginatedChannelClaims;\n\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\nvar NO_FILE = 'NO_FILE';\n\nmodule.exports = {\n getClaimId: function getClaimId(channelName, channelClaimId, name, claimId) {\n if (channelName) {\n return module.exports.getClaimIdByChannel(channelName, channelClaimId, name);\n } else {\n return module.exports.getClaimIdByClaim(name, claimId);\n }\n },\n getClaimIdByClaim: function getClaimIdByClaim(claimName, claimId) {\n logger.debug('getClaimIdByClaim(' + claimName + ', ' + claimId + ')');\n return new Promise(function (resolve, reject) {\n db.Claim.getLongClaimId(claimName, claimId).then(function (longClaimId) {\n if (!longClaimId) {\n resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getClaimIdByChannel: function getClaimIdByChannel(channelName, channelClaimId, claimName) {\n logger.debug('getClaimIdByChannel(' + channelName + ', ' + channelClaimId + ', ' + claimName + ')');\n return new Promise(function (resolve, reject) {\n db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id\n .then(function (longChannelId) {\n if (!longChannelId) {\n return [null, null];\n }\n return Promise.all([longChannelId, db.Claim.getClaimIdByLongChannelId(longChannelId, claimName)]); // 2. get the long claim id\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n longChannelId = _ref2[0],\n longClaimId = _ref2[1];\n\n if (!longChannelId) {\n return resolve(NO_CHANNEL);\n }\n if (!longClaimId) {\n return resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getChannelData: function getChannelData(channelName, channelClaimId, page) {\n return new Promise(function (resolve, reject) {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName)]);\n }).then(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n longChannelClaimId = _ref4[0],\n shortChannelClaimId = _ref4[1];\n\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. return all the channel information\n resolve({\n channelName: channelName,\n longChannelClaimId: longChannelClaimId,\n shortChannelClaimId: shortChannelClaimId\n });\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getChannelClaims: function getChannelClaims(channelName, channelClaimId, page) {\n return new Promise(function (resolve, reject) {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Claim.getAllChannelClaims(longChannelClaimId)]);\n }).then(function (_ref5) {\n var _ref6 = _slicedToArray(_ref5, 2),\n longChannelClaimId = _ref6[0],\n channelClaimsArray = _ref6[1];\n\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. format the data for the view, including pagination\n var paginatedChannelViewData = returnPaginatedChannelClaims(channelName, longChannelClaimId, channelClaimsArray, page);\n // 4. return all the channel information and contents\n resolve(paginatedChannelViewData);\n }).catch(function (error) {\n reject(error);\n });\n });\n },\n getLocalFileRecord: function getLocalFileRecord(claimId, name) {\n return db.File.findOne({ where: { claimId: claimId, name: name } }).then(function (file) {\n if (!file) {\n return NO_FILE;\n }\n return file.dataValues;\n });\n }\n};\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _server = __webpack_require__(102);\n\nvar _redux = __webpack_require__(57);\n\nvar _reducers = __webpack_require__(103);\n\nvar _reducers2 = _interopRequireDefault(_reducers);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nvar _GAListener = __webpack_require__(13);\n\nvar _GAListener2 = _interopRequireDefault(_GAListener);\n\nvar _app = __webpack_require__(108);\n\nvar _app2 = _interopRequireDefault(_app);\n\nvar _renderFullPage = __webpack_require__(113);\n\nvar _renderFullPage2 = _interopRequireDefault(_renderFullPage);\n\nvar _reactHelmet = __webpack_require__(48);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = function (req, res) {\n var context = {};\n\n // create a new Redux store instance\n var store = (0, _redux.createStore)(_reducers2.default);\n\n // render component to a string\n var html = (0, _server.renderToString)(_react2.default.createElement(\n _reactRedux.Provider,\n { store: store },\n _react2.default.createElement(\n _reactRouterDom.StaticRouter,\n { location: req.url, context: context },\n _react2.default.createElement(\n _GAListener2.default,\n null,\n _react2.default.createElement(_app2.default, null)\n )\n )\n ));\n\n // get head tags from helmet\n var helmet = _reactHelmet2.default.renderStatic();\n\n // check for a redirect\n if (context.url) {\n // Somewhere a `<Redirect>` was rendered\n return res.redirect(301, context.url);\n } else {}\n // we're good, send the response\n\n\n // get the initial state from our Redux store\n var preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send((0, _renderFullPage2.default)(helmet, html, preloadedState));\n};\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-dom/server\");\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _redux = __webpack_require__(57);\n\nvar _publish = __webpack_require__(147);\n\nvar _publish2 = _interopRequireDefault(_publish);\n\nvar _channel = __webpack_require__(148);\n\nvar _channel2 = _interopRequireDefault(_channel);\n\nvar _show = __webpack_require__(149);\n\nvar _show2 = _interopRequireDefault(_show);\n\nvar _site = __webpack_require__(150);\n\nvar _site2 = _interopRequireDefault(_site);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = (0, _redux.combineReducers)({\n channel: _channel2.default,\n publish: _publish2.default,\n show: _show2.default,\n site: _site2.default\n});\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar FILE_SELECTED = exports.FILE_SELECTED = 'FILE_SELECTED';\nvar FILE_CLEAR = exports.FILE_CLEAR = 'FILE_CLEAR';\nvar METADATA_UPDATE = exports.METADATA_UPDATE = 'METADATA_UPDATE';\nvar CLAIM_UPDATE = exports.CLAIM_UPDATE = 'CLAIM_UPDATE';\nvar SET_PUBLISH_IN_CHANNEL = exports.SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';\nvar PUBLISH_STATUS_UPDATE = exports.PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';\nvar ERROR_UPDATE = exports.ERROR_UPDATE = 'ERROR_UPDATE';\nvar SELECTED_CHANNEL_UPDATE = exports.SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';\nvar TOGGLE_METADATA_INPUTS = exports.TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';\nvar THUMBNAIL_NEW = exports.THUMBNAIL_NEW = 'THUMBNAIL_NEW';\nvar PUBLISH_START = exports.PUBLISH_START = 'PUBLISH_START';\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOGIN = exports.LOGIN = 'Existing';\nvar CREATE = exports.CREATE = 'New';\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL_UPDATE = exports.CHANNEL_UPDATE = 'CHANNEL_UPDATE';\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOCAL_CHECK = exports.LOCAL_CHECK = 'LOCAL_CHECK';\nvar UNAVAILABLE = exports.UNAVAILABLE = 'UNAVAILABLE';\nvar ERROR = exports.ERROR = 'ERROR';\nvar AVAILABLE = exports.AVAILABLE = 'AVAILABLE';\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nvar _dynamicImport = __webpack_require__(58);\n\nvar _AboutPage = __webpack_require__(20);\n\nvar _AboutPage2 = _interopRequireDefault(_AboutPage);\n\nvar _LoginPage = __webpack_require__(23);\n\nvar _LoginPage2 = _interopRequireDefault(_LoginPage);\n\nvar _ShowPage = __webpack_require__(26);\n\nvar _ShowPage2 = _interopRequireDefault(_ShowPage);\n\nvar _FourOhFourPage = __webpack_require__(35);\n\nvar _FourOhFourPage2 = _interopRequireDefault(_FourOhFourPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar HomePage = (0, _dynamicImport.dynamicImport)('pages/HomePage'); // or use the provided local homepage\n\nvar App = function App() {\n return _react2.default.createElement(\n _reactRouterDom.Switch,\n null,\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/', component: HomePage }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/about', component: _AboutPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/login', component: _LoginPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:identifier/:claim', component: _ShowPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:claim', component: _ShowPage2.default }),\n _react2.default.createElement(_reactRouterDom.Route, { component: _FourOhFourPage2.default })\n );\n};\n\nexports.default = App;\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar map = {\n\t\"./canonicalLink\": 59,\n\t\"./canonicalLink.js\": 59,\n\t\"./dynamicImport\": 58,\n\t\"./dynamicImport.js\": 58,\n\t\"./file\": 60,\n\t\"./file.js\": 60,\n\t\"./lbryUri\": 61,\n\t\"./lbryUri.js\": 61,\n\t\"./metaTags\": 62,\n\t\"./metaTags.js\": 62,\n\t\"./pageTitle\": 63,\n\t\"./pageTitle.js\": 63,\n\t\"./publish\": 110,\n\t\"./publish.js\": 110,\n\t\"./request\": 8,\n\t\"./request.js\": 8,\n\t\"./validate\": 111,\n\t\"./validate.js\": 111\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 109;\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar createPublishMetadata = exports.createPublishMetadata = function createPublishMetadata(claim, _ref, _ref2, publishInChannel, selectedChannel) {\n var type = _ref.type;\n var title = _ref2.title,\n description = _ref2.description,\n license = _ref2.license,\n nsfw = _ref2.nsfw;\n\n var metadata = {\n name: claim,\n title: title,\n description: description,\n license: license,\n nsfw: nsfw,\n type: type\n };\n if (publishInChannel) {\n metadata['channelName'] = selectedChannel;\n }\n return metadata;\n};\n\nvar createPublishFormData = exports.createPublishFormData = function createPublishFormData(file, thumbnail, metadata) {\n var fd = new FormData();\n // append file\n fd.append('file', file);\n // append thumbnail\n if (thumbnail) {\n fd.append('thumbnail', thumbnail);\n }\n // append metadata\n for (var key in metadata) {\n if (metadata.hasOwnProperty(key)) {\n fd.append(key, metadata[key]);\n }\n }\n return fd;\n};\n\nvar createThumbnailUrl = exports.createThumbnailUrl = function createThumbnailUrl(channel, channelId, claim, host) {\n return host + '/' + channel + ':' + channelId + '/' + claim + '-thumb.png';\n};\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar validateChannelSelection = exports.validateChannelSelection = function validateChannelSelection(publishInChannel, selectedChannel, loggedInChannel) {\n if (publishInChannel && selectedChannel !== loggedInChannel.name) {\n throw new Error('Log in to a channel or select Anonymous');\n }\n};\n\nvar validatePublishParams = exports.validatePublishParams = function validatePublishParams(file, claim, urlError) {\n if (!file) {\n throw new Error('Please choose a file');\n }\n if (!claim) {\n throw new Error('Please enter a URL');\n }\n if (urlError) {\n throw new Error('Fix the url');\n }\n};\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CHANNEL = exports.CHANNEL = 'CHANNEL';\nvar ASSET_LITE = exports.ASSET_LITE = 'ASSET_LITE';\nvar ASSET_DETAILS = exports.ASSET_DETAILS = 'ASSET_DETAILS';\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (helmet, html, preloadedState) {\n // take the html and preloadedState and return the full page\n return '\\n <!DOCTYPE html>\\n <html lang=\"en\" prefix=\"og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#\">\\n <head>\\n <meta charset=\"UTF-8\">\\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=no\">\\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\\n <!--helmet-->\\n ' + helmet.title.toString() + '\\n ' + helmet.meta.toString() + '\\n ' + helmet.link.toString() + '\\n <!--style sheets-->\\n <link rel=\"stylesheet\" href=\"/assets/css/reset.css\" type=\"text/css\">\\n <link rel=\"stylesheet\" href=\"/assets/css/general.css\" type=\"text/css\">\\n <link rel=\"stylesheet\" href=\"/assets/css/mediaQueries.css\" type=\"text/css\">\\n <!--google font-->\\n <link href=\"https://fonts.googleapis.com/css?family=Roboto:300\" rel=\"stylesheet\">\\n </head>\\n <body id=\"main-body\">\\n <div class=\"row row--tall flex-container--column\">\\n <div id=\"react-app\" class=\"row row--tall flex-container--column\">' + html + '</div>\\n </div>\\n <script>\\n window.__PRELOADED_STATE__ = ' + JSON.stringify(preloadedState).replace(/</g, '\\\\<') + '\\n </script>\\n <script src=\"/bundle/bundle.js\"></script>\\n </body>\\n </html>\\n ';\n};\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar selectSiteState = exports.selectSiteState = function selectSiteState(state) {\n return state.site;\n};\n\nvar selectSiteHost = exports.selectSiteHost = function selectSiteHost(state) {\n return state.site.host;\n};\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(116);\n__webpack_require__(117);\nmodule.exports = __webpack_require__(118);\n\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"babel-polyfill\");\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"whatwg-fetch\");\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Server = __webpack_require__(119);\nvar Components = __webpack_require__(50);\nvar Containers = __webpack_require__(52);\nvar Pages = __webpack_require__(53);\n\nvar _exports = {\n Server: Server,\n Components: Components,\n Containers: Containers,\n Pages: Pages\n};\n\nmodule.exports = _exports;\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// app dependencies\nvar express = __webpack_require__(120);\nvar bodyParser = __webpack_require__(121);\nvar expressHandlebars = __webpack_require__(122);\nvar Handlebars = __webpack_require__(123);\nvar helmet = __webpack_require__(124);\nvar passport = __webpack_require__(91);\n\nvar _require = __webpack_require__(125),\n serializeSpeechUser = _require.serializeSpeechUser,\n deserializeSpeechUser = _require.deserializeSpeechUser;\n\nvar cookieSession = __webpack_require__(126);\nvar http = __webpack_require__(127);\n// logging dependencies\nvar logger = __webpack_require__(2);\n\nfunction Server() {\n var _this = this;\n\n this.configureMysql = function (mysqlConfig) {\n __webpack_require__(92).configure(mysqlConfig);\n };\n this.configureSite = function (siteConfig) {\n __webpack_require__(3).configure(siteConfig);\n _this.sessionKey = siteConfig.auth.sessionKey;\n _this.PORT = siteConfig.details.port;\n };\n this.configureSlack = function (slackConfig) {\n __webpack_require__(93).configure(slackConfig);\n };\n this.createApp = function () {\n // create an Express application\n var app = express();\n\n // trust the proxy to get ip address for us\n app.enable('trust proxy');\n\n // add middleware\n app.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties\n app.use(express.static(__dirname + '/public')); // 'express.static' to serve static files from public directory\n app.use(bodyParser.json()); // 'body parser' for parsing application/json\n app.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded\n app.use(function (req, res, next) {\n // custom logging middleware to log all incoming http requests\n logger.verbose('Request on ' + req.originalUrl + ' from ' + req.ip);\n next();\n });\n\n // configure passport\n passport.serializeUser(serializeSpeechUser);\n passport.deserializeUser(deserializeSpeechUser);\n var localSignupStrategy = __webpack_require__(128);\n var localLoginStrategy = __webpack_require__(139);\n passport.use('local-signup', localSignupStrategy);\n passport.use('local-login', localLoginStrategy);\n // initialize passport\n app.use(cookieSession({\n name: 'session',\n keys: [_this.sessionKey],\n maxAge: 24 * 60 * 60 * 1000 // i.e. 24 hours\n }));\n app.use(passport.initialize());\n app.use(passport.session());\n\n // configure handlebars & register it with express app\n var hbs = expressHandlebars.create({\n defaultLayout: 'embed',\n handlebars: Handlebars\n });\n app.engine('handlebars', hbs.engine);\n app.set('view engine', 'handlebars');\n\n // set the routes on the app\n __webpack_require__(140)(app);\n __webpack_require__(141)(app);\n __webpack_require__(146)(app);\n __webpack_require__(153)(app);\n __webpack_require__(163)(app);\n\n _this.app = app;\n };\n this.initialize = function () {\n __webpack_require__(164)(logger);\n __webpack_require__(166)(logger);\n _this.createApp();\n _this.server = http.Server(_this.app);\n };\n this.start = function () {\n var db = __webpack_require__(9);\n // sync sequelize\n db.sequelize.sync()\n // start the server\n .then(function () {\n _this.server.listen(_this.PORT, function () {\n logger.info('Server is listening on PORT ' + _this.PORT);\n });\n }).catch(function (error) {\n logger.error('Startup Error:', error);\n });\n };\n};\n\nmodule.exports = Server;\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"express\");\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"body-parser\");\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"express-handlebars\");\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"handlebars\");\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"helmet\");\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n serializeSpeechUser: function serializeSpeechUser(user, done) {\n // returns user data to be serialized into session\n logger.debug('serializing user');\n done(null, user);\n },\n deserializeSpeechUser: function deserializeSpeechUser(user, done) {\n // deserializes session and populates additional info to req.user\n logger.debug('deserializing user');\n done(null, user);\n }\n};\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"cookie-session\");\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"http\");\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar PassportLocalStrategy = __webpack_require__(94).Strategy;\nvar lbryApi = __webpack_require__(55);\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(9);\n\nmodule.exports = new PassportLocalStrategy({\n usernameField: 'username',\n passwordField: 'password'\n}, function (username, password, done) {\n logger.verbose('new channel signup request. user: ' + username + ' pass: ' + password + ' .');\n var userInfo = {};\n // server-side validaton of inputs (username, password)\n\n // create the channel and retrieve the metadata\n return lbryApi.createChannel('@' + username).then(function (tx) {\n // create user record\n var userData = {\n userName: username,\n password: password\n };\n logger.verbose('userData >', userData);\n // create user record\n var channelData = {\n channelName: '@' + username,\n channelClaimId: tx.claim_id\n };\n logger.verbose('channelData >', channelData);\n // create certificate record\n var certificateData = {\n claimId: tx.claim_id,\n name: '@' + username\n // address,\n };\n logger.verbose('certificateData >', certificateData);\n // save user and certificate to db\n return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 3),\n newUser = _ref2[0],\n newChannel = _ref2[1],\n newCertificate = _ref2[2];\n\n logger.verbose('user and certificate successfully created');\n // store the relevant newUser info to be passed back for req.User\n userInfo['id'] = newUser.id;\n userInfo['userName'] = newUser.userName;\n userInfo['channelName'] = newChannel.channelName;\n userInfo['channelClaimId'] = newChannel.channelClaimId;\n // associate the instances\n return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]);\n }).then(function () {\n logger.verbose('user and certificate successfully associated');\n return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName);\n }).then(function (shortChannelId) {\n userInfo['shortChannelId'] = shortChannelId;\n return done(null, userInfo);\n }).catch(function (error) {\n logger.error('signup error', error);\n return done(error);\n });\n});\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"axios\");\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar lbryConfig = {\n api: {\n apiHost: 'localhost',\n apiPort: '5279'\n }\n};\n\nmodule.exports = lbryConfig;\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"universal-analytics\");\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(96),\n returnShortId = _require.returnShortId;\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER,\n TEXT = _ref.TEXT,\n DECIMAL = _ref.DECIMAL;\n\n var Certificate = sequelize.define('Certificate', {\n address: {\n type: STRING,\n default: null\n },\n amount: {\n type: DECIMAL(19, 8),\n default: null\n },\n claimId: {\n type: STRING,\n default: null\n },\n claimSequence: {\n type: INTEGER,\n default: null\n },\n decodedClaim: {\n type: BOOLEAN,\n default: null\n },\n depth: {\n type: INTEGER,\n default: null\n },\n effectiveAmount: {\n type: DECIMAL(19, 8),\n default: null\n },\n hasSignature: {\n type: BOOLEAN,\n default: null\n },\n height: {\n type: INTEGER,\n default: null\n },\n hex: {\n type: TEXT('long'),\n default: null\n },\n name: {\n type: STRING,\n default: null\n },\n nout: {\n type: INTEGER,\n default: null\n },\n txid: {\n type: STRING,\n default: null\n },\n validAtHeight: {\n type: INTEGER,\n default: null\n },\n outpoint: {\n type: STRING,\n default: null\n },\n valueVersion: {\n type: STRING,\n default: null\n },\n claimType: {\n type: STRING,\n default: null\n },\n certificateVersion: {\n type: STRING,\n default: null\n },\n keyType: {\n type: STRING,\n default: null\n },\n publicKey: {\n type: TEXT('long'),\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Certificate.associate = function (db) {\n Certificate.belongsTo(db.Channel, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) {\n var _this = this;\n\n logger.debug('getShortChannelIdFromLongChannelId ' + channelName + ':' + longChannelId);\n return new Promise(function (resolve, reject) {\n _this.findAll({\n where: { name: channelName },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n throw new Error('No channel(s) found with that channel name');\n default:\n return resolve(returnShortId(result, longChannelId));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) {\n var _this2 = this;\n\n logger.debug('getLongChannelIdFromShortChannelId(' + channelName + ', ' + channelClaimId + ')');\n return new Promise(function (resolve, reject) {\n _this2.findAll({\n where: {\n name: channelName,\n claimId: {\n $like: channelClaimId + '%'\n }\n },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n // note results must be sorted\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromChannelName = function (channelName) {\n var _this3 = this;\n\n logger.debug('getLongChannelIdFromChannelName(' + channelName + ')');\n return new Promise(function (resolve, reject) {\n _this3.findAll({\n where: { name: channelName },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.validateLongChannelId = function (name, claimId) {\n var _this4 = this;\n\n logger.debug('validateLongChannelId(' + name + ', ' + claimId + ')');\n return new Promise(function (resolve, reject) {\n _this4.findOne({\n where: { name: name, claimId: claimId }\n }).then(function (result) {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelId = function (channelName, channelClaimId) {\n logger.debug('getLongChannelId(' + channelName + ', ' + channelClaimId + ')');\n if (channelClaimId && channelClaimId.length === 40) {\n // if a full channel id is provided\n return this.validateLongChannelId(channelName, channelClaimId);\n } else if (channelClaimId && channelClaimId.length < 40) {\n // if a short channel id is provided\n return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId);\n } else {\n return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided\n }\n };\n\n return Certificate;\n};\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING;\n\n var Channel = sequelize.define('Channel', {\n channelName: {\n type: STRING,\n allowNull: false\n },\n channelClaimId: {\n type: STRING,\n allowNull: false\n }\n }, {\n freezeTableName: true\n });\n\n Channel.associate = function (db) {\n Channel.belongsTo(db.User);\n Channel.hasOne(db.Certificate);\n };\n\n return Channel;\n};\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(96),\n returnShortId = _require.returnShortId;\n\nvar _require2 = __webpack_require__(3),\n defaultThumbnail = _require2.assetDefaults.thumbnail,\n host = _require2.details.host;\n\nfunction determineFileExtensionFromContentType(contentType) {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n return 'jpeg';\n case 'image/png':\n return 'png';\n case 'image/gif':\n return 'gif';\n case 'video/mp4':\n return 'mp4';\n default:\n logger.debug('setting unknown file type as file extension jpeg');\n return 'jpeg';\n }\n};\n\nfunction determineThumbnail(storedThumbnail, defaultThumbnail) {\n if (storedThumbnail === '') {\n return defaultThumbnail;\n }\n return storedThumbnail;\n};\n\nfunction prepareClaimData(claim) {\n // logger.debug('preparing claim data based on resolved data:', claim);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['host'] = host;\n return claim;\n};\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER,\n TEXT = _ref.TEXT,\n DECIMAL = _ref.DECIMAL;\n\n var Claim = sequelize.define('Claim', {\n address: {\n type: STRING,\n default: null\n },\n amount: {\n type: DECIMAL(19, 8),\n default: null\n },\n claimId: {\n type: STRING,\n default: null\n },\n claimSequence: {\n type: INTEGER,\n default: null\n },\n decodedClaim: {\n type: BOOLEAN,\n default: null\n },\n depth: {\n type: INTEGER,\n default: null\n },\n effectiveAmount: {\n type: DECIMAL(19, 8),\n default: null\n },\n hasSignature: {\n type: BOOLEAN,\n default: null\n },\n height: {\n type: INTEGER,\n default: null\n },\n hex: {\n type: TEXT('long'),\n default: null\n },\n name: {\n type: STRING,\n default: null\n },\n nout: {\n type: INTEGER,\n default: null\n },\n txid: {\n type: STRING,\n default: null\n },\n validAtHeight: {\n type: INTEGER,\n default: null\n },\n outpoint: {\n type: STRING,\n default: null\n },\n claimType: {\n type: STRING,\n default: null\n },\n certificateId: {\n type: STRING,\n default: null\n },\n author: {\n type: STRING,\n default: null\n },\n description: {\n type: TEXT('long'),\n default: null\n },\n language: {\n type: STRING,\n default: null\n },\n license: {\n type: STRING,\n default: null\n },\n licenseUrl: {\n type: STRING,\n default: null\n },\n nsfw: {\n type: BOOLEAN,\n default: null\n },\n preview: {\n type: STRING,\n default: null\n },\n thumbnail: {\n type: STRING,\n default: null\n },\n title: {\n type: STRING,\n default: null\n },\n metadataVersion: {\n type: STRING,\n default: null\n },\n contentType: {\n type: STRING,\n default: null\n },\n source: {\n type: STRING,\n default: null\n },\n sourceType: {\n type: STRING,\n default: null\n },\n sourceVersion: {\n type: STRING,\n default: null\n },\n streamVersion: {\n type: STRING,\n default: null\n },\n valueVersion: {\n type: STRING,\n default: null\n },\n channelName: {\n type: STRING,\n allowNull: true,\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Claim.associate = function (db) {\n Claim.belongsTo(db.File, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) {\n var _this = this;\n\n logger.debug('Claim.getShortClaimIdFromLongClaimId for ' + claimName + '#' + claimId);\n return new Promise(function (resolve, reject) {\n _this.findAll({\n where: { name: claimName },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n throw new Error('No claim(s) found with that claim name');\n default:\n resolve(returnShortId(result, claimId));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getAllChannelClaims = function (channelClaimId) {\n var _this2 = this;\n\n logger.debug('Claim.getAllChannelClaims for ' + channelClaimId);\n return new Promise(function (resolve, reject) {\n _this2.findAll({\n where: { certificateId: channelClaimId },\n order: [['height', 'ASC']],\n raw: true // returns an array of only data, not an array of instances\n }).then(function (channelClaimsArray) {\n // logger.debug('channelclaimsarray length:', channelClaimsArray.length);\n switch (channelClaimsArray.length) {\n case 0:\n return resolve(null);\n default:\n channelClaimsArray.forEach(function (claim) {\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n return claim;\n });\n return resolve(channelClaimsArray);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) {\n var _this3 = this;\n\n logger.debug('finding claim id for claim ' + claimName + ' from channel ' + channelClaimId);\n return new Promise(function (resolve, reject) {\n _this3.findAll({\n where: { name: claimName, certificateId: channelClaimId },\n order: [['id', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(result[0].claimId);\n default:\n logger.error(result.length + ' records found for \"' + claimName + '\" in channel \"' + channelClaimId + '\"');\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimIdFromShortClaimId = function (name, shortId) {\n var _this4 = this;\n\n return new Promise(function (resolve, reject) {\n _this4.findAll({\n where: {\n name: name,\n claimId: {\n $like: shortId + '%'\n } },\n order: [['height', 'ASC']]\n }).then(function (result) {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n // note results must be sorted\n return resolve(result[0].claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getTopFreeClaimIdByClaimName = function (name) {\n var _this5 = this;\n\n return new Promise(function (resolve, reject) {\n _this5.findAll({\n where: { name: name },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']] // note: maybe height and effective amount need to switch?\n }).then(function (result) {\n logger.debug('length of result', result.length);\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].dataValues.claimId);\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.validateLongClaimId = function (name, claimId) {\n var _this6 = this;\n\n return new Promise(function (resolve, reject) {\n _this6.findOne({\n where: { name: name, claimId: claimId }\n }).then(function (result) {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimId = function (claimName, claimId) {\n logger.debug('getLongClaimId(' + claimName + ', ' + claimId + ')');\n if (claimId && claimId.length === 40) {\n // if a full claim id is provided\n return this.validateLongClaimId(claimName, claimId);\n } else if (claimId && claimId.length < 40) {\n return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided\n } else {\n return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided\n }\n };\n\n Claim.resolveClaim = function (name, claimId) {\n var _this7 = this;\n\n logger.debug('Claim.resolveClaim: ' + name + ' ' + claimId);\n return new Promise(function (resolve, reject) {\n _this7.findAll({\n where: { name: name, claimId: claimId }\n }).then(function (claimArray) {\n switch (claimArray.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(prepareClaimData(claimArray[0].dataValues));\n default:\n logger.error('more than one record matches ' + name + '#' + claimId + ' in db.Claim');\n return resolve(prepareClaimData(claimArray[0].dataValues));\n }\n }).catch(function (error) {\n reject(error);\n });\n });\n };\n\n return Claim;\n};\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n INTEGER = _ref.INTEGER;\n\n var File = sequelize.define('File', {\n name: {\n type: STRING,\n allowNull: false\n },\n claimId: {\n type: STRING,\n allowNull: false\n },\n address: {\n type: STRING,\n allowNull: false\n },\n outpoint: {\n type: STRING,\n allowNull: false\n },\n height: {\n type: INTEGER,\n allowNull: false,\n default: 0\n },\n fileName: {\n type: STRING,\n allowNull: false\n },\n filePath: {\n type: STRING,\n allowNull: false\n },\n fileType: {\n type: STRING\n },\n nsfw: {\n type: BOOLEAN,\n allowNull: false,\n defaultValue: false\n },\n trendingEligible: {\n type: BOOLEAN,\n allowNull: false,\n defaultValue: true\n }\n }, {\n freezeTableName: true\n });\n\n File.associate = function (db) {\n File.hasMany(db.Request);\n File.hasOne(db.Claim);\n };\n\n File.getRecentClaims = function () {\n return this.findAll({\n where: { nsfw: false, trendingEligible: true },\n order: [['createdAt', 'DESC']],\n limit: 25\n });\n };\n\n return File;\n};\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING,\n BOOLEAN = _ref.BOOLEAN,\n TEXT = _ref.TEXT;\n\n var Request = sequelize.define('Request', {\n action: {\n type: STRING,\n allowNull: false\n },\n url: {\n type: STRING,\n allowNull: false\n },\n ipAddress: {\n type: STRING,\n allowNull: true\n },\n result: {\n type: TEXT('long'),\n allowNull: true,\n default: null\n }\n }, {\n freezeTableName: true\n });\n\n Request.associate = function (db) {\n Request.belongsTo(db.File, {\n foreignKey: {\n allowNull: true\n }\n });\n };\n\n return Request;\n};\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar bcrypt = __webpack_require__(138);\nvar logger = __webpack_require__(2);\n\nmodule.exports = function (sequelize, _ref) {\n var STRING = _ref.STRING;\n\n var User = sequelize.define('User', {\n userName: {\n type: STRING,\n allowNull: false\n },\n password: {\n type: STRING,\n allowNull: false\n }\n }, {\n freezeTableName: true\n });\n\n User.associate = function (db) {\n User.hasOne(db.Channel);\n };\n\n User.prototype.comparePassword = function (password) {\n return bcrypt.compare(password, this.password);\n };\n\n User.prototype.changePassword = function (newPassword) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n // generate a salt string to use for hashing\n bcrypt.genSalt(function (saltError, salt) {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(newPassword, salt, function (hashError, hash) {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the current password with the new hash\n _this.update({ password: hash }).then(function () {\n resolve();\n }).catch(function (error) {\n reject(error);\n });\n });\n });\n });\n };\n\n // pre-save hook method to hash the user's password before the user's info is saved to the db.\n User.hook('beforeCreate', function (user, options) {\n logger.debug('User.beforeCreate hook...');\n return new Promise(function (resolve, reject) {\n // generate a salt string to use for hashing\n bcrypt.genSalt(function (saltError, salt) {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(user.password, salt, function (hashError, hash) {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the password string with the hash password value\n user.password = hash;\n resolve();\n });\n });\n });\n });\n\n return User;\n};\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"bcrypt\");\n\n/***/ }),\n/* 139 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar PassportLocalStrategy = __webpack_require__(94).Strategy;\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(9);\n\nvar returnUserAndChannelInfo = function returnUserAndChannelInfo(userInstance) {\n return new Promise(function (resolve, reject) {\n var userInfo = {};\n userInfo['id'] = userInstance.id;\n userInfo['userName'] = userInstance.userName;\n userInstance.getChannel().then(function (_ref) {\n var channelName = _ref.channelName,\n channelClaimId = _ref.channelClaimId;\n\n userInfo['channelName'] = channelName;\n userInfo['channelClaimId'] = channelClaimId;\n return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName);\n }).then(function (shortChannelId) {\n userInfo['shortChannelId'] = shortChannelId;\n resolve(userInfo);\n }).catch(function (error) {\n reject(error);\n });\n });\n};\n\nmodule.exports = new PassportLocalStrategy({\n usernameField: 'username',\n passwordField: 'password'\n}, function (username, password, done) {\n return db.User.findOne({\n where: { userName: username }\n }).then(function (user) {\n if (!user) {\n logger.debug('no user found');\n return done(null, false, { message: 'Incorrect username or password' });\n }\n return user.comparePassword(password).then(function (isMatch) {\n if (!isMatch) {\n logger.debug('incorrect password');\n return done(null, false, { message: 'Incorrect username or password' });\n }\n logger.debug('Password was a match, returning User');\n return returnUserAndChannelInfo(user).then(function (userInfo) {\n return done(null, userInfo);\n }).catch(function (error) {\n return error;\n });\n }).catch(function (error) {\n return error;\n });\n }).catch(function (error) {\n return done(error);\n });\n});\n\n/***/ }),\n/* 140 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\nvar passport = __webpack_require__(91);\n\nmodule.exports = function (app) {\n // route for sign up\n app.post('/signup', passport.authenticate('local-signup'), function (req, res) {\n logger.verbose('successful signup for ' + req.user.channelName);\n res.status(200).json({\n success: true,\n channelName: req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId\n });\n });\n // route for log in\n app.post('/login', function (req, res, next) {\n passport.authenticate('local-login', function (err, user, info) {\n if (err) {\n return next(err);\n }\n if (!user) {\n return res.status(400).json({\n success: false,\n message: info.message\n });\n }\n logger.debug('successful login');\n req.logIn(user, function (err) {\n if (err) {\n return next(err);\n }\n return res.status(200).json({\n success: true,\n channelName: req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId\n });\n });\n })(req, res, next);\n });\n // route to log out\n app.get('/logout', function (req, res) {\n req.logout();\n res.status(200).json({ success: true, message: 'you successfully logged out' });\n });\n // see if user is authenticated, and return credentials if so\n app.get('/user', function (req, res) {\n if (req.user) {\n res.status(200).json({ success: true, data: req.user });\n } else {\n res.status(401).json({ success: false, message: 'user is not logged in' });\n }\n });\n};\n\n/***/ }),\n/* 141 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\nvar multipart = __webpack_require__(142);\n\nvar _require = __webpack_require__(3),\n uploadDirectory = _require.publishing.uploadDirectory,\n host = _require.details.host;\n\nvar multipartMiddleware = multipart({ uploadDir: uploadDirectory });\nvar db = __webpack_require__(9);\n\nvar _require2 = __webpack_require__(143),\n claimNameIsAvailable = _require2.claimNameIsAvailable,\n checkChannelAvailability = _require2.checkChannelAvailability,\n publish = _require2.publish;\n\nvar _require3 = __webpack_require__(55),\n getClaimList = _require3.getClaimList,\n resolveUri = _require3.resolveUri,\n getClaim = _require3.getClaim;\n\nvar _require4 = __webpack_require__(97),\n addGetResultsToFileData = _require4.addGetResultsToFileData,\n createBasicPublishParams = _require4.createBasicPublishParams,\n createThumbnailPublishParams = _require4.createThumbnailPublishParams,\n parsePublishApiRequestBody = _require4.parsePublishApiRequestBody,\n parsePublishApiRequestFiles = _require4.parsePublishApiRequestFiles,\n createFileData = _require4.createFileData;\n\nvar errorHandlers = __webpack_require__(99);\n\nvar _require5 = __webpack_require__(56),\n sendGATimingEvent = _require5.sendGATimingEvent;\n\nvar _require6 = __webpack_require__(144),\n authenticateUser = _require6.authenticateUser;\n\nvar _require7 = __webpack_require__(100),\n getChannelData = _require7.getChannelData,\n getChannelClaims = _require7.getChannelClaims,\n getClaimId = _require7.getClaimId;\n\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\n\nmodule.exports = function (app) {\n // route to check whether site has published to a channel\n app.get('/api/channel/availability/:name', function (_ref, res) {\n var ip = _ref.ip,\n originalUrl = _ref.originalUrl,\n name = _ref.params.name;\n\n var gaStartTime = Date.now();\n checkChannelAvailability(name).then(function (availableName) {\n res.status(200).json(availableName);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short channel id from long channel Id\n app.get('/api/channel/short-id/:longId/:name', function (_ref2, res) {\n var ip = _ref2.ip,\n originalUrl = _ref2.originalUrl,\n params = _ref2.params;\n\n db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name).then(function (shortId) {\n res.status(200).json(shortId);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/data/:channelName/:channelClaimId', function (_ref3, res) {\n var ip = _ref3.ip,\n originalUrl = _ref3.originalUrl,\n body = _ref3.body,\n params = _ref3.params;\n\n var channelName = params.channelName;\n var channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n getChannelData(channelName, channelClaimId, 0).then(function (data) {\n if (data === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel was found' });\n }\n res.status(200).json({ success: true, data: data });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/claims/:channelName/:channelClaimId/:page', function (_ref4, res) {\n var ip = _ref4.ip,\n originalUrl = _ref4.originalUrl,\n body = _ref4.body,\n params = _ref4.params;\n\n var channelName = params.channelName;\n var channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n var page = params.page;\n getChannelClaims(channelName, channelClaimId, page).then(function (data) {\n if (data === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel was found' });\n }\n res.status(200).json({ success: true, data: data });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a claim_list request on the daemon\n app.get('/api/claim/list/:name', function (_ref5, res) {\n var ip = _ref5.ip,\n originalUrl = _ref5.originalUrl,\n params = _ref5.params;\n\n getClaimList(params.name).then(function (claimsList) {\n res.status(200).json(claimsList);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get an asset\n app.get('/api/claim/get/:name/:claimId', function (_ref6, res) {\n var ip = _ref6.ip,\n originalUrl = _ref6.originalUrl,\n params = _ref6.params;\n\n var name = params.name;\n var claimId = params.claimId;\n // resolve the claim\n db.Claim.resolveClaim(name, claimId).then(function (resolveResult) {\n // make sure a claim actually exists at that uri\n if (!resolveResult) {\n throw new Error('No matching uri found in Claim table');\n }\n var fileData = createFileData(resolveResult);\n // get the claim\n return Promise.all([fileData, getClaim(name + '#' + claimId)]);\n }).then(function (_ref7) {\n var _ref8 = _slicedToArray(_ref7, 2),\n fileData = _ref8[0],\n getResult = _ref8[1];\n\n fileData = addGetResultsToFileData(fileData, getResult);\n return Promise.all([db.upsert(db.File, fileData, { name: name, claimId: claimId }, 'File'), getResult]);\n }).then(function (_ref9) {\n var _ref10 = _slicedToArray(_ref9, 2),\n fileRecord = _ref10[0],\n _ref10$ = _ref10[1],\n message = _ref10$.message,\n completed = _ref10$.completed;\n\n res.status(200).json({ success: true, message: message, completed: completed });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to check whether this site published to a claim\n app.get('/api/claim/availability/:name', function (_ref11, res) {\n var ip = _ref11.ip,\n originalUrl = _ref11.originalUrl,\n name = _ref11.params.name;\n\n var gaStartTime = Date.now();\n claimNameIsAvailable(name).then(function (result) {\n res.status(200).json(result);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a resolve request on the daemon\n app.get('/api/claim/resolve/:name/:claimId', function (_ref12, res) {\n var headers = _ref12.headers,\n ip = _ref12.ip,\n originalUrl = _ref12.originalUrl,\n params = _ref12.params;\n\n resolveUri(params.name + '#' + params.claimId).then(function (resolvedUri) {\n res.status(200).json(resolvedUri);\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a publish request on the daemon\n app.post('/api/claim/publish', multipartMiddleware, function (_ref13, res) {\n var body = _ref13.body,\n files = _ref13.files,\n headers = _ref13.headers,\n ip = _ref13.ip,\n originalUrl = _ref13.originalUrl,\n user = _ref13.user;\n\n // define variables\n var channelName = void 0,\n channelId = void 0,\n channelPassword = void 0,\n description = void 0,\n fileName = void 0,\n filePath = void 0,\n fileType = void 0,\n gaStartTime = void 0,\n license = void 0,\n name = void 0,\n nsfw = void 0,\n thumbnail = void 0,\n thumbnailFileName = void 0,\n thumbnailFilePath = void 0,\n thumbnailFileType = void 0,\n title = void 0;\n // record the start time of the request\n gaStartTime = Date.now();\n // validate the body and files of the request\n try {\n var _parsePublishApiReque = parsePublishApiRequestBody(body);\n // validateApiPublishRequest(body, files);\n\n\n name = _parsePublishApiReque.name;\n nsfw = _parsePublishApiReque.nsfw;\n license = _parsePublishApiReque.license;\n title = _parsePublishApiReque.title;\n description = _parsePublishApiReque.description;\n thumbnail = _parsePublishApiReque.thumbnail;\n\n var _parsePublishApiReque2 = parsePublishApiRequestFiles(files);\n\n fileName = _parsePublishApiReque2.fileName;\n filePath = _parsePublishApiReque2.filePath;\n fileType = _parsePublishApiReque2.fileType;\n thumbnailFileName = _parsePublishApiReque2.thumbnailFileName;\n thumbnailFilePath = _parsePublishApiReque2.thumbnailFilePath;\n thumbnailFileType = _parsePublishApiReque2.thumbnailFileType;\n channelName = body.channelName;\n channelId = body.channelId;\n channelPassword = body.channelPassword;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // check channel authorization\n Promise.all([authenticateUser(channelName, channelId, channelPassword, user), claimNameIsAvailable(name), createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail), createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw)]).then(function (_ref14) {\n var _ref15 = _slicedToArray(_ref14, 4),\n _ref15$ = _ref15[0],\n channelName = _ref15$.channelName,\n channelClaimId = _ref15$.channelClaimId,\n validatedClaimName = _ref15[1],\n publishParams = _ref15[2],\n thumbnailPublishParams = _ref15[3];\n\n // add channel details to the publish params\n if (channelName && channelClaimId) {\n publishParams['channel_name'] = channelName;\n publishParams['channel_id'] = channelClaimId;\n }\n // publish the thumbnail\n if (thumbnailPublishParams) {\n publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType);\n }\n // publish the asset\n return publish(publishParams, fileName, fileType);\n }).then(function (result) {\n res.status(200).json({\n success: true,\n message: 'publish completed successfully',\n data: {\n name: name,\n claimId: result.claim_id,\n url: host + '/' + result.claim_id + '/' + name,\n lbryTx: result\n }\n });\n // record the publish end time and send to google analytics\n sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now());\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short claim id from long claim Id\n app.get('/api/claim/short-id/:longId/:name', function (_ref16, res) {\n var ip = _ref16.ip,\n originalUrl = _ref16.originalUrl,\n body = _ref16.body,\n params = _ref16.params;\n\n db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name).then(function (shortId) {\n res.status(200).json({ success: true, data: shortId });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.post('/api/claim/long-id', function (_ref17, res) {\n var ip = _ref17.ip,\n originalUrl = _ref17.originalUrl,\n body = _ref17.body,\n params = _ref17.params;\n\n logger.debug('body:', body);\n var channelName = body.channelName;\n var channelClaimId = body.channelClaimId;\n var claimName = body.claimName;\n var claimId = body.claimId;\n getClaimId(channelName, channelClaimId, claimName, claimId).then(function (result) {\n if (result === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'No matching channel could be found' });\n }\n if (result === NO_CLAIM) {\n return res.status(404).json({ success: false, message: 'No matching claim id could be found' });\n }\n res.status(200).json({ success: true, data: result });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/claim/data/:claimName/:claimId', function (_ref18, res) {\n var ip = _ref18.ip,\n originalUrl = _ref18.originalUrl,\n body = _ref18.body,\n params = _ref18.params;\n\n var claimName = params.claimName;\n var claimId = params.claimId;\n if (claimId === 'none') claimId = null;\n db.Claim.resolveClaim(claimName, claimId).then(function (claimInfo) {\n if (!claimInfo) {\n return res.status(404).json({ success: false, message: 'No claim could be found' });\n }\n res.status(200).json({ success: true, data: claimInfo });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to see if asset is available locally\n app.get('/api/file/availability/:name/:claimId', function (_ref19, res) {\n var ip = _ref19.ip,\n originalUrl = _ref19.originalUrl,\n params = _ref19.params;\n\n var name = params.name;\n var claimId = params.claimId;\n db.File.findOne({ where: { name: name, claimId: claimId } }).then(function (result) {\n if (result) {\n return res.status(200).json({ success: true, data: true });\n }\n res.status(200).json({ success: true, data: false });\n }).catch(function (error) {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n};\n\n/***/ }),\n/* 142 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"connect-multiparty\");\n\n/***/ }),\n/* 143 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar logger = __webpack_require__(2);\nvar db = __webpack_require__(9);\nvar lbryApi = __webpack_require__(55);\nvar publishHelpers = __webpack_require__(97);\n\nvar _require = __webpack_require__(3),\n _require$publishing = _require.publishing,\n primaryClaimAddress = _require$publishing.primaryClaimAddress,\n additionalClaimAddresses = _require$publishing.additionalClaimAddresses;\n\nvar Sequelize = __webpack_require__(95);\nvar Op = Sequelize.Op;\n\nmodule.exports = {\n publish: function publish(publishParams, fileName, fileType) {\n return new Promise(function (resolve, reject) {\n var publishResults = void 0,\n certificateId = void 0,\n channelName = void 0;\n // publish the file\n return lbryApi.publishClaim(publishParams).then(function (tx) {\n logger.info('Successfully published ' + publishParams.name + ' ' + fileName, tx);\n publishResults = tx;\n // get the channel information\n if (publishParams.channel_name) {\n logger.debug('this claim was published in channel: ' + publishParams.channel_name);\n return db.Channel.findOne({ where: { channelName: publishParams.channel_name } });\n } else {\n logger.debug('this claim was not published in a channel');\n return null;\n }\n }).then(function (channel) {\n // set channel information\n certificateId = null;\n channelName = null;\n if (channel) {\n certificateId = channel.channelClaimId;\n channelName = channel.channelName;\n }\n logger.debug('certificateId: ' + certificateId);\n }).then(function () {\n // create the File record\n var fileRecord = {\n name: publishParams.name,\n claimId: publishResults.claim_id,\n title: publishParams.metadata.title,\n description: publishParams.metadata.description,\n address: publishParams.claim_address,\n outpoint: publishResults.txid + ':' + publishResults.nout,\n height: 0,\n fileName: fileName,\n filePath: publishParams.file_path,\n fileType: fileType,\n nsfw: publishParams.metadata.nsfw\n };\n // create the Claim record\n var claimRecord = {\n name: publishParams.name,\n claimId: publishResults.claim_id,\n title: publishParams.metadata.title,\n description: publishParams.metadata.description,\n address: publishParams.claim_address,\n thumbnail: publishParams.metadata.thumbnail,\n outpoint: publishResults.txid + ':' + publishResults.nout,\n height: 0,\n contentType: fileType,\n nsfw: publishParams.metadata.nsfw,\n amount: publishParams.bid,\n certificateId: certificateId,\n channelName: channelName\n };\n // upsert criteria\n var upsertCriteria = {\n name: publishParams.name,\n claimId: publishResults.claim_id\n };\n // upsert the records\n return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]);\n }).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n file = _ref2[0],\n claim = _ref2[1];\n\n logger.debug('File and Claim records successfully created');\n return Promise.all([file.setClaim(claim), claim.setFile(file)]);\n }).then(function () {\n logger.debug('File and Claim records successfully associated');\n resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim;\n }).catch(function (error) {\n logger.error('PUBLISH ERROR', error);\n publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file\n reject(error);\n });\n });\n },\n claimNameIsAvailable: function claimNameIsAvailable(name) {\n var claimAddresses = additionalClaimAddresses || [];\n claimAddresses.push(primaryClaimAddress);\n // find any records where the name is used\n return db.Claim.findAll({\n attributes: ['address'],\n where: {\n name: name,\n address: _defineProperty({}, Op.or, claimAddresses)\n }\n }).then(function (result) {\n if (result.length >= 1) {\n throw new Error('That claim is already in use');\n };\n return name;\n }).catch(function (error) {\n throw error;\n });\n },\n checkChannelAvailability: function checkChannelAvailability(name) {\n return db.Channel.findAll({\n where: { channelName: name }\n }).then(function (result) {\n if (result.length >= 1) {\n throw new Error('That channel has already been claimed');\n }\n return name;\n }).catch(function (error) {\n throw error;\n });\n }\n};\n\n/***/ }),\n/* 144 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar db = __webpack_require__(9);\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n authenticateUser: function authenticateUser(channelName, channelId, channelPassword, user) {\n // case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided\n if (!channelName && !channelId) {\n return {\n channelName: null,\n channelClaimId: null\n };\n }\n // case: channelName or channel Id are provided with user token\n if (user) {\n if (channelName && channelName !== user.channelName) {\n throw new Error('the provided channel name does not match user credentials');\n }\n if (channelId && channelId !== user.channelClaimId) {\n throw new Error('the provided channel id does not match user credentials');\n }\n return {\n channelName: user.channelName,\n channelClaimId: user.channelClaimId\n };\n }\n // case: channelName or channel Id are provided with password instead of user token\n if (!channelPassword) throw new Error('no channel password provided');\n return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword);\n },\n authenticateChannelCredentials: function authenticateChannelCredentials(channelName, channelId, userPassword) {\n return new Promise(function (resolve, reject) {\n // hoisted variables\n var channelData = void 0;\n // build the params for finding the channel\n var channelFindParams = {};\n if (channelName) channelFindParams['channelName'] = channelName;\n if (channelId) channelFindParams['channelClaimId'] = channelId;\n // find the channel\n db.Channel.findOne({\n where: channelFindParams\n }).then(function (channel) {\n if (!channel) {\n logger.debug('no channel found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n channelData = channel.get();\n logger.debug('channel data:', channelData);\n return db.User.findOne({\n where: { userName: channelData.channelName.substring(1) }\n });\n }).then(function (user) {\n if (!user) {\n logger.debug('no user found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n return user.comparePassword(userPassword);\n }).then(function (isMatch) {\n if (!isMatch) {\n logger.debug('incorrect password');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n logger.debug('...password was a match...');\n resolve(channelData);\n }).catch(function (error) {\n reject(error);\n });\n });\n }\n};\n\n/***/ }),\n/* 145 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar CLAIMS_PER_PAGE = 12;\n\nmodule.exports = {\n returnPaginatedChannelClaims: function returnPaginatedChannelClaims(channelName, longChannelClaimId, claims, page) {\n var totalPages = module.exports.determineTotalPages(claims);\n var paginationPage = module.exports.getPageFromQuery(page);\n var viewData = {\n channelName: channelName,\n longChannelClaimId: longChannelClaimId,\n claims: module.exports.extractPageFromClaims(claims, paginationPage),\n previousPage: module.exports.determinePreviousPage(paginationPage),\n currentPage: paginationPage,\n nextPage: module.exports.determineNextPage(totalPages, paginationPage),\n totalPages: totalPages,\n totalResults: module.exports.determineTotalClaims(claims)\n };\n return viewData;\n },\n getPageFromQuery: function getPageFromQuery(page) {\n if (page) {\n return parseInt(page);\n }\n return 1;\n },\n extractPageFromClaims: function extractPageFromClaims(claims, pageNumber) {\n if (!claims) {\n return []; // if no claims, return this default\n }\n // logger.debug('claims is array?', Array.isArray(claims));\n // logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber));\n var claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE;\n var claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE;\n var pageOfClaims = claims.slice(claimStartIndex, claimEndIndex);\n return pageOfClaims;\n },\n determineTotalPages: function determineTotalPages(claims) {\n if (!claims) {\n return 0;\n } else {\n var totalClaims = claims.length;\n if (totalClaims < CLAIMS_PER_PAGE) {\n return 1;\n }\n var fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE);\n var remainder = totalClaims % CLAIMS_PER_PAGE;\n if (remainder === 0) {\n return fullPages;\n }\n return fullPages + 1;\n }\n },\n determinePreviousPage: function determinePreviousPage(currentPage) {\n if (currentPage === 1) {\n return null;\n }\n return currentPage - 1;\n },\n determineNextPage: function determineNextPage(totalPages, currentPage) {\n if (currentPage === totalPages) {\n return null;\n }\n return currentPage + 1;\n },\n determineTotalClaims: function determineTotalClaims(claims) {\n if (!claims) {\n return 0;\n }\n return claims.length;\n }\n};\n\n/***/ }),\n/* 146 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(3),\n host = _require.details;\n\nvar handlePageRender = __webpack_require__(101);\n\nmodule.exports = function (app) {\n // route for the home page\n app.get('/', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display login page\n app.get('/login', function (req, res) {\n handlePageRender(req, res);\n });\n // route to show 'about' page\n app.get('/about', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/trending', function (req, res) {\n res.status(301).redirect('/popular');\n });\n app.get('/popular', function (req, res) {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/new', function (req, res) {\n handlePageRender(req, res);\n });\n // route to send embedable video player (for twitter)\n app.get('/embed/:claimId/:name', function (_ref, res) {\n var params = _ref.params;\n\n var claimId = params.claimId;\n var name = params.name;\n // get and render the content\n res.status(200).render('embed', { layout: 'embed', host: host, claimId: claimId, name: name });\n });\n};\n\n/***/ }),\n/* 147 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case actions.FILE_SELECTED:\n return Object.assign({}, initialState, { // note: clears to initial state\n file: action.data\n });\n case actions.FILE_CLEAR:\n return initialState;\n case actions.METADATA_UPDATE:\n return Object.assign({}, state, {\n metadata: Object.assign({}, state.metadata, _defineProperty({}, action.data.name, action.data.value))\n });\n case actions.CLAIM_UPDATE:\n return Object.assign({}, state, {\n claim: action.data\n });\n case actions.SET_PUBLISH_IN_CHANNEL:\n return Object.assign({}, state, {\n publishInChannel: action.channel\n });\n case actions.PUBLISH_STATUS_UPDATE:\n return Object.assign({}, state, {\n status: action.data\n });\n case actions.ERROR_UPDATE:\n return Object.assign({}, state, {\n error: Object.assign({}, state.error, _defineProperty({}, action.data.name, action.data.value))\n });\n case actions.SELECTED_CHANNEL_UPDATE:\n return Object.assign({}, state, {\n selectedChannel: action.data\n });\n case actions.TOGGLE_METADATA_INPUTS:\n return Object.assign({}, state, {\n showMetadataInputs: action.data\n });\n case actions.THUMBNAIL_NEW:\n return Object.assign({}, state, {\n thumbnail: action.data\n });\n default:\n return state;\n }\n};\n\nvar _publish_action_types = __webpack_require__(104);\n\nvar actions = _interopRequireWildcard(_publish_action_types);\n\nvar _publish_channel_select_states = __webpack_require__(105);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar _require = __webpack_require__(3),\n publishing = _require.publishing;\n\nvar initialState = {\n disabled: publishing.disabled,\n disabledMessage: publishing.disabledMessage,\n publishInChannel: false,\n selectedChannel: _publish_channel_select_states.LOGIN,\n showMetadataInputs: false,\n status: {\n status: null,\n message: null\n },\n error: {\n file: null,\n url: null,\n channel: null,\n publishSubmit: null\n },\n file: null,\n claim: '',\n metadata: {\n title: '',\n description: '',\n license: '',\n nsfw: false\n },\n thumbnail: null\n};\n\n/***/ }),\n/* 148 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n case actions.CHANNEL_UPDATE:\n return Object.assign({}, state, {\n loggedInChannel: action.data\n });\n default:\n return state;\n }\n};\n\nvar _channel_action_types = __webpack_require__(106);\n\nvar actions = _interopRequireWildcard(_channel_action_types);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar initialState = {\n loggedInChannel: {\n name: null,\n shortId: null,\n longId: null\n }\n};\n\n/***/ }),\n/* 149 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n // handle request\n case actions.REQUEST_ERROR:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n error: action.data\n })\n });\n case actions.REQUEST_UPDATE:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n type: action.data.requestType,\n id: action.data.requestId\n })\n });\n // store requests\n case actions.REQUEST_LIST_ADD:\n return Object.assign({}, state, {\n requestList: Object.assign({}, state.requestList, _defineProperty({}, action.data.id, {\n error: action.data.error,\n key: action.data.key\n }))\n });\n // asset data\n case actions.ASSET_ADD:\n return Object.assign({}, state, {\n assetList: Object.assign({}, state.assetList, _defineProperty({}, action.data.id, {\n error: action.data.error,\n name: action.data.name,\n claimId: action.data.claimId,\n shortId: action.data.shortId,\n claimData: action.data.claimData\n }))\n });\n // channel data\n case actions.CHANNEL_ADD:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.id, {\n name: action.data.name,\n longId: action.data.longId,\n shortId: action.data.shortId,\n claimsData: action.data.claimsData\n }))\n });\n case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.channelListId, Object.assign({}, state.channelList[action.data.channelListId], {\n claimsData: action.data.claimsData\n })))\n });\n // display an asset\n case actions.FILE_AVAILABILITY_UPDATE:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n status: action.data\n })\n });\n case actions.DISPLAY_ASSET_ERROR:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n error: action.data,\n status: _asset_display_states.ERROR\n })\n });\n default:\n return state;\n }\n};\n\nvar _show_action_types = __webpack_require__(19);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _asset_display_states = __webpack_require__(107);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar initialState = {\n request: {\n error: null,\n type: null,\n id: null\n },\n requestList: {},\n channelList: {},\n assetList: {},\n displayAsset: {\n error: null,\n status: _asset_display_states.LOCAL_CHECK\n }\n};\n\n/***/ }),\n/* 150 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function () {\n var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;\n var action = arguments[1];\n\n switch (action.type) {\n default:\n return state;\n }\n};\n\nvar siteConfig = __webpack_require__(3);\n\nvar googleAnalyticsId = siteConfig.analytics.googleId,\n _siteConfig$assetDefa = siteConfig.assetDefaults,\n defaultThumbnail = _siteConfig$assetDefa.thumbnail,\n defaultDescription = _siteConfig$assetDefa.description,\n _siteConfig$details = siteConfig.details,\n description = _siteConfig$details.description,\n host = _siteConfig$details.host,\n title = _siteConfig$details.title,\n twitter = _siteConfig$details.twitter;\n\n\nvar initialState = {\n description: description,\n googleAnalyticsId: googleAnalyticsId,\n host: host,\n title: title,\n twitter: twitter,\n defaultDescription: defaultDescription,\n defaultThumbnail: defaultThumbnail\n};\n\n/***/ }),\n/* 151 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"react-ga\");\n\n/***/ }),\n/* 152 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"cross-fetch/polyfill\");\n\n/***/ }),\n/* 153 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _require = __webpack_require__(56),\n sendGAServeEvent = _require.sendGAServeEvent;\n\nvar _require2 = __webpack_require__(154),\n determineResponseType = _require2.determineResponseType,\n flipClaimNameAndIdForBackwardsCompatibility = _require2.flipClaimNameAndIdForBackwardsCompatibility,\n logRequestData = _require2.logRequestData,\n getClaimIdAndServeAsset = _require2.getClaimIdAndServeAsset;\n\nvar lbryUri = __webpack_require__(155);\nvar handleShowRender = __webpack_require__(156);\nvar SERVE = 'SERVE';\n\nmodule.exports = function (app) {\n // route to serve a specific asset using the channel or claim id\n app.get('/:identifier/:claim', function (req, res) {\n var headers = req.headers,\n ip = req.ip,\n originalUrl = req.originalUrl,\n params = req.params;\n // decide if this is a show request\n\n var hasFileExtension = void 0;\n try {\n var _lbryUri$parseModifie = lbryUri.parseModifier(params.claim);\n\n hasFileExtension = _lbryUri$parseModifie.hasFileExtension;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n var responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n var claimName = void 0;\n try {\n var _lbryUri$parseClaim = lbryUri.parseClaim(params.claim);\n\n claimName = _lbryUri$parseClaim.claimName;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // parse the identifier\n var isChannel = void 0,\n channelName = void 0,\n channelClaimId = void 0,\n claimId = void 0;\n try {\n var _lbryUri$parseIdentif = lbryUri.parseIdentifier(params.identifier);\n\n isChannel = _lbryUri$parseIdentif.isChannel;\n channelName = _lbryUri$parseIdentif.channelName;\n channelClaimId = _lbryUri$parseIdentif.channelClaimId;\n claimId = _lbryUri$parseIdentif.claimId;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n if (!isChannel) {\n var _flipClaimNameAndIdFo = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName);\n\n var _flipClaimNameAndIdFo2 = _slicedToArray(_flipClaimNameAndIdFo, 2);\n\n claimId = _flipClaimNameAndIdFo2[0];\n claimName = _flipClaimNameAndIdFo2[1];\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, channelName, claimId);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res);\n });\n // route to serve the winning asset at a claim or a channel page\n app.get('/:claim', function (req, res) {\n var headers = req.headers,\n ip = req.ip,\n originalUrl = req.originalUrl,\n params = req.params;\n // decide if this is a show request\n\n var hasFileExtension = void 0;\n try {\n var _lbryUri$parseModifie2 = lbryUri.parseModifier(params.claim);\n\n hasFileExtension = _lbryUri$parseModifie2.hasFileExtension;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n var responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n var claimName = void 0;\n try {\n var _lbryUri$parseClaim2 = lbryUri.parseClaim(params.claim);\n\n claimName = _lbryUri$parseClaim2.claimName;\n } catch (error) {\n return res.status(400).json({ success: false, message: error.message });\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, null, null);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res);\n });\n};\n\n/***/ }),\n/* 154 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar logger = __webpack_require__(2);\n\nvar _require = __webpack_require__(100),\n getClaimId = _require.getClaimId,\n getLocalFileRecord = _require.getLocalFileRecord;\n\nvar _require2 = __webpack_require__(99),\n handleErrorResponse = _require2.handleErrorResponse;\n\nvar SERVE = 'SERVE';\nvar SHOW = 'SHOW';\nvar NO_FILE = 'NO_FILE';\nvar NO_CHANNEL = 'NO_CHANNEL';\nvar NO_CLAIM = 'NO_CLAIM';\n\nfunction clientAcceptsHtml(_ref) {\n var accept = _ref.accept;\n\n return accept && accept.match(/text\\/html/);\n};\n\nfunction requestIsFromBrowser(headers) {\n return headers['user-agent'] && headers['user-agent'].match(/Mozilla/);\n};\n\nfunction clientWantsAsset(_ref2) {\n var accept = _ref2.accept,\n range = _ref2.range;\n\n var imageIsWanted = accept && accept.match(/image\\/.*/) && !accept.match(/text\\/html/) && !accept.match(/text\\/\\*/);\n var videoIsWanted = accept && range;\n return imageIsWanted || videoIsWanted;\n};\n\nfunction isValidClaimId(claimId) {\n return claimId.length === 40 && !/[^A-Za-z0-9]/g.test(claimId);\n};\n\nfunction isValidShortId(claimId) {\n return claimId.length === 1; // it should really evaluate the short url itself\n};\n\nfunction isValidShortIdOrClaimId(input) {\n return isValidClaimId(input) || isValidShortId(input);\n};\n\nfunction serveAssetToClient(claimId, name, res) {\n return getLocalFileRecord(claimId, name).then(function (fileRecord) {\n // check that a local record was found\n if (fileRecord === NO_FILE) {\n return res.status(307).redirect('/api/claim/get/' + name + '/' + claimId);\n }\n // serve the file\n var filePath = fileRecord.filePath,\n fileType = fileRecord.fileType;\n\n logger.verbose('serving file: ' + filePath);\n var sendFileOptions = {\n headers: {\n 'X-Content-Type-Options': 'nosniff',\n 'Content-Type': fileType || 'image/jpeg'\n }\n };\n res.status(200).sendFile(filePath, sendFileOptions);\n }).catch(function (error) {\n throw error;\n });\n};\n\nmodule.exports = {\n getClaimIdAndServeAsset: function getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) {\n // get the claim Id and then serve the asset\n getClaimId(channelName, channelClaimId, claimName, claimId).then(function (fullClaimId) {\n if (fullClaimId === NO_CLAIM) {\n return res.status(404).json({ success: false, message: 'no claim id could be found' });\n } else if (fullClaimId === NO_CHANNEL) {\n return res.status(404).json({ success: false, message: 'no channel id could be found' });\n }\n serveAssetToClient(fullClaimId, claimName, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success');\n }).catch(function (error) {\n handleErrorResponse(originalUrl, ip, error, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail');\n });\n },\n determineResponseType: function determineResponseType(hasFileExtension, headers) {\n var responseType = void 0;\n if (hasFileExtension) {\n responseType = SERVE; // assume a serve request if file extension is present\n if (clientAcceptsHtml(headers)) {\n // if the request comes from a browser, change it to a show request\n responseType = SHOW;\n }\n } else {\n responseType = SHOW;\n if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) {\n // this is in case someone embeds a show url\n logger.debug('Show request came from browser but wants an image/video. Changing response to serve...');\n responseType = SERVE;\n }\n }\n return responseType;\n },\n flipClaimNameAndIdForBackwardsCompatibility: function flipClaimNameAndIdForBackwardsCompatibility(identifier, name) {\n // this is a patch for backwards compatability with '/name/claim_id' url format\n if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) {\n var tempName = name;\n name = identifier;\n identifier = tempName;\n }\n return [identifier, name];\n },\n logRequestData: function logRequestData(responseType, claimName, channelName, claimId) {\n logger.debug('responseType ===', responseType);\n logger.debug('claim name === ', claimName);\n logger.debug('channel name ===', channelName);\n logger.debug('claim id ===', claimId);\n }\n};\n\n/***/ }),\n/* 155 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar logger = __webpack_require__(2);\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR: '@',\n parseIdentifier: function parseIdentifier(identifier) {\n logger.debug('parsing identifier:', identifier);\n var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec = componentsRegex.exec(identifier).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),\n proto = _componentsRegex$exec2[0],\n value = _componentsRegex$exec2[1],\n modifierSeperator = _componentsRegex$exec2[2],\n modifier = _componentsRegex$exec2[3];\n\n logger.debug(proto + ', ' + value + ', ' + modifierSeperator + ', ' + modifier);\n\n // Validate and process name\n if (!value) {\n throw new Error('Check your url. No channel name provided before \"' + modifierSeperator + '\"');\n }\n var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n var channelName = isChannel ? value : null;\n var claimId = void 0;\n if (isChannel) {\n if (!channelName) {\n throw new Error('No channel name after @.');\n }\n var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error('Invalid characters in channel name: ' + nameBadChars.join(', ') + '.');\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n var channelClaimId = void 0;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('No modifier provided after separator \"' + modifierSeperator + '\"');\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error('The \"' + modifierSeperator + '\" modifier is not currently supported');\n }\n }\n return {\n isChannel: isChannel,\n channelName: channelName,\n channelClaimId: channelClaimId,\n claimId: claimId\n };\n },\n parseClaim: function parseClaim(claim) {\n logger.debug('parsing name:', claim);\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec3 = componentsRegex.exec(claim).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),\n proto = _componentsRegex$exec4[0],\n claimName = _componentsRegex$exec4[1],\n modifierSeperator = _componentsRegex$exec4[2],\n modifier = _componentsRegex$exec4[3];\n\n logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('No claim name provided before .');\n }\n var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error('Invalid characters in claim name: ' + nameBadChars.join(', ') + '.');\n }\n // Validate and process modifier\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error('No file extension provided after separator ' + modifierSeperator + '.');\n }\n if (modifierSeperator !== '.') {\n throw new Error('The ' + modifierSeperator + ' modifier is not supported in the claim name');\n }\n }\n // return results\n return {\n claimName: claimName\n };\n },\n parseModifier: function parseModifier(claim) {\n logger.debug('parsing modifier:', claim);\n var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n\n var _componentsRegex$exec5 = componentsRegex.exec(claim).map(function (match) {\n return match || null;\n }),\n _componentsRegex$exec6 = _slicedToArray(_componentsRegex$exec5, 4),\n proto = _componentsRegex$exec6[0],\n claimName = _componentsRegex$exec6[1],\n modifierSeperator = _componentsRegex$exec6[2],\n modifier = _componentsRegex$exec6[3];\n\n logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier);\n // Validate and process modifier\n var hasFileExtension = false;\n if (modifierSeperator) {\n hasFileExtension = true;\n }\n return {\n hasFileExtension: hasFileExtension\n };\n }\n};\n\n/***/ }),\n/* 156 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _server = __webpack_require__(102);\n\nvar _redux = __webpack_require__(57);\n\nvar _index = __webpack_require__(103);\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _reactRedux = __webpack_require__(1);\n\nvar _reactRouterDom = __webpack_require__(4);\n\nvar _index3 = __webpack_require__(13);\n\nvar _index4 = _interopRequireDefault(_index3);\n\nvar _app = __webpack_require__(108);\n\nvar _app2 = _interopRequireDefault(_app);\n\nvar _renderFullPage = __webpack_require__(113);\n\nvar _renderFullPage2 = _interopRequireDefault(_renderFullPage);\n\nvar _reduxSaga = __webpack_require__(157);\n\nvar _reduxSaga2 = _interopRequireDefault(_reduxSaga);\n\nvar _effects = __webpack_require__(49);\n\nvar _show_uri = __webpack_require__(158);\n\nvar _show = __webpack_require__(11);\n\nvar _reactHelmet = __webpack_require__(48);\n\nvar _reactHelmet2 = _interopRequireDefault(_reactHelmet);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar returnSagaWithParams = function returnSagaWithParams(saga, params) {\n return (/*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return (0, _effects.call)(saga, params);\n\n case 2:\n case 'end':\n return _context.stop();\n }\n }\n }, _callee, this);\n })\n );\n};\n\nmodule.exports = function (req, res) {\n var context = {};\n\n // create and apply middleware\n var sagaMiddleware = (0, _reduxSaga2.default)();\n var middleware = (0, _redux.applyMiddleware)(sagaMiddleware);\n\n // create a new Redux store instance\n var store = (0, _redux.createStore)(_index2.default, middleware);\n\n // create saga\n var action = (0, _show.onHandleShowPageUri)(req.params);\n var saga = returnSagaWithParams(_show_uri.handleShowPageUri, action);\n\n // run the saga middleware\n sagaMiddleware.run(saga).done.then(function () {\n // render component to a string\n var html = (0, _server.renderToString)(_react2.default.createElement(\n _reactRedux.Provider,\n { store: store },\n _react2.default.createElement(\n _reactRouterDom.StaticRouter,\n { location: req.url, context: context },\n _react2.default.createElement(\n _index4.default,\n null,\n _react2.default.createElement(_app2.default, null)\n )\n )\n ));\n\n // get head tags from helmet\n var helmet = _reactHelmet2.default.renderStatic();\n\n // check for a redirect\n if (context.url) {\n return res.redirect(301, context.url);\n }\n\n // get the initial state from our Redux store\n var preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send((0, _renderFullPage2.default)(helmet, html, preloadedState));\n });\n};\n\n/***/ }),\n/* 157 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"redux-saga\");\n\n/***/ }),\n/* 158 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.handleShowPageUri = handleShowPageUri;\nexports.watchHandleShowPageUri = watchHandleShowPageUri;\n\nvar _effects = __webpack_require__(49);\n\nvar _show_action_types = __webpack_require__(19);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(11);\n\nvar _show_asset = __webpack_require__(159);\n\nvar _show_channel = __webpack_require__(161);\n\nvar _lbryUri = __webpack_require__(61);\n\nvar _lbryUri2 = _interopRequireDefault(_lbryUri);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateIdentifierAndClaim),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateClaimOnly),\n _marked3 = /*#__PURE__*/regeneratorRuntime.mark(handleShowPageUri),\n _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchHandleShowPageUri);\n\nfunction parseAndUpdateIdentifierAndClaim(modifier, claim) {\n var isChannel, channelName, channelClaimId, claimId, claimName, extension, _lbryUri$parseIdentif, _lbryUri$parseClaim;\n\n return regeneratorRuntime.wrap(function parseAndUpdateIdentifierAndClaim$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n // this is a request for an asset\n // claim will be an asset claim\n // the identifier could be a channel or a claim id\n isChannel = void 0, channelName = void 0, channelClaimId = void 0, claimId = void 0, claimName = void 0, extension = void 0;\n _context.prev = 1;\n _lbryUri$parseIdentif = _lbryUri2.default.parseIdentifier(modifier);\n isChannel = _lbryUri$parseIdentif.isChannel;\n channelName = _lbryUri$parseIdentif.channelName;\n channelClaimId = _lbryUri$parseIdentif.channelClaimId;\n claimId = _lbryUri$parseIdentif.claimId;\n _lbryUri$parseClaim = _lbryUri2.default.parseClaim(claim);\n claimName = _lbryUri$parseClaim.claimName;\n extension = _lbryUri$parseClaim.extension;\n _context.next = 17;\n break;\n\n case 12:\n _context.prev = 12;\n _context.t0 = _context['catch'](1);\n _context.next = 16;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 16:\n return _context.abrupt('return', _context.sent);\n\n case 17:\n if (!isChannel) {\n _context.next = 21;\n break;\n }\n\n _context.next = 20;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, channelName, channelClaimId, extension));\n\n case 20:\n return _context.abrupt('return', _context.sent);\n\n case 21:\n ;\n _context.next = 24;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, claimId, null, null, extension));\n\n case 24:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[1, 12]]);\n}\nfunction parseAndUpdateClaimOnly(claim) {\n var isChannel, channelName, channelClaimId, _lbryUri$parseIdentif2, claimName, extension, _lbryUri$parseClaim2;\n\n return regeneratorRuntime.wrap(function parseAndUpdateClaimOnly$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n // this could be a request for an asset or a channel page\n // claim could be an asset claim or a channel claim\n isChannel = void 0, channelName = void 0, channelClaimId = void 0;\n _context2.prev = 1;\n _lbryUri$parseIdentif2 = _lbryUri2.default.parseIdentifier(claim);\n isChannel = _lbryUri$parseIdentif2.isChannel;\n channelName = _lbryUri$parseIdentif2.channelName;\n channelClaimId = _lbryUri$parseIdentif2.channelClaimId;\n _context2.next = 13;\n break;\n\n case 8:\n _context2.prev = 8;\n _context2.t0 = _context2['catch'](1);\n _context2.next = 12;\n return (0, _effects.put)((0, _show.onRequestError)(_context2.t0.message));\n\n case 12:\n return _context2.abrupt('return', _context2.sent);\n\n case 13:\n if (!isChannel) {\n _context2.next = 17;\n break;\n }\n\n _context2.next = 16;\n return (0, _effects.call)(_show_channel.newChannelRequest, (0, _show.onNewChannelRequest)(channelName, channelClaimId));\n\n case 16:\n return _context2.abrupt('return', _context2.sent);\n\n case 17:\n // if not for a channel, parse the claim request\n claimName = void 0, extension = void 0;\n _context2.prev = 18;\n _lbryUri$parseClaim2 = _lbryUri2.default.parseClaim(claim);\n claimName = _lbryUri$parseClaim2.claimName;\n extension = _lbryUri$parseClaim2.extension;\n _context2.next = 29;\n break;\n\n case 24:\n _context2.prev = 24;\n _context2.t1 = _context2['catch'](18);\n _context2.next = 28;\n return (0, _effects.put)((0, _show.onRequestError)(_context2.t1.message));\n\n case 28:\n return _context2.abrupt('return', _context2.sent);\n\n case 29:\n _context2.next = 31;\n return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, null, null, extension));\n\n case 31:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this, [[1, 8], [18, 24]]);\n}\n\nfunction handleShowPageUri(action) {\n var _action$data, identifier, claim;\n\n return regeneratorRuntime.wrap(function handleShowPageUri$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _action$data = action.data, identifier = _action$data.identifier, claim = _action$data.claim;\n\n if (!identifier) {\n _context3.next = 5;\n break;\n }\n\n _context3.next = 4;\n return (0, _effects.call)(parseAndUpdateIdentifierAndClaim, identifier, claim);\n\n case 4:\n return _context3.abrupt('return', _context3.sent);\n\n case 5:\n _context3.next = 7;\n return (0, _effects.call)(parseAndUpdateClaimOnly, claim);\n\n case 7:\n case 'end':\n return _context3.stop();\n }\n }\n }, _marked3, this);\n};\n\nfunction watchHandleShowPageUri() {\n return regeneratorRuntime.wrap(function watchHandleShowPageUri$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return (0, _effects.takeLatest)(actions.HANDLE_SHOW_URI, handleShowPageUri);\n\n case 2:\n case 'end':\n return _context4.stop();\n }\n }\n }, _marked4, this);\n};\n\n/***/ }),\n/* 159 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newAssetRequest = newAssetRequest;\nexports.watchNewAssetRequest = watchNewAssetRequest;\n\nvar _effects = __webpack_require__(49);\n\nvar _show_action_types = __webpack_require__(19);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(11);\n\nvar _assetApi = __webpack_require__(160);\n\nvar _show2 = __webpack_require__(28);\n\nvar _site = __webpack_require__(114);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(newAssetRequest),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewAssetRequest);\n\nfunction newAssetRequest(action) {\n var _action$data, requestType, requestId, name, modifier, state, host, longId, _ref, assetKey, shortId, _ref2, claimData, _ref3;\n\n return regeneratorRuntime.wrap(function newAssetRequest$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, name = _action$data.name, modifier = _action$data.modifier;\n // put an action to update the request in redux\n\n _context.next = 3;\n return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));\n\n case 3:\n _context.next = 5;\n return (0, _effects.select)(_show2.selectShowState);\n\n case 5:\n state = _context.sent;\n _context.next = 8;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 8:\n host = _context.sent;\n\n if (!state.requestList[requestId]) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 11:\n // get long id && add request to request list\n longId = void 0;\n _context.prev = 12;\n _context.next = 15;\n return (0, _effects.call)(_assetApi.getLongClaimId, host, name, modifier);\n\n case 15:\n _ref = _context.sent;\n longId = _ref.data;\n _context.next = 24;\n break;\n\n case 19:\n _context.prev = 19;\n _context.t0 = _context['catch'](12);\n _context.next = 23;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 23:\n return _context.abrupt('return', _context.sent);\n\n case 24:\n assetKey = 'a#' + name + '#' + longId;\n _context.next = 27;\n return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, assetKey));\n\n case 27:\n if (!state.assetList[assetKey]) {\n _context.next = 29;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 29:\n // get short Id\n shortId = void 0;\n _context.prev = 30;\n _context.next = 33;\n return (0, _effects.call)(_assetApi.getShortId, host, name, longId);\n\n case 33:\n _ref2 = _context.sent;\n shortId = _ref2.data;\n _context.next = 42;\n break;\n\n case 37:\n _context.prev = 37;\n _context.t1 = _context['catch'](30);\n _context.next = 41;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));\n\n case 41:\n return _context.abrupt('return', _context.sent);\n\n case 42:\n // get asset claim data\n claimData = void 0;\n _context.prev = 43;\n _context.next = 46;\n return (0, _effects.call)(_assetApi.getClaimData, host, name, longId);\n\n case 46:\n _ref3 = _context.sent;\n claimData = _ref3.data;\n _context.next = 55;\n break;\n\n case 50:\n _context.prev = 50;\n _context.t2 = _context['catch'](43);\n _context.next = 54;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t2.message));\n\n case 54:\n return _context.abrupt('return', _context.sent);\n\n case 55:\n _context.next = 57;\n return (0, _effects.put)((0, _show.addAssetToAssetList)(assetKey, null, name, longId, shortId, claimData));\n\n case 57:\n _context.next = 59;\n return (0, _effects.put)((0, _show.onRequestError)(null));\n\n case 59:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[12, 19], [30, 37], [43, 50]]);\n};\n\nfunction watchNewAssetRequest() {\n return regeneratorRuntime.wrap(function watchNewAssetRequest$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.ASSET_REQUEST_NEW, newAssetRequest);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\n/***/ }),\n/* 160 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getLongClaimId = getLongClaimId;\nexports.getShortId = getShortId;\nexports.getClaimData = getClaimData;\n\nvar _request = __webpack_require__(8);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getLongClaimId(host, name, modifier) {\n var body = {};\n // create request params\n if (modifier) {\n if (modifier.id) {\n body['claimId'] = modifier.id;\n } else {\n body['channelName'] = modifier.channel.name;\n body['channelClaimId'] = modifier.channel.id;\n }\n }\n body['claimName'] = name;\n var params = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body)\n };\n // create url\n var url = host + '/api/claim/long-id';\n // return the request promise\n return (0, _request2.default)(url, params);\n};\n\nfunction getShortId(host, name, claimId) {\n var url = host + '/api/claim/short-id/' + claimId + '/' + name;\n return (0, _request2.default)(url);\n};\n\nfunction getClaimData(host, name, claimId) {\n var url = host + '/api/claim/data/' + name + '/' + claimId;\n return (0, _request2.default)(url);\n};\n\n/***/ }),\n/* 161 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newChannelRequest = newChannelRequest;\nexports.watchNewChannelRequest = watchNewChannelRequest;\nexports.watchUpdateChannelClaims = watchUpdateChannelClaims;\n\nvar _effects = __webpack_require__(49);\n\nvar _show_action_types = __webpack_require__(19);\n\nvar actions = _interopRequireWildcard(_show_action_types);\n\nvar _show = __webpack_require__(11);\n\nvar _channelApi = __webpack_require__(162);\n\nvar _show2 = __webpack_require__(28);\n\nvar _site = __webpack_require__(114);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar _marked = /*#__PURE__*/regeneratorRuntime.mark(newChannelRequest),\n _marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewChannelRequest),\n _marked3 = /*#__PURE__*/regeneratorRuntime.mark(getNewClaimsAndUpdateChannel),\n _marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchUpdateChannelClaims);\n\nfunction newChannelRequest(action) {\n var _action$data, requestType, requestId, channelName, channelId, state, host, longId, shortId, _ref, _ref$data, channelKey, claimsData, _ref2;\n\n return regeneratorRuntime.wrap(function newChannelRequest$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, channelName = _action$data.channelName, channelId = _action$data.channelId;\n // put an action to update the request in redux\n\n _context.next = 3;\n return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));\n\n case 3:\n _context.next = 5;\n return (0, _effects.select)(_show2.selectShowState);\n\n case 5:\n state = _context.sent;\n _context.next = 8;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 8:\n host = _context.sent;\n\n if (!state.requestList[requestId]) {\n _context.next = 11;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 11:\n // get channel long id\n longId = void 0, shortId = void 0;\n _context.prev = 12;\n _context.next = 15;\n return (0, _effects.call)(_channelApi.getChannelData, host, channelName, channelId);\n\n case 15:\n _ref = _context.sent;\n _ref$data = _ref.data;\n longId = _ref$data.longChannelClaimId;\n shortId = _ref$data.shortChannelClaimId;\n _context.next = 26;\n break;\n\n case 21:\n _context.prev = 21;\n _context.t0 = _context['catch'](12);\n _context.next = 25;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));\n\n case 25:\n return _context.abrupt('return', _context.sent);\n\n case 26:\n // store the request in the channel requests list\n channelKey = 'c#' + channelName + '#' + longId;\n _context.next = 29;\n return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, channelKey));\n\n case 29:\n if (!state.channelList[channelKey]) {\n _context.next = 31;\n break;\n }\n\n return _context.abrupt('return', null);\n\n case 31:\n // get channel claims data\n claimsData = void 0;\n _context.prev = 32;\n _context.next = 35;\n return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, channelName, 1);\n\n case 35:\n _ref2 = _context.sent;\n claimsData = _ref2.data;\n _context.next = 44;\n break;\n\n case 39:\n _context.prev = 39;\n _context.t1 = _context['catch'](32);\n _context.next = 43;\n return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));\n\n case 43:\n return _context.abrupt('return', _context.sent);\n\n case 44:\n _context.next = 46;\n return (0, _effects.put)((0, _show.addNewChannelToChannelList)(channelKey, channelName, shortId, longId, claimsData));\n\n case 46:\n _context.next = 48;\n return (0, _effects.put)((0, _show.onRequestError)(null));\n\n case 48:\n case 'end':\n return _context.stop();\n }\n }\n }, _marked, this, [[12, 21], [32, 39]]);\n}\n\nfunction watchNewChannelRequest() {\n return regeneratorRuntime.wrap(function watchNewChannelRequest$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return (0, _effects.takeLatest)(actions.CHANNEL_REQUEST_NEW, newChannelRequest);\n\n case 2:\n case 'end':\n return _context2.stop();\n }\n }\n }, _marked2, this);\n};\n\nfunction getNewClaimsAndUpdateChannel(action) {\n var _action$data2, channelKey, name, longId, page, host, claimsData, _ref3;\n\n return regeneratorRuntime.wrap(function getNewClaimsAndUpdateChannel$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n _action$data2 = action.data, channelKey = _action$data2.channelKey, name = _action$data2.name, longId = _action$data2.longId, page = _action$data2.page;\n _context3.next = 3;\n return (0, _effects.select)(_site.selectSiteHost);\n\n case 3:\n host = _context3.sent;\n claimsData = void 0;\n _context3.prev = 5;\n _context3.next = 8;\n return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, name, page);\n\n case 8:\n _ref3 = _context3.sent;\n claimsData = _ref3.data;\n _context3.next = 17;\n break;\n\n case 12:\n _context3.prev = 12;\n _context3.t0 = _context3['catch'](5);\n _context3.next = 16;\n return (0, _effects.put)((0, _show.onRequestError)(_context3.t0.message));\n\n case 16:\n return _context3.abrupt('return', _context3.sent);\n\n case 17:\n _context3.next = 19;\n return (0, _effects.put)((0, _show.updateChannelClaims)(channelKey, claimsData));\n\n case 19:\n case 'end':\n return _context3.stop();\n }\n }\n }, _marked3, this, [[5, 12]]);\n}\n\nfunction watchUpdateChannelClaims() {\n return regeneratorRuntime.wrap(function watchUpdateChannelClaims$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return (0, _effects.takeLatest)(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);\n\n case 2:\n case 'end':\n return _context4.stop();\n }\n }\n }, _marked4, this);\n}\n\n/***/ }),\n/* 162 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getChannelData = getChannelData;\nexports.getChannelClaims = getChannelClaims;\n\nvar _request = __webpack_require__(8);\n\nvar _request2 = _interopRequireDefault(_request);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getChannelData(host, id, name) {\n if (!id) id = 'none';\n var url = host + '/api/channel/data/' + name + '/' + id;\n return (0, _request2.default)(url);\n};\n\nfunction getChannelClaims(host, longId, name, page) {\n if (!page) page = 1;\n var url = host + '/api/channel/claims/' + name + '/' + longId + '/' + page;\n return (0, _request2.default)(url);\n};\n\n/***/ }),\n/* 163 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar handlePageRender = __webpack_require__(101);\n\nmodule.exports = function (app) {\n // a catch-all route if someone visits a page that does not exist\n app.use('*', function (req, res) {\n // send response\n handlePageRender(req, res);\n });\n};\n\n/***/ }),\n/* 164 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _require = __webpack_require__(165),\n logLevel = _require.logLevel;\n\nmodule.exports = function (winston) {\n // configure\n winston.configure({\n transports: [new winston.transports.Console({\n level: logLevel,\n timestamp: false,\n colorize: true,\n prettyPrint: true,\n handleExceptions: true,\n humanReadableUnhandledException: true\n })]\n });\n // test all the log levels\n winston.error('Level 0');\n winston.warn('Level 1');\n winston.info('Level 2');\n winston.verbose('Level 3');\n winston.debug('Level 4');\n winston.silly('Level 5');\n};\n\n/***/ }),\n/* 165 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar loggerConfig = {\n logLevel: 'debug' // options: silly, debug, verbose, info\n};\n\nmodule.exports = loggerConfig;\n\n/***/ }),\n/* 166 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar winstonSlackWebHook = __webpack_require__(167).SlackWebHook;\nvar slackConfig = __webpack_require__(93);\n\nmodule.exports = function (winston) {\n var slackWebHook = slackConfig.slackWebHook,\n slackErrorChannel = slackConfig.slackErrorChannel,\n slackInfoChannel = slackConfig.slackInfoChannel;\n\n if (slackWebHook) {\n // add a transport for errors to slack\n if (slackErrorChannel) {\n winston.add(winstonSlackWebHook, {\n name: 'slack-errors-transport',\n level: 'warn',\n webhookUrl: slackWebHook,\n channel: slackErrorChannel,\n username: 'spee.ch',\n iconEmoji: ':face_with_head_bandage:'\n });\n };\n if (slackInfoChannel) {\n winston.add(winstonSlackWebHook, {\n name: 'slack-info-transport',\n level: 'info',\n webhookUrl: slackWebHook,\n channel: slackInfoChannel,\n username: 'spee.ch',\n iconEmoji: ':nerd_face:'\n });\n };\n // send test message\n winston.error('Slack \"error\" logging is online.');\n winston.info('Slack \"info\" logging is online.');\n } else {\n winston.warn('Slack logging is not enabled because no slackWebHook config var provided.');\n }\n};\n\n/***/ }),\n/* 167 */\n/***/ (function(module, exports) {\n\nmodule.exports = require(\"winston-slack-webhook\");\n\n/***/ }),\n/* 168 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar map = {\n\t\"./\": 50,\n\t\"./ActiveStatusBar\": 24,\n\t\"./ActiveStatusBar/\": 24,\n\t\"./ActiveStatusBar/index\": 24,\n\t\"./ActiveStatusBar/index.jsx\": 24,\n\t\"./AssetPreview\": 34,\n\t\"./AssetPreview/\": 34,\n\t\"./AssetPreview/index\": 34,\n\t\"./AssetPreview/index.js\": 34,\n\t\"./AssetPreview/view\": 78,\n\t\"./AssetPreview/view.jsx\": 78,\n\t\"./ExpandingTextArea\": 36,\n\t\"./ExpandingTextArea/\": 36,\n\t\"./ExpandingTextArea/index\": 36,\n\t\"./ExpandingTextArea/index.jsx\": 36,\n\t\"./GAListener\": 13,\n\t\"./GAListener/\": 13,\n\t\"./GAListener/index\": 13,\n\t\"./GAListener/index.jsx\": 13,\n\t\"./InactiveStatusBar\": 25,\n\t\"./InactiveStatusBar/\": 25,\n\t\"./InactiveStatusBar/index\": 25,\n\t\"./InactiveStatusBar/index.jsx\": 25,\n\t\"./Logo\": 21,\n\t\"./Logo/\": 21,\n\t\"./Logo/index\": 21,\n\t\"./Logo/index.jsx\": 21,\n\t\"./NavBarChannelOptionsDropdown\": 22,\n\t\"./NavBarChannelOptionsDropdown/\": 22,\n\t\"./NavBarChannelOptionsDropdown/index\": 22,\n\t\"./NavBarChannelOptionsDropdown/index.jsx\": 22,\n\t\"./ProgressBar\": 10,\n\t\"./ProgressBar/\": 10,\n\t\"./ProgressBar/index\": 10,\n\t\"./ProgressBar/index.jsx\": 10,\n\t\"./PublishPreview\": 37,\n\t\"./PublishPreview/\": 37,\n\t\"./PublishPreview/index\": 37,\n\t\"./PublishPreview/index.jsx\": 37,\n\t\"./PublishUrlMiddleDisplay\": 38,\n\t\"./PublishUrlMiddleDisplay/\": 38,\n\t\"./PublishUrlMiddleDisplay/index\": 38,\n\t\"./PublishUrlMiddleDisplay/index.jsx\": 38,\n\t\"./SEO\": 7,\n\t\"./SEO/\": 7,\n\t\"./SEO/index\": 7,\n\t\"./SEO/index.js\": 7,\n\t\"./SEO/view\": 66,\n\t\"./SEO/view.jsx\": 66,\n\t\"./index\": 50,\n\t\"./index.js\": 50\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 168;\n\n/***/ }),\n/* 169 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar map = {\n\t\"./\": 52,\n\t\"./AssetDisplay\": 17,\n\t\"./AssetDisplay/\": 17,\n\t\"./AssetDisplay/index\": 17,\n\t\"./AssetDisplay/index.js\": 17,\n\t\"./AssetDisplay/view\": 72,\n\t\"./AssetDisplay/view.jsx\": 72,\n\t\"./AssetInfo\": 31,\n\t\"./AssetInfo/\": 31,\n\t\"./AssetInfo/index\": 31,\n\t\"./AssetInfo/index.js\": 31,\n\t\"./AssetInfo/view\": 75,\n\t\"./AssetInfo/view.jsx\": 75,\n\t\"./AssetTitle\": 30,\n\t\"./AssetTitle/\": 30,\n\t\"./AssetTitle/index\": 30,\n\t\"./AssetTitle/index.js\": 30,\n\t\"./AssetTitle/view\": 74,\n\t\"./AssetTitle/view.jsx\": 74,\n\t\"./ChannelClaimsDisplay\": 33,\n\t\"./ChannelClaimsDisplay/\": 33,\n\t\"./ChannelClaimsDisplay/index\": 33,\n\t\"./ChannelClaimsDisplay/index.js\": 33,\n\t\"./ChannelClaimsDisplay/view\": 77,\n\t\"./ChannelClaimsDisplay/view.jsx\": 77,\n\t\"./ChannelCreateForm\": 16,\n\t\"./ChannelCreateForm/\": 16,\n\t\"./ChannelCreateForm/index\": 16,\n\t\"./ChannelCreateForm/index.js\": 16,\n\t\"./ChannelCreateForm/view\": 69,\n\t\"./ChannelCreateForm/view.jsx\": 69,\n\t\"./ChannelLoginForm\": 15,\n\t\"./ChannelLoginForm/\": 15,\n\t\"./ChannelLoginForm/index\": 15,\n\t\"./ChannelLoginForm/index.js\": 15,\n\t\"./ChannelLoginForm/view\": 68,\n\t\"./ChannelLoginForm/view.jsx\": 68,\n\t\"./ChannelSelect\": 39,\n\t\"./ChannelSelect/\": 39,\n\t\"./ChannelSelect/index\": 39,\n\t\"./ChannelSelect/index.js\": 39,\n\t\"./ChannelSelect/view\": 81,\n\t\"./ChannelSelect/view.jsx\": 81,\n\t\"./Dropzone\": 18,\n\t\"./Dropzone/\": 18,\n\t\"./Dropzone/index\": 18,\n\t\"./Dropzone/index.js\": 18,\n\t\"./Dropzone/view\": 82,\n\t\"./Dropzone/view.jsx\": 82,\n\t\"./FourOhFourPage\": 35,\n\t\"./FourOhFourPage/\": 35,\n\t\"./FourOhFourPage/index\": 35,\n\t\"./FourOhFourPage/index.jsx\": 35,\n\t\"./FourOhFourPage/view\": 79,\n\t\"./FourOhFourPage/view.jsx\": 79,\n\t\"./NavBar\": 5,\n\t\"./NavBar/\": 5,\n\t\"./NavBar/index\": 5,\n\t\"./NavBar/index.js\": 5,\n\t\"./NavBar/view\": 65,\n\t\"./NavBar/view.jsx\": 65,\n\t\"./PublishDetails\": 40,\n\t\"./PublishDetails/\": 40,\n\t\"./PublishDetails/index\": 40,\n\t\"./PublishDetails/index.js\": 40,\n\t\"./PublishDetails/view\": 83,\n\t\"./PublishDetails/view.jsx\": 83,\n\t\"./PublishDisabledMessage\": 45,\n\t\"./PublishDisabledMessage/\": 45,\n\t\"./PublishDisabledMessage/index\": 45,\n\t\"./PublishDisabledMessage/index.js\": 45,\n\t\"./PublishDisabledMessage/view\": 88,\n\t\"./PublishDisabledMessage/view.jsx\": 88,\n\t\"./PublishMetadataInputs\": 44,\n\t\"./PublishMetadataInputs/\": 44,\n\t\"./PublishMetadataInputs/index\": 44,\n\t\"./PublishMetadataInputs/index.js\": 44,\n\t\"./PublishMetadataInputs/view\": 87,\n\t\"./PublishMetadataInputs/view.jsx\": 87,\n\t\"./PublishStatus\": 46,\n\t\"./PublishStatus/\": 46,\n\t\"./PublishStatus/index\": 46,\n\t\"./PublishStatus/index.js\": 46,\n\t\"./PublishStatus/view\": 89,\n\t\"./PublishStatus/view.jsx\": 89,\n\t\"./PublishThumbnailInput\": 43,\n\t\"./PublishThumbnailInput/\": 43,\n\t\"./PublishThumbnailInput/index\": 43,\n\t\"./PublishThumbnailInput/index.js\": 43,\n\t\"./PublishThumbnailInput/view\": 86,\n\t\"./PublishThumbnailInput/view.jsx\": 86,\n\t\"./PublishTitleInput\": 41,\n\t\"./PublishTitleInput/\": 41,\n\t\"./PublishTitleInput/index\": 41,\n\t\"./PublishTitleInput/index.js\": 41,\n\t\"./PublishTitleInput/view\": 84,\n\t\"./PublishTitleInput/view.jsx\": 84,\n\t\"./PublishTool\": 47,\n\t\"./PublishTool/\": 47,\n\t\"./PublishTool/index\": 47,\n\t\"./PublishTool/index.js\": 47,\n\t\"./PublishTool/view\": 90,\n\t\"./PublishTool/view.jsx\": 90,\n\t\"./PublishUrlInput\": 42,\n\t\"./PublishUrlInput/\": 42,\n\t\"./PublishUrlInput/index\": 42,\n\t\"./PublishUrlInput/index.js\": 42,\n\t\"./PublishUrlInput/view\": 85,\n\t\"./PublishUrlInput/view.jsx\": 85,\n\t\"./ShowAssetDetails\": 29,\n\t\"./ShowAssetDetails/\": 29,\n\t\"./ShowAssetDetails/index\": 29,\n\t\"./ShowAssetDetails/index.js\": 29,\n\t\"./ShowAssetDetails/view\": 73,\n\t\"./ShowAssetDetails/view.jsx\": 73,\n\t\"./ShowAssetLite\": 27,\n\t\"./ShowAssetLite/\": 27,\n\t\"./ShowAssetLite/index\": 27,\n\t\"./ShowAssetLite/index.js\": 27,\n\t\"./ShowAssetLite/view\": 71,\n\t\"./ShowAssetLite/view.jsx\": 71,\n\t\"./ShowChannel\": 32,\n\t\"./ShowChannel/\": 32,\n\t\"./ShowChannel/index\": 32,\n\t\"./ShowChannel/index.js\": 32,\n\t\"./ShowChannel/view\": 76,\n\t\"./ShowChannel/view.jsx\": 76,\n\t\"./index\": 52,\n\t\"./index.js\": 52\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 169;\n\n/***/ }),\n/* 170 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LOAD_START = exports.LOAD_START = 'LOAD_START';\nvar LOADING = exports.LOADING = 'LOADING';\nvar PUBLISHING = exports.PUBLISHING = 'PUBLISHING';\nvar SUCCESS = exports.SUCCESS = 'SUCCESS';\nvar FAILED = exports.FAILED = 'FAILED';\n\n/***/ }),\n/* 171 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar map = {\n\t\"./\": 53,\n\t\"./AboutPage\": 20,\n\t\"./AboutPage/\": 20,\n\t\"./AboutPage/index\": 20,\n\t\"./AboutPage/index.jsx\": 20,\n\t\"./ErrorPage\": 12,\n\t\"./ErrorPage/\": 12,\n\t\"./ErrorPage/index\": 12,\n\t\"./ErrorPage/index.jsx\": 12,\n\t\"./HomePage\": 54,\n\t\"./HomePage/\": 54,\n\t\"./HomePage/index\": 54,\n\t\"./HomePage/index.jsx\": 54,\n\t\"./LoginPage\": 23,\n\t\"./LoginPage/\": 23,\n\t\"./LoginPage/index\": 23,\n\t\"./LoginPage/index.js\": 23,\n\t\"./LoginPage/view\": 67,\n\t\"./LoginPage/view.jsx\": 67,\n\t\"./ShowPage\": 26,\n\t\"./ShowPage/\": 26,\n\t\"./ShowPage/index\": 26,\n\t\"./ShowPage/index.js\": 26,\n\t\"./ShowPage/view\": 70,\n\t\"./ShowPage/view.jsx\": 70,\n\t\"./index\": 53,\n\t\"./index.js\": 53\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 171;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// index.js"," \t// The module cache\n \tvar installedModules = {};\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 115);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ab248b8a96a96b3ce431","module.exports = require(\"react\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react\"\n// module id = 0\n// module chunks = 0","module.exports = require(\"react-redux\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-redux\"\n// module id = 1\n// module chunks = 0","module.exports = require(\"winston\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"winston\"\n// module id = 2\n// module chunks = 0","function SiteConfig () {\n this.analytics = {\n googleId: 'default',\n };\n this.assetDefaults = {\n description: 'An asset published on Spee.ch',\n thumbnail : 'https://spee.ch/assets/img/video_thumb_default.png',\n title : 'Spee.ch',\n };\n this.auth = {\n sessionKey: 'default',\n };\n this.customComponents = {\n components: {},\n containers: {},\n pages : {},\n };\n this.details = {\n description: 'Open-source, decentralized image and video sharing.',\n host : 'default',\n port : 3000,\n title : 'Spee.ch',\n twitter : '@spee_ch',\n };\n this.publishing = {\n additionalClaimAddresses: [],\n disabled : false,\n disabledMessage : 'Please check back soon.',\n primaryClaimAddress : 'default',\n thumbnailChannel : 'default',\n thumbnailChannelId : 'default',\n uploadDirectory : '/home/lbry/Uploads',\n };\n this.configure = (config) => {\n if (!config) {\n return console.log('No site config received.');\n }\n const { analytics, assetDefaults, auth, customComponents, details, publishing } = config;\n this.analytics = analytics;\n this.assetDefaults = assetDefaults;\n this.auth = auth;\n this.details = details;\n this.publishing = publishing;\n this.customComponents = customComponents;\n };\n};\n\nmodule.exports = new SiteConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/siteConfig.js","module.exports = require(\"react-router-dom\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-router-dom\"\n// module id = 4\n// module chunks = 0","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport {updateSelectedChannel} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, site }) => {\n return {\n channelName : channel.loggedInChannel.name,\n channelShortId: channel.loggedInChannel.shortId,\n channelLongId : channel.loggedInChannel.longId,\n siteDescription: site.description,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n onChannelLogout: () => {\n dispatch(updateLoggedInChannel(null, null, null));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/NavBar/index.js","import * as actions from 'constants/publish_action_types';\n\n// export action creators\nexport function selectFile (file) {\n return {\n type: actions.FILE_SELECTED,\n data: file,\n };\n};\n\nexport function clearFile () {\n return {\n type: actions.FILE_CLEAR,\n };\n};\n\nexport function updateMetadata (name, value) {\n return {\n type: actions.METADATA_UPDATE,\n data: {\n name,\n value,\n },\n };\n};\n\nexport function updateClaim (value) {\n return {\n type: actions.CLAIM_UPDATE,\n data: value,\n };\n};\n\nexport function setPublishInChannel (channel) {\n return {\n type: actions.SET_PUBLISH_IN_CHANNEL,\n channel,\n };\n};\n\nexport function updatePublishStatus (status, message) {\n return {\n type: actions.PUBLISH_STATUS_UPDATE,\n data: {\n status,\n message,\n },\n };\n};\n\nexport function updateError (name, value) {\n return {\n type: actions.ERROR_UPDATE,\n data: {\n name,\n value,\n },\n };\n};\n\nexport function updateSelectedChannel (channelName) {\n return {\n type: actions.SELECTED_CHANNEL_UPDATE,\n data: channelName,\n };\n};\n\nexport function toggleMetadataInputs (showMetadataInputs) {\n return {\n type: actions.TOGGLE_METADATA_INPUTS,\n data: showMetadataInputs,\n };\n};\n\nexport function onNewThumbnail (file) {\n return {\n type: actions.THUMBNAIL_NEW,\n data: file,\n };\n};\n\nexport function startPublish (history) {\n return {\n type: actions.PUBLISH_START,\n data: { history },\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/publish.js","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ site }) => {\n const { defaultDescription, defaultThumbnail, description: siteDescription, host: siteHost, title: siteTitle, twitter: siteTwitter } = site;\n return {\n defaultDescription,\n defaultThumbnail,\n siteDescription,\n siteHost,\n siteTitle,\n siteTwitter,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/SEO/index.js","import 'cross-fetch/polyfill';\n\n/**\n * Parses the JSON returned by a network request\n *\n * @param {object} response A response from a network request\n *\n * @return {object} The parsed JSON from the request\n */\nfunction parseJSON (response) {\n if (response.status === 204 || response.status === 205) {\n return null;\n }\n return response.json();\n}\n\n/**\n * Parses the status returned by a network request\n *\n * @param {object} response A response from a network request\n * @param {object} response The parsed JSON from the network request\n *\n * @return {object | undefined} Returns object with status and statusText, or undefined\n */\nfunction checkStatus (response, jsonResponse) {\n if (response.status >= 200 && response.status < 300) {\n return jsonResponse;\n }\n const error = new Error(jsonResponse.message);\n error.response = response;\n throw error;\n}\n\n/**\n * Requests a URL, returning a promise\n *\n * @param {string} url The URL we want to request\n * @param {object} [options] The options we want to pass to \"fetch\"\n *\n * @return {object} The response data\n */\n\nexport default function request (url, options) {\n return fetch(url, options)\n .then(response => {\n return Promise.all([response, parseJSON(response)]);\n })\n .then(([response, jsonResponse]) => {\n return checkStatus(response, jsonResponse);\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/request.js","const Sequelize = require('sequelize');\nconst logger = require('winston');\n\nconsole.log('exporting sequelize models');\nconst { database, username, password } = require('../../config/mysqlConfig');\nconst db = {};\n// set sequelize options\nconst sequelize = new Sequelize(database, username, password, {\n host : 'localhost',\n dialect : 'mysql',\n dialectOptions: {decimalNumbers: true}, // fix to ensure DECIMAL will not be stored as a string\n logging : false,\n pool : {\n max : 5,\n min : 0,\n idle : 10000,\n acquire: 10000,\n },\n});\n\n// establish mysql connection\nsequelize\n .authenticate()\n .then(() => {\n logger.info('Sequelize has established mysql connection successfully.');\n })\n .catch(err => {\n logger.error('Sequelize was unable to connect to the database:', err);\n });\n\n// manually add each model to the db object\nconst Certificate = require('./certificate.js');\nconst Channel = require('./channel.js');\nconst Claim = require('./claim.js');\nconst File = require('./file.js');\nconst Request = require('./request.js');\nconst User = require('./user.js');\ndb['Certificate'] = sequelize.import('Certificate', Certificate);\ndb['Channel'] = sequelize.import('Channel', Channel);\ndb['Claim'] = sequelize.import('Claim', Claim);\ndb['File'] = sequelize.import('File', File);\ndb['Request'] = sequelize.import('Request', Request);\ndb['User'] = sequelize.import('User', User);\n\n// run model.association for each model in the db object that has an association\nObject.keys(db).forEach(modelName => {\n if (db[modelName].associate) {\n logger.info('Associating model:', modelName);\n db[modelName].associate(db);\n }\n});\n\ndb.sequelize = sequelize;\ndb.Sequelize = Sequelize;\n\n// add an 'upsert' method to the db object\ndb.upsert = (Model, values, condition, tableName) => {\n return Model\n .findOne({\n where: condition,\n })\n .then(obj => {\n if (obj) { // update\n logger.debug(`updating record in db.${tableName}`);\n return obj.update(values);\n } else { // insert\n logger.debug(`creating record in db.${tableName}`);\n return Model.create(values);\n }\n })\n .catch(function (error) {\n logger.error(`${tableName}.upsert error`, error);\n throw error;\n });\n};\n\nmodule.exports = db;\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/index.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ActiveStatusBar from 'components/ActiveStatusBar';\nimport InactiveStatusBar from 'components/InactiveStatusBar';\n\nclass ProgressBar extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n bars : [],\n index : 0,\n incrementer: 1,\n };\n this.createBars = this.createBars.bind(this);\n this.startProgressBar = this.startProgressBar.bind(this);\n this.updateProgressBar = this.updateProgressBar.bind(this);\n this.stopProgressBar = this.stopProgressBar.bind(this);\n }\n componentDidMount () {\n this.createBars();\n this.startProgressBar();\n }\n componentWillUnmount () {\n this.stopProgressBar();\n }\n createBars () {\n const bars = [];\n for (let i = 0; i <= this.props.size; i++) {\n bars.push({isActive: false});\n }\n this.setState({ bars });\n }\n startProgressBar () {\n this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);\n };\n updateProgressBar () {\n let index = this.state.index;\n let incrementer = this.state.incrementer;\n let bars = this.state.bars;\n // flip incrementer if necessary, to stay in bounds\n if ((index < 0) || (index > this.props.size)) {\n incrementer = incrementer * -1;\n index += incrementer;\n }\n // update the indexed bar\n if (incrementer > 0) {\n bars[index].isActive = true;\n } else {\n bars[index].isActive = false;\n };\n // increment index\n index += incrementer;\n // update state\n this.setState({\n bars,\n incrementer,\n index,\n });\n };\n stopProgressBar () {\n clearInterval(this.updateInterval);\n };\n render () {\n return (\n <div>\n {this.state.bars.map((bar, index) => bar.isActive ? <ActiveStatusBar key={index} /> : <InactiveStatusBar key={index}/>)}\n </div>\n );\n }\n};\n\nProgressBar.propTypes = {\n size: PropTypes.number.isRequired,\n};\n\nexport default ProgressBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ProgressBar/index.jsx","import * as actions from 'constants/show_action_types';\n\nimport { CHANNEL, ASSET_LITE, ASSET_DETAILS } from 'constants/show_request_types';\n\n// basic request parsing\nexport function onHandleShowPageUri (params) {\n return {\n type: actions.HANDLE_SHOW_URI,\n data: params,\n };\n};\n\nexport function onRequestError (error) {\n return {\n type: actions.REQUEST_ERROR,\n data: error,\n };\n};\n\nexport function onNewChannelRequest (channelName, channelId) {\n const requestType = CHANNEL;\n const requestId = `cr#${channelName}#${channelId}`;\n return {\n type: actions.CHANNEL_REQUEST_NEW,\n data: { requestType, requestId, channelName, channelId },\n };\n};\n\nexport function onNewAssetRequest (name, id, channelName, channelId, extension) {\n const requestType = extension ? ASSET_LITE : ASSET_DETAILS;\n const requestId = `ar#${name}#${id}#${channelName}#${channelId}`;\n return {\n type: actions.ASSET_REQUEST_NEW,\n data: {\n requestType,\n requestId,\n name,\n modifier: {\n id,\n channel: {\n name: channelName,\n id : channelId,\n },\n },\n },\n };\n};\n\nexport function onRequestUpdate (requestType, requestId) {\n return {\n type: actions.REQUEST_UPDATE,\n data: {\n requestType,\n requestId,\n },\n };\n};\n\nexport function addRequestToRequestList (id, error, key) {\n return {\n type: actions.REQUEST_LIST_ADD,\n data: { id, error, key },\n };\n};\n\n// asset actions\n\nexport function addAssetToAssetList (id, error, name, claimId, shortId, claimData) {\n return {\n type: actions.ASSET_ADD,\n data: { id, error, name, claimId, shortId, claimData },\n };\n}\n\n// channel actions\n\nexport function addNewChannelToChannelList (id, name, shortId, longId, claimsData) {\n return {\n type: actions.CHANNEL_ADD,\n data: { id, name, shortId, longId, claimsData },\n };\n};\n\nexport function onUpdateChannelClaims (channelKey, name, longId, page) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,\n data: {channelKey, name, longId, page},\n };\n};\n\nexport function updateChannelClaims (channelListId, claimsData) {\n return {\n type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,\n data: {channelListId, claimsData},\n };\n};\n\n// display a file\n\nexport function fileRequested (name, claimId) {\n return {\n type: actions.FILE_REQUESTED,\n data: { name, claimId },\n };\n};\n\nexport function updateFileAvailability (status) {\n return {\n type: actions.FILE_AVAILABILITY_UPDATE,\n data: status,\n };\n};\n\nexport function updateDisplayAssetError (error) {\n return {\n type: actions.DISPLAY_ASSET_ERROR,\n data: error,\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/show.js","import React from 'react';\nimport PropTypes from 'prop-types';\nimport NavBar from 'containers/NavBar';\n\nclass ErrorPage extends React.Component {\n render () {\n const { error } = this.props;\n return (\n <div>\n <NavBar />\n <div className='row row--padded'>\n <p>{error}</p>\n </div>\n </div>\n );\n }\n};\n\nErrorPage.propTypes = {\n error: PropTypes.string.isRequired,\n};\n\nexport default ErrorPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ErrorPage/index.jsx","import React from 'react';\nimport GoogleAnalytics from 'react-ga';\nimport { withRouter } from 'react-router-dom';\nconst { analytics: { googleId } } = require('../../../config/siteConfig.js');\n\nGoogleAnalytics.initialize(googleId);\n\nclass GAListener extends React.Component {\n componentDidMount () {\n this.sendPageView(this.props.history.location);\n this.props.history.listen(this.sendPageView);\n }\n\n sendPageView (location) {\n GoogleAnalytics.set({ page: location.pathname });\n GoogleAnalytics.pageview(location.pathname);\n }\n\n render () {\n return this.props.children;\n }\n}\n\nexport default withRouter(GAListener);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/GAListener/index.jsx","module.exports = require(\"prop-types\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"prop-types\"\n// module id = 14\n// module chunks = 0","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport View from './view';\nimport {updateSelectedChannel} from '../../actions/publish';\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelLoginForm/index.js","import { connect } from 'react-redux';\nimport { updateLoggedInChannel } from 'actions/channel';\nimport View from './view';\nimport {updateSelectedChannel} from 'actions/publish';\n\nconst mapDispatchToProps = dispatch => {\n return {\n onChannelLogin: (name, shortId, longId) => {\n dispatch(updateLoggedInChannel(name, shortId, longId));\n dispatch(updateSelectedChannel(name));\n },\n };\n};\n\nexport default connect(null, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelCreateForm/index.js","import { connect } from 'react-redux';\nimport View from './view';\nimport { fileRequested } from 'actions/show';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n // select error and status\n const error = show.displayAsset.error;\n const status = show.displayAsset.status;\n // select asset\n const asset = selectAsset(show);\n // return props\n return {\n error,\n status,\n asset,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onFileRequest: (name, claimId) => {\n dispatch(fileRequested(name, claimId));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetDisplay/index.js","import { connect } from 'react-redux';\nimport { selectFile, updateError, clearFile } from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n file : publish.file,\n thumbnail: publish.thumbnail,\n fileError: publish.error.file,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n selectFile: (file) => {\n dispatch(selectFile(file));\n },\n setFileError: (value) => {\n dispatch(clearFile());\n dispatch(updateError('file', value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/Dropzone/index.js","// request actions\nexport const HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';\nexport const REQUEST_ERROR = 'REQUEST_ERROR';\nexport const REQUEST_UPDATE = 'REQUEST_UPDATE';\nexport const ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';\nexport const CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';\nexport const REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';\n\n// asset actions\nexport const ASSET_ADD = `ASSET_ADD`;\n\n// channel actions\nexport const CHANNEL_ADD = 'CHANNEL_ADD';\n\nexport const CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';\nexport const CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';\n\n// asset/file display actions\nexport const FILE_REQUESTED = 'FILE_REQUESTED';\nexport const FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';\nexport const DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/show_action_types.js","import React from 'react';\nimport NavBar from 'containers/NavBar';\nimport SEO from 'components/SEO';\n\nclass AboutPage extends React.Component {\n render () {\n return (\n <div>\n <SEO pageTitle={'About'} pageUri={'about'} />\n <NavBar />\n <div className='row row--padded'>\n <div className='column column--5 column--med-10 align-content-top'>\n <div className='column column--8 column--med-10'>\n <p className='pull-quote'>Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.</p>\n <p><a className='link--primary' target='_blank' href='https://twitter.com/spee_ch'>TWITTER</a></p>\n <p><a className='link--primary' target='_blank' href='https://github.com/lbryio/spee.ch'>GITHUB</a></p>\n <p><a className='link--primary' target='_blank' href='https://discord.gg/YjYbwhS'>DISCORD CHANNEL</a></p>\n <p><a className='link--primary' target='_blank' href='https://github.com/lbryio/spee.ch/blob/master/README.md'>DOCUMENTATION</a></p>\n </div>\n </div><div className='column column--5 column--med-10 align-content-top'>\n <div className='column column--8 column--med-10'>\n <p>Spee.ch is a media-hosting site that reads from and publishes content to the <a className='link--primary' href='https://lbry.io'>LBRY</a> blockchain.</p>\n <p>Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the <a className='link--primary' href='https://lbry.io/get'>LBRY</a> network. This means that your images are stored in multiple locations without a single point of failure.</p>\n <h3>Contribute</h3>\n <p>If you have an idea for your own spee.ch-like site on top of LBRY, fork our <a className='link--primary' href='https://github.com/lbryio/spee.ch'>github repo</a> and go to town!</p>\n <p>If you want to improve spee.ch, join our <a className='link--primary' href='https://discord.gg/YjYbwhS'>discord channel</a> or solve one of our <a className='link--primary' href='https://github.com/lbryio/spee.ch/issues'>github issues</a>.</p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n};\n\nexport default AboutPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/AboutPage/index.jsx","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nfunction Logo () {\n return (\n <svg version='1.1' id='Layer_1' x='0px' y='0px' height='24px' viewBox='0 0 80 31' enableBackground='new 0 0 80 31' className='nav-bar-logo'>\n <Link to='/'>\n <title>Logo</title>\n <desc>Spee.ch logo</desc>\n <g id='About'>\n <g id='Publish-Form-V2-_x28_filled_x29_' transform='translate(-42.000000, -23.000000)'>\n <g id='Group-17' transform='translate(42.000000, 22.000000)'>\n <text transform='matrix(1 0 0 1 0 20)' fontSize='25' fontFamily='Roboto'>Spee<h</text>\n <g id='Group-16' transform='translate(0.000000, 30.000000)'>\n <path id='Line-8' fill='none' stroke='#09F911' strokeWidth='1' strokeLinecap='square' d='M0.5,1.5h15' />\n <path id='Line-8-Copy' fill='none' stroke='#029D74' strokeWidth='1' strokeLinecap='square' d='M16.5,1.5h15' />\n <path id='Line-8-Copy-2' fill='none' stroke='#E35BD8' strokeWidth='1' strokeLinecap='square' d='M32.5,1.5h15' />\n <path id='Line-8-Copy-3' fill='none' stroke='#4156C5' strokeWidth='1' strokeLinecap='square' d='M48.5,1.5h15' />\n <path id='Line-8-Copy-4' fill='none' stroke='#635688' strokeWidth='1' strokeLinecap='square' d='M64.5,1.5h15' />\n </g>\n </g>\n </g>\n </g>\n </Link>\n </svg>\n );\n};\n\nexport default Logo;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/Logo/index.jsx","import React from 'react';\n\nfunction NavBarChannelDropdown ({ channelName, handleSelection, defaultSelection, VIEW, LOGOUT }) {\n return (\n <select type='text' id='nav-bar-channel-select' className='select select--arrow link--nav' onChange={handleSelection} value={defaultSelection}>\n <option id='nav-bar-channel-select-channel-option'>{channelName}</option>\n <option value={VIEW}>View</option>\n <option value={LOGOUT}>Logout</option>\n </select>\n );\n};\n\nexport default NavBarChannelDropdown;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/NavBarChannelOptionsDropdown/index.jsx","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ channel }) => {\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/LoginPage/index.js","import React from 'react';\n\nconst ActiveStatusBar = () => {\n return <span className='progress-bar progress-bar--active'>| </span>;\n};\n\nexport default ActiveStatusBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ActiveStatusBar/index.jsx","import React from 'react';\n\nconst InactiveStatusBar = () => {\n return <span className='progress-bar progress-bar--inactive'>| </span>;\n};\n\nexport default InactiveStatusBar;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/InactiveStatusBar/index.jsx","import { connect } from 'react-redux';\nimport { onHandleShowPageUri } from 'actions/show';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n return {\n error : show.request.error,\n requestType: show.request.type,\n };\n};\n\nconst mapDispatchToProps = {\n onHandleShowPageUri,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ShowPage/index.js","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select asset info\n let asset;\n const request = show.requestList[requestId] || null;\n const assetList = show.assetList;\n if (request && assetList) {\n const assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetLite/index.js","export const selectAsset = (show) => {\n const request = show.requestList[show.request.id];\n const assetKey = request.key;\n return show.assetList[assetKey];\n};\n\nexport const selectShowState = (state) => {\n return state.show;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/show.js","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select asset info\n let asset;\n const request = show.requestList[requestId] || null;\n const assetList = show.assetList;\n if (request && assetList) {\n const assetKey = request.key; // note: just store this in the request\n asset = assetList[assetKey] || null;\n };\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetDetails/index.js","import { connect } from 'react-redux';\nimport View from './view';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n const { claimData: { title } } = selectAsset(show);\n return {\n title,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetTitle/index.js","import { connect } from 'react-redux';\nimport View from './view';\nimport { selectAsset } from 'selectors/show';\n\nconst mapStateToProps = ({ show }) => {\n // select asset\n const asset = selectAsset(show);\n // return props\n return {\n asset,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetInfo/index.js","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select request info\n const requestId = show.request.id;\n // select request\n const previousRequest = show.requestList[requestId] || null;\n // select channel\n let channel;\n if (previousRequest) {\n const channelKey = previousRequest.key;\n channel = show.channelList[channelKey] || null;\n }\n return {\n channel,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowChannel/index.js","import { connect } from 'react-redux';\nimport { onUpdateChannelClaims } from 'actions/show';\nimport View from './view';\n\nconst mapStateToProps = ({ show }) => {\n // select channel key\n const request = show.requestList[show.request.id];\n const channelKey = request.key;\n // select channel claims\n const channel = show.channelList[channelKey] || null;\n // return props\n return {\n channelKey,\n channel,\n };\n};\n\nconst mapDispatchToProps = {\n onUpdateChannelClaims,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelClaimsDisplay/index.js","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({site: {defaults: { defaultThumbnail }}}) => {\n return {\n defaultThumbnail,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/AssetPreview/index.js","import { connect } from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ site: { host, title } }) => {\n return {\n host,\n title,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/FourOhFourPage/index.jsx","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nclass ExpandingTextarea extends Component {\n constructor (props) {\n super(props);\n this._handleChange = this._handleChange.bind(this);\n }\n componentDidMount () {\n this.adjustTextarea({});\n }\n _handleChange (event) {\n const { onChange } = this.props;\n if (onChange) onChange(event);\n this.adjustTextarea(event);\n }\n adjustTextarea ({ target = this.el }) {\n target.style.height = 0;\n target.style.height = `${target.scrollHeight}px`;\n }\n render () {\n const { ...rest } = this.props;\n return (\n <textarea\n {...rest}\n ref={x => this.el = x}\n onChange={this._handleChange}\n />\n );\n }\n}\n\nExpandingTextarea.propTypes = {\n onChange: PropTypes.func,\n};\n\nexport default ExpandingTextarea;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/ExpandingTextArea/index.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\n\nclass PublishPreview extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n imgSource : '',\n defaultThumbnail: '/assets/img/video_thumb_default.png',\n };\n }\n componentDidMount () {\n this.setPreviewImageSource(this.props.file);\n }\n componentWillReceiveProps (newProps) {\n if (newProps.file !== this.props.file) {\n this.setPreviewImageSource(newProps.file);\n }\n if (newProps.thumbnail !== this.props.thumbnail) {\n if (newProps.thumbnail) {\n this.setPreviewImageSourceFromFile(newProps.thumbnail);\n } else {\n this.setState({imgSource: this.state.defaultThumbnail});\n }\n }\n }\n setPreviewImageSourceFromFile (file) {\n const previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = () => {\n this.setState({imgSource: previewReader.result});\n };\n }\n setPreviewImageSource (file) {\n if (file.type !== 'video/mp4') {\n this.setPreviewImageSourceFromFile(file);\n } else {\n if (this.props.thumbnail) {\n this.setPreviewImageSourceFromFile(this.props.thumbnail);\n }\n this.setState({imgSource: this.state.defaultThumbnail});\n }\n }\n render () {\n return (\n <img\n id='dropzone-preview'\n src={this.state.imgSource}\n className={this.props.dimPreview ? 'dim' : ''}\n alt='publish preview'\n />\n );\n }\n};\n\nPublishPreview.propTypes = {\n dimPreview: PropTypes.bool.isRequired,\n file : PropTypes.object.isRequired,\n thumbnail : PropTypes.object,\n};\n\nexport default PublishPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/PublishPreview/index.jsx","import React from 'react';\nimport PropTypes from 'prop-types';\n\nfunction UrlMiddle ({publishInChannel, selectedChannel, loggedInChannelName, loggedInChannelShortId}) {\n if (publishInChannel) {\n if (selectedChannel === loggedInChannelName) {\n return <span id='url-channel' className='url-text--secondary'>{loggedInChannelName}:{loggedInChannelShortId} /</span>;\n }\n return <span id='url-channel-placeholder' className='url-text--secondary tooltip'>@channel<span\n className='tooltip-text'>Select a channel below</span> /</span>;\n }\n return (\n <span id='url-no-channel-placeholder' className='url-text--secondary tooltip'>xyz<span className='tooltip-text'>This will be a random id</span> /</span>\n );\n}\n\nUrlMiddle.propTypes = {\n publishInChannel : PropTypes.bool.isRequired,\n loggedInChannelName : PropTypes.string,\n loggedInChannelShortId: PropTypes.string,\n};\n\nexport default UrlMiddle;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/PublishUrlMiddleDisplay/index.jsx","import {connect} from 'react-redux';\nimport {setPublishInChannel, updateSelectedChannel, updateError} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n loggedInChannelName: channel.loggedInChannel.name,\n publishInChannel : publish.publishInChannel,\n selectedChannel : publish.selectedChannel,\n channelError : publish.error.channel,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onPublishInChannelChange: (value) => {\n dispatch(updateError('channel', null));\n dispatch(setPublishInChannel(value));\n },\n onChannelSelect: (value) => {\n dispatch(updateError('channel', null));\n dispatch(updateSelectedChannel(value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelSelect/index.js","import {connect} from 'react-redux';\nimport {clearFile, startPublish} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n file: publish.file,\n };\n};\n\nconst mapDispatchToProps = {\n clearFile,\n startPublish,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDetails/index.js","import {connect} from 'react-redux';\nimport {updateMetadata} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n title: publish.metadata.title,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onMetadataChange: (name, value) => {\n dispatch(updateMetadata(name, value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTitleInput/index.js","import {updateClaim, updateError} from 'actions/publish';\nimport {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ channel, publish }) => {\n return {\n loggedInChannelName : channel.loggedInChannel.name,\n loggedInChannelShortId: channel.loggedInChannel.shortId,\n fileName : publish.file.name,\n publishInChannel : publish.publishInChannel,\n selectedChannel : publish.selectedChannel,\n claim : publish.claim,\n urlError : publish.error.url,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onClaimChange: (value) => {\n dispatch(updateClaim(value));\n dispatch(updateError('publishSubmit', null));\n },\n onUrlError: (value) => {\n dispatch(updateError('url', value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishUrlInput/index.js","import { connect } from 'react-redux';\nimport { onNewThumbnail } from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish: { file } }) => {\n return {\n file,\n };\n};\n\nconst mapDispatchToProps = {\n onNewThumbnail,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishThumbnailInput/index.js","import {connect} from 'react-redux';\nimport {updateMetadata, toggleMetadataInputs} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n showMetadataInputs: publish.showMetadataInputs,\n description : publish.metadata.description,\n license : publish.metadata.license,\n nsfw : publish.metadata.nsfw,\n };\n};\n\nconst mapDispatchToProps = dispatch => {\n return {\n onMetadataChange: (name, value) => {\n dispatch(updateMetadata(name, value));\n },\n onToggleMetadataInputs: (value) => {\n dispatch(toggleMetadataInputs(value));\n },\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishMetadataInputs/index.js","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n message: publish.disabledMessage,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDisabledMessage/index.js","import {connect} from 'react-redux';\nimport {clearFile} from 'actions/publish';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n status : publish.status.status,\n message: publish.status.message,\n };\n};\n\nconst mapDispatchToProps = {\n clearFile,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishStatus/index.js","import {connect} from 'react-redux';\nimport View from './view';\n\nconst mapStateToProps = ({ publish }) => {\n return {\n disabled: publish.disabled,\n file : publish.file,\n status : publish.status.status,\n };\n};\n\nexport default connect(mapStateToProps, null)(View);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTool/index.js","module.exports = require(\"react-helmet\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-helmet\"\n// module id = 48\n// module chunks = 0","module.exports = require(\"redux-saga/effects\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux-saga/effects\"\n// module id = 49\n// module chunks = 0","const Path = require('path');\nconst { getSubDirectoryNames } = require('build/getFolderNames.js');\n\nconst thisFolder = Path.resolve(__dirname, 'client/components/');\nlet modules = {};\n\ngetSubDirectoryNames(thisFolder)\n .forEach((name) => {\n modules[name] = require(`./${name}`).default;\n });\n\nmodule.exports = modules;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/index.js","module.exports = require(\"path\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"path\"\n// module id = 51\n// module chunks = 0","const Path = require('path');\nconst { getSubDirectoryNames } = require('build/getFolderNames.js');\nconst thisFolder = Path.resolve(__dirname, 'client/containers/');\n\nlet modules = {};\n\ngetSubDirectoryNames(thisFolder)\n .forEach((name) => {\n modules[name] = require(`./${name}`).default;\n });\n\nmodule.exports = modules;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/index.js","const Path = require('path');\nconst { getSubDirectoryNames } = require('build/getFolderNames.js');\nconst thisFolder = Path.resolve(__dirname, 'client/pages/');\n\nlet modules = {};\n\ngetSubDirectoryNames(thisFolder)\n .forEach((name) => {\n modules[name] = require(`./${name}`).default;\n });\n\nmodule.exports = modules;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/index.js","import React from 'react';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport PublishTool from 'containers/PublishTool';\n\nclass HomePage extends React.Component {\n render () {\n return (\n <div className={'row row--tall flex-container--column'}>\n <SEO />\n <NavBar />\n <div className={'row row--tall row--padded flex-container--column'}>\n <PublishTool />\n </div>\n </div>\n );\n }\n};\n\nexport default HomePage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/HomePage/index.jsx","const axios = require('axios');\nconst logger = require('winston');\nconst { api: { apiHost, apiPort } } = require('../../config/lbryConfig.js');\nconst lbryApiUri = 'http://' + apiHost + ':' + apiPort;\nconst { chooseGaLbrynetPublishLabel, sendGATimingEvent } = require('./googleAnalytics.js');\n\nconst handleLbrynetResponse = ({ data }, resolve, reject) => {\n logger.debug('lbry api data:', data);\n if (data.result) {\n // check for an error\n if (data.result.error) {\n logger.debug('Lbrynet api error:', data.result.error);\n reject(new Error(data.result.error));\n return;\n };\n resolve(data.result);\n return;\n }\n // fallback in case it just timed out\n reject(JSON.stringify(data));\n};\n\nmodule.exports = {\n publishClaim (publishParams) {\n logger.debug(`lbryApi >> Publishing claim to \"${publishParams.name}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'publish',\n params: publishParams,\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'publish', chooseGaLbrynetPublishLabel(publishParams), gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaim (uri) {\n logger.debug(`lbryApi >> Getting Claim for \"${uri}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'get',\n params: { uri, timeout: 20 },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'getClaim', 'GET', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaimList (claimName) {\n logger.debug(`lbryApi >> Getting claim_list for \"${claimName}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'claim_list',\n params: { name: claimName },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'getClaimList', 'CLAIM_LIST', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n resolveUri (uri) {\n logger.debug(`lbryApi >> Resolving URI for \"${uri}\"`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'resolve',\n params: { uri },\n })\n .then(({ data }) => {\n sendGATimingEvent('lbrynet', 'resolveUri', 'RESOLVE', gaStartTime, Date.now());\n if (data.result[uri].error) { // check for errors\n reject(data.result[uri].error);\n } else { // if no errors, resolve\n resolve(data.result[uri]);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getDownloadDirectory () {\n logger.debug('lbryApi >> Retrieving the download directory path from lbry daemon...');\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'settings_get',\n })\n .then(({ data }) => {\n sendGATimingEvent('lbrynet', 'getDownloadDirectory', 'SETTINGS_GET', gaStartTime, Date.now());\n if (data.result) {\n resolve(data.result.download_directory);\n } else {\n return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.');\n }\n })\n .catch(error => {\n logger.error('Lbrynet Error:', error);\n resolve('/home/lbry/Downloads/');\n });\n });\n },\n createChannel (name) {\n logger.debug(`lbryApi >> Creating channel for ${name}...`);\n const gaStartTime = Date.now();\n return new Promise((resolve, reject) => {\n axios\n .post(lbryApiUri, {\n method: 'channel_new',\n params: {\n channel_name: name,\n amount : 0.1,\n },\n })\n .then(response => {\n sendGATimingEvent('lbrynet', 'createChannel', 'CHANNEL_NEW', gaStartTime, Date.now());\n handleLbrynetResponse(response, resolve, reject);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/lbryApi.js","const logger = require('winston');\nconst ua = require('universal-analytics');\nconst { analytics : { googleId }, details: { title } } = require('../../config/siteConfig.js');\n\nfunction createServeEventParams (headers, ip, originalUrl) {\n return {\n eventCategory : 'client requests',\n eventAction : 'serve request',\n eventLabel : originalUrl,\n ipOverride : ip,\n userAgentOverride: headers['user-agent'],\n };\n};\n\nfunction createPublishTimingEventParams (category, variable, label, startTime, endTime) {\n const duration = endTime - startTime;\n return {\n userTimingCategory : category,\n userTimingVariableName: variable,\n userTimingTime : duration,\n userTimingLabel : label,\n };\n};\n\nfunction sendGoogleAnalyticsEvent (ip, params) {\n const visitorId = ip.replace(/\\./g, '-');\n const visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.event(params, (err) => {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n });\n};\n\nfunction sendGoogleAnalyticsTiming (visitorId, params) {\n const visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });\n visitor.timing(params, (err) => {\n if (err) {\n logger.error('Google Analytics Event Error >>', err);\n }\n logger.debug(`Timing event successfully sent to google analytics`);\n });\n};\n\nmodule.exports = {\n sendGAServeEvent (headers, ip, originalUrl) {\n const params = createServeEventParams(headers, ip, originalUrl);\n sendGoogleAnalyticsEvent(ip, params);\n },\n sendGATimingEvent (category, variable, label, startTime, endTime) {\n const params = createPublishTimingEventParams(category, variable, label, startTime, endTime);\n sendGoogleAnalyticsTiming(title, params);\n },\n chooseGaLbrynetPublishLabel ({ channel_name: channelName, channel_id: channelId }) {\n return (channelName || channelId ? 'PUBLISH_IN_CHANNEL_CLAIM' : 'PUBLISH_ANONYMOUS_CLAIM');\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/googleAnalytics.js","module.exports = require(\"redux\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux\"\n// module id = 57\n// module chunks = 0","const { customComponents } = require('../../config/siteConfig.js');\n\nfunction getDeepestChildValue (parent, childrenKeys) {\n let childKey = childrenKeys.shift(); // .shift() retrieves the first element of array and removes it from array\n let child = parent[childKey];\n if (childrenKeys.length >= 1) {\n return getDeepestChildValue(child, childrenKeys);\n }\n return child;\n}\n\nexport const dynamicImport = (filePath) => {\n // validate inputs\n if (!filePath) {\n throw new Error('no file path provided to dynamicImport()');\n }\n if (typeof filePath !== 'string') {\n console.log('dynamicImport > filePath:', filePath);\n console.log('dynamicImport > filePath type:', typeof filePath);\n throw new Error('file path provided to dynamicImport() must be a string');\n }\n if (!customComponents) {\n return require(`${filePath}`);\n }\n // split out the file folders // filter out any empty or white-space-only strings\n const folders = filePath.split('/').filter(folderName => folderName.replace(/\\s/g, '').length);\n // check for the component corresponding to file path in the site config object\n // i.e. customComponents[folders[0]][folders[2][...][folders[n]]\n const component = getDeepestChildValue(customComponents, folders);\n if (component) {\n return component; // return custom component\n } else {\n return require(`${filePath}`);\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/dynamicImport.js","const createBasicCanonicalLink = (page, siteHost) => {\n return `${siteHost}/${page}`;\n};\n\nconst createAssetCanonicalLink = (asset, siteHost) => {\n let channelName, certificateId, name, claimId;\n if (asset.claimData) {\n ({ channelName, certificateId, name, claimId } = asset.claimData);\n };\n if (channelName) {\n return `${siteHost}/${channelName}:${certificateId}/${name}`;\n };\n return `${siteHost}/${claimId}/${name}`;\n};\n\nconst createChannelCanonicalLink = (channel, siteHost) => {\n const { name, longId } = channel;\n return `${siteHost}/${name}:${longId}`;\n};\n\nexport const createCanonicalLink = (asset, channel, page, siteHost) => {\n if (asset) {\n return createAssetCanonicalLink(asset, siteHost);\n }\n if (channel) {\n return createChannelCanonicalLink(channel, siteHost);\n }\n return createBasicCanonicalLink(page, siteHost);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/canonicalLink.js","module.exports = {\n validateFile (file) {\n if (!file) {\n throw new Error('no file provided');\n }\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate size and type\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n throw new Error('Sorry, GIFs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/file.js","module.exports = {\n REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR : '@',\n parseIdentifier : function (identifier) {\n const componentsRegex = new RegExp(\n '([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, value, modifierSeperator, modifier] = componentsRegex // eslint-disable-line no-unused-vars\n .exec(identifier)\n .map(match => match || null);\n\n // Validate and process name\n if (!value) {\n throw new Error(`Check your URL. No channel name provided before \"${modifierSeperator}\"`);\n }\n const isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n const channelName = isChannel ? value : null;\n let claimId;\n if (isChannel) {\n if (!channelName) {\n throw new Error('Check your URL. No channel name after \"@\".');\n }\n const nameBadChars = (channelName).match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error(`Check your URL. Invalid characters in channel name: \"${nameBadChars.join(', ')}\".`);\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n let channelClaimId;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`Check your URL. No modifier provided after separator \"${modifierSeperator}\"`);\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error(`Check your URL. The \"${modifierSeperator}\" modifier is not currently supported`);\n }\n }\n return {\n isChannel,\n channelName,\n channelClaimId: channelClaimId || null,\n claimId : claimId || null,\n };\n },\n parseClaim: function (name) {\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first extension)\n '([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)\n );\n const [proto, claimName, extensionSeperator, extension] = componentsRegex // eslint-disable-line no-unused-vars\n .exec(name)\n .map(match => match || null);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('Check your URL. No claim name provided before \".\"');\n }\n const nameBadChars = (claimName).match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error(`Check your URL. Invalid characters in claim name: \"${nameBadChars.join(', ')}\".`);\n }\n // Validate and process extension\n if (extensionSeperator) {\n if (!extension) {\n throw new Error(`Check your URL. No file extension provided after separator \"${extensionSeperator}\".`);\n }\n if (extensionSeperator !== '.') {\n throw new Error(`Check your URL. The \"${extensionSeperator}\" separator is not supported in the claim name.`);\n }\n }\n return {\n claimName,\n extension: extension || null,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/lbryUri.js","const determineOgThumbnailContentType = (thumbnail) => {\n if (thumbnail) {\n const fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));\n switch (fileExt) {\n case 'jpeg':\n case 'jpg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'gif':\n return 'image/gif';\n case 'mp4':\n return 'video/mp4';\n default:\n return 'image/jpeg';\n }\n }\n return '';\n};\n\nconst createBasicMetaTags = (siteHost, siteDescription, siteTitle, siteTwitter) => {\n return [\n {property: 'og:title', content: siteTitle},\n {property: 'og:url', content: siteHost},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: siteDescription},\n {property: 'twitter:site', content: siteTwitter},\n {property: 'twitter:card', content: 'summary'},\n ];\n};\n\nconst createChannelMetaTags = (siteTitle, siteHost, siteTwitter, channel) => {\n const { name, longId } = channel;\n return [\n {property: 'og:title', content: `${name} on ${siteTitle}`},\n {property: 'og:url', content: `${siteHost}/${name}:${longId}`},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: `${name}, a channel on ${siteTitle}`},\n {property: 'twitter:site', content: siteTwitter},\n {property: 'twitter:card', content: 'summary'},\n ];\n};\n\nconst createAssetMetaTags = (siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) => {\n const { claimData } = asset;\n const { contentType } = claimData;\n const embedUrl = `${siteHost}/${claimData.claimId}/${claimData.name}`;\n const showUrl = `${siteHost}/${claimData.claimId}/${claimData.name}`;\n const source = `${siteHost}/${claimData.claimId}/${claimData.name}.${claimData.fileExt}`;\n const ogTitle = claimData.title || claimData.name;\n const ogDescription = claimData.description || defaultDescription;\n const ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);\n const ogThumbnail = claimData.thumbnail || defaultThumbnail;\n const metaTags = [\n {property: 'og:title', content: ogTitle},\n {property: 'og:url', content: showUrl},\n {property: 'og:site_name', content: siteTitle},\n {property: 'og:description', content: ogDescription},\n {property: 'og:image:width', content: 600},\n {property: 'og:image:height', content: 315},\n {property: 'twitter:site', content: siteTwitter},\n ];\n if (contentType === 'video/mp4' || contentType === 'video/webm') {\n metaTags.push({property: 'og:video', content: source});\n metaTags.push({property: 'og:video:secure_url', content: source});\n metaTags.push({property: 'og:video:type', content: contentType});\n metaTags.push({property: 'og:image', content: ogThumbnail});\n metaTags.push({property: 'og:image:type', content: ogThumbnailContentType});\n metaTags.push({property: 'og:type', content: 'video'});\n metaTags.push({property: 'twitter:card', content: 'player'});\n metaTags.push({property: 'twitter:player', content: embedUrl});\n metaTags.push({property: 'twitter:player:width', content: 600});\n metaTags.push({property: 'twitter:text:player_width', content: 600});\n metaTags.push({property: 'twitter:player:height', content: 337});\n metaTags.push({property: 'twitter:player:stream', content: source});\n metaTags.push({property: 'twitter:player:stream:content_type', content: contentType});\n } else {\n metaTags.push({property: 'og:image', content: source});\n metaTags.push({property: 'og:image:type', content: contentType});\n metaTags.push({property: 'og:type', content: 'article'});\n metaTags.push({property: 'twitter:card', content: 'summary_large_image'});\n }\n return metaTags;\n};\n\nexport const createMetaTags = (siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) => {\n if (asset) {\n return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);\n };\n if (channel) {\n return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);\n };\n return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/metaTags.js","export const createPageTitle = (siteTitle, pageTitle) => {\n if (!pageTitle) {\n return `${siteTitle}`;\n }\n return `${siteTitle} - ${pageTitle}`;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/pageTitle.js","import * as actions from 'constants/channel_action_types';\n\n// export action creators\n\nexport function updateLoggedInChannel (name, shortId, longId) {\n return {\n type: actions.CHANNEL_UPDATE,\n data: {\n name,\n shortId,\n longId,\n },\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/actions/channel.js","import React from 'react';\nimport { NavLink, withRouter } from 'react-router-dom';\nimport Logo from 'components/Logo';\nimport NavBarChannelDropdown from 'components/NavBarChannelOptionsDropdown';\nimport request from 'utils/request';\n\nconst VIEW = 'VIEW';\nconst LOGOUT = 'LOGOUT';\n\nclass NavBar extends React.Component {\n constructor (props) {\n super(props);\n this.checkForLoggedInUser = this.checkForLoggedInUser.bind(this);\n this.logoutUser = this.logoutUser.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n }\n componentDidMount () {\n // check to see if the user is already logged in\n this.checkForLoggedInUser();\n }\n checkForLoggedInUser () {\n const params = {credentials: 'include'};\n request('/user', params)\n .then(({ data }) => {\n this.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);\n })\n .catch(error => {\n console.log('/user error:', error.message);\n });\n }\n logoutUser () {\n const params = {credentials: 'include'};\n request('/logout', params)\n .then(() => {\n this.props.onChannelLogout();\n })\n .catch(error => {\n console.log('/logout error', error.message);\n });\n }\n handleSelection (event) {\n const value = event.target.selectedOptions[0].value;\n switch (value) {\n case LOGOUT:\n this.logoutUser();\n break;\n case VIEW:\n // redirect to channel page\n this.props.history.push(`/${this.props.channelName}:${this.props.channelLongId}`);\n break;\n default:\n break;\n }\n }\n render () {\n const { siteDescription } = this.props;\n return (\n <div className='row row--wide nav-bar'>\n <div className='row row--padded row--short flex-container--row flex-container--space-between-center'>\n <Logo />\n <div className='nav-bar--center'>\n <span className='nav-bar-tagline'>{siteDescription}</span>\n </div>\n <div className='nav-bar--right'>\n <NavLink className='nav-bar-link link--nav' activeClassName='link--nav-active' to='/' exact>Publish</NavLink>\n <NavLink className='nav-bar-link link--nav' activeClassName='link--nav-active' to='/about'>About</NavLink>\n { this.props.channelName ? (\n <NavBarChannelDropdown\n channelName={this.props.channelName}\n handleSelection={this.handleSelection}\n defaultSelection={this.props.channelName}\n VIEW={VIEW}\n LOGOUT={LOGOUT}\n />\n ) : (\n <NavLink id='nav-bar-login-link' className='nav-bar-link link--nav' activeClassName='link--nav-active' to='/login'>Channel</NavLink>\n )}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default withRouter(NavBar);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/NavBar/view.jsx","import React from 'react';\nimport Helmet from 'react-helmet';\nimport PropTypes from 'prop-types';\n\nimport { createPageTitle } from 'utils/pageTitle';\nimport { createMetaTags } from 'utils/metaTags';\nimport { createCanonicalLink } from 'utils/canonicalLink';\n\nclass SEO extends React.Component {\n render () {\n // props from state\n const { defaultDescription, defaultThumbnail, siteDescription, siteHost, siteTitle, siteTwitter } = this.props;\n // props from parent\n const { asset, channel, pageUri } = this.props;\n let { pageTitle } = this.props;\n // create page title, tags, and canonical link\n pageTitle = createPageTitle(siteTitle, pageTitle);\n const metaTags = createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);\n const canonicalLink = createCanonicalLink(asset, channel, pageUri, siteHost);\n // render results\n return (\n <Helmet\n title={pageTitle}\n meta={metaTags}\n link={[{rel: 'canonical', href: canonicalLink}]}\n />\n );\n }\n};\n\nSEO.propTypes = {\n pageTitle: PropTypes.string,\n pageUri : PropTypes.string,\n channel : PropTypes.object,\n asset : PropTypes.object,\n};\n\nexport default SEO;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/SEO/view.jsx","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport ChannelLoginForm from 'containers/ChannelLoginForm';\nimport ChannelCreateForm from 'containers/ChannelCreateForm';\n\nclass LoginPage extends React.Component {\n componentWillReceiveProps (newProps) {\n // re-route the user to the homepage if the user is logged in\n if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {\n this.props.history.push(`/`);\n }\n }\n render () {\n return (\n <div>\n <SEO pageTitle={'Login'} pageUri={'login'} />\n <NavBar />\n <div className='row row--padded'>\n <div className='column column--5 column--med-10 align-content-top'>\n <div className='column column--8 column--med-10'>\n <p>Channels allow you to publish and group content under an identity. You can create a channel for yourself, or share one with like-minded friends. You can create 1 channel, or 100, so whether you're <a className='link--primary' target='_blank' href='/@catalonia2017:43dcf47163caa21d8404d9fe9b30f78ef3e146a8'>documenting important events</a>, or making a public repository for <a className='link--primary' target='_blank' href='/@catGifs'>cat gifs</a> (password: '1234'), try creating a channel for it!</p>\n </div>\n </div><div className='column column--5 column--med-10 align-content-top'>\n <div className='column column--8 column--med-10'>\n <h3 className='h3--no-bottom'>Log in to an existing channel:</h3>\n <ChannelLoginForm />\n <h3 className='h3--no-bottom'>Create a brand new channel:</h3>\n <ChannelCreateForm />\n </div>\n </div>\n </div>\n </div>\n );\n }\n};\n\nexport default withRouter(LoginPage);\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/LoginPage/view.jsx","import React from 'react';\nimport request from 'utils/request';\n\nclass ChannelLoginForm extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n error : null,\n name : '',\n password: '',\n };\n this.handleInput = this.handleInput.bind(this);\n this.loginToChannel = this.loginToChannel.bind(this);\n }\n handleInput (event) {\n const name = event.target.name;\n const value = event.target.value;\n this.setState({[name]: value});\n }\n loginToChannel (event) {\n event.preventDefault();\n const params = {\n method : 'POST',\n body : JSON.stringify({username: this.state.name, password: this.state.password}),\n headers: new Headers({\n 'Content-Type': 'application/json',\n }),\n credentials: 'include',\n };\n request('login', params)\n .then(({success, channelName, shortChannelId, channelClaimId, message}) => {\n if (success) {\n this.props.onChannelLogin(channelName, shortChannelId, channelClaimId);\n } else {\n this.setState({'error': message});\n };\n })\n .catch(error => {\n if (error.message) {\n this.setState({'error': error.message});\n } else {\n this.setState({'error': error});\n }\n });\n }\n render () {\n return (\n <form id='channel-login-form'>\n <div className='row row--wide row--short'>\n <div className='column column--3 column--sml-10'>\n <label className='label' htmlFor='channel-login-name-input'>Name:</label>\n </div><div className='column column--6 column--sml-10'>\n <div className='input-text--primary flex-container--row flex-container--left-bottom'>\n <span>@</span>\n <input type='text' id='channel-login-name-input' className='input-text' name='name' placeholder='Your Channel Name' value={this.state.channelName} onChange={this.handleInput} />\n </div>\n </div>\n </div>\n <div className='row row--wide row--short'>\n <div className='column column--3 column--sml-10'>\n <label className='label' htmlFor='channel-login-password-input' >Password:</label>\n </div><div className='column column--6 column--sml-10'>\n <div className='input-text--primary'>\n <input type='password' id='channel-login-password-input' name='password' className='input-text' placeholder='' value={this.state.channelPassword} onChange={this.handleInput} />\n </div>\n </div>\n </div>\n { this.state.error ? (\n <p className='info-message--failure'>{this.state.error}</p>\n ) : (\n <p className='info-message'>Enter the name and password for your channel</p>\n )}\n <div className='row row--wide'>\n <button className='button--primary' onClick={this.loginToChannel}>Authenticate</button>\n </div>\n </form>\n );\n }\n}\n\nexport default ChannelLoginForm;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelLoginForm/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport request from 'utils/request';\n\nclass ChannelCreateForm extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n error : null,\n channel : '',\n password: '',\n status : null,\n };\n this.handleChannelInput = this.handleChannelInput.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.createChannel = this.createChannel.bind(this);\n }\n cleanseChannelInput (input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n handleChannelInput (event) {\n let value = event.target.value;\n value = this.cleanseChannelInput(value);\n this.setState({channel: value});\n if (value) {\n this.updateIsChannelAvailable(value);\n } else {\n this.setState({error: 'Please enter a channel name'});\n }\n }\n handleInput (event) {\n const name = event.target.name;\n const value = event.target.value;\n this.setState({[name]: value});\n }\n updateIsChannelAvailable (channel) {\n const channelWithAtSymbol = `@${channel}`;\n request(`/api/channel/availability/${channelWithAtSymbol}`)\n .then(() => {\n this.setState({'error': null});\n })\n .catch((error) => {\n this.setState({'error': error.message});\n });\n }\n checkIsChannelAvailable (channel) {\n const channelWithAtSymbol = `@${channel}`;\n return request(`/api/channel/availability/${channelWithAtSymbol}`);\n }\n checkIsPasswordProvided (password) {\n return new Promise((resolve, reject) => {\n if (!password || password.length < 1) {\n return reject(new Error('Please provide a password'));\n }\n resolve();\n });\n }\n makePublishChannelRequest (username, password) {\n const params = {\n method : 'POST',\n body : JSON.stringify({username, password}),\n headers: new Headers({\n 'Content-Type': 'application/json',\n }),\n credentials: 'include',\n };\n return new Promise((resolve, reject) => {\n request('/signup', params)\n .then(result => {\n return resolve(result);\n })\n .catch(error => {\n reject(new Error(`Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ${error.message}`));\n });\n });\n }\n createChannel (event) {\n event.preventDefault();\n this.checkIsPasswordProvided(this.state.password)\n .then(() => {\n return this.checkIsChannelAvailable(this.state.channel);\n })\n .then(() => {\n this.setState({status: 'We are publishing your new channel. Sit tight...'});\n return this.makePublishChannelRequest(this.state.channel, this.state.password);\n })\n .then(result => {\n this.setState({status: null});\n this.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);\n })\n .catch((error) => {\n if (error.message) {\n this.setState({'error': error.message, status: null});\n } else {\n this.setState({'error': error, status: null});\n };\n });\n }\n render () {\n return (\n <div>\n { !this.state.status ? (\n <form id='publish-channel-form'>\n <div className='row row--wide row--short'>\n <div className='column column--3 column--sml-10'>\n <label className='label' htmlFor='new-channel-name'>Name:</label>\n </div><div className='column column--6 column--sml-10'>\n <div className='input-text--primary flex-container--row flex-container--left-bottom span--relative'>\n <span>@</span>\n <input type='text' name='channel' id='new-channel-name' className='input-text' placeholder='exampleChannelName' value={this.state.channel} onChange={this.handleChannelInput} />\n { (this.state.channel && !this.state.error) && <span id='input-success-channel-name' className='info-message--success span--absolute'>{'\\u2713'}</span> }\n { this.state.error && <span id='input-success-channel-name' className='info-message--failure span--absolute'>{'\\u2716'}</span> }\n </div>\n </div>\n </div>\n <div className='row row--wide row--short'>\n <div className='column column--3 column--sml-10'>\n <label className='label' htmlFor='new-channel-password'>Password:</label>\n </div><div className='column column--6 column--sml-10'>\n <div className='input-text--primary'>\n <input type='password' name='password' id='new-channel-password' className='input-text' placeholder='' value={this.state.password} onChange={this.handleInput} />\n </div>\n </div>\n </div>\n {this.state.error ? (\n <p className='info-message--failure'>{this.state.error}</p>\n ) : (\n <p className='info-message'>Choose a name and password for your channel</p>\n )}\n <div className='row row--wide'>\n <button className='button--primary' onClick={this.createChannel}>Create Channel</button>\n </div>\n </form>\n ) : (\n <div>\n <p className='fine-print'>{this.state.status}</p>\n <ProgressBar size={12} />\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ChannelCreateForm;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelCreateForm/view.jsx","import React from 'react';\nimport ErrorPage from 'pages/ErrorPage';\nimport ShowAssetLite from 'containers/ShowAssetLite';\nimport ShowAssetDetails from 'containers/ShowAssetDetails';\nimport ShowChannel from 'containers/ShowChannel';\n\nimport { CHANNEL, ASSET_LITE, ASSET_DETAILS } from 'constants/show_request_types';\n\nclass ShowPage extends React.Component {\n componentDidMount () {\n this.props.onHandleShowPageUri(this.props.match.params);\n }\n componentWillReceiveProps (nextProps) {\n if (nextProps.match.params !== this.props.match.params) {\n this.props.onHandleShowPageUri(nextProps.match.params);\n }\n }\n render () {\n const { error, requestType } = this.props;\n if (error) {\n return (\n <ErrorPage error={error} />\n );\n }\n switch (requestType) {\n case CHANNEL:\n return <ShowChannel />;\n case ASSET_LITE:\n return <ShowAssetLite />;\n case ASSET_DETAILS:\n return <ShowAssetDetails />;\n default:\n return <p>loading...</p>;\n }\n }\n};\n\nexport default ShowPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/pages/ShowPage/view.jsx","import React from 'react';\nimport SEO from 'components/SEO';\nimport { Link } from 'react-router-dom';\nimport AssetDisplay from 'containers/AssetDisplay';\n\nclass ShowLite extends React.Component {\n render () {\n const { asset } = this.props;\n if (asset) {\n const { name, claimId } = asset.claimData;\n return (\n <div className='row row--tall flex-container--column flex-container--center-center show-lite-container'>\n <SEO pageTitle={name} asset={asset} />\n <AssetDisplay />\n <Link id='asset-boilerpate' className='link--primary fine-print' to={`/${claimId}/${name}`}>hosted\n via Spee.ch</Link>\n </div>\n );\n }\n return (\n <div className='row row--tall row--padded flex-container--column flex-container--center-center'>\n <p>loading asset data...</p>\n </div>\n );\n }\n};\n\nexport default ShowLite;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetLite/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport { LOCAL_CHECK, UNAVAILABLE, ERROR, AVAILABLE } from 'constants/asset_display_states';\n\nclass AssetDisplay extends React.Component {\n componentDidMount () {\n const { asset: { claimData: { name, claimId } } } = this.props;\n this.props.onFileRequest(name, claimId);\n }\n render () {\n const { status, error, asset: { claimData: { name, claimId, contentType, fileExt, thumbnail } } } = this.props;\n return (\n <div id='asset-display-component'>\n {(status === LOCAL_CHECK) &&\n <div>\n <p>Checking to see if Spee.ch has your asset locally...</p>\n </div>\n }\n {(status === UNAVAILABLE) &&\n <div>\n <p>Sit tight, we're searching the LBRY blockchain for your asset!</p>\n <ProgressBar size={12} />\n <p>Curious what magic is happening here? <a className='link--primary' target='blank' href='https://lbry.io/faq/what-is-lbry'>Learn more.</a></p>\n </div>\n }\n {(status === ERROR) &&\n <div>\n <p>Unfortunately, we couldn't download your asset from LBRY. You can help us out by sharing the below error message in the <a className='link--primary' href='https://discord.gg/YjYbwhS' target='_blank'>LBRY discord</a>.</p>\n <i><p id='error-message'>{error}</p></i>\n </div>\n }\n {(status === AVAILABLE) &&\n (() => {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n return (\n <img\n className='asset'\n src={`/${claimId}/${name}.${fileExt}`}\n alt={name} />\n );\n case 'image/gif':\n return (\n <img\n className='asset'\n src={`/${claimId}/${name}.${fileExt}`}\n alt={name}\n />\n );\n case 'video/mp4':\n return (\n <video className='asset video' controls poster={thumbnail}>\n <source\n src={`/${claimId}/${name}.${fileExt}`}\n />\n <p>Your browser does not support the <code>video</code> element.</p>\n </video>\n );\n default:\n return (\n <p>Unsupported file type</p>\n );\n }\n })()\n }\n </div>\n );\n }\n};\n\nexport default AssetDisplay;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetDisplay/view.jsx","import React from 'react';\nimport SEO from 'components/SEO';\nimport NavBar from 'containers/NavBar';\nimport ErrorPage from 'pages/ErrorPage';\nimport AssetTitle from 'containers/AssetTitle';\nimport AssetDisplay from 'containers/AssetDisplay';\nimport AssetInfo from 'containers/AssetInfo';\n\nclass ShowAssetDetails extends React.Component {\n render () {\n const { asset } = this.props;\n if (asset) {\n const { claimData: { name } } = asset;\n return (\n <div>\n <SEO pageTitle={`${name} - details`} asset={asset} />\n <NavBar />\n <div className='row row--tall row--padded'>\n <div className='column column--10'>\n <AssetTitle />\n </div>\n <div className='column column--5 column--sml-10 align-content-top'>\n <div className='row row--padded show-details-container'>\n <AssetDisplay />\n </div>\n </div><div className='column column--5 column--sml-10 align-content-top'>\n <div className='row row--padded'>\n <AssetInfo />\n </div>\n </div>\n </div>\n </div>\n );\n };\n return (\n <ErrorPage error={'loading asset data...'} />\n );\n }\n};\n\nexport default ShowAssetDetails;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowAssetDetails/view.jsx","import React from 'react';\n\nconst AssetTitle = ({ title }) => {\n return (\n <div>\n <span className='text--large'>{title}</span>\n </div>\n );\n};\n\nexport default AssetTitle;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetTitle/view.jsx","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nclass AssetInfo extends React.Component {\n constructor (props) {\n super(props);\n this.copyToClipboard = this.copyToClipboard.bind(this);\n }\n copyToClipboard (event) {\n var elementToCopy = event.target.dataset.elementtocopy;\n var element = document.getElementById(elementToCopy);\n element.select();\n try {\n document.execCommand('copy');\n } catch (err) {\n this.setState({error: 'Oops, unable to copy'});\n }\n }\n render () {\n const { asset: { shortId, claimData : { channelName, certificateId, description, name, claimId, fileExt, contentType, thumbnail, host } } } = this.props;\n return (\n <div>\n {channelName &&\n <div className='row row--padded row--wide row--no-top'>\n <div className='column column--2 column--med-10'>\n <span className='text'>Channel:</span>\n </div>\n <div className='column column--8 column--med-10'>\n <span className='text'><Link to={`/${channelName}:${certificateId}`}>{channelName}</Link></span>\n </div>\n </div>\n }\n\n {description &&\n <div className='row row--padded row--wide row--no-top'>\n <span className='text'>{description}</span>\n </div>\n }\n\n <div id='show-share-buttons'>\n <div className='row row--padded row--wide row--no-top'>\n <div className='column column--2 column--med-10'>\n <span className='text'>Share:</span>\n </div>\n <div className='column column--8 column--med-10'>\n <div\n className='row row--short row--wide flex-container--row flex-container--space-between-bottom flex-container--wrap'>\n <a className='link--primary' target='_blank' href={`https://twitter.com/intent/tweet?text=${host}/${shortId}/${name}`}>twitter</a>\n <a className='link--primary' target='_blank' href={`https://www.facebook.com/sharer/sharer.php?u=${host}/${shortId}/${name}`}>facebook</a>\n <a className='link--primary' target='_blank' href={`http://tumblr.com/widgets/share/tool?canonicalUrl=${host}/${shortId}/${name}`}>tumblr</a>\n <a className='link--primary' target='_blank' href={`https://www.reddit.com/submit?url=${host}/${shortId}/${name}&title=${name}`}>reddit</a>\n </div>\n </div>\n </div>\n </div>\n\n <div className='row row--padded row--wide row--no-top'>\n <div id='show-short-link'>\n <div className='column column--2 column--med-10'>\n <span className='text'>Link:</span>\n </div>\n <div className='column column--8 column--med-10'>\n <div className='row row--short row--wide'>\n <div className='column column--7'>\n <div className='input-error' id='input-error-copy-short-link' hidden='true'>error here</div>\n <input type='text' id='short-link' className='input-disabled input-text--full-width' readOnly\n spellCheck='false'\n value={`${host}/${shortId}/${name}.${fileExt}`}\n onClick={this.select} />\n </div>\n <div className='column column--1' />\n <div className='column column--2'>\n <button className='button--primary button--wide' data-elementtocopy='short-link'\n onClick={this.copyToClipboard}>copy\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div id='show-embed-code'>\n <div className='column column--2 column--med-10'>\n <span className='text'>Embed:</span>\n </div>\n <div className='column column--8 column--med-10'>\n <div className='row row--short row--wide'>\n <div className='column column--7'>\n <div className='input-error' id='input-error-copy-embed-text' hidden='true'>error here</div>\n {(contentType === 'video/mp4') ? (\n <input type='text' id='embed-text' className='input-disabled input-text--full-width' readOnly\n onClick={this.select} spellCheck='false'\n value={`<video width=\"100%\" controls poster=\"${thumbnail}\" src=\"${host}/${claimId}/${name}.${fileExt}\"/></video>`} />\n ) : (\n <input type='text' id='embed-text' className='input-disabled input-text--full-width' readOnly\n onClick={this.select} spellCheck='false'\n value={`<img src=\"${host}/${claimId}/${name}.${fileExt}\"/>`}\n />\n )}\n </div>\n <div className='column column--1' />\n <div className='column column--2'>\n <button className='button--primary button--wide' data-elementtocopy='embed-text'\n onClick={this.copyToClipboard}>copy\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div className='flex-container--row flex-container--space-between-bottom'>\n <Link className='link--primary' to={`/${shortId}/${name}.${fileExt}`}><span\n className='text'>Direct Link</span></Link>\n <a className='link--primary' href={`${host}/${claimId}/${name}.${fileExt}`} download={name}>Download</a>\n <a className='link--primary' target='_blank' href='https://lbry.io/dmca'>Report</a>\n </div>\n\n </div>\n );\n }\n};\n\nexport default AssetInfo;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/AssetInfo/view.jsx","import React from 'react';\nimport SEO from 'components/SEO';\nimport ErrorPage from 'pages/ErrorPage';\nimport NavBar from 'containers/NavBar';\nimport ChannelClaimsDisplay from 'containers/ChannelClaimsDisplay';\n\nclass ShowChannel extends React.Component {\n render () {\n const { channel } = this.props;\n if (channel) {\n const { name, longId, shortId } = channel;\n return (\n <div>\n <SEO pageTitle={name} channel={channel} />\n <NavBar />\n <div className='row row--tall row--padded'>\n <div className='column column--10'>\n <h2>channel name: {name}</h2>\n <p className={'fine-print'}>full channel id: {longId}</p>\n <p className={'fine-print'}>short channel id: {shortId}</p>\n </div>\n <div className='column column--10'>\n <ChannelClaimsDisplay />\n </div>\n </div>\n </div>\n );\n };\n return (\n <ErrorPage error={'loading channel data...'} />\n );\n }\n};\n\nexport default ShowChannel;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ShowChannel/view.jsx","import React from 'react';\nimport AssetPreview from 'components/AssetPreview';\n\nclass ChannelClaimsDisplay extends React.Component {\n constructor (props) {\n super(props);\n this.showNextResultsPage = this.showNextResultsPage.bind(this);\n this.showPreviousResultsPage = this.showPreviousResultsPage.bind(this);\n }\n showPreviousResultsPage () {\n const { channel: { claimsData: { currentPage } } } = this.props;\n const previousPage = parseInt(currentPage) - 1;\n this.showNewPage(previousPage);\n }\n showNextResultsPage () {\n const { channel: { claimsData: { currentPage } } } = this.props;\n const nextPage = parseInt(currentPage) + 1;\n this.showNewPage(nextPage);\n }\n showNewPage (page) {\n const { channelKey, channel: { name, longId } } = this.props;\n this.props.onUpdateChannelClaims(channelKey, name, longId, page);\n }\n render () {\n const { channel: { claimsData: { claims, currentPage, totalPages } } } = this.props;\n return (\n <div className='row row--tall'>\n {(claims.length > 0) ? (\n <div>\n {claims.map((claim, index) => <AssetPreview\n claimData={claim}\n key={`${claim.name}-${index}`}\n />)}\n <div>\n {(currentPage > 1) &&\n <button className={'button--secondary'} onClick={this.showPreviousResultsPage}>Previous Page</button>\n }\n {(currentPage < totalPages) &&\n <button className={'button--secondary'} onClick={this.showNextResultsPage}>Next Page</button>\n }\n </div>\n </div>\n ) : (\n <p>There are no claims in this channel</p>\n )}\n </div>\n );\n }\n};\n\nexport default ChannelClaimsDisplay;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelClaimsDisplay/view.jsx","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nconst AssetPreview = ({ defaultThumbnail, claimData: { name, claimId, fileExt, contentType, thumbnail } }) => {\n const directSourceLink = `${claimId}/${name}.${fileExt}`;\n const showUrlLink = `/${claimId}/${name}`;\n return (\n <div className='asset-holder'>\n <Link to={showUrlLink} >\n {(() => {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n case 'image/gif':\n return (\n <img\n className={'asset-preview'}\n src={directSourceLink}\n alt={name}\n />\n );\n case 'video/mp4':\n return (\n <img\n className={'asset-preview video'}\n src={thumbnail || defaultThumbnail}\n alt={name}\n />\n );\n default:\n return (\n <p>unsupported file type</p>\n );\n }\n })()}\n </Link>\n </div>\n );\n};\n\nexport default AssetPreview;\n\n\n\n// WEBPACK FOOTER //\n// ./client/components/AssetPreview/view.jsx","import React from 'react';\nimport NavBar from 'containers/NavBar';\nimport Helmet from 'react-helmet';\n\nclass FourOhForPage extends React.Component {\n render () {\n const {title, host} = this.props;\n return (\n <div>\n <Helmet>\n <title>{title} - 404</title>\n <link rel='canonical' href={`${host}/404`} />\n </Helmet>\n <NavBar />\n <div className='row row--padded'>\n <h2>404</h2>\n <p>That page does not exist</p>\n </div>\n </div>\n );\n }\n};\n\nexport default FourOhForPage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/FourOhFourPage/view.jsx","const { lstatSync, readdirSync } = require('fs');\nconst { join } = require('path');\n\nexport const getSubDirectoryNames = (root) => {\n return readdirSync(root)\n .filter(name => {\n const fullPath = join(root, name);\n return lstatSync(fullPath).isDirectory();\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./build/getFolderNames.js","import React from 'react';\nimport ChannelLoginForm from 'containers/ChannelLoginForm';\nimport ChannelCreateForm from 'containers/ChannelCreateForm';\nimport * as states from 'constants/publish_channel_select_states';\n\nclass ChannelSelect extends React.Component {\n constructor (props) {\n super(props);\n this.toggleAnonymousPublish = this.toggleAnonymousPublish.bind(this);\n this.handleSelection = this.handleSelection.bind(this);\n }\n toggleAnonymousPublish (event) {\n const value = event.target.value;\n if (value === 'anonymous') {\n this.props.onPublishInChannelChange(false);\n } else {\n this.props.onPublishInChannelChange(true);\n }\n }\n handleSelection (event) {\n const selectedOption = event.target.selectedOptions[0].value;\n this.props.onChannelSelect(selectedOption);\n }\n render () {\n return (\n <div>\n <form>\n <div className='column column--3 column--med-10'>\n <input type='radio' name='anonymous-or-channel' id='anonymous-radio' className='input-radio' value='anonymous' checked={!this.props.publishInChannel} onChange={this.toggleAnonymousPublish} />\n <label className='label label--pointer' htmlFor='anonymous-radio'>Anonymous</label>\n </div>\n <div className='column column--7 column--med-10'>\n <input type='radio' name='anonymous-or-channel' id='channel-radio' className='input-radio' value='in a channel' checked={this.props.publishInChannel} onChange={this.toggleAnonymousPublish} />\n <label className='label label--pointer' htmlFor='channel-radio'>In a channel</label>\n </div>\n { this.props.channelError ? (\n <p className='info-message--failure'>{this.props.channelError}</p>\n ) : (\n <p className='info-message'>Publish anonymously or in a channel</p>\n )}\n </form>\n { this.props.publishInChannel && (\n <div>\n <div className='column column--3'>\n <label className='label' htmlFor='channel-name-select'>Channel:</label>\n </div><div className='column column--7'>\n <select type='text' id='channel-name-select' className='select select--arrow' value={this.props.selectedChannel} onChange={this.handleSelection}>\n { this.props.loggedInChannelName && <option value={this.props.loggedInChannelName} id='publish-channel-select-channel-option'>{this.props.loggedInChannelName}</option> }\n <option value={states.LOGIN}>Existing</option>\n <option value={states.CREATE}>New</option>\n </select>\n </div>\n { (this.props.selectedChannel === states.LOGIN) && <ChannelLoginForm /> }\n { (this.props.selectedChannel === states.CREATE) && <ChannelCreateForm /> }\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default ChannelSelect;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/ChannelSelect/view.jsx","import React from 'react';\nimport { validateFile } from 'utils/file';\nimport PublishPreview from 'components/PublishPreview';\n\nclass Dropzone extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n dragOver : false,\n mouseOver : false,\n dimPreview: false,\n };\n this.handleDrop = this.handleDrop.bind(this);\n this.handleDragOver = this.handleDragOver.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleDragEnter = this.handleDragEnter.bind(this);\n this.handleDragLeave = this.handleDragLeave.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleClick = this.handleClick.bind(this);\n this.handleFileInput = this.handleFileInput.bind(this);\n this.chooseFile = this.chooseFile.bind(this);\n }\n handleDrop (event) {\n event.preventDefault();\n this.setState({dragOver: false});\n // if dropped items aren't files, reject them\n const dt = event.dataTransfer;\n if (dt.items) {\n if (dt.items[0].kind === 'file') {\n const droppedFile = dt.items[0].getAsFile();\n this.chooseFile(droppedFile);\n }\n }\n }\n handleDragOver (event) {\n event.preventDefault();\n }\n handleDragEnd (event) {\n var dt = event.dataTransfer;\n if (dt.items) {\n for (var i = 0; i < dt.items.length; i++) {\n dt.items.remove(i);\n }\n } else {\n event.dataTransfer.clearData();\n }\n }\n handleDragEnter () {\n this.setState({dragOver: true, dimPreview: true});\n }\n handleDragLeave () {\n this.setState({dragOver: false, dimPreview: false});\n }\n handleMouseEnter () {\n this.setState({mouseOver: true, dimPreview: true});\n }\n handleMouseLeave () {\n this.setState({mouseOver: false, dimPreview: false});\n }\n handleClick (event) {\n event.preventDefault();\n document.getElementById('file_input').click();\n }\n handleFileInput (event) {\n event.preventDefault();\n const fileList = event.target.files;\n this.chooseFile(fileList[0]);\n }\n chooseFile (file) {\n if (file) {\n try {\n validateFile(file); // validate the file's name, type, and size\n } catch (error) {\n return this.props.setFileError(error.message);\n }\n // stage it so it will be ready when the publish button is clicked\n this.props.selectFile(file);\n }\n }\n render () {\n return (\n <div className='row row--tall flex-container--column'>\n <form>\n <input className='input-file' type='file' id='file_input' name='file_input' accept='video/*,image/*' onChange={this.handleFileInput} encType='multipart/form-data' />\n </form>\n <div id='preview-dropzone' className={'row row--padded row--tall dropzone' + (this.state.dragOver ? ' dropzone--drag-over' : '')} onDrop={this.handleDrop} onDragOver={this.handleDragOver} onDragEnd={this.handleDragEnd} onDragEnter={this.handleDragEnter} onDragLeave={this.handleDragLeave} onMouseEnter={this.handleMouseEnter} onMouseLeave={this.handleMouseLeave} onClick={this.handleClick}>\n {this.props.file ? (\n <div>\n <PublishPreview\n dimPreview={this.state.dimPreview}\n file={this.props.file}\n thumbnail={this.props.thumbnail}\n />\n <div id='dropzone-text-holder' className={'flex-container--column flex-container--center-center'}>\n { this.state.dragOver ? (\n <div id='dropzone-dragover'>\n <p className='blue'>Drop it.</p>\n </div>\n ) : (\n null\n )}\n { this.state.mouseOver ? (\n <div id='dropzone-instructions'>\n <p className='info-message-placeholder info-message--failure' id='input-error-file-selection'>{this.props.fileError}</p>\n <p>Drag & drop image or video here to publish</p>\n <p className='fine-print'>OR</p>\n <p className='blue--underlined'>CHOOSE FILE</p>\n </div>\n ) : (\n null\n )}\n </div>\n </div>\n ) : (\n <div id='dropzone-text-holder' className={'flex-container--column flex-container--center-center'}>\n { this.state.dragOver ? (\n <div id='dropzone-dragover'>\n <p className='blue'>Drop it.</p>\n </div>\n ) : (\n <div id='dropzone-instructions'>\n <p className='info-message-placeholder info-message--failure' id='input-error-file-selection'>{this.props.fileError}</p>\n <p>Drag & drop image or video here to publish</p>\n <p className='fine-print'>OR</p>\n <p className='blue--underlined'>CHOOSE FILE</p>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n};\n\nexport default Dropzone;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/Dropzone/view.jsx","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport Dropzone from 'containers/Dropzone';\nimport PublishTitleInput from 'containers/PublishTitleInput';\nimport PublishUrlInput from 'containers/PublishUrlInput';\nimport PublishThumbnailInput from 'containers/PublishThumbnailInput';\nimport PublishMetadataInputs from 'containers/PublishMetadataInputs';\nimport ChannelSelect from 'containers/ChannelSelect';\n\nclass PublishDetails extends React.Component {\n constructor (props) {\n super(props)\n this.onPublishSubmit = this.onPublishSubmit.bind(this);\n }\n onPublishSubmit () {\n this.props.startPublish(this.props.history);\n }\n render () {\n return (\n <div className='row row--no-bottom'>\n <div className='column column--10'>\n <PublishTitleInput />\n </div>\n {/* left column */}\n <div className='column column--5 column--sml-10' >\n <div className='row row--padded'>\n <Dropzone />\n </div>\n </div>\n {/* right column */}\n <div className='column column--5 column--sml-10 align-content-top'>\n <div id='publish-active-area' className='row row--padded'>\n <div className='row row--padded row--no-top row--wide'>\n <PublishUrlInput />\n </div>\n <div className='row row--padded row--no-top row--wide'>\n <ChannelSelect />\n </div>\n { (this.props.file.type === 'video/mp4') && (\n <div className='row row--padded row--no-top row--wide '>\n <PublishThumbnailInput />\n </div>\n )}\n <div className='row row--padded row--no-top row--no-bottom row--wide'>\n <PublishMetadataInputs />\n </div>\n <div className='row row--wide align-content-center'>\n <button id='publish-submit' className='button--primary button--large' onClick={this.onPublishSubmit}>Publish</button>\n </div>\n <div className='row row--padded row--no-bottom align-content-center'>\n <button className='button--cancel' onClick={this.props.clearFile}>Cancel</button>\n </div>\n <div className='row row--short align-content-center'>\n <p className='fine-print'>By clicking 'Publish', you affirm that you have the rights to publish this content to the LBRY network, and that you understand the properties of publishing it to a decentralized, user-controlled network. <a className='link--primary' target='_blank' href='https://lbry.io/learn'>Read more.</a></p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n};\n\nexport default withRouter(PublishDetails);\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDetails/view.jsx","import React from 'react';\n\nclass PublishTitleInput extends React.Component {\n constructor (props) {\n super(props);\n this.handleInput = this.handleInput.bind(this);\n }\n handleInput (e) {\n const name = e.target.name;\n const value = e.target.value;\n this.props.onMetadataChange(name, value);\n }\n render () {\n return (\n <input type='text' id='publish-title' className='input-text text--large input-text--full-width' name='title' placeholder='Give your post a title...' onChange={this.handleInput} value={this.props.title} />\n );\n }\n}\n\nexport default PublishTitleInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTitleInput/view.jsx","import React from 'react';\nimport request from 'utils/request';\nimport UrlMiddle from 'components/PublishUrlMiddleDisplay';\n\nclass PublishUrlInput extends React.Component {\n constructor (props) {\n super(props);\n this.handleInput = this.handleInput.bind(this);\n }\n componentDidMount () {\n const { claim, fileName } = this.props;\n if (!claim) {\n this.setClaimName(fileName);\n }\n }\n componentWillReceiveProps ({ claim, fileName }) {\n // if a new file was chosen, update the claim name\n if (fileName !== this.props.fileName) {\n return this.setClaimName(fileName);\n }\n // if the claim has updated, check its availability\n if (claim !== this.props.claim) {\n this.validateClaim(claim);\n }\n }\n handleInput (event) {\n let value = event.target.value;\n value = this.cleanseInput(value);\n // update the state\n this.props.onClaimChange(value);\n }\n cleanseInput (input) {\n input = input.replace(/\\s+/g, '-'); // replace spaces with dashes\n input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'\n return input;\n }\n setClaimName (fileName) {\n const fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));\n const cleanClaimName = this.cleanseInput(fileNameWithoutEnding);\n this.props.onClaimChange(cleanClaimName);\n }\n validateClaim (claim) {\n if (!claim) {\n return this.props.onUrlError('Enter a url above');\n }\n request(`/api/claim/availability/${claim}`)\n .then(() => {\n this.props.onUrlError(null);\n })\n .catch((error) => {\n this.props.onUrlError(error.message);\n });\n }\n render () {\n const { claim, loggedInChannelName, loggedInChannelShortId, publishInChannel, selectedChannel, urlError } = this.props;\n return (\n <div className='column column--10 column--sml-10'>\n <div className='input-text--primary span--relative'>\n <span className='url-text--secondary'>spee.ch / </span>\n <UrlMiddle\n publishInChannel={publishInChannel}\n selectedChannel={selectedChannel}\n loggedInChannelName={loggedInChannelName}\n loggedInChannelShortId={loggedInChannelShortId}\n />\n <input type='text' id='claim-name-input' className='input-text' name='claim' placeholder='your-url-here' onChange={this.handleInput} value={claim} />\n { (claim && !urlError) && <span id='input-success-claim-name' className='info-message--success span--absolute'>{'\\u2713'}</span> }\n { urlError && <span id='input-success-channel-name' className='info-message--failure span--absolute'>{'\\u2716'}</span> }\n </div>\n <div>\n { urlError ? (\n <p id='input-error-claim-name' className='info-message--failure'>{urlError}</p>\n ) : (\n <p className='info-message'>Choose a custom url</p>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default PublishUrlInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishUrlInput/view.jsx","import React from 'react';\n\nfunction dataURItoBlob(dataURI) {\n // convert base64/URLEncoded data component to raw binary data held in a string\n let byteString = atob(dataURI.split(',')[1]);\n // separate out the mime component\n let mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\n // write the bytes of the string to a typed array\n let ia = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n ia[i] = byteString.charCodeAt(i);\n }\n return new Blob([ia], {type: mimeString});\n}\n\nclass PublishThumbnailInput extends React.Component {\n constructor (props) {\n super(props);\n this.state = {\n videoSource : null,\n error : null,\n sliderMinRange: 1,\n sliderMaxRange: null,\n sliderValue : null,\n };\n this.handleVideoLoadedData = this.handleVideoLoadedData.bind(this);\n this.handleSliderChange = this.handleSliderChange.bind(this);\n this.createThumbnail = this.createThumbnail.bind(this);\n }\n componentDidMount () {\n const { file } = this.props;\n this.setVideoSource(file);\n }\n componentWillReceiveProps (nextProps) {\n // if file changes\n if (nextProps.file && nextProps.file !== this.props.file) {\n const { file } = nextProps;\n this.setVideoSource(file);\n };\n }\n setVideoSource (file) {\n const previewReader = new FileReader();\n previewReader.readAsDataURL(file);\n previewReader.onloadend = () => {\n const dataUri = previewReader.result;\n const blob = dataURItoBlob(dataUri);\n const videoSource = URL.createObjectURL(blob);\n this.setState({ videoSource });\n };\n }\n handleVideoLoadedData (event) {\n const duration = event.target.duration;\n const totalMinutes = Math.floor(duration / 60);\n const totalSeconds = Math.floor(duration % 60);\n // set the slider\n this.setState({\n sliderMaxRange: duration * 100,\n sliderValue : duration * 100 / 2,\n totalMinutes,\n totalSeconds,\n });\n // update the current time of the video\n let video = document.getElementById('video-thumb-player');\n video.currentTime = duration / 2;\n }\n handleSliderChange (event) {\n const value = parseInt(event.target.value);\n // update the slider value\n this.setState({\n sliderValue: value,\n });\n // update the current time of the video\n let video = document.getElementById('video-thumb-player');\n video.currentTime = value / 100;\n }\n createThumbnail () {\n // take a snapshot\n let video = document.getElementById('video-thumb-player');\n let canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);\n const dataUrl = canvas.toDataURL();\n const blob = dataURItoBlob(dataUrl);\n const snapshot = new File([blob], `thumbnail.png`, {\n type: 'image/png',\n });\n // set the thumbnail in redux store\n if (snapshot) {\n this.props.onNewThumbnail(snapshot);\n }\n }\n render () {\n const { error, videoSource, sliderMinRange, sliderMaxRange, sliderValue, totalMinutes, totalSeconds } = this.state;\n return (\n <div>\n <label className='label'>Thumbnail:</label>\n <video\n id='video-thumb-player'\n preload='metadata'\n muted\n style={{display: 'none'}}\n playsInline\n onLoadedData={this.handleVideoLoadedData}\n src={videoSource}\n onSeeked={this.createThumbnail}\n />\n {\n sliderValue ? (\n <div>\n <div className='flex-container--row flex-container--space-between-center' style={{width: '100%'}}>\n <span className='info-message'>0'00\"</span>\n <span className='info-message'>{totalMinutes}'{totalSeconds}\"</span>\n </div>\n <div>\n <input\n type='range'\n min={sliderMinRange}\n max={sliderMaxRange}\n value={sliderValue}\n className='slider'\n onChange={this.handleSliderChange}\n />\n </div>\n </div>\n ) : (\n <p className='info-message' >loading... </p>\n )\n }\n { error ? (\n <p className='info-message--failure'>{error}</p>\n ) : (\n <p className='info-message'>Use slider to set thumbnail</p>\n )}\n </div>\n );\n }\n}\n\nexport default PublishThumbnailInput;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishThumbnailInput/view.jsx","import React from 'react';\nimport ExpandingTextArea from 'components/ExpandingTextArea';\n\nclass PublishMetadataInputs extends React.Component {\n constructor (props) {\n super(props);\n this.toggleShowInputs = this.toggleShowInputs.bind(this);\n this.handleInput = this.handleInput.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n }\n toggleShowInputs () {\n this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);\n }\n handleInput (event) {\n const target = event.target;\n const value = target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n this.props.onMetadataChange(name, value);\n }\n handleSelect (event) {\n const name = event.target.name;\n const selectedOption = event.target.selectedOptions[0].value;\n this.props.onMetadataChange(name, selectedOption);\n }\n render () {\n return (\n <div id='publish-details' className='row row--padded row--no-top row--wide'>\n {this.props.showMetadataInputs && (\n <div>\n <div className='row row--no-top'>\n <div className='column column--3 column--med-10 align-content-top'>\n <label htmlFor='publish-license' className='label'>Description:</label>\n </div><div className='column column--7 column--sml-10'>\n <ExpandingTextArea\n id='publish-description'\n className='textarea textarea--primary textarea--full-width'\n rows={1}\n maxLength={2000}\n style={{ maxHeight: 200 }}\n name='description'\n placeholder='Optional description'\n value={this.props.description}\n onChange={this.handleInput} />\n </div>\n </div>\n\n <div className='row row--no-top'>\n <div className='column column--3 column--med-10'>\n <label htmlFor='publish-license' className='label'>License:</label>\n </div><div className='column column--7 column--sml-10'>\n <select type='text' name='license' id='publish-license' className='select select--primary' onChange={this.handleSelect}>\n <option value=' '>Unspecified</option>\n <option value='Public Domain'>Public Domain</option>\n <option value='Creative Commons'>Creative Commons</option>\n </select>\n </div>\n </div>\n\n <div className='row row--no-top'>\n <div className='column column--3'>\n <label htmlFor='publish-nsfw' className='label'>Mature:</label>\n </div><div className='column column--7'>\n <input className='input-checkbox' type='checkbox' id='publish-nsfw' name='nsfw' value={this.props.nsfw} onChange={this.handleInput} />\n </div>\n </div>\n </div>\n )}\n <button className='button--secondary' onClick={this.toggleShowInputs}>{this.props.showMetadataInputs ? 'less' : 'more'}</button>\n </div>\n );\n }\n}\n\nexport default PublishMetadataInputs;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishMetadataInputs/view.jsx","import React from 'react';\n\nclass PublishDisabledMessage extends React.Component {\n render () {\n const message = this.props.message;\n console.log('this.props.message:', message);\n return (\n <div className='row dropzone--disabled row--tall flex-container--column flex-container--center-center'>\n <p className='text--disabled'>Publishing is currently disabled.</p>\n <p className='text--disabled'>{message}</p>\n </div>\n );\n }\n}\n\nexport default PublishDisabledMessage;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishDisabledMessage/view.jsx","import React from 'react';\nimport ProgressBar from 'components/ProgressBar';\nimport * as publishStates from 'constants/publish_claim_states';\n\nclass PublishStatus extends React.Component {\n render () {\n const { status, message, clearFile } = this.props;\n return (\n <div className='row row--tall flex-container--column flex-container--center-center'>\n {status === publishStates.LOAD_START &&\n <div className='row align-content-center'>\n <p>File is loading to server</p>\n <p className='blue'>0%</p>\n </div>\n }\n {status === publishStates.LOADING &&\n <div>\n <div className='row align-content-center'>\n <p>File is loading to server</p>\n <p className='blue'>{message}</p>\n </div>\n </div>\n }\n {status === publishStates.PUBLISHING &&\n <div className='row align-content-center'>\n <p>Upload complete. Your file is now being published on the blockchain...</p>\n <ProgressBar size={12} />\n <p>Curious what magic is happening here? <a className='link--primary' target='blank' href='https://lbry.io/faq/what-is-lbry'>Learn more.</a></p>\n </div>\n }\n {status === publishStates.SUCCESS &&\n <div className='row align-content-center'>\n <p>Your publish is complete! You are being redirected to it now.</p>\n <p>If you are not automatically redirected, <a className='link--primary' target='_blank' href={message}>click here.</a></p>\n </div>\n }\n {status === publishStates.FAILED &&\n <div className='row align-content-center'>\n <p>Something went wrong...</p>\n <p><strong>{message}</strong></p>\n <p>For help, post the above error text in the #speech channel on the <a className='link--primary' href='https://discord.gg/YjYbwhS' target='_blank'>lbry discord</a></p>\n <button className='button--secondary' onClick={clearFile}>Reset</button>\n </div>\n }\n </div>\n );\n }\n};\n\nexport default PublishStatus;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishStatus/view.jsx","import React from 'react';\nimport Dropzone from 'containers/Dropzone';\nimport PublishDetails from 'containers/PublishDetails';\nimport PublishStatus from 'containers/PublishStatus';\nimport PublishDisabledMessage from 'containers/PublishDisabledMessage';\n\nclass PublishTool extends React.Component {\n render () {\n if (this.props.disabled) {\n console.log('publish is disabled');\n return (\n <PublishDisabledMessage />\n );\n } else {\n console.log('publish is not disabled');\n if (this.props.file) {\n if (this.props.status) {\n return (\n <PublishStatus />\n );\n } else {\n return <PublishDetails />;\n }\n }\n return <Dropzone />;\n }\n }\n};\n\nexport default PublishTool;\n\n\n\n// WEBPACK FOOTER //\n// ./client/containers/PublishTool/view.jsx","module.exports = require(\"passport\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"passport\"\n// module id = 91\n// module chunks = 0","function MysqlConfig () {\n this.database = 'default';\n this.username = 'default';\n this.password = 'default';\n this.configure = (config) => {\n if (!config) {\n return console.log('No MySQL config received.');\n }\n const {database, username, password} = config;\n this.database = database;\n this.username = username;\n this.password = password;\n };\n};\n\nmodule.exports = new MysqlConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/mysqlConfig.js","function SlackConfig () {\n this.slackWebHook = 'default';\n this.slackErrorChannel = 'default';\n this.slackInfoChannel = 'default';\n this.configure = (config) => {\n if (!config) {\n return console.log('No slack config received.');\n }\n const {slackWebHook, slackErrorChannel, slackInfoChannel} = config;\n this.slackWebHook = slackWebHook;\n this.slackErrorChannel = slackErrorChannel;\n this.slackInfoChannel = slackInfoChannel;\n };\n};\n\nmodule.exports = new SlackConfig();\n\n\n\n// WEBPACK FOOTER //\n// ./config/slackConfig.js","module.exports = require(\"passport-local\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"passport-local\"\n// module id = 94\n// module chunks = 0","module.exports = require(\"sequelize\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"sequelize\"\n// module id = 95\n// module chunks = 0","module.exports = {\n returnShortId: function (claimsArray, longId) {\n let claimIndex;\n let shortId = longId.substring(0, 1); // default short id is the first letter\n let shortIdLength = 0;\n // find the index of this claim id\n claimIndex = claimsArray.findIndex(element => {\n return element.claimId === longId;\n });\n if (claimIndex < 0) {\n throw new Error('claim id not found in claims list');\n }\n // get an array of all claims with lower height\n let possibleMatches = claimsArray.slice(0, claimIndex);\n // remove certificates with the same prefixes until none are left.\n while (possibleMatches.length > 0) {\n shortIdLength += 1;\n shortId = longId.substring(0, shortIdLength);\n possibleMatches = possibleMatches.filter(element => {\n return (element.claimId && (element.claimId.substring(0, shortIdLength) === shortId));\n });\n }\n return shortId;\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/sequelizeHelpers.js","const logger = require('winston');\nconst fs = require('fs');\n\nconst { details, publishing } = require('../../config/siteConfig.js');\n\nmodule.exports = {\n parsePublishApiRequestBody ({name, nsfw, license, title, description, thumbnail}) {\n // validate name\n if (!name) {\n throw new Error('no name field found in request');\n }\n const invalidNameCharacters = /[^A-Za-z0-9,-]/.exec(name);\n if (invalidNameCharacters) {\n throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and \"-\"');\n }\n // optional parameters\n nsfw = (nsfw === 'true');\n license = license || null;\n title = title || null;\n description = description || null;\n thumbnail = thumbnail || null;\n // return results\n return {\n name,\n nsfw,\n license,\n title,\n description,\n thumbnail,\n };\n },\n parsePublishApiRequestFiles ({file, thumbnail}) {\n // make sure a file was provided\n if (!file) {\n throw new Error('no file with key of [file] found in request');\n }\n if (!file.path) {\n throw new Error('no file path found');\n }\n if (!file.type) {\n throw new Error('no file type found');\n }\n if (!file.size) {\n throw new Error('no file type found');\n }\n // validate the file name\n if (/'/.test(file.name)) {\n throw new Error('apostrophes are not allowed in the file name');\n }\n // validate the file\n module.exports.validateFileTypeAndSize(file);\n // return results\n return {\n fileName : file.name,\n filePath : file.path,\n fileType : file.type,\n thumbnailFileName: (thumbnail ? thumbnail.name : null),\n thumbnailFilePath: (thumbnail ? thumbnail.path : null),\n thumbnailFileType: (thumbnail ? thumbnail.type : null),\n };\n },\n validateFileTypeAndSize (file) {\n // check file type and size\n switch (file.type) {\n case 'image/jpeg':\n case 'image/jpg':\n case 'image/png':\n if (file.size > 10000000) {\n logger.debug('publish > file validation > .jpeg/.jpg/.png was too big');\n throw new Error('Sorry, images are limited to 10 megabytes.');\n }\n break;\n case 'image/gif':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .gif was too big');\n throw new Error('Sorry, .gifs are limited to 50 megabytes.');\n }\n break;\n case 'video/mp4':\n if (file.size > 50000000) {\n logger.debug('publish > file validation > .mp4 was too big');\n throw new Error('Sorry, videos are limited to 50 megabytes.');\n }\n break;\n default:\n logger.debug('publish > file validation > unrecognized file type');\n throw new Error('The ' + file.type + ' content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');\n }\n return file;\n },\n createBasicPublishParams (filePath, name, title, description, license, nsfw, thumbnail) {\n logger.debug(`Creating Publish Parameters`);\n // provide defaults for title\n if (title === null || title.trim() === '') {\n title = name;\n }\n // provide default for description\n if (description === null || description.trim() === '') {\n description = '';\n }\n // provide default for license\n if (license === null || license.trim() === '') {\n license = ' '; // default to empty string\n }\n // create the publish params\n const publishParams = {\n name,\n file_path: filePath,\n bid : 0.01,\n metadata : {\n description,\n title,\n author : details.title,\n language: 'en',\n license,\n nsfw,\n },\n claim_address: publishing.primaryClaimAddress,\n };\n // add thumbnail to channel if video\n if (thumbnail) {\n publishParams['metadata']['thumbnail'] = thumbnail;\n }\n return publishParams;\n },\n createThumbnailPublishParams (thumbnailFilePath, claimName, license, nsfw) {\n if (!thumbnailFilePath) {\n return;\n }\n logger.debug(`Creating Thumbnail Publish Parameters`);\n // create the publish params\n return {\n name : `${claimName}-thumb`,\n file_path: thumbnailFilePath,\n bid : 0.01,\n metadata : {\n title : `${claimName} thumbnail`,\n description: `a thumbnail for ${claimName}`,\n author : details.title,\n language : 'en',\n license,\n nsfw,\n },\n claim_address: publishing.primaryClaimAddress,\n channel_name : publishing.thumbnailChannel,\n channel_id : publishing.thumbnailChannelId,\n };\n },\n deleteTemporaryFile (filePath) {\n fs.unlink(filePath, err => {\n if (err) {\n logger.error(`error deleting temporary file ${filePath}`);\n throw err;\n }\n logger.debug(`successfully deleted ${filePath}`);\n });\n },\n addGetResultsToFileData (fileInfo, getResult) {\n fileInfo.fileName = getResult.file_name;\n fileInfo.filePath = getResult.download_path;\n return fileInfo;\n },\n createFileData ({ name, claimId, outpoint, height, address, nsfw, contentType }) {\n return {\n name,\n claimId,\n outpoint,\n height,\n address,\n fileName: '',\n filePath: '',\n fileType: contentType,\n nsfw,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/publishHelpers.js","module.exports = require(\"fs\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"fs\"\n// module id = 98\n// module chunks = 0","const logger = require('winston');\n\nmodule.exports = {\n handleErrorResponse: function (originalUrl, ip, error, res) {\n logger.error(`Error on ${originalUrl}`, module.exports.useObjectPropertiesIfNoKeys(error));\n const [status, message] = module.exports.returnErrorMessageAndStatus(error);\n res\n .status(status)\n .json(module.exports.createErrorResponsePayload(status, message));\n },\n returnErrorMessageAndStatus: function (error) {\n let status, message;\n // check for daemon being turned off\n if (error.code === 'ECONNREFUSED') {\n status = 503;\n message = 'Connection refused. The daemon may not be running.';\n // fallback for everything else\n } else {\n status = 400;\n if (error.message) {\n message = error.message;\n } else {\n message = error;\n };\n };\n return [status, message];\n },\n useObjectPropertiesIfNoKeys: function (err) {\n if (Object.keys(err).length === 0) {\n let newErrorObject = {};\n Object.getOwnPropertyNames(err).forEach((key) => {\n newErrorObject[key] = err[key];\n });\n return newErrorObject;\n }\n return err;\n },\n createErrorResponsePayload (status, message) {\n return {\n status,\n success: false,\n message,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/errorHandlers.js","const db = require('../models/index');\nconst logger = require('winston');\nconst { returnPaginatedChannelClaims } = require('../helpers/channelPagination.js');\n\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\nconst NO_FILE = 'NO_FILE';\n\nmodule.exports = {\n getClaimId (channelName, channelClaimId, name, claimId) {\n if (channelName) {\n return module.exports.getClaimIdByChannel(channelName, channelClaimId, name);\n } else {\n return module.exports.getClaimIdByClaim(name, claimId);\n }\n },\n getClaimIdByClaim (claimName, claimId) {\n logger.debug(`getClaimIdByClaim(${claimName}, ${claimId})`);\n return new Promise((resolve, reject) => {\n db.Claim.getLongClaimId(claimName, claimId)\n .then(longClaimId => {\n if (!longClaimId) {\n resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getClaimIdByChannel (channelName, channelClaimId, claimName) {\n logger.debug(`getClaimIdByChannel(${channelName}, ${channelClaimId}, ${claimName})`);\n return new Promise((resolve, reject) => {\n db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id\n .then(longChannelId => {\n if (!longChannelId) {\n return [null, null];\n }\n return Promise.all([longChannelId, db.Claim.getClaimIdByLongChannelId(longChannelId, claimName)]); // 2. get the long claim id\n })\n .then(([longChannelId, longClaimId]) => {\n if (!longChannelId) {\n return resolve(NO_CHANNEL);\n }\n if (!longClaimId) {\n return resolve(NO_CLAIM);\n }\n resolve(longClaimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getChannelData (channelName, channelClaimId, page) {\n return new Promise((resolve, reject) => {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId)\n .then(longChannelClaimId => {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName)]);\n })\n .then(([longChannelClaimId, shortChannelClaimId]) => {\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. return all the channel information\n resolve({\n channelName,\n longChannelClaimId,\n shortChannelClaimId,\n });\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getChannelClaims (channelName, channelClaimId, page) {\n return new Promise((resolve, reject) => {\n // 1. get the long channel Id (make sure channel exists)\n db.Certificate.getLongChannelId(channelName, channelClaimId)\n .then(longChannelClaimId => {\n if (!longChannelClaimId) {\n return [null, null, null];\n }\n // 2. get the short ID and all claims for that channel\n return Promise.all([longChannelClaimId, db.Claim.getAllChannelClaims(longChannelClaimId)]);\n })\n .then(([longChannelClaimId, channelClaimsArray]) => {\n if (!longChannelClaimId) {\n return resolve(NO_CHANNEL);\n }\n // 3. format the data for the view, including pagination\n let paginatedChannelViewData = returnPaginatedChannelClaims(channelName, longChannelClaimId, channelClaimsArray, page);\n // 4. return all the channel information and contents\n resolve(paginatedChannelViewData);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n getLocalFileRecord (claimId, name) {\n return db.File.findOne({where: {claimId, name}})\n .then(file => {\n if (!file) {\n return NO_FILE;\n }\n return file.dataValues;\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/controllers/serveController.js","import React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { createStore } from 'redux';\nimport Reducer from 'client/reducers';\nimport { Provider } from 'react-redux';\nimport { StaticRouter } from 'react-router-dom';\nimport GAListener from 'client/components/GAListener/';\nimport App from 'client/app';\nimport renderFullPage from './renderFullPage.js';\nimport Helmet from 'react-helmet';\n\nmodule.exports = (req, res) => {\n let context = {};\n\n // create a new Redux store instance\n const store = createStore(Reducer);\n\n // render component to a string\n const html = renderToString(\n <Provider store={store}>\n <StaticRouter location={req.url} context={context}>\n <GAListener>\n <App />\n </GAListener>\n </StaticRouter>\n </Provider>\n );\n\n // get head tags from helmet\n const helmet = Helmet.renderStatic();\n\n // check for a redirect\n if (context.url) {\n // Somewhere a `<Redirect>` was rendered\n return res.redirect(301, context.url);\n } else {\n // we're good, send the response\n }\n\n // get the initial state from our Redux store\n const preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send(renderFullPage(helmet, html, preloadedState));\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/handlePageRender.jsx","module.exports = require(\"react-dom/server\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-dom/server\"\n// module id = 102\n// module chunks = 0","import { combineReducers } from 'redux';\nimport PublishReducer from 'reducers/publish';\nimport ChannelReducer from 'reducers/channel';\nimport ShowReducer from 'reducers/show';\nimport SiteReducer from 'reducers/site';\n\nexport default combineReducers({\n channel: ChannelReducer,\n publish: PublishReducer,\n show : ShowReducer,\n site : SiteReducer,\n});\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/index.js","export const FILE_SELECTED = 'FILE_SELECTED';\nexport const FILE_CLEAR = 'FILE_CLEAR';\nexport const METADATA_UPDATE = 'METADATA_UPDATE';\nexport const CLAIM_UPDATE = 'CLAIM_UPDATE';\nexport const SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';\nexport const PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';\nexport const ERROR_UPDATE = 'ERROR_UPDATE';\nexport const SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';\nexport const TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';\nexport const THUMBNAIL_NEW = 'THUMBNAIL_NEW';\nexport const PUBLISH_START = 'PUBLISH_START';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_action_types.js","export const LOGIN = 'Existing';\nexport const CREATE = 'New';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_channel_select_states.js","export const CHANNEL_UPDATE = 'CHANNEL_UPDATE';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/channel_action_types.js","export const LOCAL_CHECK = 'LOCAL_CHECK';\nexport const UNAVAILABLE = 'UNAVAILABLE';\nexport const ERROR = 'ERROR';\nexport const AVAILABLE = 'AVAILABLE';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/asset_display_states.js","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport { dynamicImport } from 'utils/dynamicImport';\nimport AboutPage from 'pages/AboutPage';\nimport LoginPage from 'pages/LoginPage';\nimport ShowPage from 'pages/ShowPage';\nimport FourOhFourPage from 'containers/FourOhFourPage';\nconst HomePage = dynamicImport('pages/HomePage'); // or use the provided local homepage\n\nconst App = () => {\n return (\n <Switch>\n <Route exact path='/' component={HomePage} />\n <Route exact path='/about' component={AboutPage} />\n <Route exact path='/login' component={LoginPage} />\n <Route exact path='/:identifier/:claim' component={ShowPage} />\n <Route exact path='/:claim' component={ShowPage} />\n <Route component={FourOhFourPage} />\n </Switch>\n );\n};\n\nexport default App;\n\n\n\n// WEBPACK FOOTER //\n// ./client/app.js","var map = {\n\t\"./canonicalLink\": 59,\n\t\"./canonicalLink.js\": 59,\n\t\"./dynamicImport\": 58,\n\t\"./dynamicImport.js\": 58,\n\t\"./file\": 60,\n\t\"./file.js\": 60,\n\t\"./lbryUri\": 61,\n\t\"./lbryUri.js\": 61,\n\t\"./metaTags\": 62,\n\t\"./metaTags.js\": 62,\n\t\"./pageTitle\": 63,\n\t\"./pageTitle.js\": 63,\n\t\"./publish\": 110,\n\t\"./publish.js\": 110,\n\t\"./request\": 8,\n\t\"./request.js\": 8,\n\t\"./validate\": 111,\n\t\"./validate.js\": 111\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 109;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/utils ^.*$\n// module id = 109\n// module chunks = 0","export const createPublishMetadata = (claim, { type }, { title, description, license, nsfw }, publishInChannel, selectedChannel) => {\n let metadata = {\n name: claim,\n title,\n description,\n license,\n nsfw,\n type,\n };\n if (publishInChannel) {\n metadata['channelName'] = selectedChannel;\n }\n return metadata;\n};\n\nexport const createPublishFormData = (file, thumbnail, metadata) => {\n let fd = new FormData();\n // append file\n fd.append('file', file);\n // append thumbnail\n if (thumbnail) {\n fd.append('thumbnail', thumbnail);\n }\n // append metadata\n for (let key in metadata) {\n if (metadata.hasOwnProperty(key)) {\n fd.append(key, metadata[key]);\n }\n }\n return fd;\n};\n\nexport const createThumbnailUrl = (channel, channelId, claim, host) => {\n return `${host}/${channel}:${channelId}/${claim}-thumb.png`;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/publish.js","export const validateChannelSelection = (publishInChannel, selectedChannel, loggedInChannel) => {\n if (publishInChannel && (selectedChannel !== loggedInChannel.name)) {\n throw new Error('Log in to a channel or select Anonymous');\n }\n};\n\nexport const validatePublishParams = (file, claim, urlError) => {\n if (!file) {\n throw new Error('Please choose a file');\n }\n if (!claim) {\n throw new Error('Please enter a URL');\n }\n if (urlError) {\n throw new Error('Fix the url');\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/utils/validate.js","export const CHANNEL = 'CHANNEL';\nexport const ASSET_LITE = 'ASSET_LITE';\nexport const ASSET_DETAILS = 'ASSET_DETAILS';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/show_request_types.js","module.exports = (helmet, html, preloadedState) => {\n // take the html and preloadedState and return the full page\n return `\n <!DOCTYPE html>\n <html lang=\"en\" prefix=\"og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#\">\n <head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=no\">\n <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n <!--helmet-->\n ${helmet.title.toString()}\n ${helmet.meta.toString()}\n ${helmet.link.toString()}\n <!--style sheets-->\n <link rel=\"stylesheet\" href=\"/assets/css/reset.css\" type=\"text/css\">\n <link rel=\"stylesheet\" href=\"/assets/css/general.css\" type=\"text/css\">\n <link rel=\"stylesheet\" href=\"/assets/css/mediaQueries.css\" type=\"text/css\">\n <!--google font-->\n <link href=\"https://fonts.googleapis.com/css?family=Roboto:300\" rel=\"stylesheet\">\n </head>\n <body id=\"main-body\">\n <div class=\"row row--tall flex-container--column\">\n <div id=\"react-app\" class=\"row row--tall flex-container--column\">${html}</div>\n </div>\n <script>\n window.__PRELOADED_STATE__ = ${JSON.stringify(preloadedState).replace(/</g, '\\\\\\u003c')}\n </script>\n <script src=\"/bundle/bundle.js\"></script>\n </body>\n </html>\n `;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/renderFullPage.js","export const selectSiteState = (state) => {\n return state.site;\n};\n\nexport const selectSiteHost = (state) => {\n return state.site.host;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/selectors/site.js","module.exports = require(\"babel-polyfill\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"babel-polyfill\"\n// module id = 116\n// module chunks = 0","module.exports = require(\"whatwg-fetch\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"whatwg-fetch\"\n// module id = 117\n// module chunks = 0","const Server = require('./server/server.js');\nconst Components = require('./client/components');\nconst Containers = require('./client/containers');\nconst Pages = require('./client/pages');\n\nconst exports = {\n Server,\n Components,\n Containers,\n Pages,\n};\n\nmodule.exports = exports;\n\n\n\n// WEBPACK FOOTER //\n// ./speech.js","// app dependencies\nconst express = require('express');\nconst bodyParser = require('body-parser');\nconst expressHandlebars = require('express-handlebars');\nconst Handlebars = require('handlebars');\nconst helmet = require('helmet');\nconst passport = require('passport');\nconst { serializeSpeechUser, deserializeSpeechUser } = require('./helpers/authHelpers.js');\nconst cookieSession = require('cookie-session');\nconst http = require('http');\n// logging dependencies\nconst logger = require('winston');\n\nfunction Server () {\n this.configureMysql = (mysqlConfig) => {\n require('../config/mysqlConfig.js').configure(mysqlConfig);\n };\n this.configureSite = (siteConfig) => {\n require('../config/siteConfig.js').configure(siteConfig);\n this.sessionKey = siteConfig.auth.sessionKey;\n this.PORT = siteConfig.details.port;\n };\n this.configureSlack = (slackConfig) => {\n require('../config/slackConfig.js').configure(slackConfig);\n };\n this.createApp = () => {\n // create an Express application\n const app = express();\n\n // trust the proxy to get ip address for us\n app.enable('trust proxy');\n\n // add middleware\n app.use(helmet()); // set HTTP headers to protect against well-known web vulnerabilties\n app.use(express.static(`${__dirname}/public`)); // 'express.static' to serve static files from public directory\n app.use(bodyParser.json()); // 'body parser' for parsing application/json\n app.use(bodyParser.urlencoded({ extended: true })); // 'body parser' for parsing application/x-www-form-urlencoded\n app.use((req, res, next) => { // custom logging middleware to log all incoming http requests\n logger.verbose(`Request on ${req.originalUrl} from ${req.ip}`);\n next();\n });\n\n // configure passport\n passport.serializeUser(serializeSpeechUser);\n passport.deserializeUser(deserializeSpeechUser);\n const localSignupStrategy = require('./passport/local-signup.js');\n const localLoginStrategy = require('./passport/local-login.js');\n passport.use('local-signup', localSignupStrategy);\n passport.use('local-login', localLoginStrategy);\n // initialize passport\n app.use(cookieSession({\n name : 'session',\n keys : [this.sessionKey],\n maxAge: 24 * 60 * 60 * 1000, // i.e. 24 hours\n }));\n app.use(passport.initialize());\n app.use(passport.session());\n\n // configure handlebars & register it with express app\n const hbs = expressHandlebars.create({\n defaultLayout: 'embed',\n handlebars : Handlebars,\n });\n app.engine('handlebars', hbs.engine);\n app.set('view engine', 'handlebars');\n\n // set the routes on the app\n require('./routes/auth-routes.js')(app);\n require('./routes/api-routes.js')(app);\n require('./routes/page-routes.js')(app);\n require('./routes/asset-routes.js')(app);\n require('./routes/fallback-routes.js')(app);\n\n this.app = app;\n };\n this.initialize = () => {\n require('./helpers/configureLogger.js')(logger);\n require('./helpers/configureSlack.js')(logger);\n this.createApp();\n this.server = http.Server(this.app);\n };\n this.start = () => {\n const db = require('./models/index');\n // sync sequelize\n db.sequelize.sync()\n // start the server\n .then(() => {\n this.server.listen(this.PORT, () => {\n logger.info(`Server is listening on PORT ${this.PORT}`);\n });\n })\n .catch((error) => {\n logger.error(`Startup Error:`, error);\n });\n };\n};\n\nmodule.exports = Server;\n\n\n\n// WEBPACK FOOTER //\n// ./server/server.js","module.exports = require(\"express\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"express\"\n// module id = 120\n// module chunks = 0","module.exports = require(\"body-parser\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"body-parser\"\n// module id = 121\n// module chunks = 0","module.exports = require(\"express-handlebars\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"express-handlebars\"\n// module id = 122\n// module chunks = 0","module.exports = require(\"handlebars\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"handlebars\"\n// module id = 123\n// module chunks = 0","module.exports = require(\"helmet\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"helmet\"\n// module id = 124\n// module chunks = 0","const logger = require('winston');\n\nmodule.exports = {\n serializeSpeechUser (user, done) { // returns user data to be serialized into session\n logger.debug('serializing user');\n done(null, user);\n },\n deserializeSpeechUser (user, done) { // deserializes session and populates additional info to req.user\n logger.debug('deserializing user');\n done(null, user);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/authHelpers.js","module.exports = require(\"cookie-session\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"cookie-session\"\n// module id = 126\n// module chunks = 0","module.exports = require(\"http\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"http\"\n// module id = 127\n// module chunks = 0","const PassportLocalStrategy = require('passport-local').Strategy;\nconst lbryApi = require('../helpers/lbryApi.js');\nconst logger = require('winston');\nconst db = require('../models');\n\nmodule.exports = new PassportLocalStrategy(\n {\n usernameField: 'username',\n passwordField: 'password',\n },\n (username, password, done) => {\n logger.verbose(`new channel signup request. user: ${username} pass: ${password} .`);\n let userInfo = {};\n // server-side validaton of inputs (username, password)\n\n // create the channel and retrieve the metadata\n return lbryApi.createChannel(`@${username}`)\n .then(tx => {\n // create user record\n const userData = {\n userName: username,\n password: password,\n };\n logger.verbose('userData >', userData);\n // create user record\n const channelData = {\n channelName : `@${username}`,\n channelClaimId: tx.claim_id,\n };\n logger.verbose('channelData >', channelData);\n // create certificate record\n const certificateData = {\n claimId: tx.claim_id,\n name : `@${username}`,\n // address,\n };\n logger.verbose('certificateData >', certificateData);\n // save user and certificate to db\n return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]);\n })\n .then(([newUser, newChannel, newCertificate]) => {\n logger.verbose('user and certificate successfully created');\n // store the relevant newUser info to be passed back for req.User\n userInfo['id'] = newUser.id;\n userInfo['userName'] = newUser.userName;\n userInfo['channelName'] = newChannel.channelName;\n userInfo['channelClaimId'] = newChannel.channelClaimId;\n // associate the instances\n return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]);\n })\n .then(() => {\n logger.verbose('user and certificate successfully associated');\n return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName);\n })\n .then(shortChannelId => {\n userInfo['shortChannelId'] = shortChannelId;\n return done(null, userInfo);\n })\n .catch(error => {\n logger.error('signup error', error);\n return done(error);\n });\n }\n);\n\n\n\n// WEBPACK FOOTER //\n// ./server/passport/local-signup.js","module.exports = require(\"axios\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"axios\"\n// module id = 129\n// module chunks = 0","const lbryConfig = {\n api: {\n apiHost: 'localhost',\n apiPort: '5279',\n },\n};\n\nmodule.exports = lbryConfig;\n\n\n\n// WEBPACK FOOTER //\n// ./config/lbryConfig.js","module.exports = require(\"universal-analytics\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"universal-analytics\"\n// module id = 131\n// module chunks = 0","const logger = require('winston');\nconst { returnShortId } = require('../helpers/sequelizeHelpers.js');\n\nmodule.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {\n const Certificate = sequelize.define(\n 'Certificate',\n {\n address: {\n type : STRING,\n default: null,\n },\n amount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n claimId: {\n type : STRING,\n default: null,\n },\n claimSequence: {\n type : INTEGER,\n default: null,\n },\n decodedClaim: {\n type : BOOLEAN,\n default: null,\n },\n depth: {\n type : INTEGER,\n default: null,\n },\n effectiveAmount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n hasSignature: {\n type : BOOLEAN,\n default: null,\n },\n height: {\n type : INTEGER,\n default: null,\n },\n hex: {\n type : TEXT('long'),\n default: null,\n },\n name: {\n type : STRING,\n default: null,\n },\n nout: {\n type : INTEGER,\n default: null,\n },\n txid: {\n type : STRING,\n default: null,\n },\n validAtHeight: {\n type : INTEGER,\n default: null,\n },\n outpoint: {\n type : STRING,\n default: null,\n },\n valueVersion: {\n type : STRING,\n default: null,\n },\n claimType: {\n type : STRING,\n default: null,\n },\n certificateVersion: {\n type : STRING,\n default: null,\n },\n keyType: {\n type : STRING,\n default: null,\n },\n publicKey: {\n type : TEXT('long'),\n default: null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Certificate.associate = db => {\n Certificate.belongsTo(db.Channel, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) {\n logger.debug(`getShortChannelIdFromLongChannelId ${channelName}:${longChannelId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {name: channelName},\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n throw new Error('No channel(s) found with that channel name');\n default:\n return resolve(returnShortId(result, longChannelId));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) {\n logger.debug(`getLongChannelIdFromShortChannelId(${channelName}, ${channelClaimId})`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {\n name : channelName,\n claimId: {\n $like: `${channelClaimId}%`,\n },\n },\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default: // note results must be sorted\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelIdFromChannelName = function (channelName) {\n logger.debug(`getLongChannelIdFromChannelName(${channelName})`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: channelName },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.validateLongChannelId = function (name, claimId) {\n logger.debug(`validateLongChannelId(${name}, ${claimId})`);\n return new Promise((resolve, reject) => {\n this.findOne({\n where: {name, claimId},\n })\n .then(result => {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Certificate.getLongChannelId = function (channelName, channelClaimId) {\n logger.debug(`getLongChannelId(${channelName}, ${channelClaimId})`);\n if (channelClaimId && (channelClaimId.length === 40)) { // if a full channel id is provided\n return this.validateLongChannelId(channelName, channelClaimId);\n } else if (channelClaimId && channelClaimId.length < 40) { // if a short channel id is provided\n return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId);\n } else {\n return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided\n }\n };\n\n return Certificate;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/certificate.js","module.exports = (sequelize, { STRING }) => {\n const Channel = sequelize.define(\n 'Channel',\n {\n channelName: {\n type : STRING,\n allowNull: false,\n },\n channelClaimId: {\n type : STRING,\n allowNull: false,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Channel.associate = db => {\n Channel.belongsTo(db.User);\n Channel.hasOne(db.Certificate);\n };\n\n return Channel;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/channel.js","const logger = require('winston');\nconst { returnShortId } = require('../helpers/sequelizeHelpers.js');\nconst { assetDefaults: { thumbnail: defaultThumbnail }, details: { host } } = require('../../config/siteConfig.js');\n\nfunction determineFileExtensionFromContentType (contentType) {\n switch (contentType) {\n case 'image/jpeg':\n case 'image/jpg':\n return 'jpeg';\n case 'image/png':\n return 'png';\n case 'image/gif':\n return 'gif';\n case 'video/mp4':\n return 'mp4';\n default:\n logger.debug('setting unknown file type as file extension jpeg');\n return 'jpeg';\n }\n};\n\nfunction determineThumbnail (storedThumbnail, defaultThumbnail) {\n if (storedThumbnail === '') {\n return defaultThumbnail;\n }\n return storedThumbnail;\n};\n\nfunction prepareClaimData (claim) {\n // logger.debug('preparing claim data based on resolved data:', claim);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['host'] = host;\n return claim;\n};\n\nmodule.exports = (sequelize, { STRING, BOOLEAN, INTEGER, TEXT, DECIMAL }) => {\n const Claim = sequelize.define(\n 'Claim',\n {\n address: {\n type : STRING,\n default: null,\n },\n amount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n claimId: {\n type : STRING,\n default: null,\n },\n claimSequence: {\n type : INTEGER,\n default: null,\n },\n decodedClaim: {\n type : BOOLEAN,\n default: null,\n },\n depth: {\n type : INTEGER,\n default: null,\n },\n effectiveAmount: {\n type : DECIMAL(19, 8),\n default: null,\n },\n hasSignature: {\n type : BOOLEAN,\n default: null,\n },\n height: {\n type : INTEGER,\n default: null,\n },\n hex: {\n type : TEXT('long'),\n default: null,\n },\n name: {\n type : STRING,\n default: null,\n },\n nout: {\n type : INTEGER,\n default: null,\n },\n txid: {\n type : STRING,\n default: null,\n },\n validAtHeight: {\n type : INTEGER,\n default: null,\n },\n outpoint: {\n type : STRING,\n default: null,\n },\n claimType: {\n type : STRING,\n default: null,\n },\n certificateId: {\n type : STRING,\n default: null,\n },\n author: {\n type : STRING,\n default: null,\n },\n description: {\n type : TEXT('long'),\n default: null,\n },\n language: {\n type : STRING,\n default: null,\n },\n license: {\n type : STRING,\n default: null,\n },\n licenseUrl: {\n type : STRING,\n default: null,\n },\n nsfw: {\n type : BOOLEAN,\n default: null,\n },\n preview: {\n type : STRING,\n default: null,\n },\n thumbnail: {\n type : STRING,\n default: null,\n },\n title: {\n type : STRING,\n default: null,\n },\n metadataVersion: {\n type : STRING,\n default: null,\n },\n contentType: {\n type : STRING,\n default: null,\n },\n source: {\n type : STRING,\n default: null,\n },\n sourceType: {\n type : STRING,\n default: null,\n },\n sourceVersion: {\n type : STRING,\n default: null,\n },\n streamVersion: {\n type : STRING,\n default: null,\n },\n valueVersion: {\n type : STRING,\n default: null,\n },\n channelName: {\n type : STRING,\n allowNull: true,\n default : null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Claim.associate = db => {\n Claim.belongsTo(db.File, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) {\n logger.debug(`Claim.getShortClaimIdFromLongClaimId for ${claimName}#${claimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: claimName },\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n throw new Error('No claim(s) found with that claim name');\n default:\n resolve(returnShortId(result, claimId));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getAllChannelClaims = function (channelClaimId) {\n logger.debug(`Claim.getAllChannelClaims for ${channelClaimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { certificateId: channelClaimId },\n order: [['height', 'ASC']],\n raw : true, // returns an array of only data, not an array of instances\n })\n .then(channelClaimsArray => {\n // logger.debug('channelclaimsarray length:', channelClaimsArray.length);\n switch (channelClaimsArray.length) {\n case 0:\n return resolve(null);\n default:\n channelClaimsArray.forEach(claim => {\n claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);\n claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);\n return claim;\n });\n return resolve(channelClaimsArray);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) {\n logger.debug(`finding claim id for claim ${claimName} from channel ${channelClaimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name: claimName, certificateId: channelClaimId },\n order: [['id', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(result[0].claimId);\n default:\n logger.error(`${result.length} records found for \"${claimName}\" in channel \"${channelClaimId}\"`);\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimIdFromShortClaimId = function (name, shortId) {\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: {\n name,\n claimId: {\n $like: `${shortId}%`,\n }},\n order: [['height', 'ASC']],\n })\n .then(result => {\n switch (result.length) {\n case 0:\n return resolve(null);\n default: // note results must be sorted\n return resolve(result[0].claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getTopFreeClaimIdByClaimName = function (name) {\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name },\n order: [['effectiveAmount', 'DESC'], ['height', 'ASC']], // note: maybe height and effective amount need to switch?\n })\n .then(result => {\n logger.debug('length of result', result.length);\n switch (result.length) {\n case 0:\n return resolve(null);\n default:\n return resolve(result[0].dataValues.claimId);\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.validateLongClaimId = function (name, claimId) {\n return new Promise((resolve, reject) => {\n this.findOne({\n where: {name, claimId},\n })\n .then(result => {\n if (!result) {\n return resolve(null);\n };\n resolve(claimId);\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n Claim.getLongClaimId = function (claimName, claimId) {\n logger.debug(`getLongClaimId(${claimName}, ${claimId})`);\n if (claimId && (claimId.length === 40)) { // if a full claim id is provided\n return this.validateLongClaimId(claimName, claimId);\n } else if (claimId && claimId.length < 40) {\n return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided\n } else {\n return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided\n }\n };\n\n Claim.resolveClaim = function (name, claimId) {\n logger.debug(`Claim.resolveClaim: ${name} ${claimId}`);\n return new Promise((resolve, reject) => {\n this\n .findAll({\n where: { name, claimId },\n })\n .then(claimArray => {\n switch (claimArray.length) {\n case 0:\n return resolve(null);\n case 1:\n return resolve(prepareClaimData(claimArray[0].dataValues));\n default:\n logger.error(`more than one record matches ${name}#${claimId} in db.Claim`);\n return resolve(prepareClaimData(claimArray[0].dataValues));\n }\n })\n .catch(error => {\n reject(error);\n });\n });\n };\n\n return Claim;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/claim.js","module.exports = (sequelize, { STRING, BOOLEAN, INTEGER }) => {\n const File = sequelize.define(\n 'File',\n {\n name: {\n type : STRING,\n allowNull: false,\n },\n claimId: {\n type : STRING,\n allowNull: false,\n },\n address: {\n type : STRING,\n allowNull: false,\n },\n outpoint: {\n type : STRING,\n allowNull: false,\n },\n height: {\n type : INTEGER,\n allowNull: false,\n default : 0,\n },\n fileName: {\n type : STRING,\n allowNull: false,\n },\n filePath: {\n type : STRING,\n allowNull: false,\n },\n fileType: {\n type: STRING,\n },\n nsfw: {\n type : BOOLEAN,\n allowNull : false,\n defaultValue: false,\n },\n trendingEligible: {\n type : BOOLEAN,\n allowNull : false,\n defaultValue: true,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n File.associate = db => {\n File.hasMany(db.Request);\n File.hasOne(db.Claim);\n };\n\n File.getRecentClaims = function () {\n return this.findAll({\n where: { nsfw: false, trendingEligible: true },\n order: [['createdAt', 'DESC']],\n limit: 25,\n });\n };\n\n return File;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/file.js","module.exports = (sequelize, { STRING, BOOLEAN, TEXT }) => {\n const Request = sequelize.define(\n 'Request',\n {\n action: {\n type : STRING,\n allowNull: false,\n },\n url: {\n type : STRING,\n allowNull: false,\n },\n ipAddress: {\n type : STRING,\n allowNull: true,\n },\n result: {\n type : TEXT('long'),\n allowNull: true,\n default : null,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n Request.associate = db => {\n Request.belongsTo(db.File, {\n foreignKey: {\n allowNull: true,\n },\n });\n };\n\n return Request;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/request.js","'use strict';\nconst bcrypt = require('bcrypt');\nconst logger = require('winston');\n\nmodule.exports = (sequelize, { STRING }) => {\n const User = sequelize.define(\n 'User',\n {\n userName: {\n type : STRING,\n allowNull: false,\n },\n password: {\n type : STRING,\n allowNull: false,\n },\n },\n {\n freezeTableName: true,\n }\n );\n\n User.associate = db => {\n User.hasOne(db.Channel);\n };\n\n User.prototype.comparePassword = function (password) {\n return bcrypt.compare(password, this.password);\n };\n\n User.prototype.changePassword = function (newPassword) {\n return new Promise((resolve, reject) => {\n // generate a salt string to use for hashing\n bcrypt.genSalt((saltError, salt) => {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(newPassword, salt, (hashError, hash) => {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the current password with the new hash\n this\n .update({password: hash})\n .then(() => {\n resolve();\n })\n .catch(error => {\n reject(error);\n });\n });\n });\n });\n };\n\n // pre-save hook method to hash the user's password before the user's info is saved to the db.\n User.hook('beforeCreate', (user, options) => {\n logger.debug('User.beforeCreate hook...');\n return new Promise((resolve, reject) => {\n // generate a salt string to use for hashing\n bcrypt.genSalt((saltError, salt) => {\n if (saltError) {\n logger.error('salt error', saltError);\n reject(saltError);\n return;\n }\n // generate a hashed version of the user's password\n bcrypt.hash(user.password, salt, (hashError, hash) => {\n // if there is an error with the hash generation return the error\n if (hashError) {\n logger.error('hash error', hashError);\n reject(hashError);\n return;\n }\n // replace the password string with the hash password value\n user.password = hash;\n resolve();\n });\n });\n });\n });\n\n return User;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/models/user.js","module.exports = require(\"bcrypt\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"bcrypt\"\n// module id = 138\n// module chunks = 0","const PassportLocalStrategy = require('passport-local').Strategy;\nconst logger = require('winston');\nconst db = require('../models/index');\n\nconst returnUserAndChannelInfo = (userInstance) => {\n return new Promise((resolve, reject) => {\n let userInfo = {};\n userInfo['id'] = userInstance.id;\n userInfo['userName'] = userInstance.userName;\n userInstance\n .getChannel()\n .then(({channelName, channelClaimId}) => {\n userInfo['channelName'] = channelName;\n userInfo['channelClaimId'] = channelClaimId;\n return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName);\n })\n .then(shortChannelId => {\n userInfo['shortChannelId'] = shortChannelId;\n resolve(userInfo);\n })\n .catch(error => {\n reject(error);\n });\n });\n};\n\nmodule.exports = new PassportLocalStrategy(\n {\n usernameField: 'username',\n passwordField: 'password',\n },\n (username, password, done) => {\n return db.User\n .findOne({\n where: {userName: username},\n })\n .then(user => {\n if (!user) {\n logger.debug('no user found');\n return done(null, false, {message: 'Incorrect username or password'});\n }\n return user.comparePassword(password)\n .then(isMatch => {\n if (!isMatch) {\n logger.debug('incorrect password');\n return done(null, false, {message: 'Incorrect username or password'});\n }\n logger.debug('Password was a match, returning User');\n return returnUserAndChannelInfo(user)\n .then(userInfo => {\n return done(null, userInfo);\n })\n .catch(error => {\n return error;\n });\n })\n .catch(error => {\n return error;\n });\n })\n .catch(error => {\n return done(error);\n });\n },\n);\n\n\n\n// WEBPACK FOOTER //\n// ./server/passport/local-login.js","const logger = require('winston');\nconst passport = require('passport');\n\nmodule.exports = (app) => {\n // route for sign up\n app.post('/signup', passport.authenticate('local-signup'), (req, res) => {\n logger.verbose(`successful signup for ${req.user.channelName}`);\n res.status(200).json({\n success : true,\n channelName : req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId,\n });\n });\n // route for log in\n app.post('/login', (req, res, next) => {\n passport.authenticate('local-login', (err, user, info) => {\n if (err) {\n return next(err);\n }\n if (!user) {\n return res.status(400).json({\n success: false,\n message: info.message,\n });\n }\n logger.debug('successful login');\n req.logIn(user, (err) => {\n if (err) {\n return next(err);\n }\n return res.status(200).json({\n success : true,\n channelName : req.user.channelName,\n channelClaimId: req.user.channelClaimId,\n shortChannelId: req.user.shortChannelId,\n });\n });\n })(req, res, next);\n });\n // route to log out\n app.get('/logout', (req, res) => {\n req.logout();\n res.status(200).json({success: true, message: 'you successfully logged out'});\n });\n // see if user is authenticated, and return credentials if so\n app.get('/user', (req, res) => {\n if (req.user) {\n res.status(200).json({success: true, data: req.user});\n } else {\n res.status(401).json({success: false, message: 'user is not logged in'});\n }\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/auth-routes.js","const logger = require('winston');\nconst multipart = require('connect-multiparty');\nconst { publishing: { uploadDirectory }, details: { host } } = require('../../config/siteConfig.js');\nconst multipartMiddleware = multipart({uploadDir: uploadDirectory});\nconst db = require('../models/index');\nconst { claimNameIsAvailable, checkChannelAvailability, publish } = require('../controllers/publishController.js');\nconst { getClaimList, resolveUri, getClaim } = require('../helpers/lbryApi.js');\nconst { addGetResultsToFileData, createBasicPublishParams, createThumbnailPublishParams, parsePublishApiRequestBody, parsePublishApiRequestFiles, createFileData } = require('../helpers/publishHelpers.js');\nconst errorHandlers = require('../helpers/errorHandlers.js');\nconst { sendGATimingEvent } = require('../helpers/googleAnalytics.js');\nconst { authenticateUser } = require('../auth/authentication.js');\nconst { getChannelData, getChannelClaims, getClaimId } = require('../controllers/serveController.js');\n\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\n\nmodule.exports = (app) => {\n // route to check whether site has published to a channel\n app.get('/api/channel/availability/:name', ({ ip, originalUrl, params: { name } }, res) => {\n const gaStartTime = Date.now();\n checkChannelAvailability(name)\n .then(availableName => {\n res.status(200).json(availableName);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short channel id from long channel Id\n app.get('/api/channel/short-id/:longId/:name', ({ ip, originalUrl, params }, res) => {\n db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name)\n .then(shortId => {\n res.status(200).json(shortId);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/data/:channelName/:channelClaimId', ({ ip, originalUrl, body, params }, res) => {\n const channelName = params.channelName;\n let channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n getChannelData(channelName, channelClaimId, 0)\n .then(data => {\n if (data === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel was found'});\n }\n res.status(200).json({success: true, data});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/channel/claims/:channelName/:channelClaimId/:page', ({ ip, originalUrl, body, params }, res) => {\n const channelName = params.channelName;\n let channelClaimId = params.channelClaimId;\n if (channelClaimId === 'none') channelClaimId = null;\n const page = params.page;\n getChannelClaims(channelName, channelClaimId, page)\n .then(data => {\n if (data === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel was found'});\n }\n res.status(200).json({success: true, data});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a claim_list request on the daemon\n app.get('/api/claim/list/:name', ({ ip, originalUrl, params }, res) => {\n getClaimList(params.name)\n .then(claimsList => {\n res.status(200).json(claimsList);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get an asset\n app.get('/api/claim/get/:name/:claimId', ({ ip, originalUrl, params }, res) => {\n const name = params.name;\n const claimId = params.claimId;\n // resolve the claim\n db.Claim.resolveClaim(name, claimId)\n .then(resolveResult => {\n // make sure a claim actually exists at that uri\n if (!resolveResult) {\n throw new Error('No matching uri found in Claim table');\n }\n let fileData = createFileData(resolveResult);\n // get the claim\n return Promise.all([fileData, getClaim(`${name}#${claimId}`)]);\n })\n .then(([ fileData, getResult ]) => {\n fileData = addGetResultsToFileData(fileData, getResult);\n return Promise.all([db.upsert(db.File, fileData, {name, claimId}, 'File'), getResult]);\n })\n .then(([ fileRecord, {message, completed} ]) => {\n res.status(200).json({ success: true, message, completed });\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to check whether this site published to a claim\n app.get('/api/claim/availability/:name', ({ ip, originalUrl, params: { name } }, res) => {\n const gaStartTime = Date.now();\n claimNameIsAvailable(name)\n .then(result => {\n res.status(200).json(result);\n sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a resolve request on the daemon\n app.get('/api/claim/resolve/:name/:claimId', ({ headers, ip, originalUrl, params }, res) => {\n resolveUri(`${params.name}#${params.claimId}`)\n .then(resolvedUri => {\n res.status(200).json(resolvedUri);\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to run a publish request on the daemon\n app.post('/api/claim/publish', multipartMiddleware, ({ body, files, headers, ip, originalUrl, user }, res) => {\n // define variables\n let channelName, channelId, channelPassword, description, fileName, filePath, fileType, gaStartTime, license, name, nsfw, thumbnail, thumbnailFileName, thumbnailFilePath, thumbnailFileType, title;\n // record the start time of the request\n gaStartTime = Date.now();\n // validate the body and files of the request\n try {\n // validateApiPublishRequest(body, files);\n ({name, nsfw, license, title, description, thumbnail} = parsePublishApiRequestBody(body));\n ({fileName, filePath, fileType, thumbnailFileName, thumbnailFilePath, thumbnailFileType} = parsePublishApiRequestFiles(files));\n ({channelName, channelId, channelPassword} = body);\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // check channel authorization\n Promise.all([\n authenticateUser(channelName, channelId, channelPassword, user),\n claimNameIsAvailable(name),\n createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail),\n createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw),\n ])\n .then(([{channelName, channelClaimId}, validatedClaimName, publishParams, thumbnailPublishParams]) => {\n // add channel details to the publish params\n if (channelName && channelClaimId) {\n publishParams['channel_name'] = channelName;\n publishParams['channel_id'] = channelClaimId;\n }\n // publish the thumbnail\n if (thumbnailPublishParams) {\n publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType);\n }\n // publish the asset\n return publish(publishParams, fileName, fileType);\n })\n .then(result => {\n res.status(200).json({\n success: true,\n message: 'publish completed successfully',\n data : {\n name,\n claimId: result.claim_id,\n url : `${host}/${result.claim_id}/${name}`,\n lbryTx : result,\n },\n });\n // record the publish end time and send to google analytics\n sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now());\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to get a short claim id from long claim Id\n app.get('/api/claim/short-id/:longId/:name', ({ ip, originalUrl, body, params }, res) => {\n db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name)\n .then(shortId => {\n res.status(200).json({success: true, data: shortId});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.post('/api/claim/long-id', ({ ip, originalUrl, body, params }, res) => {\n logger.debug('body:', body);\n const channelName = body.channelName;\n const channelClaimId = body.channelClaimId;\n const claimName = body.claimName;\n const claimId = body.claimId;\n getClaimId(channelName, channelClaimId, claimName, claimId)\n .then(result => {\n if (result === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'No matching channel could be found'});\n }\n if (result === NO_CLAIM) {\n return res.status(404).json({success: false, message: 'No matching claim id could be found'});\n }\n res.status(200).json({success: true, data: result});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n app.get('/api/claim/data/:claimName/:claimId', ({ ip, originalUrl, body, params }, res) => {\n const claimName = params.claimName;\n let claimId = params.claimId;\n if (claimId === 'none') claimId = null;\n db.Claim.resolveClaim(claimName, claimId)\n .then(claimInfo => {\n if (!claimInfo) {\n return res.status(404).json({success: false, message: 'No claim could be found'});\n }\n res.status(200).json({success: true, data: claimInfo});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n // route to see if asset is available locally\n app.get('/api/file/availability/:name/:claimId', ({ ip, originalUrl, params }, res) => {\n const name = params.name;\n const claimId = params.claimId;\n db.File.findOne({where: {name, claimId}})\n .then(result => {\n if (result) {\n return res.status(200).json({success: true, data: true});\n }\n res.status(200).json({success: true, data: false});\n })\n .catch(error => {\n errorHandlers.handleErrorResponse(originalUrl, ip, error, res);\n });\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/api-routes.js","module.exports = require(\"connect-multiparty\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"connect-multiparty\"\n// module id = 142\n// module chunks = 0","const logger = require('winston');\nconst db = require('../models/index');\nconst lbryApi = require('../helpers/lbryApi.js');\nconst publishHelpers = require('../helpers/publishHelpers.js');\nconst { publishing: { primaryClaimAddress, additionalClaimAddresses } } = require('../../config/siteConfig.js');\nconst Sequelize = require('sequelize');\nconst Op = Sequelize.Op;\n\nmodule.exports = {\n publish (publishParams, fileName, fileType) {\n return new Promise((resolve, reject) => {\n let publishResults, certificateId, channelName;\n // publish the file\n return lbryApi.publishClaim(publishParams)\n .then(tx => {\n logger.info(`Successfully published ${publishParams.name} ${fileName}`, tx);\n publishResults = tx;\n // get the channel information\n if (publishParams.channel_name) {\n logger.debug(`this claim was published in channel: ${publishParams.channel_name}`);\n return db.Channel.findOne({where: {channelName: publishParams.channel_name}});\n } else {\n logger.debug('this claim was not published in a channel');\n return null;\n }\n })\n .then(channel => {\n // set channel information\n certificateId = null;\n channelName = null;\n if (channel) {\n certificateId = channel.channelClaimId;\n channelName = channel.channelName;\n }\n logger.debug(`certificateId: ${certificateId}`);\n })\n .then(() => {\n // create the File record\n const fileRecord = {\n name : publishParams.name,\n claimId : publishResults.claim_id,\n title : publishParams.metadata.title,\n description: publishParams.metadata.description,\n address : publishParams.claim_address,\n outpoint : `${publishResults.txid}:${publishResults.nout}`,\n height : 0,\n fileName,\n filePath : publishParams.file_path,\n fileType,\n nsfw : publishParams.metadata.nsfw,\n };\n // create the Claim record\n const claimRecord = {\n name : publishParams.name,\n claimId : publishResults.claim_id,\n title : publishParams.metadata.title,\n description: publishParams.metadata.description,\n address : publishParams.claim_address,\n thumbnail : publishParams.metadata.thumbnail,\n outpoint : `${publishResults.txid}:${publishResults.nout}`,\n height : 0,\n contentType: fileType,\n nsfw : publishParams.metadata.nsfw,\n amount : publishParams.bid,\n certificateId,\n channelName,\n };\n // upsert criteria\n const upsertCriteria = {\n name : publishParams.name,\n claimId: publishResults.claim_id,\n };\n // upsert the records\n return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]);\n })\n .then(([file, claim]) => {\n logger.debug('File and Claim records successfully created');\n return Promise.all([file.setClaim(claim), claim.setFile(file)]);\n })\n .then(() => {\n logger.debug('File and Claim records successfully associated');\n resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim;\n })\n .catch(error => {\n logger.error('PUBLISH ERROR', error);\n publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file\n reject(error);\n });\n });\n },\n claimNameIsAvailable (name) {\n const claimAddresses = additionalClaimAddresses || [];\n claimAddresses.push(primaryClaimAddress);\n // find any records where the name is used\n return db.Claim\n .findAll({\n attributes: ['address'],\n where : {\n name,\n address: {\n [Op.or]: claimAddresses,\n },\n },\n })\n .then(result => {\n if (result.length >= 1) {\n throw new Error('That claim is already in use');\n };\n return name;\n })\n .catch(error => {\n throw error;\n });\n },\n checkChannelAvailability (name) {\n return db.Channel\n .findAll({\n where: { channelName: name },\n })\n .then(result => {\n if (result.length >= 1) {\n throw new Error('That channel has already been claimed');\n }\n return name;\n })\n .catch(error => {\n throw error;\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/controllers/publishController.js","const db = require('../models');\nconst logger = require('winston');\n\nmodule.exports = {\n authenticateUser (channelName, channelId, channelPassword, user) {\n // case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided\n if (!channelName && !channelId) {\n return {\n channelName : null,\n channelClaimId: null,\n };\n }\n // case: channelName or channel Id are provided with user token\n if (user) {\n if (channelName && channelName !== user.channelName) {\n throw new Error('the provided channel name does not match user credentials');\n }\n if (channelId && channelId !== user.channelClaimId) {\n throw new Error('the provided channel id does not match user credentials');\n }\n return {\n channelName : user.channelName,\n channelClaimId: user.channelClaimId,\n };\n }\n // case: channelName or channel Id are provided with password instead of user token\n if (!channelPassword) throw new Error('no channel password provided');\n return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword);\n },\n authenticateChannelCredentials (channelName, channelId, userPassword) {\n return new Promise((resolve, reject) => {\n // hoisted variables\n let channelData;\n // build the params for finding the channel\n let channelFindParams = {};\n if (channelName) channelFindParams['channelName'] = channelName;\n if (channelId) channelFindParams['channelClaimId'] = channelId;\n // find the channel\n db.Channel\n .findOne({\n where: channelFindParams,\n })\n .then(channel => {\n if (!channel) {\n logger.debug('no channel found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n channelData = channel.get();\n logger.debug('channel data:', channelData);\n return db.User.findOne({\n where: { userName: channelData.channelName.substring(1) },\n });\n })\n .then(user => {\n if (!user) {\n logger.debug('no user found');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n return user.comparePassword(userPassword);\n })\n .then(isMatch => {\n if (!isMatch) {\n logger.debug('incorrect password');\n throw new Error('Authentication failed, you do not have access to that channel');\n }\n logger.debug('...password was a match...');\n resolve(channelData);\n })\n .catch(error => {\n reject(error);\n });\n });\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/auth/authentication.js","const CLAIMS_PER_PAGE = 12;\n\nmodule.exports = {\n returnPaginatedChannelClaims (channelName, longChannelClaimId, claims, page) {\n const totalPages = module.exports.determineTotalPages(claims);\n const paginationPage = module.exports.getPageFromQuery(page);\n const viewData = {\n channelName : channelName,\n longChannelClaimId: longChannelClaimId,\n claims : module.exports.extractPageFromClaims(claims, paginationPage),\n previousPage : module.exports.determinePreviousPage(paginationPage),\n currentPage : paginationPage,\n nextPage : module.exports.determineNextPage(totalPages, paginationPage),\n totalPages : totalPages,\n totalResults : module.exports.determineTotalClaims(claims),\n };\n return viewData;\n },\n getPageFromQuery (page) {\n if (page) {\n return parseInt(page);\n }\n return 1;\n },\n extractPageFromClaims (claims, pageNumber) {\n if (!claims) {\n return []; // if no claims, return this default\n }\n // logger.debug('claims is array?', Array.isArray(claims));\n // logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber));\n const claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE;\n const claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE;\n const pageOfClaims = claims.slice(claimStartIndex, claimEndIndex);\n return pageOfClaims;\n },\n determineTotalPages (claims) {\n if (!claims) {\n return 0;\n } else {\n const totalClaims = claims.length;\n if (totalClaims < CLAIMS_PER_PAGE) {\n return 1;\n }\n const fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE);\n const remainder = totalClaims % CLAIMS_PER_PAGE;\n if (remainder === 0) {\n return fullPages;\n }\n return fullPages + 1;\n }\n },\n determinePreviousPage (currentPage) {\n if (currentPage === 1) {\n return null;\n }\n return currentPage - 1;\n },\n determineNextPage (totalPages, currentPage) {\n if (currentPage === totalPages) {\n return null;\n }\n return currentPage + 1;\n },\n determineTotalClaims (claims) {\n if (!claims) {\n return 0;\n }\n return claims.length;\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/channelPagination.js","const { details: host } = require('../../config/siteConfig.js');\nconst handlePageRender = require('../helpers/handlePageRender.jsx');\n\nmodule.exports = (app) => {\n // route for the home page\n app.get('/', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display login page\n app.get('/login', (req, res) => {\n handlePageRender(req, res);\n });\n // route to show 'about' page\n app.get('/about', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/trending', (req, res) => {\n res.status(301).redirect('/popular');\n });\n app.get('/popular', (req, res) => {\n handlePageRender(req, res);\n });\n // route to display a list of the trending images\n app.get('/new', (req, res) => {\n handlePageRender(req, res);\n });\n // route to send embedable video player (for twitter)\n app.get('/embed/:claimId/:name', ({ params }, res) => {\n const claimId = params.claimId;\n const name = params.name;\n // get and render the content\n res.status(200).render('embed', { layout: 'embed', host, claimId, name });\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/page-routes.js","import * as actions from 'constants/publish_action_types';\nimport { LOGIN } from 'constants/publish_channel_select_states';\nconst { publishing } = require('../../config/siteConfig.js');\n\nconst initialState = {\n disabled : publishing.disabled,\n disabledMessage : publishing.disabledMessage,\n publishInChannel : false,\n selectedChannel : LOGIN,\n showMetadataInputs: false,\n status : {\n status : null,\n message: null,\n },\n error: {\n file : null,\n url : null,\n channel : null,\n publishSubmit: null,\n },\n file : null,\n claim : '',\n metadata: {\n title : '',\n description: '',\n license : '',\n nsfw : false,\n },\n thumbnail: null,\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case actions.FILE_SELECTED:\n return Object.assign({}, initialState, { // note: clears to initial state\n file: action.data,\n });\n case actions.FILE_CLEAR:\n return initialState;\n case actions.METADATA_UPDATE:\n return Object.assign({}, state, {\n metadata: Object.assign({}, state.metadata, {\n [action.data.name]: action.data.value,\n }),\n });\n case actions.CLAIM_UPDATE:\n return Object.assign({}, state, {\n claim: action.data,\n });\n case actions.SET_PUBLISH_IN_CHANNEL:\n return Object.assign({}, state, {\n publishInChannel: action.channel,\n });\n case actions.PUBLISH_STATUS_UPDATE:\n return Object.assign({}, state, {\n status: action.data,\n });\n case actions.ERROR_UPDATE:\n return Object.assign({}, state, {\n error: Object.assign({}, state.error, {\n [action.data.name]: action.data.value,\n }),\n });\n case actions.SELECTED_CHANNEL_UPDATE:\n return Object.assign({}, state, {\n selectedChannel: action.data,\n });\n case actions.TOGGLE_METADATA_INPUTS:\n return Object.assign({}, state, {\n showMetadataInputs: action.data,\n });\n case actions.THUMBNAIL_NEW:\n return Object.assign({}, state, {\n thumbnail: action.data,\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/publish.js","import * as actions from 'constants/channel_action_types';\n\nconst initialState = {\n loggedInChannel: {\n name : null,\n shortId: null,\n longId : null,\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case actions.CHANNEL_UPDATE:\n return Object.assign({}, state, {\n loggedInChannel: action.data,\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/channel.js","import * as actions from 'constants/show_action_types';\nimport { LOCAL_CHECK, ERROR } from 'constants/asset_display_states';\n\nconst initialState = {\n request: {\n error: null,\n type : null,\n id : null,\n },\n requestList : {},\n channelList : {},\n assetList : {},\n displayAsset: {\n error : null,\n status: LOCAL_CHECK,\n },\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n // handle request\n case actions.REQUEST_ERROR:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n error: action.data,\n }),\n });\n case actions.REQUEST_UPDATE:\n return Object.assign({}, state, {\n request: Object.assign({}, state.request, {\n type: action.data.requestType,\n id : action.data.requestId,\n }),\n });\n // store requests\n case actions.REQUEST_LIST_ADD:\n return Object.assign({}, state, {\n requestList: Object.assign({}, state.requestList, {\n [action.data.id]: {\n error: action.data.error,\n key : action.data.key,\n },\n }),\n });\n // asset data\n case actions.ASSET_ADD:\n return Object.assign({}, state, {\n assetList: Object.assign({}, state.assetList, {\n [action.data.id]: {\n error : action.data.error,\n name : action.data.name,\n claimId : action.data.claimId,\n shortId : action.data.shortId,\n claimData: action.data.claimData,\n },\n }),\n });\n // channel data\n case actions.CHANNEL_ADD:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, {\n [action.data.id]: {\n name : action.data.name,\n longId : action.data.longId,\n shortId : action.data.shortId,\n claimsData: action.data.claimsData,\n },\n }),\n });\n case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:\n return Object.assign({}, state, {\n channelList: Object.assign({}, state.channelList, {\n [action.data.channelListId]: Object.assign({}, state.channelList[action.data.channelListId], {\n claimsData: action.data.claimsData,\n }),\n }),\n });\n // display an asset\n case actions.FILE_AVAILABILITY_UPDATE:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n status: action.data,\n }),\n });\n case actions.DISPLAY_ASSET_ERROR:\n return Object.assign({}, state, {\n displayAsset: Object.assign({}, state.displayAsset, {\n error : action.data,\n status: ERROR,\n }),\n });\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/show.js","const siteConfig = require('../../config/siteConfig.js');\n\nconst {\n analytics: {\n googleId: googleAnalyticsId,\n },\n assetDefaults: {\n thumbnail: defaultThumbnail,\n description: defaultDescription,\n },\n details: {\n description,\n host,\n title,\n twitter,\n },\n} = siteConfig;\n\nconst initialState = {\n description,\n googleAnalyticsId,\n host,\n title,\n twitter,\n defaultDescription,\n defaultThumbnail,\n};\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n default:\n return state;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/reducers/site.js","module.exports = require(\"react-ga\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"react-ga\"\n// module id = 151\n// module chunks = 0","module.exports = require(\"cross-fetch/polyfill\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"cross-fetch/polyfill\"\n// module id = 152\n// module chunks = 0","const { sendGAServeEvent } = require('../helpers/googleAnalytics');\nconst { determineResponseType, flipClaimNameAndIdForBackwardsCompatibility, logRequestData, getClaimIdAndServeAsset } = require('../helpers/serveHelpers.js');\nconst lbryUri = require('../helpers/lbryUri.js');\nconst handleShowRender = require('../helpers/handleShowRender.jsx');\nconst SERVE = 'SERVE';\n\nmodule.exports = (app) => {\n // route to serve a specific asset using the channel or claim id\n app.get('/:identifier/:claim', (req, res) => {\n const { headers, ip, originalUrl, params } = req;\n // decide if this is a show request\n let hasFileExtension;\n try {\n ({ hasFileExtension } = lbryUri.parseModifier(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n let responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n let claimName;\n try {\n ({ claimName } = lbryUri.parseClaim(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // parse the identifier\n let isChannel, channelName, channelClaimId, claimId;\n try {\n ({ isChannel, channelName, channelClaimId, claimId } = lbryUri.parseIdentifier(params.identifier));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n if (!isChannel) {\n [claimId, claimName] = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName);\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, channelName, claimId);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res);\n });\n // route to serve the winning asset at a claim or a channel page\n app.get('/:claim', (req, res) => {\n const { headers, ip, originalUrl, params } = req;\n // decide if this is a show request\n let hasFileExtension;\n try {\n ({ hasFileExtension } = lbryUri.parseModifier(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n let responseType = determineResponseType(hasFileExtension, headers);\n if (responseType !== SERVE) {\n return handleShowRender(req, res);\n }\n // handle serve request\n // send google analytics\n sendGAServeEvent(headers, ip, originalUrl);\n // parse the claim\n let claimName;\n try {\n ({claimName} = lbryUri.parseClaim(params.claim));\n } catch (error) {\n return res.status(400).json({success: false, message: error.message});\n }\n // log the request data for debugging\n logRequestData(responseType, claimName, null, null);\n // get the claim Id and then serve the asset\n getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res);\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/asset-routes.js","const logger = require('winston');\nconst { getClaimId, getLocalFileRecord } = require('../controllers/serveController.js');\nconst { handleErrorResponse } = require('./errorHandlers.js');\n\nconst SERVE = 'SERVE';\nconst SHOW = 'SHOW';\nconst NO_FILE = 'NO_FILE';\nconst NO_CHANNEL = 'NO_CHANNEL';\nconst NO_CLAIM = 'NO_CLAIM';\n\nfunction clientAcceptsHtml ({accept}) {\n return accept && accept.match(/text\\/html/);\n};\n\nfunction requestIsFromBrowser (headers) {\n return headers['user-agent'] && headers['user-agent'].match(/Mozilla/);\n};\n\nfunction clientWantsAsset ({accept, range}) {\n const imageIsWanted = accept && accept.match(/image\\/.*/) && !accept.match(/text\\/html/) && !accept.match(/text\\/\\*/);\n const videoIsWanted = accept && range;\n return imageIsWanted || videoIsWanted;\n};\n\nfunction isValidClaimId (claimId) {\n return ((claimId.length === 40) && !/[^A-Za-z0-9]/g.test(claimId));\n};\n\nfunction isValidShortId (claimId) {\n return claimId.length === 1; // it should really evaluate the short url itself\n};\n\nfunction isValidShortIdOrClaimId (input) {\n return (isValidClaimId(input) || isValidShortId(input));\n};\n\nfunction serveAssetToClient (claimId, name, res) {\n return getLocalFileRecord(claimId, name)\n .then(fileRecord => {\n // check that a local record was found\n if (fileRecord === NO_FILE) {\n return res.status(307).redirect(`/api/claim/get/${name}/${claimId}`);\n }\n // serve the file\n const {filePath, fileType} = fileRecord;\n logger.verbose(`serving file: ${filePath}`);\n const sendFileOptions = {\n headers: {\n 'X-Content-Type-Options': 'nosniff',\n 'Content-Type' : fileType || 'image/jpeg',\n },\n };\n res.status(200).sendFile(filePath, sendFileOptions);\n })\n .catch(error => {\n throw error;\n });\n};\n\nmodule.exports = {\n getClaimIdAndServeAsset (channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) {\n // get the claim Id and then serve the asset\n getClaimId(channelName, channelClaimId, claimName, claimId)\n .then(fullClaimId => {\n if (fullClaimId === NO_CLAIM) {\n return res.status(404).json({success: false, message: 'no claim id could be found'});\n } else if (fullClaimId === NO_CHANNEL) {\n return res.status(404).json({success: false, message: 'no channel id could be found'});\n }\n serveAssetToClient(fullClaimId, claimName, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success');\n })\n .catch(error => {\n handleErrorResponse(originalUrl, ip, error, res);\n // postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail');\n });\n },\n determineResponseType (hasFileExtension, headers) {\n let responseType;\n if (hasFileExtension) {\n responseType = SERVE; // assume a serve request if file extension is present\n if (clientAcceptsHtml(headers)) { // if the request comes from a browser, change it to a show request\n responseType = SHOW;\n }\n } else {\n responseType = SHOW;\n if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) { // this is in case someone embeds a show url\n logger.debug('Show request came from browser but wants an image/video. Changing response to serve...');\n responseType = SERVE;\n }\n }\n return responseType;\n },\n flipClaimNameAndIdForBackwardsCompatibility (identifier, name) {\n // this is a patch for backwards compatability with '/name/claim_id' url format\n if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) {\n const tempName = name;\n name = identifier;\n identifier = tempName;\n }\n return [identifier, name];\n },\n logRequestData (responseType, claimName, channelName, claimId) {\n logger.debug('responseType ===', responseType);\n logger.debug('claim name === ', claimName);\n logger.debug('channel name ===', channelName);\n logger.debug('claim id ===', claimId);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/serveHelpers.js","const logger = require('winston');\n\nmodule.exports = {\n REGEXP_INVALID_CLAIM : /[^A-Za-z0-9-]/g,\n REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,\n REGEXP_ADDRESS : /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,\n CHANNEL_CHAR : '@',\n parseIdentifier : function (identifier) {\n logger.debug('parsing identifier:', identifier);\n const componentsRegex = new RegExp(\n '([^:$#/]*)' + // value (stops at the first separator or end)\n '([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, value, modifierSeperator, modifier] = componentsRegex\n .exec(identifier)\n .map(match => match || null);\n logger.debug(`${proto}, ${value}, ${modifierSeperator}, ${modifier}`);\n\n // Validate and process name\n if (!value) {\n throw new Error(`Check your url. No channel name provided before \"${modifierSeperator}\"`);\n }\n const isChannel = value.startsWith(module.exports.CHANNEL_CHAR);\n const channelName = isChannel ? value : null;\n let claimId;\n if (isChannel) {\n if (!channelName) {\n throw new Error('No channel name after @.');\n }\n const nameBadChars = (channelName).match(module.exports.REGEXP_INVALID_CHANNEL);\n if (nameBadChars) {\n throw new Error(`Invalid characters in channel name: ${nameBadChars.join(', ')}.`);\n }\n } else {\n claimId = value;\n }\n\n // Validate and process modifier\n let channelClaimId;\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`No modifier provided after separator \"${modifierSeperator}\"`);\n }\n\n if (modifierSeperator === ':') {\n channelClaimId = modifier;\n } else {\n throw new Error(`The \"${modifierSeperator}\" modifier is not currently supported`);\n }\n }\n return {\n isChannel,\n channelName,\n channelClaimId,\n claimId,\n };\n },\n parseClaim: function (claim) {\n logger.debug('parsing name:', claim);\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, claimName, modifierSeperator, modifier] = componentsRegex\n .exec(claim)\n .map(match => match || null);\n logger.debug(`${proto}, ${claimName}, ${modifierSeperator}, ${modifier}`);\n\n // Validate and process name\n if (!claimName) {\n throw new Error('No claim name provided before .');\n }\n const nameBadChars = (claimName).match(module.exports.REGEXP_INVALID_CLAIM);\n if (nameBadChars) {\n throw new Error(`Invalid characters in claim name: ${nameBadChars.join(', ')}.`);\n }\n // Validate and process modifier\n if (modifierSeperator) {\n if (!modifier) {\n throw new Error(`No file extension provided after separator ${modifierSeperator}.`);\n }\n if (modifierSeperator !== '.') {\n throw new Error(`The ${modifierSeperator} modifier is not supported in the claim name`);\n }\n }\n // return results\n return {\n claimName,\n };\n },\n parseModifier: function (claim) {\n logger.debug('parsing modifier:', claim);\n const componentsRegex = new RegExp(\n '([^:$#/.]*)' + // name (stops at the first modifier)\n '([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)\n );\n const [proto, claimName, modifierSeperator, modifier] = componentsRegex\n .exec(claim)\n .map(match => match || null);\n logger.debug(`${proto}, ${claimName}, ${modifierSeperator}, ${modifier}`);\n // Validate and process modifier\n let hasFileExtension = false;\n if (modifierSeperator) {\n hasFileExtension = true;\n }\n return {\n hasFileExtension,\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/lbryUri.js","import React from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { createStore, applyMiddleware } from 'redux';\nimport Reducer from '../../client/reducers/index';\nimport { Provider } from 'react-redux';\nimport { StaticRouter } from 'react-router-dom';\nimport GAListener from '../../client/components/GAListener/index';\nimport App from '../../client/app';\nimport renderFullPage from './renderFullPage';\nimport createSagaMiddleware from 'redux-saga';\nimport { call } from 'redux-saga/effects';\nimport { handleShowPageUri } from '../../client/sagas/show_uri';\nimport { onHandleShowPageUri } from '../../client/actions/show';\n\nimport Helmet from 'react-helmet';\n\nconst returnSagaWithParams = (saga, params) => {\n return function * () {\n yield call(saga, params);\n };\n};\n\nmodule.exports = (req, res) => {\n let context = {};\n\n // create and apply middleware\n const sagaMiddleware = createSagaMiddleware();\n const middleware = applyMiddleware(sagaMiddleware);\n\n // create a new Redux store instance\n const store = createStore(Reducer, middleware);\n\n // create saga\n const action = onHandleShowPageUri(req.params);\n const saga = returnSagaWithParams(handleShowPageUri, action);\n\n // run the saga middleware\n sagaMiddleware\n .run(saga)\n .done\n .then(() => {\n // render component to a string\n const html = renderToString(\n <Provider store={store}>\n <StaticRouter location={req.url} context={context}>\n <GAListener>\n <App />\n </GAListener>\n </StaticRouter>\n </Provider>\n );\n\n // get head tags from helmet\n const helmet = Helmet.renderStatic();\n\n // check for a redirect\n if (context.url) {\n return res.redirect(301, context.url);\n }\n\n // get the initial state from our Redux store\n const preloadedState = store.getState();\n\n // send the rendered page back to the client\n res.send(renderFullPage(helmet, html, preloadedState));\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/handleShowRender.jsx","module.exports = require(\"redux-saga\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"redux-saga\"\n// module id = 157\n// module chunks = 0","import { call, put, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { onRequestError, onNewChannelRequest, onNewAssetRequest } from 'actions/show';\nimport { newAssetRequest } from 'sagas/show_asset';\nimport { newChannelRequest } from 'sagas/show_channel';\nimport lbryUri from 'utils/lbryUri';\n\nfunction * parseAndUpdateIdentifierAndClaim (modifier, claim) {\n // this is a request for an asset\n // claim will be an asset claim\n // the identifier could be a channel or a claim id\n let isChannel, channelName, channelClaimId, claimId, claimName, extension;\n try {\n ({ isChannel, channelName, channelClaimId, claimId } = lbryUri.parseIdentifier(modifier));\n ({ claimName, extension } = lbryUri.parseClaim(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // trigger an new action to update the store\n if (isChannel) {\n return yield call(newAssetRequest, onNewAssetRequest(claimName, null, channelName, channelClaimId, extension));\n };\n yield call(newAssetRequest, onNewAssetRequest(claimName, claimId, null, null, extension));\n}\nfunction * parseAndUpdateClaimOnly (claim) {\n // this could be a request for an asset or a channel page\n // claim could be an asset claim or a channel claim\n let isChannel, channelName, channelClaimId;\n try {\n ({ isChannel, channelName, channelClaimId } = lbryUri.parseIdentifier(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // trigger an new action to update the store\n // return early if this request is for a channel\n if (isChannel) {\n return yield call(newChannelRequest, onNewChannelRequest(channelName, channelClaimId));\n }\n // if not for a channel, parse the claim request\n let claimName, extension;\n try {\n ({claimName, extension} = lbryUri.parseClaim(claim));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n yield call(newAssetRequest, onNewAssetRequest(claimName, null, null, null, extension));\n}\n\nexport function * handleShowPageUri (action) {\n const { identifier, claim } = action.data;\n if (identifier) {\n return yield call(parseAndUpdateIdentifierAndClaim, identifier, claim);\n }\n yield call(parseAndUpdateClaimOnly, claim);\n};\n\nexport function * watchHandleShowPageUri () {\n yield takeLatest(actions.HANDLE_SHOW_URI, handleShowPageUri);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_uri.js","import { call, put, select, takeLatest } from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { addRequestToRequestList, onRequestError, onRequestUpdate, addAssetToAssetList } from 'actions/show';\nimport { getLongClaimId, getShortId, getClaimData } from 'api/assetApi';\nimport { selectShowState } from 'selectors/show';\nimport { selectSiteHost } from 'selectors/site';\n\nexport function * newAssetRequest (action) {\n const { requestType, requestId, name, modifier } = action.data;\n // put an action to update the request in redux\n yield put(onRequestUpdate(requestType, requestId));\n // is this an existing request?\n // If this uri is in the request list, it's already been fetched\n const state = yield select(selectShowState);\n const host = yield select(selectSiteHost);\n if (state.requestList[requestId]) {\n return null;\n }\n // get long id && add request to request list\n let longId;\n try {\n ({data: longId} = yield call(getLongClaimId, host, name, modifier));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n const assetKey = `a#${name}#${longId}`;\n yield put(addRequestToRequestList(requestId, null, assetKey));\n // is this an existing asset?\n // If this asset is in the asset list, it's already been fetched\n if (state.assetList[assetKey]) {\n return null;\n }\n // get short Id\n let shortId;\n try {\n ({data: shortId} = yield call(getShortId, host, name, longId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // get asset claim data\n let claimData;\n try {\n ({data: claimData} = yield call(getClaimData, host, name, longId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // add asset to asset list\n yield put(addAssetToAssetList(assetKey, null, name, longId, shortId, claimData));\n // clear any errors in request error\n yield put(onRequestError(null));\n};\n\nexport function * watchNewAssetRequest () {\n yield takeLatest(actions.ASSET_REQUEST_NEW, newAssetRequest);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_asset.js","import Request from 'utils/request';\n\nexport function getLongClaimId (host, name, modifier) {\n let body = {};\n // create request params\n if (modifier) {\n if (modifier.id) {\n body['claimId'] = modifier.id;\n } else {\n body['channelName'] = modifier.channel.name;\n body['channelClaimId'] = modifier.channel.id;\n }\n }\n body['claimName'] = name;\n const params = {\n method : 'POST',\n headers: { 'Content-Type': 'application/json' },\n body : JSON.stringify(body),\n };\n // create url\n const url = `${host}/api/claim/long-id`;\n // return the request promise\n return Request(url, params);\n};\n\nexport function getShortId (host, name, claimId) {\n const url = `${host}/api/claim/short-id/${claimId}/${name}`;\n return Request(url);\n};\n\nexport function getClaimData (host, name, claimId) {\n const url = `${host}/api/claim/data/${name}/${claimId}`;\n return Request(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/assetApi.js","import {call, put, select, takeLatest} from 'redux-saga/effects';\nimport * as actions from 'constants/show_action_types';\nimport { addNewChannelToChannelList, addRequestToRequestList, onRequestError, onRequestUpdate, updateChannelClaims } from 'actions/show';\nimport { getChannelClaims, getChannelData } from 'api/channelApi';\nimport { selectShowState } from 'selectors/show';\nimport { selectSiteHost } from 'selectors/site';\n\nexport function * newChannelRequest (action) {\n const { requestType, requestId, channelName, channelId } = action.data;\n // put an action to update the request in redux\n yield put(onRequestUpdate(requestType, requestId));\n // is this an existing request?\n // If this uri is in the request list, it's already been fetched\n const state = yield select(selectShowState);\n const host = yield select(selectSiteHost);\n if (state.requestList[requestId]) {\n return null;\n }\n // get channel long id\n let longId, shortId;\n try {\n ({ data: {longChannelClaimId: longId, shortChannelClaimId: shortId} } = yield call(getChannelData, host, channelName, channelId));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // store the request in the channel requests list\n const channelKey = `c#${channelName}#${longId}`;\n yield put(addRequestToRequestList(requestId, null, channelKey));\n // is this an existing channel?\n // If this channel is in the channel list, it's already been fetched\n if (state.channelList[channelKey]) {\n return null;\n }\n // get channel claims data\n let claimsData;\n try {\n ({ data: claimsData } = yield call(getChannelClaims, host, longId, channelName, 1));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n // store the channel data in the channel list\n yield put(addNewChannelToChannelList(channelKey, channelName, shortId, longId, claimsData));\n // clear any request errors\n yield put(onRequestError(null));\n}\n\nexport function * watchNewChannelRequest () {\n yield takeLatest(actions.CHANNEL_REQUEST_NEW, newChannelRequest);\n};\n\nfunction * getNewClaimsAndUpdateChannel (action) {\n const { channelKey, name, longId, page } = action.data;\n const host = yield select(selectSiteHost);\n let claimsData;\n try {\n ({ data: claimsData } = yield call(getChannelClaims, host, longId, name, page));\n } catch (error) {\n return yield put(onRequestError(error.message));\n }\n yield put(updateChannelClaims(channelKey, claimsData));\n}\n\nexport function * watchUpdateChannelClaims () {\n yield takeLatest(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./client/sagas/show_channel.js","import Request from 'utils/request';\n\nexport function getChannelData (host, id, name) {\n if (!id) id = 'none';\n const url = `${host}/api/channel/data/${name}/${id}`;\n return Request(url);\n};\n\nexport function getChannelClaims (host, longId, name, page) {\n if (!page) page = 1;\n const url = `${host}/api/channel/claims/${name}/${longId}/${page}`;\n return Request(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./client/api/channelApi.js","const handlePageRender = require('../helpers/handlePageRender.jsx');\n\nmodule.exports = app => {\n // a catch-all route if someone visits a page that does not exist\n app.use('*', (req, res) => {\n // send response\n handlePageRender(req, res);\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/routes/fallback-routes.js","const { logLevel } = require('../../config/loggerConfig');\n\nmodule.exports = (winston) => {\n // configure\n winston.configure({\n transports: [\n new (winston.transports.Console)({\n level : logLevel,\n timestamp : false,\n colorize : true,\n prettyPrint : true,\n handleExceptions : true,\n humanReadableUnhandledException: true,\n }),\n ],\n });\n // test all the log levels\n winston.error('Level 0');\n winston.warn('Level 1');\n winston.info('Level 2');\n winston.verbose('Level 3');\n winston.debug('Level 4');\n winston.silly('Level 5');\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/configureLogger.js","const loggerConfig = {\n logLevel: 'debug', // options: silly, debug, verbose, info\n};\n\nmodule.exports = loggerConfig;\n\n\n\n// WEBPACK FOOTER //\n// ./config/loggerConfig.js","const winstonSlackWebHook = require('winston-slack-webhook').SlackWebHook;\nconst slackConfig = require('../../config/slackConfig.js');\n\nmodule.exports = (winston) => {\n const {slackWebHook, slackErrorChannel, slackInfoChannel} = slackConfig;\n if (slackWebHook) {\n // add a transport for errors to slack\n if (slackErrorChannel) {\n winston.add(winstonSlackWebHook, {\n name : 'slack-errors-transport',\n level : 'warn',\n webhookUrl: slackWebHook,\n channel : slackErrorChannel,\n username : 'spee.ch',\n iconEmoji : ':face_with_head_bandage:',\n });\n };\n if (slackInfoChannel) {\n winston.add(winstonSlackWebHook, {\n name : 'slack-info-transport',\n level : 'info',\n webhookUrl: slackWebHook,\n channel : slackInfoChannel,\n username : 'spee.ch',\n iconEmoji : ':nerd_face:',\n });\n };\n // send test message\n winston.error('Slack \"error\" logging is online.');\n winston.info('Slack \"info\" logging is online.');\n } else {\n winston.warn('Slack logging is not enabled because no slackWebHook config var provided.');\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./server/helpers/configureSlack.js","module.exports = require(\"winston-slack-webhook\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"winston-slack-webhook\"\n// module id = 167\n// module chunks = 0","var map = {\n\t\"./\": 50,\n\t\"./ActiveStatusBar\": 24,\n\t\"./ActiveStatusBar/\": 24,\n\t\"./ActiveStatusBar/index\": 24,\n\t\"./ActiveStatusBar/index.jsx\": 24,\n\t\"./AssetPreview\": 34,\n\t\"./AssetPreview/\": 34,\n\t\"./AssetPreview/index\": 34,\n\t\"./AssetPreview/index.js\": 34,\n\t\"./AssetPreview/view\": 78,\n\t\"./AssetPreview/view.jsx\": 78,\n\t\"./ExpandingTextArea\": 36,\n\t\"./ExpandingTextArea/\": 36,\n\t\"./ExpandingTextArea/index\": 36,\n\t\"./ExpandingTextArea/index.jsx\": 36,\n\t\"./GAListener\": 13,\n\t\"./GAListener/\": 13,\n\t\"./GAListener/index\": 13,\n\t\"./GAListener/index.jsx\": 13,\n\t\"./InactiveStatusBar\": 25,\n\t\"./InactiveStatusBar/\": 25,\n\t\"./InactiveStatusBar/index\": 25,\n\t\"./InactiveStatusBar/index.jsx\": 25,\n\t\"./Logo\": 21,\n\t\"./Logo/\": 21,\n\t\"./Logo/index\": 21,\n\t\"./Logo/index.jsx\": 21,\n\t\"./NavBarChannelOptionsDropdown\": 22,\n\t\"./NavBarChannelOptionsDropdown/\": 22,\n\t\"./NavBarChannelOptionsDropdown/index\": 22,\n\t\"./NavBarChannelOptionsDropdown/index.jsx\": 22,\n\t\"./ProgressBar\": 10,\n\t\"./ProgressBar/\": 10,\n\t\"./ProgressBar/index\": 10,\n\t\"./ProgressBar/index.jsx\": 10,\n\t\"./PublishPreview\": 37,\n\t\"./PublishPreview/\": 37,\n\t\"./PublishPreview/index\": 37,\n\t\"./PublishPreview/index.jsx\": 37,\n\t\"./PublishUrlMiddleDisplay\": 38,\n\t\"./PublishUrlMiddleDisplay/\": 38,\n\t\"./PublishUrlMiddleDisplay/index\": 38,\n\t\"./PublishUrlMiddleDisplay/index.jsx\": 38,\n\t\"./SEO\": 7,\n\t\"./SEO/\": 7,\n\t\"./SEO/index\": 7,\n\t\"./SEO/index.js\": 7,\n\t\"./SEO/view\": 66,\n\t\"./SEO/view.jsx\": 66,\n\t\"./index\": 50,\n\t\"./index.js\": 50\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 168;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/components ^\\.\\/.*$\n// module id = 168\n// module chunks = 0","var map = {\n\t\"./\": 52,\n\t\"./AssetDisplay\": 17,\n\t\"./AssetDisplay/\": 17,\n\t\"./AssetDisplay/index\": 17,\n\t\"./AssetDisplay/index.js\": 17,\n\t\"./AssetDisplay/view\": 72,\n\t\"./AssetDisplay/view.jsx\": 72,\n\t\"./AssetInfo\": 31,\n\t\"./AssetInfo/\": 31,\n\t\"./AssetInfo/index\": 31,\n\t\"./AssetInfo/index.js\": 31,\n\t\"./AssetInfo/view\": 75,\n\t\"./AssetInfo/view.jsx\": 75,\n\t\"./AssetTitle\": 30,\n\t\"./AssetTitle/\": 30,\n\t\"./AssetTitle/index\": 30,\n\t\"./AssetTitle/index.js\": 30,\n\t\"./AssetTitle/view\": 74,\n\t\"./AssetTitle/view.jsx\": 74,\n\t\"./ChannelClaimsDisplay\": 33,\n\t\"./ChannelClaimsDisplay/\": 33,\n\t\"./ChannelClaimsDisplay/index\": 33,\n\t\"./ChannelClaimsDisplay/index.js\": 33,\n\t\"./ChannelClaimsDisplay/view\": 77,\n\t\"./ChannelClaimsDisplay/view.jsx\": 77,\n\t\"./ChannelCreateForm\": 16,\n\t\"./ChannelCreateForm/\": 16,\n\t\"./ChannelCreateForm/index\": 16,\n\t\"./ChannelCreateForm/index.js\": 16,\n\t\"./ChannelCreateForm/view\": 69,\n\t\"./ChannelCreateForm/view.jsx\": 69,\n\t\"./ChannelLoginForm\": 15,\n\t\"./ChannelLoginForm/\": 15,\n\t\"./ChannelLoginForm/index\": 15,\n\t\"./ChannelLoginForm/index.js\": 15,\n\t\"./ChannelLoginForm/view\": 68,\n\t\"./ChannelLoginForm/view.jsx\": 68,\n\t\"./ChannelSelect\": 39,\n\t\"./ChannelSelect/\": 39,\n\t\"./ChannelSelect/index\": 39,\n\t\"./ChannelSelect/index.js\": 39,\n\t\"./ChannelSelect/view\": 81,\n\t\"./ChannelSelect/view.jsx\": 81,\n\t\"./Dropzone\": 18,\n\t\"./Dropzone/\": 18,\n\t\"./Dropzone/index\": 18,\n\t\"./Dropzone/index.js\": 18,\n\t\"./Dropzone/view\": 82,\n\t\"./Dropzone/view.jsx\": 82,\n\t\"./FourOhFourPage\": 35,\n\t\"./FourOhFourPage/\": 35,\n\t\"./FourOhFourPage/index\": 35,\n\t\"./FourOhFourPage/index.jsx\": 35,\n\t\"./FourOhFourPage/view\": 79,\n\t\"./FourOhFourPage/view.jsx\": 79,\n\t\"./NavBar\": 5,\n\t\"./NavBar/\": 5,\n\t\"./NavBar/index\": 5,\n\t\"./NavBar/index.js\": 5,\n\t\"./NavBar/view\": 65,\n\t\"./NavBar/view.jsx\": 65,\n\t\"./PublishDetails\": 40,\n\t\"./PublishDetails/\": 40,\n\t\"./PublishDetails/index\": 40,\n\t\"./PublishDetails/index.js\": 40,\n\t\"./PublishDetails/view\": 83,\n\t\"./PublishDetails/view.jsx\": 83,\n\t\"./PublishDisabledMessage\": 45,\n\t\"./PublishDisabledMessage/\": 45,\n\t\"./PublishDisabledMessage/index\": 45,\n\t\"./PublishDisabledMessage/index.js\": 45,\n\t\"./PublishDisabledMessage/view\": 88,\n\t\"./PublishDisabledMessage/view.jsx\": 88,\n\t\"./PublishMetadataInputs\": 44,\n\t\"./PublishMetadataInputs/\": 44,\n\t\"./PublishMetadataInputs/index\": 44,\n\t\"./PublishMetadataInputs/index.js\": 44,\n\t\"./PublishMetadataInputs/view\": 87,\n\t\"./PublishMetadataInputs/view.jsx\": 87,\n\t\"./PublishStatus\": 46,\n\t\"./PublishStatus/\": 46,\n\t\"./PublishStatus/index\": 46,\n\t\"./PublishStatus/index.js\": 46,\n\t\"./PublishStatus/view\": 89,\n\t\"./PublishStatus/view.jsx\": 89,\n\t\"./PublishThumbnailInput\": 43,\n\t\"./PublishThumbnailInput/\": 43,\n\t\"./PublishThumbnailInput/index\": 43,\n\t\"./PublishThumbnailInput/index.js\": 43,\n\t\"./PublishThumbnailInput/view\": 86,\n\t\"./PublishThumbnailInput/view.jsx\": 86,\n\t\"./PublishTitleInput\": 41,\n\t\"./PublishTitleInput/\": 41,\n\t\"./PublishTitleInput/index\": 41,\n\t\"./PublishTitleInput/index.js\": 41,\n\t\"./PublishTitleInput/view\": 84,\n\t\"./PublishTitleInput/view.jsx\": 84,\n\t\"./PublishTool\": 47,\n\t\"./PublishTool/\": 47,\n\t\"./PublishTool/index\": 47,\n\t\"./PublishTool/index.js\": 47,\n\t\"./PublishTool/view\": 90,\n\t\"./PublishTool/view.jsx\": 90,\n\t\"./PublishUrlInput\": 42,\n\t\"./PublishUrlInput/\": 42,\n\t\"./PublishUrlInput/index\": 42,\n\t\"./PublishUrlInput/index.js\": 42,\n\t\"./PublishUrlInput/view\": 85,\n\t\"./PublishUrlInput/view.jsx\": 85,\n\t\"./ShowAssetDetails\": 29,\n\t\"./ShowAssetDetails/\": 29,\n\t\"./ShowAssetDetails/index\": 29,\n\t\"./ShowAssetDetails/index.js\": 29,\n\t\"./ShowAssetDetails/view\": 73,\n\t\"./ShowAssetDetails/view.jsx\": 73,\n\t\"./ShowAssetLite\": 27,\n\t\"./ShowAssetLite/\": 27,\n\t\"./ShowAssetLite/index\": 27,\n\t\"./ShowAssetLite/index.js\": 27,\n\t\"./ShowAssetLite/view\": 71,\n\t\"./ShowAssetLite/view.jsx\": 71,\n\t\"./ShowChannel\": 32,\n\t\"./ShowChannel/\": 32,\n\t\"./ShowChannel/index\": 32,\n\t\"./ShowChannel/index.js\": 32,\n\t\"./ShowChannel/view\": 76,\n\t\"./ShowChannel/view.jsx\": 76,\n\t\"./index\": 52,\n\t\"./index.js\": 52\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 169;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/containers ^\\.\\/.*$\n// module id = 169\n// module chunks = 0","export const LOAD_START = 'LOAD_START';\nexport const LOADING = 'LOADING';\nexport const PUBLISHING = 'PUBLISHING';\nexport const SUCCESS = 'SUCCESS';\nexport const FAILED = 'FAILED';\n\n\n\n// WEBPACK FOOTER //\n// ./client/constants/publish_claim_states.js","var map = {\n\t\"./\": 53,\n\t\"./AboutPage\": 20,\n\t\"./AboutPage/\": 20,\n\t\"./AboutPage/index\": 20,\n\t\"./AboutPage/index.jsx\": 20,\n\t\"./ErrorPage\": 12,\n\t\"./ErrorPage/\": 12,\n\t\"./ErrorPage/index\": 12,\n\t\"./ErrorPage/index.jsx\": 12,\n\t\"./HomePage\": 54,\n\t\"./HomePage/\": 54,\n\t\"./HomePage/index\": 54,\n\t\"./HomePage/index.jsx\": 54,\n\t\"./LoginPage\": 23,\n\t\"./LoginPage/\": 23,\n\t\"./LoginPage/index\": 23,\n\t\"./LoginPage/index.js\": 23,\n\t\"./LoginPage/view\": 67,\n\t\"./LoginPage/view.jsx\": 67,\n\t\"./ShowPage\": 26,\n\t\"./ShowPage/\": 26,\n\t\"./ShowPage/index\": 26,\n\t\"./ShowPage/index.js\": 26,\n\t\"./ShowPage/view\": 70,\n\t\"./ShowPage/view.jsx\": 70,\n\t\"./index\": 53,\n\t\"./index.js\": 53\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 171;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./client/pages ^\\.\\/.*$\n// module id = 171\n// module chunks = 0"],"sourceRoot":""} |