pay-lobster 1.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.
Files changed (120) hide show
  1. package/README.md +401 -0
  2. package/README.md.bak +401 -0
  3. package/dist/agent.d.ts +132 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +224 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/analytics.d.ts +120 -0
  8. package/dist/analytics.d.ts.map +1 -0
  9. package/dist/analytics.js +345 -0
  10. package/dist/analytics.js.map +1 -0
  11. package/dist/approvals.d.ts +168 -0
  12. package/dist/approvals.d.ts.map +1 -0
  13. package/dist/approvals.js +406 -0
  14. package/dist/approvals.js.map +1 -0
  15. package/dist/circle-client.d.ts +152 -0
  16. package/dist/circle-client.d.ts.map +1 -0
  17. package/dist/circle-client.js +266 -0
  18. package/dist/circle-client.js.map +1 -0
  19. package/dist/commission.d.ts +191 -0
  20. package/dist/commission.d.ts.map +1 -0
  21. package/dist/commission.js +475 -0
  22. package/dist/commission.js.map +1 -0
  23. package/dist/condition-builder.d.ts +98 -0
  24. package/dist/condition-builder.d.ts.map +1 -0
  25. package/dist/condition-builder.js +193 -0
  26. package/dist/condition-builder.js.map +1 -0
  27. package/dist/contacts.d.ts +179 -0
  28. package/dist/contacts.d.ts.map +1 -0
  29. package/dist/contacts.js +445 -0
  30. package/dist/contacts.js.map +1 -0
  31. package/dist/easy.d.ts +22 -0
  32. package/dist/easy.d.ts.map +1 -0
  33. package/dist/easy.js +40 -0
  34. package/dist/easy.js.map +1 -0
  35. package/dist/erc8004/constants.d.ts +152 -0
  36. package/dist/erc8004/constants.d.ts.map +1 -0
  37. package/dist/erc8004/constants.js +114 -0
  38. package/dist/erc8004/constants.js.map +1 -0
  39. package/dist/erc8004/discovery.d.ts +84 -0
  40. package/dist/erc8004/discovery.d.ts.map +1 -0
  41. package/dist/erc8004/discovery.js +217 -0
  42. package/dist/erc8004/discovery.js.map +1 -0
  43. package/dist/erc8004/identity.d.ts +91 -0
  44. package/dist/erc8004/identity.d.ts.map +1 -0
  45. package/dist/erc8004/identity.js +250 -0
  46. package/dist/erc8004/identity.js.map +1 -0
  47. package/dist/erc8004/index.d.ts +147 -0
  48. package/dist/erc8004/index.d.ts.map +1 -0
  49. package/dist/erc8004/index.js +225 -0
  50. package/dist/erc8004/index.js.map +1 -0
  51. package/dist/erc8004/reputation.d.ts +133 -0
  52. package/dist/erc8004/reputation.d.ts.map +1 -0
  53. package/dist/erc8004/reputation.js +277 -0
  54. package/dist/erc8004/reputation.js.map +1 -0
  55. package/dist/escrow-templates.d.ts +38 -0
  56. package/dist/escrow-templates.d.ts.map +1 -0
  57. package/dist/escrow-templates.js +419 -0
  58. package/dist/escrow-templates.js.map +1 -0
  59. package/dist/escrow.d.ts +320 -0
  60. package/dist/escrow.d.ts.map +1 -0
  61. package/dist/escrow.js +854 -0
  62. package/dist/escrow.js.map +1 -0
  63. package/dist/index.d.ts +11 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +33 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/invoices.d.ts +212 -0
  68. package/dist/invoices.d.ts.map +1 -0
  69. package/dist/invoices.js +393 -0
  70. package/dist/invoices.js.map +1 -0
  71. package/dist/notifications.d.ts +141 -0
  72. package/dist/notifications.d.ts.map +1 -0
  73. package/dist/notifications.js +350 -0
  74. package/dist/notifications.js.map +1 -0
  75. package/dist/tips.d.ts +171 -0
  76. package/dist/tips.d.ts.map +1 -0
  77. package/dist/tips.js +390 -0
  78. package/dist/tips.js.map +1 -0
  79. package/dist/types.d.ts +100 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +6 -0
  82. package/dist/types.js.map +1 -0
  83. package/dist/x402-client.d.ts +127 -0
  84. package/dist/x402-client.d.ts.map +1 -0
  85. package/dist/x402-client.js +350 -0
  86. package/dist/x402-client.js.map +1 -0
  87. package/dist/x402-server.d.ts +133 -0
  88. package/dist/x402-server.d.ts.map +1 -0
  89. package/dist/x402-server.js +330 -0
  90. package/dist/x402-server.js.map +1 -0
  91. package/lib/agent.ts +273 -0
  92. package/lib/analytics.ts +474 -0
  93. package/lib/analytics.ts.bak +474 -0
  94. package/lib/approvals.ts +585 -0
  95. package/lib/approvals.ts.bak +585 -0
  96. package/lib/circle-client.ts +376 -0
  97. package/lib/circle-client.ts.bak +376 -0
  98. package/lib/commission.ts +680 -0
  99. package/lib/commission.ts.bak +680 -0
  100. package/lib/condition-builder.ts +223 -0
  101. package/lib/condition-builder.ts.bak +223 -0
  102. package/lib/contacts.ts +615 -0
  103. package/lib/contacts.ts.bak +615 -0
  104. package/lib/easy.ts +46 -0
  105. package/lib/easy.ts.bak +352 -0
  106. package/lib/erc8004/constants.ts +175 -0
  107. package/lib/erc8004/discovery.ts +299 -0
  108. package/lib/erc8004/identity.ts +327 -0
  109. package/lib/erc8004/index.ts +285 -0
  110. package/lib/erc8004/reputation.ts +368 -0
  111. package/lib/escrow-templates.ts +462 -0
  112. package/lib/escrow.ts +1216 -0
  113. package/lib/index.ts +13 -0
  114. package/lib/invoices.ts +588 -0
  115. package/lib/notifications.ts +484 -0
  116. package/lib/tips.ts +570 -0
  117. package/lib/types.ts +108 -0
  118. package/lib/x402-client.ts +471 -0
  119. package/lib/x402-server.ts +462 -0
  120. package/package.json +58 -0
