@sinequa/atomic-angular 0.0.140
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/assets/tailwind.css +248 -0
- package/esm2022/lib/assistant/index.mjs +2 -0
- package/esm2022/lib/assistant/signalR.web.service.mjs +81 -0
- package/esm2022/lib/components/dropdown.mjs +127 -0
- package/esm2022/lib/components/index.mjs +5 -0
- package/esm2022/lib/components/menu/index.mjs +3 -0
- package/esm2022/lib/components/menu/menu-item.mjs +22 -0
- package/esm2022/lib/components/menu/menu.mjs +99 -0
- package/esm2022/lib/components/metadata/index.mjs +2 -0
- package/esm2022/lib/components/metadata/metadata.component.mjs +65 -0
- package/esm2022/lib/components/theme/index.mjs +3 -0
- package/esm2022/lib/components/theme/theme-selector.component.mjs +67 -0
- package/esm2022/lib/components/theme/theme-toggle.component.mjs +67 -0
- package/esm2022/lib/directives/index.mjs +5 -0
- package/esm2022/lib/directives/infinite-scroll.directive.mjs +47 -0
- package/esm2022/lib/directives/select-article-on-click.directive.mjs +39 -0
- package/esm2022/lib/directives/show-bookmark.directive.mjs +55 -0
- package/esm2022/lib/directives/theme-provider.directive.mjs +31 -0
- package/esm2022/lib/guards/auth.guard.mjs +27 -0
- package/esm2022/lib/guards/index.mjs +3 -0
- package/esm2022/lib/guards/initialization.guard.mjs +41 -0
- package/esm2022/lib/interceptors/audit.interceptor.mjs +23 -0
- package/esm2022/lib/interceptors/auth.interceptor.mjs +49 -0
- package/esm2022/lib/interceptors/body.interceptor.mjs +24 -0
- package/esm2022/lib/interceptors/error.interceptor.mjs +35 -0
- package/esm2022/lib/interceptors/index.mjs +7 -0
- package/esm2022/lib/interceptors/toast.interceptor.mjs +27 -0
- package/esm2022/lib/models/aggregation.mjs +2 -0
- package/esm2022/lib/models/article-metadata.mjs +2 -0
- package/esm2022/lib/models/autocomplete.mjs +2 -0
- package/esm2022/lib/models/custom-json.mjs +2 -0
- package/esm2022/lib/models/filter-dropdown.mjs +2 -0
- package/esm2022/lib/models/index.mjs +7 -0
- package/esm2022/lib/models/user-settings.mjs +2 -0
- package/esm2022/lib/pipes/highlight-word.pipe.mjs +33 -0
- package/esm2022/lib/pipes/index.mjs +3 -0
- package/esm2022/lib/pipes/source-icon.pipe.mjs +43 -0
- package/esm2022/lib/providers/eager-provider.mjs +24 -0
- package/esm2022/lib/providers/index.mjs +2 -0
- package/esm2022/lib/public-api.mjs +19 -0
- package/esm2022/lib/resolvers/index.mjs +2 -0
- package/esm2022/lib/resolvers/query-name-resolver.mjs +14 -0
- package/esm2022/lib/resources/index.mjs +2 -0
- package/esm2022/lib/resources/themes.mjs +53 -0
- package/esm2022/lib/services/application.service.mjs +245 -0
- package/esm2022/lib/services/autocomplete.service.mjs +85 -0
- package/esm2022/lib/services/drawer/backdrop.service.mjs +23 -0
- package/esm2022/lib/services/drawer/drawer-stack.service.mjs +152 -0
- package/esm2022/lib/services/drawer/drawer.service.mjs +38 -0
- package/esm2022/lib/services/index.mjs +12 -0
- package/esm2022/lib/services/label.service.mjs +161 -0
- package/esm2022/lib/services/navigation.service.mjs +59 -0
- package/esm2022/lib/services/saved-searches.service.mjs +75 -0
- package/esm2022/lib/services/search.service.mjs +89 -0
- package/esm2022/lib/services/selection-history.service.mjs +92 -0
- package/esm2022/lib/services/selection.service.mjs +87 -0
- package/esm2022/lib/stores/aggregations.store.mjs +62 -0
- package/esm2022/lib/stores/app.store.mjs +265 -0
- package/esm2022/lib/stores/application.store.mjs +93 -0
- package/esm2022/lib/stores/index.mjs +9 -0
- package/esm2022/lib/stores/principal.store.mjs +47 -0
- package/esm2022/lib/stores/query-params.store.mjs +208 -0
- package/esm2022/lib/stores/selection.store.mjs +46 -0
- package/esm2022/lib/stores/theme.store.mjs +116 -0
- package/esm2022/lib/stores/user-settings.store.mjs +272 -0
- package/esm2022/lib/tokens/highlights.mjs +32 -0
- package/esm2022/lib/tokens/index.mjs +2 -0
- package/esm2022/lib/utils/debounced-signal.mjs +38 -0
- package/esm2022/lib/utils/index.mjs +8 -0
- package/esm2022/lib/utils/inline-worker.mjs +40 -0
- package/esm2022/lib/utils/query.mjs +58 -0
- package/esm2022/lib/utils/routes.mjs +28 -0
- package/esm2022/lib/utils/tailwind-utils.mjs +6 -0
- package/esm2022/lib/utils/theme-body-hook.mjs +18 -0
- package/esm2022/lib/utils/theme-registry.mjs +6 -0
- package/esm2022/lib/web-services/aggregations.service.mjs +104 -0
- package/esm2022/lib/web-services/app.service.mjs +48 -0
- package/esm2022/lib/web-services/audit.service.mjs +122 -0
- package/esm2022/lib/web-services/index.mjs +10 -0
- package/esm2022/lib/web-services/json-method-plugin.service.mjs +54 -0
- package/esm2022/lib/web-services/preview.service.mjs +327 -0
- package/esm2022/lib/web-services/principal.service.mjs +46 -0
- package/esm2022/lib/web-services/query.service.mjs +123 -0
- package/esm2022/lib/web-services/text-chunck.service.mjs +46 -0
- package/esm2022/public-api.mjs +5 -0
- package/esm2022/sinequa-atomic-angular.mjs +5 -0
- package/fesm2022/sinequa-atomic-angular.mjs +4204 -0
- package/fesm2022/sinequa-atomic-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/assistant/index.d.ts +1 -0
- package/lib/assistant/signalR.web.service.d.ts +46 -0
- package/lib/components/dropdown.d.ts +50 -0
- package/lib/components/index.d.ts +4 -0
- package/lib/components/menu/index.d.ts +2 -0
- package/lib/components/menu/menu-item.d.ts +8 -0
- package/lib/components/menu/menu.d.ts +24 -0
- package/lib/components/metadata/index.d.ts +1 -0
- package/lib/components/metadata/metadata.component.d.ts +24 -0
- package/lib/components/theme/index.d.ts +2 -0
- package/lib/components/theme/theme-selector.component.d.ts +70 -0
- package/lib/components/theme/theme-toggle.component.d.ts +10 -0
- package/lib/directives/index.d.ts +4 -0
- package/lib/directives/infinite-scroll.directive.d.ts +30 -0
- package/lib/directives/select-article-on-click.directive.d.ts +14 -0
- package/lib/directives/show-bookmark.directive.d.ts +52 -0
- package/lib/directives/theme-provider.directive.d.ts +20 -0
- package/lib/guards/auth.guard.d.ts +7 -0
- package/lib/guards/index.d.ts +2 -0
- package/lib/guards/initialization.guard.d.ts +20 -0
- package/lib/interceptors/audit.interceptor.d.ts +13 -0
- package/lib/interceptors/auth.interceptor.d.ts +14 -0
- package/lib/interceptors/body.interceptor.d.ts +11 -0
- package/lib/interceptors/error.interceptor.d.ts +9 -0
- package/lib/interceptors/index.d.ts +5 -0
- package/lib/interceptors/toast.interceptor.d.ts +13 -0
- package/lib/models/aggregation.d.ts +12 -0
- package/lib/models/article-metadata.d.ts +5 -0
- package/lib/models/autocomplete.d.ts +5 -0
- package/lib/models/custom-json.d.ts +58 -0
- package/lib/models/filter-dropdown.d.ts +10 -0
- package/lib/models/index.d.ts +6 -0
- package/lib/models/user-settings.d.ts +32 -0
- package/lib/pipes/highlight-word.pipe.d.ts +22 -0
- package/lib/pipes/index.d.ts +2 -0
- package/lib/pipes/source-icon.pipe.d.ts +54 -0
- package/lib/providers/eager-provider.d.ts +11 -0
- package/lib/providers/index.d.ts +1 -0
- package/lib/public-api.d.ts +15 -0
- package/lib/resolvers/index.d.ts +1 -0
- package/lib/resolvers/query-name-resolver.d.ts +9 -0
- package/lib/resources/index.d.ts +1 -0
- package/lib/resources/themes.d.ts +51 -0
- package/lib/services/application.service.d.ts +178 -0
- package/lib/services/autocomplete.service.d.ts +91 -0
- package/lib/services/drawer/backdrop.service.d.ts +9 -0
- package/lib/services/drawer/drawer-stack.service.d.ts +70 -0
- package/lib/services/drawer/drawer.service.d.ts +15 -0
- package/lib/services/index.d.ts +11 -0
- package/lib/services/label.service.d.ts +117 -0
- package/lib/services/navigation.service.d.ts +33 -0
- package/lib/services/saved-searches.service.d.ts +145 -0
- package/lib/services/search.service.d.ts +155 -0
- package/lib/services/selection-history.service.d.ts +50 -0
- package/lib/services/selection.service.d.ts +127 -0
- package/lib/stores/aggregations.store.d.ts +50 -0
- package/lib/stores/app.store.d.ts +208 -0
- package/lib/stores/application.store.d.ts +106 -0
- package/lib/stores/index.d.ts +8 -0
- package/lib/stores/principal.store.d.ts +53 -0
- package/lib/stores/query-params.store.d.ts +187 -0
- package/lib/stores/selection.store.d.ts +62 -0
- package/lib/stores/theme.store.d.ts +55 -0
- package/lib/stores/user-settings.store.d.ts +161 -0
- package/lib/tokens/highlights.d.ts +8 -0
- package/lib/tokens/index.d.ts +1 -0
- package/lib/utils/debounced-signal.d.ts +25 -0
- package/lib/utils/index.d.ts +7 -0
- package/lib/utils/inline-worker.d.ts +11 -0
- package/lib/utils/query.d.ts +26 -0
- package/lib/utils/routes.d.ts +16 -0
- package/lib/utils/tailwind-utils.d.ts +2 -0
- package/lib/utils/theme-body-hook.d.ts +6 -0
- package/lib/utils/theme-registry.d.ts +3 -0
- package/lib/web-services/aggregations.service.d.ts +60 -0
- package/lib/web-services/app.service.d.ts +30 -0
- package/lib/web-services/audit.service.d.ts +75 -0
- package/lib/web-services/index.d.ts +9 -0
- package/lib/web-services/json-method-plugin.service.d.ts +41 -0
- package/lib/web-services/preview.service.d.ts +295 -0
- package/lib/web-services/principal.service.d.ts +28 -0
- package/lib/web-services/query.service.d.ts +29 -0
- package/lib/web-services/text-chunck.service.d.ts +22 -0
- package/package.json +28 -0
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Injectable, inject } from '@angular/core';
|
|
3
|
+
import { catchError, map, tap, throwError } from 'rxjs';
|
|
4
|
+
import { escapeExpr, globalConfig } from '@sinequa/atomic';
|
|
5
|
+
import { AggregationsStore, AppStore } from '../stores';
|
|
6
|
+
import { QueryService } from './query.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class AggregationsService {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.http = inject(HttpClient);
|
|
11
|
+
this.queryService = inject(QueryService);
|
|
12
|
+
this.appStore = inject(AppStore);
|
|
13
|
+
this.aggregationsStore = inject(AggregationsStore);
|
|
14
|
+
this.API_URL = `${globalConfig.backendUrl}/${globalConfig.apiPath}`;
|
|
15
|
+
}
|
|
16
|
+
loadMore(query, aggregation, audit) {
|
|
17
|
+
const { app } = globalConfig;
|
|
18
|
+
// skip cached items for computation
|
|
19
|
+
const skip = aggregation.items?.filter(i => !(i.$cached))?.length || 0;
|
|
20
|
+
const count = 10;
|
|
21
|
+
const aggregations = { [aggregation.name]: { skip, count } };
|
|
22
|
+
const q = { ...query, action: "aggregate", aggregations };
|
|
23
|
+
// add audit record if available
|
|
24
|
+
const $auditRecord = audit ? { auditEvents: [audit] } : undefined;
|
|
25
|
+
const body = {
|
|
26
|
+
app,
|
|
27
|
+
query: q,
|
|
28
|
+
$auditRecord
|
|
29
|
+
};
|
|
30
|
+
return this.http.post(this.API_URL + "/query", body).pipe(map(result => {
|
|
31
|
+
const { aggregations } = result;
|
|
32
|
+
const agg = aggregations[0];
|
|
33
|
+
if (agg.items) {
|
|
34
|
+
agg.$hasMore = agg.items.length > count;
|
|
35
|
+
agg.items = [...aggregation.items, ...agg.items];
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
aggregation.$hasMore = false;
|
|
39
|
+
return aggregation;
|
|
40
|
+
}
|
|
41
|
+
return agg;
|
|
42
|
+
}), catchError(error => {
|
|
43
|
+
console.log("aggregation.loadMore failure - error: ", error);
|
|
44
|
+
return throwError(() => new Error(error));
|
|
45
|
+
}), tap(response => console.log("aggregation.loadMore success - data: ", response)));
|
|
46
|
+
}
|
|
47
|
+
open(query, aggregation, item) {
|
|
48
|
+
const value = `/${item.$path}/*`;
|
|
49
|
+
const expression = `${aggregation.column}: ${escapeExpr(value)}`;
|
|
50
|
+
const q = {
|
|
51
|
+
...query,
|
|
52
|
+
action: "open",
|
|
53
|
+
open: [{ expression, aggregation: aggregation.name }]
|
|
54
|
+
};
|
|
55
|
+
return this.queryService.search(q).pipe(map(results => {
|
|
56
|
+
// find the node in the tree and replace it with the new one
|
|
57
|
+
const items = results.aggregations[0].items;
|
|
58
|
+
const newNode = this.findNode(items, item.$path);
|
|
59
|
+
if (!newNode) {
|
|
60
|
+
return aggregation;
|
|
61
|
+
}
|
|
62
|
+
// mark the node as opened
|
|
63
|
+
newNode.$opened = true;
|
|
64
|
+
return this.replaceInTree(aggregation, item.$path, newNode);
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
findNode(items, path = "") {
|
|
68
|
+
if (!items || items.length === 0) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
for (const item of items) {
|
|
72
|
+
if (item.$path === path) {
|
|
73
|
+
return item;
|
|
74
|
+
}
|
|
75
|
+
if (item.items) {
|
|
76
|
+
const found = this.findNode(item.items, path);
|
|
77
|
+
if (found) {
|
|
78
|
+
return found;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
replaceInTree(tree, valueToFind = "", newValue) {
|
|
85
|
+
if (tree.$path === valueToFind) {
|
|
86
|
+
return newValue;
|
|
87
|
+
}
|
|
88
|
+
if (tree.hasChildren && tree.items) {
|
|
89
|
+
for (let i = 0; i < tree.items.length; i++) {
|
|
90
|
+
tree.items[i] = this.replaceInTree(tree.items[i], valueToFind, newValue);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return tree;
|
|
94
|
+
}
|
|
95
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AggregationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
96
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AggregationsService, providedIn: 'root' }); }
|
|
97
|
+
}
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AggregationsService, decorators: [{
|
|
99
|
+
type: Injectable,
|
|
100
|
+
args: [{
|
|
101
|
+
providedIn: 'root'
|
|
102
|
+
}]
|
|
103
|
+
}] });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3dlYi1zZXJ2aWNlcy9hZ2dyZWdhdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRSxPQUFPLEVBQWlGLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUxSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLL0MsTUFBTSxPQUFPLG1CQUFtQjtJQUhoQztRQUlxQixTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZELGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFcEMsWUFBTyxHQUFHLEdBQUcsWUFBWSxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7S0F1RzFFO0lBckdDLFFBQVEsQ0FBQyxLQUFxQixFQUFFLFdBQXdCLEVBQUUsS0FBbUI7UUFDM0UsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQztRQUU3QixvQ0FBb0M7UUFDcEMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLEtB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Q0FBQztZQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNFLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzhHQTdHVSxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIG1hcCwgdGFwLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBBZ2dyZWdhdGlvbiwgQXVkaXRFdmVudHMsIFF1ZXJ5LCBSZXN1bHQsIFRyZWVBZ2dyZWdhdGlvbiwgVHJlZUFnZ3JlZ2F0aW9uTm9kZSwgZXNjYXBlRXhwciwgZ2xvYmFsQ29uZmlnIH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcclxuXHJcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uc1N0b3JlLCBBcHBTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcyc7XHJcbmltcG9ydCB7IFF1ZXJ5U2VydmljZSB9IGZyb20gJy4vcXVlcnkuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGlvbnNTZXJ2aWNlIHtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcXVlcnlTZXJ2aWNlID0gaW5qZWN0KFF1ZXJ5U2VydmljZSk7XHJcblxyXG4gIGFwcFN0b3JlID0gaW5qZWN0KEFwcFN0b3JlKTtcclxuICBhZ2dyZWdhdGlvbnNTdG9yZSA9IGluamVjdChBZ2dyZWdhdGlvbnNTdG9yZSk7XHJcblxyXG4gIHByb3RlY3RlZCBBUElfVVJMID0gYCR7Z2xvYmFsQ29uZmlnLmJhY2tlbmRVcmx9LyR7Z2xvYmFsQ29uZmlnLmFwaVBhdGh9YDtcclxuXHJcbiAgbG9hZE1vcmUocXVlcnk6IFBhcnRpYWw8UXVlcnk+LCBhZ2dyZWdhdGlvbjogQWdncmVnYXRpb24sIGF1ZGl0PzogQXVkaXRFdmVudHMpOiBPYnNlcnZhYmxlPEFnZ3JlZ2F0aW9uPiB7XHJcbiAgICBjb25zdCB7IGFwcCB9ID0gZ2xvYmFsQ29uZmlnO1xyXG5cclxuICAgIC8vIHNraXAgY2FjaGVkIGl0ZW1zIGZvciBjb21wdXRhdGlvblxyXG4gICAgY29uc3Qgc2tpcCA9IGFnZ3JlZ2F0aW9uLml0ZW1zPy5maWx0ZXIoaSA9PiAhKGkuJGNhY2hlZCkpPy5sZW5ndGggfHwgMDtcclxuICAgIGNvbnN0IGNvdW50ID0gMTA7XHJcblxyXG4gICAgY29uc3QgYWdncmVnYXRpb25zID0geyBbYWdncmVnYXRpb24ubmFtZV06IHsgc2tpcCwgY291bnQgfSB9O1xyXG5cclxuICAgIGNvbnN0IHE6IFBhcnRpYWw8UXVlcnk+ID0geyAuLi5xdWVyeSwgYWN0aW9uOiBcImFnZ3JlZ2F0ZVwiLCBhZ2dyZWdhdGlvbnMgfVxyXG5cclxuICAgIC8vIGFkZCBhdWRpdCByZWNvcmQgaWYgYXZhaWxhYmxlXHJcbiAgICBjb25zdCAkYXVkaXRSZWNvcmQgPSBhdWRpdCA/IHsgYXVkaXRFdmVudHM6IFthdWRpdF0gfSA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICBjb25zdCBib2R5ID0ge1xyXG4gICAgICBhcHAsXHJcbiAgICAgIHF1ZXJ5OiBxLFxyXG4gICAgICAkYXVkaXRSZWNvcmRcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQVBJX1VSTCArIFwiL3F1ZXJ5XCIsIGJvZHkpLnBpcGUoXHJcbiAgICAgIG1hcChyZXN1bHQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgYWdncmVnYXRpb25zIH0gPSByZXN1bHQgYXMgUmVzdWx0O1xyXG4gICAgICAgIGNvbnN0IGFnZyA9IGFnZ3JlZ2F0aW9uc1swXTtcclxuXHJcbiAgICAgICAgaWYgKGFnZy5pdGVtcykge1xyXG4gICAgICAgICAgYWdnLiRoYXNNb3JlID0gYWdnLml0ZW1zLmxlbmd0aCA+IGNvdW50O1xyXG4gICAgICAgICAgYWdnLml0ZW1zID0gWy4uLmFnZ3JlZ2F0aW9uLml0ZW1zLCAuLi5hZ2cuaXRlbXNdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhZ2dyZWdhdGlvbi4kaGFzTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIGFnZ3JlZ2F0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFnZztcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiYWdncmVnYXRpb24ubG9hZE1vcmUgZmFpbHVyZSAtIGVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihlcnJvcikpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKHJlc3BvbnNlID0+IGNvbnNvbGUubG9nKFwiYWdncmVnYXRpb24ubG9hZE1vcmUgc3VjY2VzcyAtIGRhdGE6IFwiLCByZXNwb25zZSkpLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9wZW4ocXVlcnk6IFBhcnRpYWw8UXVlcnk+LCBhZ2dyZWdhdGlvbjogVHJlZUFnZ3JlZ2F0aW9uLCBpdGVtOiBUcmVlQWdncmVnYXRpb25Ob2RlKTogT2JzZXJ2YWJsZTxUcmVlQWdncmVnYXRpb24+IHtcclxuICAgIGNvbnN0IHZhbHVlID0gYC8ke2l0ZW0uJHBhdGh9LypgO1xyXG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IGAke2FnZ3JlZ2F0aW9uLmNvbHVtbn06ICR7ZXNjYXBlRXhwcih2YWx1ZSl9YDtcclxuXHJcbiAgICBjb25zdCBxOiBQYXJ0aWFsPFF1ZXJ5PiA9IHtcclxuICAgICAgLi4ucXVlcnksXHJcbiAgICAgIGFjdGlvbjogXCJvcGVuXCIsXHJcbiAgICAgIG9wZW46IFt7IGV4cHJlc3Npb24sIGFnZ3JlZ2F0aW9uOiBhZ2dyZWdhdGlvbi5uYW1lIH1dXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VydmljZS5zZWFyY2gocSkucGlwZShcclxuICAgICAgbWFwKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgIC8vIGZpbmQgdGhlIG5vZGUgaW4gdGhlIHRyZWUgYW5kIHJlcGxhY2UgaXQgd2l0aCB0aGUgbmV3IG9uZVxyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gcmVzdWx0cy5hZ2dyZWdhdGlvbnNbMF0uaXRlbXMgYXMgVHJlZUFnZ3JlZ2F0aW9uTm9kZVtdO1xyXG4gICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLmZpbmROb2RlKGl0ZW1zLCBpdGVtLiRwYXRoKTtcclxuXHJcbiAgICAgICAgaWYgKCFuZXdOb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4gYWdncmVnYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1hcmsgdGhlIG5vZGUgYXMgb3BlbmVkXHJcbiAgICAgICAgbmV3Tm9kZS4kb3BlbmVkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXBsYWNlSW5UcmVlKGFnZ3JlZ2F0aW9uLCBpdGVtLiRwYXRoLCBuZXdOb2RlKSBhcyBUcmVlQWdncmVnYXRpb247XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG4gIHByaXZhdGUgZmluZE5vZGUoaXRlbXM6IFRyZWVBZ2dyZWdhdGlvbk5vZGVbXSwgcGF0aDogc3RyaW5nID0gXCJcIik6IFRyZWVBZ2dyZWdhdGlvbk5vZGUgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaWYgKGl0ZW0uJHBhdGggPT09IHBhdGgpIHtcclxuICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgfVxyXG4gICAgICBpZihpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmROb2RlKGl0ZW0uaXRlbXMsIHBhdGgpO1xyXG4gICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZvdW5kO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcGxhY2VJblRyZWUodHJlZTogYW55LCB2YWx1ZVRvRmluZDogc3RyaW5nID0gXCJcIiwgbmV3VmFsdWU6IFRyZWVBZ2dyZWdhdGlvbk5vZGUpIHtcclxuICAgIGlmICh0cmVlLiRwYXRoID09PSB2YWx1ZVRvRmluZCkge1xyXG4gICAgICByZXR1cm4gbmV3VmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRyZWUuaGFzQ2hpbGRyZW4gJiYgdHJlZS5pdGVtcykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRyZWUuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0cmVlLml0ZW1zW2ldID0gdGhpcy5yZXBsYWNlSW5UcmVlKHRyZWUuaXRlbXNbaV0sIHZhbHVlVG9GaW5kLCBuZXdWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJlZTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import { catchError, EMPTY } from 'rxjs';
|
|
4
|
+
import { globalConfig } from '@sinequa/atomic';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class AppService {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.http = inject(HttpClient);
|
|
9
|
+
this.API_URL = `${globalConfig.backendUrl}/${globalConfig.apiPath}`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Retrieves the application configuration from the server.
|
|
13
|
+
*
|
|
14
|
+
* @param appName - The name of the application to fetch the configuration for.
|
|
15
|
+
*
|
|
16
|
+
* @returns {Observable<CCApp>} An observable that emits the application configuration.
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* This method constructs an HTTP GET request to fetch the application configuration
|
|
20
|
+
* using the `app` parameter from the global configuration. If the request fails,
|
|
21
|
+
* it logs the error to the console and returns an empty observable.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* appService.getApp().subscribe(appConfig => {
|
|
26
|
+
* console.log(appConfig);
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
getApp(appName) {
|
|
31
|
+
const app = appName || globalConfig.app;
|
|
32
|
+
const params = new HttpParams().set('app', app || '');
|
|
33
|
+
return this.http.get(this.API_URL + "/app", { params })
|
|
34
|
+
.pipe(catchError(error => {
|
|
35
|
+
console.error("AppService.getApp failure - error: ", error);
|
|
36
|
+
return EMPTY;
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AppService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
40
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AppService, providedIn: 'root' }); }
|
|
41
|
+
}
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AppService, decorators: [{
|
|
43
|
+
type: Injectable,
|
|
44
|
+
args: [{
|
|
45
|
+
providedIn: 'root'
|
|
46
|
+
}]
|
|
47
|
+
}] });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3dlYi1zZXJ2aWNlcy9hcHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLdEQsTUFBTSxPQUFPLFVBQVU7SUFIdkI7UUFJcUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxQixZQUFPLEdBQUcsR0FBRyxZQUFZLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQWtDbkY7SUFoQ0M7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNILE1BQU0sQ0FBQyxPQUFnQjtRQUNyQixNQUFNLEdBQUcsR0FBRyxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUV4QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXRELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUMzRCxJQUFJLENBQ0gsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzs4R0FwQ1UsVUFBVTtrSEFBVixVQUFVLGNBRlQsTUFBTTs7MkZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgRU1QVFksIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IENDQXBwLCBnbG9iYWxDb25maWcgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBwU2VydmljZSB7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBBUElfVVJMID0gYCR7Z2xvYmFsQ29uZmlnLmJhY2tlbmRVcmx9LyR7Z2xvYmFsQ29uZmlnLmFwaVBhdGh9YDtcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGZyb20gdGhlIHNlcnZlci5cclxuICAgKiBcclxuICAgKiBAcGFyYW0gYXBwTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBmZXRjaCB0aGUgY29uZmlndXJhdGlvbiBmb3IuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxDQ0FwcD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZW1hcmtzXHJcbiAgICogVGhpcyBtZXRob2QgY29uc3RydWN0cyBhbiBIVFRQIEdFVCByZXF1ZXN0IHRvIGZldGNoIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uXHJcbiAgICogdXNpbmcgdGhlIGBhcHBgIHBhcmFtZXRlciBmcm9tIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbi4gSWYgdGhlIHJlcXVlc3QgZmFpbHMsXHJcbiAgICogaXQgbG9ncyB0aGUgZXJyb3IgdG8gdGhlIGNvbnNvbGUgYW5kIHJldHVybnMgYW4gZW1wdHkgb2JzZXJ2YWJsZS5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAqIGFwcFNlcnZpY2UuZ2V0QXBwKCkuc3Vic2NyaWJlKGFwcENvbmZpZyA9PiB7XHJcbiAgICogICBjb25zb2xlLmxvZyhhcHBDb25maWcpO1xyXG4gICAqIH0pO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIGdldEFwcChhcHBOYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxDQ0FwcD4ge1xyXG4gICAgY29uc3QgYXBwID0gYXBwTmFtZSB8fCBnbG9iYWxDb25maWcuYXBwO1xyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdhcHAnLCBhcHAgfHwgJycpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENDQXBwPih0aGlzLkFQSV9VUkwgKyBcIi9hcHBcIiwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQXBwU2VydmljZS5nZXRBcHAgZmFpbHVyZSAtIGVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { HttpClient } from "@angular/common/http";
|
|
2
|
+
import { Injectable, computed, inject } from "@angular/core";
|
|
3
|
+
import { Router } from "@angular/router";
|
|
4
|
+
import { getState } from "@ngrx/signals";
|
|
5
|
+
import { globalConfig } from "@sinequa/atomic";
|
|
6
|
+
import { AppStore } from '../stores/app.store';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class AuditService {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.appStore = inject(AppStore);
|
|
11
|
+
this.app = computed(() => getState(this.appStore));
|
|
12
|
+
this.http = inject(HttpClient);
|
|
13
|
+
this.router = inject(Router);
|
|
14
|
+
this.API_URL = `${globalConfig.backendUrl}/${globalConfig.apiPath}`;
|
|
15
|
+
this.lastClickTime = 0;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Notify the Sinequa server of a set of audit events
|
|
19
|
+
*
|
|
20
|
+
* @param auditEvents The audit events
|
|
21
|
+
*/
|
|
22
|
+
notify(auditEvents) {
|
|
23
|
+
this.http.post(this.API_URL + "/audit.notify", {
|
|
24
|
+
event: "None", // AuditEventType.None,
|
|
25
|
+
app: this.app().name,
|
|
26
|
+
$auditRecord: { auditEvents: [auditEvents] }
|
|
27
|
+
}).subscribe();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* It sends an audit event to the Audit Service.
|
|
31
|
+
*/
|
|
32
|
+
notifyLogin() {
|
|
33
|
+
this.notify({
|
|
34
|
+
type: "Login_Success_Form" // AuditEventType.Search_Login_Success
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Notify logout
|
|
39
|
+
*/
|
|
40
|
+
notifyLogout() {
|
|
41
|
+
this.notify({
|
|
42
|
+
type: "Search_Exit_Logout" // AuditEventType.Search_Exit_Logout
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Notify the Sinequa server of a document event
|
|
47
|
+
*
|
|
48
|
+
* @param evt The audit event type
|
|
49
|
+
* @param doc The document (article) in question
|
|
50
|
+
* @param resultId The resultid that contain the document
|
|
51
|
+
* @param parameters Additional parameters
|
|
52
|
+
*/
|
|
53
|
+
notifyDocument(auditEventType, doc, resultsOrId, parameters, rfmParameters) {
|
|
54
|
+
let resultId;
|
|
55
|
+
let result;
|
|
56
|
+
if (typeof resultsOrId == "string") {
|
|
57
|
+
resultId = resultsOrId;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
result = resultsOrId;
|
|
61
|
+
resultId = result ? result.id : null;
|
|
62
|
+
}
|
|
63
|
+
const detail = {
|
|
64
|
+
docid: doc.id,
|
|
65
|
+
rank: doc.rank,
|
|
66
|
+
title: doc.title,
|
|
67
|
+
source: doc.collection[0].split("/")[0],
|
|
68
|
+
collection: doc.collection[0],
|
|
69
|
+
resultId,
|
|
70
|
+
filename: doc.filename,
|
|
71
|
+
fileext: doc.fileext,
|
|
72
|
+
index: doc.databasealias,
|
|
73
|
+
resultcount: result?.totalRowCount
|
|
74
|
+
};
|
|
75
|
+
if (parameters) {
|
|
76
|
+
Object.keys(parameters).forEach(key => detail[key] = parameters[key]);
|
|
77
|
+
}
|
|
78
|
+
const data = {
|
|
79
|
+
type: auditEventType,
|
|
80
|
+
detail
|
|
81
|
+
};
|
|
82
|
+
if (rfmParameters) {
|
|
83
|
+
const rfmDetail = {}; // Add index signature
|
|
84
|
+
Object.keys(rfmParameters).forEach(key => rfmDetail[key] = rfmParameters[key]);
|
|
85
|
+
data.rfmDetail = rfmDetail;
|
|
86
|
+
}
|
|
87
|
+
this.lastClickTime = Date.now();
|
|
88
|
+
// Listen to the navigation event outside the app
|
|
89
|
+
document.addEventListener('visibilitychange', () => {
|
|
90
|
+
// Capture the navigation even triggered just after the click
|
|
91
|
+
if (document.visibilityState === 'hidden' && (Date.now() - this.lastClickTime) < 1000) {
|
|
92
|
+
// Second event triggered when we come back
|
|
93
|
+
document.addEventListener('visibilitychange', () => {
|
|
94
|
+
if (document.visibilityState === 'visible') {
|
|
95
|
+
this.notify({ type: "Navigation_Return" /* AuditEventType.Navigation_Return */ });
|
|
96
|
+
}
|
|
97
|
+
}, { once: true });
|
|
98
|
+
}
|
|
99
|
+
}, { once: true });
|
|
100
|
+
this.notify(data);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Notify route change
|
|
104
|
+
*/
|
|
105
|
+
notifyRouteChange(url) {
|
|
106
|
+
this.notify({
|
|
107
|
+
type: "Navigation_Route", // AuditEventType.Navigation_Route,
|
|
108
|
+
detail: {
|
|
109
|
+
detail: url
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AuditService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
114
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AuditService, providedIn: 'root' }); }
|
|
115
|
+
}
|
|
116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: AuditService, decorators: [{
|
|
117
|
+
type: Injectable,
|
|
118
|
+
args: [{
|
|
119
|
+
providedIn: 'root'
|
|
120
|
+
}]
|
|
121
|
+
}] });
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0b21pYy1hbmd1bGFyL3NyYy9saWIvd2ViLXNlcnZpY2VzL2F1ZGl0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWlGLFlBQVksRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RJLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFLL0MsTUFBTSxPQUFPLFlBQVk7SUFIekI7UUFJRSxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLFFBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQVUsQ0FBQyxDQUFDO1FBRXBDLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixZQUFPLEdBQUcsR0FBRyxZQUFZLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV4RSxrQkFBYSxHQUFHLENBQUMsQ0FBQztLQWtIN0I7SUFoSEM7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxXQUF3QjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLGVBQWUsRUFBRTtZQUNuRCxLQUFLLEVBQUUsTUFBTSxFQUFF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USxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtvQkFDakQsSUFBSSxRQUFRLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSw0REFBa0MsRUFBRSxDQUFDLENBQUM7b0JBQzFELENBQUM7Z0JBQ0gsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRW5CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsR0FBVztRQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ1YsSUFBSSxFQUFFLGtCQUFrQixFQUFFLG1DQUFtQztZQUM3RCxNQUFNLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLEdBQUc7YUFDWjtTQUNGLENBQUMsQ0FBQztJQUVMLENBQUM7OEdBekhVLFlBQVk7a0hBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBnZXRTdGF0ZSB9IGZyb20gXCJAbmdyeC9zaWduYWxzXCI7XHJcbmltcG9ydCB7IEFydGljbGUsIEF1ZGl0RXZlbnQsIEF1ZGl0RXZlbnRzLCBBdWRpdEV2ZW50VHlwZSwgQXVkaXRFdmVudFR5cGVWYWx1ZXMsIENDQXBwLCBnbG9iYWxDb25maWcsIFJlc3VsdCB9IGZyb20gXCJAc2luZXF1YS9hdG9taWNcIjtcclxuaW1wb3J0IHsgQXBwU3RvcmUgfSBmcm9tICcuLi9zdG9yZXMvYXBwLnN0b3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0U2VydmljZSB7XHJcbiAgYXBwU3RvcmUgPSBpbmplY3QoQXBwU3RvcmUpO1xyXG4gIGFwcCA9IGNvbXB1dGVkKCgpID0+IGdldFN0YXRlKHRoaXMuYXBwU3RvcmUpIGFzIENDQXBwKTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBBUElfVVJMID0gYCR7Z2xvYmFsQ29uZmlnLmJhY2tlbmRVcmx9LyR7Z2xvYmFsQ29uZmlnLmFwaVBhdGh9YDtcclxuXHJcbiAgcHJvdGVjdGVkIGxhc3RDbGlja1RpbWUgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBOb3RpZnkgdGhlIFNpbmVxdWEgc2VydmVyIG9mIGEgc2V0IG9mIGF1ZGl0IGV2ZW50c1xyXG4gICAqXHJcbiAgICogQHBhcmFtIGF1ZGl0RXZlbnRzIFRoZSBhdWRpdCBldmVudHNcclxuICAgKi9cclxuICBub3RpZnkoYXVkaXRFdmVudHM6IEF1ZGl0RXZlbnRzKSB7XHJcbiAgICB0aGlzLmh0dHAucG9zdDx2b2lkPih0aGlzLkFQSV9VUkwgKyBcIi9hdWRpdC5ub3RpZnlcIiwge1xyXG4gICAgICBldmVudDogXCJOb25lXCIsIC8vIEF1ZGl0RXZlbnRUeXBlLk5vbmUsXHJcbiAgICAgIGFwcDogdGhpcy5hcHAoKS5uYW1lLFxyXG4gICAgICAkYXVkaXRSZWNvcmQ6IHthdWRpdEV2ZW50czogW2F1ZGl0RXZlbnRzXX1cclxuICAgIH0pLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgc2VuZHMgYW4gYXVkaXQgZXZlbnQgdG8gdGhlIEF1ZGl0IFNlcnZpY2UuXHJcbiAgICovXHJcbiAgbm90aWZ5TG9naW4oKSB7XHJcbiAgICB0aGlzLm5vdGlmeSh7XHJcbiAgICAgIHR5cGU6IFwiTG9naW5fU3VjY2Vzc19Gb3JtXCIgLy8gQXVkaXRFdmVudFR5cGUuU2VhcmNoX0xvZ2luX1N1Y2Nlc3NcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOb3RpZnkgbG9nb3V0XHJcbiAgICovXHJcbiAgbm90aWZ5TG9nb3V0KCkge1xyXG4gICAgdGhpcy5ub3RpZnkoe1xyXG4gICAgICB0eXBlOiBcIlNlYXJjaF9FeGl0X0xvZ291dFwiIC8vIEF1ZGl0RXZlbnRUeXBlLlNlYXJjaF9FeGl0X0xvZ291dFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICAqIE5vdGlmeSB0aGUgU2luZXF1YSBzZXJ2ZXIgb2YgYSBkb2N1bWVudCBldmVudFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBldnQgVGhlIGF1ZGl0IGV2ZW50IHR5cGVcclxuICAgICAqIEBwYXJhbSBkb2MgVGhlIGRvY3VtZW50IChhcnRpY2xlKSBpbiBxdWVzdGlvblxyXG4gICAgICogQHBhcmFtIHJlc3VsdElkIFRoZSByZXN1bHRpZCB0aGF0IGNvbnRhaW4gdGhlIGRvY3VtZW50XHJcbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBZGRpdGlvbmFsIHBhcmFtZXRlcnNcclxuICAgICAqL1xyXG4gIG5vdGlmeURvY3VtZW50KFxyXG4gICAgYXVkaXRFdmVudFR5cGU6IEF1ZGl0RXZlbnRUeXBlIHwgQXVkaXRFdmVudFR5cGVWYWx1ZXMgfCB7fSAmIFJlY29yZDxuZXZlciwgbmV2ZXI+LFxyXG4gICAgZG9jOiBBcnRpY2xlLFxyXG4gICAgcmVzdWx0c09ySWQ6IFJlc3VsdCB8IHN0cmluZyxcclxuICAgIHBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPixcclxuICAgIHJmbVBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPikge1xyXG4gICAgbGV0IHJlc3VsdElkOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgbGV0IHJlc3VsdDogUmVzdWx0IHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHR5cGVvZiByZXN1bHRzT3JJZCA9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHJlc3VsdElkID0gcmVzdWx0c09ySWQ7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0c09ySWQ7XHJcbiAgICAgIHJlc3VsdElkID0gcmVzdWx0ID8gcmVzdWx0LmlkIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZXRhaWw6IGFueSA9IHtcclxuICAgICAgZG9jaWQ6IGRvYy5pZCxcclxuICAgICAgcmFuazogZG9jLnJhbmssXHJcbiAgICAgIHRpdGxlOiBkb2MudGl0bGUsXHJcbiAgICAgIHNvdXJjZTogZG9jLmNvbGxlY3Rpb25bMF0uc3BsaXQoXCIvXCIpWzBdLFxyXG4gICAgICBjb2xsZWN0aW9uOiBkb2MuY29sbGVjdGlvblswXSxcclxuICAgICAgcmVzdWx0SWQsXHJcbiAgICAgIGZpbGVuYW1lOiBkb2MuZmlsZW5hbWUsXHJcbiAgICAgIGZpbGVleHQ6IGRvYy5maWxlZXh0LFxyXG4gICAgICBpbmRleDogZG9jLmRhdGFiYXNlYWxpYXMsXHJcbiAgICAgIHJlc3VsdGNvdW50OiByZXN1bHQ/LnRvdGFsUm93Q291bnRcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHBhcmFtZXRlcnMpIHtcclxuICAgICAgT2JqZWN0LmtleXMocGFyYW1ldGVycykuZm9yRWFjaChrZXkgPT4gZGV0YWlsW2tleV0gPSBwYXJhbWV0ZXJzW2tleV0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0YTogQXVkaXRFdmVudCA9IHtcclxuICAgICAgdHlwZTogYXVkaXRFdmVudFR5cGUsXHJcbiAgICAgIGRldGFpbFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAocmZtUGFyYW1ldGVycykge1xyXG4gICAgICBjb25zdCByZm1EZXRhaWw6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0ge307IC8vIEFkZCBpbmRleCBzaWduYXR1cmVcclxuICAgICAgT2JqZWN0LmtleXMocmZtUGFyYW1ldGVycykuZm9yRWFjaChrZXkgPT4gcmZtRGV0YWlsW2tleV0gPSByZm1QYXJhbWV0ZXJzW2tleV0pO1xyXG4gICAgICBkYXRhLnJmbURldGFpbCA9IHJmbURldGFpbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhc3RDbGlja1RpbWUgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgIC8vIExpc3RlbiB0byB0aGUgbmF2aWdhdGlvbiBldmVudCBvdXRzaWRlIHRoZSBhcHBcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgIC8vIENhcHR1cmUgdGhlIG5hdmlnYXRpb24gZXZlbiB0cmlnZ2VyZWQganVzdCBhZnRlciB0aGUgY2xpY2tcclxuICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicgJiYgKERhdGUubm93KCkgLSB0aGlzLmxhc3RDbGlja1RpbWUpIDwgMTAwMCkge1xyXG4gICAgICAgIC8vIFNlY29uZCBldmVudCB0cmlnZ2VyZWQgd2hlbiB3ZSBjb21lIGJhY2tcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogQXVkaXRFdmVudFR5cGUuTmF2aWdhdGlvbl9SZXR1cm4gfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCB7IG9uY2U6IHRydWUgfSk7XHJcblxyXG4gICAgdGhpcy5ub3RpZnkoZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOb3RpZnkgcm91dGUgY2hhbmdlXHJcbiAgICovXHJcbiAgbm90aWZ5Um91dGVDaGFuZ2UodXJsOiBzdHJpbmcsKSB7XHJcbiAgICB0aGlzLm5vdGlmeSh7XHJcbiAgICAgIHR5cGU6IFwiTmF2aWdhdGlvbl9Sb3V0ZVwiLCAvLyBBdWRpdEV2ZW50VHlwZS5OYXZpZ2F0aW9uX1JvdXRlLFxyXG4gICAgICBkZXRhaWw6IHtcclxuICAgICAgICBkZXRhaWw6IHVybFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG59Il19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./aggregations.service";
|
|
2
|
+
export * from "./app.service";
|
|
3
|
+
export * from "./json-method-plugin.service";
|
|
4
|
+
export * from "./preview.service";
|
|
5
|
+
export * from "./principal.service";
|
|
6
|
+
export * from "./query.service";
|
|
7
|
+
export * from "./text-chunck.service";
|
|
8
|
+
export * from "./audit.service";
|
|
9
|
+
export * from "./audit.service";
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3dlYi1zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0ICogZnJvbSBcIi4vYWdncmVnYXRpb25zLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vYXBwLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vanNvbi1tZXRob2QtcGx1Z2luLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vcHJldmlldy5zZXJ2aWNlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3ByaW5jaXBhbC5zZXJ2aWNlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3F1ZXJ5LnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vdGV4dC1jaHVuY2suc2VydmljZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9hdWRpdC5zZXJ2aWNlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2F1ZGl0LnNlcnZpY2VcIjsiXX0=
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
2
|
+
import { Injectable, inject } from '@angular/core';
|
|
3
|
+
import { globalConfig, isObject } from '@sinequa/atomic';
|
|
4
|
+
import { throwError } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class JsonMethodPluginService {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.http = inject(HttpClient);
|
|
9
|
+
this.API_URL = `${globalConfig.backendUrl}/${globalConfig.apiPath}`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Call a JsonMethod plugin using an HTTP POST
|
|
13
|
+
*
|
|
14
|
+
* @param method The name of the JsonMethod plugin
|
|
15
|
+
* @param query Parameters to pass to the plugin
|
|
16
|
+
* @param options HTTP options for the request
|
|
17
|
+
* @returns An observable of the plugin's return value
|
|
18
|
+
*/
|
|
19
|
+
post(method, query, options) {
|
|
20
|
+
if (!isObject(query)) {
|
|
21
|
+
return throwError(() => ({ error: "invalid query object" }));
|
|
22
|
+
}
|
|
23
|
+
return this.http.post(`${this.API_URL}/plugin/${method}`, query, options);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Call a JsonMethod plugin using an HTTP GET
|
|
27
|
+
*
|
|
28
|
+
* @param method The name of the JsonMethod plugin
|
|
29
|
+
* @param query Parameters to pass to the plugin
|
|
30
|
+
* @param options HTTP options for the request
|
|
31
|
+
* @returns An observable of the plugin's return value
|
|
32
|
+
*/
|
|
33
|
+
get(method, query, options) {
|
|
34
|
+
const params = new HttpParams();
|
|
35
|
+
for (const key in query) {
|
|
36
|
+
if (query[key] !== undefined) {
|
|
37
|
+
params.set(key, query[key]);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return this.http.get(`${this.API_URL}/plugin/${method}`, {
|
|
41
|
+
params: params,
|
|
42
|
+
...options
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: JsonMethodPluginService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
46
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: JsonMethodPluginService, providedIn: 'root' }); }
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: JsonMethodPluginService, decorators: [{
|
|
49
|
+
type: Injectable,
|
|
50
|
+
args: [{
|
|
51
|
+
providedIn: 'root'
|
|
52
|
+
}]
|
|
53
|
+
}] });
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1tZXRob2QtcGx1Z2luLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hdG9taWMtYW5ndWxhci9zcmMvbGliL3dlYi1zZXJ2aWNlcy9qc29uLW1ldGhvZC1wbHVnaW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUE0QixVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBbUI5QyxNQUFNLE9BQU8sdUJBQXVCO0lBSHBDO1FBSXFCLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFMUIsWUFBTyxHQUFHLEdBQUcsWUFBWSxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7S0FzQ25GO0lBcENDOzs7Ozs7O09BT0c7SUFDSCxJQUFJLENBQUksTUFBYyxFQUFFLEtBQVEsRUFBRSxPQUFpQjtRQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxzQkFBc0IsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLFdBQVcsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQWMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsR0FBRyxDQUFrRixNQUFjLEVBQUUsS0FBUSxFQUFFLE9BQWlCO1FBQzlILE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN4QixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBUSxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sV0FBVyxNQUFNLEVBQUUsRUFBRTtZQUN2RCxNQUFNLEVBQUUsTUFBTTtZQUNkLEdBQUcsT0FBYztTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXhDVSx1QkFBdUI7a0hBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cENvbnRleHQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IGdsb2JhbENvbmZpZywgaXNPYmplY3QgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcblxyXG50eXBlIE9wdGlvbnMgPSB7XHJcbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xyXG4gICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gIH0sXHJcbiAgY29udGV4dD86IEh0dHBDb250ZXh0LFxyXG4gIG9ic2VydmU/OiAnYm9keScgfCAnZXZlbnRzJyB8ICdyZXNwb25zZScsXHJcbiAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHtcclxuICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgUmVhZG9ubHlBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPlxyXG4gIH0sXHJcbiAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxyXG4gIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICd0ZXh0JyB8ICdqc29uJyxcclxuICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEpzb25NZXRob2RQbHVnaW5TZXJ2aWNlIHtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEFQSV9VUkwgPSBgJHtnbG9iYWxDb25maWcuYmFja2VuZFVybH0vJHtnbG9iYWxDb25maWcuYXBpUGF0aH1gO1xyXG5cclxuICAvKipcclxuICAgKiBDYWxsIGEgSnNvbk1ldGhvZCBwbHVnaW4gdXNpbmcgYW4gSFRUUCBQT1NUXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBKc29uTWV0aG9kIHBsdWdpblxyXG4gICAqIEBwYXJhbSBxdWVyeSBQYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIHBsdWdpblxyXG4gICAqIEBwYXJhbSBvcHRpb25zIEhUVFAgb3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIG9mIHRoZSBwbHVnaW4ncyByZXR1cm4gdmFsdWVcclxuICAgKi9cclxuICBwb3N0PFU+KG1ldGhvZDogc3RyaW5nLCBxdWVyeTogVSwgb3B0aW9ucz86IE9wdGlvbnMpIDogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICghaXNPYmplY3QocXVlcnkpKSB7XHJcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+ICh7ZXJyb3I6IFwiaW52YWxpZCBxdWVyeSBvYmplY3RcIn0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLkFQSV9VUkx9L3BsdWdpbi8ke21ldGhvZH1gLCBxdWVyeSwgb3B0aW9ucyBhcyBhbnkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbCBhIEpzb25NZXRob2QgcGx1Z2luIHVzaW5nIGFuIEhUVFAgR0VUXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbWV0aG9kIFRoZSBuYW1lIG9mIHRoZSBKc29uTWV0aG9kIHBsdWdpblxyXG4gICAqIEBwYXJhbSBxdWVyeSBQYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIHBsdWdpblxyXG4gICAqIEBwYXJhbSBvcHRpb25zIEhUVFAgb3B0aW9ucyBmb3IgdGhlIHJlcXVlc3RcclxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIG9mIHRoZSBwbHVnaW4ncyByZXR1cm4gdmFsdWVcclxuICAgKi9cclxuICBnZXQ8VSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIgfCBEYXRlIHwgb2JqZWN0IHwgdW5kZWZpbmVkPj4obWV0aG9kOiBzdHJpbmcsIHF1ZXJ5OiBVLCBvcHRpb25zPzogT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcXVlcnkpIHtcclxuICAgICAgaWYgKHF1ZXJ5W2tleV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHBhcmFtcy5zZXQoa2V5LCBxdWVyeVtrZXldIGFzIGFueSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLkFQSV9VUkx9L3BsdWdpbi8ke21ldGhvZH1gLCB7XHJcbiAgICAgIHBhcmFtczogcGFyYW1zLFxyXG4gICAgICAuLi5vcHRpb25zIGFzIGFueVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|