1313 * See the License for the specific language governing permissions and
1414 * limitations under the License.
1515 */
16- ' use strict' ;
16+ " use strict" ;
1717
1818// [START all]
1919// [START import]
20- // The Cloud Functions for Firebase SDK to create v2 Cloud Functions and set up triggers.
21- const { onSchedule } = require ( ' firebase-functions/v2/scheduler' ) ;
22- const { logger } = require ( ' firebase-functions' ) ;
20+ // The Cloud Functions for Firebase SDK to set up triggers and logging .
21+ const { onSchedule} = require ( " firebase-functions/v2/scheduler" ) ;
22+ const { logger} = require ( " firebase-functions" ) ;
2323
2424// The Firebase Admin SDK to delete inactive users.
25- const admin = require ( ' firebase-admin' ) ;
25+ const admin = require ( " firebase-admin" ) ;
2626admin . initializeApp ( ) ;
2727
2828// The es6-promise-pool to limit the concurrency of promises.
29- const PromisePool = require ( ' es6-promise-pool' ) . default ;
29+ const PromisePool = require ( " es6-promise-pool" ) . default ;
3030// Maximum concurrent account deletions.
3131const MAX_CONCURRENT = 3 ;
3232// [END import]
3333
3434// [START accountcleanup]
3535// Run once a day at midnight, to clean up the users
3636// Manually run the task here https://console.cloud.google.com/cloudscheduler
37- exports . accountcleanup = onSchedule ( ' every day 00:00' , async ( event ) => {
37+ exports . accountcleanup = onSchedule ( " every day 00:00" , async ( event ) => {
3838 // Fetch all user details.
3939 const inactiveUsers = await getInactiveUsers ( ) ;
40+
4041 // Use a pool so that we delete maximum `MAX_CONCURRENT` users in parallel.
41- const promisePool = new PromisePool ( ( ) => deleteInactiveUser ( inactiveUsers ) , MAX_CONCURRENT ) ;
42+ const promisePool = new PromisePool (
43+ ( ) => deleteInactiveUser ( inactiveUsers ) ,
44+ MAX_CONCURRENT ,
45+ ) ;
4246 await promisePool . start ( ) ;
43- logger . log ( 'User cleanup finished' ) ;
47+
48+ logger . log ( "User cleanup finished" ) ;
4449} ) ;
4550// [END accountcleanup]
4651
4752// [START deleteInactiveUser]
48- // Deletes one inactive user from the list.
53+ /**
54+ * Deletes one inactive user from the list.
55+ * @param {admin.auth.UserRecord[] } inactiveUsers
56+ * @return {null | Promise<void> }
57+ */
4958function deleteInactiveUser ( inactiveUsers ) {
5059 if ( inactiveUsers . length > 0 ) {
5160 const userToDelete = inactiveUsers . pop ( ) ;
52-
61+
5362 // Delete the inactive user.
5463 return admin . auth ( ) . deleteUser ( userToDelete . uid ) . then ( ( ) => {
5564 return logger . log (
56- ' Deleted user account' ,
57- userToDelete . uid ,
58- ' because of inactivity'
65+ " Deleted user account" ,
66+ userToDelete . uid ,
67+ " because of inactivity" ,
5968 ) ;
6069 } ) . catch ( ( error ) => {
6170 return logger . error (
62- ' Deletion of inactive user account' ,
63- userToDelete . uid ,
64- ' failed:' ,
65- error
71+ " Deletion of inactive user account" ,
72+ userToDelete . uid ,
73+ " failed:" ,
74+ error ,
6675 ) ;
6776 } ) ;
6877 } else {
@@ -73,20 +82,31 @@ function deleteInactiveUser(inactiveUsers) {
7382
7483// [START getInactiveUsers]
7584// Returns the list of all inactive users.
85+ /**
86+ *
87+ * @param {admin.auth.UserRecord[] } [users] the current list of inactive users
88+ * @param {string } [nextPageToken]
89+ * @return {Promise<admin.auth.UserRecord[]> }
90+ */
7691async function getInactiveUsers ( users = [ ] , nextPageToken ) {
7792 const result = await admin . auth ( ) . listUsers ( 1000 , nextPageToken ) ;
7893 // Find users that have not signed in in the last 30 days.
7994 const inactiveUsers = result . users . filter (
80- user => Date . parse ( user . metadata . lastRefreshTime || user . metadata . lastSignInTime ) < ( Date . now ( ) - 30 * 24 * 60 * 60 * 1000 ) ) ;
81-
82- // Concat with list of previously found inactive users if there was more than 1000 users.
95+ ( user ) =>
96+ Date . parse (
97+ user . metadata . lastRefreshTime || user . metadata . lastSignInTime ,
98+ ) <
99+ Date . now ( ) - 30 * 24 * 60 * 60 * 1000 ,
100+ ) ;
101+
102+ // Add to the list of previously found inactive users.
83103 users = users . concat ( inactiveUsers ) ;
84-
104+
85105 // If there are more users to fetch we fetch them.
86106 if ( result . pageToken ) {
87107 return getInactiveUsers ( users , result . pageToken ) ;
88108 }
89-
109+
90110 return users ;
91111}
92112// [END getInactiveUsers]
0 commit comments