Skip to content

Commit

Permalink
feat(hapi-request-event-predicates): add predicate for HTTP 400
Browse files Browse the repository at this point in the history
  • Loading branch information
jackdbd committed Sep 14, 2022
1 parent 77ab065 commit 102f145
Show file tree
Hide file tree
Showing 11 changed files with 121 additions and 17 deletions.
2 changes: 1 addition & 1 deletion docs/hapi-request-event-predicates/assets/search.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docs/hapi-request-event-predicates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ <h2>Installation</h2>
</a>
<pre><code class="language-sh"><span class="hl-0">npm install @jackdbd/hapi-request-event-predicates</span>
</code></pre>
</div></div><div class="col-4 col-menu menu-sticky-wrap menu-highlight"><nav class="tsd-navigation primary"><ul><li class="current"><a href="modules.html">Exports</a></li></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul><li class="tsd-kind-interface"><a href="interfaces/Tags.html" class="tsd-kind-icon">Tags</a></li><li class="tsd-kind-function"><a href="modules.html#hasRequestHeaderStripeSignature" class="tsd-kind-icon">has<wbr/>Request<wbr/>Header<wbr/>Stripe<wbr/>Signature</a></li><li class="tsd-kind-function"><a href="modules.html#isClientRequestError" class="tsd-kind-icon">is<wbr/>Client<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isForbiddenRequestError" class="tsd-kind-icon">is<wbr/>Forbidden<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isNotFoundRequestError" class="tsd-kind-icon">is<wbr/>Not<wbr/>Found<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isServerRequestError" class="tsd-kind-icon">is<wbr/>Server<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isTeapotRequestError" class="tsd-kind-icon">is<wbr/>Teapot<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isUnauthorizedRequestError" class="tsd-kind-icon">is<wbr/>Unauthorized<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#lacksRequestHeaderStripeSignature" class="tsd-kind-icon">lacks<wbr/>Request<wbr/>Header<wbr/>Stripe<wbr/>Signature</a></li><li class="tsd-kind-function"><a href="modules.html#makeHasRequestHeader" class="tsd-kind-icon">make<wbr/>Has<wbr/>Request<wbr/>Header</a></li></ul></nav></div></div></div><footer class="with-border-bottom"><div class="container"><h2>Settings</h2><p>Theme <select id="theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></p></div></footer><div class="container tsd-generator"><p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div><div class="overlay"></div><script src="assets/main.js"></script></body></html>
</div></div><div class="col-4 col-menu menu-sticky-wrap menu-highlight"><nav class="tsd-navigation primary"><ul><li class="current"><a href="modules.html">Exports</a></li></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul><li class="tsd-kind-interface"><a href="interfaces/Tags.html" class="tsd-kind-icon">Tags</a></li><li class="tsd-kind-function"><a href="modules.html#hasRequestHeaderStripeSignature" class="tsd-kind-icon">has<wbr/>Request<wbr/>Header<wbr/>Stripe<wbr/>Signature</a></li><li class="tsd-kind-function"><a href="modules.html#isBadRequestError" class="tsd-kind-icon">is<wbr/>Bad<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isClientRequestError" class="tsd-kind-icon">is<wbr/>Client<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isForbiddenRequestError" class="tsd-kind-icon">is<wbr/>Forbidden<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isNotFoundRequestError" class="tsd-kind-icon">is<wbr/>Not<wbr/>Found<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isServerRequestError" class="tsd-kind-icon">is<wbr/>Server<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isTeapotRequestError" class="tsd-kind-icon">is<wbr/>Teapot<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#isUnauthorizedRequestError" class="tsd-kind-icon">is<wbr/>Unauthorized<wbr/>Request<wbr/>Error</a></li><li class="tsd-kind-function"><a href="modules.html#lacksRequestHeaderStripeSignature" class="tsd-kind-icon">lacks<wbr/>Request<wbr/>Header<wbr/>Stripe<wbr/>Signature</a></li><li class="tsd-kind-function"><a href="modules.html#makeHasRequestHeader" class="tsd-kind-icon">make<wbr/>Has<wbr/>Request<wbr/>Header</a></li></ul></nav></div></div></div><footer class="with-border-bottom"><div class="container"><h2>Settings</h2><p>Theme <select id="theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></p></div></footer><div class="container tsd-generator"><p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div><div class="overlay"></div><script src="assets/main.js"></script></body></html>
2 changes: 1 addition & 1 deletion docs/hapi-request-event-predicates/modules.html

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,55 @@
"endIndex": 8
}
},
{
"kind": "Variable",
"canonicalReference": "@jackdbd/hapi-request-event-predicates!isBadRequestError:var",
"docComment": "/**\n * @public\n */\n",
"excerptTokens": [
{
"kind": "Content",
"text": "isBadRequestError: "
},
{
"kind": "Content",
"text": "(_request: Hapi."
},
{
"kind": "Reference",
"text": "Request",
"canonicalReference": "@types/hapi__hapi!~Request:interface"
},
{
"kind": "Content",
"text": ", event: Hapi."
},
{
"kind": "Reference",
"text": "RequestEvent",
"canonicalReference": "@types/hapi__hapi!RequestEvent:interface"
},
{
"kind": "Content",
"text": ", _tags: "
},
{
"kind": "Reference",
"text": "Tags",
"canonicalReference": "@jackdbd/hapi-request-event-predicates!Tags:interface"
},
{
"kind": "Content",
"text": ") => boolean"
}
],
"isReadonly": true,
"releaseTag": "Public",
"name": "isBadRequestError",
"variableTypeTokenRange": {
"startIndex": 1,
"endIndex": 8
}
},
{
"kind": "Variable",
"canonicalReference": "@jackdbd/hapi-request-event-predicates!isClientRequestError:var",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ import type Hapi from '@hapi/hapi';
// @public (undocumented)
export const hasRequestHeaderStripeSignature: (request: Hapi.Request, _event: Hapi.RequestEvent, _tags: Tags) => boolean;

// @public (undocumented)
export const isBadRequestError: (_request: Hapi.Request, event: Hapi.RequestEvent, _tags: Tags) => boolean;

// @public (undocumented)
export const isClientRequestError: (_request: Hapi.Request, event: Hapi.RequestEvent, tags: Tags) => boolean;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ import type Hapi from '@hapi/hapi';
// @public (undocumented)
export const hasRequestHeaderStripeSignature: (request: Hapi.Request, _event: Hapi.RequestEvent, _tags: Tags) => boolean;

// @public (undocumented)
export const isBadRequestError: (_request: Hapi.Request, event: Hapi.RequestEvent, _tags: Tags) => boolean;

// @public (undocumented)
export const isClientRequestError: (_request: Hapi.Request, event: Hapi.RequestEvent, tags: Tags) => boolean;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import Boom from '@hapi/boom'
import Shot from '@hapi/shot'
import {
isBadRequestError,
isClientRequestError,
isForbiddenRequestError,
isUnauthorizedRequestError,
Expand Down Expand Up @@ -40,6 +41,23 @@ describe('isClientRequestError', () => {
})
})

