@volcanicminds/backend 2.2.7 → 2.2.8

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.
Files changed (119) hide show
  1. package/dist/index.d.ts.map +1 -1
  2. package/dist/index.js +100 -51
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/api/auth/controller/auth.d.ts +10 -0
  5. package/dist/lib/api/auth/controller/auth.d.ts.map +1 -1
  6. package/dist/lib/api/auth/controller/auth.js +26 -4
  7. package/dist/lib/api/auth/controller/auth.js.map +1 -1
  8. package/dist/lib/api/token/controller/token.d.ts +1 -1
  9. package/dist/lib/api/token/controller/token.d.ts.map +1 -1
  10. package/dist/lib/api/token/controller/token.js +7 -5
  11. package/dist/lib/api/token/controller/token.js.map +1 -1
  12. package/dist/lib/api/users/controller/user.d.ts +2 -2
  13. package/dist/lib/api/users/controller/user.d.ts.map +1 -1
  14. package/dist/lib/api/users/controller/user.js +14 -4
  15. package/dist/lib/api/users/controller/user.js.map +1 -1
  16. package/dist/lib/apollo/resolvers.d.ts +1 -1
  17. package/dist/lib/apollo/resolvers.d.ts.map +1 -1
  18. package/dist/lib/apollo/resolvers.js +1 -1
  19. package/dist/lib/apollo/resolvers.js.map +1 -1
  20. package/dist/lib/hooks/onError.d.ts +1 -1
  21. package/dist/lib/hooks/onError.d.ts.map +1 -1
  22. package/dist/lib/hooks/onError.js +5 -3
  23. package/dist/lib/hooks/onError.js.map +1 -1
  24. package/dist/lib/hooks/onRequest.d.ts.map +1 -1
  25. package/dist/lib/hooks/onRequest.js +18 -2
  26. package/dist/lib/hooks/onRequest.js.map +1 -1
  27. package/dist/lib/hooks/onResponse.d.ts.map +1 -1
  28. package/dist/lib/hooks/onResponse.js +9 -1
  29. package/dist/lib/hooks/onResponse.js.map +1 -1
  30. package/dist/lib/loader/general.js +4 -2
  31. package/dist/lib/loader/general.js.map +1 -1
  32. package/dist/lib/loader/hooks.d.ts.map +1 -1
  33. package/dist/lib/loader/hooks.js +8 -4
  34. package/dist/lib/loader/hooks.js.map +1 -1
  35. package/dist/lib/loader/plugins.d.ts.map +1 -1
  36. package/dist/lib/loader/plugins.js +6 -3
  37. package/dist/lib/loader/plugins.js.map +1 -1
  38. package/dist/lib/loader/roles.js +4 -2
  39. package/dist/lib/loader/roles.js.map +1 -1
  40. package/dist/lib/loader/router.d.ts.map +1 -1
  41. package/dist/lib/loader/router.js +31 -16
  42. package/dist/lib/loader/router.js.map +1 -1
  43. package/dist/lib/loader/schedules.d.ts.map +1 -1
  44. package/dist/lib/loader/schedules.js +19 -10
  45. package/dist/lib/loader/schedules.js.map +1 -1
  46. package/dist/lib/loader/schemas.d.ts.map +1 -1
  47. package/dist/lib/loader/schemas.js +18 -9
  48. package/dist/lib/loader/schemas.js.map +1 -1
  49. package/dist/lib/loader/tracking.d.ts.map +1 -1
  50. package/dist/lib/loader/tracking.js +6 -3
  51. package/dist/lib/loader/tracking.js.map +1 -1
  52. package/dist/lib/loader/translation.d.ts.map +1 -1
  53. package/dist/lib/loader/translation.js.map +1 -1
  54. package/dist/lib/middleware/isAdmin.d.ts.map +1 -1
  55. package/dist/lib/middleware/isAdmin.js +2 -1
  56. package/dist/lib/middleware/isAdmin.js.map +1 -1
  57. package/dist/lib/middleware/isAuthenticated.d.ts.map +1 -1
  58. package/dist/lib/middleware/isAuthenticated.js +3 -2
  59. package/dist/lib/middleware/isAuthenticated.js.map +1 -1
  60. package/dist/lib/middleware/preAuth.d.ts +1 -1
  61. package/dist/lib/middleware/preAuth.d.ts.map +1 -1
  62. package/dist/lib/middleware/preAuth.js +1 -1
  63. package/dist/lib/middleware/preAuth.js.map +1 -1
  64. package/dist/lib/middleware/preForgotPasswordHandler.d.ts +1 -1
  65. package/dist/lib/middleware/preForgotPasswordHandler.d.ts.map +1 -1
  66. package/dist/lib/middleware/preForgotPasswordHandler.js +1 -1
  67. package/dist/lib/middleware/preForgotPasswordHandler.js.map +1 -1
  68. package/dist/lib/schemas/auth.d.ts +3 -0
  69. package/dist/lib/schemas/auth.d.ts.map +1 -1
  70. package/dist/lib/schemas/auth.js +1 -0
  71. package/dist/lib/schemas/auth.js.map +1 -1
  72. package/dist/lib/util/common.d.ts.map +1 -1
  73. package/dist/lib/util/common.js.map +1 -1
  74. package/dist/lib/util/errors.d.ts.map +1 -1
  75. package/dist/lib/util/errors.js.map +1 -1
  76. package/dist/lib/util/logger.js +1 -1
  77. package/dist/lib/util/logger.js.map +1 -1
  78. package/dist/lib/util/mark.d.ts.map +1 -1
  79. package/dist/lib/util/mark.js +34 -17
  80. package/dist/lib/util/mark.js.map +1 -1
  81. package/dist/lib/util/regexp.d.ts.map +1 -1
  82. package/dist/lib/util/regexp.js +3 -3
  83. package/dist/lib/util/regexp.js.map +1 -1
  84. package/dist/lib/util/tracker.d.ts +2 -2
  85. package/dist/lib/util/tracker.d.ts.map +1 -1
  86. package/dist/lib/util/tracker.js +6 -4
  87. package/dist/lib/util/tracker.js.map +1 -1
  88. package/dist/lib/util/yn.d.ts.map +1 -1
  89. package/dist/lib/util/yn.js.map +1 -1
  90. package/dist/server.js.map +1 -1
  91. package/lib/api/auth/controller/auth.ts +36 -4
  92. package/lib/api/token/controller/token.ts +7 -5
  93. package/lib/api/users/controller/user.ts +17 -4
  94. package/lib/apollo/resolvers.ts +2 -1
  95. package/lib/hooks/onError.ts +4 -3
  96. package/lib/hooks/onRequest.ts +21 -14
  97. package/lib/hooks/onResponse.ts +10 -4
  98. package/lib/loader/general.ts +2 -2
  99. package/lib/loader/hooks.ts +6 -4
  100. package/lib/loader/plugins.ts +4 -3
  101. package/lib/loader/roles.ts +2 -2
  102. package/lib/loader/router.ts +21 -24
  103. package/lib/loader/schedules.ts +23 -26
  104. package/lib/loader/schemas.ts +10 -9
  105. package/lib/loader/tracking.ts +4 -3
  106. package/lib/loader/translation.ts +2 -0
  107. package/lib/middleware/isAdmin.ts +2 -1
  108. package/lib/middleware/isAuthenticated.ts +3 -2
  109. package/lib/middleware/preAuth.ts +1 -1
  110. package/lib/middleware/preForgotPasswordHandler.ts +1 -1
  111. package/lib/schemas/auth.ts +1 -0
  112. package/lib/util/common.ts +1 -0
  113. package/lib/util/errors.ts +1 -0
  114. package/lib/util/logger.ts +1 -1
  115. package/lib/util/mark.ts +18 -17
  116. package/lib/util/regexp.ts +3 -3
  117. package/lib/util/tracker.ts +6 -4
  118. package/lib/util/yn.ts +1 -0
  119. package/package.json +11 -2
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import _ from 'lodash'
2
3
  import type { JobSchedule } from '../../types/global.js'
