From ead5c2cb09fd969adeb262a18740bdcce8512a40 Mon Sep 17 00:00:00 2001 From: Agus Date: Wed, 22 Jan 2025 16:19:12 +0100 Subject: [PATCH] feat: Lulo support with Blinks (#269) * Add lulo support with blinks * Add changeset --- typescript/.changeset/light-humans-nail.md | 5 +++ typescript/packages/plugins/lulo/package.json | 32 +++++++++++++++++++ typescript/packages/plugins/lulo/src/index.ts | 2 ++ .../packages/plugins/lulo/src/lulo.plugin.ts | 14 ++++++++ .../packages/plugins/lulo/src/lulo.service.ts | 27 ++++++++++++++++ .../packages/plugins/lulo/src/parameters.ts | 8 +++++ .../packages/plugins/lulo/tsconfig.json | 6 ++++ .../packages/plugins/lulo/tsup.config.ts | 6 ++++ typescript/packages/plugins/lulo/turbo.json | 11 +++++++ typescript/pnpm-lock.yaml | 12 +++++++ 10 files changed, 123 insertions(+) create mode 100644 typescript/.changeset/light-humans-nail.md create mode 100644 typescript/packages/plugins/lulo/package.json create mode 100644 typescript/packages/plugins/lulo/src/index.ts create mode 100644 typescript/packages/plugins/lulo/src/lulo.plugin.ts create mode 100644 typescript/packages/plugins/lulo/src/lulo.service.ts create mode 100644 typescript/packages/plugins/lulo/src/parameters.ts create mode 100644 typescript/packages/plugins/lulo/tsconfig.json create mode 100644 typescript/packages/plugins/lulo/tsup.config.ts create mode 100644 typescript/packages/plugins/lulo/turbo.json diff --git a/typescript/.changeset/light-humans-nail.md b/typescript/.changeset/light-humans-nail.md new file mode 100644 index 000000000..408943267 --- /dev/null +++ b/typescript/.changeset/light-humans-nail.md @@ -0,0 +1,5 @@ +--- +"@goat-sdk/plugin-lulo": patch +--- + +Release package diff --git a/typescript/packages/plugins/lulo/package.json b/typescript/packages/plugins/lulo/package.json new file mode 100644 index 000000000..396b77f7f --- /dev/null +++ b/typescript/packages/plugins/lulo/package.json @@ -0,0 +1,32 @@ +{ + "name": "@goat-sdk/plugin-lulo", + "version": "0.1.0", + "files": ["dist/**/*", "README.md", "package.json"], + "scripts": { + "build": "tsup", + "clean": "rm -rf dist", + "test": "vitest run --passWithNoTests" + }, + "main": "./dist/index.js", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "sideEffects": false, + "homepage": "https://ohmygoat.dev", + "repository": { + "type": "git", + "url": "git+https://github.com/goat-sdk/goat.git" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/goat-sdk/goat/issues" + }, + "keywords": ["ai", "agents", "web3"], + "dependencies": { + "@goat-sdk/core": "workspace:*", + "zod": "catalog:", + "@goat-sdk/wallet-solana": "workspace:*" + }, + "peerDependencies": { + "@goat-sdk/core": "workspace:*" + } +} diff --git a/typescript/packages/plugins/lulo/src/index.ts b/typescript/packages/plugins/lulo/src/index.ts new file mode 100644 index 000000000..081cda8cb --- /dev/null +++ b/typescript/packages/plugins/lulo/src/index.ts @@ -0,0 +1,2 @@ +export * from "./lulo.plugin"; +export * from "./parameters"; diff --git a/typescript/packages/plugins/lulo/src/lulo.plugin.ts b/typescript/packages/plugins/lulo/src/lulo.plugin.ts new file mode 100644 index 000000000..253c05ad2 --- /dev/null +++ b/typescript/packages/plugins/lulo/src/lulo.plugin.ts @@ -0,0 +1,14 @@ +import { PluginBase } from "@goat-sdk/core"; +import { LuloService } from "./lulo.service"; + +export class LuloPlugin extends PluginBase { + constructor() { + super("lulo", [new LuloService()]); + } + + supportsChain = () => true; +} + +export function lulo() { + return new LuloPlugin(); +} diff --git a/typescript/packages/plugins/lulo/src/lulo.service.ts b/typescript/packages/plugins/lulo/src/lulo.service.ts new file mode 100644 index 000000000..15d376f59 --- /dev/null +++ b/typescript/packages/plugins/lulo/src/lulo.service.ts @@ -0,0 +1,27 @@ +import { Tool } from "@goat-sdk/core"; +import { SolanaWalletClient } from "@goat-sdk/wallet-solana"; +import { DepositUSDCParameters } from "./parameters"; + +export class LuloService { + @Tool({ + name: "lulo_deposit_usdc", + description: "Deposit USDC into Lulo", + }) + async depositUSDC(walletClient: SolanaWalletClient, parameters: DepositUSDCParameters) { + const response = await fetch(`https://blink.lulo.fi/actions?amount=${parameters.amount}&symbol=USDC`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + account: walletClient.getAddress(), + }), + }); + + const data = await response.json(); + + const tx = await walletClient.sendRawTransaction(data.transaction); + + return tx.hash; + } +} diff --git a/typescript/packages/plugins/lulo/src/parameters.ts b/typescript/packages/plugins/lulo/src/parameters.ts new file mode 100644 index 000000000..1ff3fd151 --- /dev/null +++ b/typescript/packages/plugins/lulo/src/parameters.ts @@ -0,0 +1,8 @@ +import { createToolParameters } from "@goat-sdk/core"; +import { z } from "zod"; + +export class DepositUSDCParameters extends createToolParameters( + z.object({ + amount: z.string().describe("Amount of USDC to deposit"), + }), +) {} diff --git a/typescript/packages/plugins/lulo/tsconfig.json b/typescript/packages/plugins/lulo/tsconfig.json new file mode 100644 index 000000000..b4ae67c1f --- /dev/null +++ b/typescript/packages/plugins/lulo/tsconfig.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "../../../tsconfig.base.json", + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/typescript/packages/plugins/lulo/tsup.config.ts b/typescript/packages/plugins/lulo/tsup.config.ts new file mode 100644 index 000000000..2d38789ad --- /dev/null +++ b/typescript/packages/plugins/lulo/tsup.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from "tsup"; +import { treeShakableConfig } from "../../../tsup.config.base"; + +export default defineConfig({ + ...treeShakableConfig, +}); diff --git a/typescript/packages/plugins/lulo/turbo.json b/typescript/packages/plugins/lulo/turbo.json new file mode 100644 index 000000000..45f951676 --- /dev/null +++ b/typescript/packages/plugins/lulo/turbo.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "build": { + "inputs": ["src/**", "tsup.config.ts", "!./**/*.test.{ts,tsx}", "tsconfig.json"], + "dependsOn": ["^build"], + "outputs": ["dist/**"] + } + } +} diff --git a/typescript/pnpm-lock.yaml b/typescript/pnpm-lock.yaml index 3b48a6f16..ea6df017d 100644 --- a/typescript/pnpm-lock.yaml +++ b/typescript/pnpm-lock.yaml @@ -1317,6 +1317,18 @@ importers: specifier: 'catalog:' version: 3.23.8 + packages/plugins/lulo: + dependencies: + '@goat-sdk/core': + specifier: workspace:* + version: link:../../core + '@goat-sdk/wallet-solana': + specifier: workspace:* + version: link:../../wallets/solana + zod: + specifier: 'catalog:' + version: 3.23.8 + packages/plugins/meteora: dependencies: '@coral-xyz/anchor':