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>
27 lines
891 B
TypeScript
27 lines
891 B
TypeScript
import type {
|
|
ConsentCategory,
|
|
UserConsentState,
|
|
ConsentGrantMeta,
|
|
} from "./consent-types";
|
|
|
|
/**
|
|
* Vendor-neutral consent management interface.
|
|
*
|
|
* Feature binders that receive a consent instance operate through this
|
|
* interface. Concrete implementations (Payload-backed, in-memory, etc.) are
|
|
* wired at DI bind time and never imported by feature packages directly.
|
|
*/
|
|
export interface IConsent {
|
|
/** Synchronous check — true when the subject has granted the category. */
|
|
isGranted(category: ConsentCategory): boolean;
|
|
|
|
/** Record a consent grant for the given category. */
|
|
grant(category: ConsentCategory, meta?: ConsentGrantMeta): Promise<void>;
|
|
|
|
/** Record a consent withdrawal for the given category. */
|
|
withdraw(category: ConsentCategory): Promise<void>;
|
|
|
|
/** Return the full list of per-category consent states. */
|
|
getCategories(): UserConsentState[];
|
|
}
|