📅 You're Invited: Meet the Socket team at RSAC (April 28 – May 1).RSVP
Socket
Sign inDemoInstall
Socket

@hapipal/toys

Package Overview
Dependencies
Maintainers
3
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@hapipal/toys

The hapi utility toy chest

3.2.0
Source
npm
Version published
Weekly downloads
0
Maintainers
3
Weekly downloads
 
Created
Source

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 v19+ and nodejs v12+ (see v2 for lower support).

Toys is a collection of utilities made to reduce common boilerplate in hapi v19+ projects, aid usage of events and streams in async functions (e.g. handlers and server methods), and provide versions of widely-used utilities from Hoek optimized to perform well in hot code paths such as route handlers.

Below is an example featuring Toys.auth.strategy(), Toys.reacher(), 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 } } });
    });

    // Make function to efficiently index into a request to grab an authed user's name
    const grabAuthedUsername = Toys.reacher('auth.credentials.user.name');

    // 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) => {

                        // grabAuthedUsername() is designed to be quick
                        const username = grabAuthedUsername(request);

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

    await server.start();

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

Keywords

hapi

FAQs

Package last updated on 28 Nov 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts