@eo-sdk/client 10.6.11 → 10.6.12
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/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts.map +1 -1
- package/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.d.ts.map +1 -1
- package/app/eo-framework/inbox-details/inbox-details.component.d.ts.map +1 -1
- package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts +2 -0
- package/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.d.ts.map +1 -1
- package/esm2020/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2020/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +18 -1
- package/esm2020/app/eo-framework/app-shell/app-bar/context-search/context-search.component.mjs +3 -3
- package/esm2020/app/eo-framework/grid/extensions/filter/custom/custom-filter.component.mjs +2 -1
- package/esm2020/app/eo-framework/grid/grid.component.mjs +2 -2
- package/esm2020/app/eo-framework/inbox-details/inbox-details.component.mjs +3 -1
- package/esm2020/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +3 -3
- package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +10 -3
- package/esm2020/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.mjs +2 -2
- package/fesm2015/eo-sdk-client.mjs +37 -11
- package/fesm2015/eo-sdk-client.mjs.map +1 -1
- package/fesm2020/eo-sdk-client.mjs +37 -11
- package/fesm2020/eo-sdk-client.mjs.map +1 -1
- package/misc/scripts/exclude-core-ng-package.js +11 -0
- package/package.json +2 -10
- package/esm2020/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.mjs +0 -5
- package/esm2020/projects/eo-sdk/core/lib/config/core-config.mjs +0 -23
- package/esm2020/projects/eo-sdk/core/lib/config/core-init.service.mjs +0 -71
- package/esm2020/projects/eo-sdk/core/lib/config/core-init.tokens.mjs +0 -8
- package/esm2020/projects/eo-sdk/core/lib/config/initialize-module.mjs +0 -11
- package/esm2020/projects/eo-sdk/core/lib/config/missing-translation-handler.mjs +0 -15
- package/esm2020/projects/eo-sdk/core/lib/config/translate-json-loader.mjs +0 -130
- package/esm2020/projects/eo-sdk/core/lib/environment.enaio.mjs +0 -12
- package/esm2020/projects/eo-sdk/core/lib/eo-core-shared.module.mjs +0 -24
- package/esm2020/projects/eo-sdk/core/lib/eo-core.module.mjs +0 -117
- package/esm2020/projects/eo-sdk/core/lib/interface/change-password.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/interface/event.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/interface/http-options.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/interface/logger.interface.mjs +0 -7
- package/esm2020/projects/eo-sdk/core/lib/interface/organization-objects.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/interface/tree-node.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/model/baseparams.model.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/model/bpm.model.mjs +0 -70
- package/esm2020/projects/eo-sdk/core/lib/model/custom-action.model.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/model/dms-object-history.model.mjs +0 -30
- package/esm2020/projects/eo-sdk/core/lib/model/dms-object.model.mjs +0 -138
- package/esm2020/projects/eo-sdk/core/lib/model/eo-error.model.mjs +0 -37
- package/esm2020/projects/eo-sdk/core/lib/model/eo-user.model.mjs +0 -86
- package/esm2020/projects/eo-sdk/core/lib/model/inbox-item.model.mjs +0 -36
- package/esm2020/projects/eo-sdk/core/lib/model/object-type.model.mjs +0 -39
- package/esm2020/projects/eo-sdk/core/lib/model/org.model.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/model/prepared-item.model.mjs +0 -35
- package/esm2020/projects/eo-sdk/core/lib/model/range-value.model.mjs +0 -45
- package/esm2020/projects/eo-sdk/core/lib/model/upload-file-item.model.mjs +0 -17
- package/esm2020/projects/eo-sdk/core/lib/model/upload-target.model.mjs +0 -50
- package/esm2020/projects/eo-sdk/core/lib/model/work-item-history.model.mjs +0 -54
- package/esm2020/projects/eo-sdk/core/lib/service/auth/auth-interceptor.mjs +0 -29
- package/esm2020/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/auth/auth.service.mjs +0 -215
- package/esm2020/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/backend/backend.service.mjs +0 -360
- package/esm2020/projects/eo-sdk/core/lib/service/bpm/bpm.service.mjs +0 -286
- package/esm2020/projects/eo-sdk/core/lib/service/cache/app-cache.service.mjs +0 -117
- package/esm2020/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.mjs +0 -60
- package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.mjs +0 -6
- package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.mjs +0 -100
- package/esm2020/projects/eo-sdk/core/lib/service/config/config.enum.mjs +0 -6
- package/esm2020/projects/eo-sdk/core/lib/service/config/config.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/config/config.service.mjs +0 -135
- package/esm2020/projects/eo-sdk/core/lib/service/dms/dms.service.mjs +0 -507
- package/esm2020/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/events/event.service.mjs +0 -44
- package/esm2020/projects/eo-sdk/core/lib/service/events/events.mjs +0 -27
- package/esm2020/projects/eo-sdk/core/lib/service/inbox/inbox.service.mjs +0 -111
- package/esm2020/projects/eo-sdk/core/lib/service/logger/console-log.service.mjs +0 -41
- package/esm2020/projects/eo-sdk/core/lib/service/logger/logger.mjs +0 -47
- package/esm2020/projects/eo-sdk/core/lib/service/notifications/notifications.service.mjs +0 -136
- package/esm2020/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/prepare/prepare.service.mjs +0 -305
- package/esm2020/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/search/search-query.model.mjs +0 -510
- package/esm2020/projects/eo-sdk/core/lib/service/search/search.service.mjs +0 -484
- package/esm2020/projects/eo-sdk/core/lib/service/signing/signing.service.mjs +0 -60
- package/esm2020/projects/eo-sdk/core/lib/service/storage/local-storage.service.mjs +0 -111
- package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.mjs +0 -216
- package/esm2020/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.mjs +0 -98
- package/esm2020/projects/eo-sdk/core/lib/service/system/system.service.mjs +0 -345
- package/esm2020/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/system-status/system-status.service.mjs +0 -104
- package/esm2020/projects/eo-sdk/core/lib/service/system-status/system.status.enum.mjs +0 -9
- package/esm2020/projects/eo-sdk/core/lib/service/system-status/system.status.interface.mjs +0 -2
- package/esm2020/projects/eo-sdk/core/lib/service/upload/upload.service.mjs +0 -46
- package/esm2020/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.mjs +0 -83
- package/esm2020/projects/eo-sdk/core/lib/service/user/user.service.mjs +0 -399
- package/esm2020/projects/eo-sdk/core/lib/util/utils.mjs +0 -304
- package/esm2020/projects/eo-sdk/core/public_api.mjs +0 -85
- package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs +0 -6124
- package/fesm2015/eo-sdk-client-projects-eo-sdk-core.mjs.map +0 -1
- package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs +0 -6139
- package/fesm2020/eo-sdk-client-projects-eo-sdk-core.mjs.map +0 -1
- package/projects/eo-sdk/core/README.md +0 -113
- package/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.d.ts.map +0 -1
- package/projects/eo-sdk/core/index.d.ts +0 -6
- package/projects/eo-sdk/core/lib/config/core-config.d.ts +0 -14
- package/projects/eo-sdk/core/lib/config/core-config.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/config/core-init.service.d.ts +0 -33
- package/projects/eo-sdk/core/lib/config/core-init.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/config/core-init.tokens.d.ts +0 -8
- package/projects/eo-sdk/core/lib/config/core-init.tokens.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/config/initialize-module.d.ts +0 -7
- package/projects/eo-sdk/core/lib/config/initialize-module.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/config/missing-translation-handler.d.ts +0 -14
- package/projects/eo-sdk/core/lib/config/missing-translation-handler.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/config/translate-json-loader.d.ts +0 -21
- package/projects/eo-sdk/core/lib/config/translate-json-loader.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/environment.enaio.d.ts +0 -6
- package/projects/eo-sdk/core/lib/environment.enaio.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/eo-core-shared.module.d.ts +0 -12
- package/projects/eo-sdk/core/lib/eo-core-shared.module.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/eo-core.module.d.ts +0 -46
- package/projects/eo-sdk/core/lib/eo-core.module.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/change-password.interface.d.ts +0 -8
- package/projects/eo-sdk/core/lib/interface/change-password.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/event.interface.d.ts +0 -14
- package/projects/eo-sdk/core/lib/interface/event.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/http-options.interface.d.ts +0 -17
- package/projects/eo-sdk/core/lib/interface/http-options.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/logger.interface.d.ts +0 -20
- package/projects/eo-sdk/core/lib/interface/logger.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/organization-objects.interface.d.ts +0 -20
- package/projects/eo-sdk/core/lib/interface/organization-objects.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/interface/tree-node.interface.d.ts +0 -24
- package/projects/eo-sdk/core/lib/interface/tree-node.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/baseparams.model.d.ts +0 -58
- package/projects/eo-sdk/core/lib/model/baseparams.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/bpm.model.d.ts +0 -253
- package/projects/eo-sdk/core/lib/model/bpm.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/custom-action.model.d.ts +0 -34
- package/projects/eo-sdk/core/lib/model/custom-action.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/dms-object-history.model.d.ts +0 -59
- package/projects/eo-sdk/core/lib/model/dms-object-history.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/dms-object.model.d.ts +0 -137
- package/projects/eo-sdk/core/lib/model/dms-object.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/eo-error.model.d.ts +0 -19
- package/projects/eo-sdk/core/lib/model/eo-error.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/eo-user.model.d.ts +0 -107
- package/projects/eo-sdk/core/lib/model/eo-user.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/inbox-item.model.d.ts +0 -71
- package/projects/eo-sdk/core/lib/model/inbox-item.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/object-type.model.d.ts +0 -125
- package/projects/eo-sdk/core/lib/model/object-type.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/org.model.d.ts +0 -94
- package/projects/eo-sdk/core/lib/model/org.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/prepared-item.model.d.ts +0 -190
- package/projects/eo-sdk/core/lib/model/prepared-item.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/range-value.model.d.ts +0 -22
- package/projects/eo-sdk/core/lib/model/range-value.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/upload-file-item.model.d.ts +0 -30
- package/projects/eo-sdk/core/lib/model/upload-file-item.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/upload-target.model.d.ts +0 -60
- package/projects/eo-sdk/core/lib/model/upload-target.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/model/work-item-history.model.d.ts +0 -52
- package/projects/eo-sdk/core/lib/model/work-item-history.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/auth/auth-interceptor.d.ts +0 -12
- package/projects/eo-sdk/core/lib/service/auth/auth-interceptor.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.d.ts +0 -23
- package/projects/eo-sdk/core/lib/service/auth/auth-profile.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/auth/auth.service.d.ts +0 -104
- package/projects/eo-sdk/core/lib/service/auth/auth.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.d.ts +0 -18
- package/projects/eo-sdk/core/lib/service/auth/gateway-info.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/backend/backend.service.d.ts +0 -209
- package/projects/eo-sdk/core/lib/service/backend/backend.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/bpm/bpm.service.d.ts +0 -150
- package/projects/eo-sdk/core/lib/service/bpm/bpm.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/cache/app-cache.service.d.ts +0 -59
- package/projects/eo-sdk/core/lib/service/cache/app-cache.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.d.ts +0 -54
- package/projects/eo-sdk/core/lib/service/capabilities/capabilities.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.d.ts +0 -35
- package/projects/eo-sdk/core/lib/service/capabilities/capabilities.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.d.ts +0 -5
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard-action.enum.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.d.ts +0 -16
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.d.ts +0 -49
- package/projects/eo-sdk/core/lib/service/clipboard/clipboard.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/config/config.enum.d.ts +0 -5
- package/projects/eo-sdk/core/lib/service/config/config.enum.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/config/config.interface.d.ts +0 -55
- package/projects/eo-sdk/core/lib/service/config/config.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/config/config.service.d.ts +0 -80
- package/projects/eo-sdk/core/lib/service/config/config.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts +0 -286
- package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.d.ts +0 -13
- package/projects/eo-sdk/core/lib/service/dms/dmsParams.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/events/event.service.d.ts +0 -31
- package/projects/eo-sdk/core/lib/service/events/event.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/events/events.d.ts +0 -27
- package/projects/eo-sdk/core/lib/service/events/events.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/inbox/inbox.service.d.ts +0 -66
- package/projects/eo-sdk/core/lib/service/inbox/inbox.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/logger/console-log.service.d.ts +0 -20
- package/projects/eo-sdk/core/lib/service/logger/console-log.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/logger/logger.d.ts +0 -25
- package/projects/eo-sdk/core/lib/service/logger/logger.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/notifications/notifications.service.d.ts +0 -78
- package/projects/eo-sdk/core/lib/service/notifications/notifications.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.d.ts +0 -9
- package/projects/eo-sdk/core/lib/service/prepare/objectTypes.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts +0 -189
- package/projects/eo-sdk/core/lib/service/prepare/prepare.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.d.ts +0 -10
- package/projects/eo-sdk/core/lib/service/search/search-filter-type.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/search/search-query.model.d.ts +0 -327
- package/projects/eo-sdk/core/lib/service/search/search-query.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/search/search.service.d.ts +0 -173
- package/projects/eo-sdk/core/lib/service/search/search.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/signing/signing.service.d.ts +0 -52
- package/projects/eo-sdk/core/lib/service/signing/signing.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/storage/local-storage.service.d.ts +0 -53
- package/projects/eo-sdk/core/lib/service/storage/local-storage.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.d.ts +0 -15
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries-subscription.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.d.ts +0 -108
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-queries.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.d.ts +0 -74
- package/projects/eo-sdk/core/lib/service/stored-queries/stored-query.model.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/system/system.service.d.ts +0 -125
- package/projects/eo-sdk/core/lib/service/system/system.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.d.ts +0 -53
- package/projects/eo-sdk/core/lib/service/system/systemdefinition.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/system-status/system-status.service.d.ts +0 -26
- package/projects/eo-sdk/core/lib/service/system-status/system-status.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/system-status/system.status.enum.d.ts +0 -8
- package/projects/eo-sdk/core/lib/service/system-status/system.status.enum.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/system-status/system.status.interface.d.ts +0 -8
- package/projects/eo-sdk/core/lib/service/system-status/system.status.interface.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/upload/upload.service.d.ts +0 -28
- package/projects/eo-sdk/core/lib/service/upload/upload.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.d.ts +0 -50
- package/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/service/user/user.service.d.ts +0 -216
- package/projects/eo-sdk/core/lib/service/user/user.service.d.ts.map +0 -1
- package/projects/eo-sdk/core/lib/util/utils.d.ts +0 -148
- package/projects/eo-sdk/core/lib/util/utils.d.ts.map +0 -1
- package/projects/eo-sdk/core/public_api.d.ts +0 -82
- package/projects/eo-sdk/core/public_api.d.ts.map +0 -1
package/esm2020/projects/eo-sdk/core/lib/service/upload-registry/upload-registry.service.mjs
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { ReplaySubject } from 'rxjs';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../prepare/prepare.service";
|
|
5
|
-
/**
|
|
6
|
-
* Service for registration of upload targets. Any app component can register itself
|
|
7
|
-
* to retrieve files dragged to the client. This way also plugins are able to fetch and
|
|
8
|
-
* process uploaded files.
|
|
9
|
-
*/
|
|
10
|
-
export class UploadRegistryService {
|
|
11
|
-
/**
|
|
12
|
-
* @ignore
|
|
13
|
-
*/
|
|
14
|
-
constructor(prepareService) {
|
|
15
|
-
this.prepareService = prepareService;
|
|
16
|
-
this._targets = [];
|
|
17
|
-
this.targetsSource = new ReplaySubject(1);
|
|
18
|
-
/**
|
|
19
|
-
* Stream of currently available upload targets
|
|
20
|
-
*/
|
|
21
|
-
this.uploadTargets$ = this.targetsSource.asObservable();
|
|
22
|
-
}
|
|
23
|
-
setOverlayActive(oa) {
|
|
24
|
-
this.overlayActive = oa;
|
|
25
|
-
}
|
|
26
|
-
isOverlayActive() {
|
|
27
|
-
return this.overlayActive;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Registers a new upload target.
|
|
31
|
-
* If there is an existing target with the same ID it will be updated.
|
|
32
|
-
*
|
|
33
|
-
* @param uploadTarget The target to be registered
|
|
34
|
-
*/
|
|
35
|
-
register(uploadTarget) {
|
|
36
|
-
if (uploadTarget.referenceObject) {
|
|
37
|
-
uploadTarget.description = `${(uploadTarget.type === 'object' && uploadTarget.referenceObject?.type?.label) ? `${uploadTarget.referenceObject.type.label}: ` : ''}${uploadTarget.referenceObject.title}`;
|
|
38
|
-
if (uploadTarget.subFolder) {
|
|
39
|
-
this.prepareService.getPrepareChildTypes(uploadTarget.referenceObject.id).subscribe((res) => {
|
|
40
|
-
if (this.isSubFolderAllowed(uploadTarget.subFolder.data, res.types)) {
|
|
41
|
-
uploadTarget.description += '; ' + uploadTarget.subFolder.name;
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
const target = this._targets.find(t => t.id === uploadTarget.id);
|
|
47
|
-
if (target) {
|
|
48
|
-
Object.assign(target, uploadTarget);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
this._targets.push(uploadTarget);
|
|
52
|
-
}
|
|
53
|
-
this.targetsSource.next(this._targets);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Checks if it is allowed to drop Files in SubFolders
|
|
57
|
-
*
|
|
58
|
-
* @param subFolder
|
|
59
|
-
* @param ObjectType[] locationTypes
|
|
60
|
-
* @returns boolean
|
|
61
|
-
*/
|
|
62
|
-
isSubFolderAllowed(subFolder, locationTypes) {
|
|
63
|
-
return !!locationTypes.find(lt => lt.name === subFolder.type);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Removes an upload target from the list of registered targets.
|
|
67
|
-
*
|
|
68
|
-
* @param uploadTargetId ID of the target to be removed
|
|
69
|
-
*/
|
|
70
|
-
unregister(uploadTargetId) {
|
|
71
|
-
this._targets = this._targets.filter((t) => t.id !== uploadTargetId);
|
|
72
|
-
this.targetsSource.next(this._targets);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
UploadRegistryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: UploadRegistryService, deps: [{ token: i1.PrepareService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
76
|
-
UploadRegistryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: UploadRegistryService, providedIn: 'root' });
|
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: UploadRegistryService, decorators: [{
|
|
78
|
-
type: Injectable,
|
|
79
|
-
args: [{
|
|
80
|
-
providedIn: 'root'
|
|
81
|
-
}]
|
|
82
|
-
}], ctorParameters: function () { return [{ type: i1.PrepareService }]; } });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXJlZ2lzdHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lby1zZGsvY29yZS9zcmMvbGliL3NlcnZpY2UvdXBsb2FkLXJlZ2lzdHJ5L3VwbG9hZC1yZWdpc3RyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLGFBQWEsRUFBYSxNQUFNLE1BQU0sQ0FBQzs7O0FBSy9DOzs7O0dBSUc7QUFLSCxNQUFNLE9BQU8scUJBQXFCO0lBVWhDOztPQUVHO0lBQ0gsWUFBb0IsY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBWDFDLGFBQVEsR0FBbUIsRUFBRSxDQUFDO1FBQzlCLGtCQUFhLEdBQUcsSUFBSSxhQUFhLENBQWlCLENBQUMsQ0FBQyxDQUFDO1FBRTdEOztXQUVHO1FBQ0ksbUJBQWMsR0FBK0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQU10RixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBVztRQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBQ0QsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsWUFBMEI7UUFFakMsSUFBSSxZQUFZLENBQUMsZUFBZSxFQUFFO1lBQ2hDLFlBQVksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLFlBQVksQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4TSxJQUFJLFlBQVksQ0FBQyxTQUFTLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDMUYsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNuRSxZQUFZLENBQUMsV0FBVyxJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztxQkFDaEU7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ3JDO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNsQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsa0JBQWtCLENBQUMsU0FBYyxFQUFFLGFBQTJCO1FBQzVELE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxjQUFzQjtRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLGNBQWMsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6QyxDQUFDOztrSEF0RVUscUJBQXFCO3NIQUFyQixxQkFBcUIsY0FGcEIsTUFBTTsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UmVwbGF5U3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1VwbG9hZFRhcmdldH0gZnJvbSAnLi4vLi4vbW9kZWwvdXBsb2FkLXRhcmdldC5tb2RlbCc7XG5pbXBvcnQge1ByZXBhcmVTZXJ2aWNlfSBmcm9tICcuLi9wcmVwYXJlL3ByZXBhcmUuc2VydmljZSc7XG5pbXBvcnQge09iamVjdFR5cGV9IGZyb20gJy4uLy4uL21vZGVsL29iamVjdC10eXBlLm1vZGVsJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciByZWdpc3RyYXRpb24gb2YgdXBsb2FkIHRhcmdldHMuIEFueSBhcHAgY29tcG9uZW50IGNhbiByZWdpc3RlciBpdHNlbGZcbiAqIHRvIHJldHJpZXZlIGZpbGVzIGRyYWdnZWQgdG8gdGhlIGNsaWVudC4gVGhpcyB3YXkgYWxzbyBwbHVnaW5zIGFyZSBhYmxlIHRvIGZldGNoIGFuZFxuICogcHJvY2VzcyB1cGxvYWRlZCBmaWxlcy5cbiAqL1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVcGxvYWRSZWdpc3RyeVNlcnZpY2Uge1xuXG4gIHByaXZhdGUgX3RhcmdldHM6IFVwbG9hZFRhcmdldFtdID0gW107XG4gIHByaXZhdGUgdGFyZ2V0c1NvdXJjZSA9IG5ldyBSZXBsYXlTdWJqZWN0PFVwbG9hZFRhcmdldFtdPigxKTtcbiAgcHJpdmF0ZSBvdmVybGF5QWN0aXZlOiBib29sZWFuO1xuICAvKipcbiAgICogU3RyZWFtIG9mIGN1cnJlbnRseSBhdmFpbGFibGUgdXBsb2FkIHRhcmdldHNcbiAgICovXG4gIHB1YmxpYyB1cGxvYWRUYXJnZXRzJDogT2JzZXJ2YWJsZTxVcGxvYWRUYXJnZXRbXT4gPSB0aGlzLnRhcmdldHNTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJlcGFyZVNlcnZpY2U6IFByZXBhcmVTZXJ2aWNlKSB7XG4gIH1cblxuICBzZXRPdmVybGF5QWN0aXZlKG9hOiBib29sZWFuKSB7XG4gICAgdGhpcy5vdmVybGF5QWN0aXZlID0gb2E7XG4gIH1cbiAgaXNPdmVybGF5QWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLm92ZXJsYXlBY3RpdmU7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgbmV3IHVwbG9hZCB0YXJnZXQuXG4gICAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHRhcmdldCB3aXRoIHRoZSBzYW1lIElEIGl0IHdpbGwgYmUgdXBkYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHVwbG9hZFRhcmdldCBUaGUgdGFyZ2V0IHRvIGJlIHJlZ2lzdGVyZWRcbiAgICovXG4gIHJlZ2lzdGVyKHVwbG9hZFRhcmdldDogVXBsb2FkVGFyZ2V0KSB7XG5cbiAgICBpZiAodXBsb2FkVGFyZ2V0LnJlZmVyZW5jZU9iamVjdCkge1xuICAgICAgdXBsb2FkVGFyZ2V0LmRlc2NyaXB0aW9uID0gYCR7KHVwbG9hZFRhcmdldC50eXBlID09PSAnb2JqZWN0JyAmJiB1cGxvYWRUYXJnZXQucmVmZXJlbmNlT2JqZWN0Py50eXBlPy5sYWJlbCkgPyBgJHt1cGxvYWRUYXJnZXQucmVmZXJlbmNlT2JqZWN0LnR5cGUubGFiZWx9OiBgIDogJyd9JHt1cGxvYWRUYXJnZXQucmVmZXJlbmNlT2JqZWN0LnRpdGxlfWA7XG4gICAgICAgaWYgKHVwbG9hZFRhcmdldC5zdWJGb2xkZXIpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlU2VydmljZS5nZXRQcmVwYXJlQ2hpbGRUeXBlcyh1cGxvYWRUYXJnZXQucmVmZXJlbmNlT2JqZWN0LmlkKS5zdWJzY3JpYmUoKHJlcykgPT4geyBcbiAgICAgICAgICBpZiAodGhpcy5pc1N1YkZvbGRlckFsbG93ZWQodXBsb2FkVGFyZ2V0LnN1YkZvbGRlci5kYXRhLCByZXMudHlwZXMpKSB7XG4gICAgICAgICAgICB1cGxvYWRUYXJnZXQuZGVzY3JpcHRpb24gKz0gJzsgJyArIHVwbG9hZFRhcmdldC5zdWJGb2xkZXIubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuX3RhcmdldHMuZmluZCh0ID0+IHQuaWQgPT09IHVwbG9hZFRhcmdldC5pZCk7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHVwbG9hZFRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RhcmdldHMucHVzaCh1cGxvYWRUYXJnZXQpO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldHNTb3VyY2UubmV4dCh0aGlzLl90YXJnZXRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgaXQgaXMgYWxsb3dlZCB0byBkcm9wIEZpbGVzIGluIFN1YkZvbGRlcnNcbiAgICpcbiAgICogQHBhcmFtIHN1YkZvbGRlclxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZVtdIGxvY2F0aW9uVHlwZXNcbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgaXNTdWJGb2xkZXJBbGxvd2VkKHN1YkZvbGRlcjogYW55LCBsb2NhdGlvblR5cGVzOiBPYmplY3RUeXBlW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFsb2NhdGlvblR5cGVzLmZpbmQobHQgPT4gbHQubmFtZSA9PT0gc3ViRm9sZGVyLnR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYW4gdXBsb2FkIHRhcmdldCBmcm9tIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgdGFyZ2V0cy5cbiAgICpcbiAgICogQHBhcmFtIHVwbG9hZFRhcmdldElkIElEIG9mIHRoZSB0YXJnZXQgdG8gYmUgcmVtb3ZlZFxuICAgKi9cbiAgdW5yZWdpc3Rlcih1cGxvYWRUYXJnZXRJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fdGFyZ2V0cyA9IHRoaXMuX3RhcmdldHMuZmlsdGVyKCh0KSA9PiB0LmlkICE9PSB1cGxvYWRUYXJnZXRJZCk7XG4gICAgdGhpcy50YXJnZXRzU291cmNlLm5leHQodGhpcy5fdGFyZ2V0cyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,399 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, forkJoin, of, EMPTY } from 'rxjs';
|
|
3
|
-
import { map, tap, debounceTime, filter, catchError } from 'rxjs/operators';
|
|
4
|
-
import { EoUser } from '../../model/eo-user.model';
|
|
5
|
-
import { Utils } from '../../util/utils';
|
|
6
|
-
import { EnaioEvent } from '../events/events';
|
|
7
|
-
import { Direction } from '../config/config.enum';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "../backend/backend.service";
|
|
10
|
-
import * as i2 from "@ngx-translate/core";
|
|
11
|
-
import * as i3 from "../logger/logger";
|
|
12
|
-
import * as i4 from "../events/event.service";
|
|
13
|
-
import * as i5 from "../system/system.service";
|
|
14
|
-
import * as i6 from "@angular/common/http";
|
|
15
|
-
import * as i7 from "../config/config.service";
|
|
16
|
-
/**
|
|
17
|
-
* Applications user service.
|
|
18
|
-
* To get the current user you have to subscribe to the services `user$` observable.
|
|
19
|
-
*
|
|
20
|
-
* ```javascript
|
|
21
|
-
* userService.user$.subscribe((user) => this.user = user);
|
|
22
|
-
* ```
|
|
23
|
-
*
|
|
24
|
-
* This way your component will be provided with an up-to-date user object no matter
|
|
25
|
-
* which component changes on of the users properties.
|
|
26
|
-
*/
|
|
27
|
-
export class UserService {
|
|
28
|
-
/**
|
|
29
|
-
* @ignore
|
|
30
|
-
*/
|
|
31
|
-
constructor(backend, translate, logger, eventService, system, http, config) {
|
|
32
|
-
this.backend = backend;
|
|
33
|
-
this.translate = translate;
|
|
34
|
-
this.logger = logger;
|
|
35
|
-
this.eventService = eventService;
|
|
36
|
-
this.system = system;
|
|
37
|
-
this.http = http;
|
|
38
|
-
this.config = config;
|
|
39
|
-
this.USER_FETCH_URI = '/user?favorites=true&privileges=true&roles=true&deputies=true&substitutesOf=true';
|
|
40
|
-
this.user = null;
|
|
41
|
-
this.userSource = new BehaviorSubject(this.user);
|
|
42
|
-
/**
|
|
43
|
-
* Observable emitting the current user
|
|
44
|
-
*/
|
|
45
|
-
this.user$ = this.userSource.asObservable();
|
|
46
|
-
this.favorites = null;
|
|
47
|
-
this.favoritesSource = new BehaviorSubject(this.favorites);
|
|
48
|
-
/**
|
|
49
|
-
* Observable emitting current users favorites
|
|
50
|
-
*/
|
|
51
|
-
this.favoritesGridData$ = this.favoritesSource.asObservable().pipe(debounceTime(100), filter(v => v));
|
|
52
|
-
this.favorites$ = this.favoritesGridData$.pipe(this.backend.gridDataFilter);
|
|
53
|
-
this.notifications = null;
|
|
54
|
-
this.notificationsSource = new BehaviorSubject(this.notifications);
|
|
55
|
-
/**
|
|
56
|
-
* Observable emitting current users recyclebin
|
|
57
|
-
*/
|
|
58
|
-
this.recycles = null;
|
|
59
|
-
this.recyclesSource = new BehaviorSubject(this.recycles);
|
|
60
|
-
this.recyclesGridData$ = this.recyclesSource.asObservable().pipe(debounceTime(100), filter(v => v));
|
|
61
|
-
this.recycles$ = this.recyclesGridData$.pipe(this.backend.gridDataFilter);
|
|
62
|
-
/**
|
|
63
|
-
* Observable emitting current users notifications
|
|
64
|
-
*/
|
|
65
|
-
this.notificationsGridData$ = this.notificationsSource.asObservable().pipe(debounceTime(100), filter(v => v));
|
|
66
|
-
this.notifications$ = this.notificationsGridData$.pipe(this.backend.gridDataFilter);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Gets the current user.
|
|
70
|
-
* @returns The current user or NULL if no user is logged in
|
|
71
|
-
*/
|
|
72
|
-
getCurrentUser() {
|
|
73
|
-
return this.user;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Set presence of the current user
|
|
77
|
-
* @param present Value to set the users presence to
|
|
78
|
-
*/
|
|
79
|
-
setPresence(present) {
|
|
80
|
-
if (present !== this.user.present) {
|
|
81
|
-
return this.backend.put('/user?presence=' + present)
|
|
82
|
-
.pipe(tap(_ => {
|
|
83
|
-
this.user.present = present;
|
|
84
|
-
this.userSource.next(this.user);
|
|
85
|
-
}));
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
return of(null);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
*
|
|
93
|
-
* @param uri
|
|
94
|
-
* @returns
|
|
95
|
-
*/
|
|
96
|
-
delUserImage(uri) {
|
|
97
|
-
return this.http.put(uri, null);
|
|
98
|
-
}
|
|
99
|
-
setUserImage(file) {
|
|
100
|
-
return this.backend.put(`/user/image`, file);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Sets the deputies for the current user
|
|
104
|
-
* @param deputiesNames Names of the users to be set as deputies
|
|
105
|
-
*/
|
|
106
|
-
setDeputies(deputiesNames) {
|
|
107
|
-
return this.backend.put(`/user/deputy?user=${deputiesNames.join('&user=')}`).pipe(tap(() => this.refreshCurrentUser().subscribe()));
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Change the users client locale
|
|
111
|
-
* @param iso ISO locale string to be set as new client locale
|
|
112
|
-
*/
|
|
113
|
-
changeClientLocale(iso) {
|
|
114
|
-
this.user.userSettings['clientlocale'] = iso;
|
|
115
|
-
this.backend
|
|
116
|
-
.put('/user/config/web', this.user.userSettings)
|
|
117
|
-
.subscribe(() => {
|
|
118
|
-
this.logger.debug('Changed client locale to \'' + iso + '\'');
|
|
119
|
-
this.translate.use(iso);
|
|
120
|
-
this.user.uiDirection = (this.config.getClientLocales().find(l => l.iso === iso) || {}).dir || Direction.LTR;
|
|
121
|
-
this.userSource.next(this.user);
|
|
122
|
-
this.eventService.trigger(EnaioEvent.CLIENT_LOCALE_CHANGED, iso);
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Change the users schema locale
|
|
127
|
-
* @param iso ISO locale string to be set as new schema locale
|
|
128
|
-
*/
|
|
129
|
-
changeSchemaLocale(iso) {
|
|
130
|
-
this.user.schemaLocale = iso;
|
|
131
|
-
return this.backend
|
|
132
|
-
.put('/user/locale/' + this.user.schemaLocale)
|
|
133
|
-
.pipe(tap(() => {
|
|
134
|
-
this.logger.debug('Changed schema locale to \'' + iso + '\'');
|
|
135
|
-
this.userSource.next(this.user);
|
|
136
|
-
this.backend.setHeader('Accept-Language', this.user.getSchemaLocale());
|
|
137
|
-
this.logger.debug('Loading system definition for new locale.');
|
|
138
|
-
this.system.getSystemDefinition(this.user).subscribe();
|
|
139
|
-
this.eventService.trigger(EnaioEvent.SCHEMA_LOCALE_CHANGED, iso);
|
|
140
|
-
}));
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Set a new current user
|
|
144
|
-
* @param res The user to be set as current user
|
|
145
|
-
*/
|
|
146
|
-
setCurrentUser(res) {
|
|
147
|
-
this.user = new EoUser(res);
|
|
148
|
-
this.passwordValidationSettings = res.passwortvalidation;
|
|
149
|
-
this.user.setImageBase(this.backend.getServiceBase());
|
|
150
|
-
this.backend.setHeader('Accept-Language', this.user.getSchemaLocale());
|
|
151
|
-
const languages = this.config.getClientLocales().map(lang => lang.iso);
|
|
152
|
-
let userLang = this.user.getClientLocale();
|
|
153
|
-
if (languages.indexOf(userLang) === -1) {
|
|
154
|
-
userLang = this.config.getDefaultClientLocale();
|
|
155
|
-
}
|
|
156
|
-
this.logger.debug('Setting client locale to \'' + userLang + '\'');
|
|
157
|
-
this.translate.use(userLang);
|
|
158
|
-
this.user.uiDirection = (this.config.getClientLocales().find(l => l.iso === userLang) || {}).dir || Direction.LTR;
|
|
159
|
-
this.userSource.next(this.user);
|
|
160
|
-
this.favorites = null;
|
|
161
|
-
this.favoritesSource.next(this.favorites);
|
|
162
|
-
this.notifications = null;
|
|
163
|
-
this.notificationsSource.next(this.notifications);
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Fetches the current users favorites
|
|
167
|
-
*/
|
|
168
|
-
getFavorites() {
|
|
169
|
-
// only favorite objects of type 'DMS_OBJECT', are accepted
|
|
170
|
-
// read more: http://jira.optimal-systems.de/browse/COOL-2316
|
|
171
|
-
return this.backend
|
|
172
|
-
.getJson('/user/favorites')
|
|
173
|
-
.pipe(map(res => res && res.filter(r => r.favoritetype === 'DMS_OBJECT')), tap(res => {
|
|
174
|
-
this.favorites = res;
|
|
175
|
-
this.favoritesSource.next(this.favorites);
|
|
176
|
-
}));
|
|
177
|
-
// .map(res => {
|
|
178
|
-
// let dmsObject = this.resolveObjectTypes(new DmsObject(res));
|
|
179
|
-
// return dmsObject;
|
|
180
|
-
// });
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Soft update for the users favorites
|
|
184
|
-
* @param id ID of the favorite to be updated
|
|
185
|
-
* @param item The new favorite item
|
|
186
|
-
* @param multi Whether or not to update multiple items
|
|
187
|
-
*/
|
|
188
|
-
updateFavorites(id, item, multi) {
|
|
189
|
-
if (this.backend.update(this.favorites, multi || [{ id, item }])) {
|
|
190
|
-
this.favoritesSource.next(this.favorites);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Gets the users notifications (resubmissions and subscriptions)
|
|
195
|
-
* @returns Resolved by list of the users notifications
|
|
196
|
-
*/
|
|
197
|
-
getNotifications() {
|
|
198
|
-
const notificationData = [
|
|
199
|
-
this.getSubscription(),
|
|
200
|
-
this.getResubmission()
|
|
201
|
-
];
|
|
202
|
-
return forkJoin(notificationData);
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Gets the users resubmissions
|
|
206
|
-
* @returns Collection of users resubmissions
|
|
207
|
-
*/
|
|
208
|
-
getResubmission() {
|
|
209
|
-
return this.backend.getJson('/messageprovider/resubmission/list').pipe(tap(response => {
|
|
210
|
-
this.notifications = response;
|
|
211
|
-
this.notificationsSource.next(this.notifications);
|
|
212
|
-
}));
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Gets the users subscriptions
|
|
216
|
-
* @returns Collection of users subscriptions
|
|
217
|
-
*/
|
|
218
|
-
getSubscription() {
|
|
219
|
-
return this.backend
|
|
220
|
-
.getJson('/messageprovider/subscription/list').pipe(tap(response => {
|
|
221
|
-
this.notifications = response;
|
|
222
|
-
this.notificationsSource.next(this.notifications);
|
|
223
|
-
}));
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Removes a notification
|
|
227
|
-
* @param id ID of the notification to be removed
|
|
228
|
-
* @param type The notifications type ('SUBSCRIPTION', 'RESUBMISSION')
|
|
229
|
-
*/
|
|
230
|
-
removeNotifications(id, type) {
|
|
231
|
-
let messagetype;
|
|
232
|
-
switch (type) {
|
|
233
|
-
case 'SUBSCRIPTION':
|
|
234
|
-
messagetype = 'subscription';
|
|
235
|
-
break;
|
|
236
|
-
case 'RESUBMISSION':
|
|
237
|
-
messagetype = 'resubmission';
|
|
238
|
-
break;
|
|
239
|
-
default:
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
return this.backend.del(`/messageprovider/${messagetype}/` + id).pipe(tap(res => this.updateNotifications('')));
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Soft update for users notifications
|
|
246
|
-
*/
|
|
247
|
-
updateNotifications(id, item, multi) {
|
|
248
|
-
if (this.backend.update(this.notifications, multi || [{ id, item }])) {
|
|
249
|
-
this.notificationsSource.next(this.notifications);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Gets the URI to a users avatar image
|
|
254
|
-
* @param userId The users ID
|
|
255
|
-
* @returns URI to the user image
|
|
256
|
-
*/
|
|
257
|
-
getUserImageUri(userId) {
|
|
258
|
-
return `${this.backend.getBaseWithContext(this.backend.getServiceBase())}/organization/image/${userId}?usedefault=true`;
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* Removes a favorite item
|
|
262
|
-
* @param favoriteId ID of the favorite item to be removed
|
|
263
|
-
*/
|
|
264
|
-
removeFavorite(favoriteId) {
|
|
265
|
-
return this.backend.del('/user/favorite/' + favoriteId).pipe(tap(res => this.updateFavorites(favoriteId)));
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Create a new favorite item for the current user
|
|
269
|
-
* @param id ID of the dms object to be set up as favorite
|
|
270
|
-
* @param type The object type of the dms object
|
|
271
|
-
* @param title The favorites title
|
|
272
|
-
*/
|
|
273
|
-
createFavorite(id, type, title) {
|
|
274
|
-
const uri = Utils.buildUri('/dms/favorite/' + id, { type, title });
|
|
275
|
-
return this.backend.post(uri, {}).pipe(tap(res => this.getFavorites().subscribe()));
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* @ignore
|
|
279
|
-
*/
|
|
280
|
-
removeFavoritesForTarget(id) {
|
|
281
|
-
return this.backend.del('/dms/favorite/' + id).pipe(tap(res => {
|
|
282
|
-
const toRemove = this.favorites.filter(i => i.target.id === id).map(i => Object.assign({
|
|
283
|
-
id: i.id
|
|
284
|
-
}));
|
|
285
|
-
this.updateFavorites(null, null, toRemove);
|
|
286
|
-
}));
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Gets the users recyclebin
|
|
290
|
-
*/
|
|
291
|
-
getRecycleBin() {
|
|
292
|
-
return this.backend.getJson(`/user/recyclebin`).pipe(tap(response => {
|
|
293
|
-
this.recycles = response;
|
|
294
|
-
this.recyclesSource.next(this.recycles);
|
|
295
|
-
}));
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Changes the users preferred lock mode and persists it on the server
|
|
299
|
-
* @param lock The value to set the lock settings to
|
|
300
|
-
*/
|
|
301
|
-
changeLockSetting(lock) {
|
|
302
|
-
this.user.userSettings.alwayslock = lock;
|
|
303
|
-
return this.backend.put('/user/config/web', this.user.userSettings).pipe(map(() => {
|
|
304
|
-
this.refreshCurrentUser().subscribe();
|
|
305
|
-
}));
|
|
306
|
-
}
|
|
307
|
-
hasPrivilege(privilege) {
|
|
308
|
-
return !!this.user.privileges.find(priv => priv.name === privilege);
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Changes the users password and persists it on the server
|
|
312
|
-
*/
|
|
313
|
-
changePassword(payload) {
|
|
314
|
-
return this.backend.put(`/user/password`, payload);
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Fetches the settings for the current user and stores the new User object on the session
|
|
318
|
-
*/
|
|
319
|
-
refreshCurrentUser() {
|
|
320
|
-
return this.backend.get(this.USER_FETCH_URI).pipe(map(res => this.setCurrentUser(res)));
|
|
321
|
-
}
|
|
322
|
-
validatePassword(password) {
|
|
323
|
-
if (password.length < this.passwordValidationSettings.minlength) {
|
|
324
|
-
return { type: 'short', amount: this.passwordValidationSettings.minlength };
|
|
325
|
-
}
|
|
326
|
-
if (password.replace(/[^0-9]/g, '').length < this.passwordValidationSettings.minnumber) {
|
|
327
|
-
return { type: 'number', amount: this.passwordValidationSettings.minnumber };
|
|
328
|
-
}
|
|
329
|
-
if (password.replace(/[a-zA-Z0-9ß ]/g, '').length < this.passwordValidationSettings.minspecialchars) {
|
|
330
|
-
return { type: 'specialchars', amount: this.passwordValidationSettings.minspecialchars };
|
|
331
|
-
}
|
|
332
|
-
return { type: 'valid', amount: null };
|
|
333
|
-
}
|
|
334
|
-
/**
|
|
335
|
-
* Changes the users saved inbox filter terms
|
|
336
|
-
* @param filterTerms The value to set the saved inbox filters list to
|
|
337
|
-
*/
|
|
338
|
-
changeSavedInboxFilters(filterTerms) {
|
|
339
|
-
this.user.userSettings.savedInboxFilter = filterTerms;
|
|
340
|
-
return this.backend.put('/user/config/web', this.user.userSettings).pipe(map(() => {
|
|
341
|
-
this.refreshCurrentUser().subscribe();
|
|
342
|
-
}));
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Save or change the workspace of the current user
|
|
346
|
-
* @param workspaceConfig The value to set the saved workspace or create a new workspace
|
|
347
|
-
*/
|
|
348
|
-
saveChangeWorkspace(workspaceConfig) {
|
|
349
|
-
this.user.userSettings.workspaceOptions = workspaceConfig;
|
|
350
|
-
return this.backend.put('/user/config/web', this.user.userSettings).pipe(map(() => {
|
|
351
|
-
this.refreshCurrentUser().subscribe();
|
|
352
|
-
}));
|
|
353
|
-
}
|
|
354
|
-
/**
|
|
355
|
-
* Get all the field definitions of an object type
|
|
356
|
-
* @param type The object type
|
|
357
|
-
*/
|
|
358
|
-
getFieldDefinition(type) {
|
|
359
|
-
const contextType = 'sysfolder';
|
|
360
|
-
let mode = 'ALL';
|
|
361
|
-
return this.backend.get(`/user/config/result/${type}?contexttype=${contextType}&mode=${mode}`);
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Save or change the visibility state of dashboard toolbar for the current user
|
|
365
|
-
* @param toolbarVisibility The visibility state
|
|
366
|
-
*/
|
|
367
|
-
saveToolbarState(toolbarVisibility) {
|
|
368
|
-
this.user.userSettings.toolbarVisibility = toolbarVisibility;
|
|
369
|
-
return this.backend.put('/user/config/web', this.user.userSettings).pipe(map(() => {
|
|
370
|
-
this.refreshCurrentUser().subscribe();
|
|
371
|
-
}));
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Save the local storage settings
|
|
375
|
-
* @param localSettings The local settings to be saved from the localstorage
|
|
376
|
-
* @param cacheSettings The local settings to be saved from the app cache
|
|
377
|
-
*/
|
|
378
|
-
saveLocalSettings(localSettings, cacheSettings) {
|
|
379
|
-
return this.backend.put('/user/config/localSettings', { localSettings: localSettings, cacheSettings: cacheSettings }).pipe(map(() => {
|
|
380
|
-
this.refreshCurrentUser().subscribe();
|
|
381
|
-
}));
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* Loads the local storage settings
|
|
385
|
-
* @returns The saved settings
|
|
386
|
-
*/
|
|
387
|
-
loadLocalSettings() {
|
|
388
|
-
return this.backend.get('/user/config/localSettings').pipe(catchError(() => EMPTY));
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
UserService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: UserService, deps: [{ token: i1.BackendService }, { token: i2.TranslateService }, { token: i3.Logger }, { token: i4.EventService }, { token: i5.SystemService }, { token: i6.HttpClient }, { token: i7.Config }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
392
|
-
UserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: UserService, providedIn: 'root' });
|
|
393
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: UserService, decorators: [{
|
|
394
|
-
type: Injectable,
|
|
395
|
-
args: [{
|
|
396
|
-
providedIn: 'root'
|
|
397
|
-
}]
|
|
398
|
-
}], ctorParameters: function () { return [{ type: i1.BackendService }, { type: i2.TranslateService }, { type: i3.Logger }, { type: i4.EventService }, { type: i5.SystemService }, { type: i6.HttpClient }, { type: i7.Config }]; } });
|
|
399
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW8tc2RrL2NvcmUvc3JjL2xpYi9zZXJ2aWNlL3VzZXIvdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFhLGVBQWUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSTFFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUlqRCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBSWhEOzs7Ozs7Ozs7O0dBVUc7QUFJSCxNQUFNLE9BQU8sV0FBVztJQXlDdEI7O09BRUc7SUFDSCxZQUFvQixPQUF1QixFQUN2QixTQUEyQixFQUMzQixNQUFjLEVBQ2QsWUFBMEIsRUFDMUIsTUFBcUIsRUFDckIsSUFBZ0IsRUFDaEIsTUFBYztRQU5kLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWhEbEMsbUJBQWMsR0FBRyxrRkFBa0Ys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bkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBvZiwgRU1QVFl9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRhcCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGNhdGNoRXJyb3J9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NoYW5nZVBhc3N3b3JkSW50ZXJmYWNlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2UvY2hhbmdlLXBhc3N3b3JkLmludGVyZmFjZSc7XG5pbXBvcnQge0JhY2tlbmRTZXJ2aWNlfSBmcm9tICcuLi9iYWNrZW5kL2JhY2tlbmQuc2VydmljZSc7XG5pbXBvcnQge0VvVXNlcn0gZnJvbSAnLi4vLi4vbW9kZWwvZW8tdXNlci5tb2RlbCc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7U3lzdGVtU2VydmljZX0gZnJvbSAnLi4vc3lzdGVtL3N5c3RlbS5zZXJ2aWNlJztcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uL3V0aWwvdXRpbHMnO1xuaW1wb3J0IHtFbmFpb0V2ZW50fSBmcm9tICcuLi9ldmVudHMvZXZlbnRzJztcbmltcG9ydCB7RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi9ldmVudHMvZXZlbnQuc2VydmljZSc7XG5pbXBvcnQge0RpcmVjdGlvbn0gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy5lbnVtJztcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtXaWRnZXRHcmlkV29ya3NwYWNlQ29uZmlnfSBmcm9tICdAeXV1dmlzL3dpZGdldC1ncmlkJztcblxuLyoqXG4gKiBBcHBsaWNhdGlvbnMgdXNlciBzZXJ2aWNlLlxuICogVG8gZ2V0IHRoZSBjdXJyZW50IHVzZXIgeW91IGhhdmUgdG8gc3Vic2NyaWJlIHRvIHRoZSBzZXJ2aWNlcyBgdXNlciRgIG9ic2VydmFibGUuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogdXNlclNlcnZpY2UudXNlciQuc3Vic2NyaWJlKCh1c2VyKSA9PiB0aGlzLnVzZXIgPSB1c2VyKTtcbiAqIGBgYFxuICpcbiAqIFRoaXMgd2F5IHlvdXIgY29tcG9uZW50IHdpbGwgYmUgcHJvdmlkZWQgd2l0aCBhbiB1cC10by1kYXRlIHVzZXIgb2JqZWN0IG5vIG1hdHRlclxuICogd2hpY2ggY29tcG9uZW50IGNoYW5nZXMgb24gb2YgdGhlIHVzZXJzIHByb3BlcnRpZXMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIHtcblxuICBVU0VSX0ZFVENIX1VSSSA9ICcvdXNlcj9mYXZvcml0ZXM9dHJ1ZSZwcml2aWxlZ2VzPXRydWUmcm9sZXM9dHJ1ZSZkZXB1dGllcz10cnVlJnN1YnN0aXR1dGVzT2Y9dHJ1ZSc7XG5cbiAgcHJpdmF0ZSB1c2VyOiBFb1VzZXIgPSBudWxsO1xuICBwcml2YXRlIHVzZXJTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVvVXNlcj4odGhpcy51c2VyKTtcbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZW1pdHRpbmcgdGhlIGN1cnJlbnQgdXNlclxuICAgKi9cbiAgcHVibGljIHVzZXIkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnVzZXJTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBmYXZvcml0ZXMgPSBudWxsO1xuICBwcml2YXRlIGZhdm9yaXRlc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih0aGlzLmZhdm9yaXRlcyk7XG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIGVtaXR0aW5nIGN1cnJlbnQgdXNlcnMgZmF2b3JpdGVzXG4gICAqL1xuICBwdWJsaWMgZmF2b3JpdGVzR3JpZERhdGEkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmZhdm9yaXRlc1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSgxMDApLCBmaWx0ZXIodiA9PiB2KSk7XG4gIHB1YmxpYyBmYXZvcml0ZXMkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmZhdm9yaXRlc0dyaWREYXRhJC5waXBlKHRoaXMuYmFja2VuZC5ncmlkRGF0YUZpbHRlcik7XG5cbiAgcHJpdmF0ZSBub3RpZmljYXRpb25zID0gbnVsbDtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25zU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHRoaXMubm90aWZpY2F0aW9ucyk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgZW1pdHRpbmcgY3VycmVudCB1c2VycyByZWN5Y2xlYmluXG4gICAqL1xuXG4gIHByaXZhdGUgcmVjeWNsZXMgPSBudWxsO1xuICBwcml2YXRlIHJlY3ljbGVzU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHRoaXMucmVjeWNsZXMpO1xuXG4gIHB1YmxpYyByZWN5Y2xlc0dyaWREYXRhJCA6IE9ic2VydmFibGU8YW55PiA9IHRoaXMucmVjeWNsZXNTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgZmlsdGVyKHYgPT4gdikpO1xuICBwdWJsaWMgcmVjeWNsZXMkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnJlY3ljbGVzR3JpZERhdGEkLnBpcGUodGhpcy5iYWNrZW5kLmdyaWREYXRhRmlsdGVyKTtcblxuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIGVtaXR0aW5nIGN1cnJlbnQgdXNlcnMgbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcHVibGljIG5vdGlmaWNhdGlvbnNHcmlkRGF0YSQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMubm90aWZpY2F0aW9uc1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSgxMDApLCBmaWx0ZXIodiA9PiB2KSk7XG4gIHB1YmxpYyBub3RpZmljYXRpb25zJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5ub3RpZmljYXRpb25zR3JpZERhdGEkLnBpcGUodGhpcy5iYWNrZW5kLmdyaWREYXRhRmlsdGVyKTtcblxuICBwdWJsaWMgcGFzc3dvcmRWYWxpZGF0aW9uU2V0dGluZ3M6IGFueTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgc3lzdGVtOiBTeXN0ZW1TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgY29uZmlnOiBDb25maWcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHVzZXIuXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHVzZXIgb3IgTlVMTCBpZiBubyB1c2VyIGlzIGxvZ2dlZCBpblxuICAgKi9cbiAgcHVibGljIGdldEN1cnJlbnRVc2VyKCk6IEVvVXNlciB7XG4gICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFNldCBwcmVzZW5jZSBvZiB0aGUgY3VycmVudCB1c2VyXG4gICAqIEBwYXJhbSBwcmVzZW50IFZhbHVlIHRvIHNldCB0aGUgdXNlcnMgcHJlc2VuY2UgdG9cbiAgICovXG4gIHB1YmxpYyBzZXRQcmVzZW5jZShwcmVzZW50OiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGlmIChwcmVzZW50ICE9PSB0aGlzLnVzZXIucHJlc2VudCkge1xuICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZC5wdXQoJy91c2VyP3ByZXNlbmNlPScgKyBwcmVzZW50KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoXyA9PiB7XG4gICAgICAgICAgICB0aGlzLnVzZXIucHJlc2VudCA9IHByZXNlbnQ7XG4gICAgICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdXJpXG4gICAqIEByZXR1cm5zXG4gICAqL1xuXG4gIHB1YmxpYyBkZWxVc2VySW1hZ2UodXJpOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHVyaSwgbnVsbCk7XG4gIH1cblxuICBwdWJsaWMgc2V0VXNlckltYWdlKGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucHV0KGAvdXNlci9pbWFnZWAsZmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZGVwdXRpZXMgZm9yIHRoZSBjdXJyZW50IHVzZXJcbiAgICogQHBhcmFtIGRlcHV0aWVzTmFtZXMgTmFtZXMgb2YgdGhlIHVzZXJzIHRvIGJlIHNldCBhcyBkZXB1dGllc1xuICAgKi9cbiAgcHVibGljIHNldERlcHV0aWVzKGRlcHV0aWVzTmFtZXM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLnB1dChgL3VzZXIvZGVwdXR5P3VzZXI9JHtkZXB1dGllc05hbWVzLmpvaW4oJyZ1c2VyPScpfWApLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5yZWZyZXNoQ3VycmVudFVzZXIoKS5zdWJzY3JpYmUoKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgdXNlcnMgY2xpZW50IGxvY2FsZVxuICAgKiBAcGFyYW0gaXNvIElTTyBsb2NhbGUgc3RyaW5nIHRvIGJlIHNldCBhcyBuZXcgY2xpZW50IGxvY2FsZVxuICAgKi9cbiAgcHVibGljIGNoYW5nZUNsaWVudExvY2FsZShpc286IHN0cmluZykge1xuICAgIHRoaXMudXNlci51c2VyU2V0dGluZ3NbJ2NsaWVudGxvY2FsZSddID0gaXNvO1xuICAgIHRoaXMuYmFja2VuZFxuICAgICAgLnB1dCgnL3VzZXIvY29uZmlnL3dlYicsIHRoaXMudXNlci51c2VyU2V0dGluZ3MpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0NoYW5nZWQgY2xpZW50IGxvY2FsZSB0byBcXCcnICsgaXNvICsgJ1xcJycpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UoaXNvKTtcbiAgICAgICAgdGhpcy51c2VyLnVpRGlyZWN0aW9uID0gKHRoaXMuY29uZmlnLmdldENsaWVudExvY2FsZXMoKS5maW5kKGwgPT4gbC5pc28gPT09IGlzbykgfHwge30pLmRpciB8fCBEaXJlY3Rpb24uTFRSO1xuICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS50cmlnZ2VyKEVuYWlvRXZlbnQuQ0xJRU5UX0xPQ0FMRV9DSEFOR0VELCBpc28pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlIHRoZSB1c2VycyBzY2hlbWEgbG9jYWxlXG4gICAqIEBwYXJhbSBpc28gSVNPIGxvY2FsZSBzdHJpbmcgdG8gYmUgc2V0IGFzIG5ldyBzY2hlbWEgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlU2NoZW1hTG9jYWxlKGlzbzogc3RyaW5nKSB7XG4gICAgdGhpcy51c2VyLnNjaGVtYUxvY2FsZSA9IGlzbztcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kXG4gICAgICAucHV0KCcvdXNlci9sb2NhbGUvJyArIHRoaXMudXNlci5zY2hlbWFMb2NhbGUpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnQ2hhbmdlZCBzY2hlbWEgbG9jYWxlIHRvIFxcJycgKyBpc28gKyAnXFwnJyk7XG4gICAgICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgICB0aGlzLmJhY2tlbmQuc2V0SGVhZGVyKCdBY2NlcHQtTGFuZ3VhZ2UnLCB0aGlzLnVzZXIuZ2V0U2NoZW1hTG9jYWxlKCkpO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdMb2FkaW5nIHN5c3RlbSBkZWZpbml0aW9uIGZvciBuZXcgbG9jYWxlLicpO1xuICAgICAgICAgIHRoaXMuc3lzdGVtLmdldFN5c3RlbURlZmluaXRpb24odGhpcy51c2VyKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS50cmlnZ2VyKEVuYWlvRXZlbnQuU0NIRU1BX0xPQ0FMRV9DSEFOR0VELCBpc28pO1xuICAgICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbmV3IGN1cnJlbnQgdXNlclxuICAgKiBAcGFyYW0gcmVzIFRoZSB1c2VyIHRvIGJlIHNldCBhcyBjdXJyZW50IHVzZXJcbiAgICovXG4gIHB1YmxpYyBzZXRDdXJyZW50VXNlcihyZXM6IGFueSkge1xuICAgIHRoaXMudXNlciA9IG5ldyBFb1VzZXIocmVzKTtcbiAgICB0aGlzLnBhc3N3b3JkVmFsaWRhdGlvblNldHRpbmdzID0gcmVzLnBhc3N3b3J0dmFsaWRhdGlvbjtcbiAgICB0aGlzLnVzZXIuc2V0SW1hZ2VCYXNlKHRoaXMuYmFja2VuZC5nZXRTZXJ2aWNlQmFzZSgpKTtcbiAgICB0aGlzLmJhY2tlbmQuc2V0SGVhZGVyKCdBY2NlcHQtTGFuZ3VhZ2UnLCB0aGlzLnVzZXIuZ2V0U2NoZW1hTG9jYWxlKCkpO1xuXG4gICAgY29uc3QgbGFuZ3VhZ2VzID0gdGhpcy5jb25maWcuZ2V0Q2xpZW50TG9jYWxlcygpLm1hcChsYW5nID0+IGxhbmcuaXNvKTtcbiAgICBsZXQgdXNlckxhbmcgPSB0aGlzLnVzZXIuZ2V0Q2xpZW50TG9jYWxlKCk7XG4gICAgaWYgKGxhbmd1YWdlcy5pbmRleE9mKHVzZXJMYW5nKSA9PT0gLTEpIHtcbiAgICAgIHVzZXJMYW5nID0gdGhpcy5jb25maWcuZ2V0RGVmYXVsdENsaWVudExvY2FsZSgpO1xuICAgIH1cbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU2V0dGluZyBjbGllbnQgbG9jYWxlIHRvIFxcJycgKyB1c2VyTGFuZyArICdcXCcnKTtcbiAgICB0aGlzLnRyYW5zbGF0ZS51c2UodXNlckxhbmcpO1xuICAgIHRoaXMudXNlci51aURpcmVjdGlvbiA9ICh0aGlzLmNvbmZpZy5nZXRDbGllbnRMb2NhbGVzKCkuZmluZChsID0+IGwuaXNvID09PSB1c2VyTGFuZykgfHwge30pLmRpciB8fCBEaXJlY3Rpb24uTFRSO1xuXG4gICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcblxuICAgIHRoaXMuZmF2b3JpdGVzID0gbnVsbDtcbiAgICB0aGlzLmZhdm9yaXRlc1NvdXJjZS5uZXh0KHRoaXMuZmF2b3JpdGVzKTtcblxuICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5ub3RpZmljYXRpb25zU291cmNlLm5leHQodGhpcy5ub3RpZmljYXRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBjdXJyZW50IHVzZXJzIGZhdm9yaXRlc1xuICAgKi9cbiAgcHVibGljIGdldEZhdm9yaXRlcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgLy8gb25seSBmYXZvcml0ZSBvYmplY3RzIG9mIHR5cGUgJ0RNU19PQkpFQ1QnLCBhcmUgYWNjZXB0ZWRcbiAgICAvLyByZWFkIG1vcmU6IGh0dHA6Ly9qaXJhLm9wdGltYWwtc3lzdGVtcy5kZS9icm93c2UvQ09PTC0yMzE2XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxuICAgICAgLmdldEpzb24oJy91c2VyL2Zhdm9yaXRlcycpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiByZXMgJiYgcmVzLmZpbHRlcihyID0+IHIuZmF2b3JpdGV0eXBlID09PSAnRE1TX09CSkVDVCcpKSxcbiAgICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy5mYXZvcml0ZXMgPSByZXM7XG4gICAgICAgICAgdGhpcy5mYXZvcml0ZXNTb3VyY2UubmV4dCh0aGlzLmZhdm9yaXRlcyk7XG4gICAgICAgIH0pKTtcblxuICAgIC8vIC5tYXAocmVzID0+IHtcbiAgICAvLyAgIGxldCBkbXNPYmplY3QgPSB0aGlzLnJlc29sdmVPYmplY3RUeXBlcyhuZXcgRG1zT2JqZWN0KHJlcykpO1xuICAgIC8vICAgcmV0dXJuIGRtc09iamVjdDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb2Z0IHVwZGF0ZSBmb3IgdGhlIHVzZXJzIGZhdm9yaXRlc1xuICAgKiBAcGFyYW0gaWQgSUQgb2YgdGhlIGZhdm9yaXRlIHRvIGJlIHVwZGF0ZWRcbiAgICogQHBhcmFtIGl0ZW0gVGhlIG5ldyBmYXZvcml0ZSBpdGVtXG4gICAqIEBwYXJhbSBtdWx0aSBXaGV0aGVyIG9yIG5vdCB0byB1cGRhdGUgbXVsdGlwbGUgaXRlbXNcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVGYXZvcml0ZXMoaWQ/OiBzdHJpbmcsIGl0ZW0/OiBhbnksIG11bHRpPzogYW55W10pIHtcbiAgICBpZiAodGhpcy5iYWNrZW5kLnVwZGF0ZSh0aGlzLmZhdm9yaXRlcywgbXVsdGkgfHwgW3tpZCwgaXRlbX1dKSkge1xuICAgICAgdGhpcy5mYXZvcml0ZXNTb3VyY2UubmV4dCh0aGlzLmZhdm9yaXRlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVzZXJzIG5vdGlmaWNhdGlvbnMgKHJlc3VibWlzc2lvbnMgYW5kIHN1YnNjcmlwdGlvbnMpXG4gICAqIEByZXR1cm5zIFJlc29sdmVkIGJ5IGxpc3Qgb2YgdGhlIHVzZXJzIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXROb3RpZmljYXRpb25zKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uRGF0YSA9IFtcbiAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uKCksXG4gICAgICB0aGlzLmdldFJlc3VibWlzc2lvbigpXG4gICAgXTtcbiAgICByZXR1cm4gZm9ya0pvaW4obm90aWZpY2F0aW9uRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdXNlcnMgcmVzdWJtaXNzaW9uc1xuICAgKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIHVzZXJzIHJlc3VibWlzc2lvbnNcbiAgICovXG4gIHB1YmxpYyBnZXRSZXN1Ym1pc3Npb24oKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldEpzb24oJy9tZXNzYWdlcHJvdmlkZXIvcmVzdWJtaXNzaW9uL2xpc3QnKS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NvdXJjZS5uZXh0KHRoaXMubm90aWZpY2F0aW9ucyk7XG4gICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdXNlcnMgc3Vic2NyaXB0aW9uc1xuICAgKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIHVzZXJzIHN1YnNjcmlwdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXRTdWJzY3JpcHRpb24oKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kXG4gICAgICAuZ2V0SnNvbignL21lc3NhZ2Vwcm92aWRlci9zdWJzY3JpcHRpb24vbGlzdCcpLnBpcGUoXG4gICAgICAgIHRhcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zID0gcmVzcG9uc2U7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU291cmNlLm5leHQodGhpcy5ub3RpZmljYXRpb25zKTtcbiAgICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIGlkIElEIG9mIHRoZSBub3RpZmljYXRpb24gdG8gYmUgcmVtb3ZlZFxuICAgKiBAcGFyYW0gdHlwZSBUaGUgbm90aWZpY2F0aW9ucyB0eXBlICgnU1VCU0NSSVBUSU9OJywgJ1JFU1VCTUlTU0lPTicpXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlTm90aWZpY2F0aW9ucyhpZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgbWVzc2FnZXR5cGU6IHN0cmluZztcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ1NVQlNDUklQVElPTic6XG4gICAgICAgIG1lc3NhZ2V0eXBlID0gJ3N1YnNjcmlwdGlvbic7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUkVTVUJNSVNTSU9OJzpcbiAgICAgICAgbWVzc2FnZXR5cGUgPSAncmVzdWJtaXNzaW9uJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZGVsKGAvbWVzc2FnZXByb3ZpZGVyLyR7bWVzc2FnZXR5cGV9L2AgKyBpZCkucGlwZSh0YXAocmVzID0+IHRoaXMudXBkYXRlTm90aWZpY2F0aW9ucygnJykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb2Z0IHVwZGF0ZSBmb3IgdXNlcnMgbm90aWZpY2F0aW9uc1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZU5vdGlmaWNhdGlvbnMoaWQ/OiBzdHJpbmcsIGl0ZW0/OiBhbnksIG11bHRpPzogYW55W10pIHtcbiAgICBpZiAodGhpcy5iYWNrZW5kLnVwZGF0ZSh0aGlzLm5vdGlmaWNhdGlvbnMsIG11bHRpIHx8IFt7aWQsIGl0ZW19XSkpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NvdXJjZS5uZXh0KHRoaXMubm90aWZpY2F0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIFVSSSB0byBhIHVzZXJzIGF2YXRhciBpbWFnZVxuICAgKiBAcGFyYW0gdXNlcklkIFRoZSB1c2VycyBJRFxuICAgKiBAcmV0dXJucyBVUkkgdG8gdGhlIHVzZXIgaW1hZ2VcbiAgICovXG4gIHB1YmxpYyBnZXRVc2VySW1hZ2VVcmkodXNlcklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5iYWNrZW5kLmdldEJhc2VXaXRoQ29udGV4dCh0aGlzLmJhY2tlbmQuZ2V0U2VydmljZUJhc2UoKSl9L29yZ2FuaXphdGlvbi9pbWFnZS8ke3VzZXJJZH0/dXNlZGVmYXVsdD10cnVlYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZmF2b3JpdGUgaXRlbVxuICAgKiBAcGFyYW0gZmF2b3JpdGVJZCBJRCBvZiB0aGUgZmF2b3JpdGUgaXRlbSB0byBiZSByZW1vdmVkXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRmF2b3JpdGUoZmF2b3JpdGVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5kZWwoJy91c2VyL2Zhdm9yaXRlLycgKyBmYXZvcml0ZUlkKS5waXBlKHRhcChyZXMgPT4gdGhpcy51cGRhdGVGYXZvcml0ZXMoZmF2b3JpdGVJZCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgZmF2b3JpdGUgaXRlbSBmb3IgdGhlIGN1cnJlbnQgdXNlclxuICAgKiBAcGFyYW0gaWQgSUQgb2YgdGhlIGRtcyBvYmplY3QgdG8gYmUgc2V0IHVwIGFzIGZhdm9yaXRlXG4gICAqIEBwYXJhbSB0eXBlIFRoZSBvYmplY3QgdHlwZSBvZiB0aGUgZG1zIG9iamVjdFxuICAgKiBAcGFyYW0gdGl0bGUgVGhlIGZhdm9yaXRlcyB0aXRsZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZUZhdm9yaXRlKGlkOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgdGl0bGU6IHN0cmluZykge1xuICAgIGNvbnN0IHVyaSA9IFV0aWxzLmJ1aWxkVXJpKCcvZG1zL2Zhdm9yaXRlLycgKyBpZCwge3R5cGUsIHRpdGxlfSk7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5wb3N0KHVyaSwge30pLnBpcGUodGFwKHJlcyA9PiB0aGlzLmdldEZhdm9yaXRlcygpLnN1YnNjcmliZSgpKSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZUZhdm9yaXRlc0ZvclRhcmdldChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5kZWwoJy9kbXMvZmF2b3JpdGUvJyArIGlkKS5waXBlKHRhcChcbiAgICAgIHJlcyA9PiB7XG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gdGhpcy5mYXZvcml0ZXMuZmlsdGVyKGkgPT4gaS50YXJnZXQuaWQgPT09IGlkKS5tYXAoaSA9PiBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICBpZDogaS5pZFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMudXBkYXRlRmF2b3JpdGVzKG51bGwsIG51bGwsIHRvUmVtb3ZlKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB1c2VycyByZWN5Y2xlYmluXG4gICovXG4gIGdldFJlY3ljbGVCaW4oKTogT2JzZXJ2YWJsZTxhbnk+ICB7XG4gICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZ2V0SnNvbihgL3VzZXIvcmVjeWNsZWJpbmApLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2U9PntcbiAgICAgICAgdGhpcy5yZWN5Y2xlcz1yZXNwb25zZTtcbiAgICAgICAgdGhpcy5yZWN5Y2xlc1NvdXJjZS5uZXh0KHRoaXMucmVjeWNsZXMpO1xuICAgICAgfSkpO1xuICAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSB1c2VycyBwcmVmZXJyZWQgbG9jayBtb2RlIGFuZCBwZXJzaXN0cyBpdCBvbiB0aGUgc2VydmVyXG4gICAqIEBwYXJhbSBsb2NrIFRoZSB2YWx1ZSB0byBzZXQgdGhlIGxvY2sgc2V0dGluZ3MgdG9cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VMb2NrU2V0dGluZyhsb2NrOiBzdHJpbmcpIHtcbiAgICB0aGlzLnVzZXIudXNlclNldHRpbmdzLmFsd2F5c2xvY2sgPSBsb2NrO1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucHV0KCcvdXNlci9jb25maWcvd2ViJywgdGhpcy51c2VyLnVzZXJTZXR0aW5ncykucGlwZShtYXAoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoQ3VycmVudFVzZXIoKS5zdWJzY3JpYmUoKTtcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgaGFzUHJpdmlsZWdlKHByaXZpbGVnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy51c2VyLnByaXZpbGVnZXMuZmluZChwcml2ID0+IHByaXYubmFtZSA9PT0gcHJpdmlsZWdlKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIHVzZXJzIHBhc3N3b3JkIGFuZCBwZXJzaXN0cyBpdCBvbiB0aGUgc2VydmVyXG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZChwYXlsb2FkOiBDaGFuZ2VQYXNzd29yZEludGVyZmFjZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5wdXQoYC91c2VyL3Bhc3N3b3JkYCwgcGF5bG9hZCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgc2V0dGluZ3MgZm9yIHRoZSBjdXJyZW50IHVzZXIgYW5kIHN0b3JlcyB0aGUgbmV3IFVzZXIgb2JqZWN0IG9uIHRoZSBzZXNzaW9uXG4gICAqL1xuICBwcml2YXRlIHJlZnJlc2hDdXJyZW50VXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldCh0aGlzLlVTRVJfRkVUQ0hfVVJJKS5waXBlKG1hcChyZXMgPT4gdGhpcy5zZXRDdXJyZW50VXNlcihyZXMpKSk7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGVQYXNzd29yZChwYXNzd29yZDogc3RyaW5nKToge3R5cGU6IHN0cmluZywgYW1vdW50OiBudW1iZXJ9IHtcbiAgICBpZiAocGFzc3dvcmQubGVuZ3RoIDwgdGhpcy5wYXNzd29yZFZhbGlkYXRpb25TZXR0aW5ncy5taW5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7dHlwZTogJ3Nob3J0JywgYW1vdW50OiB0aGlzLnBhc3N3b3JkVmFsaWRhdGlvblNldHRpbmdzLm1pbmxlbmd0aH07XG4gICAgfVxuXG4gICAgaWYgKHBhc3N3b3JkLnJlcGxhY2UoL1teMC05XS9nLCAnJykubGVuZ3RoIDwgdGhpcy5wYXNzd29yZFZhbGlkYXRpb25TZXR0aW5ncy5taW5udW1iZXIpIHtcbiAgICAgIHJldHVybiB7dHlwZTogJ251bWJlcicsIGFtb3VudDogdGhpcy5wYXNzd29yZFZhbGlkYXRpb25TZXR0aW5ncy5taW5udW1iZXJ9O1xuICAgIH1cblxuICAgIGlmIChwYXNzd29yZC5yZXBsYWNlKC9bYS16QS1aMC05w58gXS9nLCAnJykubGVuZ3RoIDwgdGhpcy5wYXNzd29yZFZhbGlkYXRpb25TZXR0aW5ncy5taW5zcGVjaWFsY2hhcnMpIHtcbiAgICAgIHJldHVybiB7dHlwZTogJ3NwZWNpYWxjaGFycycsIGFtb3VudDogdGhpcy5wYXNzd29yZFZhbGlkYXRpb25TZXR0aW5ncy5taW5zcGVjaWFsY2hhcnN9O1xuICAgIH1cblxuICAgIHJldHVybiAge3R5cGU6ICd2YWxpZCcsIGFtb3VudDogbnVsbH07XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgdXNlcnMgc2F2ZWQgaW5ib3ggZmlsdGVyIHRlcm1zXG4gICAqIEBwYXJhbSBmaWx0ZXJUZXJtcyBUaGUgdmFsdWUgdG8gc2V0IHRoZSBzYXZlZCBpbmJveCBmaWx0ZXJzIGxpc3QgdG9cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VTYXZlZEluYm94RmlsdGVycyhmaWx0ZXJUZXJtczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnVzZXIudXNlclNldHRpbmdzLnNhdmVkSW5ib3hGaWx0ZXIgPSBmaWx0ZXJUZXJtcztcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLnB1dCgnL3VzZXIvY29uZmlnL3dlYicsIHRoaXMudXNlci51c2VyU2V0dGluZ3MpLnBpcGUobWFwKCgpID0+IHtcbiAgICAgIHRoaXMucmVmcmVzaEN1cnJlbnRVc2VyKCkuc3Vic2NyaWJlKCk7XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgb3IgY2hhbmdlIHRoZSB3b3Jrc3BhY2Ugb2YgdGhlIGN1cnJlbnQgdXNlclxuICAgKiBAcGFyYW0gd29ya3NwYWNlQ29uZmlnIFRoZSB2YWx1ZSB0byBzZXQgdGhlIHNhdmVkIHdvcmtzcGFjZSBvciBjcmVhdGUgYSBuZXcgd29ya3NwYWNlXG4gICAqL1xuICBwdWJsaWMgc2F2ZUNoYW5nZVdvcmtzcGFjZSh3b3Jrc3BhY2VDb25maWc6IFdpZGdldEdyaWRXb3Jrc3BhY2VDb25maWcpIHtcbiAgICB0aGlzLnVzZXIudXNlclNldHRpbmdzLndvcmtzcGFjZU9wdGlvbnMgPSB3b3Jrc3BhY2VDb25maWc7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5wdXQoJy91c2VyL2NvbmZpZy93ZWInLCB0aGlzLnVzZXIudXNlclNldHRpbmdzKS5waXBlKG1hcCgoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hDdXJyZW50VXNlcigpLnN1YnNjcmliZSgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHRoZSBmaWVsZCBkZWZpbml0aW9ucyBvZiBhbiBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gdHlwZSBUaGUgb2JqZWN0IHR5cGVcbiAgICovXG5cbiAgcHVibGljIGdldEZpZWxkRGVmaW5pdGlvbih0eXBlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb250ZXh0VHlwZSA9ICdzeXNmb2xkZXInO1xuICAgIGxldCBtb2RlID0gJ0FMTCc7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5nZXQoYC91c2VyL2NvbmZpZy9yZXN1bHQvJHt0eXBlfT9jb250ZXh0dHlwZT0ke2NvbnRleHRUeXBlfSZtb2RlPSR7bW9kZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIG9yIGNoYW5nZSB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiBkYXNoYm9hcmQgdG9vbGJhciBmb3IgdGhlIGN1cnJlbnQgdXNlclxuICAgKiBAcGFyYW0gdG9vbGJhclZpc2liaWxpdHkgVGhlIHZpc2liaWxpdHkgc3RhdGVcbiAgICovXG4gIHB1YmxpYyBzYXZlVG9vbGJhclN0YXRlKHRvb2xiYXJWaXNpYmlsaXR5OiBib29sZWFuKSB7XG4gICAgdGhpcy51c2VyLnVzZXJTZXR0aW5ncy50b29sYmFyVmlzaWJpbGl0eSA9IHRvb2xiYXJWaXNpYmlsaXR5O1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucHV0KCcvdXNlci9jb25maWcvd2ViJywgdGhpcy51c2VyLnVzZXJTZXR0aW5ncykucGlwZShtYXAoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoQ3VycmVudFVzZXIoKS5zdWJzY3JpYmUoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgbG9jYWwgc3RvcmFnZSBzZXR0aW5nc1xuICAgKiBAcGFyYW0gbG9jYWxTZXR0aW5ncyBUaGUgbG9jYWwgc2V0dGluZ3MgdG8gYmUgc2F2ZWQgZnJvbSB0aGUgbG9jYWxzdG9yYWdlXG4gICAqIEBwYXJhbSBjYWNoZVNldHRpbmdzIFRoZSBsb2NhbCBzZXR0aW5ncyB0byBiZSBzYXZlZCBmcm9tIHRoZSBhcHAgY2FjaGVcbiAgICovXG4gIHB1YmxpYyBzYXZlTG9jYWxTZXR0aW5ncyhsb2NhbFNldHRpbmdzOiBhbnksIGNhY2hlU2V0dGluZ3M6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQucHV0KCcvdXNlci9jb25maWcvbG9jYWxTZXR0aW5ncycsIHtsb2NhbFNldHRpbmdzOiBsb2NhbFNldHRpbmdzLCBjYWNoZVNldHRpbmdzOiBjYWNoZVNldHRpbmdzfSkucGlwZShtYXAoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoQ3VycmVudFVzZXIoKS5zdWJzY3JpYmUoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGxvY2FsIHN0b3JhZ2Ugc2V0dGluZ3NcbiAgICogQHJldHVybnMgVGhlIHNhdmVkIHNldHRpbmdzXG4gICAqL1xuICBwdWJsaWMgbG9hZExvY2FsU2V0dGluZ3MoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldCgnL3VzZXIvY29uZmlnL2xvY2FsU2V0dGluZ3MnKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gRU1QVFkpKTtcbiAgfVxufVxuIl19
|