blob: e1721668f41fe17d586259053fec0bd5ddb0da80 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/// Type definitions for non-npm package Google Sign-In API 0.0
/// Project: https://developers.google.com/identity/sign-in/web/
/// Definitions by: Derek Lawless <https://github.com/flawless2011>
/// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/// TypeScript Version: 2.3
/// <reference types="gapi" />
// https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/gapi.auth2
// ignore_for_file: public_member_api_docs, unused_element, non_constant_identifier_names, sort_constructors_first, always_specify_types
@JS()
library gapiauth2;
import 'package:js/js.dart';
import 'package:js/js_util.dart' show promiseToFuture;
@anonymous
@JS()
class GoogleAuthInitFailureError {
external String get error;
external set error(String? value);
external String get details;
external set details(String? value);
}
@anonymous
@JS()
class GoogleAuthSignInError {
external String get error;
external set error(String value);
}
@anonymous
@JS()
class OfflineAccessResponse {
external String? get code;
external set code(String? value);
}
// Module gapi.auth2
/// GoogleAuth is a singleton class that provides methods to allow the user to sign in with a Google account,
/// get the user's current sign-in status, get specific data from the user's Google profile,
/// request additional scopes, and sign out from the current account.
@JS('gapi.auth2.GoogleAuth')
class GoogleAuth {
external IsSignedIn get isSignedIn;
external set isSignedIn(IsSignedIn v);
external CurrentUser? get currentUser;
external set currentUser(CurrentUser? v);
/// Calls the onInit function when the GoogleAuth object is fully initialized, or calls the onFailure function if
/// initialization fails.
external dynamic then(dynamic Function(GoogleAuth googleAuth) onInit,
[dynamic Function(GoogleAuthInitFailureError reason) onFailure]);
/// Signs out all accounts from the application.
external dynamic signOut();
/// Revokes all of the scopes that the user granted.
external dynamic disconnect();
/// Attaches the sign-in flow to the specified container's click handler.
external dynamic attachClickHandler(
dynamic container,
SigninOptions options,
dynamic Function(GoogleUser googleUser) onsuccess,
dynamic Function(String reason) onfailure);
}
@anonymous
@JS()
abstract class _GoogleAuth {
external Promise<GoogleUser> signIn(
[dynamic /*SigninOptions|SigninOptionsBuilder*/ options]);
external Promise<OfflineAccessResponse> grantOfflineAccess(
[OfflineAccessOptions? options]);
}
extension GoogleAuthExtensions on GoogleAuth {
Future<GoogleUser> signIn(
[dynamic /*SigninOptions|SigninOptionsBuilder*/ options]) {
final _GoogleAuth tt = this as _GoogleAuth;
return promiseToFuture(tt.signIn(options));
}
Future<OfflineAccessResponse> grantOfflineAccess(
[OfflineAccessOptions? options]) {
final _GoogleAuth tt = this as _GoogleAuth;
return promiseToFuture(tt.grantOfflineAccess(options));
}
}
@anonymous
@JS()
abstract class IsSignedIn {
/// Returns whether the current user is currently signed in.
external bool get();
/// Listen for changes in the current user's sign-in state.
external void listen(dynamic Function(bool signedIn) listener);
}
@anonymous
@JS()
abstract class CurrentUser {
/// Returns a GoogleUser object that represents the current user. Note that in a newly-initialized
/// GoogleAuth instance, the current user has not been set. Use the currentUser.listen() method or the
/// GoogleAuth.then() to get an initialized GoogleAuth instance.
external GoogleUser get();
/// Listen for changes in currentUser.
external void listen(dynamic Function(GoogleUser user) listener);
}
@anonymous
@JS()
abstract class SigninOptions {
/// The package name of the Android app to install over the air.
/// See Android app installs from your web site:
/// https://developers.google.com/identity/sign-in/web/android-app-installs
external String? get app_package_name;
external set app_package_name(String? v);
/// Fetch users' basic profile information when they sign in.
/// Adds 'profile', 'email' and 'openid' to the requested scopes.
/// True if unspecified.
external bool? get fetch_basic_profile;
external set fetch_basic_profile(bool? v);
/// Specifies whether to prompt the user for re-authentication.
/// See OpenID Connect Request Parameters:
/// https://openid.net/specs/openid-connect-basic-1_0.html#RequestParameters
external String? get prompt;
external set prompt(String? v);
/// The scopes to request, as a space-delimited string.
/// Optional if fetch_basic_profile is not set to false.
external String? get scope;
external set scope(String? v);
/// The UX mode to use for the sign-in flow.
/// By default, it will open the consent flow in a popup.
external String? /*'popup'|'redirect'*/ get ux_mode;
external set ux_mode(String? /*'popup'|'redirect'*/ v);
/// If using ux_mode='redirect', this parameter allows you to override the default redirect_uri that will be used at the end of the consent flow.
/// The default redirect_uri is the current URL stripped of query parameters and hash fragment.
external String? get redirect_uri;
external set redirect_uri(String? v);
// When your app knows which user it is trying to authenticate, it can provide this parameter as a hint to the authentication server.
// Passing this hint suppresses the account chooser and either pre-fill the email box on the sign-in form, or select the proper session (if the user is using multiple sign-in),
// which can help you avoid problems that occur if your app logs in the wrong user account. The value can be either an email address or the sub string,
// which is equivalent to the user's Google ID.
// https://developers.google.com/identity/protocols/OpenIDConnect?hl=en#authenticationuriparameters
external String? get login_hint;
external set login_hint(String? v);
external factory SigninOptions(
{String app_package_name,
bool fetch_basic_profile,
String prompt,
String scope,
String /*'popup'|'redirect'*/ ux_mode,
String redirect_uri,
String login_hint});
}
/// Definitions by: John <https://github.com/jhcao23>
/// Interface that represents the different configuration parameters for the GoogleAuth.grantOfflineAccess(options) method.
/// Reference: https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiauth2offlineaccessoptions
@anonymous
@JS()
abstract class OfflineAccessOptions {
external String? get scope;
external set scope(String? v);
external String? /*'select_account'|'consent'*/ get prompt;
external set prompt(String? /*'select_account'|'consent'*/ v);
external String? get app_package_name;
external set app_package_name(String? v);
external factory OfflineAccessOptions(
{String scope,
String /*'select_account'|'consent'*/ prompt,
String app_package_name});
}
/// Interface that represents the different configuration parameters for the gapi.auth2.init method.
/// Reference: https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiauth2clientconfig
@anonymous
@JS()
abstract class ClientConfig {
/// The app's client ID, found and created in the Google Developers Console.
external String? get client_id;
external set client_id(String? v);
/// The domains for which to create sign-in cookies. Either a URI, single_host_origin, or none.
/// Defaults to single_host_origin if unspecified.
external String? get cookie_policy;
external set cookie_policy(String? v);
/// The scopes to request, as a space-delimited string. Optional if fetch_basic_profile is not set to false.
external String? get scope;
external set scope(String? v);
/// Fetch users' basic profile information when they sign in. Adds 'profile' and 'email' to the requested scopes. True if unspecified.
external bool? get fetch_basic_profile;
external set fetch_basic_profile(bool? v);
/// The Google Apps domain to which users must belong to sign in. This is susceptible to modification by clients,
/// so be sure to verify the hosted domain property of the returned user. Use GoogleUser.getHostedDomain() on the client,
/// and the hd claim in the ID Token on the server to verify the domain is what you expected.
external String? get hosted_domain;
external set hosted_domain(String? v);
/// Used only for OpenID 2.0 client migration. Set to the value of the realm that you are currently using for OpenID 2.0,
/// as described in <a href="https://developers.google.com/accounts/docs/OpenID#openid-connect">OpenID 2.0 (Migration)</a>.
external String? get openid_realm;
external set openid_realm(String? v);
/// The UX mode to use for the sign-in flow.
/// By default, it will open the consent flow in a popup.
external String? /*'popup'|'redirect'*/ get ux_mode;
external set ux_mode(String? /*'popup'|'redirect'*/ v);
/// If using ux_mode='redirect', this parameter allows you to override the default redirect_uri that will be used at the end of the consent flow.
/// The default redirect_uri is the current URL stripped of query parameters and hash fragment.
external String? get redirect_uri;
external set redirect_uri(String? v);
/// Allows newly created Client IDs to use the Google Platform Library from now until the March 30th, 2023 deprecation date.
/// See: https://github.com/flutter/flutter/issues/88084
external String? get plugin_name;
external set plugin_name(String? v);
external factory ClientConfig({
String client_id,
String cookie_policy,
String scope,
bool fetch_basic_profile,
String? hosted_domain,
String openid_realm,
String /*'popup'|'redirect'*/ ux_mode,
String redirect_uri,
String plugin_name,
});
}
@JS('gapi.auth2.SigninOptionsBuilder')
class SigninOptionsBuilder {
external dynamic setAppPackageName(String name);
external dynamic setFetchBasicProfile(bool fetch);
external dynamic setPrompt(String prompt);
external dynamic setScope(String scope);
external dynamic setLoginHint(String hint);
}
@anonymous
@JS()
abstract class BasicProfile {
external String? getId();
external String? getName();
external String? getGivenName();
external String? getFamilyName();
external String? getImageUrl();
external String? getEmail();
}
/// Reference: https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiauth2authresponse
@anonymous
@JS()
abstract class AuthResponse {
external String? get access_token;
external set access_token(String? v);
external String? get id_token;
external set id_token(String? v);
external String? get login_hint;
external set login_hint(String? v);
external String? get scope;
external set scope(String? v);
external num? get expires_in;
external set expires_in(num? v);
external num? get first_issued_at;
external set first_issued_at(num? v);
external num? get expires_at;
external set expires_at(num? v);
external factory AuthResponse(
{String? access_token,
String? id_token,
String? login_hint,
String? scope,
num? expires_in,
num? first_issued_at,
num? expires_at});
}
/// Reference: https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiauth2authorizeconfig
@anonymous
@JS()
abstract class AuthorizeConfig {
external String get client_id;
external set client_id(String v);
external String get scope;
external set scope(String v);
external String? get response_type;
external set response_type(String? v);
external String? get prompt;
external set prompt(String? v);
external String? get cookie_policy;
external set cookie_policy(String? v);
external String? get hosted_domain;
external set hosted_domain(String? v);
external String? get login_hint;
external set login_hint(String? v);
external String? get app_package_name;
external set app_package_name(String? v);
external String? get openid_realm;
external set openid_realm(String? v);
external bool? get include_granted_scopes;
external set include_granted_scopes(bool? v);
external factory AuthorizeConfig(
{String client_id,
String scope,
String response_type,
String prompt,
String cookie_policy,
String hosted_domain,
String login_hint,
String app_package_name,
String openid_realm,
bool include_granted_scopes});
}
/// Reference: https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiauth2authorizeresponse
@anonymous
@JS()
abstract class AuthorizeResponse {
external String get access_token;
external set access_token(String v);
external String get id_token;
external set id_token(String v);
external String get code;
external set code(String v);
external String get scope;
external set scope(String v);
external num get expires_in;
external set expires_in(num v);
external num get first_issued_at;
external set first_issued_at(num v);
external num get expires_at;
external set expires_at(num v);
external String get error;
external set error(String v);
external String get error_subtype;
external set error_subtype(String v);
external factory AuthorizeResponse(
{String access_token,
String id_token,
String code,
String scope,
num expires_in,
num first_issued_at,
num expires_at,
String error,
String error_subtype});
}
/// A GoogleUser object represents one user account.
@anonymous
@JS()
abstract class GoogleUser {
/// Get the user's unique ID string.
external String? getId();
/// Returns true if the user is signed in.
external bool isSignedIn();
/// Get the user's Google Apps domain if the user signed in with a Google Apps account.
external String? getHostedDomain();
/// Get the scopes that the user granted as a space-delimited string.
external String? getGrantedScopes();
/// Get the user's basic profile information.
external BasicProfile? getBasicProfile();
/// Get the response object from the user's auth session.
// This returns an empty JS object when the user hasn't attempted to sign in.
external AuthResponse getAuthResponse([bool includeAuthorizationData]);
/// Returns true if the user granted the specified scopes.
external bool hasGrantedScopes(String scopes);
// Has the API for grant and grantOfflineAccess changed?
/// Request additional scopes to the user.
///
/// See GoogleAuth.signIn() for the list of parameters and the error code.
external dynamic grant(
[dynamic /*SigninOptions|SigninOptionsBuilder*/ options]);
/// Get permission from the user to access the specified scopes offline.
/// When you use GoogleUser.grantOfflineAccess(), the sign-in flow skips the account chooser step.
/// See GoogleUser.grantOfflineAccess().
external void grantOfflineAccess(String scopes);
/// Revokes all of the scopes that the user granted.
external void disconnect();
}
@anonymous
@JS()
abstract class _GoogleUser {
/// Forces a refresh of the access token, and then returns a Promise for the new AuthResponse.
external Promise<AuthResponse> reloadAuthResponse();
}
extension GoogleUserExtensions on GoogleUser {
Future<AuthResponse> reloadAuthResponse() {
final _GoogleUser tt = this as _GoogleUser;
return promiseToFuture(tt.reloadAuthResponse());
}
}
/// Initializes the GoogleAuth object.
/// Reference: https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiauth2initparams
@JS('gapi.auth2.init')
external GoogleAuth init(ClientConfig params);
/// Returns the GoogleAuth object. You must initialize the GoogleAuth object with gapi.auth2.init() before calling this method.
@JS('gapi.auth2.getAuthInstance')
external GoogleAuth? getAuthInstance();
/// Performs a one time OAuth 2.0 authorization.
/// Reference: https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiauth2authorizeparams-callback
@JS('gapi.auth2.authorize')
external void authorize(
AuthorizeConfig params, void Function(AuthorizeResponse response) callback);
// End module gapi.auth2
// Module gapi.signin2
@JS('gapi.signin2.render')
external void render(
dynamic id,
dynamic
/*{
/**
* The auth scope or scopes to authorize. Auth scopes for individual APIs can be found in their documentation.
*/
scope?: string;
/**
* The width of the button in pixels (default: 120).
*/
width?: number;
/**
* The height of the button in pixels (default: 36).
*/
height?: number;
/**
* Display long labels such as "Sign in with Google" rather than "Sign in" (default: false).
*/
longtitle?: boolean;
/**
* The color theme of the button: either light or dark (default: light).
*/
theme?: string;
/**
* The callback function to call when a user successfully signs in (default: none).
*/
onsuccess?(user: auth2.GoogleUser): void;
/**
* The callback function to call when sign-in fails (default: none).
*/
onfailure?(reason: { error: string }): void;
/**
* The package name of the Android app to install over the air. See
* <a href="https://developers.google.com/identity/sign-in/web/android-app-installs">Android app installs from your web site</a>.
* Optional. (default: none)
*/
app_package_name?: string;
}*/
options);
// End module gapi.signin2
@JS()
abstract class Promise<T> {
external factory Promise(
void Function(void Function(T result) resolve, Function reject) executor);
external Promise then(void Function(T result) onFulfilled,
[Function onRejected]);
}