3
4
  import { normalizePatterns } from '../util/path.js'
@@ -11,55 +12,50 @@ export function load(): any[] {
11
12
  const jobs: any = []
12
13
 
13
14
  const jobScheduleDefaults: JobSchedule = {
14
- active: false, // boolean (required)
15
- type: 'interval', // cron|interval, default: interval
16
- async: true, // boolean, default: true
17
- preventOverrun: true, // boolean, default: true
15
+ active: false,
16
+ type: 'interval',
17
+ async: true,
18
+ preventOverrun: true,
18
19
 
19
- cron: {
20
- // expression: null // required if type = 'cron', use cron syntax (if not specified cron will be disabled)
21
- // timezone: null // optional, like "Europe/Rome" (to test)
22
- },
20
+ cron: {},
23
21
 
24
22
  interval: {
25
- days: 0, // number, default 0
26
- hours: 0, // number, default 0
27
- minutes: 0, // number, default 0
28
- seconds: 0, // number, default 0
29
- milliseconds: 0, // number, default 0
30
- runImmediately: false // boolean, default: false
23
+ days: 0,
24
+ hours: 0,
25
+ minutes: 0,
26
+ seconds: 0,
27
+ milliseconds: 0,
28
+ runImmediately: false
31
29
  }
32
30
  }
33
31
 
34
32
  patterns.forEach((pattern) => {
35
- log.t && log.trace('Looking for ' + pattern)
33
+ if (log.t) log.trace('Looking for ' + pattern)
36
34
  globSync(pattern, { windowsPathsNoEscape: true }).forEach((f: string) => {
37
- log.t && log.trace(`* Add job schedule from ${f}`)
35
+ if (log.t) log.trace(`* Add job schedule from ${f}`)
38
36
 
39
37
  const jobName = path.basename(f, path.extname(f))
40
- let { job, schedule: s } = require(f)
38
+ const { job, schedule: s } = require(f)
41
39
 
42
40
  let isLoadedAndEnabled = false
43
41
  if (s && s.active) {
44
42
  isLoadedAndEnabled = true
45
43
 
46
- // apply defaults
47
-
48
44
  let schedule = _.cloneDeep(jobScheduleDefaults)
49
45
  schedule = _.merge(schedule, s)
50
46
 
51
47
  if (!job || typeof job !== 'function') {
52
- log.t && log.error(`* Job ${jobName} `)
48
+ if (log.t) log.error(`* Job ${jobName} `)
53
49
  isLoadedAndEnabled = false
54
50
  }
55
51
 
56
52
  if (!schedule.type || !['cron', 'interval'].includes(schedule.type)) {
57
- log.t && log.error(`* Job ${jobName}: schedule.type must be cron or interval`)
53
+ if (log.t) log.error(`* Job ${jobName}: schedule.type must be cron or interval`)
58
54
  isLoadedAndEnabled = false
59
55
  }
60
56
 
61
57
  if (schedule.type === 'cron' && !schedule.cron?.expression) {
62
- log.t && log.error(`* Job ${jobName}: schedule.cron.expression not defined`)
58
+ if (log.t) log.error(`* Job ${jobName}: schedule.cron.expression not defined`)
63
59
  isLoadedAndEnabled = false
64
60
  }
65
61
 
@@ -68,24 +64,25 @@ export function load(): any[] {
68
64
  const totalIntervalMs = milliseconds + 1000 * (seconds + 60 * (minutes + 60 * (hours + 24 * days)))
69
65
 
70
66
  if (totalIntervalMs < 1000) {
71
- log.t && log.error(`* Job ${jobName}: schedule.interval must have a total greater or equal to 1s`)
67
+ if (log.t) log.error(`* Job ${jobName}: schedule.interval must have a total greater or equal to 1s`)
72
68
  isLoadedAndEnabled = false
73
69
  }
74
70
  }
75
71
 
76
- isLoadedAndEnabled &&
72
+ if (isLoadedAndEnabled) {
77
73
  jobs.push({
78
74
  jobName,
79
75
  schedule,
80
76
  job
81
77
  })
78
+ }
82
79
  }
83
80
 
84
- log.t && log.trace(`* Job schedule ${jobName} ${isLoadedAndEnabled ? 'enabled' : 'disabled'}`)
81
+ if (log.t) log.trace(`* Job schedule ${jobName} ${isLoadedAndEnabled ? 'enabled' : 'disabled'}`)
85
82
  })
86
83
  })
87
84
 
88
- log.d && log.debug(`Schedule Jobs loaded: ${jobs?.length || 0}`)
85
+ if (log.d) log.debug(`Schedule Jobs loaded: ${jobs?.length || 0}`)
89
86
  return jobs
90
87
  }
