@waiaas/openclaw-plugin 2.11.0-rc.23
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/LICENSE +21 -0
- package/dist/client.d.ts +28 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +61 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +35 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +18 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/defi.d.ts +4 -0
- package/dist/tools/defi.d.ts.map +1 -0
- package/dist/tools/defi.js +69 -0
- package/dist/tools/defi.js.map +1 -0
- package/dist/tools/nft.d.ts +4 -0
- package/dist/tools/nft.d.ts.map +1 -0
- package/dist/tools/nft.js +70 -0
- package/dist/tools/nft.js.map +1 -0
- package/dist/tools/transfer.d.ts +4 -0
- package/dist/tools/transfer.d.ts.map +1 -0
- package/dist/tools/transfer.js +115 -0
- package/dist/tools/transfer.js.map +1 -0
- package/dist/tools/utility.d.ts +4 -0
- package/dist/tools/utility.d.ts.map +1 -0
- package/dist/tools/utility.js +254 -0
- package/dist/tools/utility.js.map +1 -0
- package/dist/tools/wallet.d.ts +4 -0
- package/dist/tools/wallet.d.ts.map +1 -0
- package/dist/tools/wallet.js +58 -0
- package/dist/tools/wallet.js.map +1 -0
- package/openclaw.plugin.json +22 -0
- package/package.json +70 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 WAIaaS Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WAIaaSPluginClient: fetch-based HTTP client for WAIaaS daemon.
|
|
3
|
+
*
|
|
4
|
+
* Uses Node.js 22 built-in fetch. Sends Bearer token on every request.
|
|
5
|
+
* Returns structured result: { ok: true, data } | { ok: false, error }
|
|
6
|
+
*/
|
|
7
|
+
export type PluginResult<T> = {
|
|
8
|
+
ok: true;
|
|
9
|
+
data: T;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
error: string;
|
|
13
|
+
status?: number;
|
|
14
|
+
};
|
|
15
|
+
export declare class WAIaaSPluginClient {
|
|
16
|
+
private readonly baseUrl;
|
|
17
|
+
private readonly token;
|
|
18
|
+
constructor(baseUrl: string, token: string);
|
|
19
|
+
get<T>(path: string): Promise<PluginResult<T>>;
|
|
20
|
+
post<T>(path: string, body: unknown): Promise<PluginResult<T>>;
|
|
21
|
+
private request;
|
|
22
|
+
}
|
|
23
|
+
export declare function createClient(daemonUrl: string, sessionToken: string): WAIaaSPluginClient;
|
|
24
|
+
/**
|
|
25
|
+
* Convert PluginResult to a plain object for tool handler return.
|
|
26
|
+
*/
|
|
27
|
+
export declare function toResult<T>(result: PluginResult<T>): unknown;
|
|
28
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,YAAY,CAAC,CAAC,IACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GACrB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKpC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAI9C,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAItD,OAAO;CA+BtB;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAExF;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAG5D"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WAIaaSPluginClient: fetch-based HTTP client for WAIaaS daemon.
|
|
3
|
+
*
|
|
4
|
+
* Uses Node.js 22 built-in fetch. Sends Bearer token on every request.
|
|
5
|
+
* Returns structured result: { ok: true, data } | { ok: false, error }
|
|
6
|
+
*/
|
|
7
|
+
const USER_AGENT = '@waiaas/openclaw-plugin/1.0.0';
|
|
8
|
+
export class WAIaaSPluginClient {
|
|
9
|
+
baseUrl;
|
|
10
|
+
token;
|
|
11
|
+
constructor(baseUrl, token) {
|
|
12
|
+
this.baseUrl = baseUrl.replace(/\/+$/, '');
|
|
13
|
+
this.token = token;
|
|
14
|
+
}
|
|
15
|
+
async get(path) {
|
|
16
|
+
return this.request('GET', path);
|
|
17
|
+
}
|
|
18
|
+
async post(path, body) {
|
|
19
|
+
return this.request('POST', path, body);
|
|
20
|
+
}
|
|
21
|
+
async request(method, path, body) {
|
|
22
|
+
try {
|
|
23
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
24
|
+
method,
|
|
25
|
+
headers: {
|
|
26
|
+
'Content-Type': 'application/json',
|
|
27
|
+
'Authorization': `Bearer ${this.token}`,
|
|
28
|
+
'User-Agent': USER_AGENT,
|
|
29
|
+
},
|
|
30
|
+
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
31
|
+
});
|
|
32
|
+
if (!res.ok) {
|
|
33
|
+
const errBody = await res.json().catch(() => null);
|
|
34
|
+
const message = typeof errBody?.['message'] === 'string'
|
|
35
|
+
? errBody['message']
|
|
36
|
+
: `HTTP ${res.status}`;
|
|
37
|
+
return { ok: false, error: message, status: res.status };
|
|
38
|
+
}
|
|
39
|
+
const data = await res.json();
|
|
40
|
+
return { ok: true, data };
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
return {
|
|
44
|
+
ok: false,
|
|
45
|
+
error: err instanceof Error ? err.message : 'Network error',
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function createClient(daemonUrl, sessionToken) {
|
|
51
|
+
return new WAIaaSPluginClient(daemonUrl, sessionToken);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Convert PluginResult to a plain object for tool handler return.
|
|
55
|
+
*/
|
|
56
|
+
export function toResult(result) {
|
|
57
|
+
if (result.ok)
|
|
58
|
+
return result.data;
|
|
59
|
+
return { error: result.error, status: result.status };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,UAAU,GAAG,+BAA+B,CAAC;AAMnD,MAAM,OAAO,kBAAkB;IACZ,OAAO,CAAS;IAChB,KAAK,CAAS;IAE/B,YAAY,OAAe,EAAE,KAAa;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY;QACvB,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAa;QACvC,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAc;QAEd,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;gBAChD,MAAM;gBACN,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;oBACvC,YAAY,EAAE,UAAU;iBACzB;gBACD,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aAC5D,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAmC,CAAC;gBACrF,MAAM,OAAO,GAAG,OAAO,OAAO,EAAE,CAAC,SAAS,CAAC,KAAK,QAAQ;oBACtD,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;oBACpB,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;gBACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3D,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAO,CAAC;YACnC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAC5D,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,SAAiB,EAAE,YAAoB;IAClE,OAAO,IAAI,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAI,MAAuB;IACjD,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAClC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACxD,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw plugin interface types.
|
|
3
|
+
*
|
|
4
|
+
* OpenClaw does not publish a types package; declare the interface locally.
|
|
5
|
+
* Based on OpenClaw plugin system specification.
|
|
6
|
+
*/
|
|
7
|
+
export interface PluginToolConfig {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: 'object';
|
|
12
|
+
properties: Record<string, JsonSchemaProperty>;
|
|
13
|
+
required?: string[];
|
|
14
|
+
};
|
|
15
|
+
handler: (args: Record<string, unknown>) => Promise<unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface JsonSchemaProperty {
|
|
18
|
+
type?: string | string[];
|
|
19
|
+
description?: string;
|
|
20
|
+
default?: unknown;
|
|
21
|
+
enum?: unknown[];
|
|
22
|
+
items?: JsonSchemaProperty;
|
|
23
|
+
properties?: Record<string, JsonSchemaProperty>;
|
|
24
|
+
required?: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface PluginApi {
|
|
27
|
+
config: Record<string, unknown>;
|
|
28
|
+
registerTool(tool: PluginToolConfig): void;
|
|
29
|
+
}
|
|
30
|
+
export interface PluginConfig {
|
|
31
|
+
sessionToken: string;
|
|
32
|
+
daemonUrl: string;
|
|
33
|
+
}
|
|
34
|
+
export declare function resolveConfig(apiConfig: Record<string, unknown>): PluginConfig;
|
|
35
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAU9E"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw plugin interface types.
|
|
3
|
+
*
|
|
4
|
+
* OpenClaw does not publish a types package; declare the interface locally.
|
|
5
|
+
* Based on OpenClaw plugin system specification.
|
|
6
|
+
*/
|
|
7
|
+
export function resolveConfig(apiConfig) {
|
|
8
|
+
const sessionToken = apiConfig['sessionToken'];
|
|
9
|
+
const daemonUrl = apiConfig['daemonUrl'] ?? 'http://localhost:3100';
|
|
10
|
+
if (typeof sessionToken !== 'string' || !sessionToken) {
|
|
11
|
+
throw new Error('WAIaaS plugin: sessionToken is required in plugin config');
|
|
12
|
+
}
|
|
13
|
+
if (typeof daemonUrl !== 'string') {
|
|
14
|
+
throw new Error('WAIaaS plugin: daemonUrl must be a string');
|
|
15
|
+
}
|
|
16
|
+
return { sessionToken, daemonUrl: daemonUrl.replace(/\/+$/, '') };
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH,MAAM,UAAU,aAAa,CAAC,SAAkC;IAC9D,MAAM,YAAY,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,uBAAuB,CAAC;IACpE,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAG,SAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;AAChF,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @waiaas/openclaw-plugin
|
|
3
|
+
*
|
|
4
|
+
* Registers ~22 sessionAuth WAIaaS tools with an OpenClaw Gateway.
|
|
5
|
+
* Does NOT register any masterAuth tools.
|
|
6
|
+
*
|
|
7
|
+
* Usage (openclaw.plugin.json entry: "./dist/index.js"):
|
|
8
|
+
* The register() function is called by OpenClaw with a PluginApi instance.
|
|
9
|
+
* Config must include: { sessionToken: string, daemonUrl: string }
|
|
10
|
+
*/
|
|
11
|
+
import type { PluginApi } from './config.js';
|
|
12
|
+
export declare function register(api: PluginApi): void;
|
|
13
|
+
export type { PluginApi, PluginToolConfig, PluginConfig } from './config.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAS7C;AAED,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @waiaas/openclaw-plugin
|
|
3
|
+
*
|
|
4
|
+
* Registers ~22 sessionAuth WAIaaS tools with an OpenClaw Gateway.
|
|
5
|
+
* Does NOT register any masterAuth tools.
|
|
6
|
+
*
|
|
7
|
+
* Usage (openclaw.plugin.json entry: "./dist/index.js"):
|
|
8
|
+
* The register() function is called by OpenClaw with a PluginApi instance.
|
|
9
|
+
* Config must include: { sessionToken: string, daemonUrl: string }
|
|
10
|
+
*/
|
|
11
|
+
import { resolveConfig } from './config.js';
|
|
12
|
+
import { createClient } from './client.js';
|
|
13
|
+
import { registerWalletTools } from './tools/wallet.js';
|
|
14
|
+
import { registerTransferTools } from './tools/transfer.js';
|
|
15
|
+
import { registerDefiTools } from './tools/defi.js';
|
|
16
|
+
import { registerNftTools } from './tools/nft.js';
|
|
17
|
+
import { registerUtilityTools } from './tools/utility.js';
|
|
18
|
+
export function register(api) {
|
|
19
|
+
const config = resolveConfig(api.config);
|
|
20
|
+
const client = createClient(config.daemonUrl, config.sessionToken);
|
|
21
|
+
registerWalletTools(api, client);
|
|
22
|
+
registerTransferTools(api, client);
|
|
23
|
+
registerDefiTools(api, client);
|
|
24
|
+
registerNftTools(api, client);
|
|
25
|
+
registerUtilityTools(api, client);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,UAAU,QAAQ,CAAC,GAAc;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAEnE,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACjC,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9B,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defi.d.ts","sourceRoot":"","sources":["../../src/tools/defi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAiElF"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { toResult } from '../client.js';
|
|
2
|
+
export function registerDefiTools(api, client) {
|
|
3
|
+
// Tool 7: execute_action
|
|
4
|
+
api.registerTool({
|
|
5
|
+
name: 'execute_action',
|
|
6
|
+
description: 'Execute a DeFi action (swap, bridge, stake, unstake, lend_supply, lend_borrow, lend_repay, lend_withdraw, etc.) through the action provider system. Call get_provider_status first to see available providers and actions.',
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
action: { type: 'string', description: 'Action name (e.g., "swap", "stake", "lend_supply"). Use get_provider_status to see available actions.' },
|
|
11
|
+
provider: { type: 'string', description: 'Provider name (e.g., "jupiter", "lido", "aave"). Use get_provider_status to see available providers.' },
|
|
12
|
+
params: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
description: 'Action-specific parameters. See provider documentation or get_provider_status for required fields.',
|
|
15
|
+
properties: {},
|
|
16
|
+
},
|
|
17
|
+
wallet_id: { type: 'string', description: 'Target wallet ID. Required for multi-wallet sessions.' },
|
|
18
|
+
network: { type: 'string', description: 'Target network (e.g., "ethereum-mainnet"). Required for EVM providers.' },
|
|
19
|
+
},
|
|
20
|
+
required: ['action', 'provider', 'params'],
|
|
21
|
+
},
|
|
22
|
+
handler: async (args) => {
|
|
23
|
+
const body = {
|
|
24
|
+
action: args['action'],
|
|
25
|
+
provider: args['provider'],
|
|
26
|
+
params: args['params'] ?? {},
|
|
27
|
+
};
|
|
28
|
+
if (args['wallet_id'])
|
|
29
|
+
body['walletId'] = args['wallet_id'];
|
|
30
|
+
if (args['network'])
|
|
31
|
+
body['network'] = args['network'];
|
|
32
|
+
const result = await client.post('/v1/actions/execute', body);
|
|
33
|
+
return toResult(result);
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
// Tool 8: get_defi_positions
|
|
37
|
+
api.registerTool({
|
|
38
|
+
name: 'get_defi_positions',
|
|
39
|
+
description: 'Get DeFi lending positions with health factor and USD amounts.',
|
|
40
|
+
inputSchema: {
|
|
41
|
+
type: 'object',
|
|
42
|
+
properties: {
|
|
43
|
+
wallet_id: { type: 'string', description: 'Target wallet ID. Required for multi-wallet sessions; auto-resolved when session has a single wallet.' },
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
handler: async (args) => {
|
|
47
|
+
const params = new URLSearchParams();
|
|
48
|
+
if (typeof args['wallet_id'] === 'string')
|
|
49
|
+
params.set('wallet_id', args['wallet_id']);
|
|
50
|
+
const qs = params.toString();
|
|
51
|
+
const result = await client.get('/v1/wallet/positions' + (qs ? '?' + qs : ''));
|
|
52
|
+
return toResult(result);
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
// Tool 9: get_provider_status
|
|
56
|
+
api.registerTool({
|
|
57
|
+
name: 'get_provider_status',
|
|
58
|
+
description: 'List available DeFi action providers with their actions, supported chains, and API key status.',
|
|
59
|
+
inputSchema: {
|
|
60
|
+
type: 'object',
|
|
61
|
+
properties: {},
|
|
62
|
+
},
|
|
63
|
+
handler: async () => {
|
|
64
|
+
const result = await client.get('/v1/actions/providers');
|
|
65
|
+
return toResult(result);
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=defi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defi.js","sourceRoot":"","sources":["../../src/tools/defi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nft.d.ts","sourceRoot":"","sources":["../../src/tools/nft.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CA8DjF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { toResult } from '../client.js';
|
|
2
|
+
export function registerNftTools(api, client) {
|
|
3
|
+
// Tool 16: list_nfts
|
|
4
|
+
api.registerTool({
|
|
5
|
+
name: 'list_nfts',
|
|
6
|
+
description: 'List NFTs (ERC-721, ERC-1155, Metaplex) owned by the wallet for a specific network. Requires NFT indexer API key.',
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
network: { type: 'string', description: 'Network identifier (e.g., "ethereum-mainnet", "solana-mainnet" or CAIP-2 "eip155:1").' },
|
|
11
|
+
cursor: { type: 'string', description: 'Pagination cursor from previous response.' },
|
|
12
|
+
limit: { type: 'number', description: 'Max NFTs per page (default: 20).' },
|
|
13
|
+
group_by: { type: 'string', enum: ['collection'], description: 'Group NFTs by collection.' },
|
|
14
|
+
wallet_id: { type: 'string', description: 'Target wallet ID. Required for multi-wallet sessions.' },
|
|
15
|
+
},
|
|
16
|
+
required: ['network'],
|
|
17
|
+
},
|
|
18
|
+
handler: async (args) => {
|
|
19
|
+
const params = new URLSearchParams();
|
|
20
|
+
params.set('network', String(args['network']));
|
|
21
|
+
if (typeof args['cursor'] === 'string')
|
|
22
|
+
params.set('cursor', args['cursor']);
|
|
23
|
+
if (args['limit'] !== undefined)
|
|
24
|
+
params.set('limit', String(args['limit']));
|
|
25
|
+
if (typeof args['group_by'] === 'string')
|
|
26
|
+
params.set('groupBy', args['group_by']);
|
|
27
|
+
if (typeof args['wallet_id'] === 'string')
|
|
28
|
+
params.set('walletId', args['wallet_id']);
|
|
29
|
+
const result = await client.get('/v1/wallet/nfts?' + params.toString());
|
|
30
|
+
return toResult(result);
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
// Tool 17: transfer_nft
|
|
34
|
+
api.registerTool({
|
|
35
|
+
name: 'transfer_nft',
|
|
36
|
+
description: 'Transfer an NFT (ERC-721/ERC-1155/Metaplex) to a recipient address. Default tier: APPROVAL.',
|
|
37
|
+
inputSchema: {
|
|
38
|
+
type: 'object',
|
|
39
|
+
properties: {
|
|
40
|
+
to: { type: 'string', description: 'Recipient address (0x-hex for EVM, base58 for Solana).' },
|
|
41
|
+
token_address: { type: 'string', description: 'NFT contract address (EVM) or mint address (Solana).' },
|
|
42
|
+
token_id: { type: 'string', description: 'Token ID within the contract (EVM). Use "0" for Solana Metaplex.' },
|
|
43
|
+
standard: { type: 'string', enum: ['erc721', 'erc1155', 'metaplex'], description: 'NFT standard.' },
|
|
44
|
+
network: { type: 'string', description: 'Network identifier (e.g., "ethereum-mainnet", "solana-mainnet").' },
|
|
45
|
+
amount: { type: 'string', description: 'Number of tokens to transfer (default: "1"). Only relevant for ERC-1155.' },
|
|
46
|
+
wallet_id: { type: 'string', description: 'Target wallet ID. Required for multi-wallet sessions.' },
|
|
47
|
+
},
|
|
48
|
+
required: ['to', 'token_address', 'token_id', 'standard', 'network'],
|
|
49
|
+
},
|
|
50
|
+
handler: async (args) => {
|
|
51
|
+
const body = {
|
|
52
|
+
type: 'NFT_TRANSFER',
|
|
53
|
+
to: args['to'],
|
|
54
|
+
token: {
|
|
55
|
+
address: args['token_address'],
|
|
56
|
+
tokenId: args['token_id'],
|
|
57
|
+
standard: args['standard'],
|
|
58
|
+
},
|
|
59
|
+
network: args['network'],
|
|
60
|
+
};
|
|
61
|
+
if (args['amount'] !== undefined)
|
|
62
|
+
body['amount'] = args['amount'];
|
|
63
|
+
if (args['wallet_id'])
|
|
64
|
+
body['walletId'] = args['wallet_id'];
|
|
65
|
+
const result = await client.post('/v1/transactions/send', body);
|
|
66
|
+
return toResult(result);
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=nft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nft.js","sourceRoot":"","sources":["../../src/tools/nft.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../src/tools/transfer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAuGtF"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { toResult } from '../client.js';
|
|
2
|
+
export function registerTransferTools(api, client) {
|
|
3
|
+
// Tool 4: send_token
|
|
4
|
+
api.registerTool({
|
|
5
|
+
name: 'send_token',
|
|
6
|
+
description: 'Send SOL/ETH or tokens from the wallet. For token transfers, specify type and token info.',
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
to: { type: 'string', description: 'Destination wallet address' },
|
|
11
|
+
amount: { type: 'string', description: 'Amount in smallest units (wei for EVM, lamports for Solana). Example: "1000000000000000000" = 1 ETH' },
|
|
12
|
+
type: { type: 'string', enum: ['TRANSFER', 'TOKEN_TRANSFER'], description: 'Transaction type. Default: TRANSFER (native). TOKEN_TRANSFER for SPL/ERC-20' },
|
|
13
|
+
network: { type: 'string', description: 'Target network (e.g., "polygon-mainnet" or CAIP-2 "eip155:137"). Required for EVM wallets; auto-resolved for Solana.' },
|
|
14
|
+
token: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
description: 'Required for TOKEN_TRANSFER. Provide full metadata OR assetId alone for auto-resolve.',
|
|
17
|
+
properties: {
|
|
18
|
+
address: { type: 'string', description: 'Token mint (SPL) or contract address (ERC-20).' },
|
|
19
|
+
decimals: { type: 'number', description: 'Token decimals (e.g., 6 for USDC).' },
|
|
20
|
+
symbol: { type: 'string', description: 'Token symbol (e.g., USDC).' },
|
|
21
|
+
assetId: { type: 'string', description: 'CAIP-19 asset identifier for auto-resolve.' },
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
memo: { type: 'string', description: 'Optional transaction memo' },
|
|
25
|
+
wallet_id: { type: 'string', description: 'Target wallet ID. Required for multi-wallet sessions; auto-resolved when session has a single wallet.' },
|
|
26
|
+
gas_condition: {
|
|
27
|
+
type: 'object',
|
|
28
|
+
description: 'Gas price condition for deferred execution.',
|
|
29
|
+
properties: {
|
|
30
|
+
max_gas_price: { type: 'string', description: 'Max gas price in wei' },
|
|
31
|
+
max_priority_fee: { type: 'string', description: 'Max priority fee in wei or micro-lamports' },
|
|
32
|
+
timeout: { type: 'number', description: 'Max wait time in seconds (60-86400)' },
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
required: ['to', 'amount'],
|
|
37
|
+
},
|
|
38
|
+
handler: async (args) => {
|
|
39
|
+
const body = { to: args['to'], amount: args['amount'] };
|
|
40
|
+
if (args['type'])
|
|
41
|
+
body['type'] = args['type'];
|
|
42
|
+
if (args['token'])
|
|
43
|
+
body['token'] = args['token'];
|
|
44
|
+
if (args['network'] !== undefined)
|
|
45
|
+
body['network'] = args['network'];
|
|
46
|
+
if (args['memo'] !== undefined)
|
|
47
|
+
body['memo'] = args['memo'];
|
|
48
|
+
if (args['wallet_id'])
|
|
49
|
+
body['walletId'] = args['wallet_id'];
|
|
50
|
+
if (args['gas_condition']) {
|
|
51
|
+
const gc = args['gas_condition'];
|
|
52
|
+
body['gasCondition'] = {
|
|
53
|
+
maxGasPrice: gc['max_gas_price'],
|
|
54
|
+
maxPriorityFee: gc['max_priority_fee'],
|
|
55
|
+
timeout: gc['timeout'],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const result = await client.post('/v1/transactions/send', body);
|
|
59
|
+
return toResult(result);
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
// Tool 5: get_transaction
|
|
63
|
+
api.registerTool({
|
|
64
|
+
name: 'get_transaction',
|
|
65
|
+
description: 'Get details of a specific transaction by ID.',
|
|
66
|
+
inputSchema: {
|
|
67
|
+
type: 'object',
|
|
68
|
+
properties: {
|
|
69
|
+
transaction_id: { type: 'string', description: 'Transaction ID to retrieve' },
|
|
70
|
+
display_currency: { type: 'string', description: 'Display currency for amount conversion (e.g. KRW, EUR).' },
|
|
71
|
+
wallet_id: { type: 'string', description: 'Target wallet ID. Required for multi-wallet sessions.' },
|
|
72
|
+
},
|
|
73
|
+
required: ['transaction_id'],
|
|
74
|
+
},
|
|
75
|
+
handler: async (args) => {
|
|
76
|
+
const params = new URLSearchParams();
|
|
77
|
+
if (typeof args['display_currency'] === 'string')
|
|
78
|
+
params.set('display_currency', args['display_currency']);
|
|
79
|
+
if (typeof args['wallet_id'] === 'string')
|
|
80
|
+
params.set('walletId', args['wallet_id']);
|
|
81
|
+
const qs = params.toString();
|
|
82
|
+
const result = await client.get(`/v1/transactions/${String(args['transaction_id'])}${qs ? '?' + qs : ''}`);
|
|
83
|
+
return toResult(result);
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
// Tool 6: list_transactions
|
|
87
|
+
api.registerTool({
|
|
88
|
+
name: 'list_transactions',
|
|
89
|
+
description: 'List transaction history with cursor-based pagination.',
|
|
90
|
+
inputSchema: {
|
|
91
|
+
type: 'object',
|
|
92
|
+
properties: {
|
|
93
|
+
limit: { type: 'number', description: 'Maximum number of transactions to return' },
|
|
94
|
+
cursor: { type: 'string', description: 'Pagination cursor from previous response' },
|
|
95
|
+
display_currency: { type: 'string', description: 'Display currency for amount conversion (e.g. KRW, EUR).' },
|
|
96
|
+
wallet_id: { type: 'string', description: 'Target wallet ID. Required for multi-wallet sessions.' },
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
handler: async (args) => {
|
|
100
|
+
const params = new URLSearchParams();
|
|
101
|
+
if (args['limit'] !== undefined)
|
|
102
|
+
params.set('limit', String(args['limit']));
|
|
103
|
+
if (typeof args['cursor'] === 'string')
|
|
104
|
+
params.set('cursor', args['cursor']);
|
|
105
|
+
if (typeof args['display_currency'] === 'string')
|
|
106
|
+
params.set('display_currency', args['display_currency']);
|
|
107
|
+
if (typeof args['wallet_id'] === 'string')
|
|
108
|
+
params.set('walletId', args['wallet_id']);
|
|
109
|
+
const qs = params.toString();
|
|
110
|
+
const result = await client.get(`/v1/transactions${qs ? '?' + qs : ''}`);
|
|
111
|
+
return toResult(result);
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=transfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/tools/transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/tools/utility.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CA2OrF"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { toResult } from '../client.js';
|
|
2
|
+
export function registerUtilityTools(api, client) {
|
|
3
|
+
// Tool 10: sign_message
|
|
4
|
+
api.registerTool({
|
|
5
|
+
name: 'sign_message',
|
|
6
|
+
description: 'Sign a message (personal_sign) or EIP-712 typed data (signTypedData). Returns the signature. EIP-712 is EVM-only.',
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
message: { type: 'string', description: 'Message to sign (hex 0x-prefixed or UTF-8 string). Required for sign_type "personal".' },
|
|
11
|
+
sign_type: { type: 'string', enum: ['personal', 'typedData'], description: 'Sign type: "personal" (default) for raw message, "typedData" for EIP-712.' },
|
|
12
|
+
typed_data: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
description: 'EIP-712 typed data structure. Required when sign_type is "typedData".',
|
|
15
|
+
properties: {
|
|
16
|
+
domain: { type: 'object', properties: {} },
|
|
17
|
+
types: { type: 'object', properties: {} },
|
|
18
|
+
primaryType: { type: 'string' },
|
|
19
|
+
message: { type: 'object', properties: {} },
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
network: { type: 'string', description: 'Target network (optional).' },
|
|
23
|
+
wallet_id: { type: 'string', description: 'Target wallet ID. Required for multi-wallet sessions.' },
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
handler: async (args) => {
|
|
27
|
+
const body = {};
|
|
28
|
+
if (args['message'])
|
|
29
|
+
body['message'] = args['message'];
|
|
30
|
+
if (args['sign_type'])
|
|
31
|
+
body['signType'] = args['sign_type'];
|
|
32
|
+
if (args['typed_data'])
|
|
33
|
+
body['typedData'] = args['typed_data'];
|
|
34
|
+
if (args['network'])
|
|
35
|
+
body['network'] = args['network'];
|
|
36
|
+
if (args['wallet_id'])
|
|
37
|
+
body['walletId'] = args['wallet_id'];
|
|
38
|
+
const result = await client.post('/v1/transactions/sign-message', body);
|
|
39
|
+
return toResult(result);
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
// Tool 11: resolve_asset
|
|
43
|
+
api.registerTool({
|
|
44
|
+
name: 'resolve_asset',
|
|
45
|
+
description: 'Resolve a CAIP-19 asset identifier to token metadata (address, decimals, symbol, isNative, isRegistered).',
|
|
46
|
+
inputSchema: {
|
|
47
|
+
type: 'object',
|
|
48
|
+
properties: {
|
|
49
|
+
asset_id: { type: 'string', description: 'CAIP-19 asset identifier (e.g., "eip155:1/erc20:0xa0b8...", "eip155:1/slip44:60")' },
|
|
50
|
+
},
|
|
51
|
+
required: ['asset_id'],
|
|
52
|
+
},
|
|
53
|
+
handler: async (args) => {
|
|
54
|
+
const assetId = String(args['asset_id']);
|
|
55
|
+
const slashIdx = assetId.indexOf('/');
|
|
56
|
+
if (slashIdx === -1)
|
|
57
|
+
return { error: 'INVALID_CAIP19', message: `Invalid CAIP-19 format: "${assetId}"` };
|
|
58
|
+
const chainId = assetId.substring(0, slashIdx);
|
|
59
|
+
const assetPart = assetId.substring(slashIdx + 1);
|
|
60
|
+
const colonIdx = assetPart.indexOf(':');
|
|
61
|
+
if (colonIdx === -1)
|
|
62
|
+
return { error: 'INVALID_CAIP19', message: `Invalid CAIP-19 format: "${assetId}"` };
|
|
63
|
+
const namespace = assetPart.substring(0, colonIdx);
|
|
64
|
+
const reference = assetPart.substring(colonIdx + 1);
|
|
65
|
+
if (namespace === 'slip44') {
|
|
66
|
+
return { assetId, chainId, network: chainId, address: null, decimals: null, symbol: null, name: null, isNative: true, isRegistered: false };
|
|
67
|
+
}
|
|
68
|
+
const result = await client.get(`/v1/tokens?network=${encodeURIComponent(chainId)}`);
|
|
69
|
+
if (!result.ok) {
|
|
70
|
+
return { assetId, chainId, network: chainId, address: reference, decimals: null, symbol: null, name: null, isNative: false, isRegistered: false };
|
|
71
|
+
}
|
|
72
|
+
const tokens = result.data.tokens ?? [];
|
|
73
|
+
const match = tokens.find((t) => typeof t['address'] === 'string' && t['address'].toLowerCase() === reference.toLowerCase());
|
|
74
|
+
if (match) {
|
|
75
|
+
return { assetId, chainId, network: chainId, address: match['address'], decimals: match['decimals'], symbol: match['symbol'], name: match['name'], isNative: false, isRegistered: true };
|
|
76
|
+
}
|
|
77
|
+
return { assetId, chainId, network: chainId, address: reference, decimals: null, symbol: null, name: null, isNative: false, isRegistered: false };
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
// Tool 12: call_contract
|
|
81
|
+
api.registerTool({
|
|
82
|
+
name: 'call_contract',
|
|
83
|
+
description: 'Call a whitelisted smart contract. Requires CONTRACT_WHITELIST policy. For EVM: provide calldata (hex). For Solana: provide programId + instructionData + accounts.',
|
|
84
|
+
inputSchema: {
|
|
85
|
+
type: 'object',
|
|
86
|
+
properties: {
|
|
87
|
+
to: { type: 'string', description: 'Contract address' },
|
|
88
|
+
calldata: { type: 'string', description: 'Hex-encoded calldata (EVM)' },
|
|
89
|
+
value: { type: 'string', description: 'Native token value in smallest units (wei).' },
|
|
90
|
+
programId: { type: 'string', description: 'Program ID (Solana)' },
|
|
91
|
+
instructionData: { type: 'string', description: 'Base64-encoded instruction data (Solana)' },
|
|
92
|
+
accounts: {
|
|
93
|
+
type: 'array',
|
|
94
|
+
description: 'Account metas (Solana)',
|
|
95
|
+
items: {
|
|
96
|
+
type: 'object',
|
|
97
|
+
properties: {
|
|
98
|
+
pubkey: { type: 'string' },
|
|
99
|
+
isSigner: { type: 'boolean' },
|
|
100
|
+
isWritable: { type: 'boolean' },
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
network: { type: 'string', description: 'Target network.' },
|
|
105
|
+
wallet_id: { type: 'string', description: 'Target wallet ID.' },
|
|
106
|
+
gas_condition: {
|
|
107
|
+
type: 'object',
|
|
108
|
+
properties: {
|
|
109
|
+
max_gas_price: { type: 'string' },
|
|
110
|
+
max_priority_fee: { type: 'string' },
|
|
111
|
+
timeout: { type: 'number' },
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
required: ['to'],
|
|
116
|
+
},
|
|
117
|
+
handler: async (args) => {
|
|
118
|
+
const body = { type: 'CONTRACT_CALL', to: args['to'] };
|
|
119
|
+
if (args['calldata'] !== undefined)
|
|
120
|
+
body['calldata'] = args['calldata'];
|
|
121
|
+
if (args['value'] !== undefined)
|
|
122
|
+
body['value'] = args['value'];
|
|
123
|
+
if (args['programId'] !== undefined)
|
|
124
|
+
body['programId'] = args['programId'];
|
|
125
|
+
if (args['instructionData'] !== undefined)
|
|
126
|
+
body['instructionData'] = args['instructionData'];
|
|
127
|
+
if (args['accounts'] !== undefined)
|
|
128
|
+
body['accounts'] = args['accounts'];
|
|
129
|
+
if (args['network'] !== undefined)
|
|
130
|
+
body['network'] = args['network'];
|
|
131
|
+
if (args['wallet_id'])
|
|
132
|
+
body['walletId'] = args['wallet_id'];
|
|
133
|
+
if (args['gas_condition']) {
|
|
134
|
+
const gc = args['gas_condition'];
|
|
135
|
+
body['gasCondition'] = { maxGasPrice: gc['max_gas_price'], maxPriorityFee: gc['max_priority_fee'], timeout: gc['timeout'] };
|
|
136
|
+
}
|
|
137
|
+
const result = await client.post('/v1/transactions/send', body);
|
|
138
|
+
return toResult(result);
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
// Tool 13: approve_token
|
|
142
|
+
api.registerTool({
|
|
143
|
+
name: 'approve_token',
|
|
144
|
+
description: 'Approve a spender to transfer tokens on your behalf. Requires APPROVED_SPENDERS policy.',
|
|
145
|
+
inputSchema: {
|
|
146
|
+
type: 'object',
|
|
147
|
+
properties: {
|
|
148
|
+
spender: { type: 'string', description: 'Spender address' },
|
|
149
|
+
token: {
|
|
150
|
+
type: 'object',
|
|
151
|
+
description: 'Token info. Provide full metadata (address/decimals/symbol) OR assetId alone for auto-resolve.',
|
|
152
|
+
properties: {
|
|
153
|
+
address: { type: 'string' },
|
|
154
|
+
decimals: { type: 'number' },
|
|
155
|
+
symbol: { type: 'string' },
|
|
156
|
+
assetId: { type: 'string' },
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
amount: { type: 'string', description: 'Approval amount in smallest units.' },
|
|
160
|
+
network: { type: 'string', description: 'Target network.' },
|
|
161
|
+
wallet_id: { type: 'string', description: 'Target wallet ID.' },
|
|
162
|
+
gas_condition: {
|
|
163
|
+
type: 'object',
|
|
164
|
+
properties: {
|
|
165
|
+
max_gas_price: { type: 'string' },
|
|
166
|
+
max_priority_fee: { type: 'string' },
|
|
167
|
+
timeout: { type: 'number' },
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
required: ['spender', 'token', 'amount'],
|
|
172
|
+
},
|
|
173
|
+
handler: async (args) => {
|
|
174
|
+
const body = { type: 'APPROVE', spender: args['spender'], token: args['token'], amount: args['amount'] };
|
|
175
|
+
if (args['network'] !== undefined)
|
|
176
|
+
body['network'] = args['network'];
|
|
177
|
+
if (args['wallet_id'])
|
|
178
|
+
body['walletId'] = args['wallet_id'];
|
|
179
|
+
if (args['gas_condition']) {
|
|
180
|
+
const gc = args['gas_condition'];
|
|
181
|
+
body['gasCondition'] = { maxGasPrice: gc['max_gas_price'], maxPriorityFee: gc['max_priority_fee'], timeout: gc['timeout'] };
|
|
182
|
+
}
|
|
183
|
+
const result = await client.post('/v1/transactions/send', body);
|
|
184
|
+
return toResult(result);
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
// Tool 14: send_batch
|
|
188
|
+
api.registerTool({
|
|
189
|
+
name: 'send_batch',
|
|
190
|
+
description: 'Send multiple instructions in a single atomic transaction (Solana only, 2-20 instructions).',
|
|
191
|
+
inputSchema: {
|
|
192
|
+
type: 'object',
|
|
193
|
+
properties: {
|
|
194
|
+
instructions: {
|
|
195
|
+
type: 'array',
|
|
196
|
+
description: 'Array of instruction objects (each is a TRANSFER/TOKEN_TRANSFER/CONTRACT_CALL/APPROVE without the type field). 2-20 items.',
|
|
197
|
+
items: { type: 'object', properties: {} },
|
|
198
|
+
},
|
|
199
|
+
network: { type: 'string', description: 'Target network.' },
|
|
200
|
+
wallet_id: { type: 'string', description: 'Target wallet ID.' },
|
|
201
|
+
gas_condition: {
|
|
202
|
+
type: 'object',
|
|
203
|
+
properties: {
|
|
204
|
+
max_gas_price: { type: 'string' },
|
|
205
|
+
max_priority_fee: { type: 'string' },
|
|
206
|
+
timeout: { type: 'number' },
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
required: ['instructions'],
|
|
211
|
+
},
|
|
212
|
+
handler: async (args) => {
|
|
213
|
+
const body = { type: 'BATCH', instructions: args['instructions'] };
|
|
214
|
+
if (args['network'] !== undefined)
|
|
215
|
+
body['network'] = args['network'];
|
|
216
|
+
if (args['wallet_id'])
|
|
217
|
+
body['walletId'] = args['wallet_id'];
|
|
218
|
+
if (args['gas_condition']) {
|
|
219
|
+
const gc = args['gas_condition'];
|
|
220
|
+
body['gasCondition'] = { maxGasPrice: gc['max_gas_price'], maxPriorityFee: gc['max_priority_fee'], timeout: gc['timeout'] };
|
|
221
|
+
}
|
|
222
|
+
const result = await client.post('/v1/transactions/send', body);
|
|
223
|
+
return toResult(result);
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
// Tool 15: get_policies
|
|
227
|
+
api.registerTool({
|
|
228
|
+
name: 'get_policies',
|
|
229
|
+
description: 'Get policies applied to the wallet. Shows spending limits, whitelists, rate limits, and other rules.',
|
|
230
|
+
inputSchema: {
|
|
231
|
+
type: 'object',
|
|
232
|
+
properties: {
|
|
233
|
+
wallet_id: { type: 'string', description: 'Target wallet ID.' },
|
|
234
|
+
limit: { type: 'number', description: 'Max items to return (default: 50)' },
|
|
235
|
+
offset: { type: 'number', description: 'Number of items to skip (default: 0)' },
|
|
236
|
+
},
|
|
237
|
+
},
|
|
238
|
+
handler: async (args) => {
|
|
239
|
+
const params = new URLSearchParams();
|
|
240
|
+
if (typeof args['wallet_id'] === 'string')
|
|
241
|
+
params.set('walletId', args['wallet_id']);
|
|
242
|
+
if (args['limit'] !== undefined)
|
|
243
|
+
params.set('limit', String(args['limit']));
|
|
244
|
+
if (args['offset'] !== undefined)
|
|
245
|
+
params.set('offset', String(args['offset']));
|
|
246
|
+
const qs = params.toString();
|
|
247
|
+
const result = await client.get('/v1/policies' + (qs ? '?' + qs : ''));
|
|
248
|
+
return toResult(result);
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
// NOTE: get_policies is sessionAuth (GET only) — not masterAuth. Agents need to read their own policies.
|
|
252
|
+
// Excluded masterAuth tools: POST/PUT/DELETE /v1/policies, POST /v1/wallets, DELETE /v1/wallets/:id
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=utility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utility.js","sourceRoot":"","sources":["../../src/tools/utility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/tools/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAqDpF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { toResult } from '../client.js';
|
|
2
|
+
export function registerWalletTools(api, client) {
|
|
3
|
+
// Tool 1: get_wallet_info
|
|
4
|
+
api.registerTool({
|
|
5
|
+
name: 'get_wallet_info',
|
|
6
|
+
description: 'Get wallet info including chain, address, environment, and available networks.',
|
|
7
|
+
inputSchema: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
wallet_id: { type: 'string', description: 'Target wallet ID. Required for multi-wallet sessions; auto-resolved when session has a single wallet.' },
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
handler: async (args) => {
|
|
14
|
+
const params = new URLSearchParams();
|
|
15
|
+
if (typeof args['wallet_id'] === 'string')
|
|
16
|
+
params.set('walletId', args['wallet_id']);
|
|
17
|
+
const qs = params.toString();
|
|
18
|
+
const result = await client.get('/v1/wallet/address' + (qs ? '?' + qs : ''));
|
|
19
|
+
return toResult(result);
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
// Tool 2: get_balance
|
|
23
|
+
api.registerTool({
|
|
24
|
+
name: 'get_balance',
|
|
25
|
+
description: 'Get the current balance of the wallet.',
|
|
26
|
+
inputSchema: {
|
|
27
|
+
type: 'object',
|
|
28
|
+
properties: {
|
|
29
|
+
network: { type: 'string', description: 'Query balance for specific network (e.g., "polygon-mainnet" or CAIP-2 "eip155:137"). Use "all" for all networks.' },
|
|
30
|
+
display_currency: { type: 'string', description: 'Display currency for balance conversion (e.g. KRW, EUR). Defaults to server setting.' },
|
|
31
|
+
wallet_id: { type: 'string', description: 'Target wallet ID. Required for multi-wallet sessions; auto-resolved when session has a single wallet.' },
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
handler: async (args) => {
|
|
35
|
+
const params = new URLSearchParams();
|
|
36
|
+
if (typeof args['network'] === 'string')
|
|
37
|
+
params.set('network', args['network']);
|
|
38
|
+
if (typeof args['display_currency'] === 'string')
|
|
39
|
+
params.set('display_currency', args['display_currency']);
|
|
40
|
+
if (typeof args['wallet_id'] === 'string')
|
|
41
|
+
params.set('walletId', args['wallet_id']);
|
|
42
|
+
const qs = params.toString();
|
|
43
|
+
const result = await client.get('/v1/wallet/balance' + (qs ? '?' + qs : ''));
|
|
44
|
+
return toResult(result);
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
// Tool 3: connect_info
|
|
48
|
+
api.registerTool({
|
|
49
|
+
name: 'connect_info',
|
|
50
|
+
description: 'Get self-discovery info: accessible wallets, policies, capabilities, and AI-ready prompt. Call this first to understand your environment.',
|
|
51
|
+
inputSchema: { type: 'object', properties: {} },
|
|
52
|
+
handler: async () => {
|
|
53
|
+
const result = await client.get('/v1/connect-info');
|
|
54
|
+
return toResult(result);
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/tools/wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "waiaas",
|
|
3
|
+
"name": "WAIaaS Wallet",
|
|
4
|
+
"description": "AI Agent Wallet-as-a-Service — check balances, transfer tokens, execute DeFi, manage NFTs, and more. sessionAuth only.",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"entry": "./dist/index.js",
|
|
7
|
+
"configSchema": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"daemonUrl": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"description": "WAIaaS daemon URL (e.g. http://localhost:3100)",
|
|
13
|
+
"default": "http://localhost:3100"
|
|
14
|
+
},
|
|
15
|
+
"sessionToken": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "WAIaaS session token (JWT). Obtain via: waiaas mcp setup"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"required": ["daemonUrl", "sessionToken"]
|
|
21
|
+
}
|
|
22
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@waiaas/openclaw-plugin",
|
|
3
|
+
"version": "2.11.0-rc.23",
|
|
4
|
+
"description": "WAIaaS OpenClaw plugin — AI agent wallet tools for OpenClaw Gateway",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"openclaw",
|
|
7
|
+
"openclaw-plugin",
|
|
8
|
+
"wallet",
|
|
9
|
+
"crypto",
|
|
10
|
+
"blockchain",
|
|
11
|
+
"ai-agent",
|
|
12
|
+
"wallet-as-a-service",
|
|
13
|
+
"defi",
|
|
14
|
+
"ethereum",
|
|
15
|
+
"solana"
|
|
16
|
+
],
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"type": "module",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/minhoyoo-iotrust/WAIaaS.git",
|
|
22
|
+
"directory": "packages/openclaw-plugin"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/minhoyoo-iotrust/WAIaaS#readme",
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/minhoyoo-iotrust/WAIaaS/issues"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"main": "dist/index.js",
|
|
32
|
+
"types": "dist/index.d.ts",
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"import": "./dist/index.js",
|
|
36
|
+
"types": "./dist/index.d.ts"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"openclaw.plugin.json",
|
|
42
|
+
"README.md"
|
|
43
|
+
],
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=22.0.0"
|
|
46
|
+
},
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"openclaw": ">=1.0.0"
|
|
49
|
+
},
|
|
50
|
+
"peerDependenciesMeta": {
|
|
51
|
+
"openclaw": {
|
|
52
|
+
"optional": true
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"@waiaas/sdk": "2.11.0-rc.23"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@types/node": "^25.2.3",
|
|
60
|
+
"vitest": "^3.0.0"
|
|
61
|
+
},
|
|
62
|
+
"scripts": {
|
|
63
|
+
"build": "tsc -p tsconfig.build.json",
|
|
64
|
+
"test": "vitest run",
|
|
65
|
+
"test:unit": "vitest run",
|
|
66
|
+
"lint": "eslint src/",
|
|
67
|
+
"typecheck": "tsc --noEmit",
|
|
68
|
+
"clean": "rm -rf dist"
|
|
69
|
+
}
|
|
70
|
+
}
|