namirasoft-node 1.3.71 → 1.3.73

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/src/BaseTable.ts CHANGED
@@ -1,98 +1,110 @@
1
- import { ArraySchema, BaseTypeSchema, BaseVariableSchema, ObjectSchema } from "namirasoft-schema";
2
- import { BaseDatabase } from "./BaseDatabase";
3
- import { ErrorOperation } from "namirasoft-core";
4
-
5
- export abstract class BaseTable<D extends BaseDatabase, ModelColumnOption>
6
- {
7
- database: D;
8
- constructor(database: D)
9
- {
10
- this.database = database;
11
- }
12
- public abstract getName(): string;
13
- public addSecureColumns(columns: string[]): void
14
- {
15
- columns.toString();
16
- }
17
- public addReadOnlyColumns(columns: string[]): void
18
- {
19
- columns.toString();
20
- }
21
- public secure(obj: any)
22
- {
23
- if (obj.dataValues)
24
- obj = obj.dataValues;
25
- let secureColumns: string[] = [];
26
- this.addSecureColumns(secureColumns);
27
- secureColumns.forEach(col => delete obj[col]);
28
- return obj;
29
- }
30
- public getArraySchema(require: boolean, name?: string): ArraySchema
31
- {
32
- let ans = this.getSchema(require, name);
33
- return new ArraySchema(require, [ans]);
34
- }
35
- public getSchema(require: boolean, name?: string): ObjectSchema
36
- {
37
- let secureColumns: string[] = [];
38
- let readOnlyColumns: string[] = [];
39
- this.addSecureColumns(secureColumns);
40
- this.addReadOnlyColumns(readOnlyColumns);
41
- let ans = new ObjectSchema(name ?? this.getName(), require, null);
42
- this.forEachColumn((name, element) =>
43
- {
44
- if (!secureColumns.includes(name))
45
- ans.addField(this.getVariableSchema(name, element, readOnlyColumns.includes(name)));
46
- });
47
- return ans;
48
- }
49
- public checkColumn(column: string)
50
- {
51
- let columns: string[] = [];
52
- this.forEachColumn(name => columns.push(name));
53
- if (!columns.includes(column))
54
- ErrorOperation.throwHTTP(404, `Column '${column}' not found`);
55
- }
56
- public abstract forEachColumn(handler: (name: string, column: ModelColumnOption) => void): void;
57
- private getVariableSchema(name: string, element: ModelColumnOption, read_only: boolean): BaseVariableSchema
58
- {
59
- let schema = this.getTypeSchema(element);
60
- schema.read_only = read_only;
61
- let es = this.getExamples();
62
- schema.example = es[name] ?? "";
63
- return new BaseVariableSchema(name, schema);
64
- }
65
- protected abstract getTypeSchema(element: ModelColumnOption): BaseTypeSchema;
66
- protected getExamples(): { [name: string]: string }
67
- {
68
- return {};
69
- }
70
- public getSchemaNames(): string[]
71
- {
72
- return [];
73
- }
74
- public getSchemaByName(require: boolean, name?: string): ObjectSchema
75
- {
76
- let ans = this.getSchema(require, name);
77
- if (name)
78
- {
79
- let names = this.getSchemaNames();
80
- if (!names.includes(name))
81
- throw new Error("Wrong schema name was provided: " + name);
82
- this.setSchemaByName(ans);
83
- }
84
- return ans;
85
- }
86
- public getArraySchemaByName(require: boolean, name?: string): ArraySchema
87
- {
88
- let ans = this.getSchemaByName(require, name);
89
- return new ArraySchema(require, [ans]);
90
- }
91
- protected setSchemaByName(_: ObjectSchema): void
92
- {
93
- }
94
- public getNotFoundError(conditions: any | null)
95
- {
96
- return ErrorOperation.getHTTP(404, "Could not found " + this.getName() + " for " + JSON.stringify(conditions));
97
- }
1
+ import { ArraySchema, BaseTypeSchema, BaseVariableSchema, ObjectSchema } from "namirasoft-schema";
2
+ import { BaseDatabase } from "./BaseDatabase";
3
+ import { ErrorOperation } from "namirasoft-core";
4
+
5
+ export abstract class BaseTable<D extends BaseDatabase, ModelColumnOption>
6
+ {
7
+ database: D;
8
+ constructor(database: D)
9
+ {
10
+ this.database = database;
11
+ }
12
+ public abstract getName(): string;
13
+ public addSecureColumns(columns: string[]): void
14
+ {
15
+ columns.toString();
16
+ }
17
+ public addReadOnlyColumns(columns: string[]): void
18
+ {
19
+ columns.toString();
20
+ }
21
+ public getSecureColumns(): string[]
22
+ {
23
+ let columns: string[] = [];
24
+ this.addSecureColumns(columns);
25
+ return columns;
26
+ }
27
+ public getReadOnlyColumns(): string[]
28
+ {
29
+ let columns: string[] = [];
30
+ this.addReadOnlyColumns(columns);
31
+ return columns;
32
+ }
33
+ public secure(obj: any)
34
+ {
35
+ if (obj.dataValues)
36
+ obj = obj.dataValues;
37
+ let secureColumns: string[] = [];
38
+ this.addSecureColumns(secureColumns);
39
+ secureColumns.forEach(col => delete obj[col]);
40
+ return obj;
41
+ }
42
+ public getArraySchema(require: boolean, name?: string): ArraySchema
43
+ {
44
+ let ans = this.getSchema(require, name);
45
+ return new ArraySchema(require, [ans]);
46
+ }
47
+ public getSchema(require: boolean, name?: string): ObjectSchema
48
+ {
49
+ let secureColumns: string[] = [];
50
+ let readOnlyColumns: string[] = [];
51
+ this.addSecureColumns(secureColumns);
52
+ this.addReadOnlyColumns(readOnlyColumns);
53
+ let ans = new ObjectSchema(name ?? this.getName(), require, null);
54
+ this.forEachColumn((name, element) =>
55
+ {
56
+ if (!secureColumns.includes(name))
57
+ ans.addField(this.getVariableSchema(name, element, readOnlyColumns.includes(name)));
58
+ });
59
+ return ans;
60
+ }
61
+ public checkColumn(column: string)
62
+ {
63
+ let columns: string[] = [];
64
+ this.forEachColumn(name => columns.push(name));
65
+ if (!columns.includes(column))
66
+ ErrorOperation.throwHTTP(404, `Column '${column}' not found`);
67
+ }
68
+ public abstract forEachColumn(handler: (name: string, column: ModelColumnOption) => void): void;
69
+ private getVariableSchema(name: string, element: ModelColumnOption, read_only: boolean): BaseVariableSchema
70
+ {
71
+ let schema = this.getTypeSchema(element);
72
+ schema.read_only = read_only;
73
+ let es = this.getExamples();
74
+ schema.example = es[name] ?? "";
75
+ return new BaseVariableSchema(name, schema);
76
+ }
77
+ protected abstract getTypeSchema(element: ModelColumnOption): BaseTypeSchema;
78
+ protected getExamples(): { [name: string]: string }
79
+ {
80
+ return {};
81
+ }
82
+ public getSchemaNames(): string[]
83
+ {
84
+ return [];
85
+ }
86
+ public getSchemaByName(require: boolean, name?: string): ObjectSchema
87
+ {
88
+ let ans = this.getSchema(require, name);
89
+ if (name)
90
+ {
91
+ let names = this.getSchemaNames();
92
+ if (!names.includes(name))
93
+ throw new Error("Wrong schema name was provided: " + name);
94
+ this.setSchemaByName(ans);
95
+ }
96
+ return ans;
97
+ }
98
+ public getArraySchemaByName(require: boolean, name?: string): ArraySchema
99
+ {
100
+ let ans = this.getSchemaByName(require, name);
101
+ return new ArraySchema(require, [ans]);
102
+ }
103
+ protected setSchemaByName(_: ObjectSchema): void
104
+ {
105
+ }
106
+ public getNotFoundError(conditions: any | null)
107
+ {
108
+ return ErrorOperation.getHTTP(404, "Could not found " + this.getName() + " for " + JSON.stringify(conditions));
109
+ }
98
110
  }
@@ -1,33 +1,33 @@
1
- import { ExecException, exec, execSync } from 'child_process';
2
- import { ConsoleOperation } from 'namirasoft-core';
3
- export class CommandOperation
4
- {
5
- static exec(command: string, cwd: string | undefined)
6
- {
7
- exec(command, { cwd }, (error: ExecException | null, stdout: string, stderr: string) =>
8
- {
9
- if (error)
10
- {
11
- ConsoleOperation.error(`error: ${error.message}`);
12
- return;
13
- }
14
- if (stderr)
15
- {
16
- ConsoleOperation.error(`stderr: ${stderr}`);
17
- return;
18
- }
19
- ConsoleOperation.log(`stdout:\n${stdout}`);
20
- });
21
- }
22
- static execSync(command: string, cwd: string | undefined)
23
- {
24
- try
25
- {
26
- return execSync(command, { cwd, encoding: 'utf-8' });
27
- } catch (error: any)
28
- {
29
- ConsoleOperation.error(error.stdout);
30
- throw error;
31
- }
32
- }
1
+ import { ExecException, exec, execSync } from 'child_process';
2
+ import { ConsoleOperation } from 'namirasoft-core';
3
+ export class CommandOperation
4
+ {
5
+ static exec(command: string, cwd: string | undefined)
6
+ {
7
+ exec(command, { cwd }, (error: ExecException | null, stdout: string, stderr: string) =>
8
+ {
9
+ if (error)
10
+ {
11
+ ConsoleOperation.error(`error: ${error.message}`);
12
+ return;
13
+ }
14
+ if (stderr)
15
+ {
16
+ ConsoleOperation.error(`stderr: ${stderr}`);
17
+ return;
18
+ }
19
+ ConsoleOperation.log(`stdout:\n${stdout}`);
20
+ });
21
+ }
22
+ static execSync(command: string, cwd: string | undefined)
23
+ {
24
+ try
25
+ {
26
+ return execSync(command, { cwd, encoding: 'utf-8' });
27
+ } catch (error: any)
28
+ {
29
+ ConsoleOperation.error(error.stdout);
30
+ throw error;
31
+ }
32
+ }
33
33
  }
@@ -1,8 +1,8 @@
1
- import { BaseDatabase } from "./BaseDatabase";
2
-
3
- export class EmptyDatabase extends BaseDatabase
4
- {
5
- override init() { }
6
- override connect() { }
7
- override async sync(_: boolean) { }
1
+ import { BaseDatabase } from "./BaseDatabase";
2
+
3
+ export class EmptyDatabase extends BaseDatabase
4
+ {
5
+ override init() { }
6
+ override connect() { }
7
+ override async sync(_: boolean) { }
8
8
  }
package/src/EnvService.ts CHANGED
@@ -1,23 +1,23 @@
1
- import { ConvertService } from "namirasoft-core";
2
-
3
- export class EnvService extends ConvertService
4
- {
5
- name: string;
6
- constructor(name: string, mandatory: boolean = false)
7
- {
8
- super(mandatory);
9
- this.name = name;
10
- }
11
- override getNullString()
12
- {
13
- let ans = process.env[this.name];
14
- if (ans)
15
- return ans;
16
- return null;
17
- }
18
- protected override onMandatoryError(): void
19
- {
20
- if (!process.env.NAMIRASOFT_MUTE)
21
- throw new Error(`Env value was not provided: ${this.name}`);
22
- }
1
+ import { ConvertService } from "namirasoft-core";
2
+
3
+ export class EnvService extends ConvertService
4
+ {
5
+ name: string;
6
+ constructor(name: string, mandatory: boolean = false)
7
+ {
8
+ super(mandatory);
9
+ this.name = name;
10
+ }
11
+ override getNullString()
12
+ {
13
+ let ans = process.env[this.name];
14
+ if (ans)
15
+ return ans;
16
+ return null;
17
+ }
18
+ protected override onMandatoryError(): void
19
+ {
20
+ if (!process.env.NAMIRASOFT_MUTE)
21
+ throw new Error(`Env value was not provided: ${this.name}`);
22
+ }
23
23
  }
@@ -1,23 +1,23 @@
1
- import smtpTransport from 'nodemailer-smtp-transport';
2
- import { BaseEmailService } from './BaseEmailService';
3
-
4
- export class GmailService extends BaseEmailService
5
- {
6
- password: string;
7
- constructor(username: string, password: string)
8
- {
9
- super(username);
10
- this.password = password;
11
- }
12
- protected override getTransform(): any
13
- {
14
- return smtpTransport({
15
- service: 'gmail',
16
- host: 'smtp.gmail.com',
17
- auth: {
18
- user: this.username,
19
- pass: this.password
20
- }
21
- });
22
- }
1
+ import smtpTransport from 'nodemailer-smtp-transport';
2
+ import { BaseEmailService } from './BaseEmailService';
3
+
4
+ export class GmailService extends BaseEmailService
5
+ {
6
+ password: string;
7
+ constructor(username: string, password: string)
8
+ {
9
+ super(username);
10
+ this.password = password;
11
+ }
12
+ protected override getTransform(): any
13
+ {
14
+ return smtpTransport({
15
+ service: 'gmail',
16
+ host: 'smtp.gmail.com',
17
+ auth: {
18
+ user: this.username,
19
+ pass: this.password
20
+ }
21
+ });
22
+ }
23
23
  }
@@ -1,39 +1,39 @@
1
- import * as express from 'express';
2
- import { getClientIp } from '@supercharge/request-ip';
3
- import { RequestHeaderService } from './RequestHeaderService';
4
- import { ErrorOperation } from 'namirasoft-core';
5
-
6
- export class IPOperation
7
- {
8
- static ERROR_MESSAGE_IP_IS_NOT_WHITELIST = `Ip does not match the whitelisted IP address: {0}`;
9
- static getIP(req: express.Request): string
10
- {
11
- let ip = new RequestHeaderService(req, 'cf-connecting-ip').getString();
12
- if (!ip)
13
- ip = new RequestHeaderService(req, 'x-forwarded-for').getString();
14
- if (!ip)
15
- ip = getClientIp(req) ?? "";
16
- ip = ip.split(',')[0];
17
- return ip;
18
- }
19
- static isWhitelist(req: express.Request, whitelist: string[])
20
- {
21
- let ip = this.getIP(req);
22
- if (!whitelist)
23
- return true;
24
- if (whitelist.length === 0)
25
- return true;
26
- if (whitelist.includes(ip))
27
- return true;
28
- for (let item of whitelist)
29
- if (ip.substring(0, item.length) === item)
30
- return true;
31
- return false;
32
- }
33
- static checkWhitelist(req: express.Request, whitelist: string[])
34
- {
35
- let valid = this.isWhitelist(req, whitelist);
36
- if (!valid)
37
- ErrorOperation.throwHTTP(403, this.ERROR_MESSAGE_IP_IS_NOT_WHITELIST, this.getIP(req));
38
- }
1
+ import * as express from 'express';
2
+ import { getClientIp } from '@supercharge/request-ip';
3
+ import { RequestHeaderService } from './RequestHeaderService';
4
+ import { ErrorOperation } from 'namirasoft-core';
5
+
6
+ export class IPOperation
7
+ {
8
+ static ERROR_MESSAGE_IP_IS_NOT_WHITELIST = `Ip does not match the whitelisted IP address: {0}`;
9
+ static getIP(req: express.Request): string
10
+ {
11
+ let ip = new RequestHeaderService(req, 'cf-connecting-ip').getString();
12
+ if (!ip)
13
+ ip = new RequestHeaderService(req, 'x-forwarded-for').getString();
14
+ if (!ip)
15
+ ip = getClientIp(req) ?? "";
16
+ ip = ip.split(',')[0];
17
+ return ip;
18
+ }
19
+ static isWhitelist(req: express.Request, whitelist: string[])
20
+ {
21
+ let ip = this.getIP(req);
22
+ if (!whitelist)
23
+ return true;
24
+ if (whitelist.length === 0)
25
+ return true;
26
+ if (whitelist.includes(ip))
27
+ return true;
28
+ for (let item of whitelist)
29
+ if (ip.substring(0, item.length) === item)
30
+ return true;
31
+ return false;
32
+ }
33
+ static checkWhitelist(req: express.Request, whitelist: string[])
34
+ {
35
+ let valid = this.isWhitelist(req, whitelist);
36
+ if (!valid)
37
+ ErrorOperation.throwHTTP(403, this.ERROR_MESSAGE_IP_IS_NOT_WHITELIST, this.getIP(req));
38
+ }
39
39
  }
package/src/Meta.ts CHANGED
@@ -1,41 +1,41 @@
1
- import * as express from 'express';
2
- import { IncomingHttpHeaders } from "http";
3
- import { IPOperation } from './IPOperation';
4
- import { HTTPMethod } from 'namirasoft-core';
5
-
6
- export class Meta
7
- {
8
- info: { name: string, tag: string, method: HTTPMethod, path: string, summary: string };
9
- ip: string;
10
- method: string;
11
- url: string;
12
- headers?: IncomingHttpHeaders;
13
- body?: any;
14
- start_time: Date | null = null;
15
- end_time: Date | null = null;
16
- duration: number | null = null;
17
- code: number = 200;
18
- message: string = "Success";
19
- error: Error | null = null;
20
- constructor(info: { name: string, tag: string, method: HTTPMethod, path: string, summary: string }, req: express.Request, sensitive: boolean)
21
- {
22
- this.info = info;
23
- this.ip = IPOperation.getIP(req);
24
- this.method = req.method;
25
- this.url = req.originalUrl;
26
- if (!sensitive)
27
- {
28
- this.headers = req.headers;
29
- this.body = req.body;
30
- }
31
- }
32
- onStart()
33
- {
34
- this.start_time = new Date();
35
- }
36
- onFinish()
37
- {
38
- this.end_time = new Date();
39
- this.duration = (this.end_time?.getTime() ?? 0) - (this.start_time?.getTime() ?? 0);
40
- }
1
+ import * as express from 'express';
2
+ import { IncomingHttpHeaders } from "http";
3
+ import { IPOperation } from './IPOperation';
4
+ import { HTTPMethod } from 'namirasoft-core';
5
+
6
+ export class Meta
7
+ {
8
+ info: { name: string, tag: string, method: HTTPMethod, path: string, summary: string };
9
+ ip: string;
10
+ method: string;
11
+ url: string;
12
+ headers?: IncomingHttpHeaders;
13
+ body?: any;
14
+ start_time: Date | null = null;
15
+ end_time: Date | null = null;
16
+ duration: number | null = null;
17
+ code: number = 200;
18
+ message: string = "Success";
19
+ error: Error | null = null;
20
+ constructor(info: { name: string, tag: string, method: HTTPMethod, path: string, summary: string }, req: express.Request, sensitive: boolean)
21
+ {
22
+ this.info = info;
23
+ this.ip = IPOperation.getIP(req);
24
+ this.method = req.method;
25
+ this.url = req.originalUrl;
26
+ if (!sensitive)
27
+ {
28
+ this.headers = req.headers;
29
+ this.body = req.body;
30
+ }
31
+ }
32
+ onStart()
33
+ {
34
+ this.start_time = new Date();
35
+ }
36
+ onFinish()
37
+ {
38
+ this.end_time = new Date();
39
+ this.duration = (this.end_time?.getTime() ?? 0) - (this.start_time?.getTime() ?? 0);
40
+ }
41
41
  }