-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathfirestoreusers2json.ts
55 lines (49 loc) · 1.82 KB
/
firestoreusers2json.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//import { getFirestoreInstance } from './utils';
import * as fs from 'fs';
import * as admin from "firebase-admin";
const serviceAccount = require("./firebase-service.json");
try {
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: `https://${serviceAccount.project_id}.firebaseio.com` // "https://PROJECTID.firebaseio.com"
});
} catch (e) {}
const args = process.argv.slice(2);
if (args.length < 0) {
console.log('Usage: node firestoreusers2json.js [<filename.json>] [<batch_size>]');
console.log(' <filename.json>: (optional) output filename (defaults to ./users.json');
console.log(' <batch_size>: (optional) number of users to fetch at a time (defaults to 100)');
process.exit(1);
} else {
main();
}
async function main() {
const filename = args[0] || "./users.json";
const batchSizeInput = args[1] || "100";
const batchSize = parseInt(batchSizeInput);
fs.writeFileSync(filename, "[", "utf-8");
listUsers(filename, batchSize);
}
async function listUsers(
filename: string,
batchSize: number,
nextPageToken?: string
) {
let count = 0;
admin.auth().listUsers(batchSize, nextPageToken)
.then((usersFound: admin.auth.ListUsersResult) => {
const users: admin.auth.UserRecord[] = usersFound.users;
users.forEach((user: admin.auth.UserRecord) => {
fs.appendFileSync(filename, (count > 0 ? ',' : '') + JSON.stringify(user, null, 2), 'utf-8');
count++;
});
if (usersFound.pageToken) {
fs.appendFileSync(filename, ',', 'utf-8');
listUsers(filename, batchSize, usersFound.pageToken);
} else {
fs.appendFileSync(filename, ']\n', 'utf-8');
}
}).catch((err) => {
console.log('ERROR in listUsers', JSON.stringify(err));
});
}