@hahnpro/hpc-api 3.2.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api-base.d.ts +6 -0
- package/dist/api-base.js +10 -0
- package/dist/api.js +1 -1
- package/dist/asset.interface.d.ts +1 -0
- package/dist/asset.service.d.ts +8 -8
- package/dist/asset.service.js +10 -15
- package/dist/assettypes.service.d.ts +9 -2
- package/dist/assettypes.service.js +10 -1
- package/dist/content.interface.d.ts +1 -0
- package/dist/content.service.d.ts +9 -2
- package/dist/content.service.js +10 -1
- package/dist/data.service.d.ts +4 -7
- package/dist/data.service.js +4 -7
- package/dist/events.interface.d.ts +2 -0
- package/dist/flow-deployment.service.d.ts +8 -1
- package/dist/flow-deployment.service.js +10 -1
- package/dist/flow.interface.d.ts +1 -1
- package/dist/flow.service.d.ts +10 -3
- package/dist/flow.service.js +11 -2
- package/dist/http.service.d.ts +12 -10
- package/dist/http.service.js +28 -50
- package/dist/mock/api-base.mock.d.ts +5 -0
- package/dist/mock/api-base.mock.js +11 -0
- package/dist/mock/asset.mock.service.d.ts +8 -8
- package/dist/mock/asset.mock.service.js +11 -26
- package/dist/mock/assetTypes.mock.service.d.ts +11 -3
- package/dist/mock/assetTypes.mock.service.js +22 -5
- package/dist/mock/content.mock.service.d.ts +11 -1
- package/dist/mock/content.mock.service.js +23 -3
- package/dist/mock/data.mock.service.d.ts +3 -2
- package/dist/mock/flow-deployment.mock.service.d.ts +10 -3
- package/dist/mock/flow-deployment.mock.service.js +15 -10
- package/dist/mock/flow-functions.mock.service.d.ts +1 -1
- package/dist/mock/flow-functions.mock.service.js +3 -3
- package/dist/mock/flow.mock.service.d.ts +11 -4
- package/dist/mock/flow.mock.service.js +25 -12
- package/dist/mock/secret.mock.service.d.ts +11 -1
- package/dist/mock/secret.mock.service.js +23 -3
- package/dist/mock/task.mock.service.d.ts +11 -1
- package/dist/mock/task.mock.service.js +23 -3
- package/dist/mock/timeseries.mock.service.d.ts +18 -3
- package/dist/mock/timeseries.mock.service.js +24 -4
- package/dist/mock/trash.mock.service.d.ts +18 -0
- package/dist/mock/trash.mock.service.js +43 -0
- package/dist/resource.interface.d.ts +1 -1
- package/dist/secret.interface.d.ts +1 -0
- package/dist/secret.service.d.ts +8 -1
- package/dist/secret.service.js +10 -1
- package/dist/task.interface.d.ts +1 -0
- package/dist/task.service.d.ts +8 -1
- package/dist/task.service.js +10 -1
- package/dist/timeseries.interface.d.ts +1 -0
- package/dist/timeseries.service.d.ts +8 -1
- package/dist/timeseries.service.js +10 -1
- package/dist/trash.service.d.ts +11 -0
- package/dist/trash.service.js +21 -0
- package/dist/user-settings.interface.d.ts +29 -0
- package/dist/user-settings.interface.js +2 -0
- package/dist/user.service.d.ts +5 -0
- package/dist/user.service.js +10 -0
- package/package.json +7 -4
package/dist/api-base.js
ADDED
package/dist/api.js
CHANGED
|
@@ -20,7 +20,7 @@ const flow_deployment_service_1 = require("./flow-deployment.service");
|
|
|
20
20
|
const label_service_1 = require("./label.service");
|
|
21
21
|
class API {
|
|
22
22
|
constructor() {
|
|
23
|
-
const normalizePath = (value = '', defaultValue = '') => value.replace(
|
|
23
|
+
const normalizePath = (value = '', defaultValue = '') => value.replace(/(?:^\/+)|(?:\/+$)/g, '') || defaultValue;
|
|
24
24
|
let apiBaseUrl = process.env.API_BASE_URL || 'https://testing.hahnpro.com';
|
|
25
25
|
if (!apiBaseUrl.startsWith('https') && !apiBaseUrl.startsWith('http')) {
|
|
26
26
|
console.info('no protocol specified - using HTTPS');
|
package/dist/asset.service.d.ts
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import FormData from 'form-data';
|
|
2
|
+
import { APIBase } from './api-base';
|
|
2
3
|
import { Asset, AssetRevision } from './asset.interface';
|
|
3
4
|
import { Paginated, RequestParameter } from './data.interface';
|
|
4
5
|
import { DataService } from './data.service';
|
|
5
6
|
import { HttpClient } from './http.service';
|
|
6
|
-
|
|
7
|
+
import { TrashService } from './trash.service';
|
|
8
|
+
interface BaseService extends DataService<Asset>, TrashService<Asset> {
|
|
9
|
+
}
|
|
10
|
+
declare class BaseService extends APIBase {
|
|
11
|
+
}
|
|
12
|
+
export declare class AssetService extends BaseService {
|
|
7
13
|
constructor(httpClient: HttpClient);
|
|
8
|
-
paperBinRestoreAll(): Promise<Asset[]>;
|
|
9
|
-
paperBinRestoreOne(id: string): Promise<Asset>;
|
|
10
|
-
emptyTrash(offset: number): Promise<{
|
|
11
|
-
acknowledged: boolean;
|
|
12
|
-
deletedCount: number;
|
|
13
|
-
}>;
|
|
14
|
-
getPaperBin(params?: RequestParameter): Promise<Paginated<Asset[]>>;
|
|
15
14
|
deleteOne(id: string, force?: boolean): Promise<any>;
|
|
16
15
|
addAttachment: (id: string, form: FormData) => Promise<Asset>;
|
|
17
16
|
getChildren(assetId: string, params?: RequestParameter): Promise<Paginated<Asset[]>>;
|
|
@@ -19,3 +18,4 @@ export declare class AssetService extends DataService<Asset> {
|
|
|
19
18
|
rollback(assetId: string, revisionId: string): Promise<Asset>;
|
|
20
19
|
deleteRevision(assetId: string, revisionId: string): Promise<any>;
|
|
21
20
|
}
|
|
21
|
+
export {};
|
package/dist/asset.service.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AssetService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ts_mixer_1 = require("ts-mixer");
|
|
6
|
+
const api_base_1 = require("./api-base");
|
|
4
7
|
const data_service_1 = require("./data.service");
|
|
5
|
-
|
|
8
|
+
const trash_service_1 = require("./trash.service");
|
|
9
|
+
let BaseService = class BaseService extends api_base_1.APIBase {
|
|
10
|
+
};
|
|
11
|
+
BaseService = tslib_1.__decorate([
|
|
12
|
+
(0, ts_mixer_1.mix)(data_service_1.DataService, trash_service_1.TrashService)
|
|
13
|
+
], BaseService);
|
|
14
|
+
class AssetService extends BaseService {
|
|
6
15
|
constructor(httpClient) {
|
|
7
16
|
super(httpClient, '/assets');
|
|
8
17
|
this.addAttachment = (id, form) => {
|
|
@@ -14,20 +23,6 @@ class AssetService extends data_service_1.DataService {
|
|
|
14
23
|
});
|
|
15
24
|
};
|
|
16
25
|
}
|
|
17
|
-
paperBinRestoreAll() {
|
|
18
|
-
return this.httpClient.put(`${this.basePath}/paperbin/restore`, {});
|
|
19
|
-
}
|
|
20
|
-
paperBinRestoreOne(id) {
|
|
21
|
-
return this.httpClient.put(`${this.basePath}/paperbin/restore/${id}`, {});
|
|
22
|
-
}
|
|
23
|
-
emptyTrash(offset) {
|
|
24
|
-
return this.httpClient.delete(`${this.basePath}/paperbin/clean`, { params: { offset } });
|
|
25
|
-
}
|
|
26
|
-
getPaperBin(params = {}) {
|
|
27
|
-
params.limit = params.limit || 0;
|
|
28
|
-
params.page = params.page || 1;
|
|
29
|
-
return this.httpClient.get(`${this.basePath}/paperbin`, { params });
|
|
30
|
-
}
|
|
31
26
|
deleteOne(id, force = false) {
|
|
32
27
|
return this.httpClient.delete(`${this.basePath}/${id}`, { params: { force } });
|
|
33
28
|
}
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
import { APIBase } from './api-base';
|
|
1
2
|
import { AssetType } from './asset.interface';
|
|
3
|
+
import { Paginated } from './data.interface';
|
|
2
4
|
import { DataService } from './data.service';
|
|
3
5
|
import { HttpClient } from './http.service';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
+
import { TrashService } from './trash.service';
|
|
7
|
+
interface BaseService extends DataService<AssetType>, TrashService<AssetType> {
|
|
8
|
+
}
|
|
9
|
+
declare class BaseService extends APIBase {
|
|
10
|
+
}
|
|
11
|
+
export declare class AssetTypesService extends BaseService {
|
|
6
12
|
constructor(httpClient: HttpClient);
|
|
7
13
|
getRevisions(id: string): Promise<Paginated<AssetType[]>>;
|
|
8
14
|
rollback(id: string, revisionId: string): Promise<AssetType>;
|
|
9
15
|
deleteRevision(id: string, revisionId: string): Promise<any>;
|
|
10
16
|
}
|
|
17
|
+
export {};
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AssetTypesService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ts_mixer_1 = require("ts-mixer");
|
|
6
|
+
const api_base_1 = require("./api-base");
|
|
4
7
|
const data_service_1 = require("./data.service");
|
|
5
|
-
|
|
8
|
+
const trash_service_1 = require("./trash.service");
|
|
9
|
+
let BaseService = class BaseService extends api_base_1.APIBase {
|
|
10
|
+
};
|
|
11
|
+
BaseService = tslib_1.__decorate([
|
|
12
|
+
(0, ts_mixer_1.mix)(data_service_1.DataService, trash_service_1.TrashService)
|
|
13
|
+
], BaseService);
|
|
14
|
+
class AssetTypesService extends BaseService {
|
|
6
15
|
constructor(httpClient) {
|
|
7
16
|
super(httpClient, '/assettypes');
|
|
8
17
|
}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
import FormData from 'form-data';
|
|
4
|
+
import { Readable } from 'stream';
|
|
5
|
+
import { APIBase } from './api-base';
|
|
4
6
|
import { Content, ReturnType } from './content.interface';
|
|
5
7
|
import { DataService } from './data.service';
|
|
6
8
|
import { HttpClient } from './http.service';
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
+
import { TrashService } from './trash.service';
|
|
10
|
+
interface BaseService extends DataService<Content>, TrashService<Content> {
|
|
11
|
+
}
|
|
12
|
+
declare class BaseService extends APIBase {
|
|
13
|
+
}
|
|
14
|
+
export declare class ContentService extends BaseService {
|
|
9
15
|
constructor(httpClient: HttpClient);
|
|
10
16
|
upload: (form: FormData) => Promise<Content>;
|
|
11
17
|
download(id: string, raw?: boolean): Promise<Blob | ArrayBuffer>;
|
|
@@ -16,3 +22,4 @@ export declare class ContentService extends DataService<Content> {
|
|
|
16
22
|
download(id: string, returnType: ReturnType.ARRAYBUFFER): Promise<ArrayBuffer>;
|
|
17
23
|
download(id: string, returnType: ReturnType.NODESTREAM): Promise<Readable>;
|
|
18
24
|
}
|
|
25
|
+
export {};
|
package/dist/content.service.js
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ContentService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ts_mixer_1 = require("ts-mixer");
|
|
6
|
+
const api_base_1 = require("./api-base");
|
|
4
7
|
const content_interface_1 = require("./content.interface");
|
|
5
8
|
const data_service_1 = require("./data.service");
|
|
6
|
-
|
|
9
|
+
const trash_service_1 = require("./trash.service");
|
|
10
|
+
let BaseService = class BaseService extends api_base_1.APIBase {
|
|
11
|
+
};
|
|
12
|
+
BaseService = tslib_1.__decorate([
|
|
13
|
+
(0, ts_mixer_1.mix)(data_service_1.DataService, trash_service_1.TrashService)
|
|
14
|
+
], BaseService);
|
|
15
|
+
class ContentService extends BaseService {
|
|
7
16
|
constructor(httpClient) {
|
|
8
17
|
super(httpClient, '/contents');
|
|
9
18
|
this.upload = (form) => {
|
package/dist/data.service.d.ts
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
|
+
import { APIBase } from './api-base';
|
|
1
2
|
import { DataInterface, Filter, Paginated, RequestParameter } from './data.interface';
|
|
2
|
-
|
|
3
|
-
export declare class DataService<T> implements DataInterface<T> {
|
|
4
|
-
protected readonly httpClient: HttpClient;
|
|
5
|
-
protected readonly basePath: any;
|
|
6
|
-
constructor(httpClient: HttpClient, basePath: any);
|
|
3
|
+
export declare class DataService<T> extends APIBase implements DataInterface<T> {
|
|
7
4
|
addOne(dto: any): Promise<T>;
|
|
8
5
|
addMany(dto: any[]): Promise<T[]>;
|
|
9
6
|
getOne(id: string, options?: any): Promise<T>;
|
|
10
7
|
getMany(params?: RequestParameter): Promise<Paginated<T[]>>;
|
|
11
8
|
getManyFiltered(filter: Filter, params?: RequestParameter): Promise<Paginated<T[]>>;
|
|
12
9
|
updateOne(id: string, dto: any): Promise<T>;
|
|
13
|
-
deleteOne(id: string): Promise<any>;
|
|
14
|
-
|
|
10
|
+
deleteOne(id: string, force?: boolean): Promise<any>;
|
|
11
|
+
private getFilterString;
|
|
15
12
|
}
|
package/dist/data.service.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DataService = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
this.httpClient = httpClient;
|
|
7
|
-
this.basePath = basePath;
|
|
8
|
-
}
|
|
4
|
+
const api_base_1 = require("./api-base");
|
|
5
|
+
class DataService extends api_base_1.APIBase {
|
|
9
6
|
addOne(dto) {
|
|
10
7
|
return this.httpClient.post(this.basePath, dto);
|
|
11
8
|
}
|
|
@@ -28,8 +25,8 @@ class DataService {
|
|
|
28
25
|
updateOne(id, dto) {
|
|
29
26
|
return this.httpClient.put(`${this.basePath}/${id}`, dto);
|
|
30
27
|
}
|
|
31
|
-
deleteOne(id) {
|
|
32
|
-
return this.httpClient.delete(`${this.basePath}/${id}
|
|
28
|
+
deleteOne(id, force = false) {
|
|
29
|
+
return this.httpClient.delete(`${this.basePath}/${id}`, { params: { force } });
|
|
33
30
|
}
|
|
34
31
|
getFilterString(filter) {
|
|
35
32
|
const { parent, tags, type } = filter;
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
import { APIBase } from './api-base';
|
|
1
2
|
import { DataService } from './data.service';
|
|
2
3
|
import { FlowDeployment, FlowDeploymentMetrics, FlowDeploymentStatistic, FlowLog } from './flow-deployment.interface';
|
|
3
4
|
import { HttpClient } from './http.service';
|
|
4
5
|
import { ResourceReference } from './resource.interface';
|
|
5
|
-
|
|
6
|
+
import { TrashService } from './trash.service';
|
|
7
|
+
interface BaseService extends DataService<FlowDeployment>, TrashService<FlowDeployment> {
|
|
8
|
+
}
|
|
9
|
+
declare class BaseService extends APIBase {
|
|
10
|
+
}
|
|
11
|
+
export declare class FlowDeploymentService extends BaseService {
|
|
6
12
|
constructor(httpClient: HttpClient);
|
|
7
13
|
addMany(dto: any[]): Promise<FlowDeployment[]>;
|
|
8
14
|
updateOne(id: string, dto: any, force?: boolean): Promise<FlowDeployment>;
|
|
@@ -24,3 +30,4 @@ export declare class FlowDeploymentService extends DataService<FlowDeployment> {
|
|
|
24
30
|
subscribeToStatus(id: string, listener: (event: MessageEvent<any>) => void, errorListener?: (event: MessageEvent) => void): Promise<string>;
|
|
25
31
|
subscribeToLogs(id: string, listener: (event: MessageEvent<any>) => void, errorListener?: (event: MessageEvent) => void): Promise<string>;
|
|
26
32
|
}
|
|
33
|
+
export {};
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FlowDeploymentService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ts_mixer_1 = require("ts-mixer");
|
|
6
|
+
const api_base_1 = require("./api-base");
|
|
4
7
|
const data_service_1 = require("./data.service");
|
|
5
|
-
|
|
8
|
+
const trash_service_1 = require("./trash.service");
|
|
9
|
+
let BaseService = class BaseService extends api_base_1.APIBase {
|
|
10
|
+
};
|
|
11
|
+
BaseService = tslib_1.__decorate([
|
|
12
|
+
(0, ts_mixer_1.mix)(data_service_1.DataService, trash_service_1.TrashService)
|
|
13
|
+
], BaseService);
|
|
14
|
+
class FlowDeploymentService extends BaseService {
|
|
6
15
|
constructor(httpClient) {
|
|
7
16
|
super(httpClient, '/flow/deployments');
|
|
8
17
|
}
|
package/dist/flow.interface.d.ts
CHANGED
package/dist/flow.service.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
+
import { APIBase } from './api-base';
|
|
2
|
+
import { Paginated, RequestParameter } from './data.interface';
|
|
1
3
|
import { DataService } from './data.service';
|
|
2
4
|
import { FlowDiagram, FlowDto } from './flow.interface';
|
|
3
|
-
import { HttpClient } from './http.service';
|
|
4
|
-
import { Paginated, RequestParameter } from './data.interface';
|
|
5
5
|
import { FlowDeployment } from './flow-deployment.interface';
|
|
6
|
-
|
|
6
|
+
import { HttpClient } from './http.service';
|
|
7
|
+
import { TrashService } from './trash.service';
|
|
8
|
+
interface BaseService extends DataService<FlowDto>, TrashService<FlowDto> {
|
|
9
|
+
}
|
|
10
|
+
declare class BaseService extends APIBase {
|
|
11
|
+
}
|
|
12
|
+
export declare class FlowService extends BaseService {
|
|
7
13
|
constructor(httpClient: HttpClient);
|
|
8
14
|
addMany(dto: any[]): Promise<FlowDto[]>;
|
|
9
15
|
getMany(params?: RequestParameter): Promise<Paginated<FlowDto[]>>;
|
|
@@ -15,3 +21,4 @@ export declare class FlowService extends DataService<FlowDto> {
|
|
|
15
21
|
rollback(id: string, revisionId: string): Promise<FlowDto>;
|
|
16
22
|
deleteRevision(id: string, revisionId: string): Promise<any>;
|
|
17
23
|
}
|
|
24
|
+
export {};
|
package/dist/flow.service.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FlowService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ts_mixer_1 = require("ts-mixer");
|
|
6
|
+
const api_base_1 = require("./api-base");
|
|
4
7
|
const data_service_1 = require("./data.service");
|
|
5
|
-
|
|
8
|
+
const trash_service_1 = require("./trash.service");
|
|
9
|
+
let BaseService = class BaseService extends api_base_1.APIBase {
|
|
10
|
+
};
|
|
11
|
+
BaseService = tslib_1.__decorate([
|
|
12
|
+
(0, ts_mixer_1.mix)(data_service_1.DataService, trash_service_1.TrashService)
|
|
13
|
+
], BaseService);
|
|
14
|
+
class FlowService extends BaseService {
|
|
6
15
|
constructor(httpClient) {
|
|
7
16
|
super(httpClient, '/flows');
|
|
8
17
|
}
|
|
@@ -28,7 +37,7 @@ class FlowService extends data_service_1.DataService {
|
|
|
28
37
|
const flowId = typeof depl.flow === 'string' ? depl.flow : depl.flow.id;
|
|
29
38
|
const diagramId = typeof depl.diagram === 'string' ? depl.diagram : depl.diagram.id;
|
|
30
39
|
const revisions = await this.getDiagramRevisions(flowId);
|
|
31
|
-
return revisions.
|
|
40
|
+
return revisions[revisions.length - 1].id === diagramId;
|
|
32
41
|
}
|
|
33
42
|
getRevisions(id) {
|
|
34
43
|
return this.httpClient.get(`${this.basePath}/${id}/revisions`);
|
package/dist/http.service.d.ts
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { AxiosRequestConfig } from 'axios';
|
|
2
2
|
import EventSource from 'eventsource';
|
|
3
3
|
export declare class HttpClient {
|
|
4
|
-
private baseURL;
|
|
4
|
+
private readonly baseURL;
|
|
5
|
+
private readonly authbaseURL;
|
|
5
6
|
private readonly realm;
|
|
6
|
-
private readonly
|
|
7
|
-
private readonly
|
|
7
|
+
private readonly clientId;
|
|
8
|
+
private readonly clientSecret;
|
|
8
9
|
private readonly axiosInstance;
|
|
9
|
-
private readonly authAxiosInstance;
|
|
10
10
|
private readonly requestQueue;
|
|
11
|
-
private
|
|
12
|
-
private
|
|
13
|
-
eventSourcesMap: Map<string,
|
|
14
|
-
|
|
11
|
+
private client;
|
|
12
|
+
private tokenSet;
|
|
13
|
+
eventSourcesMap: Map<string, {
|
|
14
|
+
eventSource: EventSource;
|
|
15
|
+
listener: (event: MessageEvent) => void;
|
|
16
|
+
errListener: (event: MessageEvent) => void;
|
|
17
|
+
}>;
|
|
18
|
+
constructor(baseURL: string, authbaseURL: string, realm: string, clientId: string, clientSecret: string);
|
|
15
19
|
getQueueStats: () => {
|
|
16
20
|
peak: number;
|
|
17
21
|
pending: number;
|
|
@@ -27,6 +31,4 @@ export declare class HttpClient {
|
|
|
27
31
|
destroyEventSource(id: string): void;
|
|
28
32
|
destroyAllEventSources(): void;
|
|
29
33
|
getAccessToken: () => Promise<string>;
|
|
30
|
-
private isTokenValid;
|
|
31
|
-
private getToken;
|
|
32
34
|
}
|
package/dist/http.service.js
CHANGED
|
@@ -4,16 +4,17 @@ exports.HttpClient = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
6
6
|
const eventsource_1 = tslib_1.__importDefault(require("eventsource"));
|
|
7
|
+
const openid_client_1 = require("openid-client");
|
|
7
8
|
const Queue_1 = require("./Queue");
|
|
8
9
|
const crypto_1 = require("crypto");
|
|
9
|
-
const
|
|
10
|
+
const TOKEN_EXPIRATION_BUFFER = 30;
|
|
10
11
|
class HttpClient {
|
|
11
|
-
constructor(baseURL, authbaseURL, realm,
|
|
12
|
+
constructor(baseURL, authbaseURL, realm, clientId, clientSecret) {
|
|
12
13
|
this.baseURL = baseURL;
|
|
14
|
+
this.authbaseURL = authbaseURL;
|
|
13
15
|
this.realm = realm;
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.accessTokenExpiration = 0;
|
|
16
|
+
this.clientId = clientId;
|
|
17
|
+
this.clientSecret = clientSecret;
|
|
17
18
|
this.eventSourcesMap = new Map();
|
|
18
19
|
this.getQueueStats = () => { var _a; return (_a = this.requestQueue) === null || _a === void 0 ? void 0 : _a.getStats(); };
|
|
19
20
|
this.delete = (url, config) => this.request('DELETE', url, config);
|
|
@@ -31,60 +32,37 @@ class HttpClient {
|
|
|
31
32
|
.catch(reject);
|
|
32
33
|
}));
|
|
33
34
|
};
|
|
34
|
-
this.getAccessToken = () => {
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
this.getAccessToken = async () => {
|
|
36
|
+
var _a;
|
|
37
|
+
if (!((_a = this.client) === null || _a === void 0 ? void 0 : _a.issuer)) {
|
|
38
|
+
const authIssuer = await openid_client_1.Issuer.discover(`${this.authbaseURL}/auth/realms/${this.realm}/`);
|
|
39
|
+
this.client = await new authIssuer.Client({
|
|
40
|
+
client_id: this.clientId,
|
|
41
|
+
client_secret: this.clientSecret,
|
|
42
|
+
token_endpoint_auth_method: 'client_secret_jwt',
|
|
43
|
+
});
|
|
37
44
|
}
|
|
38
|
-
|
|
39
|
-
|
|
45
|
+
if (!this.tokenSet || this.tokenSet.expired() || this.tokenSet.expires_at < Date.now() / 1000 + TOKEN_EXPIRATION_BUFFER) {
|
|
46
|
+
this.tokenSet = await this.client.grant({ grant_type: 'client_credentials' });
|
|
40
47
|
}
|
|
41
|
-
|
|
42
|
-
this.isTokenValid = () => {
|
|
43
|
-
if (this.accessToken && this.accessTokenExpiration) {
|
|
44
|
-
return Date.now() + EXPIRATION_BUFFER < this.accessTokenExpiration;
|
|
45
|
-
}
|
|
46
|
-
return false;
|
|
47
|
-
};
|
|
48
|
-
this.getToken = () => {
|
|
49
|
-
return new Promise((resolve, reject) => {
|
|
50
|
-
const params = new URLSearchParams([
|
|
51
|
-
['client_id', this.client],
|
|
52
|
-
['client_secret', this.secret],
|
|
53
|
-
['grant_type', 'client_credentials'],
|
|
54
|
-
]);
|
|
55
|
-
const headers = { 'Content-Type': 'application/x-www-form-urlencoded' };
|
|
56
|
-
this.authAxiosInstance
|
|
57
|
-
.post(`/realms/${this.realm}/protocol/openid-connect/token`, params.toString(), { headers })
|
|
58
|
-
.then((res) => {
|
|
59
|
-
var _a;
|
|
60
|
-
if (((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.access_token) && res.data.expires_in) {
|
|
61
|
-
this.accessToken = res.data.access_token;
|
|
62
|
-
this.accessTokenExpiration = Date.now() + res.data.expires_in * 1000;
|
|
63
|
-
return resolve(res.data.access_token);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
throw new Error('Invalid access token received');
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
.catch(reject);
|
|
70
|
-
});
|
|
48
|
+
return this.tokenSet.access_token;
|
|
71
49
|
};
|
|
72
50
|
this.axiosInstance = axios_1.default.create({ baseURL, timeout: 60000 });
|
|
73
|
-
this.authAxiosInstance = axios_1.default.create({ baseURL: authbaseURL || baseURL, timeout: 10000 });
|
|
74
51
|
this.requestQueue = new Queue_1.Queue({ concurrency: 1, timeout: 70000, throwOnTimeout: true });
|
|
75
52
|
}
|
|
76
53
|
async addEventSource(url, listener, errorListener) {
|
|
77
54
|
const id = (0, crypto_1.randomUUID)();
|
|
55
|
+
const errListener = errorListener
|
|
56
|
+
? errorListener
|
|
57
|
+
: (event) => {
|
|
58
|
+
throw new Error(JSON.stringify(event, null, 2));
|
|
59
|
+
};
|
|
78
60
|
const es = new eventsource_1.default(`${this.baseURL}${url}`, {
|
|
79
61
|
headers: { authorization: 'Bearer ' + (await this.getAccessToken()) },
|
|
80
62
|
});
|
|
81
63
|
es.addEventListener('message', listener);
|
|
82
|
-
es.addEventListener('error',
|
|
83
|
-
|
|
84
|
-
: (event) => {
|
|
85
|
-
throw new Error(JSON.stringify(event, null, 2));
|
|
86
|
-
});
|
|
87
|
-
this.eventSourcesMap.set(id, es);
|
|
64
|
+
es.addEventListener('error', errListener);
|
|
65
|
+
this.eventSourcesMap.set(id, { eventSource: es, listener, errListener });
|
|
88
66
|
return id;
|
|
89
67
|
}
|
|
90
68
|
destroyEventSource(id) {
|
|
@@ -92,9 +70,9 @@ class HttpClient {
|
|
|
92
70
|
return;
|
|
93
71
|
}
|
|
94
72
|
const es = this.eventSourcesMap.get(id);
|
|
95
|
-
es.close();
|
|
96
|
-
es.removeEventListener('message',
|
|
97
|
-
es.removeEventListener('error',
|
|
73
|
+
es.eventSource.close();
|
|
74
|
+
es.eventSource.removeEventListener('message', es.listener);
|
|
75
|
+
es.eventSource.removeEventListener('error', es.errListener);
|
|
98
76
|
this.eventSourcesMap.delete(id);
|
|
99
77
|
}
|
|
100
78
|
destroyAllEventSources() {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.APIBaseMock = void 0;
|
|
4
|
+
const api_base_1 = require("../api-base");
|
|
5
|
+
class APIBaseMock extends api_base_1.APIBase {
|
|
6
|
+
constructor(data = []) {
|
|
7
|
+
super(null, null);
|
|
8
|
+
this.data = data;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.APIBaseMock = APIBaseMock;
|
|
@@ -3,18 +3,17 @@ import { Asset, AssetRevision } from '../asset.interface';
|
|
|
3
3
|
import { AssetService } from '../asset.service';
|
|
4
4
|
import { Paginated, RequestParameter } from '../data.interface';
|
|
5
5
|
import { MockAPI } from './api.mock';
|
|
6
|
+
import { APIBaseMock } from './api-base.mock';
|
|
6
7
|
import { DataMockService } from './data.mock.service';
|
|
7
|
-
|
|
8
|
+
import { TrashMockService } from './trash.mock.service';
|
|
9
|
+
interface BaseService extends DataMockService<Asset>, TrashMockService<Asset> {
|
|
10
|
+
}
|
|
11
|
+
declare class BaseService extends APIBaseMock<Asset> {
|
|
12
|
+
}
|
|
13
|
+
export declare class AssetMockService extends BaseService implements AssetService {
|
|
8
14
|
private api;
|
|
9
15
|
private revisions;
|
|
10
16
|
constructor(api: MockAPI, assets: Asset[], revisions: AssetRevision[]);
|
|
11
|
-
paperBinRestoreAll(): Promise<Asset[]>;
|
|
12
|
-
paperBinRestoreOne(id: string): Promise<Asset>;
|
|
13
|
-
emptyTrash(offset: number): Promise<{
|
|
14
|
-
acknowledged: boolean;
|
|
15
|
-
deletedCount: number;
|
|
16
|
-
}>;
|
|
17
|
-
getPaperBin(params?: RequestParameter): Promise<Paginated<Asset[]>>;
|
|
18
17
|
private getAssets;
|
|
19
18
|
addOne(dto: Asset): Promise<Asset>;
|
|
20
19
|
deleteOne(assetId: string, force?: boolean): Promise<Asset>;
|
|
@@ -26,3 +25,4 @@ export declare class AssetMockService extends DataMockService<Asset> implements
|
|
|
26
25
|
rollback(assetId: string, revisionId: string): Promise<Asset>;
|
|
27
26
|
deleteRevision(assetId: string, revisionId: string): Promise<any>;
|
|
28
27
|
}
|
|
28
|
+
export {};
|
|
@@ -1,36 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AssetMockService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const ts_mixer_1 = require("ts-mixer");
|
|
6
|
+
const api_base_mock_1 = require("./api-base.mock");
|
|
4
7
|
const data_mock_service_1 = require("./data.mock.service");
|
|
5
|
-
|
|
8
|
+
const trash_mock_service_1 = require("./trash.mock.service");
|
|
9
|
+
let BaseService = class BaseService extends api_base_mock_1.APIBaseMock {
|
|
10
|
+
};
|
|
11
|
+
BaseService = tslib_1.__decorate([
|
|
12
|
+
(0, ts_mixer_1.mix)(data_mock_service_1.DataMockService, trash_mock_service_1.TrashMockService)
|
|
13
|
+
], BaseService);
|
|
14
|
+
class AssetMockService extends BaseService {
|
|
6
15
|
constructor(api, assets, revisions) {
|
|
7
|
-
super();
|
|
16
|
+
super(assets);
|
|
8
17
|
this.api = api;
|
|
9
18
|
this.revisions = revisions;
|
|
10
|
-
this.data = assets;
|
|
11
|
-
}
|
|
12
|
-
paperBinRestoreAll() {
|
|
13
|
-
const deleted = this.data.filter((v) => v.deletedAt);
|
|
14
|
-
for (const asset of deleted) {
|
|
15
|
-
delete asset.deletedAt;
|
|
16
|
-
}
|
|
17
|
-
return Promise.resolve(deleted);
|
|
18
|
-
}
|
|
19
|
-
paperBinRestoreOne(id) {
|
|
20
|
-
const deleted = this.data.find((v) => v.id === id);
|
|
21
|
-
delete deleted.deletedAt;
|
|
22
|
-
return Promise.resolve(deleted);
|
|
23
|
-
}
|
|
24
|
-
emptyTrash(offset) {
|
|
25
|
-
const dateOffsSeconds = Math.round(new Date().getTime() / 1000) - offset;
|
|
26
|
-
const date = new Date(dateOffsSeconds * 1000);
|
|
27
|
-
const trash = this.data.filter((v) => new Date(v.deletedAt) < date);
|
|
28
|
-
trash.map((v) => this.deleteOne(v.id));
|
|
29
|
-
return Promise.resolve({ acknowledged: true, deletedCount: trash.length });
|
|
30
|
-
}
|
|
31
|
-
getPaperBin(params) {
|
|
32
|
-
const page = this.getAssets(params, true);
|
|
33
|
-
return Promise.resolve(page);
|
|
34
19
|
}
|
|
35
20
|
getAssets(params, deleted = false) {
|
|
36
21
|
const data = this.data.filter((asset) => !!asset.deletedAt === deleted);
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { AssetType, AssetTypeRevision } from '../asset.interface';
|
|
2
2
|
import { AssetTypesService } from '../assettypes.service';
|
|
3
|
+
import { Paginated, RequestParameter } from '../data.interface';
|
|
4
|
+
import { APIBaseMock } from './api-base.mock';
|
|
3
5
|
import { DataMockService } from './data.mock.service';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
+
import { TrashMockService } from './trash.mock.service';
|
|
7
|
+
interface BaseService extends DataMockService<AssetType>, TrashMockService<AssetType> {
|
|
8
|
+
}
|
|
9
|
+
declare class BaseService extends APIBaseMock<AssetType> {
|
|
10
|
+
}
|
|
11
|
+
export declare class AssetTypesMockService extends BaseService implements AssetTypesService {
|
|
6
12
|
private revisions;
|
|
7
13
|
constructor(assetTypes: AssetType[], revisions: AssetTypeRevision[]);
|
|
14
|
+
getMany(params?: RequestParameter): Promise<Paginated<AssetType[]>>;
|
|
8
15
|
addOne(dto: AssetType): Promise<AssetType>;
|
|
9
|
-
deleteOne(id: string): Promise<any>;
|
|
16
|
+
deleteOne(id: string, force?: boolean): Promise<any>;
|
|
10
17
|
updateOne(id: string, dto: AssetType): Promise<AssetType>;
|
|
11
18
|
getRevisions(id: string): Promise<Paginated<AssetTypeRevision[]>>;
|
|
12
19
|
rollback(id: string, revisionId: string): Promise<AssetType>;
|
|
13
20
|
deleteRevision(assetId: string, revisionId: string): Promise<any>;
|
|
14
21
|
}
|
|
22
|
+
export {};
|