feat(core-consent): add PayloadConsent, RecordingConsent and DI binders

Implements the Payload-backed IConsent that reads/writes users.consentState
and emits CONSENT_GRANT/CONSENT_WITHDRAW audit entries via injected auditLog.
Adds RecordingConsent test double in core-testing for unit-test injection.
Adds bindProductionConsent/bindDevSeedConsent DI binders and InMemoryConsent
for dev/seed contexts. Contract tests cover grant/withdraw/isGranted round-trip,
audit entry shape, metadata persistence (bannerVersion/policyVersion/method),
and getCategories reflection of state.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-19 12:39:31 +00:00
parent 5792b7412a
commit 7dd46b68b2
20 changed files with 936 additions and 27 deletions

View File

@@ -1,4 +1,8 @@
import type { ConsentCategory, UserConsentState } from "./consent-types";
import type {
ConsentCategory,
UserConsentState,
ConsentGrantMeta,
} from "./consent-types";
/**
* Vendor-neutral consent management interface.
@@ -12,7 +16,7 @@ export interface IConsent {
isGranted(category: ConsentCategory): boolean;
/** Record a consent grant for the given category. */
grant(category: ConsentCategory): Promise<void>;
grant(category: ConsentCategory, meta?: ConsentGrantMeta): Promise<void>;
/** Record a consent withdrawal for the given category. */
withdraw(category: ConsentCategory): Promise<void>;