blob: ed7a2816d55e406eccebacc7dcd1f0a9c54bb945 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@JS()
library gapiauth2;
import "package:js/js.dart";
import "package:js/js_util.dart" show promiseToFuture;
/// 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" />
@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);
}
// 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 onInit(GoogleAuth googleAuth),
[dynamic onFailure(GoogleAuthInitFailureError reason)]);
/// 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 onsuccess(GoogleUser googleUser),
dynamic onfailure(String reason));
}
@anonymous
@JS()
abstract class _GoogleAuth {
external Promise<GoogleUser> signIn(
[dynamic /*SigninOptions|SigninOptionsBuilder*/ options]);
external Promise<dynamic /*{code: string}*/ > grantOfflineAccess(
[OfflineAccessOptions options]);
}
extension GoogleAuthExtensions on GoogleAuth {
Future<GoogleUser> signIn(
[dynamic /*SigninOptions|SigninOptionsBuilder*/ options]) {
final Object t = this;
final _GoogleAuth tt = t;
return promiseToFuture(tt.signIn(options));
}
Future<dynamic /*{code: string}*/ > grantOfflineAccess(
[OfflineAccessOptions options]) {
final Object t = this;
final _GoogleAuth tt = t;
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 listener(bool signedIn));
}
@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 listener(GoogleUser user));
}
@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);
external factory SigninOptions(
{String app_package_name,
bool fetch_basic_profile,
String prompt,
String scope,
String /*'popup'|'redirect'*/ ux_mode,
String redirect_uri});
}
/// 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);
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});
}
@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);
}
@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.
external AuthResponse getAuthResponse([bool includeAuthorizationData]);
/// Returns true if the user granted the specified scopes.
external bool hasGrantedScopes(String scopes);
/// Signs in the user. Use this method to request additional scopes for incremental
/// authorization or to sign in a user after the user has signed out.
/// When you use GoogleUser.signIn(), the sign-in flow skips the account chooser step.
/// See GoogleAuth.signIn().
external dynamic signIn(
[dynamic /*SigninOptions|SigninOptionsBuilder*/ options]);
/// See GoogleUser.signIn()
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 {
external Promise<AuthResponse> reloadAuthResponse();
}
extension GoogleUserExtensions on GoogleUser {
Future<AuthResponse> reloadAuthResponse() {
final Object t = this;
final _GoogleUser tt = t;
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 callback(AuthorizeResponse response));
// 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 executor(void resolve(T result), Function reject));
external Promise then(void onFulfilled(T result), [Function onRejected]);
}