@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.
Files changed (61) hide show
  1. package/dist/api-base.d.ts +6 -0
  2. package/dist/api-base.js +10 -0
  3. package/dist/api.js +1 -1
  4. package/dist/asset.interface.d.ts +1 -0
  5. package/dist/asset.service.d.ts +8 -8
  6. package/dist/asset.service.js +10 -15
  7. package/dist/assettypes.service.d.ts +9 -2
  8. package/dist/assettypes.service.js +10 -1
  9. package/dist/content.interface.d.ts +1 -0
  10. package/dist/content.service.d.ts +9 -2
  11. package/dist/content.service.js +10 -1
  12. package/dist/data.service.d.ts +4 -7
  13. package/dist/data.service.js +4 -7
  14. package/dist/events.interface.d.ts +2 -0
  15. package/dist/flow-deployment.service.d.ts +8 -1
  16. package/dist/flow-deployment.service.js +10 -1
  17. package/dist/flow.interface.d.ts +1 -1
  18. package/dist/flow.service.d.ts +10 -3
  19. package/dist/flow.service.js +11 -2
  20. package/dist/http.service.d.ts +12 -10
  21. package/dist/http.service.js +28 -50
  22. package/dist/mock/api-base.mock.d.ts +5 -0
  23. package/dist/mock/api-base.mock.js +11 -0
  24. package/dist/mock/asset.mock.service.d.ts +8 -8
  25. package/dist/mock/asset.mock.service.js +11 -26
  26. package/dist/mock/assetTypes.mock.service.d.ts +11 -3
  27. package/dist/mock/assetTypes.mock.service.js +22 -5
  28. package/dist/mock/content.mock.service.d.ts +11 -1
  29. package/dist/mock/content.mock.service.js +23 -3
  30. package/dist/mock/data.mock.service.d.ts +3 -2
  31. package/dist/mock/flow-deployment.mock.service.d.ts +10 -3
  32. package/dist/mock/flow-deployment.mock.service.js +15 -10
  33. package/dist/mock/flow-functions.mock.service.d.ts +1 -1
  34. package/dist/mock/flow-functions.mock.service.js +3 -3
  35. package/dist/mock/flow.mock.service.d.ts +11 -4
  36. package/dist/mock/flow.mock.service.js +25 -12
  37. package/dist/mock/secret.mock.service.d.ts +11 -1
  38. package/dist/mock/secret.mock.service.js +23 -3
  39. package/dist/mock/task.mock.service.d.ts +11 -1
  40. package/dist/mock/task.mock.service.js +23 -3
  41. package/dist/mock/timeseries.mock.service.d.ts +18 -3
  42. package/dist/mock/timeseries.mock.service.js +24 -4
  43. package/dist/mock/trash.mock.service.d.ts +18 -0
  44. package/dist/mock/trash.mock.service.js +43 -0
  45. package/dist/resource.interface.d.ts +1 -1
  46. package/dist/secret.interface.d.ts +1 -0
  47. package/dist/secret.service.d.ts +8 -1
  48. package/dist/secret.service.js +10 -1
  49. package/dist/task.interface.d.ts +1 -0
  50. package/dist/task.service.d.ts +8 -1
  51. package/dist/task.service.js +10 -1
  52. package/dist/timeseries.interface.d.ts +1 -0
  53. package/dist/timeseries.service.d.ts +8 -1
  54. package/dist/timeseries.service.js +10 -1
  55. package/dist/trash.service.d.ts +11 -0
  56. package/dist/trash.service.js +21 -0
  57. package/dist/user-settings.interface.d.ts +29 -0
  58. package/dist/user-settings.interface.js +2 -0
  59. package/dist/user.service.d.ts +5 -0
  60. package/dist/user.service.js +10 -0
  61. package/package.json +7 -4
