chore(deps): upgrade major dependencies and ESLint 9#78
Conversation
- jest: 29 → 30 - jest-junit: 16 → 17 (fixes uuid security vulnerability) - typescript: 5 → 6 - globby: 14 → 16 - @adobe/aio-lib-ims (peer): 7 → 8 Reduces security vulnerabilities from 6 to 5. All tests pass with 100% coverage. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- eslint: 8.57.1 → 9.0.0 - @adobe/eslint-config-aio-lib-config: 4.0.0 → 5.0.0 - neostandard: added (replaces eslint-config-standard + plugins) Removed dependencies (now provided by neostandard): - eslint-config-standard - eslint-plugin-import - eslint-plugin-jest - eslint-plugin-n - eslint-plugin-node - eslint-plugin-promise Migrated from .eslintrc.json to eslint.config.js (flat config format). Added Jest globals configuration for test files. All tests pass with 100% coverage. Linting passes. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Version 8.1.2 updates @adobe/aio-lib-state from v3 to v5, which removes the @azure/cosmos dependency and its vulnerable uuid < 14.0.0. Note: npm audit still reports 5 vulnerabilities due to a nested copy of @adobe/aio-lib-ims-jwt with old peer dependencies, but this is a false positive - the nested copy is not used at runtime (peer dependencies take precedence). Related: adobe/aio-lib-ims#174 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
| }, | ||
| "peerDependencies": { | ||
| "@adobe/aio-lib-ims": "^7" | ||
| "@adobe/aio-lib-ims": "^8.1.2" |
There was a problem hiding this comment.
@itavy One thing I want to double check here is the peer dependency move from @adobe/aio-lib-ims@^7 to ^8.1.2. I understand we needed 8.1.2 for the audit cleanup , but it means consumers using aio-lib-ims-jwt with aio-lib-ims@7 will now get peer dependency issues, right?
There was a problem hiding this comment.
@dthampy Great catch! You're absolutely right - this is a breaking change. Let me break down the implications:
Analysis
The concern is valid - changing from ^7 to ^8.1.2 has compatibility implications.
Impact:
- Consumers on aio-lib-ims@7.x will get peer dependency warnings
- This should be a major version bump (5.0.2 → 6.0.0), not a patch
- We're enforcing a minimum version to ensure the uuid vulnerability is resolved
Options Considered:
Option A: Keep ^8 instead of ^8.1.2
- Less restrictive (allows 8.0.0+)
- Audit warnings persist for consumers on 8.0.x-8.1.1, but it's a false positive (nested copy not used at runtime)
Option B: Keep ^8.1.2 and release as v6.0.0 ⭐ RECOMMENDED
- Forces consumers to use the fixed version
- Released as major version (6.0.0) to properly signal breaking change
- Cleaner from security perspective - no audit warnings
- Once aio-lib-ims updates to depend on v6.0.0, the circular dependency resolves correctly
Option C: Revert to ^7
- Most conservative
- Keeps compatibility but maintains audit warnings
Key Insight:
We already introduced a breaking change in commit 1 by moving from ^7 to ^8. The question is just how restrictive to be within v8.
Since:
- We're already breaking compatibility with v7
- We should enforce the fixed version (8.1.2+) to eliminate audit warnings
- Major version bump properly signals this to consumers
I recommend Option B - keep ^8.1.2 and release this as v6.0.0.
Question:
Is aio-lib-ims@7 still actively maintained, or is everything moving to v8 now? This would help determine if we need to maintain backwards compatibility or if a clean break is acceptable.
What do you think?
There was a problem hiding this comment.
Update: Long-term Option D
After analyzing the codebase, I found that the circular dependency can be broken by extracting shared code!
Option D: Extract @adobe/aio-lib-ims-core ⭐ BEST LONG-TERM
Why the circular dependency exists:
aio-lib-imsimportsaio-lib-ims-jwtas a pluginaio-lib-ims-jwtonly needs 2 methods:ims.getApiUrl()andims.exchangeJwtToken()
Solution: Create new core package with just those methods:
aio-lib-ims-core (NEW)
├── Core IMS functionality (API URLs, token exchange)
└── Plugin interface definitions
aio-lib-ims-jwt
├── depends on: aio-lib-ims-core (NOT aio-lib-ims)
└── implements: ImsPlugin interface
aio-lib-ims
├── depends on: aio-lib-ims-core
└── depends on: aio-lib-ims-jwt (as plugin)
Benefits:
- ✅ No circular dependency (clean architecture)
- ✅ No audit false positives
- ✅ Easier to add more auth plugins
- ✅ Proper separation of concerns
Effort: ~1-2 weeks for extraction, refactoring, and testing
Implementation: Can be done as pre-releases (beta) to validate before stable
I've created a detailed proposal: Issue #79
Recommendation
Short-term (this PR): Go with Option B - keep ^8.1.2, release as v6.0.0
Long-term: Consider Option D (core extraction) as outlined in #79
The short-term fix gets us moving now, while the long-term fix provides the cleanest architecture.
Thoughts?
There was a problem hiding this comment.
⚠️ Additional Context: JWT is Deprecated
Important discovery: JWT authentication is officially deprecated as of June 30, 2025.
From Adobe Developer docs:
As of June 30, 2025, Service Account (JWT) credentials have reached their end of life and are no longer supported. All server-to-server integrations must use the OAuth Server-to-Server credentials.
Impact on Our Discussion
This changes the context for both short-term and long-term decisions:
For this PR (Option B):
- Still valid - existing JWT consumers need updates
- But consider: How long should we maintain JWT support?
For Option D (core extraction):
- Lower priority if JWT is sunset soon
- Higher priority if OAuth uses similar plugin architecture
- Questions: Does
@adobe/aio-lib-ims-oauthuse the same patterns? Would core extraction benefit OAuth implementation?
Key Questions for @dthampy:
- What's the support timeline for JWT (immediate sunset vs. gradual deprecation)?
- Is
aio-lib-ims-oauththe recommended path forward? - Does OAuth benefit from the same architectural improvements?
Migration Guide: https://developer.adobe.com/developer-console/docs/guides/authentication/ServerToServerAuthentication/migration
This context should inform our decision on whether to invest in architectural refactoring vs. minimal maintenance mode.
|
@itavy thanks for the breaking down the options. But I don't want to make a call myself here since this affects the public package contract. So I'd pull in @shazron and @purplecabbage to help confirm the right direction. @shaz @jesse could you take a look at the peer dependency change here? The PR currently moves @adobe/aio-lib-ims from ^7 to ^8.1.2. That seems ok from the audit perspective, but that means it would drop compatibility with consumers still on v7 and likely means aio-lib-ims-jwt should be released as a major version. What direction do we want to go here? |
|
@dthampy @itavy Definitely would need a major version change. From my experience with https://github.com/adobe/eslint-config-aio-lib-config#publishing- not doing one will break users as already mentioned. As for Long Term Option D - I wouldn't bother. We just had a discussion where we are probably going to merge all the "ims plugins" into aio-lib-ims to reduce the complexity and most likely dropping the jwt plugin. |
🔗 Related PR: adobe/aio-lib-ims#174
The remaining uuid vulnerability will be resolved once the above PR is merged and a new version of @adobe/aio-lib-ims is published.
Summary
This PR upgrades all major dependencies to their latest compatible versions and migrates to ESLint 9 with flat config format.
Commit 1: Upgrade major dependencies
Commit 2: Upgrade to ESLint 9 with flat config
Test Plan
Security Impact
Note on Remaining uuid Vulnerability
The remaining 5 vulnerabilities are all the same issue:
Deprecation Warnings
What Cannot Be Upgraded (Blocked)
ESLint 10
Remaining Deprecations
All 3 warnings are transitive dependencies in jest@30:
Files Changed
package.json- dependency updateseslint.config.js- new flat config (added).eslintrc.json- old config (removed)🤖 Generated with Claude Code