91
88
 
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import _ from 'lodash'
2
3
  import { normalizePatterns } from '../util/path.js'
3
4
  import { globSync } from 'glob'
@@ -13,7 +14,7 @@ export async function apply(server: any): Promise<void> {
13
14
  const customSchemaIds = new Set()
14
15
  let schemaCount = 0
15
16
 
16
- log.t && log.trace('Looking for custom schemas in ' + customSchemaPath)
17
+ if (log.t) log.trace('Looking for custom schemas in ' + customSchemaPath)
17
18
  const customFiles = globSync(customSchemaPath, { windowsPathsNoEscape: true })
18
19
 
19
20
  for (const f of customFiles) {
@@ -31,11 +32,11 @@ export async function apply(server: any): Promise<void> {
31
32
  }
32
33
  })
33
34
  } catch (e) {
34
- log.w && log.warn(`Could not load custom schema file: ${f}`, e)
35
+ if (log.w) log.warn(`Could not load custom schema file: ${f}`, e)
35
36
  }
36
37
  }
37
38
 
38
- log.t && log.trace('Looking for base schemas in ' + baseSchemaPath)
39
+ if (log.t) log.trace('Looking for base schemas in ' + baseSchemaPath)
39
40
  const baseFiles = globSync(baseSchemaPath, { windowsPathsNoEscape: true })
