95 lines
3.0 KiB
TypeScript
95 lines
3.0 KiB
TypeScript
import { resolveMatrixEnvAuthReadiness } from "./matrix/client.js";
|
|
import { updateMatrixAccountConfig } from "./matrix/config-update.js";
|
|
import {
|
|
applyAccountNameToChannelSection,
|
|
DEFAULT_ACCOUNT_ID,
|
|
moveSingleAccountChannelSectionToDefaultAccount,
|
|
normalizeAccountId,
|
|
normalizeSecretInputString,
|
|
type ChannelSetupInput,
|
|
} from "./runtime-api.js";
|
|
import type { CoreConfig } from "./types.js";
|
|
|
|
const channel = "matrix" as const;
|
|
|
|
export function validateMatrixSetupInput(params: {
|
|
accountId: string;
|
|
input: ChannelSetupInput;
|
|
}): string | null {
|
|
if (params.input.useEnv) {
|
|
const envReadiness = resolveMatrixEnvAuthReadiness(params.accountId, process.env);
|
|
return envReadiness.ready ? null : envReadiness.missingMessage;
|
|
}
|
|
if (!params.input.homeserver?.trim()) {
|
|
return "Matrix requires --homeserver";
|
|
}
|
|
const accessToken = params.input.accessToken?.trim();
|
|
const password = normalizeSecretInputString(params.input.password);
|
|
const userId = params.input.userId?.trim();
|
|
if (!accessToken && !password) {
|
|
return "Matrix requires --access-token or --password";
|
|
}
|
|
if (!accessToken) {
|
|
if (!userId) {
|
|
return "Matrix requires --user-id when using --password";
|
|
}
|
|
if (!password) {
|
|
return "Matrix requires --password when using --user-id";
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
export function applyMatrixSetupAccountConfig(params: {
|
|
cfg: CoreConfig;
|
|
accountId: string;
|
|
input: ChannelSetupInput;
|
|
avatarUrl?: string;
|
|
}): CoreConfig {
|
|
const normalizedAccountId = normalizeAccountId(params.accountId);
|
|
const migratedCfg =
|
|
normalizedAccountId !== DEFAULT_ACCOUNT_ID
|
|
? (moveSingleAccountChannelSectionToDefaultAccount({
|
|
cfg: params.cfg,
|
|
channelKey: channel,
|
|
}) as CoreConfig)
|
|
: params.cfg;
|
|
const next = applyAccountNameToChannelSection({
|
|
cfg: migratedCfg,
|
|
channelKey: channel,
|
|
accountId: normalizedAccountId,
|
|
name: params.input.name,
|
|
}) as CoreConfig;
|
|
|
|
if (params.input.useEnv) {
|
|
return updateMatrixAccountConfig(next, normalizedAccountId, {
|
|
enabled: true,
|
|
homeserver: null,
|
|
allowPrivateNetwork: null,
|
|
userId: null,
|
|
accessToken: null,
|
|
password: null,
|
|
deviceId: null,
|
|
deviceName: null,
|
|
});
|
|
}
|
|
|
|
const accessToken = params.input.accessToken?.trim();
|
|
const password = normalizeSecretInputString(params.input.password);
|
|
const userId = params.input.userId?.trim();
|
|
return updateMatrixAccountConfig(next, normalizedAccountId, {
|
|
enabled: true,
|
|
homeserver: params.input.homeserver?.trim(),
|
|
allowPrivateNetwork:
|
|
typeof params.input.allowPrivateNetwork === "boolean"
|
|
? params.input.allowPrivateNetwork
|
|
: undefined,
|
|
userId: password && !userId ? null : userId,
|
|
accessToken: accessToken || (password ? null : undefined),
|
|
password: password || (accessToken ? null : undefined),
|
|
deviceName: params.input.deviceName?.trim(),
|
|
avatarUrl: params.avatarUrl,
|
|
initialSyncLimit: params.input.initialSyncLimit,
|
|
});
|
|
}
|