Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
dfc3c37
feat: upgrade WebAuthnKit to v3.0.0
elukewalker Jun 9, 2026
5f01519
chore: update deploy toolchain for Java 17 + Node 20
elukewalker Jun 10, 2026
8adba68
fix: migrate Aurora Serverless v1 to v2, fix Docker SSO cache mount
elukewalker Jun 10, 2026
c2349cf
fix: migrate CreateDBSchemaFunctionCaller inline Lambda to AWS SDK v3
elukewalker Jun 10, 2026
5ef7cdc
fix: use presigned S3 URL for Amplify deployment to avoid bucket poli…
elukewalker Jun 10, 2026
11e3057
fix: replace missing ./db-client with data-api-client npm package
elukewalker Jun 10, 2026
79a2b6f
fix: ensure data-api-client is declared in all Lambda package.json files
elukewalker Jun 11, 2026
a6ee390
fix: replace data-api-client with SDK v3 shim for Node 20 compatibility
elukewalker Jun 11, 2026
d11df0c
fix: resolve v3.0.0 deploy script errors and registration flow bugs
elukewalker Jun 12, 2026
49a47dc
fix: correct BDD test selectors for v3.0.0 React component changes
elukewalker Jun 12, 2026
43cb148
fix: server-verified-pin change modal uses 'Change U2F Password' not …
elukewalker Jun 12, 2026
61424aa
fix: use Ignore button to permanently dismiss Recovery Codes modal in…
elukewalker Jun 12, 2026
7b38fd2
fix: wait for Recovery Codes modal before dismissing to prevent race …
elukewalker Jun 12, 2026
c0146b1
fix: wait for RC modal after credential list load; use Not now in exh…
elukewalker Jun 12, 2026
ce18cc0
fix: correct Delete button selector and restore Not now in captureRec…
elukewalker Jun 12, 2026
f118d8f
fix: default credentialNickname to 'Security Key' when not provided
elukewalker Jun 12, 2026
47d18c3
fix: add make to Dockerfile for SAM makefile build method
elukewalker Jun 12, 2026
cc1125e
fix: remove redundant sam package step from deploy script
elukewalker Jun 12, 2026
0048223
fix: forward authenticatorAttachment through API to Java Lambda
elukewalker Jun 22, 2026
1b1b70c
fix: correct PLATFORM case mismatch and null requestUV crash
elukewalker Jun 23, 2026
2f35ac0
fix: guard requireResidentKey in EditTrustedDevice against undefined
elukewalker Jun 23, 2026
7a5c0ae
fix: default nickname to Trusted Device for platform authenticators
elukewalker Jun 23, 2026
9bded38
chore: update package-lock.json for Node 20
elukewalker Jun 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Changelog

## [3.0.0] - 2026-06-09

### Breaking Changes
- Java Lambda runtime upgraded from `java8.al2` to `java17`
- Node.js Lambda runtime upgraded from `nodejs16.x` to `nodejs20.x`
- AWS SDK upgraded from v2 to v3 across all Node.js Lambda functions
- Yubico `webauthn-server-core` upgraded from 2.0.0 to 2.9.0

### Added
- **Passkey autofill (conditional mediation)**: New `/passkey` route enables browser-native passkey autofill for returning users with discoverable credentials
- **`autoComplete="username webauthn"`** hint on the login page username field for passkey autofill integration
- **Custom Gson TypeAdapters** for Java 17 compatibility:
- `ByteArrayTypeAdapter`: Serializes Yubico `ByteArray` as `{base64, base64url}` for frontend consumption
- `InstantTypeAdapter`: Serializes `java.time.Instant` as `{seconds, nanos}` for JavaScript `Date` construction
- `OptionalTypeAdapterFactory`: Handles `java.util.Optional` serialization blocked by Java 17 module system
- **`parseResidentKey()` method**: Supports both modern `residentKey` string values (`"discouraged"`, `"preferred"`, `"required"`) and legacy boolean `requireResidentKey` for backward compatibility
- **BDD test suite**: 24 Cucumber.js + Playwright end-to-end scenarios covering registration, authentication, credential management, recovery codes, usernameless login, passkey autofill, account deletion, server-verified PIN, and recovery code exhaustion

### Changed
- **AWS SDK v2 → v3**: Migrated `VerifyAuth`, `CreateAuth`, `FIDO2KitAPI`, and `DatabaseController` from `aws-sdk` monolith to `@aws-sdk/client-lambda` and `@aws-sdk/client-cognito-identity-provider`
- **Double-parse handling**: Node.js Lambda callers now handle Gson-serialized strings that get double-wrapped in quotes by the Lambda runtime
- **ByteArray unpacking**: `FIDO2KitAPI` extracts `.base64url` from Gson `ByteArray` objects for challenge IDs, request IDs, and credential IDs
- **`finishAuthentication()`** now returns `gson.toJson(result, AssertionResult.class)` for consistent serialization
- **Homepage**: Fixed `credentials === {}` object comparison bug (always returned `false`)

### Removed
- **FIDO Metadata Service (MDS)** integration: Removed `FidoMetadataService`, AAGUID lookup, and `AttestationRegistration` from the Java backend (simplifies deployment, removes external download dependency)
- **`JacksonCodecs.json()`** internal API usage: Replaced with standard `ObjectMapper` constructor
- **Unused dependencies**: Removed `yubico-util`, `guava`, `jackson-core/annotations/jdk8/jsr310/cbor`, `cbor`, `cose-java` from pom.xml

### Dependencies
- `webauthn-server-core`: 2.0.0 → 2.9.0
- `webauthn-server-attestation`: 2.0.0 → 2.9.0
- `aws-java-sdk-rdsdata`: 1.12.135 → 1.12.500
- `jackson-databind`: updated to 2.22.0
- `gson`: 2.8.9 → 2.10.1
- `lombok`: 1.18.22 → 1.18.38
- `maven-compiler-plugin`: updated to 3.11.0
- `log4j-slf4j18-impl` → `log4j-slf4j2-impl` 2.20.0
Loading