diff --git a/.changeset/ninety-avocados-crash.md b/.changeset/ninety-avocados-crash.md new file mode 100644 index 0000000000..7ba3631c57 --- /dev/null +++ b/.changeset/ninety-avocados-crash.md @@ -0,0 +1,5 @@ +--- +"@effect/platform": patch +--- + +accept Redacted in HttpClientRequest.basicAuth/bearerToken diff --git a/packages/platform/src/HttpClientRequest.ts b/packages/platform/src/HttpClientRequest.ts index 39f6485d72..c3022a7d69 100644 --- a/packages/platform/src/HttpClientRequest.ts +++ b/packages/platform/src/HttpClientRequest.ts @@ -6,6 +6,7 @@ import type * as Schema from "@effect/schema/Schema" import type * as Effect from "effect/Effect" import type { Inspectable } from "effect/Inspectable" import type * as Option from "effect/Option" +import type { Redacted } from "effect/Redacted" import type { Scope } from "effect/Scope" import type * as Stream from "effect/Stream" import type * as PlatformError from "./Error.js" @@ -173,8 +174,8 @@ export const setHeaders: { * @category combinators */ export const basicAuth: { - (username: string, password: string): (self: HttpClientRequest) => HttpClientRequest - (self: HttpClientRequest, username: string, password: string): HttpClientRequest + (username: string | Redacted, password: string | Redacted): (self: HttpClientRequest) => HttpClientRequest + (self: HttpClientRequest, username: string | Redacted, password: string | Redacted): HttpClientRequest } = internal.basicAuth /** @@ -182,8 +183,8 @@ export const basicAuth: { * @category combinators */ export const bearerToken: { - (token: string): (self: HttpClientRequest) => HttpClientRequest - (self: HttpClientRequest, token: string): HttpClientRequest + (token: string | Redacted): (self: HttpClientRequest) => HttpClientRequest + (self: HttpClientRequest, token: string | Redacted): HttpClientRequest } = internal.bearerToken /** diff --git a/packages/platform/src/internal/httpClientRequest.ts b/packages/platform/src/internal/httpClientRequest.ts index 9ed4683f55..c1ee92eb00 100644 --- a/packages/platform/src/internal/httpClientRequest.ts +++ b/packages/platform/src/internal/httpClientRequest.ts @@ -6,6 +6,7 @@ import * as Effectable from "effect/Effectable" import { dual } from "effect/Function" import * as Inspectable from "effect/Inspectable" import * as Option from "effect/Option" +import * as Redacted from "effect/Redacted" import type * as Stream from "effect/Stream" import type * as PlatformError from "../Error.js" import type * as FileSystem from "../FileSystem.js" @@ -171,17 +172,31 @@ export const setHeaders = dual< self.body )) +const stringOrRedacted = (value: string | Redacted.Redacted): string => + typeof value === "string" ? value : Redacted.value(value) + /** @internal */ export const basicAuth = dual< - (username: string, password: string) => (self: ClientRequest.HttpClientRequest) => ClientRequest.HttpClientRequest, - (self: ClientRequest.HttpClientRequest, username: string, password: string) => ClientRequest.HttpClientRequest ->(3, (self, username, password) => setHeader(self, "Authorization", `Basic ${btoa(`${username}:${password}`)}`)) + ( + username: string | Redacted.Redacted, + password: string | Redacted.Redacted + ) => (self: ClientRequest.HttpClientRequest) => ClientRequest.HttpClientRequest, + ( + self: ClientRequest.HttpClientRequest, + username: string | Redacted.Redacted, + password: string | Redacted.Redacted + ) => ClientRequest.HttpClientRequest +>( + 3, + (self, username, password) => + setHeader(self, "Authorization", `Basic ${btoa(`${stringOrRedacted(username)}:${stringOrRedacted(password)}`)}`) +) /** @internal */ export const bearerToken = dual< - (token: string) => (self: ClientRequest.HttpClientRequest) => ClientRequest.HttpClientRequest, - (self: ClientRequest.HttpClientRequest, token: string) => ClientRequest.HttpClientRequest ->(2, (self, token) => setHeader(self, "Authorization", `Bearer ${token}`)) + (token: string | Redacted.Redacted) => (self: ClientRequest.HttpClientRequest) => ClientRequest.HttpClientRequest, + (self: ClientRequest.HttpClientRequest, token: string | Redacted.Redacted) => ClientRequest.HttpClientRequest +>(2, (self, token) => setHeader(self, "Authorization", `Bearer ${stringOrRedacted(token)}`)) /** @internal */ export const accept = dual<