@sqrzro/server 2.0.0-bz.5 → 2.0.0-bz.6

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.
@@ -1,6 +1,7 @@
1
+ import type { Errorable } from '@sqrzro/interfaces';
1
2
  import type { NextRequest } from 'next/server';
2
3
  import { NextResponse } from 'next/server';
3
- import type { Errorable, LoginFormFields, UserObject } from './interfaces';
4
+ import type { LoginFormFields, UserObject } from './interfaces';
4
5
  export declare function handleLogin(formData: LoginFormFields, lookupFn: (email: string) => Promise<UserObject | null>): Promise<Errorable<UserObject>>;
5
6
  interface MeObject {
6
7
  name: string;
@@ -1,10 +1,10 @@
1
+ import type { Errorable } from '@sqrzro/interfaces';
1
2
  import type Joi from 'joi';
2
- import type { Errorable } from './interfaces';
3
3
  interface MutateArgs<F extends object> {
4
4
  formData: F;
5
5
  onSuccess?: (model: F) => Promise<void> | void;
6
6
  onValidationError?: (errors: Record<string, string>) => void;
7
- request: Promise<Joi.ObjectSchema<F>>;
7
+ request: Joi.ObjectSchema<F>;
8
8
  }
9
9
  interface MutateArgsWithFn<F extends object, M> extends Omit<MutateArgs<F>, 'onSuccess'> {
10
10
  fn: (data: F) => Promise<M | null>;
@@ -7,7 +7,7 @@ function hasFn(args) {
7
7
  return Boolean(Object.prototype.hasOwnProperty.call(args, 'fn'));
8
8
  }
9
9
  async function mutate(args) {
10
- const [validated, validationErrors] = await (0, RequestService_1.validateSchema)(args.formData, await args.request);
10
+ const [validated, validationErrors] = await (0, RequestService_1.validateSchema)(args.formData, args.request);
11
11
  if (validationErrors) {
12
12
  args.onValidationError?.(validationErrors);
13
13
  return [null, validationErrors];
@@ -1,4 +1,4 @@
1
- import type { Errorable } from './interfaces';
1
+ import type { Errorable } from '@sqrzro/interfaces';
2
2
  interface ImageValidationConfig {
3
3
  maxSize?: number;
4
4
  types?: string[];
@@ -1,4 +1,4 @@
1
1
  import Joi from 'joi';
2
2
  import type { LoginFormFields } from './interfaces';
3
- declare const LoginRequest: Promise<Joi.ObjectSchema<LoginFormFields>>;
3
+ declare const LoginRequest: Joi.ObjectSchema<LoginFormFields>;
4
4
  export default LoginRequest;
@@ -4,6 +4,7 @@ exports.checkPasswordComplexity = exports.verifyPassword = exports.hashPassword
4
4
  const tslib_1 = require("tslib");
5
5
  const bcryptjs_1 = tslib_1.__importDefault(require("bcryptjs"));
6
6
  const PW_SALT_ROUNDS = 12;
7
+ const SECRET_LENGTH = 64;
7
8
  const PASSWORD_RULES = {
8
9
  min: 8,
9
10
  upper: 1,
@@ -34,8 +35,13 @@ const PASSWORD_FUNCTIONS = {
34
35
  symbol: checkPasswordSymbol,
35
36
  };
36
37
  async function createSecret() {
37
- const secret = await bcryptjs_1.default.genSalt(PW_SALT_ROUNDS);
38
- return secret;
38
+ const charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
39
+ let secret = '';
40
+ for (let idx = 0; idx < SECRET_LENGTH; idx += 1) {
41
+ const randomIndex = Math.floor(Math.random() * charset.length);
42
+ secret += charset[randomIndex];
43
+ }
44
+ return Promise.resolve(secret);
39
45
  }
40
46
  exports.createSecret = createSecret;
41
47
  async function hashPassword(password) {
@@ -1,5 +1,5 @@
1
1
  import Joi from 'joi';
2
- import type { ErrorablePromise } from './interfaces';
2
+ import type { Errorable } from '@sqrzro/interfaces';
3
3
  export declare function validate(): typeof Joi;
4
4
  /**
5
5
  * This function takes FormData and a schema. It then attempts to transform the FormData into an
@@ -12,10 +12,10 @@ export declare function validate(): typeof Joi;
12
12
  * @param validation
13
13
  * @returns
14
14
  */
15
- export declare function validateSchema<T extends object>(formData: T, validation: Joi.ObjectSchema<T>): ErrorablePromise<T>;
16
- export declare function createSchema<T>(schema: Joi.PartialSchemaMap<T>): Promise<Joi.ObjectSchema<T>>;
15
+ export declare function validateSchema<T extends object>(formData: T, validation: Joi.ObjectSchema<T>): Promise<Errorable<T>>;
16
+ export declare function createSchema<T>(schema: Joi.PartialSchemaMap<T>): Joi.ObjectSchema<T>;
17
17
  interface ExtendSchemaOptions {
18
18
  required?: string[];
19
19
  }
20
- export declare function extendSchema<T>(schema: Promise<Joi.ObjectSchema<T>>, appends: Joi.PartialSchemaMap<T>, options?: ExtendSchemaOptions): Promise<Joi.ObjectSchema<T>>;
20
+ export declare function extendSchema<T>(schema: Joi.ObjectSchema<T>, appends: Joi.PartialSchemaMap<T>, options?: ExtendSchemaOptions): Joi.ObjectSchema<T>;
21
21
  export {};
@@ -52,20 +52,16 @@ async function validateSchema(formData, validation) {
52
52
  }
53
53
  }
54
54
  exports.validateSchema = validateSchema;
55
- async function createSchema(schema) {
56
- return new Promise((resolve) => {
57
- resolve(joi_1.default.object(schema));
58
- });
55
+ function createSchema(schema) {
56
+ return joi_1.default.object(schema);
59
57
  }
60
58
  exports.createSchema = createSchema;
61
- async function extendSchema(schema, appends, options) {
62
- const extended = (await schema).concat(joi_1.default.object(appends));
59
+ function extendSchema(schema, appends, options) {
60
+ const extended = schema.concat(joi_1.default.object(appends));
63
61
  const required = (options?.required || []).reduce((acc, cur) => ({
64
62
  ...acc,
65
63
  [cur]: extended.extract(cur).required(),
66
64
  }), {});
67
- return new Promise((resolve) => {
68
- resolve(extended.concat(joi_1.default.object(required)));
69
- });
65
+ return extended.concat(joi_1.default.object(required));
70
66
  }
71
67
  exports.extendSchema = extendSchema;
@@ -1,7 +1,3 @@
1
- export type CastType = 'date';
2
- export type CastObject<T extends object> = Partial<Record<keyof T, CastType>>;
3
- export type Errorable<T> = [null, Record<string, string>] | [T, null];
4
- export type ErrorablePromise<T> = Promise<Errorable<T>>;
5
1
  export interface LoginFormFields {
6
2
  email: string;
7
3
  password: string;
@@ -1,4 +1,4 @@
1
1
  import { NextResponse } from 'next/server';
2
2
  import type { NextRequest } from 'next/server';
3
3
  export declare function getIdFromToken(token: string | null): Promise<number>;
4
- export declare function handleMiddleware(request: NextRequest, url: string): Promise<NextResponse>;
4
+ export declare function handleMiddleware(request: NextRequest, url: string, cb?: () => NextResponse): Promise<NextResponse>;
@@ -25,12 +25,12 @@ function redirectToLogin(request, url) {
25
25
  }
26
26
  return server_1.NextResponse.redirect(`${url}login?r=${encodeURIComponent(getRelativeUrl(request.url))}`);
27
27
  }
28
- async function handleMiddleware(request, url) {
28
+ async function handleMiddleware(request, url, cb) {
29
29
  const token = request.cookies.get('token')?.value;
30
30
  const userId = await getIdFromToken(token || null);
31
31
  if (!userId) {
32
32
  return redirectToLogin(request, url);
33
33
  }
34
- return server_1.NextResponse.next();
34
+ return cb ? cb() : server_1.NextResponse.next();
35
35
  }
36
36
  exports.handleMiddleware = handleMiddleware;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqrzro/server",
3
- "version": "2.0.0-bz.5",
3
+ "version": "2.0.0-bz.6",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "ISC",
@@ -10,6 +10,7 @@
10
10
  "middleware.d.ts"
11
11
  ],
12
12
  "dependencies": {
13
+ "@sqrzro/interfaces": "bz",
13
14
  "@sqrzro/utility": "bz",
14
15
  "bcryptjs": "^2.4.3",
15
16
  "joi": "^17.11.0",