48 lines
1.7 KiB
TypeScript
48 lines
1.7 KiB
TypeScript
import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
|
|
import { getMatrixRuntime } from "../../runtime.js";
|
|
import type { CoreConfig } from "../../types.js";
|
|
import { getActiveMatrixClient } from "../active-client.js";
|
|
import { createPreparedMatrixClient } from "../client-bootstrap.js";
|
|
import { isBunRuntime, resolveMatrixAuth, resolveSharedMatrixClient } from "../client.js";
|
|
import type { MatrixActionClient, MatrixActionClientOpts } from "./types.js";
|
|
|
|
export function ensureNodeRuntime() {
|
|
if (isBunRuntime()) {
|
|
throw new Error("Matrix support requires Node (bun runtime not supported)");
|
|
}
|
|
}
|
|
|
|
export async function resolveActionClient(
|
|
opts: MatrixActionClientOpts = {},
|
|
): Promise<MatrixActionClient> {
|
|
ensureNodeRuntime();
|
|
if (opts.client) {
|
|
return { client: opts.client, stopOnDone: false };
|
|
}
|
|
// Normalize accountId early to ensure consistent keying across all lookups
|
|
const accountId = normalizeAccountId(opts.accountId);
|
|
const active = getActiveMatrixClient(accountId);
|
|
if (active) {
|
|
return { client: active, stopOnDone: false };
|
|
}
|
|
const shouldShareClient = Boolean(process.env.OPENCLAW_GATEWAY_PORT);
|
|
if (shouldShareClient) {
|
|
const client = await resolveSharedMatrixClient({
|
|
cfg: getMatrixRuntime().config.loadConfig() as CoreConfig,
|
|
timeoutMs: opts.timeoutMs,
|
|
accountId,
|
|
});
|
|
return { client, stopOnDone: false };
|
|
}
|
|
const auth = await resolveMatrixAuth({
|
|
cfg: getMatrixRuntime().config.loadConfig() as CoreConfig,
|
|
accountId,
|
|
});
|
|
const client = await createPreparedMatrixClient({
|
|
auth,
|
|
timeoutMs: opts.timeoutMs,
|
|
accountId,
|
|
});
|
|
return { client, stopOnDone: true };
|
|
}
|