@paralect/hive 0.0.27 → 0.1.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/cli/hive.js +31 -117
- package/package.json +3 -2
- package/starter/package-lock.json +2655 -2357
- package/starter/package.json +40 -35
- package/starter/src/app-config/app.js +1 -1
- package/starter/src/app-config/assertEnv.js +3 -3
- package/starter/src/app-config/index.js +16 -25
- package/starter/src/app.js +32 -34
- package/starter/src/autoMap/addHandlers.js +6 -40
- package/starter/src/autoMap/mapSchema.js +5 -34
- package/starter/src/autoMap/schemaMappings.js +1 -1
- package/starter/src/bullMqBus.js +4 -4
- package/starter/src/{bullMq.js → bullMqWrapper.js} +3 -4
- package/starter/src/db.js +28 -36
- package/starter/src/emails/MyEmailComponent.jsx +1 -3
- package/starter/src/emails/compiled/MyEmailComponent.js +5 -4
- package/starter/src/emails/compiled/compiled/MyEmailComponent.js +18 -0
- package/starter/src/helpers/db/ifUpdated.js +2 -2
- package/starter/src/helpers/getResourceEndpoints.js +3 -3
- package/starter/src/helpers/getResources.js +4 -4
- package/starter/src/helpers/getSchemas.js +7 -8
- package/starter/src/helpers/prettierFormat.js +2 -2
- package/starter/src/ioEmitter.js +4 -5
- package/starter/src/lib/node-mongo/package-lock.json +3682 -0
- package/starter/src/lib/node-mongo/src/index.js +7 -22
- package/starter/src/lib/node-mongo/src/mongo-query-service.js +3 -4
- package/starter/src/lib/node-mongo/src/mongo-service-error.js +1 -1
- package/starter/src/lib/node-mongo/src/mongo-service.js +6 -8
- package/starter/src/logger.js +3 -3
- package/starter/src/middlewares/global/extractUserTokens.js +1 -1
- package/starter/src/middlewares/global/tryToAttachUser.js +4 -3
- package/starter/src/middlewares/isAuthorized.js +6 -4
- package/starter/src/middlewares/shouldExist.js +2 -2
- package/starter/src/middlewares/shouldNotExist.js +3 -3
- package/starter/src/middlewares/uploadFile.js +2 -2
- package/starter/src/middlewares/validate.js +24 -31
- package/starter/src/migrations/migration.js +1 -1
- package/starter/src/migrations/migration.service.js +9 -11
- package/starter/src/migrations/migrations/1.js +2 -2
- package/starter/src/migrations/migrations-log/migration-log.schema.js +14 -13
- package/starter/src/migrations/migrations-log/migration-log.service.js +3 -4
- package/starter/src/migrations/migrations.schema.js +8 -7
- package/starter/src/migrations/migrator.js +6 -8
- package/starter/src/migrator.js +4 -5
- package/starter/src/resources/_dev/endpoints/triggerSchedulerHandler.js +6 -6
- package/starter/src/resources/health/endpoints/get.js +9 -7
- package/starter/src/resources/schemaMappings/schemaMappings.schema.js +6 -6
- package/starter/src/resources/tokens/methods/generateSecureToken.js +3 -3
- package/starter/src/resources/tokens/methods/setToken.js +3 -2
- package/starter/src/resources/tokens/methods/storeToken.js +6 -5
- package/starter/src/resources/tokens/tokens.schema.js +11 -11
- package/starter/src/resources/users/endpoints/getCurrentUser.js +6 -6
- package/starter/src/resources/users/endpoints/getUserProfile.js +8 -6
- package/starter/src/resources/users/methods/ensureUserCreated.js +5 -4
- package/starter/src/resources/users/users.schema.js +13 -14
- package/starter/src/routes/index.js +34 -54
- package/starter/src/routes/middlewares/attachCustomErrors.js +2 -2
- package/starter/src/routes/middlewares/routeErrorHandler.js +3 -3
- package/starter/src/scheduler/handlers/sendDailyReport.example.js +3 -3
- package/starter/src/scheduler.js +18 -18
- package/starter/src/security.util.js +6 -6
- package/starter/src/services/emailService.js +4 -4
- package/starter/src/services/setCookie.js +5 -6
- package/starter/src/socketIo.js +9 -12
- package/starter/tsconfig.json +27 -0
|
@@ -1,26 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const MongoQueryService = require("./mongo-query-service");
|
|
6
|
-
|
|
1
|
+
import monk from "monk";
|
|
2
|
+
import _ from "lodash";
|
|
3
|
+
import MongoService from "./mongo-service.js";
|
|
4
|
+
import MongoQueryService from "./mongo-query-service.js";
|
|
7
5
|
const logger = global.logger || console;
|
|
8
|
-
|
|
9
6
|
const connect = (connectionString, settings) => {
|
|
10
7
|
const connectionSettings = _.defaults({}, settings, {
|
|
11
8
|
connectTimeoutMS: 20000,
|
|
12
9
|
});
|
|
13
10
|
const db = monk(connectionString, connectionSettings);
|
|
14
|
-
|
|
15
11
|
db.on("error-opening", (err) => {
|
|
16
12
|
logger.error(err, "Failed to connect to the mongodb on start");
|
|
17
13
|
throw err;
|
|
18
14
|
});
|
|
19
|
-
|
|
20
15
|
db.on("open", () => {
|
|
21
|
-
logger.info(`Connected to mongodb`);
|
|
16
|
+
logger.info(`Connected to mongodb: ${connectionString}`);
|
|
22
17
|
});
|
|
23
|
-
|
|
24
18
|
db.on("close", (err) => {
|
|
25
19
|
if (err) {
|
|
26
20
|
logger.error(err, `Lost connection with mongodb: ${connectionString}`);
|
|
@@ -28,40 +22,31 @@ const connect = (connectionString, settings) => {
|
|
|
28
22
|
logger.warn(`Closed connection with mongodb: ${connectionString}`);
|
|
29
23
|
}
|
|
30
24
|
});
|
|
31
|
-
|
|
32
25
|
db.on("connected", (err) => {
|
|
33
26
|
if (err) {
|
|
34
27
|
logger.error(err);
|
|
35
28
|
} else {
|
|
36
|
-
logger.info(`Connected to mongodb`);
|
|
29
|
+
logger.info(`Connected to mongodb: ${connectionString}`);
|
|
37
30
|
}
|
|
38
31
|
});
|
|
39
|
-
|
|
40
32
|
db.createService = (collectionName, options = {}) => {
|
|
41
33
|
const collection = db.get(collectionName, { castIds: false });
|
|
42
|
-
|
|
43
34
|
return new MongoService(collection, options);
|
|
44
35
|
};
|
|
45
|
-
|
|
46
36
|
db.setServiceMethod = (name, method) => {
|
|
47
37
|
MongoService.prototype[name] = function customMethod(...args) {
|
|
48
38
|
return method.apply(this, [this, ...args]);
|
|
49
39
|
};
|
|
50
40
|
};
|
|
51
|
-
|
|
52
41
|
db.createQueryService = (collectionName, options = {}) => {
|
|
53
42
|
const collection = db.get(collectionName, { castIds: false });
|
|
54
|
-
|
|
55
43
|
return new MongoQueryService(collection, options);
|
|
56
44
|
};
|
|
57
|
-
|
|
58
45
|
db.setQueryServiceMethod = (name, method) => {
|
|
59
46
|
MongoQueryService.prototype[name] = function customMethod(...args) {
|
|
60
47
|
return method.apply(this, [this, ...args]);
|
|
61
48
|
};
|
|
62
49
|
};
|
|
63
|
-
|
|
64
50
|
return db;
|
|
65
51
|
};
|
|
66
|
-
|
|
67
|
-
module.exports.connect = connect;
|
|
52
|
+
export { connect };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const MongoServiceError = require("./mongo-service-error");
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import MongoServiceError from './mongo-service-error';
|
|
4
3
|
|
|
5
4
|
class MongoQueryService {
|
|
6
5
|
constructor(collection, options = {}) {
|
|
@@ -69,4 +68,4 @@ class MongoQueryService {
|
|
|
69
68
|
}
|
|
70
69
|
}
|
|
71
70
|
|
|
72
|
-
|
|
71
|
+
export default MongoQueryService;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const MongoServiceError = require("./mongo-service-error");
|
|
1
|
+
import monk from 'monk';
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import _ from 'lodash';
|
|
4
|
+
import MongoQueryService from './mongo-query-service';
|
|
5
|
+
import MongoServiceError from './mongo-service-error';
|
|
7
6
|
|
|
8
7
|
const defaultOptions = {
|
|
9
8
|
addCreatedOnField: true,
|
|
@@ -109,7 +108,6 @@ class MongoService extends MongoQueryService {
|
|
|
109
108
|
}
|
|
110
109
|
|
|
111
110
|
on(eventName, handler) {
|
|
112
|
-
console.log("this._bus.on(`${this._collection.name}:${eventName}`, handler);", `${this._collection.name}:${eventName}`);
|
|
113
111
|
return this._bus.on(`${this._collection.name}:${eventName}`, handler);
|
|
114
112
|
}
|
|
115
113
|
|
|
@@ -284,4 +282,4 @@ class MongoService extends MongoQueryService {
|
|
|
284
282
|
}
|
|
285
283
|
}
|
|
286
284
|
|
|
287
|
-
|
|
285
|
+
export default MongoService;
|
package/starter/src/logger.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
import config from 'app-config';
|
|
3
3
|
|
|
4
4
|
const colorizer = winston.format.colorize();
|
|
5
5
|
|
|
@@ -27,4 +27,4 @@ const createConsoleLogger = () => {
|
|
|
27
27
|
return logger;
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
export default createConsoleLogger();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
const
|
|
1
|
+
import db from 'db';
|
|
2
|
+
const userService = db.services.users;
|
|
3
|
+
const tokenService = db.services.tokens;
|
|
3
4
|
|
|
4
5
|
const storeTokenToState = async (ctx) => {
|
|
5
6
|
let accessToken = ctx.cookies.get("access_token");
|
|
@@ -29,4 +30,4 @@ const tryToAttachUser = async (ctx, next) => {
|
|
|
29
30
|
return next();
|
|
30
31
|
};
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
export default tryToAttachUser;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import db from 'db';
|
|
2
|
+
import config from 'app-config';
|
|
3
|
+
|
|
4
|
+
const userService = db.services.users;
|
|
5
|
+
const tokenService = db.services.tokens;
|
|
4
6
|
|
|
5
7
|
const storeTokenToState = async (ctx) => {
|
|
6
8
|
let accessToken = ctx.cookies.get('access_token');
|
|
@@ -18,7 +20,7 @@ const storeTokenToState = async (ctx) => {
|
|
|
18
20
|
ctx.state.accessToken = accessToken;
|
|
19
21
|
};
|
|
20
22
|
|
|
21
|
-
|
|
23
|
+
export default async (ctx, next) => {
|
|
22
24
|
storeTokenToState(ctx);
|
|
23
25
|
|
|
24
26
|
let token;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import db from 'db';
|
|
2
2
|
|
|
3
3
|
function singularize(word) {
|
|
4
4
|
const endings = {
|
|
@@ -16,7 +16,7 @@ function singularize(word) {
|
|
|
16
16
|
);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
export default (
|
|
20
20
|
resourceName,
|
|
21
21
|
{
|
|
22
22
|
criteria = (ctx) => ({ _id: ctx.params[`${singularize(resourceName)}Id`] }),
|
|
@@ -1,39 +1,32 @@
|
|
|
1
|
-
const Joi = require("joi");
|
|
2
1
|
|
|
3
|
-
|
|
2
|
+
const formatError = (zodError) => {
|
|
4
3
|
const errors = {};
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
const key = error.path.join(
|
|
8
|
-
|
|
9
|
-
errors[key]
|
|
5
|
+
zodError.issues.forEach((error) => {
|
|
6
|
+
const key = error.path.join('.');
|
|
7
|
+
|
|
8
|
+
if (!errors[key]) {
|
|
9
|
+
errors[key] = [];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
(errors[key]).push(error.message);
|
|
10
13
|
});
|
|
11
14
|
|
|
12
15
|
return errors;
|
|
13
|
-
}
|
|
16
|
+
};
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
const validate = (schema) => async (ctx, next) => {
|
|
19
|
+
const result = await schema.safeParseAsync({
|
|
20
|
+
...(ctx.request.body),
|
|
21
|
+
...ctx.query,
|
|
22
|
+
...ctx.params,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
if (!result.success) ctx.throw(400, { clientErrors: formatError(result.error) });
|
|
26
|
+
|
|
27
|
+
ctx.validatedData = result.data;
|
|
28
|
+
|
|
29
|
+
await next();
|
|
30
|
+
};
|
|
20
31
|
|
|
21
|
-
|
|
22
|
-
{
|
|
23
|
-
...ctx.request.body,
|
|
24
|
-
...ctx.query,
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
abortEarly: false,
|
|
28
|
-
allowUnknown: true,
|
|
29
|
-
}
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
if (error) ctx.throw(400, { errors: formatError(error) });
|
|
33
|
-
|
|
34
|
-
ctx.validatedData = value;
|
|
35
|
-
await next();
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
module.exports = validate;
|
|
32
|
+
export default validate;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import db from "db";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import _ from "lodash";
|
|
5
|
+
import validateSchema from "./migrations.schema";
|
|
6
6
|
|
|
7
7
|
const service = db.createService("__migrationVersion", {
|
|
8
8
|
validate: validateSchema,
|
|
9
9
|
});
|
|
10
|
+
|
|
10
11
|
const migrationsPath = path.join(__dirname, "migrations");
|
|
12
|
+
|
|
11
13
|
const _id = "migration_version";
|
|
12
14
|
|
|
13
15
|
const getMigrationNames = () =>
|
|
@@ -26,21 +28,18 @@ service.getCurrentMigrationVersion = () =>
|
|
|
26
28
|
if (!doc) {
|
|
27
29
|
return 0;
|
|
28
30
|
}
|
|
29
|
-
|
|
30
31
|
return doc.version;
|
|
31
32
|
});
|
|
32
33
|
|
|
33
34
|
service.getMigrations = () => {
|
|
34
35
|
let migrations = null;
|
|
35
|
-
|
|
36
36
|
return getMigrationNames()
|
|
37
37
|
.then((names) => {
|
|
38
38
|
migrations = names.map((name) => {
|
|
39
39
|
const migrationPath = path.join(migrationsPath, name);
|
|
40
40
|
// eslint-disable-next-line import/no-dynamic-require, global-require
|
|
41
|
-
return require(migrationPath);
|
|
41
|
+
// return require(migrationPath);
|
|
42
42
|
});
|
|
43
|
-
|
|
44
43
|
return migrations;
|
|
45
44
|
})
|
|
46
45
|
.catch((err) => {
|
|
@@ -64,7 +63,6 @@ service.setNewMigrationVersion = (version) =>
|
|
|
64
63
|
|
|
65
64
|
service.promiseLimit = (documents = [], limit, operator) => {
|
|
66
65
|
const chunks = _.chunk(documents, limit);
|
|
67
|
-
|
|
68
66
|
return chunks.reduce((init, chunk) => {
|
|
69
67
|
return init.then(() => {
|
|
70
68
|
return Promise.all(chunk.map((c) => operator(c)));
|
|
@@ -72,4 +70,4 @@ service.promiseLimit = (documents = [], limit, operator) => {
|
|
|
72
70
|
}, Promise.resolve());
|
|
73
71
|
};
|
|
74
72
|
|
|
75
|
-
|
|
73
|
+
export default service;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import Migration from 'migrations/migration';
|
|
2
2
|
// const migrationService = require('migrations/migration.service');
|
|
3
3
|
//
|
|
4
4
|
// const userService = require('resources/user/user.service');
|
|
@@ -19,4 +19,4 @@ migration.migrate = async () => {
|
|
|
19
19
|
// ));
|
|
20
20
|
};
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
export default migration;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
|
|
3
|
-
const schema =
|
|
4
|
-
_id:
|
|
5
|
-
createdOn:
|
|
6
|
-
updatedOn:
|
|
7
|
-
startTime:
|
|
8
|
-
finishTime:
|
|
9
|
-
status:
|
|
10
|
-
error:
|
|
11
|
-
errorStack:
|
|
12
|
-
duration:
|
|
13
|
-
migrationVersion:
|
|
3
|
+
const schema = z.object({
|
|
4
|
+
_id: z.string(),
|
|
5
|
+
createdOn: z.date(),
|
|
6
|
+
updatedOn: z.date(),
|
|
7
|
+
startTime: z.date(),
|
|
8
|
+
finishTime: z.date().optional(),
|
|
9
|
+
status: z.string(),
|
|
10
|
+
error: z.string().optional(),
|
|
11
|
+
errorStack: z.string().optional(),
|
|
12
|
+
duration: z.string().optional(),
|
|
13
|
+
migrationVersion: z.number(),
|
|
14
14
|
});
|
|
15
|
-
|
|
15
|
+
|
|
16
|
+
export default schema;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const validateSchema = require("./migration-log.schema.js");
|
|
1
|
+
import db from 'db';
|
|
2
|
+
import validateSchema from './migration-log.schema.js';
|
|
4
3
|
|
|
5
4
|
const service = db.createService("__migrationLog", {
|
|
6
5
|
validate: validateSchema,
|
|
@@ -48,4 +47,4 @@ service.finishMigrationLog = (_id, finishTime, duration) =>
|
|
|
48
47
|
}
|
|
49
48
|
);
|
|
50
49
|
|
|
51
|
-
|
|
50
|
+
export default service;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
|
|
3
|
-
const schema =
|
|
4
|
-
_id:
|
|
5
|
-
createdOn:
|
|
6
|
-
updatedOn:
|
|
7
|
-
version:
|
|
3
|
+
const schema = z.object({
|
|
4
|
+
_id: z.string(),
|
|
5
|
+
createdOn: z.date(),
|
|
6
|
+
updatedOn: z.date(),
|
|
7
|
+
version: z.number(),
|
|
8
8
|
});
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
export default schema;
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const migrationLogService = require("./migrations-log/migration-log.service");
|
|
7
|
-
const migrationService = require("./migration.service");
|
|
1
|
+
import 'moment-duration-format';
|
|
2
|
+
import moment from 'moment';
|
|
3
|
+
import logger from 'logger';
|
|
4
|
+
import migrationLogService from './migrations-log/migration-log.service';
|
|
5
|
+
import migrationService from './migration.service';
|
|
8
6
|
|
|
9
7
|
const migrator = {};
|
|
10
8
|
|
|
@@ -74,4 +72,4 @@ migrator.exec = async () => {
|
|
|
74
72
|
process.exit(0);
|
|
75
73
|
};
|
|
76
74
|
|
|
77
|
-
|
|
75
|
+
export default migrator;
|
package/starter/src/migrator.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
migrator.exec();
|
|
1
|
+
import appModulePath from "app-module-path";
|
|
2
|
+
import migrator from "migrations/migrator";
|
|
3
|
+
appModulePath.addPath(__dirname);
|
|
4
|
+
migrator.exec();
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
export const endpoint = {
|
|
4
4
|
method: "put",
|
|
5
5
|
url: "/trigger-scheduler-handler",
|
|
6
6
|
};
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
name:
|
|
8
|
+
export const requestSchema = {
|
|
9
|
+
name: z.string(),
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
export const handler = async (ctx) => {
|
|
13
13
|
const { name } = ctx.validatedData;
|
|
14
14
|
|
|
15
|
-
const schedulerHandler =
|
|
15
|
+
const schedulerHandler = await (import(`scheduler/handlers/${name}`)).default;
|
|
16
16
|
|
|
17
17
|
try {
|
|
18
18
|
const data = await schedulerHandler.handler();
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { render } from '@react-email/render';
|
|
2
|
+
import { MyEmailComponent } from 'emails/compiled/MyEmailComponent';
|
|
3
|
+
import React from 'react';
|
|
4
4
|
|
|
5
|
-
const handler = (ctx) => {
|
|
5
|
+
export const handler = (ctx) => {
|
|
6
6
|
const emailHtml = render(React.createElement(MyEmailComponent, { name: 'test' }));
|
|
7
7
|
|
|
8
8
|
ctx.body = emailHtml;
|
|
9
9
|
ctx.status = 200;
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
module.exports.endpoint = {
|
|
12
|
+
export const endpoint = {
|
|
15
13
|
method: "get",
|
|
16
14
|
url: "/",
|
|
17
15
|
};
|
|
16
|
+
|
|
17
|
+
export default {
|
|
18
|
+
handler, endpoint
|
|
19
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
_id:
|
|
5
|
-
createdOn:
|
|
6
|
-
updatedOn:
|
|
3
|
+
export default z.object({
|
|
4
|
+
_id: z.string(),
|
|
5
|
+
createdOn: z.date(),
|
|
6
|
+
updatedOn: z.date(),
|
|
7
7
|
|
|
8
|
-
mappings:
|
|
8
|
+
mappings: z.object(),
|
|
9
9
|
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
import util from 'util';
|
|
3
3
|
|
|
4
4
|
const randomBytes = util.promisify(crypto.randomBytes, crypto);
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
export default async (tokenLength = 32) => {
|
|
7
7
|
const buf = await randomBytes(tokenLength);
|
|
8
8
|
return buf.toString('hex');
|
|
9
9
|
};
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import db from 'db';
|
|
2
|
+
import crypto from 'crypto';
|
|
3
|
+
import util from 'util';
|
|
3
4
|
|
|
4
5
|
const randomBytes = util.promisify(crypto.randomBytes, crypto);
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
import setCookie from 'services/setCookie';
|
|
7
8
|
|
|
8
|
-
const tokenService =
|
|
9
|
+
const tokenService = db.services.tokens;
|
|
9
10
|
|
|
10
11
|
const generateSecureToken = async (tokenLength = 32) => {
|
|
11
12
|
const buf = await randomBytes(tokenLength);
|
|
12
13
|
return buf.toString('hex');
|
|
13
14
|
};
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
export default async (ctx, { userId, metadata = null }) => {
|
|
16
17
|
const token = await generateSecureToken();
|
|
17
18
|
const otp = await generateSecureToken();
|
|
18
19
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
_id:
|
|
5
|
-
createdOn:
|
|
6
|
-
updatedOn:
|
|
7
|
-
user:
|
|
8
|
-
_id:
|
|
9
|
-
})
|
|
10
|
-
token:
|
|
11
|
-
otp:
|
|
12
|
-
metadata:
|
|
3
|
+
export default z.object({
|
|
4
|
+
_id: z.string(),
|
|
5
|
+
createdOn: z.date(),
|
|
6
|
+
updatedOn: z.date(),
|
|
7
|
+
user: z.object({
|
|
8
|
+
_id: z.string(),
|
|
9
|
+
}),
|
|
10
|
+
token: z.string(),
|
|
11
|
+
otp: z.string().nullable().optional(),
|
|
12
|
+
metadata: z.object({}).optional()
|
|
13
13
|
});
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import isAuthorized from 'middlewares/isAuthorized';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
export const handler = async (ctx) => {
|
|
4
5
|
ctx.body = ctx.state.user;
|
|
5
6
|
};
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
export const middlewares = [isAuthorized];
|
|
9
|
+
export const requestSchema = z.object({});
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
module.exports.endpoint = {
|
|
11
|
+
export const endpoint = {
|
|
12
12
|
method: "GET",
|
|
13
13
|
url: "/me",
|
|
14
14
|
};
|