UNPKG

ldn-inbox-server

Version:

A demonstration Event Notifications Inbox server

126 lines (116 loc) 4.74 kB
#!/usr/bin/env node const fs = require('fs'); const { program } = require('commander'); const { start_server } = require('mellon-server'); const { doInbox } = require('../lib/index'); const { handle_inbox } = require('../lib/handler'); const { parseConfig } = require('../lib/util'); require('dotenv').config(); const HOST = process.env.LDN_SERVER_HOST ?? 'localhost'; const PORT = process.env.LDN_SERVER_PORT ?? 8000; const INBOX_GLOB = process.env.LDN_SERVER_INBOX_GLOB ?? "^.*\\.jsonld$"; const INBOX_BATCH_SIZE = process.env.LDN_SERVER_INBOX_BATH_SIZE ?? 5; const INBOX_URL = process.env.LDN_SERVER_INBOX_URL ?? 'inbox/'; const INBOX_BASE_URL = process.env.LDN_SERVER_BASEURL ?? 'http://localhost:8000'; const PUBLIC_PATH = process.env.LDN_SERVER_PUBLIC_PATH ?? './public'; const INBOX_PATH = process.env.LDN_SERVER_INBOX_PATH ?? './inbox'; const ERROR_PATH = process.env.LDN_SERVER_ERROR_PATH ?? './error'; const OUTBOX_PATH = process.env.LDN_SERVER_OUTBOX_PATH ?? './outbox'; const JSON_SCHEMA_PATH = process.env.LDN_SERVER_JSON_SCHEMA; const INBOX_CONFIG = process.env.LDN_SERVER_INBOX_CONFIG; const OUTBOX_CONFIG = process.env.LDN_SERVER_OUTBOX_CONFIG; const HAS_PUBLIC = process.env.LDN_SERVER_HAS_PUBLIC_INBOX ?? 0; const HAS_WRITE = process.env.LDN_SERVER_HAS_WRITABLE_INBOX ?? 1; const OTHER_CONFIG = process.env.LDN_SERVER_OTHER_CONFIG; program .name('lnd-inbox-server') .description('A demonstration Event Notifications Inbox server'); program .command('start-server') .option('--host <host>','host',HOST) .option('--port <port>','port',PORT) .option('--config <config>','config',OTHER_CONFIG) .option('--url <path>','path',INBOX_URL) .option('--base <url>','base url',INBOX_BASE_URL) .option('--inbox <inbox>','inbox',INBOX_PATH) .option('--public <public>','public',PUBLIC_PATH) .option('--schema <schema>','json schema',JSON_SCHEMA_PATH) .option('--registry <registry>','registry',null) .option('--inbox-public','public readable inbox',HAS_PUBLIC) .option('--inbox-writeable','public writable inbox',HAS_WRITE) .action( (options) => { let registry = []; // Add other (external defined) registry parts if (options['registry']) { const path = options['registry']; let registry2; if (typeof path === 'string' || path instanceof String) { registry2 = JSON.parse(fs.readFileSync(path,{ encoding: 'utf-8'})); } else { registry2 = path; } registry = registry.concat(registry2); } if (options['config'] && fs.existsSync(options['config'])) { const config = parseConfig(options['config']); if (config.registry) { for (let i = 0 ; i < config.registry.length ; i++) { const registry_item = config.registry[i]; if (! registry_item['do']) { registry_item['do'] = doInbox; } registry_item['with'] = {...options,...registry_item['with']}; registry = registry.concat(registry_item); } } } else { registry = registry.concat({ path : `${options['url']}.*` , do: doInbox , with: options}); } start_server({ host: options['host'], port: options['port'], base: options['base'], public: options['public'], registry: registry }); }); program .command('handler') .option('--base <url>','base url',INBOX_BASE_URL) .option('--inbox <inbox>','inbox',INBOX_PATH) .option('--outbox <outbox>','outbox',OUTBOX_PATH) .option('--public <public>','public',PUBLIC_PATH) .option('--error <errbox>','errbox',ERROR_PATH) .option('--loop', 'run in a loop') .option('--batch_size <num>','batch size to process',INBOX_BATCH_SIZE) .option('--glob <glob>','files to process in inbox',INBOX_GLOB) .option('--config <path>','config file for handlers') .option('-hi,--inbox_handler <handler>','inbox handler') .option('-hn,--notification_handler <handler>','notification handler') .option('-s,--single <notification>','handle this one specific notification') .argument('<box>','box to process') .action( async(box,options) => { switch (box) { case '@inbox': box = INBOX_PATH; if (!options['config']) { options['config'] = INBOX_CONFIG } break; case '@outbox': box = OUTBOX_PATH; if (!options['config']) { options['config'] = OUTBOX_CONFIG } break; } if (! fs.existsSync(options['config'])) { console.error(`can't open ${options['config']}`); } else { await handle_inbox(box,options); } }); program.parse();