uyem
Version:
WebRTC client-server SFU application
200 lines • 7.71 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// @ts-check
/******************************************************************************************
* Repository: https://github.com/kolserdav/werift-sfu-react.git
* File name: index.ts
* Author: Sergey Kolmiller
* Email: <uyem.ru@gmail.com>
* License: MIT
* License text: See in LICENSE file
* Copyright: kolserdav, All rights reserved (c)
* Create Date: Wed Aug 24 2022 14:14:09 GMT+0700 (Krasnoyarsk Standard Time)
******************************************************************************************/
/* eslint-disable no-case-declarations */
const child_process_1 = require("child_process");
const path_1 = __importDefault(require("path"));
const lib_1 = require("./utils/lib");
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
// eslint-disable-next-line import/no-relative-packages
const package_1 = require("../../../package");
const constants_1 = require("./utils/constants");
(0, lib_1.log)('info', `${package_1.name}@${package_1.version} started`, '...', true);
process.chdir(path_1.default.resolve(__dirname, '../../..'));
const processArgs = process.argv;
const DEFAULT_PARAMS = {
port: '3001',
cors: '',
db: 'mysql://user:password@127.0.0.1:3306/uyem_db',
cloud: '/tmp',
};
const ARGS = {
help: 'This document',
port: 'Server websocket port',
log: 'Level of logs 0 - all | 1 - info | 2 - warn | 3 - error',
cors: 'Allowed origins',
db: `Database url ${DEFAULT_PARAMS.db}`,
version: 'Show installed version',
migrate: 'Run only migrate script',
cloud: 'Video recording and image storage path',
};
const argv = { ...DEFAULT_PARAMS };
processArgs.forEach((item, index) => {
if (/^-{1,2}\w+/.test(item)) {
argv[item.replace(/-/g, '')] = process.argv[index + 1];
}
});
const args = Object.keys(argv);
const migrate = async () => {
(0, lib_1.log)('info', 'Running "npm run migrate" command...', '', true);
return new Promise((resolve) => {
const res = (0, child_process_1.exec)('npm run migrate', {
env: process.env,
cwd: path_1.default.resolve(__dirname, '../../..'),
}, (error) => {
if (error) {
(0, lib_1.log)('error', 'Failed "npm run migrate" command', error);
resolve(error.code || 0);
}
});
res.stdout?.on('data', (d) => {
(0, lib_1.log)('info', d.toString(), '', true);
});
res.stderr?.on('data', (d) => {
(0, lib_1.log)('warn', d.toString(), '', true);
});
res.on('exit', (e) => {
resolve(e);
});
});
};
const REQUIRED = [];
const defKeys = Object.keys(ARGS);
const skipedReq = [];
for (let i = 0; REQUIRED[i]; i++) {
const rArg = REQUIRED[i];
if (args.indexOf(rArg) === -1) {
skipedReq.push(rArg);
}
}
if (skipedReq.length) {
(0, lib_1.log)('warn', 'Missing required parameter(s):', REQUIRED.join(', '), true);
// eslint-disable-next-line no-console
console.log('\n');
process.exit(1);
}
let port = 3000;
let cors = '';
let code = 0;
let logLevel;
let db = '';
let cloud = '';
let skipMigrate = false;
(async () => {
for (let n = 0; args[n]; n++) {
const arg = args[n];
switch (arg) {
case 'help':
(0, lib_1.log)('info', `$ uyem --[option] [value]`, '>', true);
(0, lib_1.log)('info', 'Options:', ARGS, true);
code = 0;
skipMigrate = true;
break;
case 'log':
// eslint-disable-next-line @typescript-eslint/no-explicit-any
logLevel = parseInt(argv.log, 10);
if (Number.isNaN(logLevel)) {
(0, lib_1.log)('warn', 'Argument "log" is not a number', argv.log, true);
code = 1;
}
break;
case 'port':
port = parseInt(argv.port || DEFAULT_PARAMS.port, 10);
if (Number.isNaN(port)) {
(0, lib_1.log)('warn', 'Required number type of "port", received:', port, true);
code = 1;
break;
}
break;
case 'cloud':
cloud = argv.cloud || DEFAULT_PARAMS.cloud;
break;
case 'cors':
(0, lib_1.log)('info', 'Set up Simple-CORS defence:', argv.cors);
cors = argv.cors || DEFAULT_PARAMS.cors;
break;
case 'db':
db = argv.db || DEFAULT_PARAMS.db;
process.env.DATABASE_URL = db || constants_1.DATABASE_URL;
if (db === DEFAULT_PARAMS.db && !skipMigrate) {
(0, lib_1.log)('warn', 'Parameter "db" not specified, using default:', DEFAULT_PARAMS.db, true);
}
else if (!skipMigrate) {
(0, lib_1.log)('info', 'Using database url:', (0, lib_1.cleanDbUrl)(db), true);
}
break;
case 'migrate':
(0, lib_1.log)('info', 'Start migrate only script...', '', true);
break;
default:
(0, lib_1.log)('warn', 'Unknown argument:', arg);
for (let i = 0; defKeys[i]; i++) {
if (new RegExp(arg).test(defKeys[i])) {
(0, lib_1.log)('info', 'Maybe need: ', defKeys[i], true);
break;
}
}
(0, lib_1.log)('info', 'Try run:', '--help');
code = 1;
}
}
if (code !== 0) {
(0, lib_1.log)('warn', 'Script end with code:', code, true);
}
else {
if (!skipMigrate) {
code = (await migrate()) || 0;
if (process.argv.indexOf('--migrate') !== -1) {
(0, lib_1.log)(code ? 'warn' : 'info', 'Migrate exit with code', code, true);
return;
}
}
if (code !== 0) {
(0, lib_1.log)('warn', 'Script end with code:', code, true);
}
else if (!skipMigrate) {
// eslint-disable-next-line global-require
Promise.resolve().then(() => __importStar(require('./main'))).then(({ createServer }) => {
createServer({ port, cors, logLevel, cloudPath: cloud, db });
});
}
}
})();
//# sourceMappingURL=index.js.map