40
41
 
41
42
  for (const f of baseFiles) {
@@ -65,8 +66,8 @@ export async function apply(server: any): Promise<void> {
65
66
  customSchema.required = mergedRequired
66
67
  }
67
68
 
68
- log.d && log.debug(`* Schema [${baseSchema.$id}] deeply merged with core definition`)
69
- log.w && log.warn(`* Schema [${baseSchema.$id}] overrided with custom definition`)
69
+ if (log.d) log.debug(`* Schema [${baseSchema.$id}] deeply merged with core definition`)
70
+ if (log.w) log.warn(`* Schema [${baseSchema.$id}] overrided with custom definition`)
70
71
  }
71
72
  } else {
72
73
  log.trace(`* Schema [${baseSchema.$id}] from ${schemaFileName} registeerd`)
@@ -74,11 +75,11 @@ export async function apply(server: any): Promise<void> {
74
75
  schemaCount++
75
76
  }
76
77
  } else if (name !== 'default') {
77
- log.w && log.warn(`* Schema with no $id found in ${schemaFileName} (export ${name}), cannot be registered`)
78
+ if (log.w) log.warn(`* Schema with no $id found in ${schemaFileName} (export ${name}), cannot be registered`)
78
79
  }
79
80
  })
80
81
  } catch (e) {
81
- log.w && log.warn(`Could not load base schema file: ${f}`, e)
82
+ if (log.w) log.warn(`Could not load base schema file: ${f}`, e)
82
83
  }
83
84
  }
84
85
 
@@ -88,9 +89,9 @@ export async function apply(server: any): Promise<void> {
88
89
  server.addSchema(schema)
89
90
  schemaCount++
90
91
  } catch (e: any) {
91
- log.e && log.error(`Error registering schema ${schema.$id}: ${e.message}`)
92
+ if (log.e) log.error(`Error registering schema ${schema.$id}: ${e.message}`)
92
93
  }
93
94
  })
94
95
 
95
- log.d && log.debug(`Schemas loaded: ${schemaCount} referenceable by $ref`)
96
+ if (log.d) log.debug(`Schemas loaded: ${schemaCount} referenceable by $ref`)
96
97
  }
