backend-manager 3.2.172 → 3.2.174

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.
Files changed (89) hide show
  1. package/package.json +3 -3
  2. package/src/cli/cli.js +27 -11
  3. package/src/manager/helpers/assistant.js +51 -76
  4. package/src/manager/index.js +22 -1
  5. package/dist/cli/cli.js +0 -1534
  6. package/dist/manager/functions/core/actions/api/admin/backup.js +0 -338
  7. package/dist/manager/functions/core/actions/api/admin/create-post.js +0 -388
  8. package/dist/manager/functions/core/actions/api/admin/cron.js +0 -37
  9. package/dist/manager/functions/core/actions/api/admin/database-read.js +0 -35
  10. package/dist/manager/functions/core/actions/api/admin/database-write.js +0 -39
  11. package/dist/manager/functions/core/actions/api/admin/edit-post.js +0 -158
  12. package/dist/manager/functions/core/actions/api/admin/firestore-query.js +0 -165
  13. package/dist/manager/functions/core/actions/api/admin/firestore-read.js +0 -38
  14. package/dist/manager/functions/core/actions/api/admin/firestore-write.js +0 -54
  15. package/dist/manager/functions/core/actions/api/admin/get-stats.js +0 -269
  16. package/dist/manager/functions/core/actions/api/admin/payment-processor.js +0 -57
  17. package/dist/manager/functions/core/actions/api/admin/run-hook.js +0 -95
  18. package/dist/manager/functions/core/actions/api/admin/send-notification.js +0 -197
  19. package/dist/manager/functions/core/actions/api/admin/sync-users.js +0 -125
  20. package/dist/manager/functions/core/actions/api/admin/templates/post.html +0 -16
  21. package/dist/manager/functions/core/actions/api/firebase/get-providers.js +0 -102
  22. package/dist/manager/functions/core/actions/api/general/emails/general:download-app-link.js +0 -21
  23. package/dist/manager/functions/core/actions/api/general/fetch-post.js +0 -99
  24. package/dist/manager/functions/core/actions/api/general/generate-uuid.js +0 -41
  25. package/dist/manager/functions/core/actions/api/general/send-email.js +0 -112
  26. package/dist/manager/functions/core/actions/api/handler/create-post.js +0 -146
  27. package/dist/manager/functions/core/actions/api/special/setup-electron-manager-client.js +0 -103
  28. package/dist/manager/functions/core/actions/api/template.js +0 -33
  29. package/dist/manager/functions/core/actions/api/test/authenticate.js +0 -22
  30. package/dist/manager/functions/core/actions/api/test/create-test-accounts.js +0 -27
  31. package/dist/manager/functions/core/actions/api/test/lab.js +0 -55
  32. package/dist/manager/functions/core/actions/api/test/redirect.js +0 -26
  33. package/dist/manager/functions/core/actions/api/test/webhook.js +0 -30
  34. package/dist/manager/functions/core/actions/api/user/create-custom-token.js +0 -32
  35. package/dist/manager/functions/core/actions/api/user/delete.js +0 -68
  36. package/dist/manager/functions/core/actions/api/user/get-active-sessions.js +0 -45
  37. package/dist/manager/functions/core/actions/api/user/get-subscription-info.js +0 -49
  38. package/dist/manager/functions/core/actions/api/user/oauth2/discord.js +0 -114
  39. package/dist/manager/functions/core/actions/api/user/oauth2/google.js +0 -99
  40. package/dist/manager/functions/core/actions/api/user/oauth2.js +0 -476
  41. package/dist/manager/functions/core/actions/api/user/regenerate-api-keys.js +0 -54
  42. package/dist/manager/functions/core/actions/api/user/resolve.js +0 -32
  43. package/dist/manager/functions/core/actions/api/user/sign-out-all-sessions.js +0 -118
  44. package/dist/manager/functions/core/actions/api/user/sign-up copy.js +0 -544
  45. package/dist/manager/functions/core/actions/api/user/sign-up.js +0 -99
  46. package/dist/manager/functions/core/actions/api/user/submit-feedback.js +0 -96
  47. package/dist/manager/functions/core/actions/api/user/validate-settings.js +0 -86
  48. package/dist/manager/functions/core/actions/api.js +0 -354
  49. package/dist/manager/functions/core/actions/create-post-handler.js +0 -184
  50. package/dist/manager/functions/core/actions/generate-uuid.js +0 -62
  51. package/dist/manager/functions/core/actions/sign-up-handler.js +0 -205
  52. package/dist/manager/functions/core/admin/create-post.js +0 -206
  53. package/dist/manager/functions/core/admin/firestore-write.js +0 -72
  54. package/dist/manager/functions/core/admin/get-stats.js +0 -218
  55. package/dist/manager/functions/core/admin/query.js +0 -198
  56. package/dist/manager/functions/core/admin/send-notification.js +0 -206
  57. package/dist/manager/functions/core/cron/daily/ghostii-auto-publisher.js +0 -377
  58. package/dist/manager/functions/core/cron/daily/reset-usage.js +0 -197
  59. package/dist/manager/functions/core/cron/daily.js +0 -114
  60. package/dist/manager/functions/core/events/auth/before-create.js +0 -124
  61. package/dist/manager/functions/core/events/auth/before-signin.js +0 -62
  62. package/dist/manager/functions/core/events/auth/on-create copy.js +0 -121
  63. package/dist/manager/functions/core/events/auth/on-create.js +0 -564
  64. package/dist/manager/functions/core/events/auth/on-delete.js +0 -72
  65. package/dist/manager/functions/core/events/firestore/on-subscription.js +0 -107
  66. package/dist/manager/functions/test/authenticate.js +0 -38
  67. package/dist/manager/functions/test/create-test-accounts.js +0 -144
  68. package/dist/manager/functions/test/webhook.js +0 -37
  69. package/dist/manager/functions/wrappers/mailchimp/addToList.js +0 -25
  70. package/dist/manager/helpers/analytics copy.js +0 -217
  71. package/dist/manager/helpers/analytics.js +0 -467
  72. package/dist/manager/helpers/api-manager.js +0 -324
  73. package/dist/manager/helpers/assistant.js +0 -1043
  74. package/dist/manager/helpers/metadata.js +0 -32
  75. package/dist/manager/helpers/middleware.js +0 -154
  76. package/dist/manager/helpers/roles.js +0 -69
  77. package/dist/manager/helpers/settings.js +0 -158
  78. package/dist/manager/helpers/subscription-resolver-new.js +0 -828
  79. package/dist/manager/helpers/subscription-resolver.js +0 -842
  80. package/dist/manager/helpers/usage.js +0 -381
  81. package/dist/manager/helpers/user.js +0 -198
  82. package/dist/manager/helpers/utilities.js +0 -292
  83. package/dist/manager/index.js +0 -1076
  84. package/dist/manager/libraries/openai.js +0 -460
  85. package/dist/manager/routes/restart/index.js +0 -52
  86. package/dist/manager/routes/test/index.js +0 -43
  87. package/dist/manager/schemas/restart.js +0 -13
  88. package/dist/manager/schemas/test.js +0 -13
  89. 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;