diff --git a/README.md b/README.md index 6f13bb1a..742032d0 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ Command | Description **logout** | Sign out of the Firebase CLI. **login:ci** | Generate an authentication token for use in non-interactive environments. **list** | Print a list of all of your Firebase projects. +**setup:web** | Print out SDK setup information for the Firebase JS SDK. **use** | Set active Firebase project, manage project aliases. **open** | Quickly open a browser to relevant project resources. **init** | Setup a new Firebase project in the current directory. This command will create a `firebase.json` configuration file in your current directory. diff --git a/commands/index.js b/commands/index.js index 2555ec0b..187e0ff7 100644 --- a/commands/index.js +++ b/commands/index.js @@ -53,6 +53,10 @@ module.exports = function(client) { client.open = loadCommand('open'); client.serve = loadCommand('serve'); + client.setup = { + web: loadCommand('setup-web') + }; + client.tools = { migrate: loadCommand('tools-migrate') }; diff --git a/commands/setup-web.js b/commands/setup-web.js new file mode 100644 index 00000000..72c5ea92 --- /dev/null +++ b/commands/setup-web.js @@ -0,0 +1,22 @@ +'use strict'; + +var fs = require('fs'); +var RSVP = require('rsvp'); + +var Command = require('../lib/command'); +var fetchWebSetup = require('../lib/fetchWebSetup'); +var logger = require('../lib/logger'); +var requireAccess = require('../lib/requireAccess'); +var scopes = require('../lib/scopes'); + +var JS_TEMPLATE = fs.readFileSync(__dirname + '/../templates/setup/web.js', 'utf8'); + +module.exports = new Command('setup:web') + .description('display this project\'s setup information for the Firebase JS SDK') + .before(requireAccess, [scopes.CLOUD_PLATFORM]) + .action(function(options) { + return fetchWebSetup(options).then(function(config) { + logger.info(JS_TEMPLATE.replace('{/*--CONFIG--*/}', JSON.stringify(config, null, 2))); + return RSVP.resolve(config); + }); + }); diff --git a/lib/api.js b/lib/api.js index 644e592b..dea40f0b 100644 --- a/lib/api.js +++ b/lib/api.js @@ -80,10 +80,12 @@ var api = { authOrigin: utils.envOverride('FIREBASE_AUTH_URL', 'https://accounts.google.com'), consoleOrigin: utils.envOverride('FIREBASE_CONSOLE_URL', 'https://console.firebase.google.com'), deployOrigin: utils.envOverride('FIREBASE_DEPLOY_URL', utils.envOverride('FIREBASE_UPLOAD_URL', 'https://deploy.firebase.com')), + firedataOrigin: utils.envOverride('FIREBASE_FIREDATA_URL', 'https://mobilesdk-pa.googleapis.com'), functionsOrigin: utils.envOverride('FIREBASE_FUNCTIONS_URL', 'https://cloudfunctions.googleapis.com'), googleOrigin: utils.envOverride('FIREBASE_TOKEN_URL', utils.envOverride('FIREBASE_GOOGLE_URL', 'https://www.googleapis.com')), hostingOrigin: utils.envOverride('FIREBASE_HOSTING_URL', 'https://firebaseapp.com'), realtimeOrigin: utils.envOverride('FIREBASE_REALTIME_URL', 'https://firebaseio.com'), + resourceManagerOrigin: utils.envOverride('FIREBASE_RESOURCEMANAGER_URL', 'https://cloudresourcemanager.googleapis.com'), rulesOrigin: utils.envOverride('FIREBASE_RULES_URL', 'https://firebaserules.googleapis.com'), runtimeconfigOrigin: utils.envOverride('FIREBASE_RUNTIMECONFIG_URL', 'https://runtimeconfig.googleapis.com'), diff --git a/lib/fetchSetup.js b/lib/fetchSetup.js new file mode 100644 index 00000000..e69de29b diff --git a/lib/fetchWebSetup.js b/lib/fetchWebSetup.js new file mode 100644 index 00000000..8f1f32b9 --- /dev/null +++ b/lib/fetchWebSetup.js @@ -0,0 +1,19 @@ +'use strict'; + +var getProjectId = require('./getProjectId'); +var api = require('./api'); + +module.exports = function(options) { + var projectId = getProjectId(options); + return api.request('GET', '/v1/projects/' + projectId, { + auth: true, + origin: api.resourceManagerOrigin + }).then(function(response) { + return api.request('GET', '/v1/projects/' + response.body.projectNumber + '/clients/_:getWebAppConfig', { + auth: true, + origin: api.firedataOrigin + }); + }).then(function(response) { + return response.body; + }); +}; diff --git a/templates/setup/web.js b/templates/setup/web.js new file mode 100644 index 00000000..eca052f5 --- /dev/null +++ b/templates/setup/web.js @@ -0,0 +1,5 @@ +// Copy and paste this into your JavaScript code to initialize the Firebase SDK. +// You will also need to load the Firebase SDK. +// See https://firebase.google.com/docs/web/setup for more details. + +firebase.initializeApp({/*--CONFIG--*/});