aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-types/bun.d.ts
diff options
context:
space:
mode:
authorGravatar dave caruso <me@paperdave.net> 2023-09-29 03:39:26 -0700
committerGravatar GitHub <noreply@github.com> 2023-09-29 03:39:26 -0700
commit6afa78120ac0512bc55d00a8a1562d8f0eafa2c2 (patch)
tree6a413589452d966f42c1e97e39fd11a82308e565 /packages/bun-types/bun.d.ts
parent6514dcf4cbc63cff89f3cac59598872caf776f0b (diff)
downloadbun-6afa78120ac0512bc55d00a8a1562d8f0eafa2c2.tar.gz
bun-6afa78120ac0512bc55d00a8a1562d8f0eafa2c2.tar.zst
bun-6afa78120ac0512bc55d00a8a1562d8f0eafa2c2.zip
feat(runtime): implement `server.requestIp` + node:http `socket.address()` (#6165)
* [server] requestIp and AnyRequestContext Changed Request.uws_request to the new AnyRequestContext. This allows grabbing the IP from a Request. Unfinished. * [server] basic `requestIp` implementation Currently using uws's requestIpAsText, which always returns a ipv6 string. We should return a `SocketAddress` object to the user instead, which will contain the formatted address string and what type it is. We'll have to use requestIpAsBinary and parse that ourselves. * TypeScript docs, use `bun.String`, return `undefined` instead of `null` if we can't get the ip. * binary address formatting * uws getRemoteAddress binding * remove dead code * working * final touches:sparkles: * I will abide by the results of this poll. --------- Co-authored-by: Parzival-3141 <29632054+Parzival-3141@users.noreply.github.com>
Diffstat (limited to 'packages/bun-types/bun.d.ts')
-rw-r--r--packages/bun-types/bun.d.ts33
1 files changed, 33 insertions, 0 deletions
diff --git a/packages/bun-types/bun.d.ts b/packages/bun-types/bun.d.ts
index bd8b75023..a2ccebd8a 100644
--- a/packages/bun-types/bun.d.ts
+++ b/packages/bun-types/bun.d.ts
@@ -2196,6 +2196,21 @@ declare module "bun" {
tls?: TLSOptions;
}
+ export interface SocketAddress {
+ /**
+ * The IP address of the client.
+ */
+ address: string;
+ /**
+ * The port of the client.
+ */
+ port: number;
+ /**
+ * The IP family ("IPv4" or "IPv6").
+ */
+ family: "IPv4" | "IPv6";
+ }
+
/**
* HTTP & HTTPS Server
*
@@ -2344,6 +2359,24 @@ declare module "bun" {
): ServerWebSocketSendStatus;
/**
+ * Returns the client IP address of the given Request.
+ *
+ * @param request The incoming request
+ *
+ * @returns An ipv4/ipv6 address string, or null if it couldn't find one.
+ *
+ * @example
+ * ```js
+ * export default {
+ * async fetch(request, server) {
+ * return new Response(server.requestIP(request));
+ * }
+ * }
+ * ```
+ */
+ requestIP(request: Request): SocketAddress | null;
+
+ /**
* How many requests are in-flight right now?
*/
readonly pendingRequests: number;