@dooboostore/simple-boot-http-server 1.0.14

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 (74) hide show
  1. package/README.MD +269 -0
  2. package/SimpleBootHttpServer.d.ts +16 -0
  3. package/SimpleBootHttpServer.js +313 -0
  4. package/codes/HttpHeaders.d.ts +42 -0
  5. package/codes/HttpHeaders.js +43 -0
  6. package/codes/HttpMethod.d.ts +12 -0
  7. package/codes/HttpMethod.js +13 -0
  8. package/codes/HttpStatus.d.ts +20 -0
  9. package/codes/HttpStatus.js +21 -0
  10. package/codes/Mimes.d.ts +28 -0
  11. package/codes/Mimes.js +29 -0
  12. package/decorators/MethodMapping.d.ts +74 -0
  13. package/decorators/MethodMapping.js +198 -0
  14. package/endpoints/CrossDomainHeaderEndPoint.d.ts +16 -0
  15. package/endpoints/CrossDomainHeaderEndPoint.js +37 -0
  16. package/endpoints/EndPoint.d.ts +7 -0
  17. package/endpoints/EndPoint.js +2 -0
  18. package/endpoints/HeaderEndPoint.d.ts +12 -0
  19. package/endpoints/HeaderEndPoint.js +26 -0
  20. package/errors/BadRequestError.d.ts +8 -0
  21. package/errors/BadRequestError.js +8 -0
  22. package/errors/ForbiddenError.d.ts +8 -0
  23. package/errors/ForbiddenError.js +8 -0
  24. package/errors/HttpError.d.ts +12 -0
  25. package/errors/HttpError.js +8 -0
  26. package/errors/InternalServerError.d.ts +8 -0
  27. package/errors/InternalServerError.js +8 -0
  28. package/errors/NotFoundError.d.ts +8 -0
  29. package/errors/NotFoundError.js +8 -0
  30. package/errors/UnauthorizedError.d.ts +8 -0
  31. package/errors/UnauthorizedError.js +8 -0
  32. package/filters/CacheFilter.d.ts +45 -0
  33. package/filters/CacheFilter.js +145 -0
  34. package/filters/Filter.d.ts +17 -0
  35. package/filters/Filter.js +2 -0
  36. package/filters/HttpStatusFilter.d.ts +20 -0
  37. package/filters/HttpStatusFilter.js +31 -0
  38. package/filters/OpenApi3Filter.d.ts +142 -0
  39. package/filters/OpenApi3Filter.js +57 -0
  40. package/filters/ResourceFilter.d.ts +24 -0
  41. package/filters/ResourceFilter.js +72 -0
  42. package/filters/ThrowFilter.d.ts +19 -0
  43. package/filters/ThrowFilter.js +34 -0
  44. package/inject/InjectSituationType.d.ts +4 -0
  45. package/inject/InjectSituationType.js +5 -0
  46. package/lifecycle/OnInit.d.ts +5 -0
  47. package/lifecycle/OnInit.js +2 -0
  48. package/models/RequestResponse.d.ts +107 -0
  49. package/models/RequestResponse.js +467 -0
  50. package/models/datas/HeaderData.d.ts +10 -0
  51. package/models/datas/HeaderData.js +7 -0
  52. package/models/datas/MultipartData.d.ts +14 -0
  53. package/models/datas/MultipartData.js +2 -0
  54. package/models/datas/ReqHeader.d.ts +69 -0
  55. package/models/datas/ReqHeader.js +3 -0
  56. package/models/datas/Resource.d.ts +11 -0
  57. package/models/datas/Resource.js +55 -0
  58. package/models/datas/body/ReqFormUrlBody.d.ts +4 -0
  59. package/models/datas/body/ReqFormUrlBody.js +3 -0
  60. package/models/datas/body/ReqJsonBody.d.ts +4 -0
  61. package/models/datas/body/ReqJsonBody.js +3 -0
  62. package/models/datas/body/ReqMultipartFormBody.d.ts +6 -0
  63. package/models/datas/body/ReqMultipartFormBody.js +6 -0
  64. package/models/method/patch/PatchJson.d.ts +8 -0
  65. package/models/method/patch/PatchJson.js +11 -0
  66. package/option/HttpServerOption.d.ts +85 -0
  67. package/option/HttpServerOption.js +35 -0
  68. package/package.json +83 -0
  69. package/resolvers/Resolver.d.ts +5 -0
  70. package/resolvers/Resolver.js +2 -0
  71. package/resolvers/ResourceResorver.d.ts +6 -0
  72. package/resolvers/ResourceResorver.js +18 -0
  73. package/session/SessionManager.d.ts +57 -0
  74. package/session/SessionManager.js +108 -0
