fix: tighten inbound replay typing

This commit is contained in:
Peter Steinberger
2026-04-13 08:23:26 -07:00
parent 63965dc70b
commit c09031f15a
3 changed files with 25 additions and 25 deletions

View File

@@ -99,13 +99,14 @@ describe("createNextcloudTalkWebhookServer replay handling", () => {
stateDir: params.stateDir,
});
return async (message: NextcloudTalkInboundMessage) =>
return async (message: NextcloudTalkInboundMessage): Promise<void> => {
await processNextcloudTalkReplayGuardedMessage({
replayGuard,
accountId: params.accountId ?? "acct",
message,
handleMessage: () => params.handleMessage(message),
});
};
}
it("acknowledges replayed requests and skips onMessage side effects", async () => {

View File

@@ -46,6 +46,10 @@ function shouldClearSocketRefAfterSendFailure(err: unknown): boolean {
return /closed|reset|disconnect|no active socket/i.test(formatError(err));
}
function isNonEmptyString(value: string | undefined): value is string {
return Boolean(value);
}
export type MonitorWebInboxOptions = {
verbose: boolean;
accountId: string;
@@ -132,11 +136,7 @@ export async function attachWebInboxToSocket(
error?: unknown,
): Promise<void> => {
const dedupeKeys = [
...new Set(
entries
.map((entry) => entry.dedupeKey)
.filter((dedupeKey): dedupeKey is string => Boolean(dedupeKey)),
),
...new Set(entries.map((entry) => entry.dedupeKey).filter(isNonEmptyString)),
];
if (dedupeKeys.length === 0) {
return;

View File

@@ -1,5 +1,6 @@
import { formatCliCommand } from "../cli/command-format.js";
import type {
AuthChoice,
GatewayAuthChoice,
OnboardMode,
OnboardOptions,
@@ -484,25 +485,23 @@ export async function runSetupWizard(
let nextConfig: OpenClawConfig = applyLocalSetupWorkspaceConfig(baseConfig, workspaceDir);
const authChoiceFromPrompt = opts.authChoice === undefined;
const promptedAuthChoice = authChoiceFromPrompt
? await (async () => {
const { ensureAuthProfileStore } = await import("../agents/auth-profiles.runtime.js");
const { promptAuthChoiceGrouped } = await import("../commands/auth-choice-prompt.js");
const authStore = ensureAuthProfileStore(undefined, {
allowKeychainPrompt: false,
});
return await promptAuthChoiceGrouped({
prompter,
store: authStore,
includeSkip: true,
config: nextConfig,
workspaceDir,
});
})()
: undefined;
const authChoice = opts.authChoice ?? promptedAuthChoice;
if (!authChoice) {
throw new Error("Failed to resolve auth choice.");
let authChoice: AuthChoice | undefined = opts.authChoice;
if (authChoiceFromPrompt) {
const { ensureAuthProfileStore } = await import("../agents/auth-profiles.runtime.js");
const { promptAuthChoiceGrouped } = await import("../commands/auth-choice-prompt.js");
const authStore = ensureAuthProfileStore(undefined, {
allowKeychainPrompt: false,
});
authChoice = await promptAuthChoiceGrouped({
prompter,
store: authStore,
includeSkip: true,
config: nextConfig,
workspaceDir,
});
}
if (authChoice === undefined) {
throw new WizardCancelledError("auth choice is required");
}
if (authChoice === "custom-api-key") {