package/dist/tips.js ADDED
@@ -0,0 +1,390 @@
1
+ "use strict";
2
+ /**
3
+ * Tip Jar / Creator Economy Module
4
+ *
5
+ * Enable Clawdbot operators and agents to receive USDC tips
6
+ * via simple commands. Built for the creator economy.
7
+ */
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.TipJarManager = void 0;
13
+ const crypto_1 = __importDefault(require("crypto"));
14
+ const promises_1 = __importDefault(require("fs/promises"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const DATA_DIR = process.env.USDC_DATA_DIR || './data';
17
+ /**
18
+ * Tip Jar Manager
19
+ */
20
+ class TipJarManager {
21
+ constructor(dataDir = DATA_DIR) {
22
+ this.jarsPath = path_1.default.join(dataDir, 'tip-jars.json');
23
+ this.tipsPath = path_1.default.join(dataDir, 'tips.json');
24
+ }
25
+ async loadJars() {
26
+ try {
27
+ const data = await promises_1.default.readFile(this.jarsPath, 'utf-8');
28
+ return JSON.parse(data);
29
+ }
30
+ catch {
31
+ return [];
32
+ }
33
+ }
34
+ async saveJars(jars) {
35
+ await promises_1.default.mkdir(path_1.default.dirname(this.jarsPath), { recursive: true });
36
+ await promises_1.default.writeFile(this.jarsPath, JSON.stringify(jars, null, 2));
37
+ }
38
+ async loadTips() {
39
+ try {
40
+ const data = await promises_1.default.readFile(this.tipsPath, 'utf-8');
41
+ return JSON.parse(data);
42
+ }
43
+ catch {
44
+ return [];
45
+ }
46
+ }
47
+ async saveTips(tips) {
48
+ await promises_1.default.mkdir(path_1.default.dirname(this.tipsPath), { recursive: true });
49
+ await promises_1.default.writeFile(this.tipsPath, JSON.stringify(tips, null, 2));
50
+ }
51
+ // ============ Tip Jar Management ============
52
+ /**
53
+ * Create a new tip jar
54
+ */
55
+ async createJar(params) {
56
+ const jars = await this.loadJars();
57
+ // Check for duplicate slug
58
+ if (params.publicSlug) {
59
+ const existing = jars.find(j => j.publicSlug === params.publicSlug);
60
+ if (existing) {
61
+ throw new Error(`Slug "${params.publicSlug}" is already taken`);
62
+ }
63
+ }
64
+ const jar = {
65
+ id: crypto_1.default.randomUUID(),
66
+ name: params.name || `${params.ownerName}'s Tip Jar`,
67
+ description: params.description,
68
+ ownerId: params.ownerId,
69
+ ownerName: params.ownerName,
70
+ addresses: params.addresses.map((a, i) => ({
71
+ ...a,
72
+ isDefault: i === 0,
73
+ })),
74
+ settings: {
75
+ minTip: params.settings?.minTip || '1',
76
+ suggestedAmounts: params.settings?.suggestedAmounts || ['5', '10', '25', '50'],
77
+ thankYouMessage: params.settings?.thankYouMessage || 'Thanks for the tip! 🙏',
78
+ allowAnonymous: params.settings?.allowAnonymous ?? true,
79
+ notifyOnTip: params.settings?.notifyOnTip ?? true,
80
+ },
81
+ stats: {
82
+ totalReceived: '0',
83
+ tipCount: 0,
84
+ uniqueTippers: 0,
85
+ largestTip: '0',
86
+ },
87
+ publicSlug: params.publicSlug,
88
+ createdAt: new Date().toISOString(),
89
+ updatedAt: new Date().toISOString(),
90
+ };
91
+ jars.push(jar);
92
+ await this.saveJars(jars);
93
+ return jar;
94
+ }
95
+ /**
96
+ * Get tip jar by ID, slug, or owner
97
+ */
98
+ async getJar(identifier) {
99
+ const jars = await this.loadJars();
100
+ return jars.find(j => j.id === identifier ||
101
+ j.publicSlug === identifier ||
102
+ j.ownerId === identifier) || null;
103
+ }
104
+ /**
105
+ * Update tip jar settings
106
+ */
107
+ async updateJar(id, updates) {
108
+ const jars = await this.loadJars();
109
+ const jar = jars.find(j => j.id === id);
110
+ if (jar) {
111
+ if (updates.name)
112
+ jar.name = updates.name;
113
+ if (updates.description !== undefined)
114
+ jar.description = updates.description;
115
+ if (updates.publicSlug !== undefined) {
116
+ // Check for duplicate
117
+ if (updates.publicSlug && jars.some(j => j.id !== id && j.publicSlug === updates.publicSlug)) {
118
+ throw new Error(`Slug "${updates.publicSlug}" is already taken`);
119
+ }
120
+ jar.publicSlug = updates.publicSlug;
121
+ }
122
+ if (updates.settings) {
123
+ jar.settings = { ...jar.settings, ...updates.settings };
124
+ }
125
+ jar.updatedAt = new Date().toISOString();
126
+ await this.saveJars(jars);
127
+ }
128
+ return jar || null;
129
+ }
130
+ /**
131
+ * Add address to tip jar
132
+ */
133
+ async addAddress(jarId, chain, address) {
134
+ const jars = await this.loadJars();
135
+ const jar = jars.find(j => j.id === jarId);
136
+ if (jar) {
137
+ if (jar.addresses.some(a => a.chain === chain)) {
138
+ throw new Error(`Address for ${chain} already exists`);
139
+ }
140
+ jar.addresses.push({ chain, address, isDefault: false });
141
+ jar.updatedAt = new Date().toISOString();
142
+ await this.saveJars(jars);
143
+ }
144
+ return jar || null;
145
+ }
146
+ /**
147
+ * Set default address
148
+ */
149
+ async setDefaultAddress(jarId, chain) {
150
+ const jars = await this.loadJars();
151
+ const jar = jars.find(j => j.id === jarId);
152
+ if (jar) {
153
+ jar.addresses.forEach(a => {
154
+ a.isDefault = a.chain === chain;
155
+ });
156
+ jar.updatedAt = new Date().toISOString();
157
+ await this.saveJars(jars);
158
+ }
159
+ return jar || null;
160
+ }
161
+ // ============ Tip Processing ============
162
+ /**
163
+ * Record a tip
164
+ */
165
+ async recordTip(params) {
166
+ const jars = await this.loadJars();
167
+ const jar = jars.find(j => j.id === params.tipJarId);
168
+ if (!jar) {
169
+ throw new Error('Tip jar not found');
170
+ }
171
+ const tips = await this.loadTips();
172
+ const tip = {
173
+ id: crypto_1.default.randomUUID(),
174
+ tipJarId: params.tipJarId,
175
+ fromAddress: params.fromAddress,
176
+ fromName: params.fromName,
177
+ isAnonymous: params.isAnonymous ?? false,
178
+ amount: params.amount,
179
+ chain: params.chain,
180
+ txHash: params.txHash,
181
+ message: params.message,
182
+ status: 'confirmed',
183
+ confirmedAt: new Date().toISOString(),
184
+ createdAt: new Date().toISOString(),
185
+ };
186
+ tips.push(tip);
187
+ await this.saveTips(tips);
188
+ // Update jar stats
189
+ const amount = parseFloat(params.amount);
190
+ jar.stats.totalReceived = (parseFloat(jar.stats.totalReceived) + amount).toString();
191
+ jar.stats.tipCount++;
192
+ // Check if new unique tipper
193
+ const previousTips = tips.filter(t => t.tipJarId === jar.id &&
194
+ t.fromAddress.toLowerCase() === params.fromAddress.toLowerCase() &&
195
+ t.id !== tip.id);
196
+ if (previousTips.length === 0) {
197
+ jar.stats.uniqueTippers++;
198
+ }
199
+ // Update largest tip
200
+ if (amount > parseFloat(jar.stats.largestTip)) {
201
+ jar.stats.largestTip = params.amount;
202
+ }
203
+ jar.stats.lastTipAt = new Date().toISOString();
204
+ jar.updatedAt = new Date().toISOString();
205
+ await this.saveJars(jars);
206
+ return tip;
207
+ }
208
+ /**
209
+ * Get tips for a jar
210
+ */
211
+ async getTips(jarId, options) {
212
+ let tips = await this.loadTips();
213
+ tips = tips.filter(t => t.tipJarId === jarId);
214
+ if (options?.includeAnonymous === false) {
215
+ tips = tips.filter(t => !t.isAnonymous);
216
+ }
217
+ tips.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
218
+ if (options?.limit) {
219
+ tips = tips.slice(0, options.limit);
220
+ }
221
+ return tips;
222
+ }
223
+ /**
224
+ * Get recent tips across all jars (for activity feed)
225
+ */
226
+ async getRecentTips(limit = 10) {
227
+ const tips = await this.loadTips();
228
+ const jars = await this.loadJars();
229
+ const jarMap = new Map(jars.map(j => [j.id, j]));
230
+ return tips
231
+ .sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())
232
+ .slice(0, limit)
233
+ .map(tip => ({
234
+ ...tip,
235
+ jarName: jarMap.get(tip.tipJarId)?.name || 'Unknown',
236
+ }));
237
+ }
238
+ // ============ Leaderboards ============
239
+ /**
240
+ * Generate leaderboard for a tip jar
241
+ */
242
+ async getLeaderboard(jarId, period = 'all-time') {
243
+ let tips = await this.loadTips();
244
+ tips = tips.filter(t => t.tipJarId === jarId && !t.isAnonymous);
245
+ // Filter by period
246
+ const now = new Date();
247
+ if (period === 'weekly') {
248
+ const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
249
+ tips = tips.filter(t => new Date(t.createdAt) >= weekAgo);
250
+ }
251
+ else if (period === 'monthly') {
252
+ const monthAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
253
+ tips = tips.filter(t => new Date(t.createdAt) >= monthAgo);
254
+ }
255
+ // Aggregate by tipper
256
+ const tipperMap = new Map();
257
+ for (const tip of tips) {
258
+ const key = tip.fromAddress.toLowerCase();
259
+ const existing = tipperMap.get(key) || {
260
+ name: tip.fromName || this.shortAddress(tip.fromAddress),
261
+ total: 0,
262
+ count: 0
263
+ };
264
+ existing.total += parseFloat(tip.amount);
265
+ existing.count++;
266
+ if (tip.fromName)
267
+ existing.name = tip.fromName;
268
+ tipperMap.set(key, existing);
269
+ }
270
+ // Sort and rank
271
+ const entries = Array.from(tipperMap.entries())
272
+ .map(([address, data]) => ({
273
+ address,
274
+ name: data.name,
275
+ totalTipped: data.total.toFixed(2),
276
+ tipCount: data.count,
277
+ }))
278
+ .sort((a, b) => parseFloat(b.totalTipped) - parseFloat(a.totalTipped))
279
+ .map((entry, i) => ({ rank: i + 1, ...entry }));
280
+ return {
281
+ tipJarId: jarId,
282
+ period,
283
+ entries,
284
+ generatedAt: new Date().toISOString(),
285
+ };
286
+ }
287
+ // ============ Tip Commands (for Clawdbot) ============
288
+ /**
289
+ * Parse tip command and return tip info
290
+ * Supports: "tip @gustav 10", "tip 5 to gustav", etc.
291
+ */
292
+ parseTipCommand(command) {
293
+ // Patterns:
294
+ // "tip @gustav 10"
295
+ // "tip 10 to @gustav"
296
+ // "tip gustav 10 usdc thanks!"
297
+ const patterns = [
298
+ // tip @recipient amount [message]
299
+ /^tip\s+@?(\w+)\s+(\d+(?:\.\d+)?)\s*(?:usdc)?\s*(.*)$/i,
300
+ // tip amount to @recipient [message]
301
+ /^tip\s+(\d+(?:\.\d+)?)\s*(?:usdc)?\s+to\s+@?(\w+)\s*(.*)$/i,
302
+ ];
303
+ for (const pattern of patterns) {
304
+ const match = command.match(pattern);
305
+ if (match) {
306
+ if (pattern === patterns[0]) {
307
+ return {
308
+ recipient: match[1],
309
+ amount: match[2],
310
+ message: match[3]?.trim() || undefined,
311
+ };
312
+ }
313
+ else {
314
+ return {
315
+ recipient: match[2],
316
+ amount: match[1],
317
+ message: match[3]?.trim() || undefined,
318
+ };
319
+ }
320
+ }
321
+ }
322
+ return null;
323
+ }
324
+ /**
325
+ * Generate tip jar card/embed for display
326
+ */
327
+ formatTipJarCard(jar) {
328
+ const defaultAddr = jar.addresses.find(a => a.isDefault) || jar.addresses[0];
329
+ let card = `💰 **${jar.name}**\n`;
330
+ if (jar.description) {
331
+ card += `${jar.description}\n`;
332
+ }
333
+ card += `\n`;
334
+ card += `Owner: ${jar.ownerName}\n`;
335
+ card += `Total Received: **$${parseFloat(jar.stats.totalReceived).toFixed(2)} USDC**\n`;
336
+ card += `Tips: ${jar.stats.tipCount} from ${jar.stats.uniqueTippers} tippers\n`;
337
+ card += `\n`;
338
+ card += `**Quick Tip:**\n`;
339
+ card += jar.settings.suggestedAmounts.map(a => `[$${a}]`).join(' ') + '\n';
340
+ card += `\n`;
341
+ card += `Send to: \`${defaultAddr.address}\`\n`;
342
+ card += `Chain: ${defaultAddr.chain}\n`;
343
+ if (jar.publicSlug) {
344
+ card += `\nLink: tip.clawd.bot/${jar.publicSlug}`;
345
+ }
346
+ return card;
347
+ }
348
+ /**
349
+ * Format tip notification
350
+ */
351
+ formatTipNotification(tip, jar) {
352
+ const senderName = tip.isAnonymous ? 'Anonymous' : (tip.fromName || this.shortAddress(tip.fromAddress));
353
+ let notif = `🎉 **New Tip!**\n\n`;
354
+ notif += `${senderName} tipped **$${tip.amount} USDC**`;
355
+ if (tip.message) {
356
+ notif += `\n\n"${tip.message}"`;
357
+ }
358
+ notif += `\n\n${jar.settings.thankYouMessage}`;
359
+ return notif;
360
+ }
361
+ shortAddress(address) {
362
+ return `${address.slice(0, 6)}...${address.slice(-4)}`;
363
+ }
364
+ // ============ Agent-to-Agent Tips ============
365
+ /**
366
+ * Send tip from one agent to another
367
+ * Returns the transaction to be executed
368
+ */
369
+ async prepareAgentTip(params) {
370
+ // Find recipient's tip jar
371
+ const toJar = await this.getJar(params.toAgentId);
372
+ if (!toJar) {
373
+ return null;
374
+ }
375
+ const defaultAddr = toJar.addresses.find(a => a.isDefault) || toJar.addresses[0];
376
+ if (!defaultAddr) {
377
+ return null;
378
+ }
379
+ return {
380
+ toJar,
381
+ toAddress: defaultAddr.address,
382
+ chain: defaultAddr.chain,
383
+ amount: params.amount,
384
+ message: params.message,
385
+ };
386
+ }
387
+ }
388
+ exports.TipJarManager = TipJarManager;
389
+ exports.default = TipJarManager;
390
+ //# sourceMappingURL=tips.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tips.js","sourceRoot":"","sources":["../lib/tips.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Pay Lobster Type Definitions
3
+ */
4
+ export interface LobsterConfig {
5
+ /** Circle API key for wallet operations */
6
+ circleApiKey?: string;
7
+ /** Ethereum private key for direct transactions */
8
+ privateKey?: string;
9
+ /** Network: 'base' | 'base-sepolia' | 'ethereum' */
10
+ network?: 'base' | 'base-sepolia' | 'ethereum';
11
+ /** Existing Circle wallet ID */
12
+ walletId?: string;
13
+ /** Custom RPC URL */
14
+ rpcUrl?: string;
15
+ /** Enable ERC-8004 trust verification */
16
+ enableTrust?: boolean;
17
+ }
18
+ export interface Wallet {
19
+ id: string;
20
+ address: string;
21
+ network: string;
22
+ balance?: string;
23
+ createdAt?: string;
24
+ }
25
+ export interface Transfer {
26
+ id: string;
27
+ hash?: string;
28
+ status: 'pending' | 'confirmed' | 'failed';
29
+ amount: string;
30
+ to: string;
31
+ from: string;
32
+ memo?: string;
33
+ createdAt: string;
34
+ }
35
+ export interface Escrow {
36
+ id: string;
37
+ amount: string;
38
+ buyer: string;
39
+ seller: string;
40
+ status: 'funded' | 'released' | 'disputed' | 'refunded';
41
+ conditions?: EscrowConditions;
42
+ createdAt: string;
43
+ }
44
+ export interface EscrowConditions {
45
+ type: 'milestone' | 'time' | 'approval';
46
+ description: string;
47
+ deadline?: string;
48
+ }
49
+ export interface TrustScore {
50
+ score: number;
51
+ level: 'new' | 'established' | 'trusted' | 'verified';
52
+ totalTransactions: number;
53
+ successRate: number;
54
+ ratings?: Rating[];
55
+ }
56
+ export interface Rating {
57
+ rating: number;
58
+ comment?: string;
59
+ from: string;
60
+ createdAt: string;
61
+ }
62
+ export interface Agent {
63
+ address: string;
64
+ name: string;
65
+ capabilities: string[];
66
+ pricing?: Record<string, string>;
67
+ trustScore?: TrustScore;
68
+ metadata?: Record<string, any>;
69
+ }
70
+ export interface TransferOptions {
71
+ to: string;
72
+ amount: string;
73
+ memo?: string;
74
+ idempotencyKey?: string;
75
+ }
76
+ export interface EscrowOptions {
77
+ amount: string;
78
+ recipient: string;
79
+ conditions?: EscrowConditions;
80
+ template?: 'freelance' | 'marketplace' | 'rental';
81
+ deadline?: string;
82
+ milestones?: {
83
+ name: string;
84
+ amount: string;
85
+ }[];
86
+ }
87
+ export interface DiscoverOptions {
88
+ capability?: string;
89
+ minTrustScore?: number;
90
+ maxPrice?: string;
91
+ limit?: number;
92
+ }
93
+ export interface AutonomousConfig {
94
+ enabled: boolean;
95
+ dailyLimit: string;
96
+ perTransactionLimit: string;
97
+ autoApproveBelow: string;
98
+ allowedCapabilities: string[];
99
+ }
100
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,UAAU,CAAC;IAC/C,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IACxD,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,GAAG,aAAa,GAAG,SAAS,GAAG,UAAU,CAAC;IACtD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Pay Lobster Type Definitions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * x402 Payment-Enabled HTTP Client
3
+ *
4
+ * Wraps fetch() to automatically handle 402 Payment Required responses.
5
+ * Uses Circle Programmable Wallets to pay and retry with signature.
6
+ */
7
+ import { CircleClient } from './circle-client';
8
+ export interface PaymentChallenge {
9
+ 'x-payment-required': {
10
+ version: '1';
11
+ network: string;
12
+ receiver: string;
13
+ asset: string;
14
+ amount: string;
15
+ description: string;
16
+ expires: number;
17
+ nonce: string;
18
+ };
19
+ }
20
+ export interface PaymentReceipt {
21
+ url: string;
22
+ challenge: PaymentChallenge['x-payment-required'];
23
+ txHash: string;
24
+ signature: string;
25
+ paidAt: string;
26
+ expiresAt: number;
27
+ }
28
+ export interface X402ClientConfig {
29
+ wallet: CircleClient;
30
+ walletId?: string;
31
+ maxAutoPayUSDC?: string;
32
+ requireConfirmation?: boolean;
33
+ cacheReceipts?: boolean;
34
+ cacheDir?: string;
35
+ onPayment?: (amount: string, url: string, txHash: string) => void;
36
+ onChallenge?: (challenge: PaymentChallenge) => void;
37
+ onVerified?: (receipt: PaymentReceipt) => void;
38
+ onError?: (error: Error, url: string) => void;
39
+ }
40
+ /**
41
+ * x402-enabled fetch function
42
+ */
43
+ export type X402Fetch = (url: string | URL | Request, init?: RequestInit) => Promise<Response>;
44
+ /**
45
+ * Create a payment-enabled fetch wrapper
46
+ */
47
+ export declare function createX402Fetch(config: X402ClientConfig): X402Fetch;
48
+ /**
49
+ * X402 HTTP Client
50
+ */
51
+ export declare class X402Client {
52
+ private wallet;
53
+ private walletId?;
54
+ private maxAutoPayUSDC?;
55
+ private requireConfirmation;
56
+ private cacheReceipts;
57
+ private cacheDir;
58
+ private onPayment?;
59
+ private onChallenge?;
60
+ private onVerified?;
61
+ private onError?;
62
+ private receiptCache;
63
+ constructor(config: X402ClientConfig);
64
+ /**
65
+ * Main fetch method - handles 402 automatically
66
+ */
67
+ fetch(url: string | URL | Request, init?: RequestInit): Promise<Response>;
68
+ /**
69
+ * Handle 402 Payment Required response
70
+ */
71
+ private handlePaymentRequired;
72
+ /**
73
+ * Execute USDC payment via Circle
74
+ */
75
+ private executePayment;
76
+ /**
77
+ * Fetch with payment signature header
78
+ */
79
+ private fetchWithPayment;
80
+ /**
81
+ * Parse payment challenge from 402 response
82
+ */
83
+ private parsePaymentChallenge;
84
+ /**
85
+ * Generate payment signature from challenge and tx hash
86
+ */
87
+ private generatePaymentSignature;
88
+ /**
89
+ * Confirm payment with user (if required)
90
+ */
91
+ private confirmPayment;
92
+ /**
93
+ * Get cached receipt for URL
94
+ */
95
+ private getCachedReceipt;
96
+ /**
97
+ * Cache payment receipt
98
+ */
99
+ private cacheReceipt;
100
+ /**
101
+ * Load cached receipts from disk
102
+ */
103
+ private loadReceiptCache;
104
+ /**
105
+ * Get receipt history
106
+ */
107
+ getReceiptHistory(): Promise<PaymentReceipt[]>;
108
+ /**
109
+ * Clear receipt cache
110
+ */
111
+ clearCache(): Promise<void>;
112
+ /**
113
+ * Extract URL string from various input types
114
+ */
115
+ private getUrlString;
116
+ }
117
+ /**
118
+ * Helper: Create simple x402 client with minimal config
119
+ */
120
+ export declare function simpleX402Fetch(wallet: CircleClient, maxAutoPayUSDC?: string): X402Fetch;
121
+ declare const _default: {
122
+ createX402Fetch: typeof createX402Fetch;
123
+ simpleX402Fetch: typeof simpleX402Fetch;
124
+ X402Client: typeof X402Client;
125
+ };
126
+ export default _default;
127
+ //# sourceMappingURL=x402-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402-client.d.ts","sourceRoot":"","sources":["../lib/x402-client.ts"],"names":[],"mappings":"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"}