File: client/FxaRelierClient.js
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
* The Firefox Accounts Relier Client.
*
* @module FxaRelierClient
*/
define([
'client/auth/api',
'client/token/api',
'client/profile/api'
], function (AuthAPI, TokenAPI, ProfileAPI) {
'use strict';
/**
* The entry point. Create and use an instance of the FxaRelierClient.
*
* @class FxaRelierClient (start here)
* @constructor
* @param {string} clientId - the OAuth client ID for the relier
* @param {Object} [options={}] - configuration
* @param {String} [options.clientSecret]
* Client secret. Required to use the {{#crossLink "TokenAPI"}}Token{{/crossLink}} API.
* @param {String} [options.contentHost]
* Firefox Accounts Content Server host
* @param {String} [options.oauthHost]
* Firefox Accounts OAuth Server host
* @param {String} [options.profileHost]
* Firefox Accounts Profile Server host
* @param {Object} [options.window]
* window override, used for unit tests
* @param {Object} [options.lightbox]
* lightbox override, used for unit tests
* @param {Object} [options.channel]
* channel override, used for unit tests
* @example
* var fxaRelierClient = new FxaRelierClient(<client_id>);
*/
function FxaRelierClient(clientId, options) {
if (! clientId) {
throw new Error('clientId is required');
}
/**
* Authenticate users in the browser. Implements {{#crossLink "AuthAPI"}}{{/crossLink}}.
* @property auth
* @type {Object}
*
* @example
* var fxaRelierClient = new FxaRelierClient('<client_id>');
* fxaRelierClient.auth.signIn({
* state: <state>,
* redirectUri: <redirect_uri>,
* scope: 'profile'
* });
*/
this.auth = new AuthAPI(clientId, options);
/**
* Manage tokens on the server. Implements {{#crossLink "TokenAPI"}}{{/crossLink}}.
* @property token
* @type {Object}
*
* @example
* var fxaRelierClient = new FxaRelierClient('<client_id>', {
* clientSecret: <client_secret>
* });
* fxaRelierClient.token.tradeCode(<code>)
* .then(function (token) {
* // do something awesome with the token like get
* // profile information. See profile.
* });
*/
this.token = new TokenAPI(clientId, options);
/**
* Fetch profile information on the server. Implements {{#crossLink "ProfileAPI"}}{{/crossLink}}.
* @property profile
* @type {Object}
*
* @example
* var fxaRelierClient = new FxaRelierClient('<client_id>', {
* clientSecret: <client_secret>
* });
* fxaRelierClient.token.tradeCode(<code>)
* .then(function (token) {
* return fxaRelierClient.fetch(token);
* })
* .then(function (profile) {
* // display some profile info.
* });
*/
this.profile = new ProfileAPI(clientId, options);
}
FxaRelierClient.prototype = {
/**
* FxaRelierClient version
*
* @property version
* @type {String}
*/
version: '0.0.0',
auth: null
};
return FxaRelierClient;
});