backend-manager 3.2.171 → 3.2.173
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/cli/cli.js +27 -11
- package/dist/cli/cli.js +0 -1534
- package/dist/manager/functions/core/actions/api/admin/backup.js +0 -338
- package/dist/manager/functions/core/actions/api/admin/create-post.js +0 -388
- package/dist/manager/functions/core/actions/api/admin/cron.js +0 -37
- package/dist/manager/functions/core/actions/api/admin/database-read.js +0 -35
- package/dist/manager/functions/core/actions/api/admin/database-write.js +0 -39
- package/dist/manager/functions/core/actions/api/admin/edit-post.js +0 -158
- package/dist/manager/functions/core/actions/api/admin/firestore-query.js +0 -165
- package/dist/manager/functions/core/actions/api/admin/firestore-read.js +0 -38
- package/dist/manager/functions/core/actions/api/admin/firestore-write.js +0 -54
- package/dist/manager/functions/core/actions/api/admin/get-stats.js +0 -269
- package/dist/manager/functions/core/actions/api/admin/payment-processor.js +0 -57
- package/dist/manager/functions/core/actions/api/admin/run-hook.js +0 -95
- package/dist/manager/functions/core/actions/api/admin/send-notification.js +0 -197
- package/dist/manager/functions/core/actions/api/admin/sync-users.js +0 -125
- package/dist/manager/functions/core/actions/api/admin/templates/post.html +0 -16
- package/dist/manager/functions/core/actions/api/firebase/get-providers.js +0 -102
- package/dist/manager/functions/core/actions/api/general/emails/general:download-app-link.js +0 -21
- package/dist/manager/functions/core/actions/api/general/fetch-post.js +0 -99
- package/dist/manager/functions/core/actions/api/general/generate-uuid.js +0 -41
- package/dist/manager/functions/core/actions/api/general/send-email.js +0 -112
- package/dist/manager/functions/core/actions/api/handler/create-post.js +0 -146
- package/dist/manager/functions/core/actions/api/special/setup-electron-manager-client.js +0 -103
- package/dist/manager/functions/core/actions/api/template.js +0 -33
- package/dist/manager/functions/core/actions/api/test/authenticate.js +0 -22
- package/dist/manager/functions/core/actions/api/test/create-test-accounts.js +0 -27
- package/dist/manager/functions/core/actions/api/test/lab.js +0 -55
- package/dist/manager/functions/core/actions/api/test/redirect.js +0 -26
- package/dist/manager/functions/core/actions/api/test/webhook.js +0 -30
- package/dist/manager/functions/core/actions/api/user/create-custom-token.js +0 -32
- package/dist/manager/functions/core/actions/api/user/delete.js +0 -68
- package/dist/manager/functions/core/actions/api/user/get-active-sessions.js +0 -45
- package/dist/manager/functions/core/actions/api/user/get-subscription-info.js +0 -49
- package/dist/manager/functions/core/actions/api/user/oauth2/discord.js +0 -114
- package/dist/manager/functions/core/actions/api/user/oauth2/google.js +0 -99
- package/dist/manager/functions/core/actions/api/user/oauth2.js +0 -476
- package/dist/manager/functions/core/actions/api/user/regenerate-api-keys.js +0 -54
- package/dist/manager/functions/core/actions/api/user/resolve.js +0 -32
- package/dist/manager/functions/core/actions/api/user/sign-out-all-sessions.js +0 -118
- package/dist/manager/functions/core/actions/api/user/sign-up copy.js +0 -544
- package/dist/manager/functions/core/actions/api/user/sign-up.js +0 -99
- package/dist/manager/functions/core/actions/api/user/submit-feedback.js +0 -96
- package/dist/manager/functions/core/actions/api/user/validate-settings.js +0 -86
- package/dist/manager/functions/core/actions/api.js +0 -354
- package/dist/manager/functions/core/actions/create-post-handler.js +0 -184
- package/dist/manager/functions/core/actions/generate-uuid.js +0 -62
- package/dist/manager/functions/core/actions/sign-up-handler.js +0 -205
- package/dist/manager/functions/core/admin/create-post.js +0 -206
- package/dist/manager/functions/core/admin/firestore-write.js +0 -72
- package/dist/manager/functions/core/admin/get-stats.js +0 -218
- package/dist/manager/functions/core/admin/query.js +0 -198
- package/dist/manager/functions/core/admin/send-notification.js +0 -206
- package/dist/manager/functions/core/cron/daily/ghostii-auto-publisher.js +0 -377
- package/dist/manager/functions/core/cron/daily/reset-usage.js +0 -197
- package/dist/manager/functions/core/cron/daily.js +0 -114
- package/dist/manager/functions/core/events/auth/before-create.js +0 -124
- package/dist/manager/functions/core/events/auth/before-signin.js +0 -62
- package/dist/manager/functions/core/events/auth/on-create copy.js +0 -121
- package/dist/manager/functions/core/events/auth/on-create.js +0 -564
- package/dist/manager/functions/core/events/auth/on-delete.js +0 -72
- package/dist/manager/functions/core/events/firestore/on-subscription.js +0 -107
- package/dist/manager/functions/test/authenticate.js +0 -38
- package/dist/manager/functions/test/create-test-accounts.js +0 -144
- package/dist/manager/functions/test/webhook.js +0 -37
- package/dist/manager/functions/wrappers/mailchimp/addToList.js +0 -25
- package/dist/manager/helpers/analytics copy.js +0 -217
- package/dist/manager/helpers/analytics.js +0 -467
- package/dist/manager/helpers/api-manager.js +0 -324
- package/dist/manager/helpers/assistant.js +0 -1043
- package/dist/manager/helpers/metadata.js +0 -32
- package/dist/manager/helpers/middleware.js +0 -154
- package/dist/manager/helpers/roles.js +0 -69
- package/dist/manager/helpers/settings.js +0 -158
- package/dist/manager/helpers/subscription-resolver-new.js +0 -828
- package/dist/manager/helpers/subscription-resolver.js +0 -842
- package/dist/manager/helpers/usage.js +0 -381
- package/dist/manager/helpers/user.js +0 -198
- package/dist/manager/helpers/utilities.js +0 -292
- package/dist/manager/index.js +0 -1076
- package/dist/manager/libraries/openai.js +0 -460
- package/dist/manager/routes/restart/index.js +0 -52
- package/dist/manager/routes/test/index.js +0 -43
- package/dist/manager/schemas/restart.js +0 -13
- package/dist/manager/schemas/test.js +0 -13
- package/dist/require.js +0 -3
|
@@ -1,338 +0,0 @@
|
|
|
1
|
-
const moment = require('moment');
|
|
2
|
-
const powertools = require('node-powertools');
|
|
3
|
-
const {Storage} = require('@google-cloud/storage');
|
|
4
|
-
const storage = new Storage();
|
|
5
|
-
|
|
6
|
-
function Module() {
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
Module.prototype.main = function () {
|
|
11
|
-
const self = this;
|
|
12
|
-
const Manager = self.Manager;
|
|
13
|
-
const Api = self.Api;
|
|
14
|
-
const assistant = self.assistant;
|
|
15
|
-
const payload = self.payload;
|
|
16
|
-
|
|
17
|
-
return new Promise(async function(resolve, reject) {
|
|
18
|
-
|
|
19
|
-
payload.data.payload.deletionRegex = payload.data.payload.deletionRegex ? powertools.regexify(payload.data.payload.deletionRegex) : payload.data.payload.deletionRegex;
|
|
20
|
-
|
|
21
|
-
if (!payload.user.roles.admin && assistant.isProduction()) {
|
|
22
|
-
return reject(assistant.errorify(`Admin required.`, {code: 401}));
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// https://googleapis.dev/nodejs/firestore/latest/v1.FirestoreAdminClient.html#exportDocuments
|
|
26
|
-
// https://firebase.google.com/docs/firestore/solutions/schedule-export#firebase-cli
|
|
27
|
-
// https://levelup.gitconnected.com/how-to-back-up-firestore-easily-and-automatically-eab6bf0d7e1f
|
|
28
|
-
const client = new self.libraries.admin.firestore.v1.FirestoreAdminClient({
|
|
29
|
-
// credential: Manager.libraries.admin.credential.cert(
|
|
30
|
-
// require(Manager.project.serviceAccountPath)
|
|
31
|
-
// ),
|
|
32
|
-
});
|
|
33
|
-
const projectId = Manager.project.projectId;
|
|
34
|
-
const resourceZone = Manager.project.resourceZone;
|
|
35
|
-
const databaseName = client.databasePath(projectId, '(default)');
|
|
36
|
-
const bucketName = `bm-backup-firestore-${projectId}`;
|
|
37
|
-
const bucketAddress = `gs://${bucketName}`;
|
|
38
|
-
|
|
39
|
-
await self.createBucket(bucketName, resourceZone);
|
|
40
|
-
// await self.deleteOldFiles(bucketName, resourceZone);
|
|
41
|
-
|
|
42
|
-
client.exportDocuments({
|
|
43
|
-
name: databaseName,
|
|
44
|
-
outputUriPrefix: bucketAddress,
|
|
45
|
-
// Leave collectionIds empty to export all collections
|
|
46
|
-
// or set to a list of collection IDs to export,
|
|
47
|
-
collectionIds: []
|
|
48
|
-
})
|
|
49
|
-
.then(async (responses) => {
|
|
50
|
-
|
|
51
|
-
const response = responses[0];
|
|
52
|
-
const meta = {
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
assistant.log('Saved backup successfully:', response.metadata.outputUriPrefix, meta)
|
|
57
|
-
|
|
58
|
-
await self._setMetaStats(null, meta);
|
|
59
|
-
|
|
60
|
-
return resolve(response['name']);
|
|
61
|
-
})
|
|
62
|
-
.catch(async (e) => {
|
|
63
|
-
await self._setMetaStats(e);
|
|
64
|
-
|
|
65
|
-
return reject(assistant.errorify(e, {code: 500}));
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
Module.prototype._setMetaStats = function (error, meta) {
|
|
73
|
-
const self = this;
|
|
74
|
-
const Manager = self.Manager;
|
|
75
|
-
const Api = self.Api;
|
|
76
|
-
const assistant = self.assistant;
|
|
77
|
-
const payload = self.payload;
|
|
78
|
-
|
|
79
|
-
return new Promise(async function(resolve, reject) {
|
|
80
|
-
error = error || null;
|
|
81
|
-
const isError = error instanceof Error;
|
|
82
|
-
|
|
83
|
-
await self.libraries.admin.firestore().doc('meta/stats')
|
|
84
|
-
.set({
|
|
85
|
-
backups: {
|
|
86
|
-
lastBackup: {
|
|
87
|
-
date: {
|
|
88
|
-
timestamp: assistant.meta.startTime.timestamp,
|
|
89
|
-
timestampUNIX: assistant.meta.startTime.timestampUNIX,
|
|
90
|
-
},
|
|
91
|
-
status: {
|
|
92
|
-
success: !isError,
|
|
93
|
-
error: isError ? error.message : null,
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
metadata: Manager.Metadata().set({tag: 'admin:backup'}),
|
|
98
|
-
}, {merge: true})
|
|
99
|
-
.catch(e => {
|
|
100
|
-
assistant.errorify(e, {code: 500, log: true});
|
|
101
|
-
})
|
|
102
|
-
|
|
103
|
-
return resolve();
|
|
104
|
-
});
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
Module.prototype.createBucket = function (bucketName, resourceZone) {
|
|
108
|
-
const self = this;
|
|
109
|
-
const Manager = self.Manager;
|
|
110
|
-
const Api = self.Api;
|
|
111
|
-
const assistant = self.assistant;
|
|
112
|
-
const payload = self.payload;
|
|
113
|
-
|
|
114
|
-
return new Promise(function(resolve, reject) {
|
|
115
|
-
storage.bucket(bucketName).getMetadata()
|
|
116
|
-
.then(async (meta) => {
|
|
117
|
-
assistant.log(`${bucketName} metadata`, meta[0])
|
|
118
|
-
return resolve();
|
|
119
|
-
})
|
|
120
|
-
.catch(async (e) => {
|
|
121
|
-
const storageCreation = await storage.createBucket(bucketName, {
|
|
122
|
-
// location: 'ASIA',
|
|
123
|
-
location: resourceZone,
|
|
124
|
-
storageClass: 'COLDLINE',
|
|
125
|
-
})
|
|
126
|
-
.then(r => r)
|
|
127
|
-
.catch(e => e)
|
|
128
|
-
|
|
129
|
-
assistant.log('storageCreation', storageCreation)
|
|
130
|
-
|
|
131
|
-
return resolve();
|
|
132
|
-
})
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
// https://github.com/zsolt-dev/auto-delete-gcp-storage-backups/blob/master/index.js
|
|
137
|
-
Module.prototype.__RETRY_deleteOldFiles = function (bucketName, resourceZone) {
|
|
138
|
-
const self = this;
|
|
139
|
-
const Manager = self.Manager;
|
|
140
|
-
const Api = self.Api;
|
|
141
|
-
const assistant = self.assistant;
|
|
142
|
-
const payload = self.payload;
|
|
143
|
-
|
|
144
|
-
return new Promise(async function(resolve, reject) {
|
|
145
|
-
const now = moment();
|
|
146
|
-
const deletionRegex = payload.data.payload.deletionRegex;
|
|
147
|
-
|
|
148
|
-
// Helpers
|
|
149
|
-
const getFileObjectWithMetaData = async (bucketName, fileName) => {
|
|
150
|
-
const [metaData] = await storage.bucket(bucketName).file(fileName).getMetadata();
|
|
151
|
-
return ({ fileName, created: metaData.timeCreated });
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
const deleteFileFromBucket = async (bucketName, fileName) => {
|
|
155
|
-
assistant.log(`Deleting item: ${fileName}...`, );
|
|
156
|
-
return await storage.bucket(bucketName).file(fileName).delete();
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
// Main
|
|
160
|
-
// get the file names as an array
|
|
161
|
-
let [allFiles] = await storage.bucket(bucketName).getFiles();
|
|
162
|
-
let deletePromises = [];
|
|
163
|
-
let foldersToDelete = [];
|
|
164
|
-
allFiles = allFiles.map(file => file.name);
|
|
165
|
-
// console.log(`all files: ${allFiles.join(', ')}`);
|
|
166
|
-
|
|
167
|
-
allFiles.forEach((filePath, i) => {
|
|
168
|
-
const fileName = filePath.split('/')[0];
|
|
169
|
-
const date = moment(fileName.split('T')[0]);
|
|
170
|
-
const day = date.date();
|
|
171
|
-
const month = date.month();
|
|
172
|
-
const age = now.diff(date, 'days', false);
|
|
173
|
-
|
|
174
|
-
if (age >= 30) {
|
|
175
|
-
if (day === 1) { return }
|
|
176
|
-
deletePromises.push(deleteFileFromBucket(bucketName, backup.fileName))
|
|
177
|
-
assistant.log(`Preparing to delete ${filePath}: date=${date.format('MMM Do, YYYY')}, day=${day}, month=${month}, age=${age}`, );
|
|
178
|
-
// if (!foldersToDelete.includes(fileName)) {
|
|
179
|
-
// assistant.log(`Preparing to delete ${fileName}: date=${date.format('MMM Do, YYYY')}, day=${day}, month=${month}, age=${age}`, );
|
|
180
|
-
// foldersToDelete = foldersToDelete.concat(fileName);
|
|
181
|
-
// deletePromises.push(deleteFileFromBucket(bucketName, fileName))
|
|
182
|
-
// }
|
|
183
|
-
}
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
console.log('---deletePromises.length', deletePromises.length);
|
|
187
|
-
|
|
188
|
-
return
|
|
189
|
-
|
|
190
|
-
// transform to array of objects with creation timestamp { fileName: abc, created: xyz }
|
|
191
|
-
allFiles = allFiles.map(fileName => getFileObjectWithMetaData(bucketName, fileName));
|
|
192
|
-
allFiles = await Promise.all(allFiles);
|
|
193
|
-
|
|
194
|
-
allFiles.forEach((backup, i) => {
|
|
195
|
-
const date = moment(backup.created);
|
|
196
|
-
const day = date.date();
|
|
197
|
-
const month = date.month();
|
|
198
|
-
const age = now.diff(date, 'days', false);
|
|
199
|
-
|
|
200
|
-
assistant.log(`Sorting item ${i}: date=${date.format('MMM Do, YYYY')}, day=${day}, month=${month}, age=${age}`, );
|
|
201
|
-
|
|
202
|
-
if (age >= 31) {
|
|
203
|
-
if (day === 1) { return }
|
|
204
|
-
deletePromises.push(deleteFileFromBucket(bucketName, backup.fileName))
|
|
205
|
-
} else if ((deletionRegex && backup.fileName.match(deletionRegex))) {
|
|
206
|
-
deletePromises.push(deleteFileFromBucket(bucketName, backup.fileName))
|
|
207
|
-
}
|
|
208
|
-
})
|
|
209
|
-
|
|
210
|
-
await Promise.all(deletePromises);
|
|
211
|
-
|
|
212
|
-
return resolve();
|
|
213
|
-
});
|
|
214
|
-
};
|
|
215
|
-
|
|
216
|
-
Module.prototype.__deleteOldFiles = function (bucketName, resourceZone) {
|
|
217
|
-
const self = this;
|
|
218
|
-
const Manager = self.Manager;
|
|
219
|
-
const Api = self.Api;
|
|
220
|
-
const assistant = self.assistant;
|
|
221
|
-
const payload = self.payload;
|
|
222
|
-
|
|
223
|
-
return new Promise(async function(resolve, reject) {
|
|
224
|
-
const now = moment();
|
|
225
|
-
const deletionRegex = payload.data.payload.deletionRegex;
|
|
226
|
-
|
|
227
|
-
// Helpers
|
|
228
|
-
const getFileObjectWithMetaData = async (bucketName, fileName) => {
|
|
229
|
-
const [metaData] = await storage.bucket(bucketName).file(fileName).getMetadata();
|
|
230
|
-
return ({ fileName, created: metaData.timeCreated });
|
|
231
|
-
};
|
|
232
|
-
|
|
233
|
-
const deleteFileFromBucket = async (bucketName, fileName) => {
|
|
234
|
-
assistant.log(`Deleting item: ${fileName}...`, );
|
|
235
|
-
return await storage.bucket(bucketName).file(fileName).delete();
|
|
236
|
-
};
|
|
237
|
-
|
|
238
|
-
// Main
|
|
239
|
-
// get the file names as an array
|
|
240
|
-
let [allFiles] = await storage.bucket(bucketName).getFiles();
|
|
241
|
-
let deletePromises = [];
|
|
242
|
-
allFiles = allFiles.map(file => file.name);
|
|
243
|
-
// console.log(`all files: ${allFiles.join(', ')}`);
|
|
244
|
-
|
|
245
|
-
// transform to array of objects with creation timestamp { fileName: xyz, created: }
|
|
246
|
-
allFiles = allFiles.map(fileName => getFileObjectWithMetaData(bucketName, fileName));
|
|
247
|
-
allFiles = await Promise.all(allFiles);
|
|
248
|
-
|
|
249
|
-
allFiles.forEach((backup, i) => {
|
|
250
|
-
const date = moment(backup.created);
|
|
251
|
-
const day = date.date();
|
|
252
|
-
const month = date.month();
|
|
253
|
-
const age = now.diff(date, 'days', false);
|
|
254
|
-
|
|
255
|
-
assistant.log(`Sorting item ${i}: date=${date.format('MMM Do, YYYY')}, day=${day}, month=${month}, age=${age}`, );
|
|
256
|
-
|
|
257
|
-
if (age >= 31) {
|
|
258
|
-
if (day === 1) { return }
|
|
259
|
-
deletePromises.push(deleteFileFromBucket(bucketName, backup.fileName))
|
|
260
|
-
} else if ((deletionRegex && backup.fileName.match(deletionRegex))) {
|
|
261
|
-
deletePromises.push(deleteFileFromBucket(bucketName, backup.fileName))
|
|
262
|
-
}
|
|
263
|
-
})
|
|
264
|
-
|
|
265
|
-
await Promise.all(deletePromises);
|
|
266
|
-
|
|
267
|
-
return resolve();
|
|
268
|
-
});
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
Module.prototype._deleteOldFiles = function (bucketName, resourceZone) {
|
|
272
|
-
const self = this;
|
|
273
|
-
const Manager = self.Manager;
|
|
274
|
-
const Api = self.Api;
|
|
275
|
-
const assistant = self.assistant;
|
|
276
|
-
const payload = self.payload;
|
|
277
|
-
|
|
278
|
-
return new Promise(async function(resolve, reject) {
|
|
279
|
-
// Helpers
|
|
280
|
-
const getFileObjectWithMetaData = async (bucketName, fileName) => {
|
|
281
|
-
const [metaData] = await storage.bucket(bucketName).file(fileName).getMetadata();
|
|
282
|
-
return ({ fileName, created: metaData.timeCreated });
|
|
283
|
-
};
|
|
284
|
-
|
|
285
|
-
const deleteFileFromBucket = async (bucketName, fileName) => {
|
|
286
|
-
return await storage.bucket(bucketName).file(fileName).delete();
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
// Main
|
|
290
|
-
// get the file names as an array
|
|
291
|
-
let [allFiles] = await storage.bucket(bucketName).getFiles();
|
|
292
|
-
allFiles = allFiles.map(file => file.name);
|
|
293
|
-
|
|
294
|
-
assistant.log(`All files: ${allFiles.join(', ')}`);
|
|
295
|
-
|
|
296
|
-
// transform to array of objects with creation timestamp { fileName: xyz, created: }
|
|
297
|
-
allFiles = allFiles.map(fileName => getFileObjectWithMetaData(bucketName, fileName));
|
|
298
|
-
allFiles = await Promise.all(allFiles);
|
|
299
|
-
|
|
300
|
-
const filesToKeep = new Set(); // using set insted of array since set does not allow duplicates
|
|
301
|
-
|
|
302
|
-
// recent backups
|
|
303
|
-
allFiles.forEach(backup => {
|
|
304
|
-
const createdDate = new Date(backup.created);
|
|
305
|
-
createdDate.setHours( createdDate.getHours() + numHoursToKeepRecentBackups );
|
|
306
|
-
|
|
307
|
-
if (createdDate > new Date()) {
|
|
308
|
-
filesToKeep.add(backup.fileName)
|
|
309
|
-
};
|
|
310
|
-
})
|
|
311
|
-
|
|
312
|
-
// daily backups
|
|
313
|
-
for (var i = 0; i < numDaysToKeepOneDailyBackup; i++) {
|
|
314
|
-
// get day
|
|
315
|
-
const now = new Date();
|
|
316
|
-
now.setDate( now.getDate() - i );
|
|
317
|
-
dateString = now.toISOString().substring(0, 10);
|
|
318
|
-
// keep only one from that day
|
|
319
|
-
const backupsFromThatDay = allFiles.filter(backup => backup.created.startsWith(dateString));
|
|
320
|
-
if (backupsFromThatDay && backupsFromThatDay.length > 0) {
|
|
321
|
-
filesToKeep.add(backupsFromThatDay[0].fileName)
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
// filesToKeep.forEach(item => console.log(item));
|
|
326
|
-
|
|
327
|
-
const filesToDelete = allFiles.filter(backup => !filesToKeep.has(backup.fileName));
|
|
328
|
-
|
|
329
|
-
assistant.log(`Deleting ${filesToDelete.length} files: ${filesToDelete.map(backup => backup.fileName).join(', ')}`);
|
|
330
|
-
|
|
331
|
-
const deletePromises = filesToDelete.map(backup => deleteFileFromBucket(bucketName, backup.fileName));
|
|
332
|
-
await Promise.all(deletePromises);
|
|
333
|
-
|
|
334
|
-
return resolve();
|
|
335
|
-
});
|
|
336
|
-
};
|
|
337
|
-
|
|
338
|
-
module.exports = Module;
|