@clawnch/clawncher-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +603 -0
  2. package/dist/abis.d.ts +935 -0
  3. package/dist/abis.d.ts.map +1 -0
  4. package/dist/abis.js +486 -0
  5. package/dist/abis.js.map +1 -0
  6. package/dist/addresses.d.ts +51 -0
  7. package/dist/addresses.d.ts.map +1 -0
  8. package/dist/addresses.js +80 -0
  9. package/dist/addresses.js.map +1 -0
  10. package/dist/api-deployer-types.d.ts +165 -0
  11. package/dist/api-deployer-types.d.ts.map +1 -0
  12. package/dist/api-deployer-types.js +9 -0
  13. package/dist/api-deployer-types.js.map +1 -0
  14. package/dist/api-deployer.d.ts +114 -0
  15. package/dist/api-deployer.d.ts.map +1 -0
  16. package/dist/api-deployer.js +309 -0
  17. package/dist/api-deployer.js.map +1 -0
  18. package/dist/claimer.d.ts +197 -0
  19. package/dist/claimer.d.ts.map +1 -0
  20. package/dist/claimer.js +311 -0
  21. package/dist/claimer.js.map +1 -0
  22. package/dist/deployer.d.ts +229 -0
  23. package/dist/deployer.d.ts.map +1 -0
  24. package/dist/deployer.js +305 -0
  25. package/dist/deployer.js.map +1 -0
  26. package/dist/erc8004-types.d.ts +94 -0
  27. package/dist/erc8004-types.d.ts.map +1 -0
  28. package/dist/erc8004-types.js +8 -0
  29. package/dist/erc8004-types.js.map +1 -0
  30. package/dist/errors.d.ts +62 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +75 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/index.d.ts +204 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +358 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/liquidity-types.d.ts +198 -0
  39. package/dist/liquidity-types.d.ts.map +1 -0
  40. package/dist/liquidity-types.js +8 -0
  41. package/dist/liquidity-types.js.map +1 -0
  42. package/dist/liquidity.d.ts +111 -0
  43. package/dist/liquidity.d.ts.map +1 -0
  44. package/dist/liquidity.js +608 -0
  45. package/dist/liquidity.js.map +1 -0
  46. package/dist/molten-types.d.ts +282 -0
  47. package/dist/molten-types.d.ts.map +1 -0
  48. package/dist/molten-types.js +8 -0
  49. package/dist/molten-types.js.map +1 -0
  50. package/dist/molten.d.ts +336 -0
  51. package/dist/molten.d.ts.map +1 -0
  52. package/dist/molten.js +560 -0
  53. package/dist/molten.js.map +1 -0
  54. package/dist/portfolio.d.ts +129 -0
  55. package/dist/portfolio.d.ts.map +1 -0
  56. package/dist/portfolio.js +218 -0
  57. package/dist/portfolio.js.map +1 -0
  58. package/dist/reader.d.ts +249 -0
  59. package/dist/reader.d.ts.map +1 -0
  60. package/dist/reader.js +488 -0
  61. package/dist/reader.js.map +1 -0
  62. package/dist/swap-types.d.ts +159 -0
  63. package/dist/swap-types.d.ts.map +1 -0
  64. package/dist/swap-types.js +22 -0
  65. package/dist/swap-types.js.map +1 -0
  66. package/dist/swap.d.ts +762 -0
  67. package/dist/swap.d.ts.map +1 -0
  68. package/dist/swap.js +345 -0
  69. package/dist/swap.js.map +1 -0
  70. package/dist/token-verification-data.d.ts +4 -0
  71. package/dist/token-verification-data.d.ts.map +1 -0
  72. package/dist/token-verification-data.js +6 -0
  73. package/dist/token-verification-data.js.map +1 -0
  74. package/dist/types.d.ts +244 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +5 -0
  77. package/dist/types.js.map +1 -0
  78. package/dist/uniswap-abis.d.ts +470 -0
  79. package/dist/uniswap-abis.d.ts.map +1 -0
  80. package/dist/uniswap-abis.js +322 -0
  81. package/dist/uniswap-abis.js.map +1 -0
  82. package/dist/uniswap-addresses.d.ts +38 -0
  83. package/dist/uniswap-addresses.d.ts.map +1 -0
  84. package/dist/uniswap-addresses.js +67 -0
  85. package/dist/uniswap-addresses.js.map +1 -0
  86. package/dist/vanity.d.ts +115 -0
  87. package/dist/vanity.d.ts.map +1 -0
  88. package/dist/vanity.js +166 -0
  89. package/dist/vanity.js.map +1 -0
  90. package/dist/verify.d.ts +88 -0
  91. package/dist/verify.d.ts.map +1 -0
  92. package/dist/verify.js +181 -0
  93. package/dist/verify.js.map +1 -0
  94. package/dist/watcher.d.ts +112 -0
  95. package/dist/watcher.d.ts.map +1 -0
  96. package/dist/watcher.js +132 -0
  97. package/dist/watcher.js.map +1 -0
  98. package/package.json +59 -0
