mirror of https://github.com/openclaw/openclaw.git
94 lines
2.7 KiB
TypeScript
94 lines
2.7 KiB
TypeScript
import { hasExplicitMatrixAccountConfig } from "./matrix/account-config.js";
|
|
import { resolveMatrixAccountConfig } from "./matrix/accounts.js";
|
|
import { bootstrapMatrixVerification } from "./matrix/actions/verification.js";
|
|
import type { RuntimeEnv } from "./runtime-api.js";
|
|
import type { CoreConfig } from "./types.js";
|
|
|
|
export type MatrixSetupVerificationBootstrapResult = {
|
|
attempted: boolean;
|
|
success: boolean;
|
|
recoveryKeyCreatedAt: string | null;
|
|
backupVersion: string | null;
|
|
error?: string;
|
|
};
|
|
|
|
export async function maybeBootstrapNewEncryptedMatrixAccount(params: {
|
|
previousCfg: CoreConfig;
|
|
cfg: CoreConfig;
|
|
accountId: string;
|
|
}): Promise<MatrixSetupVerificationBootstrapResult> {
|
|
const accountConfig = resolveMatrixAccountConfig({
|
|
cfg: params.cfg,
|
|
accountId: params.accountId,
|
|
});
|
|
|
|
if (
|
|
hasExplicitMatrixAccountConfig(params.previousCfg, params.accountId) ||
|
|
accountConfig.encryption !== true
|
|
) {
|
|
return {
|
|
attempted: false,
|
|
success: false,
|
|
recoveryKeyCreatedAt: null,
|
|
backupVersion: null,
|
|
};
|
|
}
|
|
|
|
try {
|
|
const bootstrap = await bootstrapMatrixVerification({ accountId: params.accountId });
|
|
return {
|
|
attempted: true,
|
|
success: bootstrap.success === true,
|
|
recoveryKeyCreatedAt: bootstrap.verification.recoveryKeyCreatedAt,
|
|
backupVersion: bootstrap.verification.backupVersion,
|
|
...(bootstrap.success
|
|
? {}
|
|
: { error: bootstrap.error ?? "Matrix verification bootstrap failed" }),
|
|
};
|
|
} catch (err) {
|
|
return {
|
|
attempted: true,
|
|
success: false,
|
|
recoveryKeyCreatedAt: null,
|
|
backupVersion: null,
|
|
error: err instanceof Error ? err.message : String(err),
|
|
};
|
|
}
|
|
}
|
|
|
|
export async function runMatrixSetupBootstrapAfterConfigWrite(params: {
|
|
previousCfg: CoreConfig;
|
|
cfg: CoreConfig;
|
|
accountId: string;
|
|
runtime: RuntimeEnv;
|
|
}): Promise<void> {
|
|
const nextAccountConfig = resolveMatrixAccountConfig({
|
|
cfg: params.cfg,
|
|
accountId: params.accountId,
|
|
});
|
|
if (nextAccountConfig.encryption !== true) {
|
|
return;
|
|
}
|
|
|
|
const bootstrap = await maybeBootstrapNewEncryptedMatrixAccount({
|
|
previousCfg: params.previousCfg,
|
|
cfg: params.cfg,
|
|
accountId: params.accountId,
|
|
});
|
|
if (!bootstrap.attempted) {
|
|
return;
|
|
}
|
|
if (bootstrap.success) {
|
|
params.runtime.log(`Matrix verification bootstrap: complete for "${params.accountId}".`);
|
|
if (bootstrap.backupVersion) {
|
|
params.runtime.log(
|
|
`Matrix backup version for "${params.accountId}": ${bootstrap.backupVersion}`,
|
|
);
|
|
}
|
|
return;
|
|
}
|
|
params.runtime.error(
|
|
`Matrix verification bootstrap warning for "${params.accountId}": ${bootstrap.error ?? "unknown bootstrap failure"}`,
|
|
);
|
|
}
|