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

Labels

enhancementNew feature or request

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions