@cann4n/actions-oracle 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.
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/mockOracle.d.ts +8 -0
- package/dist/mockOracle.d.ts.map +1 -0
- package/dist/mockOracle.js +31 -0
- package/dist/mockOracle.js.map +1 -0
- package/dist/oracleActionProvider.d.ts +45 -0
- package/dist/oracleActionProvider.d.ts.map +1 -0
- package/dist/oracleActionProvider.js +84 -0
- package/dist/oracleActionProvider.js.map +1 -0
- package/dist/oracleActionProvider.test.d.ts +2 -0
- package/dist/oracleActionProvider.test.d.ts.map +1 -0
- package/dist/oracleActionProvider.test.js +48 -0
- package/dist/oracleActionProvider.test.js.map +1 -0
- package/package.json +43 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockOracle.d.ts","sourceRoot":"","sources":["../src/mockOracle.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAkF;;IAShG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAO/B,SAAS,IAAI,MAAM;IAInB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;CAU5D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export class MockOracle {
|
|
2
|
+
prices = new Map();
|
|
3
|
+
constructor() {
|
|
4
|
+
const now = Math.floor(Date.now() / 1000);
|
|
5
|
+
this.prices.set("XLM", { price: 120000000n, decimals: 7, timestamp: now });
|
|
6
|
+
this.prices.set("USDC", { price: 100000000n, decimals: 7, timestamp: now });
|
|
7
|
+
this.prices.set("EURC", { price: 108000000n, decimals: 7, timestamp: now });
|
|
8
|
+
}
|
|
9
|
+
getPrice(asset) {
|
|
10
|
+
const data = this.prices.get(asset);
|
|
11
|
+
if (!data)
|
|
12
|
+
return `Error: Unknown asset ${asset}`;
|
|
13
|
+
const priceInUsd = Number(data.price) / Math.pow(10, data.decimals);
|
|
14
|
+
return `${asset}: $${priceInUsd.toFixed(data.decimals)} (timestamp: ${data.timestamp})`;
|
|
15
|
+
}
|
|
16
|
+
getAssets() {
|
|
17
|
+
return Array.from(this.prices.keys()).join(", ");
|
|
18
|
+
}
|
|
19
|
+
getHistoricalPrices(asset, records) {
|
|
20
|
+
const data = this.prices.get(asset);
|
|
21
|
+
if (!data)
|
|
22
|
+
return `Error: Unknown asset ${asset}`;
|
|
23
|
+
return Array.from({ length: records }, (_, i) => {
|
|
24
|
+
const ts = data.timestamp - i * 300;
|
|
25
|
+
const jitter = 1 + (Math.random() - 0.5) * 0.02;
|
|
26
|
+
const price = Math.round(Number(data.price) * jitter);
|
|
27
|
+
return `${new Date(ts * 1000).toISOString()}: ${price / Math.pow(10, data.decimals)}`;
|
|
28
|
+
}).join("\n");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=mockOracle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockOracle.js","sourceRoot":"","sources":["../src/mockOracle.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAU;IACb,MAAM,GAAwE,IAAI,GAAG,EAAE,CAAC;IAEhG;QACE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,wBAAwB,KAAK,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpE,OAAO,GAAG,KAAK,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,IAAI,CAAC,SAAS,GAAG,CAAC;IAC1F,CAAC;IAED,SAAS;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,mBAAmB,CAAC,KAAa,EAAE,OAAe;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,wBAAwB,KAAK,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,GAAG,CAAC;YACpC,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC;YACtD,OAAO,GAAG,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { WalletProvider } from "@cann4n/core";
|
|
3
|
+
import { ActionProvider } from "@cann4n/core";
|
|
4
|
+
declare const GetPriceSchema: z.ZodObject<{
|
|
5
|
+
oracleId: z.ZodString;
|
|
6
|
+
asset: z.ZodString;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
oracleId: string;
|
|
9
|
+
asset: string;
|
|
10
|
+
}, {
|
|
11
|
+
oracleId: string;
|
|
12
|
+
asset: string;
|
|
13
|
+
}>;
|
|
14
|
+
declare const GetAssetsSchema: z.ZodObject<{
|
|
15
|
+
oracleId: z.ZodString;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
oracleId: string;
|
|
18
|
+
}, {
|
|
19
|
+
oracleId: string;
|
|
20
|
+
}>;
|
|
21
|
+
declare const GetHistoricalPricesSchema: z.ZodObject<{
|
|
22
|
+
oracleId: z.ZodString;
|
|
23
|
+
asset: z.ZodString;
|
|
24
|
+
records: z.ZodNumber;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
oracleId: string;
|
|
27
|
+
asset: string;
|
|
28
|
+
records: number;
|
|
29
|
+
}, {
|
|
30
|
+
oracleId: string;
|
|
31
|
+
asset: string;
|
|
32
|
+
records: number;
|
|
33
|
+
}>;
|
|
34
|
+
export declare class OracleProvider extends ActionProvider {
|
|
35
|
+
private oracles;
|
|
36
|
+
constructor();
|
|
37
|
+
private getOracle;
|
|
38
|
+
getPrice(_wallet: WalletProvider, args: z.infer<typeof GetPriceSchema>): Promise<string>;
|
|
39
|
+
getAssets(_wallet: WalletProvider, args: z.infer<typeof GetAssetsSchema>): Promise<string>;
|
|
40
|
+
getHistoricalPrices(_wallet: WalletProvider, args: z.infer<typeof GetHistoricalPricesSchema>): Promise<string>;
|
|
41
|
+
}
|
|
42
|
+
/** Create an oracle action provider for SEP-40 price queries. */
|
|
43
|
+
export declare const oracleActions: () => OracleProvider;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=oracleActionProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oracleActionProvider.d.ts","sourceRoot":"","sources":["../src/oracleActionProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAU,cAAc,EAAE,MAAM,cAAc,CAAC;AAGtD,QAAA,MAAM,cAAc;;;;;;;;;EAGlB,CAAC;AAEH,QAAA,MAAM,eAAe;;;;;;EAEnB,CAAC;AAEH,QAAA,MAAM,yBAAyB;;;;;;;;;;;;EAI7B,CAAC;AAEH,qBAAa,cAAe,SAAQ,cAAc;IAChD,OAAO,CAAC,OAAO,CAAsC;;IAMrD,OAAO,CAAC,SAAS;IAcX,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAWxF,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1F,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAGrH;AAED,iEAAiE;AACjE,eAAO,MAAM,aAAa,sBAA6B,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
import { Action, ActionProvider } from "@cann4n/core";
|
|
12
|
+
import { MockOracle } from "./mockOracle";
|
|
13
|
+
const GetPriceSchema = z.object({
|
|
14
|
+
oracleId: z.string().describe("Oracle contract address (C...)"),
|
|
15
|
+
asset: z.string().describe("Asset contract address or symbol (e.g., 'USD', 'XLM')"),
|
|
16
|
+
});
|
|
17
|
+
const GetAssetsSchema = z.object({
|
|
18
|
+
oracleId: z.string().describe("Oracle contract address (C...)"),
|
|
19
|
+
});
|
|
20
|
+
const GetHistoricalPricesSchema = z.object({
|
|
21
|
+
oracleId: z.string().describe("Oracle contract address"),
|
|
22
|
+
asset: z.string().describe("Asset address or symbol"),
|
|
23
|
+
records: z.number().min(1).max(100).describe("Number of historical records to fetch"),
|
|
24
|
+
});
|
|
25
|
+
export class OracleProvider extends ActionProvider {
|
|
26
|
+
oracles = new Map();
|
|
27
|
+
constructor() {
|
|
28
|
+
super("oracle", []);
|
|
29
|
+
}
|
|
30
|
+
getOracle(_oracleId) {
|
|
31
|
+
if (!this.oracles.has(_oracleId)) {
|
|
32
|
+
this.oracles.set(_oracleId, new MockOracle());
|
|
33
|
+
}
|
|
34
|
+
return this.oracles.get(_oracleId);
|
|
35
|
+
}
|
|
36
|
+
async getPrice(_wallet, args) {
|
|
37
|
+
return this.getOracle(args.oracleId).getPrice(args.asset);
|
|
38
|
+
}
|
|
39
|
+
async getAssets(_wallet, args) {
|
|
40
|
+
return this.getOracle(args.oracleId).getAssets();
|
|
41
|
+
}
|
|
42
|
+
async getHistoricalPrices(_wallet, args) {
|
|
43
|
+
return this.getOracle(args.oracleId).getHistoricalPrices(args.asset, args.records);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
__decorate([
|
|
47
|
+
Action({
|
|
48
|
+
name: "get_price",
|
|
49
|
+
description: "Get the latest price for an asset from a SEP-40 oracle",
|
|
50
|
+
similes: ["price", "asset price", "oracle price"],
|
|
51
|
+
schema: GetPriceSchema,
|
|
52
|
+
needsWallet: true,
|
|
53
|
+
}),
|
|
54
|
+
__metadata("design:type", Function),
|
|
55
|
+
__metadata("design:paramtypes", [Function, void 0]),
|
|
56
|
+
__metadata("design:returntype", Promise)
|
|
57
|
+
], OracleProvider.prototype, "getPrice", null);
|
|
58
|
+
__decorate([
|
|
59
|
+
Action({
|
|
60
|
+
name: "get_assets",
|
|
61
|
+
description: "List all assets supported by an oracle",
|
|
62
|
+
similes: ["oracle assets", "supported assets"],
|
|
63
|
+
schema: GetAssetsSchema,
|
|
64
|
+
needsWallet: true,
|
|
65
|
+
}),
|
|
66
|
+
__metadata("design:type", Function),
|
|
67
|
+
__metadata("design:paramtypes", [Function, void 0]),
|
|
68
|
+
__metadata("design:returntype", Promise)
|
|
69
|
+
], OracleProvider.prototype, "getAssets", null);
|
|
70
|
+
__decorate([
|
|
71
|
+
Action({
|
|
72
|
+
name: "get_historical_prices",
|
|
73
|
+
description: "Get historical price data from an oracle",
|
|
74
|
+
similes: ["price history", "historical prices"],
|
|
75
|
+
schema: GetHistoricalPricesSchema,
|
|
76
|
+
needsWallet: true,
|
|
77
|
+
}),
|
|
78
|
+
__metadata("design:type", Function),
|
|
79
|
+
__metadata("design:paramtypes", [Function, void 0]),
|
|
80
|
+
__metadata("design:returntype", Promise)
|
|
81
|
+
], OracleProvider.prototype, "getHistoricalPrices", null);
|
|
82
|
+
/** Create an oracle action provider for SEP-40 price queries. */
|
|
83
|
+
export const oracleActions = () => new OracleProvider();
|
|
84
|
+
//# sourceMappingURL=oracleActionProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oracleActionProvider.js","sourceRoot":"","sources":["../src/oracleActionProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oracleActionProvider.test.d.ts","sourceRoot":"","sources":["../src/oracleActionProvider.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { MockWalletProvider } from "@cann4n/core";
|
|
3
|
+
import { OracleProvider } from "./oracleActionProvider";
|
|
4
|
+
describe("OracleProvider", () => {
|
|
5
|
+
const wallet = new MockWalletProvider();
|
|
6
|
+
const provider = new OracleProvider();
|
|
7
|
+
it("should provide oracle actions", () => {
|
|
8
|
+
const actions = provider.getActions(wallet);
|
|
9
|
+
const names = actions.map((a) => a.name);
|
|
10
|
+
expect(names).toContain("oracle_get_price");
|
|
11
|
+
expect(names).toContain("oracle_get_assets");
|
|
12
|
+
expect(names).toContain("oracle_get_historical_prices");
|
|
13
|
+
});
|
|
14
|
+
it("should describe actions for LLM", () => {
|
|
15
|
+
const actions = provider.getActions(wallet);
|
|
16
|
+
const price = actions.find((a) => a.name === "oracle_get_price");
|
|
17
|
+
expect(price.description).toContain("SEP-40 oracle");
|
|
18
|
+
});
|
|
19
|
+
it("should get price", async () => {
|
|
20
|
+
const actions = provider.getActions(wallet);
|
|
21
|
+
const price = actions.find((a) => a.name === "oracle_get_price");
|
|
22
|
+
const result = await price.invoke({
|
|
23
|
+
oracleId: "mock_oracle",
|
|
24
|
+
asset: "XLM",
|
|
25
|
+
});
|
|
26
|
+
expect(result).toContain("XLM");
|
|
27
|
+
expect(result).toContain("$");
|
|
28
|
+
});
|
|
29
|
+
it("should get assets", async () => {
|
|
30
|
+
const actions = provider.getActions(wallet);
|
|
31
|
+
const assets = actions.find((a) => a.name === "oracle_get_assets");
|
|
32
|
+
const result = await assets.invoke({ oracleId: "mock_oracle" });
|
|
33
|
+
expect(result).toContain("XLM");
|
|
34
|
+
expect(result).toContain("USDC");
|
|
35
|
+
});
|
|
36
|
+
it("should get historical prices", async () => {
|
|
37
|
+
const actions = provider.getActions(wallet);
|
|
38
|
+
const historical = actions.find((a) => a.name === "oracle_get_historical_prices");
|
|
39
|
+
const result = await historical.invoke({
|
|
40
|
+
oracleId: "mock_oracle",
|
|
41
|
+
asset: "USDC",
|
|
42
|
+
records: 5,
|
|
43
|
+
});
|
|
44
|
+
const lines = result.split("\n");
|
|
45
|
+
expect(lines.length).toBe(5);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=oracleActionProvider.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oracleActionProvider.test.js","sourceRoot":"","sources":["../src/oracleActionProvider.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cann4n/actions-oracle",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "SEP-40 price oracle query actions for AgentKit Stellar",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"default": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@cann4n/core": "^0.1.0",
|
|
21
|
+
"zod": "^3.24.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"typescript": "^5.7.0",
|
|
25
|
+
"vitest": "^3.0.0"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
},
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "https://github.com/anomalyco/agentkit-stellar.git",
|
|
34
|
+
"directory": "packages/actions-oracle"
|
|
35
|
+
},
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsc",
|
|
38
|
+
"test": "vitest run",
|
|
39
|
+
"lint": "eslint src/",
|
|
40
|
+
"typecheck": "tsc --noEmit",
|
|
41
|
+
"clean": "rm -rf dist"
|
|
42
|
+
}
|
|
43
|
+
}
|