From 02fed521f794d7f184b5d66597a4e3588ce5f18f Mon Sep 17 00:00:00 2001 From: Tomek Marciniak Date: Sat, 3 Aug 2024 00:34:16 +0200 Subject: [PATCH] feat(lib): add testing ci workflow --- .github/workflows/test.yml | 15 ++++++ bun.lockb | Bin 71224 -> 71672 bytes .../accounts/src/private-key-to-account.ts | 32 ++++++++++++ packages/accounts/src/types.ts | 15 ++++++ packages/providers/src/types.ts | 35 +++++-------- packages/shared/package.json | 24 +++++++++ packages/shared/src/index.ts | 17 +++++++ packages/shared/src/types.ts | 18 +++++++ packages/shared/src/validation.ts | 48 ++++++++++++++++++ 9 files changed, 181 insertions(+), 23 deletions(-) create mode 100644 .github/workflows/test.yml create mode 100644 packages/accounts/src/private-key-to-account.ts create mode 100644 packages/accounts/src/types.ts create mode 100644 packages/shared/package.json create mode 100644 packages/shared/src/index.ts create mode 100644 packages/shared/src/types.ts create mode 100644 packages/shared/src/validation.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..f92c5ed --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,15 @@ +name: Run tests +on: + push: + branches: + - main +jobs: + my-job: + name: my-job + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v2 + - run: bun install + - run: bun run build + - run: bun run test diff --git a/bun.lockb b/bun.lockb index 9f2f726458bbdb14479ebb2ca3380d9006d86b81..b7a1fcfeab8f4fc65d5c41dc7ed8b82748826591 100755 GIT binary patch delta 9705 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 gCSSQuiO~NAY = CustomSource & { + publicKey: string; + source: source; + type: "local"; +}; + +// export type PrivateKeyAccount = Prettify< +// LocalAccount<'privateKey'> & { +// // TODO(v3): This will be redundant. +// sign: NonNullable +// } diff --git a/packages/providers/src/types.ts b/packages/providers/src/types.ts index 68f5ccc..8b880d6 100644 --- a/packages/providers/src/types.ts +++ b/packages/providers/src/types.ts @@ -1,3 +1,10 @@ +import type { + Nullifier, + PublicKey, + SignedFields, + SignedMessage, + TransactionReceipt, +} from "@mina-js/shared"; import type { AddChainData, CreateNullifierData, @@ -11,8 +18,6 @@ import type { // biome-ignore lint/suspicious/noExplicitAny: Deal with it. type TODO = any; -export type Address = `b62${string}`; - export type MinaProviderDetail = { info: MinaProviderInfo; provider: MinaProviderClient; @@ -50,26 +55,10 @@ export type ProviderRpcEvent = | "accountsChanged" | "mina_message"; -// Return types -type SignedMessage = { - publicKey: string; - data: string; - signature: { - field: string; - scalar: string; - }; -}; - -type SignedFieldsData = { - data: (string | number)[]; - publicKey: string; - signature: string; -}; - // Request variants export type AccountsRequest = (args: { method: "mina_accounts"; -}) => Promise; +}) => Promise; export type ChainIdRequest = (args: { method: "mina_chainId"; @@ -91,7 +80,7 @@ export type SignRequest = (args: { export type SignFieldsRequest = (args: { method: "mina_signFields"; params: SignFieldsData; -}) => Promise; +}) => Promise; export type SignTransactionRequest = (args: { method: "mina_signTransaction"; @@ -101,12 +90,12 @@ export type SignTransactionRequest = (args: { export type SendTransactionRequest = (args: { method: "mina_sendTransaction"; params: SendTransactionData; -}) => Promise; +}) => Promise; export type CreateNullifierRequest = (args: { method: "mina_createNullifier"; params: CreateNullifierData; -}) => Promise; +}) => Promise; export type SwitchChainRequest = (args: { method: "mina_switchChain"; @@ -148,7 +137,7 @@ export type ChainChangedListener = ( export type AccountsChangedListener = ( event: "accountsChanged", - callback: (params: { accounts: Address[] }) => void, + callback: (params: { accounts: PublicKey[] }) => void, ) => void; export type MessageListener = ( diff --git a/packages/shared/package.json b/packages/shared/package.json new file mode 100644 index 0000000..eaa1633 --- /dev/null +++ b/packages/shared/package.json @@ -0,0 +1,24 @@ +{ + "name": "@mina-js/shared", + "version": "0.0.1", + "type": "module", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.cjs", + "import": "./dist/index.js" + } + }, + "scripts": { + "build": "tsup", + "test": "bun test" + }, + "dependencies": { + "zod": "3.23.8" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } +} diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts new file mode 100644 index 0000000..8d4bd9f --- /dev/null +++ b/packages/shared/src/index.ts @@ -0,0 +1,17 @@ +export type { + SignedMessage, + SignedFields, + Nullifier, + PublicKey, + TransactionReceipt, +} from "./types"; +export type { + SignatureSchema, + SignedMessageSchema, + FieldSchema, + GroupSchema, + NullifierSchema, + PublicKeySchema, + SignedFieldsSchema, + TransactionReceiptSchema, +} from "./validation"; diff --git a/packages/shared/src/types.ts b/packages/shared/src/types.ts new file mode 100644 index 0000000..64ca6a6 --- /dev/null +++ b/packages/shared/src/types.ts @@ -0,0 +1,18 @@ +import type { z } from "zod"; +import type { + NullifierSchema, + PublicKeySchema, + SignedFieldsSchema, + SignedMessageSchema, + TransactionReceiptSchema, +} from "./validation"; + +export type PublicKey = z.infer; + +export type SignedMessage = z.infer; + +export type SignedFields = z.infer; + +export type Nullifier = z.infer; + +export type TransactionReceipt = z.infer; diff --git a/packages/shared/src/validation.ts b/packages/shared/src/validation.ts new file mode 100644 index 0000000..7c96089 --- /dev/null +++ b/packages/shared/src/validation.ts @@ -0,0 +1,48 @@ +import { z } from "zod"; + +export const FieldSchema = z.coerce.bigint(); + +export const GroupSchema = z.object({ + x: FieldSchema, + y: FieldSchema, +}); + +export const PublicKeySchema = z.string().length(55).startsWith("B62"); + +export const SignatureSchema = z + .object({ + field: z.string(), + scalar: z.string(), + }) + .strict(); + +export const SignedMessageSchema = z + .object({ + publicKey: PublicKeySchema, + data: z.string(), + signature: SignatureSchema, + }) + .strict(); + +export const SignedFieldsSchema = z.object({ + data: z.array(z.number()), + publicKey: PublicKeySchema, + signature: z.string(), +}); + +export const NullifierSchema = z.object({ + publicKey: GroupSchema, + public: z.object({ + nullifier: GroupSchema, + s: FieldSchema, + }), + private: z.object({ + c: FieldSchema, + g_r: GroupSchema, + h_m_pk_r: GroupSchema, + }), +}); + +export const TransactionReceiptSchema = z.object({ + hash: z.string(), +});