@grimoirelabs/venues 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +45 -0
  2. package/dist/aave-v3.d.ts +16 -0
  3. package/dist/aave-v3.d.ts.map +1 -0
  4. package/dist/aave-v3.js +272 -0
  5. package/dist/aave-v3.js.map +1 -0
  6. package/dist/across.d.ts +12 -0
  7. package/dist/across.d.ts.map +1 -0
  8. package/dist/across.js +154 -0
  9. package/dist/across.js.map +1 -0
  10. package/dist/cli/aave.d.ts +3 -0
  11. package/dist/cli/aave.d.ts.map +1 -0
  12. package/dist/cli/aave.js +81 -0
  13. package/dist/cli/aave.js.map +1 -0
  14. package/dist/cli/hyperliquid.d.ts +3 -0
  15. package/dist/cli/hyperliquid.d.ts.map +1 -0
  16. package/dist/cli/hyperliquid.js +72 -0
  17. package/dist/cli/hyperliquid.js.map +1 -0
  18. package/dist/cli/morpho-blue.d.ts +3 -0
  19. package/dist/cli/morpho-blue.d.ts.map +1 -0
  20. package/dist/cli/morpho-blue.js +34 -0
  21. package/dist/cli/morpho-blue.js.map +1 -0
  22. package/dist/cli/uniswap.d.ts +3 -0
  23. package/dist/cli/uniswap.d.ts.map +1 -0
  24. package/dist/cli/uniswap.js +37 -0
  25. package/dist/cli/uniswap.js.map +1 -0
  26. package/dist/cli/utils.d.ts +10 -0
  27. package/dist/cli/utils.d.ts.map +1 -0
  28. package/dist/cli/utils.js +85 -0
  29. package/dist/cli/utils.js.map +1 -0
  30. package/dist/compound-v3.d.ts +3 -0
  31. package/dist/compound-v3.d.ts.map +1 -0
  32. package/dist/compound-v3.js +12 -0
  33. package/dist/compound-v3.js.map +1 -0
  34. package/dist/erc20.d.ts +12 -0
  35. package/dist/erc20.d.ts.map +1 -0
  36. package/dist/erc20.js +49 -0
  37. package/dist/erc20.js.map +1 -0
  38. package/dist/hyperliquid.d.ts +11 -0
  39. package/dist/hyperliquid.d.ts.map +1 -0
  40. package/dist/hyperliquid.js +118 -0
  41. package/dist/hyperliquid.js.map +1 -0
  42. package/dist/index.d.ts +10 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +16 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/morpho-blue.d.ts +15 -0
  47. package/dist/morpho-blue.d.ts.map +1 -0
  48. package/dist/morpho-blue.js +176 -0
  49. package/dist/morpho-blue.js.map +1 -0
  50. package/dist/types.d.ts +2 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +2 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/uniswap-v3.d.ts +16 -0
  55. package/dist/uniswap-v3.d.ts.map +1 -0
  56. package/dist/uniswap-v3.js +287 -0
  57. package/dist/uniswap-v3.js.map +1 -0
  58. package/dist/uniswap-v4.d.ts +15 -0
  59. package/dist/uniswap-v4.d.ts.map +1 -0
  60. package/dist/uniswap-v4.js +535 -0
  61. package/dist/uniswap-v4.js.map +1 -0
  62. package/package.json +34 -0
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env node
2
+ import { ExchangeClient, HttpTransport, InfoClient } from "@nktkas/hyperliquid";
3
+ import { getOption, parseArgs, printResult, requireOption } from "./utils.js";
4
+ async function main() {
5
+ const { command, options } = parseArgs(process.argv.slice(2));
6
+ if (!command || command === "help" || options.help) {
7
+ printUsage();
8
+ return;
9
+ }
10
+ const transport = new HttpTransport();
11
+ const info = new InfoClient({ transport });
12
+ switch (command) {
13
+ case "mids": {
14
+ const result = await info.allMids();
15
+ printResult(result);
16
+ return;
17
+ }
18
+ case "l2-book": {
19
+ const coin = requireOption(options, "coin");
20
+ const result = await info.l2Book({ coin });
21
+ printResult(result);
22
+ return;
23
+ }
24
+ case "open-orders": {
25
+ const user = requireOption(options, "user");
26
+ const result = await info.openOrders({ user });
27
+ printResult(result);
28
+ return;
29
+ }
30
+ case "meta": {
31
+ const result = await info.meta();
32
+ printResult(result);
33
+ return;
34
+ }
35
+ case "spot-meta": {
36
+ const result = await info.spotMeta();
37
+ printResult(result);
38
+ return;
39
+ }
40
+ case "withdraw": {
41
+ const amount = requireOption(options, "amount");
42
+ const keystorePath = requireOption(options, "keystore");
43
+ const passwordEnv = getOption(options, "password-env") ?? "KEYSTORE_PASSWORD";
44
+ const password = process.env[passwordEnv];
45
+ if (!password)
46
+ throw new Error(`${passwordEnv} not set`);
47
+ const { loadPrivateKey } = await import("@grimoirelabs/core");
48
+ const { readFileSync } = await import("node:fs");
49
+ const { privateKeyToAccount } = await import("viem/accounts");
50
+ const keystoreJson = readFileSync(keystorePath, "utf-8");
51
+ const rawKey = loadPrivateKey({ type: "keystore", source: keystoreJson, password });
52
+ const account = privateKeyToAccount(rawKey);
53
+ const destination = (getOption(options, "destination") ?? account.address);
54
+ const exchange = new ExchangeClient({ transport, wallet: account });
55
+ const result = await exchange.withdraw3({ destination, amount });
56
+ console.log(`Withdrew ${amount} USDC from HyperCore`);
57
+ console.log(` Destination: ${destination}`);
58
+ printResult(result);
59
+ return;
60
+ }
61
+ default:
62
+ throw new Error(`Unknown command: ${command}`);
63
+ }
64
+ }
65
+ function printUsage() {
66
+ console.log("\nHyperliquid CLI (grimoire-hyperliquid)\n\nCommands:\n mids\n l2-book --coin <symbol>\n open-orders --user <address>\n meta\n spot-meta\n withdraw --amount <usdc> --keystore <path> [--password-env <var>] [--destination <addr>]\n");
67
+ }
68
+ main().catch((error) => {
69
+ console.error(error instanceof Error ? error.message : String(error));
70
+ process.exit(1);
71
+ });
72
+ //# sourceMappingURL=hyperliquid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperliquid.js","sourceRoot":"","sources":["../../src/cli/hyperliquid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=morpho-blue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"morpho-blue.d.ts","sourceRoot":"","sources":["../../src/cli/morpho-blue.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import { getChainAddresses } from "@morpho-org/blue-sdk";
3
+ import { createMorphoBlueAdapter } from "../morpho-blue.js";
4
+ import { getOption, parseArgs, printResult } from "./utils.js";
5
+ async function main() {
6
+ const { command, options } = parseArgs(process.argv.slice(2));
7
+ if (!command || command === "help" || options.help) {
8
+ printUsage();
9
+ return;
10
+ }
11
+ switch (command) {
12
+ case "info": {
13
+ const adapter = createMorphoBlueAdapter({ markets: [] });
14
+ printResult(adapter.meta);
15
+ return;
16
+ }
17
+ case "addresses": {
18
+ const chain = Number.parseInt(getOption(options, "chain") ?? "1", 10);
19
+ const addresses = getChainAddresses(chain);
20
+ printResult(addresses);
21
+ return;
22
+ }
23
+ default:
24
+ throw new Error(`Unknown command: ${command}`);
25
+ }
26
+ }
27
+ function printUsage() {
28
+ console.log("\nMorpho Blue CLI (grimoire-morpho-blue)\n\nCommands:\n info\n addresses [--chain <id>]\n");
29
+ }
30
+ main().catch((error) => {
31
+ console.error(error instanceof Error ? error.message : String(error));
32
+ process.exit(1);
33
+ });
34
+ //# sourceMappingURL=morpho-blue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"morpho-blue.js","sourceRoot":"","sources":["../../src/cli/morpho-blue.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACnD,UAAU,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,uBAAuB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACzD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YACtE,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC3C,WAAW,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CACT,6FAA6F,CAC9F,CAAC;AACJ,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=uniswap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap.d.ts","sourceRoot":"","sources":["../../src/cli/uniswap.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ import { createUniswapV3Adapter, defaultUniswapV3Routers } from "../uniswap-v3.js";
3
+ import { getOption, parseArgs, printResult } from "./utils.js";
4
+ async function main() {
5
+ const { command, options } = parseArgs(process.argv.slice(2));
6
+ if (!command || command === "help" || options.help) {
7
+ printUsage();
8
+ return;
9
+ }
10
+ switch (command) {
11
+ case "info": {
12
+ const adapter = createUniswapV3Adapter();
13
+ printResult(adapter.meta);
14
+ return;
15
+ }
16
+ case "routers": {
17
+ const chain = getOption(options, "chain");
18
+ if (chain) {
19
+ const chainId = Number.parseInt(chain, 10);
20
+ printResult({ chainId, router: defaultUniswapV3Routers[chainId] ?? null });
21
+ return;
22
+ }
23
+ printResult(defaultUniswapV3Routers);
24
+ return;
25
+ }
26
+ default:
27
+ throw new Error(`Unknown command: ${command}`);
28
+ }
29
+ }
30
+ function printUsage() {
31
+ console.log("\nUniswap CLI (grimoire-uniswap)\n\nCommands:\n info\n routers [--chain <id>]\n");
32
+ }
33
+ main().catch((error) => {
34
+ console.error(error instanceof Error ? error.message : String(error));
35
+ process.exit(1);
36
+ });
37
+ //# sourceMappingURL=uniswap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniswap.js","sourceRoot":"","sources":["../../src/cli/uniswap.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACnD,UAAU,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;YACzC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3C,WAAW,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,uBAAuB,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC3E,OAAO;YACT,CAAC;YACD,WAAW,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;AACnG,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface ParsedArgs {
2
+ command?: string;
3
+ options: Record<string, string | boolean>;
4
+ positionals: string[];
5
+ }
6
+ export declare function parseArgs(argv: string[]): ParsedArgs;
7
+ export declare function getOption(options: Record<string, string | boolean>, key: string): string | undefined;
8
+ export declare function requireOption(options: Record<string, string | boolean>, key: string): string;
9
+ export declare function printResult(data: unknown): void;
10
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cli/utils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAwBpD;AAED,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACzC,GAAG,EAAE,MAAM,GACV,MAAM,GAAG,SAAS,CAIpB;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAM5F;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAM/C"}
@@ -0,0 +1,85 @@
1
+ export function parseArgs(argv) {
2
+ const [command, ...rest] = argv;
3
+ const options = {};
4
+ const positionals = [];
5
+ for (let i = 0; i < rest.length; i++) {
6
+ const arg = rest[i];
7
+ if (!arg)
8
+ continue;
9
+ if (arg.startsWith("--")) {
10
+ const key = arg.slice(2);
11
+ const next = rest[i + 1];
12
+ if (!next || next.startsWith("--")) {
13
+ options[key] = true;
14
+ }
15
+ else {
16
+ options[key] = next;
17
+ i++;
18
+ }
19
+ }
20
+ else {
21
+ positionals.push(arg);
22
+ }
23
+ }
24
+ return { command, options, positionals };
25
+ }
26
+ export function getOption(options, key) {
27
+ const value = options[key];
28
+ if (typeof value === "string")
29
+ return value;
30
+ return undefined;
31
+ }
32
+ export function requireOption(options, key) {
33
+ const value = getOption(options, key);
34
+ if (!value) {
35
+ throw new Error(`Missing required option --${key}`);
36
+ }
37
+ return value;
38
+ }
39
+ export function printResult(data) {
40
+ console.log(JSON.stringify(data, null, 2));
41
+ const table = renderTable(data);
42
+ if (table) {
43
+ console.log(`\n${table}`);
44
+ }
45
+ }
46
+ function renderTable(data) {
47
+ if (Array.isArray(data)) {
48
+ if (data.length === 0)
49
+ return null;
50
+ const rows = data.filter((row) => typeof row === "object" && row !== null);
51
+ if (rows.length === 0)
52
+ return null;
53
+ const headers = Array.from(rows.reduce((set, row) => {
54
+ for (const key of Object.keys(row)) {
55
+ set.add(key);
56
+ }
57
+ return set;
58
+ }, new Set()));
59
+ return formatTable(headers, rows.map((row) => headers.map((key) => formatValue(row[key]))));
60
+ }
61
+ if (data && typeof data === "object") {
62
+ const entries = Object.entries(data);
63
+ if (entries.length === 0)
64
+ return null;
65
+ return formatTable(["key", "value"], entries.map(([key, value]) => [key, formatValue(value)]));
66
+ }
67
+ return null;
68
+ }
69
+ function formatTable(headers, rows) {
70
+ const widths = headers.map((header, i) => Math.max(header.length, ...rows.map((row) => (row[i] ? row[i].length : 0))));
71
+ const line = (values) => values.map((value, i) => value.padEnd(widths[i] ?? 0, " ")).join(" | ");
72
+ const separator = widths.map((width) => "-".repeat(width)).join("-+-");
73
+ return [line(headers), separator, ...rows.map((row) => line(row))].join("\n");
74
+ }
75
+ function formatValue(value) {
76
+ if (value === null || value === undefined)
77
+ return "";
78
+ if (typeof value === "string")
79
+ return value;
80
+ if (typeof value === "number" || typeof value === "boolean" || typeof value === "bigint") {
81
+ return value.toString();
82
+ }
83
+ return JSON.stringify(value);
84
+ }
85
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cli/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { VenueAdapter } from "@grimoirelabs/core";
2
+ export declare const compoundV3Adapter: VenueAdapter;
3
+ //# sourceMappingURL=compound-v3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compound-v3.d.ts","sourceRoot":"","sources":["../src/compound-v3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,eAAO,MAAM,iBAAiB,EAAE,YAU/B,CAAC"}
@@ -0,0 +1,12 @@
1
+ export const compoundV3Adapter = {
2
+ meta: {
3
+ name: "compound_v3",
4
+ supportedChains: [1, 10, 42161, 8453],
5
+ actions: ["lend", "withdraw", "borrow", "repay"],
6
+ description: "Compound V3 lending adapter",
7
+ },
8
+ async buildAction() {
9
+ throw new Error("Compound V3 adapter not implemented yet");
10
+ },
11
+ };
12
+ //# sourceMappingURL=compound-v3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compound-v3.js","sourceRoot":"","sources":["../src/compound-v3.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,IAAI,EAAE;QACJ,IAAI,EAAE,aAAa;QACnB,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;QACrC,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;QAChD,WAAW,EAAE,6BAA6B;KAC3C;IACD,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Action, Address, BuiltTransaction, VenueAdapterContext } from "@grimoirelabs/core";
2
+ interface ApprovalRequest {
3
+ ctx: VenueAdapterContext;
4
+ token: Address;
5
+ spender: Address;
6
+ amount: bigint;
7
+ action: Action;
8
+ description: string;
9
+ }
10
+ export declare function buildApprovalIfNeeded(request: ApprovalRequest): Promise<BuiltTransaction[]>;
11
+ export {};
12
+ //# sourceMappingURL=erc20.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"erc20.d.ts","sourceRoot":"","sources":["../src/erc20.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAQjG,UAAU,eAAe;IACvB,GAAG,EAAE,mBAAmB,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA2BjG"}
package/dist/erc20.js ADDED
@@ -0,0 +1,49 @@
1
+ import { encodeFunctionData, parseAbi } from "viem";
2
+ const ERC20_ABI = parseAbi([
3
+ "function approve(address spender, uint256 amount) returns (bool)",
4
+ "function allowance(address owner, address spender) view returns (uint256)",
5
+ ]);
6
+ export async function buildApprovalIfNeeded(request) {
7
+ if (request.amount <= 0n) {
8
+ return [];
9
+ }
10
+ const needsApproval = await hasInsufficientAllowance(request);
11
+ if (!needsApproval) {
12
+ return [];
13
+ }
14
+ const data = encodeFunctionData({
15
+ abi: ERC20_ABI,
16
+ functionName: "approve",
17
+ args: [request.spender, request.amount],
18
+ });
19
+ return [
20
+ {
21
+ tx: {
22
+ to: request.token,
23
+ data,
24
+ value: 0n,
25
+ },
26
+ description: request.description,
27
+ action: request.action,
28
+ },
29
+ ];
30
+ }
31
+ async function hasInsufficientAllowance(request) {
32
+ const client = request.ctx.provider.getClient?.();
33
+ if (!client?.readContract) {
34
+ return true;
35
+ }
36
+ try {
37
+ const allowance = (await client.readContract({
38
+ address: request.token,
39
+ abi: ERC20_ABI,
40
+ functionName: "allowance",
41
+ args: [request.ctx.walletAddress, request.spender],
42
+ }));
43
+ return allowance < request.amount;
44
+ }
45
+ catch {
46
+ return true;
47
+ }
48
+ }
49
+ //# sourceMappingURL=erc20.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"erc20.js","sourceRoot":"","sources":["../src/erc20.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEpD,MAAM,SAAS,GAAG,QAAQ,CAAC;IACzB,kEAAkE;IAClE,2EAA2E;CAC5E,CAAC,CAAC;AAWH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAwB;IAClE,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,GAAG,kBAAkB,CAAC;QAC9B,GAAG,EAAE,SAAS;QACd,YAAY,EAAE,SAAS;QACvB,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC;KACxC,CAAC,CAAC;IAEH,OAAO;QACL;YACE,EAAE,EAAE;gBACF,EAAE,EAAE,OAAO,CAAC,KAAK;gBACjB,IAAI;gBACJ,KAAK,EAAE,EAAE;aACV;YACD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,OAAwB;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC;YAC3C,OAAO,EAAE,OAAO,CAAC,KAAK;YACtB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC;SACnD,CAAC,CAAW,CAAC;QAEd,OAAO,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { VenueAdapter } from "@grimoirelabs/core";
2
+ import { ExchangeClient, HttpTransport } from "@nktkas/hyperliquid";
3
+ export interface HyperliquidAdapterConfig {
4
+ privateKey: `0x${string}`;
5
+ assetMap: Record<string, number>;
6
+ exchange?: ExchangeClient;
7
+ transport?: HttpTransport;
8
+ }
9
+ export declare function createHyperliquidAdapter(config: HyperliquidAdapterConfig): VenueAdapter;
10
+ export declare const hyperliquidAdapter: VenueAdapter;
11
+ //# sourceMappingURL=hyperliquid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperliquid.d.ts","sourceRoot":"","sources":["../src/hyperliquid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpE,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAUD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,wBAAwB,GAAG,YAAY,CA2EvF;AAED,eAAO,MAAM,kBAAkB,EAAE,YAQhC,CAAC"}
@@ -0,0 +1,118 @@
1
+ import { ExchangeClient, HttpTransport } from "@nktkas/hyperliquid";
2
+ import { zeroAddress } from "viem";
3
+ import { privateKeyToAccount } from "viem/accounts";
4
+ const HYPERLIQUID_META = {
5
+ name: "hyperliquid",
6
+ supportedChains: [0, 999],
7
+ actions: ["swap", "withdraw"],
8
+ description: "Hyperliquid spot & perps adapter",
9
+ executionType: "offchain",
10
+ };
11
+ export function createHyperliquidAdapter(config) {
12
+ const account = privateKeyToAccount(config.privateKey);
13
+ const transport = config.transport ?? new HttpTransport();
14
+ const exchange = config.exchange ?? new ExchangeClient({ transport, wallet: account });
15
+ return {
16
+ meta: HYPERLIQUID_META,
17
+ async buildAction(action, _ctx) {
18
+ if (isWithdrawAction(action)) {
19
+ return {
20
+ tx: { to: zeroAddress, data: "0x", value: 0n },
21
+ description: `Hyperliquid withdraw ${action.amount} USDC`,
22
+ action,
23
+ };
24
+ }
25
+ const order = normalizeOrder(action);
26
+ return {
27
+ tx: {
28
+ to: zeroAddress,
29
+ data: "0x",
30
+ value: 0n,
31
+ },
32
+ description: `Hyperliquid ${order.coin} ${order.isBuy ? "buy" : "sell"} ${order.size}`,
33
+ action,
34
+ };
35
+ },
36
+ async executeAction(action, ctx) {
37
+ if (isWithdrawAction(action)) {
38
+ const amount = String(typeof action.amount === "object" &&
39
+ action.amount !== null &&
40
+ "value" in action.amount
41
+ ? action.amount.value
42
+ : action.amount);
43
+ const destination = (action.to ?? ctx.walletAddress);
44
+ const result = await exchange.withdraw3({ destination, amount });
45
+ return {
46
+ id: JSON.stringify(result),
47
+ status: "submitted",
48
+ raw: result,
49
+ };
50
+ }
51
+ const order = normalizeOrder(action);
52
+ const asset = config.assetMap[order.coin];
53
+ if (asset === undefined) {
54
+ throw new Error(`Unknown Hyperliquid asset mapping for ${order.coin}`);
55
+ }
56
+ const orderType = (order.orderType ?? {
57
+ limit: { tif: "Gtc" },
58
+ });
59
+ const result = await exchange.order({
60
+ orders: [
61
+ {
62
+ a: asset,
63
+ b: order.isBuy,
64
+ p: order.price,
65
+ s: order.size,
66
+ r: order.reduceOnly ?? false,
67
+ t: orderType,
68
+ },
69
+ ],
70
+ grouping: "na",
71
+ });
72
+ return {
73
+ id: JSON.stringify(result),
74
+ status: "submitted",
75
+ raw: result,
76
+ };
77
+ },
78
+ };
79
+ }
80
+ export const hyperliquidAdapter = {
81
+ meta: HYPERLIQUID_META,
82
+ async buildAction() {
83
+ throw new Error("Hyperliquid adapter requires a private key. Use createHyperliquidAdapter().");
84
+ },
85
+ async executeAction() {
86
+ throw new Error("Hyperliquid adapter requires a private key. Use createHyperliquidAdapter().");
87
+ },
88
+ };
89
+ function isWithdrawAction(action) {
90
+ return (!!action &&
91
+ typeof action === "object" &&
92
+ "type" in action &&
93
+ action.type === "withdraw");
94
+ }
95
+ function normalizeOrder(action) {
96
+ if (!action || typeof action !== "object") {
97
+ throw new Error("Hyperliquid adapter requires action object");
98
+ }
99
+ const order = action;
100
+ if (!order.coin) {
101
+ throw new Error("Hyperliquid adapter requires action.coin");
102
+ }
103
+ if (order.price === undefined) {
104
+ throw new Error("Hyperliquid adapter requires action.price");
105
+ }
106
+ if (order.size === undefined) {
107
+ throw new Error("Hyperliquid adapter requires action.size");
108
+ }
109
+ return {
110
+ coin: order.coin,
111
+ isBuy: Boolean(order.isBuy),
112
+ price: String(order.price),
113
+ size: String(order.size),
114
+ reduceOnly: order.reduceOnly,
115
+ orderType: order.orderType,
116
+ };
117
+ }
118
+ //# sourceMappingURL=hyperliquid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperliquid.js","sourceRoot":"","sources":["../src/hyperliquid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { VenueAdapter } from "@grimoirelabs/core";
2
+ import { aaveV3Adapter, createAaveV3Adapter } from "./aave-v3.js";
3
+ import { acrossAdapter, createAcrossAdapter } from "./across.js";
4
+ import { createHyperliquidAdapter, hyperliquidAdapter } from "./hyperliquid.js";
5
+ import { createMorphoBlueAdapter, morphoBlueAdapter } from "./morpho-blue.js";
6
+ import { createUniswapV3Adapter, defaultUniswapV3Routers, uniswapV3Adapter } from "./uniswap-v3.js";
7
+ import { createUniswapV4Adapter, DEFAULT_ROUTERS as defaultUniswapV4Routers, uniswapV4Adapter } from "./uniswap-v4.js";
8
+ export declare const adapters: VenueAdapter[];
9
+ export { aaveV3Adapter, createAaveV3Adapter, acrossAdapter, createAcrossAdapter, uniswapV3Adapter, createUniswapV3Adapter, defaultUniswapV3Routers, uniswapV4Adapter, createUniswapV4Adapter, defaultUniswapV4Routers, morphoBlueAdapter, createMorphoBlueAdapter, hyperliquidAdapter, createHyperliquidAdapter, };
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpG,OAAO,EACL,sBAAsB,EACtB,eAAe,IAAI,uBAAuB,EAC1C,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,QAAQ,EAAE,YAAY,EAOlC,CAAC;AAEF,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,GACzB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ import { aaveV3Adapter, createAaveV3Adapter } from "./aave-v3.js";
2
+ import { acrossAdapter, createAcrossAdapter } from "./across.js";
3
+ import { createHyperliquidAdapter, hyperliquidAdapter } from "./hyperliquid.js";
4
+ import { createMorphoBlueAdapter, morphoBlueAdapter } from "./morpho-blue.js";
5
+ import { createUniswapV3Adapter, defaultUniswapV3Routers, uniswapV3Adapter } from "./uniswap-v3.js";
6
+ import { createUniswapV4Adapter, DEFAULT_ROUTERS as defaultUniswapV4Routers, uniswapV4Adapter, } from "./uniswap-v4.js";
7
+ export const adapters = [
8
+ aaveV3Adapter,
9
+ uniswapV3Adapter,
10
+ uniswapV4Adapter,
11
+ morphoBlueAdapter,
12
+ hyperliquidAdapter,
13
+ acrossAdapter,
14
+ ];
15
+ export { aaveV3Adapter, createAaveV3Adapter, acrossAdapter, createAcrossAdapter, uniswapV3Adapter, createUniswapV3Adapter, defaultUniswapV3Routers, uniswapV4Adapter, createUniswapV4Adapter, defaultUniswapV4Routers, morphoBlueAdapter, createMorphoBlueAdapter, hyperliquidAdapter, createHyperliquidAdapter, };
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpG,OAAO,EACL,sBAAsB,EACtB,eAAe,IAAI,uBAAuB,EAC1C,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,aAAa;IACb,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;IAClB,aAAa;CACd,CAAC;AAEF,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,GACzB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Address, VenueAdapter } from "@grimoirelabs/core";
2
+ export interface MorphoBlueMarketConfig {
3
+ id: string;
4
+ loanToken: Address;
5
+ collateralToken: Address;
6
+ oracle: Address;
7
+ irm: Address;
8
+ lltv: bigint;
9
+ }
10
+ export interface MorphoBlueAdapterConfig {
11
+ markets: MorphoBlueMarketConfig[];
12
+ }
13
+ export declare function createMorphoBlueAdapter(config: MorphoBlueAdapterConfig): VenueAdapter;
14
+ export declare const morphoBlueAdapter: VenueAdapter;
15
+ //# sourceMappingURL=morpho-blue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"morpho-blue.d.ts","sourceRoot":"","sources":["../src/morpho-blue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMxE,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,sBAAsB,EAAE,CAAC;CACnC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,GAAG,YAAY,CAsFrF;AAyBD,eAAO,MAAM,iBAAiB,cAA6D,CAAC"}