Request Helpers
This is a catalog of available convenience methods available in Novel registered using Fastify's request and reply decorators.
Request
request.account
request.account
This includes details on which user is accessing that request.
request.account = {
id: string,
role: string,
verified: boolean,
};
request.org
request.org
This includes details on which organization is being used by the current request
request.org = {
id: string,
}
request.account
and request.org
are both getters and setters and will trigger errors if accessed outside of instance.authorized()
or instance.authenticated()
directives.
await request.can(action: string, subject: any, fields: string[])
await request.can(action: string, subject: any, fields: string[])
Discussed in Authorization
A convenience method that allows you to check if the currently logged in user is allowed to take action
towards the specific subject
.
This uses the CASL can
signature.
export default function Route(instance) {
instance.authenticated();
instance.get('/your/route', handler);
async function handler (request) {
await request.can('read', 'projects');
reply.send('ONLY FOR SESSIONS WITH projects:read PERMISSION');
}
}
See https://github.com/madewithnovel/novel/blob/main/packages/novel/lib/session.js#L196
await request.cannot(action: string, subject: any, fields: string[])
await request.cannot(action: string, subject: any, fields: string[])
Discussed in Authorization
This is the inverse of await request.can()
above.
await request.verified()
await request.verified()
Check if the currently logged in user has a verified
status.
export default function Route(instance) {
instance.authorized();
instance.get('/your/route', handler);
async function handler (request) {
await request.verified();
reply.send('ONLY FOR AUTHENTICATED API KEYS');
}
}
await request.subscribed()
await request.subscribed()
Check if the currently logged in organization has an active subscription.
export default function Route(instance) {
instance.authorized();
instance.get('/your/route', handler);
async function handler (request) {
await request.subscribed();
reply.send('ONLY FOR SUBSCRIBED ORGANIZATIONS');
}
}
request.ua()
request.ua()
A convenience method that exposes an object that has the user-agent parsed by the my-ua-parser
library.
export default function Route(instance) {
instance.get('/your/route', handler);
async function handler (request) {
return request.ua();
}
}
Check the library definition for the ua object.
Reply
reply.error(error: FastifyError)
reply.error(error: FastifyError)
A response builder that consolidates errors and produces an error format unique to Novel.
See https://github.com/madewithnovel/novel/blob/main/packages/novel/lib/server.js#L158
await reply.uncache(key: string, options?: CacheOptions)
await reply.uncache(key: string, options?: CacheOptions)
This is a decorator to reply that you can use to manually purge a cached response.
export default function Route(instance) {
instance.get('/your/route', handler);
async function handler (request, reply) {
await request.cache('custom-key');
// do some specific logic
reply.send('OK');
await reply.uncache('custom-key');
}
}
Changelog
2024-12-20 - Initial Documentation
Last updated
Was this helpful?