@@ -0,0 +1,11 @@
1
+ import { RequestResponse } from '../RequestResponse';
2
+ export declare class Resource {
3
+ path: string | RequestResponse | URL;
4
+ rootPath: string;
5
+ constructor(path: string | RequestResponse | URL, rootPath?: string);
6
+ get absolutePath(): string;
7
+ get conTentType(): string;
8
+ get data(): Promise<string>;
9
+ write(rr: RequestResponse): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=Resource.d.ts.map
@@ -0,0 +1,55 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import fs from 'fs';
11
+ import path from 'path';
12
+ import mime from 'mime-types';
13
+ import { RequestResponse } from '../RequestResponse';
14
+ import { HttpStatus } from '../../codes/HttpStatus';
15
+ import { HttpHeaders } from '../../codes/HttpHeaders';
16
+ export class Resource {
17
+ constructor(path, rootPath = process.cwd()) {
18
+ this.path = path;
19
+ this.rootPath = rootPath;
20
+ }
21
+ get absolutePath() {
22
+ if (this.path instanceof RequestResponse) {
23
+ return path.join(this.rootPath, this.path.reqUrlObj().pathname);
24
+ }
25
+ else if (this.path instanceof URL) {
26
+ return path.join(this.rootPath, this.path.pathname);
27
+ }
28
+ else {
29
+ return path.join(this.rootPath, this.path);
30
+ }
31
+ }
32
+ get conTentType() {
33
+ return mime.lookup(this.absolutePath).toString();
34
+ }
35
+ get data() {
36
+ const promise = new Promise((resolve, reject) => {
37
+ fs.readFile('', (error, fileBuffer) => {
38
+ if (error) {
39
+ reject(error);
40
+ }
41
+ const fileContent = fileBuffer.toString();
42
+ resolve(fileContent);
43
+ });
44
+ });
45
+ return promise;
46
+ }
47
+ write(rr) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ rr.resStatusCode(HttpStatus.Ok);
50
+ rr.resSetHeader(HttpHeaders.ContentType, this.conTentType);
51
+ yield rr.resEnd(fs.readFileSync(this.absolutePath));
52
+ });
53
+ }
54
+ }
55
+ //# sourceMappingURL=Resource.js.map
@@ -0,0 +1,4 @@
1
+ export declare class ReqFormUrlBody {
2
+ [key: string]: string | string[];
3
+ }
4
+ //# sourceMappingURL=ReqFormUrlBody.d.ts.map
@@ -0,0 +1,3 @@
1
+ export class ReqFormUrlBody {
2
+ }
3
+ //# sourceMappingURL=ReqFormUrlBody.js.map
@@ -0,0 +1,4 @@
1
+ export declare class ReqJsonBody {
2
+ [key: string]: any;
3
+ }
4
+ //# sourceMappingURL=ReqJsonBody.d.ts.map
@@ -0,0 +1,3 @@
1
+ export class ReqJsonBody {
2
+ }
3
+ //# sourceMappingURL=ReqJsonBody.js.map
@@ -0,0 +1,6 @@
1
+ import { MultipartData } from '../MultipartData';
2
+ export declare class ReqMultipartFormBody {
3
+ field: MultipartData[];
4
+ constructor(field?: MultipartData[]);
5
+ }
6
+ //# sourceMappingURL=ReqMultipartFormBody.d.ts.map
@@ -0,0 +1,6 @@
1
+ export class ReqMultipartFormBody {
2
+ constructor(field = []) {
3
+ this.field = field;
4
+ }
5
+ }
6
+ //# sourceMappingURL=ReqMultipartFormBody.js.map
@@ -0,0 +1,8 @@
1
+ import { Operation as JsonOperation } from 'fast-json-patch';
2
+ export type Operation = JsonOperation;
3
+ export declare class PatchJson {
4
+ private patch;
5
+ constructor(patch: Operation[]);
6
+ apply(obj: any): any;
7
+ }
8
+ //# sourceMappingURL=PatchJson.d.ts.map
@@ -0,0 +1,11 @@
1
+ import jsonpatch from 'fast-json-patch';
2
+ export class PatchJson {
3
+ constructor(patch) {
4
+ this.patch = patch;
5
+ }
6
+ apply(obj) {
7
+ obj = jsonpatch.applyPatch(obj, this.patch).newDocument;
8
+ return obj;
9
+ }
10
+ }
11
+ //# sourceMappingURL=PatchJson.js.map
@@ -0,0 +1,85 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { InitOptionType, SimOption } from '@dooboostore/simple-boot/SimOption';
4
+ import { ConstructorType } from '@dooboostore/core/types';
5
+ import { Server as HttpServer, ServerOptions } from 'http';
6
+ import { Server as HttpsServer, ServerOptions as HttpsServerOption } from 'https';
7
+ import { Filter } from '../filters/Filter';
8
+ import { EndPoint } from '../endpoints/EndPoint';
9
+ import { RequestResponse } from '../models/RequestResponse';
10
+ import { SimpleBootHttpServer } from '../SimpleBootHttpServer';
11
+ import { TransactionManager } from '@dooboostore/core/transaction/TransactionManager';
12
+ export type Listen = {
13
+ port?: number;
14
+ hostname?: string;
15
+ backlog?: number;
16
+ listeningListener?: (server: SimpleBootHttpServer, httpServer: HttpServer | HttpsServer) => void;
17
+ };
18
+ export interface ListenData extends Listen {
19
+ port: number;
20
+ hostname: string;
21
+ }
22
+ export declare class HttpServerOption extends SimOption {
23
+ static readonly DEFAULT_PORT = 8081;
24
+ static readonly DEFAULT_HOSTNAME = "127.0.0.1";
25
+ serverOption?: ServerOptions | HttpsServerOption;
26
+ listen: ListenData;
27
+ filters?: (Filter | ConstructorType<Filter>)[];
28
+ fileUploadTempPath?: string;
29
+ requestEndPoints?: (EndPoint | ConstructorType<EndPoint>)[];
30
+ closeEndPoints?: (EndPoint | ConstructorType<EndPoint>)[];
31
+ errorEndPoints?: (EndPoint | ConstructorType<EndPoint>)[];
32
+ sessionOption: {
33
+ key: string;
34
+ expiredTime: number;
35
+ provider?: {
36
+ uuids: () => Promise<string[]>;
37
+ delete: (uuid: string) => Promise<void>;
38
+ get: (uuid: string) => Promise<{
39
+ access: number;
40
+ data?: any;
41
+ }>;
42
+ set: (uuid: string, data: {
43
+ access: number;
44
+ data?: any;
45
+ }) => Promise<void>;
46
+ };
47
+ };
48
+ globalAdvice?: any | ConstructorType<any>;
49
+ noSuchRouteEndPointMappingThrow?: (rr: RequestResponse) => any;
50
+ transactionManagerFactory?: () => TransactionManager;
51
+ constructor({ serverOption, listen, filters, requestEndPoints, closeEndPoints, errorEndPoints, sessionOption, globalAdvice, fileUploadTempPath, noSuchRouteEndPointMappingThrow, transactionManagerFactory }?: {
52
+ serverOption?: ServerOptions | HttpsServerOption;
53
+ listen?: Listen;
54
+ filters?: (Filter | ConstructorType<Filter>)[];
55
+ requestEndPoints?: (EndPoint | ConstructorType<EndPoint>)[];
56
+ closeEndPoints?: (EndPoint | ConstructorType<EndPoint>)[];
57
+ errorEndPoints?: (EndPoint | ConstructorType<EndPoint>)[];
58
+ sessionOption?: {
59
+ key?: string;
60
+ expiredTime?: number;
61
+ provider?: {
62
+ uuids: () => Promise<string[]>;
63
+ delete: (uuid: string) => Promise<void>;
64
+ get: (uuid: string) => Promise<{
65
+ access: number;
66
+ data?: any;
67
+ }>;
68
+ set: (uuid: string, data: {
69
+ access: number;
70
+ data?: any;
71
+ }) => Promise<void>;
72
+ };
73
+ };
74
+ globalAdvice?: any | ConstructorType<any>;
75
+ fileUploadTempPath?: string;
76
+ noSuchRouteEndPointMappingThrow?: (rr: RequestResponse) => any;
77
+ transactionManagerFactory?: () => TransactionManager;
78
+ }, initSimOption?: InitOptionType);
79
+ get hostname(): string;
80
+ get port(): number;
81
+ get protocol(): "http" | "https";
82
+ get address(): string;
83
+ get isSecure(): boolean;
84
+ }
85
+ //# sourceMappingURL=HttpServerOption.d.ts.map
@@ -0,0 +1,35 @@
1
+ import { SimOption } from '@dooboostore/simple-boot/SimOption';
2
+ export class HttpServerOption extends SimOption {
3
+ constructor({ serverOption, listen, filters, requestEndPoints, closeEndPoints, errorEndPoints, sessionOption, globalAdvice, fileUploadTempPath, noSuchRouteEndPointMappingThrow, transactionManagerFactory } = {}, initSimOption) {
4
+ super(initSimOption);
5
+ this.serverOption = serverOption;
6
+ this.listen = Object.assign({ port: HttpServerOption.DEFAULT_PORT, hostname: HttpServerOption.DEFAULT_HOSTNAME }, listen);
7
+ this.filters = filters;
8
+ this.requestEndPoints = requestEndPoints;
9
+ this.closeEndPoints = closeEndPoints;
10
+ this.errorEndPoints = errorEndPoints;
11
+ this.sessionOption = Object.assign({ key: 'SBSESSIONID', expiredTime: 1000 * 60 * 30 }, sessionOption);
12
+ this.globalAdvice = globalAdvice;
13
+ this.fileUploadTempPath = fileUploadTempPath;
14
+ this.noSuchRouteEndPointMappingThrow = noSuchRouteEndPointMappingThrow;
15
+ this.transactionManagerFactory = transactionManagerFactory;
16
+ }
17
+ get hostname() {
18
+ return this.listen.hostname;
19
+ }
20
+ get port() {
21
+ return this.listen.port;
22
+ }
23
+ get protocol() {
24
+ return this.isSecure ? 'https' : 'http';
25
+ }
26
+ get address() {
27
+ return `${this.protocol}://${this.hostname}:${this.port}`;
28
+ }
29
+ get isSecure() {
30
+ return this.serverOption && 'key' in this.serverOption && 'cert' in this.serverOption;
31
+ }
32
+ }
33
+ HttpServerOption.DEFAULT_PORT = 8081;
34
+ HttpServerOption.DEFAULT_HOSTNAME = '127.0.0.1';
35
+ //# sourceMappingURL=HttpServerOption.js.map
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "@dooboostore/simple-boot-http-server",
3
+ "version": "1.0.14",
4
+ "main": "dist/SimpleBootHttpServer.js",
5
+ "license": "MIT",
6
+ "description": "back end http server frameworks",
7
+ "files": [
8
+ "**/*.js",
9
+ "**/*.d.ts"
10
+ ],
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "keywords": [
15
+ "front",
16
+ "spa",
17
+ "SPA",
18
+ "module",
19
+ "front-end",
20
+ "framwork",
21
+ "node"
22
+ ],
23
+ "author": "dooboostore <dooboostore@gmail.com> (https://github.com/dooboostore)",
24
+ "contributors": [
25
+ "sewoo <sewooimda@nate.com> (https://github.com/sewoo)",
26
+ "SeoDH <adonis_84@naver.com> (https://github.com/SeoDH)",
27
+ "tkyung (https://github.com/tkyungDev)",
28
+ "Hoil-Gang (https://github.com/khl1154)",
29
+ "hwangsero (https://github.com/hwangsero)"
30
+ ],
31
+ "homepage": "https://github.com/dooboostore-develop/packages",
32
+ "bugs": {
33
+ "url": "https://github.com/dooboostore-develop/packages",
34
+ "email": "dooboostore@gmail.com"
35
+ },
36
+ "devDependencies": {
37
+ "@types/jest": "^26.0.23",
38
+ "@types/mime-types": "^2.1.1",
39
+ "@types/node": "^20",
40
+ "@typescript-eslint/eslint-plugin": "^4.16.1",
41
+ "@typescript-eslint/parser": "^4.16.1",
42
+ "eslint": "^7.21.0",
43
+ "eslint-config-standard": "^16.0.2",
44
+ "eslint-plugin-import": "^2.22.1",
45
+ "eslint-plugin-node": "^11.1.0",
46
+ "eslint-plugin-promise": "^4.3.1",
47
+ "jest": "^26.6.3",
48
+ "nodemon": "^2.0.15",
49
+ "supertest": "^6.1.3",
50
+ "ts-jest": "^26.5.4",
51
+ "ts-node": "^10.0.0",
52
+ "ts-node-dev": "^1.1.8",
53
+ "tsconfig-paths": "^3.9.0",
54
+ "typescript": "^4.4.3"
55
+ },
56
+ "dependencies": {
57
+ "@types/node-gzip": "^1.1.0",
58
+ "fast-json-patch": "^3.1.0",
59
+ "mime-types": "^2.1.34",
60
+ "node-gzip": "^1.1.2",
61
+ "reflect-metadata": "^0.2.2",
62
+ "canvas": "^3.1.0",
63
+ "@dooboostore/core": "1.0.7",
64
+ "@dooboostore/core-node": "1.0.1",
65
+ "@dooboostore/core-web": "1.0.1",
66
+ "@dooboostore/dom-render": "1.0.99",
67
+ "@dooboostore/simple-boot": "1.0.43"
68
+ },
69
+ "scripts": {
70
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
71
+ "clean": "rm -rf dist",
72
+ "npm:build": "pnpm run build && cp README.MD dist/ && pnpm pack && TARBALL_NAME=$(ls dooboostore-simple-boot-http-server-*.tgz | head -n 1) && tar -xzf \"$TARBALL_NAME\" -C dist --strip-components=1 package/package.json && rm \"$TARBALL_NAME\"",
73
+ "npm:clean": "rm -rf dist",
74
+ "npm:publish": "pnpm run npm:build && cd dist && pnpm publish --no-git-checks",
75
+ "npm:publish:clean": "pnpm run npm:publish && rm -rf dist",
76
+ "ts:clean": "find . -name '*.js' -o -name '*.map' -o -name '*.d.ts' | xargs rm -f",
77
+ "tsc": "tsc",
78
+ "tsc:watch": "rm -rf ./dist && mkdir dist && cp package.json dist && tsc --watch --sourceMap true",
79
+ "tsc:watch:prod": "rm -rf dist && mkdir dist && cp package-prod.json dist/package.json && cp README.MD dist && tsc --watch --outDir dist --declarationDir dist",
80
+ "test": "jest --detectOpenHandles --forceExit",
81
+ "typecheck": "tsc --noEmit"
82
+ }
83
+ }
@@ -0,0 +1,5 @@
1
+ import { RequestResponse } from '../models/RequestResponse';
2
+ export interface Resolver<T = any> {
3
+ resolve(data: T, rr: RequestResponse): Promise<void>;
4
+ }
5
+ //# sourceMappingURL=Resolver.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Resolver.js.map
@@ -0,0 +1,6 @@
1
+ import { Resolver } from './Resolver';
2
+ import { RequestResponse } from '../models/RequestResponse';
3
+ export declare class ResourceResorver implements Resolver {
4
+ resolve(data: string | undefined, rr: RequestResponse): Promise<void>;
5
+ }
6
+ //# sourceMappingURL=ResourceResorver.d.ts.map
@@ -0,0 +1,18 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Resource } from '../models/datas/Resource';
8
+ import { Sim } from '@dooboostore/simple-boot/decorators/SimDecorator';
9
+ let ResourceResorver = class ResourceResorver {
10
+ resolve(data, rr) {
11
+ return new Resource(data !== null && data !== void 0 ? data : rr).write(rr);
12
+ }
13
+ };
14
+ ResourceResorver = __decorate([
15
+ Sim
16
+ ], ResourceResorver);
17
+ export { ResourceResorver };
18
+ //# sourceMappingURL=ResourceResorver.js.map
@@ -0,0 +1,57 @@
1
+ import { HttpServerOption } from '../option/HttpServerOption';
2
+ import { RequestResponse } from '../models/RequestResponse';
3
+ export declare class SessionManager {
4
+ private option;
5
+ private sessions;
6
+ sessionOption: {
7
+ key: string;
8
+ expiredTime: number;
9
+ provider?: {
10
+ uuids: () => Promise<string[]>;
11
+ delete: (uuid: string) => Promise<void>;
12
+ get: (uuid: string) => Promise<{
13
+ access: number;
14
+ data?: any;
15
+ }>;
16
+ set: (uuid: string, data: {
17
+ access: number;
18
+ data?: any;
19
+ }) => Promise<void>;
20
+ };
21
+ };
22
+ constructor(option: HttpServerOption);
23
+ getSessionUUIDs(): Promise<string[]>;
24
+ deleteSession(uuid: string): Promise<void>;
25
+ getSessionDataSet(uuid: string): Promise<{
26
+ access: number;
27
+ data?: any;
28
+ }>;
29
+ setSessionDataSet(uuid: string, dataSet: {
30
+ access: number;
31
+ data?: any;
32
+ }): Promise<void>;
33
+ isExpired(access: number, now?: number): boolean;
34
+ makeUUID(): string;
35
+ session(): Promise<{
36
+ uuid: string;
37
+ dataSet: {
38
+ access: number;
39
+ data?: any;
40
+ };
41
+ }>;
42
+ session(uuid: string): Promise<{
43
+ uuid: string;
44
+ dataSet: {
45
+ access: number;
46
+ data?: any;
47
+ };
48
+ }>;
49
+ session(rr: RequestResponse): Promise<{
50
+ uuid: string;
51
+ dataSet: {
52
+ access: number;
53
+ data?: any;
54
+ };
55
+ }>;
56
+ }
57
+ //# sourceMappingURL=SessionManager.d.ts.map
@@ -0,0 +1,108 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { RandomUtils } from '@dooboostore/core/random/RandomUtils';
11
+ import { RequestResponse } from '../models/RequestResponse';
12
+ export class SessionManager {
13
+ constructor(option) {
14
+ this.option = option;
15
+ this.sessions = new Map();
16
+ this.sessionOption = option.sessionOption;
17
+ setInterval(() => __awaiter(this, void 0, void 0, function* () {
18
+ const uuids = (yield this.getSessionUUIDs());
19
+ for (const uuid of uuids) {
20
+ const dataSet = yield this.getSessionDataSet(uuid);
21
+ if (dataSet && this.isExpired(dataSet.access)) {
22
+ yield this.deleteSession(uuid);
23
+ }
24
+ }
25
+ }), this.sessionOption.expiredTime);
26
+ }
27
+ getSessionUUIDs() {
28
+ var _a;
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ if ((_a = this.sessionOption.provider) === null || _a === void 0 ? void 0 : _a.uuids) {
31
+ return this.sessionOption.provider.uuids();
32
+ }
33
+ else {
34
+ return Array.from(this.sessions.keys());
35
+ }
36
+ });
37
+ }
38
+ deleteSession(uuid) {
39
+ var _a;
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ if ((_a = this.sessionOption.provider) === null || _a === void 0 ? void 0 : _a.delete) {
42
+ this.sessionOption.provider.delete(uuid);
43
+ }
44
+ else {
45
+ this.sessions.delete(uuid);
46
+ }
47
+ });
48
+ }
49
+ getSessionDataSet(uuid) {
50
+ var _a;
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ if ((_a = this.sessionOption.provider) === null || _a === void 0 ? void 0 : _a.get) {
53
+ return this.sessionOption.provider.get(uuid);
54
+ }
55
+ else {
56
+ return this.sessions.get(uuid);
57
+ }
58
+ });
59
+ }
60
+ setSessionDataSet(uuid, dataSet) {
61
+ var _a;
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ if ((_a = this.sessionOption.provider) === null || _a === void 0 ? void 0 : _a.set) {
64
+ this.sessionOption.provider.set(uuid, dataSet);
65
+ }
66
+ else {
67
+ this.sessions.set(uuid, dataSet);
68
+ }
69
+ });
70
+ }
71
+ isExpired(access, now = Date.now()) {
72
+ return (now - access) >= this.option.sessionOption.expiredTime;
73
+ }
74
+ makeUUID() {
75
+ return RandomUtils.uuid('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
76
+ }
77
+ session(rrOrUUID) {
78
+ var _a;
79
+ return __awaiter(this, void 0, void 0, function* () {
80
+ let uuid;
81
+ if (rrOrUUID instanceof RequestResponse) {
82
+ uuid = (_a = rrOrUUID.reqCookieGet(this.sessionOption.key)) !== null && _a !== void 0 ? _a : this.makeUUID();
83
+ }
84
+ else if (typeof rrOrUUID === 'string') {
85
+ uuid = rrOrUUID;
86
+ }
87
+ else {
88
+ uuid = this.makeUUID();
89
+ }
90
+ let dataSet = yield this.getSessionDataSet(uuid);
91
+ const now = Date.now();
92
+ if (dataSet) {
93
+ if (this.isExpired(dataSet.access, now)) {
94
+ delete dataSet.data;
95
+ }
96
+ dataSet.access = now;
97
+ }
98
+ else {
99
+ dataSet = {
100
+ access: now
101
+ };
102
+ }
103
+ yield this.setSessionDataSet(uuid, dataSet);
104
+ return { uuid, dataSet };
105
+ });
106
+ }
107
+ }
108
+ //# sourceMappingURL=SessionManager.js.map