import { type Confidential, Default, NAME, pattern, UI, type VNode, } from "commonfabric"; import { cfcPattern, exchangeRule, exchangeRules, type PolicyOf, THIS_POLICY, v, } from "commonfabric/cfc"; export const releaseToSpaceReader = exchangeRule({ appliesTo: THIS_POLICY, pre: { integrity: [ cfcPattern.hasRole(v("reader"), THIS_POLICY.subject, "reader"), ], }, post: { addAlternatives: [cfcPattern.user(v("reader"))], }, }); export const directReleaseRules = exchangeRules([releaseToSpaceReader]); interface DirectReleaseInput { message?: Default; } export interface DirectReleaseOutput { [NAME]: string; [UI]: VNode; message: Confidential< string, readonly [PolicyOf] >; } const DirectRelease = pattern( ({ message }) => ({ [NAME]: "Direct CFC policy release", [UI]: ( Module-authored exchange rule Policy-protected message
{message}
), message, }), ); export default DirectRelease;