backend-manager 3.0.62 → 3.0.63

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "backend-manager",
3
- "version": "3.0.62",
3
+ "version": "3.0.63",
4
4
  "description": "Quick tools for developing Firebase functions",
5
5
  "main": "src/manager/index.js",
6
6
  "bin": {
@@ -23,7 +23,7 @@ Module.prototype.main = function () {
23
23
  // Get auth user from firebase
24
24
  const ip = assistant.request.geolocation.ip;
25
25
  const authUser = await Manager.libraries.admin.auth().getUser(user.auth.uid).catch(e => e);
26
- const usage = await Manager.Usage().init(assistant, {log: true, localKey: ip});
26
+ const usage = await Manager.Usage().init(assistant, {log: true, key: ip});
27
27
 
28
28
  if (authUser instanceof Error) {
29
29
  return reject(assistant.errorManager(`Failed to get auth user: ${authUser}`, {code: 500, sentry: false, send: false, log: false}).error)
@@ -31,6 +31,8 @@ Module.prototype.main = function () {
31
31
 
32
32
  assistant.log(`Request: ${user.uid}`, user, context);
33
33
 
34
+ // TODO: ⛔️⛔️⛔️ UTILIZE THE NEW .usage() system (similar to src/manager/functions/core/actions/api/user/sign-up.js)
35
+
34
36
  // if (context.additionalUserInfo.recaptchaScore < 0.5) {
35
37
  // assistant.error(`Recaptcha score (${context.additionalUserInfo.recaptchaScore}) too low for ${user.uid}`);
36
38
 
@@ -41,7 +41,8 @@ Usage.prototype.init = function (assistant, options) {
41
41
  options.refetch = typeof options.refetch === 'undefined' ? false : options.refetch;
42
42
  options.clear = typeof options.clear === 'undefined' ? false : options.clear;
43
43
  options.today = typeof options.today === 'undefined' ? undefined : options.today;
44
- options.localKey = typeof options.localKey === 'undefined' ? undefined : options.localKey;
44
+ options.key = typeof options.key === 'undefined' ? undefined : options.key;
45
+ options.unauthenticatedMode = typeof options.unauthenticatedMode === 'undefined' ? 'firestore' : options.unauthenticatedMode;
45
46
  options.log = typeof options.log === 'undefined' ? false : options.log;
46
47
 
47
48
  // Check for required options
@@ -59,11 +60,11 @@ Usage.prototype.init = function (assistant, options) {
59
60
  self.storage = Manager.storage({name: 'usage', temporary: true, clear: options.clear, log: options.log});
60
61
 
61
62
  // Set local key
62
- const localKey = (options.localKey || self.assistant.request.geolocation.ip || '')
63
+ self.key = (options.key || self.assistant.request.geolocation.ip || '')
63
64
  .replace(/[\.:]/g, '_');
64
65
 
65
66
  // Set paths
66
- self.paths.user = `users.${localKey}`;
67
+ self.paths.user = `users.${self.key}`;
67
68
  self.paths.app = `apps.${options.app}`;
68
69
 
69
70
  // Get storage data
@@ -73,10 +74,26 @@ Usage.prototype.init = function (assistant, options) {
73
74
  // Authenticate user (user will be resolved as well)
74
75
  self.user = await assistant.authenticate();
75
76
 
76
- // Replce with local if no user
77
- if (!self.user.auth.uid) {
78
- const existingLocal = self.storage.get(self.paths.user, {}).value();
79
- self.user.usage = existingLocal && existingLocal.usage ? existingLocal.usage : self.user.usage;
77
+ self.useUnauthenticatedStorage = !self.user.auth.uid || self.options.key;
78
+
79
+ // Load usage with temporary if unauthenticated
80
+ if (self.useUnauthenticatedStorage) {
81
+ let foundUsage;
82
+
83
+ if (options.unauthenticatedMode === 'firestore') {
84
+ foundUsage = await Manager.libraries.admin.firestore().doc(`temporary/usage`)
85
+ .get()
86
+ .then((r) => {
87
+ return r.data()?.[`${self.key}`];
88
+ })
89
+ .catch((e) => {
90
+ assistant.errorManager(`Usage.init(): Error fetching usage data: ${e}`, {sentry: true, send: false, log: true});
91
+ });
92
+ } else {
93
+ foundUsage = self.storage.get(`${self.paths.user}.usage`, {}).value();
94
+ }
95
+
96
+ self.user.usage = foundUsage ? foundUsage : self.user.usage;
80
97
  }
81
98
 
82
99
  // Log
@@ -209,7 +226,7 @@ Usage.prototype.set = function (path, value) {
209
226
  const assistant = self.assistant;
210
227
 
211
228
  // Update total and period
212
- const resolved = `usage.${path}.${key}`;
229
+ const resolved = `usage.${path}.period`;
213
230
 
214
231
  value = value || 0;
215
232
 
@@ -245,11 +262,29 @@ Usage.prototype.update = function () {
245
262
  const Manager = self.Manager;
246
263
  const assistant = self.assistant;
247
264
 
248
- // Write self.user to firestore or local if no user or if localKey is set
249
- if (
250
- self.user.auth.uid
251
- && !self.options.localKey
252
- ) {
265
+ // Write self.user to firestore or local if no user or if key is set
266
+ if (self.useUnauthenticatedStorage) {
267
+ if (self.options.unauthenticatedMode === 'firestore') {
268
+ Manager.libraries.admin.firestore().doc(`temporary/usage`)
269
+ .set({
270
+ [`${self.key}`]: self.user.usage,
271
+ }, {merge: true})
272
+ .then(() => {
273
+ self.log(`Usage.update(): Updated user.usage in firestore`, self.user.usage);
274
+
275
+ return resolve();
276
+ })
277
+ .catch(e => {
278
+ return reject(assistant.errorManager(e, {sentry: true, send: false, log: false}));
279
+ });
280
+ } else {
281
+ self.storage.set(`${self.paths.user}.usage`, self.user.usage).write();
282
+
283
+ self.log(`Usage.update(): Updated user.usage in local storage`, self.user.usage);
284
+
285
+ return resolve();
286
+ }
287
+ } else {
253
288
  Manager.libraries.admin.firestore().doc(`users/${self.user.auth.uid}`)
254
289
  .set({
255
290
  usage: self.user.usage,
@@ -262,12 +297,6 @@ Usage.prototype.update = function () {
262
297
  .catch(e => {
263
298
  return reject(assistant.errorManager(e, {sentry: true, send: false, log: false}));
264
299
  });
265
- } else {
266
- self.storage.set(`${self.paths.user}.usage`, self.user.usage).write();
267
-
268
- self.log(`Usage.update(): Updated user.usage in local storage`, self.user.usage);
269
-
270
- return resolve();
271
300
  }
272
301
  });
273
302
  };