firebase-childrenkeys
Advanced tools
Comparing version 2.2.0 to 2.3.0
@@ -0,1 +1,3 @@ | ||
'use strict'; | ||
module.exports = { | ||
@@ -114,3 +116,5 @@ env: { | ||
'space-before-blocks': 'warn', | ||
'space-before-function-paren': ['warn', 'never'], | ||
'space-before-function-paren': [ | ||
'warn', {anonymous: 'never', named: 'never', asyncArrow: 'always'} | ||
], | ||
'space-in-parens': 'warn', | ||
@@ -117,0 +121,0 @@ 'space-infix-ops': 'warn', |
78
index.js
'use strict'; | ||
const request = require('request'); | ||
const axios = require('axios').default; | ||
const sleep = require('sleep-promise'); | ||
@@ -17,3 +18,3 @@ /** | ||
*/ | ||
module.exports = (ref, options = {}) => { | ||
module.exports = async (ref, options = {}) => { | ||
const refIsNonNullObject = typeof ref === 'object' && ref !== null; | ||
@@ -35,41 +36,36 @@ if (!refIsNonNullObject || typeof ref.ref !== 'object' || | ||
// ref.ref ensures we are dealing with an admin.database.Reference instance. | ||
return ref.ref.database.app.options.credential.getAccessToken() | ||
.then((accessTokenObj) => { | ||
const uri = ref.toString() + '.json'; | ||
const qs = { | ||
shallow: true, | ||
access_token: accessTokenObj.access_token, // eslint-disable-line camelcase | ||
}; | ||
const agent = options.agent; | ||
return new Promise((resolve, reject) => { | ||
let tries = 0; | ||
function tryRequest() { | ||
tries++; | ||
request({uri, qs, agent}, (error, response, data) => { | ||
if (error && options.maxTries && tries < options.maxTries) { | ||
setTimeout(tryRequest, options.retryInterval || 1000); | ||
} else if (error) { | ||
reject(error); | ||
} else { | ||
try { | ||
let match; | ||
match = data.match(/"error"\s*:\s*"([^"]*)"/); | ||
if (match) { | ||
throw new Error( | ||
'Failed to fetch children keys from Firebase REST API: ' + match[1]); | ||
} | ||
const regex = /"(.*?)"/g; | ||
const keys = []; | ||
// eslint-disable-next-line no-cond-assign | ||
while (match = regex.exec(data)) keys.push(match[1]); // don't unescape keys! | ||
resolve(keys); | ||
} catch (e) { | ||
reject(e); | ||
} | ||
} | ||
}); | ||
} | ||
tryRequest(); | ||
}); | ||
}); | ||
const accessTokenObj = await ref.ref.database.app.options.credential.getAccessToken(); | ||
const uri = ref.toString() + '.json'; | ||
const qs = { | ||
shallow: true, | ||
access_token: accessTokenObj.access_token, // eslint-disable-line camelcase | ||
}; | ||
const agent = options.agent; | ||
let tries = 0; | ||
async function tryRequest() { | ||
tries++; | ||
let data; | ||
try { | ||
const response = await axios.get(uri, {params: qs, agent, responseType: 'text'}); | ||
data = response.data; | ||
} catch (error) { | ||
if (options.maxTries && tries < options.maxTries) { | ||
await sleep(options.retryInterval || 1000); | ||
return tryRequest(); | ||
} | ||
throw error; | ||
} | ||
let match; | ||
match = data.match(/"error"\s*:\s*"([^"]*)"/); | ||
if (match) throw new Error(`Failed to fetch children keys from Firebase REST API: ${match[1]}`); | ||
const regex = /"(.*?)"/g; | ||
const keys = []; | ||
// eslint-disable-next-line no-cond-assign | ||
while (match = regex.exec(data)) keys.push(match[1]); // don't unescape keys! | ||
return keys; | ||
} | ||
return tryRequest(); | ||
}; |
{ | ||
"name": "firebase-childrenkeys", | ||
"version": "2.2.0", | ||
"version": "2.3.0", | ||
"description": "Fetch children keys of Firebase Admin Database References via the REST API", | ||
@@ -29,3 +29,4 @@ "main": "index.js", | ||
"dependencies": { | ||
"request": "^2.81.0" | ||
"axios": "^0.19.2", | ||
"sleep-promise": "^8.0.1" | ||
}, | ||
@@ -32,0 +33,0 @@ "peerDependencies": { |
12273
3
241
+ Addedaxios@^0.19.2
+ Addedsleep-promise@^8.0.1
+ Addedaxios@0.19.2(transitive)
+ Addedfollow-redirects@1.5.10(transitive)
+ Addedsleep-promise@8.0.1(transitive)
- Removedrequest@^2.81.0
- Removedajv@6.12.6(transitive)
- Removedasn1@0.2.6(transitive)
- Removedassert-plus@1.0.0(transitive)
- Removedasynckit@0.4.0(transitive)
- Removedaws-sign2@0.7.0(transitive)
- Removedaws4@1.12.0(transitive)
- Removedbcrypt-pbkdf@1.0.2(transitive)
- Removedcaseless@0.12.0(transitive)
- Removedcombined-stream@1.0.8(transitive)
- Removedcore-util-is@1.0.2(transitive)
- Removeddashdash@1.14.1(transitive)
- Removeddelayed-stream@1.0.0(transitive)
- Removedecc-jsbn@0.1.2(transitive)
- Removedextsprintf@1.3.0(transitive)
- Removedfast-json-stable-stringify@2.1.0(transitive)
- Removedforever-agent@0.6.1(transitive)
- Removedform-data@2.3.3(transitive)
- Removedgetpass@0.1.7(transitive)
- Removedhar-schema@2.0.0(transitive)
- Removedhar-validator@5.1.5(transitive)
- Removedhttp-signature@1.2.0(transitive)
- Removedisstream@0.1.2(transitive)
- Removedjsbn@0.1.1(transitive)
- Removedjson-schema@0.4.0(transitive)
- Removedjson-schema-traverse@0.4.1(transitive)
- Removedjson-stringify-safe@5.0.1(transitive)
- Removedjsprim@1.4.2(transitive)
- Removedoauth-sign@0.9.0(transitive)
- Removedperformance-now@2.1.0(transitive)
- Removedpsl@1.9.0(transitive)
- Removedpunycode@2.3.1(transitive)
- Removedqs@6.5.3(transitive)
- Removedrequest@2.88.2(transitive)
- Removedsafer-buffer@2.1.2(transitive)
- Removedsshpk@1.18.0(transitive)
- Removedtough-cookie@2.5.0(transitive)
- Removedtunnel-agent@0.6.0(transitive)
- Removedtweetnacl@0.14.5(transitive)
- Removeduri-js@4.4.1(transitive)
- Removeduuid@3.4.0(transitive)
- Removedverror@1.10.0(transitive)