@@ -0,0 +1,6 @@
1
+ import { HttpClient } from './http.service';
2
+ export declare class APIBase {
3
+ protected readonly httpClient: HttpClient;
4
+ protected readonly basePath: string;
5
+ constructor(httpClient: HttpClient, basePath: string);
6
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.APIBase = void 0;
4
+ class APIBase {
5
+ constructor(httpClient, basePath) {
6
+ this.httpClient = httpClient;
7
+ this.basePath = basePath;
8
+ }
9
+ }
10
+ exports.APIBase = APIBase;
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(/^\/+|\/+$/g, '') || defaultValue;
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');
@@ -15,6 +15,7 @@ export interface AssetType {
15
15
  updatedAt?: string;
16
16
  author?: string;
17
17
  revision?: number;
18
+ deletedAt?: string;
18
19
  }
19
20
  export declare type AssetTypeRevision = AssetType & {
20
21
  originalId: string;
@@ -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
- export declare class AssetService extends DataService<Asset> {
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 {};
@@ -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
- class AssetService extends data_service_1.DataService {
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 { Paginated } from './data.interface';
5
- export declare class AssetTypesService extends DataService<AssetType> {
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
- class AssetTypesService extends data_service_1.DataService {
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
  }
@@ -12,6 +12,7 @@ export interface Content {
12
12
  files?: Storage[];
13
13
  createdAt?: string;
14
14
  updatedAt?: string;
15
+ deletedAt?: string;
15
16
  }
16
17
  export declare enum ReturnType {
17
18
  TEXT = 0,
@@ -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 { Readable } from 'stream';
8
- export declare class ContentService extends DataService<Content> {
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 {};
@@ -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
- class ContentService extends data_service_1.DataService {
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) => {
@@ -1,15 +1,12 @@
1
+ import { APIBase } from './api-base';
1
2
  import { DataInterface, Filter, Paginated, RequestParameter } from './data.interface';
2
- import { HttpClient } from './http.service';
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
- protected getFilterString(filter: Filter): string;
10
+ deleteOne(id: string, force?: boolean): Promise<any>;
11
+ private getFilterString;
15
12
  }
@@ -1,11 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DataService = void 0;
4
- class DataService {
5
- constructor(httpClient, basePath) {
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;
@@ -13,4 +13,6 @@ export interface Event {
13
13
  cause: string;
14
14
  level: string;
15
15
  group?: string;
16
+ createdAt?: string;
17
+ updatedAt?: string;
16
18
  }
@@ -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
- export declare class FlowDeploymentService extends DataService<FlowDeployment> {
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
- class FlowDeploymentService extends data_service_1.DataService {
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
  }
@@ -24,5 +24,5 @@ export interface FlowDiagram {
24
24
  author: string;
25
25
  createdAt?: Date | string;
26
26
  updatedAt?: Date | string;
27
- deleteddAt?: Date | string;
27
+ deletedAt?: Date | string;
28
28
  }
@@ -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
- export declare class FlowService extends DataService<FlowDto> {
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 {};
@@ -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
- class FlowService extends data_service_1.DataService {
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.reverse()[0].id === diagramId;
40
+ return revisions[revisions.length - 1].id === diagramId;
32
41
  }
33
42
  getRevisions(id) {
34
43
  return this.httpClient.get(`${this.basePath}/${id}/revisions`);
@@ -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 client;
7
- private readonly secret;
7
+ private readonly clientId;
8
+ private readonly clientSecret;
8
9
  private readonly axiosInstance;
9
- private readonly authAxiosInstance;
10
10
  private readonly requestQueue;
11
- private accessToken;
12
- private accessTokenExpiration;
13
- eventSourcesMap: Map<string, EventSource>;
14
- constructor(baseURL: string, authbaseURL: string, realm: string, client: string, secret: string);
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
  }
@@ -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 EXPIRATION_BUFFER = 30 * 1000;
10
+ const TOKEN_EXPIRATION_BUFFER = 30;
10
11
  class HttpClient {
11
- constructor(baseURL, authbaseURL, realm, client, secret) {
12
+ constructor(baseURL, authbaseURL, realm, clientId, clientSecret) {
12
13
  this.baseURL = baseURL;
14
+ this.authbaseURL = authbaseURL;
13
15
  this.realm = realm;
14
- this.client = client;
15
- this.secret = secret;
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
- if (this.isTokenValid()) {
36
- return Promise.resolve(this.accessToken);
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
- else {
39
- return this.getToken();
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', errorListener
83
- ? errorListener
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,5 @@
1
+ import { APIBase } from '../api-base';
2
+ export declare class APIBaseMock<T> extends APIBase {
3
+ data: T[];
4
+ constructor(data?: T[]);
5
+ }
@@ -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
- export declare class AssetMockService extends DataMockService<Asset> implements AssetService {
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
- class AssetMockService extends data_mock_service_1.DataMockService {
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 { Paginated } from '../data.interface';
5
- export declare class AssetTypesMockService extends DataMockService<AssetType> implements AssetTypesService {
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 {};