@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.
@@ -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,8 @@
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 {};
8
+ //# sourceMappingURL=erc8004-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"erc8004-types.js","sourceRoot":"","sources":["../src/erc8004-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AAsBH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAE5B,sBAAsB;AACtB,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAE1B,mBAAmB;AACnB,cAAc,aAAa,CAAC;AAE5B,wBAAwB;AACxB,cAAc,aAAa,CAAC;AAW5B,4BAA4B;AAC5B,MAAM,cAAc,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnF,MAAM,UAAU,GAAG,CAAC,GAAW,EAAW,EAAE;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,OAAO,aAAa;IAChB,OAAO,CAAS;IAChB,WAAW,CAAU;IACrB,OAAO,CAAS;IAExB,YAAY,UAAgC,EAAE;QAC5C,+BAA+B;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,kBAAkB,CAAC;QACtD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,wBAAwB;QACnE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO,CACnB,IAAY,EACZ,UAAuB,EAAE;QAEzB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAErC,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,kBAAkB;YAC5B,GAAG,OAAO,CAAC,OAAiC;SAC7C,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/C,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAErE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,GAAG,OAAO;gBACV,OAAO;gBACP,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,SAAmB,CAAC;gBACxB,IAAI,CAAC;oBACH,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAc,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS,GAAG,EAAE,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC3E,CAAC;gBACD,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YAC7E,CAAC;YAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;gBAChC,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACtD,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;YACjD,CAAC;YAED,MAAM,IAAI,YAAY,CACpB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EACpD,CAAC,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,0BAA0B;IAC1B,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiB,aAAa,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAc;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,sBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CACnD,CAAC;QACF,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,UAAyB,EAAE;QAC3C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAErC,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,OAAO,CAAmB,gBAAgB,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAQ,YAAY,CAAC,CAAC;IAC3C,CAAC;IAED,4EAA4E;IAC5E,uBAAuB;IACvB,4EAA4E;IAE5E;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,KAAK,CAAC,OAAO,CAAC,OAAe;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAkB,cAAc,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAA2B,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,MAAe;QACpD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/C,IAAI,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEzC,OAAO,IAAI,CAAC,OAAO,CAAgB,uBAAuB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CAAC,YAAoB;QAClC,MAAM,IAAI,GAAiB;YACzB,aAAa,EAAE,YAAY;SAC5B,CAAC;QAEF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC;QACvC,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAc,iBAAiB,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAE5E;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,OAAe;QACrC,OAAO,IAAI,CAAC,OAAO,CACjB,gCAAgC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAC9D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,IAAY;QAClC,OAAO,IAAI,CAAC,OAAO,CACjB,6BAA6B,kBAAkB,CAAC,IAAI,CAAC,EAAE,CACxD,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAClB,OAA6C,YAAY,EACzD,QAAgB,EAAE;QAElB,OAAO,IAAI,CAAC,OAAO,CACjB,mCAAmC,IAAI,UAAU,KAAK,EAAE,CACzD,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAE5E;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,IAAa;QAC5C,MAAM,IAAI,GAAkB,EAAE,KAAK,EAAE,CAAC;QACtC,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAE3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiB,aAAa,EAAE;YACjE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,GAAG,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;YACvD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;SACvC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,YAAY,CAAC,qCAAqC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,OAAO,CAAS,cAAc,CAAC,CAAC;IAC9C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAGnB;IACA;IAHlB,YACE,OAAe,EACC,MAAc,EACd,MAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAW;QAGjC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,iCAAiC;AACjC,eAAe,aAAa,CAAC"}