@smess/networking 1.0.4 → 1.0.6
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/dist/index.d.ts +9 -9
- package/dist/index.js +11 -31
- package/dist/scripts/real-test.js +60 -65
- package/dist/src/core/axios.d.ts +5 -12
- package/dist/src/core/axios.js +21 -24
- package/dist/src/core/axios.observable.d.ts +2 -2
- package/dist/src/core/axios.observable.js +14 -17
- package/dist/src/core/base.provider.advanced.test.js +3 -5
- package/dist/src/core/base.provider.d.ts +1 -1
- package/dist/src/core/base.provider.js +6 -6
- package/dist/src/core/base.provider.test.js +3 -5
- package/dist/src/core/base.service.wrapper.advanced.test.js +9 -11
- package/dist/src/core/base.service.wrapper.d.ts +1 -1
- package/dist/src/core/base.service.wrapper.js +3 -7
- package/dist/src/core/base.service.wrapper.test.js +6 -8
- package/dist/src/core/rx.http.service.d.ts +5 -12
- package/dist/src/core/rx.http.service.js +21 -24
- package/dist/src/services/auth.service.d.ts +2 -2
- package/dist/src/services/auth.service.js +10 -15
- package/dist/src/services/auth.service.test.js +37 -39
- package/dist/src/services/customer.service.d.ts +2 -2
- package/dist/src/services/customer.service.js +9 -14
- package/dist/src/services/customer.service.test.js +23 -25
- package/dist/src/services/logger.service.js +4 -8
- package/dist/src/services/logger.service.test.js +16 -18
- package/dist/src/services/order.service.d.ts +2 -2
- package/dist/src/services/order.service.js +9 -14
- package/dist/src/services/order.service.test.js +41 -43
- package/dist/src/services/product.service.d.ts +6 -6
- package/dist/src/services/product.service.js +4 -9
- package/dist/src/services/product.service.test.js +20 -21
- package/dist/src/services/smess.service.d.ts +2 -2
- package/dist/src/services/smess.service.js +26 -34
- package/dist/src/services/smess.service.test.js +21 -24
- package/dist/src/services/store.service.d.ts +2 -2
- package/dist/src/services/store.service.js +9 -14
- package/dist/src/services/store.service.test.js +35 -37
- package/dist/src/services/user.service.d.ts +5 -5
- package/dist/src/services/user.service.js +4 -9
- package/dist/src/services/user.service.test.js +17 -18
- package/dist/src/types/types.js +6 -13
- package/dist/src/types/types.test.js +5 -7
- package/dist/src/utils/networking-import.js +3 -43
- package/dist/src/utils/rxjs-import.js +5 -34
- package/package.json +1 -1
|
@@ -1,33 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const logger_service_1 = require("./logger.service");
|
|
1
|
+
import { $logger, LogLevel } from './logger.service.js';
|
|
4
2
|
describe('LoggerService', () => {
|
|
5
3
|
beforeEach(() => {
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
$logger.clearLogs();
|
|
5
|
+
$logger.setLogLevel(LogLevel.DEBUG);
|
|
8
6
|
});
|
|
9
7
|
it('should log info', () => {
|
|
10
|
-
|
|
11
|
-
const logs =
|
|
12
|
-
expect(logs[0].level).toBe(
|
|
8
|
+
$logger.info('info message', { foo: 1 }, 'test');
|
|
9
|
+
const logs = $logger.getLogs();
|
|
10
|
+
expect(logs[0].level).toBe(LogLevel.INFO);
|
|
13
11
|
expect(logs[0].message).toBe('info message');
|
|
14
12
|
expect(logs[0].data).toEqual({ foo: 1 });
|
|
15
13
|
expect(logs[0].context).toBe('test');
|
|
16
14
|
});
|
|
17
15
|
it('should log warn and error', () => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const logs =
|
|
21
|
-
expect(logs[0].level).toBe(
|
|
22
|
-
expect(logs[1].level).toBe(
|
|
16
|
+
$logger.warn('warn message');
|
|
17
|
+
$logger.error('error message', { bar: 2 });
|
|
18
|
+
const logs = $logger.getLogs();
|
|
19
|
+
expect(logs[0].level).toBe(LogLevel.WARN);
|
|
20
|
+
expect(logs[1].level).toBe(LogLevel.ERROR);
|
|
23
21
|
expect(logs[1].data).toEqual({ bar: 2 });
|
|
24
22
|
});
|
|
25
23
|
it('should respect log level', () => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const logs =
|
|
24
|
+
$logger.setLogLevel(LogLevel.ERROR);
|
|
25
|
+
$logger.info('should not log');
|
|
26
|
+
$logger.error('should log');
|
|
27
|
+
const logs = $logger.getLogs();
|
|
30
28
|
expect(logs.length).toBe(1);
|
|
31
|
-
expect(logs[0].level).toBe(
|
|
29
|
+
expect(logs[0].level).toBe(LogLevel.ERROR);
|
|
32
30
|
});
|
|
33
31
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ProviderType, NetworkingConfig, NetworkingUIEventWrapped, HttpResponse } from '../types/types';
|
|
2
|
-
import { SmessService } from './smess.service';
|
|
1
|
+
import { ProviderType, NetworkingConfig, NetworkingUIEventWrapped, HttpResponse } from '../types/types.js';
|
|
2
|
+
import { SmessService } from './smess.service.js';
|
|
3
3
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
4
4
|
export type OrderTarget = 'order-list' | 'order-create' | 'order-delete' | 'order-get-draft' | 'order-update' | 'order-get';
|
|
5
5
|
export interface CreateOrderRequest extends UpdateOrderRequest {
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.OrderService = exports.OrderProvider = void 0;
|
|
4
|
-
const smess_service_1 = require("./smess.service");
|
|
5
|
-
class OrderProvider {
|
|
1
|
+
import { Accept, SMESSHeader, SmessService } from './smess.service.js';
|
|
2
|
+
export class OrderProvider {
|
|
6
3
|
constructor(config, target, $authToken) {
|
|
7
4
|
this.config = config;
|
|
8
5
|
this.target = target;
|
|
@@ -44,33 +41,32 @@ class OrderProvider {
|
|
|
44
41
|
}
|
|
45
42
|
}
|
|
46
43
|
get headers() {
|
|
47
|
-
let headers =
|
|
44
|
+
let headers = SmessService.getHeaders(Accept.V1, this.$authToken.value);
|
|
48
45
|
if (this.config.clientId) {
|
|
49
|
-
headers[
|
|
46
|
+
headers[SMESSHeader.ClientId] = this.config.clientId;
|
|
50
47
|
}
|
|
51
48
|
if (this.config.apiKey) {
|
|
52
|
-
headers[
|
|
49
|
+
headers[SMESSHeader.ApiKey] = this.config.apiKey;
|
|
53
50
|
}
|
|
54
|
-
return
|
|
51
|
+
return SmessService.filterHeaders(headers);
|
|
55
52
|
}
|
|
56
53
|
getPath(...queryParams) {
|
|
57
54
|
let definedPath = this.path;
|
|
58
55
|
const params = definedPath.match(/\$\{(.+?)\}/g);
|
|
59
|
-
params
|
|
56
|
+
params?.forEach((value, index) => {
|
|
60
57
|
definedPath = definedPath.replace(value, String(queryParams[index]));
|
|
61
58
|
});
|
|
62
59
|
return definedPath;
|
|
63
60
|
}
|
|
64
61
|
}
|
|
65
|
-
|
|
66
|
-
class OrderService {
|
|
62
|
+
export class OrderService {
|
|
67
63
|
constructor(config, $authToken) {
|
|
68
64
|
this.config = config;
|
|
69
65
|
this.$authToken = $authToken;
|
|
70
66
|
}
|
|
71
67
|
provider(target) {
|
|
72
68
|
const targetWrapper = new OrderProvider(this.config, target, this.$authToken);
|
|
73
|
-
return new
|
|
69
|
+
return new SmessService(targetWrapper);
|
|
74
70
|
}
|
|
75
71
|
list() {
|
|
76
72
|
return this.provider('order-list').request();
|
|
@@ -91,4 +87,3 @@ class OrderService {
|
|
|
91
87
|
return this.provider('order-get').request(null, undefined, id);
|
|
92
88
|
}
|
|
93
89
|
}
|
|
94
|
-
exports.OrderService = OrderService;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const types_1 = require("../types/types");
|
|
5
|
-
const rxjs_1 = require("rxjs");
|
|
1
|
+
import { OrderService } from './order.service.js';
|
|
2
|
+
import { NetworkingUIEventWrapped, AlertModel } from '../types/types.js';
|
|
3
|
+
import { of, BehaviorSubject } from 'rxjs';
|
|
6
4
|
describe('OrderService', () => {
|
|
7
5
|
const config = {
|
|
8
6
|
baseUrl: 'https://api.example.com',
|
|
@@ -13,25 +11,25 @@ describe('OrderService', () => {
|
|
|
13
11
|
let service;
|
|
14
12
|
let $authToken;
|
|
15
13
|
beforeEach(() => {
|
|
16
|
-
$authToken = new
|
|
17
|
-
service = new
|
|
14
|
+
$authToken = new BehaviorSubject(null);
|
|
15
|
+
service = new OrderService(config, $authToken);
|
|
18
16
|
});
|
|
19
17
|
it('list success', async () => {
|
|
20
18
|
const response = { data: [{ id: '1', status: 'draft' }] };
|
|
21
19
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
22
|
-
request: () =>
|
|
20
|
+
request: () => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
23
21
|
});
|
|
24
22
|
const result = await service.list().toPromise();
|
|
25
|
-
expect(result
|
|
26
|
-
expect(result
|
|
23
|
+
expect(result?.hasSuccess).toBe(true);
|
|
24
|
+
expect(result?.response).toEqual(response);
|
|
27
25
|
});
|
|
28
26
|
it('list error', async () => {
|
|
29
27
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
30
|
-
request: () =>
|
|
28
|
+
request: () => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
31
29
|
});
|
|
32
30
|
const result = await service.list().toPromise();
|
|
33
|
-
expect(result
|
|
34
|
-
expect(result
|
|
31
|
+
expect(result?.hasFailed).toBe(true);
|
|
32
|
+
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
35
33
|
});
|
|
36
34
|
it('create success', async () => {
|
|
37
35
|
const payload = {
|
|
@@ -40,11 +38,11 @@ describe('OrderService', () => {
|
|
|
40
38
|
};
|
|
41
39
|
const response = { data: { id: '1', status: 'created' } };
|
|
42
40
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
43
|
-
request: () =>
|
|
41
|
+
request: () => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
44
42
|
});
|
|
45
43
|
const result = await service.create(payload).toPromise();
|
|
46
|
-
expect(result
|
|
47
|
-
expect(result
|
|
44
|
+
expect(result?.hasSuccess).toBe(true);
|
|
45
|
+
expect(result?.response).toEqual(response);
|
|
48
46
|
});
|
|
49
47
|
it('create error', async () => {
|
|
50
48
|
const payload = {
|
|
@@ -52,45 +50,45 @@ describe('OrderService', () => {
|
|
|
52
50
|
order_items: [],
|
|
53
51
|
};
|
|
54
52
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
55
|
-
request: () =>
|
|
53
|
+
request: () => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
56
54
|
});
|
|
57
55
|
const result = await service.create(payload).toPromise();
|
|
58
|
-
expect(result
|
|
59
|
-
expect(result
|
|
56
|
+
expect(result?.hasFailed).toBe(true);
|
|
57
|
+
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
60
58
|
});
|
|
61
59
|
it('delete success', async () => {
|
|
62
60
|
const response = { data: { id: '1', status: 'deleted' } };
|
|
63
61
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
64
|
-
request: (_payload, _mockResponse, id) =>
|
|
62
|
+
request: (_payload, _mockResponse, id) => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
65
63
|
});
|
|
66
64
|
const result = await service.delete('1').toPromise();
|
|
67
|
-
expect(result
|
|
68
|
-
expect(result
|
|
65
|
+
expect(result?.hasSuccess).toBe(true);
|
|
66
|
+
expect(result?.response).toEqual(response);
|
|
69
67
|
});
|
|
70
68
|
it('delete error', async () => {
|
|
71
69
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
72
|
-
request: (_payload, _mockResponse, id) =>
|
|
70
|
+
request: (_payload, _mockResponse, id) => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
73
71
|
});
|
|
74
72
|
const result = await service.delete('1').toPromise();
|
|
75
|
-
expect(result
|
|
76
|
-
expect(result
|
|
73
|
+
expect(result?.hasFailed).toBe(true);
|
|
74
|
+
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
77
75
|
});
|
|
78
76
|
it('getDraft success', async () => {
|
|
79
77
|
const response = { data: { id: 'draft', status: 'draft' } };
|
|
80
78
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
81
|
-
request: () =>
|
|
79
|
+
request: () => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
82
80
|
});
|
|
83
81
|
const result = await service.getDraft().toPromise();
|
|
84
|
-
expect(result
|
|
85
|
-
expect(result
|
|
82
|
+
expect(result?.hasSuccess).toBe(true);
|
|
83
|
+
expect(result?.response).toEqual(response);
|
|
86
84
|
});
|
|
87
85
|
it('getDraft error', async () => {
|
|
88
86
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
89
|
-
request: () =>
|
|
87
|
+
request: () => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
90
88
|
});
|
|
91
89
|
const result = await service.getDraft().toPromise();
|
|
92
|
-
expect(result
|
|
93
|
-
expect(result
|
|
90
|
+
expect(result?.hasFailed).toBe(true);
|
|
91
|
+
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
94
92
|
});
|
|
95
93
|
it('update success', async () => {
|
|
96
94
|
const payload = {
|
|
@@ -99,11 +97,11 @@ describe('OrderService', () => {
|
|
|
99
97
|
};
|
|
100
98
|
const response = { data: { id: '1', status: 'updated' } };
|
|
101
99
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
102
|
-
request: (_payload, _mockResponse, id) =>
|
|
100
|
+
request: (_payload, _mockResponse, id) => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
103
101
|
});
|
|
104
102
|
const result = await service.update('1', payload).toPromise();
|
|
105
|
-
expect(result
|
|
106
|
-
expect(result
|
|
103
|
+
expect(result?.hasSuccess).toBe(true);
|
|
104
|
+
expect(result?.response).toEqual(response);
|
|
107
105
|
});
|
|
108
106
|
it('update error', async () => {
|
|
109
107
|
const payload = {
|
|
@@ -111,27 +109,27 @@ describe('OrderService', () => {
|
|
|
111
109
|
order_items: [],
|
|
112
110
|
};
|
|
113
111
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
114
|
-
request: (_payload, _mockResponse, id) =>
|
|
112
|
+
request: (_payload, _mockResponse, id) => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
115
113
|
});
|
|
116
114
|
const result = await service.update('1', payload).toPromise();
|
|
117
|
-
expect(result
|
|
118
|
-
expect(result
|
|
115
|
+
expect(result?.hasFailed).toBe(true);
|
|
116
|
+
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
119
117
|
});
|
|
120
118
|
it('get success', async () => {
|
|
121
119
|
const response = { data: { id: '1', status: 'fetched' } };
|
|
122
120
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
123
|
-
request: (_payload, _mockResponse, id) =>
|
|
121
|
+
request: (_payload, _mockResponse, id) => of(NetworkingUIEventWrapped.succeeded(response)),
|
|
124
122
|
});
|
|
125
123
|
const result = await service.get('1').toPromise();
|
|
126
|
-
expect(result
|
|
127
|
-
expect(result
|
|
124
|
+
expect(result?.hasSuccess).toBe(true);
|
|
125
|
+
expect(result?.response).toEqual(response);
|
|
128
126
|
});
|
|
129
127
|
it('get error', async () => {
|
|
130
128
|
jest.spyOn(service, 'provider').mockReturnValue({
|
|
131
|
-
request: (_payload, _mockResponse, id) =>
|
|
129
|
+
request: (_payload, _mockResponse, id) => of(NetworkingUIEventWrapped.failed(AlertModel.default())),
|
|
132
130
|
});
|
|
133
131
|
const result = await service.get('1').toPromise();
|
|
134
|
-
expect(result
|
|
135
|
-
expect(result
|
|
132
|
+
expect(result?.hasFailed).toBe(true);
|
|
133
|
+
expect(result?.alertModel).toBeInstanceOf(AlertModel);
|
|
136
134
|
});
|
|
137
135
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { BaseProvider } from '../core/base.provider';
|
|
2
|
-
import { BaseServiceWrapper } from '../core/base.service.wrapper';
|
|
3
|
-
import { NetworkingConfig } from '../types/types';
|
|
1
|
+
import { BaseProvider } from '../core/base.provider.js';
|
|
2
|
+
import { BaseServiceWrapper } from '../core/base.service.wrapper.js';
|
|
3
|
+
import { NetworkingConfig } from '../types/types.js';
|
|
4
4
|
export interface Product {
|
|
5
5
|
id: number;
|
|
6
6
|
name: string;
|
|
@@ -15,7 +15,7 @@ export declare class ProductProvider extends BaseProvider {
|
|
|
15
15
|
export declare class ProductService extends BaseServiceWrapper<ProductProvider> {
|
|
16
16
|
private config;
|
|
17
17
|
constructor(config: NetworkingConfig, productId?: number, method?: string);
|
|
18
|
-
fetchProductById(id: number): import("rxjs").Observable<import("../types/types").NetworkingUIEventWrapped<Product>>;
|
|
19
|
-
fetchAllProducts(): import("rxjs").Observable<import("../types/types").NetworkingUIEventWrapped<Product[]>>;
|
|
20
|
-
createProduct(product: Omit<Product, 'id'>): import("rxjs").Observable<import("../types/types").NetworkingUIEventWrapped<Product>>;
|
|
18
|
+
fetchProductById(id: number): import("rxjs").Observable<import("../types/types.js").NetworkingUIEventWrapped<Product>>;
|
|
19
|
+
fetchAllProducts(): import("rxjs").Observable<import("../types/types.js").NetworkingUIEventWrapped<Product[]>>;
|
|
20
|
+
createProduct(product: Omit<Product, 'id'>): import("rxjs").Observable<import("../types/types.js").NetworkingUIEventWrapped<Product>>;
|
|
21
21
|
}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.ProductService = exports.ProductProvider = void 0;
|
|
4
|
-
const base_provider_1 = require("../core/base.provider");
|
|
5
|
-
const base_service_wrapper_1 = require("../core/base.service.wrapper");
|
|
1
|
+
import { BaseProvider } from '../core/base.provider.js';
|
|
2
|
+
import { BaseServiceWrapper } from '../core/base.service.wrapper.js';
|
|
6
3
|
// ProductProvider implements ProviderType for product endpoints
|
|
7
|
-
class ProductProvider extends
|
|
4
|
+
export class ProductProvider extends BaseProvider {
|
|
8
5
|
constructor(config, { productId, method } = {}) {
|
|
9
6
|
super({
|
|
10
7
|
config,
|
|
@@ -15,9 +12,8 @@ class ProductProvider extends base_provider_1.BaseProvider {
|
|
|
15
12
|
});
|
|
16
13
|
}
|
|
17
14
|
}
|
|
18
|
-
exports.ProductProvider = ProductProvider;
|
|
19
15
|
// ProductService provides high-level methods for product API
|
|
20
|
-
class ProductService extends
|
|
16
|
+
export class ProductService extends BaseServiceWrapper {
|
|
21
17
|
constructor(config, productId, method) {
|
|
22
18
|
super(new ProductProvider(config, { productId, method }));
|
|
23
19
|
this.config = config;
|
|
@@ -38,7 +34,6 @@ class ProductService extends base_service_wrapper_1.BaseServiceWrapper {
|
|
|
38
34
|
return this.request(product);
|
|
39
35
|
}
|
|
40
36
|
}
|
|
41
|
-
exports.ProductService = ProductService;
|
|
42
37
|
// Example usage:
|
|
43
38
|
// setNetworkingConfig({ baseUrl: 'https://fakestoreapi.com', isProd: false });
|
|
44
39
|
// const productService = new ProductService();
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const rxjs_1 = require("rxjs");
|
|
6
|
-
const base_service_wrapper_1 = require("../core/base.service.wrapper");
|
|
1
|
+
import { ProductService } from './product.service.js';
|
|
2
|
+
import { NetworkingUIEventWrapped } from '../types/types.js';
|
|
3
|
+
import { of, throwError } from 'rxjs';
|
|
4
|
+
import { BaseServiceWrapper } from '../core/base.service.wrapper.js';
|
|
7
5
|
describe('ProductService', () => {
|
|
8
6
|
const config = {
|
|
9
7
|
baseUrl: 'https://jsonplaceholder.typicode.com',
|
|
@@ -14,37 +12,38 @@ describe('ProductService', () => {
|
|
|
14
12
|
const product = { id: 1, name: 'Product', price: 10 };
|
|
15
13
|
let requestSpy;
|
|
16
14
|
beforeEach(() => {
|
|
17
|
-
requestSpy = jest.spyOn(
|
|
15
|
+
requestSpy = jest.spyOn(BaseServiceWrapper.prototype, 'request').mockImplementation(() => of(NetworkingUIEventWrapped.succeeded(product)));
|
|
18
16
|
});
|
|
19
17
|
afterEach(() => {
|
|
20
18
|
requestSpy.mockRestore();
|
|
21
19
|
});
|
|
22
|
-
it('should fetch product by id', done => {
|
|
23
|
-
const service = new
|
|
24
|
-
service.fetchProductById(1).subscribe(result => {
|
|
20
|
+
it('should fetch product by id', (done) => {
|
|
21
|
+
const service = new ProductService(config, 1);
|
|
22
|
+
service.fetchProductById(1).subscribe((result) => {
|
|
25
23
|
expect(result.response).toEqual(product);
|
|
26
24
|
done();
|
|
27
25
|
});
|
|
28
26
|
});
|
|
29
|
-
it('should fetch all products', done => {
|
|
30
|
-
const service = new
|
|
31
|
-
service.fetchAllProducts().subscribe(result => {
|
|
27
|
+
it('should fetch all products', (done) => {
|
|
28
|
+
const service = new ProductService(config);
|
|
29
|
+
service.fetchAllProducts().subscribe((result) => {
|
|
32
30
|
expect(result.response).toEqual(product);
|
|
33
31
|
done();
|
|
34
32
|
});
|
|
35
33
|
});
|
|
36
|
-
it('should create a product', done => {
|
|
37
|
-
const service = new
|
|
38
|
-
service.createProduct({ name: 'New Product', price: 99.99 }).subscribe(result => {
|
|
34
|
+
it('should create a product', (done) => {
|
|
35
|
+
const service = new ProductService(config);
|
|
36
|
+
service.createProduct({ name: 'New Product', price: 99.99 }).subscribe((result) => {
|
|
39
37
|
expect(result.response).toEqual(product);
|
|
40
38
|
done();
|
|
41
39
|
});
|
|
42
40
|
});
|
|
43
|
-
it('request should handle error', done => {
|
|
44
|
-
requestSpy.mockImplementationOnce(() =>
|
|
45
|
-
const service = new
|
|
46
|
-
|
|
47
|
-
|
|
41
|
+
it('request should handle error', (done) => {
|
|
42
|
+
requestSpy.mockImplementationOnce(() => throwError(() => new Error('Test error')));
|
|
43
|
+
const service = new ProductService(config);
|
|
44
|
+
// Simulate error by calling a method that uses request
|
|
45
|
+
service.fetchProductById(1).subscribe({
|
|
46
|
+
error: (err) => {
|
|
48
47
|
expect(err).toBeInstanceOf(Error);
|
|
49
48
|
expect(err.message).toBe('Test error');
|
|
50
49
|
done();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Observable } from '../utils/rxjs-import';
|
|
1
|
+
import { ProviderType, NetworkingUIEventWrapped, HeaderType } from '../types/types.js';
|
|
2
|
+
import { Observable } from '../utils/rxjs-import.js';
|
|
3
3
|
export declare enum SMESSHeader {
|
|
4
4
|
ContentType = "Content-Type",
|
|
5
5
|
Authorization = "Authorization",
|
|
@@ -1,27 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
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("../services/logger.service");
|
|
11
|
-
var SMESSHeader;
|
|
1
|
+
import { NetworkingUIEventWrapped, AlertModel, AlertButtonModel } from '../types/types.js';
|
|
2
|
+
import { of, catchError, mergeMap, startWith } from '../utils/rxjs-import.js';
|
|
3
|
+
import HttpService from '../core/rx.http.service.js';
|
|
4
|
+
import { $logger } from '../services/logger.service.js';
|
|
5
|
+
export var SMESSHeader;
|
|
12
6
|
(function (SMESSHeader) {
|
|
13
7
|
SMESSHeader["ContentType"] = "Content-Type";
|
|
14
8
|
SMESSHeader["Authorization"] = "Authorization";
|
|
15
9
|
SMESSHeader["Accept"] = "Accept";
|
|
16
10
|
SMESSHeader["ApiKey"] = "X-Api-Key";
|
|
17
11
|
SMESSHeader["ClientId"] = "X-Client-Id";
|
|
18
|
-
})(SMESSHeader || (
|
|
19
|
-
var ContentType;
|
|
12
|
+
})(SMESSHeader || (SMESSHeader = {}));
|
|
13
|
+
export var ContentType;
|
|
20
14
|
(function (ContentType) {
|
|
21
15
|
ContentType["Json"] = "application/json";
|
|
22
16
|
ContentType["FormURLEncoded"] = "application/x-www-form-urlencoded";
|
|
23
|
-
})(ContentType || (
|
|
24
|
-
var Accept;
|
|
17
|
+
})(ContentType || (ContentType = {}));
|
|
18
|
+
export var Accept;
|
|
25
19
|
(function (Accept) {
|
|
26
20
|
Accept["V1"] = "application/json";
|
|
27
21
|
Accept["V2"] = "application/vnd.smess.v2+json";
|
|
@@ -33,28 +27,27 @@ var Accept;
|
|
|
33
27
|
Accept["V8"] = "application/vnd.smess.v8+json";
|
|
34
28
|
Accept["V9"] = "application/vnd.smess.v9+json";
|
|
35
29
|
Accept["V10"] = "application/vnd.smess.v10+json";
|
|
36
|
-
})(Accept || (
|
|
37
|
-
class SmessService {
|
|
30
|
+
})(Accept || (Accept = {}));
|
|
31
|
+
export class SmessService {
|
|
38
32
|
constructor(target) {
|
|
39
33
|
this.target = target;
|
|
40
34
|
// Set default headers
|
|
41
|
-
|
|
35
|
+
$logger.info('SmessService initialized', {
|
|
42
36
|
target: this.target,
|
|
43
37
|
baseURL: this.target.baseURL,
|
|
44
38
|
method: this.target.method,
|
|
45
39
|
headers: this.target.headers,
|
|
46
40
|
}, 'SmessService');
|
|
47
|
-
this.httpService =
|
|
41
|
+
this.httpService = HttpService.create({
|
|
48
42
|
baseURL: this.target.baseURL,
|
|
49
43
|
headers: this.target.headers,
|
|
50
44
|
method: this.target.method,
|
|
51
45
|
});
|
|
52
46
|
this.httpService.interceptors.response.use((response) => response, async (error) => {
|
|
53
|
-
var _a;
|
|
54
47
|
const originalRequest = error.config;
|
|
55
|
-
if (
|
|
48
|
+
if (error.response?.status === 401 && !originalRequest._retry) {
|
|
56
49
|
originalRequest._retry = true;
|
|
57
|
-
|
|
50
|
+
$logger.info('SmessService constructor - 401 retry', originalRequest, 'SmessService');
|
|
58
51
|
// Implement token refresh logic here
|
|
59
52
|
// Then retry the original request
|
|
60
53
|
// return httpService.request(originalRequest);
|
|
@@ -74,7 +67,7 @@ class SmessService {
|
|
|
74
67
|
return filteredHeaders;
|
|
75
68
|
}
|
|
76
69
|
static commonHeaders(version, options) {
|
|
77
|
-
const { shouldAddClientIdHeader = true, } = options
|
|
70
|
+
const { shouldAddClientIdHeader = true, } = options ?? {};
|
|
78
71
|
const headers = {
|
|
79
72
|
Accept: version,
|
|
80
73
|
Authorization: '',
|
|
@@ -109,28 +102,27 @@ class SmessService {
|
|
|
109
102
|
else {
|
|
110
103
|
observable = this.httpService.request(config);
|
|
111
104
|
}
|
|
112
|
-
return observable.pipe(
|
|
105
|
+
return observable.pipe(catchError((error) => this.transformAxiosError(error, mockResponse)), mergeMap((data) => this.transformAxiosResponse(data)), startWith(NetworkingUIEventWrapped.waiting()));
|
|
113
106
|
}
|
|
114
107
|
// MARK: - Private
|
|
115
108
|
transformAxiosError(error, mockResponse) {
|
|
116
|
-
|
|
109
|
+
$logger.error('transformAxiosError', error, 'SmessService');
|
|
117
110
|
const message = error instanceof Error ? error.message : String(error);
|
|
118
111
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Required for axios compatibility
|
|
119
112
|
const response = error.response;
|
|
120
113
|
const httpErrorCode = response ? response.status : 0;
|
|
121
|
-
const title = response
|
|
122
|
-
const alertModel = new
|
|
114
|
+
const title = response?.statusText;
|
|
115
|
+
const alertModel = new AlertModel(message, httpErrorCode, true, title, response?.data, [AlertButtonModel.buttonYes()]);
|
|
123
116
|
if (mockResponse) {
|
|
124
|
-
return
|
|
117
|
+
return of(NetworkingUIEventWrapped.succeeded(mockResponse));
|
|
125
118
|
}
|
|
126
|
-
return
|
|
119
|
+
return of(NetworkingUIEventWrapped.failed(alertModel));
|
|
127
120
|
}
|
|
128
121
|
transformAxiosResponse(response) {
|
|
129
|
-
|
|
130
|
-
if (response instanceof
|
|
131
|
-
return
|
|
122
|
+
$logger.info('transformAxiosResponse', response, 'SmessService');
|
|
123
|
+
if (response instanceof NetworkingUIEventWrapped) {
|
|
124
|
+
return of(response);
|
|
132
125
|
}
|
|
133
|
-
return
|
|
126
|
+
return of(NetworkingUIEventWrapped.succeeded(response.data));
|
|
134
127
|
}
|
|
135
128
|
}
|
|
136
|
-
exports.SmessService = SmessService;
|