import Hapi = require("hapi"); // Create a server with a host and port var server = new Hapi.Server(); server.connection({ host: "localhost", port: 8000 }); // Add plugins var plugin: any = { register: function (plugin: Object, options: Object, next: Function) { next(); } }; plugin.register.attributes = { name: "test", version: "1.0.0" }; // optional options parameter server.register({}, function (err) { }); // optional callback function with and without options server.register({}).then((res: any) => { console.log(res); }); server.register({}, {select: "api", routes: {prefix: "/prefix"}}).then((res: any) => { console.log(res); }); // optional options.routes.vhost parameter server.register({}, {select: "api", routes: {prefix: "/prefix"}}, function (err) { }); //server.pack.register(plugin, (err: Object) => { // if (err) { throw err; } //}); //server.pack.register([plugin], (err: Object) => { // if (err) { throw err; } //}); // Add server method var add = function (a: number, b: number, next: (err: any, result?: any, ttl?: number) => void) { next(null, a + b); }; server.method("sum", add);//, { cache: { expiresIn: 2000 } }); server.methods["sum"](4, 5, (err: any, result: any) => { console.log(result); }); var addArray = function (array: Array, next: (err: any, result?: any, ttl?: number) => void) { var sum: number = 0; array.forEach((item: number) => { sum += item; }); next(null, sum); }; server.method("sumObj", addArray, { //cache: { expiresIn: 2000 }, generateKey: (array: Array) => { return array.join(','); } }); server.methods["sumObj"]([5, 6], (err: any, result: any) => { console.log(result); }); // Add the route server.route({ method: 'GET', path: '/hello', handler: function (request: Hapi.Request, reply: Function) { request.log('info', { route: '/hello' }, Date.now()); reply('hello world'); } }); server.route([{ method: 'GET', path: '/hello2', handler: function (request: Hapi.Request, reply: Function) { reply('hello world2'); } }]); server.route([{ method: 'GET', path: '/hello3', handler: function (request: Hapi.Request, reply: Hapi.IReply) { reply('hello world2'); } }]); interface IHello { msg: string } server.route([{ method: 'GET', path: '/hello4', handler: function (request: Hapi.Request, reply: Hapi.IStrictReply) { reply({ msg: 'hello world' }) } }]); // Implict handler server.route({ method: 'GET', path: '/hello6', handler: function (request: Hapi.Request, reply: Hapi.IReply) { request.log('info', { route: '/hello' }, Date.now()); reply('hello world'); } }); // config.validate parameters should be optional server.route([{ method: 'GET', path: '/hello2', handler: function (request: Hapi.Request, reply: Function) { reply('hello world2'); }, config: { validate: {} } }]); // Should be able to chain reply options server.route([{ method: 'GET', path: '/chained-notation', handler: function (request: Hapi.Request, reply: Hapi.IReply) { reply.state('cookie_key', 'cookie_value'); reply('chained-notation') .bytes(16) .code(200) .type('text/plain') .unstate('cookie_to_remove') .header('X-Custom', 'some-value'); } }]); // Start the server server.start(); // server startup may now return a promise server.start() .then(() => { console.log('Started!'); }); //inject a request into connection server.inject({ method: 'GET', url: '/hello' }).then(response => { console.log(response.statusCode); }); //the same but this time using callback server.inject({ method: 'GET', url: '/hello' }, response => { console.log(response.statusCode); }); //tests for server initialization server.initialize() .then(() => { console.log('Initialized!') }); //and the same but with callback server.initialize(err => { if (err) { console.log(err); } }); //server stopping may now return a promise server.stop() .then(() => { console.log('Stopped!'); }); //decorate can take an optional options argument server.decorate('hello', 'world', () => { }, { apply: true }); server.decorate('hello2', 'world2', () => { });