123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #!/usr/bin/env node
- const moduleAlias = require('module-alias');
- moduleAlias.addAlias('punycode', 'punycode/');
- const fs = require('fs');
- const path = require('path');
- const SecretStack = require('secret-stack');
- const caps = require('ssb-caps');
- const SSB = require('ssb-db');
- const config = require('./ssb_config');
- const { printMetadata } = require('./ssb_metadata');
- require('ssb-plugins').loadUserPlugins(SecretStack({ caps }), config);
- const Server = SecretStack({ caps })
- .use(SSB)
- .use(require('ssb-master'))
- .use(require('ssb-gossip'))
- .use(require('ssb-ebt'))
- .use(require('ssb-friends'))
- .use(require('ssb-blobs'))
- .use(require('ssb-lan'))
- .use(require('ssb-meme'))
- .use(require('ssb-plugins'))
- .use(require('ssb-conn'))
- .use(require('ssb-box'))
- .use(require('ssb-search'))
- .use(require('ssb-private'))
- .use(require('ssb-friend-pub'))
- .use(require('ssb-invite-client'))
- .use(require('ssb-logging'))
- .use(require('ssb-replication-scheduler'))
- .use(require('ssb-partial-replication'))
- .use(require('ssb-about'))
- .use(require('ssb-onion'))
- .use(require('ssb-unix-socket'))
- .use(require('ssb-no-auth'))
- .use(require('ssb-backlinks'))
- .use(require('ssb-links'))
- .use(require('ssb-tangle'))
- .use(require('ssb-query'));
-
- if (config.autofollow?.enabled !== false) {
- Server.use(require('ssb-autofollow'));
- }
- const manifestFile = path.join(config.path, 'manifest.json');
- let server;
- const argv = process.argv.slice(2);
- if (argv[0] === 'start') {
- server = Server(config);
- fs.writeFileSync(manifestFile, JSON.stringify(server.getManifest(), null, 2));
- const { cmdAliases } = require('../client/cli-cmd-aliases');
- const manifest = server.getManifest();
- for (const k in cmdAliases) {
- server[k] = server[cmdAliases[k]];
- manifest[k] = manifest[cmdAliases[k]];
- }
- manifest.config = 'sync';
- server.config = cb => {
- console.log(JSON.stringify(config, null, 2));
- cb();
- };
- if (process.stdout.isTTY && config.logging?.level !== 'info') {
- const showProgress = () => {
- let prog = -1;
- const bar = r => '\r' + '*'.repeat(Math.floor(r * 50)) + '.'.repeat(50 - Math.floor(r * 50));
- const percent = r => (Math.round(r * 10000) / 100).toFixed(2) + '%';
- const rate = prog => prog.target === prog.current ? 1 : (prog.current - prog.start) / (prog.target - prog.start);
- const interval = setInterval(() => {
- const p = server.progress();
- let r = 1;
- const tasks = [];
- for (const k in p) {
- const pr = rate(p[k]);
- if (pr < 1) tasks.push(`${k}:${percent(pr)}`);
- r = Math.min(r, pr);
- }
- if (r !== prog) {
- prog = r;
- process.stdout.write(bar(r) + ` (${tasks.join(', ')})\x1b[K\r`);
- }
- }, 333);
- interval.unref?.();
- };
- showProgress();
- }
- const { printMetadata, colors } = require('./ssb_metadata');
- printMetadata('OASIS Server Only', colors.cyan);
- }
- module.exports = {
- config,
- server: server || Server(config),
- open: async () => server || Server(config)
- };
|