@effect/platform 0.50.1 → 0.50.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -203,6 +203,7 @@ export const makeUrl = (url: string, params: UrlParams): Either.Either<URL, Erro
203
203
  urlInstance.searchParams.append(key, value)
204
204
  }
205
205
  }
206
+
206
207
  return Either.right(urlInstance)
207
208
  } catch (e) {
208
209
  return Either.left(e as Error)
@@ -20,6 +20,7 @@ import * as Error from "../../Http/ClientError.js"
20
20
  import type * as ClientRequest from "../../Http/ClientRequest.js"
21
21
  import type * as ClientResponse from "../../Http/ClientResponse.js"
22
22
  import * as Cookies from "../../Http/Cookies.js"
23
+ import * as Headers from "../../Http/Headers.js"
23
24
  import * as Method from "../../Http/Method.js"
24
25
  import * as TraceContext from "../../Http/TraceContext.js"
25
26
  import * as UrlParams from "../../Http/UrlParams.js"
@@ -137,9 +138,11 @@ export const makeDefault = (
137
138
  if (query !== "") {
138
139
  span.attribute("url.query", query)
139
140
  }
140
- Object.entries(request.headers).forEach(([key, value]) => {
141
- span.attribute(`http.request.header.${key}`, value)
142
- })
141
+ const redactedHeaderNames = fiber.getFiberRef(Headers.currentRedactedNames)
142
+ const redactedHeaders = Headers.redact(request.headers, redactedHeaderNames)
143
+ for (const name in redactedHeaders) {
144
+ span.attribute(`http.request.header.${name}`, String(redactedHeaders[name]))
145
+ }
143
146
  return Effect.tap(
144
147
  Effect.withParentSpan(
145
148
  f(
@@ -152,9 +155,10 @@ export const makeDefault = (
152
155
  ),
153
156
  (response) => {
154
157
  span.attribute("http.response.status_code", response.status)
155
- Object.entries(response.headers).forEach(([key, value]) => {
156
- span.attribute(`http.response.header.${key}`, value)
157
- })
158
+ const redactedHeaders = Headers.redact(response.headers, redactedHeaderNames)
159
+ for (const name in redactedHeaders) {
160
+ span.attribute(`http.response.header.${name}`, String(redactedHeaders[name]))
161
+ }
158
162
  }
159
163
  )
160
164
  }
@@ -172,7 +176,7 @@ export const fetch: Client.Client.Default = makeDefault((request, url, signal, f
172
176
  const context = fiber.getFiberRef(FiberRef.currentContext)
173
177
  const fetch: typeof globalThis.fetch = context.unsafeMap.get(Fetch.key) ?? globalThis.fetch
174
178
  const options = fiber.getFiberRef(currentFetchOptions)
175
- const headers = new Headers(request.headers)
179
+ const headers = new globalThis.Headers(request.headers)
176
180
  const send = (body: BodyInit | undefined) =>
177
181
  Effect.map(
178
182
  Effect.tryPromise({
@@ -112,9 +112,15 @@ export const tracer = make((httpApp) =>
112
112
  let url: URL | undefined = undefined
113
113
  try {
114
114
  url = new URL(request.url, `${protocol}://${host}`)
115
+ if (url.username !== "" || url.password !== "") {
116
+ url.username = "REDACTED"
117
+ url.password = "REDACTED"
118
+ }
115
119
  } catch (_) {
116
120
  //
117
121
  }
122
+ const redactedHeaderNames = fiber.getFiberRef(Headers.currentRedactedNames)
123
+ const redactedHeaders = Headers.redact(request.headers, redactedHeaderNames)
118
124
  return Effect.useSpan(
119
125
  `http.server ${request.method}`,
120
126
  { parent: Option.getOrUndefined(TraceContext.fromHeaders(request.headers)) },
@@ -132,9 +138,9 @@ export const tracer = make((httpApp) =>
132
138
  if (request.headers["user-agent"] !== undefined) {
133
139
  span.attribute("user_agent.original", request.headers["user-agent"])
134
140
  }
135
- Object.entries(request.headers).forEach(([key, value]) => {
136
- span.attribute(`http.request.header.${key}`, value)
137
- })
141
+ for (const name in redactedHeaders) {
142
+ span.attribute(`http.request.header.${name}`, String(redactedHeaders[name]))
143
+ }
138
144
  if (request.remoteAddress._tag === "Some") {
139
145
  span.attribute("client.address", request.remoteAddress.value)
140
146
  }
@@ -146,9 +152,10 @@ export const tracer = make((httpApp) =>
146
152
  } else {
147
153
  const response = exit.value
148
154
  span.attribute("http.response.status_code", response.status)
149
- Object.entries(response.headers).forEach(([key, value]) => {
150
- span.attribute(`http.response.header.${key}`, value)
151
- })
155
+ const redactedHeaders = Headers.redact(response.headers, redactedHeaderNames)
156
+ for (const name in redactedHeaders) {
157
+ span.attribute(`http.response.header.${name}`, String(redactedHeaders[name]))
158
+ }
152
159
  }
153
160
  return exit
154
161
  }