@smess/networking 1.0.1

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 (96) hide show
  1. package/README.md +104 -0
  2. package/dist/core/axios.d.ts +51 -0
  3. package/dist/core/axios.js +67 -0
  4. package/dist/core/axios.observable.d.ts +11 -0
  5. package/dist/core/axios.observable.js +60 -0
  6. package/dist/core/base.provider.advanced.test.d.ts +1 -0
  7. package/dist/core/base.provider.advanced.test.js +25 -0
  8. package/dist/core/base.provider.d.ts +15 -0
  9. package/dist/core/base.provider.js +13 -0
  10. package/dist/core/base.provider.test.d.ts +1 -0
  11. package/dist/core/base.provider.test.js +28 -0
  12. package/dist/core/base.service.wrapper.advanced.test.d.ts +1 -0
  13. package/dist/core/base.service.wrapper.advanced.test.js +44 -0
  14. package/dist/core/base.service.wrapper.d.ts +7 -0
  15. package/dist/core/base.service.wrapper.js +14 -0
  16. package/dist/core/base.service.wrapper.test.d.ts +1 -0
  17. package/dist/core/base.service.wrapper.test.js +27 -0
  18. package/dist/core/product.service.d.ts +19 -0
  19. package/dist/core/product.service.js +46 -0
  20. package/dist/core/product.service.test.d.ts +1 -0
  21. package/dist/core/product.service.test.js +63 -0
  22. package/dist/core/rx.http.service.d.ts +51 -0
  23. package/dist/core/rx.http.service.js +67 -0
  24. package/dist/core/user.service.d.ts +15 -0
  25. package/dist/core/user.service.js +39 -0
  26. package/dist/core/user.service.test.d.ts +1 -0
  27. package/dist/core/user.service.test.js +45 -0
  28. package/dist/scripts/real-test.d.ts +1 -0
  29. package/dist/scripts/real-test.js +74 -0
  30. package/dist/services/logger.service.d.ts +31 -0
  31. package/dist/services/logger.service.js +97 -0
  32. package/dist/services/logger.service.test.d.ts +1 -0
  33. package/dist/services/logger.service.test.js +33 -0
  34. package/dist/services/smess.service.d.ts +29 -0
  35. package/dist/services/smess.service.js +136 -0
  36. package/dist/services/smess.service.test.d.ts +1 -0
  37. package/dist/services/smess.service.test.js +80 -0
  38. package/dist/src/core/axios.d.ts +51 -0
  39. package/dist/src/core/axios.js +68 -0
  40. package/dist/src/core/axios.observable.d.ts +11 -0
  41. package/dist/src/core/axios.observable.js +61 -0
  42. package/dist/src/core/base.provider.advanced.test.d.ts +1 -0
  43. package/dist/src/core/base.provider.advanced.test.js +31 -0
  44. package/dist/src/core/base.provider.d.ts +15 -0
  45. package/dist/src/core/base.provider.js +13 -0
  46. package/dist/src/core/base.provider.test.d.ts +1 -0
  47. package/dist/src/core/base.provider.test.js +34 -0
  48. package/dist/src/core/base.service.wrapper.advanced.test.d.ts +1 -0
  49. package/dist/src/core/base.service.wrapper.advanced.test.js +38 -0
  50. package/dist/src/core/base.service.wrapper.d.ts +7 -0
  51. package/dist/src/core/base.service.wrapper.js +15 -0
  52. package/dist/src/core/base.service.wrapper.test.d.ts +1 -0
  53. package/dist/src/core/base.service.wrapper.test.js +27 -0
  54. package/dist/src/core/rx.http.service.d.ts +51 -0
  55. package/dist/src/core/rx.http.service.js +68 -0
  56. package/dist/src/domain/auth.provider.d.ts +12 -0
  57. package/dist/src/domain/auth.provider.js +67 -0
  58. package/dist/src/domain/product.service.d.ts +21 -0
  59. package/dist/src/domain/product.service.js +47 -0
  60. package/dist/src/domain/smess.service.d.ts +35 -0
  61. package/dist/src/domain/smess.service.js +137 -0
  62. package/dist/src/domain/tests/auth.service.test.d.ts +1 -0
  63. package/dist/src/domain/tests/auth.service.test.js +80 -0
  64. package/dist/src/domain/tests/product.service.test.d.ts +1 -0
  65. package/dist/src/domain/tests/product.service.test.js +47 -0
  66. package/dist/src/domain/tests/smess.service.test.d.ts +1 -0
  67. package/dist/src/domain/tests/smess.service.test.js +106 -0
  68. package/dist/src/domain/tests/user.service.test.d.ts +1 -0
  69. package/dist/src/domain/tests/user.service.test.js +51 -0
  70. package/dist/src/domain/user.service.d.ts +16 -0
  71. package/dist/src/domain/user.service.js +39 -0
  72. package/dist/src/services/logger.service.d.ts +31 -0
  73. package/dist/src/services/logger.service.js +97 -0
  74. package/dist/src/services/logger.service.test.d.ts +1 -0
  75. package/dist/src/services/logger.service.test.js +33 -0
  76. package/dist/src/types/types.d.ts +95 -0
  77. package/dist/src/types/types.js +89 -0
  78. package/dist/src/types/types.test.d.ts +1 -0
  79. package/dist/src/types/types.test.js +27 -0
  80. package/dist/src/utils/networking-import.d.ts +4 -0
  81. package/dist/src/utils/networking-import.js +43 -0
  82. package/dist/src/utils/rxjs-import.d.ts +5 -0
  83. package/dist/src/utils/rxjs-import.js +34 -0
  84. package/dist/types/types.d.ts +89 -0
  85. package/dist/types/types.js +89 -0
  86. package/dist/types/types.test.d.ts +1 -0
  87. package/dist/types/types.test.js +27 -0
  88. package/dist/utils/networking-import.d.ts +4 -0
  89. package/dist/utils/networking-import.js +43 -0
  90. package/dist/utils/networking-settings.d.ts +6 -0
  91. package/dist/utils/networking-settings.js +19 -0
  92. package/dist/utils/networking-settings.test.d.ts +1 -0
  93. package/dist/utils/networking-settings.test.js +21 -0
  94. package/dist/utils/rxjs-import.d.ts +5 -0
  95. package/dist/utils/rxjs-import.js +34 -0
  96. package/package.json +33 -0
