···1616import _ from 'lodash';
1717import { type ReadonlyDeep } from 'type-fest';
18181919+import { getFieldDerivationCost } from '../services/derivedFieldsService/index.js';
1920import {
2121+ type Condition,
2022 ConditionCompletionOutcome,
2123 ConditionFailureOutcome,
2224 type ConditionOutcome,
2323-} from '../models/rules/RuleModel.js';
2424-import { getFieldDerivationCost } from '../services/derivedFieldsService/index.js';
2525-import {
2626- type Condition,
2725 type ConditionSet,
2826} from '../services/moderationConfigService/index.js';
2927import { type SignalId } from '../services/signalsService/index.js';
+1-1
server/condition_evaluator/conditionSet.test.ts
···11import fc from 'fast-check';
22import _ from 'lodash';
3344-import { ConditionCompletionOutcome } from '../models/rules/RuleModel.js';
54import {
55+ ConditionCompletionOutcome,
66 ConditionConjunction,
77 type LeafCondition,
88} from '../services/moderationConfigService/index.js';
+5-7
server/condition_evaluator/conditionSet.ts
···11import _ from 'lodash';
22import { type ReadonlyDeep } from 'type-fest';
3344+import { type RuleEvaluationContext } from '../rule_engine/RuleEvaluator.js';
55+import { type AggregationClause } from '../services/aggregationsService/index.js';
46import {
57 ConditionCompletionOutcome,
88+ ConditionConjunction,
69 ConditionFailureOutcome,
710 type ConditionOutcome,
1111+ type ConditionSet,
812 type ConditionSetWithResult,
913 type ConditionWithResult,
1010- type LeafConditionWithResult,
1111-} from '../models/rules/RuleModel.js';
1212-import { type RuleEvaluationContext } from '../rule_engine/RuleEvaluator.js';
1313-import { type AggregationClause } from '../services/aggregationsService/index.js';
1414-import {
1515- ConditionConjunction,
1616- type ConditionSet,
1714 type LeafCondition,
1515+ type LeafConditionWithResult,
1816} from '../services/moderationConfigService/index.js';
1917import { equalLengthZip } from '../utils/fp-helpers.js';
2018import { assertUnreachable } from '../utils/misc.js';
+1-1
server/condition_evaluator/leafCondition.test.ts
···11import fc from 'fast-check';
2233-import { ConditionCompletionOutcome } from '../models/rules/RuleModel.js';
43import type { RuleEvaluationContext } from '../rule_engine/RuleEvaluator.js';
44+import { ConditionCompletionOutcome } from '../services/moderationConfigService/index.js';
55import { SignalType } from '../services/signalsService/index.js';
66import {
77 LeafConditionArbitrary,
+4-6
server/condition_evaluator/leafCondition.ts
···1212 type TaggedItemData,
1313} from '../models/rules/item-type-fields.js';
1414import {
1515- ConditionCompletionOutcome,
1616- ConditionFailureOutcome,
1717- type ConditionResult,
1818-} from '../models/rules/RuleModel.js';
1919-import {
2015 getUserFromRuleInput,
2116 isFullSubmission,
2217 type RuleEvaluationContext,
···3126} from '../services/itemProcessingService/index.js';
3227import {
3328 CoopInput,
3434- ValueComparator,
2929+ ConditionCompletionOutcome,
3030+ ConditionFailureOutcome,
3531 type ConditionInput,
3232+ type ConditionResult,
3633 type ConditionSignalInfo,
3734 type LeafCondition,
3535+ ValueComparator,
3836} from '../services/moderationConfigService/index.js';
3937import {
4038 isSignalErrorResult,
+4-6
server/graphql/generated.ts
···2020import type { HashBank } from '../models/HashBankModel.js';
2121import type { Backtest } from '../models/rules/BacktestModel.js';
2222import type { ItemType } from '../models/rules/ItemTypeModel.js';
2323-import type {
2424- ConditionSetWithResult,
2525- ConditionWithResult,
2626- LeafConditionWithResult,
2727- Rule,
2828-} from '../models/rules/RuleModel.js';
2323+import type { Rule } from '../models/rules/RuleModel.js';
2924import type { User } from '../models/UserModel.js';
3025import type { SignalWithScore } from '../services/analyticsQueries/RuleActionInsights.js';
3126import type { DerivedFieldSpecSource } from '../services/derivedFieldsService/helpers.js';
···4641import type {
4742 Condition,
4843 ConditionSet,
4444+ ConditionSetWithResult,
4545+ ConditionWithResult,
4946 LeafCondition,
4747+ LeafConditionWithResult,
5048} from '../services/moderationConfigService/index.js';
5149import type {
5250 CustomAction,
+1-1
server/graphql/modules/investigation.ts
···3344import _ from 'lodash';
5566-import { type ConditionSetWithResult } from '../../models/rules/RuleModel.js';
66+import { type ConditionSetWithResult } from '../../services/moderationConfigService/index.js';
77import {
88 getFieldValueForRole,
99 type ItemSubmission,
-12
server/models/rules/RuleModel.ts
···2222import { type SequelizeAction } from './ActionModel.js';
2323import { type RuleLatestVersion } from './RuleLatestVersionModel.js';
24242525-export {
2626- ConditionCompletionOutcome,
2727- ConditionFailureOutcome,
2828- type ConditionOutcome,
2929- type ConditionCompletionMetadata,
3030- type ConditionFailureMetadata,
3131- type ConditionResult,
3232- type ConditionWithResult,
3333- type ConditionSetWithResult,
3434- type LeafConditionWithResult,
3535-} from './ruleTypes.js';
3636-3725const { Model, Op } = sequelize;
3826const { without } = _;
3927
-62
server/models/rules/ruleTypes.ts
···11-import { type ScalarType, type TaggedScalar } from '@roostorg/types';
22-31import {
42 type RuleAlarmStatus,
53 RuleStatus,
64 type RuleType,
75 type ConditionSet,
88- type LeafCondition,
96 type Action,
107 type Policy,
118} from '../../services/moderationConfigService/index.js';
1212-import { type SerializableError } from '../../utils/errors.js';
1313-import {
1414- type NonEmptyArray,
1515- type WithUndefined,
1616-} from '../../utils/typescript-types.js';
179import { type User } from '../UserModel.js';
1818-import { type TaggedItemData } from './item-type-fields.js';
1919-2020-export enum ConditionCompletionOutcome {
2121- PASSED = 'PASSED',
2222- FAILED = 'FAILED',
2323- INAPPLICABLE = 'INAPPLICABLE',
2424-}
2525-2626-export enum ConditionFailureOutcome {
2727- ERRORED = 'ERRORED',
2828-}
2929-3030-export type ConditionOutcome =
3131- | ConditionCompletionOutcome
3232- | ConditionFailureOutcome;
3333-3434-export type ConditionCompletionMetadata = {
3535- score?: string;
3636- matchedValue?: string;
3737-};
3838-3939-export type ConditionFailureMetadata = {
4040- error?: SerializableError;
4141-};
4242-4343-type ConditionResultCommonMetadata = {
4444- signalInputValues?: (TaggedScalar<ScalarType> | TaggedItemData)[];
4545-};
4646-4747-// prettier-ignore
4848-export type ConditionResult =
4949- | ({ outcome: ConditionCompletionOutcome }
5050- & ConditionCompletionMetadata
5151- & Partial<Pick<ConditionFailureMetadata, 'error'>>
5252- & ConditionResultCommonMetadata)
5353- | ({ outcome: ConditionFailureOutcome; }
5454- & ConditionFailureMetadata
5555- & WithUndefined<ConditionCompletionMetadata>
5656- & ConditionResultCommonMetadata)
5757-5858-export type ConditionWithResult =
5959- | LeafConditionWithResult
6060- | ConditionSetWithResult;
6161-6262-export type ConditionSetWithResult = Omit<ConditionSet, 'conditions'> & {
6363- conditions:
6464- | NonEmptyArray<LeafConditionWithResult>
6565- | NonEmptyArray<ConditionSetWithResult>;
6666- result?: ConditionResult;
6767-};
6868-6969-export type LeafConditionWithResult = LeafCondition & {
7070- result?: ConditionResult;
7171-};
72107311export type RuleLatestVersionRow = {
7412 ruleId: string;
+2-2
server/rule_engine/RuleEngine.ts
···77} from '../condition_evaluator/conditionSet.js';
88import { type Dependencies } from '../iocContainer/index.js';
99import { inject } from '../iocContainer/utils.js';
1010-import { ConditionCompletionOutcome } from '../models/rules/RuleModel.js';
1110import { type PlainRuleWithLatestVersion } from '../models/rules/ruleTypes.js';
1211import { evaluateAggregationRuntimeArgsForItem } from '../services/aggregationsService/index.js';
1312import { type ItemSubmission } from '../services/itemProcessingService/index.js';
1413import {
1515- RuleStatus,
1614 type Action,
1515+ ConditionCompletionOutcome,
1716 type ConditionSet,
1717+ RuleStatus,
1818} from '../services/moderationConfigService/index.js';
1919import { type RuleExecutionCorrelationId } from '../services/analyticsLoggers/index.js';
2020import {
+1-1
server/rule_engine/RuleEvaluator.ts
···66import makeGetDerivedFieldValueWithCache from '../condition_evaluator/getDerivedFieldValue.js';
77import { type Dependencies } from '../iocContainer/index.js';
88import { inject } from '../iocContainer/utils.js';
99-import { type ConditionSetWithResult } from '../models/rules/RuleModel.js';
109import {
1110 type DerivedFieldSpec,
1211 type DerivedFieldValue,
···1413import { type ItemSubmission } from '../services/itemProcessingService/index.js';
1514import {
1615 type ConditionSet,
1616+ type ConditionSetWithResult,
1717 type ItemType,
1818} from '../services/moderationConfigService/index.js';
1919import { type TransientRunSignalWithCache } from '../services/orgAwareSignalExecutionService/index.js';
···3344import { type Dependencies } from '../../iocContainer/index.js';
55import { inject } from '../../iocContainer/utils.js';
66-import { type ConditionSetWithResult } from '../../models/rules/RuleModel.js';
76import { type RuleEnvironment } from '../../rule_engine/RuleEngine.js';
87import { type ItemSubmission } from '../../services/itemProcessingService/index.js';
88+import { type ConditionSetWithResult } from '../../services/moderationConfigService/index.js';
99import { type ReportingRuleExecutionCorrelationId } from '../../services/reportingService/index.js';
1010import { fromCorrelationId } from '../../utils/correlationIds.js';
1111import { jsonStringify } from '../../utils/encoding.js';
···3344import { type Dependencies } from '../../iocContainer/index.js';
55import { inject } from '../../iocContainer/utils.js';
66-import { type ConditionSetWithResult } from '../../models/rules/RuleModel.js';
76import {
87 isFullSubmission,
98 type RuleInput,
109} from '../../rule_engine/RuleEvaluator.js';
1110import { type ManualReviewJobKind } from '../../services/manualReviewToolService/index.js';
1111+import { type ConditionSetWithResult } from '../../services/moderationConfigService/index.js';
1212import { fromCorrelationId } from '../../utils/correlationIds.js';
1313import { jsonStringifyUnstable } from '../../utils/encoding.js';
1414import { getUtcDateOnlyString } from '../../utils/time.js';
···3344import { type Dependencies } from '../../iocContainer/index.js';
55import { inject } from '../../iocContainer/utils.js';
66-import { type ConditionSetWithResult } from '../../models/rules/RuleModel.js';
76import { type RuleEnvironment } from '../../rule_engine/RuleEngine.js';
77+import { type ConditionSetWithResult } from '../../services/moderationConfigService/index.js';
88import { fromCorrelationId } from '../../utils/correlationIds.js';
99import { jsonStringifyUnstable } from '../../utils/encoding.js';
1010
···11import { type ReadonlyDeep } from 'type-fest';
2233import { isConditionSet } from '../../condition_evaluator/condition.js';
44+import { type LocationArea } from '../../models/types/locationArea.js';
55+import { type DerivedFieldSpec } from '../../services/derivedFieldsService/index.js';
46import {
57 type ConditionResult,
68 type ConditionSetWithResult,
99+ type CoopInput,
710 type LeafConditionWithResult,
88-} from '../../models/rules/RuleModel.js';
99-import { type LocationArea } from '../../models/types/locationArea.js';
1010-import { type DerivedFieldSpec } from '../../services/derivedFieldsService/index.js';
1111-import { type CoopInput } from '../../services/moderationConfigService/index.js';
1111+} from '../../services/moderationConfigService/index.js';
1212import { isSignalId } from '../../services/signalsService/index.js';
1313import { type CorrelationId } from '../../utils/correlationIds.js';
1414import { jsonParse, tryJsonParse, type JsonOf } from '../../utils/encoding.js';
···55import { formatClickhouseQuery } from '../../plugins/warehouse/utils/clickhouseSql.js';
66import { type Dependencies } from '../../iocContainer/index.js';
77import { inject } from '../../iocContainer/utils.js';
88-import type { ConditionWithResult } from '../../models/rules/RuleModel.js';
98import { type RuleEnvironment } from '../../rule_engine/RuleEngine.js';
109import { type NormalizedItemData } from '../../services/itemProcessingService/index.js';
1010+import { type ConditionWithResult } from '../../services/moderationConfigService/index.js';
1111import {
1212 BuiltInThirdPartySignalType,
1313 SignalType,