Package Exports
- @hapipal/toys
- @hapipal/toys/lib/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@hapipal/toys) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
toys
The hapi utility toy chest
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`);
})();