From 771d59a596354346773ac0b2d5e17a9dbcaf7b63 Mon Sep 17 00:00:00 2001 From: PedroAraoz Date: Wed, 10 Jun 2026 14:53:26 -0300 Subject: [PATCH 1/2] cli: use sdk for manifest validations --- packages/cli/package.json | 1 + packages/cli/src/commands/codegen.ts | 3 ++- .../cli/src/lib/InputsInterfaceGenerator.ts | 2 +- packages/cli/src/lib/ManifestHandler.ts | 4 +-- packages/cli/src/types.ts | 6 ----- packages/cli/src/validators.ts | 27 ------------------- packages/cli/tests/ManifestHandler.spec.ts | 6 ++--- packages/cli/tsconfig.json | 3 ++- yarn.lock | 12 +++++++++ 9 files changed, 22 insertions(+), 42 deletions(-) delete mode 100644 packages/cli/src/validators.ts diff --git a/packages/cli/package.json b/packages/cli/package.json index 520865fa..e7504b52 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -20,6 +20,7 @@ ], "dependencies": { "@inquirer/prompts": "^7.2.4", + "@mimicprotocol/sdk": "^0.1.7", "@oclif/core": "^4.2.2", "@oclif/plugin-not-found": "^3.2.38", "axios": "^1.7.9", diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index e35b38a0..7256f415 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -1,11 +1,12 @@ import { confirm } from '@inquirer/prompts' +import { Manifest } from '@mimicprotocol/sdk' import { Command, Flags } from '@oclif/core' import * as fs from 'fs' import { join } from 'path' import { AbisInterfaceGenerator, InputsInterfaceGenerator, ManifestHandler } from '../lib' import log from '../log' -import { FlagsType, Manifest } from '../types' +import { FlagsType } from '../types' import Functions, { DefaultFunctionConfig } from './functions' diff --git a/packages/cli/src/lib/InputsInterfaceGenerator.ts b/packages/cli/src/lib/InputsInterfaceGenerator.ts index 1c963838..f1fff1ae 100644 --- a/packages/cli/src/lib/InputsInterfaceGenerator.ts +++ b/packages/cli/src/lib/InputsInterfaceGenerator.ts @@ -1,4 +1,4 @@ -import { ManifestInputs } from '../types' +import { ManifestInputs } from '@mimicprotocol/sdk' export default { generate(inputs: ManifestInputs): string { diff --git a/packages/cli/src/lib/ManifestHandler.ts b/packages/cli/src/lib/ManifestHandler.ts index 85851ca3..2ebd3ef0 100644 --- a/packages/cli/src/lib/ManifestHandler.ts +++ b/packages/cli/src/lib/ManifestHandler.ts @@ -1,12 +1,10 @@ import { RUNNER_TARGET_VERSION } from '@mimicprotocol/lib-ts/constants' +import { Manifest, ManifestValidator, ZodError } from '@mimicprotocol/sdk' import { Command } from '@oclif/core' import * as fs from 'fs' import { load } from 'js-yaml' -import { ZodError } from 'zod' import { DuplicateEntryError, EmptyManifestError, GENERIC_SUGGESTION, MoreThanOneEntryError } from '../errors' -import { Manifest } from '../types' -import { ManifestValidator } from '../validators' export default { // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/cli/src/types.ts b/packages/cli/src/types.ts index a3da84f8..c2b5b5a1 100644 --- a/packages/cli/src/types.ts +++ b/packages/cli/src/types.ts @@ -1,10 +1,4 @@ import { Command, Interfaces } from '@oclif/core' -import { z } from 'zod' - -import { ManifestValidator } from './validators' - -export type Manifest = z.infer -export type ManifestInputs = z.infer export type AbiParameter = { name?: string diff --git a/packages/cli/src/validators.ts b/packages/cli/src/validators.ts deleted file mode 100644 index eed2ccfd..00000000 --- a/packages/cli/src/validators.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { z } from 'zod' - -const SOLIDITY_TYPE_REGEX = /^(u?int(8|16|32|64|128|256)?|bool|address|bytes([1-9]|[1-2][0-9]|3[0-2])?|string)$/ -const TOKEN_TYPE_REGEX = /^(Token|TokenAmount)$/ - -// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string -export const SEM_VER_REGEX = - /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/ - -const String = z.string().min(1) - -const SolidityType = String.regex(SOLIDITY_TYPE_REGEX, 'Must be a valid solidity type') -const TokenType = String.regex(TOKEN_TYPE_REGEX, 'Must be a valid token type') -const InputType = z.union([SolidityType, TokenType]) - -const InputValue = z.union([InputType, z.object({ type: InputType, description: String.optional() })]) - -export const ManifestValidator = z.object({ - version: String.regex(SEM_VER_REGEX, 'Must be a valid semver'), - name: String, - description: String, - inputs: z.record(String, InputValue), - abis: z.record(String, String), - metadata: z.object({ - runnerTarget: String.regex(SEM_VER_REGEX, 'Must be a valid semver'), - }), -}) diff --git a/packages/cli/tests/ManifestHandler.spec.ts b/packages/cli/tests/ManifestHandler.spec.ts index 28fdd6da..cc1ccb0a 100644 --- a/packages/cli/tests/ManifestHandler.spec.ts +++ b/packages/cli/tests/ManifestHandler.spec.ts @@ -1,7 +1,7 @@ +import { SEMVER_REGEX } from '@mimicprotocol/sdk' import { expect } from 'chai' import ManifestHandler from '../src/lib/ManifestHandler' -import { SEM_VER_REGEX } from '../src/validators' import invalidSemVers from './fixtures/sem-vers/invalid-sem-vers.json' import validSemVers from './fixtures/sem-vers/valid-sem-vers.json' @@ -76,7 +76,7 @@ describe('ManifestHandler', () => { it('adds the runner target version to the manifest', () => { const parsedManifest = ManifestHandler.validate(manifest) - expect(parsedManifest.metadata.runnerTarget).to.match(SEM_VER_REGEX) + expect(parsedManifest.metadata.runnerTarget).to.match(SEMVER_REGEX) }) }) @@ -138,7 +138,7 @@ describe('ManifestHandler', () => { context('when an input is invalid', () => { itReturnsAnError( { ...manifest, inputs: [...manifest.inputs, { wrong: 'u8' }] }, - 'Must be a valid solidity type' + 'Must be a valid Solidity type or custom type (Token, TokenAmount)' ) }) diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index de8d4b4c..67ae1194 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -5,7 +5,8 @@ "target": "ES2020", "strict": true, "types": ["node"], - "esModuleInterop": true + "esModuleInterop": true, + "skipLibCheck": true }, "include": [ "src/**/*" ], "exclude": [ "src/templates/**/*" ] diff --git a/yarn.lock b/yarn.lock index cde62eb2..c8163cb8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -725,6 +725,18 @@ "@mimicprotocol/runner-node-win32-arm64-msvc" "0.1.1" "@mimicprotocol/runner-node-win32-x64-msvc" "0.1.1" +"@mimicprotocol/sdk@^0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@mimicprotocol/sdk/-/sdk-0.1.7.tgz#a40be86f2cbbfb20eb98c2af580660f40459e9d0" + integrity sha512-gza2noCNPC8RLlMNwWdxRktd4l2h5ZttqPjvAuKaIHmkagZZqfCaBu1XrjlYkqSevpZEYnBSfc6Fj8KqcJn5zQ== + dependencies: + "@coral-xyz/anchor" "0.32.1" + "@solana/web3.js" "^1.98.4" + borsh "^2.0.0" + cron-parser "^5.3.1" + ethers "^6.13.5" + zod "^3.23.8" + "@mimicprotocol/sdk@~0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@mimicprotocol/sdk/-/sdk-0.1.5.tgz#2820867ac4acfa34bf3a0d7809b771cc0ba34173" From ed3cec429c25ab62d5d5b15bff321a5d30f01222 Mon Sep 17 00:00:00 2001 From: PedroAraoz Date: Wed, 10 Jun 2026 14:57:32 -0300 Subject: [PATCH 2/2] add changeset --- .changeset/fresh-nails-act.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/fresh-nails-act.md diff --git a/.changeset/fresh-nails-act.md b/.changeset/fresh-nails-act.md new file mode 100644 index 00000000..d5284ff3 --- /dev/null +++ b/.changeset/fresh-nails-act.md @@ -0,0 +1,7 @@ +--- +"@mimicprotocol/cli": patch +"@mimicprotocol/lib-ts": patch +"@mimicprotocol/test-ts": patch +--- + +Use SDK for manifest validation