@joystick.js/node-canary 0.0.0-canary.65 → 0.0.0-canary.66

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
@@ -39,6 +39,7 @@
39
39
  "node-html-parser": "^5.1.0",
40
40
  "nodemailer": "^6.7.0",
41
41
  "pg": "^8.7.3",
42
+ "pg-escape": "^0.2.0",
42
43
  "process": "^0.11.10",
43
44
  "query-string": "^7.0.1",
44
45
  "sanitize-html": "^2.7.3",
@@ -0,0 +1,12 @@
1
+ import escape from "pg-escape";
2
+ var createMetadataTableColumns_default = async (usersDatabase = "", sqlizedMetadata = {}) => {
3
+ if (usersDatabase === "postgresql") {
4
+ const columns = Object.keys(sqlizedMetadata);
5
+ for (let i = 0; i < columns?.length; i += 1) {
6
+ await process.databases.postgresql.query(escape(`ALTER TABLE users ADD COLUMN IF NOT EXISTS %I TEXT;`, columns[i]));
7
+ }
8
+ }
9
+ };
10
+ export {
11
+ createMetadataTableColumns_default as default
12
+ };
@@ -6,6 +6,9 @@ import { isObject } from "../../validation/lib/typeValidators";
6
6
  import getOutput from "../getOutput";
7
7
  import typesMap from "../databases/typesMap";
8
8
  import getTargetDatabaseProvider from "../databases/getTargetDatabaseProvider.js";
9
+ import stringToSnakeCase from "../databases/stringToSnakeCase.js";
10
+ import createMetadataTableColumns from "./createMetadataTableColumns.js";
11
+ import roles from "./roles/index.js";
9
12
  const addSessionToUser = (userId = null, session = null) => {
10
13
  try {
11
14
  return runUserQuery("addSession", { userId, session });
@@ -27,6 +30,16 @@ const insertUserInDatabase = async (user = {}) => {
27
30
  throw new Error(formatErrorString("signup.insertUserInDatabase", exception));
28
31
  }
29
32
  };
33
+ const sqlizeMetadata = (metadata = {}) => {
34
+ try {
35
+ return Object.entries(metadata).reduce((sqlized = {}, [key, value]) => {
36
+ sqlized[stringToSnakeCase(key)] = value;
37
+ return sqlized;
38
+ }, {});
39
+ } catch (exception) {
40
+ throw new Error(`[actionName.sqlizeMetadata] ${exception.message}`);
41
+ }
42
+ };
30
43
  const getUserToCreate = async (options = {}) => {
31
44
  try {
32
45
  const usersDatabase = getTargetDatabaseProvider("users");
@@ -40,12 +53,19 @@ const getUserToCreate = async (options = {}) => {
40
53
  if (options?.username) {
41
54
  user.username = options?.username;
42
55
  }
43
- if (options?.metadata && isObject(options.metadata) && usersDatabaseType === "sql" && options?.metadata?.language) {
44
- user.language = options?.metadata?.language;
56
+ if (options?.metadata && isObject(options.metadata) && usersDatabaseType === "sql") {
57
+ const sqlizedMetadata = sqlizeMetadata(options.metadata);
58
+ await createMetadataTableColumns(usersDatabase, sqlizedMetadata);
59
+ const { roles: [], ...restOfMetadata } = options?.metadata;
60
+ user = {
61
+ ...sqlizeMetadata(restOfMetadata),
62
+ ...user
63
+ };
45
64
  }
46
65
  if (options?.metadata && isObject(options.metadata) && usersDatabaseType === "nosql") {
66
+ const { roles: [], ...restOfMetadata } = options?.metadata;
47
67
  user = {
48
- ...options.metadata,
68
+ ...restOfMetadata || {},
49
69
  ...user
50
70
  };
51
71
  }
@@ -78,7 +98,13 @@ const signup = async (options, { resolve, reject }) => {
78
98
  const user = await getUserByUserId(userId);
79
99
  const session = generateSession();
80
100
  if (user?._id || user?.user_id) {
81
- await addSessionToUser(user._id || user?.user_id, session);
101
+ await addSessionToUser(user?._id || user?.user_id, session);
102
+ }
103
+ if (options?.metadata?.roles?.length > 0 && process.env.NODE_ENV === "test") {
104
+ for (let i = 0; i < options?.metadata?.roles?.length; i += 1) {
105
+ const role = options?.metadata?.roles[i];
106
+ roles.grant(user?._id || user?.user_id, role);
107
+ }
82
108
  }
83
109
  return resolve({
84
110
  ...session,
@@ -0,0 +1,6 @@
1
+ var stringToSnakeCase_default = (string = "") => {
2
+ return string?.split(/\.?(?=[A-Z])/).join("_").toLowerCase();
3
+ };
4
+ export {
5
+ stringToSnakeCase_default as default
6
+ };
package/dist/app/index.js CHANGED
@@ -462,11 +462,20 @@ class App {
462
462
  metadata: req?.body?.metadata,
463
463
  output: req?.body?.output || defaultUserOutputFields
464
464
  });
465
- accounts._setAuthenticationCookie(res, {
466
- token: signup?.token,
467
- tokenExpiresAt: signup?.tokenExpiresAt
468
- });
469
- res.status(200).send(JSON.stringify(signup?.user || {}));
465
+ if (!process.env.NODE_ENV !== "test") {
466
+ accounts._setAuthenticationCookie(res, {
467
+ token: signup?.token,
468
+ tokenExpiresAt: signup?.tokenExpiresAt
469
+ });
470
+ }
471
+ const response = {
472
+ ...signup?.user || {}
473
+ };
474
+ if (process.env.NODE_ENV === "test") {
475
+ response.joystickToken = signup?.token;
476
+ response.joystickLoginTokenExpiresAt = signup?.tokenExpiresAt;
477
+ }
478
+ res.status(200).send(JSON.stringify(response));
470
479
  } catch (exception) {
471
480
  console.log(exception);
472
481
  return res.status(500).send(JSON.stringify({
@@ -482,11 +491,20 @@ class App {
482
491
  password: req?.body?.password,
483
492
  output: req?.body?.output || defaultUserOutputFields
484
493
  });
485
- accounts._setAuthenticationCookie(res, {
486
- token: login?.token,
487
- tokenExpiresAt: login?.tokenExpiresAt
488
- });
489
- res.status(200).send(JSON.stringify(login?.user || {}));
494
+ if (!process.env.NODE_ENV !== "test") {
495
+ accounts._setAuthenticationCookie(res, {
496
+ token: login?.token,
497
+ tokenExpiresAt: login?.tokenExpiresAt
498
+ });
499
+ }
500
+ const response = {
501
+ ...login?.user || {}
502
+ };
503
+ if (process.env.NODE_ENV === "test") {
504
+ response.joystickToken = login?.token;
505
+ response.joystickLoginTokenExpiresAt = login?.tokenExpiresAt;
506
+ }
507
+ res.status(200).send(JSON.stringify(response));
490
508
  } catch (exception) {
491
509
  console.log(exception);
492
510
  return res.status(500).send(JSON.stringify({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joystick.js/node-canary",
3
- "version": "0.0.0-canary.65",
3
+ "version": "0.0.0-canary.66",
4
4
  "type": "module",
5
5
  "description": "A Node.js framework for building web apps.",
6
6
  "main": "./dist/index.js",