valtech-components 2.0.903 → 2.0.904
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/esm2022/lib/services/auth/auth.service.mjs +22 -22
- package/esm2022/lib/services/auth/device.service.mjs +4 -4
- package/esm2022/lib/services/auth/handoff.service.mjs +3 -3
- package/esm2022/lib/services/auth/notification-action.service.mjs +3 -3
- package/esm2022/lib/services/auth/oauth.service.mjs +7 -7
- package/esm2022/lib/services/auth/session.service.mjs +2 -2
- package/esm2022/lib/services/auth/storage.service.mjs +2 -2
- package/esm2022/lib/services/auth/sync.service.mjs +6 -6
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +42 -42
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
- package/lib/components/organisms/article/article.component.d.ts +2 -2
- package/lib/components/organisms/toolbar/toolbar.component.d.ts +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -16,7 +16,7 @@ export class AuthSyncService {
|
|
|
16
16
|
/** Observable de eventos de sincronización */
|
|
17
17
|
this.onEvent$ = this.eventSubject.asObservable();
|
|
18
18
|
this.isBrowser = isPlatformBrowser(platformId);
|
|
19
|
-
const prefix = this.config
|
|
19
|
+
const prefix = this.config?.storagePrefix || 'valtech_auth_';
|
|
20
20
|
this.channelName = `${prefix}sync_channel`;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
@@ -24,7 +24,7 @@ export class AuthSyncService {
|
|
|
24
24
|
* SSR-noop — sync de pestañas solo aplica en browser.
|
|
25
25
|
*/
|
|
26
26
|
start() {
|
|
27
|
-
if (!this.config
|
|
27
|
+
if (!this.config?.enableTabSync || !this.isBrowser) {
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
30
|
// Intentar usar BroadcastChannel API (mejor rendimiento)
|
|
@@ -53,7 +53,7 @@ export class AuthSyncService {
|
|
|
53
53
|
* Envía un evento a otras pestañas.
|
|
54
54
|
*/
|
|
55
55
|
broadcast(event) {
|
|
56
|
-
if (!this.config
|
|
56
|
+
if (!this.config?.enableTabSync || !this.isBrowser) {
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
59
|
const fullEvent = {
|
|
@@ -97,7 +97,7 @@ export class AuthSyncService {
|
|
|
97
97
|
* Inicializa fallback con storage events.
|
|
98
98
|
*/
|
|
99
99
|
initStorageEvents() {
|
|
100
|
-
const storageKey = `${this.config
|
|
100
|
+
const storageKey = `${this.config?.storagePrefix}sync_event`;
|
|
101
101
|
this.storageListener = (event) => {
|
|
102
102
|
if (event.key === storageKey && event.newValue) {
|
|
103
103
|
try {
|
|
@@ -115,7 +115,7 @@ export class AuthSyncService {
|
|
|
115
115
|
* Envía evento via localStorage (fallback).
|
|
116
116
|
*/
|
|
117
117
|
broadcastViaStorage(event) {
|
|
118
|
-
const storageKey = `${this.config
|
|
118
|
+
const storageKey = `${this.config?.storagePrefix}sync_event`;
|
|
119
119
|
try {
|
|
120
120
|
// Escribir y luego limpiar para permitir múltiples eventos del mismo tipo
|
|
121
121
|
localStorage.setItem(storageKey, JSON.stringify(event));
|
|
@@ -154,4 +154,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
154
154
|
type: Inject,
|
|
155
155
|
args: [PLATFORM_ID]
|
|
156
156
|
}] }] });
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL3N5bmMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBYSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUcvQzs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sZUFBZTtJQVcxQixZQUNtRCxNQUFnQyxFQUM1RCxVQUFrQjtRQURVLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBWDNFLFlBQU8sR0FBNEIsSUFBSSxDQUFDO1FBRXhDLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQWlCLENBQUM7UUFDNUMsb0JBQWUsR0FBMkMsSUFBSSxDQUFDO1FBRXZFLDhDQUE4QztRQUNyQyxhQUFRLEdBQThCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFROUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxlQUFlLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xELE9BQU87UUFDVCxDQUFDO1FBRUQseURBQXlEO1FBQ3pE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VSxFQUFFLE1BQU0sRUFBRTs7MEJBYTdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1COzswQkFDdEMsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IEF1dGhTeW5jRXZlbnQsIEF1dGhTeW5jRXZlbnRUeXBlLCBWYWx0ZWNoQXV0aENvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgc2luY3Jvbml6YWNpw7NuIGRlIGVzdGFkbyBkZSBhdXRlbnRpY2FjacOzbiBlbnRyZSBwZXN0YcOxYXMuXG4gKiBVc2EgQnJvYWRjYXN0Q2hhbm5lbCBBUEkgY29uIGZhbGxiYWNrIGEgc3RvcmFnZSBldmVudHMuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFN5bmNTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBjaGFubmVsOiBCcm9hZGNhc3RDaGFubmVsIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2hhbm5lbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBldmVudFN1YmplY3QgPSBuZXcgU3ViamVjdDxBdXRoU3luY0V2ZW50PigpO1xuICBwcml2YXRlIHN0b3JhZ2VMaXN0ZW5lcjogKChldmVudDogU3RvcmFnZUV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBPYnNlcnZhYmxlIGRlIGV2ZW50b3MgZGUgc2luY3Jvbml6YWNpw7NuICovXG4gIHJlYWRvbmx5IG9uRXZlbnQkOiBPYnNlcnZhYmxlPEF1dGhTeW5jRXZlbnQ+ID0gdGhpcy5ldmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpc0Jyb3dzZXI6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcgfCBudWxsLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHBsYXRmb3JtSWQ6IE9iamVjdFxuICApIHtcbiAgICB0aGlzLmlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpO1xuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuY29uZmlnLnN0b3JhZ2VQcmVmaXggfHwgJ3ZhbHRlY2hfYXV0aF8nO1xuICAgIHRoaXMuY2hhbm5lbE5hbWUgPSBgJHtwcmVmaXh9c3luY19jaGFubmVsYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmljaWEgbGEgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7Fhcy5cbiAgICogU1NSLW5vb3Ag4oCUIHN5bmMgZGUgcGVzdGHDsWFzIHNvbG8gYXBsaWNhIGVuIGJyb3dzZXIuXG4gICAqL1xuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmVuYWJsZVRhYlN5bmMgfHwgIXRoaXMuaXNCcm93c2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW50ZW50YXIgdXNhciBCcm9hZGNhc3RDaGFubmVsIEFQSSAobWVqb3IgcmVuZGltaWVudG8pXG4gICAgaWYgKHR5cGVvZiBCcm9hZGNhc3RDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5pbml0QnJvYWRjYXN0Q2hhbm5lbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjayBhIHN0b3JhZ2UgZXZlbnRzXG4gICAgICB0aGlzLmluaXRTdG9yYWdlRXZlbnRzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGllbmUgbGEgc2luY3Jvbml6YWNpw7NuLlxuICAgKi9cbiAgc3RvcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGFubmVsKSB7XG4gICAgICB0aGlzLmNoYW5uZWwuY2xvc2UoKTtcbiAgICAgIHRoaXMuY2hhbm5lbCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RvcmFnZUxpc3RlbmVyICYmIHRoaXMuaXNCcm93c2VyKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIHRoaXMuc3RvcmFnZUxpc3RlbmVyKTtcbiAgICAgIHRoaXMuc3RvcmFnZUxpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW52w61hIHVuIGV2ZW50byBhIG90cmFzIHBlc3Rhw7Fhcy5cbiAgICovXG4gIGJyb2FkY2FzdChldmVudDogT21pdDxBdXRoU3luY0V2ZW50LCAndGltZXN0YW1wJz4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmVuYWJsZVRhYlN5bmMgfHwgIXRoaXMuaXNCcm93c2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbEV2ZW50OiBBdXRoU3luY0V2ZW50ID0ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmNoYW5uZWwpIHtcbiAgICAgIHRoaXMuY2hhbm5lbC5wb3N0TWVzc2FnZShmdWxsRXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjazogdXNhciBsb2NhbFN0b3JhZ2UgcGFyYSBub3RpZmljYXJcbiAgICAgIHRoaXMuYnJvYWRjYXN0VmlhU3RvcmFnZShmdWxsRXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIHRoaXMuZXZlbnRTdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBCcm9hZGNhc3RDaGFubmVsIEFQSS5cbiAgICovXG4gIHByaXZhdGUgaW5pdEJyb2FkY2FzdENoYW5uZWwoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKHRoaXMuY2hhbm5lbE5hbWUpO1xuXG4gICAgICB0aGlzLmNoYW5uZWwub25tZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQ8QXV0aFN5bmNFdmVudD4pID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVFdmVudChldmVudC5kYXRhKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2hhbm5lbC5vbm1lc3NhZ2VlcnJvciA9ICgpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbVmFsdGVjaEF1dGhdIEVycm9yIGVuIEJyb2FkY2FzdENoYW5uZWwsIHVzYW5kbyBmYWxsYmFjaycpO1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY2hhbm5lbCA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5pdFN0b3JhZ2VFdmVudHMoKTtcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBCcm9hZGNhc3RDaGFubmVsIG5vIGRpc3BvbmlibGUsIHVzYXIgZmFsbGJhY2tcbiAgICAgIHRoaXMuaW5pdFN0b3JhZ2VFdmVudHMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBmYWxsYmFjayBjb24gc3RvcmFnZSBldmVudHMuXG4gICAqL1xuICBwcml2YXRlIGluaXRTdG9yYWdlRXZlbnRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSBgJHt0aGlzLmNvbmZpZy5zdG9yYWdlUHJlZml4fXN5bmNfZXZlbnRgO1xuXG4gICAgdGhpcy5zdG9yYWdlTGlzdGVuZXIgPSAoZXZlbnQ6IFN0b3JhZ2VFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gc3RvcmFnZUtleSAmJiBldmVudC5uZXdWYWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHN5bmNFdmVudDogQXV0aFN5bmNFdmVudCA9IEpTT04ucGFyc2UoZXZlbnQubmV3VmFsdWUpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXZlbnQoc3luY0V2ZW50KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gSWdub3JhciBldmVudG9zIG1hbCBmb3JtYWRvc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgdGhpcy5zdG9yYWdlTGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudsOtYSBldmVudG8gdmlhIGxvY2FsU3RvcmFnZSAoZmFsbGJhY2spLlxuICAgKi9cbiAgcHJpdmF0ZSBicm9hZGNhc3RWaWFTdG9yYWdlKGV2ZW50OiBBdXRoU3luY0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmFnZUtleSA9IGAke3RoaXMuY29uZmlnLnN0b3JhZ2VQcmVmaXh9c3luY19ldmVudGA7XG5cbiAgICB0cnkge1xuICAgICAgLy8gRXNjcmliaXIgeSBsdWVnbyBsaW1waWFyIHBhcmEgcGVybWl0aXIgbcO6bHRpcGxlcyBldmVudG9zIGRlbCBtaXNtbyB0aXBvXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShldmVudCkpO1xuICAgICAgLy8gVXNhciBzZXRUaW1lb3V0IHBhcmEgcGVybWl0aXIgcXVlIG90cmFzIHBlc3Rhw7FhcyBsZWFuIGVsIHZhbG9yXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICB9LCAxMDApO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc29sZS53YXJuKCdbVmFsdGVjaEF1dGhdIEVycm9yIGVudmlhbmRvIGV2ZW50byB2aWEgc3RvcmFnZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lamEgdW4gZXZlbnRvIHJlY2liaWRvLlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVFdmVudChldmVudDogQXV0aFN5bmNFdmVudCk6IHZvaWQge1xuICAgIC8vIFZlcmlmaWNhciBxdWUgZWwgZXZlbnRvIG5vIHNlYSBtdXkgYW50aWd1byAobcOhcyBkZSA1IHNlZ3VuZG9zKVxuICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSBldmVudC50aW1lc3RhbXA7XG4gICAgaWYgKGFnZSA+IDUwMDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KGV2ZW50KTtcbiAgfVxufVxuIl19
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL3N5bmMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBYSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQUcvQzs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sZUFBZTtJQVcxQixZQUNtRCxNQUFnQyxFQUM1RCxVQUFrQjtRQURVLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBWDNFLFlBQU8sR0FBNEIsSUFBSSxDQUFDO1FBRXhDLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQWlCLENBQUM7UUFDNUMsb0JBQWUsR0FBMkMsSUFBSSxDQUFDO1FBRXZFLDhDQUE4QztRQUNyQyxhQUFRLEdBQThCLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFROUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsSUFBSSxlQUFlLENBQUM7UUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25ELE9BQU87UUFDVCxDQUFDO1FBRUQseURBQXlEO1FBQ3pE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VSxFQUFFLE1BQU0sRUFBRTs7MEJBYTdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1COzswQkFDdEMsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IEF1dGhTeW5jRXZlbnQsIEF1dGhTeW5jRXZlbnRUeXBlLCBWYWx0ZWNoQXV0aENvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgc2luY3Jvbml6YWNpw7NuIGRlIGVzdGFkbyBkZSBhdXRlbnRpY2FjacOzbiBlbnRyZSBwZXN0YcOxYXMuXG4gKiBVc2EgQnJvYWRjYXN0Q2hhbm5lbCBBUEkgY29uIGZhbGxiYWNrIGEgc3RvcmFnZSBldmVudHMuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFN5bmNTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBjaGFubmVsOiBCcm9hZGNhc3RDaGFubmVsIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2hhbm5lbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBldmVudFN1YmplY3QgPSBuZXcgU3ViamVjdDxBdXRoU3luY0V2ZW50PigpO1xuICBwcml2YXRlIHN0b3JhZ2VMaXN0ZW5lcjogKChldmVudDogU3RvcmFnZUV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBPYnNlcnZhYmxlIGRlIGV2ZW50b3MgZGUgc2luY3Jvbml6YWNpw7NuICovXG4gIHJlYWRvbmx5IG9uRXZlbnQkOiBPYnNlcnZhYmxlPEF1dGhTeW5jRXZlbnQ+ID0gdGhpcy5ldmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpc0Jyb3dzZXI6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcgfCBudWxsLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHBsYXRmb3JtSWQ6IE9iamVjdFxuICApIHtcbiAgICB0aGlzLmlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpO1xuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuY29uZmlnPy5zdG9yYWdlUHJlZml4IHx8ICd2YWx0ZWNoX2F1dGhfJztcbiAgICB0aGlzLmNoYW5uZWxOYW1lID0gYCR7cHJlZml4fXN5bmNfY2hhbm5lbGA7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhIGxhIHNpbmNyb25pemFjacOzbiBlbnRyZSBwZXN0YcOxYXMuXG4gICAqIFNTUi1ub29wIOKAlCBzeW5jIGRlIHBlc3Rhw7FhcyBzb2xvIGFwbGljYSBlbiBicm93c2VyLlxuICAgKi9cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZz8uZW5hYmxlVGFiU3luYyB8fCAhdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbnRlbnRhciB1c2FyIEJyb2FkY2FzdENoYW5uZWwgQVBJIChtZWpvciByZW5kaW1pZW50bylcbiAgICBpZiAodHlwZW9mIEJyb2FkY2FzdENoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmluaXRCcm9hZGNhc3RDaGFubmVsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIGEgc3RvcmFnZSBldmVudHNcbiAgICAgIHRoaXMuaW5pdFN0b3JhZ2VFdmVudHMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0aWVuZSBsYSBzaW5jcm9uaXphY2nDs24uXG4gICAqL1xuICBzdG9wKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoYW5uZWwpIHtcbiAgICAgIHRoaXMuY2hhbm5lbC5jbG9zZSgpO1xuICAgICAgdGhpcy5jaGFubmVsID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdG9yYWdlTGlzdGVuZXIgJiYgdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgdGhpcy5zdG9yYWdlTGlzdGVuZXIpO1xuICAgICAgdGhpcy5zdG9yYWdlTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnbDrWEgdW4gZXZlbnRvIGEgb3RyYXMgcGVzdGHDsWFzLlxuICAgKi9cbiAgYnJvYWRjYXN0KGV2ZW50OiBPbWl0PEF1dGhTeW5jRXZlbnQsICd0aW1lc3RhbXAnPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWc/LmVuYWJsZVRhYlN5bmMgfHwgIXRoaXMuaXNCcm93c2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbEV2ZW50OiBBdXRoU3luY0V2ZW50ID0ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmNoYW5uZWwpIHtcbiAgICAgIHRoaXMuY2hhbm5lbC5wb3N0TWVzc2FnZShmdWxsRXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjazogdXNhciBsb2NhbFN0b3JhZ2UgcGFyYSBub3RpZmljYXJcbiAgICAgIHRoaXMuYnJvYWRjYXN0VmlhU3RvcmFnZShmdWxsRXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIHRoaXMuZXZlbnRTdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBCcm9hZGNhc3RDaGFubmVsIEFQSS5cbiAgICovXG4gIHByaXZhdGUgaW5pdEJyb2FkY2FzdENoYW5uZWwoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKHRoaXMuY2hhbm5lbE5hbWUpO1xuXG4gICAgICB0aGlzLmNoYW5uZWwub25tZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQ8QXV0aFN5bmNFdmVudD4pID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVFdmVudChldmVudC5kYXRhKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY2hhbm5lbC5vbm1lc3NhZ2VlcnJvciA9ICgpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbVmFsdGVjaEF1dGhdIEVycm9yIGVuIEJyb2FkY2FzdENoYW5uZWwsIHVzYW5kbyBmYWxsYmFjaycpO1xuICAgICAgICB0aGlzLmNoYW5uZWw/LmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY2hhbm5lbCA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5pdFN0b3JhZ2VFdmVudHMoKTtcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBCcm9hZGNhc3RDaGFubmVsIG5vIGRpc3BvbmlibGUsIHVzYXIgZmFsbGJhY2tcbiAgICAgIHRoaXMuaW5pdFN0b3JhZ2VFdmVudHMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSBmYWxsYmFjayBjb24gc3RvcmFnZSBldmVudHMuXG4gICAqL1xuICBwcml2YXRlIGluaXRTdG9yYWdlRXZlbnRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSBgJHt0aGlzLmNvbmZpZz8uc3RvcmFnZVByZWZpeH1zeW5jX2V2ZW50YDtcblxuICAgIHRoaXMuc3RvcmFnZUxpc3RlbmVyID0gKGV2ZW50OiBTdG9yYWdlRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09IHN0b3JhZ2VLZXkgJiYgZXZlbnQubmV3VmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzeW5jRXZlbnQ6IEF1dGhTeW5jRXZlbnQgPSBKU09OLnBhcnNlKGV2ZW50Lm5ld1ZhbHVlKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUV2ZW50KHN5bmNFdmVudCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIElnbm9yYXIgZXZlbnRvcyBtYWwgZm9ybWFkb3NcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIHRoaXMuc3RvcmFnZUxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnbDrWEgZXZlbnRvIHZpYSBsb2NhbFN0b3JhZ2UgKGZhbGxiYWNrKS5cbiAgICovXG4gIHByaXZhdGUgYnJvYWRjYXN0VmlhU3RvcmFnZShldmVudDogQXV0aFN5bmNFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSBgJHt0aGlzLmNvbmZpZz8uc3RvcmFnZVByZWZpeH1zeW5jX2V2ZW50YDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBFc2NyaWJpciB5IGx1ZWdvIGxpbXBpYXIgcGFyYSBwZXJtaXRpciBtw7psdGlwbGVzIGV2ZW50b3MgZGVsIG1pc21vIHRpcG9cbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHN0b3JhZ2VLZXksIEpTT04uc3RyaW5naWZ5KGV2ZW50KSk7XG4gICAgICAvLyBVc2FyIHNldFRpbWVvdXQgcGFyYSBwZXJtaXRpciBxdWUgb3RyYXMgcGVzdGHDsWFzIGxlYW4gZWwgdmFsb3JcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShzdG9yYWdlS2V5KTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tWYWx0ZWNoQXV0aF0gRXJyb3IgZW52aWFuZG8gZXZlbnRvIHZpYSBzdG9yYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqYSB1biBldmVudG8gcmVjaWJpZG8uXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUV2ZW50KGV2ZW50OiBBdXRoU3luY0V2ZW50KTogdm9pZCB7XG4gICAgLy8gVmVyaWZpY2FyIHF1ZSBlbCBldmVudG8gbm8gc2VhIG11eSBhbnRpZ3VvIChtw6FzIGRlIDUgc2VndW5kb3MpXG4gICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIGV2ZW50LnRpbWVzdGFtcDtcbiAgICBpZiAoYWdlID4gNTAwMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoZXZlbnQpO1xuICB9XG59XG4iXX0=
|
package/esm2022/lib/version.mjs
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Current version of valtech-components.
|
|
3
3
|
* This is automatically updated during the publish process.
|
|
4
4
|
*/
|
|
5
|
-
export const VERSION = '2.0.
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
export const VERSION = '2.0.904';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC45MDQnO1xuIl19
|
|
@@ -53,7 +53,7 @@ import 'prismjs/components/prism-json';
|
|
|
53
53
|
* Current version of valtech-components.
|
|
54
54
|
* This is automatically updated during the publish process.
|
|
55
55
|
*/
|
|
56
|
-
const VERSION = '2.0.
|
|
56
|
+
const VERSION = '2.0.904';
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
59
|
* Servicio para gestionar presets de componentes.
|
|
@@ -21912,7 +21912,7 @@ class AuthStorageService {
|
|
|
21912
21912
|
constructor(config, platformId) {
|
|
21913
21913
|
this.config = config;
|
|
21914
21914
|
this.isBrowser = isPlatformBrowser(platformId);
|
|
21915
|
-
const prefix = this.config
|
|
21915
|
+
const prefix = this.config?.storagePrefix || 'valtech_auth_';
|
|
21916
21916
|
this.keys = {
|
|
21917
21917
|
ACCESS_TOKEN: `${prefix}access_token`,
|
|
21918
21918
|
REFRESH_TOKEN: `${prefix}refresh_token`,
|
|
@@ -22092,7 +22092,7 @@ class AuthSyncService {
|
|
|
22092
22092
|
/** Observable de eventos de sincronización */
|
|
22093
22093
|
this.onEvent$ = this.eventSubject.asObservable();
|
|
22094
22094
|
this.isBrowser = isPlatformBrowser(platformId);
|
|
22095
|
-
const prefix = this.config
|
|
22095
|
+
const prefix = this.config?.storagePrefix || 'valtech_auth_';
|
|
22096
22096
|
this.channelName = `${prefix}sync_channel`;
|
|
22097
22097
|
}
|
|
22098
22098
|
/**
|
|
@@ -22100,7 +22100,7 @@ class AuthSyncService {
|
|
|
22100
22100
|
* SSR-noop — sync de pestañas solo aplica en browser.
|
|
22101
22101
|
*/
|
|
22102
22102
|
start() {
|
|
22103
|
-
if (!this.config
|
|
22103
|
+
if (!this.config?.enableTabSync || !this.isBrowser) {
|
|
22104
22104
|
return;
|
|
22105
22105
|
}
|
|
22106
22106
|
// Intentar usar BroadcastChannel API (mejor rendimiento)
|
|
@@ -22129,7 +22129,7 @@ class AuthSyncService {
|
|
|
22129
22129
|
* Envía un evento a otras pestañas.
|
|
22130
22130
|
*/
|
|
22131
22131
|
broadcast(event) {
|
|
22132
|
-
if (!this.config
|
|
22132
|
+
if (!this.config?.enableTabSync || !this.isBrowser) {
|
|
22133
22133
|
return;
|
|
22134
22134
|
}
|
|
22135
22135
|
const fullEvent = {
|
|
@@ -22173,7 +22173,7 @@ class AuthSyncService {
|
|
|
22173
22173
|
* Inicializa fallback con storage events.
|
|
22174
22174
|
*/
|
|
22175
22175
|
initStorageEvents() {
|
|
22176
|
-
const storageKey = `${this.config
|
|
22176
|
+
const storageKey = `${this.config?.storagePrefix}sync_event`;
|
|
22177
22177
|
this.storageListener = (event) => {
|
|
22178
22178
|
if (event.key === storageKey && event.newValue) {
|
|
22179
22179
|
try {
|
|
@@ -22191,7 +22191,7 @@ class AuthSyncService {
|
|
|
22191
22191
|
* Envía evento via localStorage (fallback).
|
|
22192
22192
|
*/
|
|
22193
22193
|
broadcastViaStorage(event) {
|
|
22194
|
-
const storageKey = `${this.config
|
|
22194
|
+
const storageKey = `${this.config?.storagePrefix}sync_event`;
|
|
22195
22195
|
try {
|
|
22196
22196
|
// Escribir y luego limpiar para permitir múltiples eventos del mismo tipo
|
|
22197
22197
|
localStorage.setItem(storageKey, JSON.stringify(event));
|
|
@@ -25273,7 +25273,7 @@ class OAuthService {
|
|
|
25273
25273
|
return new Observable(observer => {
|
|
25274
25274
|
// Construir URL de inicio
|
|
25275
25275
|
const redirectUri = `${window.location.origin}/auth/oauth/callback`;
|
|
25276
|
-
const startUrl = `${this.config
|
|
25276
|
+
const startUrl = `${this.config?.apiUrl}/v2/auth/oauth/${provider}/start?redirect_uri=${encodeURIComponent(redirectUri)}`;
|
|
25277
25277
|
// Abrir popup centrado
|
|
25278
25278
|
const width = 500;
|
|
25279
25279
|
const height = 600;
|
|
@@ -25378,7 +25378,7 @@ class OAuthService {
|
|
|
25378
25378
|
startLinkFlow(provider) {
|
|
25379
25379
|
return new Observable(observer => {
|
|
25380
25380
|
const redirectUri = `${window.location.origin}/auth/oauth/callback`;
|
|
25381
|
-
const startUrl = `${this.config
|
|
25381
|
+
const startUrl = `${this.config?.apiUrl}/v2/auth/oauth/link/${provider}/start?redirect_uri=${encodeURIComponent(redirectUri)}`;
|
|
25382
25382
|
const width = 500;
|
|
25383
25383
|
const height = 600;
|
|
25384
25384
|
const left = window.screenX + (window.outerWidth - width) / 2;
|
|
@@ -25429,7 +25429,7 @@ class OAuthService {
|
|
|
25429
25429
|
*/
|
|
25430
25430
|
getLinkedProviders() {
|
|
25431
25431
|
return this.http
|
|
25432
|
-
.get(`${this.config
|
|
25432
|
+
.get(`${this.config?.apiUrl}/v2/auth/oauth/providers`)
|
|
25433
25433
|
.pipe(catchError(error => throwError(() => ({
|
|
25434
25434
|
code: error.error?.code || 'FETCH_ERROR',
|
|
25435
25435
|
message: error.error?.message || 'Error al obtener proveedores vinculados',
|
|
@@ -25440,7 +25440,7 @@ class OAuthService {
|
|
|
25440
25440
|
*/
|
|
25441
25441
|
unlinkProvider(provider) {
|
|
25442
25442
|
return this.http
|
|
25443
|
-
.post(`${this.config
|
|
25443
|
+
.post(`${this.config?.apiUrl}/v2/auth/oauth/unlink`, { provider })
|
|
25444
25444
|
.pipe(catchError(error => throwError(() => ({
|
|
25445
25445
|
code: error.error?.code || 'UNLINK_ERROR',
|
|
25446
25446
|
message: error.error?.message || 'Error al desvincular proveedor',
|
|
@@ -25451,7 +25451,7 @@ class OAuthService {
|
|
|
25451
25451
|
*/
|
|
25452
25452
|
setPassword(password) {
|
|
25453
25453
|
return this.http
|
|
25454
|
-
.post(`${this.config
|
|
25454
|
+
.post(`${this.config?.apiUrl}/v2/auth/oauth/set-password`, { password })
|
|
25455
25455
|
.pipe(catchError(error => throwError(() => ({
|
|
25456
25456
|
code: error.error?.code || 'SET_PASSWORD_ERROR',
|
|
25457
25457
|
message: error.error?.message || 'Error al establecer contraseña',
|
|
@@ -25462,7 +25462,7 @@ class OAuthService {
|
|
|
25462
25462
|
*/
|
|
25463
25463
|
hasPassword() {
|
|
25464
25464
|
return this.http
|
|
25465
|
-
.get(`${this.config
|
|
25465
|
+
.get(`${this.config?.apiUrl}/v2/auth/oauth/has-password`)
|
|
25466
25466
|
.pipe(catchError(error => throwError(() => ({
|
|
25467
25467
|
code: error.error?.code || 'CHECK_PASSWORD_ERROR',
|
|
25468
25468
|
message: error.error?.message || 'Error al verificar contraseña',
|
|
@@ -25873,7 +25873,7 @@ class AuthService {
|
|
|
25873
25873
|
}
|
|
25874
25874
|
}
|
|
25875
25875
|
// 5. Iniciar sincronización entre pestañas
|
|
25876
|
-
if (this.config
|
|
25876
|
+
if (this.config?.enableTabSync) {
|
|
25877
25877
|
this.syncService.start();
|
|
25878
25878
|
this.syncSubscription = this.syncService.onEvent$.subscribe(event => this.handleSyncEvent(event));
|
|
25879
25879
|
}
|
|
@@ -26106,7 +26106,7 @@ class AuthService {
|
|
|
26106
26106
|
this.stateService.updateRefreshToken(response.refreshToken); // NUEVO: guardar refresh rotado
|
|
26107
26107
|
this.storageService.saveAccessToken(response.accessToken, expiresAt);
|
|
26108
26108
|
this.storageService.saveRefreshToken(response.refreshToken); // NUEVO: persistir refresh rotado
|
|
26109
|
-
if (this.config
|
|
26109
|
+
if (this.config?.enableFirebaseIntegration && response.firebaseToken) {
|
|
26110
26110
|
this.signInWithFirebase(response.firebaseToken);
|
|
26111
26111
|
}
|
|
26112
26112
|
this.startRefreshTimer();
|
|
@@ -26192,7 +26192,7 @@ class AuthService {
|
|
|
26192
26192
|
this.signOutFirebase();
|
|
26193
26193
|
this.clearState();
|
|
26194
26194
|
this.syncService.broadcast({ type: 'LOGOUT' });
|
|
26195
|
-
this.router.navigate([this.config
|
|
26195
|
+
this.router.navigate([this.config?.loginRoute]);
|
|
26196
26196
|
}
|
|
26197
26197
|
// =============================================
|
|
26198
26198
|
// MFA SETUP (usuario autenticado)
|
|
@@ -26407,7 +26407,7 @@ class AuthService {
|
|
|
26407
26407
|
this.signOutFirebase();
|
|
26408
26408
|
this.clearState();
|
|
26409
26409
|
this.syncService.broadcast({ type: 'LOGOUT' });
|
|
26410
|
-
this.router.navigate([this.config
|
|
26410
|
+
this.router.navigate([this.config?.loginRoute]);
|
|
26411
26411
|
}
|
|
26412
26412
|
}), catchError(error => this.handleAuthError(error)));
|
|
26413
26413
|
}
|
|
@@ -26484,11 +26484,11 @@ class AuthService {
|
|
|
26484
26484
|
// PRIVATE METHODS
|
|
26485
26485
|
// =============================================
|
|
26486
26486
|
get baseUrl() {
|
|
26487
|
-
return `${this.config
|
|
26487
|
+
return `${this.config?.apiUrl}${this.config?.authPrefix}`;
|
|
26488
26488
|
}
|
|
26489
26489
|
/** Base for /v2/users endpoints (separate from /v2/auth). */
|
|
26490
26490
|
get usersBaseUrl() {
|
|
26491
|
-
return `${this.config
|
|
26491
|
+
return `${this.config?.apiUrl}/v2/users`;
|
|
26492
26492
|
}
|
|
26493
26493
|
handleSuccessfulAuth(response) {
|
|
26494
26494
|
const expiresAt = Date.now() + response.expiresIn * 1000;
|
|
@@ -26521,18 +26521,18 @@ class AuthService {
|
|
|
26521
26521
|
this.syncService.broadcast({ type: 'LOGIN' });
|
|
26522
26522
|
// Integración con Firebase
|
|
26523
26523
|
console.log('[ValtechAuth] handleSuccessfulAuth - Firebase check:', {
|
|
26524
|
-
enableFirebaseIntegration: this.config
|
|
26524
|
+
enableFirebaseIntegration: this.config?.enableFirebaseIntegration,
|
|
26525
26525
|
hasFirebaseTokenKey: 'firebaseToken' in response,
|
|
26526
26526
|
firebaseTokenValue: !!response.firebaseToken,
|
|
26527
26527
|
firebaseTokenLength: response.firebaseToken?.length || 0,
|
|
26528
26528
|
});
|
|
26529
|
-
if (this.config
|
|
26529
|
+
if (this.config?.enableFirebaseIntegration &&
|
|
26530
26530
|
'firebaseToken' in response &&
|
|
26531
26531
|
response.firebaseToken) {
|
|
26532
26532
|
console.log('[ValtechAuth] Calling signInWithFirebase with token length:', response.firebaseToken.length);
|
|
26533
26533
|
this.signInWithFirebase(response.firebaseToken);
|
|
26534
26534
|
}
|
|
26535
|
-
else if (this.config
|
|
26535
|
+
else if (this.config?.enableFirebaseIntegration) {
|
|
26536
26536
|
// El login NO trajo firebaseToken (ej. flujo OAuth que lo perdió). En vez
|
|
26537
26537
|
// de quedar sin sesión de Firebase, recurrimos al fallback self-healing:
|
|
26538
26538
|
// /refresh sí devuelve un firebaseToken confiable.
|
|
@@ -26543,7 +26543,7 @@ class AuthService {
|
|
|
26543
26543
|
console.log('[ValtechAuth] Firebase signin skipped - integración Firebase desactivada');
|
|
26544
26544
|
}
|
|
26545
26545
|
// Registro automático de dispositivo para push notifications
|
|
26546
|
-
if (this.config
|
|
26546
|
+
if (this.config?.enableDeviceRegistration) {
|
|
26547
26547
|
this.registerDeviceIfNeeded(); // fire-and-forget
|
|
26548
26548
|
}
|
|
26549
26549
|
// Sincronizar idioma del usuario con i18n
|
|
@@ -26595,7 +26595,7 @@ class AuthService {
|
|
|
26595
26595
|
const state = this.stateService.state();
|
|
26596
26596
|
if (!state.expiresAt)
|
|
26597
26597
|
return;
|
|
26598
|
-
const refreshBeforeMs = (this.config
|
|
26598
|
+
const refreshBeforeMs = (this.config?.refreshBeforeExpiry || 60) * 1000;
|
|
26599
26599
|
const refreshAt = state.expiresAt - refreshBeforeMs;
|
|
26600
26600
|
const delay = refreshAt - Date.now();
|
|
26601
26601
|
if (delay > 0) {
|
|
@@ -26640,7 +26640,7 @@ class AuthService {
|
|
|
26640
26640
|
case 'LOGOUT':
|
|
26641
26641
|
this.stateService.reset();
|
|
26642
26642
|
this.stopRefreshTimer();
|
|
26643
|
-
this.router.navigate([this.config
|
|
26643
|
+
this.router.navigate([this.config?.loginRoute]);
|
|
26644
26644
|
break;
|
|
26645
26645
|
case 'PERMISSIONS_UPDATE': {
|
|
26646
26646
|
const perms = this.storageService.loadPermissions();
|
|
@@ -26686,7 +26686,7 @@ class AuthService {
|
|
|
26686
26686
|
}
|
|
26687
26687
|
}
|
|
26688
26688
|
async signOutFirebase() {
|
|
26689
|
-
if (!this.config
|
|
26689
|
+
if (!this.config?.enableFirebaseIntegration)
|
|
26690
26690
|
return;
|
|
26691
26691
|
try {
|
|
26692
26692
|
if (this.firebaseService) {
|
|
@@ -26717,7 +26717,7 @@ class AuthService {
|
|
|
26717
26717
|
* Fire-and-forget: se invoca con `void` para no demorar `initialize()`.
|
|
26718
26718
|
*/
|
|
26719
26719
|
async ensureFirebaseSessionOnBootstrap() {
|
|
26720
|
-
if (!this.config
|
|
26720
|
+
if (!this.config?.enableFirebaseIntegration || !this.firebaseService)
|
|
26721
26721
|
return;
|
|
26722
26722
|
// Dar a la persistencia IndexedDB propia de Firebase Auth una oportunidad
|
|
26723
26723
|
// de auto-restaurarse (navegador normal). En una PWA standalone de iOS
|
|
@@ -26743,7 +26743,7 @@ class AuthService {
|
|
|
26743
26743
|
* desde el debug-console qué disparó el fallback.
|
|
26744
26744
|
*/
|
|
26745
26745
|
async reestablishFirebaseViaRefresh(reason) {
|
|
26746
|
-
if (!this.config
|
|
26746
|
+
if (!this.config?.enableFirebaseIntegration || !this.firebaseService)
|
|
26747
26747
|
return;
|
|
26748
26748
|
console.log(`[FBAuth] fallback — re-estableciendo Firebase vía /refresh (motivo: ${reason})`);
|
|
26749
26749
|
try {
|
|
@@ -26816,7 +26816,7 @@ class AuthService {
|
|
|
26816
26816
|
if (token) {
|
|
26817
26817
|
// Eliminar del backend
|
|
26818
26818
|
await firstValueFrom(this.http
|
|
26819
|
-
.request('DELETE', `${this.config
|
|
26819
|
+
.request('DELETE', `${this.config?.apiUrl}/v2/users/me/devices/by-token`, {
|
|
26820
26820
|
body: { token },
|
|
26821
26821
|
})
|
|
26822
26822
|
.pipe(catchError(() => of(null))));
|
|
@@ -26886,7 +26886,7 @@ class AuthService {
|
|
|
26886
26886
|
}
|
|
26887
26887
|
// Registrar en backend
|
|
26888
26888
|
const { platform, browser, os } = this.detectPlatformInfo();
|
|
26889
|
-
const response = await firstValueFrom(this.http.post(`${this.config
|
|
26889
|
+
const response = await firstValueFrom(this.http.post(`${this.config?.apiUrl}/v2/users/me/devices`, {
|
|
26890
26890
|
token,
|
|
26891
26891
|
platform,
|
|
26892
26892
|
browser,
|
|
@@ -26909,7 +26909,7 @@ class AuthService {
|
|
|
26909
26909
|
*/
|
|
26910
26910
|
async registerDeviceIfNeeded() {
|
|
26911
26911
|
// Solo si está habilitado y messaging está disponible
|
|
26912
|
-
if (!this.config
|
|
26912
|
+
if (!this.config?.enableDeviceRegistration || !this.messagingService) {
|
|
26913
26913
|
return false;
|
|
26914
26914
|
}
|
|
26915
26915
|
try {
|
|
@@ -26929,7 +26929,7 @@ class AuthService {
|
|
|
26929
26929
|
}
|
|
26930
26930
|
// Registrar en backend
|
|
26931
26931
|
const { platform, browser, os } = this.detectPlatformInfo();
|
|
26932
|
-
await firstValueFrom(this.http.post(`${this.config
|
|
26932
|
+
await firstValueFrom(this.http.post(`${this.config?.apiUrl}/v2/users/me/devices`, {
|
|
26933
26933
|
token,
|
|
26934
26934
|
platform,
|
|
26935
26935
|
browser,
|
|
@@ -26948,7 +26948,7 @@ class AuthService {
|
|
|
26948
26948
|
* Elimina el dispositivo del backend y borra el token FCM.
|
|
26949
26949
|
*/
|
|
26950
26950
|
async unregisterDevice() {
|
|
26951
|
-
if (!this.config
|
|
26951
|
+
if (!this.config?.enableDeviceRegistration || !this.messagingService) {
|
|
26952
26952
|
return;
|
|
26953
26953
|
}
|
|
26954
26954
|
try {
|
|
@@ -26956,7 +26956,7 @@ class AuthService {
|
|
|
26956
26956
|
if (token) {
|
|
26957
26957
|
// Delete from backend (fire and forget)
|
|
26958
26958
|
this.http
|
|
26959
|
-
.request('DELETE', `${this.config
|
|
26959
|
+
.request('DELETE', `${this.config?.apiUrl}/v2/users/me/devices/by-token`, {
|
|
26960
26960
|
body: { token },
|
|
26961
26961
|
})
|
|
26962
26962
|
.pipe(catchError(() => of(null)))
|
|
@@ -30199,7 +30199,7 @@ class DeviceService {
|
|
|
30199
30199
|
this.http = http;
|
|
30200
30200
|
}
|
|
30201
30201
|
get baseUrl() {
|
|
30202
|
-
return `${this.config
|
|
30202
|
+
return `${this.config?.apiUrl}/v2/users/me/devices`;
|
|
30203
30203
|
}
|
|
30204
30204
|
/**
|
|
30205
30205
|
* Lista todos los dispositivos registrados del usuario.
|
|
@@ -30254,7 +30254,7 @@ class DeviceService {
|
|
|
30254
30254
|
* ```
|
|
30255
30255
|
*/
|
|
30256
30256
|
validateAction(token) {
|
|
30257
|
-
return this.http.post(`${this.config
|
|
30257
|
+
return this.http.post(`${this.config?.apiUrl}/v2/actions/validate`, { token });
|
|
30258
30258
|
}
|
|
30259
30259
|
/**
|
|
30260
30260
|
* Ejecuta una acción de dispositivo desde un token de email.
|
|
@@ -30277,7 +30277,7 @@ class DeviceService {
|
|
|
30277
30277
|
*/
|
|
30278
30278
|
executeAction(token) {
|
|
30279
30279
|
// Usa el endpoint unificado de acciones
|
|
30280
|
-
return this.http.post(`${this.config
|
|
30280
|
+
return this.http.post(`${this.config?.apiUrl}/v2/actions/execute`, { token }).pipe(map$1(response => ({
|
|
30281
30281
|
operationId: response.operationId,
|
|
30282
30282
|
success: response.success,
|
|
30283
30283
|
message: response.message,
|
|
@@ -30336,7 +30336,7 @@ class SessionService {
|
|
|
30336
30336
|
this.http = http;
|
|
30337
30337
|
}
|
|
30338
30338
|
get baseUrl() {
|
|
30339
|
-
return `${this.config
|
|
30339
|
+
return `${this.config?.apiUrl}/v2/users/me/sessions`;
|
|
30340
30340
|
}
|
|
30341
30341
|
/**
|
|
30342
30342
|
* Lista todas las sesiones activas del usuario.
|
|
@@ -30659,7 +30659,7 @@ class HandoffService {
|
|
|
30659
30659
|
const tokenParam = options.tokenParam ?? HANDOFF_TOKEN_PARAM;
|
|
30660
30660
|
const routeParam = options.routeParam ?? HANDOFF_ROUTE_PARAM;
|
|
30661
30661
|
const defaultRoute = options.defaultRoute ?? '/';
|
|
30662
|
-
const errorRoute = options.errorRoute ?? this.config
|
|
30662
|
+
const errorRoute = options.errorRoute ?? this.config?.loginRoute ?? '/login';
|
|
30663
30663
|
const params = new URLSearchParams(window.location.search);
|
|
30664
30664
|
const token = params.get(tokenParam);
|
|
30665
30665
|
if (!token) {
|
|
@@ -30689,7 +30689,7 @@ class HandoffService {
|
|
|
30689
30689
|
});
|
|
30690
30690
|
}
|
|
30691
30691
|
get baseUrl() {
|
|
30692
|
-
return `${this.config
|
|
30692
|
+
return `${this.config?.apiUrl}${this.config?.authPrefix}`;
|
|
30693
30693
|
}
|
|
30694
30694
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HandoffService, deps: [{ token: VALTECH_AUTH_CONFIG, optional: true }, { token: i1$8.HttpClient }, { token: AuthService }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
30695
30695
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HandoffService, providedIn: 'root' }); }
|
|
@@ -30877,7 +30877,7 @@ class NotificationActionService {
|
|
|
30877
30877
|
if (!route) {
|
|
30878
30878
|
return 'no-action-route';
|
|
30879
30879
|
}
|
|
30880
|
-
const currentApp = this.config
|
|
30880
|
+
const currentApp = this.config?.appId;
|
|
30881
30881
|
const targetApp = notif.appId;
|
|
30882
30882
|
// 2) Cross-app: handoff + full redirect
|
|
30883
30883
|
//
|
|
@@ -30887,7 +30887,7 @@ class NotificationActionService {
|
|
|
30887
30887
|
if (targetApp && currentApp && targetApp !== currentApp) {
|
|
30888
30888
|
try {
|
|
30889
30889
|
const resp = await firstValueFrom(this.handoff.createHandoff({ targetAppId: targetApp, route }));
|
|
30890
|
-
const baseUrl = resp.targetBaseUrl ?? this.config
|
|
30890
|
+
const baseUrl = resp.targetBaseUrl ?? this.config?.appUrls?.[targetApp];
|
|
30891
30891
|
if (!baseUrl) {
|
|
30892
30892
|
console.warn(`[NotificationAction] No baseUrl for app '${targetApp}' — backend did not return targetBaseUrl and no appUrls fallback configured`);
|
|
30893
30893
|
return 'cross-app-unconfigured';
|