Skip to content

feat: biometric auth hardening and webhook event catalog#654

Merged
Smartdevs17 merged 1 commit into
Smartdevs17:mainfrom
gidson5:feat/issues-552-570
Jun 25, 2026
Merged

feat: biometric auth hardening and webhook event catalog#654
Smartdevs17 merged 1 commit into
Smartdevs17:mainfrom
gidson5:feat/issues-552-570

Conversation

@gidson5

@gidson5 gidson5 commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Implement biometric authentication hardening with device-bound keys #552: Hardened biometric authentication — exponential backoff lockout (3 failures → 3min, 6 → 10min, 9 → 30min), DeviceAttestationService with root/jailbreak detection, device-bound key pair tracking, bcrypt PIN hash storage (6+ digits), enrollment change detection, BiometricPolicy type, authenticateHardened() with lockout enforcement, useDeviceIntegrity hook with 24h cached attestation
  • Implement subscription lifecycle webhook event catalog #570: Comprehensive webhook event catalog (35 events) — subscription.* (13 events), payment.* (7 events), invoice.* (5 events), trial.* (4 events), usage.* (3 events), plan.* (4 events); EventCatalogRegistry with wildcard filtering (subscription.*), EventSchemaValidator with typed field validation, EventReplayWorker with per-subscription ordering guarantee and idempotency key deduplication, event versioning with Deprecation/Sunset/Link headers, expanded WebhookEventType union

Closes #552
Closes #570

Test plan

  • BiometricService: authenticateHardened() returns lockout error after 3 failures, resets on success
  • DeviceAttestationService: checkIntegrity() returns isIntact/isRooted/isEmulator, cached for 24h
  • PIN hash: stored and verified via setPinHash/verifyPin
  • EventCatalogRegistry: 35 events registered, getByCategory('payment') returns 7 events, wildcard subscription.* matches 13 events
  • EventSchemaValidator: rejects missing required fields, rejects wrong types, generates examples
  • EventReplayWorker: replays events in chronological order per subscription, skips already-delivered idempotency keys

🤖 Generated with Claude Code

- Harden biometric auth with exponential backoff lockout (3/10/30 min tiers) (Smartdevs17#552)
- Add DeviceAttestationService with root/jailbreak detection (Smartdevs17#552)
- Add device-bound key tracking, PIN hash storage, enrollment change detection (Smartdevs17#552)
- Add BiometricPolicy type and authenticateHardened() with lockout enforcement (Smartdevs17#552)
- Add useDeviceIntegrity hook with 24h cached attestation (Smartdevs17#552)
- Add EventCatalogRegistry with 35 typed events across 6 categories (Smartdevs17#570)
- Add EventSchemaValidator with field type and required checks (Smartdevs17#570)
- Add EventReplayWorker with per-subscription ordering and idempotency (Smartdevs17#570)
- Expand WebhookEventType to 35+ events covering full lifecycle (Smartdevs17#570)
- Support wildcard event filtering (subscription.*, payment.*) (Smartdevs17#570)
- Add event versioning with Deprecation/Sunset headers (Smartdevs17#570)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@drips-wave

drips-wave Bot commented Jun 24, 2026

Copy link
Copy Markdown

@gidson5 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@Smartdevs17 Smartdevs17 merged commit 6a1e599 into Smartdevs17:main Jun 25, 2026
1 check passed
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.

Implement subscription lifecycle webhook event catalog Implement biometric authentication hardening with device-bound keys

3 participants