mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-29 02:41:07 +00:00
refactor: share directory config listers
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
createInspectedDirectoryEntriesLister,
|
||||
createResolvedDirectoryEntriesLister,
|
||||
listDirectoryEntriesFromSources,
|
||||
listInspectedDirectoryEntriesFromSources,
|
||||
listDirectoryGroupEntriesFromMapKeysAndAllowFrom,
|
||||
@@ -128,6 +130,21 @@ describe("listInspectedDirectoryEntriesFromSources", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("createInspectedDirectoryEntriesLister", () => {
|
||||
it("builds a reusable inspected-account lister", async () => {
|
||||
const listGroups = createInspectedDirectoryEntriesLister({
|
||||
kind: "group",
|
||||
inspectAccount: () => ({ ids: [["room:a"], ["room:b", "room:a"]] }),
|
||||
resolveSources: (account) => account.ids,
|
||||
normalizeId: (entry) => entry.replace(/^room:/i, ""),
|
||||
});
|
||||
|
||||
await expect(listGroups({ cfg: {} as never, query: "a" })).resolves.toEqual([
|
||||
{ kind: "group", id: "a" },
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("resolved account directory helpers", () => {
|
||||
const cfg = {} as never;
|
||||
const resolveAccount = () => ({
|
||||
@@ -174,4 +191,18 @@ describe("resolved account directory helpers", () => {
|
||||
|
||||
expectUserDirectoryEntries(entries);
|
||||
});
|
||||
|
||||
it("builds a reusable resolved-account lister", async () => {
|
||||
const listUsers = createResolvedDirectoryEntriesLister({
|
||||
kind: "user",
|
||||
resolveAccount,
|
||||
resolveSources: (account) => [account.allowFrom, ["user:carla", "user:alice"]],
|
||||
normalizeId: (entry) => entry.replace(/^user:/i, ""),
|
||||
});
|
||||
|
||||
await expect(listUsers({ cfg, query: "a", limit: 2 })).resolves.toEqual([
|
||||
{ kind: "user", id: "alice" },
|
||||
{ kind: "user", id: "carla" },
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -121,6 +121,22 @@ export function listInspectedDirectoryEntriesFromSources<InspectedAccount>(
|
||||
});
|
||||
}
|
||||
|
||||
export function createInspectedDirectoryEntriesLister<InspectedAccount>(params: {
|
||||
kind: "user" | "group";
|
||||
inspectAccount: (
|
||||
cfg: OpenClawConfig,
|
||||
accountId?: string | null,
|
||||
) => InspectedAccount | null | undefined;
|
||||
resolveSources: (account: InspectedAccount) => Iterable<unknown>[];
|
||||
normalizeId: (entry: string) => string | null | undefined;
|
||||
}) {
|
||||
return async (configParams: DirectoryConfigParams): Promise<ChannelDirectoryEntry[]> =>
|
||||
listInspectedDirectoryEntriesFromSources({
|
||||
...configParams,
|
||||
...params,
|
||||
});
|
||||
}
|
||||
|
||||
export function listResolvedDirectoryEntriesFromSources<ResolvedAccount>(
|
||||
params: DirectoryConfigParams & {
|
||||
kind: "user" | "group";
|
||||
@@ -139,6 +155,19 @@ export function listResolvedDirectoryEntriesFromSources<ResolvedAccount>(
|
||||
});
|
||||
}
|
||||
|
||||
export function createResolvedDirectoryEntriesLister<ResolvedAccount>(params: {
|
||||
kind: "user" | "group";
|
||||
resolveAccount: (cfg: OpenClawConfig, accountId?: string | null) => ResolvedAccount;
|
||||
resolveSources: (account: ResolvedAccount) => Iterable<unknown>[];
|
||||
normalizeId: (entry: string) => string | null | undefined;
|
||||
}) {
|
||||
return async (configParams: DirectoryConfigParams): Promise<ChannelDirectoryEntry[]> =>
|
||||
listResolvedDirectoryEntriesFromSources({
|
||||
...configParams,
|
||||
...params,
|
||||
});
|
||||
}
|
||||
|
||||
export function listDirectoryUserEntriesFromAllowFrom(params: {
|
||||
allowFrom?: readonly unknown[];
|
||||
query?: string | null;
|
||||
|
||||
@@ -14,6 +14,8 @@ export {
|
||||
export {
|
||||
applyDirectoryQueryAndLimit,
|
||||
collectNormalizedDirectoryIds,
|
||||
createInspectedDirectoryEntriesLister,
|
||||
createResolvedDirectoryEntriesLister,
|
||||
listDirectoryEntriesFromSources,
|
||||
listDirectoryGroupEntriesFromMapKeys,
|
||||
listDirectoryGroupEntriesFromMapKeysAndAllowFrom,
|
||||
|
||||
Reference in New Issue
Block a user