mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 07:40:44 +00:00
fix: tighten inbound replay typing
This commit is contained in:
@@ -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 () => {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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") {
|
||||
|
||||
Reference in New Issue
Block a user