@urga-panel/ur-panels-core 1.0.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/.eslintrc.js +13 -0
- package/dist/ServiceManager.d.ts +26 -0
- package/dist/ServiceManager.js +351 -0
- package/dist/TestRun.d.ts +1 -0
- package/dist/TestRun.js +14 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +22 -0
- package/dist/services/abstract/apiService/ApiService.d.ts +17 -0
- package/dist/services/abstract/apiService/ApiService.js +33 -0
- package/dist/services/abstract/authServices/AuthService.d.ts +75 -0
- package/dist/services/abstract/authServices/AuthService.js +275 -0
- package/dist/services/abstract/authServices/Authorization.d.ts +0 -0
- package/dist/services/abstract/authServices/Authorization.js +0 -0
- package/dist/services/abstract/extensionServices/ExtensionService.d.ts +25 -0
- package/dist/services/abstract/extensionServices/ExtensionService.js +21 -0
- package/dist/services/abstract/pageServices/LayoutPageService.d.ts +17 -0
- package/dist/services/abstract/pageServices/LayoutPageService.js +32 -0
- package/dist/services/abstract/pageServices/PageServices.d.ts +20 -0
- package/dist/services/abstract/pageServices/PageServices.js +23 -0
- package/dist/services/abstract/pageServices/controllers/NSPageControllerService.d.ts +10 -0
- package/dist/services/abstract/pageServices/controllers/NSPageControllerService.js +18 -0
- package/dist/services/abstract/pageServices/controllers/PageControllerService.d.ts +27 -0
- package/dist/services/abstract/pageServices/controllers/PageControllerService.js +24 -0
- package/dist/services/abstract/pageServices/controllers/SVPageControllerService.d.ts +34 -0
- package/dist/services/abstract/pageServices/controllers/SVPageControllerService.js +73 -0
- package/dist/services/abstract/pageServices/pages/NsPageService.d.ts +26 -0
- package/dist/services/abstract/pageServices/pages/NsPageService.js +66 -0
- package/dist/services/abstract/project/ProjectInfoService.d.ts +42 -0
- package/dist/services/abstract/project/ProjectInfoService.js +72 -0
- package/dist/services/abstract/webviewServices/WVBackService.d.ts +18 -0
- package/dist/services/abstract/webviewServices/WVBackService.js +22 -0
- package/dist/services/abstract/webviewServices/WVFrontService.d.ts +21 -0
- package/dist/services/abstract/webviewServices/WVFrontService.js +54 -0
- package/dist/services/abstract/webviewServices/nv.d.ts +26 -0
- package/dist/services/abstract/webviewServices/nv.js +99 -0
- package/dist/services/main/fetchServices/FetchBrowserService.d.ts +19 -0
- package/dist/services/main/fetchServices/FetchBrowserService.js +26 -0
- package/dist/services/main/httpServices/RequestHandlerService.d.ts +46 -0
- package/dist/services/main/httpServices/RequestHandlerService.js +165 -0
- package/dist/services/main/remoteApiControllerService/RemoteApiControllerService.d.ts +36 -0
- package/dist/services/main/remoteApiControllerService/RemoteApiControllerService.js +42 -0
- package/dist/services/main/testServices/TestService.d.ts +19 -0
- package/dist/services/main/testServices/TestService.js +22 -0
- package/dist/services/main/testServices/TestService2.d.ts +18 -0
- package/dist/services/main/testServices/TestService2.js +20 -0
- package/dist/types/RegisterServiceInfo.d.ts +13 -0
- package/dist/types/RegisterServiceInfo.js +1 -0
- package/dist/types/Service.d.ts +32 -0
- package/dist/types/Service.js +43 -0
- package/dist/types/ServiceConstructor.d.ts +5 -0
- package/dist/types/ServiceConstructor.js +1 -0
- package/dist/types/ServiceEntry.d.ts +6 -0
- package/dist/types/ServiceEntry.js +1 -0
- package/dist/types/ServiceOts.d.ts +12 -0
- package/dist/types/ServiceOts.js +1 -0
- package/dist/types/ServiceRegisterInfo.d.ts +29 -0
- package/dist/types/ServiceRegisterInfo.js +25 -0
- package/dist/types/ServiceResponse.d.ts +13 -0
- package/dist/types/ServiceResponse.js +1 -0
- package/dist/types/ServiceSetupOptions.d.ts +3 -0
- package/dist/types/ServiceSetupOptions.js +1 -0
- package/dist/types/ServiceStatus.d.ts +1 -0
- package/dist/types/ServiceStatus.js +1 -0
- package/dist/types/_ServiceError.d.ts +5 -0
- package/dist/types/_ServiceError.js +1 -0
- package/jest.config.js +5 -0
- package/package.json +35 -0
- package/src/ServiceManager.ts +403 -0
- package/src/TestRun.ts +17 -0
- package/src/index.ts +26 -0
- package/src/services/abstract/apiService/ApiService.ts +51 -0
- package/src/services/abstract/authServices/AuthService.ts +364 -0
- package/src/services/abstract/authServices/Authorization.ts +0 -0
- package/src/services/abstract/extensionServices/ExtensionService.ts +50 -0
- package/src/services/abstract/pageServices/LayoutPageService.ts +49 -0
- package/src/services/abstract/pageServices/PageServices.ts +37 -0
- package/src/services/abstract/pageServices/controllers/NSPageControllerService.ts +23 -0
- package/src/services/abstract/pageServices/controllers/PageControllerService.ts +56 -0
- package/src/services/abstract/pageServices/controllers/SVPageControllerService.ts +104 -0
- package/src/services/abstract/pageServices/pages/NSPageService.ts +82 -0
- package/src/services/abstract/project/ProjectInfoService.ts +108 -0
- package/src/services/abstract/webviewServices/WVBackService.ts +34 -0
- package/src/services/abstract/webviewServices/WVFrontService.ts +71 -0
- package/src/services/abstract/webviewServices/nv.js +112 -0
- package/src/services/abstract/webviewServices/nv.ts +125 -0
- package/src/services/main/fetchServices/FetchBrowserService.ts +40 -0
- package/src/services/main/httpServices/RequestHandlerService.ts +207 -0
- package/src/services/main/remoteApiControllerService/RemoteApiControllerService.ts +70 -0
- package/src/services/main/testServices/TestService.ts +36 -0
- package/src/services/main/testServices/TestService2.ts +34 -0
- package/src/types/RegisterServiceInfo.ts +19 -0
- package/src/types/Service.ts +61 -0
- package/src/types/ServiceConstructor.ts +6 -0
- package/src/types/ServiceEntry.ts +10 -0
- package/src/types/ServiceOts.ts +17 -0
- package/src/types/ServiceRegisterInfo.ts +48 -0
- package/src/types/ServiceResponse.ts +13 -0
- package/src/types/ServiceSetupOptions.ts +5 -0
- package/src/types/ServiceStatus.ts +2 -0
- package/src/types/_ServiceError.ts +5 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { Service } from "../../../types/Service.js";
|
|
2
|
+
import { RegisterServiceInfo } from "../../../types/ServiceRegisterInfo.js";
|
|
3
|
+
export class RequestHandlerService extends Service {
|
|
4
|
+
ots;
|
|
5
|
+
static serviceInfo = {
|
|
6
|
+
name: "RequestHandlerService",
|
|
7
|
+
requiredServices: ["AuthService"],
|
|
8
|
+
};
|
|
9
|
+
handlers = {};
|
|
10
|
+
async onSetup(options) {
|
|
11
|
+
return { status: "success", message: "TestService setup complete" };
|
|
12
|
+
}
|
|
13
|
+
async onStart() {
|
|
14
|
+
return { status: "success", message: "TestService started" };
|
|
15
|
+
}
|
|
16
|
+
async onStop() {
|
|
17
|
+
return { status: "success", message: "TestService stopped" };
|
|
18
|
+
}
|
|
19
|
+
async onDestroy() {
|
|
20
|
+
return { status: "success", message: "TestService destroyed" };
|
|
21
|
+
}
|
|
22
|
+
constructor(ots) {
|
|
23
|
+
super(ots);
|
|
24
|
+
this.ots = ots;
|
|
25
|
+
}
|
|
26
|
+
async addHandler(name, callback, options) {
|
|
27
|
+
this.handlers[name] = { callback, options };
|
|
28
|
+
this.log.OK("RequestHandlerService addHandler", name);
|
|
29
|
+
}
|
|
30
|
+
async requestCome({ params, request, url }) {
|
|
31
|
+
this.log.OK("RequestHandlerService requestCome", params);
|
|
32
|
+
let bodyData = null;
|
|
33
|
+
const contentType = request.headers.get('content-type');
|
|
34
|
+
try {
|
|
35
|
+
if (contentType?.includes('application/json')) {
|
|
36
|
+
bodyData = await request.json();
|
|
37
|
+
}
|
|
38
|
+
else if (contentType?.includes('form')) {
|
|
39
|
+
const formData = await request.formData();
|
|
40
|
+
const data = {};
|
|
41
|
+
for (const [key, value] of formData.entries()) {
|
|
42
|
+
data[key] = value;
|
|
43
|
+
}
|
|
44
|
+
bodyData = data;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
// JSON değilse veya body yoksa hata alınabilir, burada kontrol edebilirsiniz
|
|
49
|
+
bodyData = null;
|
|
50
|
+
}
|
|
51
|
+
const handlerName = params.path; // Assuming path is the handler name
|
|
52
|
+
const handler = this.handlers[handlerName];
|
|
53
|
+
if (!handler) {
|
|
54
|
+
this.log.ERROR("Handler not found:", handlerName);
|
|
55
|
+
//throw new Error(`Handler not found: ${handlerName}`);
|
|
56
|
+
return { status: "error", message: "An error occurred" };
|
|
57
|
+
}
|
|
58
|
+
const event = { params, request, url };
|
|
59
|
+
this.log.OK("RequestHandlerService requestCome event");
|
|
60
|
+
try {
|
|
61
|
+
let header = {};
|
|
62
|
+
let user = null;
|
|
63
|
+
if (handler.options?.auth) {
|
|
64
|
+
const authService = this.ots.usedService.AuthService();
|
|
65
|
+
if (!authService) {
|
|
66
|
+
this.log.ERROR("AuthService not found");
|
|
67
|
+
return this.resposeHandler({ status: "error", message: "Authentication service not available" });
|
|
68
|
+
}
|
|
69
|
+
const cookieHeader = request.headers.get('cookie');
|
|
70
|
+
const accessToken = this.getCookie(cookieHeader, 'accessToken');
|
|
71
|
+
const refreshToken = this.getCookie(cookieHeader, 'refreshToken');
|
|
72
|
+
// Check authentication and role
|
|
73
|
+
const isAuthenticated = await authService.checkToken({
|
|
74
|
+
accessToken,
|
|
75
|
+
refreshToken,
|
|
76
|
+
options: {
|
|
77
|
+
role: handler.options?.role
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
console.log("isAuthenticated", isAuthenticated);
|
|
81
|
+
if (!isAuthenticated.valid) {
|
|
82
|
+
return this.resposeHandler({ status: "error", message: "Unauthorized" });
|
|
83
|
+
}
|
|
84
|
+
user = isAuthenticated.user || null;
|
|
85
|
+
if (isAuthenticated.newAccessToken) {
|
|
86
|
+
// Update cookies with new tokens
|
|
87
|
+
console.log("update token");
|
|
88
|
+
header = {
|
|
89
|
+
"Set-Cookie": `accessToken=${isAuthenticated.newAccessToken}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=900, refreshToken=${isAuthenticated.newRefreshToken}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,
|
|
90
|
+
};
|
|
91
|
+
// const response = new Response(JSON.stringify({ status: "success", message: "Authenticated with new token" }), {
|
|
92
|
+
// status: 200,
|
|
93
|
+
// headers: {
|
|
94
|
+
// 'Content-Type': 'application/json'
|
|
95
|
+
// }
|
|
96
|
+
// });
|
|
97
|
+
// return response;
|
|
98
|
+
}
|
|
99
|
+
//return this.resposeHandler({ status: "success", message: "Authenticated with old token" });
|
|
100
|
+
}
|
|
101
|
+
let response;
|
|
102
|
+
if (bodyData !== null) {
|
|
103
|
+
response = await handler.callback({ ...bodyData, ...event, user });
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
response = await handler.callback({ ...event, user });
|
|
107
|
+
}
|
|
108
|
+
console.log("RequestHandlerService requestCome response");
|
|
109
|
+
console.log("Object.keys(header).length", Object.keys(header).length);
|
|
110
|
+
// Eğer header içinde Set-Cookie veya başka header varsa response'a ekle
|
|
111
|
+
if (Object.keys(header).length > 0) {
|
|
112
|
+
// Response zaten bir Response nesnesi ise, header'ları birleştirerek yeni bir Response oluştur
|
|
113
|
+
const originalBody = await response.text();
|
|
114
|
+
response = new Response(originalBody, {
|
|
115
|
+
status: response.status,
|
|
116
|
+
statusText: response.statusText,
|
|
117
|
+
headers: {
|
|
118
|
+
...Object.fromEntries(response.headers.entries()),
|
|
119
|
+
...header,
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
this.log.OK("RequestHandlerService requestCome response", response);
|
|
124
|
+
return response;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
return { status: "error", message: error.message || "An error occurred" };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
getCookie(cookieHeader, name) {
|
|
131
|
+
if (!cookieHeader)
|
|
132
|
+
return undefined;
|
|
133
|
+
const cookies = cookieHeader.split(';').map(c => c.trim());
|
|
134
|
+
for (const cookie of cookies) {
|
|
135
|
+
const [key, ...val] = cookie.split('=');
|
|
136
|
+
if (key === name)
|
|
137
|
+
return val.join('=');
|
|
138
|
+
}
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
resposeHandler(response) {
|
|
142
|
+
if (response.status === "success") {
|
|
143
|
+
return new Response(JSON.stringify(response), {
|
|
144
|
+
status: 200,
|
|
145
|
+
headers: {
|
|
146
|
+
'Content-Type': 'application/json'
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
return new Response(JSON.stringify(response), {
|
|
151
|
+
status: 400,
|
|
152
|
+
headers: {
|
|
153
|
+
'Content-Type': 'application/json'
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const registerServiceInfo = new RegisterServiceInfo({
|
|
159
|
+
serviceName: "RequestHandlerService",
|
|
160
|
+
service: RequestHandlerService,
|
|
161
|
+
tag: "RequestHandlerService",
|
|
162
|
+
dynamicTag: false,
|
|
163
|
+
requiredServices: [],
|
|
164
|
+
isAbstract: false,
|
|
165
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Service } from "../../../types/Service.js";
|
|
2
|
+
import { ServiceOts } from "../../../types/ServiceOts.js";
|
|
3
|
+
import { ServiceResponse } from "../../../types/ServiceResponse.js";
|
|
4
|
+
import { ServiceSetupOptions } from "../../../types/ServiceSetupOptions.js";
|
|
5
|
+
export type apiConfig = {
|
|
6
|
+
tag: string;
|
|
7
|
+
api: string;
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
auth: {
|
|
10
|
+
sellerId?: string;
|
|
11
|
+
username?: string;
|
|
12
|
+
password?: string;
|
|
13
|
+
type?: string;
|
|
14
|
+
};
|
|
15
|
+
serviceRef?: any;
|
|
16
|
+
service?: any;
|
|
17
|
+
};
|
|
18
|
+
export type RemoteApiControllerServiceOts = ServiceOts & {
|
|
19
|
+
usedService: {};
|
|
20
|
+
};
|
|
21
|
+
export declare class RemoteApiControllerService extends Service {
|
|
22
|
+
ots: RemoteApiControllerServiceOts;
|
|
23
|
+
static serviceInfo: {
|
|
24
|
+
name: string;
|
|
25
|
+
requiredServices: any[];
|
|
26
|
+
};
|
|
27
|
+
apis: {
|
|
28
|
+
[key: string]: apiConfig;
|
|
29
|
+
};
|
|
30
|
+
protected onSetup(options?: ServiceSetupOptions): Promise<ServiceResponse>;
|
|
31
|
+
protected onStart(): Promise<ServiceResponse>;
|
|
32
|
+
protected onStop(): Promise<ServiceResponse>;
|
|
33
|
+
protected onDestroy(): Promise<ServiceResponse>;
|
|
34
|
+
constructor(ots: RemoteApiControllerServiceOts);
|
|
35
|
+
addApi(apiName: string, serviceRef: any, apiConfig: apiConfig): void;
|
|
36
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Service } from "../../../types/Service.js";
|
|
2
|
+
export class RemoteApiControllerService extends Service {
|
|
3
|
+
ots;
|
|
4
|
+
static serviceInfo = {
|
|
5
|
+
name: "RemoteApiControllerService",
|
|
6
|
+
requiredServices: [],
|
|
7
|
+
};
|
|
8
|
+
apis = {};
|
|
9
|
+
async onSetup(options) {
|
|
10
|
+
return { status: "success", message: "onSetup complete" };
|
|
11
|
+
}
|
|
12
|
+
async onStart() {
|
|
13
|
+
return { status: "success", message: "onStart complete" };
|
|
14
|
+
}
|
|
15
|
+
async onStop() {
|
|
16
|
+
return { status: "success", message: "onStop complete" };
|
|
17
|
+
}
|
|
18
|
+
async onDestroy() {
|
|
19
|
+
return { status: "success", message: "onDestroy complete" };
|
|
20
|
+
}
|
|
21
|
+
constructor(ots) {
|
|
22
|
+
super({ ...ots });
|
|
23
|
+
this.ots = ots;
|
|
24
|
+
}
|
|
25
|
+
addApi(apiName, serviceRef, apiConfig) {
|
|
26
|
+
if (this.apis[apiName]) {
|
|
27
|
+
console.warn(`API ${apiName} already exists. Overwriting.`);
|
|
28
|
+
}
|
|
29
|
+
this.apis[apiName] = apiConfig;
|
|
30
|
+
this.apis[apiName].serviceRef = serviceRef;
|
|
31
|
+
console.log(`API ${apiName} added with config:`, apiConfig);
|
|
32
|
+
// Create a service for each API
|
|
33
|
+
Object.keys(this.apis).forEach(async (apiName) => {
|
|
34
|
+
const service = this.ots.abilities.createChildService?.(apiName, this.apis[apiName].serviceRef);
|
|
35
|
+
if (service) {
|
|
36
|
+
this.apis[apiName].service = service;
|
|
37
|
+
}
|
|
38
|
+
await service.setup();
|
|
39
|
+
await service.start();
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Service } from "../../../types/Service.js";
|
|
2
|
+
import { ServiceOts } from "../../../types/ServiceOts.js";
|
|
3
|
+
import { ServiceResponse } from "../../../types/ServiceResponse.js";
|
|
4
|
+
import { ServiceSetupOptions } from "../../../types/ServiceSetupOptions.js";
|
|
5
|
+
export type TestOts = ServiceOts & {
|
|
6
|
+
usedService: {};
|
|
7
|
+
};
|
|
8
|
+
export declare class TestService extends Service {
|
|
9
|
+
serviceInfo: {
|
|
10
|
+
name: string;
|
|
11
|
+
requiredServices: string[];
|
|
12
|
+
};
|
|
13
|
+
constructor(ots: TestOts);
|
|
14
|
+
protected onSetup(options?: ServiceSetupOptions): Promise<ServiceResponse>;
|
|
15
|
+
protected onStart(): Promise<ServiceResponse>;
|
|
16
|
+
protected onStop(): Promise<ServiceResponse>;
|
|
17
|
+
protected onDestroy(): Promise<ServiceResponse>;
|
|
18
|
+
denemeYazi(): string;
|
|
19
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Service } from "../../../types/Service.js";
|
|
2
|
+
export class TestService extends Service {
|
|
3
|
+
serviceInfo;
|
|
4
|
+
constructor(ots) {
|
|
5
|
+
super({ ...ots });
|
|
6
|
+
}
|
|
7
|
+
async onSetup(options) {
|
|
8
|
+
return { status: "success", message: "TestService setup complete" };
|
|
9
|
+
}
|
|
10
|
+
async onStart() {
|
|
11
|
+
return { status: "success", message: "TestService started" };
|
|
12
|
+
}
|
|
13
|
+
async onStop() {
|
|
14
|
+
return { status: "success", message: "TestService stopped" };
|
|
15
|
+
}
|
|
16
|
+
async onDestroy() {
|
|
17
|
+
return { status: "success", message: "TestService destroyed" };
|
|
18
|
+
}
|
|
19
|
+
denemeYazi() {
|
|
20
|
+
return "deneme";
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Service } from "../../../types/Service.js";
|
|
2
|
+
import { ServiceOts } from "../../../types/ServiceOts.js";
|
|
3
|
+
import { ServiceResponse } from "../../../types/ServiceResponse.js";
|
|
4
|
+
import { ServiceSetupOptions } from "../../../types/ServiceSetupOptions.js";
|
|
5
|
+
export type Test2Ots = ServiceOts & {
|
|
6
|
+
usedService: {};
|
|
7
|
+
};
|
|
8
|
+
export declare class Test2Service extends Service {
|
|
9
|
+
serviceInfo: {
|
|
10
|
+
name: string;
|
|
11
|
+
requiredServices: string[];
|
|
12
|
+
};
|
|
13
|
+
constructor(ots: Test2Ots);
|
|
14
|
+
protected onSetup(options?: ServiceSetupOptions): Promise<ServiceResponse>;
|
|
15
|
+
protected onStart(): Promise<ServiceResponse>;
|
|
16
|
+
protected onStop(): Promise<ServiceResponse>;
|
|
17
|
+
protected onDestroy(): Promise<ServiceResponse>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Service } from "../../../types/Service.js";
|
|
2
|
+
export class Test2Service extends Service {
|
|
3
|
+
serviceInfo;
|
|
4
|
+
constructor(ots) {
|
|
5
|
+
super({ ...ots });
|
|
6
|
+
console.log("Test2Service initialized");
|
|
7
|
+
}
|
|
8
|
+
async onSetup(options) {
|
|
9
|
+
return { status: "success", message: "Test2Service setup complete" };
|
|
10
|
+
}
|
|
11
|
+
async onStart() {
|
|
12
|
+
return { status: "success", message: "Test2Service started" };
|
|
13
|
+
}
|
|
14
|
+
async onStop() {
|
|
15
|
+
return { status: "success", message: "Test2Service stopped" };
|
|
16
|
+
}
|
|
17
|
+
async onDestroy() {
|
|
18
|
+
return { status: "success", message: "Test2Service destroyed" };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Service } from "./Service.js";
|
|
2
|
+
export interface ServiceConstructor<T extends Service> {
|
|
3
|
+
[x: string]: any;
|
|
4
|
+
new (ots: any): T;
|
|
5
|
+
}
|
|
6
|
+
export type RegisterServiceInfo = {
|
|
7
|
+
serviceName: string;
|
|
8
|
+
service: ServiceConstructor<Service>;
|
|
9
|
+
tag: string;
|
|
10
|
+
dynamicTag: boolean;
|
|
11
|
+
requiredServices?: string[];
|
|
12
|
+
isAbstract?: boolean;
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ServiceOts } from "./ServiceOts.js";
|
|
2
|
+
import { ServiceResponse } from "./ServiceResponse.js";
|
|
3
|
+
import { ServiceSetupOptions } from "./ServiceSetupOptions.js";
|
|
4
|
+
export declare abstract class Service {
|
|
5
|
+
private opts;
|
|
6
|
+
static serviceInfo: {
|
|
7
|
+
name: string;
|
|
8
|
+
requiredServices: string[];
|
|
9
|
+
};
|
|
10
|
+
tag: string;
|
|
11
|
+
log: {
|
|
12
|
+
OK: Function;
|
|
13
|
+
ERROR: Function;
|
|
14
|
+
l: Function;
|
|
15
|
+
WARN: Function;
|
|
16
|
+
};
|
|
17
|
+
protected abstract onSetup(options?: ServiceSetupOptions): Promise<ServiceResponse>;
|
|
18
|
+
protected abstract onStart(): Promise<ServiceResponse>;
|
|
19
|
+
protected abstract onStop(): Promise<ServiceResponse>;
|
|
20
|
+
protected abstract onDestroy(): Promise<ServiceResponse>;
|
|
21
|
+
setup(options?: ServiceSetupOptions): Promise<ServiceResponse>;
|
|
22
|
+
start(): Promise<ServiceResponse>;
|
|
23
|
+
stop(): Promise<ServiceResponse>;
|
|
24
|
+
destroy(): Promise<ServiceResponse>;
|
|
25
|
+
constructor(opts: ServiceOts);
|
|
26
|
+
logSetup(): {
|
|
27
|
+
OK: any;
|
|
28
|
+
ERROR: any;
|
|
29
|
+
WARN: any;
|
|
30
|
+
l: any;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export class Service {
|
|
2
|
+
opts;
|
|
3
|
+
static serviceInfo;
|
|
4
|
+
tag = "";
|
|
5
|
+
log;
|
|
6
|
+
async setup(options) {
|
|
7
|
+
this.log.OK("setup called");
|
|
8
|
+
return this.onSetup(options);
|
|
9
|
+
}
|
|
10
|
+
async start() {
|
|
11
|
+
this.log.OK("start called");
|
|
12
|
+
return this.onStart();
|
|
13
|
+
}
|
|
14
|
+
async stop() {
|
|
15
|
+
this.log.OK("stop called");
|
|
16
|
+
return this.onStop();
|
|
17
|
+
}
|
|
18
|
+
async destroy() {
|
|
19
|
+
this.log.OK("destroy called");
|
|
20
|
+
return this.onDestroy();
|
|
21
|
+
}
|
|
22
|
+
constructor(opts) {
|
|
23
|
+
this.opts = opts;
|
|
24
|
+
this.tag = opts.tag;
|
|
25
|
+
if (!opts.usedService["LogService"]) {
|
|
26
|
+
console.error("LogService not found for", opts.tag);
|
|
27
|
+
this.log = this.logSetup();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
//console.log("LogService found for", opts.usedService["LogService"]);
|
|
32
|
+
this.log = opts.usedService["LogService"].logSetupForService(this.tag);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
logSetup() {
|
|
36
|
+
return {
|
|
37
|
+
OK: console.log.bind(console, `[${this.tag}]` + "-[OK]"),
|
|
38
|
+
ERROR: console.error.bind(console, `[${this.tag}]` + "-[ERROR]"),
|
|
39
|
+
WARN: console.warn.bind(console, `[${this.tag}]` + "-[WARN]"),
|
|
40
|
+
l: console.log.bind(console, `[${this.tag}]`),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Service } from "./Service.js";
|
|
2
|
+
import { ServiceConstructor } from "./ServiceConstructor.js";
|
|
3
|
+
export type ServiceOts = {
|
|
4
|
+
usedService: {
|
|
5
|
+
[key: string]: () => Service;
|
|
6
|
+
};
|
|
7
|
+
tag: string;
|
|
8
|
+
abilities?: {
|
|
9
|
+
createChildService?: (tag: string, PageCtor: ServiceConstructor<Service>) => Service;
|
|
10
|
+
};
|
|
11
|
+
type: string;
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Service } from "./Service.js";
|
|
2
|
+
import { ServiceConstructor } from "./ServiceConstructor.js";
|
|
3
|
+
type abstractService = {
|
|
4
|
+
serviceName: string;
|
|
5
|
+
abstractService: typeof Service;
|
|
6
|
+
tag: string;
|
|
7
|
+
dynamicTag: boolean;
|
|
8
|
+
requiredServices?: string[];
|
|
9
|
+
isAbstract: true;
|
|
10
|
+
};
|
|
11
|
+
type normalService = {
|
|
12
|
+
serviceName: string;
|
|
13
|
+
service: ServiceConstructor<Service>;
|
|
14
|
+
tag: string;
|
|
15
|
+
dynamicTag: boolean;
|
|
16
|
+
requiredServices?: string[];
|
|
17
|
+
isAbstract: false;
|
|
18
|
+
};
|
|
19
|
+
export declare class RegisterServiceInfo {
|
|
20
|
+
serviceName: string;
|
|
21
|
+
service: ServiceConstructor<Service>;
|
|
22
|
+
abstractService: typeof Service;
|
|
23
|
+
tag: string;
|
|
24
|
+
dynamicTag: boolean;
|
|
25
|
+
requiredServices?: string[];
|
|
26
|
+
isAbstract: boolean;
|
|
27
|
+
constructor(params: abstractService | normalService);
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class RegisterServiceInfo {
|
|
2
|
+
serviceName;
|
|
3
|
+
service;
|
|
4
|
+
abstractService;
|
|
5
|
+
tag; // Static tag for the service
|
|
6
|
+
dynamicTag; // Dynamic tag for the service
|
|
7
|
+
requiredServices; // List of required services
|
|
8
|
+
isAbstract; // Whether the service is abstract
|
|
9
|
+
constructor(params) {
|
|
10
|
+
this.serviceName = params.serviceName;
|
|
11
|
+
if ('abstractService' in params) {
|
|
12
|
+
this.abstractService = params.abstractService;
|
|
13
|
+
}
|
|
14
|
+
if ('service' in params) {
|
|
15
|
+
if (typeof params.service !== 'function') {
|
|
16
|
+
throw new Error("Service must be a constructor function");
|
|
17
|
+
}
|
|
18
|
+
this.service = params.service;
|
|
19
|
+
}
|
|
20
|
+
this.tag = params.tag;
|
|
21
|
+
this.dynamicTag = params.dynamicTag;
|
|
22
|
+
this.requiredServices = params.requiredServices || [];
|
|
23
|
+
this.isAbstract = params.isAbstract || false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type ServiceResponse<T = unknown> = {
|
|
2
|
+
status: "success" | "error";
|
|
3
|
+
data?: T;
|
|
4
|
+
error?: {
|
|
5
|
+
code: number;
|
|
6
|
+
message: string;
|
|
7
|
+
details?: string;
|
|
8
|
+
};
|
|
9
|
+
message?: string;
|
|
10
|
+
timestamp?: string;
|
|
11
|
+
requestId?: string;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type ServiceStatus = "waitSetup" | "running" | "error" | "waitStart" | "stop";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/jest.config.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@urga-panel/ur-panels-core",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc && tsc-esm-fix dist",
|
|
9
|
+
"test": "jest",
|
|
10
|
+
"lint": "eslint src --ext .ts",
|
|
11
|
+
"start": "npx cross-env MODE=DEBUG ts-node src/TestRun.ts",
|
|
12
|
+
"addServiceStatic": "npx ts-node src/addService/AddServiceStatic.ts"
|
|
13
|
+
},
|
|
14
|
+
"devDependencies": {
|
|
15
|
+
"@types/jest": "^29.0.0",
|
|
16
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
|
17
|
+
"@typescript-eslint/parser": "^6.0.0",
|
|
18
|
+
"eslint": "^8.0.0",
|
|
19
|
+
"jest": "^29.0.0",
|
|
20
|
+
"ts-jest": "^29.0.0",
|
|
21
|
+
"ts-node": "^10.9.2",
|
|
22
|
+
"tsc-esm-fix": "^3.1.2",
|
|
23
|
+
"typescript": "^5.0.0"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@types/jsonwebtoken": "^9.0.10",
|
|
27
|
+
"bcryptjs": "^3.0.2",
|
|
28
|
+
"js-yaml": "^4.1.0",
|
|
29
|
+
"jsonwebtoken": "^9.0.2",
|
|
30
|
+
"yargs": "^18.0.0"
|
|
31
|
+
},
|
|
32
|
+
"bin": {
|
|
33
|
+
"urga-core-cli": "dist/addService/AddServiceStatic.js"
|
|
34
|
+
}
|
|
35
|
+
}
|