Skip to content

hapipal/toys

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

103 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

toys

The hapi utility toy chest

Build Status Coverage Status

Lead Maintainer - Devin Ivy

Installation

npm install @hapipal/toys

Usage

See also the API Reference

Toys is intended for use with hapi v20+ and nodejs v16+ (see v3 for lower support).

Toys is a collection of utilities made to reduce common boilerplate in hapi v20+ projects.

Below is an example featuring Toys.auth.strategy() and Toys.withRouteDefaults(). The API Reference is also filled with examples.

const Hapi = require('@hapi/hapi');
const Boom = require('@hapi/boom');
const Toys = require('@hapipal/toys');

(async () => {

    const server = Hapi.server();

    // Make a one-off auth strategy for testing
    Toys.auth.strategy(server, 'name-from-param', (request, h) => {

        // Yes, perhaps not the most secure
        const { username } = request.params;

        if (!username) {
            throw Boom.unauthorized(null, 'Custom');
        }

        return h.authenticated({ credentials: { user: { name: username } } });
    });

    // Default all route methods to "get", unless otherwise specified
    const defaultToGet = Toys.withRouteDefaults({ method: 'get' });

    server.route(
        defaultToGet([
            {
                method: 'post',
                path: '/',
                handler: (request) => {

                    return { posted: true };
                }
            },
            {   // Look ma, my method is defaulting to "get"!
                path: '/as/{username}',
                options: {
                    auth: 'name-from-param', // Here's our simple auth strategy
                    handler: (request) => {

                        const username = request.auth.credentials?.user?.name;

                        return { username };
                    }
                }
            }
        ])
    );

    await server.start();

    console.log(`Now, go forth and ${server.info.uri}/as/your-name`);
})();

About

The hapi utility toy chest

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 7