@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
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
import { of as observableOf } from 'rxjs';
|
|
2
|
-
import { map, tap } from 'rxjs/operators';
|
|
3
|
-
import { Inject, Injectable } from '@angular/core';
|
|
4
|
-
import { HttpHeaders } from '@angular/common/http';
|
|
5
|
-
import * as FileSaver from 'file-saver';
|
|
6
|
-
import { finalize, shareReplay } from 'rxjs/operators';
|
|
7
|
-
import { CORE_CONFIG } from '../../config/core-init.tokens';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/common/http";
|
|
10
|
-
import * as i2 from "../logger/logger";
|
|
11
|
-
import * as i3 from "../config/config.service";
|
|
12
|
-
import * as i4 from "../../config/core-config";
|
|
13
|
-
// @ts-ignore
|
|
14
|
-
/**
|
|
15
|
-
* `BackendService` encapsulates the communication with the yuuvis<sup>®</sup> RAD REST endpoints.
|
|
16
|
-
*
|
|
17
|
-
* As yuuvis<sup>®</sup> RAD provides different services, this service is also capable of providing the base URIs for those services.
|
|
18
|
-
*/
|
|
19
|
-
export class BackendService {
|
|
20
|
-
/**
|
|
21
|
-
* @ignore
|
|
22
|
-
*/
|
|
23
|
-
constructor(http, coreConfig, logger, config) {
|
|
24
|
-
this.http = http;
|
|
25
|
-
this.coreConfig = coreConfig;
|
|
26
|
-
this.logger = logger;
|
|
27
|
-
this.config = config;
|
|
28
|
-
this.gridDataFilter = map((data) => data?.filter((v) => !v.__removed));
|
|
29
|
-
this.cache = new Map();
|
|
30
|
-
this.temp = new Map();
|
|
31
|
-
this.headers = this.setDefaultHeaders();
|
|
32
|
-
/**
|
|
33
|
-
* default profile is supposed to use NTLM
|
|
34
|
-
* @type {host: string; ntlm: boolean}
|
|
35
|
-
*/
|
|
36
|
-
this.authProfile = {
|
|
37
|
-
host: '',
|
|
38
|
-
ntlm: true
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* @ignore
|
|
43
|
-
*/
|
|
44
|
-
setAuthProfile(profile) {
|
|
45
|
-
if (profile) {
|
|
46
|
-
this.headers = this.setDefaultHeaders();
|
|
47
|
-
this.authProfile = profile;
|
|
48
|
-
if (this.authProfile.auth) {
|
|
49
|
-
// this.setHeader('Authorization', this.authProfile.auth);
|
|
50
|
-
}
|
|
51
|
-
this.headers.delete('Authorization');
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Add a new header.
|
|
56
|
-
* @param key The headers name
|
|
57
|
-
* @param value The value
|
|
58
|
-
*/
|
|
59
|
-
setHeader(key, value) {
|
|
60
|
-
if (value && value.length) {
|
|
61
|
-
this.headers = this.headers.set(key, value);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Retrieves the current headers
|
|
66
|
-
* @returns The `HttpHeaders` that are currently set up
|
|
67
|
-
*/
|
|
68
|
-
getHeaders() {
|
|
69
|
-
return this.headers;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* @ignore
|
|
73
|
-
*/
|
|
74
|
-
getHttpOptions(requestOptions) {
|
|
75
|
-
return Object.assign({ headers: this.getHeaders(), withCredentials: this.coreConfig.withCredentials }, requestOptions);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Gets the base URI for the DMS-Service endpoint
|
|
79
|
-
* @returns Base URI
|
|
80
|
-
*/
|
|
81
|
-
getServiceBase() {
|
|
82
|
-
return this.config.getUri('serviceBase');
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Gets the base URI for the Search-Service endpoint
|
|
86
|
-
* @returns Base URI
|
|
87
|
-
*/
|
|
88
|
-
getSearchBase() {
|
|
89
|
-
return this.config.getUri('searchBase');
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Gets the base URI for the Context-Service endpoint
|
|
93
|
-
* @returns Base URI
|
|
94
|
-
*/
|
|
95
|
-
getContextBase() {
|
|
96
|
-
return this.config.getUri('contextBase');
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Gets the base URI for the Inbox-Service endpoint
|
|
100
|
-
* @returns Base URI
|
|
101
|
-
*/
|
|
102
|
-
getInboxBase() {
|
|
103
|
-
return this.config.getUri('inboxBase');
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Gets the base URI for the BPM-Service endpoint
|
|
107
|
-
* @returns Base URI
|
|
108
|
-
*/
|
|
109
|
-
getBpmBase() {
|
|
110
|
-
return this.config.getUri('bpmBase');
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Gets the base URI for the Agent-Service endpoint
|
|
114
|
-
* @returns Base URI
|
|
115
|
-
*/
|
|
116
|
-
getAgentBase() {
|
|
117
|
-
return this.config.getUri('agentBase');
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Gets the base URI for the Status-Service endpoint
|
|
121
|
-
* @returns Base URI
|
|
122
|
-
*/
|
|
123
|
-
getStatusBase() {
|
|
124
|
-
return this.config.getUri('statusBase');
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* @ignore
|
|
128
|
-
*/
|
|
129
|
-
getIconBase(id = '') {
|
|
130
|
-
return this.getBaseWithContext(this.getServiceBase()) + '/ui/icon/' + id;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* @ignore
|
|
134
|
-
*/
|
|
135
|
-
getHost() {
|
|
136
|
-
return this.authProfile.host || '';
|
|
137
|
-
}
|
|
138
|
-
getBaseWithContext(base) {
|
|
139
|
-
return base?.startsWith('/') ? this.config.getContextPath() + base : base;
|
|
140
|
-
}
|
|
141
|
-
getContextPath(base) {
|
|
142
|
-
return this.getHost() + (this.getBaseWithContext(base || this.getServiceBase()));
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Wrapped HTTP GET method
|
|
146
|
-
* @param uri The REST URI to be queried
|
|
147
|
-
* @param base The Base URI (backend service) to be used
|
|
148
|
-
* @param requestOptions Additional request options
|
|
149
|
-
* @returns The data retrieved from the given endpoint
|
|
150
|
-
*/
|
|
151
|
-
get(uri, base, requestOptions) {
|
|
152
|
-
return this.http.get(this.getContextPath(base) + uri, this.getHttpOptions(requestOptions));
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Wrapped HTTP PUT method
|
|
156
|
-
* @param uri The target REST URI
|
|
157
|
-
* @param data Data to be 'posted'
|
|
158
|
-
* @param base The Base URI (backend service) to be used
|
|
159
|
-
* @param requestOptions Additional request options
|
|
160
|
-
* @returns The return value of the target PUT endpoint
|
|
161
|
-
*/
|
|
162
|
-
put(uri, data, base, requestOptions) {
|
|
163
|
-
return this.http.put(this.getContextPath(base) + uri, data, this.getHttpOptions(requestOptions));
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* @ignore
|
|
167
|
-
*/
|
|
168
|
-
getJson(uri, base) {
|
|
169
|
-
return this.http.get(this.getContextPath(base) + uri, this.getHttpOptions({ responseType: 'json' }));
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Wrapped HTTP POST method
|
|
173
|
-
* @param uri The target REST URI
|
|
174
|
-
* @param data Data to be 'posted'
|
|
175
|
-
* @param base The Base URI (backend service) to be used
|
|
176
|
-
* @param requestOptions Additional request options
|
|
177
|
-
* @returns The return value of the target POST endpoint
|
|
178
|
-
*/
|
|
179
|
-
post(uri, data, base, requestOptions) {
|
|
180
|
-
const baseUri = this.getContextPath(base);
|
|
181
|
-
const payload = data ? JSON.stringify(data) : '';
|
|
182
|
-
return this.http.post(`${baseUri}${uri}`, payload, this.getHttpOptions(requestOptions));
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Performs a multipart form data POST request.
|
|
186
|
-
* @param uri The target REST URI
|
|
187
|
-
* @param formData FormData to be 'posted'
|
|
188
|
-
* @param base The Base URI (backend service) to be used
|
|
189
|
-
* @param requestOptions Additional request options
|
|
190
|
-
* @returns The return value of the target POST endpoint
|
|
191
|
-
*/
|
|
192
|
-
postMultiPart(uri, formData, base, requestOptions) {
|
|
193
|
-
const baseUri = this.getContextPath(base);
|
|
194
|
-
const headers = this.getHeaders();
|
|
195
|
-
headers.delete('Content-Type');
|
|
196
|
-
const reqOptions = Object.assign({ headers: headers, withCredentials: this.coreConfig.withCredentials }, requestOptions);
|
|
197
|
-
return this.http.post(`${baseUri}${uri}`, formData, reqOptions);
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Wrapped HTTP DELETE method
|
|
201
|
-
* @param uri The target REST URI
|
|
202
|
-
* @param base The Base URI (backend service) to be used
|
|
203
|
-
* @param requestOptions Additional request options
|
|
204
|
-
* @returns The return value of the target DELETE endpoint
|
|
205
|
-
*/
|
|
206
|
-
del(uri, base, requestOptions) {
|
|
207
|
-
return this.http.delete(this.getContextPath(base) + uri, this.getHttpOptions(requestOptions));
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* @ignore
|
|
211
|
-
* Soft update for lists - enables grid to handle all changes
|
|
212
|
-
* to add new - only item should be specified
|
|
213
|
-
* to remove - only id should be specified
|
|
214
|
-
* to update - both params should be specified
|
|
215
|
-
*
|
|
216
|
-
* @param any[] list Original list of items
|
|
217
|
-
* @param id?: string; item?: any data[]
|
|
218
|
-
* @returns any[]
|
|
219
|
-
*/
|
|
220
|
-
update(list, data) {
|
|
221
|
-
data.forEach(({ id, item }) => {
|
|
222
|
-
if (id) {
|
|
223
|
-
const _item = list.find(l => l.id === id);
|
|
224
|
-
Object.assign(_item, item, item ? { __updated: true } : { __removed: true });
|
|
225
|
-
}
|
|
226
|
-
else if (item) {
|
|
227
|
-
list.unshift(Object.assign(item, { __added: true }));
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
return list;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* @ignore
|
|
234
|
-
* Cache for small requests like icons and configs
|
|
235
|
-
*
|
|
236
|
-
* @param string uri
|
|
237
|
-
* @returns Observable<any>
|
|
238
|
-
*/
|
|
239
|
-
getViaCache(uri) {
|
|
240
|
-
if (this.cache.has(uri)) {
|
|
241
|
-
return observableOf(this.cache.get(uri));
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
return this.getViaTempCache(uri, () => this.http.get(uri, { withCredentials: this.coreConfig.withCredentials, responseType: 'text' }).pipe(tap(text => this.cache.set(uri, text))));
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* @ignore
|
|
249
|
-
* Temporary Cache for multiple identical requests
|
|
250
|
-
*
|
|
251
|
-
* @param string id
|
|
252
|
-
* @param Function request
|
|
253
|
-
* @returns Observable<any>
|
|
254
|
-
*/
|
|
255
|
-
getViaTempCache(id, request) {
|
|
256
|
-
if (this.temp.has(id)) {
|
|
257
|
-
return this.temp.get(id);
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
const resp = (request ? request() : this.get(id)).pipe(finalize(() => this.temp.delete(id)), shareReplay(1));
|
|
261
|
-
this.temp.set(id, resp);
|
|
262
|
-
return resp;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Download the content of dms objects.
|
|
267
|
-
*
|
|
268
|
-
* @param DmsObject[] dmsObjects Array of dms objects to be downloaded
|
|
269
|
-
* @param "PDF" | "TIFF" | "TEXT" | "JPEG" rendition The type of rendition to be downloaded. If not specified, the original content will be downloaded.
|
|
270
|
-
* Possible renditions are `PDF`, `TIFF`, `TEXT`, `JPEG`.
|
|
271
|
-
*/
|
|
272
|
-
downloadContent(dmsObjects, rendition, fileNameWithVersionNumber, recyclebin) {
|
|
273
|
-
const item = dmsObjects[0];
|
|
274
|
-
if (dmsObjects.length === 1) {
|
|
275
|
-
if (item.content) {
|
|
276
|
-
let uri = `/dms/${item.content.id}/content?type=${item.content.type}&asdownload=true&recyclebin=${!!recyclebin}`;
|
|
277
|
-
if (rendition) {
|
|
278
|
-
uri += `&rendition=${rendition}&_intent=DOWNLOAD_${rendition}`;
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
uri += '&_intent=DOWNLOAD';
|
|
282
|
-
}
|
|
283
|
-
if (item.content.id === item.id) {
|
|
284
|
-
uri += `&version=${item.version}`;
|
|
285
|
-
}
|
|
286
|
-
this.download(uri, fileNameWithVersionNumber ? item.version : null);
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
this.logger.error('The provided dms object has no content', item);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
if (dmsObjects.length > 1) {
|
|
293
|
-
let uri = '/dms/batch/export';
|
|
294
|
-
if (item.content) {
|
|
295
|
-
const expressions = dmsObjects.map(obj => obj.content.id);
|
|
296
|
-
const data = {
|
|
297
|
-
query: {
|
|
298
|
-
expression: [...expressions]
|
|
299
|
-
},
|
|
300
|
-
options: {
|
|
301
|
-
rendition: ''
|
|
302
|
-
}
|
|
303
|
-
};
|
|
304
|
-
data.options.rendition = rendition ? 'PDF' : null;
|
|
305
|
-
this.downloadMulti(uri, fileNameWithVersionNumber ? item.version : null, data);
|
|
306
|
-
}
|
|
307
|
-
else {
|
|
308
|
-
this.logger.error('The provided dms object has no content', item);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
download(uri, version) {
|
|
313
|
-
const baseUri = this.getContextPath();
|
|
314
|
-
this.http.get(`${baseUri}${uri}`, { observe: 'response', responseType: 'blob', withCredentials: this.coreConfig.withCredentials })
|
|
315
|
-
.subscribe((res) => {
|
|
316
|
-
FileSaver.saveAs(res.body, this.getFileNameFromHttpResponse(res, version));
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
downloadMulti(uri, version, _body) {
|
|
320
|
-
const baseUri = this.getContextPath();
|
|
321
|
-
this.http.post(`${baseUri}${uri}`, _body, { observe: 'response', responseType: 'blob', withCredentials: this.coreConfig.withCredentials })
|
|
322
|
-
.subscribe((res) => {
|
|
323
|
-
FileSaver.saveAs(res.body, this.getFileNameFromHttpResponse(res, version));
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
getFileNameFromHttpResponse(res, version) {
|
|
327
|
-
const contentDispositionHeader = res.headers.get('Content-Disposition') || '';
|
|
328
|
-
const encodedFileNameMatchResult = contentDispositionHeader.match('filename\\*=UTF-8\'\'(.*)')
|
|
329
|
-
|| contentDispositionHeader.match('filename=\"(.*)\"');
|
|
330
|
-
const encodedFileName = encodedFileNameMatchResult ? encodedFileNameMatchResult[1] : null;
|
|
331
|
-
const filename = encodedFileName ? decodeURIComponent(encodedFileName) : 'unknown';
|
|
332
|
-
const index = !~filename.lastIndexOf('.') ? filename.length : filename.lastIndexOf('.');
|
|
333
|
-
return !version ? filename : `${filename.slice(0, index)}_v${version}${filename.slice(index)}`;
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* Getter for the HTTP Headers
|
|
337
|
-
*
|
|
338
|
-
* @returns HttpHeaders
|
|
339
|
-
*/
|
|
340
|
-
setDefaultHeaders() {
|
|
341
|
-
return new HttpHeaders({
|
|
342
|
-
'Content-Type': 'application/json',
|
|
343
|
-
'X-os-include-links': 'false',
|
|
344
|
-
'X-os-include-actions': 'false',
|
|
345
|
-
'X-os-sync-index': 'true'
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
BackendService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BackendService, deps: [{ token: i1.HttpClient }, { token: CORE_CONFIG }, { token: i2.Logger }, { token: i3.Config }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
350
|
-
BackendService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BackendService, providedIn: 'root' });
|
|
351
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: BackendService, decorators: [{
|
|
352
|
-
type: Injectable,
|
|
353
|
-
args: [{
|
|
354
|
-
providedIn: 'root'
|
|
355
|
-
}]
|
|
356
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i4.CoreConfig, decorators: [{
|
|
357
|
-
type: Inject,
|
|
358
|
-
args: [CORE_CONFIG]
|
|
359
|
-
}] }, { type: i2.Logger }, { type: i3.Config }]; } });
|
|
360
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2VuZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW8tc2RrL2NvcmUvc3JjL2xpYi9zZXJ2aWNlL2JhY2tlbmQvYmFja2VuZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxFQUFFLElBQUksWUFBWSxFQUF1QyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBYSxXQUFXLEVBQWUsTUFBTSxzQkFBc0IsQ0FBQztBQUczRSxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUl4QyxPQUFPLEVBQUMsUUFBUSxFQUFFLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7O0FBeUIxRCxhQUFhO0FBQ2I7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxjQUFjO0lBUXpCOztPQUVHO0lBQ0gsWUFBb0IsSUFBZ0IsRUFDTixVQUFzQixFQUMxQyxNQUFjLEVBQ2QsTUFBYztRQUhKLFNBQUksR0FBSixJQUFJLENBQVk7UUFDTixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQzFDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBWmpCLG1CQUFjLEdBQWtDLEdBQUcsQ0FBQyxDQUFDLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUU1RyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztR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QixpQkFBaUIsRUFBRSxNQUFNO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7OzJHQWhYVSxjQUFjLDRDQVlmLFdBQVc7K0dBWlYsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWFJLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7b2YgYXMgb2JzZXJ2YWJsZU9mLCBPYnNlcnZhYmxlLCBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7RG1zT2JqZWN0fSBmcm9tICcuLi8uLi9tb2RlbC9kbXMtb2JqZWN0Lm1vZGVsJztcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvbG9nZ2VyJztcbmltcG9ydCB7QXV0aFByb2ZpbGV9IGZyb20gJy4uL2F1dGgvYXV0aC1wcm9maWxlLmludGVyZmFjZSc7XG5pbXBvcnQge0h0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7ZmluYWxpemUsIHNoYXJlUmVwbGF5fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0NvcmVDb25maWd9IGZyb20gJy4uLy4uL2NvbmZpZy9jb3JlLWNvbmZpZyc7XG5pbXBvcnQge0NPUkVfQ09ORklHfSBmcm9tICcuLi8uLi9jb25maWcvY29yZS1pbml0LnRva2Vucyc7XG5cbi8qKlxuICogSHR0cE9wdGlvbnMgZm9yIGh0dHAgcmVxdWVzdFxuICogQHBhcmFtIG9ic2VydmU6ICdib2R5JyB8ICdldmVudHMnIHwgJ3Jlc3BvbnNlJ1xuICogQHBhcmFtIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0J1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBPcHRpb25zIHtcbiAgaGVhZGVycz86XG4gIHwgSHR0cEhlYWRlcnNcbiAgfCB7XG4gICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gIH07XG4gIG9ic2VydmU/OiBhbnk7XG4gIHBhcmFtcz86XG4gIHwgSHR0cFBhcmFtc1xuICB8IHtcbiAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9O1xuICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gIHJlc3BvbnNlVHlwZT86IGFueTtcbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbn1cblxuXG4vLyBAdHMtaWdub3JlXG4vKipcbiAqIGBCYWNrZW5kU2VydmljZWAgZW5jYXBzdWxhdGVzIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHl1dXZpczxzdXA+JnJlZzs8L3N1cD4gUkFEIFJFU1QgZW5kcG9pbnRzLlxuICpcbiAqIEFzIHl1dXZpczxzdXA+JnJlZzs8L3N1cD4gUkFEIHByb3ZpZGVzIGRpZmZlcmVudCBzZXJ2aWNlcywgdGhpcyBzZXJ2aWNlIGlzIGFsc28gY2FwYWJsZSBvZiBwcm92aWRpbmcgdGhlIGJhc2UgVVJJcyBmb3IgdGhvc2Ugc2VydmljZXMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJhY2tlbmRTZXJ2aWNlIHtcblxuICBwdWJsaWMgZ3JpZERhdGFGaWx0ZXI6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0gbWFwKChkYXRhOiBhbnlbXSkgPT4gZGF0YT8uZmlsdGVyKCh2OiBhbnkpID0+ICF2Ll9fcmVtb3ZlZCkpO1xuICBwcml2YXRlIGF1dGhQcm9maWxlOiBBdXRoUHJvZmlsZTtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIHByaXZhdGUgdGVtcCA9IG5ldyBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPGFueT4+KCk7XG4gIHByaXZhdGUgaGVhZGVycyA9IHRoaXMuc2V0RGVmYXVsdEhlYWRlcnMoKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoQ09SRV9DT05GSUcpIHB1YmxpYyBjb3JlQ29uZmlnOiBDb3JlQ29uZmlnLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZykge1xuXG4gICAgLyoqXG4gICAgICogZGVmYXVsdCBwcm9maWxlIGlzIHN1cHBvc2VkIHRvIHVzZSBOVExNXG4gICAgICogQHR5cGUge2hvc3Q6IHN0cmluZzsgbnRsbTogYm9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmF1dGhQcm9maWxlID0ge1xuICAgICAgaG9zdDogJycsXG4gICAgICBudGxtOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgc2V0QXV0aFByb2ZpbGUocHJvZmlsZT86IEF1dGhQcm9maWxlKSB7XG4gICAgaWYgKHByb2ZpbGUpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IHRoaXMuc2V0RGVmYXVsdEhlYWRlcnMoKTtcbiAgICAgIHRoaXMuYXV0aFByb2ZpbGUgPSBwcm9maWxlO1xuICAgICAgaWYgKHRoaXMuYXV0aFByb2ZpbGUuYXV0aCkge1xuICAgICAgICAvLyB0aGlzLnNldEhlYWRlcignQXV0aG9yaXphdGlvbicsIHRoaXMuYXV0aFByb2ZpbGUuYXV0aCk7XG4gICAgICB9XG4gICAgICB0aGlzLmhlYWRlcnMuZGVsZXRlKCdBdXRob3JpemF0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBoZWFkZXIuXG4gICAqIEBwYXJhbSBrZXkgVGhlIGhlYWRlcnMgbmFtZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc2V0SGVhZGVyKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5oZWFkZXJzID0gdGhpcy5oZWFkZXJzLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGhlYWRlcnNcbiAgICogQHJldHVybnMgVGhlIGBIdHRwSGVhZGVyc2AgdGhhdCBhcmUgY3VycmVudGx5IHNldCB1cFxuICAgKi9cbiAgcHVibGljIGdldEhlYWRlcnMoKTogSHR0cEhlYWRlcnMge1xuICAgIHJldHVybiB0aGlzLmhlYWRlcnM7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIGdldEh0dHBPcHRpb25zKHJlcXVlc3RPcHRpb25zPzogSHR0cE9wdGlvbnMpOiBIdHRwT3B0aW9ucyB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe2hlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLCB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29yZUNvbmZpZy53aXRoQ3JlZGVudGlhbHN9LCByZXF1ZXN0T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBETVMtU2VydmljZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBCYXNlIFVSSVxuICAgKi9cbiAgcHVibGljIGdldFNlcnZpY2VCYXNlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRVcmkoJ3NlcnZpY2VCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBTZWFyY2gtU2VydmljZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBCYXNlIFVSSVxuICAgKi9cbiAgcHVibGljIGdldFNlYXJjaEJhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldFVyaSgnc2VhcmNoQmFzZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJhc2UgVVJJIGZvciB0aGUgQ29udGV4dC1TZXJ2aWNlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEJhc2UgVVJJXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29udGV4dEJhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldFVyaSgnY29udGV4dEJhc2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBiYXNlIFVSSSBmb3IgdGhlIEluYm94LVNlcnZpY2UgZW5kcG9pbnRcbiAgICogQHJldHVybnMgQmFzZSBVUklcbiAgICovXG4gIHB1YmxpYyBnZXRJbmJveEJhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldFVyaSgnaW5ib3hCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYmFzZSBVUkkgZm9yIHRoZSBCUE0tU2VydmljZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBCYXNlIFVSSVxuICAgKi9cbiAgcHVibGljIGdldEJwbUJhc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldFVyaSgnYnBtQmFzZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJhc2UgVVJJIGZvciB0aGUgQWdlbnQtU2VydmljZSBlbmRwb2ludFxuICAgKiBAcmV0dXJucyBCYXNlIFVSSVxuICAgKi9cbiAgcHVibGljIGdldEFnZW50QmFzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0VXJpKCdhZ2VudEJhc2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBiYXNlIFVSSSBmb3IgdGhlIFN0YXR1cy1TZXJ2aWNlIGVuZHBvaW50XG4gICAqIEByZXR1cm5zIEJhc2UgVVJJXG4gICAqL1xuICBwdWJsaWMgZ2V0U3RhdHVzQmFzZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0VXJpKCdzdGF0dXNCYXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHVibGljIGdldEljb25CYXNlKGlkOiBzdHJpbmcgPSAnJykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2VXaXRoQ29udGV4dCh0aGlzLmdldFNlcnZpY2VCYXNlKCkpICsgJy91aS9pY29uLycgKyBpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBwdWJsaWMgZ2V0SG9zdCgpIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoUHJvZmlsZS5ob3N0IHx8ICcnO1xuICB9XG5cbiAgcHVibGljIGdldEJhc2VXaXRoQ29udGV4dChiYXNlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYmFzZT8uc3RhcnRzV2l0aCgnLycpID8gdGhpcy5jb25maWcuZ2V0Q29udGV4dFBhdGgoKSArIGJhc2UgOiBiYXNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0UGF0aChiYXNlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRIb3N0KCkgKyAodGhpcy5nZXRCYXNlV2l0aENvbnRleHQoYmFzZSB8fCB0aGlzLmdldFNlcnZpY2VCYXNlKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVkIEhUVFAgR0VUIG1ldGhvZFxuICAgKiBAcGFyYW0gdXJpIFRoZSBSRVNUIFVSSSB0byBiZSBxdWVyaWVkXG4gICAqIEBwYXJhbSBiYXNlIFRoZSBCYXNlIFVSSSAoYmFja2VuZCBzZXJ2aWNlKSB0byBiZSB1c2VkXG4gICAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyBBZGRpdGlvbmFsIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBUaGUgZGF0YSByZXRyaWV2ZWQgZnJvbSB0aGUgZ2l2ZW4gZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBnZXQodXJpOiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuZ2V0Q29udGV4dFBhdGgoYmFzZSkgKyB1cmksIHRoaXMuZ2V0SHR0cE9wdGlvbnMocmVxdWVzdE9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVkIEhUVFAgUFVUIG1ldGhvZFxuICAgKiBAcGFyYW0gdXJpIFRoZSB0YXJnZXQgUkVTVCBVUklcbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0byBiZSAncG9zdGVkJ1xuICAgKiBAcGFyYW0gYmFzZSBUaGUgQmFzZSBVUkkgKGJhY2tlbmQgc2VydmljZSkgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdGFyZ2V0IFBVVCBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHB1dCh1cmk6IHN0cmluZywgZGF0YT86IGFueSwgYmFzZT86IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5nZXRDb250ZXh0UGF0aChiYXNlKSArIHVyaSwgZGF0YSwgdGhpcy5nZXRIdHRwT3B0aW9ucyhyZXF1ZXN0T3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHB1YmxpYyBnZXRKc29uKHVyaTogc3RyaW5nLCBiYXNlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmdldENvbnRleHRQYXRoKGJhc2UpICsgdXJpLCB0aGlzLmdldEh0dHBPcHRpb25zKHtyZXNwb25zZVR5cGU6ICdqc29uJ30pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVkIEhUVFAgUE9TVCBtZXRob2RcbiAgICogQHBhcmFtIHVyaSBUaGUgdGFyZ2V0IFJFU1QgVVJJXG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gYmUgJ3Bvc3RlZCdcbiAgICogQHBhcmFtIGJhc2UgVGhlIEJhc2UgVVJJIChiYWNrZW5kIHNlcnZpY2UpIHRvIGJlIHVzZWRcbiAgICogQHBhcmFtIHJlcXVlc3RPcHRpb25zIEFkZGl0aW9uYWwgcmVxdWVzdCBvcHRpb25zXG4gICAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHRhcmdldCBQT1NUIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgcG9zdCh1cmk6IHN0cmluZywgZGF0YT8sIGJhc2U/OiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGJhc2VVcmkgPSB0aGlzLmdldENvbnRleHRQYXRoKGJhc2UpO1xuICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhID8gSlNPTi5zdHJpbmdpZnkoZGF0YSkgOiAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7YmFzZVVyaX0ke3VyaX1gLCBwYXlsb2FkLCB0aGlzLmdldEh0dHBPcHRpb25zKHJlcXVlc3RPcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgYSBtdWx0aXBhcnQgZm9ybSBkYXRhIFBPU1QgcmVxdWVzdC5cbiAgICogQHBhcmFtIHVyaSBUaGUgdGFyZ2V0IFJFU1QgVVJJXG4gICAqIEBwYXJhbSBmb3JtRGF0YSBGb3JtRGF0YSB0byBiZSAncG9zdGVkJ1xuICAgKiBAcGFyYW0gYmFzZSBUaGUgQmFzZSBVUkkgKGJhY2tlbmQgc2VydmljZSkgdG8gYmUgdXNlZFxuICAgKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnNcbiAgICogQHJldHVybnMgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgdGFyZ2V0IFBPU1QgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBwb3N0TXVsdGlQYXJ0KHVyaTogc3RyaW5nLCBmb3JtRGF0YTogRm9ybURhdGEsIGJhc2U/OiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGJhc2VVcmkgPSB0aGlzLmdldENvbnRleHRQYXRoKGJhc2UpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMoKTtcbiAgICBoZWFkZXJzLmRlbGV0ZSgnQ29udGVudC1UeXBlJyk7XG4gICAgY29uc3QgcmVxT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe2hlYWRlcnM6IGhlYWRlcnMsIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFsc30sIHJlcXVlc3RPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7YmFzZVVyaX0ke3VyaX1gLCBmb3JtRGF0YSwgcmVxT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHBlZCBIVFRQIERFTEVURSBtZXRob2RcbiAgICogQHBhcmFtIHVyaSBUaGUgdGFyZ2V0IFJFU1QgVVJJXG4gICAqIEBwYXJhbSBiYXNlIFRoZSBCYXNlIFVSSSAoYmFja2VuZCBzZXJ2aWNlKSB0byBiZSB1c2VkXG4gICAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyBBZGRpdGlvbmFsIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSB0YXJnZXQgREVMRVRFIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgZGVsKHVyaTogc3RyaW5nLCBiYXNlPzogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZSh0aGlzLmdldENvbnRleHRQYXRoKGJhc2UpICsgdXJpLCB0aGlzLmdldEh0dHBPcHRpb25zKHJlcXVlc3RPcHRpb25zKSk7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKiBTb2Z0IHVwZGF0ZSBmb3IgbGlzdHMgLSBlbmFibGVzIGdyaWQgdG8gaGFuZGxlIGFsbCBjaGFuZ2VzXG4gICAqIHRvIGFkZCBuZXcgLSBvbmx5IGl0ZW0gc2hvdWxkIGJlIHNwZWNpZmllZFxuICAgKiB0byByZW1vdmUgLSBvbmx5IGlkIHNob3VsZCBiZSBzcGVjaWZpZWRcbiAgICogdG8gdXBkYXRlIC0gYm90aCBwYXJhbXMgc2hvdWxkIGJlIHNwZWNpZmllZFxuICAgKlxuICAgKiBAcGFyYW0gYW55W10gbGlzdCBPcmlnaW5hbCBsaXN0IG9mIGl0ZW1zXG4gICAqIEBwYXJhbSBpZD86IHN0cmluZzsgaXRlbT86IGFueSBkYXRhW11cbiAgICogQHJldHVybnMgYW55W11cbiAgICovXG4gIHB1YmxpYyB1cGRhdGUobGlzdDogYW55W10sIGRhdGE6IHtpZD86IHN0cmluZywgaXRlbT86IGFueX1bXSkge1xuICAgIGRhdGEuZm9yRWFjaCgoe2lkLCBpdGVtfSkgPT4ge1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIGNvbnN0IF9pdGVtID0gbGlzdC5maW5kKGwgPT4gbC5pZCA9PT0gaWQpO1xuICAgICAgICBPYmplY3QuYXNzaWduKF9pdGVtLCBpdGVtLCBpdGVtID8ge19fdXBkYXRlZDogdHJ1ZX0gOiB7X19yZW1vdmVkOiB0cnVlfSk7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0pIHtcbiAgICAgICAgbGlzdC51bnNoaWZ0KE9iamVjdC5hc3NpZ24oaXRlbSwge19fYWRkZWQ6IHRydWV9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKiBDYWNoZSBmb3Igc21hbGwgcmVxdWVzdHMgbGlrZSBpY29ucyBhbmQgY29uZmlnc1xuICAgKlxuICAgKiBAcGFyYW0gc3RyaW5nIHVyaVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGFueT5cbiAgICovXG4gIHB1YmxpYyBnZXRWaWFDYWNoZSh1cmk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRoaXMuY2FjaGUuaGFzKHVyaSkpIHtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YodGhpcy5jYWNoZS5nZXQodXJpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFZpYVRlbXBDYWNoZSh1cmksICgpID0+IHRoaXMuaHR0cC5nZXQodXJpLCB7d2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvcmVDb25maWcud2l0aENyZWRlbnRpYWxzLCByZXNwb25zZVR5cGU6ICd0ZXh0J30pLnBpcGUoXG4gICAgICAgIHRhcCh0ZXh0ID0+IHRoaXMuY2FjaGUuc2V0KHVyaSwgdGV4dCkpKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICogVGVtcG9yYXJ5IENhY2hlIGZvciBtdWx0aXBsZSBpZGVudGljYWwgcmVxdWVzdHNcbiAgICpcbiAgICogQHBhcmFtIHN0cmluZyBpZFxuICAgKiBAcGFyYW0gRnVuY3Rpb24gcmVxdWVzdFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGFueT5cbiAgICovXG4gIHB1YmxpYyBnZXRWaWFUZW1wQ2FjaGUoaWQ6IHN0cmluZywgcmVxdWVzdD86IEZ1bmN0aW9uKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAodGhpcy50ZW1wLmhhcyhpZCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRlbXAuZ2V0KGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzcCA9IChyZXF1ZXN0ID8gcmVxdWVzdCgpIDogdGhpcy5nZXQoaWQpKS5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLnRlbXAuZGVsZXRlKGlkKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICApO1xuICAgICAgdGhpcy50ZW1wLnNldChpZCwgcmVzcCk7XG4gICAgICByZXR1cm4gcmVzcDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWQgdGhlIGNvbnRlbnQgb2YgZG1zIG9iamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSBEbXNPYmplY3RbXSBkbXNPYmplY3RzIEFycmF5IG9mIGRtcyBvYmplY3RzIHRvIGJlIGRvd25sb2FkZWRcbiAgICogQHBhcmFtIFwiUERGXCIgfCBcIlRJRkZcIiB8IFwiVEVYVFwiIHwgXCJKUEVHXCIgcmVuZGl0aW9uIFRoZSB0eXBlIG9mIHJlbmRpdGlvbiB0byBiZSBkb3dubG9hZGVkLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgb3JpZ2luYWwgY29udGVudCB3aWxsIGJlIGRvd25sb2FkZWQuXG4gICAqIFBvc3NpYmxlIHJlbmRpdGlvbnMgYXJlIGBQREZgLCBgVElGRmAsIGBURVhUYCwgYEpQRUdgLlxuICAgKi9cbiAgcHVibGljIGRvd25sb2FkQ29udGVudChkbXNPYmplY3RzOiBEbXNPYmplY3RbXSwgcmVuZGl0aW9uPzogJ1BERicgfCAnVElGRicgfCAnVEVYVCcgfCAnSlBFRycsIGZpbGVOYW1lV2l0aFZlcnNpb25OdW1iZXI/OiBib29sZWFuLCByZWN5Y2xlYmluPzogYm9vbGVhbikge1xuXG4gICAgY29uc3QgaXRlbSA9IGRtc09iamVjdHNbMF07XG4gICAgaWYgKGRtc09iamVjdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBpZiAoaXRlbS5jb250ZW50KSB7XG5cbiAgICAgICAgbGV0IHVyaSA9IGAvZG1zLyR7aXRlbS5jb250ZW50LmlkfS9jb250ZW50P3R5cGU9JHtpdGVtLmNvbnRlbnQudHlwZX0mYXNkb3dubG9hZD10cnVlJnJlY3ljbGViaW49JHshIXJlY3ljbGViaW59YDtcbiAgICAgICAgaWYgKHJlbmRpdGlvbikge1xuICAgICAgICAgIHVyaSArPSBgJnJlbmRpdGlvbj0ke3JlbmRpdGlvbn0mX2ludGVudD1ET1dOTE9BRF8ke3JlbmRpdGlvbn1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVyaSArPSAnJl9pbnRlbnQ9RE9XTkxPQUQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLmNvbnRlbnQuaWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgICAgICB1cmkgKz0gYCZ2ZXJzaW9uPSR7aXRlbS52ZXJzaW9ufWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb3dubG9hZCh1cmksIGZpbGVOYW1lV2l0aFZlcnNpb25OdW1iZXIgPyBpdGVtLnZlcnNpb24gOiBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdUaGUgcHJvdmlkZWQgZG1zIG9iamVjdCBoYXMgbm8gY29udGVudCcsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkbXNPYmplY3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGxldCB1cmkgPSAnL2Rtcy9iYXRjaC9leHBvcnQnO1xuICAgICAgaWYgKGl0ZW0uY29udGVudCkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9ucyA9IGRtc09iamVjdHMubWFwKG9iaiA9PiBvYmouY29udGVudC5pZCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFsuLi5leHByZXNzaW9uc11cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHJlbmRpdGlvbjogJydcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGRhdGEub3B0aW9ucy5yZW5kaXRpb24gPSByZW5kaXRpb24gPyAnUERGJyA6IG51bGw7XG4gICAgICAgIHRoaXMuZG93bmxvYWRNdWx0aSh1cmksIGZpbGVOYW1lV2l0aFZlcnNpb25OdW1iZXIgPyBpdGVtLnZlcnNpb24gOiBudWxsLCBkYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdUaGUgcHJvdmlkZWQgZG1zIG9iamVjdCBoYXMgbm8gY29udGVudCcsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZCh1cmk6IHN0cmluZywgdmVyc2lvbj86IG51bWJlcikge1xuICAgIGNvbnN0IGJhc2VVcmkgPSB0aGlzLmdldENvbnRleHRQYXRoKCk7XG4gICAgdGhpcy5odHRwLmdldChgJHtiYXNlVXJpfSR7dXJpfWAsIHtvYnNlcnZlOiAncmVzcG9uc2UnLCByZXNwb25zZVR5cGU6ICdibG9iJywgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvcmVDb25maWcud2l0aENyZWRlbnRpYWxzfSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKFxuICAgICAgICAgIHJlcy5ib2R5LFxuICAgICAgICAgIHRoaXMuZ2V0RmlsZU5hbWVGcm9tSHR0cFJlc3BvbnNlKHJlcywgdmVyc2lvbilcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRvd25sb2FkTXVsdGkodXJpOiBzdHJpbmcsIHZlcnNpb24/OiBudW1iZXIsIF9ib2R5PzogYW55KSB7XG4gICAgY29uc3QgYmFzZVVyaSA9IHRoaXMuZ2V0Q29udGV4dFBhdGgoKTtcbiAgICB0aGlzLmh0dHAucG9zdChgJHtiYXNlVXJpfSR7dXJpfWAsIF9ib2R5LCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJywgcmVzcG9uc2VUeXBlOiAnYmxvYicsIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb3JlQ29uZmlnLndpdGhDcmVkZW50aWFsc30pXG4gICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhcbiAgICAgICAgICByZXMuYm9keSxcbiAgICAgICAgICB0aGlzLmdldEZpbGVOYW1lRnJvbUh0dHBSZXNwb25zZShyZXMsIHZlcnNpb24pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsZU5hbWVGcm9tSHR0cFJlc3BvbnNlKHJlczogSHR0cFJlc3BvbnNlPGFueT4sIHZlcnNpb246IG51bWJlcikge1xuICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciA9IHJlcy5oZWFkZXJzLmdldCgnQ29udGVudC1EaXNwb3NpdGlvbicpIHx8ICcnO1xuICAgIGNvbnN0IGVuY29kZWRGaWxlTmFtZU1hdGNoUmVzdWx0ID0gY29udGVudERpc3Bvc2l0aW9uSGVhZGVyLm1hdGNoKCdmaWxlbmFtZVxcXFwqPVVURi04XFwnXFwnKC4qKScpXG4gICAgICB8fCBjb250ZW50RGlzcG9zaXRpb25IZWFkZXIubWF0Y2goJ2ZpbGVuYW1lPVxcXCIoLiopXFxcIicpO1xuICAgIGNvbnN0IGVuY29kZWRGaWxlTmFtZSA9IGVuY29kZWRGaWxlTmFtZU1hdGNoUmVzdWx0ID8gZW5jb2RlZEZpbGVOYW1lTWF0Y2hSZXN1bHRbMV0gOiBudWxsO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZW5jb2RlZEZpbGVOYW1lID8gZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZWRGaWxlTmFtZSkgOiAndW5rbm93bic7XG4gICAgY29uc3QgaW5kZXggPSAhfmZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykgPyBmaWxlbmFtZS5sZW5ndGggOiBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpO1xuICAgIHJldHVybiAhdmVyc2lvbiA/IGZpbGVuYW1lIDogYCR7ZmlsZW5hbWUuc2xpY2UoMCwgaW5kZXgpfV92JHt2ZXJzaW9ufSR7ZmlsZW5hbWUuc2xpY2UoaW5kZXgpfWA7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIHRoZSBIVFRQIEhlYWRlcnNcbiAgICpcbiAgICogQHJldHVybnMgSHR0cEhlYWRlcnNcbiAgICovXG4gIHByaXZhdGUgc2V0RGVmYXVsdEhlYWRlcnMoKTogSHR0cEhlYWRlcnMge1xuICAgIHJldHVybiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdYLW9zLWluY2x1ZGUtbGlua3MnOiAnZmFsc2UnLFxuICAgICAgJ1gtb3MtaW5jbHVkZS1hY3Rpb25zJzogJ2ZhbHNlJyxcbiAgICAgICdYLW9zLXN5bmMtaW5kZXgnOiAndHJ1ZSdcbiAgICB9KTtcbiAgfVxufVxuIl19
|