Skip to content

Feature request: official @perryts/google-auth package for Google Sign In #674

@proggeramlug

Description

@proggeramlug

Feature request: official @perryts/google-auth package for Google Sign In

Sister request to the Apple Sign In one. Most apps that ship SIWA also need Google OAuth — and unlike Apple's, Google's binding has to handle three SDK flavors (GoogleSignIn iOS SDK, Credential Manager on Android, GoogleAuthLibrary on the desktop), which makes a one-off local fork painful to maintain.

Surface we'd expect

// @perryts/google-auth — TS surface
export declare function js_google_auth_sign_in(): Promise<string>;
export declare function js_google_auth_silent_sign_in(): Promise<string>;
export declare function js_google_auth_sign_out(): Promise<string>;

export type GoogleSignInResult =
  | {
      success: true;
      idToken: string;            // JWS — verify aud/iss server-side
      accessToken?: string;       // for incremental scopes; may be absent on Android Credential Manager
      userId: string;             // sub claim
      email: string;
      emailVerified: boolean;
      name?: string;
      pictureUrl?: string;
      grantedScopes: string[];
    }
  | { success: false; cancelled?: boolean; error?: string };

Configuration that should flow from perry.toml:

[google_auth]
ios_client_id = "..."
android_client_id = "..."
server_client_id = "..."   # for backend verification
default_scopes = ["openid", "email", "profile"]

Notes:

  • iOS: GoogleSignIn SDK via SwiftPM (already pinning is fine).
  • macOS: same SDK as iOS works on macOS 13+.
  • Android: prefer androidx.credentials Credential Manager (the com.google.android.gms SDK is being deprecated end-of-2026).
  • Linux/Windows: stub for now — desktop OAuth flow can be added later via system browser + loopback.

Why this matters

Same reasoning as the Apple Sign In request — a Perry app that ships to consumers will almost always need Google OAuth, and the SDK churn (especially the Credential Manager migration) makes a centrally-maintained binding much more durable than per-app forks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions