Skip to content

Conversation

@pditommaso
Copy link
Collaborator

Summary

  • Create lib-pairing Gradle submodule for credential federation functionality
  • Move pairing service, WebSocket transport, and message types to new module
  • Extract configuration into PairingConfig interface with implementation in Wave
  • Create LicenseValidator interface for decoupling license validation
  • Rename package from io.seqera.wave.service.pairing to io.seqera.service.pairing
  • Update all Wave imports to reference the new library package

Changes

New lib-pairing module structure

lib-pairing/
├── src/main/groovy/io/seqera/service/pairing/
│   ├── PairingConfig.groovy (interface)
│   ├── PairingService.groovy (interface)
│   ├── PairingServiceImpl.groovy
│   ├── PairingRecord.groovy
│   ├── PairingStore.groovy
│   ├── LicenseValidator.groovy (interface)
│   ├── exchange/
│   │   ├── PairingRequest.groovy
│   │   └── PairingResponse.groovy
│   └── socket/
│       ├── PairingWebSocket.groovy
│       ├── PairingChannel.groovy
│       ├── PairingOutboundQueue.groovy
│       ├── PairingInboundStore.groovy
│       ├── PairingMessageEncodeStrategy.groovy
│       └── msg/
│           ├── PairingMessage.groovy
│           ├── PairingResponse.groovy
│           ├── PairingHeartbeat.groovy
│           ├── ProxyHttpRequest.groovy
│           └── ProxyHttpResponse.groovy
├── build.gradle
├── VERSION
└── README.md

Wave integration

  • PairingConfigImpl implements PairingConfig with @Value annotations
  • LicenseManValidator implements LicenseValidator to bridge to LicenseManClient
  • All imports updated to use io.seqera.service.pairing package

Test plan

  • All 15 pairing tests pass
  • Manual verification of pairing WebSocket endpoint
  • Integration test with Tower credential federation

🤖 Generated with Claude Code

pditommaso and others added 2 commits January 12, 2026 15:22
- Create lib-pairing Gradle submodule for credential federation functionality
- Move pairing service, WebSocket transport, and message types to new module
- Extract configuration into PairingConfig interface with implementation in Wave
- Create LicenseValidator interface for decoupling license validation
- Rename package from io.seqera.wave.service.pairing to io.seqera.service.pairing
- Update all Wave imports to reference the new library package

The lib-pairing module provides:
- RSA key pair generation and caching for secure credential sharing
- WebSocket-based bidirectional communication for real-time messaging
- HTTP request/response proxying over WebSocket connections
- Distributed state management via Redis-backed stores

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add PairingMessageEncodeStrategyTest: polymorphic message encoding/decoding
- Add PairingRecordSerializationTest: record serialization with Moshi
- Add PairingExchangeSerializationTest: request/response model tests
- Use Spock 'where:' clauses for data-driven tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants