# @tepez/hapi-lambda-handler

> Run Hapi server on AWS Lambda

Latest version **1.1.1** (published 2026-02-26) · UNLICENSED license · 0 weekly downloads

## Install

```sh
npm install @tepez/hapi-lambda-handler
pnpm add @tepez/hapi-lambda-handler
yarn add @tepez/hapi-lambda-handler
bun add @tepez/hapi-lambda-handler
```

## Health

**Score 55/100 (C)** — status: stable.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 1.1.1 |
| Published | 2026-02-26 |
| First published | 2017-12-13 |
| Weekly downloads | 0 |
| License | UNLICENSED |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 8 |
| Unpacked size | 41.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | tomyam1 |

## Links

- npm: https://www.npmjs.com/package/@tepez/hapi-lambda-handler
- Repository: https://github.com/tepez/hapi-lambda-handler
- Homepage: https://github.com/tepez/hapi-lambda-handler#readme
- Issues: https://github.com/tepez/hapi-lambda-handler/issues
- npm.io page: https://npm.io/package/@tepez/hapi-lambda-handler

## Dependencies (8)

- [debug](https://npm.io/package/debug.md) ^4.3.2
- [lodash](https://npm.io/package/lodash.md) ^4.17.21
- [@hapi/shot](https://npm.io/package/@hapi/shot.md) *
- [@types/node](https://npm.io/package/@types/node.md) *
- [@types/debug](https://npm.io/package/@types/debug.md) ^4.1.7
- [@tepez/ts-utils](https://npm.io/package/@tepez/ts-utils.md) ^0.1.1
- [@types/aws-lambda](https://npm.io/package/@types/aws-lambda.md) ^8.10.83
- [@types/hapi__hapi](https://npm.io/package/@types/hapi__hapi.md) ^20.0.9

## Recent versions

- 1.1.1 (latest) — 2026-02-26
- 1.1.0 — 2022-01-18
- 1.0.1 — 2022-01-17
- 1.0.0 — 2021-10-03
- 0.5.1 — 2021-01-10
- 0.5.0 — 2020-11-12
- 0.4.0 — 2020-11-01
- 0.3.4 — 2020-09-17
- 0.3.3 — 2020-01-13
- 0.3.2 — 2019-05-29
- 0.3.1 — 2019-01-16
- 0.3.0 — 2019-01-16
- 0.2.3 — 2018-05-23
- 0.2.2 — 2018-05-23
- 0.2.1 — 2017-12-13
- … 2 more at https://npm.io/package/@tepez/hapi-lambda-handler/versions

## README

# hapi-lambda-handler
> Run Hapi server on AWS Lambda

[![npm version](https://badge.fury.io/js/%40tepez%2Fhapi-lambda-handler.svg)](https://badge.fury.io/js/%40tepez%2Fhapi-lambda-handler)
[![Build Status](https://secure.travis-ci.org/tepez/hapi-lambda-handler.svg?branch=master)](http://travis-ci.org/tepez/hapi-lambda-handler)

## Install

```
npm install --save @tepez/hapi-lambda-handler
```

## Usage

```
// handler.js
const HapiLambdaHandler = require('@tepez/hapi-lambda-handler');
const Hapi = require('hapi');

cosnt server = new Hapi.Server();
server.connection({});
server.route({
    method: 'GET',
    path: '/health',
    handler: (request, reply) => reply({ status: 'ok' })
});

exports.handler = HapiLambdaHandler.handlerFromServer(server);
```

## API

### `handlerFromServer(server, [injectOptions])`
Return a Lambda Proxy handler function that handles event, context and callback as passed by a lambda-proxy integration of AWS Api Gateway.

- `server`:
  The Hapi server or a promise to it if it has to be initialized first.

  It is the **responsibility** of the using package to report initialization errors in the server.
  If the promise to the server rejects, 500 errors will be returned for every request.

- `injectOptions`:
    - `basePath: string`

      If the API is deployed under a [custom path mapping](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-basepathmapping.html)
      this should be the basePath, e.g. '/v1.0'.

    - `modifyRequest: (event: APIGatewayEvent, context: Context, request: ServerInjectOptions) => void`

      A synchronous callback receiving the `event`, the `context` and the `request` just before injecting it to the Hapi server.
      This is a chance to modify the request in-place, e.g. to apply credentials to it.

## Request tail

Sometimes we need to wait for some processes to finish before returning the response
to APIGateway, e.g. report an error to Sentry.

Hapi 17 [dropped support](https://github.com/hapijs/hapi/issues/3658) for request tails,
which was the method we used before.

You can create an array of promises on `request.app.tailPromises`, the handler will
wait for them with `Promise.all()` before returning the response.

```typescript
function handler(request: IRequestWithTailPromises) => {
    // ...
    if (!request.app.tailPromises) request.app.tailPromises = [];
    request.app.tailPromises.push(somePromise);
}
```

---
_Source: https://npm.io/package/@tepez/hapi-lambda-handler · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
