已发布 上游基线 bf46254 原文 ↗ 在 GitHub 编辑

Redacted

使用 Redacted 模块安全地处理敏感数据,防止在日志中意外泄漏,同时支持安全地访问与比较值。

Redacted 模块提供了在应用中安全处理敏感信息的能力。通过使用 Redacted 数据类型,你可以确保敏感值不会意外暴露在日志或错误信息中。

make

Redacted.make 函数根据给定的值 A 创建一个 Redacted<A> 实例,确保内容被安全地隐藏起来。

示例(从日志中隐藏敏感信息)

使用 Redacted.make 有助于防止 API key 之类的敏感信息意外暴露在日志或错误信息中。

import { Redacted, Effect } from "effect"

// Create a redacted API key
const API_KEY = Redacted.make("1234567890")

console.log(API_KEY)
// Output: <redacted>

console.log(String(API_KEY))
String(API_KEY) // => "<redacted>"

Effect.runSync(Effect.log(API_KEY))
/*
Output:
[...] INFO (#...): <redacted>
*/

value

Redacted.value 函数会从 Redacted 实例中取出原始值。请谨慎使用该函数,因为它会暴露敏感数据,可能让这些数据出现在日志中,或以非预期的方式被访问到。

示例(访问底层的敏感值)

import { Redacted } from "effect"

const API_KEY = Redacted.make("1234567890")

// Expose the redacted value
console.log(Redacted.value(API_KEY))
Redacted.value(API_KEY) // => "1234567890"

unsafeWipe

Redacted.wipeUnsafe 函数会擦除 Redacted 实例的底层值,使其无法再被访问。这有助于确保敏感数据不会在内存中保留超过必要的时间。

示例(从内存中擦除敏感数据)

import { Redacted } from "effect"

const API_KEY = Redacted.make("1234567890")

console.log(Redacted.value(API_KEY))
// Output: "1234567890"

Redacted.wipeUnsafe(API_KEY)

console.log(Redacted.value(API_KEY))
/*
throws:
Error: Unable to get redacted value
*/

getEquivalence

Redacted.makeEquivalence 函数使用针对类型 A 底层值的 Equivalence,为 Redacted<A> 值生成一个 Equivalence。这让你能够安全地比较 Redacted 值,而不会泄漏其内容。

示例(比较 Redacted 值)

import { Redacted, Equivalence } from "effect"

const API_KEY1 = Redacted.make("1234567890")
const API_KEY2 = Redacted.make("1-34567890")
const API_KEY3 = Redacted.make("1234567890")

const equivalence = Redacted.makeEquivalence(Equivalence.String)

console.log(equivalence(API_KEY1, API_KEY2))
equivalence(API_KEY1, API_KEY2) // => false

console.log(equivalence(API_KEY1, API_KEY3))
equivalence(API_KEY1, API_KEY3) // => true