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}`));
}