* [ACS-12175] Fix annotation popup style
* [ACS-12175] Fix style and syntax issues for annotations
* [ACS-12175] Write unit test for date element
* [ACS-12175] Fix undefined error in unit test
* [ACS-12175] Use material theme for styling of popup
* [ACS-12175] Add style to title iinstead of using h1 header
* [ACS-12175] focus on annotation content
* [ACS-12175] Revert the change of background color
* [ACS-9584] Refresh after the change of name of a node
* [ACS-9584] Add unit test for name change
* [ACS-9584] Merge the changed fields onto the existing one
* [ACS-9584] Refresh does not happen after name change of a file
* [ACS-9584] Page only reload for extension and version change
* [ACS-9584] Add sidebarTemplateContext to unit test
* [ACS-9584] Add unit test for the changes in ngOnChanges
* Render spinner visibility rather than internal field
* [ACS-12286] Pass includeFields through to getRecentFiles for -recent-
loadFolderByNodeId forwarded includeFields to every custom source except
-recent-, and getRecentFiles had no includeFields parameter, hardcoding the
search include set. Thread includeFields through to the recent-files search
request (de-duplicated, defaults preserved) so callers can request extra
fields such as isFavorite.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* [ACS-12286] Document includeFields parameter for getRecentFiles
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* [ACS-12286] Use typed PersonEntry instead of any in getRecentFiles spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* fix: compensate for VM/Citrix clock drift in token expiry check
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* feat(core/auth): add TimeSyncDateTimeProvider for angular-oauth2-oidc clock drift correction
* feat(auth): add periodic clock re-sync to protect against mid-session drift in Citrix/VM environments
- Add startPeriodicSync() and stopPeriodicSync() to TimeSyncService
- Re-sync clock offset every 5 minutes and on document visibility change
- Add security cap (maxAllowedOffsetMs) to reject unreasonably large offsets
- Preserve existing offset on sync failures instead of resetting to 0
- Wire periodic sync start in RedirectAuthService.configureAuth()
- Wire periodic sync stop in RedirectAuthService.logout()
- Add unit tests for periodic sync and offset cap behavior
* feat: replace dedicated time API with passive Date response header interception
- Add `updateClockOffsetFromDateHeader()` to `TimeSyncService` so the clock
offset can be updated from any HTTP `Date` response header (RFC 7231)
- Make `serverTimeUrl` config optional: `syncClockOffset` is a safe no-op and
`checkTimeSync` uses the stored `clockOffsetMs` when no URL is configured
- Add `DateHeaderTimeSyncInterceptor` that reads the `Date` header from every
HTTP response and passively keeps `TimeSyncService.clockOffsetMs` current
- Register the new interceptor in `provideCoreAuth()` / `AuthModule`
- Export `DateHeaderTimeSyncInterceptor` from the public API
- Add unit tests for all new paths
* feat: retry token refresh before checking for clock out-of-sync
- tokenHasExpiredDueToClockOutOfSync$: skip the first "token expired" event
so the library's automatic refresh has a chance to run before clock drift
is diagnosed as the root cause
- oauthErrorEventOccurDueToClockOutOfSync$: use scan() to skip the first
token_refresh_error (allowing one retry) and only check clock sync on the
second occurrence; all other error types are still checked immediately
- Update test for token expiry: now requires two events before logout
- Replace single token_refresh_error clock-sync test with two tests:
one verifying no logout on first error, one verifying logout on second
* fix(core): remove duplicate @angular/common/http import in date-header-time-sync interceptor spec
* fix(core): treat empty/whitespace serverTimeUrl as not configured in TimeSyncService
* fix(core): limit DateHeaderTimeSyncInterceptor to IAM API responses only
* refactor: remove tokenHasExpiredDueToClockOutOfSync$ and re-sync clock + refresh token on validation failure
Instead of having a separate observable that detects token expiration due to clock
drift and immediately logs the user out, the oauthErrorEventOccurDueToClockOutOfSync$
now re-syncs the clock offset and attempts a token refresh when clock drift is detected.
Only if the refresh fails after re-syncing does it propagate the error and trigger logout.
* fix(auth): check token validity after clock re-sync before attempting refresh
After re-syncing the clock offset, the code now checks whether the token
is actually still valid using the corrected time (via tokenHasExpired()).
If the token is valid, no refresh is needed — the token only appeared
expired due to clock drift. This avoids the impossible situation of
retrying a token refresh when the triggering error was itself a refresh
error.
* refactor(auth): replace IAM header interceptor with HEAD request to app root for time sync
Instead of passively reading the Date header from IAM responses (which
requires IAM to be reachable and has CORS constraints), the TimeSyncService
now makes a lightweight HEAD request to the application's own root URL
(served by nginx). This is simpler and more reliable because:
- No CORS issues (same origin)
- Nginx always includes a Date header
- HEAD request has minimal payload (no body)
- Works before authentication is established
- No dedicated serverTimeUrl configuration needed
The DateHeaderTimeSyncInterceptor has been removed as it is no longer needed.
* fix(auth): reset tokenRefreshErrorCount on successful token event
The tokenRefreshErrorCount in the oauthErrorEventOccurDueToClockOutOfSync$
stream now resets to 0 when a 'token_received' or 'token_refreshed' event
occurs. This prevents intermittent errors that self-correct from
accumulating toward the clock-drift detection threshold.
* fix(core): provide meaningful error message when API response body is null
When the server returns no response body (e.g., during token expiration,
network interruption, or CORS failures), err.error is null causing
JSON.stringify(null) to produce the unhelpful message "null".
Now we explicitly handle the null case and produce a message like
"401 Unauthorized" instead of "null".
* fix: resync clock before invalidating tokens at startup
At startup, when the first OAuth event fires, the service checks if the
access token is valid. Previously it would immediately clear storage if
the token appeared invalid. This could cause false negatives when the
local clock was out of sync (e.g. VM/Citrix environments).
Now the service first re-syncs the clock offset via TimeSyncService, then
re-evaluates the token validity. Storage is only cleared if the token is
still invalid after the corrected time check.
* Remove maxAllowedOffsetMs from TimeSyncService
* Fix startPeriodicSync call to match updated signature
* WIP
* Add Flag
* AAE-48166 Sync time using server time
* AAE-48166 Fix unit test
* AAE-48166 Fix service
* AAE-48166 Fix service
* AAE-48166 Fix service and add tests
* AAE-48166 Use app root instead of server time url
* AAE-48166 Use oauth2.timeSync config key for time sync gate
* AAE-48166 Keep redirect auth flow unchanged when time sync is disable
* Add oauth2.showDebugInformation and related debug logging for time sync
* AAE-48166 Fix multi-tab OIDC refresh failures by resyncing server time when timeSync enabled
* AAE-48166 Avoid repeated server time calls by caching the result for 2 seconds
* AAE-48166 test(auth): cover timeSync clock sync for implicit flow silent refresh
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Eugenio Romano <eromano@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Diogo Bastos <diogo.bastos@hyland.com>
Co-authored-by: alep85 <amedeo.lepore@hyland.com>
* [MNT-25230] Displayed user displayName in version history for specific version
* [MNT-25230] Unit tests
* [MNT-25230] Addressed copilot comment
* [MNT-25230] Addressed copilot comment
* [MNT-25230] Addressed copilot comment
* [MNT-25230] Addressed copilot comment
* [MNT-25230] Addressed copilot comment
* AAE-43974 Fix for alfresco-content-app e2e failure
* AAE-43974 Refactored based on review comments
* AAE-43974 Removing unit test cases written for isError as it is being tested by passwordErrorStateMatcher
* [ci:force] re-trigger CI
* refactor: switch form service getTask to use runtime bundle API instead of query service
* Update form-cloud.service.ts
* Add TaskDetailsCloudModelRuntimeBundle interface
* Update getTaskById to return TaskDetailsCloudModelRuntimeBundle
* Modify return type of getTaskById method
Updated return type of getTaskById to include TaskDetailsCloudModel.
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Refactor TaskDetailsCloudModel by removing fields
Removed unused properties from TaskDetailsCloudModel.
* Update task-cloud.service.ts
* Update task-cloud.service.ts
* fix: add 404 fallback to query service in FormCloudService.getTask for completed tasks
* AAE-47634 getTaskById: call Runtime Bundle first, fall back to Query Service on 404
* AAE-47634 Gate Runtime Bundle task fallback behind ADF_TASK_RUNTIME_BUNDLE_FALLBACK_ENABLED token and drop no longer used taskDetailsSource input
* refactor: update task fetching tests to use async/await and firstValueFrom
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Eugenio Romano <eromano@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: alep85 <amedeo.lepore@hyland.com>
* [PRODSEC-13253] Increased peerDependencies versions to allow to increase angular version in other projects
* [PRODSEC-13253] Addressec copilot comments
* AAE-47634 Add taskDetailsSource input to read task from
* AAE-47634 Fall back to Query strategy when taskDetailsSource is unsupported
* AAE-47634 Reset loading state when task details request fails
* AAE-47634 Reload task on taskDetailsSource change
* chore: migrate to Angular 20, TypeScript 5.9, and supporting packages
chore: migrate to Angular 20, TypeScript 5.9, and supporting packages
This commit migrates the Nx monorepo from Angular 19 to Angular 20
and updates all related dependencies to their compatible versions.
- @angular/core: 19.2.18 → 20.3.9
- @angular/material: 19.2.19 → 20.2.14
- @angular/cdk: 19.2.19 → 20.2.14
- @angular/material-date-fns-adapter: 19.2.19 → 20.2.14
- typescript: 5.8.3 → 5.9.3
- ng-packagr: 19.2.2 → 20.3.2
- @angular-devkit/build-angular: 19.2.19 → 20.3.16
- @angular-devkit/architect: 0.1902.19 → 0.2003.16
- @angular-devkit/core: 19.2.19 → 20.3.16
- @angular-devkit/schematics: 19.2.19 → 20.3.16
- @schematics/angular: 19.2.7 → 20.3.16
- @angular-eslint/eslint-plugin: 19.3.0 → 20.7.0
- @angular-eslint/eslint-plugin-template: 19.3.0 → 20.7.0
- @angular-eslint/template-parser: 19.3.0 → 20.7.0
- @typescript-eslint/eslint-plugin: 6.21.0 → 8.55.0
- @typescript-eslint/parser: 6.21.0 → 8.55.0
- @typescript-eslint/typescript-estree: 8.41.0 → 8.55.0
- @typescript-eslint/utils: ^8.51.0 → 8.55.0
- nx: 22.4.1 → 22.5.1
- @nx/angular: 22.1.3 → 22.5.1
- @nx/eslint-plugin: 22.3.3 → 22.5.1
- @nx/js: 22.1.3 → 22.5.1
- @nx/node: 22.1.3 → 22.5.1
- @nx/storybook: ^20.8.4 → 22.5.1
- @nx/workspace: 22.4.5 → 22.5.1
- @nx/webpack: 22.3.3 → 22.5.1
- storybook: ^10.2.0 → 10.2.8
- @storybook/angular: ^10.2.0 → 10.2.8
- @storybook/addon-themes: ^10.2.0 → 10.2.8
1. **PortalInjector Removal (Angular CDK 20)**
- Replaced PortalInjector usage with Injector.create()
- Updated context-menu-overlay.service.ts to use new API
2. **ESLint Configuration**
- Removed deprecated @typescript-eslint/brace-style rule
- This rule was removed in @typescript-eslint v8
All libraries build successfully:
- ✅ js-api
- ✅ extensions
- ✅ core
- ✅ content-services
- ✅ process-services
- ✅ process-services-cloud
- ✅ insights
Dependencies were installed using npm install --legacy-peer-deps due to
peer dependency conflicts with @mat-datetimepicker/core which requires
Angular CDK ^19.0.0 but we are using 20.2.14.
- ESLint warnings about @angular-eslint/prefer-inject are expected - this
is a new recommendation in Angular 20 to use inject() function instead
of constructor injection. These can be addressed in a follow-up PR.
chore: migrate to Angular 20, TypeScript 5.9, and supporting packages
This commit migrates the Nx monorepo from Angular 19 to Angular 20
and updates all related dependencies to their compatible versions.
- @angular/core: 19.2.18 → 20.3.9
- @angular/material: 19.2.19 → 20.2.14
- @angular/cdk: 19.2.19 → 20.2.14
- @angular/material-date-fns-adapter: 19.2.19 → 20.2.14
- typescript: 5.8.3 → 5.9.3
- ng-packagr: 19.2.2 → 20.3.2
- @angular-devkit/build-angular: 19.2.19 → 20.3.16
- @angular-devkit/architect: 0.1902.19 → 0.2003.16
- @angular-devkit/core: 19.2.19 → 20.3.16
- @angular-devkit/schematics: 19.2.19 → 20.3.16
- @schematics/angular: 19.2.7 → 20.3.16
- @angular-eslint/eslint-plugin: 19.3.0 → 20.7.0
- @angular-eslint/eslint-plugin-template: 19.3.0 → 20.7.0
- @angular-eslint/template-parser: 19.3.0 → 20.7.0
- @typescript-eslint/eslint-plugin: 6.21.0 → 8.55.0
- @typescript-eslint/parser: 6.21.0 → 8.55.0
- @typescript-eslint/typescript-estree: 8.41.0 → 8.55.0
- @typescript-eslint/utils: ^8.51.0 → 8.55.0
- nx: 22.4.1 → 22.5.1
- @nx/angular: 22.1.3 → 22.5.1
- @nx/eslint-plugin: 22.3.3 → 22.5.1
- @nx/js: 22.1.3 → 22.5.1
- @nx/node: 22.1.3 → 22.5.1
- @nx/storybook: ^20.8.4 → 22.5.1
- @nx/workspace: 22.4.5 → 22.5.1
- @nx/webpack: 22.3.3 → 22.5.1
- storybook: ^10.2.0 → 10.2.8
- @storybook/angular: ^10.2.0 → 10.2.8
- @storybook/addon-themes: ^10.2.0 → 10.2.8
1. **PortalInjector Removal (Angular CDK 20)**
- Replaced PortalInjector usage with Injector.create()
- Updated context-menu-overlay.service.ts to use new API
2. **ESLint Configuration**
- Removed deprecated @typescript-eslint/brace-style rule
- This rule was removed in @typescript-eslint v8
All libraries build successfully:
- ✅ js-api
- ✅ extensions
- ✅ core
- ✅ content-services
- ✅ process-services
- ✅ process-services-cloud
- ✅ insights
Dependencies were installed using npm install --legacy-peer-deps due to
peer dependency conflicts with @mat-datetimepicker/core which requires
Angular CDK ^19.0.0 but we are using 20.2.14.
- ESLint warnings about @angular-eslint/prefer-inject are expected - this
is a new recommendation in Angular 20 to use inject() function instead
of constructor injection. These can be addressed in a follow-up PR.
To fix these automatically, run:
ng generate @angular/core:inject --path=lib
fix: resolve peer dependency conflicts for CI/CD
- Update @mat-datetimepicker/core from 15.0.2 to 16.0.1 (supports Angular 20)
- Update webpack override to 5.104.1 for consistency
- Add .npmrc with legacy-peer-deps=true for npm ci compatibility
- Fixes npm ci failures in CI/CD pipeline
fix: update webpack to 5.105.0 for Storybook compatibility
- Align webpack version with @angular-devkit/build-angular bundled version
- Fixes Storybook compilation error with webpack instance mismatch
- Removes unnecessary webpack overrides
chore: finalize Angular 20 migration and improve migration prompt
- Marked all migration tasks as completed in the migration plan.
- Added a comprehensive summary of the migration process, including phases, completed tasks, and known issues.
- Introduced an improved migration prompt that addresses critical considerations and provides a detailed migration strategy for Angular 20 and related packages.
fix: update migration prompt and tests for Angular 20 breaking changes
- Enhanced migration prompt with specific instructions for handling Angular CDK Directionality API changes and removal of ng-reflect-* attributes.
- Updated unit tests to replace deprecated ng-reflect-* attribute checks with appropriate Angular testing patterns.
- Adjusted user preferences service to utilize the new directionality API method for setting text direction.
fix: enhance ImgViewerComponent to handle cleanup and prevent errors after destruction
- Added a `destroyed` flag to manage component lifecycle and prevent operations on a destroyed instance.
- Implemented `afterEach` hooks in tests to ensure proper fixture cleanup.
- Updated key event handlers and methods to check for the `destroyed` state before executing actions, improving stability and preventing errors.
feat: update ESLint configuration to include @angular-eslint/prefer-inject rule
- Added the @angular-eslint/prefer-inject rule to .eslintrc.json files in content-services, process-services, and process-services-cloud, promoting the use of the inject() function for dependency injection.
- Made minor adjustments to comments in search-logical-filter.component.ts for clarity.
chore: update ESLint configuration to include @angular-eslint/prefer-inject rule
- Added the @angular-eslint/prefer-inject rule to .eslintrc.json files in extensions, insights, and js-api, promoting the use of the inject() function for dependency injection.
- Removed unnecessary eslint-disable comments in process-list-cloud.component.ts and base-task-list-cloud.component.ts for cleaner code.
remove unnecessary changes
remove useless changes
cleanup useless changes
remove useless changes
Update package.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
chore: update version of @ngx-translate/core to 17.0.0 in package.json and package-lock.json
Update package.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Update package.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Update .npmrc
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
chore: upgrade apollo-angular and jest packages to support Angular 20
- Upgrade apollo-angular from 10.0.3 to 13.0.0
- Upgrade @apollo/client from 3.13.1 to ^4.0.1
- Upgrade jest packages to v30 (jest, jest-environment-jsdom)
- Upgrade jest-preset-angular from 14.4.2 to 16.1.1
- Add overrides for Angular 20 peer dependency compatibility
chore: downgrade @apollo/client and apollo-angular to compatible versions
chore: downgrade @apollo/client and apollo-angular to compatible versions
chore: remove unused configuration options from jest and tsconfig
chore: refactor window.location mock in oauth2 tests for improved clarity and functionality
chore: enhance oauth2Auth tests and improve hash handling logic
chore: remove @typescript-eslint/brace-style rule from ESLint configuration
chore: add prefer-optional-chain rule to ESLint configuration
chore: update ESLint rules for optional chaining and refactor type definitions
chore: refactor tests to use TestBed for dependency injection in FileViewer and ProcessFormRendering services
chore: update AttachFileWidgetComponent to ensure early return after download
chore: update AttachFileWidgetComponent to ensure early return after download
chore: update unselectFacetBucket method to use optional chaining for safer property access
* chore: clean up package-lock.json and update webpack version in package.json
* [ACS-11306] Corrected main for eslint-angular
* [ACS-11306] Reverted unwanted change
* [ACS-11306] Fixed importing issue on ACA
* [ACS-11306] Updated node-fetch
* [ACS-11306] Reverted last commit
* [ACS-11306] Fixed rendering issue with pdf viewer
* [ACS-11306] Corrected storybook related versions
* Updating dependencies and fixing conflict
* [ACS-11306] Fixed cannot find name Buffer occurred in ACA
* chore: Updating pnpm lock file
* chore: Fixing ESLint issue
* chore: Upgrading to version 20.3.24 to avoid security issue
* chore: Fixing unit test
* chore: Fixing type and exporting missing model
* chore: Fixing type
* Chore: Migrating to Angular 20.3.25 to mitigate security issues
* Fix after rebase
* Removing unused deps
* Aligning deps
* fix create dialog name field hint (#12007)
---------
Co-authored-by: Aleksander Sklorz <Aleksander.Sklorz@hyland.com>
Co-authored-by: Ehsan Rezaei <ehsan.rezaei@hyland.com>
Co-authored-by: Grzegorz Jaśkowski <138671284+g-jaskowski@users.noreply.github.com>
* [ACS-11928] convert ReadStream to Blob before appending to FormData
* [ACS-11928] comments removed from toFormDataValue
* Trigger Build
* [ACS-11928] added unit tests and changed the blob variable name to data
* [ACS-11928] unit tests updated
* [ACS-11928] updated type in multipart form data upload
* [ACS-11928] sonar cloud fix
* [AAE-46514] - Fix release workflow
* [AAE-46514] - Fix release workflow - devDependencies
* [AAE-46514] - Command parameters are wrong when setting now the options
* [AAE-46514] - It should call the script not the standard command
* [AAE-46514] - fixed path for eslint plugin publish
* [AAE-46514] - using by default ignore-scripts and have a trusted list for those who are trusted
* [AAE-46514] - Improved the checks to cover more cases
* [AAE-46514] - Fixed copilot comments
* [AAE-46514] - OTher fixes
* [AAE-46514] - Fixing other improvements and comments
* [AAE-46514] - npmrc should be versioned to enforce the audit
* [AAE-46514] - Improved code
* [AAE-46514] - Removed the check on CI as we have other tools
* [AAE-46514] - Improved check, updated descriptions, skip check on CI as there is already Sonar
* [AAE-46514] - Reduced functions in smaller pieces
* [AAE-46514] - Migrating to Pnpm to increase safety
* [ci:force] - Checking
* [ci:force] - Fixed complexity of the scripts
* [ci:force] - Fixed complexity of the scripts
* [ci:force] - Fixed wrong typing on yml
* [ci:force] - Fixed sonar comments and added correct version to sha pinned action
* [ci:force] - Fixed cache hit for npmn
* [ci:force] - Improved eslint plugin so it can be built with standard action
* [ci:force] - Improved eslint plugin so it can be built with standard action
* [ci:force] - Added minimatch
* [ci:force] - Fixing issues
* [ci:force] - Removed 'run' as it is not needed
* [ci:force] - Using audit in place of custom scripts
* [ci:force] - Fixed vulnerabilities and removed custom scripts in favor of audit --critical
* [ci:force] - Added minimum time for publishing to install
* [ci:force] - Address issue with too new packages
* [ci:force] - Address issue with too new packages