@@ -0,0 +1,51 @@
1
+ import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from '../utils/networking-import';
2
+ import type { AxiosInterceptorManager } from 'axios';
3
+ import { AxiosObservable } from './axios.observable';
4
+ export interface Axiosable {
5
+ request<T = any>(config: AxiosRequestConfig): AxiosObservable<T>;
6
+ get<T = any>(url: string, config?: AxiosRequestConfig): AxiosObservable<T>;
7
+ head<T = any>(url: string, config?: AxiosRequestConfig): AxiosObservable<T>;
8
+ post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosObservable<T>;
9
+ put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosObservable<T>;
10
+ patch<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosObservable<T>;
11
+ delete<T = any>(url: string, config?: AxiosRequestConfig): AxiosObservable<T>;
12
+ }
13
+ declare class HttpService implements Axiosable {
14
+ private axiosInstance;
15
+ static defaults: Omit<import("axios").AxiosDefaults<any>, "headers"> & {
16
+ headers: import("axios").HeadersDefaults & {
17
+ [key: string]: import("axios").AxiosHeaderValue;
18
+ };
19
+ };
20
+ static interceptors: {
21
+ request: AxiosInterceptorManager<import("axios").InternalAxiosRequestConfig>;
22
+ response: AxiosInterceptorManager<AxiosResponse>;
23
+ };
24
+ constructor(axiosInstance: AxiosInstance);
25
+ get defaults(): Omit<import("axios").AxiosDefaults<any>, "headers"> & {
26
+ headers: import("axios").HeadersDefaults & {
27
+ [key: string]: import("axios").AxiosHeaderValue;
28
+ };
29
+ };
30
+ get interceptors(): {
31
+ request: AxiosInterceptorManager<import("axios").InternalAxiosRequestConfig>;
32
+ response: AxiosInterceptorManager<AxiosResponse>;
33
+ };
34
+ static request<T = any>(config: AxiosRequestConfig): AxiosObservable<T>;
35
+ static get<T = any>(url: string, config?: AxiosRequestConfig): AxiosObservable<T>;
36
+ static post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosObservable<T>;
37
+ static put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosObservable<T>;
38
+ static patch<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosObservable<T>;
39
+ static delete<T = any>(url: string, config?: AxiosRequestConfig): AxiosObservable<T>;
40
+ static head<T = any>(url: string, config?: AxiosRequestConfig): AxiosObservable<T>;
41
+ static create(config: AxiosRequestConfig): HttpService;
42
+ request<T = any>(config: AxiosRequestConfig): AxiosObservable<T>;
43
+ get<T = any>(url: string, config?: AxiosRequestConfig): AxiosObservable<T>;
44
+ post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosObservable<T>;
45
+ put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosObservable<T>;
46
+ patch<T = any>(url: string, data?: any, config?: AxiosRequestConfig): AxiosObservable<T>;
47
+ delete<T = any>(url: string, config?: AxiosRequestConfig): AxiosObservable<T>;
48
+ head<T = any>(url: string, config?: AxiosRequestConfig): AxiosObservable<T>;
49
+ }
50
+ export default HttpService;
51
+ export { HttpService };
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpService = void 0;
4
+ const networking_import_1 = require("../utils/networking-import");
5
+ const axios_observable_1 = require("./axios.observable");
6
+ class HttpService {
7
+ constructor(axiosInstance) {
8
+ this.axiosInstance = axiosInstance;
9
+ }
10
+ get defaults() {
11
+ return this.axiosInstance.defaults;
12
+ }
13
+ get interceptors() {
14
+ return this.axiosInstance.interceptors;
15
+ }
16
+ // Static methods
17
+ static request(config) {
18
+ return (0, axios_observable_1.createObservable)(networking_import_1.axios.request, [config]);
19
+ }
20
+ static get(url, config) {
21
+ return (0, axios_observable_1.createObservable)(networking_import_1.axios.get, [url, config]);
22
+ }
23
+ static post(url, data, config) {
24
+ return (0, axios_observable_1.createObservable)(networking_import_1.axios.post, [url, data, config]);
25
+ }
26
+ static put(url, data, config) {
27
+ return (0, axios_observable_1.createObservable)(networking_import_1.axios.put, [url, data, config]);
28
+ }
29
+ static patch(url, data, config) {
30
+ return (0, axios_observable_1.createObservable)(networking_import_1.axios.patch, [url, data, config]);
31
+ }
32
+ static delete(url, config) {
33
+ return (0, axios_observable_1.createObservable)(networking_import_1.axios.delete, [url, config]);
34
+ }
35
+ static head(url, config) {
36
+ return (0, axios_observable_1.createObservable)(networking_import_1.axios.head, [url, config]);
37
+ }
38
+ static create(config) {
39
+ return new HttpService(networking_import_1.axios.create(config));
40
+ }
41
+ // Instance methods
42
+ request(config) {
43
+ return (0, axios_observable_1.createObservable)(this.axiosInstance.request, [config]);
44
+ }
45
+ get(url, config) {
46
+ return (0, axios_observable_1.createObservable)(this.axiosInstance.get, [url, config]);
47
+ }
48
+ post(url, data, config) {
49
+ return (0, axios_observable_1.createObservable)(this.axiosInstance.post, [url, data, config]);
50
+ }
51
+ put(url, data, config) {
52
+ return (0, axios_observable_1.createObservable)(this.axiosInstance.put, [url, data, config]);
53
+ }
54
+ patch(url, data, config) {
55
+ return (0, axios_observable_1.createObservable)(this.axiosInstance.patch, [url, data, config]);
56
+ }
57
+ delete(url, config) {
58
+ return (0, axios_observable_1.createObservable)(this.axiosInstance.delete, [url, config]);
59
+ }
60
+ head(url, config) {
61
+ return (0, axios_observable_1.createObservable)(this.axiosInstance.head, [url, config]);
62
+ }
63
+ }
64
+ exports.HttpService = HttpService;
65
+ HttpService.defaults = networking_import_1.axios.defaults;
66
+ HttpService.interceptors = networking_import_1.axios.interceptors;
67
+ exports.default = HttpService;
@@ -0,0 +1,15 @@
1
+ import { BaseProvider } from './base.provider';
2
+ import { BaseServiceWrapper } from './base.service.wrapper';
3
+ export interface User {
4
+ id: number;
5
+ name: string;
6
+ email: string;
7
+ }
8
+ export declare class UserProvider extends BaseProvider {
9
+ constructor(userId?: number);
10
+ }
11
+ export declare class UserService extends BaseServiceWrapper<UserProvider> {
12
+ constructor(userId?: number);
13
+ fetchUserById(id: number): import("rxjs").Observable<import("../types/types").NetworkingUIEventWrapped<User>>;
14
+ fetchAllUsers(): import("rxjs").Observable<import("../types/types").NetworkingUIEventWrapped<User[]>>;
15
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserService = exports.UserProvider = void 0;
4
+ const base_provider_1 = require("./base.provider");
5
+ const base_service_wrapper_1 = require("./base.service.wrapper");
6
+ // UserProvider implements ProviderType for user endpoints
7
+ class UserProvider extends base_provider_1.BaseProvider {
8
+ constructor(userId) {
9
+ super({
10
+ baseURL: 'https://jsonplaceholder.typicode.com',
11
+ path: userId ? `/users/${userId}` : '/users',
12
+ method: 'GET',
13
+ headers: {},
14
+ getPath: () => (userId ? `/users/${userId}` : '/users'),
15
+ });
16
+ }
17
+ }
18
+ exports.UserProvider = UserProvider;
19
+ // UserService provides high-level methods for user API
20
+ class UserService extends base_service_wrapper_1.BaseServiceWrapper {
21
+ constructor(userId) {
22
+ super(new UserProvider(userId));
23
+ }
24
+ // Fetch a user by ID
25
+ fetchUserById(id) {
26
+ this.provider = new UserProvider(id);
27
+ return this.request();
28
+ }
29
+ // Fetch all users
30
+ fetchAllUsers() {
31
+ this.provider = new UserProvider();
32
+ return this.request();
33
+ }
34
+ }
35
+ exports.UserService = UserService;
36
+ // Example usage:
37
+ // setNetworkingConfig({ baseUrl: 'https://jsonplaceholder.typicode.com', isProd: false });
38
+ // const userService = new UserService();
39
+ // userService.fetchUserById(1).subscribe(result => console.log(result));
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const user_service_1 = require("./user.service");
4
+ const types_1 = require("../types/types");
5
+ const rxjs_1 = require("rxjs");
6
+ jest.mock('./base.service.wrapper', () => {
7
+ const actual = jest.requireActual('./base.service.wrapper');
8
+ return Object.assign(Object.assign({}, actual), { BaseServiceWrapper: class {
9
+ constructor() {
10
+ this.request = jest.fn((payload) => {
11
+ if (payload === 'error') {
12
+ return (0, rxjs_1.throwError)(() => new Error('Test error'));
13
+ }
14
+ return (0, rxjs_1.of)(types_1.NetworkingUIEventWrapped.succeeded({ id: 1, name: 'Test', email: 'test@example.com' }));
15
+ });
16
+ }
17
+ } });
18
+ });
19
+ describe('UserService', () => {
20
+ it('fetchUserById should return user (success)', done => {
21
+ const service = new user_service_1.UserService();
22
+ service.fetchUserById(1).subscribe(result => {
23
+ expect(result.response).toEqual({ id: 1, name: 'Test', email: 'test@example.com' });
24
+ done();
25
+ });
26
+ });
27
+ it('fetchAllUsers should return users (success)', done => {
28
+ const service = new user_service_1.UserService();
29
+ service.fetchAllUsers().subscribe(result => {
30
+ expect(result.response).toEqual({ id: 1, name: 'Test', email: 'test@example.com' });
31
+ done();
32
+ });
33
+ });
34
+ it('request should handle error', done => {
35
+ const service = new user_service_1.UserService();
36
+ service.request = jest.fn(() => (0, rxjs_1.throwError)(() => new Error('Test error')));
37
+ service.request('error').subscribe({
38
+ error: err => {
39
+ expect(err).toBeInstanceOf(Error);
40
+ expect(err.message).toBe('Test error');
41
+ done();
42
+ },
43
+ });
44
+ });
45
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const user_service_js_1 = require("../src/domain/user.service.js");
7
+ const rxjs_1 = require("rxjs");
8
+ const axios_1 = __importDefault(require("axios"));
9
+ async function testUserService() {
10
+ const config = {
11
+ baseUrl: 'https://jsonplaceholder.typicode.com',
12
+ isProd: false,
13
+ };
14
+ const userService = new user_service_js_1.UserService(config);
15
+ let emitted = false;
16
+ try {
17
+ const obs$ = userService.fetchUserById(1).pipe((0, rxjs_1.timeout)({ first: 10000 }), (0, rxjs_1.catchError)(err => {
18
+ console.error('❌ UserService observable error:', err);
19
+ return (0, rxjs_1.of)(undefined);
20
+ }));
21
+ await new Promise((resolve, reject) => {
22
+ obs$.subscribe({
23
+ next: (val) => {
24
+ emitted = true;
25
+ console.log('UserService emission:', val);
26
+ if (val && val.hasSuccess && val.response) {
27
+ console.log('✅ UserService real API test succeeded:', val.response);
28
+ resolve(undefined);
29
+ }
30
+ else if (val && val.hasFailed) {
31
+ console.error('❌ UserService real API test failed:', val.alertModel || val);
32
+ reject(new Error('UserService failed'));
33
+ }
34
+ },
35
+ error: (err) => {
36
+ console.error('❌ UserService observable error:', err);
37
+ reject(err);
38
+ },
39
+ complete: () => {
40
+ if (!emitted) {
41
+ console.error('❌ UserService observable completed without emission');
42
+ reject(new Error('No emission'));
43
+ }
44
+ }
45
+ });
46
+ });
47
+ }
48
+ catch (err) {
49
+ console.error('❌ UserService test error:', err);
50
+ process.exit(2);
51
+ }
52
+ }
53
+ async function testAxiosDirect() {
54
+ try {
55
+ const response = await axios_1.default.get('https://jsonplaceholder.typicode.com/users/1');
56
+ if (response && response.data && response.data.id === 1) {
57
+ console.log('✅ Direct axios test succeeded:', response.data);
58
+ }
59
+ else {
60
+ console.error('❌ Direct axios test failed:', response.data);
61
+ process.exit(3);
62
+ }
63
+ }
64
+ catch (err) {
65
+ console.error('❌ Direct axios test error:', err);
66
+ process.exit(4);
67
+ }
68
+ }
69
+ (async () => {
70
+ await testAxiosDirect();
71
+ await testUserService();
72
+ console.log('🎉 All real API tests passed!');
73
+ process.exit(0);
74
+ })();
@@ -0,0 +1,31 @@
1
+ export declare enum LogLevel {
2
+ DEBUG = 0,
3
+ INFO = 1,
4
+ WARN = 2,
5
+ ERROR = 3,
6
+ NONE = 4
7
+ }
8
+ export interface LogEntry {
9
+ level: LogLevel;
10
+ message: string;
11
+ data?: any;
12
+ timestamp: number;
13
+ context?: string;
14
+ }
15
+ export declare class LoggerService {
16
+ private currentLevel;
17
+ private logs;
18
+ private maxLogs;
19
+ setLogLevel(level: LogLevel): void;
20
+ private shouldLog;
21
+ private formatMessage;
22
+ private getEmojiForLevel;
23
+ private log;
24
+ debug(message: string, data?: any, context?: string): void;
25
+ info(message: string, data?: any, context?: string): void;
26
+ warn(message: string, data?: any, context?: string): void;
27
+ error(message: string, data?: any, context?: string): void;
28
+ getLogs(): LogEntry[];
29
+ clearLogs(): void;
30
+ }
31
+ export declare const $logger: LoggerService;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.$logger = exports.LoggerService = exports.LogLevel = void 0;
4
+ var LogLevel;
5
+ (function (LogLevel) {
6
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
7
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
8
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
9
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
10
+ LogLevel[LogLevel["NONE"] = 4] = "NONE";
11
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
12
+ class LoggerService {
13
+ constructor() {
14
+ this.currentLevel = LogLevel.DEBUG;
15
+ this.logs = [];
16
+ this.maxLogs = 1000;
17
+ }
18
+ setLogLevel(level) {
19
+ this.currentLevel = level;
20
+ }
21
+ shouldLog(level) {
22
+ return level >= this.currentLevel;
23
+ }
24
+ formatMessage(level, message, context) {
25
+ const emoji = this.getEmojiForLevel(level);
26
+ const levelName = LogLevel[level];
27
+ const contextStr = context ? ` [${context}]` : '';
28
+ return `${emoji} ${levelName}${contextStr}: ${message}`;
29
+ }
30
+ getEmojiForLevel(level) {
31
+ switch (level) {
32
+ case LogLevel.DEBUG:
33
+ return '🔍';
34
+ case LogLevel.INFO:
35
+ return 'ℹ️';
36
+ case LogLevel.WARN:
37
+ return '⚠️';
38
+ case LogLevel.ERROR:
39
+ return '❌';
40
+ default:
41
+ return '📝';
42
+ }
43
+ }
44
+ log(level, message, data, context) {
45
+ if (!this.shouldLog(level))
46
+ return;
47
+ const logEntry = {
48
+ level,
49
+ message,
50
+ data,
51
+ timestamp: Date.now(),
52
+ context
53
+ };
54
+ // Store log entry
55
+ this.logs.push(logEntry);
56
+ if (this.logs.length > this.maxLogs) {
57
+ this.logs.shift();
58
+ }
59
+ // Console output
60
+ const formattedMessage = this.formatMessage(level, message, context);
61
+ switch (level) {
62
+ case LogLevel.DEBUG:
63
+ console.debug(formattedMessage, data || '');
64
+ break;
65
+ case LogLevel.INFO:
66
+ console.info(formattedMessage, data || '');
67
+ break;
68
+ case LogLevel.WARN:
69
+ console.warn(formattedMessage, data || '');
70
+ break;
71
+ case LogLevel.ERROR:
72
+ console.error(formattedMessage, data || '');
73
+ break;
74
+ }
75
+ }
76
+ debug(message, data, context) {
77
+ this.log(LogLevel.DEBUG, message, data, context);
78
+ }
79
+ info(message, data, context) {
80
+ this.log(LogLevel.INFO, message, data, context);
81
+ }
82
+ warn(message, data, context) {
83
+ this.log(LogLevel.WARN, message, data, context);
84
+ }
85
+ error(message, data, context) {
86
+ this.log(LogLevel.ERROR, message, data, context);
87
+ }
88
+ getLogs() {
89
+ return [...this.logs];
90
+ }
91
+ clearLogs() {
92
+ this.logs = [];
93
+ }
94
+ }
95
+ exports.LoggerService = LoggerService;
96
+ // Export singleton instance
97
+ exports.$logger = new LoggerService();
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const logger_service_1 = require("./logger.service");
4
+ describe('LoggerService', () => {
5
+ beforeEach(() => {
6
+ logger_service_1.$logger.clearLogs();
7
+ logger_service_1.$logger.setLogLevel(logger_service_1.LogLevel.DEBUG);
8
+ });
9
+ it('should log info', () => {
10
+ logger_service_1.$logger.info('info message', { foo: 1 }, 'test');
11
+ const logs = logger_service_1.$logger.getLogs();
12
+ expect(logs[0].level).toBe(logger_service_1.LogLevel.INFO);
13
+ expect(logs[0].message).toBe('info message');
14
+ expect(logs[0].data).toEqual({ foo: 1 });
15
+ expect(logs[0].context).toBe('test');
16
+ });
17
+ it('should log warn and error', () => {
18
+ logger_service_1.$logger.warn('warn message');
19
+ logger_service_1.$logger.error('error message', { bar: 2 });
20
+ const logs = logger_service_1.$logger.getLogs();
21
+ expect(logs[0].level).toBe(logger_service_1.LogLevel.WARN);
22
+ expect(logs[1].level).toBe(logger_service_1.LogLevel.ERROR);
23
+ expect(logs[1].data).toEqual({ bar: 2 });
24
+ });
25
+ it('should respect log level', () => {
26
+ logger_service_1.$logger.setLogLevel(logger_service_1.LogLevel.ERROR);
27
+ logger_service_1.$logger.info('should not log');
28
+ logger_service_1.$logger.error('should log');
29
+ const logs = logger_service_1.$logger.getLogs();
30
+ expect(logs.length).toBe(1);
31
+ expect(logs[0].level).toBe(logger_service_1.LogLevel.ERROR);
32
+ });
33
+ });
@@ -0,0 +1,29 @@
1
+ import { HeaderType, NetworkingUIEventWrapped, ProviderType } from '../types/types';
2
+ import { Observable } from '../utils/rxjs-import';
3
+ export declare enum SMESSHeader {
4
+ ContentType = "Content-Type",
5
+ Authorization = "Authorization",
6
+ Accept = "Accept",
7
+ ApiKey = "X-Api-Key",
8
+ ClientId = "X-Client-Id"
9
+ }
10
+ export declare enum ContentType {
11
+ Json = "application/json",
12
+ FormURLEncoded = "application/x-www-form-urlencoded"
13
+ }
14
+ export declare enum Accept {
15
+ V1 = "application/json",
16
+ V2 = "application/vnd.smess.v2+json",
17
+ V3 = "application/vnd.smess.v3+json",
18
+ V4 = "application/vnd.smess.v4+json"
19
+ }
20
+ export declare class SmessService<T extends ProviderType> {
21
+ private httpService;
22
+ private target;
23
+ constructor(target: T);
24
+ static getHeaders(version: Accept, authorization?: string | null, options?: HeaderType): Record<SMESSHeader, any>;
25
+ private static commonHeaders;
26
+ request<R = any>(request?: any, mockResponse?: R, ...queryParams: any[]): Observable<NetworkingUIEventWrapped<R>>;
27
+ private transformAxiosError;
28
+ private transformAxiosResponse;
29
+ }
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SmessService = exports.Accept = exports.ContentType = exports.SMESSHeader = void 0;
7
+ const types_1 = require("../types/types");
8
+ const rxjs_import_1 = require("../utils/rxjs-import");
9
+ const rx_http_service_1 = __importDefault(require("../core/rx.http.service"));
10
+ const logger_service_1 = require("./logger.service");
11
+ // import { LOG_SERVICES_CONTEXT } from '@/services';
12
+ var SMESSHeader;
13
+ (function (SMESSHeader) {
14
+ SMESSHeader["ContentType"] = "Content-Type";
15
+ SMESSHeader["Authorization"] = "Authorization";
16
+ SMESSHeader["Accept"] = "Accept";
17
+ SMESSHeader["ApiKey"] = "X-Api-Key";
18
+ SMESSHeader["ClientId"] = "X-Client-Id";
19
+ })(SMESSHeader || (exports.SMESSHeader = SMESSHeader = {}));
20
+ var ContentType;
21
+ (function (ContentType) {
22
+ ContentType["Json"] = "application/json";
23
+ ContentType["FormURLEncoded"] = "application/x-www-form-urlencoded";
24
+ })(ContentType || (exports.ContentType = ContentType = {}));
25
+ var Accept;
26
+ (function (Accept) {
27
+ Accept["V1"] = "application/json";
28
+ Accept["V2"] = "application/vnd.smess.v2+json";
29
+ Accept["V3"] = "application/vnd.smess.v3+json";
30
+ Accept["V4"] = "application/vnd.smess.v4+json";
31
+ })(Accept || (exports.Accept = Accept = {}));
32
+ const isProduction = typeof process !== 'undefined' && process.env.NODE_ENV === 'production';
33
+ class SmessService {
34
+ constructor(target) {
35
+ this.target = target;
36
+ // Set default headers
37
+ logger_service_1.$logger.info('SmessService initialized', {
38
+ target: this.target,
39
+ baseURL: this.target.baseURL,
40
+ method: this.target.method,
41
+ headers: this.target.headers,
42
+ }, 'SmessService');
43
+ this.httpService = rx_http_service_1.default.create({
44
+ baseURL: this.target.baseURL,
45
+ headers: this.target.headers,
46
+ method: this.target.method,
47
+ });
48
+ this.httpService.interceptors.response.use((response) => response, async (error) => {
49
+ var _a;
50
+ const originalRequest = error.config;
51
+ if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 && !originalRequest._retry) {
52
+ originalRequest._retry = true;
53
+ logger_service_1.$logger.info('SmessService constructor - 401 retry', originalRequest, 'SmessService');
54
+ // Implement token refresh logic here
55
+ // Then retry the original request
56
+ // return httpService.request(originalRequest);
57
+ }
58
+ return Promise.reject(error);
59
+ });
60
+ }
61
+ static getHeaders(version, authorization = null, options) {
62
+ const headers = this.commonHeaders(version, options);
63
+ if (authorization) {
64
+ headers['Authorization'] = authorization;
65
+ }
66
+ return headers;
67
+ }
68
+ static commonHeaders(version, options) {
69
+ const { shouldAddClientIdHeader = true, } = options !== null && options !== void 0 ? options : {};
70
+ const headers = {
71
+ Accept: version,
72
+ Authorization: '',
73
+ 'Content-Type': ContentType.Json,
74
+ 'X-Api-Key': '',
75
+ 'X-Client-Id': '',
76
+ };
77
+ if (shouldAddClientIdHeader) {
78
+ // headers[SMESSHeader.ClientId] = clientId; // Removed clientId usage
79
+ }
80
+ return headers;
81
+ }
82
+ // MARK: - Public
83
+ request(request, mockResponse, ...queryParams) {
84
+ if (mockResponse !== undefined) {
85
+ return (0, rxjs_import_1.of)(types_1.NetworkingUIEventWrapped.succeeded(mockResponse));
86
+ }
87
+ const url = queryParams.length
88
+ ? this.target.getPath(queryParams)
89
+ : this.target.path;
90
+ const config = { url };
91
+ let observable;
92
+ if (this.target.method === 'GET') {
93
+ if (request) {
94
+ config.data = request;
95
+ config.params = request;
96
+ }
97
+ // Note: HttpService.get expects (url, config)
98
+ observable = this.httpService.get(url, config);
99
+ }
100
+ else if (this.target.method === 'POST') {
101
+ // HttpService.post expects (url, data, config)
102
+ observable = this.httpService.post(url, request, config);
103
+ }
104
+ else if (this.target.method === 'PATCH') {
105
+ observable = this.httpService.patch(url, request, config);
106
+ }
107
+ else if (this.target.method === 'PUT') {
108
+ observable = this.httpService.put(url, request, config);
109
+ }
110
+ else {
111
+ observable = this.httpService.request(config);
112
+ }
113
+ return observable.pipe((0, rxjs_import_1.catchError)((error) => this.transformAxiosError(error, mockResponse)), (0, rxjs_import_1.mergeMap)((data) => this.transformAxiosResponse(data)), (0, rxjs_import_1.startWith)(types_1.NetworkingUIEventWrapped.waiting()));
114
+ }
115
+ // MARK: - Private
116
+ transformAxiosError(error, mockResponse) {
117
+ logger_service_1.$logger.error('transformAxiosError', error, 'SmessService');
118
+ const message = error.message;
119
+ const response = error.response;
120
+ const httpErrorCode = response ? response.status : 0;
121
+ const title = response === null || response === void 0 ? void 0 : response.statusText;
122
+ const alertModel = new types_1.AlertModel(message, httpErrorCode, true, title, response === null || response === void 0 ? void 0 : response.data, [types_1.AlertButtonModel.buttonYes()]);
123
+ if (mockResponse) {
124
+ return (0, rxjs_import_1.of)(types_1.NetworkingUIEventWrapped.succeeded(mockResponse));
125
+ }
126
+ return (0, rxjs_import_1.of)(types_1.NetworkingUIEventWrapped.failed(alertModel));
127
+ }
128
+ transformAxiosResponse(response) {
129
+ logger_service_1.$logger.info('transformAxiosResponse', response, 'SmessService');
130
+ if (response instanceof types_1.NetworkingUIEventWrapped) {
131
+ return (0, rxjs_import_1.of)(response);
132
+ }
133
+ return (0, rxjs_import_1.of)(types_1.NetworkingUIEventWrapped.succeeded(response.data));
134
+ }
135
+ }
136
+ exports.SmessService = SmessService;
@@ -0,0 +1 @@
1
+ export {};