@arsedizioni/ars-utils 22.5.52 → 22.5.54
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/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +42 -42
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-core.mjs +48 -48
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +42 -42
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +162 -44
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +18 -9
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +18 -18
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +61 -61
- package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +9 -9
- package/package.json +1 -1
- package/types/arsedizioni-ars-utils-clipper.common.d.ts +5 -5
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +1 -1
- package/types/arsedizioni-ars-utils-core.d.ts +5 -5
- package/types/arsedizioni-ars-utils-core.date.d.ts +3 -3
- package/types/arsedizioni-ars-utils-evolution.common.d.ts +41 -11
- package/types/arsedizioni-ars-utils-support.common.d.ts +11 -2
- package/types/arsedizioni-ars-utils-ui.d.ts +2 -2
- package/types/arsedizioni-ars-utils-ui.dialogs.d.ts +1 -1
- package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +1 -1
- package/types/arsedizioni-ars-utils-ui.help.d.ts +2 -2
- package/types/arsedizioni-ars-utils-ui.paginator.d.ts +1 -1
- package/types/arsedizioni-ars-utils-ui.shell.d.ts +1 -1
- package/types/arsedizioni-ars-utils-ui.tinymce.d.ts +1 -1
|
@@ -2,13 +2,29 @@ import { HttpResponse, HttpClient } from '@angular/common/http';
|
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
3
|
import { inject, signal, Service, DestroyRef } from '@angular/core';
|
|
4
4
|
import { BroadcastService, SystemUtils } from '@arsedizioni/ars-utils/core';
|
|
5
|
-
import {
|
|
5
|
+
import { retry, timer, throwError, tap, catchError, EMPTY, of } from 'rxjs';
|
|
6
6
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
7
|
import { catchError as catchError$1, map, finalize } from 'rxjs/operators';
|
|
8
8
|
|
|
9
9
|
const EvolutionMessages = {
|
|
10
10
|
// Error
|
|
11
11
|
ERROR: '§evo-error',
|
|
12
|
+
/**
|
|
13
|
+
* The session is gone: a 401 on a request that was not a sign-in attempt.
|
|
14
|
+
* Emitted once per dead session by `evolutionAuthInterceptor`, which re-arms on the first
|
|
15
|
+
* good response. The twin of `ClipperMessages.ERROR_401`.
|
|
16
|
+
*/
|
|
17
|
+
ERROR_401: '§evo-error-401',
|
|
18
|
+
/**
|
|
19
|
+
* The API is not answering: the interceptor has already sent the request three times over ten
|
|
20
|
+
* seconds and none of them got an answer carrying an `ApiResult` envelope. Emitted once per
|
|
21
|
+
* outage, however many requests were in flight, and re-armed on the first good response.
|
|
22
|
+
*
|
|
23
|
+
* Deliberately not an `ERROR`: a server being replaced is neither a failed operation to report
|
|
24
|
+
* in a dialog nor an expired session to sign out of, and the host application usually answers it
|
|
25
|
+
* with a banner that clears itself.
|
|
26
|
+
*/
|
|
27
|
+
ERROR_UNAVAILABLE: '§evo-error-unavailable',
|
|
12
28
|
SUCCESS: '§evo-success',
|
|
13
29
|
SUCCESS_TOAST: '§evo-success-toast',
|
|
14
30
|
// Login
|
|
@@ -492,8 +508,61 @@ var ERPPlace;
|
|
|
492
508
|
class EvolutionComplianceContextInfo {
|
|
493
509
|
}
|
|
494
510
|
|
|
511
|
+
/**
|
|
512
|
+
* HTML text helpers with no dependencies of their own.
|
|
513
|
+
*
|
|
514
|
+
* Not exported from `public_api`: it is an internal detail of this entry point, the twin of the one
|
|
515
|
+
* in `clipper.common`. The two entry points are independent, so neither imports the other's copy.
|
|
516
|
+
*/
|
|
517
|
+
function escapeHtml(value) {
|
|
518
|
+
if (value === undefined || value === null)
|
|
519
|
+
return undefined;
|
|
520
|
+
return String(value)
|
|
521
|
+
.replaceAll('&', '&')
|
|
522
|
+
.replaceAll('<', '<')
|
|
523
|
+
.replaceAll('>', '>')
|
|
524
|
+
.replaceAll('"', '"')
|
|
525
|
+
.replaceAll("'", "'");
|
|
526
|
+
}
|
|
527
|
+
|
|
495
528
|
/** Minimum milliseconds between consecutive generic error broadcasts (debounce guard). */
|
|
496
529
|
const ERROR_DEBOUNCE_MS = 5000;
|
|
530
|
+
/** How many more times a request is sent when the API is not there. */
|
|
531
|
+
const UNAVAILABLE_RETRIES = 2;
|
|
532
|
+
/** How long to wait before each of those retries, in milliseconds. */
|
|
533
|
+
const UNAVAILABLE_RETRY_DELAY = 5000;
|
|
534
|
+
/** The statuses a server that is being replaced answers with, plus the one it cannot answer at all. */
|
|
535
|
+
const UNAVAILABLE_STATUSES = [0, 500, 502, 503, 504];
|
|
536
|
+
/**
|
|
537
|
+
* Returns whether the failure means the API is not there, rather than the request being wrong.
|
|
538
|
+
*
|
|
539
|
+
* The discriminator is the body, not the status. An error raised INSIDE the application arrives
|
|
540
|
+
* wrapped in the usual `ApiResult` envelope, so it has been seen, parsed and acted upon: replaying
|
|
541
|
+
* it would run whatever it already ran a second time. A server that is being replaced answers with
|
|
542
|
+
* IIS's own HTML, or with nothing at all — no envelope — and that request never reached any
|
|
543
|
+
* handler. Only the second kind is retried, which is what makes it safe to retry a POST.
|
|
544
|
+
* @param error - The raw HTTP error object.
|
|
545
|
+
* @returns True when the request is worth sending again.
|
|
546
|
+
*/
|
|
547
|
+
function isServiceUnavailable(error) {
|
|
548
|
+
if (!UNAVAILABLE_STATUSES.includes(parseInt(error?.status ?? '0')))
|
|
549
|
+
return false;
|
|
550
|
+
const body = error?.error;
|
|
551
|
+
const isApiEnvelope = !!body
|
|
552
|
+
&& typeof body === 'object'
|
|
553
|
+
&& !(body instanceof Blob)
|
|
554
|
+
&& ('success' in body || 'problem' in body);
|
|
555
|
+
return !isApiEnvelope;
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Returns whether the failure means the session is gone rather than the request being wrong.
|
|
559
|
+
* @param errorStatus - The numeric HTTP status code.
|
|
560
|
+
* @param url - The request URL.
|
|
561
|
+
* @returns True when the link to Evolution has to be dropped.
|
|
562
|
+
*/
|
|
563
|
+
function isSessionExpired(errorStatus, url) {
|
|
564
|
+
return errorStatus === 401 && !isAuthEndpoint(url);
|
|
565
|
+
}
|
|
497
566
|
/**
|
|
498
567
|
* Returns whether the URL is an authentication endpoint, where a 401 is a normal outcome -- wrong
|
|
499
568
|
* credentials, a rejected code, a refused passkey -- rather than an expired or invalid session.
|
|
@@ -521,8 +590,8 @@ function isAuthEndpoint(url) {
|
|
|
521
590
|
*
|
|
522
591
|
* `/session/status` runs unconditionally at every bootstrap, including for users who never linked
|
|
523
592
|
* Evolution at all. When the API is unreachable, reporting that failure would show "Evolution non è
|
|
524
|
-
* disponibile" to somebody who never asked Evolution for anything: the
|
|
525
|
-
* the
|
|
593
|
+
* disponibile" to somebody who never asked Evolution for anything: the probe simply stays unanswered
|
|
594
|
+
* and the link state keeps whatever the stored hint says.
|
|
526
595
|
* @param url - The request URL.
|
|
527
596
|
* @returns True when the URL is the status probe.
|
|
528
597
|
*/
|
|
@@ -531,15 +600,23 @@ function isStatusProbe(url) {
|
|
|
531
600
|
}
|
|
532
601
|
/**
|
|
533
602
|
* Resolves the user-facing message for a failed request.
|
|
603
|
+
*
|
|
604
|
+
* There is no branch for status 0 any more, nor for the 5xx family: a request that got no answer,
|
|
605
|
+
* or an answer with no `ApiResult` envelope, never reaches here — it is retried and then reported
|
|
606
|
+
* as `ERROR_UNAVAILABLE`. What is left is the failures the API itself described.
|
|
607
|
+
*
|
|
608
|
+
* Whatever the API sends is escaped before anything else happens to it. The dialog that shows this
|
|
609
|
+
* string binds it with `[innerHTML]` through a pipe that calls `bypassSecurityTrustHtml`, so an
|
|
610
|
+
* error message echoing back something a user had typed would be rendered as markup rather than
|
|
611
|
+
* read as text. The paragraph breaks in the default branch are applied AFTER the escape, which is
|
|
612
|
+
* exactly why they survive it and nothing else does.
|
|
534
613
|
* @param error - The raw HTTP error object.
|
|
535
614
|
* @param errorStatus - The numeric HTTP status code.
|
|
536
|
-
* @returns A localised message,
|
|
615
|
+
* @returns A localised message, safe to render as HTML.
|
|
537
616
|
*/
|
|
538
617
|
function resolveErrorMessage(error, errorStatus) {
|
|
539
|
-
const message = error?.error?.message ?? error?.message;
|
|
618
|
+
const message = escapeHtml(error?.error?.message ?? error?.message);
|
|
540
619
|
switch (errorStatus) {
|
|
541
|
-
case 0:
|
|
542
|
-
return "In questo momento Evolution non è disponibile. Riprova tra qualche minuto.";
|
|
543
620
|
case 401:
|
|
544
621
|
// A 401 that reaches here comes from a sign-in attempt; anything else was classified as a
|
|
545
622
|
// dead session before this function was called.
|
|
@@ -571,15 +648,29 @@ function resolveErrorMessage(error, errorStatus) {
|
|
|
571
648
|
* failures used to arrive as `200 OK` with `success: false`, and a dead session had to be guessed
|
|
572
649
|
* from a 405, a 410 or any 5xx. Now the status is the truth -- a 401 on an already-authenticated
|
|
573
650
|
* request means the session is gone, a 403 means the permission is missing, a 5xx means the server
|
|
574
|
-
* broke, and those are three different things that used to be one.
|
|
575
|
-
* therefore now, and only, a 401 outside the authentication endpoints.
|
|
651
|
+
* broke, and those are three different things that used to be one.
|
|
576
652
|
*
|
|
577
|
-
*
|
|
578
|
-
*
|
|
579
|
-
*
|
|
653
|
+
* A dead session is broadcast as `EvolutionMessages.ERROR_401`, for the host application to handle
|
|
654
|
+
* centrally; every other failure stays an `EvolutionMessages.ERROR` carrying a message. The two are
|
|
655
|
+
* separate because they call for opposite things: one drops the link, the other shows a dialog and
|
|
656
|
+
* leaves the user where they are. It used to be an `ERROR` flagged `invalidateSession`, with a
|
|
657
|
+
* message of its own; `invalidateSession` is now always false.
|
|
580
658
|
*
|
|
581
|
-
*
|
|
582
|
-
*
|
|
659
|
+
* Between them sits a third case, which is neither: the API is being replaced. A deployment answers
|
|
660
|
+
* with a 5xx that has no `ApiResult` envelope, or does not answer at all, for the few seconds the
|
|
661
|
+
* process takes to come back. That is not worth a dialog and not worth a redirect either, so the
|
|
662
|
+
* request is simply sent again — twice, five seconds apart — and only if the third attempt fails
|
|
663
|
+
* too does it become `EvolutionMessages.ERROR_UNAVAILABLE`, once per outage.
|
|
664
|
+
*
|
|
665
|
+
* `EvolutionServiceFlags.NotifySystemErrors` therefore now governs one narrower case: a 5xx that
|
|
666
|
+
* DOES carry an envelope, i.e. a server error the API itself described. Without the flag it is
|
|
667
|
+
* swallowed, as it always was in this library.
|
|
668
|
+
*
|
|
669
|
+
* Errors are consumed, not re-thrown, exactly as `clipperAuthInterceptor` does: every failure is
|
|
670
|
+
* reported on the bus, and a subscriber to a failing request simply completes without emitting. A
|
|
671
|
+
* caller that must know how a request ended reads `ApiResult.success`; a busy dialog is cleared by
|
|
672
|
+
* `finalize`, which runs on completion as it ran on error. An `error` callback no longer fires for
|
|
673
|
+
* an HTTP failure.
|
|
583
674
|
*
|
|
584
675
|
* Register it with `withInterceptors`:
|
|
585
676
|
* @example
|
|
@@ -600,6 +691,11 @@ function evolutionAuthInterceptor(serviceUri, flags = EvolutionServiceFlags.None
|
|
|
600
691
|
* several in-flight requests fail at once; re-armed on the next successful response.
|
|
601
692
|
*/
|
|
602
693
|
let sessionExpiredNotified = false;
|
|
694
|
+
/**
|
|
695
|
+
* Whether the unavailable-API notification has already been sent. A deployment fails every
|
|
696
|
+
* request in flight, and one notification is enough. Re-armed on the next successful response.
|
|
697
|
+
*/
|
|
698
|
+
let unavailableNotified = false;
|
|
603
699
|
/**
|
|
604
700
|
* Broadcasts a generic, user-facing error for an Evolution HTTP failure, debounced.
|
|
605
701
|
* @param error - The raw error value thrown by the HTTP layer.
|
|
@@ -608,7 +704,7 @@ function evolutionAuthInterceptor(serviceUri, flags = EvolutionServiceFlags.None
|
|
|
608
704
|
* @returns void
|
|
609
705
|
*/
|
|
610
706
|
function notifyError(error, errorStatus, broadcastService) {
|
|
611
|
-
// A
|
|
707
|
+
// A 5xx the API described itself is the one case the flag still governs.
|
|
612
708
|
if (errorStatus >= 500 && (flags & EvolutionServiceFlags.NotifySystemErrors) === 0)
|
|
613
709
|
return;
|
|
614
710
|
const now = Date.now();
|
|
@@ -643,10 +739,20 @@ function evolutionAuthInterceptor(serviceUri, flags = EvolutionServiceFlags.None
|
|
|
643
739
|
'X-Evo-Account': sessionStorage.getItem(EVOLUTION_ACTIVE_ACCOUNT_KEY) ?? ''
|
|
644
740
|
}
|
|
645
741
|
});
|
|
646
|
-
return next(authenticatedRequest).pipe(
|
|
647
|
-
|
|
742
|
+
return next(authenticatedRequest).pipe(
|
|
743
|
+
// An API that is being replaced is not an error to show, it is a wait: two more attempts,
|
|
744
|
+
// five seconds apart. Anything else is rethrown on the spot, so a request that genuinely
|
|
745
|
+
// failed still fails immediately.
|
|
746
|
+
retry({
|
|
747
|
+
count: UNAVAILABLE_RETRIES,
|
|
748
|
+
delay: error => isServiceUnavailable(error)
|
|
749
|
+
? timer(UNAVAILABLE_RETRY_DELAY)
|
|
750
|
+
: throwError(() => error)
|
|
751
|
+
}), tap(event => {
|
|
752
|
+
// A response means the session is valid again, and the API is back: re-arm both notifiers.
|
|
648
753
|
if (event instanceof HttpResponse) {
|
|
649
754
|
sessionExpiredNotified = false;
|
|
755
|
+
unavailableNotified = false;
|
|
650
756
|
}
|
|
651
757
|
}), catchError((error) => {
|
|
652
758
|
// Which request this was is read from the request, not from `error.url`: a failure with no
|
|
@@ -655,27 +761,36 @@ function evolutionAuthInterceptor(serviceUri, flags = EvolutionServiceFlags.None
|
|
|
655
761
|
// before the pipe was built.
|
|
656
762
|
const errorStatus = parseInt(error?.status ?? '0');
|
|
657
763
|
if (isStatusProbe(authenticatedRequest.url)) {
|
|
658
|
-
// The silent probe stays silent: its caller reads the outcome from the
|
|
659
|
-
//
|
|
764
|
+
// The silent probe stays silent: its caller reads the outcome from the stream, nobody
|
|
765
|
+
// else needs to hear about it.
|
|
660
766
|
}
|
|
661
|
-
else if (
|
|
767
|
+
else if (isServiceUnavailable(error)) {
|
|
768
|
+
// Three attempts over ten seconds and the API is still not answering. There is nothing
|
|
769
|
+
// left to retry, so the host application is told once, however many requests were in
|
|
770
|
+
// flight. Reported whatever the flags say: `NotifySystemErrors` governs a 5xx the API
|
|
771
|
+
// described itself, and a server that never answered described nothing.
|
|
772
|
+
if (!unavailableNotified) {
|
|
773
|
+
unavailableNotified = true;
|
|
774
|
+
broadcastService.sendMessage(EvolutionMessages.ERROR_UNAVAILABLE);
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
else if (isSessionExpired(errorStatus, authenticatedRequest.url)) {
|
|
662
778
|
// Expired or invalidated session on an authenticated request. Notified once: several
|
|
663
779
|
// in-flight requests failing together is how a single expiry becomes a wall of dialogs.
|
|
664
780
|
if (!sessionExpiredNotified) {
|
|
665
781
|
sessionExpiredNotified = true;
|
|
666
|
-
broadcastService.sendMessage(EvolutionMessages.
|
|
667
|
-
invalidateSession: true,
|
|
668
|
-
message: "La sessione di lavoro non è più valida.",
|
|
669
|
-
title: "Errore in Evolution",
|
|
670
|
-
errorStatus,
|
|
671
|
-
service: serviceUri
|
|
672
|
-
});
|
|
782
|
+
broadcastService.sendMessage(EvolutionMessages.ERROR_401);
|
|
673
783
|
}
|
|
674
784
|
}
|
|
675
785
|
else {
|
|
786
|
+
// Any other failure, including a 401 from a sign-in attempt.
|
|
676
787
|
notifyError(error, errorStatus, broadcastService);
|
|
677
788
|
}
|
|
678
|
-
|
|
789
|
+
// Consumed, not rethrown — as in `clipperAuthInterceptor`. The failure has been reported on
|
|
790
|
+
// the bus, and rethrowing it a second time only gave every subscriber its own chance to
|
|
791
|
+
// report it again: a wrong password used to end in two dialogs, the second one saying
|
|
792
|
+
// "Evolution non disponibile".
|
|
793
|
+
return EMPTY;
|
|
679
794
|
}));
|
|
680
795
|
};
|
|
681
796
|
}
|
|
@@ -851,10 +966,10 @@ class CoreService {
|
|
|
851
966
|
sessionStorage.removeItem('evolution_client_id');
|
|
852
967
|
this.reset();
|
|
853
968
|
}
|
|
854
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
855
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
969
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CoreService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
970
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.6", ngImport: i0, type: CoreService }); }
|
|
856
971
|
}
|
|
857
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
972
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CoreService, decorators: [{
|
|
858
973
|
type: Service
|
|
859
974
|
}] });
|
|
860
975
|
|
|
@@ -996,7 +1111,10 @@ class LoginService {
|
|
|
996
1111
|
this.logout().subscribe(r => {
|
|
997
1112
|
if (!r.success) {
|
|
998
1113
|
if (r.message) {
|
|
999
|
-
this.broadcastService.sendMessage(EvolutionMessages.ERROR,
|
|
1114
|
+
this.broadcastService.sendMessage(EvolutionMessages.ERROR,
|
|
1115
|
+
// The surrounding markup is ours; the server's message is escaped, because the dialog
|
|
1116
|
+
// renders this string as HTML.
|
|
1117
|
+
{ message: "<p>" + escapeHtml(r.message) + "</p><br><br><hr><p class='small'><i>Per eliminare la configurazione di Evolution accedere a:<br><b>menu > personalizza > collegamenti</b></i></p>" });
|
|
1000
1118
|
}
|
|
1001
1119
|
}
|
|
1002
1120
|
else if ((this.core.flags & EvolutionServiceFlags.DisplayConnectionStateMessages) > 0) {
|
|
@@ -1219,10 +1337,10 @@ class LoginService {
|
|
|
1219
1337
|
this.broadcastService.sendMessage(EvolutionMessages.LOGIN_COMPLETED);
|
|
1220
1338
|
}
|
|
1221
1339
|
}
|
|
1222
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
1223
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
1340
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: LoginService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
1341
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.6", ngImport: i0, type: LoginService }); }
|
|
1224
1342
|
}
|
|
1225
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
1343
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: LoginService, decorators: [{
|
|
1226
1344
|
type: Service
|
|
1227
1345
|
}] });
|
|
1228
1346
|
|
|
@@ -1310,10 +1428,10 @@ class ComplianceService {
|
|
|
1310
1428
|
addActivities(params) {
|
|
1311
1429
|
return this.httpClient.post(this.core.serviceUri + '/compliance/activities/add', params);
|
|
1312
1430
|
}
|
|
1313
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
1314
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
1431
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ComplianceService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
1432
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.6", ngImport: i0, type: ComplianceService }); }
|
|
1315
1433
|
}
|
|
1316
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
1434
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ComplianceService, decorators: [{
|
|
1317
1435
|
type: Service
|
|
1318
1436
|
}] });
|
|
1319
1437
|
|
|
@@ -1383,10 +1501,10 @@ class AccountService {
|
|
|
1383
1501
|
refreshLicence() {
|
|
1384
1502
|
return this.httpClient.get(this.core.serviceUri + '/account/licenses/refresh/' + (this.core.user?.userId ?? -1));
|
|
1385
1503
|
}
|
|
1386
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
1387
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
1504
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AccountService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
1505
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.6", ngImport: i0, type: AccountService }); }
|
|
1388
1506
|
}
|
|
1389
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
1507
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AccountService, decorators: [{
|
|
1390
1508
|
type: Service
|
|
1391
1509
|
}] });
|
|
1392
1510
|
|
|
@@ -1460,10 +1578,10 @@ class EvolutionService {
|
|
|
1460
1578
|
* @returns void
|
|
1461
1579
|
*/
|
|
1462
1580
|
ping() { this.session.ping(); }
|
|
1463
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
1464
|
-
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.
|
|
1581
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: EvolutionService, deps: [], target: i0.ɵɵFactoryTarget.Service }); }
|
|
1582
|
+
static { this.ɵprov = i0.ɵɵngDeclareService({ minVersion: "22.0.0", version: "22.1.6", ngImport: i0, type: EvolutionService }); }
|
|
1465
1583
|
}
|
|
1466
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
1584
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: EvolutionService, decorators: [{
|
|
1467
1585
|
type: Service
|
|
1468
1586
|
}] });
|
|
1469
1587
|
|