@authhero/适应器界面
这个包提供了一套用于为AuthHero创建适配器的接口. 适配器被用来将AuthHero连接到各种服务,如数据库,电子邮件服务等等.
数据库适配器
数据库适配器遵循这些规则:
- 创建的 at和被修改的 at字段由适配器在创建或更新记录时处理.
- 租户 id 字段不属于发送到适配器的实体.
- 实体代号被传递给适配器.
- 适配器可以通过AuthParams等对象. 这些物体一般会被平整为适配器的一部分.
- 适配器所使用的类型应当从zod schemas中推断出,以确保运行时的类型安全.
- Id列和实体一般应该从实体名称开始,例如用户实体的用户 id. 我们从Auth0开始遵循命名方式,所以它可能并不总是一致的.
- 适配器通常应披露下列方法.
create(tenant_id: string, entity: Entity): Promise<Entity>update(tenant_id: string, entity: Entity): Promise<boolean>remove(tenant_id: string, entity: Entity): Promise<boolean>get(tenant_id: string, [entity_id]: string): Promise<Entity | null>list(tenant_id: string, query: Query): Promise<Entity[]>
公用事业
通过适配器
这个 createPassthroughAdapter 工具允许您将操作同步到多个适配器执行中。 这对于:
- 多目的地伐木: 将日志写入数据库和分析服务
- 缓存变暖: 同步写入多个缓存层
- 数据库迁移: 逐步将数据从一个数据库迁移到另一个数据库
基本用途
import {
createPassthroughAdapter,
LogsDataAdapter,
} from "@authhero/adapter-interfaces";
// Primary adapter - all reads come from here, writes go here first
const primaryAdapter = createDatabaseLogsAdapter();
// Secondary adapter for analytics
const analyticsAdapter = createAnalyticsLogsAdapter();
// Create passthrough adapter
const logsAdapter = createPassthroughAdapter<LogsDataAdapter>({
primary: primaryAdapter,
secondaries: [
{
adapter: { create: analyticsAdapter.create },
onError: (err) => console.error("Analytics sync failed:", err),
},
],
});
// Usage
await logsAdapter.create("tenant-1", log); // Writes to both
const result = await logsAdapter.list("tenant-1"); // Reads from primary only
配置选项
interface PassthroughConfig<T> {
// Primary adapter - all reads come from here, writes go here first
primary: T;
// Secondary adapters to sync writes to
secondaries: {
// Partial adapter implementation - only implemented methods will be called
adapter: Partial<T>;
// If true, wait for the secondary write to complete (default: false)
blocking?: boolean;
// Called when a secondary write fails
onError?: (error: Error, method: string, args: unknown[]) => void;
}[];
// Methods to sync to secondaries (default: ["create", "update", "remove", "delete", "set"])
syncMethods?: string[];
}
仅写适应器帮助工具
使用 createWriteOnlyAdapter 明确说明辅助工具的方法:
import {
createWriteOnlyAdapter,
createPassthroughAdapter,
} from "@authhero/adapter-interfaces";
const logsAdapter = createPassthroughAdapter({
primary: databaseAdapter,
secondaries: [
{
adapter: createWriteOnlyAdapter({
create: async (tenantId, log) => {
// Custom write logic (e.g., webhook, analytics)
},
}),
},
],
});
使用大小写
多目的地日志 :
const logsAdapter = createPassthroughAdapter({
primary: databaseLogsAdapter,
secondaries: [
{ adapter: { create: analyticsEngineAdapter.create } },
{ adapter: { create: r2SqlAdapter.create } },
],
});
以倒计时同步缓存 :
const cacheAdapter = createPassthroughAdapter({
primary: redisCacheAdapter,
secondaries: [{ adapter: memcachedAdapter, blocking: true }],
syncMethods: ["set", "delete"],
});