diff --git a/packages/taco/src/conditions/base/rpc.ts b/packages/taco/src/conditions/base/rpc.ts index f84821743..d7ab306bb 100644 --- a/packages/taco/src/conditions/base/rpc.ts +++ b/packages/taco/src/conditions/base/rpc.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; -import { Condition } from '../condition'; +import { baseConditionSchema, Condition } from '../condition'; import { SUPPORTED_CHAIN_IDS } from '../const'; import { EthAddressOrUserAddressSchema, @@ -12,7 +12,7 @@ import createUnionSchema from '../zod'; export const RpcConditionType = 'rpc'; -export const rpcConditionSchema = z.object({ +export const rpcConditionSchema = baseConditionSchema.extend({ conditionType: z.literal(RpcConditionType).default(RpcConditionType), chain: createUnionSchema(SUPPORTED_CHAIN_IDS), method: z.enum(['eth_getBalance']), diff --git a/packages/taco/src/conditions/compound-condition.ts b/packages/taco/src/conditions/compound-condition.ts index d8906ce3e..aaf6d6f37 100644 --- a/packages/taco/src/conditions/compound-condition.ts +++ b/packages/taco/src/conditions/compound-condition.ts @@ -3,14 +3,14 @@ import { z } from 'zod'; import { contractConditionSchema } from './base/contract'; import { rpcConditionSchema } from './base/rpc'; import { timeConditionSchema } from './base/time'; -import { Condition, ConditionProps } from './condition'; +import { baseConditionSchema, Condition, ConditionProps } from './condition'; import { sequentialConditionSchema } from './sequential'; import { OmitConditionType } from './shared'; export const CompoundConditionType = 'compound'; -export const compoundConditionSchema: z.ZodSchema = z - .object({ +export const compoundConditionSchema: z.ZodSchema = baseConditionSchema + .extend({ conditionType: z .literal(CompoundConditionType) .default(CompoundConditionType), @@ -29,7 +29,7 @@ export const compoundConditionSchema: z.ZodSchema = z ) .min(1) .max(5), - // TODO nesting validation + // TODO nesting validation }) .refine( (condition) => { diff --git a/packages/taco/src/conditions/condition.ts b/packages/taco/src/conditions/condition.ts index 519bd189b..29ab267b4 100644 --- a/packages/taco/src/conditions/condition.ts +++ b/packages/taco/src/conditions/condition.ts @@ -3,6 +3,10 @@ import { z } from 'zod'; import { USER_ADDRESS_PARAMS } from './const'; +export const baseConditionSchema = z.object({ + conditionType: z.string(), +}); + type ConditionSchema = z.ZodSchema; export type ConditionProps = z.infer; diff --git a/packages/taco/src/conditions/sequential.ts b/packages/taco/src/conditions/sequential.ts index 75664d31d..4eee5d264 100644 --- a/packages/taco/src/conditions/sequential.ts +++ b/packages/taco/src/conditions/sequential.ts @@ -4,7 +4,7 @@ import { contractConditionSchema } from './base/contract'; import { rpcConditionSchema } from './base/rpc'; import { timeConditionSchema } from './base/time'; import { compoundConditionSchema } from './compound-condition'; -import { Condition } from './condition'; +import { baseConditionSchema, Condition } from './condition'; import { OmitConditionType, plainStringSchema } from './shared'; export const SequentialConditionType = 'sequential'; @@ -22,13 +22,14 @@ export const conditionVariableSchema: z.ZodSchema = z.object({ ), }); -export const sequentialConditionSchema: z.ZodSchema = z.object({ - conditionType: z - .literal(SequentialConditionType) - .default(SequentialConditionType), - conditionVariables: z.array(conditionVariableSchema).min(2).max(5), - // TODO nesting validation -}); +export const sequentialConditionSchema: z.ZodSchema = + baseConditionSchema.extend({ + conditionType: z + .literal(SequentialConditionType) + .default(SequentialConditionType), + conditionVariables: z.array(conditionVariableSchema).min(2).max(5), + // TODO nesting validation + }); export type SequentialConditionProps = z.infer< typeof sequentialConditionSchema