export const messagePolicyFirewall = Effect.fn("messagePolicyFirewall")(
function* (
policy: MessagePolicy,
provider: DecisionProvider,
): Effect.fn.Return<FirewallOptions, CheckInputError> {
const bundle = yield* Effect.cached(
collectiveNorms(
provider,
policy.englishSettings,
policy.maximumHistoryRecords,
),
);
const incomingChain = yield* Effect.forEach(
policy.incoming,
(entry) => incoming(entry, bundle),
{ concurrency: 1 },
);
const outgoingChain = yield* Effect.forEach(
policy.outgoing,
(entry) => outgoing(entry, bundle),
{ concurrency: 1 },
);
return {
mode: policy.mode,
incoming: incomingChain,
outgoing: outgoingChain,
settings: policy.settings,
facts: policy.facts,
codeDigest: armDigest(policy, [...incomingChain, ...outgoingChain]),
maximumHistoryRecords: policy.maximumHistoryRecords,
maximumConcurrentChecks: policy.maximumConcurrentChecks,
english:
policy.english === undefined
? undefined
: {
fixedRules: policy.english.fixedRules,
initialRules: policy.english.initialRules,
provider,
settings: policy.englishSettings,
},
};
},
)