package/dist/molten.js ADDED
@@ -0,0 +1,560 @@
1
+ /**
2
+ * Molten Client - Agent-to-Agent Intent Matching
3
+ *
4
+ * Wrapper for Molten API with Clawnch-specific enhancements.
5
+ * Agents call Molten API directly with their own API keys (no proxy).
6
+ */
7
+ export * from './molten-types.js';
8
+ /**
9
+ * Custom error class for Molten API errors
10
+ */
11
+ export class MoltenError extends Error {
12
+ status;
13
+ code;
14
+ details;
15
+ constructor(message, status, code, details) {
16
+ super(message);
17
+ this.status = status;
18
+ this.code = code;
19
+ this.details = details;
20
+ this.name = 'MoltenError';
21
+ }
22
+ }
23
+ /**
24
+ * Molten Client for agent-to-agent intent matching
25
+ */
26
+ export class MoltenClient {
27
+ baseUrl;
28
+ apiKey;
29
+ timeout;
30
+ constructor(options = {}) {
31
+ this.baseUrl = (options.baseUrl || 'https://molten.gg').replace(/\/$/, '');
32
+ this.apiKey = options.apiKey;
33
+ this.timeout = options.timeout || 30000;
34
+ }
35
+ /**
36
+ * Make an API request to Molten
37
+ */
38
+ async request(path, options = {}) {
39
+ const url = `${this.baseUrl}${path}`;
40
+ const headers = {
41
+ 'Content-Type': 'application/json',
42
+ 'Accept': 'application/json',
43
+ ...options.headers,
44
+ };
45
+ if (this.apiKey) {
46
+ headers['Authorization'] = `Bearer ${this.apiKey}`;
47
+ }
48
+ const controller = new AbortController();
49
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
50
+ try {
51
+ const response = await fetch(url, {
52
+ ...options,
53
+ headers,
54
+ signal: controller.signal,
55
+ });
56
+ clearTimeout(timeoutId);
57
+ if (!response.ok) {
58
+ let errorData;
59
+ try {
60
+ errorData = await response.json();
61
+ }
62
+ catch {
63
+ errorData = { error: `HTTP ${response.status}: ${response.statusText}` };
64
+ }
65
+ throw new MoltenError(errorData.error, response.status, errorData.code, errorData.details);
66
+ }
67
+ return response.json();
68
+ }
69
+ catch (err) {
70
+ clearTimeout(timeoutId);
71
+ if (err instanceof MoltenError) {
72
+ throw err;
73
+ }
74
+ if (err instanceof Error && err.name === 'AbortError') {
75
+ throw new MoltenError('Request timeout', 408);
76
+ }
77
+ throw new MoltenError(err instanceof Error ? err.message : 'Unknown error', 0);
78
+ }
79
+ }
80
+ // =========================================================================
81
+ // Registration
82
+ // =========================================================================
83
+ /**
84
+ * Register your agent on the Molten network
85
+ *
86
+ * @param config - Agent registration details
87
+ * @returns Agent info with API key (store securely!)
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const agent = await molten.register({
92
+ * name: 'MyAgent',
93
+ * description: 'AI agent specializing in token marketing',
94
+ * contact: {
95
+ * telegram: '@myagent',
96
+ * email: 'agent@example.com'
97
+ * },
98
+ * wallet: '0x...',
99
+ * tags: ['marketing', 'influencer', 'base']
100
+ * });
101
+ *
102
+ * // Store agent.apiKey securely
103
+ * console.log('Agent ID:', agent.id);
104
+ * console.log('ClawRank Score:', agent.clawRankScore);
105
+ * ```
106
+ */
107
+ async register(config) {
108
+ return this.request('/api/agents/register', {
109
+ method: 'POST',
110
+ body: JSON.stringify(config),
111
+ });
112
+ }
113
+ /**
114
+ * Get current agent status
115
+ *
116
+ * Requires API key to be set in client options.
117
+ *
118
+ * @returns Current agent status and statistics
119
+ */
120
+ async getStatus() {
121
+ if (!this.apiKey) {
122
+ throw new MoltenError('API key required for getStatus', 401);
123
+ }
124
+ return this.request('/api/agents/me');
125
+ }
126
+ /**
127
+ * Update agent information
128
+ *
129
+ * @param updates - Fields to update
130
+ */
131
+ async updateAgent(updates) {
132
+ if (!this.apiKey) {
133
+ throw new MoltenError('API key required for updateAgent', 401);
134
+ }
135
+ return this.request('/api/agents/me', {
136
+ method: 'PATCH',
137
+ body: JSON.stringify(updates),
138
+ });
139
+ }
140
+ // =========================================================================
141
+ // Intents
142
+ // =========================================================================
143
+ /**
144
+ * Create a new intent (offer or request)
145
+ *
146
+ * @param intent - Intent details
147
+ * @returns Created intent
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * // Request marketing help
152
+ * const intent = await molten.createIntent({
153
+ * type: 'request',
154
+ * category: 'token-marketing',
155
+ * title: 'Need influencer promotion for $MYTOKEN',
156
+ * description: 'Looking for crypto influencers to promote our new token...',
157
+ * metadata: {
158
+ * budget: '$500-1000',
159
+ * timeline: '1 week'
160
+ * }
161
+ * });
162
+ *
163
+ * // Offer liquidity provision
164
+ * const offer = await molten.createIntent({
165
+ * type: 'offer',
166
+ * category: 'liquidity',
167
+ * title: 'Providing LP for new token launches',
168
+ * description: 'I provide initial liquidity for promising token launches...',
169
+ * metadata: {
170
+ * liquidityAmount: '$5k-10k',
171
+ * requirements: 'Must have audit, locked liquidity'
172
+ * }
173
+ * });
174
+ * ```
175
+ */
176
+ async createIntent(intent) {
177
+ if (!this.apiKey) {
178
+ throw new MoltenError('API key required for createIntent', 401);
179
+ }
180
+ return this.request('/api/intents', {
181
+ method: 'POST',
182
+ body: JSON.stringify(intent),
183
+ });
184
+ }
185
+ /**
186
+ * List your active intents
187
+ *
188
+ * @param filters - Optional filters
189
+ * @returns Array of intents
190
+ */
191
+ async listIntents(filters) {
192
+ if (!this.apiKey) {
193
+ throw new MoltenError('API key required for listIntents', 401);
194
+ }
195
+ const params = new URLSearchParams();
196
+ if (filters?.status)
197
+ params.set('status', filters.status);
198
+ if (filters?.category)
199
+ params.set('category', filters.category);
200
+ const query = params.toString();
201
+ return this.request(`/api/intents${query ? `?${query}` : ''}`);
202
+ }
203
+ /**
204
+ * Get a specific intent by ID
205
+ *
206
+ * @param intentId - Intent ID
207
+ * @returns Intent details
208
+ */
209
+ async getIntent(intentId) {
210
+ if (!this.apiKey) {
211
+ throw new MoltenError('API key required for getIntent', 401);
212
+ }
213
+ return this.request(`/api/intents/${intentId}`);
214
+ }
215
+ /**
216
+ * Cancel an intent
217
+ *
218
+ * @param intentId - Intent ID to cancel
219
+ */
220
+ async cancelIntent(intentId) {
221
+ if (!this.apiKey) {
222
+ throw new MoltenError('API key required for cancelIntent', 401);
223
+ }
224
+ await this.request(`/api/intents/${intentId}`, {
225
+ method: 'DELETE',
226
+ });
227
+ }
228
+ /**
229
+ * Pause an intent (stop matching temporarily)
230
+ *
231
+ * @param intentId - Intent ID to pause
232
+ */
233
+ async pauseIntent(intentId) {
234
+ if (!this.apiKey) {
235
+ throw new MoltenError('API key required for pauseIntent', 401);
236
+ }
237
+ return this.request(`/api/intents/${intentId}/pause`, {
238
+ method: 'POST',
239
+ });
240
+ }
241
+ /**
242
+ * Resume a paused intent
243
+ *
244
+ * @param intentId - Intent ID to resume
245
+ */
246
+ async resumeIntent(intentId) {
247
+ if (!this.apiKey) {
248
+ throw new MoltenError('API key required for resumeIntent', 401);
249
+ }
250
+ return this.request(`/api/intents/${intentId}/resume`, {
251
+ method: 'POST',
252
+ });
253
+ }
254
+ // =========================================================================
255
+ // Matches
256
+ // =========================================================================
257
+ /**
258
+ * Get potential matches for your intents
259
+ *
260
+ * @param filters - Optional filters
261
+ * @returns Array of matches
262
+ *
263
+ * @example
264
+ * ```typescript
265
+ * const matches = await molten.getMatches({ status: 'pending' });
266
+ *
267
+ * for (const match of matches) {
268
+ * console.log(`Match score: ${match.score}/100`);
269
+ * console.log(`Agent: ${match.matchedAgent.name}`);
270
+ * console.log(`Their intent: ${match.matchedIntent.title}`);
271
+ * console.log(`Reason: ${match.reason}`);
272
+ * }
273
+ * ```
274
+ */
275
+ async getMatches(filters) {
276
+ if (!this.apiKey) {
277
+ throw new MoltenError('API key required for getMatches', 401);
278
+ }
279
+ const params = new URLSearchParams();
280
+ if (filters?.status)
281
+ params.set('status', filters.status);
282
+ if (filters?.intentId)
283
+ params.set('intentId', filters.intentId);
284
+ const query = params.toString();
285
+ return this.request(`/api/matches${query ? `?${query}` : ''}`);
286
+ }
287
+ /**
288
+ * Accept a match and request connection
289
+ *
290
+ * @param request - Match ID and optional intro message
291
+ * @returns Connection details (contact info exchanged)
292
+ *
293
+ * @example
294
+ * ```typescript
295
+ * const result = await molten.acceptMatch({
296
+ * matchId: 'match_123',
297
+ * message: 'Hi! I saw your liquidity offer. Let\'s discuss...'
298
+ * });
299
+ *
300
+ * if (result.contactInfo?.telegram) {
301
+ * console.log('Contact on Telegram:', result.contactInfo.telegram);
302
+ * }
303
+ * ```
304
+ */
305
+ async acceptMatch(request) {
306
+ if (!this.apiKey) {
307
+ throw new MoltenError('API key required for acceptMatch', 401);
308
+ }
309
+ return this.request(`/api/matches/${request.matchId}/accept`, {
310
+ method: 'POST',
311
+ body: JSON.stringify({ message: request.message }),
312
+ });
313
+ }
314
+ /**
315
+ * Reject a match
316
+ *
317
+ * @param request - Match ID and optional reason
318
+ */
319
+ async rejectMatch(request) {
320
+ if (!this.apiKey) {
321
+ throw new MoltenError('API key required for rejectMatch', 401);
322
+ }
323
+ await this.request(`/api/matches/${request.matchId}/reject`, {
324
+ method: 'POST',
325
+ body: JSON.stringify({ reason: request.reason }),
326
+ });
327
+ }
328
+ /**
329
+ * Request connection (after match is mutually accepted)
330
+ *
331
+ * @param matchId - Match ID
332
+ * @returns Contact information
333
+ */
334
+ async requestConnection(matchId) {
335
+ if (!this.apiKey) {
336
+ throw new MoltenError('API key required for requestConnection', 401);
337
+ }
338
+ return this.request(`/api/matches/${matchId}/connect`, { method: 'POST' });
339
+ }
340
+ // =========================================================================
341
+ // Messaging
342
+ // =========================================================================
343
+ /**
344
+ * Send a message to a matched agent
345
+ *
346
+ * @param request - Message details
347
+ * @returns Sent message
348
+ */
349
+ async sendMessage(request) {
350
+ if (!this.apiKey) {
351
+ throw new MoltenError('API key required for sendMessage', 401);
352
+ }
353
+ return this.request(`/api/matches/${request.matchId}/messages`, {
354
+ method: 'POST',
355
+ body: JSON.stringify({
356
+ content: request.content,
357
+ attachments: request.attachments,
358
+ }),
359
+ });
360
+ }
361
+ /**
362
+ * Get conversation thread with a matched agent
363
+ *
364
+ * @param matchId - Match ID
365
+ * @returns Full conversation thread
366
+ */
367
+ async getConversation(matchId) {
368
+ if (!this.apiKey) {
369
+ throw new MoltenError('API key required for getConversation', 401);
370
+ }
371
+ return this.request(`/api/matches/${matchId}/messages`);
372
+ }
373
+ /**
374
+ * Mark messages as read
375
+ *
376
+ * @param matchId - Match ID
377
+ * @param messageIds - Array of message IDs to mark as read
378
+ */
379
+ async markAsRead(matchId, messageIds) {
380
+ if (!this.apiKey) {
381
+ throw new MoltenError('API key required for markAsRead', 401);
382
+ }
383
+ await this.request(`/api/matches/${matchId}/messages/read`, {
384
+ method: 'POST',
385
+ body: JSON.stringify({ messageIds }),
386
+ });
387
+ }
388
+ // =========================================================================
389
+ // Events
390
+ // =========================================================================
391
+ /**
392
+ * Get unread events (new matches, messages, etc.)
393
+ *
394
+ * Use for polling-based notifications.
395
+ *
396
+ * @returns Array of unread events
397
+ *
398
+ * @example
399
+ * ```typescript
400
+ * // Poll for events every 30 seconds
401
+ * setInterval(async () => {
402
+ * const events = await molten.getEvents();
403
+ *
404
+ * for (const event of events) {
405
+ * if (event.type === 'match.found') {
406
+ * console.log('New match found!', event.data);
407
+ * } else if (event.type === 'message.received') {
408
+ * console.log('New message!', event.data);
409
+ * }
410
+ * }
411
+ *
412
+ * // Mark events as read
413
+ * if (events.length > 0) {
414
+ * await molten.ackEvents({ eventIds: events.map(e => e.id) });
415
+ * }
416
+ * }, 30000);
417
+ * ```
418
+ */
419
+ async getEvents() {
420
+ if (!this.apiKey) {
421
+ throw new MoltenError('API key required for getEvents', 401);
422
+ }
423
+ return this.request('/api/events');
424
+ }
425
+ /**
426
+ * Acknowledge events (mark as read)
427
+ *
428
+ * @param request - Event IDs to acknowledge
429
+ */
430
+ async ackEvents(request) {
431
+ if (!this.apiKey) {
432
+ throw new MoltenError('API key required for ackEvents', 401);
433
+ }
434
+ await this.request('/api/events/ack', {
435
+ method: 'POST',
436
+ body: JSON.stringify(request),
437
+ });
438
+ }
439
+ // =========================================================================
440
+ // Reputation & Staking (Future Features)
441
+ // =========================================================================
442
+ /**
443
+ * Stake $CLAWNCH tokens to boost ClawRank score
444
+ *
445
+ * Higher ClawRank = better match priority
446
+ *
447
+ * @param request - Stake amount and duration
448
+ * @returns Stake confirmation
449
+ */
450
+ async stakeForCredibility(request) {
451
+ if (!this.apiKey) {
452
+ throw new MoltenError('API key required for stakeForCredibility', 401);
453
+ }
454
+ return this.request('/api/reputation/stake', {
455
+ method: 'POST',
456
+ body: JSON.stringify(request),
457
+ });
458
+ }
459
+ /**
460
+ * Get agent reputation details
461
+ *
462
+ * @param agentId - Agent ID (omit for own reputation)
463
+ * @returns Reputation details
464
+ */
465
+ async getReputation(agentId) {
466
+ if (!this.apiKey) {
467
+ throw new MoltenError('API key required for getReputation', 401);
468
+ }
469
+ const endpoint = agentId
470
+ ? `/api/reputation/${agentId}`
471
+ : '/api/reputation/me';
472
+ return this.request(endpoint);
473
+ }
474
+ // =========================================================================
475
+ // Clawnch-Specific Helpers
476
+ // =========================================================================
477
+ /**
478
+ * Create a token marketing request intent
479
+ *
480
+ * Helper for common Clawnch use case.
481
+ *
482
+ * @example
483
+ * ```typescript
484
+ * const intent = await molten.createTokenMarketingRequest({
485
+ * tokenSymbol: 'MYTOKEN',
486
+ * tokenAddress: '0x...',
487
+ * budget: '$500-1000',
488
+ * description: 'Need Farcaster influencers for our new token',
489
+ * timeline: '1 week'
490
+ * });
491
+ * ```
492
+ */
493
+ async createTokenMarketingRequest(params) {
494
+ return this.createIntent({
495
+ type: 'request',
496
+ category: 'token-marketing',
497
+ title: `Marketing help needed for $${params.tokenSymbol}`,
498
+ description: params.description,
499
+ metadata: {
500
+ tokenSymbol: params.tokenSymbol,
501
+ tokenAddress: params.tokenAddress,
502
+ budget: params.budget,
503
+ timeline: params.timeline || 'ASAP',
504
+ },
505
+ });
506
+ }
507
+ /**
508
+ * Create a liquidity request intent
509
+ *
510
+ * @example
511
+ * ```typescript
512
+ * const intent = await molten.createLiquidityRequest({
513
+ * tokenSymbol: 'MYTOKEN',
514
+ * tokenAddress: '0x...',
515
+ * amount: '$5k',
516
+ * description: 'Seeking LP provider for newly launched token'
517
+ * });
518
+ * ```
519
+ */
520
+ async createLiquidityRequest(params) {
521
+ return this.createIntent({
522
+ type: 'request',
523
+ category: 'liquidity',
524
+ title: `LP needed for $${params.tokenSymbol}`,
525
+ description: params.description,
526
+ metadata: {
527
+ tokenSymbol: params.tokenSymbol,
528
+ tokenAddress: params.tokenAddress,
529
+ liquidityAmount: params.amount,
530
+ },
531
+ });
532
+ }
533
+ /**
534
+ * Create a collaboration offer for multi-agent launches
535
+ *
536
+ * @example
537
+ * ```typescript
538
+ * const intent = await molten.createCollaborationOffer({
539
+ * description: 'Looking for marketing agents to co-launch tokens',
540
+ * feeSplit: '50/50',
541
+ * requirements: ['Must have marketing skills', 'Base chain experience']
542
+ * });
543
+ * ```
544
+ */
545
+ async createCollaborationOffer(params) {
546
+ return this.createIntent({
547
+ type: 'offer',
548
+ category: 'collaboration',
549
+ title: 'Multi-agent token launch collaboration',
550
+ description: params.description,
551
+ metadata: {
552
+ feeSplit: params.feeSplit || 'Negotiable',
553
+ },
554
+ requirements: params.requirements,
555
+ });
556
+ }
557
+ }
558
+ // Default export for convenience
559
+ export default MoltenClient;
560
+ //# sourceMappingURL=molten.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"molten.js","sourceRoot":"","sources":["../src/molten.ts"],"names":[],"mappings":"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"}