@clawnch/clawncher-sdk 2.0.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/README.md +331 -0
- package/dist/abis.d.ts +935 -0
- package/dist/abis.d.ts.map +1 -0
- package/dist/abis.js +486 -0
- package/dist/abis.js.map +1 -0
- package/dist/addresses.d.ts +45 -0
- package/dist/addresses.d.ts.map +1 -0
- package/dist/addresses.js +72 -0
- package/dist/addresses.js.map +1 -0
- package/dist/deployer.d.ts +255 -0
- package/dist/deployer.d.ts.map +1 -0
- package/dist/deployer.js +397 -0
- package/dist/deployer.js.map +1 -0
- package/dist/erc8004-types.d.ts +94 -0
- package/dist/erc8004-types.d.ts.map +1 -0
- package/dist/erc8004-types.js +8 -0
- package/dist/erc8004-types.js.map +1 -0
- package/dist/index.d.ts +192 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +340 -0
- package/dist/index.js.map +1 -0
- package/dist/molten-types.d.ts +282 -0
- package/dist/molten-types.d.ts.map +1 -0
- package/dist/molten-types.js +8 -0
- package/dist/molten-types.js.map +1 -0
- package/dist/molten.d.ts +336 -0
- package/dist/molten.d.ts.map +1 -0
- package/dist/molten.js +560 -0
- package/dist/molten.js.map +1 -0
- package/dist/reader.d.ts +248 -0
- package/dist/reader.d.ts.map +1 -0
- package/dist/reader.js +487 -0
- package/dist/reader.js.map +1 -0
- package/dist/types.d.ts +244 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/vanity.d.ts +115 -0
- package/dist/vanity.d.ts.map +1 -0
- package/dist/vanity.js +166 -0
- package/dist/vanity.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ERC-8004 Types
|
|
3
|
+
*
|
|
4
|
+
* ERC-8004 is a protocol for discovering and trusting AI agents across organizational boundaries.
|
|
5
|
+
* https://eips.ethereum.org/EIPS/eip-8004
|
|
6
|
+
*/
|
|
7
|
+
export type ERC8004TrustModels = 'reputation' | 'crypto-economic' | 'tee-attestation';
|
|
8
|
+
export type ERC8004ChainId = 'eip155:1' | 'eip155:11155111' | 'eip155:8453' | 'eip155:84532' | 'eip155:59144' | 'eip155:11155420' | 'eip155:80002' | 'solana:101' | 'solana:102';
|
|
9
|
+
export interface ERC8004Endpoint {
|
|
10
|
+
name: string;
|
|
11
|
+
endpoint: string;
|
|
12
|
+
version?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ERC8004Wallet {
|
|
16
|
+
chain: ERC8004ChainId;
|
|
17
|
+
address: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface ERC8004Registration {
|
|
21
|
+
agentId: number;
|
|
22
|
+
agentRegistry: ERC8004ChainId;
|
|
23
|
+
timestamp: string;
|
|
24
|
+
blockNumber?: number;
|
|
25
|
+
transactionHash?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ERC8004Skill {
|
|
28
|
+
namespace: string;
|
|
29
|
+
skill: string;
|
|
30
|
+
domain?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface ERC8004Domain {
|
|
33
|
+
category: string;
|
|
34
|
+
subcategory?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface ERC8004ReputationScore {
|
|
37
|
+
overall: number;
|
|
38
|
+
totalRatings: number;
|
|
39
|
+
breakdown?: {
|
|
40
|
+
reliability?: number;
|
|
41
|
+
quality?: number;
|
|
42
|
+
responsiveness?: number;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export interface ERC8004Agent {
|
|
46
|
+
id: string;
|
|
47
|
+
name: string;
|
|
48
|
+
description: string;
|
|
49
|
+
image: string;
|
|
50
|
+
active: boolean;
|
|
51
|
+
endpoints: ERC8004Endpoint[];
|
|
52
|
+
wallets: ERC8004Wallet[];
|
|
53
|
+
registrations: ERC8004Registration[];
|
|
54
|
+
supportedTrust: ERC8004TrustModels[];
|
|
55
|
+
skills?: ERC8004Skill[];
|
|
56
|
+
domains?: ERC8004Domain[];
|
|
57
|
+
reputation?: ERC8004ReputationScore;
|
|
58
|
+
metadata?: Record<string, unknown>;
|
|
59
|
+
}
|
|
60
|
+
export interface ERC8004AgentCard {
|
|
61
|
+
name: string;
|
|
62
|
+
description: string;
|
|
63
|
+
url: string;
|
|
64
|
+
version: string;
|
|
65
|
+
capabilities?: {
|
|
66
|
+
streaming?: boolean;
|
|
67
|
+
pushNotifications?: boolean;
|
|
68
|
+
};
|
|
69
|
+
defaultApiVersion?: string;
|
|
70
|
+
skills?: string[];
|
|
71
|
+
}
|
|
72
|
+
export interface ERC8004SearchFilters {
|
|
73
|
+
name?: string;
|
|
74
|
+
active?: boolean;
|
|
75
|
+
trustModel?: ERC8004TrustModels;
|
|
76
|
+
chainId?: ERC8004ChainId;
|
|
77
|
+
skills?: string[];
|
|
78
|
+
domains?: string[];
|
|
79
|
+
limit?: number;
|
|
80
|
+
offset?: number;
|
|
81
|
+
}
|
|
82
|
+
export interface ERC8004SearchResult {
|
|
83
|
+
agents: ERC8004Agent[];
|
|
84
|
+
total: number;
|
|
85
|
+
hasMore: boolean;
|
|
86
|
+
}
|
|
87
|
+
export interface ERC8004RegistryConfig {
|
|
88
|
+
chainId: ERC8004ChainId;
|
|
89
|
+
identityRegistryAddress: string;
|
|
90
|
+
reputationRegistryAddress?: string;
|
|
91
|
+
validationRegistryAddress?: string;
|
|
92
|
+
blockNumber?: number;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=erc8004-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc8004-types.d.ts","sourceRoot":"","sources":["../src/erc8004-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc8004-types.js","sourceRoot":"","sources":["../src/erc8004-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clawncher SDK
|
|
3
|
+
*
|
|
4
|
+
* TypeScript SDK for deploying tokens on Base with Uniswap V4 pools.
|
|
5
|
+
*
|
|
6
|
+
* ## Deploying Tokens (Contract-based)
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { ClawnchDeployer } from '@clawnch/clawncher-sdk';
|
|
11
|
+
* import { createWalletClient, createPublicClient, http } from 'viem';
|
|
12
|
+
* import { privateKeyToAccount } from 'viem/accounts';
|
|
13
|
+
* import { baseSepolia } from 'viem/chains';
|
|
14
|
+
*
|
|
15
|
+
* const account = privateKeyToAccount('0x...');
|
|
16
|
+
* const wallet = createWalletClient({
|
|
17
|
+
* account,
|
|
18
|
+
* chain: baseSepolia,
|
|
19
|
+
* transport: http(),
|
|
20
|
+
* });
|
|
21
|
+
* const publicClient = createPublicClient({
|
|
22
|
+
* chain: baseSepolia,
|
|
23
|
+
* transport: http(),
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* const deployer = new ClawnchDeployer({
|
|
27
|
+
* wallet,
|
|
28
|
+
* publicClient,
|
|
29
|
+
* network: 'sepolia',
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* const result = await deployer.deploy({
|
|
33
|
+
* name: 'My Token',
|
|
34
|
+
* symbol: 'MYTKN',
|
|
35
|
+
* tokenAdmin: account.address,
|
|
36
|
+
* rewards: {
|
|
37
|
+
* recipients: [{
|
|
38
|
+
* recipient: account.address,
|
|
39
|
+
* admin: account.address,
|
|
40
|
+
* bps: 10000, // 100%
|
|
41
|
+
* feePreference: 'Paired', // Receive fees in WETH
|
|
42
|
+
* }],
|
|
43
|
+
* },
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* const { address } = await result.waitForTransaction();
|
|
47
|
+
* console.log('Token deployed:', address);
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* ## API Client (Optional)
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* import { ClawnchClient } from '@clawnch/clawncher-sdk';
|
|
55
|
+
*
|
|
56
|
+
* const client = new ClawnchClient();
|
|
57
|
+
*
|
|
58
|
+
* // Get all tokens
|
|
59
|
+
* const tokens = await client.getTokens();
|
|
60
|
+
*
|
|
61
|
+
* // Check available fees
|
|
62
|
+
* const fees = await client.getAvailableFees('0x...');
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
import type { Token, Launch, LaunchFilters, LaunchesResponse, Stats, PreviewResponse, FeesAvailable, ClaimResult, TokenAnalytics, AgentAnalytics, Leaderboard } from './types.js';
|
|
66
|
+
export * from './types.js';
|
|
67
|
+
export * from './molten.js';
|
|
68
|
+
export * from './deployer.js';
|
|
69
|
+
export * from './addresses.js';
|
|
70
|
+
export * from './abis.js';
|
|
71
|
+
export * from './reader.js';
|
|
72
|
+
export * from './vanity.js';
|
|
73
|
+
export interface ClawnchClientOptions {
|
|
74
|
+
/** Base URL for the API (default: https://clawn.ch) */
|
|
75
|
+
baseUrl?: string;
|
|
76
|
+
/** Moltbook API key for authenticated operations (keep secret, never log) */
|
|
77
|
+
moltbookKey?: string;
|
|
78
|
+
/** Request timeout in milliseconds (default: 30000) */
|
|
79
|
+
timeout?: number;
|
|
80
|
+
}
|
|
81
|
+
export declare class ClawnchClient {
|
|
82
|
+
private baseUrl;
|
|
83
|
+
private moltbookKey?;
|
|
84
|
+
private timeout;
|
|
85
|
+
constructor(options?: ClawnchClientOptions);
|
|
86
|
+
/**
|
|
87
|
+
* Make an API request
|
|
88
|
+
*/
|
|
89
|
+
private request;
|
|
90
|
+
/**
|
|
91
|
+
* Get all tokens launched via Clawncher
|
|
92
|
+
*/
|
|
93
|
+
getTokens(): Promise<Token[]>;
|
|
94
|
+
/**
|
|
95
|
+
* Get a single token by symbol
|
|
96
|
+
*/
|
|
97
|
+
getTokenBySymbol(symbol: string): Promise<Token | null>;
|
|
98
|
+
/**
|
|
99
|
+
* Get launch history with optional filters
|
|
100
|
+
*/
|
|
101
|
+
getLaunches(filters?: LaunchFilters): Promise<LaunchesResponse>;
|
|
102
|
+
/**
|
|
103
|
+
* Get a single launch by contract address
|
|
104
|
+
*/
|
|
105
|
+
getLaunch(address: string): Promise<Launch | null>;
|
|
106
|
+
/**
|
|
107
|
+
* Get market statistics
|
|
108
|
+
*/
|
|
109
|
+
getStats(): Promise<Stats>;
|
|
110
|
+
/**
|
|
111
|
+
* Validate a launch post before publishing
|
|
112
|
+
*
|
|
113
|
+
* @param content - The full post content including !clawnch trigger
|
|
114
|
+
* @returns Validation result with parsed data, errors, and warnings
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* const result = await client.preview(`
|
|
119
|
+
* !clawnch
|
|
120
|
+
* name: My Token
|
|
121
|
+
* symbol: MYTKN
|
|
122
|
+
* wallet: 0x1234...
|
|
123
|
+
* description: A test token
|
|
124
|
+
* image: https://iili.io/example.jpg
|
|
125
|
+
* `);
|
|
126
|
+
*
|
|
127
|
+
* if (result.valid) {
|
|
128
|
+
* console.log('Ready to post!', result.parsed);
|
|
129
|
+
* } else {
|
|
130
|
+
* console.log('Errors:', result.errors);
|
|
131
|
+
* }
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
preview(content: string): Promise<PreviewResponse>;
|
|
135
|
+
/**
|
|
136
|
+
* Check available fees for a wallet
|
|
137
|
+
*
|
|
138
|
+
* @param wallet - Ethereum wallet address
|
|
139
|
+
* @param tokens - Optional comma-separated list of token addresses to check
|
|
140
|
+
*/
|
|
141
|
+
getAvailableFees(wallet: string, tokens?: string): Promise<FeesAvailable>;
|
|
142
|
+
/**
|
|
143
|
+
* Claim fees for a token
|
|
144
|
+
*
|
|
145
|
+
* Requires Moltbook API key (set in constructor) or the wallet must be
|
|
146
|
+
* the deployer of the token.
|
|
147
|
+
*
|
|
148
|
+
* @param tokenAddress - Token contract address
|
|
149
|
+
*/
|
|
150
|
+
claimFees(tokenAddress: string): Promise<ClaimResult>;
|
|
151
|
+
/**
|
|
152
|
+
* Get detailed analytics for a token
|
|
153
|
+
*/
|
|
154
|
+
getTokenAnalytics(address: string): Promise<TokenAnalytics>;
|
|
155
|
+
/**
|
|
156
|
+
* Get analytics for an agent (all their tokens)
|
|
157
|
+
*/
|
|
158
|
+
getAgentAnalytics(name: string): Promise<AgentAnalytics>;
|
|
159
|
+
/**
|
|
160
|
+
* Get the agent leaderboard
|
|
161
|
+
*
|
|
162
|
+
* @param sort - Sort metric: 'market_cap' | 'volume' | 'launches'
|
|
163
|
+
* @param limit - Number of results (default 20, max 100)
|
|
164
|
+
*/
|
|
165
|
+
getLeaderboard(sort?: 'market_cap' | 'volume' | 'launches', limit?: number): Promise<Leaderboard>;
|
|
166
|
+
/**
|
|
167
|
+
* Upload an image for use as a token logo
|
|
168
|
+
*
|
|
169
|
+
* @param image - Base64-encoded image data OR URL to re-host
|
|
170
|
+
* @param name - Optional filename
|
|
171
|
+
* @returns Direct image URL (iili.io)
|
|
172
|
+
*/
|
|
173
|
+
uploadImage(image: string, name?: string): Promise<string>;
|
|
174
|
+
/**
|
|
175
|
+
* Get the skill documentation
|
|
176
|
+
*/
|
|
177
|
+
getSkill(): Promise<string>;
|
|
178
|
+
/**
|
|
179
|
+
* Get the OpenAPI specification
|
|
180
|
+
*/
|
|
181
|
+
getOpenAPISpec(): Promise<object>;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Custom error class for Clawncher API errors
|
|
185
|
+
*/
|
|
186
|
+
export declare class ClawnchError extends Error {
|
|
187
|
+
readonly status: number;
|
|
188
|
+
readonly errors?: string[] | undefined;
|
|
189
|
+
constructor(message: string, status: number, errors?: string[] | undefined);
|
|
190
|
+
}
|
|
191
|
+
export default ClawnchClient;
|
|
192
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAEH,OAAO,KAAK,EACV,KAAK,EAEL,MAAM,EACN,aAAa,EACb,gBAAgB,EAChB,KAAK,EAEL,eAAe,EACf,aAAa,EAEb,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EAIZ,MAAM,YAAY,CAAC;AAEpB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAG5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAG1B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAE5B,MAAM,WAAW,oBAAoB;IACnC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAaD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,oBAAyB;IAW9C;;OAEG;YACW,OAAO;IA6DrB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAKnC;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAO7D;;OAEG;IACG,WAAW,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAazE;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKxD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IAQhC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAWxD;;;;;OAKG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAO/E;;;;;;;OAOG;IACG,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAmB3D;;OAEG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMjE;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAM9D;;;;;OAKG;IACG,cAAc,CAClB,IAAI,GAAE,YAAY,GAAG,QAAQ,GAAG,UAAyB,EACzD,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,WAAW,CAAC;IAUvB;;;;;;OAMG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAWjC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;CAGxC;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAGnB,MAAM,EAAE,MAAM;aACd,MAAM,CAAC,EAAE,MAAM,EAAE;gBAFjC,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EAAE,YAAA;CAKpC;AAGD,eAAe,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clawncher SDK
|
|
3
|
+
*
|
|
4
|
+
* TypeScript SDK for deploying tokens on Base with Uniswap V4 pools.
|
|
5
|
+
*
|
|
6
|
+
* ## Deploying Tokens (Contract-based)
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { ClawnchDeployer } from '@clawnch/clawncher-sdk';
|
|
11
|
+
* import { createWalletClient, createPublicClient, http } from 'viem';
|
|
12
|
+
* import { privateKeyToAccount } from 'viem/accounts';
|
|
13
|
+
* import { baseSepolia } from 'viem/chains';
|
|
14
|
+
*
|
|
15
|
+
* const account = privateKeyToAccount('0x...');
|
|
16
|
+
* const wallet = createWalletClient({
|
|
17
|
+
* account,
|
|
18
|
+
* chain: baseSepolia,
|
|
19
|
+
* transport: http(),
|
|
20
|
+
* });
|
|
21
|
+
* const publicClient = createPublicClient({
|
|
22
|
+
* chain: baseSepolia,
|
|
23
|
+
* transport: http(),
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* const deployer = new ClawnchDeployer({
|
|
27
|
+
* wallet,
|
|
28
|
+
* publicClient,
|
|
29
|
+
* network: 'sepolia',
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* const result = await deployer.deploy({
|
|
33
|
+
* name: 'My Token',
|
|
34
|
+
* symbol: 'MYTKN',
|
|
35
|
+
* tokenAdmin: account.address,
|
|
36
|
+
* rewards: {
|
|
37
|
+
* recipients: [{
|
|
38
|
+
* recipient: account.address,
|
|
39
|
+
* admin: account.address,
|
|
40
|
+
* bps: 10000, // 100%
|
|
41
|
+
* feePreference: 'Paired', // Receive fees in WETH
|
|
42
|
+
* }],
|
|
43
|
+
* },
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* const { address } = await result.waitForTransaction();
|
|
47
|
+
* console.log('Token deployed:', address);
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* ## API Client (Optional)
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* import { ClawnchClient } from '@clawnch/clawncher-sdk';
|
|
55
|
+
*
|
|
56
|
+
* const client = new ClawnchClient();
|
|
57
|
+
*
|
|
58
|
+
* // Get all tokens
|
|
59
|
+
* const tokens = await client.getTokens();
|
|
60
|
+
*
|
|
61
|
+
* // Check available fees
|
|
62
|
+
* const fees = await client.getAvailableFees('0x...');
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export * from './types.js';
|
|
66
|
+
export * from './molten.js';
|
|
67
|
+
// Contract deployment
|
|
68
|
+
export * from './deployer.js';
|
|
69
|
+
export * from './addresses.js';
|
|
70
|
+
export * from './abis.js';
|
|
71
|
+
// Contract reading
|
|
72
|
+
export * from './reader.js';
|
|
73
|
+
// Vanity address mining
|
|
74
|
+
export * from './vanity.js';
|
|
75
|
+
// Simple validation helpers
|
|
76
|
+
const isValidAddress = (addr) => /^0x[a-fA-F0-9]{40}$/.test(addr);
|
|
77
|
+
const isValidUrl = (url) => {
|
|
78
|
+
try {
|
|
79
|
+
const parsed = new URL(url);
|
|
80
|
+
return parsed.protocol === 'https:' || parsed.protocol === 'http:';
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
export class ClawnchClient {
|
|
87
|
+
baseUrl;
|
|
88
|
+
moltbookKey;
|
|
89
|
+
timeout;
|
|
90
|
+
constructor(options = {}) {
|
|
91
|
+
// Validate baseUrl if provided
|
|
92
|
+
const baseUrl = options.baseUrl || 'https://clawn.ch';
|
|
93
|
+
if (!isValidUrl(baseUrl)) {
|
|
94
|
+
throw new Error('Invalid baseUrl: must be a valid HTTP(S) URL');
|
|
95
|
+
}
|
|
96
|
+
this.baseUrl = baseUrl.replace(/\/$/, ''); // Remove trailing slash
|
|
97
|
+
this.moltbookKey = options.moltbookKey;
|
|
98
|
+
this.timeout = options.timeout || 30000;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Make an API request
|
|
102
|
+
*/
|
|
103
|
+
async request(path, options = {}) {
|
|
104
|
+
const url = `${this.baseUrl}${path}`;
|
|
105
|
+
const headers = {
|
|
106
|
+
'Content-Type': 'application/json',
|
|
107
|
+
'Accept': 'application/json',
|
|
108
|
+
...options.headers,
|
|
109
|
+
};
|
|
110
|
+
if (this.moltbookKey) {
|
|
111
|
+
headers['X-Moltbook-Key'] = this.moltbookKey;
|
|
112
|
+
}
|
|
113
|
+
const controller = new AbortController();
|
|
114
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
115
|
+
try {
|
|
116
|
+
const response = await fetch(url, {
|
|
117
|
+
...options,
|
|
118
|
+
headers,
|
|
119
|
+
signal: controller.signal,
|
|
120
|
+
});
|
|
121
|
+
clearTimeout(timeoutId);
|
|
122
|
+
if (!response.ok) {
|
|
123
|
+
let errorData;
|
|
124
|
+
try {
|
|
125
|
+
errorData = await response.json();
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
errorData = { error: `HTTP ${response.status}: ${response.statusText}` };
|
|
129
|
+
}
|
|
130
|
+
throw new ClawnchError(errorData.error, response.status, errorData.errors);
|
|
131
|
+
}
|
|
132
|
+
return response.json();
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
clearTimeout(timeoutId);
|
|
136
|
+
if (err instanceof ClawnchError) {
|
|
137
|
+
throw err;
|
|
138
|
+
}
|
|
139
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
140
|
+
throw new ClawnchError('Request timeout', 408);
|
|
141
|
+
}
|
|
142
|
+
throw new ClawnchError(err instanceof Error ? err.message : 'Unknown error', 0);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// =========================================================================
|
|
146
|
+
// Token Operations (Read)
|
|
147
|
+
// =========================================================================
|
|
148
|
+
/**
|
|
149
|
+
* Get all tokens launched via Clawncher
|
|
150
|
+
*/
|
|
151
|
+
async getTokens() {
|
|
152
|
+
const response = await this.request('/api/tokens');
|
|
153
|
+
return response.tokens;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get a single token by symbol
|
|
157
|
+
*/
|
|
158
|
+
async getTokenBySymbol(symbol) {
|
|
159
|
+
const response = await this.request(`/api/tokens?symbol=${encodeURIComponent(symbol)}`);
|
|
160
|
+
return response.tokens[0] || null;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get launch history with optional filters
|
|
164
|
+
*/
|
|
165
|
+
async getLaunches(filters = {}) {
|
|
166
|
+
const params = new URLSearchParams();
|
|
167
|
+
if (filters.limit)
|
|
168
|
+
params.set('limit', filters.limit.toString());
|
|
169
|
+
if (filters.offset)
|
|
170
|
+
params.set('offset', filters.offset.toString());
|
|
171
|
+
if (filters.agent)
|
|
172
|
+
params.set('agent', filters.agent);
|
|
173
|
+
if (filters.source)
|
|
174
|
+
params.set('source', filters.source);
|
|
175
|
+
if (filters.address)
|
|
176
|
+
params.set('address', filters.address);
|
|
177
|
+
const query = params.toString();
|
|
178
|
+
return this.request(`/api/launches${query ? `?${query}` : ''}`);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get a single launch by contract address
|
|
182
|
+
*/
|
|
183
|
+
async getLaunch(address) {
|
|
184
|
+
const response = await this.getLaunches({ address });
|
|
185
|
+
return response.launches[0] || null;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Get market statistics
|
|
189
|
+
*/
|
|
190
|
+
async getStats() {
|
|
191
|
+
return this.request('/api/stats');
|
|
192
|
+
}
|
|
193
|
+
// =========================================================================
|
|
194
|
+
// Preview / Validation
|
|
195
|
+
// =========================================================================
|
|
196
|
+
/**
|
|
197
|
+
* Validate a launch post before publishing
|
|
198
|
+
*
|
|
199
|
+
* @param content - The full post content including !clawnch trigger
|
|
200
|
+
* @returns Validation result with parsed data, errors, and warnings
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* const result = await client.preview(`
|
|
205
|
+
* !clawnch
|
|
206
|
+
* name: My Token
|
|
207
|
+
* symbol: MYTKN
|
|
208
|
+
* wallet: 0x1234...
|
|
209
|
+
* description: A test token
|
|
210
|
+
* image: https://iili.io/example.jpg
|
|
211
|
+
* `);
|
|
212
|
+
*
|
|
213
|
+
* if (result.valid) {
|
|
214
|
+
* console.log('Ready to post!', result.parsed);
|
|
215
|
+
* } else {
|
|
216
|
+
* console.log('Errors:', result.errors);
|
|
217
|
+
* }
|
|
218
|
+
* ```
|
|
219
|
+
*/
|
|
220
|
+
async preview(content) {
|
|
221
|
+
return this.request('/api/preview', {
|
|
222
|
+
method: 'POST',
|
|
223
|
+
body: JSON.stringify({ content }),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
// =========================================================================
|
|
227
|
+
// Fee Operations
|
|
228
|
+
// =========================================================================
|
|
229
|
+
/**
|
|
230
|
+
* Check available fees for a wallet
|
|
231
|
+
*
|
|
232
|
+
* @param wallet - Ethereum wallet address
|
|
233
|
+
* @param tokens - Optional comma-separated list of token addresses to check
|
|
234
|
+
*/
|
|
235
|
+
async getAvailableFees(wallet, tokens) {
|
|
236
|
+
const params = new URLSearchParams({ wallet });
|
|
237
|
+
if (tokens)
|
|
238
|
+
params.set('tokens', tokens);
|
|
239
|
+
return this.request(`/api/fees/available?${params.toString()}`);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Claim fees for a token
|
|
243
|
+
*
|
|
244
|
+
* Requires Moltbook API key (set in constructor) or the wallet must be
|
|
245
|
+
* the deployer of the token.
|
|
246
|
+
*
|
|
247
|
+
* @param tokenAddress - Token contract address
|
|
248
|
+
*/
|
|
249
|
+
async claimFees(tokenAddress) {
|
|
250
|
+
const body = {
|
|
251
|
+
token_address: tokenAddress,
|
|
252
|
+
};
|
|
253
|
+
if (this.moltbookKey) {
|
|
254
|
+
body.moltbook_key = this.moltbookKey;
|
|
255
|
+
}
|
|
256
|
+
return this.request('/api/fees/claim', {
|
|
257
|
+
method: 'POST',
|
|
258
|
+
body: JSON.stringify(body),
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
// =========================================================================
|
|
262
|
+
// Analytics
|
|
263
|
+
// =========================================================================
|
|
264
|
+
/**
|
|
265
|
+
* Get detailed analytics for a token
|
|
266
|
+
*/
|
|
267
|
+
async getTokenAnalytics(address) {
|
|
268
|
+
return this.request(`/api/analytics/token?address=${encodeURIComponent(address)}`);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Get analytics for an agent (all their tokens)
|
|
272
|
+
*/
|
|
273
|
+
async getAgentAnalytics(name) {
|
|
274
|
+
return this.request(`/api/analytics/agent?name=${encodeURIComponent(name)}`);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get the agent leaderboard
|
|
278
|
+
*
|
|
279
|
+
* @param sort - Sort metric: 'market_cap' | 'volume' | 'launches'
|
|
280
|
+
* @param limit - Number of results (default 20, max 100)
|
|
281
|
+
*/
|
|
282
|
+
async getLeaderboard(sort = 'market_cap', limit = 20) {
|
|
283
|
+
return this.request(`/api/analytics/leaderboard?sort=${sort}&limit=${limit}`);
|
|
284
|
+
}
|
|
285
|
+
// =========================================================================
|
|
286
|
+
// Utilities
|
|
287
|
+
// =========================================================================
|
|
288
|
+
/**
|
|
289
|
+
* Upload an image for use as a token logo
|
|
290
|
+
*
|
|
291
|
+
* @param image - Base64-encoded image data OR URL to re-host
|
|
292
|
+
* @param name - Optional filename
|
|
293
|
+
* @returns Direct image URL (iili.io)
|
|
294
|
+
*/
|
|
295
|
+
async uploadImage(image, name) {
|
|
296
|
+
const body = { image };
|
|
297
|
+
if (name)
|
|
298
|
+
body.name = name;
|
|
299
|
+
const response = await this.request('/api/upload', {
|
|
300
|
+
method: 'POST',
|
|
301
|
+
body: JSON.stringify(body),
|
|
302
|
+
});
|
|
303
|
+
return response.url;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Get the skill documentation
|
|
307
|
+
*/
|
|
308
|
+
async getSkill() {
|
|
309
|
+
const response = await fetch(`${this.baseUrl}/skill.md`, {
|
|
310
|
+
method: 'GET',
|
|
311
|
+
headers: { 'Accept': 'text/markdown' }
|
|
312
|
+
});
|
|
313
|
+
if (!response.ok) {
|
|
314
|
+
throw new ClawnchError('Failed to fetch skill documentation', response.status);
|
|
315
|
+
}
|
|
316
|
+
return response.text();
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Get the OpenAPI specification
|
|
320
|
+
*/
|
|
321
|
+
async getOpenAPISpec() {
|
|
322
|
+
return this.request('/api/openapi');
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Custom error class for Clawncher API errors
|
|
327
|
+
*/
|
|
328
|
+
export class ClawnchError extends Error {
|
|
329
|
+
status;
|
|
330
|
+
errors;
|
|
331
|
+
constructor(message, status, errors) {
|
|
332
|
+
super(message);
|
|
333
|
+
this.status = status;
|
|
334
|
+
this.errors = errors;
|
|
335
|
+
this.name = 'ClawnchError';
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
// Default export for convenience
|
|
339
|
+
export default ClawnchClient;
|
|
340
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|