feat(core-consent): scaffold package with types, IConsent, withConsent brand wrapper
- Add packages/core-consent with ConsentCategory, ConsentState, UserConsentState types and IConsent interface - Add withConsent wrapper attaching __consentChecked brand at bind time; unit tests assert brand attachment and factory passthrough - Add ConsentChecked<F> type to core-shared/conformance/brands.ts and isConsentChecked helper to brand-runtime.ts - Extend FeatureManifest with requiresConsent?: readonly string[] field - Extend assertFeatureConformance to require __consentChecked brand when requiresConsent.length > 0; synthetic fixture tests cover pass/fail cases - Propagate __consentChecked in withSpan PROPAGATED_BRANDS so the outermost binding carries the brand Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
22
packages/core-consent/src/consent.interface.ts
Normal file
22
packages/core-consent/src/consent.interface.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import type { ConsentCategory, UserConsentState } 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): 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[];
|
||||
}
|
||||
Reference in New Issue
Block a user