Dev Build / cleanup (push) Canceled after 0s
Dev Build / typecheck (push) Canceled after 0s
Dev Build / build (linux-arm64, ubuntu-24.04-arm, linux-arm64) (push) Canceled after 0s
Dev Build / build (linux-x64, ubuntu-latest, linux-x64) (push) Canceled after 0s
Dev Build / build (win-x64, windows-latest, win32-x64) (push) Canceled after 0s
Dev Build / dispatch-dev-docker (push) Canceled after 0s
44 lines
1.3 KiB
Plaintext
44 lines
1.3 KiB
Plaintext
//#region src/adapter/aws-lambda/conninfo.ts
|
|
/**
|
|
* Get connection information from AWS Lambda
|
|
*
|
|
* Extracts client IP from various Lambda event sources:
|
|
* - API Gateway v1 (REST API): requestContext.identity.sourceIp
|
|
* - API Gateway v2 (HTTP API/Function URLs): requestContext.http.sourceIp
|
|
* - ALB: Falls back to x-forwarded-for header
|
|
*
|
|
* @param c - Context
|
|
* @returns Connection information including remote address
|
|
* @example
|
|
* ```ts
|
|
* import { Hono } from 'hono'
|
|
* import { handle, getConnInfo } from 'hono/aws-lambda'
|
|
*
|
|
* const app = new Hono()
|
|
*
|
|
* app.get('/', (c) => {
|
|
* const info = getConnInfo(c)
|
|
* return c.text(`Your IP: ${info.remote.address}`)
|
|
* })
|
|
*
|
|
* export const handler = handle(app)
|
|
* ```
|
|
* @deprecated `hono/aws-lambda` will be removed in v5. Install `@hono/aws-lambda` and import from there instead.
|
|
*/
|
|
const getConnInfo = (c) => {
|
|
const requestContext = c.env.requestContext;
|
|
let address;
|
|
if ("identity" in requestContext && requestContext.identity?.sourceIp) address = requestContext.identity.sourceIp;
|
|
else if ("http" in requestContext && requestContext.http?.sourceIp) address = requestContext.http.sourceIp;
|
|
else {
|
|
const xff = c.req.header("x-forwarded-for");
|
|
if (xff) {
|
|
const ips = xff.split(",");
|
|
address = ips[ips.length - 1].trim();
|
|
}
|
|
}
|
|
return { remote: { address } };
|
|
};
|
|
//#endregion
|
|
export { getConnInfo };
|