public constructor()

in packages/sdk/src/util/webHost.ts [42:91]


	public constructor(options: {
		baseDir?: string;
		baseUrl?: string;
		port?: string | number;
		permissions?: Permissions[];
		optionalPermissions?: Permissions[];
	} = {}) {
		const pjson = require('../../package.json'); /* eslint-disable-line @typescript-eslint/no-var-requires */
		log.info('app', `Node: ${process.version}`);
		log.info('app', `${pjson.name}: v${pjson.version}`);

		this._baseDir = options.baseDir || process.env.BASE_DIR;
		this._baseUrl = options.baseUrl || process.env.BASE_URL;

		// Azure defines WEBSITE_HOSTNAME.
		if (!this._baseUrl && process.env.WEBSITE_HOSTNAME) {
			this._baseUrl = `https://${process.env.WEBSITE_HOSTNAME}`;
		}

		// Resolve the port number. Heroku defines a PORT environment var (remapped from 80).
		const port = options.port || process.env.PORT || 3901;

		// Create a Multi-peer adapter
		this._adapter = new MultipeerAdapter({ port });

		// Start listening for new app connections from a multi-peer client.
		this.validateManifest()
		.then(() => this._adapter.listen())
		.then(server => {
			this._baseUrl = this._baseUrl || server.url.replace(/\[::\]/u, '127.0.0.1');
			log.info('app', `${server.name} listening on ${JSON.stringify(server.address())}`);
			log.info('app', `baseUrl: ${this.baseUrl}`);
			log.info('app', `baseDir: ${this.baseDir}`);

			// check if a procedural manifest is needed, and serve if so
			this.serveManifestIfNeeded(server, options.permissions, options.optionalPermissions);

			// serve static buffers
			server.get(`/buffers/:name`,
				this.checkStaticBuffers,
				Restify.plugins.conditionalRequest(),
				this.serveStaticBuffers);

			// serve static files
			if (this.baseDir) {
				server.get('/*', Restify.plugins.serveStaticFiles(this._baseDir));
			}
		})
		.catch(reason => log.error('app', `Failed to start HTTP server: ${reason}`));
	}