From fd76b836a5e222aa667143330acdef0d1c982f74 Mon Sep 17 00:00:00 2001 From: 0xkenj1 Date: Mon, 7 Oct 2024 13:00:40 -0300 Subject: [PATCH] feat: shared package & remove samples --- apps/sample-app/.env.example | 1 - apps/sample-app/README.md | 43 --------------- apps/sample-app/package.json | 23 -------- apps/sample-app/src/config/env.ts | 18 ------- apps/sample-app/src/config/index.ts | 1 - apps/sample-app/src/index.ts | 32 ------------ .../src/stats/balances.controller.ts | 14 ----- apps/sample-app/src/stats/index.ts | 1 - .../controller/balances.controller.spec.ts | 39 -------------- apps/sample-app/tsconfig.build.json | 8 --- packages/sample-lib/src/exceptions/index.ts | 1 - .../src/exceptions/invalidRpcUrl.exception.ts | 6 --- packages/sample-lib/src/external.ts | 5 -- .../blockchainProvider.interface.ts | 13 ----- packages/sample-lib/src/interfaces/index.ts | 1 - packages/sample-lib/src/internal.ts | 4 -- .../src/providers/blockchainProvider.ts | 26 ---------- packages/sample-lib/src/providers/index.ts | 1 - .../test/unit/blockchainProvider.spec.ts | 52 ------------------- packages/sample-lib/tsconfig.json | 4 -- packages/sample-lib/vitest.config.ts | 22 -------- packages/{sample-lib => shared}/README.md | 0 packages/{sample-lib => shared}/package.json | 5 +- packages/shared/src/external.ts | 1 + packages/{sample-lib => shared}/src/index.ts | 0 packages/shared/src/internal.ts | 2 + packages/shared/src/types/events/allo.ts | 20 +++++++ packages/shared/src/types/events/common.ts | 44 ++++++++++++++++ packages/shared/src/types/events/index.ts | 4 ++ packages/shared/src/types/events/registry.ts | 6 +++ packages/shared/src/types/events/strategy.ts | 34 ++++++++++++ packages/shared/src/types/index.ts | 1 + .../tsconfig.build.json | 0 .../shared}/tsconfig.json | 0 .../shared}/vitest.config.ts | 0 35 files changed, 113 insertions(+), 319 deletions(-) delete mode 100644 apps/sample-app/.env.example delete mode 100644 apps/sample-app/README.md delete mode 100644 apps/sample-app/package.json delete mode 100644 apps/sample-app/src/config/env.ts delete mode 100644 apps/sample-app/src/config/index.ts delete mode 100644 apps/sample-app/src/index.ts delete mode 100644 apps/sample-app/src/stats/balances.controller.ts delete mode 100644 apps/sample-app/src/stats/index.ts delete mode 100644 apps/sample-app/test/stats/controller/balances.controller.spec.ts delete mode 100644 apps/sample-app/tsconfig.build.json delete mode 100644 packages/sample-lib/src/exceptions/index.ts delete mode 100644 packages/sample-lib/src/exceptions/invalidRpcUrl.exception.ts delete mode 100644 packages/sample-lib/src/external.ts delete mode 100644 packages/sample-lib/src/interfaces/blockchainProvider.interface.ts delete mode 100644 packages/sample-lib/src/interfaces/index.ts delete mode 100644 packages/sample-lib/src/internal.ts delete mode 100644 packages/sample-lib/src/providers/blockchainProvider.ts delete mode 100644 packages/sample-lib/src/providers/index.ts delete mode 100644 packages/sample-lib/test/unit/blockchainProvider.spec.ts delete mode 100644 packages/sample-lib/tsconfig.json delete mode 100644 packages/sample-lib/vitest.config.ts rename packages/{sample-lib => shared}/README.md (100%) rename packages/{sample-lib => shared}/package.json (89%) create mode 100644 packages/shared/src/external.ts rename packages/{sample-lib => shared}/src/index.ts (100%) create mode 100644 packages/shared/src/internal.ts create mode 100644 packages/shared/src/types/events/allo.ts create mode 100644 packages/shared/src/types/events/common.ts create mode 100644 packages/shared/src/types/events/index.ts create mode 100644 packages/shared/src/types/events/registry.ts create mode 100644 packages/shared/src/types/events/strategy.ts create mode 100644 packages/shared/src/types/index.ts rename packages/{sample-lib => shared}/tsconfig.build.json (100%) rename {apps/sample-app => packages/shared}/tsconfig.json (100%) rename {apps/sample-app => packages/shared}/vitest.config.ts (100%) diff --git a/apps/sample-app/.env.example b/apps/sample-app/.env.example deleted file mode 100644 index 9a0544f..0000000 --- a/apps/sample-app/.env.example +++ /dev/null @@ -1 +0,0 @@ -RPC_URL= # RPC URL. Example: https://eth.llamarpc.com \ No newline at end of file diff --git a/apps/sample-app/README.md b/apps/sample-app/README.md deleted file mode 100644 index c10cdcf..0000000 --- a/apps/sample-app/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# ts-turborepo-boilerplate: sample-app - -> Note: use this app as reference but preferred way is to re-write app -> from zero instead of refactoring this one. -> When you don't need this anymore, you can delete it - -Sample app that uses [sample-lib](../../packages/sample-lib) Blockchain -provider to fetch Vitalik and Zero address native balance and sums them - -## Setup - -1. Change package name to your own in [`package.json`](./package.json) -2. Install dependencies running `pnpm install` - -### ⚙️ Setting up env variables - -- Create `.env` file and copy paste `.env.example` content in there. - -``` -$ cp .env.example .env -``` - -Available options: -| Name | Description | Default | Required | Notes | -|-----------------------------|--------------------------------------------------------------------------------------------------------------------------------|-----------|----------------------------------|-----------------------------------------------------------------| -| `RPC_URL` | RPC URL to use for querying balances | N/A | Yes | | - -## Available Scripts - -Available scripts that can be run using `pnpm`: - -| Script | Description | -| ------------- | ------------------------------------------------------- | -| `build` | Build library using tsc | -| `check-types` | Check types issues using tsc | -| `clean` | Remove `dist` folder | -| `lint` | Run ESLint to check for coding standards | -| `lint:fix` | Run linter and automatically fix code formatting issues | -| `format` | Check code formatting and style using Prettier | -| `format:fix` | Run formatter and automatically fix issues | -| `start` | Run the app | -| `test` | Run tests using vitest | -| `test:cov` | Run tests with coverage report | diff --git a/apps/sample-app/package.json b/apps/sample-app/package.json deleted file mode 100644 index 4c23d45..0000000 --- a/apps/sample-app/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@ts-turborepo-boilerplate/sample-app", - "version": "0.0.1", - "type": "module", - "main": "./dist/index.js", - "scripts": { - "build": "tsc -p tsconfig.build.json", - "check-types": "tsc --noEmit -p ./tsconfig.json", - "clean": "rm -rf dist", - "format": "prettier --check \"{src,test}/**/*.{js,ts,json}\"", - "format:fix": "prettier --write \"{src,test}/**/*.{js,ts,json}\"", - "lint": "eslint \"{src,test}/**/*.{js,ts,json}\"", - "lint:fix": "pnpm lint --fix", - "start": "node dist/index.js", - "test": "vitest run --config vitest.config.ts --passWithNoTests", - "test:cov": "vitest run --config vitest.config.ts --coverage" - }, - "dependencies": { - "@ts-turborepo-boilerplate/sample-lib": "workspace:*", - "dotenv": "16.4.5", - "zod": "3.23.8" - } -} diff --git a/apps/sample-app/src/config/env.ts b/apps/sample-app/src/config/env.ts deleted file mode 100644 index 3aab646..0000000 --- a/apps/sample-app/src/config/env.ts +++ /dev/null @@ -1,18 +0,0 @@ -import dotenv from "dotenv"; -import { z } from "zod"; - -dotenv.config(); - -const validationSchema = z.object({ - RPC_URL: z.string().url(), -}); - -const env = validationSchema.safeParse(process.env); - -if (!env.success) { - console.error(env.error.issues.map((issue) => JSON.stringify(issue)).join("\n")); - process.exit(1); -} - -export const environment = env.data; -export type Environment = z.infer; diff --git a/apps/sample-app/src/config/index.ts b/apps/sample-app/src/config/index.ts deleted file mode 100644 index 39f5fe2..0000000 --- a/apps/sample-app/src/config/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./env.js"; diff --git a/apps/sample-app/src/index.ts b/apps/sample-app/src/index.ts deleted file mode 100644 index 8164e40..0000000 --- a/apps/sample-app/src/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { inspect } from "util"; -import { BlockchainProvider, IBlockchainProvider } from "@ts-turborepo-boilerplate/sample-lib"; - -import { environment } from "./config/env.js"; -import { BalancesController } from "./stats/index.js"; - -const main = async (): Promise => { - const dataProvider: IBlockchainProvider = new BlockchainProvider(environment.RPC_URL); - - const balanceController = new BalancesController(dataProvider); - - const vitalikAddress = "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"; - const zeroAddress = "0x0000000000000000000000000000000000000000"; - - const balance = await balanceController.addBalances(vitalikAddress, zeroAddress); - - console.log(`Vitalik's and Zero summed balance is: ${balance}`); -}; - -process.on("unhandledRejection", (reason, p) => { - console.error(`Unhandled Rejection at: \n${inspect(p, undefined, 100)}, \nreason: ${reason}`); -}); - -process.on("uncaughtException", (error: Error) => { - console.error( - `An uncaught exception occurred: ${error}\n` + `Exception origin: ${error.stack}`, - ); -}); - -main().catch((err) => { - console.error(`Caught error in main handler: ${err}`); -}); diff --git a/apps/sample-app/src/stats/balances.controller.ts b/apps/sample-app/src/stats/balances.controller.ts deleted file mode 100644 index 80b2aa3..0000000 --- a/apps/sample-app/src/stats/balances.controller.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Address, IBlockchainProvider } from "@ts-turborepo-boilerplate/sample-lib"; - -export class BalancesController { - constructor(private readonly blockchainProvider: IBlockchainProvider) {} - - public async addBalances(addressA: Address, addressB: Address): Promise { - const balances = await Promise.all([ - this.blockchainProvider.getBalance(addressA), - this.blockchainProvider.getBalance(addressB), - ]); - - return balances[0] + balances[1]; - } -} diff --git a/apps/sample-app/src/stats/index.ts b/apps/sample-app/src/stats/index.ts deleted file mode 100644 index f445b01..0000000 --- a/apps/sample-app/src/stats/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./balances.controller.js"; diff --git a/apps/sample-app/test/stats/controller/balances.controller.spec.ts b/apps/sample-app/test/stats/controller/balances.controller.spec.ts deleted file mode 100644 index bcbf90f..0000000 --- a/apps/sample-app/test/stats/controller/balances.controller.spec.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { IBlockchainProvider } from "@ts-turborepo-boilerplate/sample-lib"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; - -import { BalancesController } from "../../../src/stats/index.js"; - -describe("BalancesController", () => { - let balancesController: BalancesController; - let blockchainProviderMock: IBlockchainProvider; - - beforeEach(() => { - blockchainProviderMock = { - getBalance: vi.fn(), - }; - balancesController = new BalancesController(blockchainProviderMock); - }); - - afterEach(() => { - vi.clearAllMocks(); - }); - - describe("addBalances", () => { - it("should return the sum of balances for two addresses", async () => { - const addressA = "0x1234567890abcdef"; - const addressB = "0xabcdef1234567890"; - const balanceA = BigInt(1000000000000000000); - const balanceB = BigInt(2000000000000000000); - - vi.spyOn(blockchainProviderMock, "getBalance").mockResolvedValueOnce(balanceA); - vi.spyOn(blockchainProviderMock, "getBalance").mockResolvedValueOnce(balanceB); - - const result = await balancesController.addBalances(addressA, addressB); - - expect(result).toEqual(balanceA + balanceB); - expect(blockchainProviderMock.getBalance).toHaveBeenCalledTimes(2); - expect(blockchainProviderMock.getBalance).toHaveBeenCalledWith(addressA); - expect(blockchainProviderMock.getBalance).toHaveBeenCalledWith(addressB); - }); - }); -}); diff --git a/apps/sample-app/tsconfig.build.json b/apps/sample-app/tsconfig.build.json deleted file mode 100644 index da6827f..0000000 --- a/apps/sample-app/tsconfig.build.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist", "tests"] -} diff --git a/packages/sample-lib/src/exceptions/index.ts b/packages/sample-lib/src/exceptions/index.ts deleted file mode 100644 index 898cc47..0000000 --- a/packages/sample-lib/src/exceptions/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./invalidRpcUrl.exception.js"; diff --git a/packages/sample-lib/src/exceptions/invalidRpcUrl.exception.ts b/packages/sample-lib/src/exceptions/invalidRpcUrl.exception.ts deleted file mode 100644 index 79527bf..0000000 --- a/packages/sample-lib/src/exceptions/invalidRpcUrl.exception.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class InvalidRpcUrl extends Error { - constructor(url: string) { - super(`${url} is invalid`); - this.name = "InvalidRpcUrl"; - } -} diff --git a/packages/sample-lib/src/external.ts b/packages/sample-lib/src/external.ts deleted file mode 100644 index bd4710b..0000000 --- a/packages/sample-lib/src/external.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type { IBlockchainProvider, Address } from "./internal.js"; - -export { InvalidRpcUrl } from "./internal.js"; - -export { BlockchainProvider } from "./internal.js"; diff --git a/packages/sample-lib/src/interfaces/blockchainProvider.interface.ts b/packages/sample-lib/src/interfaces/blockchainProvider.interface.ts deleted file mode 100644 index 6a03403..0000000 --- a/packages/sample-lib/src/interfaces/blockchainProvider.interface.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Address } from "../internal.js"; - -/** - * Represents an interface for a blockchain provider. - */ -export interface IBlockchainProvider { - /** - * Retrieves the balance of the specified address. - * @param {Address} address The address for which to retrieve the balance. - * @returns {Promise} A Promise that resolves to the balance of the address. - */ - getBalance(address: Address): Promise; -} diff --git a/packages/sample-lib/src/interfaces/index.ts b/packages/sample-lib/src/interfaces/index.ts deleted file mode 100644 index 21f7f75..0000000 --- a/packages/sample-lib/src/interfaces/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./blockchainProvider.interface.js"; diff --git a/packages/sample-lib/src/internal.ts b/packages/sample-lib/src/internal.ts deleted file mode 100644 index 9f7bdbf..0000000 --- a/packages/sample-lib/src/internal.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type { Address } from "viem"; -export * from "./exceptions/index.js"; -export * from "./interfaces/index.js"; -export * from "./providers/index.js"; diff --git a/packages/sample-lib/src/providers/blockchainProvider.ts b/packages/sample-lib/src/providers/blockchainProvider.ts deleted file mode 100644 index a224ede..0000000 --- a/packages/sample-lib/src/providers/blockchainProvider.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { Address, Chain, HttpTransport } from "viem"; -import { createPublicClient, http } from "viem"; -import { mainnet } from "viem/chains"; - -import { IBlockchainProvider, InvalidRpcUrl } from "../internal.js"; - -export class BlockchainProvider implements IBlockchainProvider { - private client: ReturnType>; - - constructor(rpcUrl: string) { - // dummy check for the rpcUrl - if (!rpcUrl || !rpcUrl.startsWith("http")) { - throw new InvalidRpcUrl(rpcUrl); - } - - this.client = createPublicClient({ - chain: mainnet, - transport: http(rpcUrl), - }); - } - - /** @inheritdoc */ - async getBalance(address: Address): Promise { - return this.client.getBalance({ address }); - } -} diff --git a/packages/sample-lib/src/providers/index.ts b/packages/sample-lib/src/providers/index.ts deleted file mode 100644 index ce52aa2..0000000 --- a/packages/sample-lib/src/providers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./blockchainProvider.js"; diff --git a/packages/sample-lib/test/unit/blockchainProvider.spec.ts b/packages/sample-lib/test/unit/blockchainProvider.spec.ts deleted file mode 100644 index 02f3a56..0000000 --- a/packages/sample-lib/test/unit/blockchainProvider.spec.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; - -import { BlockchainProvider, InvalidRpcUrl } from "../../src/internal.js"; - -const mockClient = { - getBalance: vi.fn(), -}; - -vi.mock("viem", async (importOriginal) => { - const actual = await importOriginal(); - return { - ...actual, - createPublicClient: vi.fn().mockImplementation(() => mockClient), - http: vi.fn(), - }; -}); - -describe("BlockchainProvider", () => { - let blockchainProvider: BlockchainProvider; - - beforeEach(() => { - blockchainProvider = new BlockchainProvider("http://example.com/rpc"); - }); - - afterEach(() => { - vi.clearAllMocks(); - }); - - describe("constructor", () => { - it("creates a client with the specified rpcUrl", () => { - const provider = new BlockchainProvider("http://example.com/rpc"); - expect(provider).toBeDefined(); - expect(provider["client"]).toBeDefined(); - }); - - it("throws an error for an invalid rpcUrl", () => { - expect(() => new BlockchainProvider("invalid-url")).toThrow(InvalidRpcUrl); - }); - }); - - describe("getBalance", () => { - it("returns the balance for a valid address", async () => { - const address = "0x1234567890abcdef"; - const expectedBalance = BigInt(1000000000000000000); - vi.spyOn(mockClient, "getBalance").mockResolvedValue(expectedBalance); - - const result = await blockchainProvider.getBalance(address); - - expect(result).toEqual(expectedBalance); - }); - }); -}); diff --git a/packages/sample-lib/tsconfig.json b/packages/sample-lib/tsconfig.json deleted file mode 100644 index 66bb87a..0000000 --- a/packages/sample-lib/tsconfig.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "include": ["src/**/*"] -} diff --git a/packages/sample-lib/vitest.config.ts b/packages/sample-lib/vitest.config.ts deleted file mode 100644 index 8e1bbf4..0000000 --- a/packages/sample-lib/vitest.config.ts +++ /dev/null @@ -1,22 +0,0 @@ -import path from "path"; -import { configDefaults, defineConfig } from "vitest/config"; - -export default defineConfig({ - test: { - globals: true, // Use Vitest's global API without importing it in each file - environment: "node", // Use the Node.js environment - include: ["test/**/*.spec.ts"], // Include test files - exclude: ["node_modules", "dist"], // Exclude certain directories - coverage: { - provider: "v8", - reporter: ["text", "json", "html"], // Coverage reporters - exclude: ["node_modules", "dist", "src/index.ts", ...configDefaults.exclude], // Files to exclude from coverage - }, - }, - resolve: { - alias: { - // Setup path alias based on tsconfig paths - "@": path.resolve(__dirname, "src"), - }, - }, -}); diff --git a/packages/sample-lib/README.md b/packages/shared/README.md similarity index 100% rename from packages/sample-lib/README.md rename to packages/shared/README.md diff --git a/packages/sample-lib/package.json b/packages/shared/package.json similarity index 89% rename from packages/sample-lib/package.json rename to packages/shared/package.json index 6703fb4..e539e84 100644 --- a/packages/sample-lib/package.json +++ b/packages/shared/package.json @@ -1,5 +1,5 @@ { - "name": "@ts-turborepo-boilerplate/sample-lib", + "name": "@grants-stack-indexer/shared", "version": "0.0.1", "private": true, "description": "", @@ -26,8 +26,5 @@ "lint:fix": "pnpm lint --fix", "test": "vitest run --config vitest.config.ts --passWithNoTests", "test:cov": "vitest run --config vitest.config.ts --coverage" - }, - "dependencies": { - "viem": "2.21.4" } } diff --git a/packages/shared/src/external.ts b/packages/shared/src/external.ts new file mode 100644 index 0000000..10fab87 --- /dev/null +++ b/packages/shared/src/external.ts @@ -0,0 +1 @@ +export type { AnyProtocolEvent, Address } from "./internal.js"; diff --git a/packages/sample-lib/src/index.ts b/packages/shared/src/index.ts similarity index 100% rename from packages/sample-lib/src/index.ts rename to packages/shared/src/index.ts diff --git a/packages/shared/src/internal.ts b/packages/shared/src/internal.ts new file mode 100644 index 0000000..2844bb7 --- /dev/null +++ b/packages/shared/src/internal.ts @@ -0,0 +1,2 @@ +export type { Address } from "viem"; +export * from "./types/index.js"; diff --git a/packages/shared/src/types/events/allo.ts b/packages/shared/src/types/events/allo.ts new file mode 100644 index 0000000..8e5a39d --- /dev/null +++ b/packages/shared/src/types/events/allo.ts @@ -0,0 +1,20 @@ +import { Address } from "../../internal.js"; + +/** + * This type is used to represent a Allo events. + */ +export type AlloEvent = "PoolCreated"; + +/** + * This type maps Allo events to their respective parameters. + */ +export type AlloEventParams = T extends "PoolCreated" + ? PoolCreatedParams + : never; + +// ============================================================================= +// =============================== Event Parameters ============================ +// ============================================================================= +export type PoolCreatedParams = { + contractAddress: Address; +}; diff --git a/packages/shared/src/types/events/common.ts b/packages/shared/src/types/events/common.ts new file mode 100644 index 0000000..e64fb7e --- /dev/null +++ b/packages/shared/src/types/events/common.ts @@ -0,0 +1,44 @@ +import { Address } from "../../internal.js"; +import { AlloEvent, AlloEventParams, StrategyEvent, StrategyEventParams } from "./index.js"; + +export type ContractName = "Strategy" | "Allo"; +export type AnyEvent = StrategyEvent | AlloEvent; + +/** + * This type is used to map contract names to their respective event names. + */ +export type ContractToEventName = T extends "Allo" + ? AlloEvent + : T extends "Strategy" + ? StrategyEvent + : never; + +/** + * This type is used to map contract names to their respective event parameters. + */ +export type EventParams> = T extends "Allo" + ? E extends AlloEvent + ? AlloEventParams + : never + : T extends "Strategy" + ? E extends StrategyEvent + ? StrategyEventParams + : never + : never; + +/** + * This type is used to represent a protocol event. + */ +export type ProtocolEvent> = { + block_number: number; + block_timestamp: number; + chain_id: number; + contract_name: T; + event_id: string; + event_name: E; + log_index: number; + params: EventParams; + src_address: Address; +}; + +export type AnyProtocolEvent = ProtocolEvent>; diff --git a/packages/shared/src/types/events/index.ts b/packages/shared/src/types/events/index.ts new file mode 100644 index 0000000..dfe6730 --- /dev/null +++ b/packages/shared/src/types/events/index.ts @@ -0,0 +1,4 @@ +export * from "./allo.js"; +export * from "./common.js"; +export * from "./registry.js"; +export * from "./strategy.js"; diff --git a/packages/shared/src/types/events/registry.ts b/packages/shared/src/types/events/registry.ts new file mode 100644 index 0000000..46e4ac1 --- /dev/null +++ b/packages/shared/src/types/events/registry.ts @@ -0,0 +1,6 @@ +//TODO: remove comment once we support registry events +// export type RegistryEvent = +// | "ProfileCreated" +// | "ProfileMetadataUpdated" +// | "ProfileNameUpdated" +// | "ProfileOwnerUpdated"; diff --git a/packages/shared/src/types/events/strategy.ts b/packages/shared/src/types/events/strategy.ts new file mode 100644 index 0000000..e52e79d --- /dev/null +++ b/packages/shared/src/types/events/strategy.ts @@ -0,0 +1,34 @@ +import { Address } from "../../internal.js"; + +/** + * This type is used to represent a Strategy events. + */ +export type StrategyEvent = "Registered" | "TimestampsUpdated" | "AllocatedWithToken"; +/** + * This type maps Strategy events to their respective parameters. + */ +export type StrategyEventParams = T extends "Registered" + ? RegisteredParams + : T extends "TimestampsUpdated" + ? TimestampsUpdatedParams + : T extends "AllocatedWithToken" + ? AllocatedWithTokenParams + : never; + +// ============================================================================= +// =============================== Event Parameters ============================ +// ============================================================================= +export type RegisteredParams = { + contractAddress: Address; +}; + +export type TimestampsUpdatedParams = { + contractAddress: Address; + timestamp: number; +}; + +export type AllocatedWithTokenParams = { + contractAddress: Address; + tokenAddress: Address; + amount: number; +}; diff --git a/packages/shared/src/types/index.ts b/packages/shared/src/types/index.ts new file mode 100644 index 0000000..0e54746 --- /dev/null +++ b/packages/shared/src/types/index.ts @@ -0,0 +1 @@ +export * from "./events/index.js"; diff --git a/packages/sample-lib/tsconfig.build.json b/packages/shared/tsconfig.build.json similarity index 100% rename from packages/sample-lib/tsconfig.build.json rename to packages/shared/tsconfig.build.json diff --git a/apps/sample-app/tsconfig.json b/packages/shared/tsconfig.json similarity index 100% rename from apps/sample-app/tsconfig.json rename to packages/shared/tsconfig.json diff --git a/apps/sample-app/vitest.config.ts b/packages/shared/vitest.config.ts similarity index 100% rename from apps/sample-app/vitest.config.ts rename to packages/shared/vitest.config.ts