firebase-admin
Advanced tools
Comparing version 1.2.0 to 2.0.0
@@ -10,11 +10,27 @@ | ||
/** | ||
* Creates a new reference to a Firebase account. | ||
* @constructor | ||
* @param {String} adminToken The admin token for the account. | ||
*/ | ||
function FirebaseAccount(adminToken) { | ||
var deferred = Q.defer(); | ||
this._dbs = {}; | ||
this.adminToken = adminToken; | ||
} | ||
/** | ||
* Gets a Firebase admin token given a username and password. | ||
* @constructor | ||
* @param {String} email The email address associated with the account. | ||
* @param {String} password The password for the account. | ||
* @property {external:Promise} ready A promise that will resolve when the | ||
* account is ready to use and reject if there's a problem logging in. | ||
* token is retrieved, or reject if there's an error. | ||
*/ | ||
function FirebaseAccount(email, password) { | ||
FirebaseAccount.getToken = function(email, password) { | ||
@@ -33,2 +49,3 @@ var deferred = Q.defer(); | ||
}, function(err, response, body) { | ||
if (err) { | ||
@@ -43,11 +60,11 @@ deferred.reject(err); | ||
} else { | ||
this.adminToken = body.adminToken; | ||
deferred.resolve(this); | ||
deferred.resolve(body.adminToken); | ||
} | ||
}.bind(this)); | ||
this.ready = deferred.promise; | ||
}); | ||
} | ||
return deferred.promise; | ||
}; | ||
FirebaseAccount.defaultAuthConfig = { | ||
@@ -241,3 +258,3 @@ domains: [ | ||
* @example | ||
* FirebaseAccount.bootstrapInstance('me@foo.com', 'foobar') | ||
* FirebaseAccount.bootstrapInstance('token') | ||
* .then(function(db) { | ||
@@ -251,16 +268,14 @@ * // get a Firebase reference to the new instance | ||
*/ | ||
FirebaseAccount.bootstrapInstance = function(email, password) { | ||
FirebaseAccount.bootstrapInstance = function(token) { | ||
return new FirebaseAccount(email, password).ready.then(function(acct) { | ||
var account = new FirebaseAccount(token); | ||
return acct.createDatabase(Math.random().toString(36).slice(2)) | ||
.then(function(db) { | ||
return account.createDatabase(Math.random().toString(36).slice(2)) | ||
.then(function(db) { | ||
db.tearDown = function() { | ||
return acct.deleteDatabase(db); | ||
}; | ||
return db; | ||
db.tearDown = function() { | ||
return account.deleteDatabase(db); | ||
}; | ||
return db; | ||
}); | ||
}); | ||
@@ -267,0 +282,0 @@ |
@@ -426,2 +426,3 @@ | ||
/** | ||
@@ -428,0 +429,0 @@ * Promises to create a Firebase Simple Login password-type user. |
{ | ||
"name": "firebase-admin", | ||
"version": "1.2.0", | ||
"version": "2.0.0", | ||
"description": "Programmatically instantiate and modify Firebase instances.", | ||
@@ -34,3 +34,6 @@ "keywords": [ | ||
"q": "^1.0.1", | ||
"request": "^2.37.0" | ||
"request": "^2.37.0", | ||
"commander": "^2.3.0", | ||
"chalk": "^0.5.1", | ||
"cli-table": "^0.3.0" | ||
}, | ||
@@ -37,0 +40,0 @@ "devDependencies": { |
@@ -21,4 +21,5 @@ firebase-admin | ||
var Firebase = require('firebase'); | ||
var account = new FirebaseAccount('me@example.com', 'password'); | ||
account.ready.then(function() { | ||
FirebaseAccount.getToken('user', 'pass') | ||
.then(function(token) { | ||
var account = new FirebaseAccount(token); | ||
account.createDatabase('new-instance-name') | ||
@@ -25,0 +26,0 @@ .then(function(instance) { |
@@ -12,6 +12,3 @@ | ||
if (process.env.FIREBASE_USER && process.env.FIREBASE_PASS) { | ||
global.params.firebaseUser = process.env.FIREBASE_USER; | ||
global.params.firebasePassword = process.env.FIREBASE_PASS; | ||
} else { | ||
if (!process.env.FIREBASE_USER || !process.env.FIREBASE_PASS) { | ||
console.error( | ||
@@ -21,2 +18,3 @@ 'You must set process.env.FIREBASE_USER and process.env.FIREBASE_PASS\n' + | ||
); | ||
process.exit(1); | ||
} |
@@ -14,8 +14,10 @@ | ||
var newDb; | ||
var newDb, token; | ||
before(function() { | ||
account = new FirebaseAccount(fbUser, fbPass); | ||
return account.ready; | ||
return FirebaseAccount.getToken(fbUser, fbPass) | ||
.then(function(newToken) { | ||
token = newToken; | ||
}); | ||
@@ -25,15 +27,13 @@ }); | ||
beforeEach(function() { | ||
return Q.delay(500); | ||
}); | ||
describe('constructor', function() { | ||
describe('getToken', function() { | ||
describe('given valid credentials', function() { | ||
it('has a "ready" promise that resolves when authenticated', function() { | ||
it('resolves when authenticated', function() { | ||
return expect((new FirebaseAccount(fbUser, fbPass)).ready) | ||
return expect(FirebaseAccount.getToken(fbUser, fbPass)) | ||
.to.be.fulfilled; | ||
@@ -50,4 +50,5 @@ | ||
return expect( | ||
(new FirebaseAccount('wrong@wrongville.com', 'wrongpass')).ready | ||
).to.be.rejectedWith(Error); | ||
FirebaseAccount.getToken('wrong@wrongville.com', 'wrongpass') | ||
) | ||
.to.be.rejectedWith(Error); | ||
@@ -80,2 +81,10 @@ }); | ||
describe('constructor', function() { | ||
it('takes a Firebase admin token', function() { | ||
account = new FirebaseAccount(token); | ||
}); | ||
}); | ||
describe('#createDatabase', function() { | ||
@@ -138,9 +147,12 @@ | ||
before(function() { | ||
instancePromise = FirebaseAccount.bootstrapInstance(fbUser, fbPass); | ||
return FirebaseAccount.getToken(fbUser, fbPass) | ||
.then(function(token) { | ||
instancePromise = FirebaseAccount.bootstrapInstance(token); | ||
}); | ||
}); | ||
it('promises to create a new database with a random name immediately', function() { | ||
return expect(instancePromise).to.be.fulfilled; | ||
}); | ||
@@ -150,6 +162,6 @@ | ||
return expect(instancePromise.then(function(instance) { | ||
return instancePromise.then(function(instance) { | ||
expect(instance.tearDown).to.be.a('function'); | ||
return expect(instance.tearDown()).to.be.fulfilled; | ||
})).to.be.fulfilled; | ||
}); | ||
@@ -156,0 +168,0 @@ }); |
@@ -19,7 +19,8 @@ | ||
account = new FirebaseAccount(fbUser, fbPass); | ||
return account.ready | ||
.then(function() { | ||
return FirebaseAccount.getToken(fbUser, fbPass) | ||
.then(function(token) { | ||
account = new FirebaseAccount(token); | ||
return account.createDatabase(Math.random().toString(36).slice(2)) | ||
@@ -26,0 +27,0 @@ .then(function(newInstance) { |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
46645
19
1158
59
7
7
+ Addedchalk@^0.5.1
+ Addedcli-table@^0.3.0
+ Addedcommander@^2.3.0
+ Addedansi-regex@0.2.1(transitive)
+ Addedansi-styles@1.1.0(transitive)
+ Addedchalk@0.5.1(transitive)
+ Addedcli-table@0.3.11(transitive)
+ Addedcolors@1.0.3(transitive)
+ Addedcommander@2.20.3(transitive)
+ Addedescape-string-regexp@1.0.5(transitive)
+ Addedhas-ansi@0.1.0(transitive)
+ Addedstrip-ansi@0.3.0(transitive)
+ Addedsupports-color@0.2.0(transitive)