11928 lines
956 KiB
JavaScript
11928 lines
956 KiB
JavaScript
|
module.exports =
|
||
|
/******/ (function(modules) { // webpackBootstrap
|
||
|
/******/ // The module cache
|
||
|
/******/ var installedModules = {};
|
||
|
/******/
|
||
|
/******/ // The require function
|
||
|
/******/ function __webpack_require__(moduleId) {
|
||
|
/******/
|
||
|
/******/ // Check if module is in cache
|
||
|
/******/ if(installedModules[moduleId]) {
|
||
|
/******/ return installedModules[moduleId].exports;
|
||
|
/******/ }
|
||
|
/******/ // Create a new module (and put it into the cache)
|
||
|
/******/ var module = installedModules[moduleId] = {
|
||
|
/******/ i: moduleId,
|
||
|
/******/ l: false,
|
||
|
/******/ exports: {}
|
||
|
/******/ };
|
||
|
/******/
|
||
|
/******/ // Execute the module function
|
||
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||
|
/******/
|
||
|
/******/ // Flag the module as loaded
|
||
|
/******/ module.l = true;
|
||
|
/******/
|
||
|
/******/ // Return the exports of the module
|
||
|
/******/ return module.exports;
|
||
|
/******/ }
|
||
|
/******/
|
||
|
/******/
|
||
|
/******/ // expose the modules object (__webpack_modules__)
|
||
|
/******/ __webpack_require__.m = modules;
|
||
|
/******/
|
||
|
/******/ // expose the module cache
|
||
|
/******/ __webpack_require__.c = installedModules;
|
||
|
/******/
|
||
|
/******/ // define getter function for harmony exports
|
||
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
||
|
/******/ Object.defineProperty(exports, name, {
|
||
|
/******/ configurable: false,
|
||
|
/******/ enumerable: true,
|
||
|
/******/ get: getter
|
||
|
/******/ });
|
||
|
/******/ }
|
||
|
/******/ };
|
||
|
/******/
|
||
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||
|
/******/ __webpack_require__.n = function(module) {
|
||
|
/******/ var getter = module && module.__esModule ?
|
||
|
/******/ function getDefault() { return module['default']; } :
|
||
|
/******/ function getModuleExports() { return module; };
|
||
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
||
|
/******/ return getter;
|
||
|
/******/ };
|
||
|
/******/
|
||
|
/******/ // Object.prototype.hasOwnProperty.call
|
||
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||
|
/******/
|
||
|
/******/ // __webpack_public_path__
|
||
|
/******/ __webpack_require__.p = "exports/";
|
||
|
/******/
|
||
|
/******/ // Load entry module and return exports
|
||
|
/******/ return __webpack_require__(__webpack_require__.s = 109);
|
||
|
/******/ })
|
||
|
/************************************************************************/
|
||
|
/******/ ([
|
||
|
/* 0 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("react");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 1 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("react-redux");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 2 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("winston");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 3 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _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"); } }; }();
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
module.exports = {
|
||
|
handleErrorResponse: function handleErrorResponse(originalUrl, ip, error, res) {
|
||
|
logger.error('Error on ' + originalUrl, module.exports.useObjectPropertiesIfNoKeys(error));
|
||
|
|
||
|
var _module$exports$retur = module.exports.returnErrorMessageAndStatus(error),
|
||
|
_module$exports$retur2 = _slicedToArray(_module$exports$retur, 2),
|
||
|
status = _module$exports$retur2[0],
|
||
|
message = _module$exports$retur2[1];
|
||
|
|
||
|
res.status(status).json(module.exports.createErrorResponsePayload(status, message));
|
||
|
},
|
||
|
returnErrorMessageAndStatus: function returnErrorMessageAndStatus(error) {
|
||
|
var status = void 0,
|
||
|
message = void 0;
|
||
|
// check for daemon being turned off
|
||
|
if (error.code === 'ECONNREFUSED') {
|
||
|
status = 503;
|
||
|
message = 'Connection refused. The daemon may not be running.';
|
||
|
// fallback for everything else
|
||
|
} else {
|
||
|
status = 400;
|
||
|
if (error.message) {
|
||
|
message = error.message;
|
||
|
} else {
|
||
|
message = error;
|
||
|
};
|
||
|
};
|
||
|
return [status, message];
|
||
|
},
|
||
|
useObjectPropertiesIfNoKeys: function useObjectPropertiesIfNoKeys(err) {
|
||
|
if (Object.keys(err).length === 0) {
|
||
|
var newErrorObject = {};
|
||
|
Object.getOwnPropertyNames(err).forEach(function (key) {
|
||
|
newErrorObject[key] = err[key];
|
||
|
});
|
||
|
return newErrorObject;
|
||
|
}
|
||
|
return err;
|
||
|
},
|
||
|
createErrorResponsePayload: function createErrorResponsePayload(status, message) {
|
||
|
return {
|
||
|
status: status,
|
||
|
success: false,
|
||
|
message: message
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 4 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
function SiteConfig() {
|
||
|
var _this = this;
|
||
|
|
||
|
this.analytics = {
|
||
|
googleId: 'default'
|
||
|
};
|
||
|
this.assetDefaults = {
|
||
|
description: 'An asset published on Spee.ch',
|
||
|
thumbnail: 'https://spee.ch/assets/img/video_thumb_default.png',
|
||
|
title: 'Spee.ch'
|
||
|
};
|
||
|
this.auth = {
|
||
|
sessionKey: 'default'
|
||
|
};
|
||
|
this.customComponents = {
|
||
|
components: {},
|
||
|
containers: {},
|
||
|
pages: {}
|
||
|
};
|
||
|
this.details = {
|
||
|
description: 'Open-source, decentralized image and video sharing.',
|
||
|
host: 'default',
|
||
|
port: 3000,
|
||
|
title: 'Spee.ch',
|
||
|
twitter: '@spee_ch'
|
||
|
};
|
||
|
this.publishing = {
|
||
|
additionalClaimAddresses: [],
|
||
|
disabled: false,
|
||
|
disabledMessage: 'Please check back soon.',
|
||
|
primaryClaimAddress: 'default',
|
||
|
thumbnailChannel: 'default',
|
||
|
thumbnailChannelId: 'default',
|
||
|
uploadDirectory: '/home/lbry/Uploads'
|
||
|
};
|
||
|
this.routes = {};
|
||
|
this.update = function (config) {
|
||
|
if (!config) {
|
||
|
return console.log('No site config received.');
|
||
|
}
|
||
|
var analytics = config.analytics,
|
||
|
assetDefaults = config.assetDefaults,
|
||
|
auth = config.auth,
|
||
|
customComponents = config.customComponents,
|
||
|
details = config.details,
|
||
|
publishing = config.publishing,
|
||
|
routes = config.routes;
|
||
|
|
||
|
console.log('Configuring site details...');
|
||
|
_this.analytics = analytics;
|
||
|
_this.assetDefaults = assetDefaults;
|
||
|
_this.auth = auth;
|
||
|
_this.details = details;
|
||
|
_this.publishing = publishing;
|
||
|
_this.customComponents = customComponents;
|
||
|
_this.routes = routes;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
module.exports = new SiteConfig();
|
||
|
|
||
|
/***/ }),
|
||
|
/* 5 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var Certificate = __webpack_require__(127);
|
||
|
var Channel = __webpack_require__(128);
|
||
|
var Claim = __webpack_require__(129);
|
||
|
var File = __webpack_require__(130);
|
||
|
var Request = __webpack_require__(131);
|
||
|
var User = __webpack_require__(132);
|
||
|
|
||
|
var Sequelize = __webpack_require__(93);
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
var _require = __webpack_require__(90),
|
||
|
database = _require.database,
|
||
|
username = _require.username,
|
||
|
password = _require.password;
|
||
|
|
||
|
// set sequelize options
|
||
|
|
||
|
|
||
|
var sequelize = new Sequelize(database, username, password, {
|
||
|
host: 'localhost',
|
||
|
dialect: 'mysql',
|
||
|
dialectOptions: { decimalNumbers: true },
|
||
|
logging: false,
|
||
|
pool: {
|
||
|
max: 5,
|
||
|
min: 0,
|
||
|
idle: 10000,
|
||
|
acquire: 10000
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// establish mysql connection
|
||
|
sequelize.authenticate().then(function () {
|
||
|
logger.info('Sequelize has established mysql connection successfully.');
|
||
|
}).catch(function (err) {
|
||
|
logger.error('Sequelize was unable to connect to the database:', err);
|
||
|
});
|
||
|
|
||
|
// manually add each model to the db object (note: make this dynamic)
|
||
|
var db = {};
|
||
|
db['Certificate'] = sequelize.import('Certificate', Certificate);
|
||
|
db['Channel'] = sequelize.import('Channel', Channel);
|
||
|
db['Claim'] = sequelize.import('Claim', Claim);
|
||
|
db['File'] = sequelize.import('File', File);
|
||
|
db['Request'] = sequelize.import('Request', Request);
|
||
|
db['User'] = sequelize.import('User', User);
|
||
|
|
||
|
// run model.association for each model in the db object that has an association
|
||
|
logger.info('associating db models...');
|
||
|
Object.keys(db).forEach(function (modelName) {
|
||
|
if (db[modelName].associate) {
|
||
|
logger.info('Associating model:', modelName);
|
||
|
db[modelName].associate(db);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// add sequelize/Sequelize to db
|
||
|
db.sequelize = sequelize;
|
||
|
db.Sequelize = Sequelize;
|
||
|
// add an 'upsert' method to the db object
|
||
|
db.upsert = function (Model, values, condition, tableName) {
|
||
|
return Model.findOne({
|
||
|
where: condition
|
||
|
}).then(function (obj) {
|
||
|
if (obj) {
|
||
|
// update
|
||
|
logger.debug('updating record in db.' + tableName);
|
||
|
return obj.update(values);
|
||
|
} else {
|
||
|
// insert
|
||
|
logger.debug('creating record in db.' + tableName);
|
||
|
return Model.create(values);
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
logger.error(tableName + '.upsert error', error);
|
||
|
throw error;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = db;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 6 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("react-router-dom");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 7 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _channel = __webpack_require__(65);
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
var _view = __webpack_require__(66);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var channel = _ref.channel,
|
||
|
site = _ref.site;
|
||
|
|
||
|
return {
|
||
|
channelName: channel.loggedInChannel.name,
|
||
|
channelShortId: channel.loggedInChannel.shortId,
|
||
|
channelLongId: channel.loggedInChannel.longId,
|
||
|
siteDescription: site.description
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
|
||
|
return {
|
||
|
onChannelLogin: function onChannelLogin(name, shortId, longId) {
|
||
|
dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));
|
||
|
dispatch((0, _publish.updateSelectedChannel)(name));
|
||
|
},
|
||
|
onChannelLogout: function onChannelLogout() {
|
||
|
dispatch((0, _channel.updateLoggedInChannel)(null, null, null));
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 8 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.selectFile = selectFile;
|
||
|
exports.clearFile = clearFile;
|
||
|
exports.updateMetadata = updateMetadata;
|
||
|
exports.updateClaim = updateClaim;
|
||
|
exports.setPublishInChannel = setPublishInChannel;
|
||
|
exports.updatePublishStatus = updatePublishStatus;
|
||
|
exports.updateError = updateError;
|
||
|
exports.updateSelectedChannel = updateSelectedChannel;
|
||
|
exports.toggleMetadataInputs = toggleMetadataInputs;
|
||
|
exports.onNewThumbnail = onNewThumbnail;
|
||
|
exports.startPublish = startPublish;
|
||
|
|
||
|
var _publish_action_types = __webpack_require__(98);
|
||
|
|
||
|
var actions = _interopRequireWildcard(_publish_action_types);
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
// export action creators
|
||
|
function selectFile(file) {
|
||
|
return {
|
||
|
type: actions.FILE_SELECTED,
|
||
|
data: file
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function clearFile() {
|
||
|
return {
|
||
|
type: actions.FILE_CLEAR
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function updateMetadata(name, value) {
|
||
|
return {
|
||
|
type: actions.METADATA_UPDATE,
|
||
|
data: {
|
||
|
name: name,
|
||
|
value: value
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function updateClaim(value) {
|
||
|
return {
|
||
|
type: actions.CLAIM_UPDATE,
|
||
|
data: value
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function setPublishInChannel(channel) {
|
||
|
return {
|
||
|
type: actions.SET_PUBLISH_IN_CHANNEL,
|
||
|
channel: channel
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function updatePublishStatus(status, message) {
|
||
|
return {
|
||
|
type: actions.PUBLISH_STATUS_UPDATE,
|
||
|
data: {
|
||
|
status: status,
|
||
|
message: message
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function updateError(name, value) {
|
||
|
return {
|
||
|
type: actions.ERROR_UPDATE,
|
||
|
data: {
|
||
|
name: name,
|
||
|
value: value
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function updateSelectedChannel(channelName) {
|
||
|
return {
|
||
|
type: actions.SELECTED_CHANNEL_UPDATE,
|
||
|
data: channelName
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function toggleMetadataInputs(showMetadataInputs) {
|
||
|
return {
|
||
|
type: actions.TOGGLE_METADATA_INPUTS,
|
||
|
data: showMetadataInputs
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function onNewThumbnail(file) {
|
||
|
return {
|
||
|
type: actions.THUMBNAIL_NEW,
|
||
|
data: file
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function startPublish(history) {
|
||
|
return {
|
||
|
type: actions.PUBLISH_START,
|
||
|
data: { history: history }
|
||
|
};
|
||
|
}
|
||
|
|
||
|
/***/ }),
|
||
|
/* 9 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(64);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var site = _ref.site;
|
||
|
var defaultDescription = site.defaultDescription,
|
||
|
defaultThumbnail = site.defaultThumbnail,
|
||
|
siteDescription = site.description,
|
||
|
siteHost = site.host,
|
||
|
siteTitle = site.title,
|
||
|
siteTwitter = site.twitter;
|
||
|
|
||
|
return {
|
||
|
defaultDescription: defaultDescription,
|
||
|
defaultThumbnail: defaultThumbnail,
|
||
|
siteDescription: siteDescription,
|
||
|
siteHost: siteHost,
|
||
|
siteTitle: siteTitle,
|
||
|
siteTwitter: siteTwitter
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 10 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _propTypes = __webpack_require__(15);
|
||
|
|
||
|
var _propTypes2 = _interopRequireDefault(_propTypes);
|
||
|
|
||
|
var _ActiveStatusBar = __webpack_require__(27);
|
||
|
|
||
|
var _ActiveStatusBar2 = _interopRequireDefault(_ActiveStatusBar);
|
||
|
|
||
|
var _InactiveStatusBar = __webpack_require__(28);
|
||
|
|
||
|
var _InactiveStatusBar2 = _interopRequireDefault(_InactiveStatusBar);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ProgressBar = function (_React$Component) {
|
||
|
_inherits(ProgressBar, _React$Component);
|
||
|
|
||
|
function ProgressBar(props) {
|
||
|
_classCallCheck(this, ProgressBar);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (ProgressBar.__proto__ || Object.getPrototypeOf(ProgressBar)).call(this, props));
|
||
|
|
||
|
_this.state = {
|
||
|
bars: [],
|
||
|
index: 0,
|
||
|
incrementer: 1
|
||
|
};
|
||
|
_this.createBars = _this.createBars.bind(_this);
|
||
|
_this.startProgressBar = _this.startProgressBar.bind(_this);
|
||
|
_this.updateProgressBar = _this.updateProgressBar.bind(_this);
|
||
|
_this.stopProgressBar = _this.stopProgressBar.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(ProgressBar, [{
|
||
|
key: 'componentDidMount',
|
||
|
value: function componentDidMount() {
|
||
|
this.createBars();
|
||
|
this.startProgressBar();
|
||
|
}
|
||
|
}, {
|
||
|
key: 'componentWillUnmount',
|
||
|
value: function componentWillUnmount() {
|
||
|
this.stopProgressBar();
|
||
|
}
|
||
|
}, {
|
||
|
key: 'createBars',
|
||
|
value: function createBars() {
|
||
|
var bars = [];
|
||
|
for (var i = 0; i <= this.props.size; i++) {
|
||
|
bars.push({ isActive: false });
|
||
|
}
|
||
|
this.setState({ bars: bars });
|
||
|
}
|
||
|
}, {
|
||
|
key: 'startProgressBar',
|
||
|
value: function startProgressBar() {
|
||
|
this.updateInterval = setInterval(this.updateProgressBar.bind(this), 300);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'updateProgressBar',
|
||
|
value: function updateProgressBar() {
|
||
|
var index = this.state.index;
|
||
|
var incrementer = this.state.incrementer;
|
||
|
var bars = this.state.bars;
|
||
|
// flip incrementer if necessary, to stay in bounds
|
||
|
if (index < 0 || index > this.props.size) {
|
||
|
incrementer = incrementer * -1;
|
||
|
index += incrementer;
|
||
|
}
|
||
|
// update the indexed bar
|
||
|
if (incrementer > 0) {
|
||
|
bars[index].isActive = true;
|
||
|
} else {
|
||
|
bars[index].isActive = false;
|
||
|
};
|
||
|
// increment index
|
||
|
index += incrementer;
|
||
|
// update state
|
||
|
this.setState({
|
||
|
bars: bars,
|
||
|
incrementer: incrementer,
|
||
|
index: index
|
||
|
});
|
||
|
}
|
||
|
}, {
|
||
|
key: 'stopProgressBar',
|
||
|
value: function stopProgressBar() {
|
||
|
clearInterval(this.updateInterval);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
this.state.bars.map(function (bar, index) {
|
||
|
return bar.isActive ? _react2.default.createElement(_ActiveStatusBar2.default, { key: index }) : _react2.default.createElement(_InactiveStatusBar2.default, { key: index });
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ProgressBar;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
ProgressBar.propTypes = {
|
||
|
size: _propTypes2.default.number.isRequired
|
||
|
};
|
||
|
|
||
|
exports.default = ProgressBar;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 11 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.onHandleShowPageUri = onHandleShowPageUri;
|
||
|
exports.onRequestError = onRequestError;
|
||
|
exports.onNewChannelRequest = onNewChannelRequest;
|
||
|
exports.onNewAssetRequest = onNewAssetRequest;
|
||
|
exports.onRequestUpdate = onRequestUpdate;
|
||
|
exports.addRequestToRequestList = addRequestToRequestList;
|
||
|
exports.addAssetToAssetList = addAssetToAssetList;
|
||
|
exports.addNewChannelToChannelList = addNewChannelToChannelList;
|
||
|
exports.onUpdateChannelClaims = onUpdateChannelClaims;
|
||
|
exports.updateChannelClaims = updateChannelClaims;
|
||
|
exports.fileRequested = fileRequested;
|
||
|
exports.updateFileAvailability = updateFileAvailability;
|
||
|
exports.updateDisplayAssetError = updateDisplayAssetError;
|
||
|
|
||
|
var _show_action_types = __webpack_require__(23);
|
||
|
|
||
|
var actions = _interopRequireWildcard(_show_action_types);
|
||
|
|
||
|
var _show_request_types = __webpack_require__(103);
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
// basic request parsing
|
||
|
function onHandleShowPageUri(params) {
|
||
|
return {
|
||
|
type: actions.HANDLE_SHOW_URI,
|
||
|
data: params
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function onRequestError(error) {
|
||
|
return {
|
||
|
type: actions.REQUEST_ERROR,
|
||
|
data: error
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function onNewChannelRequest(channelName, channelId) {
|
||
|
var requestType = _show_request_types.CHANNEL;
|
||
|
var requestId = 'cr#' + channelName + '#' + channelId;
|
||
|
return {
|
||
|
type: actions.CHANNEL_REQUEST_NEW,
|
||
|
data: { requestType: requestType, requestId: requestId, channelName: channelName, channelId: channelId }
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function onNewAssetRequest(name, id, channelName, channelId, extension) {
|
||
|
var requestType = extension ? _show_request_types.ASSET_LITE : _show_request_types.ASSET_DETAILS;
|
||
|
var requestId = 'ar#' + name + '#' + id + '#' + channelName + '#' + channelId;
|
||
|
return {
|
||
|
type: actions.ASSET_REQUEST_NEW,
|
||
|
data: {
|
||
|
requestType: requestType,
|
||
|
requestId: requestId,
|
||
|
name: name,
|
||
|
modifier: {
|
||
|
id: id,
|
||
|
channel: {
|
||
|
name: channelName,
|
||
|
id: channelId
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function onRequestUpdate(requestType, requestId) {
|
||
|
return {
|
||
|
type: actions.REQUEST_UPDATE,
|
||
|
data: {
|
||
|
requestType: requestType,
|
||
|
requestId: requestId
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function addRequestToRequestList(id, error, key) {
|
||
|
return {
|
||
|
type: actions.REQUEST_LIST_ADD,
|
||
|
data: { id: id, error: error, key: key }
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// asset actions
|
||
|
|
||
|
function addAssetToAssetList(id, error, name, claimId, shortId, claimData) {
|
||
|
return {
|
||
|
type: actions.ASSET_ADD,
|
||
|
data: { id: id, error: error, name: name, claimId: claimId, shortId: shortId, claimData: claimData }
|
||
|
};
|
||
|
}
|
||
|
|
||
|
// channel actions
|
||
|
|
||
|
function addNewChannelToChannelList(id, name, shortId, longId, claimsData) {
|
||
|
return {
|
||
|
type: actions.CHANNEL_ADD,
|
||
|
data: { id: id, name: name, shortId: shortId, longId: longId, claimsData: claimsData }
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function onUpdateChannelClaims(channelKey, name, longId, page) {
|
||
|
return {
|
||
|
type: actions.CHANNEL_CLAIMS_UPDATE_ASYNC,
|
||
|
data: { channelKey: channelKey, name: name, longId: longId, page: page }
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function updateChannelClaims(channelListId, claimsData) {
|
||
|
return {
|
||
|
type: actions.CHANNEL_CLAIMS_UPDATE_SUCCESS,
|
||
|
data: { channelListId: channelListId, claimsData: claimsData }
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// display a file
|
||
|
|
||
|
function fileRequested(name, claimId) {
|
||
|
return {
|
||
|
type: actions.FILE_REQUESTED,
|
||
|
data: { name: name, claimId: claimId }
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function updateFileAvailability(status) {
|
||
|
return {
|
||
|
type: actions.FILE_AVAILABILITY_UPDATE,
|
||
|
data: status
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function updateDisplayAssetError(error) {
|
||
|
return {
|
||
|
type: actions.DISPLAY_ASSET_ERROR,
|
||
|
data: error
|
||
|
};
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 12 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _propTypes = __webpack_require__(15);
|
||
|
|
||
|
var _propTypes2 = _interopRequireDefault(_propTypes);
|
||
|
|
||
|
var _NavBar = __webpack_require__(7);
|
||
|
|
||
|
var _NavBar2 = _interopRequireDefault(_NavBar);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ErrorPage = function (_React$Component) {
|
||
|
_inherits(ErrorPage, _React$Component);
|
||
|
|
||
|
function ErrorPage() {
|
||
|
_classCallCheck(this, ErrorPage);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (ErrorPage.__proto__ || Object.getPrototypeOf(ErrorPage)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(ErrorPage, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var error = this.props.error;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(_NavBar2.default, null),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
error
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ErrorPage;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
ErrorPage.propTypes = {
|
||
|
error: _propTypes2.default.string.isRequired
|
||
|
};
|
||
|
|
||
|
exports.default = ErrorPage;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 13 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
var ua = __webpack_require__(137);
|
||
|
|
||
|
var _require = __webpack_require__(4),
|
||
|
googleId = _require.analytics.googleId,
|
||
|
title = _require.details.title;
|
||
|
|
||
|
function createServeEventParams(headers, ip, originalUrl) {
|
||
|
return {
|
||
|
eventCategory: 'client requests',
|
||
|
eventAction: 'serve request',
|
||
|
eventLabel: originalUrl,
|
||
|
ipOverride: ip,
|
||
|
userAgentOverride: headers['user-agent']
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function createPublishTimingEventParams(category, variable, label, startTime, endTime) {
|
||
|
var duration = endTime - startTime;
|
||
|
return {
|
||
|
userTimingCategory: category,
|
||
|
userTimingVariableName: variable,
|
||
|
userTimingTime: duration,
|
||
|
userTimingLabel: label
|
||
|
};
|
||
|
};
|
||
|
|
||
|
function sendGoogleAnalyticsEvent(ip, params) {
|
||
|
var visitorId = ip.replace(/\./g, '-');
|
||
|
var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });
|
||
|
visitor.event(params, function (err) {
|
||
|
if (err) {
|
||
|
logger.error('Google Analytics Event Error >>', err);
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
function sendGoogleAnalyticsTiming(visitorId, params) {
|
||
|
var visitor = ua(googleId, visitorId, { strictCidFormat: false, https: true });
|
||
|
visitor.timing(params, function (err) {
|
||
|
if (err) {
|
||
|
logger.error('Google Analytics Event Error >>', err);
|
||
|
}
|
||
|
logger.debug('Timing event successfully sent to google analytics');
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = {
|
||
|
sendGAServeEvent: function sendGAServeEvent(headers, ip, originalUrl) {
|
||
|
var params = createServeEventParams(headers, ip, originalUrl);
|
||
|
sendGoogleAnalyticsEvent(ip, params);
|
||
|
},
|
||
|
sendGATimingEvent: function sendGATimingEvent(category, variable, label, startTime, endTime) {
|
||
|
var params = createPublishTimingEventParams(category, variable, label, startTime, endTime);
|
||
|
sendGoogleAnalyticsTiming(title, params);
|
||
|
},
|
||
|
chooseGaLbrynetPublishLabel: function chooseGaLbrynetPublishLabel(_ref) {
|
||
|
var channelName = _ref.channel_name,
|
||
|
channelId = _ref.channel_id;
|
||
|
|
||
|
return channelName || channelId ? 'PUBLISH_IN_CHANNEL_CLAIM' : 'PUBLISH_ANONYMOUS_CLAIM';
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 14 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _reactGa = __webpack_require__(168);
|
||
|
|
||
|
var _reactGa2 = _interopRequireDefault(_reactGa);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var _require = __webpack_require__(4),
|
||
|
googleId = _require.analytics.googleId;
|
||
|
|
||
|
_reactGa2.default.initialize(googleId);
|
||
|
|
||
|
var GAListener = function (_React$Component) {
|
||
|
_inherits(GAListener, _React$Component);
|
||
|
|
||
|
function GAListener() {
|
||
|
_classCallCheck(this, GAListener);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (GAListener.__proto__ || Object.getPrototypeOf(GAListener)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(GAListener, [{
|
||
|
key: 'componentDidMount',
|
||
|
value: function componentDidMount() {
|
||
|
this.sendPageView(this.props.history.location);
|
||
|
this.props.history.listen(this.sendPageView);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'sendPageView',
|
||
|
value: function sendPageView(location) {
|
||
|
_reactGa2.default.set({ page: location.pathname });
|
||
|
_reactGa2.default.pageview(location.pathname);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return this.props.children;
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return GAListener;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
exports.default = (0, _reactRouterDom.withRouter)(GAListener);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 15 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("prop-types");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 16 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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"); } }; }();
|
||
|
|
||
|
exports.default = request;
|
||
|
|
||
|
__webpack_require__(173);
|
||
|
|
||
|
/**
|
||
|
* Parses the JSON returned by a network request
|
||
|
*
|
||
|
* @param {object} response A response from a network request
|
||
|
*
|
||
|
* @return {object} The parsed JSON from the request
|
||
|
*/
|
||
|
function parseJSON(response) {
|
||
|
if (response.status === 204 || response.status === 205) {
|
||
|
return null;
|
||
|
}
|
||
|
return response.json();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Parses the status returned by a network request
|
||
|
*
|
||
|
* @param {object} response A response from a network request
|
||
|
* @param {object} response The parsed JSON from the network request
|
||
|
*
|
||
|
* @return {object | undefined} Returns object with status and statusText, or undefined
|
||
|
*/
|
||
|
function checkStatus(response, jsonResponse) {
|
||
|
if (response.status >= 200 && response.status < 300) {
|
||
|
return jsonResponse;
|
||
|
}
|
||
|
var error = new Error(jsonResponse.message);
|
||
|
error.response = response;
|
||
|
throw error;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Requests a URL, returning a promise
|
||
|
*
|
||
|
* @param {string} url The URL we want to request
|
||
|
* @param {object} [options] The options we want to pass to "fetch"
|
||
|
*
|
||
|
* @return {object} The response data
|
||
|
*/
|
||
|
|
||
|
function request(url, options) {
|
||
|
return fetch(url, options).then(function (response) {
|
||
|
return Promise.all([response, parseJSON(response)]);
|
||
|
}).then(function (_ref) {
|
||
|
var _ref2 = _slicedToArray(_ref, 2),
|
||
|
response = _ref2[0],
|
||
|
jsonResponse = _ref2[1];
|
||
|
|
||
|
return checkStatus(response, jsonResponse);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/***/ }),
|
||
|
/* 17 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _channel = __webpack_require__(65);
|
||
|
|
||
|
var _view = __webpack_require__(67);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
|
||
|
return {
|
||
|
onChannelLogin: function onChannelLogin(name, shortId, longId) {
|
||
|
dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));
|
||
|
dispatch((0, _publish.updateSelectedChannel)(name));
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 18 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _channel = __webpack_require__(65);
|
||
|
|
||
|
var _view = __webpack_require__(68);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
|
||
|
return {
|
||
|
onChannelLogin: function onChannelLogin(name, shortId, longId) {
|
||
|
dispatch((0, _channel.updateLoggedInChannel)(name, shortId, longId));
|
||
|
dispatch((0, _publish.updateSelectedChannel)(name));
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(null, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 19 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(71);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
var _show = __webpack_require__(11);
|
||
|
|
||
|
var _show2 = __webpack_require__(31);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var show = _ref.show;
|
||
|
|
||
|
// select error and status
|
||
|
var error = show.displayAsset.error;
|
||
|
var status = show.displayAsset.status;
|
||
|
// select asset
|
||
|
var asset = (0, _show2.selectAsset)(show);
|
||
|
// return props
|
||
|
return {
|
||
|
error: error,
|
||
|
status: status,
|
||
|
asset: asset
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
|
||
|
return {
|
||
|
onFileRequest: function onFileRequest(name, claimId) {
|
||
|
dispatch((0, _show.fileRequested)(name, claimId));
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 20 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
var _view = __webpack_require__(80);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var publish = _ref.publish;
|
||
|
|
||
|
return {
|
||
|
file: publish.file,
|
||
|
thumbnail: publish.thumbnail,
|
||
|
fileError: publish.error.file
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
|
||
|
return {
|
||
|
selectFile: function selectFile(file) {
|
||
|
dispatch((0, _publish.selectFile)(file));
|
||
|
},
|
||
|
setFileError: function setFileError(value) {
|
||
|
dispatch((0, _publish.clearFile)());
|
||
|
dispatch((0, _publish.updateError)('file', value));
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 21 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("path");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 22 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var axios = __webpack_require__(135);
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
var _require = __webpack_require__(136),
|
||
|
_require$api = _require.api,
|
||
|
apiHost = _require$api.apiHost,
|
||
|
apiPort = _require$api.apiPort;
|
||
|
|
||
|
var lbryApiUri = 'http://' + apiHost + ':' + apiPort;
|
||
|
|
||
|
var _require2 = __webpack_require__(13),
|
||
|
chooseGaLbrynetPublishLabel = _require2.chooseGaLbrynetPublishLabel,
|
||
|
sendGATimingEvent = _require2.sendGATimingEvent;
|
||
|
|
||
|
var handleLbrynetResponse = function handleLbrynetResponse(_ref, resolve, reject) {
|
||
|
var data = _ref.data;
|
||
|
|
||
|
logger.debug('lbry api data:', data);
|
||
|
if (data.result) {
|
||
|
// check for an error
|
||
|
if (data.result.error) {
|
||
|
logger.debug('Lbrynet api error:', data.result.error);
|
||
|
reject(new Error(data.result.error));
|
||
|
return;
|
||
|
};
|
||
|
resolve(data.result);
|
||
|
return;
|
||
|
}
|
||
|
// fallback in case it just timed out
|
||
|
reject(JSON.stringify(data));
|
||
|
};
|
||
|
|
||
|
module.exports = {
|
||
|
publishClaim: function publishClaim(publishParams) {
|
||
|
logger.debug('lbryApi >> Publishing claim to "' + publishParams.name + '"');
|
||
|
var gaStartTime = Date.now();
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
axios.post(lbryApiUri, {
|
||
|
method: 'publish',
|
||
|
params: publishParams
|
||
|
}).then(function (response) {
|
||
|
sendGATimingEvent('lbrynet', 'publish', chooseGaLbrynetPublishLabel(publishParams), gaStartTime, Date.now());
|
||
|
handleLbrynetResponse(response, resolve, reject);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
getClaim: function getClaim(uri) {
|
||
|
logger.debug('lbryApi >> Getting Claim for "' + uri + '"');
|
||
|
var gaStartTime = Date.now();
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
axios.post(lbryApiUri, {
|
||
|
method: 'get',
|
||
|
params: { uri: uri, timeout: 20 }
|
||
|
}).then(function (response) {
|
||
|
sendGATimingEvent('lbrynet', 'getClaim', 'GET', gaStartTime, Date.now());
|
||
|
handleLbrynetResponse(response, resolve, reject);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
getClaimList: function getClaimList(claimName) {
|
||
|
logger.debug('lbryApi >> Getting claim_list for "' + claimName + '"');
|
||
|
var gaStartTime = Date.now();
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
axios.post(lbryApiUri, {
|
||
|
method: 'claim_list',
|
||
|
params: { name: claimName }
|
||
|
}).then(function (response) {
|
||
|
sendGATimingEvent('lbrynet', 'getClaimList', 'CLAIM_LIST', gaStartTime, Date.now());
|
||
|
handleLbrynetResponse(response, resolve, reject);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
resolveUri: function resolveUri(uri) {
|
||
|
logger.debug('lbryApi >> Resolving URI for "' + uri + '"');
|
||
|
var gaStartTime = Date.now();
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
axios.post(lbryApiUri, {
|
||
|
method: 'resolve',
|
||
|
params: { uri: uri }
|
||
|
}).then(function (_ref2) {
|
||
|
var data = _ref2.data;
|
||
|
|
||
|
sendGATimingEvent('lbrynet', 'resolveUri', 'RESOLVE', gaStartTime, Date.now());
|
||
|
if (data.result[uri].error) {
|
||
|
// check for errors
|
||
|
reject(data.result[uri].error);
|
||
|
} else {
|
||
|
// if no errors, resolve
|
||
|
resolve(data.result[uri]);
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
getDownloadDirectory: function getDownloadDirectory() {
|
||
|
logger.debug('lbryApi >> Retrieving the download directory path from lbry daemon...');
|
||
|
var gaStartTime = Date.now();
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
axios.post(lbryApiUri, {
|
||
|
method: 'settings_get'
|
||
|
}).then(function (_ref3) {
|
||
|
var data = _ref3.data;
|
||
|
|
||
|
sendGATimingEvent('lbrynet', 'getDownloadDirectory', 'SETTINGS_GET', gaStartTime, Date.now());
|
||
|
if (data.result) {
|
||
|
resolve(data.result.download_directory);
|
||
|
} else {
|
||
|
return new Error('Successfully connected to lbry daemon, but unable to retrieve the download directory.');
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
logger.error('Lbrynet Error:', error);
|
||
|
resolve('/home/lbry/Downloads/');
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
createChannel: function createChannel(name) {
|
||
|
logger.debug('lbryApi >> Creating channel for ' + name + '...');
|
||
|
var gaStartTime = Date.now();
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
axios.post(lbryApiUri, {
|
||
|
method: 'channel_new',
|
||
|
params: {
|
||
|
channel_name: name,
|
||
|
amount: 0.1
|
||
|
}
|
||
|
}).then(function (response) {
|
||
|
sendGATimingEvent('lbrynet', 'createChannel', 'CHANNEL_NEW', gaStartTime, Date.now());
|
||
|
handleLbrynetResponse(response, resolve, reject);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 23 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
// request actions
|
||
|
var HANDLE_SHOW_URI = exports.HANDLE_SHOW_URI = 'HANDLE_SHOW_URI';
|
||
|
var REQUEST_ERROR = exports.REQUEST_ERROR = 'REQUEST_ERROR';
|
||
|
var REQUEST_UPDATE = exports.REQUEST_UPDATE = 'REQUEST_UPDATE';
|
||
|
var ASSET_REQUEST_NEW = exports.ASSET_REQUEST_NEW = 'ASSET_REQUEST_NEW';
|
||
|
var CHANNEL_REQUEST_NEW = exports.CHANNEL_REQUEST_NEW = 'CHANNEL_REQUEST_NEW';
|
||
|
var REQUEST_LIST_ADD = exports.REQUEST_LIST_ADD = 'REQUEST_LIST_ADD';
|
||
|
|
||
|
// asset actions
|
||
|
var ASSET_ADD = exports.ASSET_ADD = 'ASSET_ADD';
|
||
|
|
||
|
// channel actions
|
||
|
var CHANNEL_ADD = exports.CHANNEL_ADD = 'CHANNEL_ADD';
|
||
|
|
||
|
var CHANNEL_CLAIMS_UPDATE_ASYNC = exports.CHANNEL_CLAIMS_UPDATE_ASYNC = 'CHANNEL_CLAIMS_UPDATE_ASYNC';
|
||
|
var CHANNEL_CLAIMS_UPDATE_SUCCESS = exports.CHANNEL_CLAIMS_UPDATE_SUCCESS = 'CHANNEL_CLAIMS_UPDATE_SUCCESS';
|
||
|
|
||
|
// asset/file display actions
|
||
|
var FILE_REQUESTED = exports.FILE_REQUESTED = 'FILE_REQUESTED';
|
||
|
var FILE_AVAILABILITY_UPDATE = exports.FILE_AVAILABILITY_UPDATE = 'FILE_AVAILABILITY_UPDATE';
|
||
|
var DISPLAY_ASSET_ERROR = exports.DISPLAY_ASSET_ERROR = 'DISPLAY_ASSET_ERROR';
|
||
|
|
||
|
/***/ }),
|
||
|
/* 24 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(63);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var channel = _ref.channel;
|
||
|
|
||
|
return {
|
||
|
loggedInChannelName: channel.loggedInChannel.name
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 25 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function Logo() {
|
||
|
return _react2.default.createElement(
|
||
|
'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' },
|
||
|
_react2.default.createElement(
|
||
|
_reactRouterDom.Link,
|
||
|
{ to: '/' },
|
||
|
_react2.default.createElement(
|
||
|
'title',
|
||
|
null,
|
||
|
'Logo'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'desc',
|
||
|
null,
|
||
|
'Spee.ch logo'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'g',
|
||
|
{ id: 'About' },
|
||
|
_react2.default.createElement(
|
||
|
'g',
|
||
|
{ id: 'Publish-Form-V2-_x28_filled_x29_', transform: 'translate(-42.000000, -23.000000)' },
|
||
|
_react2.default.createElement(
|
||
|
'g',
|
||
|
{ id: 'Group-17', transform: 'translate(42.000000, 22.000000)' },
|
||
|
_react2.default.createElement(
|
||
|
'text',
|
||
|
{ transform: 'matrix(1 0 0 1 0 20)', fontSize: '25', fontFamily: 'Roboto' },
|
||
|
'Spee<h'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'g',
|
||
|
{ id: 'Group-16', transform: 'translate(0.000000, 30.000000)' },
|
||
|
_react2.default.createElement('path', { id: 'Line-8', fill: 'none', stroke: '#09F911', strokeWidth: '1', strokeLinecap: 'square', d: 'M0.5,1.5h15' }),
|
||
|
_react2.default.createElement('path', { id: 'Line-8-Copy', fill: 'none', stroke: '#029D74', strokeWidth: '1', strokeLinecap: 'square', d: 'M16.5,1.5h15' }),
|
||
|
_react2.default.createElement('path', { id: 'Line-8-Copy-2', fill: 'none', stroke: '#E35BD8', strokeWidth: '1', strokeLinecap: 'square', d: 'M32.5,1.5h15' }),
|
||
|
_react2.default.createElement('path', { id: 'Line-8-Copy-3', fill: 'none', stroke: '#4156C5', strokeWidth: '1', strokeLinecap: 'square', d: 'M48.5,1.5h15' }),
|
||
|
_react2.default.createElement('path', { id: 'Line-8-Copy-4', fill: 'none', stroke: '#635688', strokeWidth: '1', strokeLinecap: 'square', d: 'M64.5,1.5h15' })
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
};
|
||
|
|
||
|
exports.default = Logo;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 26 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function NavBarChannelDropdown(_ref) {
|
||
|
var channelName = _ref.channelName,
|
||
|
handleSelection = _ref.handleSelection,
|
||
|
defaultSelection = _ref.defaultSelection,
|
||
|
VIEW = _ref.VIEW,
|
||
|
LOGOUT = _ref.LOGOUT;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'select',
|
||
|
{ type: 'text', id: 'nav-bar-channel-select', className: 'select select--arrow link--nav', onChange: handleSelection, value: defaultSelection },
|
||
|
_react2.default.createElement(
|
||
|
'option',
|
||
|
{ id: 'nav-bar-channel-select-channel-option' },
|
||
|
channelName
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'option',
|
||
|
{ value: VIEW },
|
||
|
'View'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'option',
|
||
|
{ value: LOGOUT },
|
||
|
'Logout'
|
||
|
)
|
||
|
);
|
||
|
};
|
||
|
|
||
|
exports.default = NavBarChannelDropdown;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 27 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var ActiveStatusBar = function ActiveStatusBar() {
|
||
|
return _react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'progress-bar progress-bar--active' },
|
||
|
'| '
|
||
|
);
|
||
|
};
|
||
|
|
||
|
exports.default = ActiveStatusBar;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 28 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var InactiveStatusBar = function InactiveStatusBar() {
|
||
|
return _react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'progress-bar progress-bar--inactive' },
|
||
|
'| '
|
||
|
);
|
||
|
};
|
||
|
|
||
|
exports.default = InactiveStatusBar;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 29 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _show = __webpack_require__(11);
|
||
|
|
||
|
var _view = __webpack_require__(69);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var show = _ref.show;
|
||
|
|
||
|
return {
|
||
|
error: show.request.error,
|
||
|
requestType: show.request.type
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = {
|
||
|
onHandleShowPageUri: _show.onHandleShowPageUri
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 30 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(70);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var show = _ref.show;
|
||
|
|
||
|
// select request info
|
||
|
var requestId = show.request.id;
|
||
|
// select asset info
|
||
|
var asset = void 0;
|
||
|
var request = show.requestList[requestId] || null;
|
||
|
var assetList = show.assetList;
|
||
|
if (request && assetList) {
|
||
|
var assetKey = request.key; // note: just store this in the request
|
||
|
asset = assetList[assetKey] || null;
|
||
|
};
|
||
|
// return props
|
||
|
return {
|
||
|
asset: asset
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 31 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var selectAsset = exports.selectAsset = function selectAsset(show) {
|
||
|
var request = show.requestList[show.request.id];
|
||
|
var assetKey = request.key;
|
||
|
return show.assetList[assetKey];
|
||
|
};
|
||
|
|
||
|
var selectShowState = exports.selectShowState = function selectShowState(state) {
|
||
|
return state.show;
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 32 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(72);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var show = _ref.show;
|
||
|
|
||
|
// select request info
|
||
|
var requestId = show.request.id;
|
||
|
// select asset info
|
||
|
var asset = void 0;
|
||
|
var request = show.requestList[requestId] || null;
|
||
|
var assetList = show.assetList;
|
||
|
if (request && assetList) {
|
||
|
var assetKey = request.key; // note: just store this in the request
|
||
|
asset = assetList[assetKey] || null;
|
||
|
};
|
||
|
// return props
|
||
|
return {
|
||
|
asset: asset
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 33 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(73);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
var _show = __webpack_require__(31);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var show = _ref.show;
|
||
|
|
||
|
var _selectAsset = (0, _show.selectAsset)(show),
|
||
|
title = _selectAsset.claimData.title;
|
||
|
|
||
|
return {
|
||
|
title: title
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 34 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(74);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
var _show = __webpack_require__(31);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var show = _ref.show;
|
||
|
|
||
|
// select asset
|
||
|
var asset = (0, _show.selectAsset)(show);
|
||
|
// return props
|
||
|
return {
|
||
|
asset: asset
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 35 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(75);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var show = _ref.show;
|
||
|
|
||
|
// select request info
|
||
|
var requestId = show.request.id;
|
||
|
// select request
|
||
|
var previousRequest = show.requestList[requestId] || null;
|
||
|
// select channel
|
||
|
var channel = void 0;
|
||
|
if (previousRequest) {
|
||
|
var channelKey = previousRequest.key;
|
||
|
channel = show.channelList[channelKey] || null;
|
||
|
}
|
||
|
return {
|
||
|
channel: channel
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 36 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _show = __webpack_require__(11);
|
||
|
|
||
|
var _view = __webpack_require__(76);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var show = _ref.show;
|
||
|
|
||
|
// select channel key
|
||
|
var request = show.requestList[show.request.id];
|
||
|
var channelKey = request.key;
|
||
|
// select channel claims
|
||
|
var channel = show.channelList[channelKey] || null;
|
||
|
// return props
|
||
|
return {
|
||
|
channelKey: channelKey,
|
||
|
channel: channel
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = {
|
||
|
onUpdateChannelClaims: _show.onUpdateChannelClaims
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 37 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(77);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var defaultThumbnail = _ref.site.defaults.defaultThumbnail;
|
||
|
|
||
|
return {
|
||
|
defaultThumbnail: defaultThumbnail
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 38 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(78);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var _ref$site = _ref.site,
|
||
|
host = _ref$site.host,
|
||
|
title = _ref$site.title;
|
||
|
|
||
|
return {
|
||
|
host: host,
|
||
|
title: title
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 39 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _SEO = __webpack_require__(9);
|
||
|
|
||
|
var _SEO2 = _interopRequireDefault(_SEO);
|
||
|
|
||
|
var _NavBar = __webpack_require__(7);
|
||
|
|
||
|
var _NavBar2 = _interopRequireDefault(_NavBar);
|
||
|
|
||
|
var _PublishTool = __webpack_require__(40);
|
||
|
|
||
|
var _PublishTool2 = _interopRequireDefault(_PublishTool);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var HomePage = function (_React$Component) {
|
||
|
_inherits(HomePage, _React$Component);
|
||
|
|
||
|
function HomePage() {
|
||
|
_classCallCheck(this, HomePage);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (HomePage.__proto__ || Object.getPrototypeOf(HomePage)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(HomePage, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--tall flex-container--column' },
|
||
|
_react2.default.createElement(_SEO2.default, null),
|
||
|
_react2.default.createElement(_NavBar2.default, null),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--tall row--padded flex-container--column' },
|
||
|
_react2.default.createElement(_PublishTool2.default, null)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return HomePage;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = HomePage;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 40 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(79);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var publish = _ref.publish;
|
||
|
|
||
|
return {
|
||
|
disabled: publish.disabled,
|
||
|
file: publish.file,
|
||
|
status: publish.status.status
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 41 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _propTypes = __webpack_require__(15);
|
||
|
|
||
|
var _propTypes2 = _interopRequireDefault(_propTypes);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var PublishPreview = function (_React$Component) {
|
||
|
_inherits(PublishPreview, _React$Component);
|
||
|
|
||
|
function PublishPreview(props) {
|
||
|
_classCallCheck(this, PublishPreview);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (PublishPreview.__proto__ || Object.getPrototypeOf(PublishPreview)).call(this, props));
|
||
|
|
||
|
_this.state = {
|
||
|
imgSource: '',
|
||
|
defaultThumbnail: '/assets/img/video_thumb_default.png'
|
||
|
};
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(PublishPreview, [{
|
||
|
key: 'componentDidMount',
|
||
|
value: function componentDidMount() {
|
||
|
this.setPreviewImageSource(this.props.file);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'componentWillReceiveProps',
|
||
|
value: function componentWillReceiveProps(newProps) {
|
||
|
if (newProps.file !== this.props.file) {
|
||
|
this.setPreviewImageSource(newProps.file);
|
||
|
}
|
||
|
if (newProps.thumbnail !== this.props.thumbnail) {
|
||
|
if (newProps.thumbnail) {
|
||
|
this.setPreviewImageSourceFromFile(newProps.thumbnail);
|
||
|
} else {
|
||
|
this.setState({ imgSource: this.state.defaultThumbnail });
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'setPreviewImageSourceFromFile',
|
||
|
value: function setPreviewImageSourceFromFile(file) {
|
||
|
var _this2 = this;
|
||
|
|
||
|
var previewReader = new FileReader();
|
||
|
previewReader.readAsDataURL(file);
|
||
|
previewReader.onloadend = function () {
|
||
|
_this2.setState({ imgSource: previewReader.result });
|
||
|
};
|
||
|
}
|
||
|
}, {
|
||
|
key: 'setPreviewImageSource',
|
||
|
value: function setPreviewImageSource(file) {
|
||
|
if (file.type !== 'video/mp4') {
|
||
|
this.setPreviewImageSourceFromFile(file);
|
||
|
} else {
|
||
|
if (this.props.thumbnail) {
|
||
|
this.setPreviewImageSourceFromFile(this.props.thumbnail);
|
||
|
}
|
||
|
this.setState({ imgSource: this.state.defaultThumbnail });
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement('img', {
|
||
|
id: 'dropzone-preview',
|
||
|
src: this.state.imgSource,
|
||
|
className: this.props.dimPreview ? 'dim' : '',
|
||
|
alt: 'publish preview'
|
||
|
});
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return PublishPreview;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
PublishPreview.propTypes = {
|
||
|
dimPreview: _propTypes2.default.bool.isRequired,
|
||
|
file: _propTypes2.default.object.isRequired,
|
||
|
thumbnail: _propTypes2.default.object
|
||
|
};
|
||
|
|
||
|
exports.default = PublishPreview;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 42 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
var _view = __webpack_require__(81);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var channel = _ref.channel,
|
||
|
publish = _ref.publish;
|
||
|
|
||
|
return {
|
||
|
file: publish.file
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = {
|
||
|
clearFile: _publish.clearFile,
|
||
|
startPublish: _publish.startPublish
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 43 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
var _view = __webpack_require__(82);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var publish = _ref.publish;
|
||
|
|
||
|
return {
|
||
|
title: publish.metadata.title
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
|
||
|
return {
|
||
|
onMetadataChange: function onMetadataChange(name, value) {
|
||
|
dispatch((0, _publish.updateMetadata)(name, value));
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 44 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(83);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var channel = _ref.channel,
|
||
|
publish = _ref.publish;
|
||
|
|
||
|
return {
|
||
|
loggedInChannelName: channel.loggedInChannel.name,
|
||
|
loggedInChannelShortId: channel.loggedInChannel.shortId,
|
||
|
fileName: publish.file.name,
|
||
|
publishInChannel: publish.publishInChannel,
|
||
|
selectedChannel: publish.selectedChannel,
|
||
|
claim: publish.claim,
|
||
|
urlError: publish.error.url
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
|
||
|
return {
|
||
|
onClaimChange: function onClaimChange(value) {
|
||
|
dispatch((0, _publish.updateClaim)(value));
|
||
|
dispatch((0, _publish.updateError)('publishSubmit', null));
|
||
|
},
|
||
|
onUrlError: function onUrlError(value) {
|
||
|
dispatch((0, _publish.updateError)('url', value));
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 45 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _propTypes = __webpack_require__(15);
|
||
|
|
||
|
var _propTypes2 = _interopRequireDefault(_propTypes);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function UrlMiddle(_ref) {
|
||
|
var publishInChannel = _ref.publishInChannel,
|
||
|
selectedChannel = _ref.selectedChannel,
|
||
|
loggedInChannelName = _ref.loggedInChannelName,
|
||
|
loggedInChannelShortId = _ref.loggedInChannelShortId;
|
||
|
|
||
|
if (publishInChannel) {
|
||
|
if (selectedChannel === loggedInChannelName) {
|
||
|
return _react2.default.createElement(
|
||
|
'span',
|
||
|
{ id: 'url-channel', className: 'url-text--secondary' },
|
||
|
loggedInChannelName,
|
||
|
':',
|
||
|
loggedInChannelShortId,
|
||
|
' /'
|
||
|
);
|
||
|
}
|
||
|
return _react2.default.createElement(
|
||
|
'span',
|
||
|
{ id: 'url-channel-placeholder', className: 'url-text--secondary tooltip' },
|
||
|
'@channel',
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{
|
||
|
className: 'tooltip-text' },
|
||
|
'Select a channel below'
|
||
|
),
|
||
|
' /'
|
||
|
);
|
||
|
}
|
||
|
return _react2.default.createElement(
|
||
|
'span',
|
||
|
{ id: 'url-no-channel-placeholder', className: 'url-text--secondary tooltip' },
|
||
|
'xyz',
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'tooltip-text' },
|
||
|
'This will be a random id'
|
||
|
),
|
||
|
' /'
|
||
|
);
|
||
|
}
|
||
|
|
||
|
UrlMiddle.propTypes = {
|
||
|
publishInChannel: _propTypes2.default.bool.isRequired,
|
||
|
loggedInChannelName: _propTypes2.default.string,
|
||
|
loggedInChannelShortId: _propTypes2.default.string
|
||
|
};
|
||
|
|
||
|
exports.default = UrlMiddle;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 46 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
var _view = __webpack_require__(84);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var file = _ref.publish.file;
|
||
|
|
||
|
return {
|
||
|
file: file
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = {
|
||
|
onNewThumbnail: _publish.onNewThumbnail
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 47 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
var _view = __webpack_require__(85);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var publish = _ref.publish;
|
||
|
|
||
|
return {
|
||
|
showMetadataInputs: publish.showMetadataInputs,
|
||
|
description: publish.metadata.description,
|
||
|
license: publish.metadata.license,
|
||
|
nsfw: publish.metadata.nsfw
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
|
||
|
return {
|
||
|
onMetadataChange: function onMetadataChange(name, value) {
|
||
|
dispatch((0, _publish.updateMetadata)(name, value));
|
||
|
},
|
||
|
onToggleMetadataInputs: function onToggleMetadataInputs(value) {
|
||
|
dispatch((0, _publish.toggleMetadataInputs)(value));
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 48 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; };
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _propTypes = __webpack_require__(15);
|
||
|
|
||
|
var _propTypes2 = _interopRequireDefault(_propTypes);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ExpandingTextarea = function (_Component) {
|
||
|
_inherits(ExpandingTextarea, _Component);
|
||
|
|
||
|
function ExpandingTextarea(props) {
|
||
|
_classCallCheck(this, ExpandingTextarea);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (ExpandingTextarea.__proto__ || Object.getPrototypeOf(ExpandingTextarea)).call(this, props));
|
||
|
|
||
|
_this._handleChange = _this._handleChange.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(ExpandingTextarea, [{
|
||
|
key: 'componentDidMount',
|
||
|
value: function componentDidMount() {
|
||
|
this.adjustTextarea({});
|
||
|
}
|
||
|
}, {
|
||
|
key: '_handleChange',
|
||
|
value: function _handleChange(event) {
|
||
|
var onChange = this.props.onChange;
|
||
|
|
||
|
if (onChange) onChange(event);
|
||
|
this.adjustTextarea(event);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'adjustTextarea',
|
||
|
value: function adjustTextarea(_ref) {
|
||
|
var _ref$target = _ref.target,
|
||
|
target = _ref$target === undefined ? this.el : _ref$target;
|
||
|
|
||
|
target.style.height = 0;
|
||
|
target.style.height = target.scrollHeight + 'px';
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var _this2 = this;
|
||
|
|
||
|
var rest = _objectWithoutProperties(this.props, []);
|
||
|
|
||
|
return _react2.default.createElement('textarea', _extends({}, rest, {
|
||
|
ref: function ref(x) {
|
||
|
return _this2.el = x;
|
||
|
},
|
||
|
onChange: this._handleChange
|
||
|
}));
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ExpandingTextarea;
|
||
|
}(_react.Component);
|
||
|
|
||
|
ExpandingTextarea.propTypes = {
|
||
|
onChange: _propTypes2.default.func
|
||
|
};
|
||
|
|
||
|
exports.default = ExpandingTextarea;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 49 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
var _view = __webpack_require__(86);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var channel = _ref.channel,
|
||
|
publish = _ref.publish;
|
||
|
|
||
|
return {
|
||
|
loggedInChannelName: channel.loggedInChannel.name,
|
||
|
publishInChannel: publish.publishInChannel,
|
||
|
selectedChannel: publish.selectedChannel,
|
||
|
channelError: publish.error.channel
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
|
||
|
return {
|
||
|
onPublishInChannelChange: function onPublishInChannelChange(value) {
|
||
|
dispatch((0, _publish.updateError)('channel', null));
|
||
|
dispatch((0, _publish.setPublishInChannel)(value));
|
||
|
},
|
||
|
onChannelSelect: function onChannelSelect(value) {
|
||
|
dispatch((0, _publish.updateError)('channel', null));
|
||
|
dispatch((0, _publish.updateSelectedChannel)(value));
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 50 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _publish = __webpack_require__(8);
|
||
|
|
||
|
var _view = __webpack_require__(87);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var publish = _ref.publish;
|
||
|
|
||
|
return {
|
||
|
status: publish.status.status,
|
||
|
message: publish.status.message
|
||
|
};
|
||
|
};
|
||
|
|
||
|
var mapDispatchToProps = {
|
||
|
clearFile: _publish.clearFile
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 51 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _view = __webpack_require__(88);
|
||
|
|
||
|
var _view2 = _interopRequireDefault(_view);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var mapStateToProps = function mapStateToProps(_ref) {
|
||
|
var publish = _ref.publish;
|
||
|
|
||
|
return {
|
||
|
message: publish.disabledMessage
|
||
|
};
|
||
|
};
|
||
|
|
||
|
exports.default = (0, _reactRedux.connect)(mapStateToProps, null)(_view2.default);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 52 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _NavBar = __webpack_require__(7);
|
||
|
|
||
|
var _NavBar2 = _interopRequireDefault(_NavBar);
|
||
|
|
||
|
var _SEO = __webpack_require__(9);
|
||
|
|
||
|
var _SEO2 = _interopRequireDefault(_SEO);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var AboutPage = function (_React$Component) {
|
||
|
_inherits(AboutPage, _React$Component);
|
||
|
|
||
|
function AboutPage() {
|
||
|
_classCallCheck(this, AboutPage);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (AboutPage.__proto__ || Object.getPrototypeOf(AboutPage)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(AboutPage, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(_SEO2.default, { pageTitle: 'About', pageUri: 'about' }),
|
||
|
_react2.default.createElement(_NavBar2.default, null),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--5 column--med-10 align-content-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--8 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'pull-quote' },
|
||
|
'Spee.ch is an open-source project. Please contribute to the existing site, or fork it and make your own.'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: 'https://twitter.com/spee_ch' },
|
||
|
'TWITTER'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch' },
|
||
|
'GITHUB'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: 'https://discord.gg/YjYbwhS' },
|
||
|
'DISCORD CHANNEL'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: 'https://github.com/lbryio/spee.ch/blob/master/README.md' },
|
||
|
'DOCUMENTATION'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--5 column--med-10 align-content-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--8 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Spee.ch is a media-hosting site that reads from and publishes content to the ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', href: 'https://lbry.io' },
|
||
|
'LBRY'
|
||
|
),
|
||
|
' blockchain.'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Spee.ch is a hosting service, but with the added benefit that it stores your content on a decentralized network of computers -- the ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', href: 'https://lbry.io/get' },
|
||
|
'LBRY'
|
||
|
),
|
||
|
' network. This means that your images are stored in multiple locations without a single point of failure.'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'h3',
|
||
|
null,
|
||
|
'Contribute'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'If you have an idea for your own spee.ch-like site on top of LBRY, fork our ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', href: 'https://github.com/lbryio/spee.ch' },
|
||
|
'github repo'
|
||
|
),
|
||
|
' and go to town!'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'If you want to improve spee.ch, join our ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', href: 'https://discord.gg/YjYbwhS' },
|
||
|
'discord channel'
|
||
|
),
|
||
|
' or solve one of our ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', href: 'https://github.com/lbryio/spee.ch/issues' },
|
||
|
'github issues'
|
||
|
),
|
||
|
'.'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return AboutPage;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = AboutPage;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 53 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _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"); } }; }();
|
||
|
|
||
|
var db = __webpack_require__(5);
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
var _require = __webpack_require__(147),
|
||
|
returnPaginatedChannelClaims = _require.returnPaginatedChannelClaims;
|
||
|
|
||
|
var NO_CHANNEL = 'NO_CHANNEL';
|
||
|
var NO_CLAIM = 'NO_CLAIM';
|
||
|
var NO_FILE = 'NO_FILE';
|
||
|
|
||
|
module.exports = {
|
||
|
getClaimId: function getClaimId(channelName, channelClaimId, name, claimId) {
|
||
|
if (channelName) {
|
||
|
return module.exports.getClaimIdByChannel(channelName, channelClaimId, name);
|
||
|
} else {
|
||
|
return module.exports.getClaimIdByClaim(name, claimId);
|
||
|
}
|
||
|
},
|
||
|
getClaimIdByClaim: function getClaimIdByClaim(claimName, claimId) {
|
||
|
logger.debug('getClaimIdByClaim(' + claimName + ', ' + claimId + ')');
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
db.Claim.getLongClaimId(claimName, claimId).then(function (longClaimId) {
|
||
|
if (!longClaimId) {
|
||
|
resolve(NO_CLAIM);
|
||
|
}
|
||
|
resolve(longClaimId);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
getClaimIdByChannel: function getClaimIdByChannel(channelName, channelClaimId, claimName) {
|
||
|
logger.debug('getClaimIdByChannel(' + channelName + ', ' + channelClaimId + ', ' + claimName + ')');
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
db.Certificate.getLongChannelId(channelName, channelClaimId) // 1. get the long channel id
|
||
|
.then(function (longChannelId) {
|
||
|
if (!longChannelId) {
|
||
|
return [null, null];
|
||
|
}
|
||
|
return Promise.all([longChannelId, db.Claim.getClaimIdByLongChannelId(longChannelId, claimName)]); // 2. get the long claim id
|
||
|
}).then(function (_ref) {
|
||
|
var _ref2 = _slicedToArray(_ref, 2),
|
||
|
longChannelId = _ref2[0],
|
||
|
longClaimId = _ref2[1];
|
||
|
|
||
|
if (!longChannelId) {
|
||
|
return resolve(NO_CHANNEL);
|
||
|
}
|
||
|
if (!longClaimId) {
|
||
|
return resolve(NO_CLAIM);
|
||
|
}
|
||
|
resolve(longClaimId);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
getChannelData: function getChannelData(channelName, channelClaimId, page) {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
// 1. get the long channel Id (make sure channel exists)
|
||
|
db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) {
|
||
|
if (!longChannelClaimId) {
|
||
|
return [null, null, null];
|
||
|
}
|
||
|
// 2. get the short ID and all claims for that channel
|
||
|
return Promise.all([longChannelClaimId, db.Certificate.getShortChannelIdFromLongChannelId(longChannelClaimId, channelName)]);
|
||
|
}).then(function (_ref3) {
|
||
|
var _ref4 = _slicedToArray(_ref3, 2),
|
||
|
longChannelClaimId = _ref4[0],
|
||
|
shortChannelClaimId = _ref4[1];
|
||
|
|
||
|
if (!longChannelClaimId) {
|
||
|
return resolve(NO_CHANNEL);
|
||
|
}
|
||
|
// 3. return all the channel information
|
||
|
resolve({
|
||
|
channelName: channelName,
|
||
|
longChannelClaimId: longChannelClaimId,
|
||
|
shortChannelClaimId: shortChannelClaimId
|
||
|
});
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
getChannelClaims: function getChannelClaims(channelName, channelClaimId, page) {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
// 1. get the long channel Id (make sure channel exists)
|
||
|
db.Certificate.getLongChannelId(channelName, channelClaimId).then(function (longChannelClaimId) {
|
||
|
if (!longChannelClaimId) {
|
||
|
return [null, null, null];
|
||
|
}
|
||
|
// 2. get the short ID and all claims for that channel
|
||
|
return Promise.all([longChannelClaimId, db.Claim.getAllChannelClaims(longChannelClaimId)]);
|
||
|
}).then(function (_ref5) {
|
||
|
var _ref6 = _slicedToArray(_ref5, 2),
|
||
|
longChannelClaimId = _ref6[0],
|
||
|
channelClaimsArray = _ref6[1];
|
||
|
|
||
|
if (!longChannelClaimId) {
|
||
|
return resolve(NO_CHANNEL);
|
||
|
}
|
||
|
// 3. format the data for the view, including pagination
|
||
|
var paginatedChannelViewData = returnPaginatedChannelClaims(channelName, longChannelClaimId, channelClaimsArray, page);
|
||
|
// 4. return all the channel information and contents
|
||
|
resolve(paginatedChannelViewData);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
getLocalFileRecord: function getLocalFileRecord(claimId, name) {
|
||
|
return db.File.findOne({ where: { claimId: claimId, name: name } }).then(function (file) {
|
||
|
if (!file) {
|
||
|
return NO_FILE;
|
||
|
}
|
||
|
return file.dataValues;
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 54 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("react-helmet");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 55 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("redux-saga/effects");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 56 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var Path = __webpack_require__(21);
|
||
|
|
||
|
var _require = __webpack_require__(89),
|
||
|
getSubDirectoryNames = _require.getSubDirectoryNames;
|
||
|
|
||
|
var thisFolder = Path.resolve(__dirname, 'client/pages/');
|
||
|
|
||
|
var modules = {};
|
||
|
|
||
|
getSubDirectoryNames(thisFolder).forEach(function (name) {
|
||
|
modules[name] = __webpack_require__(190)("./" + name).default;
|
||
|
});
|
||
|
|
||
|
module.exports = modules;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 57 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var Path = __webpack_require__(21);
|
||
|
|
||
|
var _require = __webpack_require__(89),
|
||
|
getSubDirectoryNames = _require.getSubDirectoryNames;
|
||
|
|
||
|
var thisFolder = Path.resolve(__dirname, 'client/components/');
|
||
|
var modules = {};
|
||
|
|
||
|
getSubDirectoryNames(thisFolder).forEach(function (name) {
|
||
|
modules[name] = __webpack_require__(191)("./" + name).default;
|
||
|
});
|
||
|
|
||
|
module.exports = modules;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 58 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var Path = __webpack_require__(21);
|
||
|
|
||
|
var _require = __webpack_require__(89),
|
||
|
getSubDirectoryNames = _require.getSubDirectoryNames;
|
||
|
|
||
|
var thisFolder = Path.resolve(__dirname, 'client/containers/');
|
||
|
|
||
|
var modules = {};
|
||
|
|
||
|
getSubDirectoryNames(thisFolder).forEach(function (name) {
|
||
|
modules[name] = __webpack_require__(192)("./" + name).default;
|
||
|
});
|
||
|
|
||
|
module.exports = modules;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 59 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var passport = __webpack_require__(125);
|
||
|
var localLoginStrategy = __webpack_require__(126);
|
||
|
var localSignupStrategy = __webpack_require__(134);
|
||
|
|
||
|
var _require = __webpack_require__(138),
|
||
|
serializeSpeechUser = _require.serializeSpeechUser,
|
||
|
deserializeSpeechUser = _require.deserializeSpeechUser;
|
||
|
|
||
|
passport.deserializeUser(deserializeSpeechUser);
|
||
|
passport.serializeUser(serializeSpeechUser);
|
||
|
passport.use('local-login', localLoginStrategy);
|
||
|
passport.use('local-signup', localSignupStrategy);
|
||
|
|
||
|
module.exports = passport;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 60 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _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"); } }; }();
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
var db = __webpack_require__(5);
|
||
|
var lbryApi = __webpack_require__(22);
|
||
|
var publishHelpers = __webpack_require__(61);
|
||
|
|
||
|
var _require = __webpack_require__(4),
|
||
|
_require$publishing = _require.publishing,
|
||
|
primaryClaimAddress = _require$publishing.primaryClaimAddress,
|
||
|
additionalClaimAddresses = _require$publishing.additionalClaimAddresses;
|
||
|
|
||
|
var Sequelize = __webpack_require__(93);
|
||
|
var Op = Sequelize.Op;
|
||
|
|
||
|
module.exports = {
|
||
|
publish: function publish(publishParams, fileName, fileType) {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
var publishResults = void 0,
|
||
|
certificateId = void 0,
|
||
|
channelName = void 0;
|
||
|
// publish the file
|
||
|
return lbryApi.publishClaim(publishParams).then(function (tx) {
|
||
|
logger.info('Successfully published ' + publishParams.name + ' ' + fileName, tx);
|
||
|
publishResults = tx;
|
||
|
// get the channel information
|
||
|
if (publishParams.channel_name) {
|
||
|
logger.debug('this claim was published in channel: ' + publishParams.channel_name);
|
||
|
return db.Channel.findOne({
|
||
|
where: {
|
||
|
channelName: publishParams.channel_name
|
||
|
}
|
||
|
});
|
||
|
} else {
|
||
|
logger.debug('this claim was not published in a channel');
|
||
|
return null;
|
||
|
}
|
||
|
}).then(function (channel) {
|
||
|
// set channel information
|
||
|
certificateId = null;
|
||
|
channelName = null;
|
||
|
if (channel) {
|
||
|
certificateId = channel.channelClaimId;
|
||
|
channelName = channel.channelName;
|
||
|
}
|
||
|
logger.debug('certificateId: ' + certificateId);
|
||
|
}).then(function () {
|
||
|
// create the File record
|
||
|
var fileRecord = {
|
||
|
name: publishParams.name,
|
||
|
claimId: publishResults.claim_id,
|
||
|
title: publishParams.metadata.title,
|
||
|
description: publishParams.metadata.description,
|
||
|
address: publishParams.claim_address,
|
||
|
outpoint: publishResults.txid + ':' + publishResults.nout,
|
||
|
height: 0,
|
||
|
fileName: fileName,
|
||
|
filePath: publishParams.file_path,
|
||
|
fileType: fileType,
|
||
|
nsfw: publishParams.metadata.nsfw
|
||
|
};
|
||
|
// create the Claim record
|
||
|
var claimRecord = {
|
||
|
name: publishParams.name,
|
||
|
claimId: publishResults.claim_id,
|
||
|
title: publishParams.metadata.title,
|
||
|
description: publishParams.metadata.description,
|
||
|
address: publishParams.claim_address,
|
||
|
thumbnail: publishParams.metadata.thumbnail,
|
||
|
outpoint: publishResults.txid + ':' + publishResults.nout,
|
||
|
height: 0,
|
||
|
contentType: fileType,
|
||
|
nsfw: publishParams.metadata.nsfw,
|
||
|
amount: publishParams.bid,
|
||
|
certificateId: certificateId,
|
||
|
channelName: channelName
|
||
|
};
|
||
|
// upsert criteria
|
||
|
var upsertCriteria = {
|
||
|
name: publishParams.name,
|
||
|
claimId: publishResults.claim_id
|
||
|
};
|
||
|
// upsert the records
|
||
|
return Promise.all([db.upsert(db.File, fileRecord, upsertCriteria, 'File'), db.upsert(db.Claim, claimRecord, upsertCriteria, 'Claim')]);
|
||
|
}).then(function (_ref) {
|
||
|
var _ref2 = _slicedToArray(_ref, 2),
|
||
|
file = _ref2[0],
|
||
|
claim = _ref2[1];
|
||
|
|
||
|
logger.debug('File and Claim records successfully created');
|
||
|
return Promise.all([file.setClaim(claim), claim.setFile(file)]);
|
||
|
}).then(function () {
|
||
|
logger.debug('File and Claim records successfully associated');
|
||
|
resolve(publishResults); // resolve the promise with the result from lbryApi.publishClaim;
|
||
|
}).catch(function (error) {
|
||
|
logger.error('PUBLISH ERROR', error);
|
||
|
publishHelpers.deleteTemporaryFile(publishParams.file_path); // delete the local file
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
claimNameIsAvailable: function claimNameIsAvailable(name) {
|
||
|
var claimAddresses = additionalClaimAddresses || [];
|
||
|
claimAddresses.push(primaryClaimAddress);
|
||
|
// find any records where the name is used
|
||
|
return db.Claim.findAll({
|
||
|
attributes: ['address'],
|
||
|
where: {
|
||
|
name: name,
|
||
|
address: _defineProperty({}, Op.or, claimAddresses)
|
||
|
}
|
||
|
}).then(function (result) {
|
||
|
if (result.length >= 1) {
|
||
|
throw new Error('That claim is already in use');
|
||
|
};
|
||
|
return name;
|
||
|
}).catch(function (error) {
|
||
|
throw error;
|
||
|
});
|
||
|
},
|
||
|
checkChannelAvailability: function checkChannelAvailability(name) {
|
||
|
return db.Channel.findAll({
|
||
|
where: { channelName: name }
|
||
|
}).then(function (result) {
|
||
|
if (result.length >= 1) {
|
||
|
throw new Error('That channel has already been claimed');
|
||
|
}
|
||
|
return name;
|
||
|
}).catch(function (error) {
|
||
|
throw error;
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 61 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
var fs = __webpack_require__(94);
|
||
|
|
||
|
var _require = __webpack_require__(4),
|
||
|
details = _require.details,
|
||
|
publishing = _require.publishing;
|
||
|
|
||
|
module.exports = {
|
||
|
parsePublishApiRequestBody: function parsePublishApiRequestBody(_ref) {
|
||
|
var name = _ref.name,
|
||
|
nsfw = _ref.nsfw,
|
||
|
license = _ref.license,
|
||
|
title = _ref.title,
|
||
|
description = _ref.description,
|
||
|
thumbnail = _ref.thumbnail;
|
||
|
|
||
|
// validate name
|
||
|
if (!name) {
|
||
|
throw new Error('no name field found in request');
|
||
|
}
|
||
|
var invalidNameCharacters = /[^A-Za-z0-9,-]/.exec(name);
|
||
|
if (invalidNameCharacters) {
|
||
|
throw new Error('The claim name you provided is not allowed. Only the following characters are allowed: A-Z, a-z, 0-9, and "-"');
|
||
|
}
|
||
|
// optional parameters
|
||
|
nsfw = nsfw === 'true';
|
||
|
license = license || null;
|
||
|
title = title || null;
|
||
|
description = description || null;
|
||
|
thumbnail = thumbnail || null;
|
||
|
// return results
|
||
|
return {
|
||
|
name: name,
|
||
|
nsfw: nsfw,
|
||
|
license: license,
|
||
|
title: title,
|
||
|
description: description,
|
||
|
thumbnail: thumbnail
|
||
|
};
|
||
|
},
|
||
|
parsePublishApiRequestFiles: function parsePublishApiRequestFiles(_ref2) {
|
||
|
var file = _ref2.file,
|
||
|
thumbnail = _ref2.thumbnail;
|
||
|
|
||
|
// make sure a file was provided
|
||
|
if (!file) {
|
||
|
throw new Error('no file with key of [file] found in request');
|
||
|
}
|
||
|
if (!file.path) {
|
||
|
throw new Error('no file path found');
|
||
|
}
|
||
|
if (!file.type) {
|
||
|
throw new Error('no file type found');
|
||
|
}
|
||
|
if (!file.size) {
|
||
|
throw new Error('no file type found');
|
||
|
}
|
||
|
// validate the file name
|
||
|
if (/'/.test(file.name)) {
|
||
|
throw new Error('apostrophes are not allowed in the file name');
|
||
|
}
|
||
|
// validate the file
|
||
|
module.exports.validateFileTypeAndSize(file);
|
||
|
// return results
|
||
|
return {
|
||
|
fileName: file.name,
|
||
|
filePath: file.path,
|
||
|
fileType: file.type,
|
||
|
thumbnailFileName: thumbnail ? thumbnail.name : null,
|
||
|
thumbnailFilePath: thumbnail ? thumbnail.path : null,
|
||
|
thumbnailFileType: thumbnail ? thumbnail.type : null
|
||
|
};
|
||
|
},
|
||
|
validateFileTypeAndSize: function validateFileTypeAndSize(file) {
|
||
|
// check file type and size
|
||
|
switch (file.type) {
|
||
|
case 'image/jpeg':
|
||
|
case 'image/jpg':
|
||
|
case 'image/png':
|
||
|
if (file.size > 10000000) {
|
||
|
logger.debug('publish > file validation > .jpeg/.jpg/.png was too big');
|
||
|
throw new Error('Sorry, images are limited to 10 megabytes.');
|
||
|
}
|
||
|
break;
|
||
|
case 'image/gif':
|
||
|
if (file.size > 50000000) {
|
||
|
logger.debug('publish > file validation > .gif was too big');
|
||
|
throw new Error('Sorry, .gifs are limited to 50 megabytes.');
|
||
|
}
|
||
|
break;
|
||
|
case 'video/mp4':
|
||
|
if (file.size > 50000000) {
|
||
|
logger.debug('publish > file validation > .mp4 was too big');
|
||
|
throw new Error('Sorry, videos are limited to 50 megabytes.');
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
logger.debug('publish > file validation > unrecognized file type');
|
||
|
throw new Error('The ' + file.type + ' content type is not supported. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');
|
||
|
}
|
||
|
return file;
|
||
|
},
|
||
|
createBasicPublishParams: function createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail) {
|
||
|
logger.debug('Creating Publish Parameters');
|
||
|
// provide defaults for title
|
||
|
if (title === null || title.trim() === '') {
|
||
|
title = name;
|
||
|
}
|
||
|
// provide default for description
|
||
|
if (description === null || description.trim() === '') {
|
||
|
description = '';
|
||
|
}
|
||
|
// provide default for license
|
||
|
if (license === null || license.trim() === '') {
|
||
|
license = ' '; // default to empty string
|
||
|
}
|
||
|
// create the publish params
|
||
|
var publishParams = {
|
||
|
name: name,
|
||
|
file_path: filePath,
|
||
|
bid: 0.01,
|
||
|
metadata: {
|
||
|
description: description,
|
||
|
title: title,
|
||
|
author: details.title,
|
||
|
language: 'en',
|
||
|
license: license,
|
||
|
nsfw: nsfw
|
||
|
},
|
||
|
claim_address: publishing.primaryClaimAddress
|
||
|
};
|
||
|
// add thumbnail to channel if video
|
||
|
if (thumbnail) {
|
||
|
publishParams['metadata']['thumbnail'] = thumbnail;
|
||
|
}
|
||
|
return publishParams;
|
||
|
},
|
||
|
createThumbnailPublishParams: function createThumbnailPublishParams(thumbnailFilePath, claimName, license, nsfw) {
|
||
|
if (!thumbnailFilePath) {
|
||
|
return;
|
||
|
}
|
||
|
logger.debug('Creating Thumbnail Publish Parameters');
|
||
|
// create the publish params
|
||
|
return {
|
||
|
name: claimName + '-thumb',
|
||
|
file_path: thumbnailFilePath,
|
||
|
bid: 0.01,
|
||
|
metadata: {
|
||
|
title: claimName + ' thumbnail',
|
||
|
description: 'a thumbnail for ' + claimName,
|
||
|
author: details.title,
|
||
|
language: 'en',
|
||
|
license: license,
|
||
|
nsfw: nsfw
|
||
|
},
|
||
|
claim_address: publishing.primaryClaimAddress,
|
||
|
channel_name: publishing.thumbnailChannel,
|
||
|
channel_id: publishing.thumbnailChannelId
|
||
|
};
|
||
|
},
|
||
|
deleteTemporaryFile: function deleteTemporaryFile(filePath) {
|
||
|
fs.unlink(filePath, function (err) {
|
||
|
if (err) {
|
||
|
logger.error('error deleting temporary file ' + filePath);
|
||
|
throw err;
|
||
|
}
|
||
|
logger.debug('successfully deleted ' + filePath);
|
||
|
});
|
||
|
},
|
||
|
addGetResultsToFileData: function addGetResultsToFileData(fileInfo, getResult) {
|
||
|
fileInfo.fileName = getResult.file_name;
|
||
|
fileInfo.filePath = getResult.download_path;
|
||
|
return fileInfo;
|
||
|
},
|
||
|
createFileData: function createFileData(_ref3) {
|
||
|
var name = _ref3.name,
|
||
|
claimId = _ref3.claimId,
|
||
|
outpoint = _ref3.outpoint,
|
||
|
height = _ref3.height,
|
||
|
address = _ref3.address,
|
||
|
nsfw = _ref3.nsfw,
|
||
|
contentType = _ref3.contentType;
|
||
|
|
||
|
return {
|
||
|
name: name,
|
||
|
claimId: claimId,
|
||
|
outpoint: outpoint,
|
||
|
height: height,
|
||
|
address: address,
|
||
|
fileName: '',
|
||
|
filePath: '',
|
||
|
fileType: contentType,
|
||
|
nsfw: nsfw
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 62 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("redux");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 63 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
var _SEO = __webpack_require__(9);
|
||
|
|
||
|
var _SEO2 = _interopRequireDefault(_SEO);
|
||
|
|
||
|
var _NavBar = __webpack_require__(7);
|
||
|
|
||
|
var _NavBar2 = _interopRequireDefault(_NavBar);
|
||
|
|
||
|
var _ChannelLoginForm = __webpack_require__(17);
|
||
|
|
||
|
var _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);
|
||
|
|
||
|
var _ChannelCreateForm = __webpack_require__(18);
|
||
|
|
||
|
var _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var LoginPage = function (_React$Component) {
|
||
|
_inherits(LoginPage, _React$Component);
|
||
|
|
||
|
function LoginPage() {
|
||
|
_classCallCheck(this, LoginPage);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (LoginPage.__proto__ || Object.getPrototypeOf(LoginPage)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(LoginPage, [{
|
||
|
key: 'componentWillReceiveProps',
|
||
|
value: function componentWillReceiveProps(newProps) {
|
||
|
// re-route the user to the homepage if the user is logged in
|
||
|
if (newProps.loggedInChannelName !== this.props.loggedInChannelName) {
|
||
|
this.props.history.push('/');
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(_SEO2.default, { pageTitle: 'Login', pageUri: 'login' }),
|
||
|
_react2.default.createElement(_NavBar2.default, null),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--5 column--med-10 align-content-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--8 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'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 ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: '/@catalonia2017:43dcf47163caa21d8404d9fe9b30f78ef3e146a8' },
|
||
|
'documenting important events'
|
||
|
),
|
||
|
', or making a public repository for ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: '/@catGifs' },
|
||
|
'cat gifs'
|
||
|
),
|
||
|
' (password: \'1234\'), try creating a channel for it!'
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--5 column--med-10 align-content-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--8 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'h3',
|
||
|
{ className: 'h3--no-bottom' },
|
||
|
'Log in to an existing channel:'
|
||
|
),
|
||
|
_react2.default.createElement(_ChannelLoginForm2.default, null),
|
||
|
_react2.default.createElement(
|
||
|
'h3',
|
||
|
{ className: 'h3--no-bottom' },
|
||
|
'Create a brand new channel:'
|
||
|
),
|
||
|
_react2.default.createElement(_ChannelCreateForm2.default, null)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return LoginPage;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = (0, _reactRouterDom.withRouter)(LoginPage);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 64 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _reactHelmet = __webpack_require__(54);
|
||
|
|
||
|
var _reactHelmet2 = _interopRequireDefault(_reactHelmet);
|
||
|
|
||
|
var _propTypes = __webpack_require__(15);
|
||
|
|
||
|
var _propTypes2 = _interopRequireDefault(_propTypes);
|
||
|
|
||
|
var _pageTitle = __webpack_require__(170);
|
||
|
|
||
|
var _metaTags = __webpack_require__(171);
|
||
|
|
||
|
var _canonicalLink = __webpack_require__(172);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var SEO = function (_React$Component) {
|
||
|
_inherits(SEO, _React$Component);
|
||
|
|
||
|
function SEO() {
|
||
|
_classCallCheck(this, SEO);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (SEO.__proto__ || Object.getPrototypeOf(SEO)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(SEO, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
// props from state
|
||
|
var _props = this.props,
|
||
|
defaultDescription = _props.defaultDescription,
|
||
|
defaultThumbnail = _props.defaultThumbnail,
|
||
|
siteDescription = _props.siteDescription,
|
||
|
siteHost = _props.siteHost,
|
||
|
siteTitle = _props.siteTitle,
|
||
|
siteTwitter = _props.siteTwitter;
|
||
|
// props from parent
|
||
|
|
||
|
var _props2 = this.props,
|
||
|
asset = _props2.asset,
|
||
|
channel = _props2.channel,
|
||
|
pageUri = _props2.pageUri;
|
||
|
var pageTitle = this.props.pageTitle;
|
||
|
// create page title, tags, and canonical link
|
||
|
|
||
|
pageTitle = (0, _pageTitle.createPageTitle)(siteTitle, pageTitle);
|
||
|
var metaTags = (0, _metaTags.createMetaTags)(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail);
|
||
|
var canonicalLink = (0, _canonicalLink.createCanonicalLink)(asset, channel, pageUri, siteHost);
|
||
|
// render results
|
||
|
return _react2.default.createElement(_reactHelmet2.default, {
|
||
|
title: pageTitle,
|
||
|
meta: metaTags,
|
||
|
link: [{ rel: 'canonical', href: canonicalLink }]
|
||
|
});
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return SEO;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
SEO.propTypes = {
|
||
|
pageTitle: _propTypes2.default.string,
|
||
|
pageUri: _propTypes2.default.string,
|
||
|
channel: _propTypes2.default.object,
|
||
|
asset: _propTypes2.default.object
|
||
|
};
|
||
|
|
||
|
exports.default = SEO;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 65 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.updateLoggedInChannel = updateLoggedInChannel;
|
||
|
|
||
|
var _channel_action_types = __webpack_require__(100);
|
||
|
|
||
|
var actions = _interopRequireWildcard(_channel_action_types);
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
// export action creators
|
||
|
|
||
|
function updateLoggedInChannel(name, shortId, longId) {
|
||
|
return {
|
||
|
type: actions.CHANNEL_UPDATE,
|
||
|
data: {
|
||
|
name: name,
|
||
|
shortId: shortId,
|
||
|
longId: longId
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 66 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
var _Logo = __webpack_require__(25);
|
||
|
|
||
|
var _Logo2 = _interopRequireDefault(_Logo);
|
||
|
|
||
|
var _NavBarChannelOptionsDropdown = __webpack_require__(26);
|
||
|
|
||
|
var _NavBarChannelOptionsDropdown2 = _interopRequireDefault(_NavBarChannelOptionsDropdown);
|
||
|
|
||
|
var _request = __webpack_require__(16);
|
||
|
|
||
|
var _request2 = _interopRequireDefault(_request);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var VIEW = 'VIEW';
|
||
|
var LOGOUT = 'LOGOUT';
|
||
|
|
||
|
var NavBar = function (_React$Component) {
|
||
|
_inherits(NavBar, _React$Component);
|
||
|
|
||
|
function NavBar(props) {
|
||
|
_classCallCheck(this, NavBar);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (NavBar.__proto__ || Object.getPrototypeOf(NavBar)).call(this, props));
|
||
|
|
||
|
_this.checkForLoggedInUser = _this.checkForLoggedInUser.bind(_this);
|
||
|
_this.logoutUser = _this.logoutUser.bind(_this);
|
||
|
_this.handleSelection = _this.handleSelection.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(NavBar, [{
|
||
|
key: 'componentDidMount',
|
||
|
value: function componentDidMount() {
|
||
|
// check to see if the user is already logged in
|
||
|
this.checkForLoggedInUser();
|
||
|
}
|
||
|
}, {
|
||
|
key: 'checkForLoggedInUser',
|
||
|
value: function checkForLoggedInUser() {
|
||
|
var _this2 = this;
|
||
|
|
||
|
var params = { credentials: 'include' };
|
||
|
(0, _request2.default)('/user', params).then(function (_ref) {
|
||
|
var data = _ref.data;
|
||
|
|
||
|
_this2.props.onChannelLogin(data.channelName, data.shortChannelId, data.channelClaimId);
|
||
|
}).catch(function (error) {
|
||
|
console.log('/user error:', error.message);
|
||
|
});
|
||
|
}
|
||
|
}, {
|
||
|
key: 'logoutUser',
|
||
|
value: function logoutUser() {
|
||
|
var _this3 = this;
|
||
|
|
||
|
var params = { credentials: 'include' };
|
||
|
(0, _request2.default)('/logout', params).then(function () {
|
||
|
_this3.props.onChannelLogout();
|
||
|
}).catch(function (error) {
|
||
|
console.log('/logout error', error.message);
|
||
|
});
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleSelection',
|
||
|
value: function handleSelection(event) {
|
||
|
var value = event.target.selectedOptions[0].value;
|
||
|
switch (value) {
|
||
|
case LOGOUT:
|
||
|
this.logoutUser();
|
||
|
break;
|
||
|
case VIEW:
|
||
|
// redirect to channel page
|
||
|
this.props.history.push('/' + this.props.channelName + ':' + this.props.channelLongId);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var siteDescription = this.props.siteDescription;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--wide nav-bar' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded row--short flex-container--row flex-container--space-between-center' },
|
||
|
_react2.default.createElement(_Logo2.default, null),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'nav-bar--center' },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'nav-bar-tagline' },
|
||
|
siteDescription
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'nav-bar--right' },
|
||
|
_react2.default.createElement(
|
||
|
_reactRouterDom.NavLink,
|
||
|
{ className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/', exact: true },
|
||
|
'Publish'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
_reactRouterDom.NavLink,
|
||
|
{ className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/about' },
|
||
|
'About'
|
||
|
),
|
||
|
this.props.channelName ? _react2.default.createElement(_NavBarChannelOptionsDropdown2.default, {
|
||
|
channelName: this.props.channelName,
|
||
|
handleSelection: this.handleSelection,
|
||
|
defaultSelection: this.props.channelName,
|
||
|
VIEW: VIEW,
|
||
|
LOGOUT: LOGOUT
|
||
|
}) : _react2.default.createElement(
|
||
|
_reactRouterDom.NavLink,
|
||
|
{ id: 'nav-bar-login-link', className: 'nav-bar-link link--nav', activeClassName: 'link--nav-active', to: '/login' },
|
||
|
'Channel'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return NavBar;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
exports.default = (0, _reactRouterDom.withRouter)(NavBar);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 67 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _request = __webpack_require__(16);
|
||
|
|
||
|
var _request2 = _interopRequireDefault(_request);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ChannelLoginForm = function (_React$Component) {
|
||
|
_inherits(ChannelLoginForm, _React$Component);
|
||
|
|
||
|
function ChannelLoginForm(props) {
|
||
|
_classCallCheck(this, ChannelLoginForm);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (ChannelLoginForm.__proto__ || Object.getPrototypeOf(ChannelLoginForm)).call(this, props));
|
||
|
|
||
|
_this.state = {
|
||
|
error: null,
|
||
|
name: '',
|
||
|
password: ''
|
||
|
};
|
||
|
_this.handleInput = _this.handleInput.bind(_this);
|
||
|
_this.loginToChannel = _this.loginToChannel.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(ChannelLoginForm, [{
|
||
|
key: 'handleInput',
|
||
|
value: function handleInput(event) {
|
||
|
var name = event.target.name;
|
||
|
var value = event.target.value;
|
||
|
this.setState(_defineProperty({}, name, value));
|
||
|
}
|
||
|
}, {
|
||
|
key: 'loginToChannel',
|
||
|
value: function loginToChannel(event) {
|
||
|
var _this2 = this;
|
||
|
|
||
|
event.preventDefault();
|
||
|
var params = {
|
||
|
method: 'POST',
|
||
|
body: JSON.stringify({ username: this.state.name, password: this.state.password }),
|
||
|
headers: new Headers({
|
||
|
'Content-Type': 'application/json'
|
||
|
}),
|
||
|
credentials: 'include'
|
||
|
};
|
||
|
(0, _request2.default)('login', params).then(function (_ref) {
|
||
|
var success = _ref.success,
|
||
|
channelName = _ref.channelName,
|
||
|
shortChannelId = _ref.shortChannelId,
|
||
|
channelClaimId = _ref.channelClaimId,
|
||
|
message = _ref.message;
|
||
|
|
||
|
if (success) {
|
||
|
_this2.props.onChannelLogin(channelName, shortChannelId, channelClaimId);
|
||
|
} else {
|
||
|
_this2.setState({ 'error': message });
|
||
|
};
|
||
|
}).catch(function (error) {
|
||
|
if (error.message) {
|
||
|
_this2.setState({ 'error': error.message });
|
||
|
} else {
|
||
|
_this2.setState({ 'error': error });
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement(
|
||
|
'form',
|
||
|
{ id: 'channel-login-form' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--wide row--short' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--3 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ className: 'label', htmlFor: 'channel-login-name-input' },
|
||
|
'Name:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--6 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'input-text--primary flex-container--row flex-container--left-bottom' },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
null,
|
||
|
'@'
|
||
|
),
|
||
|
_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 })
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--wide row--short' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--3 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ className: 'label', htmlFor: 'channel-login-password-input' },
|
||
|
'Password:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--6 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'input-text--primary' },
|
||
|
_react2.default.createElement('input', { type: 'password', id: 'channel-login-password-input', name: 'password', className: 'input-text', placeholder: '', value: this.state.channelPassword, onChange: this.handleInput })
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
this.state.error ? _react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message--failure' },
|
||
|
this.state.error
|
||
|
) : _react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message' },
|
||
|
'Enter the name and password for your channel'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--wide' },
|
||
|
_react2.default.createElement(
|
||
|
'button',
|
||
|
{ className: 'button--primary', onClick: this.loginToChannel },
|
||
|
'Authenticate'
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ChannelLoginForm;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
exports.default = ChannelLoginForm;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 68 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _ProgressBar = __webpack_require__(10);
|
||
|
|
||
|
var _ProgressBar2 = _interopRequireDefault(_ProgressBar);
|
||
|
|
||
|
var _request = __webpack_require__(16);
|
||
|
|
||
|
var _request2 = _interopRequireDefault(_request);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ChannelCreateForm = function (_React$Component) {
|
||
|
_inherits(ChannelCreateForm, _React$Component);
|
||
|
|
||
|
function ChannelCreateForm(props) {
|
||
|
_classCallCheck(this, ChannelCreateForm);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (ChannelCreateForm.__proto__ || Object.getPrototypeOf(ChannelCreateForm)).call(this, props));
|
||
|
|
||
|
_this.state = {
|
||
|
error: null,
|
||
|
channel: '',
|
||
|
password: '',
|
||
|
status: null
|
||
|
};
|
||
|
_this.handleChannelInput = _this.handleChannelInput.bind(_this);
|
||
|
_this.handleInput = _this.handleInput.bind(_this);
|
||
|
_this.createChannel = _this.createChannel.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(ChannelCreateForm, [{
|
||
|
key: 'cleanseChannelInput',
|
||
|
value: function cleanseChannelInput(input) {
|
||
|
input = input.replace(/\s+/g, '-'); // replace spaces with dashes
|
||
|
input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'
|
||
|
return input;
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleChannelInput',
|
||
|
value: function handleChannelInput(event) {
|
||
|
var value = event.target.value;
|
||
|
value = this.cleanseChannelInput(value);
|
||
|
this.setState({ channel: value });
|
||
|
if (value) {
|
||
|
this.updateIsChannelAvailable(value);
|
||
|
} else {
|
||
|
this.setState({ error: 'Please enter a channel name' });
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleInput',
|
||
|
value: function handleInput(event) {
|
||
|
var name = event.target.name;
|
||
|
var value = event.target.value;
|
||
|
this.setState(_defineProperty({}, name, value));
|
||
|
}
|
||
|
}, {
|
||
|
key: 'updateIsChannelAvailable',
|
||
|
value: function updateIsChannelAvailable(channel) {
|
||
|
var _this2 = this;
|
||
|
|
||
|
var channelWithAtSymbol = '@' + channel;
|
||
|
(0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol).then(function () {
|
||
|
_this2.setState({ 'error': null });
|
||
|
}).catch(function (error) {
|
||
|
_this2.setState({ 'error': error.message });
|
||
|
});
|
||
|
}
|
||
|
}, {
|
||
|
key: 'checkIsChannelAvailable',
|
||
|
value: function checkIsChannelAvailable(channel) {
|
||
|
var channelWithAtSymbol = '@' + channel;
|
||
|
return (0, _request2.default)('/api/channel/availability/' + channelWithAtSymbol);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'checkIsPasswordProvided',
|
||
|
value: function checkIsPasswordProvided(password) {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
if (!password || password.length < 1) {
|
||
|
return reject(new Error('Please provide a password'));
|
||
|
}
|
||
|
resolve();
|
||
|
});
|
||
|
}
|
||
|
}, {
|
||
|
key: 'makePublishChannelRequest',
|
||
|
value: function makePublishChannelRequest(username, password) {
|
||
|
var params = {
|
||
|
method: 'POST',
|
||
|
body: JSON.stringify({ username: username, password: password }),
|
||
|
headers: new Headers({
|
||
|
'Content-Type': 'application/json'
|
||
|
}),
|
||
|
credentials: 'include'
|
||
|
};
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
(0, _request2.default)('/signup', params).then(function (result) {
|
||
|
return resolve(result);
|
||
|
}).catch(function (error) {
|
||
|
reject(new Error('Unfortunately, we encountered an error while creating your channel. Please let us know in Discord! ' + error.message));
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
}, {
|
||
|
key: 'createChannel',
|
||
|
value: function createChannel(event) {
|
||
|
var _this3 = this;
|
||
|
|
||
|
event.preventDefault();
|
||
|
this.checkIsPasswordProvided(this.state.password).then(function () {
|
||
|
return _this3.checkIsChannelAvailable(_this3.state.channel);
|
||
|
}).then(function () {
|
||
|
_this3.setState({ status: 'We are publishing your new channel. Sit tight...' });
|
||
|
return _this3.makePublishChannelRequest(_this3.state.channel, _this3.state.password);
|
||
|
}).then(function (result) {
|
||
|
_this3.setState({ status: null });
|
||
|
_this3.props.onChannelLogin(result.channelName, result.shortChannelId, result.channelClaimId);
|
||
|
}).catch(function (error) {
|
||
|
if (error.message) {
|
||
|
_this3.setState({ 'error': error.message, status: null });
|
||
|
} else {
|
||
|
_this3.setState({ 'error': error, status: null });
|
||
|
};
|
||
|
});
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
!this.state.status ? _react2.default.createElement(
|
||
|
'form',
|
||
|
{ id: 'publish-channel-form' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--wide row--short' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--3 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ className: 'label', htmlFor: 'new-channel-name' },
|
||
|
'Name:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--6 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'input-text--primary flex-container--row flex-container--left-bottom span--relative' },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
null,
|
||
|
'@'
|
||
|
),
|
||
|
_react2.default.createElement('input', { type: 'text', name: 'channel', id: 'new-channel-name', className: 'input-text', placeholder: 'exampleChannelName', value: this.state.channel, onChange: this.handleChannelInput }),
|
||
|
this.state.channel && !this.state.error && _react2.default.createElement(
|
||
|
'span',
|
||
|
{ id: 'input-success-channel-name', className: 'info-message--success span--absolute' },
|
||
|
'\u2713'
|
||
|
),
|
||
|
this.state.error && _react2.default.createElement(
|
||
|
'span',
|
||
|
{ id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },
|
||
|
'\u2716'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--wide row--short' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--3 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ className: 'label', htmlFor: 'new-channel-password' },
|
||
|
'Password:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--6 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'input-text--primary' },
|
||
|
_react2.default.createElement('input', { type: 'password', name: 'password', id: 'new-channel-password', className: 'input-text', placeholder: '', value: this.state.password, onChange: this.handleInput })
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
this.state.error ? _react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message--failure' },
|
||
|
this.state.error
|
||
|
) : _react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message' },
|
||
|
'Choose a name and password for your channel'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--wide' },
|
||
|
_react2.default.createElement(
|
||
|
'button',
|
||
|
{ className: 'button--primary', onClick: this.createChannel },
|
||
|
'Create Channel'
|
||
|
)
|
||
|
)
|
||
|
) : _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'fine-print' },
|
||
|
this.state.status
|
||
|
),
|
||
|
_react2.default.createElement(_ProgressBar2.default, { size: 12 })
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ChannelCreateForm;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
exports.default = ChannelCreateForm;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 69 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _ErrorPage = __webpack_require__(12);
|
||
|
|
||
|
var _ErrorPage2 = _interopRequireDefault(_ErrorPage);
|
||
|
|
||
|
var _ShowAssetLite = __webpack_require__(30);
|
||
|
|
||
|
var _ShowAssetLite2 = _interopRequireDefault(_ShowAssetLite);
|
||
|
|
||
|
var _ShowAssetDetails = __webpack_require__(32);
|
||
|
|
||
|
var _ShowAssetDetails2 = _interopRequireDefault(_ShowAssetDetails);
|
||
|
|
||
|
var _ShowChannel = __webpack_require__(35);
|
||
|
|
||
|
var _ShowChannel2 = _interopRequireDefault(_ShowChannel);
|
||
|
|
||
|
var _show_request_types = __webpack_require__(103);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ShowPage = function (_React$Component) {
|
||
|
_inherits(ShowPage, _React$Component);
|
||
|
|
||
|
function ShowPage() {
|
||
|
_classCallCheck(this, ShowPage);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (ShowPage.__proto__ || Object.getPrototypeOf(ShowPage)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(ShowPage, [{
|
||
|
key: 'componentDidMount',
|
||
|
value: function componentDidMount() {
|
||
|
this.props.onHandleShowPageUri(this.props.match.params);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'componentWillReceiveProps',
|
||
|
value: function componentWillReceiveProps(nextProps) {
|
||
|
if (nextProps.match.params !== this.props.match.params) {
|
||
|
this.props.onHandleShowPageUri(nextProps.match.params);
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var _props = this.props,
|
||
|
error = _props.error,
|
||
|
requestType = _props.requestType;
|
||
|
|
||
|
if (error) {
|
||
|
return _react2.default.createElement(_ErrorPage2.default, { error: error });
|
||
|
}
|
||
|
switch (requestType) {
|
||
|
case _show_request_types.CHANNEL:
|
||
|
return _react2.default.createElement(_ShowChannel2.default, null);
|
||
|
case _show_request_types.ASSET_LITE:
|
||
|
return _react2.default.createElement(_ShowAssetLite2.default, null);
|
||
|
case _show_request_types.ASSET_DETAILS:
|
||
|
return _react2.default.createElement(_ShowAssetDetails2.default, null);
|
||
|
default:
|
||
|
return _react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'loading...'
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ShowPage;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = ShowPage;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 70 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _SEO = __webpack_require__(9);
|
||
|
|
||
|
var _SEO2 = _interopRequireDefault(_SEO);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
var _AssetDisplay = __webpack_require__(19);
|
||
|
|
||
|
var _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ShowLite = function (_React$Component) {
|
||
|
_inherits(ShowLite, _React$Component);
|
||
|
|
||
|
function ShowLite() {
|
||
|
_classCallCheck(this, ShowLite);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (ShowLite.__proto__ || Object.getPrototypeOf(ShowLite)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(ShowLite, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var asset = this.props.asset;
|
||
|
|
||
|
if (asset) {
|
||
|
var _asset$claimData = asset.claimData,
|
||
|
name = _asset$claimData.name,
|
||
|
claimId = _asset$claimData.claimId;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--tall flex-container--column flex-container--center-center show-lite-container' },
|
||
|
_react2.default.createElement(_SEO2.default, { pageTitle: name, asset: asset }),
|
||
|
_react2.default.createElement(_AssetDisplay2.default, null),
|
||
|
_react2.default.createElement(
|
||
|
_reactRouterDom.Link,
|
||
|
{ id: 'asset-boilerpate', className: 'link--primary fine-print', to: '/' + claimId + '/' + name },
|
||
|
'hosted via Spee.ch'
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--tall row--padded flex-container--column flex-container--center-center' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'loading asset data...'
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ShowLite;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = ShowLite;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 71 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _ProgressBar = __webpack_require__(10);
|
||
|
|
||
|
var _ProgressBar2 = _interopRequireDefault(_ProgressBar);
|
||
|
|
||
|
var _asset_display_states = __webpack_require__(101);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var AssetDisplay = function (_React$Component) {
|
||
|
_inherits(AssetDisplay, _React$Component);
|
||
|
|
||
|
function AssetDisplay() {
|
||
|
_classCallCheck(this, AssetDisplay);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (AssetDisplay.__proto__ || Object.getPrototypeOf(AssetDisplay)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(AssetDisplay, [{
|
||
|
key: 'componentDidMount',
|
||
|
value: function componentDidMount() {
|
||
|
var _props$asset$claimDat = this.props.asset.claimData,
|
||
|
name = _props$asset$claimDat.name,
|
||
|
claimId = _props$asset$claimDat.claimId;
|
||
|
|
||
|
this.props.onFileRequest(name, claimId);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var _props = this.props,
|
||
|
status = _props.status,
|
||
|
error = _props.error,
|
||
|
_props$asset$claimDat2 = _props.asset.claimData,
|
||
|
name = _props$asset$claimDat2.name,
|
||
|
claimId = _props$asset$claimDat2.claimId,
|
||
|
contentType = _props$asset$claimDat2.contentType,
|
||
|
fileExt = _props$asset$claimDat2.fileExt,
|
||
|
thumbnail = _props$asset$claimDat2.thumbnail;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'asset-display-component' },
|
||
|
status === _asset_display_states.LOCAL_CHECK && _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Checking to see if Spee.ch has your asset locally...'
|
||
|
)
|
||
|
),
|
||
|
status === _asset_display_states.UNAVAILABLE && _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Sit tight, we\'re searching the LBRY blockchain for your asset!'
|
||
|
),
|
||
|
_react2.default.createElement(_ProgressBar2.default, { size: 12 }),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Curious what magic is happening here? ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },
|
||
|
'Learn more.'
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
status === _asset_display_states.ERROR && _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Unfortunately, we couldn\'t download your asset from LBRY. You can help us out by sharing the below error message in the ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },
|
||
|
'LBRY discord'
|
||
|
),
|
||
|
'.'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'i',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ id: 'error-message' },
|
||
|
error
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
status === _asset_display_states.AVAILABLE && function () {
|
||
|
switch (contentType) {
|
||
|
case 'image/jpeg':
|
||
|
case 'image/jpg':
|
||
|
case 'image/png':
|
||
|
return _react2.default.createElement('img', {
|
||
|
className: 'asset',
|
||
|
src: '/' + claimId + '/' + name + '.' + fileExt,
|
||
|
alt: name });
|
||
|
case 'image/gif':
|
||
|
return _react2.default.createElement('img', {
|
||
|
className: 'asset',
|
||
|
src: '/' + claimId + '/' + name + '.' + fileExt,
|
||
|
alt: name
|
||
|
});
|
||
|
case 'video/mp4':
|
||
|
return _react2.default.createElement(
|
||
|
'video',
|
||
|
{ className: 'asset video', controls: true, poster: thumbnail },
|
||
|
_react2.default.createElement('source', {
|
||
|
src: '/' + claimId + '/' + name + '.' + fileExt
|
||
|
}),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Your browser does not support the ',
|
||
|
_react2.default.createElement(
|
||
|
'code',
|
||
|
null,
|
||
|
'video'
|
||
|
),
|
||
|
' element.'
|
||
|
)
|
||
|
);
|
||
|
default:
|
||
|
return _react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Unsupported file type'
|
||
|
);
|
||
|
}
|
||
|
}()
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return AssetDisplay;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = AssetDisplay;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 72 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _SEO = __webpack_require__(9);
|
||
|
|
||
|
var _SEO2 = _interopRequireDefault(_SEO);
|
||
|
|
||
|
var _NavBar = __webpack_require__(7);
|
||
|
|
||
|
var _NavBar2 = _interopRequireDefault(_NavBar);
|
||
|
|
||
|
var _ErrorPage = __webpack_require__(12);
|
||
|
|
||
|
var _ErrorPage2 = _interopRequireDefault(_ErrorPage);
|
||
|
|
||
|
var _AssetTitle = __webpack_require__(33);
|
||
|
|
||
|
var _AssetTitle2 = _interopRequireDefault(_AssetTitle);
|
||
|
|
||
|
var _AssetDisplay = __webpack_require__(19);
|
||
|
|
||
|
var _AssetDisplay2 = _interopRequireDefault(_AssetDisplay);
|
||
|
|
||
|
var _AssetInfo = __webpack_require__(34);
|
||
|
|
||
|
var _AssetInfo2 = _interopRequireDefault(_AssetInfo);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ShowAssetDetails = function (_React$Component) {
|
||
|
_inherits(ShowAssetDetails, _React$Component);
|
||
|
|
||
|
function ShowAssetDetails() {
|
||
|
_classCallCheck(this, ShowAssetDetails);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (ShowAssetDetails.__proto__ || Object.getPrototypeOf(ShowAssetDetails)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(ShowAssetDetails, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var asset = this.props.asset;
|
||
|
|
||
|
if (asset) {
|
||
|
var name = asset.claimData.name;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(_SEO2.default, { pageTitle: name + ' - details', asset: asset }),
|
||
|
_react2.default.createElement(_NavBar2.default, null),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--tall row--padded' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--10' },
|
||
|
_react2.default.createElement(_AssetTitle2.default, null)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--5 column--sml-10 align-content-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded show-details-container' },
|
||
|
_react2.default.createElement(_AssetDisplay2.default, null)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--5 column--sml-10 align-content-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded' },
|
||
|
_react2.default.createElement(_AssetInfo2.default, null)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
};
|
||
|
return _react2.default.createElement(_ErrorPage2.default, { error: 'loading asset data...' });
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ShowAssetDetails;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = ShowAssetDetails;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 73 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var AssetTitle = function AssetTitle(_ref) {
|
||
|
var title = _ref.title;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'text--large' },
|
||
|
title
|
||
|
)
|
||
|
);
|
||
|
};
|
||
|
|
||
|
exports.default = AssetTitle;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 74 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var AssetInfo = function (_React$Component) {
|
||
|
_inherits(AssetInfo, _React$Component);
|
||
|
|
||
|
function AssetInfo(props) {
|
||
|
_classCallCheck(this, AssetInfo);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (AssetInfo.__proto__ || Object.getPrototypeOf(AssetInfo)).call(this, props));
|
||
|
|
||
|
_this.copyToClipboard = _this.copyToClipboard.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(AssetInfo, [{
|
||
|
key: 'copyToClipboard',
|
||
|
value: function copyToClipboard(event) {
|
||
|
var elementToCopy = event.target.dataset.elementtocopy;
|
||
|
var element = document.getElementById(elementToCopy);
|
||
|
element.select();
|
||
|
try {
|
||
|
document.execCommand('copy');
|
||
|
} catch (err) {
|
||
|
this.setState({ error: 'Oops, unable to copy' });
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var _props$asset = this.props.asset,
|
||
|
shortId = _props$asset.shortId,
|
||
|
_props$asset$claimDat = _props$asset.claimData,
|
||
|
channelName = _props$asset$claimDat.channelName,
|
||
|
certificateId = _props$asset$claimDat.certificateId,
|
||
|
description = _props$asset$claimDat.description,
|
||
|
name = _props$asset$claimDat.name,
|
||
|
claimId = _props$asset$claimDat.claimId,
|
||
|
fileExt = _props$asset$claimDat.fileExt,
|
||
|
contentType = _props$asset$claimDat.contentType,
|
||
|
thumbnail = _props$asset$claimDat.thumbnail,
|
||
|
host = _props$asset$claimDat.host;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
channelName && _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded row--wide row--no-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--2 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'text' },
|
||
|
'Channel:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--8 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'text' },
|
||
|
_react2.default.createElement(
|
||
|
_reactRouterDom.Link,
|
||
|
{ to: '/' + channelName + ':' + certificateId },
|
||
|
channelName
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
description && _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded row--wide row--no-top' },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'text' },
|
||
|
description
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'show-share-buttons' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded row--wide row--no-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--2 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'text' },
|
||
|
'Share:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--8 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{
|
||
|
className: 'row row--short row--wide flex-container--row flex-container--space-between-bottom flex-container--wrap' },
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: 'https://twitter.com/intent/tweet?text=' + host + '/' + shortId + '/' + name },
|
||
|
'twitter'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: 'https://www.facebook.com/sharer/sharer.php?u=' + host + '/' + shortId + '/' + name },
|
||
|
'facebook'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: 'http://tumblr.com/widgets/share/tool?canonicalUrl=' + host + '/' + shortId + '/' + name },
|
||
|
'tumblr'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: 'https://www.reddit.com/submit?url=' + host + '/' + shortId + '/' + name + '&title=' + name },
|
||
|
'reddit'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded row--wide row--no-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'show-short-link' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--2 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'text' },
|
||
|
'Link:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--8 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--short row--wide' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--7' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'input-error', id: 'input-error-copy-short-link', hidden: 'true' },
|
||
|
'error here'
|
||
|
),
|
||
|
_react2.default.createElement('input', { type: 'text', id: 'short-link', className: 'input-disabled input-text--full-width', readOnly: true,
|
||
|
spellCheck: 'false',
|
||
|
value: host + '/' + shortId + '/' + name + '.' + fileExt,
|
||
|
onClick: this.select })
|
||
|
),
|
||
|
_react2.default.createElement('div', { className: 'column column--1' }),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--2' },
|
||
|
_react2.default.createElement(
|
||
|
'button',
|
||
|
{ className: 'button--primary button--wide', 'data-elementtocopy': 'short-link',
|
||
|
onClick: this.copyToClipboard },
|
||
|
'copy'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'show-embed-code' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--2 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'text' },
|
||
|
'Embed:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--8 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--short row--wide' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--7' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'input-error', id: 'input-error-copy-embed-text', hidden: 'true' },
|
||
|
'error here'
|
||
|
),
|
||
|
contentType === 'video/mp4' ? _react2.default.createElement('input', { type: 'text', id: 'embed-text', className: 'input-disabled input-text--full-width', readOnly: true,
|
||
|
onClick: this.select, spellCheck: 'false',
|
||
|
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,
|
||
|
onClick: this.select, spellCheck: 'false',
|
||
|
value: '<img src="' + host + '/' + claimId + '/' + name + '.' + fileExt + '"/>'
|
||
|
})
|
||
|
),
|
||
|
_react2.default.createElement('div', { className: 'column column--1' }),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--2' },
|
||
|
_react2.default.createElement(
|
||
|
'button',
|
||
|
{ className: 'button--primary button--wide', 'data-elementtocopy': 'embed-text',
|
||
|
onClick: this.copyToClipboard },
|
||
|
'copy'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'flex-container--row flex-container--space-between-bottom' },
|
||
|
_react2.default.createElement(
|
||
|
_reactRouterDom.Link,
|
||
|
{ className: 'link--primary', to: '/' + shortId + '/' + name + '.' + fileExt },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{
|
||
|
className: 'text' },
|
||
|
'Direct Link'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', href: host + '/' + claimId + '/' + name + '.' + fileExt, download: name },
|
||
|
'Download'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: 'https://lbry.io/dmca' },
|
||
|
'Report'
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return AssetInfo;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = AssetInfo;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 75 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _SEO = __webpack_require__(9);
|
||
|
|
||
|
var _SEO2 = _interopRequireDefault(_SEO);
|
||
|
|
||
|
var _ErrorPage = __webpack_require__(12);
|
||
|
|
||
|
var _ErrorPage2 = _interopRequireDefault(_ErrorPage);
|
||
|
|
||
|
var _NavBar = __webpack_require__(7);
|
||
|
|
||
|
var _NavBar2 = _interopRequireDefault(_NavBar);
|
||
|
|
||
|
var _ChannelClaimsDisplay = __webpack_require__(36);
|
||
|
|
||
|
var _ChannelClaimsDisplay2 = _interopRequireDefault(_ChannelClaimsDisplay);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ShowChannel = function (_React$Component) {
|
||
|
_inherits(ShowChannel, _React$Component);
|
||
|
|
||
|
function ShowChannel() {
|
||
|
_classCallCheck(this, ShowChannel);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (ShowChannel.__proto__ || Object.getPrototypeOf(ShowChannel)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(ShowChannel, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var channel = this.props.channel;
|
||
|
|
||
|
if (channel) {
|
||
|
var name = channel.name,
|
||
|
longId = channel.longId,
|
||
|
shortId = channel.shortId;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(_SEO2.default, { pageTitle: name, channel: channel }),
|
||
|
_react2.default.createElement(_NavBar2.default, null),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--tall row--padded' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--10' },
|
||
|
_react2.default.createElement(
|
||
|
'h2',
|
||
|
null,
|
||
|
'channel name: ',
|
||
|
name
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'fine-print' },
|
||
|
'full channel id: ',
|
||
|
longId
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'fine-print' },
|
||
|
'short channel id: ',
|
||
|
shortId
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--10' },
|
||
|
_react2.default.createElement(_ChannelClaimsDisplay2.default, null)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
};
|
||
|
return _react2.default.createElement(_ErrorPage2.default, { error: 'loading channel data...' });
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ShowChannel;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = ShowChannel;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 76 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _AssetPreview = __webpack_require__(37);
|
||
|
|
||
|
var _AssetPreview2 = _interopRequireDefault(_AssetPreview);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ChannelClaimsDisplay = function (_React$Component) {
|
||
|
_inherits(ChannelClaimsDisplay, _React$Component);
|
||
|
|
||
|
function ChannelClaimsDisplay(props) {
|
||
|
_classCallCheck(this, ChannelClaimsDisplay);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (ChannelClaimsDisplay.__proto__ || Object.getPrototypeOf(ChannelClaimsDisplay)).call(this, props));
|
||
|
|
||
|
_this.showNextResultsPage = _this.showNextResultsPage.bind(_this);
|
||
|
_this.showPreviousResultsPage = _this.showPreviousResultsPage.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(ChannelClaimsDisplay, [{
|
||
|
key: 'showPreviousResultsPage',
|
||
|
value: function showPreviousResultsPage() {
|
||
|
var currentPage = this.props.channel.claimsData.currentPage;
|
||
|
|
||
|
var previousPage = parseInt(currentPage) - 1;
|
||
|
this.showNewPage(previousPage);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'showNextResultsPage',
|
||
|
value: function showNextResultsPage() {
|
||
|
var currentPage = this.props.channel.claimsData.currentPage;
|
||
|
|
||
|
var nextPage = parseInt(currentPage) + 1;
|
||
|
this.showNewPage(nextPage);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'showNewPage',
|
||
|
value: function showNewPage(page) {
|
||
|
var _props = this.props,
|
||
|
channelKey = _props.channelKey,
|
||
|
_props$channel = _props.channel,
|
||
|
name = _props$channel.name,
|
||
|
longId = _props$channel.longId;
|
||
|
|
||
|
this.props.onUpdateChannelClaims(channelKey, name, longId, page);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var _props$channel$claims = this.props.channel.claimsData,
|
||
|
claims = _props$channel$claims.claims,
|
||
|
currentPage = _props$channel$claims.currentPage,
|
||
|
totalPages = _props$channel$claims.totalPages;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--tall' },
|
||
|
claims.length > 0 ? _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
claims.map(function (claim, index) {
|
||
|
return _react2.default.createElement(_AssetPreview2.default, {
|
||
|
claimData: claim,
|
||
|
key: claim.name + '-' + index
|
||
|
});
|
||
|
}),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
currentPage > 1 && _react2.default.createElement(
|
||
|
'button',
|
||
|
{ className: 'button--secondary', onClick: this.showPreviousResultsPage },
|
||
|
'Previous Page'
|
||
|
),
|
||
|
currentPage < totalPages && _react2.default.createElement(
|
||
|
'button',
|
||
|
{ className: 'button--secondary', onClick: this.showNextResultsPage },
|
||
|
'Next Page'
|
||
|
)
|
||
|
)
|
||
|
) : _react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'There are no claims in this channel'
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ChannelClaimsDisplay;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = ChannelClaimsDisplay;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 77 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var AssetPreview = function AssetPreview(_ref) {
|
||
|
var defaultThumbnail = _ref.defaultThumbnail,
|
||
|
_ref$claimData = _ref.claimData,
|
||
|
name = _ref$claimData.name,
|
||
|
claimId = _ref$claimData.claimId,
|
||
|
fileExt = _ref$claimData.fileExt,
|
||
|
contentType = _ref$claimData.contentType,
|
||
|
thumbnail = _ref$claimData.thumbnail;
|
||
|
|
||
|
var directSourceLink = claimId + '/' + name + '.' + fileExt;
|
||
|
var showUrlLink = '/' + claimId + '/' + name;
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'asset-holder' },
|
||
|
_react2.default.createElement(
|
||
|
_reactRouterDom.Link,
|
||
|
{ to: showUrlLink },
|
||
|
function () {
|
||
|
switch (contentType) {
|
||
|
case 'image/jpeg':
|
||
|
case 'image/jpg':
|
||
|
case 'image/png':
|
||
|
case 'image/gif':
|
||
|
return _react2.default.createElement('img', {
|
||
|
className: 'asset-preview',
|
||
|
src: directSourceLink,
|
||
|
alt: name
|
||
|
});
|
||
|
case 'video/mp4':
|
||
|
return _react2.default.createElement('img', {
|
||
|
className: 'asset-preview video',
|
||
|
src: thumbnail || defaultThumbnail,
|
||
|
alt: name
|
||
|
});
|
||
|
default:
|
||
|
return _react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'unsupported file type'
|
||
|
);
|
||
|
}
|
||
|
}()
|
||
|
)
|
||
|
);
|
||
|
};
|
||
|
|
||
|
exports.default = AssetPreview;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 78 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _NavBar = __webpack_require__(7);
|
||
|
|
||
|
var _NavBar2 = _interopRequireDefault(_NavBar);
|
||
|
|
||
|
var _reactHelmet = __webpack_require__(54);
|
||
|
|
||
|
var _reactHelmet2 = _interopRequireDefault(_reactHelmet);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var FourOhForPage = function (_React$Component) {
|
||
|
_inherits(FourOhForPage, _React$Component);
|
||
|
|
||
|
function FourOhForPage() {
|
||
|
_classCallCheck(this, FourOhForPage);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (FourOhForPage.__proto__ || Object.getPrototypeOf(FourOhForPage)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(FourOhForPage, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var _props = this.props,
|
||
|
title = _props.title,
|
||
|
host = _props.host;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
_reactHelmet2.default,
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'title',
|
||
|
null,
|
||
|
title,
|
||
|
' - 404'
|
||
|
),
|
||
|
_react2.default.createElement('link', { rel: 'canonical', href: host + '/404' })
|
||
|
),
|
||
|
_react2.default.createElement(_NavBar2.default, null),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded' },
|
||
|
_react2.default.createElement(
|
||
|
'h2',
|
||
|
null,
|
||
|
'404'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'That page does not exist'
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return FourOhForPage;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = FourOhForPage;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 79 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _Dropzone = __webpack_require__(20);
|
||
|
|
||
|
var _Dropzone2 = _interopRequireDefault(_Dropzone);
|
||
|
|
||
|
var _PublishDetails = __webpack_require__(42);
|
||
|
|
||
|
var _PublishDetails2 = _interopRequireDefault(_PublishDetails);
|
||
|
|
||
|
var _PublishStatus = __webpack_require__(50);
|
||
|
|
||
|
var _PublishStatus2 = _interopRequireDefault(_PublishStatus);
|
||
|
|
||
|
var _PublishDisabledMessage = __webpack_require__(51);
|
||
|
|
||
|
var _PublishDisabledMessage2 = _interopRequireDefault(_PublishDisabledMessage);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var PublishTool = function (_React$Component) {
|
||
|
_inherits(PublishTool, _React$Component);
|
||
|
|
||
|
function PublishTool() {
|
||
|
_classCallCheck(this, PublishTool);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (PublishTool.__proto__ || Object.getPrototypeOf(PublishTool)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(PublishTool, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
if (this.props.disabled) {
|
||
|
console.log('publish is disabled');
|
||
|
return _react2.default.createElement(_PublishDisabledMessage2.default, null);
|
||
|
} else {
|
||
|
console.log('publish is not disabled');
|
||
|
if (this.props.file) {
|
||
|
if (this.props.status) {
|
||
|
return _react2.default.createElement(_PublishStatus2.default, null);
|
||
|
} else {
|
||
|
return _react2.default.createElement(_PublishDetails2.default, null);
|
||
|
}
|
||
|
}
|
||
|
return _react2.default.createElement(_Dropzone2.default, null);
|
||
|
}
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return PublishTool;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = PublishTool;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 80 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _file = __webpack_require__(174);
|
||
|
|
||
|
var _PublishPreview = __webpack_require__(41);
|
||
|
|
||
|
var _PublishPreview2 = _interopRequireDefault(_PublishPreview);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var Dropzone = function (_React$Component) {
|
||
|
_inherits(Dropzone, _React$Component);
|
||
|
|
||
|
function Dropzone(props) {
|
||
|
_classCallCheck(this, Dropzone);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (Dropzone.__proto__ || Object.getPrototypeOf(Dropzone)).call(this, props));
|
||
|
|
||
|
_this.state = {
|
||
|
dragOver: false,
|
||
|
mouseOver: false,
|
||
|
dimPreview: false
|
||
|
};
|
||
|
_this.handleDrop = _this.handleDrop.bind(_this);
|
||
|
_this.handleDragOver = _this.handleDragOver.bind(_this);
|
||
|
_this.handleDragEnd = _this.handleDragEnd.bind(_this);
|
||
|
_this.handleDragEnter = _this.handleDragEnter.bind(_this);
|
||
|
_this.handleDragLeave = _this.handleDragLeave.bind(_this);
|
||
|
_this.handleMouseEnter = _this.handleMouseEnter.bind(_this);
|
||
|
_this.handleMouseLeave = _this.handleMouseLeave.bind(_this);
|
||
|
_this.handleClick = _this.handleClick.bind(_this);
|
||
|
_this.handleFileInput = _this.handleFileInput.bind(_this);
|
||
|
_this.chooseFile = _this.chooseFile.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(Dropzone, [{
|
||
|
key: 'handleDrop',
|
||
|
value: function handleDrop(event) {
|
||
|
event.preventDefault();
|
||
|
this.setState({ dragOver: false });
|
||
|
// if dropped items aren't files, reject them
|
||
|
var dt = event.dataTransfer;
|
||
|
if (dt.items) {
|
||
|
if (dt.items[0].kind === 'file') {
|
||
|
var droppedFile = dt.items[0].getAsFile();
|
||
|
this.chooseFile(droppedFile);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleDragOver',
|
||
|
value: function handleDragOver(event) {
|
||
|
event.preventDefault();
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleDragEnd',
|
||
|
value: function handleDragEnd(event) {
|
||
|
var dt = event.dataTransfer;
|
||
|
if (dt.items) {
|
||
|
for (var i = 0; i < dt.items.length; i++) {
|
||
|
dt.items.remove(i);
|
||
|
}
|
||
|
} else {
|
||
|
event.dataTransfer.clearData();
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleDragEnter',
|
||
|
value: function handleDragEnter() {
|
||
|
this.setState({ dragOver: true, dimPreview: true });
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleDragLeave',
|
||
|
value: function handleDragLeave() {
|
||
|
this.setState({ dragOver: false, dimPreview: false });
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleMouseEnter',
|
||
|
value: function handleMouseEnter() {
|
||
|
this.setState({ mouseOver: true, dimPreview: true });
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleMouseLeave',
|
||
|
value: function handleMouseLeave() {
|
||
|
this.setState({ mouseOver: false, dimPreview: false });
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleClick',
|
||
|
value: function handleClick(event) {
|
||
|
event.preventDefault();
|
||
|
document.getElementById('file_input').click();
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleFileInput',
|
||
|
value: function handleFileInput(event) {
|
||
|
event.preventDefault();
|
||
|
var fileList = event.target.files;
|
||
|
this.chooseFile(fileList[0]);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'chooseFile',
|
||
|
value: function chooseFile(file) {
|
||
|
if (file) {
|
||
|
try {
|
||
|
(0, _file.validateFile)(file); // validate the file's name, type, and size
|
||
|
} catch (error) {
|
||
|
return this.props.setFileError(error.message);
|
||
|
}
|
||
|
// stage it so it will be ready when the publish button is clicked
|
||
|
this.props.selectFile(file);
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--tall flex-container--column' },
|
||
|
_react2.default.createElement(
|
||
|
'form',
|
||
|
null,
|
||
|
_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' })
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'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 },
|
||
|
this.props.file ? _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(_PublishPreview2.default, {
|
||
|
dimPreview: this.state.dimPreview,
|
||
|
file: this.props.file,
|
||
|
thumbnail: this.props.thumbnail
|
||
|
}),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'dropzone-text-holder', className: 'flex-container--column flex-container--center-center' },
|
||
|
this.state.dragOver ? _react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'dropzone-dragover' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'blue' },
|
||
|
'Drop it.'
|
||
|
)
|
||
|
) : null,
|
||
|
this.state.mouseOver ? _react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'dropzone-instructions' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message-placeholder info-message--failure', id: 'input-error-file-selection' },
|
||
|
this.props.fileError
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Drag & drop image or video here to publish'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'fine-print' },
|
||
|
'OR'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'blue--underlined' },
|
||
|
'CHOOSE FILE'
|
||
|
)
|
||
|
) : null
|
||
|
)
|
||
|
) : _react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'dropzone-text-holder', className: 'flex-container--column flex-container--center-center' },
|
||
|
this.state.dragOver ? _react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'dropzone-dragover' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'blue' },
|
||
|
'Drop it.'
|
||
|
)
|
||
|
) : _react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'dropzone-instructions' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message-placeholder info-message--failure', id: 'input-error-file-selection' },
|
||
|
this.props.fileError
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Drag & drop image or video here to publish'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'fine-print' },
|
||
|
'OR'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'blue--underlined' },
|
||
|
'CHOOSE FILE'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return Dropzone;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = Dropzone;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 81 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
var _Dropzone = __webpack_require__(20);
|
||
|
|
||
|
var _Dropzone2 = _interopRequireDefault(_Dropzone);
|
||
|
|
||
|
var _PublishTitleInput = __webpack_require__(43);
|
||
|
|
||
|
var _PublishTitleInput2 = _interopRequireDefault(_PublishTitleInput);
|
||
|
|
||
|
var _PublishUrlInput = __webpack_require__(44);
|
||
|
|
||
|
var _PublishUrlInput2 = _interopRequireDefault(_PublishUrlInput);
|
||
|
|
||
|
var _PublishThumbnailInput = __webpack_require__(46);
|
||
|
|
||
|
var _PublishThumbnailInput2 = _interopRequireDefault(_PublishThumbnailInput);
|
||
|
|
||
|
var _PublishMetadataInputs = __webpack_require__(47);
|
||
|
|
||
|
var _PublishMetadataInputs2 = _interopRequireDefault(_PublishMetadataInputs);
|
||
|
|
||
|
var _ChannelSelect = __webpack_require__(49);
|
||
|
|
||
|
var _ChannelSelect2 = _interopRequireDefault(_ChannelSelect);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var PublishDetails = function (_React$Component) {
|
||
|
_inherits(PublishDetails, _React$Component);
|
||
|
|
||
|
function PublishDetails(props) {
|
||
|
_classCallCheck(this, PublishDetails);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (PublishDetails.__proto__ || Object.getPrototypeOf(PublishDetails)).call(this, props));
|
||
|
|
||
|
_this.onPublishSubmit = _this.onPublishSubmit.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(PublishDetails, [{
|
||
|
key: 'onPublishSubmit',
|
||
|
value: function onPublishSubmit() {
|
||
|
this.props.startPublish(this.props.history);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--no-bottom' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--10' },
|
||
|
_react2.default.createElement(_PublishTitleInput2.default, null)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--5 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded' },
|
||
|
_react2.default.createElement(_Dropzone2.default, null)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--5 column--sml-10 align-content-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'publish-active-area', className: 'row row--padded' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded row--no-top row--wide' },
|
||
|
_react2.default.createElement(_PublishUrlInput2.default, null)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded row--no-top row--wide' },
|
||
|
_react2.default.createElement(_ChannelSelect2.default, null)
|
||
|
),
|
||
|
this.props.file.type === 'video/mp4' && _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded row--no-top row--wide ' },
|
||
|
_react2.default.createElement(_PublishThumbnailInput2.default, null)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded row--no-top row--no-bottom row--wide' },
|
||
|
_react2.default.createElement(_PublishMetadataInputs2.default, null)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--wide align-content-center' },
|
||
|
_react2.default.createElement(
|
||
|
'button',
|
||
|
{ id: 'publish-submit', className: 'button--primary button--large', onClick: this.onPublishSubmit },
|
||
|
'Publish'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--padded row--no-bottom align-content-center' },
|
||
|
_react2.default.createElement(
|
||
|
'button',
|
||
|
{ className: 'button--cancel', onClick: this.props.clearFile },
|
||
|
'Cancel'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--short align-content-center' },
|
||
|
_react2.default.createElement(
|
||
|
'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. ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: 'https://lbry.io/learn' },
|
||
|
'Read more.'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return PublishDetails;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = (0, _reactRouterDom.withRouter)(PublishDetails);
|
||
|
|
||
|
/***/ }),
|
||
|
/* 82 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var PublishTitleInput = function (_React$Component) {
|
||
|
_inherits(PublishTitleInput, _React$Component);
|
||
|
|
||
|
function PublishTitleInput(props) {
|
||
|
_classCallCheck(this, PublishTitleInput);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (PublishTitleInput.__proto__ || Object.getPrototypeOf(PublishTitleInput)).call(this, props));
|
||
|
|
||
|
_this.handleInput = _this.handleInput.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(PublishTitleInput, [{
|
||
|
key: 'handleInput',
|
||
|
value: function handleInput(e) {
|
||
|
var name = e.target.name;
|
||
|
var value = e.target.value;
|
||
|
this.props.onMetadataChange(name, value);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
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 });
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return PublishTitleInput;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
exports.default = PublishTitleInput;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 83 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _request = __webpack_require__(16);
|
||
|
|
||
|
var _request2 = _interopRequireDefault(_request);
|
||
|
|
||
|
var _PublishUrlMiddleDisplay = __webpack_require__(45);
|
||
|
|
||
|
var _PublishUrlMiddleDisplay2 = _interopRequireDefault(_PublishUrlMiddleDisplay);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var PublishUrlInput = function (_React$Component) {
|
||
|
_inherits(PublishUrlInput, _React$Component);
|
||
|
|
||
|
function PublishUrlInput(props) {
|
||
|
_classCallCheck(this, PublishUrlInput);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (PublishUrlInput.__proto__ || Object.getPrototypeOf(PublishUrlInput)).call(this, props));
|
||
|
|
||
|
_this.handleInput = _this.handleInput.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(PublishUrlInput, [{
|
||
|
key: 'componentDidMount',
|
||
|
value: function componentDidMount() {
|
||
|
var _props = this.props,
|
||
|
claim = _props.claim,
|
||
|
fileName = _props.fileName;
|
||
|
|
||
|
if (!claim) {
|
||
|
this.setClaimName(fileName);
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'componentWillReceiveProps',
|
||
|
value: function componentWillReceiveProps(_ref) {
|
||
|
var claim = _ref.claim,
|
||
|
fileName = _ref.fileName;
|
||
|
|
||
|
// if a new file was chosen, update the claim name
|
||
|
if (fileName !== this.props.fileName) {
|
||
|
return this.setClaimName(fileName);
|
||
|
}
|
||
|
// if the claim has updated, check its availability
|
||
|
if (claim !== this.props.claim) {
|
||
|
this.validateClaim(claim);
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleInput',
|
||
|
value: function handleInput(event) {
|
||
|
var value = event.target.value;
|
||
|
value = this.cleanseInput(value);
|
||
|
// update the state
|
||
|
this.props.onClaimChange(value);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'cleanseInput',
|
||
|
value: function cleanseInput(input) {
|
||
|
input = input.replace(/\s+/g, '-'); // replace spaces with dashes
|
||
|
input = input.replace(/[^A-Za-z0-9-]/g, ''); // remove all characters that are not A-Z, a-z, 0-9, or '-'
|
||
|
return input;
|
||
|
}
|
||
|
}, {
|
||
|
key: 'setClaimName',
|
||
|
value: function setClaimName(fileName) {
|
||
|
var fileNameWithoutEnding = fileName.substring(0, fileName.lastIndexOf('.'));
|
||
|
var cleanClaimName = this.cleanseInput(fileNameWithoutEnding);
|
||
|
this.props.onClaimChange(cleanClaimName);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'validateClaim',
|
||
|
value: function validateClaim(claim) {
|
||
|
var _this2 = this;
|
||
|
|
||
|
if (!claim) {
|
||
|
return this.props.onUrlError('Enter a url above');
|
||
|
}
|
||
|
(0, _request2.default)('/api/claim/availability/' + claim).then(function () {
|
||
|
_this2.props.onUrlError(null);
|
||
|
}).catch(function (error) {
|
||
|
_this2.props.onUrlError(error.message);
|
||
|
});
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var _props2 = this.props,
|
||
|
claim = _props2.claim,
|
||
|
loggedInChannelName = _props2.loggedInChannelName,
|
||
|
loggedInChannelShortId = _props2.loggedInChannelShortId,
|
||
|
publishInChannel = _props2.publishInChannel,
|
||
|
selectedChannel = _props2.selectedChannel,
|
||
|
urlError = _props2.urlError;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--10 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'input-text--primary span--relative' },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'url-text--secondary' },
|
||
|
'spee.ch / '
|
||
|
),
|
||
|
_react2.default.createElement(_PublishUrlMiddleDisplay2.default, {
|
||
|
publishInChannel: publishInChannel,
|
||
|
selectedChannel: selectedChannel,
|
||
|
loggedInChannelName: loggedInChannelName,
|
||
|
loggedInChannelShortId: loggedInChannelShortId
|
||
|
}),
|
||
|
_react2.default.createElement('input', { type: 'text', id: 'claim-name-input', className: 'input-text', name: 'claim', placeholder: 'your-url-here', onChange: this.handleInput, value: claim }),
|
||
|
claim && !urlError && _react2.default.createElement(
|
||
|
'span',
|
||
|
{ id: 'input-success-claim-name', className: 'info-message--success span--absolute' },
|
||
|
'\u2713'
|
||
|
),
|
||
|
urlError && _react2.default.createElement(
|
||
|
'span',
|
||
|
{ id: 'input-success-channel-name', className: 'info-message--failure span--absolute' },
|
||
|
'\u2716'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
urlError ? _react2.default.createElement(
|
||
|
'p',
|
||
|
{ id: 'input-error-claim-name', className: 'info-message--failure' },
|
||
|
urlError
|
||
|
) : _react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message' },
|
||
|
'Choose a custom url'
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return PublishUrlInput;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
exports.default = PublishUrlInput;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 84 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function dataURItoBlob(dataURI) {
|
||
|
// convert base64/URLEncoded data component to raw binary data held in a string
|
||
|
var byteString = atob(dataURI.split(',')[1]);
|
||
|
// separate out the mime component
|
||
|
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
|
||
|
// write the bytes of the string to a typed array
|
||
|
var ia = new Uint8Array(byteString.length);
|
||
|
for (var i = 0; i < byteString.length; i++) {
|
||
|
ia[i] = byteString.charCodeAt(i);
|
||
|
}
|
||
|
return new Blob([ia], { type: mimeString });
|
||
|
}
|
||
|
|
||
|
var PublishThumbnailInput = function (_React$Component) {
|
||
|
_inherits(PublishThumbnailInput, _React$Component);
|
||
|
|
||
|
function PublishThumbnailInput(props) {
|
||
|
_classCallCheck(this, PublishThumbnailInput);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (PublishThumbnailInput.__proto__ || Object.getPrototypeOf(PublishThumbnailInput)).call(this, props));
|
||
|
|
||
|
_this.state = {
|
||
|
videoSource: null,
|
||
|
error: null,
|
||
|
sliderMinRange: 1,
|
||
|
sliderMaxRange: null,
|
||
|
sliderValue: null
|
||
|
};
|
||
|
_this.handleVideoLoadedData = _this.handleVideoLoadedData.bind(_this);
|
||
|
_this.handleSliderChange = _this.handleSliderChange.bind(_this);
|
||
|
_this.createThumbnail = _this.createThumbnail.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(PublishThumbnailInput, [{
|
||
|
key: 'componentDidMount',
|
||
|
value: function componentDidMount() {
|
||
|
var file = this.props.file;
|
||
|
|
||
|
this.setVideoSource(file);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'componentWillReceiveProps',
|
||
|
value: function componentWillReceiveProps(nextProps) {
|
||
|
// if file changes
|
||
|
if (nextProps.file && nextProps.file !== this.props.file) {
|
||
|
var file = nextProps.file;
|
||
|
|
||
|
this.setVideoSource(file);
|
||
|
};
|
||
|
}
|
||
|
}, {
|
||
|
key: 'setVideoSource',
|
||
|
value: function setVideoSource(file) {
|
||
|
var _this2 = this;
|
||
|
|
||
|
var previewReader = new FileReader();
|
||
|
previewReader.readAsDataURL(file);
|
||
|
previewReader.onloadend = function () {
|
||
|
var dataUri = previewReader.result;
|
||
|
var blob = dataURItoBlob(dataUri);
|
||
|
var videoSource = URL.createObjectURL(blob);
|
||
|
_this2.setState({ videoSource: videoSource });
|
||
|
};
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleVideoLoadedData',
|
||
|
value: function handleVideoLoadedData(event) {
|
||
|
var duration = event.target.duration;
|
||
|
var totalMinutes = Math.floor(duration / 60);
|
||
|
var totalSeconds = Math.floor(duration % 60);
|
||
|
// set the slider
|
||
|
this.setState({
|
||
|
sliderMaxRange: duration * 100,
|
||
|
sliderValue: duration * 100 / 2,
|
||
|
totalMinutes: totalMinutes,
|
||
|
totalSeconds: totalSeconds
|
||
|
});
|
||
|
// update the current time of the video
|
||
|
var video = document.getElementById('video-thumb-player');
|
||
|
video.currentTime = duration / 2;
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleSliderChange',
|
||
|
value: function handleSliderChange(event) {
|
||
|
var value = parseInt(event.target.value);
|
||
|
// update the slider value
|
||
|
this.setState({
|
||
|
sliderValue: value
|
||
|
});
|
||
|
// update the current time of the video
|
||
|
var video = document.getElementById('video-thumb-player');
|
||
|
video.currentTime = value / 100;
|
||
|
}
|
||
|
}, {
|
||
|
key: 'createThumbnail',
|
||
|
value: function createThumbnail() {
|
||
|
// take a snapshot
|
||
|
var video = document.getElementById('video-thumb-player');
|
||
|
var canvas = document.createElement('canvas');
|
||
|
canvas.width = video.videoWidth;
|
||
|
canvas.height = video.videoHeight;
|
||
|
canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height);
|
||
|
var dataUrl = canvas.toDataURL();
|
||
|
var blob = dataURItoBlob(dataUrl);
|
||
|
var snapshot = new File([blob], 'thumbnail.png', {
|
||
|
type: 'image/png'
|
||
|
});
|
||
|
// set the thumbnail in redux store
|
||
|
if (snapshot) {
|
||
|
this.props.onNewThumbnail(snapshot);
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var _state = this.state,
|
||
|
error = _state.error,
|
||
|
videoSource = _state.videoSource,
|
||
|
sliderMinRange = _state.sliderMinRange,
|
||
|
sliderMaxRange = _state.sliderMaxRange,
|
||
|
sliderValue = _state.sliderValue,
|
||
|
totalMinutes = _state.totalMinutes,
|
||
|
totalSeconds = _state.totalSeconds;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ className: 'label' },
|
||
|
'Thumbnail:'
|
||
|
),
|
||
|
_react2.default.createElement('video', {
|
||
|
id: 'video-thumb-player',
|
||
|
preload: 'metadata',
|
||
|
muted: true,
|
||
|
style: { display: 'none' },
|
||
|
playsInline: true,
|
||
|
onLoadedData: this.handleVideoLoadedData,
|
||
|
src: videoSource,
|
||
|
onSeeked: this.createThumbnail
|
||
|
}),
|
||
|
sliderValue ? _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'flex-container--row flex-container--space-between-center', style: { width: '100%' } },
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'info-message' },
|
||
|
'0\'00"'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'span',
|
||
|
{ className: 'info-message' },
|
||
|
totalMinutes,
|
||
|
'\'',
|
||
|
totalSeconds,
|
||
|
'"'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement('input', {
|
||
|
type: 'range',
|
||
|
min: sliderMinRange,
|
||
|
max: sliderMaxRange,
|
||
|
value: sliderValue,
|
||
|
className: 'slider',
|
||
|
onChange: this.handleSliderChange
|
||
|
})
|
||
|
)
|
||
|
) : _react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message' },
|
||
|
'loading... '
|
||
|
),
|
||
|
error ? _react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message--failure' },
|
||
|
error
|
||
|
) : _react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message' },
|
||
|
'Use slider to set thumbnail'
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return PublishThumbnailInput;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
exports.default = PublishThumbnailInput;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 85 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _ExpandingTextArea = __webpack_require__(48);
|
||
|
|
||
|
var _ExpandingTextArea2 = _interopRequireDefault(_ExpandingTextArea);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var PublishMetadataInputs = function (_React$Component) {
|
||
|
_inherits(PublishMetadataInputs, _React$Component);
|
||
|
|
||
|
function PublishMetadataInputs(props) {
|
||
|
_classCallCheck(this, PublishMetadataInputs);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (PublishMetadataInputs.__proto__ || Object.getPrototypeOf(PublishMetadataInputs)).call(this, props));
|
||
|
|
||
|
_this.toggleShowInputs = _this.toggleShowInputs.bind(_this);
|
||
|
_this.handleInput = _this.handleInput.bind(_this);
|
||
|
_this.handleSelect = _this.handleSelect.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(PublishMetadataInputs, [{
|
||
|
key: 'toggleShowInputs',
|
||
|
value: function toggleShowInputs() {
|
||
|
this.props.onToggleMetadataInputs(!this.props.showMetadataInputs);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleInput',
|
||
|
value: function handleInput(event) {
|
||
|
var target = event.target;
|
||
|
var value = target.type === 'checkbox' ? target.checked : target.value;
|
||
|
var name = target.name;
|
||
|
this.props.onMetadataChange(name, value);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleSelect',
|
||
|
value: function handleSelect(event) {
|
||
|
var name = event.target.name;
|
||
|
var selectedOption = event.target.selectedOptions[0].value;
|
||
|
this.props.onMetadataChange(name, selectedOption);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ id: 'publish-details', className: 'row row--padded row--no-top row--wide' },
|
||
|
this.props.showMetadataInputs && _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--no-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--3 column--med-10 align-content-top' },
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ htmlFor: 'publish-license', className: 'label' },
|
||
|
'Description:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--7 column--sml-10' },
|
||
|
_react2.default.createElement(_ExpandingTextArea2.default, {
|
||
|
id: 'publish-description',
|
||
|
className: 'textarea textarea--primary textarea--full-width',
|
||
|
rows: 1,
|
||
|
maxLength: 2000,
|
||
|
style: { maxHeight: 200 },
|
||
|
name: 'description',
|
||
|
placeholder: 'Optional description',
|
||
|
value: this.props.description,
|
||
|
onChange: this.handleInput })
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--no-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--3 column--med-10' },
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ htmlFor: 'publish-license', className: 'label' },
|
||
|
'License:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--7 column--sml-10' },
|
||
|
_react2.default.createElement(
|
||
|
'select',
|
||
|
{ type: 'text', name: 'license', id: 'publish-license', className: 'select select--primary', onChange: this.handleSelect },
|
||
|
_react2.default.createElement(
|
||
|
'option',
|
||
|
{ value: ' ' },
|
||
|
'Unspecified'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'option',
|
||
|
{ value: 'Public Domain' },
|
||
|
'Public Domain'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'option',
|
||
|
{ value: 'Creative Commons' },
|
||
|
'Creative Commons'
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--no-top' },
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--3' },
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ htmlFor: 'publish-nsfw', className: 'label' },
|
||
|
'Mature:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--7' },
|
||
|
_react2.default.createElement('input', { className: 'input-checkbox', type: 'checkbox', id: 'publish-nsfw', name: 'nsfw', value: this.props.nsfw, onChange: this.handleInput })
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'button',
|
||
|
{ className: 'button--secondary', onClick: this.toggleShowInputs },
|
||
|
this.props.showMetadataInputs ? 'less' : 'more'
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return PublishMetadataInputs;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
exports.default = PublishMetadataInputs;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 86 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _ChannelLoginForm = __webpack_require__(17);
|
||
|
|
||
|
var _ChannelLoginForm2 = _interopRequireDefault(_ChannelLoginForm);
|
||
|
|
||
|
var _ChannelCreateForm = __webpack_require__(18);
|
||
|
|
||
|
var _ChannelCreateForm2 = _interopRequireDefault(_ChannelCreateForm);
|
||
|
|
||
|
var _publish_channel_select_states = __webpack_require__(99);
|
||
|
|
||
|
var states = _interopRequireWildcard(_publish_channel_select_states);
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var ChannelSelect = function (_React$Component) {
|
||
|
_inherits(ChannelSelect, _React$Component);
|
||
|
|
||
|
function ChannelSelect(props) {
|
||
|
_classCallCheck(this, ChannelSelect);
|
||
|
|
||
|
var _this = _possibleConstructorReturn(this, (ChannelSelect.__proto__ || Object.getPrototypeOf(ChannelSelect)).call(this, props));
|
||
|
|
||
|
_this.toggleAnonymousPublish = _this.toggleAnonymousPublish.bind(_this);
|
||
|
_this.handleSelection = _this.handleSelection.bind(_this);
|
||
|
return _this;
|
||
|
}
|
||
|
|
||
|
_createClass(ChannelSelect, [{
|
||
|
key: 'toggleAnonymousPublish',
|
||
|
value: function toggleAnonymousPublish(event) {
|
||
|
var value = event.target.value;
|
||
|
if (value === 'anonymous') {
|
||
|
this.props.onPublishInChannelChange(false);
|
||
|
} else {
|
||
|
this.props.onPublishInChannelChange(true);
|
||
|
}
|
||
|
}
|
||
|
}, {
|
||
|
key: 'handleSelection',
|
||
|
value: function handleSelection(event) {
|
||
|
var selectedOption = event.target.selectedOptions[0].value;
|
||
|
this.props.onChannelSelect(selectedOption);
|
||
|
}
|
||
|
}, {
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'form',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--3 column--med-10' },
|
||
|
_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 }),
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ className: 'label label--pointer', htmlFor: 'anonymous-radio' },
|
||
|
'Anonymous'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--7 column--med-10' },
|
||
|
_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 }),
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ className: 'label label--pointer', htmlFor: 'channel-radio' },
|
||
|
'In a channel'
|
||
|
)
|
||
|
),
|
||
|
this.props.channelError ? _react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message--failure' },
|
||
|
this.props.channelError
|
||
|
) : _react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'info-message' },
|
||
|
'Publish anonymously or in a channel'
|
||
|
)
|
||
|
),
|
||
|
this.props.publishInChannel && _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--3' },
|
||
|
_react2.default.createElement(
|
||
|
'label',
|
||
|
{ className: 'label', htmlFor: 'channel-name-select' },
|
||
|
'Channel:'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'column column--7' },
|
||
|
_react2.default.createElement(
|
||
|
'select',
|
||
|
{ type: 'text', id: 'channel-name-select', className: 'select select--arrow', value: this.props.selectedChannel, onChange: this.handleSelection },
|
||
|
this.props.loggedInChannelName && _react2.default.createElement(
|
||
|
'option',
|
||
|
{ value: this.props.loggedInChannelName, id: 'publish-channel-select-channel-option' },
|
||
|
this.props.loggedInChannelName
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'option',
|
||
|
{ value: states.LOGIN },
|
||
|
'Existing'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'option',
|
||
|
{ value: states.CREATE },
|
||
|
'New'
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
this.props.selectedChannel === states.LOGIN && _react2.default.createElement(_ChannelLoginForm2.default, null),
|
||
|
this.props.selectedChannel === states.CREATE && _react2.default.createElement(_ChannelCreateForm2.default, null)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return ChannelSelect;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
exports.default = ChannelSelect;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 87 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _ProgressBar = __webpack_require__(10);
|
||
|
|
||
|
var _ProgressBar2 = _interopRequireDefault(_ProgressBar);
|
||
|
|
||
|
var _publish_claim_states = __webpack_require__(175);
|
||
|
|
||
|
var publishStates = _interopRequireWildcard(_publish_claim_states);
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var PublishStatus = function (_React$Component) {
|
||
|
_inherits(PublishStatus, _React$Component);
|
||
|
|
||
|
function PublishStatus() {
|
||
|
_classCallCheck(this, PublishStatus);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (PublishStatus.__proto__ || Object.getPrototypeOf(PublishStatus)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(PublishStatus, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var _props = this.props,
|
||
|
status = _props.status,
|
||
|
message = _props.message,
|
||
|
clearFile = _props.clearFile;
|
||
|
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row row--tall flex-container--column flex-container--center-center' },
|
||
|
status === publishStates.LOAD_START && _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row align-content-center' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'File is loading to server'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'blue' },
|
||
|
'0%'
|
||
|
)
|
||
|
),
|
||
|
status === publishStates.LOADING && _react2.default.createElement(
|
||
|
'div',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row align-content-center' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'File is loading to server'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'blue' },
|
||
|
message
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
status === publishStates.PUBLISHING && _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row align-content-center' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Upload complete. Your file is now being published on the blockchain...'
|
||
|
),
|
||
|
_react2.default.createElement(_ProgressBar2.default, { size: 12 }),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Curious what magic is happening here? ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: 'blank', href: 'https://lbry.io/faq/what-is-lbry' },
|
||
|
'Learn more.'
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
status === publishStates.SUCCESS && _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row align-content-center' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Your publish is complete! You are being redirected to it now.'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'If you are not automatically redirected, ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', target: '_blank', href: message },
|
||
|
'click here.'
|
||
|
)
|
||
|
)
|
||
|
),
|
||
|
status === publishStates.FAILED && _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row align-content-center' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'Something went wrong...'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
_react2.default.createElement(
|
||
|
'strong',
|
||
|
null,
|
||
|
message
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
null,
|
||
|
'For help, post the above error text in the #speech channel on the ',
|
||
|
_react2.default.createElement(
|
||
|
'a',
|
||
|
{ className: 'link--primary', href: 'https://discord.gg/YjYbwhS', target: '_blank' },
|
||
|
'lbry discord'
|
||
|
)
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'button',
|
||
|
{ className: 'button--secondary', onClick: clearFile },
|
||
|
'Reset'
|
||
|
)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return PublishStatus;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
;
|
||
|
|
||
|
exports.default = PublishStatus;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 88 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; }; }();
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var PublishDisabledMessage = function (_React$Component) {
|
||
|
_inherits(PublishDisabledMessage, _React$Component);
|
||
|
|
||
|
function PublishDisabledMessage() {
|
||
|
_classCallCheck(this, PublishDisabledMessage);
|
||
|
|
||
|
return _possibleConstructorReturn(this, (PublishDisabledMessage.__proto__ || Object.getPrototypeOf(PublishDisabledMessage)).apply(this, arguments));
|
||
|
}
|
||
|
|
||
|
_createClass(PublishDisabledMessage, [{
|
||
|
key: 'render',
|
||
|
value: function render() {
|
||
|
var message = this.props.message;
|
||
|
console.log('this.props.message:', message);
|
||
|
return _react2.default.createElement(
|
||
|
'div',
|
||
|
{ className: 'row dropzone--disabled row--tall flex-container--column flex-container--center-center' },
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'text--disabled' },
|
||
|
'Publishing is currently disabled.'
|
||
|
),
|
||
|
_react2.default.createElement(
|
||
|
'p',
|
||
|
{ className: 'text--disabled' },
|
||
|
message
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
}]);
|
||
|
|
||
|
return PublishDisabledMessage;
|
||
|
}(_react2.default.Component);
|
||
|
|
||
|
exports.default = PublishDisabledMessage;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 89 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _require = __webpack_require__(94),
|
||
|
lstatSync = _require.lstatSync,
|
||
|
readdirSync = _require.readdirSync;
|
||
|
|
||
|
var _require2 = __webpack_require__(21),
|
||
|
join = _require2.join;
|
||
|
|
||
|
var getSubDirectoryNames = exports.getSubDirectoryNames = function getSubDirectoryNames(root) {
|
||
|
return readdirSync(root).filter(function (name) {
|
||
|
var fullPath = join(root, name);
|
||
|
return lstatSync(fullPath).isDirectory();
|
||
|
});
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 90 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
function mysql() {
|
||
|
var _this = this;
|
||
|
|
||
|
this.database = 'default';
|
||
|
this.username = 'default';
|
||
|
this.password = 'default';
|
||
|
this.update = function (config) {
|
||
|
if (!config) {
|
||
|
return logger.warn('No MySQL config received.');
|
||
|
}
|
||
|
// configure credentials
|
||
|
logger.info('configuring mysql...');
|
||
|
var database = config.database,
|
||
|
username = config.username,
|
||
|
password = config.password;
|
||
|
|
||
|
_this.database = database;
|
||
|
_this.username = username;
|
||
|
_this.password = password;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
module.exports = new mysql();
|
||
|
|
||
|
/***/ }),
|
||
|
/* 91 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("passport-local");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 92 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
module.exports = {
|
||
|
returnShortId: function returnShortId(claimsArray, longId) {
|
||
|
var claimIndex = void 0;
|
||
|
var shortId = longId.substring(0, 1); // default short id is the first letter
|
||
|
var shortIdLength = 0;
|
||
|
// find the index of this claim id
|
||
|
claimIndex = claimsArray.findIndex(function (element) {
|
||
|
return element.claimId === longId;
|
||
|
});
|
||
|
if (claimIndex < 0) {
|
||
|
throw new Error('claim id not found in claims list');
|
||
|
}
|
||
|
// get an array of all claims with lower height
|
||
|
var possibleMatches = claimsArray.slice(0, claimIndex);
|
||
|
// remove certificates with the same prefixes until none are left.
|
||
|
while (possibleMatches.length > 0) {
|
||
|
shortIdLength += 1;
|
||
|
shortId = longId.substring(0, shortIdLength);
|
||
|
possibleMatches = possibleMatches.filter(function (element) {
|
||
|
return element.claimId && element.claimId.substring(0, shortIdLength) === shortId;
|
||
|
});
|
||
|
}
|
||
|
return shortId;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 93 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("sequelize");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 94 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("fs");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 95 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _server = __webpack_require__(96);
|
||
|
|
||
|
var _redux = __webpack_require__(62);
|
||
|
|
||
|
var _reducers = __webpack_require__(97);
|
||
|
|
||
|
var _reducers2 = _interopRequireDefault(_reducers);
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
var _GAListener = __webpack_require__(14);
|
||
|
|
||
|
var _GAListener2 = _interopRequireDefault(_GAListener);
|
||
|
|
||
|
var _app = __webpack_require__(102);
|
||
|
|
||
|
var _app2 = _interopRequireDefault(_app);
|
||
|
|
||
|
var _renderFullPage = __webpack_require__(104);
|
||
|
|
||
|
var _renderFullPage2 = _interopRequireDefault(_renderFullPage);
|
||
|
|
||
|
var _reactHelmet = __webpack_require__(54);
|
||
|
|
||
|
var _reactHelmet2 = _interopRequireDefault(_reactHelmet);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
module.exports = function (req, res) {
|
||
|
var context = {};
|
||
|
|
||
|
// create a new Redux store instance
|
||
|
var store = (0, _redux.createStore)(_reducers2.default);
|
||
|
|
||
|
// render component to a string
|
||
|
var html = (0, _server.renderToString)(_react2.default.createElement(
|
||
|
_reactRedux.Provider,
|
||
|
{ store: store },
|
||
|
_react2.default.createElement(
|
||
|
_reactRouterDom.StaticRouter,
|
||
|
{ location: req.url, context: context },
|
||
|
_react2.default.createElement(
|
||
|
_GAListener2.default,
|
||
|
null,
|
||
|
_react2.default.createElement(_app2.default, null)
|
||
|
)
|
||
|
)
|
||
|
));
|
||
|
|
||
|
// get head tags from helmet
|
||
|
var helmet = _reactHelmet2.default.renderStatic();
|
||
|
|
||
|
// check for a redirect
|
||
|
if (context.url) {
|
||
|
// Somewhere a `<Redirect>` was rendered
|
||
|
return res.redirect(301, context.url);
|
||
|
} else {}
|
||
|
// we're good, send the response
|
||
|
|
||
|
|
||
|
// get the initial state from our Redux store
|
||
|
var preloadedState = store.getState();
|
||
|
|
||
|
// send the rendered page back to the client
|
||
|
res.send((0, _renderFullPage2.default)(helmet, html, preloadedState));
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 96 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("react-dom/server");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 97 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _redux = __webpack_require__(62);
|
||
|
|
||
|
var _publish = __webpack_require__(164);
|
||
|
|
||
|
var _publish2 = _interopRequireDefault(_publish);
|
||
|
|
||
|
var _channel = __webpack_require__(165);
|
||
|
|
||
|
var _channel2 = _interopRequireDefault(_channel);
|
||
|
|
||
|
var _show = __webpack_require__(166);
|
||
|
|
||
|
var _show2 = _interopRequireDefault(_show);
|
||
|
|
||
|
var _site = __webpack_require__(167);
|
||
|
|
||
|
var _site2 = _interopRequireDefault(_site);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
exports.default = (0, _redux.combineReducers)({
|
||
|
channel: _channel2.default,
|
||
|
publish: _publish2.default,
|
||
|
show: _show2.default,
|
||
|
site: _site2.default
|
||
|
});
|
||
|
|
||
|
/***/ }),
|
||
|
/* 98 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var FILE_SELECTED = exports.FILE_SELECTED = 'FILE_SELECTED';
|
||
|
var FILE_CLEAR = exports.FILE_CLEAR = 'FILE_CLEAR';
|
||
|
var METADATA_UPDATE = exports.METADATA_UPDATE = 'METADATA_UPDATE';
|
||
|
var CLAIM_UPDATE = exports.CLAIM_UPDATE = 'CLAIM_UPDATE';
|
||
|
var SET_PUBLISH_IN_CHANNEL = exports.SET_PUBLISH_IN_CHANNEL = 'SET_PUBLISH_IN_CHANNEL';
|
||
|
var PUBLISH_STATUS_UPDATE = exports.PUBLISH_STATUS_UPDATE = 'PUBLISH_STATUS_UPDATE';
|
||
|
var ERROR_UPDATE = exports.ERROR_UPDATE = 'ERROR_UPDATE';
|
||
|
var SELECTED_CHANNEL_UPDATE = exports.SELECTED_CHANNEL_UPDATE = 'SELECTED_CHANNEL_UPDATE';
|
||
|
var TOGGLE_METADATA_INPUTS = exports.TOGGLE_METADATA_INPUTS = 'TOGGLE_METADATA_INPUTS';
|
||
|
var THUMBNAIL_NEW = exports.THUMBNAIL_NEW = 'THUMBNAIL_NEW';
|
||
|
var PUBLISH_START = exports.PUBLISH_START = 'PUBLISH_START';
|
||
|
|
||
|
/***/ }),
|
||
|
/* 99 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var LOGIN = exports.LOGIN = 'Existing';
|
||
|
var CREATE = exports.CREATE = 'New';
|
||
|
|
||
|
/***/ }),
|
||
|
/* 100 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var CHANNEL_UPDATE = exports.CHANNEL_UPDATE = 'CHANNEL_UPDATE';
|
||
|
|
||
|
/***/ }),
|
||
|
/* 101 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var LOCAL_CHECK = exports.LOCAL_CHECK = 'LOCAL_CHECK';
|
||
|
var UNAVAILABLE = exports.UNAVAILABLE = 'UNAVAILABLE';
|
||
|
var ERROR = exports.ERROR = 'ERROR';
|
||
|
var AVAILABLE = exports.AVAILABLE = 'AVAILABLE';
|
||
|
|
||
|
/***/ }),
|
||
|
/* 102 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
var _dynamicImport = __webpack_require__(169);
|
||
|
|
||
|
var _LoginPage = __webpack_require__(24);
|
||
|
|
||
|
var _LoginPage2 = _interopRequireDefault(_LoginPage);
|
||
|
|
||
|
var _ShowPage = __webpack_require__(29);
|
||
|
|
||
|
var _ShowPage2 = _interopRequireDefault(_ShowPage);
|
||
|
|
||
|
var _FourOhFourPage = __webpack_require__(38);
|
||
|
|
||
|
var _FourOhFourPage2 = _interopRequireDefault(_FourOhFourPage);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var HomePage = (0, _dynamicImport.dynamicImport)('pages/HomePage') || __webpack_require__(39).default;
|
||
|
// import HomePage from 'pages/HomePage';
|
||
|
// import AboutPage from 'pages/AboutPage';
|
||
|
|
||
|
var AboutPage = (0, _dynamicImport.dynamicImport)('pages/AboutPage') || __webpack_require__(52).default;
|
||
|
|
||
|
var App = function App() {
|
||
|
return _react2.default.createElement(
|
||
|
_reactRouterDom.Switch,
|
||
|
null,
|
||
|
_react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/', component: HomePage }),
|
||
|
_react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/about', component: AboutPage }),
|
||
|
_react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/login', component: _LoginPage2.default }),
|
||
|
_react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:identifier/:claim', component: _ShowPage2.default }),
|
||
|
_react2.default.createElement(_reactRouterDom.Route, { exact: true, path: '/:claim', component: _ShowPage2.default }),
|
||
|
_react2.default.createElement(_reactRouterDom.Route, { component: _FourOhFourPage2.default })
|
||
|
);
|
||
|
};
|
||
|
|
||
|
exports.default = App;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 103 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var CHANNEL = exports.CHANNEL = 'CHANNEL';
|
||
|
var ASSET_LITE = exports.ASSET_LITE = 'ASSET_LITE';
|
||
|
var ASSET_DETAILS = exports.ASSET_DETAILS = 'ASSET_DETAILS';
|
||
|
|
||
|
/***/ }),
|
||
|
/* 104 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
module.exports = function (helmet, html, preloadedState) {
|
||
|
// take the html and preloadedState and return the full page
|
||
|
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="/static/assets/css/reset.css" type="text/css">\n <link rel="stylesheet" href="/static/assets/css/general.css" type="text/css">\n <link rel="stylesheet" href="/static/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="/static/bundle/bundle.js"></script>\n </body>\n </html>\n ';
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 105 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
var _require = __webpack_require__(53),
|
||
|
getClaimId = _require.getClaimId,
|
||
|
getLocalFileRecord = _require.getLocalFileRecord;
|
||
|
|
||
|
var _require2 = __webpack_require__(3),
|
||
|
handleErrorResponse = _require2.handleErrorResponse;
|
||
|
|
||
|
var SERVE = 'SERVE';
|
||
|
var SHOW = 'SHOW';
|
||
|
var NO_FILE = 'NO_FILE';
|
||
|
var NO_CHANNEL = 'NO_CHANNEL';
|
||
|
var NO_CLAIM = 'NO_CLAIM';
|
||
|
|
||
|
function clientAcceptsHtml(_ref) {
|
||
|
var accept = _ref.accept;
|
||
|
|
||
|
return accept && accept.match(/text\/html/);
|
||
|
};
|
||
|
|
||
|
function requestIsFromBrowser(headers) {
|
||
|
return headers['user-agent'] && headers['user-agent'].match(/Mozilla/);
|
||
|
};
|
||
|
|
||
|
function clientWantsAsset(_ref2) {
|
||
|
var accept = _ref2.accept,
|
||
|
range = _ref2.range;
|
||
|
|
||
|
var imageIsWanted = accept && accept.match(/image\/.*/) && !accept.match(/text\/html/) && !accept.match(/text\/\*/);
|
||
|
var videoIsWanted = accept && range;
|
||
|
return imageIsWanted || videoIsWanted;
|
||
|
};
|
||
|
|
||
|
function isValidClaimId(claimId) {
|
||
|
return claimId.length === 40 && !/[^A-Za-z0-9]/g.test(claimId);
|
||
|
};
|
||
|
|
||
|
function isValidShortId(claimId) {
|
||
|
return claimId.length === 1; // it should really evaluate the short url itself
|
||
|
};
|
||
|
|
||
|
function isValidShortIdOrClaimId(input) {
|
||
|
return isValidClaimId(input) || isValidShortId(input);
|
||
|
};
|
||
|
|
||
|
function serveAssetToClient(claimId, name, res) {
|
||
|
return getLocalFileRecord(claimId, name).then(function (fileRecord) {
|
||
|
// check that a local record was found
|
||
|
if (fileRecord === NO_FILE) {
|
||
|
return res.status(307).redirect('/api/claim/get/' + name + '/' + claimId);
|
||
|
}
|
||
|
// serve the file
|
||
|
var filePath = fileRecord.filePath,
|
||
|
fileType = fileRecord.fileType;
|
||
|
|
||
|
logger.verbose('serving file: ' + filePath);
|
||
|
var sendFileOptions = {
|
||
|
headers: {
|
||
|
'X-Content-Type-Options': 'nosniff',
|
||
|
'Content-Type': fileType || 'image/jpeg'
|
||
|
}
|
||
|
};
|
||
|
res.status(200).sendFile(filePath, sendFileOptions);
|
||
|
}).catch(function (error) {
|
||
|
throw error;
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = {
|
||
|
getClaimIdAndServeAsset: function getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res) {
|
||
|
// get the claim Id and then serve the asset
|
||
|
getClaimId(channelName, channelClaimId, claimName, claimId).then(function (fullClaimId) {
|
||
|
if (fullClaimId === NO_CLAIM) {
|
||
|
return res.status(404).json({ success: false, message: 'no claim id could be found' });
|
||
|
} else if (fullClaimId === NO_CHANNEL) {
|
||
|
return res.status(404).json({ success: false, message: 'no channel id could be found' });
|
||
|
}
|
||
|
serveAssetToClient(fullClaimId, claimName, res);
|
||
|
// postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'success');
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
// postToStats(responseType, originalUrl, ip, claimName, fullClaimId, 'fail');
|
||
|
});
|
||
|
},
|
||
|
determineResponseType: function determineResponseType(hasFileExtension, headers) {
|
||
|
var responseType = void 0;
|
||
|
if (hasFileExtension) {
|
||
|
responseType = SERVE; // assume a serve request if file extension is present
|
||
|
if (clientAcceptsHtml(headers)) {
|
||
|
// if the request comes from a browser, change it to a show request
|
||
|
responseType = SHOW;
|
||
|
}
|
||
|
} else {
|
||
|
responseType = SHOW;
|
||
|
if (clientWantsAsset(headers) && requestIsFromBrowser(headers)) {
|
||
|
// this is in case someone embeds a show url
|
||
|
logger.debug('Show request came from browser but wants an image/video. Changing response to serve...');
|
||
|
responseType = SERVE;
|
||
|
}
|
||
|
}
|
||
|
return responseType;
|
||
|
},
|
||
|
flipClaimNameAndIdForBackwardsCompatibility: function flipClaimNameAndIdForBackwardsCompatibility(identifier, name) {
|
||
|
// this is a patch for backwards compatability with '/name/claim_id' url format
|
||
|
if (isValidShortIdOrClaimId(name) && !isValidShortIdOrClaimId(identifier)) {
|
||
|
var tempName = name;
|
||
|
name = identifier;
|
||
|
identifier = tempName;
|
||
|
}
|
||
|
return [identifier, name];
|
||
|
},
|
||
|
logRequestData: function logRequestData(responseType, claimName, channelName, claimId) {
|
||
|
logger.debug('responseType ===', responseType);
|
||
|
logger.debug('claim name === ', claimName);
|
||
|
logger.debug('channel name ===', channelName);
|
||
|
logger.debug('claim id ===', claimId);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 106 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _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"); } }; }();
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
module.exports = {
|
||
|
REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,
|
||
|
REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,
|
||
|
REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,
|
||
|
CHANNEL_CHAR: '@',
|
||
|
parseIdentifier: function parseIdentifier(identifier) {
|
||
|
logger.debug('parsing identifier:', identifier);
|
||
|
var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)
|
||
|
'([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)
|
||
|
);
|
||
|
|
||
|
var _componentsRegex$exec = componentsRegex.exec(identifier).map(function (match) {
|
||
|
return match || null;
|
||
|
}),
|
||
|
_componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),
|
||
|
proto = _componentsRegex$exec2[0],
|
||
|
value = _componentsRegex$exec2[1],
|
||
|
modifierSeperator = _componentsRegex$exec2[2],
|
||
|
modifier = _componentsRegex$exec2[3];
|
||
|
|
||
|
logger.debug(proto + ', ' + value + ', ' + modifierSeperator + ', ' + modifier);
|
||
|
|
||
|
// Validate and process name
|
||
|
if (!value) {
|
||
|
throw new Error('Check your url. No channel name provided before "' + modifierSeperator + '"');
|
||
|
}
|
||
|
var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);
|
||
|
var channelName = isChannel ? value : null;
|
||
|
var claimId = void 0;
|
||
|
if (isChannel) {
|
||
|
if (!channelName) {
|
||
|
throw new Error('No channel name after @.');
|
||
|
}
|
||
|
var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);
|
||
|
if (nameBadChars) {
|
||
|
throw new Error('Invalid characters in channel name: ' + nameBadChars.join(', ') + '.');
|
||
|
}
|
||
|
} else {
|
||
|
claimId = value;
|
||
|
}
|
||
|
|
||
|
// Validate and process modifier
|
||
|
var channelClaimId = void 0;
|
||
|
if (modifierSeperator) {
|
||
|
if (!modifier) {
|
||
|
throw new Error('No modifier provided after separator "' + modifierSeperator + '"');
|
||
|
}
|
||
|
|
||
|
if (modifierSeperator === ':') {
|
||
|
channelClaimId = modifier;
|
||
|
} else {
|
||
|
throw new Error('The "' + modifierSeperator + '" modifier is not currently supported');
|
||
|
}
|
||
|
}
|
||
|
return {
|
||
|
isChannel: isChannel,
|
||
|
channelName: channelName,
|
||
|
channelClaimId: channelClaimId,
|
||
|
claimId: claimId
|
||
|
};
|
||
|
},
|
||
|
parseClaim: function parseClaim(claim) {
|
||
|
logger.debug('parsing name:', claim);
|
||
|
var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier)
|
||
|
'([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)
|
||
|
);
|
||
|
|
||
|
var _componentsRegex$exec3 = componentsRegex.exec(claim).map(function (match) {
|
||
|
return match || null;
|
||
|
}),
|
||
|
_componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),
|
||
|
proto = _componentsRegex$exec4[0],
|
||
|
claimName = _componentsRegex$exec4[1],
|
||
|
modifierSeperator = _componentsRegex$exec4[2],
|
||
|
modifier = _componentsRegex$exec4[3];
|
||
|
|
||
|
logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier);
|
||
|
|
||
|
// Validate and process name
|
||
|
if (!claimName) {
|
||
|
throw new Error('No claim name provided before .');
|
||
|
}
|
||
|
var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);
|
||
|
if (nameBadChars) {
|
||
|
throw new Error('Invalid characters in claim name: ' + nameBadChars.join(', ') + '.');
|
||
|
}
|
||
|
// Validate and process modifier
|
||
|
if (modifierSeperator) {
|
||
|
if (!modifier) {
|
||
|
throw new Error('No file extension provided after separator ' + modifierSeperator + '.');
|
||
|
}
|
||
|
if (modifierSeperator !== '.') {
|
||
|
throw new Error('The ' + modifierSeperator + ' modifier is not supported in the claim name');
|
||
|
}
|
||
|
}
|
||
|
// return results
|
||
|
return {
|
||
|
claimName: claimName
|
||
|
};
|
||
|
},
|
||
|
parseModifier: function parseModifier(claim) {
|
||
|
logger.debug('parsing modifier:', claim);
|
||
|
var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first modifier)
|
||
|
'([:$#.]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)
|
||
|
);
|
||
|
|
||
|
var _componentsRegex$exec5 = componentsRegex.exec(claim).map(function (match) {
|
||
|
return match || null;
|
||
|
}),
|
||
|
_componentsRegex$exec6 = _slicedToArray(_componentsRegex$exec5, 4),
|
||
|
proto = _componentsRegex$exec6[0],
|
||
|
claimName = _componentsRegex$exec6[1],
|
||
|
modifierSeperator = _componentsRegex$exec6[2],
|
||
|
modifier = _componentsRegex$exec6[3];
|
||
|
|
||
|
logger.debug(proto + ', ' + claimName + ', ' + modifierSeperator + ', ' + modifier);
|
||
|
// Validate and process modifier
|
||
|
var hasFileExtension = false;
|
||
|
if (modifierSeperator) {
|
||
|
hasFileExtension = true;
|
||
|
}
|
||
|
return {
|
||
|
hasFileExtension: hasFileExtension
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 107 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _react = __webpack_require__(0);
|
||
|
|
||
|
var _react2 = _interopRequireDefault(_react);
|
||
|
|
||
|
var _server = __webpack_require__(96);
|
||
|
|
||
|
var _redux = __webpack_require__(62);
|
||
|
|
||
|
var _index = __webpack_require__(97);
|
||
|
|
||
|
var _index2 = _interopRequireDefault(_index);
|
||
|
|
||
|
var _reactRedux = __webpack_require__(1);
|
||
|
|
||
|
var _reactRouterDom = __webpack_require__(6);
|
||
|
|
||
|
var _index3 = __webpack_require__(14);
|
||
|
|
||
|
var _index4 = _interopRequireDefault(_index3);
|
||
|
|
||
|
var _app = __webpack_require__(102);
|
||
|
|
||
|
var _app2 = _interopRequireDefault(_app);
|
||
|
|
||
|
var _renderFullPage = __webpack_require__(104);
|
||
|
|
||
|
var _renderFullPage2 = _interopRequireDefault(_renderFullPage);
|
||
|
|
||
|
var _reduxSaga = __webpack_require__(180);
|
||
|
|
||
|
var _reduxSaga2 = _interopRequireDefault(_reduxSaga);
|
||
|
|
||
|
var _effects = __webpack_require__(55);
|
||
|
|
||
|
var _show_uri = __webpack_require__(181);
|
||
|
|
||
|
var _show = __webpack_require__(11);
|
||
|
|
||
|
var _reactHelmet = __webpack_require__(54);
|
||
|
|
||
|
var _reactHelmet2 = _interopRequireDefault(_reactHelmet);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
var returnSagaWithParams = function returnSagaWithParams(saga, params) {
|
||
|
return (/*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
||
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
||
|
while (1) {
|
||
|
switch (_context.prev = _context.next) {
|
||
|
case 0:
|
||
|
_context.next = 2;
|
||
|
return (0, _effects.call)(saga, params);
|
||
|
|
||
|
case 2:
|
||
|
case 'end':
|
||
|
return _context.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _callee, this);
|
||
|
})
|
||
|
);
|
||
|
};
|
||
|
|
||
|
module.exports = function (req, res) {
|
||
|
var context = {};
|
||
|
|
||
|
// create and apply middleware
|
||
|
var sagaMiddleware = (0, _reduxSaga2.default)();
|
||
|
var middleware = (0, _redux.applyMiddleware)(sagaMiddleware);
|
||
|
|
||
|
// create a new Redux store instance
|
||
|
var store = (0, _redux.createStore)(_index2.default, middleware);
|
||
|
|
||
|
// create saga
|
||
|
var action = (0, _show.onHandleShowPageUri)(req.params);
|
||
|
var saga = returnSagaWithParams(_show_uri.handleShowPageUri, action);
|
||
|
|
||
|
// run the saga middleware
|
||
|
sagaMiddleware.run(saga).done.then(function () {
|
||
|
// render component to a string
|
||
|
var html = (0, _server.renderToString)(_react2.default.createElement(
|
||
|
_reactRedux.Provider,
|
||
|
{ store: store },
|
||
|
_react2.default.createElement(
|
||
|
_reactRouterDom.StaticRouter,
|
||
|
{ location: req.url, context: context },
|
||
|
_react2.default.createElement(
|
||
|
_index4.default,
|
||
|
null,
|
||
|
_react2.default.createElement(_app2.default, null)
|
||
|
)
|
||
|
)
|
||
|
));
|
||
|
|
||
|
// get head tags from helmet
|
||
|
var helmet = _reactHelmet2.default.renderStatic();
|
||
|
|
||
|
// check for a redirect
|
||
|
if (context.url) {
|
||
|
return res.redirect(301, context.url);
|
||
|
}
|
||
|
|
||
|
// get the initial state from our Redux store
|
||
|
var preloadedState = store.getState();
|
||
|
|
||
|
// send the rendered page back to the client
|
||
|
res.send((0, _renderFullPage2.default)(helmet, html, preloadedState));
|
||
|
});
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 108 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var selectSiteState = exports.selectSiteState = function selectSiteState(state) {
|
||
|
return state.site;
|
||
|
};
|
||
|
|
||
|
var selectSiteHost = exports.selectSiteHost = function selectSiteHost(state) {
|
||
|
return state.site.host;
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 109 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
__webpack_require__(110);
|
||
|
__webpack_require__(111);
|
||
|
module.exports = __webpack_require__(112);
|
||
|
|
||
|
|
||
|
/***/ }),
|
||
|
/* 110 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("babel-polyfill");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 111 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("whatwg-fetch");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 112 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var Server = __webpack_require__(113);
|
||
|
var Pages = __webpack_require__(56);
|
||
|
var Components = __webpack_require__(57);
|
||
|
var Containers = __webpack_require__(58);
|
||
|
|
||
|
var _exports = {
|
||
|
Server: Server,
|
||
|
Pages: Pages,
|
||
|
Components: Components,
|
||
|
Containers: Containers
|
||
|
};
|
||
|
|
||
|
module.exports = _exports;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 113 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
// app dependencies
|
||
|
var express = __webpack_require__(114);
|
||
|
var bodyParser = __webpack_require__(115);
|
||
|
var expressHandlebars = __webpack_require__(116);
|
||
|
var Handlebars = __webpack_require__(117);
|
||
|
var helmet = __webpack_require__(118);
|
||
|
var cookieSession = __webpack_require__(119);
|
||
|
var http = __webpack_require__(120);
|
||
|
var logger = __webpack_require__(2);
|
||
|
var requestLogger = __webpack_require__(121);
|
||
|
var Path = __webpack_require__(21);
|
||
|
var loggerConfig = __webpack_require__(122);
|
||
|
var mysqlConfig = __webpack_require__(90);
|
||
|
var siteConfig = __webpack_require__(4);
|
||
|
var slackConfig = __webpack_require__(123);
|
||
|
|
||
|
function Server() {
|
||
|
var _this = this;
|
||
|
|
||
|
this.configureLogger = function (userConfig) {
|
||
|
loggerConfig.update(userConfig);
|
||
|
};
|
||
|
this.configureMysql = function (userConfig) {
|
||
|
mysqlConfig.update(userConfig);
|
||
|
};
|
||
|
this.configureSiteDetails = function (userConfig) {
|
||
|
siteConfig.update(userConfig);
|
||
|
};
|
||
|
this.configureSlack = function (userConfig) {
|
||
|
slackConfig.update(userConfig);
|
||
|
};
|
||
|
this.configureClientBundle = function () {
|
||
|
logger.debug('configure the client here by passing in the bundle and configuring it, or better yet: taking in the components to use dynamically from here.');
|
||
|
};
|
||
|
this.configureModels = function () {
|
||
|
logger.debug('here is where you could add/overwrite the default models');
|
||
|
};
|
||
|
this.configureRoutes = function () {
|
||
|
logger.debug('here is where you could add/overwrite the default routes');
|
||
|
};
|
||
|
this.createApp = function () {
|
||
|
// create an Express application
|
||
|
var app = express();
|
||
|
|
||
|
// trust the proxy to get ip address for us
|
||
|
app.enable('trust proxy');
|
||
|
|
||
|
/* add middleware */
|
||
|
// set HTTP headers to protect against well-known web vulnerabilties
|
||
|
app.use(helmet());
|
||
|
// 'express.static' to serve static files from public directory
|
||
|
if (siteConfig.routes.publicFolder) {
|
||
|
// take in a different public folder, so it can serve it's own bundle if needed
|
||
|
var publicFolder = Path.resolve(process.cwd(), siteConfig.routes.publicFolder);
|
||
|
app.use('/static', express.static(publicFolder));
|
||
|
logger.info('serving static files from custom path:', publicFolder);
|
||
|
} else {
|
||
|
var publicPath = Path.resolve(__dirname, 'public');
|
||
|
app.use('/static', express.static(publicPath));
|
||
|
logger.info('serving static files from default path:', publicPath);
|
||
|
};
|
||
|
// 'body parser' for parsing application/json
|
||
|
app.use(bodyParser.json());
|
||
|
// 'body parser' for parsing application/x-www-form-urlencoded
|
||
|
app.use(bodyParser.urlencoded({ extended: true }));
|
||
|
|
||
|
// add custom middleware (note: build out to accept dynamically use what is in server/middleware/
|
||
|
app.use(requestLogger);
|
||
|
|
||
|
// configure passport
|
||
|
var speechPassport = __webpack_require__(59);
|
||
|
// initialize passport
|
||
|
var sessionKey = siteConfig.auth.sessionKey;
|
||
|
app.use(cookieSession({
|
||
|
name: 'session',
|
||
|
keys: [sessionKey],
|
||
|
maxAge: 24 * 60 * 60 * 1000 // i.e. 24 hours
|
||
|
}));
|
||
|
app.use(speechPassport.initialize());
|
||
|
app.use(speechPassport.session());
|
||
|
|
||
|
// configure handlebars & register it with express app
|
||
|
var hbs = expressHandlebars.create({
|
||
|
defaultLayout: 'embed',
|
||
|
handlebars: Handlebars
|
||
|
});
|
||
|
app.engine('handlebars', hbs.engine);
|
||
|
app.set('view engine', 'handlebars');
|
||
|
|
||
|
// set the routes on the app
|
||
|
__webpack_require__(139)(app);
|
||
|
__webpack_require__(144)(app);
|
||
|
__webpack_require__(162)(app);
|
||
|
__webpack_require__(178)(app);
|
||
|
__webpack_require__(188)(app);
|
||
|
|
||
|
_this.app = app;
|
||
|
};
|
||
|
this.initialize = function () {
|
||
|
_this.createApp();
|
||
|
_this.server = http.Server(_this.app);
|
||
|
};
|
||
|
this.start = function () {
|
||
|
var db = __webpack_require__(5);
|
||
|
var PORT = siteConfig.details.port;
|
||
|
// sync sequelize
|
||
|
db.sequelize.sync()
|
||
|
// start the server
|
||
|
.then(function () {
|
||
|
_this.server.listen(PORT, function () {
|
||
|
logger.info('Server is listening on PORT ' + PORT);
|
||
|
});
|
||
|
}).catch(function (error) {
|
||
|
logger.error('Startup Error:', error);
|
||
|
});
|
||
|
};
|
||
|
};
|
||
|
|
||
|
module.exports = Server;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 114 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("express");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 115 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("body-parser");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 116 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("express-handlebars");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 117 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("handlebars");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 118 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("helmet");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 119 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("cookie-session");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 120 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("http");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 121 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
var requestLogger = function requestLogger(req, res, next) {
|
||
|
// custom logging middleware to log all incoming http requests
|
||
|
logger.verbose('Request on ' + req.originalUrl + ' from ' + req.ip);
|
||
|
next();
|
||
|
};
|
||
|
|
||
|
module.exports = requestLogger;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 122 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
function LoggerConfig() {
|
||
|
var _this = this;
|
||
|
|
||
|
this.logLevel = 'debug';
|
||
|
this.update = function (config) {
|
||
|
if (!config) {
|
||
|
return logger.warn('No logger config received.');
|
||
|
}
|
||
|
logger.info('configuring winston logger...');
|
||
|
// update values with local config params
|
||
|
var logLevel = config.logLevel;
|
||
|
|
||
|
_this.logLevel = logLevel;
|
||
|
// configure the winston logger
|
||
|
logger.configure({
|
||
|
transports: [new logger.transports.Console({
|
||
|
level: _this.logLevel,
|
||
|
timestamp: false,
|
||
|
colorize: true,
|
||
|
prettyPrint: true,
|
||
|
handleExceptions: true,
|
||
|
humanReadableUnhandledException: true
|
||
|
})]
|
||
|
});
|
||
|
// test all the log levels
|
||
|
logger.info('testing winston log levels...');
|
||
|
logger.error('Level 0');
|
||
|
logger.warn('Level 1');
|
||
|
logger.info('Level 2');
|
||
|
logger.verbose('Level 3');
|
||
|
logger.debug('Level 4');
|
||
|
logger.silly('Level 5');
|
||
|
};
|
||
|
};
|
||
|
|
||
|
module.exports = new LoggerConfig();
|
||
|
|
||
|
/***/ }),
|
||
|
/* 123 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var winstonSlackWebHook = __webpack_require__(124).SlackWebHook;
|
||
|
var winston = __webpack_require__(2);
|
||
|
|
||
|
function SlackConfig() {
|
||
|
var _this = this;
|
||
|
|
||
|
this.slackWebHook = 'default';
|
||
|
this.slackErrorChannel = 'default';
|
||
|
this.slackInfoChannel = 'default';
|
||
|
this.update = function (config) {
|
||
|
if (!config) {
|
||
|
return winston.warn('No slack config received');
|
||
|
}
|
||
|
// update variables
|
||
|
winston.info('configuring slack logger...');
|
||
|
var slackWebHook = config.slackWebHook,
|
||
|
slackErrorChannel = config.slackErrorChannel,
|
||
|
slackInfoChannel = config.slackInfoChannel;
|
||
|
|
||
|
_this.slackWebHook = slackWebHook;
|
||
|
_this.slackErrorChannel = slackErrorChannel;
|
||
|
_this.slackInfoChannel = slackInfoChannel;
|
||
|
// update slack webhook settings
|
||
|
if (_this.slackWebHook) {
|
||
|
// add a transport for errors to slack
|
||
|
if (_this.slackErrorChannel) {
|
||
|
winston.add(winstonSlackWebHook, {
|
||
|
name: 'slack-errors-transport',
|
||
|
level: 'warn',
|
||
|
webhookUrl: _this.slackWebHook,
|
||
|
channel: _this.slackErrorChannel,
|
||
|
username: 'spee.ch',
|
||
|
iconEmoji: ':face_with_head_bandage:'
|
||
|
});
|
||
|
};
|
||
|
if (slackInfoChannel) {
|
||
|
winston.add(winstonSlackWebHook, {
|
||
|
name: 'slack-info-transport',
|
||
|
level: 'info',
|
||
|
webhookUrl: _this.slackWebHook,
|
||
|
channel: _this.slackInfoChannel,
|
||
|
username: 'spee.ch',
|
||
|
iconEmoji: ':nerd_face:'
|
||
|
});
|
||
|
};
|
||
|
// send test messages
|
||
|
winston.info('testing slack logger...');
|
||
|
winston.error('Slack "error" logging is online.');
|
||
|
winston.info('Slack "info" logging is online.');
|
||
|
} else {
|
||
|
winston.warn('Slack logging is not enabled because no slackWebHook config var provided.');
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
|
||
|
module.exports = new SlackConfig();
|
||
|
|
||
|
/***/ }),
|
||
|
/* 124 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("winston-slack-webhook");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 125 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("passport");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 126 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var PassportLocalStrategy = __webpack_require__(91).Strategy;
|
||
|
var logger = __webpack_require__(2);
|
||
|
var db = __webpack_require__(5);
|
||
|
|
||
|
var returnUserAndChannelInfo = function returnUserAndChannelInfo(userInstance) {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
var userInfo = {};
|
||
|
userInfo['id'] = userInstance.id;
|
||
|
userInfo['userName'] = userInstance.userName;
|
||
|
userInstance.getChannel().then(function (_ref) {
|
||
|
var channelName = _ref.channelName,
|
||
|
channelClaimId = _ref.channelClaimId;
|
||
|
|
||
|
userInfo['channelName'] = channelName;
|
||
|
userInfo['channelClaimId'] = channelClaimId;
|
||
|
return db.Certificate.getShortChannelIdFromLongChannelId(channelClaimId, channelName);
|
||
|
}).then(function (shortChannelId) {
|
||
|
userInfo['shortChannelId'] = shortChannelId;
|
||
|
resolve(userInfo);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = new PassportLocalStrategy({
|
||
|
usernameField: 'username',
|
||
|
passwordField: 'password'
|
||
|
}, function (username, password, done) {
|
||
|
return db.User.findOne({
|
||
|
where: { userName: username }
|
||
|
}).then(function (user) {
|
||
|
if (!user) {
|
||
|
logger.debug('no user found');
|
||
|
return done(null, false, { message: 'Incorrect username or password' });
|
||
|
}
|
||
|
return user.comparePassword(password).then(function (isMatch) {
|
||
|
if (!isMatch) {
|
||
|
logger.debug('incorrect password');
|
||
|
return done(null, false, { message: 'Incorrect username or password' });
|
||
|
}
|
||
|
logger.debug('Password was a match, returning User');
|
||
|
return returnUserAndChannelInfo(user).then(function (userInfo) {
|
||
|
return done(null, userInfo);
|
||
|
}).catch(function (error) {
|
||
|
return error;
|
||
|
});
|
||
|
}).catch(function (error) {
|
||
|
return error;
|
||
|
});
|
||
|
}).catch(function (error) {
|
||
|
return done(error);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
/***/ }),
|
||
|
/* 127 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
var _require = __webpack_require__(92),
|
||
|
returnShortId = _require.returnShortId;
|
||
|
|
||
|
module.exports = function (sequelize, _ref) {
|
||
|
var STRING = _ref.STRING,
|
||
|
BOOLEAN = _ref.BOOLEAN,
|
||
|
INTEGER = _ref.INTEGER,
|
||
|
TEXT = _ref.TEXT,
|
||
|
DECIMAL = _ref.DECIMAL;
|
||
|
|
||
|
var Certificate = sequelize.define('Certificate', {
|
||
|
address: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
amount: {
|
||
|
type: DECIMAL(19, 8),
|
||
|
default: null
|
||
|
},
|
||
|
claimId: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
claimSequence: {
|
||
|
type: INTEGER,
|
||
|
default: null
|
||
|
},
|
||
|
decodedClaim: {
|
||
|
type: BOOLEAN,
|
||
|
default: null
|
||
|
},
|
||
|
depth: {
|
||
|
type: INTEGER,
|
||
|
default: null
|
||
|
},
|
||
|
effectiveAmount: {
|
||
|
type: DECIMAL(19, 8),
|
||
|
default: null
|
||
|
},
|
||
|
hasSignature: {
|
||
|
type: BOOLEAN,
|
||
|
default: null
|
||
|
},
|
||
|
height: {
|
||
|
type: INTEGER,
|
||
|
default: null
|
||
|
},
|
||
|
hex: {
|
||
|
type: TEXT('long'),
|
||
|
default: null
|
||
|
},
|
||
|
name: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
nout: {
|
||
|
type: INTEGER,
|
||
|
default: null
|
||
|
},
|
||
|
txid: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
validAtHeight: {
|
||
|
type: INTEGER,
|
||
|
default: null
|
||
|
},
|
||
|
outpoint: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
valueVersion: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
claimType: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
certificateVersion: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
keyType: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
publicKey: {
|
||
|
type: TEXT('long'),
|
||
|
default: null
|
||
|
}
|
||
|
}, {
|
||
|
freezeTableName: true
|
||
|
});
|
||
|
|
||
|
Certificate.associate = function (db) {
|
||
|
Certificate.belongsTo(db.Channel, {
|
||
|
foreignKey: {
|
||
|
allowNull: true
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Certificate.getShortChannelIdFromLongChannelId = function (longChannelId, channelName) {
|
||
|
var _this = this;
|
||
|
|
||
|
logger.debug('getShortChannelIdFromLongChannelId ' + channelName + ':' + longChannelId);
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this.findAll({
|
||
|
where: { name: channelName },
|
||
|
order: [['height', 'ASC']]
|
||
|
}).then(function (result) {
|
||
|
switch (result.length) {
|
||
|
case 0:
|
||
|
throw new Error('No channel(s) found with that channel name');
|
||
|
default:
|
||
|
return resolve(returnShortId(result, longChannelId));
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Certificate.getLongChannelIdFromShortChannelId = function (channelName, channelClaimId) {
|
||
|
var _this2 = this;
|
||
|
|
||
|
logger.debug('getLongChannelIdFromShortChannelId(' + channelName + ', ' + channelClaimId + ')');
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this2.findAll({
|
||
|
where: {
|
||
|
name: channelName,
|
||
|
claimId: {
|
||
|
$like: channelClaimId + '%'
|
||
|
}
|
||
|
},
|
||
|
order: [['height', 'ASC']]
|
||
|
}).then(function (result) {
|
||
|
switch (result.length) {
|
||
|
case 0:
|
||
|
return resolve(null);
|
||
|
default:
|
||
|
// note results must be sorted
|
||
|
return resolve(result[0].claimId);
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Certificate.getLongChannelIdFromChannelName = function (channelName) {
|
||
|
var _this3 = this;
|
||
|
|
||
|
logger.debug('getLongChannelIdFromChannelName(' + channelName + ')');
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this3.findAll({
|
||
|
where: { name: channelName },
|
||
|
order: [['effectiveAmount', 'DESC'], ['height', 'ASC']]
|
||
|
}).then(function (result) {
|
||
|
switch (result.length) {
|
||
|
case 0:
|
||
|
return resolve(null);
|
||
|
default:
|
||
|
return resolve(result[0].claimId);
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Certificate.validateLongChannelId = function (name, claimId) {
|
||
|
var _this4 = this;
|
||
|
|
||
|
logger.debug('validateLongChannelId(' + name + ', ' + claimId + ')');
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this4.findOne({
|
||
|
where: { name: name, claimId: claimId }
|
||
|
}).then(function (result) {
|
||
|
if (!result) {
|
||
|
return resolve(null);
|
||
|
};
|
||
|
resolve(claimId);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Certificate.getLongChannelId = function (channelName, channelClaimId) {
|
||
|
logger.debug('getLongChannelId(' + channelName + ', ' + channelClaimId + ')');
|
||
|
if (channelClaimId && channelClaimId.length === 40) {
|
||
|
// if a full channel id is provided
|
||
|
return this.validateLongChannelId(channelName, channelClaimId);
|
||
|
} else if (channelClaimId && channelClaimId.length < 40) {
|
||
|
// if a short channel id is provided
|
||
|
return this.getLongChannelIdFromShortChannelId(channelName, channelClaimId);
|
||
|
} else {
|
||
|
return this.getLongChannelIdFromChannelName(channelName); // if no channel id provided
|
||
|
}
|
||
|
};
|
||
|
|
||
|
return Certificate;
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 128 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
module.exports = function (sequelize, _ref) {
|
||
|
var STRING = _ref.STRING;
|
||
|
|
||
|
var Channel = sequelize.define('Channel', {
|
||
|
channelName: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
},
|
||
|
channelClaimId: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
}
|
||
|
}, {
|
||
|
freezeTableName: true
|
||
|
});
|
||
|
|
||
|
Channel.associate = function (db) {
|
||
|
Channel.belongsTo(db.User);
|
||
|
Channel.hasOne(db.Certificate);
|
||
|
};
|
||
|
|
||
|
return Channel;
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 129 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
var _require = __webpack_require__(92),
|
||
|
returnShortId = _require.returnShortId;
|
||
|
|
||
|
var _require2 = __webpack_require__(4),
|
||
|
defaultThumbnail = _require2.assetDefaults.thumbnail,
|
||
|
host = _require2.details.host;
|
||
|
|
||
|
function determineFileExtensionFromContentType(contentType) {
|
||
|
switch (contentType) {
|
||
|
case 'image/jpeg':
|
||
|
case 'image/jpg':
|
||
|
return 'jpeg';
|
||
|
case 'image/png':
|
||
|
return 'png';
|
||
|
case 'image/gif':
|
||
|
return 'gif';
|
||
|
case 'video/mp4':
|
||
|
return 'mp4';
|
||
|
default:
|
||
|
logger.debug('setting unknown file type as file extension jpeg');
|
||
|
return 'jpeg';
|
||
|
}
|
||
|
};
|
||
|
|
||
|
function determineThumbnail(storedThumbnail, defaultThumbnail) {
|
||
|
if (storedThumbnail === '') {
|
||
|
return defaultThumbnail;
|
||
|
}
|
||
|
return storedThumbnail;
|
||
|
};
|
||
|
|
||
|
function prepareClaimData(claim) {
|
||
|
// logger.debug('preparing claim data based on resolved data:', claim);
|
||
|
claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);
|
||
|
claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);
|
||
|
claim['host'] = host;
|
||
|
return claim;
|
||
|
};
|
||
|
|
||
|
module.exports = function (sequelize, _ref) {
|
||
|
var STRING = _ref.STRING,
|
||
|
BOOLEAN = _ref.BOOLEAN,
|
||
|
INTEGER = _ref.INTEGER,
|
||
|
TEXT = _ref.TEXT,
|
||
|
DECIMAL = _ref.DECIMAL;
|
||
|
|
||
|
var Claim = sequelize.define('Claim', {
|
||
|
address: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
amount: {
|
||
|
type: DECIMAL(19, 8),
|
||
|
default: null
|
||
|
},
|
||
|
claimId: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
claimSequence: {
|
||
|
type: INTEGER,
|
||
|
default: null
|
||
|
},
|
||
|
decodedClaim: {
|
||
|
type: BOOLEAN,
|
||
|
default: null
|
||
|
},
|
||
|
depth: {
|
||
|
type: INTEGER,
|
||
|
default: null
|
||
|
},
|
||
|
effectiveAmount: {
|
||
|
type: DECIMAL(19, 8),
|
||
|
default: null
|
||
|
},
|
||
|
hasSignature: {
|
||
|
type: BOOLEAN,
|
||
|
default: null
|
||
|
},
|
||
|
height: {
|
||
|
type: INTEGER,
|
||
|
default: null
|
||
|
},
|
||
|
hex: {
|
||
|
type: TEXT('long'),
|
||
|
default: null
|
||
|
},
|
||
|
name: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
nout: {
|
||
|
type: INTEGER,
|
||
|
default: null
|
||
|
},
|
||
|
txid: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
validAtHeight: {
|
||
|
type: INTEGER,
|
||
|
default: null
|
||
|
},
|
||
|
outpoint: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
claimType: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
certificateId: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
author: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
description: {
|
||
|
type: TEXT('long'),
|
||
|
default: null
|
||
|
},
|
||
|
language: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
license: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
licenseUrl: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
nsfw: {
|
||
|
type: BOOLEAN,
|
||
|
default: null
|
||
|
},
|
||
|
preview: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
thumbnail: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
title: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
metadataVersion: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
contentType: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
source: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
sourceType: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
sourceVersion: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
streamVersion: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
valueVersion: {
|
||
|
type: STRING,
|
||
|
default: null
|
||
|
},
|
||
|
channelName: {
|
||
|
type: STRING,
|
||
|
allowNull: true,
|
||
|
default: null
|
||
|
}
|
||
|
}, {
|
||
|
freezeTableName: true
|
||
|
});
|
||
|
|
||
|
Claim.associate = function (db) {
|
||
|
Claim.belongsTo(db.File, {
|
||
|
foreignKey: {
|
||
|
allowNull: true
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Claim.getShortClaimIdFromLongClaimId = function (claimId, claimName) {
|
||
|
var _this = this;
|
||
|
|
||
|
logger.debug('Claim.getShortClaimIdFromLongClaimId for ' + claimName + '#' + claimId);
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this.findAll({
|
||
|
where: { name: claimName },
|
||
|
order: [['height', 'ASC']]
|
||
|
}).then(function (result) {
|
||
|
switch (result.length) {
|
||
|
case 0:
|
||
|
throw new Error('No claim(s) found with that claim name');
|
||
|
default:
|
||
|
resolve(returnShortId(result, claimId));
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Claim.getAllChannelClaims = function (channelClaimId) {
|
||
|
var _this2 = this;
|
||
|
|
||
|
logger.debug('Claim.getAllChannelClaims for ' + channelClaimId);
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this2.findAll({
|
||
|
where: { certificateId: channelClaimId },
|
||
|
order: [['height', 'ASC']],
|
||
|
raw: true // returns an array of only data, not an array of instances
|
||
|
}).then(function (channelClaimsArray) {
|
||
|
// logger.debug('channelclaimsarray length:', channelClaimsArray.length);
|
||
|
switch (channelClaimsArray.length) {
|
||
|
case 0:
|
||
|
return resolve(null);
|
||
|
default:
|
||
|
channelClaimsArray.forEach(function (claim) {
|
||
|
claim['fileExt'] = determineFileExtensionFromContentType(claim.contentType);
|
||
|
claim['thumbnail'] = determineThumbnail(claim.thumbnail, defaultThumbnail);
|
||
|
return claim;
|
||
|
});
|
||
|
return resolve(channelClaimsArray);
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Claim.getClaimIdByLongChannelId = function (channelClaimId, claimName) {
|
||
|
var _this3 = this;
|
||
|
|
||
|
logger.debug('finding claim id for claim ' + claimName + ' from channel ' + channelClaimId);
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this3.findAll({
|
||
|
where: { name: claimName, certificateId: channelClaimId },
|
||
|
order: [['id', 'ASC']]
|
||
|
}).then(function (result) {
|
||
|
switch (result.length) {
|
||
|
case 0:
|
||
|
return resolve(null);
|
||
|
case 1:
|
||
|
return resolve(result[0].claimId);
|
||
|
default:
|
||
|
logger.error(result.length + ' records found for "' + claimName + '" in channel "' + channelClaimId + '"');
|
||
|
return resolve(result[0].claimId);
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Claim.getLongClaimIdFromShortClaimId = function (name, shortId) {
|
||
|
var _this4 = this;
|
||
|
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this4.findAll({
|
||
|
where: {
|
||
|
name: name,
|
||
|
claimId: {
|
||
|
$like: shortId + '%'
|
||
|
} },
|
||
|
order: [['height', 'ASC']]
|
||
|
}).then(function (result) {
|
||
|
switch (result.length) {
|
||
|
case 0:
|
||
|
return resolve(null);
|
||
|
default:
|
||
|
// note results must be sorted
|
||
|
return resolve(result[0].claimId);
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Claim.getTopFreeClaimIdByClaimName = function (name) {
|
||
|
var _this5 = this;
|
||
|
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this5.findAll({
|
||
|
where: { name: name },
|
||
|
order: [['effectiveAmount', 'DESC'], ['height', 'ASC']] // note: maybe height and effective amount need to switch?
|
||
|
}).then(function (result) {
|
||
|
logger.debug('length of result', result.length);
|
||
|
switch (result.length) {
|
||
|
case 0:
|
||
|
return resolve(null);
|
||
|
default:
|
||
|
return resolve(result[0].dataValues.claimId);
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Claim.validateLongClaimId = function (name, claimId) {
|
||
|
var _this6 = this;
|
||
|
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this6.findOne({
|
||
|
where: { name: name, claimId: claimId }
|
||
|
}).then(function (result) {
|
||
|
if (!result) {
|
||
|
return resolve(null);
|
||
|
};
|
||
|
resolve(claimId);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
Claim.getLongClaimId = function (claimName, claimId) {
|
||
|
logger.debug('getLongClaimId(' + claimName + ', ' + claimId + ')');
|
||
|
if (claimId && claimId.length === 40) {
|
||
|
// if a full claim id is provided
|
||
|
return this.validateLongClaimId(claimName, claimId);
|
||
|
} else if (claimId && claimId.length < 40) {
|
||
|
return this.getLongClaimIdFromShortClaimId(claimName, claimId); // if a short claim id is provided
|
||
|
} else {
|
||
|
return this.getTopFreeClaimIdByClaimName(claimName); // if no claim id is provided
|
||
|
}
|
||
|
};
|
||
|
|
||
|
Claim.resolveClaim = function (name, claimId) {
|
||
|
var _this7 = this;
|
||
|
|
||
|
logger.debug('Claim.resolveClaim: ' + name + ' ' + claimId);
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
_this7.findAll({
|
||
|
where: { name: name, claimId: claimId }
|
||
|
}).then(function (claimArray) {
|
||
|
switch (claimArray.length) {
|
||
|
case 0:
|
||
|
return resolve(null);
|
||
|
case 1:
|
||
|
return resolve(prepareClaimData(claimArray[0].dataValues));
|
||
|
default:
|
||
|
logger.error('more than one record matches ' + name + '#' + claimId + ' in db.Claim');
|
||
|
return resolve(prepareClaimData(claimArray[0].dataValues));
|
||
|
}
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
return Claim;
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 130 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
module.exports = function (sequelize, _ref) {
|
||
|
var STRING = _ref.STRING,
|
||
|
BOOLEAN = _ref.BOOLEAN,
|
||
|
INTEGER = _ref.INTEGER;
|
||
|
|
||
|
var File = sequelize.define('File', {
|
||
|
name: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
},
|
||
|
claimId: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
},
|
||
|
address: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
},
|
||
|
outpoint: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
},
|
||
|
height: {
|
||
|
type: INTEGER,
|
||
|
allowNull: false,
|
||
|
default: 0
|
||
|
},
|
||
|
fileName: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
},
|
||
|
filePath: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
},
|
||
|
fileType: {
|
||
|
type: STRING
|
||
|
},
|
||
|
nsfw: {
|
||
|
type: BOOLEAN,
|
||
|
allowNull: false,
|
||
|
defaultValue: false
|
||
|
},
|
||
|
trendingEligible: {
|
||
|
type: BOOLEAN,
|
||
|
allowNull: false,
|
||
|
defaultValue: true
|
||
|
}
|
||
|
}, {
|
||
|
freezeTableName: true
|
||
|
});
|
||
|
|
||
|
File.associate = function (db) {
|
||
|
File.hasMany(db.Request);
|
||
|
File.hasOne(db.Claim);
|
||
|
};
|
||
|
|
||
|
File.getRecentClaims = function () {
|
||
|
return this.findAll({
|
||
|
where: { nsfw: false, trendingEligible: true },
|
||
|
order: [['createdAt', 'DESC']],
|
||
|
limit: 25
|
||
|
});
|
||
|
};
|
||
|
|
||
|
return File;
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 131 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
module.exports = function (sequelize, _ref) {
|
||
|
var STRING = _ref.STRING,
|
||
|
BOOLEAN = _ref.BOOLEAN,
|
||
|
TEXT = _ref.TEXT;
|
||
|
|
||
|
var Request = sequelize.define('Request', {
|
||
|
action: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
},
|
||
|
url: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
},
|
||
|
ipAddress: {
|
||
|
type: STRING,
|
||
|
allowNull: true
|
||
|
},
|
||
|
result: {
|
||
|
type: TEXT('long'),
|
||
|
allowNull: true,
|
||
|
default: null
|
||
|
}
|
||
|
}, {
|
||
|
freezeTableName: true
|
||
|
});
|
||
|
|
||
|
Request.associate = function (db) {
|
||
|
Request.belongsTo(db.File, {
|
||
|
foreignKey: {
|
||
|
allowNull: true
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
return Request;
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 132 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var bcrypt = __webpack_require__(133);
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
module.exports = function (sequelize, _ref) {
|
||
|
var STRING = _ref.STRING;
|
||
|
|
||
|
var User = sequelize.define('User', {
|
||
|
userName: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
},
|
||
|
password: {
|
||
|
type: STRING,
|
||
|
allowNull: false
|
||
|
}
|
||
|
}, {
|
||
|
freezeTableName: true
|
||
|
});
|
||
|
|
||
|
User.associate = function (db) {
|
||
|
User.hasOne(db.Channel);
|
||
|
};
|
||
|
|
||
|
User.prototype.comparePassword = function (password) {
|
||
|
return bcrypt.compare(password, this.password);
|
||
|
};
|
||
|
|
||
|
User.prototype.changePassword = function (newPassword) {
|
||
|
var _this = this;
|
||
|
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
// generate a salt string to use for hashing
|
||
|
bcrypt.genSalt(function (saltError, salt) {
|
||
|
if (saltError) {
|
||
|
logger.error('salt error', saltError);
|
||
|
reject(saltError);
|
||
|
return;
|
||
|
}
|
||
|
// generate a hashed version of the user's password
|
||
|
bcrypt.hash(newPassword, salt, function (hashError, hash) {
|
||
|
// if there is an error with the hash generation return the error
|
||
|
if (hashError) {
|
||
|
logger.error('hash error', hashError);
|
||
|
reject(hashError);
|
||
|
return;
|
||
|
}
|
||
|
// replace the current password with the new hash
|
||
|
_this.update({ password: hash }).then(function () {
|
||
|
resolve();
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
// pre-save hook method to hash the user's password before the user's info is saved to the db.
|
||
|
User.hook('beforeCreate', function (user, options) {
|
||
|
logger.debug('User.beforeCreate hook...');
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
// generate a salt string to use for hashing
|
||
|
bcrypt.genSalt(function (saltError, salt) {
|
||
|
if (saltError) {
|
||
|
logger.error('salt error', saltError);
|
||
|
reject(saltError);
|
||
|
return;
|
||
|
}
|
||
|
// generate a hashed version of the user's password
|
||
|
bcrypt.hash(user.password, salt, function (hashError, hash) {
|
||
|
// if there is an error with the hash generation return the error
|
||
|
if (hashError) {
|
||
|
logger.error('hash error', hashError);
|
||
|
reject(hashError);
|
||
|
return;
|
||
|
}
|
||
|
// replace the password string with the hash password value
|
||
|
user.password = hash;
|
||
|
resolve();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
return User;
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 133 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("bcrypt");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 134 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _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"); } }; }();
|
||
|
|
||
|
var PassportLocalStrategy = __webpack_require__(91).Strategy;
|
||
|
var lbryApi = __webpack_require__(22);
|
||
|
var logger = __webpack_require__(2);
|
||
|
var db = __webpack_require__(5);
|
||
|
|
||
|
module.exports = new PassportLocalStrategy({
|
||
|
usernameField: 'username',
|
||
|
passwordField: 'password'
|
||
|
}, function (username, password, done) {
|
||
|
logger.verbose('new channel signup request. user: ' + username + ' pass: ' + password + ' .');
|
||
|
var userInfo = {};
|
||
|
// server-side validaton of inputs (username, password)
|
||
|
|
||
|
// create the channel and retrieve the metadata
|
||
|
return lbryApi.createChannel('@' + username).then(function (tx) {
|
||
|
// create user record
|
||
|
var userData = {
|
||
|
userName: username,
|
||
|
password: password
|
||
|
};
|
||
|
logger.verbose('userData >', userData);
|
||
|
// create user record
|
||
|
var channelData = {
|
||
|
channelName: '@' + username,
|
||
|
channelClaimId: tx.claim_id
|
||
|
};
|
||
|
logger.verbose('channelData >', channelData);
|
||
|
// create certificate record
|
||
|
var certificateData = {
|
||
|
claimId: tx.claim_id,
|
||
|
name: '@' + username
|
||
|
// address,
|
||
|
};
|
||
|
logger.verbose('certificateData >', certificateData);
|
||
|
// save user and certificate to db
|
||
|
return Promise.all([db.User.create(userData), db.Channel.create(channelData), db.Certificate.create(certificateData)]);
|
||
|
}).then(function (_ref) {
|
||
|
var _ref2 = _slicedToArray(_ref, 3),
|
||
|
newUser = _ref2[0],
|
||
|
newChannel = _ref2[1],
|
||
|
newCertificate = _ref2[2];
|
||
|
|
||
|
logger.verbose('user and certificate successfully created');
|
||
|
// store the relevant newUser info to be passed back for req.User
|
||
|
userInfo['id'] = newUser.id;
|
||
|
userInfo['userName'] = newUser.userName;
|
||
|
userInfo['channelName'] = newChannel.channelName;
|
||
|
userInfo['channelClaimId'] = newChannel.channelClaimId;
|
||
|
// associate the instances
|
||
|
return Promise.all([newCertificate.setChannel(newChannel), newChannel.setUser(newUser)]);
|
||
|
}).then(function () {
|
||
|
logger.verbose('user and certificate successfully associated');
|
||
|
return db.Certificate.getShortChannelIdFromLongChannelId(userInfo.channelClaimId, userInfo.channelName);
|
||
|
}).then(function (shortChannelId) {
|
||
|
userInfo['shortChannelId'] = shortChannelId;
|
||
|
return done(null, userInfo);
|
||
|
}).catch(function (error) {
|
||
|
logger.error('signup error', error);
|
||
|
return done(error);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
/***/ }),
|
||
|
/* 135 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("axios");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 136 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var lbryConfig = {
|
||
|
api: {
|
||
|
apiHost: 'localhost',
|
||
|
apiPort: '5279'
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = lbryConfig;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 137 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("universal-analytics");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 138 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
module.exports = {
|
||
|
serializeSpeechUser: function serializeSpeechUser(user, done) {
|
||
|
// returns user data to be serialized into session
|
||
|
console.log('serializing user');
|
||
|
done(null, user);
|
||
|
},
|
||
|
deserializeSpeechUser: function deserializeSpeechUser(user, done) {
|
||
|
// deserializes session and populates additional info to req.user
|
||
|
console.log('deserializing user');
|
||
|
done(null, user);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 139 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var speechPassport = __webpack_require__(59);
|
||
|
var handleSignupRequest = __webpack_require__(140);
|
||
|
var handleLoginRequest = __webpack_require__(141);
|
||
|
var handleLogoutRequest = __webpack_require__(142);
|
||
|
var handleUserRequest = __webpack_require__(143);
|
||
|
|
||
|
module.exports = function (app) {
|
||
|
app.post('/signup', speechPassport.authenticate('local-signup'), handleSignupRequest);
|
||
|
app.post('/login', handleLoginRequest);
|
||
|
app.get('/logout', handleLogoutRequest);
|
||
|
app.get('/user', handleUserRequest);
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 140 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var signup = function signup(req, res) {
|
||
|
res.status(200).json({
|
||
|
success: true,
|
||
|
channelName: req.user.channelName,
|
||
|
channelClaimId: req.user.channelClaimId,
|
||
|
shortChannelId: req.user.shortChannelId
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = signup;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 141 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var speechPassport = __webpack_require__(59);
|
||
|
|
||
|
var login = function login(req, res, next) {
|
||
|
speechPassport.authenticate('local-login', function (err, user, info) {
|
||
|
if (err) {
|
||
|
return next(err);
|
||
|
}
|
||
|
if (!user) {
|
||
|
return res.status(400).json({
|
||
|
success: false,
|
||
|
message: info.message
|
||
|
});
|
||
|
}
|
||
|
req.logIn(user, function (err) {
|
||
|
if (err) {
|
||
|
return next(err);
|
||
|
}
|
||
|
return res.status(200).json({
|
||
|
success: true,
|
||
|
channelName: req.user.channelName,
|
||
|
channelClaimId: req.user.channelClaimId,
|
||
|
shortChannelId: req.user.shortChannelId
|
||
|
});
|
||
|
});
|
||
|
})(req, res, next);
|
||
|
};
|
||
|
|
||
|
module.exports = login;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 142 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var logout = function logout(req, res) {
|
||
|
req.logout();
|
||
|
res.status(200).json({ success: true, message: 'you successfully logged out' });
|
||
|
};
|
||
|
|
||
|
module.exports = logout;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 143 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var user = function user(req, res) {
|
||
|
if (req.user) {
|
||
|
res.status(200).json({ success: true, data: req.user });
|
||
|
} else {
|
||
|
res.status(401).json({ success: false, message: 'user is not logged in' });
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = user;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 144 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var channelAvailability = __webpack_require__(145);
|
||
|
var channelClaims = __webpack_require__(146);
|
||
|
var channelData = __webpack_require__(148);
|
||
|
var channelShortId = __webpack_require__(149);
|
||
|
var claimAvailability = __webpack_require__(150);
|
||
|
var claimData = __webpack_require__(151);
|
||
|
var claimGet = __webpack_require__(152);
|
||
|
var claimLongId = __webpack_require__(153);
|
||
|
var claimPublish = __webpack_require__(154);
|
||
|
var claimResolve = __webpack_require__(156);
|
||
|
var claimShortId = __webpack_require__(157);
|
||
|
var claimList = __webpack_require__(158);
|
||
|
var fileAvailability = __webpack_require__(159);
|
||
|
|
||
|
var multipartMiddleware = __webpack_require__(160);
|
||
|
|
||
|
module.exports = function (app) {
|
||
|
// channel routes
|
||
|
app.get('/api/channel/availability/:name', channelAvailability);
|
||
|
app.get('/api/channel/short-id/:longId/:name', channelShortId);
|
||
|
app.get('/api/channel/data/:channelName/:channelClaimId', channelData);
|
||
|
app.get('/api/channel/claims/:channelName/:channelClaimId/:page', channelClaims);
|
||
|
// claim routes
|
||
|
app.get('/api/claim/list/:name', claimList);
|
||
|
app.get('/api/claim/get/:name/:claimId', claimGet);
|
||
|
app.get('/api/claim/availability/:name', claimAvailability);
|
||
|
app.get('/api/claim/resolve/:name/:claimId', claimResolve);
|
||
|
app.post('/api/claim/publish', multipartMiddleware, claimPublish);
|
||
|
app.get('/api/claim/short-id/:longId/:name', claimShortId);
|
||
|
app.post('/api/claim/long-id', claimLongId);
|
||
|
app.get('/api/claim/data/:claimName/:claimId', claimData);
|
||
|
// file routes
|
||
|
app.get('/api/file/availability/:name/:claimId', fileAvailability);
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 145 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(60),
|
||
|
checkChannelAvailability = _require.checkChannelAvailability;
|
||
|
|
||
|
var _require2 = __webpack_require__(13),
|
||
|
sendGATimingEvent = _require2.sendGATimingEvent;
|
||
|
|
||
|
var _require3 = __webpack_require__(3),
|
||
|
handleErrorResponse = _require3.handleErrorResponse;
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to check whether site has published to a channel
|
||
|
|
||
|
*/
|
||
|
|
||
|
var channelAvailability = function channelAvailability(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
name = _ref.params.name;
|
||
|
|
||
|
var gaStartTime = Date.now();
|
||
|
checkChannelAvailability(name).then(function (availableName) {
|
||
|
res.status(200).json(availableName);
|
||
|
sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = channelAvailability;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 146 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(53),
|
||
|
getChannelClaims = _require.getChannelClaims;
|
||
|
|
||
|
var _require2 = __webpack_require__(3),
|
||
|
handleErrorResponse = _require2.handleErrorResponse;
|
||
|
|
||
|
var NO_CHANNEL = 'NO_CHANNEL';
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to get all claims for channel
|
||
|
|
||
|
*/
|
||
|
|
||
|
var channelClaims = function channelClaims(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
body = _ref.body,
|
||
|
params = _ref.params;
|
||
|
|
||
|
var channelName = params.channelName;
|
||
|
var channelClaimId = params.channelClaimId;
|
||
|
if (channelClaimId === 'none') channelClaimId = null;
|
||
|
var page = params.page;
|
||
|
getChannelClaims(channelName, channelClaimId, page).then(function (data) {
|
||
|
if (data === NO_CHANNEL) {
|
||
|
return res.status(404).json({ success: false, message: 'No matching channel was found' });
|
||
|
}
|
||
|
res.status(200).json({ success: true, data: data });
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = channelClaims;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 147 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var CLAIMS_PER_PAGE = 12;
|
||
|
|
||
|
module.exports = {
|
||
|
returnPaginatedChannelClaims: function returnPaginatedChannelClaims(channelName, longChannelClaimId, claims, page) {
|
||
|
var totalPages = module.exports.determineTotalPages(claims);
|
||
|
var paginationPage = module.exports.getPageFromQuery(page);
|
||
|
var viewData = {
|
||
|
channelName: channelName,
|
||
|
longChannelClaimId: longChannelClaimId,
|
||
|
claims: module.exports.extractPageFromClaims(claims, paginationPage),
|
||
|
previousPage: module.exports.determinePreviousPage(paginationPage),
|
||
|
currentPage: paginationPage,
|
||
|
nextPage: module.exports.determineNextPage(totalPages, paginationPage),
|
||
|
totalPages: totalPages,
|
||
|
totalResults: module.exports.determineTotalClaims(claims)
|
||
|
};
|
||
|
return viewData;
|
||
|
},
|
||
|
getPageFromQuery: function getPageFromQuery(page) {
|
||
|
if (page) {
|
||
|
return parseInt(page);
|
||
|
}
|
||
|
return 1;
|
||
|
},
|
||
|
extractPageFromClaims: function extractPageFromClaims(claims, pageNumber) {
|
||
|
if (!claims) {
|
||
|
return []; // if no claims, return this default
|
||
|
}
|
||
|
// logger.debug('claims is array?', Array.isArray(claims));
|
||
|
// logger.debug(`pageNumber ${pageNumber} is number?`, Number.isInteger(pageNumber));
|
||
|
var claimStartIndex = (pageNumber - 1) * CLAIMS_PER_PAGE;
|
||
|
var claimEndIndex = claimStartIndex + CLAIMS_PER_PAGE;
|
||
|
var pageOfClaims = claims.slice(claimStartIndex, claimEndIndex);
|
||
|
return pageOfClaims;
|
||
|
},
|
||
|
determineTotalPages: function determineTotalPages(claims) {
|
||
|
if (!claims) {
|
||
|
return 0;
|
||
|
} else {
|
||
|
var totalClaims = claims.length;
|
||
|
if (totalClaims < CLAIMS_PER_PAGE) {
|
||
|
return 1;
|
||
|
}
|
||
|
var fullPages = Math.floor(totalClaims / CLAIMS_PER_PAGE);
|
||
|
var remainder = totalClaims % CLAIMS_PER_PAGE;
|
||
|
if (remainder === 0) {
|
||
|
return fullPages;
|
||
|
}
|
||
|
return fullPages + 1;
|
||
|
}
|
||
|
},
|
||
|
determinePreviousPage: function determinePreviousPage(currentPage) {
|
||
|
if (currentPage === 1) {
|
||
|
return null;
|
||
|
}
|
||
|
return currentPage - 1;
|
||
|
},
|
||
|
determineNextPage: function determineNextPage(totalPages, currentPage) {
|
||
|
if (currentPage === totalPages) {
|
||
|
return null;
|
||
|
}
|
||
|
return currentPage + 1;
|
||
|
},
|
||
|
determineTotalClaims: function determineTotalClaims(claims) {
|
||
|
if (!claims) {
|
||
|
return 0;
|
||
|
}
|
||
|
return claims.length;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 148 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(53),
|
||
|
getChannelData = _require.getChannelData;
|
||
|
|
||
|
var _require2 = __webpack_require__(3),
|
||
|
handleErrorResponse = _require2.handleErrorResponse;
|
||
|
|
||
|
var NO_CHANNEL = 'NO_CHANNEL';
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to get data for a channel
|
||
|
|
||
|
*/
|
||
|
|
||
|
var channelData = function channelData(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
body = _ref.body,
|
||
|
params = _ref.params;
|
||
|
|
||
|
var channelName = params.channelName;
|
||
|
var channelClaimId = params.channelClaimId;
|
||
|
if (channelClaimId === 'none') channelClaimId = null;
|
||
|
getChannelData(channelName, channelClaimId, 0).then(function (data) {
|
||
|
if (data === NO_CHANNEL) {
|
||
|
return res.status(404).json({ success: false, message: 'No matching channel was found' });
|
||
|
}
|
||
|
res.status(200).json({ success: true, data: data });
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = channelData;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 149 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(3),
|
||
|
handleErrorResponse = _require.handleErrorResponse;
|
||
|
|
||
|
var db = __webpack_require__(5);
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to get a short channel id from long channel Id
|
||
|
|
||
|
*/
|
||
|
|
||
|
var channelShortIdRoute = function channelShortIdRoute(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
params = _ref.params;
|
||
|
|
||
|
db.Certificate.getShortChannelIdFromLongChannelId(params.longId, params.name).then(function (shortId) {
|
||
|
res.status(200).json(shortId);
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = channelShortIdRoute;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 150 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(60),
|
||
|
claimNameIsAvailable = _require.claimNameIsAvailable;
|
||
|
|
||
|
var _require2 = __webpack_require__(13),
|
||
|
sendGATimingEvent = _require2.sendGATimingEvent;
|
||
|
|
||
|
var _require3 = __webpack_require__(3),
|
||
|
handleErrorResponse = _require3.handleErrorResponse;
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to check whether this site published to a claim
|
||
|
|
||
|
*/
|
||
|
|
||
|
var claimAvailability = function claimAvailability(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
name = _ref.params.name;
|
||
|
|
||
|
var gaStartTime = Date.now();
|
||
|
claimNameIsAvailable(name).then(function (result) {
|
||
|
res.status(200).json(result);
|
||
|
sendGATimingEvent('end-to-end', 'claim name availability', name, gaStartTime, Date.now());
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = claimAvailability;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 151 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(3),
|
||
|
handleErrorResponse = _require.handleErrorResponse;
|
||
|
|
||
|
var db = __webpack_require__(5);
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to return data for a claim
|
||
|
|
||
|
*/
|
||
|
|
||
|
var claimData = function claimData(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
body = _ref.body,
|
||
|
params = _ref.params;
|
||
|
|
||
|
var claimName = params.claimName;
|
||
|
var claimId = params.claimId;
|
||
|
if (claimId === 'none') claimId = null;
|
||
|
db.Claim.resolveClaim(claimName, claimId).then(function (claimInfo) {
|
||
|
if (!claimInfo) {
|
||
|
return res.status(404).json({ success: false, message: 'No claim could be found' });
|
||
|
}
|
||
|
res.status(200).json({ success: true, data: claimInfo });
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = claimData;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 152 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _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"); } }; }();
|
||
|
|
||
|
var _require = __webpack_require__(22),
|
||
|
getClaim = _require.getClaim;
|
||
|
|
||
|
var _require2 = __webpack_require__(61),
|
||
|
addGetResultsToFileData = _require2.addGetResultsToFileData,
|
||
|
createFileData = _require2.createFileData;
|
||
|
|
||
|
var _require3 = __webpack_require__(3),
|
||
|
handleErrorResponse = _require3.handleErrorResponse;
|
||
|
|
||
|
var db = __webpack_require__(5);
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to get a claim
|
||
|
|
||
|
*/
|
||
|
|
||
|
var claimGet = function claimGet(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
params = _ref.params;
|
||
|
|
||
|
var name = params.name;
|
||
|
var claimId = params.claimId;
|
||
|
// resolve the claim
|
||
|
db.Claim.resolveClaim(name, claimId).then(function (resolveResult) {
|
||
|
// make sure a claim actually exists at that uri
|
||
|
if (!resolveResult) {
|
||
|
throw new Error('No matching uri found in Claim table');
|
||
|
}
|
||
|
var fileData = createFileData(resolveResult);
|
||
|
// get the claim
|
||
|
return Promise.all([fileData, getClaim(name + '#' + claimId)]);
|
||
|
}).then(function (_ref2) {
|
||
|
var _ref3 = _slicedToArray(_ref2, 2),
|
||
|
fileData = _ref3[0],
|
||
|
getResult = _ref3[1];
|
||
|
|
||
|
fileData = addGetResultsToFileData(fileData, getResult);
|
||
|
return Promise.all([db.upsert(db.File, fileData, { name: name, claimId: claimId }, 'File'), getResult]);
|
||
|
}).then(function (_ref4) {
|
||
|
var _ref5 = _slicedToArray(_ref4, 2),
|
||
|
fileRecord = _ref5[0],
|
||
|
_ref5$ = _ref5[1],
|
||
|
message = _ref5$.message,
|
||
|
completed = _ref5$.completed;
|
||
|
|
||
|
res.status(200).json({ success: true, message: message, completed: completed });
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = claimGet;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 153 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(53),
|
||
|
getClaimId = _require.getClaimId;
|
||
|
|
||
|
var _require2 = __webpack_require__(3),
|
||
|
handleErrorResponse = _require2.handleErrorResponse;
|
||
|
|
||
|
var NO_CHANNEL = 'NO_CHANNEL';
|
||
|
var NO_CLAIM = 'NO_CLAIM';
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to get a long claim id
|
||
|
|
||
|
*/
|
||
|
|
||
|
var claimLongId = function claimLongId(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
body = _ref.body,
|
||
|
params = _ref.params;
|
||
|
|
||
|
var channelName = body.channelName;
|
||
|
var channelClaimId = body.channelClaimId;
|
||
|
var claimName = body.claimName;
|
||
|
var claimId = body.claimId;
|
||
|
getClaimId(channelName, channelClaimId, claimName, claimId).then(function (result) {
|
||
|
if (result === NO_CHANNEL) {
|
||
|
return res.status(404).json({ success: false, message: 'No matching channel could be found' });
|
||
|
}
|
||
|
if (result === NO_CLAIM) {
|
||
|
return res.status(404).json({ success: false, message: 'No matching claim id could be found' });
|
||
|
}
|
||
|
res.status(200).json({ success: true, data: result });
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = claimLongId;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 154 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _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"); } }; }();
|
||
|
|
||
|
var _require = __webpack_require__(61),
|
||
|
createBasicPublishParams = _require.createBasicPublishParams,
|
||
|
createThumbnailPublishParams = _require.createThumbnailPublishParams,
|
||
|
parsePublishApiRequestBody = _require.parsePublishApiRequestBody,
|
||
|
parsePublishApiRequestFiles = _require.parsePublishApiRequestFiles;
|
||
|
|
||
|
var _require2 = __webpack_require__(60),
|
||
|
claimNameIsAvailable = _require2.claimNameIsAvailable,
|
||
|
publish = _require2.publish;
|
||
|
|
||
|
var _require3 = __webpack_require__(155),
|
||
|
authenticateUser = _require3.authenticateUser;
|
||
|
|
||
|
var _require4 = __webpack_require__(13),
|
||
|
sendGATimingEvent = _require4.sendGATimingEvent;
|
||
|
|
||
|
var _require5 = __webpack_require__(3),
|
||
|
handleErrorResponse = _require5.handleErrorResponse;
|
||
|
|
||
|
var _require6 = __webpack_require__(4),
|
||
|
host = _require6.details.host;
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to publish a claim through the daemon
|
||
|
|
||
|
*/
|
||
|
|
||
|
var claimPublish = function claimPublish(_ref, res) {
|
||
|
var body = _ref.body,
|
||
|
files = _ref.files,
|
||
|
headers = _ref.headers,
|
||
|
ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
user = _ref.user;
|
||
|
|
||
|
// define variables
|
||
|
var channelName = void 0,
|
||
|
channelId = void 0,
|
||
|
channelPassword = void 0,
|
||
|
description = void 0,
|
||
|
fileName = void 0,
|
||
|
filePath = void 0,
|
||
|
fileType = void 0,
|
||
|
gaStartTime = void 0,
|
||
|
license = void 0,
|
||
|
name = void 0,
|
||
|
nsfw = void 0,
|
||
|
thumbnail = void 0,
|
||
|
thumbnailFileName = void 0,
|
||
|
thumbnailFilePath = void 0,
|
||
|
thumbnailFileType = void 0,
|
||
|
title = void 0;
|
||
|
// record the start time of the request
|
||
|
gaStartTime = Date.now();
|
||
|
// validate the body and files of the request
|
||
|
try {
|
||
|
var _parsePublishApiReque = parsePublishApiRequestBody(body);
|
||
|
// validateApiPublishRequest(body, files);
|
||
|
|
||
|
|
||
|
name = _parsePublishApiReque.name;
|
||
|
nsfw = _parsePublishApiReque.nsfw;
|
||
|
license = _parsePublishApiReque.license;
|
||
|
title = _parsePublishApiReque.title;
|
||
|
description = _parsePublishApiReque.description;
|
||
|
thumbnail = _parsePublishApiReque.thumbnail;
|
||
|
|
||
|
var _parsePublishApiReque2 = parsePublishApiRequestFiles(files);
|
||
|
|
||
|
fileName = _parsePublishApiReque2.fileName;
|
||
|
filePath = _parsePublishApiReque2.filePath;
|
||
|
fileType = _parsePublishApiReque2.fileType;
|
||
|
thumbnailFileName = _parsePublishApiReque2.thumbnailFileName;
|
||
|
thumbnailFilePath = _parsePublishApiReque2.thumbnailFilePath;
|
||
|
thumbnailFileType = _parsePublishApiReque2.thumbnailFileType;
|
||
|
channelName = body.channelName;
|
||
|
channelId = body.channelId;
|
||
|
channelPassword = body.channelPassword;
|
||
|
} catch (error) {
|
||
|
return res.status(400).json({ success: false, message: error.message });
|
||
|
}
|
||
|
// check channel authorization
|
||
|
Promise.all([authenticateUser(channelName, channelId, channelPassword, user), claimNameIsAvailable(name), createBasicPublishParams(filePath, name, title, description, license, nsfw, thumbnail), createThumbnailPublishParams(thumbnailFilePath, name, license, nsfw)]).then(function (_ref2) {
|
||
|
var _ref3 = _slicedToArray(_ref2, 4),
|
||
|
_ref3$ = _ref3[0],
|
||
|
channelName = _ref3$.channelName,
|
||
|
channelClaimId = _ref3$.channelClaimId,
|
||
|
validatedClaimName = _ref3[1],
|
||
|
publishParams = _ref3[2],
|
||
|
thumbnailPublishParams = _ref3[3];
|
||
|
|
||
|
// add channel details to the publish params
|
||
|
if (channelName && channelClaimId) {
|
||
|
publishParams['channel_name'] = channelName;
|
||
|
publishParams['channel_id'] = channelClaimId;
|
||
|
}
|
||
|
// publish the thumbnail
|
||
|
if (thumbnailPublishParams) {
|
||
|
publish(thumbnailPublishParams, thumbnailFileName, thumbnailFileType);
|
||
|
}
|
||
|
// publish the asset
|
||
|
return publish(publishParams, fileName, fileType);
|
||
|
}).then(function (result) {
|
||
|
res.status(200).json({
|
||
|
success: true,
|
||
|
message: 'publish completed successfully',
|
||
|
data: {
|
||
|
name: name,
|
||
|
claimId: result.claim_id,
|
||
|
url: host + '/' + result.claim_id + '/' + name,
|
||
|
lbryTx: result
|
||
|
}
|
||
|
});
|
||
|
// record the publish end time and send to google analytics
|
||
|
sendGATimingEvent('end-to-end', 'publish', fileType, gaStartTime, Date.now());
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = claimPublish;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 155 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var db = __webpack_require__(5);
|
||
|
var logger = __webpack_require__(2);
|
||
|
|
||
|
module.exports = {
|
||
|
authenticateUser: function authenticateUser(channelName, channelId, channelPassword, user) {
|
||
|
// case: no channelName or channel Id are provided (anonymous), regardless of whether user token is provided
|
||
|
if (!channelName && !channelId) {
|
||
|
return {
|
||
|
channelName: null,
|
||
|
channelClaimId: null
|
||
|
};
|
||
|
}
|
||
|
// case: channelName or channel Id are provided with user token
|
||
|
if (user) {
|
||
|
if (channelName && channelName !== user.channelName) {
|
||
|
throw new Error('the provided channel name does not match user credentials');
|
||
|
}
|
||
|
if (channelId && channelId !== user.channelClaimId) {
|
||
|
throw new Error('the provided channel id does not match user credentials');
|
||
|
}
|
||
|
return {
|
||
|
channelName: user.channelName,
|
||
|
channelClaimId: user.channelClaimId
|
||
|
};
|
||
|
}
|
||
|
// case: channelName or channel Id are provided with password instead of user token
|
||
|
if (!channelPassword) throw new Error('no channel password provided');
|
||
|
return module.exports.authenticateChannelCredentials(channelName, channelId, channelPassword);
|
||
|
},
|
||
|
authenticateChannelCredentials: function authenticateChannelCredentials(channelName, channelId, userPassword) {
|
||
|
return new Promise(function (resolve, reject) {
|
||
|
// hoisted variables
|
||
|
var channelData = void 0;
|
||
|
// build the params for finding the channel
|
||
|
var channelFindParams = {};
|
||
|
if (channelName) channelFindParams['channelName'] = channelName;
|
||
|
if (channelId) channelFindParams['channelClaimId'] = channelId;
|
||
|
// find the channel
|
||
|
db.Channel.findOne({
|
||
|
where: channelFindParams
|
||
|
}).then(function (channel) {
|
||
|
if (!channel) {
|
||
|
logger.debug('no channel found');
|
||
|
throw new Error('Authentication failed, you do not have access to that channel');
|
||
|
}
|
||
|
channelData = channel.get();
|
||
|
logger.debug('channel data:', channelData);
|
||
|
return db.User.findOne({
|
||
|
where: { userName: channelData.channelName.substring(1) }
|
||
|
});
|
||
|
}).then(function (user) {
|
||
|
if (!user) {
|
||
|
logger.debug('no user found');
|
||
|
throw new Error('Authentication failed, you do not have access to that channel');
|
||
|
}
|
||
|
return user.comparePassword(userPassword);
|
||
|
}).then(function (isMatch) {
|
||
|
if (!isMatch) {
|
||
|
logger.debug('incorrect password');
|
||
|
throw new Error('Authentication failed, you do not have access to that channel');
|
||
|
}
|
||
|
logger.debug('...password was a match...');
|
||
|
resolve(channelData);
|
||
|
}).catch(function (error) {
|
||
|
reject(error);
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 156 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(22),
|
||
|
resolveUri = _require.resolveUri;
|
||
|
|
||
|
var _require2 = __webpack_require__(3),
|
||
|
handleErrorResponse = _require2.handleErrorResponse;
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to run a resolve request on the daemon
|
||
|
|
||
|
*/
|
||
|
|
||
|
var claimResolve = function claimResolve(_ref, res) {
|
||
|
var headers = _ref.headers,
|
||
|
ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
params = _ref.params;
|
||
|
|
||
|
resolveUri(params.name + '#' + params.claimId).then(function (resolvedUri) {
|
||
|
res.status(200).json(resolvedUri);
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = claimResolve;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 157 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(3),
|
||
|
handleErrorResponse = _require.handleErrorResponse;
|
||
|
|
||
|
var db = __webpack_require__(5);
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to get a short claim id from long claim Id
|
||
|
|
||
|
*/
|
||
|
|
||
|
var claimShortId = function claimShortId(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
body = _ref.body,
|
||
|
params = _ref.params;
|
||
|
|
||
|
db.Claim.getShortClaimIdFromLongClaimId(params.longId, params.name).then(function (shortId) {
|
||
|
res.status(200).json({ success: true, data: shortId });
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = claimShortId;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 158 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(22),
|
||
|
getClaimList = _require.getClaimList;
|
||
|
|
||
|
var _require2 = __webpack_require__(3),
|
||
|
handleErrorResponse = _require2.handleErrorResponse;
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to get list of claims
|
||
|
|
||
|
*/
|
||
|
|
||
|
var claimList = function claimList(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
params = _ref.params;
|
||
|
|
||
|
getClaimList(params.name).then(function (claimsList) {
|
||
|
res.status(200).json(claimsList);
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = claimList;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 159 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(3),
|
||
|
handleErrorResponse = _require.handleErrorResponse;
|
||
|
|
||
|
var db = __webpack_require__(5);
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to see if asset is available locally
|
||
|
|
||
|
*/
|
||
|
|
||
|
var fileAvailability = function fileAvailability(_ref, res) {
|
||
|
var ip = _ref.ip,
|
||
|
originalUrl = _ref.originalUrl,
|
||
|
params = _ref.params;
|
||
|
|
||
|
var name = params.name;
|
||
|
var claimId = params.claimId;
|
||
|
db.File.findOne({
|
||
|
where: {
|
||
|
name: name,
|
||
|
claimId: claimId
|
||
|
}
|
||
|
}).then(function (result) {
|
||
|
if (result) {
|
||
|
return res.status(200).json({ success: true, data: true });
|
||
|
}
|
||
|
res.status(200).json({ success: true, data: false });
|
||
|
}).catch(function (error) {
|
||
|
handleErrorResponse(originalUrl, ip, error, res);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = fileAvailability;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 160 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var multipart = __webpack_require__(161);
|
||
|
|
||
|
var _require = __webpack_require__(4),
|
||
|
uploadDirectory = _require.publishing.uploadDirectory;
|
||
|
|
||
|
var multipartMiddleware = multipart({ uploadDir: uploadDirectory });
|
||
|
|
||
|
module.exports = multipartMiddleware;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 161 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("connect-multiparty");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 162 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var handlePageRequest = __webpack_require__(163);
|
||
|
var handleEmbedRequest = __webpack_require__(176);
|
||
|
var redirect = __webpack_require__(177);
|
||
|
|
||
|
module.exports = function (app) {
|
||
|
app.get('/', handlePageRequest);
|
||
|
app.get('/login', handlePageRequest);
|
||
|
app.get('/about', handlePageRequest);
|
||
|
app.get('/trending', redirect('/popular'));
|
||
|
app.get('/popular', handlePageRequest);
|
||
|
app.get('/new', handlePageRequest);
|
||
|
app.get('/embed/:claimId/:name', handleEmbedRequest); // route to send embedable video player (for twitter)
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 163 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var handlePageRender = __webpack_require__(95);
|
||
|
|
||
|
var sendReactApp = function sendReactApp(req, res) {
|
||
|
handlePageRender(req, res);
|
||
|
};
|
||
|
|
||
|
module.exports = sendReactApp;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 164 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
exports.default = function () {
|
||
|
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
|
||
|
var action = arguments[1];
|
||
|
|
||
|
switch (action.type) {
|
||
|
case actions.FILE_SELECTED:
|
||
|
return Object.assign({}, initialState, { // note: clears to initial state
|
||
|
file: action.data
|
||
|
});
|
||
|
case actions.FILE_CLEAR:
|
||
|
return initialState;
|
||
|
case actions.METADATA_UPDATE:
|
||
|
return Object.assign({}, state, {
|
||
|
metadata: Object.assign({}, state.metadata, _defineProperty({}, action.data.name, action.data.value))
|
||
|
});
|
||
|
case actions.CLAIM_UPDATE:
|
||
|
return Object.assign({}, state, {
|
||
|
claim: action.data
|
||
|
});
|
||
|
case actions.SET_PUBLISH_IN_CHANNEL:
|
||
|
return Object.assign({}, state, {
|
||
|
publishInChannel: action.channel
|
||
|
});
|
||
|
case actions.PUBLISH_STATUS_UPDATE:
|
||
|
return Object.assign({}, state, {
|
||
|
status: action.data
|
||
|
});
|
||
|
case actions.ERROR_UPDATE:
|
||
|
return Object.assign({}, state, {
|
||
|
error: Object.assign({}, state.error, _defineProperty({}, action.data.name, action.data.value))
|
||
|
});
|
||
|
case actions.SELECTED_CHANNEL_UPDATE:
|
||
|
return Object.assign({}, state, {
|
||
|
selectedChannel: action.data
|
||
|
});
|
||
|
case actions.TOGGLE_METADATA_INPUTS:
|
||
|
return Object.assign({}, state, {
|
||
|
showMetadataInputs: action.data
|
||
|
});
|
||
|
case actions.THUMBNAIL_NEW:
|
||
|
return Object.assign({}, state, {
|
||
|
thumbnail: action.data
|
||
|
});
|
||
|
default:
|
||
|
return state;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _publish_action_types = __webpack_require__(98);
|
||
|
|
||
|
var actions = _interopRequireWildcard(_publish_action_types);
|
||
|
|
||
|
var _publish_channel_select_states = __webpack_require__(99);
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var _require = __webpack_require__(4),
|
||
|
publishing = _require.publishing;
|
||
|
|
||
|
var initialState = {
|
||
|
disabled: publishing.disabled,
|
||
|
disabledMessage: publishing.disabledMessage,
|
||
|
publishInChannel: false,
|
||
|
selectedChannel: _publish_channel_select_states.LOGIN,
|
||
|
showMetadataInputs: false,
|
||
|
status: {
|
||
|
status: null,
|
||
|
message: null
|
||
|
},
|
||
|
error: {
|
||
|
file: null,
|
||
|
url: null,
|
||
|
channel: null,
|
||
|
publishSubmit: null
|
||
|
},
|
||
|
file: null,
|
||
|
claim: '',
|
||
|
metadata: {
|
||
|
title: '',
|
||
|
description: '',
|
||
|
license: '',
|
||
|
nsfw: false
|
||
|
},
|
||
|
thumbnail: null
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 165 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
exports.default = function () {
|
||
|
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
|
||
|
var action = arguments[1];
|
||
|
|
||
|
switch (action.type) {
|
||
|
case actions.CHANNEL_UPDATE:
|
||
|
return Object.assign({}, state, {
|
||
|
loggedInChannel: action.data
|
||
|
});
|
||
|
default:
|
||
|
return state;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _channel_action_types = __webpack_require__(100);
|
||
|
|
||
|
var actions = _interopRequireWildcard(_channel_action_types);
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
var initialState = {
|
||
|
loggedInChannel: {
|
||
|
name: null,
|
||
|
shortId: null,
|
||
|
longId: null
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 166 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
exports.default = function () {
|
||
|
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
|
||
|
var action = arguments[1];
|
||
|
|
||
|
switch (action.type) {
|
||
|
// handle request
|
||
|
case actions.REQUEST_ERROR:
|
||
|
return Object.assign({}, state, {
|
||
|
request: Object.assign({}, state.request, {
|
||
|
error: action.data
|
||
|
})
|
||
|
});
|
||
|
case actions.REQUEST_UPDATE:
|
||
|
return Object.assign({}, state, {
|
||
|
request: Object.assign({}, state.request, {
|
||
|
type: action.data.requestType,
|
||
|
id: action.data.requestId
|
||
|
})
|
||
|
});
|
||
|
// store requests
|
||
|
case actions.REQUEST_LIST_ADD:
|
||
|
return Object.assign({}, state, {
|
||
|
requestList: Object.assign({}, state.requestList, _defineProperty({}, action.data.id, {
|
||
|
error: action.data.error,
|
||
|
key: action.data.key
|
||
|
}))
|
||
|
});
|
||
|
// asset data
|
||
|
case actions.ASSET_ADD:
|
||
|
return Object.assign({}, state, {
|
||
|
assetList: Object.assign({}, state.assetList, _defineProperty({}, action.data.id, {
|
||
|
error: action.data.error,
|
||
|
name: action.data.name,
|
||
|
claimId: action.data.claimId,
|
||
|
shortId: action.data.shortId,
|
||
|
claimData: action.data.claimData
|
||
|
}))
|
||
|
});
|
||
|
// channel data
|
||
|
case actions.CHANNEL_ADD:
|
||
|
return Object.assign({}, state, {
|
||
|
channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.id, {
|
||
|
name: action.data.name,
|
||
|
longId: action.data.longId,
|
||
|
shortId: action.data.shortId,
|
||
|
claimsData: action.data.claimsData
|
||
|
}))
|
||
|
});
|
||
|
case actions.CHANNEL_CLAIMS_UPDATE_SUCCESS:
|
||
|
return Object.assign({}, state, {
|
||
|
channelList: Object.assign({}, state.channelList, _defineProperty({}, action.data.channelListId, Object.assign({}, state.channelList[action.data.channelListId], {
|
||
|
claimsData: action.data.claimsData
|
||
|
})))
|
||
|
});
|
||
|
// display an asset
|
||
|
case actions.FILE_AVAILABILITY_UPDATE:
|
||
|
return Object.assign({}, state, {
|
||
|
displayAsset: Object.assign({}, state.displayAsset, {
|
||
|
status: action.data
|
||
|
})
|
||
|
});
|
||
|
case actions.DISPLAY_ASSET_ERROR:
|
||
|
return Object.assign({}, state, {
|
||
|
displayAsset: Object.assign({}, state.displayAsset, {
|
||
|
error: action.data,
|
||
|
status: _asset_display_states.ERROR
|
||
|
})
|
||
|
});
|
||
|
default:
|
||
|
return state;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var _show_action_types = __webpack_require__(23);
|
||
|
|
||
|
var actions = _interopRequireWildcard(_show_action_types);
|
||
|
|
||
|
var _asset_display_states = __webpack_require__(101);
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
function _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; }
|
||
|
|
||
|
var initialState = {
|
||
|
request: {
|
||
|
error: null,
|
||
|
type: null,
|
||
|
id: null
|
||
|
},
|
||
|
requestList: {},
|
||
|
channelList: {},
|
||
|
assetList: {},
|
||
|
displayAsset: {
|
||
|
error: null,
|
||
|
status: _asset_display_states.LOCAL_CHECK
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 167 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
exports.default = function () {
|
||
|
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
|
||
|
var action = arguments[1];
|
||
|
|
||
|
switch (action.type) {
|
||
|
default:
|
||
|
return state;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var siteConfig = __webpack_require__(4);
|
||
|
|
||
|
var googleAnalyticsId = siteConfig.analytics.googleId,
|
||
|
_siteConfig$assetDefa = siteConfig.assetDefaults,
|
||
|
defaultThumbnail = _siteConfig$assetDefa.thumbnail,
|
||
|
defaultDescription = _siteConfig$assetDefa.description,
|
||
|
_siteConfig$details = siteConfig.details,
|
||
|
description = _siteConfig$details.description,
|
||
|
host = _siteConfig$details.host,
|
||
|
title = _siteConfig$details.title,
|
||
|
twitter = _siteConfig$details.twitter;
|
||
|
|
||
|
|
||
|
var initialState = {
|
||
|
description: description,
|
||
|
googleAnalyticsId: googleAnalyticsId,
|
||
|
host: host,
|
||
|
title: title,
|
||
|
twitter: twitter,
|
||
|
defaultDescription: defaultDescription,
|
||
|
defaultThumbnail: defaultThumbnail
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 168 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("react-ga");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 169 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
|
||
|
var _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; };
|
||
|
|
||
|
var _require = __webpack_require__(4),
|
||
|
customComponents = _require.customComponents;
|
||
|
|
||
|
function getDeepestChildValue(parent, childrenKeys) {
|
||
|
if (!parent[childrenKeys[0]]) {
|
||
|
return null;
|
||
|
}
|
||
|
var childKey = childrenKeys.shift(); // .shift() retrieves the first element of array and removes it from array
|
||
|
var child = parent[childKey];
|
||
|
if (childrenKeys.length >= 1) {
|
||
|
return getDeepestChildValue(child, childrenKeys);
|
||
|
}
|
||
|
return child;
|
||
|
}
|
||
|
|
||
|
var dynamicImport = exports.dynamicImport = function dynamicImport(filePath) {
|
||
|
// validate inputs
|
||
|
if (!filePath) {
|
||
|
throw new Error('no file path provided to dynamicImport()');
|
||
|
}
|
||
|
if (typeof filePath !== 'string') {
|
||
|
console.log('dynamicImport > filePath:', filePath);
|
||
|
console.log('dynamicImport > filePath type:', typeof filePath === 'undefined' ? 'undefined' : _typeof(filePath));
|
||
|
throw new Error('file path provided to dynamicImport() must be a string');
|
||
|
}
|
||
|
if (!customComponents) {
|
||
|
console.log('No customComponents found in siteConfig.js');
|
||
|
return null;
|
||
|
}
|
||
|
// split out the file folders // filter out any empty or white-space-only strings
|
||
|
var folders = filePath.split('/').filter(function (folderName) {
|
||
|
return folderName.replace(/\s/g, '').length;
|
||
|
});
|
||
|
// check for the component corresponding to file path in the site config object
|
||
|
// i.e. customComponents[folders[0]][folders[2][...][folders[n]]
|
||
|
var component = getDeepestChildValue(customComponents, folders);
|
||
|
if (component) {
|
||
|
console.log('Found custom component:', component);
|
||
|
return component;
|
||
|
} else {
|
||
|
console.log('Found custom component:', component);
|
||
|
return null;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 170 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var createPageTitle = exports.createPageTitle = function createPageTitle(siteTitle, pageTitle) {
|
||
|
if (!pageTitle) {
|
||
|
return "" + siteTitle;
|
||
|
}
|
||
|
return siteTitle + " - " + pageTitle;
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 171 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var determineOgThumbnailContentType = function determineOgThumbnailContentType(thumbnail) {
|
||
|
if (thumbnail) {
|
||
|
var fileExt = thumbnail.substring(thumbnail.lastIndexOf('.'));
|
||
|
switch (fileExt) {
|
||
|
case 'jpeg':
|
||
|
case 'jpg':
|
||
|
return 'image/jpeg';
|
||
|
case 'png':
|
||
|
return 'image/png';
|
||
|
case 'gif':
|
||
|
return 'image/gif';
|
||
|
case 'mp4':
|
||
|
return 'video/mp4';
|
||
|
default:
|
||
|
return 'image/jpeg';
|
||
|
}
|
||
|
}
|
||
|
return '';
|
||
|
};
|
||
|
|
||
|
var createBasicMetaTags = function createBasicMetaTags(siteHost, siteDescription, siteTitle, siteTwitter) {
|
||
|
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' }];
|
||
|
};
|
||
|
|
||
|
var createChannelMetaTags = function createChannelMetaTags(siteTitle, siteHost, siteTwitter, channel) {
|
||
|
var name = channel.name,
|
||
|
longId = channel.longId;
|
||
|
|
||
|
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' }];
|
||
|
};
|
||
|
|
||
|
var createAssetMetaTags = function createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail) {
|
||
|
var claimData = asset.claimData;
|
||
|
var contentType = claimData.contentType;
|
||
|
|
||
|
var embedUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;
|
||
|
var showUrl = siteHost + '/' + claimData.claimId + '/' + claimData.name;
|
||
|
var source = siteHost + '/' + claimData.claimId + '/' + claimData.name + '.' + claimData.fileExt;
|
||
|
var ogTitle = claimData.title || claimData.name;
|
||
|
var ogDescription = claimData.description || defaultDescription;
|
||
|
var ogThumbnailContentType = determineOgThumbnailContentType(claimData.thumbnail);
|
||
|
var ogThumbnail = claimData.thumbnail || defaultThumbnail;
|
||
|
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 }];
|
||
|
if (contentType === 'video/mp4' || contentType === 'video/webm') {
|
||
|
metaTags.push({ property: 'og:video', content: source });
|
||
|
metaTags.push({ property: 'og:video:secure_url', content: source });
|
||
|
metaTags.push({ property: 'og:video:type', content: contentType });
|
||
|
metaTags.push({ property: 'og:image', content: ogThumbnail });
|
||
|
metaTags.push({ property: 'og:image:type', content: ogThumbnailContentType });
|
||
|
metaTags.push({ property: 'og:type', content: 'video' });
|
||
|
metaTags.push({ property: 'twitter:card', content: 'player' });
|
||
|
metaTags.push({ property: 'twitter:player', content: embedUrl });
|
||
|
metaTags.push({ property: 'twitter:player:width', content: 600 });
|
||
|
metaTags.push({ property: 'twitter:text:player_width', content: 600 });
|
||
|
metaTags.push({ property: 'twitter:player:height', content: 337 });
|
||
|
metaTags.push({ property: 'twitter:player:stream', content: source });
|
||
|
metaTags.push({ property: 'twitter:player:stream:content_type', content: contentType });
|
||
|
} else {
|
||
|
metaTags.push({ property: 'og:image', content: source });
|
||
|
metaTags.push({ property: 'og:image:type', content: contentType });
|
||
|
metaTags.push({ property: 'og:type', content: 'article' });
|
||
|
metaTags.push({ property: 'twitter:card', content: 'summary_large_image' });
|
||
|
}
|
||
|
return metaTags;
|
||
|
};
|
||
|
|
||
|
var createMetaTags = exports.createMetaTags = function createMetaTags(siteDescription, siteHost, siteTitle, siteTwitter, asset, channel, defaultDescription, defaultThumbnail) {
|
||
|
if (asset) {
|
||
|
return createAssetMetaTags(siteHost, siteTitle, siteTwitter, asset, defaultDescription, defaultThumbnail);
|
||
|
};
|
||
|
if (channel) {
|
||
|
return createChannelMetaTags(siteHost, siteTitle, siteTwitter, channel);
|
||
|
};
|
||
|
return createBasicMetaTags(siteDescription, siteHost, siteTitle, siteTwitter);
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 172 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var createBasicCanonicalLink = function createBasicCanonicalLink(page, siteHost) {
|
||
|
return siteHost + "/" + page;
|
||
|
};
|
||
|
|
||
|
var createAssetCanonicalLink = function createAssetCanonicalLink(asset, siteHost) {
|
||
|
var channelName = void 0,
|
||
|
certificateId = void 0,
|
||
|
name = void 0,
|
||
|
claimId = void 0;
|
||
|
if (asset.claimData) {
|
||
|
var _asset$claimData = asset.claimData;
|
||
|
channelName = _asset$claimData.channelName;
|
||
|
certificateId = _asset$claimData.certificateId;
|
||
|
name = _asset$claimData.name;
|
||
|
claimId = _asset$claimData.claimId;
|
||
|
};
|
||
|
if (channelName) {
|
||
|
return siteHost + "/" + channelName + ":" + certificateId + "/" + name;
|
||
|
};
|
||
|
return siteHost + "/" + claimId + "/" + name;
|
||
|
};
|
||
|
|
||
|
var createChannelCanonicalLink = function createChannelCanonicalLink(channel, siteHost) {
|
||
|
var name = channel.name,
|
||
|
longId = channel.longId;
|
||
|
|
||
|
return siteHost + "/" + name + ":" + longId;
|
||
|
};
|
||
|
|
||
|
var createCanonicalLink = exports.createCanonicalLink = function createCanonicalLink(asset, channel, page, siteHost) {
|
||
|
if (asset) {
|
||
|
return createAssetCanonicalLink(asset, siteHost);
|
||
|
}
|
||
|
if (channel) {
|
||
|
return createChannelCanonicalLink(channel, siteHost);
|
||
|
}
|
||
|
return createBasicCanonicalLink(page, siteHost);
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 173 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("cross-fetch/polyfill");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 174 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
module.exports = {
|
||
|
validateFile: function validateFile(file) {
|
||
|
if (!file) {
|
||
|
throw new Error('no file provided');
|
||
|
}
|
||
|
if (/'/.test(file.name)) {
|
||
|
throw new Error('apostrophes are not allowed in the file name');
|
||
|
}
|
||
|
// validate size and type
|
||
|
switch (file.type) {
|
||
|
case 'image/jpeg':
|
||
|
case 'image/jpg':
|
||
|
case 'image/png':
|
||
|
if (file.size > 10000000) {
|
||
|
throw new Error('Sorry, images are limited to 10 megabytes.');
|
||
|
}
|
||
|
break;
|
||
|
case 'image/gif':
|
||
|
if (file.size > 50000000) {
|
||
|
throw new Error('Sorry, GIFs are limited to 50 megabytes.');
|
||
|
}
|
||
|
break;
|
||
|
case 'video/mp4':
|
||
|
if (file.size > 50000000) {
|
||
|
throw new Error('Sorry, videos are limited to 50 megabytes.');
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
throw new Error(file.type + ' is not a supported file type. Only, .jpeg, .png, .gif, and .mp4 files are currently supported.');
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 175 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
var LOAD_START = exports.LOAD_START = 'LOAD_START';
|
||
|
var LOADING = exports.LOADING = 'LOADING';
|
||
|
var PUBLISHING = exports.PUBLISHING = 'PUBLISHING';
|
||
|
var SUCCESS = exports.SUCCESS = 'SUCCESS';
|
||
|
var FAILED = exports.FAILED = 'FAILED';
|
||
|
|
||
|
/***/ }),
|
||
|
/* 176 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(4),
|
||
|
host = _require.details.host;
|
||
|
|
||
|
var sendEmbedPage = function sendEmbedPage(_ref, res) {
|
||
|
var params = _ref.params;
|
||
|
|
||
|
var claimId = params.claimId;
|
||
|
var name = params.name;
|
||
|
// get and render the content
|
||
|
res.status(200).render('embed', { layout: 'embed', host: host, claimId: claimId, name: name });
|
||
|
};
|
||
|
|
||
|
module.exports = sendEmbedPage;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 177 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var redirect = function redirect(route) {
|
||
|
return function (req, res) {
|
||
|
res.status(301).redirect(route);
|
||
|
};
|
||
|
};
|
||
|
|
||
|
module.exports = redirect;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 178 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var serveAssetByClaim = __webpack_require__(179);
|
||
|
var serveAssetByIdentifierAndClaim = __webpack_require__(187);
|
||
|
|
||
|
module.exports = function (app, db) {
|
||
|
app.get('/:identifier/:claim', serveAssetByIdentifierAndClaim);
|
||
|
app.get('/:claim', serveAssetByClaim);
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 179 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _require = __webpack_require__(13),
|
||
|
sendGAServeEvent = _require.sendGAServeEvent;
|
||
|
|
||
|
var _require2 = __webpack_require__(105),
|
||
|
determineResponseType = _require2.determineResponseType,
|
||
|
logRequestData = _require2.logRequestData,
|
||
|
getClaimIdAndServeAsset = _require2.getClaimIdAndServeAsset;
|
||
|
|
||
|
var lbryUri = __webpack_require__(106);
|
||
|
var handleShowRender = __webpack_require__(107);
|
||
|
var SERVE = 'SERVE';
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to serve an asset or the react app via the claim name only
|
||
|
|
||
|
*/
|
||
|
|
||
|
var serverAssetByClaim = function serverAssetByClaim(req, res) {
|
||
|
var headers = req.headers,
|
||
|
ip = req.ip,
|
||
|
originalUrl = req.originalUrl,
|
||
|
params = req.params;
|
||
|
// decide if this is a show request
|
||
|
|
||
|
var hasFileExtension = void 0;
|
||
|
try {
|
||
|
var _lbryUri$parseModifie = lbryUri.parseModifier(params.claim);
|
||
|
|
||
|
hasFileExtension = _lbryUri$parseModifie.hasFileExtension;
|
||
|
} catch (error) {
|
||
|
return res.status(400).json({ success: false, message: error.message });
|
||
|
}
|
||
|
var responseType = determineResponseType(hasFileExtension, headers);
|
||
|
if (responseType !== SERVE) {
|
||
|
return handleShowRender(req, res);
|
||
|
}
|
||
|
// handle serve request
|
||
|
// send google analytics
|
||
|
sendGAServeEvent(headers, ip, originalUrl);
|
||
|
// parse the claim
|
||
|
var claimName = void 0;
|
||
|
try {
|
||
|
var _lbryUri$parseClaim = lbryUri.parseClaim(params.claim);
|
||
|
|
||
|
claimName = _lbryUri$parseClaim.claimName;
|
||
|
} catch (error) {
|
||
|
return res.status(400).json({ success: false, message: error.message });
|
||
|
}
|
||
|
// log the request data for debugging
|
||
|
logRequestData(responseType, claimName, null, null);
|
||
|
// get the claim Id and then serve the asset
|
||
|
getClaimIdAndServeAsset(null, null, claimName, null, originalUrl, ip, res);
|
||
|
};
|
||
|
|
||
|
module.exports = serverAssetByClaim;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 180 */
|
||
|
/***/ (function(module, exports) {
|
||
|
|
||
|
module.exports = require("redux-saga");
|
||
|
|
||
|
/***/ }),
|
||
|
/* 181 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.handleShowPageUri = handleShowPageUri;
|
||
|
exports.watchHandleShowPageUri = watchHandleShowPageUri;
|
||
|
|
||
|
var _effects = __webpack_require__(55);
|
||
|
|
||
|
var _show_action_types = __webpack_require__(23);
|
||
|
|
||
|
var actions = _interopRequireWildcard(_show_action_types);
|
||
|
|
||
|
var _show = __webpack_require__(11);
|
||
|
|
||
|
var _show_asset = __webpack_require__(182);
|
||
|
|
||
|
var _show_channel = __webpack_require__(184);
|
||
|
|
||
|
var _lbryUri = __webpack_require__(186);
|
||
|
|
||
|
var _lbryUri2 = _interopRequireDefault(_lbryUri);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
var _marked = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateIdentifierAndClaim),
|
||
|
_marked2 = /*#__PURE__*/regeneratorRuntime.mark(parseAndUpdateClaimOnly),
|
||
|
_marked3 = /*#__PURE__*/regeneratorRuntime.mark(handleShowPageUri),
|
||
|
_marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchHandleShowPageUri);
|
||
|
|
||
|
function parseAndUpdateIdentifierAndClaim(modifier, claim) {
|
||
|
var isChannel, channelName, channelClaimId, claimId, claimName, extension, _lbryUri$parseIdentif, _lbryUri$parseClaim;
|
||
|
|
||
|
return regeneratorRuntime.wrap(function parseAndUpdateIdentifierAndClaim$(_context) {
|
||
|
while (1) {
|
||
|
switch (_context.prev = _context.next) {
|
||
|
case 0:
|
||
|
// this is a request for an asset
|
||
|
// claim will be an asset claim
|
||
|
// the identifier could be a channel or a claim id
|
||
|
isChannel = void 0, channelName = void 0, channelClaimId = void 0, claimId = void 0, claimName = void 0, extension = void 0;
|
||
|
_context.prev = 1;
|
||
|
_lbryUri$parseIdentif = _lbryUri2.default.parseIdentifier(modifier);
|
||
|
isChannel = _lbryUri$parseIdentif.isChannel;
|
||
|
channelName = _lbryUri$parseIdentif.channelName;
|
||
|
channelClaimId = _lbryUri$parseIdentif.channelClaimId;
|
||
|
claimId = _lbryUri$parseIdentif.claimId;
|
||
|
_lbryUri$parseClaim = _lbryUri2.default.parseClaim(claim);
|
||
|
claimName = _lbryUri$parseClaim.claimName;
|
||
|
extension = _lbryUri$parseClaim.extension;
|
||
|
_context.next = 17;
|
||
|
break;
|
||
|
|
||
|
case 12:
|
||
|
_context.prev = 12;
|
||
|
_context.t0 = _context['catch'](1);
|
||
|
_context.next = 16;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));
|
||
|
|
||
|
case 16:
|
||
|
return _context.abrupt('return', _context.sent);
|
||
|
|
||
|
case 17:
|
||
|
if (!isChannel) {
|
||
|
_context.next = 21;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
_context.next = 20;
|
||
|
return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, channelName, channelClaimId, extension));
|
||
|
|
||
|
case 20:
|
||
|
return _context.abrupt('return', _context.sent);
|
||
|
|
||
|
case 21:
|
||
|
;
|
||
|
_context.next = 24;
|
||
|
return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, claimId, null, null, extension));
|
||
|
|
||
|
case 24:
|
||
|
case 'end':
|
||
|
return _context.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _marked, this, [[1, 12]]);
|
||
|
}
|
||
|
function parseAndUpdateClaimOnly(claim) {
|
||
|
var isChannel, channelName, channelClaimId, _lbryUri$parseIdentif2, claimName, extension, _lbryUri$parseClaim2;
|
||
|
|
||
|
return regeneratorRuntime.wrap(function parseAndUpdateClaimOnly$(_context2) {
|
||
|
while (1) {
|
||
|
switch (_context2.prev = _context2.next) {
|
||
|
case 0:
|
||
|
// this could be a request for an asset or a channel page
|
||
|
// claim could be an asset claim or a channel claim
|
||
|
isChannel = void 0, channelName = void 0, channelClaimId = void 0;
|
||
|
_context2.prev = 1;
|
||
|
_lbryUri$parseIdentif2 = _lbryUri2.default.parseIdentifier(claim);
|
||
|
isChannel = _lbryUri$parseIdentif2.isChannel;
|
||
|
channelName = _lbryUri$parseIdentif2.channelName;
|
||
|
channelClaimId = _lbryUri$parseIdentif2.channelClaimId;
|
||
|
_context2.next = 13;
|
||
|
break;
|
||
|
|
||
|
case 8:
|
||
|
_context2.prev = 8;
|
||
|
_context2.t0 = _context2['catch'](1);
|
||
|
_context2.next = 12;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(_context2.t0.message));
|
||
|
|
||
|
case 12:
|
||
|
return _context2.abrupt('return', _context2.sent);
|
||
|
|
||
|
case 13:
|
||
|
if (!isChannel) {
|
||
|
_context2.next = 17;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
_context2.next = 16;
|
||
|
return (0, _effects.call)(_show_channel.newChannelRequest, (0, _show.onNewChannelRequest)(channelName, channelClaimId));
|
||
|
|
||
|
case 16:
|
||
|
return _context2.abrupt('return', _context2.sent);
|
||
|
|
||
|
case 17:
|
||
|
// if not for a channel, parse the claim request
|
||
|
claimName = void 0, extension = void 0;
|
||
|
_context2.prev = 18;
|
||
|
_lbryUri$parseClaim2 = _lbryUri2.default.parseClaim(claim);
|
||
|
claimName = _lbryUri$parseClaim2.claimName;
|
||
|
extension = _lbryUri$parseClaim2.extension;
|
||
|
_context2.next = 29;
|
||
|
break;
|
||
|
|
||
|
case 24:
|
||
|
_context2.prev = 24;
|
||
|
_context2.t1 = _context2['catch'](18);
|
||
|
_context2.next = 28;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(_context2.t1.message));
|
||
|
|
||
|
case 28:
|
||
|
return _context2.abrupt('return', _context2.sent);
|
||
|
|
||
|
case 29:
|
||
|
_context2.next = 31;
|
||
|
return (0, _effects.call)(_show_asset.newAssetRequest, (0, _show.onNewAssetRequest)(claimName, null, null, null, extension));
|
||
|
|
||
|
case 31:
|
||
|
case 'end':
|
||
|
return _context2.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _marked2, this, [[1, 8], [18, 24]]);
|
||
|
}
|
||
|
|
||
|
function handleShowPageUri(action) {
|
||
|
var _action$data, identifier, claim;
|
||
|
|
||
|
return regeneratorRuntime.wrap(function handleShowPageUri$(_context3) {
|
||
|
while (1) {
|
||
|
switch (_context3.prev = _context3.next) {
|
||
|
case 0:
|
||
|
_action$data = action.data, identifier = _action$data.identifier, claim = _action$data.claim;
|
||
|
|
||
|
if (!identifier) {
|
||
|
_context3.next = 5;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
_context3.next = 4;
|
||
|
return (0, _effects.call)(parseAndUpdateIdentifierAndClaim, identifier, claim);
|
||
|
|
||
|
case 4:
|
||
|
return _context3.abrupt('return', _context3.sent);
|
||
|
|
||
|
case 5:
|
||
|
_context3.next = 7;
|
||
|
return (0, _effects.call)(parseAndUpdateClaimOnly, claim);
|
||
|
|
||
|
case 7:
|
||
|
case 'end':
|
||
|
return _context3.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _marked3, this);
|
||
|
};
|
||
|
|
||
|
function watchHandleShowPageUri() {
|
||
|
return regeneratorRuntime.wrap(function watchHandleShowPageUri$(_context4) {
|
||
|
while (1) {
|
||
|
switch (_context4.prev = _context4.next) {
|
||
|
case 0:
|
||
|
_context4.next = 2;
|
||
|
return (0, _effects.takeLatest)(actions.HANDLE_SHOW_URI, handleShowPageUri);
|
||
|
|
||
|
case 2:
|
||
|
case 'end':
|
||
|
return _context4.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _marked4, this);
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 182 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.newAssetRequest = newAssetRequest;
|
||
|
exports.watchNewAssetRequest = watchNewAssetRequest;
|
||
|
|
||
|
var _effects = __webpack_require__(55);
|
||
|
|
||
|
var _show_action_types = __webpack_require__(23);
|
||
|
|
||
|
var actions = _interopRequireWildcard(_show_action_types);
|
||
|
|
||
|
var _show = __webpack_require__(11);
|
||
|
|
||
|
var _assetApi = __webpack_require__(183);
|
||
|
|
||
|
var _show2 = __webpack_require__(31);
|
||
|
|
||
|
var _site = __webpack_require__(108);
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
var _marked = /*#__PURE__*/regeneratorRuntime.mark(newAssetRequest),
|
||
|
_marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewAssetRequest);
|
||
|
|
||
|
function newAssetRequest(action) {
|
||
|
var _action$data, requestType, requestId, name, modifier, state, host, longId, _ref, assetKey, shortId, _ref2, claimData, _ref3;
|
||
|
|
||
|
return regeneratorRuntime.wrap(function newAssetRequest$(_context) {
|
||
|
while (1) {
|
||
|
switch (_context.prev = _context.next) {
|
||
|
case 0:
|
||
|
_action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, name = _action$data.name, modifier = _action$data.modifier;
|
||
|
// put an action to update the request in redux
|
||
|
|
||
|
_context.next = 3;
|
||
|
return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));
|
||
|
|
||
|
case 3:
|
||
|
_context.next = 5;
|
||
|
return (0, _effects.select)(_show2.selectShowState);
|
||
|
|
||
|
case 5:
|
||
|
state = _context.sent;
|
||
|
_context.next = 8;
|
||
|
return (0, _effects.select)(_site.selectSiteHost);
|
||
|
|
||
|
case 8:
|
||
|
host = _context.sent;
|
||
|
|
||
|
if (!state.requestList[requestId]) {
|
||
|
_context.next = 11;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return _context.abrupt('return', null);
|
||
|
|
||
|
case 11:
|
||
|
// get long id && add request to request list
|
||
|
longId = void 0;
|
||
|
_context.prev = 12;
|
||
|
_context.next = 15;
|
||
|
return (0, _effects.call)(_assetApi.getLongClaimId, host, name, modifier);
|
||
|
|
||
|
case 15:
|
||
|
_ref = _context.sent;
|
||
|
longId = _ref.data;
|
||
|
_context.next = 24;
|
||
|
break;
|
||
|
|
||
|
case 19:
|
||
|
_context.prev = 19;
|
||
|
_context.t0 = _context['catch'](12);
|
||
|
_context.next = 23;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));
|
||
|
|
||
|
case 23:
|
||
|
return _context.abrupt('return', _context.sent);
|
||
|
|
||
|
case 24:
|
||
|
assetKey = 'a#' + name + '#' + longId;
|
||
|
_context.next = 27;
|
||
|
return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, assetKey));
|
||
|
|
||
|
case 27:
|
||
|
if (!state.assetList[assetKey]) {
|
||
|
_context.next = 29;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return _context.abrupt('return', null);
|
||
|
|
||
|
case 29:
|
||
|
// get short Id
|
||
|
shortId = void 0;
|
||
|
_context.prev = 30;
|
||
|
_context.next = 33;
|
||
|
return (0, _effects.call)(_assetApi.getShortId, host, name, longId);
|
||
|
|
||
|
case 33:
|
||
|
_ref2 = _context.sent;
|
||
|
shortId = _ref2.data;
|
||
|
_context.next = 42;
|
||
|
break;
|
||
|
|
||
|
case 37:
|
||
|
_context.prev = 37;
|
||
|
_context.t1 = _context['catch'](30);
|
||
|
_context.next = 41;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));
|
||
|
|
||
|
case 41:
|
||
|
return _context.abrupt('return', _context.sent);
|
||
|
|
||
|
case 42:
|
||
|
// get asset claim data
|
||
|
claimData = void 0;
|
||
|
_context.prev = 43;
|
||
|
_context.next = 46;
|
||
|
return (0, _effects.call)(_assetApi.getClaimData, host, name, longId);
|
||
|
|
||
|
case 46:
|
||
|
_ref3 = _context.sent;
|
||
|
claimData = _ref3.data;
|
||
|
_context.next = 55;
|
||
|
break;
|
||
|
|
||
|
case 50:
|
||
|
_context.prev = 50;
|
||
|
_context.t2 = _context['catch'](43);
|
||
|
_context.next = 54;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(_context.t2.message));
|
||
|
|
||
|
case 54:
|
||
|
return _context.abrupt('return', _context.sent);
|
||
|
|
||
|
case 55:
|
||
|
_context.next = 57;
|
||
|
return (0, _effects.put)((0, _show.addAssetToAssetList)(assetKey, null, name, longId, shortId, claimData));
|
||
|
|
||
|
case 57:
|
||
|
_context.next = 59;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(null));
|
||
|
|
||
|
case 59:
|
||
|
case 'end':
|
||
|
return _context.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _marked, this, [[12, 19], [30, 37], [43, 50]]);
|
||
|
};
|
||
|
|
||
|
function watchNewAssetRequest() {
|
||
|
return regeneratorRuntime.wrap(function watchNewAssetRequest$(_context2) {
|
||
|
while (1) {
|
||
|
switch (_context2.prev = _context2.next) {
|
||
|
case 0:
|
||
|
_context2.next = 2;
|
||
|
return (0, _effects.takeLatest)(actions.ASSET_REQUEST_NEW, newAssetRequest);
|
||
|
|
||
|
case 2:
|
||
|
case 'end':
|
||
|
return _context2.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _marked2, this);
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 183 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.getLongClaimId = getLongClaimId;
|
||
|
exports.getShortId = getShortId;
|
||
|
exports.getClaimData = getClaimData;
|
||
|
|
||
|
var _request = __webpack_require__(16);
|
||
|
|
||
|
var _request2 = _interopRequireDefault(_request);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function getLongClaimId(host, name, modifier) {
|
||
|
var body = {};
|
||
|
// create request params
|
||
|
if (modifier) {
|
||
|
if (modifier.id) {
|
||
|
body['claimId'] = modifier.id;
|
||
|
} else {
|
||
|
body['channelName'] = modifier.channel.name;
|
||
|
body['channelClaimId'] = modifier.channel.id;
|
||
|
}
|
||
|
}
|
||
|
body['claimName'] = name;
|
||
|
var params = {
|
||
|
method: 'POST',
|
||
|
headers: { 'Content-Type': 'application/json' },
|
||
|
body: JSON.stringify(body)
|
||
|
};
|
||
|
// create url
|
||
|
var url = host + '/api/claim/long-id';
|
||
|
// return the request promise
|
||
|
return (0, _request2.default)(url, params);
|
||
|
};
|
||
|
|
||
|
function getShortId(host, name, claimId) {
|
||
|
var url = host + '/api/claim/short-id/' + claimId + '/' + name;
|
||
|
return (0, _request2.default)(url);
|
||
|
};
|
||
|
|
||
|
function getClaimData(host, name, claimId) {
|
||
|
var url = host + '/api/claim/data/' + name + '/' + claimId;
|
||
|
return (0, _request2.default)(url);
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 184 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.newChannelRequest = newChannelRequest;
|
||
|
exports.watchNewChannelRequest = watchNewChannelRequest;
|
||
|
exports.watchUpdateChannelClaims = watchUpdateChannelClaims;
|
||
|
|
||
|
var _effects = __webpack_require__(55);
|
||
|
|
||
|
var _show_action_types = __webpack_require__(23);
|
||
|
|
||
|
var actions = _interopRequireWildcard(_show_action_types);
|
||
|
|
||
|
var _show = __webpack_require__(11);
|
||
|
|
||
|
var _channelApi = __webpack_require__(185);
|
||
|
|
||
|
var _show2 = __webpack_require__(31);
|
||
|
|
||
|
var _site = __webpack_require__(108);
|
||
|
|
||
|
function _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; } }
|
||
|
|
||
|
var _marked = /*#__PURE__*/regeneratorRuntime.mark(newChannelRequest),
|
||
|
_marked2 = /*#__PURE__*/regeneratorRuntime.mark(watchNewChannelRequest),
|
||
|
_marked3 = /*#__PURE__*/regeneratorRuntime.mark(getNewClaimsAndUpdateChannel),
|
||
|
_marked4 = /*#__PURE__*/regeneratorRuntime.mark(watchUpdateChannelClaims);
|
||
|
|
||
|
function newChannelRequest(action) {
|
||
|
var _action$data, requestType, requestId, channelName, channelId, state, host, longId, shortId, _ref, _ref$data, channelKey, claimsData, _ref2;
|
||
|
|
||
|
return regeneratorRuntime.wrap(function newChannelRequest$(_context) {
|
||
|
while (1) {
|
||
|
switch (_context.prev = _context.next) {
|
||
|
case 0:
|
||
|
_action$data = action.data, requestType = _action$data.requestType, requestId = _action$data.requestId, channelName = _action$data.channelName, channelId = _action$data.channelId;
|
||
|
// put an action to update the request in redux
|
||
|
|
||
|
_context.next = 3;
|
||
|
return (0, _effects.put)((0, _show.onRequestUpdate)(requestType, requestId));
|
||
|
|
||
|
case 3:
|
||
|
_context.next = 5;
|
||
|
return (0, _effects.select)(_show2.selectShowState);
|
||
|
|
||
|
case 5:
|
||
|
state = _context.sent;
|
||
|
_context.next = 8;
|
||
|
return (0, _effects.select)(_site.selectSiteHost);
|
||
|
|
||
|
case 8:
|
||
|
host = _context.sent;
|
||
|
|
||
|
if (!state.requestList[requestId]) {
|
||
|
_context.next = 11;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return _context.abrupt('return', null);
|
||
|
|
||
|
case 11:
|
||
|
// get channel long id
|
||
|
longId = void 0, shortId = void 0;
|
||
|
_context.prev = 12;
|
||
|
_context.next = 15;
|
||
|
return (0, _effects.call)(_channelApi.getChannelData, host, channelName, channelId);
|
||
|
|
||
|
case 15:
|
||
|
_ref = _context.sent;
|
||
|
_ref$data = _ref.data;
|
||
|
longId = _ref$data.longChannelClaimId;
|
||
|
shortId = _ref$data.shortChannelClaimId;
|
||
|
_context.next = 26;
|
||
|
break;
|
||
|
|
||
|
case 21:
|
||
|
_context.prev = 21;
|
||
|
_context.t0 = _context['catch'](12);
|
||
|
_context.next = 25;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(_context.t0.message));
|
||
|
|
||
|
case 25:
|
||
|
return _context.abrupt('return', _context.sent);
|
||
|
|
||
|
case 26:
|
||
|
// store the request in the channel requests list
|
||
|
channelKey = 'c#' + channelName + '#' + longId;
|
||
|
_context.next = 29;
|
||
|
return (0, _effects.put)((0, _show.addRequestToRequestList)(requestId, null, channelKey));
|
||
|
|
||
|
case 29:
|
||
|
if (!state.channelList[channelKey]) {
|
||
|
_context.next = 31;
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return _context.abrupt('return', null);
|
||
|
|
||
|
case 31:
|
||
|
// get channel claims data
|
||
|
claimsData = void 0;
|
||
|
_context.prev = 32;
|
||
|
_context.next = 35;
|
||
|
return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, channelName, 1);
|
||
|
|
||
|
case 35:
|
||
|
_ref2 = _context.sent;
|
||
|
claimsData = _ref2.data;
|
||
|
_context.next = 44;
|
||
|
break;
|
||
|
|
||
|
case 39:
|
||
|
_context.prev = 39;
|
||
|
_context.t1 = _context['catch'](32);
|
||
|
_context.next = 43;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(_context.t1.message));
|
||
|
|
||
|
case 43:
|
||
|
return _context.abrupt('return', _context.sent);
|
||
|
|
||
|
case 44:
|
||
|
_context.next = 46;
|
||
|
return (0, _effects.put)((0, _show.addNewChannelToChannelList)(channelKey, channelName, shortId, longId, claimsData));
|
||
|
|
||
|
case 46:
|
||
|
_context.next = 48;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(null));
|
||
|
|
||
|
case 48:
|
||
|
case 'end':
|
||
|
return _context.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _marked, this, [[12, 21], [32, 39]]);
|
||
|
}
|
||
|
|
||
|
function watchNewChannelRequest() {
|
||
|
return regeneratorRuntime.wrap(function watchNewChannelRequest$(_context2) {
|
||
|
while (1) {
|
||
|
switch (_context2.prev = _context2.next) {
|
||
|
case 0:
|
||
|
_context2.next = 2;
|
||
|
return (0, _effects.takeLatest)(actions.CHANNEL_REQUEST_NEW, newChannelRequest);
|
||
|
|
||
|
case 2:
|
||
|
case 'end':
|
||
|
return _context2.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _marked2, this);
|
||
|
};
|
||
|
|
||
|
function getNewClaimsAndUpdateChannel(action) {
|
||
|
var _action$data2, channelKey, name, longId, page, host, claimsData, _ref3;
|
||
|
|
||
|
return regeneratorRuntime.wrap(function getNewClaimsAndUpdateChannel$(_context3) {
|
||
|
while (1) {
|
||
|
switch (_context3.prev = _context3.next) {
|
||
|
case 0:
|
||
|
_action$data2 = action.data, channelKey = _action$data2.channelKey, name = _action$data2.name, longId = _action$data2.longId, page = _action$data2.page;
|
||
|
_context3.next = 3;
|
||
|
return (0, _effects.select)(_site.selectSiteHost);
|
||
|
|
||
|
case 3:
|
||
|
host = _context3.sent;
|
||
|
claimsData = void 0;
|
||
|
_context3.prev = 5;
|
||
|
_context3.next = 8;
|
||
|
return (0, _effects.call)(_channelApi.getChannelClaims, host, longId, name, page);
|
||
|
|
||
|
case 8:
|
||
|
_ref3 = _context3.sent;
|
||
|
claimsData = _ref3.data;
|
||
|
_context3.next = 17;
|
||
|
break;
|
||
|
|
||
|
case 12:
|
||
|
_context3.prev = 12;
|
||
|
_context3.t0 = _context3['catch'](5);
|
||
|
_context3.next = 16;
|
||
|
return (0, _effects.put)((0, _show.onRequestError)(_context3.t0.message));
|
||
|
|
||
|
case 16:
|
||
|
return _context3.abrupt('return', _context3.sent);
|
||
|
|
||
|
case 17:
|
||
|
_context3.next = 19;
|
||
|
return (0, _effects.put)((0, _show.updateChannelClaims)(channelKey, claimsData));
|
||
|
|
||
|
case 19:
|
||
|
case 'end':
|
||
|
return _context3.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _marked3, this, [[5, 12]]);
|
||
|
}
|
||
|
|
||
|
function watchUpdateChannelClaims() {
|
||
|
return regeneratorRuntime.wrap(function watchUpdateChannelClaims$(_context4) {
|
||
|
while (1) {
|
||
|
switch (_context4.prev = _context4.next) {
|
||
|
case 0:
|
||
|
_context4.next = 2;
|
||
|
return (0, _effects.takeLatest)(actions.CHANNEL_CLAIMS_UPDATE_ASYNC, getNewClaimsAndUpdateChannel);
|
||
|
|
||
|
case 2:
|
||
|
case 'end':
|
||
|
return _context4.stop();
|
||
|
}
|
||
|
}
|
||
|
}, _marked4, this);
|
||
|
}
|
||
|
|
||
|
/***/ }),
|
||
|
/* 185 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.getChannelData = getChannelData;
|
||
|
exports.getChannelClaims = getChannelClaims;
|
||
|
|
||
|
var _request = __webpack_require__(16);
|
||
|
|
||
|
var _request2 = _interopRequireDefault(_request);
|
||
|
|
||
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||
|
|
||
|
function getChannelData(host, id, name) {
|
||
|
if (!id) id = 'none';
|
||
|
var url = host + '/api/channel/data/' + name + '/' + id;
|
||
|
return (0, _request2.default)(url);
|
||
|
};
|
||
|
|
||
|
function getChannelClaims(host, longId, name, page) {
|
||
|
if (!page) page = 1;
|
||
|
var url = host + '/api/channel/claims/' + name + '/' + longId + '/' + page;
|
||
|
return (0, _request2.default)(url);
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 186 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _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"); } }; }();
|
||
|
|
||
|
module.exports = {
|
||
|
REGEXP_INVALID_CLAIM: /[^A-Za-z0-9-]/g,
|
||
|
REGEXP_INVALID_CHANNEL: /[^A-Za-z0-9-@]/g,
|
||
|
REGEXP_ADDRESS: /^b(?=[^0OIl]{32,33})[0-9A-Za-z]{32,33}$/,
|
||
|
CHANNEL_CHAR: '@',
|
||
|
parseIdentifier: function parseIdentifier(identifier) {
|
||
|
var componentsRegex = new RegExp('([^:$#/]*)' + // value (stops at the first separator or end)
|
||
|
'([:$#]?)([^/]*)' // modifier separator, modifier (stops at the first path separator or end)
|
||
|
);
|
||
|
|
||
|
var _componentsRegex$exec = componentsRegex // eslint-disable-line no-unused-vars
|
||
|
.exec(identifier).map(function (match) {
|
||
|
return match || null;
|
||
|
}),
|
||
|
_componentsRegex$exec2 = _slicedToArray(_componentsRegex$exec, 4),
|
||
|
proto = _componentsRegex$exec2[0],
|
||
|
value = _componentsRegex$exec2[1],
|
||
|
modifierSeperator = _componentsRegex$exec2[2],
|
||
|
modifier = _componentsRegex$exec2[3];
|
||
|
|
||
|
// Validate and process name
|
||
|
|
||
|
|
||
|
if (!value) {
|
||
|
throw new Error('Check your URL. No channel name provided before "' + modifierSeperator + '"');
|
||
|
}
|
||
|
var isChannel = value.startsWith(module.exports.CHANNEL_CHAR);
|
||
|
var channelName = isChannel ? value : null;
|
||
|
var claimId = void 0;
|
||
|
if (isChannel) {
|
||
|
if (!channelName) {
|
||
|
throw new Error('Check your URL. No channel name after "@".');
|
||
|
}
|
||
|
var nameBadChars = channelName.match(module.exports.REGEXP_INVALID_CHANNEL);
|
||
|
if (nameBadChars) {
|
||
|
throw new Error('Check your URL. Invalid characters in channel name: "' + nameBadChars.join(', ') + '".');
|
||
|
}
|
||
|
} else {
|
||
|
claimId = value;
|
||
|
}
|
||
|
|
||
|
// Validate and process modifier
|
||
|
var channelClaimId = void 0;
|
||
|
if (modifierSeperator) {
|
||
|
if (!modifier) {
|
||
|
throw new Error('Check your URL. No modifier provided after separator "' + modifierSeperator + '"');
|
||
|
}
|
||
|
|
||
|
if (modifierSeperator === ':') {
|
||
|
channelClaimId = modifier;
|
||
|
} else {
|
||
|
throw new Error('Check your URL. The "' + modifierSeperator + '" modifier is not currently supported');
|
||
|
}
|
||
|
}
|
||
|
return {
|
||
|
isChannel: isChannel,
|
||
|
channelName: channelName,
|
||
|
channelClaimId: channelClaimId || null,
|
||
|
claimId: claimId || null
|
||
|
};
|
||
|
},
|
||
|
parseClaim: function parseClaim(name) {
|
||
|
var componentsRegex = new RegExp('([^:$#/.]*)' + // name (stops at the first extension)
|
||
|
'([:$#.]?)([^/]*)' // extension separator, extension (stops at the first path separator or end)
|
||
|
);
|
||
|
|
||
|
var _componentsRegex$exec3 = componentsRegex // eslint-disable-line no-unused-vars
|
||
|
.exec(name).map(function (match) {
|
||
|
return match || null;
|
||
|
}),
|
||
|
_componentsRegex$exec4 = _slicedToArray(_componentsRegex$exec3, 4),
|
||
|
proto = _componentsRegex$exec4[0],
|
||
|
claimName = _componentsRegex$exec4[1],
|
||
|
extensionSeperator = _componentsRegex$exec4[2],
|
||
|
extension = _componentsRegex$exec4[3];
|
||
|
|
||
|
// Validate and process name
|
||
|
|
||
|
|
||
|
if (!claimName) {
|
||
|
throw new Error('Check your URL. No claim name provided before "."');
|
||
|
}
|
||
|
var nameBadChars = claimName.match(module.exports.REGEXP_INVALID_CLAIM);
|
||
|
if (nameBadChars) {
|
||
|
throw new Error('Check your URL. Invalid characters in claim name: "' + nameBadChars.join(', ') + '".');
|
||
|
}
|
||
|
// Validate and process extension
|
||
|
if (extensionSeperator) {
|
||
|
if (!extension) {
|
||
|
throw new Error('Check your URL. No file extension provided after separator "' + extensionSeperator + '".');
|
||
|
}
|
||
|
if (extensionSeperator !== '.') {
|
||
|
throw new Error('Check your URL. The "' + extensionSeperator + '" separator is not supported in the claim name.');
|
||
|
}
|
||
|
}
|
||
|
return {
|
||
|
claimName: claimName,
|
||
|
extension: extension || null
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 187 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var _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"); } }; }();
|
||
|
|
||
|
var _require = __webpack_require__(13),
|
||
|
sendGAServeEvent = _require.sendGAServeEvent;
|
||
|
|
||
|
var _require2 = __webpack_require__(105),
|
||
|
determineResponseType = _require2.determineResponseType,
|
||
|
flipClaimNameAndIdForBackwardsCompatibility = _require2.flipClaimNameAndIdForBackwardsCompatibility,
|
||
|
logRequestData = _require2.logRequestData,
|
||
|
getClaimIdAndServeAsset = _require2.getClaimIdAndServeAsset;
|
||
|
|
||
|
var lbryUri = __webpack_require__(106);
|
||
|
var handleShowRender = __webpack_require__(107);
|
||
|
|
||
|
var SERVE = 'SERVE';
|
||
|
|
||
|
/*
|
||
|
|
||
|
route to serve an asset or the react app via the claim name and an identifier
|
||
|
|
||
|
*/
|
||
|
|
||
|
var serverAssetByIdentifierAndClaim = function serverAssetByIdentifierAndClaim(req, res) {
|
||
|
var headers = req.headers,
|
||
|
ip = req.ip,
|
||
|
originalUrl = req.originalUrl,
|
||
|
params = req.params;
|
||
|
// decide if this is a show request
|
||
|
|
||
|
var hasFileExtension = void 0;
|
||
|
try {
|
||
|
var _lbryUri$parseModifie = lbryUri.parseModifier(params.claim);
|
||
|
|
||
|
hasFileExtension = _lbryUri$parseModifie.hasFileExtension;
|
||
|
} catch (error) {
|
||
|
return res.status(400).json({ success: false, message: error.message });
|
||
|
}
|
||
|
var responseType = determineResponseType(hasFileExtension, headers);
|
||
|
if (responseType !== SERVE) {
|
||
|
return handleShowRender(req, res);
|
||
|
}
|
||
|
// handle serve request
|
||
|
// send google analytics
|
||
|
sendGAServeEvent(headers, ip, originalUrl);
|
||
|
// parse the claim
|
||
|
var claimName = void 0;
|
||
|
try {
|
||
|
var _lbryUri$parseClaim = lbryUri.parseClaim(params.claim);
|
||
|
|
||
|
claimName = _lbryUri$parseClaim.claimName;
|
||
|
} catch (error) {
|
||
|
return res.status(400).json({ success: false, message: error.message });
|
||
|
}
|
||
|
// parse the identifier
|
||
|
var isChannel = void 0,
|
||
|
channelName = void 0,
|
||
|
channelClaimId = void 0,
|
||
|
claimId = void 0;
|
||
|
try {
|
||
|
var _lbryUri$parseIdentif = lbryUri.parseIdentifier(params.identifier);
|
||
|
|
||
|
isChannel = _lbryUri$parseIdentif.isChannel;
|
||
|
channelName = _lbryUri$parseIdentif.channelName;
|
||
|
channelClaimId = _lbryUri$parseIdentif.channelClaimId;
|
||
|
claimId = _lbryUri$parseIdentif.claimId;
|
||
|
} catch (error) {
|
||
|
return res.status(400).json({ success: false, message: error.message });
|
||
|
}
|
||
|
if (!isChannel) {
|
||
|
var _flipClaimNameAndIdFo = flipClaimNameAndIdForBackwardsCompatibility(claimId, claimName);
|
||
|
|
||
|
var _flipClaimNameAndIdFo2 = _slicedToArray(_flipClaimNameAndIdFo, 2);
|
||
|
|
||
|
claimId = _flipClaimNameAndIdFo2[0];
|
||
|
claimName = _flipClaimNameAndIdFo2[1];
|
||
|
}
|
||
|
// log the request data for debugging
|
||
|
logRequestData(responseType, claimName, channelName, claimId);
|
||
|
// get the claim Id and then serve the asset
|
||
|
getClaimIdAndServeAsset(channelName, channelClaimId, claimName, claimId, originalUrl, ip, res);
|
||
|
};
|
||
|
|
||
|
module.exports = serverAssetByIdentifierAndClaim;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 188 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var handlePageRequest = __webpack_require__(189);
|
||
|
|
||
|
module.exports = function (app) {
|
||
|
app.get('*', handlePageRequest);
|
||
|
};
|
||
|
|
||
|
/***/ }),
|
||
|
/* 189 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
"use strict";
|
||
|
|
||
|
|
||
|
var handlePageRender = __webpack_require__(95);
|
||
|
|
||
|
var sendReactApp = function sendReactApp(req, res) {
|
||
|
handlePageRender(req, res);
|
||
|
};
|
||
|
|
||
|
module.exports = sendReactApp;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 190 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
var map = {
|
||
|
"./": 56,
|
||
|
"./AboutPage": 52,
|
||
|
"./AboutPage/": 52,
|
||
|
"./AboutPage/index": 52,
|
||
|
"./AboutPage/index.jsx": 52,
|
||
|
"./ErrorPage": 12,
|
||
|
"./ErrorPage/": 12,
|
||
|
"./ErrorPage/index": 12,
|
||
|
"./ErrorPage/index.jsx": 12,
|
||
|
"./HomePage": 39,
|
||
|
"./HomePage/": 39,
|
||
|
"./HomePage/index": 39,
|
||
|
"./HomePage/index.jsx": 39,
|
||
|
"./LoginPage": 24,
|
||
|
"./LoginPage/": 24,
|
||
|
"./LoginPage/index": 24,
|
||
|
"./LoginPage/index.js": 24,
|
||
|
"./LoginPage/view": 63,
|
||
|
"./LoginPage/view.jsx": 63,
|
||
|
"./ShowPage": 29,
|
||
|
"./ShowPage/": 29,
|
||
|
"./ShowPage/index": 29,
|
||
|
"./ShowPage/index.js": 29,
|
||
|
"./ShowPage/view": 69,
|
||
|
"./ShowPage/view.jsx": 69,
|
||
|
"./index": 56,
|
||
|
"./index.js": 56
|
||
|
};
|
||
|
function webpackContext(req) {
|
||
|
return __webpack_require__(webpackContextResolve(req));
|
||
|
};
|
||
|
function webpackContextResolve(req) {
|
||
|
var id = map[req];
|
||
|
if(!(id + 1)) // check for number or string
|
||
|
throw new Error("Cannot find module '" + req + "'.");
|
||
|
return id;
|
||
|
};
|
||
|
webpackContext.keys = function webpackContextKeys() {
|
||
|
return Object.keys(map);
|
||
|
};
|
||
|
webpackContext.resolve = webpackContextResolve;
|
||
|
module.exports = webpackContext;
|
||
|
webpackContext.id = 190;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 191 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
var map = {
|
||
|
"./": 57,
|
||
|
"./ActiveStatusBar": 27,
|
||
|
"./ActiveStatusBar/": 27,
|
||
|
"./ActiveStatusBar/index": 27,
|
||
|
"./ActiveStatusBar/index.jsx": 27,
|
||
|
"./AssetPreview": 37,
|
||
|
"./AssetPreview/": 37,
|
||
|
"./AssetPreview/index": 37,
|
||
|
"./AssetPreview/index.js": 37,
|
||
|
"./AssetPreview/view": 77,
|
||
|
"./AssetPreview/view.jsx": 77,
|
||
|
"./ExpandingTextArea": 48,
|
||
|
"./ExpandingTextArea/": 48,
|
||
|
"./ExpandingTextArea/index": 48,
|
||
|
"./ExpandingTextArea/index.jsx": 48,
|
||
|
"./GAListener": 14,
|
||
|
"./GAListener/": 14,
|
||
|
"./GAListener/index": 14,
|
||
|
"./GAListener/index.jsx": 14,
|
||
|
"./InactiveStatusBar": 28,
|
||
|
"./InactiveStatusBar/": 28,
|
||
|
"./InactiveStatusBar/index": 28,
|
||
|
"./InactiveStatusBar/index.jsx": 28,
|
||
|
"./Logo": 25,
|
||
|
"./Logo/": 25,
|
||
|
"./Logo/index": 25,
|
||
|
"./Logo/index.jsx": 25,
|
||
|
"./NavBarChannelOptionsDropdown": 26,
|
||
|
"./NavBarChannelOptionsDropdown/": 26,
|
||
|
"./NavBarChannelOptionsDropdown/index": 26,
|
||
|
"./NavBarChannelOptionsDropdown/index.jsx": 26,
|
||
|
"./ProgressBar": 10,
|
||
|
"./ProgressBar/": 10,
|
||
|
"./ProgressBar/index": 10,
|
||
|
"./ProgressBar/index.jsx": 10,
|
||
|
"./PublishPreview": 41,
|
||
|
"./PublishPreview/": 41,
|
||
|
"./PublishPreview/index": 41,
|
||
|
"./PublishPreview/index.jsx": 41,
|
||
|
"./PublishUrlMiddleDisplay": 45,
|
||
|
"./PublishUrlMiddleDisplay/": 45,
|
||
|
"./PublishUrlMiddleDisplay/index": 45,
|
||
|
"./PublishUrlMiddleDisplay/index.jsx": 45,
|
||
|
"./SEO": 9,
|
||
|
"./SEO/": 9,
|
||
|
"./SEO/index": 9,
|
||
|
"./SEO/index.js": 9,
|
||
|
"./SEO/view": 64,
|
||
|
"./SEO/view.jsx": 64,
|
||
|
"./index": 57,
|
||
|
"./index.js": 57
|
||
|
};
|
||
|
function webpackContext(req) {
|
||
|
return __webpack_require__(webpackContextResolve(req));
|
||
|
};
|
||
|
function webpackContextResolve(req) {
|
||
|
var id = map[req];
|
||
|
if(!(id + 1)) // check for number or string
|
||
|
throw new Error("Cannot find module '" + req + "'.");
|
||
|
return id;
|
||
|
};
|
||
|
webpackContext.keys = function webpackContextKeys() {
|
||
|
return Object.keys(map);
|
||
|
};
|
||
|
webpackContext.resolve = webpackContextResolve;
|
||
|
module.exports = webpackContext;
|
||
|
webpackContext.id = 191;
|
||
|
|
||
|
/***/ }),
|
||
|
/* 192 */
|
||
|
/***/ (function(module, exports, __webpack_require__) {
|
||
|
|
||
|
var map = {
|
||
|
"./": 58,
|
||
|
"./AssetDisplay": 19,
|
||
|
"./AssetDisplay/": 19,
|
||
|
"./AssetDisplay/index": 19,
|
||
|
"./AssetDisplay/index.js": 19,
|
||
|
"./AssetDisplay/view": 71,
|
||
|
"./AssetDisplay/view.jsx": 71,
|
||
|
"./AssetInfo": 34,
|
||
|
"./AssetInfo/": 34,
|
||
|
"./AssetInfo/index": 34,
|
||
|
"./AssetInfo/index.js": 34,
|
||
|
"./AssetInfo/view": 74,
|
||
|
"./AssetInfo/view.jsx": 74,
|
||
|
"./AssetTitle": 33,
|
||
|
"./AssetTitle/": 33,
|
||
|
"./AssetTitle/index": 33,
|
||
|
"./AssetTitle/index.js": 33,
|
||
|
"./AssetTitle/view": 73,
|
||
|
"./AssetTitle/view.jsx": 73,
|
||
|
"./ChannelClaimsDisplay": 36,
|
||
|
"./ChannelClaimsDisplay/": 36,
|
||
|
"./ChannelClaimsDisplay/index": 36,
|
||
|
"./ChannelClaimsDisplay/index.js": 36,
|
||
|
"./ChannelClaimsDisplay/view": 76,
|
||
|
"./ChannelClaimsDisplay/view.jsx": 76,
|
||
|
"./ChannelCreateForm": 18,
|
||
|
"./ChannelCreateForm/": 18,
|
||
|
"./ChannelCreateForm/index": 18,
|
||
|
"./ChannelCreateForm/index.js": 18,
|
||
|
"./ChannelCreateForm/view": 68,
|
||
|
"./ChannelCreateForm/view.jsx": 68,
|
||
|
"./ChannelLoginForm": 17,
|
||
|
"./ChannelLoginForm/": 17,
|
||
|
"./ChannelLoginForm/index": 17,
|
||
|
"./ChannelLoginForm/index.js": 17,
|
||
|
"./ChannelLoginForm/view": 67,
|
||
|
"./ChannelLoginForm/view.jsx": 67,
|
||
|
"./ChannelSelect": 49,
|
||
|
"./ChannelSelect/": 49,
|
||
|
"./ChannelSelect/index": 49,
|
||
|
"./ChannelSelect/index.js": 49,
|
||
|
"./ChannelSelect/view": 86,
|
||
|
"./ChannelSelect/view.jsx": 86,
|
||
|
"./Dropzone": 20,
|
||
|
"./Dropzone/": 20,
|
||
|
"./Dropzone/index": 20,
|
||
|
"./Dropzone/index.js": 20,
|
||
|
"./Dropzone/view": 80,
|
||
|
"./Dropzone/view.jsx": 80,
|
||
|
"./FourOhFourPage": 38,
|
||
|
"./FourOhFourPage/": 38,
|
||
|
"./FourOhFourPage/index": 38,
|
||
|
"./FourOhFourPage/index.jsx": 38,
|
||
|
"./FourOhFourPage/view": 78,
|
||
|
"./FourOhFourPage/view.jsx": 78,
|
||
|
"./NavBar": 7,
|
||
|
"./NavBar/": 7,
|
||
|
"./NavBar/index": 7,
|
||
|
"./NavBar/index.js": 7,
|
||
|
"./NavBar/view": 66,
|
||
|
"./NavBar/view.jsx": 66,
|
||
|
"./PublishDetails": 42,
|
||
|
"./PublishDetails/": 42,
|
||
|
"./PublishDetails/index": 42,
|
||
|
"./PublishDetails/index.js": 42,
|
||
|
"./PublishDetails/view": 81,
|
||
|
"./PublishDetails/view.jsx": 81,
|
||
|
"./PublishDisabledMessage": 51,
|
||
|
"./PublishDisabledMessage/": 51,
|
||
|
"./PublishDisabledMessage/index": 51,
|
||
|
"./PublishDisabledMessage/index.js": 51,
|
||
|
"./PublishDisabledMessage/view": 88,
|
||
|
"./PublishDisabledMessage/view.jsx": 88,
|
||
|
"./PublishMetadataInputs": 47,
|
||
|
"./PublishMetadataInputs/": 47,
|
||
|
"./PublishMetadataInputs/index": 47,
|
||
|
"./PublishMetadataInputs/index.js": 47,
|
||
|
"./PublishMetadataInputs/view": 85,
|
||
|
"./PublishMetadataInputs/view.jsx": 85,
|
||
|
"./PublishStatus": 50,
|
||
|
"./PublishStatus/": 50,
|
||
|
"./PublishStatus/index": 50,
|
||
|
"./PublishStatus/index.js": 50,
|
||
|
"./PublishStatus/view": 87,
|
||
|
"./PublishStatus/view.jsx": 87,
|
||
|
"./PublishThumbnailInput": 46,
|
||
|
"./PublishThumbnailInput/": 46,
|
||
|
"./PublishThumbnailInput/index": 46,
|
||
|
"./PublishThumbnailInput/index.js": 46,
|
||
|
"./PublishThumbnailInput/view": 84,
|
||
|
"./PublishThumbnailInput/view.jsx": 84,
|
||
|
"./PublishTitleInput": 43,
|
||
|
"./PublishTitleInput/": 43,
|
||
|
"./PublishTitleInput/index": 43,
|
||
|
"./PublishTitleInput/index.js": 43,
|
||
|
"./PublishTitleInput/view": 82,
|
||
|
"./PublishTitleInput/view.jsx": 82,
|
||
|
"./PublishTool": 40,
|
||
|
"./PublishTool/": 40,
|
||
|
"./PublishTool/index": 40,
|
||
|
"./PublishTool/index.js": 40,
|
||
|
"./PublishTool/view": 79,
|
||
|
"./PublishTool/view.jsx": 79,
|
||
|
"./PublishUrlInput": 44,
|
||
|
"./PublishUrlInput/": 44,
|
||
|
"./PublishUrlInput/index": 44,
|
||
|
"./PublishUrlInput/index.js": 44,
|
||
|
"./PublishUrlInput/view": 83,
|
||
|
"./PublishUrlInput/view.jsx": 83,
|
||
|
"./ShowAssetDetails": 32,
|
||
|
"./ShowAssetDetails/": 32,
|
||
|
"./ShowAssetDetails/index": 32,
|
||
|
"./ShowAssetDetails/index.js": 32,
|
||
|
"./ShowAssetDetails/view": 72,
|
||
|
"./ShowAssetDetails/view.jsx": 72,
|
||
|
"./ShowAssetLite": 30,
|
||
|
"./ShowAssetLite/": 30,
|
||
|
"./ShowAssetLite/index": 30,
|
||
|
"./ShowAssetLite/index.js": 30,
|
||
|
"./ShowAssetLite/view": 70,
|
||
|
"./ShowAssetLite/view.jsx": 70,
|
||
|
"./ShowChannel": 35,
|
||
|
"./ShowChannel/": 35,
|
||
|
"./ShowChannel/index": 35,
|
||
|
"./ShowChannel/index.js": 35,
|
||
|
"./ShowChannel/view": 75,
|
||
|
"./ShowChannel/view.jsx": 75,
|
||
|
"./index": 58,
|
||
|
"./index.js": 58
|
||
|
};
|
||
|
function webpackContext(req) {
|
||
|
return __webpack_require__(webpackContextResolve(req));
|
||
|
};
|
||
|
function webpackContextResolve(req) {
|
||
|
var id = map[req];
|
||
|
if(!(id + 1)) // check for number or string
|
||
|
throw new Error("Cannot find module '" + req + "'.");
|
||
|
return id;
|
||
|
};
|
||
|
webpackContext.keys = function webpackContextKeys() {
|
||
|
return Object.keys(map);
|
||
|
};
|
||
|
webpackContext.resolve = webpackContextResolve;
|
||
|
module.exports = webpackContext;
|
||
|
webpackContext.id = 192;
|
||
|
|
||
|
/***/ })
|
||
|
/******/ ]);
|
||
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgODQ3ODhjNjgxMjRmNGRjZmUxYmUiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3RcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJyZWFjdC1yZWR1eFwiIiwid2VicGFjazovLy9leHRlcm5hbCBcIndpbnN0b25cIiIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9lcnJvckhhbmRsZXJzLmpzIiwid2VicGFjazovLy8uL2NvbmZpZy9zaXRlQ29uZmlnLmpzIiwid2VicGFjazovLy8uL3NlcnZlci9tb2RlbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicmVhY3Qtcm91dGVyLWRvbVwiIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL05hdkJhci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvYWN0aW9ucy9wdWJsaXNoLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL1NFTy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9Qcm9ncmVzc0Jhci9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2FjdGlvbnMvc2hvdy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvRXJyb3JQYWdlL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9nb29nbGVBbmFseXRpY3MuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbXBvbmVudHMvR0FMaXN0ZW5lci9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovLy8uL2NsaWVudC91dGlscy9yZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0NoYW5uZWxMb2dpbkZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbENyZWF0ZUZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQXNzZXREaXNwbGF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0Ryb3B6b25lL2luZGV4LmpzIiwid2VicGFjazovLy9leHRlcm5hbCBcInBhdGhcIiIsIndlYnBhY2s6Ly8vLi9zZXJ2ZXIvaGVscGVycy9sYnJ5QXBpLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb25zdGFudHMvc2hvd19hY3Rpb25fdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2VzL0xvZ2luUGFnZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9Mb2dvL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9OYXZCYXJDaGFubmVsT3B0aW9uc0Ryb3Bkb3duL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9BY3RpdmVTdGF0dXNCYXIvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb21wb25lbnRzL0luYWN0aXZlU3RhdHVzQmFyL2luZGV4LmpzeCIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvU2hvd1BhZ2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0Fzc2V0TGl0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc2VsZWN0b3JzL3Nob3cuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvU2hvd0Fzc2V0RGV0YWlscy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9Bc3NldFRpdGxlL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL0Fzc2V0SW5mby9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9TaG93Q2hhbm5lbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9DaGFubmVsQ2xhaW1zRGlzcGxheS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9Bc3NldFByZXZpZXcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvRm91ck9oRm91clBhZ2UvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9wYWdlcy9Ib21lUGFnZS9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaFRvb2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbXBvbmVudHMvUHVibGlzaFByZXZpZXcvaW5kZXguanN4Iiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hEZXRhaWxzL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hUaXRsZUlucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hVcmxJbnB1dC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9QdWJsaXNoVXJsTWlkZGxlRGlzcGxheS9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvUHVibGlzaFRodW1ibmFpbElucHV0L2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hNZXRhZGF0YUlucHV0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29tcG9uZW50cy9FeHBhbmRpbmdUZXh0QXJlYS9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbnRhaW5lcnMvQ2hhbm5lbFNlbGVjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvY29udGFpbmVycy9QdWJsaXNoU3RhdHVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL2NsaWVudC9jb250YWluZXJzL1B1Ymxpc2hEaXNhYmxlZE1lc3NhZ2UvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3BhZ2VzL0Fib3V0UGFnZS9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vc2VydmVyL2NvbnRyb2xsZXJzL3NlcnZlQ29udHJvbGxlci5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJyZWFjdC1oZWxtZXRcIiIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJyZWR1eC1zYWdhL2VmZmVjdHNcIiIsIndlYnBhY2s6Ly8vLi9jbGllbnQvcGFnZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L2NvbXBvbmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW5
|