@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.
Files changed (101) hide show
  1. package/.eslintrc.js +13 -0
  2. package/dist/ServiceManager.d.ts +26 -0
  3. package/dist/ServiceManager.js +351 -0
  4. package/dist/TestRun.d.ts +1 -0
  5. package/dist/TestRun.js +14 -0
  6. package/dist/index.d.ts +15 -0
  7. package/dist/index.js +22 -0
  8. package/dist/services/abstract/apiService/ApiService.d.ts +17 -0
  9. package/dist/services/abstract/apiService/ApiService.js +33 -0
  10. package/dist/services/abstract/authServices/AuthService.d.ts +75 -0
  11. package/dist/services/abstract/authServices/AuthService.js +275 -0
  12. package/dist/services/abstract/authServices/Authorization.d.ts +0 -0
  13. package/dist/services/abstract/authServices/Authorization.js +0 -0
  14. package/dist/services/abstract/extensionServices/ExtensionService.d.ts +25 -0
  15. package/dist/services/abstract/extensionServices/ExtensionService.js +21 -0
  16. package/dist/services/abstract/pageServices/LayoutPageService.d.ts +17 -0
  17. package/dist/services/abstract/pageServices/LayoutPageService.js +32 -0
  18. package/dist/services/abstract/pageServices/PageServices.d.ts +20 -0
  19. package/dist/services/abstract/pageServices/PageServices.js +23 -0
  20. package/dist/services/abstract/pageServices/controllers/NSPageControllerService.d.ts +10 -0
  21. package/dist/services/abstract/pageServices/controllers/NSPageControllerService.js +18 -0
  22. package/dist/services/abstract/pageServices/controllers/PageControllerService.d.ts +27 -0
  23. package/dist/services/abstract/pageServices/controllers/PageControllerService.js +24 -0
  24. package/dist/services/abstract/pageServices/controllers/SVPageControllerService.d.ts +34 -0
  25. package/dist/services/abstract/pageServices/controllers/SVPageControllerService.js +73 -0
  26. package/dist/services/abstract/pageServices/pages/NsPageService.d.ts +26 -0
  27. package/dist/services/abstract/pageServices/pages/NsPageService.js +66 -0
  28. package/dist/services/abstract/project/ProjectInfoService.d.ts +42 -0
  29. package/dist/services/abstract/project/ProjectInfoService.js +72 -0
  30. package/dist/services/abstract/webviewServices/WVBackService.d.ts +18 -0
  31. package/dist/services/abstract/webviewServices/WVBackService.js +22 -0
  32. package/dist/services/abstract/webviewServices/WVFrontService.d.ts +21 -0
  33. package/dist/services/abstract/webviewServices/WVFrontService.js +54 -0
  34. package/dist/services/abstract/webviewServices/nv.d.ts +26 -0
  35. package/dist/services/abstract/webviewServices/nv.js +99 -0
  36. package/dist/services/main/fetchServices/FetchBrowserService.d.ts +19 -0
  37. package/dist/services/main/fetchServices/FetchBrowserService.js +26 -0
  38. package/dist/services/main/httpServices/RequestHandlerService.d.ts +46 -0
  39. package/dist/services/main/httpServices/RequestHandlerService.js +165 -0
  40. package/dist/services/main/remoteApiControllerService/RemoteApiControllerService.d.ts +36 -0
  41. package/dist/services/main/remoteApiControllerService/RemoteApiControllerService.js +42 -0
  42. package/dist/services/main/testServices/TestService.d.ts +19 -0
  43. package/dist/services/main/testServices/TestService.js +22 -0
  44. package/dist/services/main/testServices/TestService2.d.ts +18 -0
  45. package/dist/services/main/testServices/TestService2.js +20 -0
  46. package/dist/types/RegisterServiceInfo.d.ts +13 -0
  47. package/dist/types/RegisterServiceInfo.js +1 -0
  48. package/dist/types/Service.d.ts +32 -0
  49. package/dist/types/Service.js +43 -0
  50. package/dist/types/ServiceConstructor.d.ts +5 -0
  51. package/dist/types/ServiceConstructor.js +1 -0
  52. package/dist/types/ServiceEntry.d.ts +6 -0
  53. package/dist/types/ServiceEntry.js +1 -0
  54. package/dist/types/ServiceOts.d.ts +12 -0
  55. package/dist/types/ServiceOts.js +1 -0
  56. package/dist/types/ServiceRegisterInfo.d.ts +29 -0
  57. package/dist/types/ServiceRegisterInfo.js +25 -0
  58. package/dist/types/ServiceResponse.d.ts +13 -0
  59. package/dist/types/ServiceResponse.js +1 -0
  60. package/dist/types/ServiceSetupOptions.d.ts +3 -0
  61. package/dist/types/ServiceSetupOptions.js +1 -0
  62. package/dist/types/ServiceStatus.d.ts +1 -0
  63. package/dist/types/ServiceStatus.js +1 -0
  64. package/dist/types/_ServiceError.d.ts +5 -0
  65. package/dist/types/_ServiceError.js +1 -0
  66. package/jest.config.js +5 -0
  67. package/package.json +35 -0
  68. package/src/ServiceManager.ts +403 -0
  69. package/src/TestRun.ts +17 -0
  70. package/src/index.ts +26 -0
  71. package/src/services/abstract/apiService/ApiService.ts +51 -0
  72. package/src/services/abstract/authServices/AuthService.ts +364 -0
  73. package/src/services/abstract/authServices/Authorization.ts +0 -0
  74. package/src/services/abstract/extensionServices/ExtensionService.ts +50 -0
  75. package/src/services/abstract/pageServices/LayoutPageService.ts +49 -0
  76. package/src/services/abstract/pageServices/PageServices.ts +37 -0
  77. package/src/services/abstract/pageServices/controllers/NSPageControllerService.ts +23 -0
  78. package/src/services/abstract/pageServices/controllers/PageControllerService.ts +56 -0
  79. package/src/services/abstract/pageServices/controllers/SVPageControllerService.ts +104 -0
  80. package/src/services/abstract/pageServices/pages/NSPageService.ts +82 -0
  81. package/src/services/abstract/project/ProjectInfoService.ts +108 -0
  82. package/src/services/abstract/webviewServices/WVBackService.ts +34 -0
  83. package/src/services/abstract/webviewServices/WVFrontService.ts +71 -0
  84. package/src/services/abstract/webviewServices/nv.js +112 -0
  85. package/src/services/abstract/webviewServices/nv.ts +125 -0
  86. package/src/services/main/fetchServices/FetchBrowserService.ts +40 -0
  87. package/src/services/main/httpServices/RequestHandlerService.ts +207 -0
  88. package/src/services/main/remoteApiControllerService/RemoteApiControllerService.ts +70 -0
  89. package/src/services/main/testServices/TestService.ts +36 -0
  90. package/src/services/main/testServices/TestService2.ts +34 -0
  91. package/src/types/RegisterServiceInfo.ts +19 -0
  92. package/src/types/Service.ts +61 -0
  93. package/src/types/ServiceConstructor.ts +6 -0
  94. package/src/types/ServiceEntry.ts +10 -0
  95. package/src/types/ServiceOts.ts +17 -0
  96. package/src/types/ServiceRegisterInfo.ts +48 -0
  97. package/src/types/ServiceResponse.ts +13 -0
  98. package/src/types/ServiceSetupOptions.ts +5 -0
  99. package/src/types/ServiceStatus.ts +2 -0
  100. package/src/types/_ServiceError.ts +5 -0
  101. package/tsconfig.json +20 -0
@@ -0,0 +1,82 @@
1
+ import { Service } from "../../../../types/Service";
2
+ import { ServiceOts } from "../../../../types/ServiceOts";
3
+ import { ServiceResponse } from "../../../../types/ServiceResponse";
4
+ import { ServiceSetupOptions } from "../../../../types/ServiceSetupOptions";
5
+
6
+ export type PageOts = ServiceOts & {
7
+ usedService: {
8
+ }
9
+ }
10
+
11
+ export class NSPageService extends Service {
12
+ serviceInfo: { name: string; requiredServices: string[]; };
13
+
14
+ model: any;
15
+ page: any;
16
+
17
+ constructor(ots: PageOts) {
18
+ super({ ...ots });
19
+ }
20
+
21
+ protected async onSetup(options?: ServiceSetupOptions): Promise<ServiceResponse> {
22
+ this.log.OK("onSetup called", options);
23
+ return { status: "success", message: "setup complete" };
24
+ }
25
+
26
+ protected async onStart(): Promise<ServiceResponse> {
27
+ this.log.OK("onStart called");
28
+ return { status: "success", message: "started" };
29
+ }
30
+
31
+ protected async onStop(): Promise<ServiceResponse> {
32
+ this.log.OK("onStop called");
33
+ return { status: "success", message: "stopped" };
34
+ }
35
+
36
+ protected async onDestroy(): Promise<ServiceResponse> {
37
+ this.log.OK("onDestroy called");
38
+ return { status: "success", message: "destroyed" };
39
+ }
40
+
41
+ navigatingTo(callback: (args?: any) => void,
42
+ model:any ,args?: any) {
43
+ this.log.OK("navigatingTo called");
44
+ if (callback) callback(args);
45
+
46
+ if (model) {
47
+ this.model = model;
48
+ //ts-ignore
49
+ const page = args.object;
50
+ page.bindingContext = model;
51
+ this.page = page;
52
+ this.log.OK("Model set:", model);
53
+ } else {
54
+ this.log.WARN("No model provided");
55
+ }
56
+ }
57
+
58
+ navigatedTo(callback: (args?: any) => void, args?: any) {
59
+ this.log.OK("navigatedTo called");
60
+ if (callback) callback(args);
61
+ }
62
+
63
+ onLoaded(callback: (args?: any) => void, args?: any) {
64
+ this.log.OK("onLoaded called");
65
+ if (callback) callback(args);
66
+ }
67
+
68
+ onUnloaded(callback: (args?: any) => void, args?: any) {
69
+ this.log.OK("onUnloaded called");
70
+ if (callback) callback(args);
71
+ }
72
+
73
+ navigatingFrom(callback: (args?: any) => void, args?: any) {
74
+ this.log.OK("navigatingFrom called");
75
+ if (callback) callback(args);
76
+ }
77
+
78
+ navigatedFrom(callback: (args?: any) => void, args?: any) {
79
+ this.log.OK("navigatedFrom called");
80
+ if (callback) callback(args);
81
+ }
82
+ }
@@ -0,0 +1,108 @@
1
+ import { Service } from "../../../types/Service";
2
+ import { ServiceOts } from "../../../types/ServiceOts";
3
+ import { ServiceResponse } from "../../../types/ServiceResponse";
4
+ import { ServiceSetupOptions } from "../../../types/ServiceSetupOptions";
5
+ import { PageService } from "../pageServices/PageServices";
6
+
7
+ export type ProjectsPages = {
8
+ [key: string]: {
9
+ icon: string; // Optional icon for the page
10
+ title: string;
11
+ slug: string;
12
+ description: string;
13
+ showInMenu: boolean;
14
+ showInMobile: boolean;
15
+ order: number;
16
+ group?: string;
17
+ service?: PageService; // Optional service name for custom handling
18
+ serviceRef: any;
19
+ userGroup?: string; // Optional user group for access control
20
+ };
21
+ }
22
+
23
+ export type ProjectInfoOts = ServiceOts & {
24
+ usedService: {
25
+ }
26
+ }
27
+
28
+
29
+ export abstract class ProjectInfoService extends Service {
30
+
31
+ static serviceInfo = {
32
+ name: "ProjectInfoService",
33
+ requiredServices: [],
34
+ }
35
+
36
+ abstract pages: ProjectsPages;
37
+
38
+ constructor(public ots: ProjectInfoOts) {
39
+ super({ ...ots });
40
+ }
41
+
42
+ protected async onSetup(options?: ServiceSetupOptions): Promise<ServiceResponse> {
43
+ // Create a service for each page
44
+ Object.keys(this.pages).forEach(async tag => {
45
+ const service = this.ots.abilities.createChildService?.("ProjectPage-" + tag,
46
+ this.pages[tag].serviceRef || PageService
47
+ );
48
+ if (service) {
49
+ this.pages[tag].service = service as PageService;
50
+ }
51
+ await service.setup();
52
+ });
53
+ return { status: "success", message: "setup complete" };
54
+ }
55
+
56
+ protected async onStart(): Promise<ServiceResponse> {
57
+ // Object.keys(this.pages).forEach(async tag => {
58
+ // const service = this.ots.abilities.createChildService?.("ProjectPage-"+tag);
59
+ // await service.start();
60
+ // });
61
+ return { status: "success", message: "started" };
62
+ }
63
+
64
+ protected async onStop(): Promise<ServiceResponse> {
65
+ return { status: "success", message: "stopped" };
66
+ }
67
+
68
+ protected async onDestroy(): Promise<ServiceResponse> {
69
+ return { status: "success", message: "destroyed" };
70
+ }
71
+
72
+ getMenuPages(userGroup?: string): { [key: string]: ProjectsPages[string] } {
73
+ const result: { [key: string]: ProjectsPages[string] } = {};
74
+ Object.entries(this.pages).forEach(([key, page]) => {
75
+ if (page.showInMenu) {
76
+ if (userGroup && userGroup == 'admin') {
77
+ result[key] = page;
78
+ }
79
+ else {
80
+ if (userGroup) {
81
+ // Check if the page is accessible by the user group
82
+ if (page.userGroup === userGroup) {
83
+ result[key] = page;
84
+ }
85
+ } else {
86
+ result[key] = page;
87
+ }
88
+ }
89
+
90
+ }
91
+ });
92
+ return result;
93
+ }
94
+
95
+ getMobilePages(limit: number = 4): { [key: string]: ProjectsPages[string] } {
96
+ const result: { [key: string]: ProjectsPages[string] } = {};
97
+ let count = 0;
98
+ for (const [key, page] of Object.entries(this.pages)) {
99
+ if (page.showInMobile) {
100
+ result[key] = page;
101
+ count++;
102
+ if (count >= limit) break;
103
+ }
104
+ }
105
+ return result;
106
+ }
107
+
108
+ }
@@ -0,0 +1,34 @@
1
+ import { Service } from "../../../types/Service";
2
+ import { ServiceOts } from "../../../types/ServiceOts";
3
+ import { ServiceResponse } from "../../../types/ServiceResponse";
4
+ import { ServiceSetupOptions } from "../../../types/ServiceSetupOptions";
5
+
6
+ export type WVBackServiceOts = ServiceOts & {
7
+ usedService: {
8
+ }
9
+ }
10
+
11
+ export class WVBackService extends Service {
12
+ static serviceInfo = {
13
+ name: "WVBackService",
14
+ requiredServices: [],
15
+ }
16
+ protected async onSetup(options?: ServiceSetupOptions): Promise<ServiceResponse> {
17
+
18
+ return { status: "success", message: "onSetup complete" };
19
+ }
20
+ protected async onStart(): Promise<ServiceResponse> {
21
+ return { status: "success", message: "onStart complete" };
22
+ }
23
+ protected async onStop(): Promise<ServiceResponse> {
24
+ return { status: "success", message: "onStop complete" };
25
+ }
26
+ protected async onDestroy(): Promise<ServiceResponse> {
27
+ return { status: "success", message: "onDestroy complete" };
28
+ }
29
+ constructor(ots: WVBackServiceOts) {
30
+ super({ ...ots });
31
+ }
32
+
33
+ }
34
+
@@ -0,0 +1,71 @@
1
+ import { Service } from "../../../types/Service";
2
+ import { ServiceOts } from "../../../types/ServiceOts";
3
+ import { ServiceResponse } from "../../../types/ServiceResponse";
4
+ import { ServiceSetupOptions } from "../../../types/ServiceSetupOptions";
5
+ import { NSWebViewinterface } from "./nv";
6
+ export type WVFrontServiceOts = ServiceOts & {
7
+ usedService: {
8
+ }
9
+ }
10
+
11
+ export class WVFrontService extends Service {
12
+ static serviceInfo = {
13
+ name: "WVFrontService",
14
+ requiredServices: [],
15
+ }
16
+ protected async onSetup(options?: ServiceSetupOptions): Promise<ServiceResponse> {
17
+
18
+ this.oWebViewInterface = new NSWebViewinterface();
19
+ //@ts-ignore
20
+ window.nsWebViewInterface = this.oWebViewInterface;
21
+ this.oWebViewInterface.emit("loadFinished", "");
22
+
23
+ return { status: "success", message: "onSetup complete" };
24
+ }
25
+ protected async onStart(): Promise<ServiceResponse> {
26
+ return { status: "success", message: "onStart complete" };
27
+ }
28
+ protected async onStop(): Promise<ServiceResponse> {
29
+ return { status: "success", message: "onStop complete" };
30
+ }
31
+ protected async onDestroy(): Promise<ServiceResponse> {
32
+ return { status: "success", message: "onDestroy complete" };
33
+ }
34
+ public oWebViewInterface: NSWebViewinterface;
35
+
36
+ constructor(ots: WVFrontServiceOts) {
37
+ super({ ...ots });
38
+
39
+ }
40
+
41
+ public async sendFetchRequest(url: string, options?: RequestInit): Promise<any> {
42
+ console.log("sendFetchRequest", url, options);
43
+
44
+ return new Promise((resolve) => {
45
+ const callback = (args: any) => {
46
+ const param = args as unknown;
47
+ // Convert param to a Response object
48
+ debugger;
49
+ //@ts-ignore
50
+ const byteArray = Object.values(param._bodyBlob._buffer);
51
+ //@ts-ignore
52
+ const uint8 = new Uint8Array(byteArray);
53
+ //@ts-ignore
54
+ const text = new TextDecoder().decode(uint8);
55
+ const response = new Response(text,
56
+ {
57
+ status: 200,
58
+ headers: { "Content-Type": "application/json" }
59
+ }
60
+ );
61
+ debugger;
62
+ console.log("sendFetchRequest received", param);
63
+ this.oWebViewInterface.removeListener('sendFetchRequest', callback);
64
+ resolve(response);
65
+ };
66
+ this.oWebViewInterface.on('sendFetchRequest', callback);
67
+ this.oWebViewInterface.emit("sendFetchRequest", { url, options });
68
+ });
69
+ }
70
+
71
+ }
@@ -0,0 +1,112 @@
1
+ class NSWebViewinterface {
2
+ constructor() {
3
+ this.eventListenerMap = {};
4
+ this._iosResponseMap = {};
5
+ this._iosCntResponseId = 0;
6
+ }
7
+
8
+ _onNativeEvent(eventName, data) {
9
+ var lstEvtListeners = this.eventListenerMap[eventName] || [];
10
+ for (var _i = 0; _i < lstEvtListeners.length; _i++) {
11
+ var listener = lstEvtListeners[_i];
12
+ var retnVal = listener && listener(data);
13
+ if (retnVal === false) {
14
+ break;
15
+ }
16
+ }
17
+ }
18
+
19
+ _callJSFunction(reqId, functionName, args) {
20
+ var _this = this;
21
+ var resolvedFn = _this._getResolvedFunction(functionName);
22
+ if(resolvedFn){
23
+ var retnVal = resolvedFn.apply(window, args);
24
+ if (retnVal && retnVal.then) {
25
+ retnVal.then(function (value) {
26
+ _this._sendJSCallResponse(reqId, value);
27
+ }, function(error){
28
+ _this._sendJSCallResponse(reqId, error, true);
29
+ });
30
+ }
31
+ else {
32
+ this._sendJSCallResponse(reqId, retnVal);
33
+ }
34
+ }
35
+ }
36
+
37
+ _getResolvedFunction(functionName) {
38
+ if(functionName && (functionName = functionName.trim()).length){
39
+ functionName = functionName.indexOf('window.') === 0 ? functionName.replace('window.', '') : functionName;
40
+ var arrFnPath = functionName.split('.');
41
+ var fn = window;
42
+ for(var i = 0; i < arrFnPath.length; i++){
43
+ if(!fn[arrFnPath[i]]){
44
+ fn = null;
45
+ break;
46
+ }
47
+ fn = fn[arrFnPath[i]];
48
+ }
49
+ return fn;
50
+ }
51
+ }
52
+
53
+ _sendJSCallResponse(reqId, response, isError) {
54
+ var oResponse = {
55
+ reqId: reqId,
56
+ response: response || null,
57
+ isError: !!isError
58
+ };
59
+ this.emit('_jsCallResponse', oResponse);
60
+ }
61
+
62
+ _createIFrame(src) {
63
+ var rootElm = document.documentElement;
64
+ var newFrameElm = document.createElement("IFRAME");
65
+ newFrameElm.setAttribute("src", src);
66
+ rootElm.appendChild(newFrameElm);
67
+ return newFrameElm;
68
+ }
69
+
70
+ _emitEventToIOS(eventName, data) {
71
+ this._iosResponseMap[++this._iosCntResponseId] = data;
72
+ var metadata = { eventName: eventName, resId: this._iosCntResponseId };
73
+ var url = 'js2ios:' + JSON.stringify(metadata);
74
+ var iFrame = this._createIFrame(url);
75
+ iFrame.parentNode.removeChild(iFrame);
76
+ }
77
+
78
+ _getIOSResponse(resId) {
79
+ var response = this._iosResponseMap[resId];
80
+ delete this._iosResponseMap[resId];
81
+ return response;
82
+ }
83
+
84
+ _emitEventToAndroid(eventName, data) {
85
+ window.androidWebViewInterface.handleEventFromWebView(eventName, data);
86
+ }
87
+
88
+ on(eventName, callback) {
89
+ var lstListeners = this.eventListenerMap[eventName] || (this.eventListenerMap[eventName] = []);
90
+ lstListeners.push(callback);
91
+ }
92
+ removeListener(eventName, callback) {
93
+ const listeners = this.eventListenerMap[eventName];
94
+ if (listeners) {
95
+ // Belirtilen geri çağırma işlevini kaldır
96
+ this.eventListenerMap[eventName] = listeners.filter(listener => listener !== callback);
97
+ }
98
+ }
99
+
100
+ emit(eventName, data) {
101
+ var strData = typeof data === 'object' ? JSON.stringify(data) : data;
102
+ if (window.androidWebViewInterface) {
103
+ this._emitEventToAndroid(eventName, strData);
104
+ }
105
+ else {
106
+ this._emitEventToIOS(eventName, strData);
107
+ }
108
+ }
109
+ }
110
+
111
+ // NSWebViewinterface'i dışa aktar
112
+ export { NSWebViewinterface };
@@ -0,0 +1,125 @@
1
+ type EventCallback = (data: any) => any;
2
+
3
+ declare global {
4
+ interface Window {
5
+ androidWebViewInterface?: {
6
+ handleEventFromWebView: (eventName: string, data: any) => void;
7
+ };
8
+ }
9
+ }
10
+
11
+ class NSWebViewinterface {
12
+ private eventListenerMap: { [eventName: string]: EventCallback[] };
13
+ private _iosResponseMap: { [resId: number]: any };
14
+ private _iosCntResponseId: number;
15
+
16
+ constructor() {
17
+ this.eventListenerMap = {};
18
+ this._iosResponseMap = {};
19
+ this._iosCntResponseId = 0;
20
+ }
21
+
22
+ private _onNativeEvent(eventName: string, data: any): void {
23
+ const lstEvtListeners = this.eventListenerMap[eventName] || [];
24
+ for (let _i = 0; _i < lstEvtListeners.length; _i++) {
25
+ const listener = lstEvtListeners[_i];
26
+ const retnVal = listener && listener(data);
27
+ if (retnVal === false) {
28
+ break;
29
+ }
30
+ }
31
+ }
32
+
33
+ private _callJSFunction(reqId: number, functionName: string, args: any[]): void {
34
+ const resolvedFn = this._getResolvedFunction(functionName);
35
+ if(resolvedFn){
36
+ const retnVal = resolvedFn.apply(window, args);
37
+ if (retnVal && retnVal.then) {
38
+ retnVal.then(
39
+ (value: any) => this._sendJSCallResponse(reqId, value),
40
+ (error: any) => this._sendJSCallResponse(reqId, error, true)
41
+ );
42
+ }
43
+ else {
44
+ this._sendJSCallResponse(reqId, retnVal);
45
+ }
46
+ }
47
+ }
48
+
49
+ private _getResolvedFunction(functionName: string): Function | null {
50
+ if(functionName && (functionName = functionName.trim()).length){
51
+ functionName = functionName.indexOf('window.') === 0 ? functionName.replace('window.', '') : functionName;
52
+ const arrFnPath = functionName.split('.');
53
+ let fn: any = window;
54
+ for(let i = 0; i < arrFnPath.length; i++){
55
+ if(!fn[arrFnPath[i]]){
56
+ fn = null;
57
+ break;
58
+ }
59
+ fn = fn[arrFnPath[i]];
60
+ }
61
+ return typeof fn === 'function' ? fn : null;
62
+ }
63
+ return null;
64
+ }
65
+
66
+ private _sendJSCallResponse(reqId: number, response: any, isError?: boolean): void {
67
+ const oResponse = {
68
+ reqId: reqId,
69
+ response: response ?? null,
70
+ isError: !!isError
71
+ };
72
+ this.emit('_jsCallResponse', oResponse);
73
+ }
74
+
75
+ private _createIFrame(src: string): HTMLIFrameElement {
76
+ const rootElm = document.documentElement;
77
+ const newFrameElm = document.createElement("IFRAME") as HTMLIFrameElement;
78
+ newFrameElm.setAttribute("src", src);
79
+ rootElm.appendChild(newFrameElm);
80
+ return newFrameElm;
81
+ }
82
+
83
+ private _emitEventToIOS(eventName: string, data: any): void {
84
+ this._iosResponseMap[++this._iosCntResponseId] = data;
85
+ const metadata = { eventName: eventName, resId: this._iosCntResponseId };
86
+ const url = 'js2ios:' + JSON.stringify(metadata);
87
+ const iFrame = this._createIFrame(url);
88
+ iFrame.parentNode?.removeChild(iFrame);
89
+ }
90
+
91
+ private _getIOSResponse(resId: number): any {
92
+ const response = this._iosResponseMap[resId];
93
+ delete this._iosResponseMap[resId];
94
+ return response;
95
+ }
96
+
97
+ private _emitEventToAndroid(eventName: string, data: any): void {
98
+ window.androidWebViewInterface?.handleEventFromWebView(eventName, data);
99
+ }
100
+
101
+ public on(eventName: string, callback: EventCallback): void {
102
+ const lstListeners = this.eventListenerMap[eventName] || (this.eventListenerMap[eventName] = []);
103
+ lstListeners.push(callback);
104
+ }
105
+
106
+ public removeListener(eventName: string, callback: EventCallback): void {
107
+ const listeners = this.eventListenerMap[eventName];
108
+ if (listeners) {
109
+ // Belirtilen geri çağırma işlevini kaldır
110
+ this.eventListenerMap[eventName] = listeners.filter(listener => listener !== callback);
111
+ }
112
+ }
113
+
114
+ public emit(eventName: string, data: any): void {
115
+ const strData = typeof data === 'object' ? JSON.stringify(data) : data;
116
+ if (window.androidWebViewInterface) {
117
+ this._emitEventToAndroid(eventName, strData);
118
+ }
119
+ else {
120
+ this._emitEventToIOS(eventName, strData);
121
+ }
122
+ }
123
+ }
124
+
125
+ export { NSWebViewinterface };
@@ -0,0 +1,40 @@
1
+ import { Service } from "../../../types/Service";
2
+ import { ServiceOts } from "../../../types/ServiceOts";
3
+ import { ServiceResponse } from "../../../types/ServiceResponse";
4
+ import { ServiceSetupOptions } from "../../../types/ServiceSetupOptions";
5
+
6
+ export type FetchBrowserServiceOts = ServiceOts & {
7
+ usedService: {
8
+ }
9
+ }
10
+
11
+ export class FetchBrowserService extends Service {
12
+ static serviceInfo = {
13
+ name: "FetchBrowserService",
14
+ requiredServices: [],
15
+ }
16
+ protected async onSetup(options?: ServiceSetupOptions): Promise<ServiceResponse> {
17
+
18
+ return { status: "success", message: "onSetup complete" };
19
+ }
20
+ protected async onStart(): Promise<ServiceResponse> {
21
+ return { status: "success", message: "onStart complete" };
22
+ }
23
+ protected async onStop(): Promise<ServiceResponse> {
24
+ return { status: "success", message: "onStop complete" };
25
+ }
26
+ protected async onDestroy(): Promise<ServiceResponse> {
27
+ return { status: "success", message: "onDestroy complete" };
28
+ }
29
+ constructor(ots: FetchBrowserServiceOts) {
30
+ super({ ...ots });
31
+ }
32
+
33
+ public async sendFetchRequest(url: string, options?: RequestInit) {
34
+ const response = await fetch(url, options);
35
+ return response;
36
+ }
37
+
38
+ }
39
+
40
+