@@ -11,7 +11,7 @@ export async function load() {
11
11
  const patterns = normalizePatterns(['..', 'config', 'tracking.{ts,js}'], ['src', 'config', 'tracking.{ts,js}'])
12
12
 
13
13
  for (const pattern of patterns) {
14
- log.t && log.trace('Looking for ' + pattern)
14
+ if (log.t) log.trace('Looking for ' + pattern)
15
15
  const files = globSync(pattern, { windowsPathsNoEscape: true })
16
16
 
17
17
  for (const f of files) {
@@ -23,7 +23,7 @@ export async function load() {
23
23
 
24
24
  trackConfig = { ...trackConfig, ...config }
25
25
 
26
- enableAll &&
26
+ if (enableAll) {
27
27
  changes.forEach((change) => {
28
28
  const tc: TrackChanges = { primaryKey: primaryKey, changeEntity: changeEntity, ...change } as TrackChanges
29
29
  const code = getCodeBy(tc.method, tc.path)
@@ -35,11 +35,12 @@ export async function load() {
35
35
  trackChangesList[code] = tc
36
36
  }
37
37
  })
38
+ }
38
39
  }
39
40
  }
40
41
 
41
42
  const keys = Object.keys(trackChangesList) || []
42
- log.d && log.debug(`Tracking changes loaded: ${keys?.length || 0}`)
43
+ if (log.d) log.debug(`Tracking changes loaded: ${keys?.length || 0}`)
43
44
  return { tracking: trackChangesList, trackingConfig: trackConfig }
44
45
  }
45
46
 
@@ -1,3 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ /* eslint-disable prefer-const */
1
3
  import path from 'path'
2
4
  import { globSync } from 'glob'
3
5
  import { I18n } from 'i18n'
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { FastifyReply, FastifyRequest } from 'fastify'
2
3
 
3
4
  export function preHandler(req: FastifyRequest, res: FastifyReply, done: any) {
@@ -8,7 +9,7 @@ export function preHandler(req: FastifyRequest, res: FastifyReply, done: any) {
8
9
 
9
10
  throw new Error('User without this privilege')
10
11
  } catch (err) {
11
- log.e && log.error(`Upps, something just happened ${err}`)
12
+ if (log.e) log.error(`Upps, something just happened ${err}`)
12
13
  res.code(403).send(new Error('User without this privilege'))
13
14
  }
14
15
  }
@@ -1,14 +1,15 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { FastifyReply, FastifyRequest } from 'fastify'
2
3
 
3
4
  export function preHandler(req: FastifyRequest, res: FastifyReply, done: any) {
4
5
  try {
5
- if (!!req.user?.getId()) {
6
+ if (req.user?.getId()) {
6
7
  return done()
7
8
  }
8
9
 
9
10
  throw new Error('Unauthorized')
10
11
  } catch (err) {
11
- log.e && log.error(`Upps, something just happened ${err}`)
12
+ if (log.e) log.error(`Upps, something just happened ${err}`)
12
13
  return res.code(401).send(new Error('Unauthorized')) // must be authorized first
13
14
  }
14
15
  }
@@ -1,3 +1,3 @@
1
1
  import { FastifyReply, FastifyRequest } from 'fastify'
2
2
 
3
- export async function preHandler(req: FastifyRequest, res: FastifyReply) {}
3
+ export async function preHandler(_req: FastifyRequest, _res: FastifyReply) {}
@@ -1,3 +1,3 @@
1
1
  import { FastifyReply, FastifyRequest } from 'fastify'
2
2
 
3
- export async function preHandler(req: FastifyRequest, res: FastifyReply) {}
3
+ export async function preHandler(_req: FastifyRequest, _res: FastifyReply) {}
@@ -54,6 +54,7 @@ export const authMfaChallengeSchema = {
54
54
  nullable: true,
55
55
  properties: {
56
56
  mfaRequired: { type: 'boolean' },
57
+ mfaSetupRequired: { type: 'boolean' },
57
58
  tempToken: { type: 'string' }
58
59
  }
59
60
  }
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { FastifyRequest } from 'fastify'
2
3
  import type { Data } from '../../types/global.js'
3
4
 
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  export class TranslatedError extends Error {
2
3
  locale: string
3
4
  status: number
@@ -39,7 +39,7 @@ const loggerConfig = {
39
39
  }
40
40
  }
41
41
 
42
- let logger = pino(loggerConfig)
42
+ const logger = pino(loggerConfig)
43
43
  const logLevel = logger.levels.values[loggerConfig.level]
44
44
 
45
45
  // Level: trace debug info warn error fatal silent
package/lib/util/mark.ts CHANGED
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import require from './require.js'
2
3
  const pkg = require('root-require')('package.json')
3
4
 
@@ -6,21 +7,21 @@ const pkg = require('root-require')('package.json')
6
7
  */
7
8
 
8
9
  export function print(logg: any = log): void {
9
- logg.i && logg.info('Ciao')
10
- logg.i && logg.info(` ,--. ,--. `)
11
- logg.i && logg.info(`.--. ,--,---.| |,---.,--,--,--,--\\\`--',---. `)
12
- logg.i && logg.info(` \\ '' | .-. | / .--' ,-. | ,--/ .--' `)
13
- logg.i && logg.info(` \\ /' '-' | \\ \`--\\ '-' | || | \\ \`--. `)
14
- logg.i && logg.info(` \`--' \`---'\`--'\`---'\`--\`--\`--''--\`--'\`---' `)
15
- logg.i && logg.info('')
16
- logg.t && logg.trace(`Package ${pkg.name}`)
17
- logg.i && logg.info(`License ${pkg.license}`)
18
- logg.i && logg.info(`Version ${pkg.version}`)
19
- logg.i && logg.info(`Codename ${pkg.codename}`)
20
- logg.i && logg.info(`Environment ${process.env.NODE_ENV}`)
21
- logg.t && logg.trace(`Platform ${process.platform} ${process.arch}`)
22
- logg.t && logg.trace(`Root path ${process.cwd()}`)
23
- logg.t && logg.trace(`Node ${process.version}`)
24
- logg.t && logg.trace(`Release ${JSON.stringify(process.release)}`)
25
- logg.t && logg.trace(`Versions ${JSON.stringify(process.versions)}`)
10
+ if (logg.i) logg.info('Ciao')
11
+ if (logg.i) logg.info(` ,--. ,--. `)
12
+ if (logg.i) logg.info(`.--. ,--,---.| |,---.,--,--,--,--\\\`--',---. `)
13
+ if (logg.i) logg.info(` \\ '' | .-. | / .--' ,-. | ,--/ .--' `)
14
+ if (logg.i) logg.info(` \\ /' '-' | \\ \`--\\ '-' | || | \\ \`--. `)
15
+ if (logg.i) logg.info(` \`--' \`---'\`--'\`---'\`--\`--\`--''--\`--'\`---' `)
16
+ if (logg.i) logg.info('')
17
+ if (logg.t) logg.trace(`Package ${pkg.name}`)
18
+ if (logg.i) logg.info(`License ${pkg.license}`)
19
+ if (logg.i) logg.info(`Version ${pkg.version}`)
20
+ if (logg.i) logg.info(`Codename ${pkg.codename}`)
21
+ if (logg.i) logg.info(`Environment ${process.env.NODE_ENV}`)
22
+ if (logg.t) logg.trace(`Platform ${process.platform} ${process.arch}`)
23
+ if (logg.t) logg.trace(`Root path ${process.cwd()}`)
24
+ if (logg.t) logg.trace(`Node ${process.version}`)
25
+ if (logg.t) logg.trace(`Release ${JSON.stringify(process.release)}`)
26
+ if (logg.t) logg.trace(`Versions ${JSON.stringify(process.versions)}`)
26
27
  }
@@ -4,13 +4,13 @@
4
4
  */
5
5
  export const username = /(?=^.{3,33}$)^[a-z][a-z0-9]*[._-]?[a-z0-9]+$/gi
6
6
  export const emailAlt =
7
- /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
7
+ /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
8
8
 
9
9
  /*
10
10
  * email can have multiple words
11
11
  * email can use . - or + for smart labeling
12
12
  */
13
- export const email = /^\w+([\.+-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
13
+ export const email = /^\w+([.+-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$/
14
14
 
15
15
  /*
16
16
  * password must contain 1 number (0-9)
@@ -20,7 +20,7 @@ export const email = /^\w+([\.+-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
20
20
  * password is 8-64 characters with no space
21
21
  */
22
22
  export const password =
23
- /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%&*()-_=+\[\]\{\}\\|;:\'",.<>?\^])[A-Za-z\d!@#$%&*()-_=+\[\]\{\}\\|;:\'",.<>?\^]{8,}$/
23
+ /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%&*()-_=+[\]{}|;:'",.<>?^])[A-Za-z\d!@#$%&*()-_=+[\]{}|;:'",.<>?^]{8,}$/
24
24
  export const zipCode = /(^\d{5}$)|(^\d{5}-\d{4}$)/
25
25
  export const taxCodePersona =
26
26
  /^[a-zA-Z]{6}[0-9]{2}[abcdehlmprstABCDEHLMPRST]{1}[0-9]{2}([a-zA-Z]{1}[0-9]{3})[a-zA-Z]{1}$/
@@ -1,7 +1,8 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import dayjs from 'dayjs'
2
3
  import type { FastifyRequest, FastifyReply } from '../../types/global.js'
3
4
 
4
- export async function initialize(req: FastifyRequest, reply: FastifyReply) {
5
+ export async function initialize(req: FastifyRequest, _reply: FastifyReply) {
5
6
  if (req.server['dataBaseManager'].isImplemented()) {
6
7
  const tc = getTrackingConfigIfEnabled(req)
7
8
  const allData = { ...req.parameters(), ...req.data() }
@@ -11,7 +12,8 @@ export async function initialize(req: FastifyRequest, reply: FastifyReply) {
11
12
  if (allData && tc.entity && tc.primaryKey && tc.primaryKey in allData) {
12
13
  const key = allData[tc.primaryKey]
13
14
  req.trackingData = await req.server['dataBaseManager'].retrieveBy(tc.entity, key)
14
- log.trace(`Tracking changes: found id ${req.trackingData ? req.trackingData[tc.primaryKey] : null}`)
15
+ if (log.t)
16
+ log.trace(`Tracking changes: found id ${req.trackingData ? req.trackingData[tc.primaryKey] : null}`)
15
17
  }
16
18
  } catch (error) {
17
19
  log.error(`Tracking changes: error on ${tc.code}`)
@@ -21,7 +23,7 @@ export async function initialize(req: FastifyRequest, reply: FastifyReply) {
21
23
  }
22
24
  }
23
25
 
24
- export async function track(req: FastifyRequest, reply: FastifyReply, payload: any) {
26
+ export async function track(req: FastifyRequest, _reply: FastifyReply, payload: any) {
25
27
  if (req.server['dataBaseManager'].isImplemented()) {
26
28
  const tc = getTrackingConfigIfEnabled(req)
27
29
  if (tc) {
@@ -66,7 +68,7 @@ export async function track(req: FastifyRequest, reply: FastifyReply, payload: a
66
68
  }
67
69
 
68
70
  if (addChange) {
69
- log.trace(`Tracking changes: add ${changeEntity} for ${entity}, ${id}, ${userId}, ${status}`)
71
+ if (log.t) log.trace(`Tracking changes: add ${changeEntity} for ${entity}, ${id}, ${userId}, ${status}`)
70
72
  await req.server['dataBaseManager'].addChange(entity, id, status, userId, contents, changeEntity)
71
73
  }
72
74
  } catch (error) {
package/lib/util/yn.ts CHANGED
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  'use strict'
2
3
 
3
4
  export default function yn(value: any, defaultValue: boolean): boolean {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volcanicminds/backend",
3
- "version": "2.2.7",
3
+ "version": "2.2.8",
4
4
  "type": "module",
5
5
  "codename": "rome",
6
6
  "license": "MIT",
@@ -55,6 +55,10 @@
55
55
  "test:full": "cross-env PORT=2231 NODE_ENV=memory BROWSER=false mocha --loader=tsx ./test/index.spec.ts -t 100000",
56
56
  "reset": "npm install && npm update && npm run build",
57
57
  "upgrade-deps": "npx npm-check-updates -u",
58
+ "lint": "eslint .",
59
+ "lint:fix": "eslint . --fix",
60
+ "type-check": "tsc --noEmit",
61
+ "check-all": "npm run lint && npm run type-check",
58
62
  "combine": "node combine.js"
59
63
  },
60
64
  "dependencies": {
@@ -87,13 +91,18 @@
87
91
  "toad-scheduler": "^3.1.0"
88
92
  },
89
93
  "devDependencies": {
94
+ "@eslint/js": "^9.39.1",
90
95
  "@types/mocha": "^10.0.10",
96
+ "@types/semver": "^7.7.1",
91
97
  "cross-env": "^10.1.0",
98
+ "eslint": "^9.39.1",
92
99
  "expect": "^30.2.0",
100
+ "globals": "^16.5.0",
93
101
  "mocha": "^11.7.5",
94
102
  "npm-upgrade": "^3.1.2",
95
103
  "tsx": "^4.19.2",
96
- "typescript": "^5.9.3"
104
+ "typescript": "^5.9.3",
105
+ "typescript-eslint": "^8.48.0"
97
106
  },
98
107
  "repository": {
99
108
  "type": "git",