Skip to content

Commit 7fadaf2

Browse files
fix: resolve url behind proxy and set timeout on grpc (#8)
* fix: resolve url behind proxy and set timeout on grpc * chore: update version
1 parent 93b210e commit 7fadaf2

File tree

4 files changed

+55
-8
lines changed

4 files changed

+55
-8
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@speakeasy-api/speakeasy-typescript-sdk",
3-
"version": "1.3.0",
3+
"version": "1.3.1",
44
"repository": {
55
"type": "git",
66
"url": "https://github.com/speakeasy-api/speakeasy-typescript-sdk"

src/harbuilder.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { RequestResponseWriter } from "./requestresponsewriter";
1515
import Timestamp from "timestamp-nano";
1616
import cookie from "cookie";
1717
import { maskBodyRegex } from "./bodymasking";
18+
import { resolveProxyHeaders } from "./proxy";
1819
import setCookie from "set-cookie-parser";
1920
import { speakeasyVersion } from "./speakeasy";
2021
import url from "url";
@@ -58,9 +59,11 @@ export class HarBuilder {
5859
port: number,
5960
masking: Masking
6061
): HarBuilder {
61-
const host = req.get("host") ?? "";
62+
const resolveURLInfo = resolveProxyHeaders(req);
6263

63-
const fullOriginalURL = `${req.protocol}://${host}${
64+
const host = resolveURLInfo.host;
65+
66+
const fullOriginalURL = `${resolveURLInfo.scheme}://${host}${
6467
!host.includes(":") && port != 80 && port != 443 ? `:${port}` : ""
6568
}${req.originalUrl}`;
6669

src/proxy.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { Request } from "express";
2+
3+
export interface ResolvedURLInfo {
4+
scheme: string;
5+
host: string;
6+
}
7+
8+
export function resolveProxyHeaders(req: Request): ResolvedURLInfo {
9+
const scheme = getScheme(req);
10+
11+
return {
12+
scheme: scheme != "" ? scheme : req.protocol,
13+
host: (req.headers["x-forwarded-host"] as string) ?? req.headers.host,
14+
};
15+
}
16+
17+
function getScheme(req: Request): string {
18+
let scheme: string = "";
19+
20+
if (req.headers["x-forwarded-proto"]) {
21+
scheme = (req.headers["x-forwarded-proto"] as string).toLowerCase();
22+
} else if (req.headers["x-forwarded-scheme"]) {
23+
scheme = (req.headers["x-forwarded-scheme"] as string).toLowerCase();
24+
} else if (req.headers["forwarded"]) {
25+
const forwarded = req.headers["forwarded"] as string;
26+
27+
const protoRegex = new RegExp(`(?i)(?:proto=)(https|http)`);
28+
29+
const matches = protoRegex.exec(forwarded);
30+
if (matches.length > 1) {
31+
scheme = matches[1].toLowerCase();
32+
}
33+
}
34+
35+
return scheme;
36+
}

src/transport.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import { IngestRequest } from "@speakeasy-api/speakeasy-schemas/registry/ingest/
1414
import { IngestServiceClient } from "@speakeasy-api/speakeasy-schemas/registry/ingest/ingest_grpc_pb";
1515
import { Message } from "google-protobuf";
1616

17+
const grpcDeadline = getRPCDeadline(1000); // 1 Second deadline
18+
1719
export class GRPCClient {
1820
private ingestClient: Promisified<IngestServiceClient>;
1921
private embedClient: Promisified<EmbedAccessTokenServiceClient>;
@@ -56,11 +58,13 @@ export class GRPCClient {
5658
request.setPathHint(pathHint);
5759
request.setCustomerId(customerID);
5860

59-
this.ingestClient.ingest(request, metadata).catch((err) => {
60-
if (err) {
61-
console.error(err); // TODO log error with a provided logger?
62-
}
63-
});
61+
this.ingestClient
62+
.ingest(request, metadata, { deadline: grpcDeadline })
63+
.catch((err) => {
64+
if (err) {
65+
console.error(err); // TODO log error with a provided logger?
66+
}
67+
});
6468
}
6569

6670
public async getEmbedAccessToken(
@@ -74,6 +78,10 @@ export class GRPCClient {
7478
}
7579
}
7680

81+
function getRPCDeadline(deadline: number): Date {
82+
return new Date(Date.now() + deadline);
83+
}
84+
7785
type OriginalCall<T, U> = (
7886
request: T,
7987
metadata: Metadata,

0 commit comments

Comments
 (0)