@rpcbase/server 0.299.0 → 0.301.0

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/express/index.js CHANGED
@@ -7,6 +7,7 @@ const Sentry = require("@sentry/node")
7
7
 
8
8
  // functionality middlewares
9
9
  const auth = require("../src/auth")
10
+ const api = require("../src/api")
10
11
  const sessions = require("../src/sessions")
11
12
 
12
13
  const dev_save_coverage = require("./dev_save_coverage")
@@ -78,6 +79,7 @@ module.exports = () => {
78
79
  app.post("/__ping", (req, res) => res.json({message: "pong"}))
79
80
 
80
81
  auth(app)
82
+ api(app)
81
83
 
82
84
  dev_save_coverage(app)
83
85
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/server",
3
- "version": "0.299.0",
3
+ "version": "0.301.0",
4
4
  "license": "SSPL-1.0",
5
5
  "main": "./index.js",
6
6
  "bin": {
@@ -0,0 +1,6 @@
1
+ /* @flow */
2
+ const stored_values = require("./stored-values")
3
+
4
+ module.exports = (app) => {
5
+ stored_values(app)
6
+ }
@@ -0,0 +1,37 @@
1
+ /* @flow */
2
+ const assert = require("assert")
3
+
4
+ const UserStoredValues = require("../../models/UserStoredValues")
5
+
6
+
7
+ const get_projection = (payload) => {
8
+ const projection = {}
9
+
10
+ payload.forEach((key) => {
11
+ projection[key] = 1
12
+ })
13
+
14
+ return projection
15
+ }
16
+
17
+
18
+ const get_stored_values = async(payload, ctx) => {
19
+ const {user_id} = ctx.req.session
20
+ expect(user_id).toBeMongoId()
21
+
22
+ const projection = get_projection(payload)
23
+
24
+ const storage_doc = await UserStoredValues.findOne({_owners: {$in: [user_id]}}, projection, {ctx})
25
+ assert(storage_doc, `unable to retrieve storage_doc for user: ${user_id}`)
26
+
27
+ const result = {
28
+ values: payload.map((k) => storage_doc.get(k)),
29
+ }
30
+
31
+ return {
32
+ status: "ok",
33
+ ...result,
34
+ }
35
+ }
36
+
37
+ module.exports = get_stored_values
@@ -0,0 +1,10 @@
1
+ /* @flow */
2
+ const handler_wrapper = require("../../helpers/handler_wrapper")
3
+
4
+ const get_stored_values = require("./get_stored_values")
5
+ const set_stored_values = require("./set_stored_values")
6
+
7
+ module.exports = (app) => {
8
+ app.post("/api/v1/stored-values/get", handler_wrapper(get_stored_values))
9
+ app.post("/api/v1/stored-values/set", handler_wrapper(set_stored_values))
10
+ }
@@ -0,0 +1,31 @@
1
+ /* @flow */
2
+ const assert = require("assert")
3
+
4
+ const UserStoredValues = require("../../models/UserStoredValues")
5
+
6
+
7
+ const set_stored_values = async(payload, ctx) => {
8
+ const {values} = payload
9
+
10
+ const {user_id} = ctx.req.session
11
+ expect(user_id).toBeMongoId()
12
+
13
+ const updates = Object.create(null)
14
+
15
+ values.forEach(({key, value}) => {
16
+ updates[key] = value
17
+ })
18
+
19
+ const res = await UserStoredValues.updateOne(
20
+ {_owners: {$in: [user_id]}},
21
+ {$set: updates},
22
+ {ctx}
23
+ )
24
+
25
+ console.log("LA RES UPDATE", res)
26
+ // assert(res.updatedCount === 1, `unable to update user stored values`)
27
+
28
+ return {status: "ok"}
29
+ }
30
+
31
+ module.exports = set_stored_values
@@ -2,9 +2,12 @@
2
2
  const {hash_password} = require("@rpcbase/std/crypto/hash")
3
3
 
4
4
  const get_object_id = require("../../get_object_id")
5
-
6
5
  const mongoose = require("../../mongoose")
7
6
 
7
+ const UserStoredValues = require("../models/UserStoredValues")
8
+
9
+
10
+
8
11
  const MIN_PASSWORD_LENGTH = 12
9
12
 
10
13
  const sign_up = async(payload, ctx, session) => {
@@ -42,13 +45,17 @@ const sign_up = async(payload, ctx, session) => {
42
45
  password_hash: hash
43
46
  })
44
47
 
48
+
45
49
  // sign the user in
46
50
  const user_id = user._id.toString()
47
51
 
52
+ const values_store = new UserStoredValues({_owners: [user_id]})
53
+
48
54
  // WARNING: it is now the responsibility of the app to add user.save with session
49
- // await user.save({ctx})
55
+ // await user.save({ctx, session})
56
+ // await values_store.save({ctx, session})
50
57
 
51
- return user
58
+ return {user, values_store}
52
59
  }
53
60
 
54
61
  module.exports = sign_up
@@ -0,0 +1,18 @@
1
+ /* @flow */
2
+ const mongoose = require("../../mongoose")
3
+
4
+ const UserStoredValuesSchema = new mongoose.Schema({
5
+ _owners: {
6
+ type: Array,
7
+ required: true,
8
+ index: true,
9
+ default: undefined,
10
+ },
11
+ }, {
12
+ strict: false,
13
+ versionKey: false,
14
+ })
15
+
16
+ const model = mongoose.model("UserStoredValues", UserStoredValuesSchema, "userstoredvalues")
17
+
18
+ module.exports = model