describe('isBadRequestError', () => {
it('is true when `error` is Boom.badRequest() and `tags` includes both `error` and `handler`', async () => {
const dispatch = makeDispatch({
event: { error: Boom.badRequest() },
tags: { error: true, handler: true },
predicate: isBadRequestError
})

const res = await Shot.inject(dispatch, {
method: 'GET',
url: '/'
})

expect(res.payload).toBe('PASSED')
})
})

describe('isUnauthorizedRequestError', () => {
it('is true when `error` is Boom.unauthorized() and `tags` includes both `error` and `handler`', async () => {
const dispatch = makeDispatch({
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [@jackdbd/hapi-request-event-predicates](./hapi-request-event-predicates.md) &gt; [isBadRequestError](./hapi-request-event-predicates.isbadrequesterror.md)

## isBadRequestError variable


<b>Signature:</b>

```typescript
isBadRequestError: (_request: Hapi.Request, event: Hapi.RequestEvent, _tags: Tags) => boolean
```
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Functions that check whether a Hapi request event contains one or more of the fo
| Variable | Description |
| --- | --- |
| [hasRequestHeaderStripeSignature](./hapi-request-event-predicates.hasrequestheaderstripesignature.md) | |
| [isBadRequestError](./hapi-request-event-predicates.isbadrequesterror.md) | |
| [isClientRequestError](./hapi-request-event-predicates.isclientrequesterror.md) | |
| [isForbiddenRequestError](./hapi-request-event-predicates.isforbiddenrequesterror.md) | |
| [isNotFoundRequestError](./hapi-request-event-predicates.isnotfoundrequesterror.md) | |
Expand Down
45 changes: 31 additions & 14 deletions packages/hapi-request-event-predicates/src/client-predicates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,36 @@ import type Hapi from '@hapi/hapi'
import type Boom from '@hapi/boom'
import type { Tags } from './interfaces.js'

// maybe call this hasRequestEventClientBoomError?

/**
* @public
*/
export const isNotFoundRequestError = (
export const isClientRequestError = (
_request: Hapi.Request,
event: Hapi.RequestEvent,
tags: Tags
) => {
if (event.error && tags.error && tags.handler) {
const boom = event.error as Boom.Boom
if (boom.isBoom && boom.output.statusCode === 404) {
if (boom.isBoom && !boom.isServer) {
return true
}
}
return false
}

// maybe call this hasRequestEventClientBoomError?

/**
* @public
*/
export const isClientRequestError = (
export const isBadRequestError = (
_request: Hapi.Request,
event: Hapi.RequestEvent,
tags: Tags
_tags: Tags
) => {
if (event.error && tags.error && tags.handler) {
if (event.error) {
const boom = event.error as Boom.Boom
if (boom.isBoom && !boom.isServer) {
if (boom.isBoom && boom.output.statusCode === 400) {
return true
}
}
Expand All @@ -41,14 +41,14 @@ export const isClientRequestError = (
/**
* @public
*/
export const isTeapotRequestError = (
export const isUnauthorizedRequestError = (
_request: Hapi.Request,
event: Hapi.RequestEvent,
_tags: Tags
) => {
if (event.error) {
const boom = event.error as Boom.Boom
if (boom.isBoom && boom.output.statusCode === 418) {
if (boom.isBoom && boom.output.statusCode === 401) {
return true
}
}
Expand All @@ -58,14 +58,14 @@ export const isTeapotRequestError = (
/**
* @public
*/
export const isUnauthorizedRequestError = (
export const isForbiddenRequestError = (
_request: Hapi.Request,
event: Hapi.RequestEvent,
_tags: Tags
) => {
if (event.error) {
const boom = event.error as Boom.Boom
if (boom.isBoom && boom.output.statusCode === 401) {
if (boom.isBoom && boom.output.statusCode === 403) {
return true
}
}
Expand All @@ -75,14 +75,31 @@ export const isUnauthorizedRequestError = (
/**
* @public
*/
export const isForbiddenRequestError = (
export const isNotFoundRequestError = (
_request: Hapi.Request,
event: Hapi.RequestEvent,
tags: Tags
) => {
if (event.error && tags.error && tags.handler) {
const boom = event.error as Boom.Boom
if (boom.isBoom && boom.output.statusCode === 404) {
return true
}
}
return false
}

/**
* @public
*/
export const isTeapotRequestError = (
_request: Hapi.Request,
event: Hapi.RequestEvent,
_tags: Tags
) => {
if (event.error) {
const boom = event.error as Boom.Boom
if (boom.isBoom && boom.output.statusCode === 403) {
if (boom.isBoom && boom.output.statusCode === 418) {
return true
}
}
Expand Down
1 change: 1 addition & 0 deletions packages/hapi-request-event-predicates/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

export {
hasRequestHeaderStripeSignature,
isBadRequestError,
isClientRequestError,
isForbiddenRequestError,
isNotFoundRequestError,
Expand Down

0 comments on commit 102f145

Please sign in to comment.