Skip to content

Add keychain location prompt#2349

Open
Larkooo wants to merge 10 commits intomainfrom
Larkooo/location-prompt
Open

Add keychain location prompt#2349
Larkooo wants to merge 10 commits intomainfrom
Larkooo/location-prompt

Conversation

@Larkooo
Copy link
Contributor

@Larkooo Larkooo commented Jan 26, 2026

Adds a keychain route and controller API to request geolocation via iframe. Includes a location prompt UI and penpal callback plumbing for returning the result.

@vercel
Copy link

vercel bot commented Jan 26, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
controller-example-next Ready Ready Preview Jan 28, 2026 6:44pm
keychain Ready Ready Preview Jan 28, 2026 6:44pm
keychain-storybook Ready Ready Preview Jan 28, 2026 6:44pm

Request Review

@claude
Copy link
Contributor

claude bot commented Jan 26, 2026

Type mismatch in parseLocationPromptParams

The resolve callback is typed as (result: LocationPromptReply | ConnectError) => void, but the useRouteParams hook expects (result: unknown) => void. This causes a TypeScript compilation error:

Type '((result: ConnectError | LocationPromptReply) => void) | undefined' is not assignable to type '((result: unknown) => void) | undefined'.

This pattern is inconsistent with other parsers in the codebase. Compare with:

  • export function parseSignMessageParams(searchParams: URLSearchParams): {
    params: SignMessageParams;
    resolve?: (result: unknown) => void;
    reject?: (reason?: unknown) => void;
    onCancel?: () => void;
    } | null {
    try {
    const id = searchParams.get("id");
    const typedDataParam = searchParams.get("typedData");
    if (!id || !typedDataParam) {
    console.error("Missing required parameters");
    return null;
    }
    const typedData = JSON.parse(
    decodeURIComponent(typedDataParam),
    ) as TypedData;
    const callbacks = getCallbacks(id) as SignMessageCallback | undefined;
    const reject = callbacks?.reject
    ? (reason?: unknown) => {
    callbacks.reject?.(reason);
    }
    : undefined;
    const resolve = callbacks?.resolve
    ? (value: unknown) => {
    if (!isSignMessageResult(value)) {
    const error = new Error("Invalid sign message result type");
    console.error(error.message, value);
    reject?.(error);
    return;
    }
    callbacks.resolve?.(value);
    }
    : undefined;
    const onCancel = callbacks?.onCancel
    ? () => {
    callbacks.onCancel?.();
    }
    : undefined;
    return {
    params: { id, typedData },
    resolve,
    reject,
    onCancel,
    };
    } catch (error) {
    console.error("Failed to parse sign message params:", error);
    return null;
    }
    }
  • export function parseDeployParams(searchParams: URLSearchParams): {
    params: DeployParams;
    resolve?: (result: unknown) => void;
    reject?: (reason?: unknown) => void;
    onCancel?: () => void;
    } | null {
    try {
    const id = searchParams.get("id");
    const account = searchParams.get("account");
    if (!id || !account) {
    console.error("Missing required parameters");
    return null;
    }
    const callbacks = getCallbacks(id) as DeployCallback | undefined;
    const reject = callbacks?.reject
    ? (reason?: unknown) => {
    callbacks.reject?.(reason);
    }
    : undefined;
    const resolve = callbacks?.resolve
    ? (value: unknown) => {
    if (!isDeployResult(value)) {
    const error = new Error("Invalid deploy result type");
    console.error(error.message, value);
    reject?.(error);
    return;
    }
    callbacks.resolve?.(value);
    }
    : undefined;
    const onCancel = callbacks?.onCancel
    ? () => {
    callbacks.onCancel?.();
    }
    : undefined;
    return {
    params: { id, account },
    resolve,

Fix: Change the return type to use resolve?: (result: unknown) => void and add a type guard wrapper function, similar to the pattern in parseSignMessageParams.

This is currently causing CI TypeScript checks to fail.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant