@sudobility/di 1.4.32 → 1.5.2

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 (94) hide show
  1. package/README.md +255 -39
  2. package/dist/rn/analytics/analytics.rn.d.ts +19 -0
  3. package/dist/rn/analytics/analytics.rn.d.ts.map +1 -0
  4. package/dist/rn/analytics/analytics.rn.js +103 -0
  5. package/dist/rn/analytics/analytics.rn.js.map +1 -0
  6. package/dist/rn/env/env.rn.d.ts +14 -0
  7. package/dist/rn/env/env.rn.d.ts.map +1 -0
  8. package/dist/rn/env/env.rn.js +58 -0
  9. package/dist/rn/env/env.rn.js.map +1 -0
  10. package/dist/rn/firebase/firebase.rn.d.ts +19 -0
  11. package/dist/rn/firebase/firebase.rn.d.ts.map +1 -0
  12. package/dist/rn/firebase/firebase.rn.js +318 -0
  13. package/dist/rn/firebase/firebase.rn.js.map +1 -0
  14. package/dist/rn/index.d.ts +29 -0
  15. package/dist/rn/index.d.ts.map +1 -0
  16. package/dist/rn/index.js +27 -0
  17. package/dist/rn/index.js.map +1 -0
  18. package/dist/rn/logging/logging.rn.d.ts +28 -0
  19. package/dist/rn/logging/logging.rn.d.ts.map +1 -0
  20. package/dist/rn/logging/logging.rn.js +78 -0
  21. package/dist/rn/logging/logging.rn.js.map +1 -0
  22. package/dist/rn/navigation/navigation.rn.d.ts +29 -0
  23. package/dist/rn/navigation/navigation.rn.d.ts.map +1 -0
  24. package/dist/rn/navigation/navigation.rn.js +161 -0
  25. package/dist/rn/navigation/navigation.rn.js.map +1 -0
  26. package/dist/rn/network/network-singleton.d.ts +8 -0
  27. package/dist/rn/network/network-singleton.d.ts.map +1 -0
  28. package/dist/rn/network/network-singleton.js +36 -0
  29. package/dist/rn/network/network-singleton.js.map +1 -0
  30. package/dist/rn/network/network.rn.d.ts +41 -0
  31. package/dist/rn/network/network.rn.d.ts.map +1 -0
  32. package/dist/rn/network/network.rn.js +185 -0
  33. package/dist/rn/network/network.rn.js.map +1 -0
  34. package/dist/rn/notification/notification.rn.d.ts +26 -0
  35. package/dist/rn/notification/notification.rn.d.ts.map +1 -0
  36. package/dist/rn/notification/notification.rn.js +187 -0
  37. package/dist/rn/notification/notification.rn.js.map +1 -0
  38. package/dist/rn/storage/storage-singleton.d.ts +25 -0
  39. package/dist/rn/storage/storage-singleton.d.ts.map +1 -0
  40. package/dist/rn/storage/storage-singleton.js +68 -0
  41. package/dist/rn/storage/storage-singleton.js.map +1 -0
  42. package/dist/rn/storage/storage.rn.d.ts +33 -0
  43. package/dist/rn/storage/storage.rn.d.ts.map +1 -0
  44. package/dist/rn/storage/storage.rn.js +113 -0
  45. package/dist/rn/storage/storage.rn.js.map +1 -0
  46. package/dist/rn/theme/theme.rn.d.ts +31 -0
  47. package/dist/rn/theme/theme.rn.d.ts.map +1 -0
  48. package/dist/rn/theme/theme.rn.js +116 -0
  49. package/dist/rn/theme/theme.rn.js.map +1 -0
  50. package/dist/web/firebase/firebase.interface.d.ts +81 -0
  51. package/dist/web/firebase/firebase.interface.d.ts.map +1 -0
  52. package/dist/web/firebase/firebase.interface.js +2 -0
  53. package/dist/web/firebase/firebase.interface.js.map +1 -0
  54. package/dist/web/firebase/firebase.web.d.ts +22 -0
  55. package/dist/web/firebase/firebase.web.d.ts.map +1 -0
  56. package/dist/web/firebase/firebase.web.js +339 -0
  57. package/dist/web/firebase/firebase.web.js.map +1 -0
  58. package/dist/web/index.d.ts +20 -0
  59. package/dist/web/index.d.ts.map +1 -0
  60. package/dist/web/index.js +18 -0
  61. package/dist/web/index.js.map +1 -0
  62. package/dist/web/navigation/navigation.web.d.ts +34 -0
  63. package/dist/web/navigation/navigation.web.d.ts.map +1 -0
  64. package/dist/web/navigation/navigation.web.js +176 -0
  65. package/dist/web/navigation/navigation.web.js.map +1 -0
  66. package/dist/web/navigation/ui-navigation.d.ts +51 -0
  67. package/dist/web/navigation/ui-navigation.d.ts.map +1 -0
  68. package/dist/web/navigation/ui-navigation.js +2 -0
  69. package/dist/web/navigation/ui-navigation.js.map +1 -0
  70. package/dist/web/network/network-singleton.d.ts +5 -0
  71. package/dist/web/network/network-singleton.d.ts.map +1 -0
  72. package/dist/web/network/network-singleton.js +21 -0
  73. package/dist/web/network/network-singleton.js.map +1 -0
  74. package/dist/web/network/network.web.d.ts +12 -0
  75. package/dist/web/network/network.web.d.ts.map +1 -0
  76. package/dist/web/network/network.web.js +124 -0
  77. package/dist/web/network/network.web.js.map +1 -0
  78. package/dist/web/network/web-network.service.d.ts +24 -0
  79. package/dist/web/network/web-network.service.d.ts.map +1 -0
  80. package/dist/web/network/web-network.service.js +150 -0
  81. package/dist/web/network/web-network.service.js.map +1 -0
  82. package/dist/web/storage/storage-singleton.d.ts +5 -0
  83. package/dist/web/storage/storage-singleton.d.ts.map +1 -0
  84. package/dist/web/storage/storage-singleton.js +19 -0
  85. package/dist/web/storage/storage-singleton.js.map +1 -0
  86. package/dist/web/storage/storage.web.d.ts +22 -0
  87. package/dist/web/storage/storage.web.d.ts.map +1 -0
  88. package/dist/web/storage/storage.web.js +107 -0
  89. package/dist/web/storage/storage.web.js.map +1 -0
  90. package/dist/web/storage/web-storage.service.d.ts +23 -0
  91. package/dist/web/storage/web-storage.service.d.ts.map +1 -0
  92. package/dist/web/storage/web-storage.service.js +137 -0
  93. package/dist/web/storage/web-storage.service.js.map +1 -0
  94. package/package.json +66 -5
@@ -0,0 +1,176 @@
1
+ const DEFAULT_CONFIG = {
2
+ enableBackGesture: false,
3
+ enableSwipeGesture: false,
4
+ animationType: 'none',
5
+ enableAnalytics: true,
6
+ fallbackPath: '/',
7
+ };
8
+ export class WebUINavigationService {
9
+ constructor(config = {}) {
10
+ this.listeners = [];
11
+ this.config = { ...DEFAULT_CONFIG, ...config };
12
+ this.currentState = this.buildCurrentState();
13
+ if (typeof window !== 'undefined') {
14
+ window.addEventListener('popstate', this.handlePopState.bind(this));
15
+ }
16
+ }
17
+ navigate(path, options = {}) {
18
+ if (!this.isSupported()) {
19
+ return;
20
+ }
21
+ try {
22
+ if (typeof window !== 'undefined' && window.history) {
23
+ const method = options.replace ? 'replaceState' : 'pushState';
24
+ window.history[method](options.state || null, '', path);
25
+ this.updateCurrentState();
26
+ this.notifyListeners();
27
+ if (this.config.enableAnalytics) {
28
+ this.trackNavigation('navigate', path);
29
+ }
30
+ }
31
+ }
32
+ catch (_error) {
33
+ console.error('Error navigating:', _error);
34
+ }
35
+ }
36
+ goBack(fallbackPath) {
37
+ if (!this.isSupported()) {
38
+ return;
39
+ }
40
+ try {
41
+ if (this.canGoBack() && typeof window !== 'undefined' && window.history) {
42
+ window.history.back();
43
+ if (this.config.enableAnalytics) {
44
+ this.trackNavigation('back');
45
+ }
46
+ }
47
+ else if (fallbackPath) {
48
+ this.navigate(fallbackPath);
49
+ }
50
+ else if (this.config.fallbackPath) {
51
+ this.navigate(this.config.fallbackPath);
52
+ }
53
+ }
54
+ catch (_error) {
55
+ console.error('Error going back:', _error);
56
+ }
57
+ }
58
+ goForward() {
59
+ if (!this.isSupported()) {
60
+ return;
61
+ }
62
+ try {
63
+ if (this.canGoForward() &&
64
+ typeof window !== 'undefined' &&
65
+ window.history) {
66
+ window.history.forward();
67
+ if (this.config.enableAnalytics) {
68
+ this.trackNavigation('forward');
69
+ }
70
+ }
71
+ }
72
+ catch (_error) {
73
+ console.error('Error going forward:', _error);
74
+ }
75
+ }
76
+ replace(path, options = {}) {
77
+ this.navigate(path, { ...options, replace: true });
78
+ }
79
+ getCurrentState() {
80
+ return { ...this.currentState };
81
+ }
82
+ getCurrentPath() {
83
+ if (typeof window !== 'undefined' && window.location) {
84
+ return window.location.pathname;
85
+ }
86
+ return '/';
87
+ }
88
+ getSearchParams() {
89
+ if (typeof window !== 'undefined' && window.location) {
90
+ const params = new URLSearchParams(window.location.search);
91
+ const result = {};
92
+ params.forEach((value, key) => {
93
+ result[key] = value;
94
+ });
95
+ return result;
96
+ }
97
+ return {};
98
+ }
99
+ getParams() {
100
+ return {};
101
+ }
102
+ canGoBack() {
103
+ if (typeof window !== 'undefined' && window.history) {
104
+ return window.history.length > 1;
105
+ }
106
+ return false;
107
+ }
108
+ canGoForward() {
109
+ return false;
110
+ }
111
+ addListener(listener) {
112
+ this.listeners.push(listener);
113
+ return () => {
114
+ const index = this.listeners.indexOf(listener);
115
+ if (index > -1) {
116
+ this.listeners.splice(index, 1);
117
+ }
118
+ };
119
+ }
120
+ isSupported() {
121
+ return (typeof window !== 'undefined' &&
122
+ typeof window.history !== 'undefined' &&
123
+ typeof window.location !== 'undefined');
124
+ }
125
+ buildCurrentState() {
126
+ return {
127
+ currentPath: this.getCurrentPath(),
128
+ params: this.getParams(),
129
+ searchParams: this.getSearchParams(),
130
+ };
131
+ }
132
+ updateCurrentState() {
133
+ const previousPath = this.currentState.currentPath;
134
+ this.currentState = {
135
+ ...this.buildCurrentState(),
136
+ previousPath,
137
+ };
138
+ }
139
+ handlePopState() {
140
+ this.updateCurrentState();
141
+ this.notifyListeners();
142
+ if (this.config.enableAnalytics) {
143
+ this.trackNavigation('popstate', this.currentState.currentPath);
144
+ }
145
+ }
146
+ notifyListeners() {
147
+ this.listeners.forEach((listener) => {
148
+ try {
149
+ listener(this.currentState);
150
+ }
151
+ catch (_error) {
152
+ console.error('Error notifying navigation listener:', _error);
153
+ }
154
+ });
155
+ }
156
+ trackNavigation(_type, _path) {
157
+ }
158
+ }
159
+ export function createWebUINavigationService(config) {
160
+ return new WebUINavigationService(config);
161
+ }
162
+ export const webNavigationHelpers = {
163
+ getReactRouterNavigate: () => {
164
+ return null;
165
+ },
166
+ convertLocationToState: (location) => {
167
+ return {
168
+ currentPath: location.pathname || '/',
169
+ params: location.params || {},
170
+ searchParams: location.search
171
+ ? Object.fromEntries(new URLSearchParams(location.search))
172
+ : {},
173
+ };
174
+ },
175
+ };
176
+ //# sourceMappingURL=navigation.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.web.js","sourceRoot":"","sources":["../../../src/web/navigation/navigation.web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export interface UINavigationState {
2
+ currentPath: string;
3
+ previousPath?: string;
4
+ params: Record<string, string>;
5
+ searchParams: Record<string, string>;
6
+ }
7
+ export interface UINavigationOptions {
8
+ replace?: boolean;
9
+ state?: Record<string, unknown>;
10
+ preventScrollReset?: boolean;
11
+ }
12
+ export interface UINavigationService {
13
+ navigate(path: string, options?: UINavigationOptions): void;
14
+ goBack(fallbackPath?: string): void;
15
+ goForward(): void;
16
+ replace(path: string, options?: UINavigationOptions): void;
17
+ getCurrentState(): UINavigationState;
18
+ getCurrentPath(): string;
19
+ getSearchParams(): Record<string, string>;
20
+ getParams(): Record<string, string>;
21
+ canGoBack(): boolean;
22
+ canGoForward(): boolean;
23
+ addListener(listener: (state: UINavigationState) => void): () => void;
24
+ isSupported(): boolean;
25
+ }
26
+ export interface UINavigationHook {
27
+ navigate: (path: string, options?: UINavigationOptions) => void;
28
+ goBack: (fallbackPath?: string) => void;
29
+ replace: (path: string, options?: UINavigationOptions) => void;
30
+ currentPath: string;
31
+ searchParams: Record<string, string>;
32
+ params: Record<string, string>;
33
+ canGoBack: boolean;
34
+ isSupported: boolean;
35
+ }
36
+ export interface UILocationHook {
37
+ pathname: string;
38
+ search: string;
39
+ searchParams: Record<string, string>;
40
+ hash: string;
41
+ state: Record<string, unknown>;
42
+ key: string;
43
+ }
44
+ export interface UINavigationConfig {
45
+ enableBackGesture?: boolean;
46
+ enableSwipeGesture?: boolean;
47
+ animationType?: 'slide' | 'fade' | 'none';
48
+ enableAnalytics?: boolean;
49
+ fallbackPath?: string;
50
+ }
51
+ //# sourceMappingURL=ui-navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-navigation.d.ts","sourceRoot":"","sources":["../../../src/web/navigation/ui-navigation.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5D,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,IAAI,IAAI,CAAC;IAClB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC3D,eAAe,IAAI,iBAAiB,CAAC;IACrC,cAAc,IAAI,MAAM,CAAC;IACzB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,SAAS,IAAI,OAAO,CAAC;IACrB,YAAY,IAAI,OAAO,CAAC;IACxB,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACtE,WAAW,IAAI,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAChE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ui-navigation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-navigation.js","sourceRoot":"","sources":["../../../src/web/navigation/ui-navigation.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { PlatformNetwork } from '../../network/platform-network.js';
2
+ export declare function initializeNetworkService(): void;
3
+ export declare function getNetworkService(): PlatformNetwork;
4
+ export declare function resetNetworkService(): void;
5
+ //# sourceMappingURL=network-singleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-singleton.d.ts","sourceRoot":"","sources":["../../../src/web/network/network-singleton.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAYzE,wBAAgB,wBAAwB,IAAI,IAAI,CAM/C;AAMD,wBAAgB,iBAAiB,IAAI,eAAe,CAOnD;AAKD,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
@@ -0,0 +1,21 @@
1
+ import { WebNetworkService } from './web-network.service';
2
+ let networkServiceInstance = null;
3
+ export function initializeNetworkService() {
4
+ if (networkServiceInstance) {
5
+ return;
6
+ }
7
+ networkServiceInstance = new WebNetworkService();
8
+ }
9
+ export function getNetworkService() {
10
+ if (!networkServiceInstance) {
11
+ throw new Error('Network service not initialized. Call initializeNetworkService() at app startup.');
12
+ }
13
+ return networkServiceInstance;
14
+ }
15
+ export function resetNetworkService() {
16
+ if (networkServiceInstance && 'destroy' in networkServiceInstance) {
17
+ networkServiceInstance.destroy();
18
+ }
19
+ networkServiceInstance = null;
20
+ }
21
+ //# sourceMappingURL=network-singleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-singleton.js","sourceRoot":"","sources":["../../../src/web/network/network-singleton.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK1D,IAAI,sBAAsB,GAA2B,IAAI,CAAC;AAM1D,MAAM,UAAU,wBAAwB;IACtC,IAAI,sBAAsB,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,sBAAsB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AACnD,CAAC;AAMD,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;IACJ,CAAC;IACD,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAKD,MAAM,UAAU,mBAAmB;IACjC,IAAI,sBAAsB,IAAI,SAAS,IAAI,sBAAsB,EAAE,CAAC;QACjE,sBAA4C,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IACD,sBAAsB,GAAG,IAAI,CAAC;AAChC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { NetworkClient, NetworkResponse, NetworkRequestOptions } from '@sudobility/types';
2
+ export declare class WebNetworkClient implements NetworkClient {
3
+ private defaultTimeout;
4
+ constructor(defaultTimeout?: number);
5
+ request<T = unknown>(url: string, options?: NetworkRequestOptions): Promise<NetworkResponse<T>>;
6
+ get<T = unknown>(url: string, options?: Omit<NetworkRequestOptions, 'method' | 'body'>): Promise<NetworkResponse<T>>;
7
+ post<T = unknown>(url: string, body?: string | FormData | Blob | Record<string, unknown>, options?: Omit<NetworkRequestOptions, 'method'>): Promise<NetworkResponse<T>>;
8
+ put<T = unknown>(url: string, body?: string | FormData | Blob | Record<string, unknown>, options?: Omit<NetworkRequestOptions, 'method'>): Promise<NetworkResponse<T>>;
9
+ delete<T = unknown>(url: string, options?: Omit<NetworkRequestOptions, 'method' | 'body'>): Promise<NetworkResponse<T>>;
10
+ }
11
+ export declare const webNetworkClient: WebNetworkClient;
12
+ //# sourceMappingURL=network.web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.web.d.ts","sourceRoot":"","sources":["../../../src/web/network/network.web.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,aAAa,EACb,eAAe,EACf,qBAAqB,EAEtB,MAAM,mBAAmB,CAAC;AAM3B,qBAAa,gBAAiB,YAAW,aAAa;IACpD,OAAO,CAAC,cAAc,CAAS;gBAEnB,cAAc,GAAE,MAAc;IAIpC,OAAO,CAAC,CAAC,GAAG,OAAO,EACvB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAuGxB,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,MAAM,CAAM,GAC3D,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAIxB,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAM,GAClD,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IA2BxB,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAM,GAClD,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IA2BxB,MAAM,CAAC,CAAC,GAAG,OAAO,EACtB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,IAAI,CAAC,qBAAqB,EAAE,QAAQ,GAAG,MAAM,CAAM,GAC3D,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CAG/B;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
@@ -0,0 +1,124 @@
1
+ import { NetworkError, } from '@sudobility/types';
2
+ export class WebNetworkClient {
3
+ constructor(defaultTimeout = 10000) {
4
+ this.defaultTimeout = defaultTimeout;
5
+ }
6
+ async request(url, options = {}) {
7
+ const { method = 'GET', headers = {}, body, timeout = this.defaultTimeout, signal, } = options;
8
+ const controller = new AbortController();
9
+ const finalSignal = signal || controller.signal;
10
+ const timeoutId = setTimeout(() => controller.abort(), timeout ?? this.defaultTimeout);
11
+ try {
12
+ const fetchOptions = {
13
+ method: method ?? 'GET',
14
+ signal: finalSignal,
15
+ };
16
+ if (headers) {
17
+ fetchOptions.headers = headers;
18
+ }
19
+ if (body) {
20
+ fetchOptions.body = body;
21
+ }
22
+ const response = await fetch(url, fetchOptions);
23
+ clearTimeout(timeoutId);
24
+ let data;
25
+ const contentType = response.headers.get('content-type') || '';
26
+ if (contentType.includes('application/json')) {
27
+ data = await response.json();
28
+ }
29
+ else if (contentType.includes('text/')) {
30
+ data = (await response.text());
31
+ }
32
+ else {
33
+ data = (await response.blob());
34
+ }
35
+ const responseHeaders = {};
36
+ response.headers.forEach((value, key) => {
37
+ responseHeaders[key] = value;
38
+ });
39
+ const networkResponse = {
40
+ ok: response.ok,
41
+ status: response.status,
42
+ statusText: response.statusText,
43
+ data,
44
+ headers: responseHeaders,
45
+ success: response.ok,
46
+ timestamp: new Date().toISOString(),
47
+ };
48
+ if (!response.ok) {
49
+ let errorMessage = `HTTP ${response.status}: ${response.statusText}`;
50
+ if (data &&
51
+ typeof data === 'object' &&
52
+ 'message' in data &&
53
+ typeof data.message === 'string') {
54
+ errorMessage += ` - ${data.message}`;
55
+ }
56
+ throw new NetworkError(errorMessage, response.status, response.statusText);
57
+ }
58
+ return networkResponse;
59
+ }
60
+ catch (error) {
61
+ clearTimeout(timeoutId);
62
+ if (error instanceof NetworkError) {
63
+ throw error;
64
+ }
65
+ if (error instanceof Error) {
66
+ if (error.name === 'AbortError') {
67
+ throw new NetworkError('Request timeout', 408, 'Request Timeout');
68
+ }
69
+ throw new NetworkError(error.message, 0, 'Network Error');
70
+ }
71
+ throw new NetworkError('Unknown network error', 0, 'Unknown Error');
72
+ }
73
+ }
74
+ async get(url, options = {}) {
75
+ return this.request(url, { ...options, method: 'GET' });
76
+ }
77
+ async post(url, body, options = {}) {
78
+ const requestBody = typeof body === 'object' &&
79
+ body !== null &&
80
+ !(body instanceof FormData) &&
81
+ !(body instanceof Blob)
82
+ ? JSON.stringify(body)
83
+ : body;
84
+ const headers = { ...options.headers };
85
+ if (typeof body === 'object' &&
86
+ body !== null &&
87
+ !(body instanceof FormData) &&
88
+ !(body instanceof Blob)) {
89
+ headers['Content-Type'] = 'application/json';
90
+ }
91
+ return this.request(url, {
92
+ ...options,
93
+ method: 'POST',
94
+ body: requestBody,
95
+ headers,
96
+ });
97
+ }
98
+ async put(url, body, options = {}) {
99
+ const requestBody = typeof body === 'object' &&
100
+ body !== null &&
101
+ !(body instanceof FormData) &&
102
+ !(body instanceof Blob)
103
+ ? JSON.stringify(body)
104
+ : body;
105
+ const headers = { ...options.headers };
106
+ if (typeof body === 'object' &&
107
+ body !== null &&
108
+ !(body instanceof FormData) &&
109
+ !(body instanceof Blob)) {
110
+ headers['Content-Type'] = 'application/json';
111
+ }
112
+ return this.request(url, {
113
+ ...options,
114
+ method: 'PUT',
115
+ body: requestBody,
116
+ headers,
117
+ });
118
+ }
119
+ async delete(url, options = {}) {
120
+ return this.request(url, { ...options, method: 'DELETE' });
121
+ }
122
+ }
123
+ export const webNetworkClient = new WebNetworkClient();
124
+ //# sourceMappingURL=network.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.web.js","sourceRoot":"","sources":["../../../src/web/network/network.web.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,YAAY,GACb,MAAM,mBAAmB,CAAC;AAM3B,MAAM,OAAO,gBAAgB;IAG3B,YAAY,iBAAyB,KAAK;QACxC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,GAAW,EACX,UAAiC,EAAE;QAEnC,MAAM,EACJ,MAAM,GAAG,KAAK,EACd,OAAO,GAAG,EAAE,EACZ,IAAI,EACJ,OAAO,GAAG,IAAI,CAAC,cAAc,EAC7B,MAAM,GACP,GAAG,OAAO,CAAC;QAGZ,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAGhD,MAAM,SAAS,GAAG,UAAU,CAC1B,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,OAAO,IAAI,IAAI,CAAC,cAAc,CAC/B,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,YAAY,GAAgB;gBAChC,MAAM,EAAE,MAAM,IAAI,KAAK;gBACvB,MAAM,EAAE,WAAW;aACpB,CAAC;YAEF,IAAI,OAAO,EAAE,CAAC;gBACZ,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC;YACjC,CAAC;YAED,IAAI,IAAI,EAAE,CAAC;gBACT,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;YAC3B,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAEhD,YAAY,CAAC,SAAS,CAAC,CAAC;YAGxB,IAAI,IAAO,CAAC;YACZ,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAE/D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC7C,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;iBAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;YACjD,CAAC;YAGD,MAAM,eAAe,GAA2B,EAAE,CAAC;YACnD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACtC,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,MAAM,eAAe,GAAuB;gBAC1C,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,IAAI;gBACJ,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,QAAQ,CAAC,EAAE;gBACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAEjB,IAAI,YAAY,GAAG,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACrE,IACE,IAAI;oBACJ,OAAO,IAAI,KAAK,QAAQ;oBACxB,SAAS,IAAI,IAAI;oBACjB,OAAQ,IAA6B,CAAC,OAAO,KAAK,QAAQ,EAC1D,CAAC;oBACD,YAAY,IAAI,MAAO,IAA4B,CAAC,OAAO,EAAE,CAAC;gBAChE,CAAC;gBAED,MAAM,IAAI,YAAY,CACpB,YAAY,EACZ,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,CACpB,CAAC;YACJ,CAAC;YAED,OAAO,eAAe,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBAClC,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAChC,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;gBACpE,CAAC;gBACD,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;YAC5D,CAAC;YAED,MAAM,IAAI,YAAY,CAAC,uBAAuB,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,UAA0D,EAAE;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAI,CACR,GAAW,EACX,IAAyD,EACzD,UAAiD,EAAE;QAEnD,MAAM,WAAW,GACf,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC;YAC3B,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC;YACrB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACtB,CAAC,CAAE,IAA6C,CAAC;QAErD,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACvC,IACE,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC;YAC3B,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,EACvB,CAAC;YACD,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE;YAC1B,GAAG,OAAO;YACV,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,WAAW;YACjB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,IAAyD,EACzD,UAAiD,EAAE;QAEnD,MAAM,WAAW,GACf,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC;YAC3B,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC;YACrB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACtB,CAAC,CAAE,IAA6C,CAAC;QAErD,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACvC,IACE,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,CAAC,CAAC,IAAI,YAAY,QAAQ,CAAC;YAC3B,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,EACvB,CAAC;YACD,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE;YAC1B,GAAG,OAAO;YACV,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,WAAW;YACjB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CACV,GAAW,EACX,UAA0D,EAAE;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;CACF;AAGD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { PlatformNetwork } from '../../network/platform-network.js';
2
+ import { ConnectionState, ConnectionType } from '@sudobility/types';
3
+ export declare class WebNetworkService implements PlatformNetwork {
4
+ private status;
5
+ private connectionType;
6
+ private listeners;
7
+ constructor();
8
+ getNetworkStatus(): ConnectionState;
9
+ getConnectionType(): ConnectionType;
10
+ isOnline(): boolean;
11
+ onNetworkStatusChange(callback: (status: ConnectionState) => void): () => void;
12
+ request(url: string, options?: RequestInit): Promise<Response>;
13
+ watchNetworkStatus(callback: (isOnline: boolean) => void): () => void;
14
+ testConnectivity(url?: string): Promise<boolean>;
15
+ private initializeNetworkMonitoring;
16
+ private handleOnlineChange;
17
+ private handleOfflineChange;
18
+ private handleConnectionChange;
19
+ private updateNetworkStatus;
20
+ private detectConnectionType;
21
+ private notifyListeners;
22
+ destroy(): void;
23
+ }
24
+ //# sourceMappingURL=web-network.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-network.service.d.ts","sourceRoot":"","sources":["../../../src/web/network/web-network.service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAyBpE,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,SAAS,CAA6C;;IAO9D,gBAAgB,IAAI,eAAe;IAInC,iBAAiB,IAAI,cAAc;IAInC,QAAQ,IAAI,OAAO;IAKnB,qBAAqB,CACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,GAC1C,MAAM,IAAI;IAaP,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKxE,kBAAkB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAS/D,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBtD,OAAO,CAAC,2BAA2B;IAgBnC,OAAO,CAAC,kBAAkB,CAExB;IAEF,OAAO,CAAC,mBAAmB,CAIzB;IAEF,OAAO,CAAC,sBAAsB,CAE5B;IAEF,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,eAAe;IAWvB,OAAO,IAAI,IAAI;CAehB"}
@@ -0,0 +1,150 @@
1
+ import { ConnectionState, ConnectionType } from '@sudobility/types';
2
+ export class WebNetworkService {
3
+ constructor() {
4
+ this.status = ConnectionState.UNKNOWN;
5
+ this.connectionType = ConnectionType.UNKNOWN;
6
+ this.listeners = [];
7
+ this.handleOnlineChange = () => {
8
+ this.updateNetworkStatus();
9
+ };
10
+ this.handleOfflineChange = () => {
11
+ this.status = ConnectionState.DISCONNECTED;
12
+ this.connectionType = ConnectionType.NONE;
13
+ this.notifyListeners();
14
+ };
15
+ this.handleConnectionChange = () => {
16
+ this.updateNetworkStatus();
17
+ };
18
+ this.initializeNetworkMonitoring();
19
+ this.updateNetworkStatus();
20
+ }
21
+ getNetworkStatus() {
22
+ return this.status;
23
+ }
24
+ getConnectionType() {
25
+ return this.connectionType;
26
+ }
27
+ isOnline() {
28
+ const online = this.status === ConnectionState.CONNECTED;
29
+ return online;
30
+ }
31
+ onNetworkStatusChange(callback) {
32
+ this.listeners.push(callback);
33
+ return () => {
34
+ const index = this.listeners.indexOf(callback);
35
+ if (index > -1) {
36
+ this.listeners.splice(index, 1);
37
+ }
38
+ };
39
+ }
40
+ async request(url, options = {}) {
41
+ return fetch(url, options);
42
+ }
43
+ watchNetworkStatus(callback) {
44
+ const networkCallback = (status) => {
45
+ const online = status === ConnectionState.CONNECTED;
46
+ callback(online);
47
+ };
48
+ return this.onNetworkStatusChange(networkCallback);
49
+ }
50
+ async testConnectivity(url) {
51
+ const testUrl = url || 'https://httpbin.org/status/200';
52
+ try {
53
+ const controller = new AbortController();
54
+ const timeoutId = setTimeout(() => controller.abort(), 5000);
55
+ await fetch(testUrl, {
56
+ method: 'HEAD',
57
+ mode: 'no-cors',
58
+ signal: controller.signal,
59
+ });
60
+ clearTimeout(timeoutId);
61
+ return true;
62
+ }
63
+ catch (error) {
64
+ console.error('Error checking connectivity:', error);
65
+ return false;
66
+ }
67
+ }
68
+ initializeNetworkMonitoring() {
69
+ if (typeof window === 'undefined')
70
+ return;
71
+ window.addEventListener('online', this.handleOnlineChange);
72
+ window.addEventListener('offline', this.handleOfflineChange);
73
+ if ('connection' in navigator) {
74
+ const connection = navigator.connection;
75
+ if (connection) {
76
+ connection.addEventListener('change', this.handleConnectionChange);
77
+ }
78
+ }
79
+ }
80
+ updateNetworkStatus() {
81
+ if (typeof window === 'undefined') {
82
+ this.status = ConnectionState.UNKNOWN;
83
+ this.connectionType = ConnectionType.UNKNOWN;
84
+ return;
85
+ }
86
+ if (!navigator.onLine) {
87
+ this.status = ConnectionState.DISCONNECTED;
88
+ this.connectionType = ConnectionType.NONE;
89
+ this.notifyListeners();
90
+ return;
91
+ }
92
+ this.connectionType = this.detectConnectionType();
93
+ if (this.connectionType === ConnectionType.NONE) {
94
+ this.status = ConnectionState.DISCONNECTED;
95
+ }
96
+ else {
97
+ this.status = ConnectionState.CONNECTED;
98
+ }
99
+ this.notifyListeners();
100
+ }
101
+ detectConnectionType() {
102
+ if (typeof window === 'undefined' || !navigator.onLine) {
103
+ return ConnectionType.NONE;
104
+ }
105
+ if ('connection' in navigator) {
106
+ const connection = navigator.connection;
107
+ if (connection && connection.effectiveType) {
108
+ switch (connection.effectiveType) {
109
+ case 'slow-2g':
110
+ case '2g':
111
+ return ConnectionType.CELLULAR_2G;
112
+ case '3g':
113
+ return ConnectionType.CELLULAR_3G;
114
+ case '4g':
115
+ return ConnectionType.CELLULAR_4G;
116
+ default:
117
+ if (connection.type === 'cellular') {
118
+ return ConnectionType.CELLULAR_4G;
119
+ }
120
+ return ConnectionType.WIFI;
121
+ }
122
+ }
123
+ }
124
+ return ConnectionType.WIFI;
125
+ }
126
+ notifyListeners() {
127
+ this.listeners.forEach((callback) => {
128
+ try {
129
+ callback(this.status);
130
+ }
131
+ catch (error) {
132
+ console.error('Error notifying network status listener:', error);
133
+ }
134
+ });
135
+ }
136
+ destroy() {
137
+ if (typeof window !== 'undefined') {
138
+ window.removeEventListener('online', this.handleOnlineChange);
139
+ window.removeEventListener('offline', this.handleOfflineChange);
140
+ if ('connection' in navigator) {
141
+ const connection = navigator.connection;
142
+ if (connection) {
143
+ connection.removeEventListener('change', this.handleConnectionChange);
144
+ }
145
+ }
146
+ }
147
+ this.listeners = [];
148
+ }
149
+ }
150
+ //# sourceMappingURL=web-network.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-network.service.js","sourceRoot":"","sources":["../../../src/web/network/web-network.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { StorageService } from '../../storage/storage.js';
2
+ export declare function initializeStorageService(): void;
3
+ export declare function getStorageService(): StorageService;
4
+ export declare function resetStorageService(): void;
5
+ //# sourceMappingURL=storage-singleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-singleton.d.ts","sourceRoot":"","sources":["../../../src/web/storage/storage-singleton.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAa/D,wBAAgB,wBAAwB,IAAI,IAAI,CAM/C;AAMD,wBAAgB,iBAAiB,IAAI,cAAc,CAOlD;AAKD,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}