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.
- package/README.md +401 -0
- package/README.md.bak +401 -0
- package/dist/agent.d.ts +132 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +224 -0
- package/dist/agent.js.map +1 -0
- package/dist/analytics.d.ts +120 -0
- package/dist/analytics.d.ts.map +1 -0
- package/dist/analytics.js +345 -0
- package/dist/analytics.js.map +1 -0
- package/dist/approvals.d.ts +168 -0
- package/dist/approvals.d.ts.map +1 -0
- package/dist/approvals.js +406 -0
- package/dist/approvals.js.map +1 -0
- package/dist/circle-client.d.ts +152 -0
- package/dist/circle-client.d.ts.map +1 -0
- package/dist/circle-client.js +266 -0
- package/dist/circle-client.js.map +1 -0
- package/dist/commission.d.ts +191 -0
- package/dist/commission.d.ts.map +1 -0
- package/dist/commission.js +475 -0
- package/dist/commission.js.map +1 -0
- package/dist/condition-builder.d.ts +98 -0
- package/dist/condition-builder.d.ts.map +1 -0
- package/dist/condition-builder.js +193 -0
- package/dist/condition-builder.js.map +1 -0
- package/dist/contacts.d.ts +179 -0
- package/dist/contacts.d.ts.map +1 -0
- package/dist/contacts.js +445 -0
- package/dist/contacts.js.map +1 -0
- package/dist/easy.d.ts +22 -0
- package/dist/easy.d.ts.map +1 -0
- package/dist/easy.js +40 -0
- package/dist/easy.js.map +1 -0
- package/dist/erc8004/constants.d.ts +152 -0
- package/dist/erc8004/constants.d.ts.map +1 -0
- package/dist/erc8004/constants.js +114 -0
- package/dist/erc8004/constants.js.map +1 -0
- package/dist/erc8004/discovery.d.ts +84 -0
- package/dist/erc8004/discovery.d.ts.map +1 -0
- package/dist/erc8004/discovery.js +217 -0
- package/dist/erc8004/discovery.js.map +1 -0
- package/dist/erc8004/identity.d.ts +91 -0
- package/dist/erc8004/identity.d.ts.map +1 -0
- package/dist/erc8004/identity.js +250 -0
- package/dist/erc8004/identity.js.map +1 -0
- package/dist/erc8004/index.d.ts +147 -0
- package/dist/erc8004/index.d.ts.map +1 -0
- package/dist/erc8004/index.js +225 -0
- package/dist/erc8004/index.js.map +1 -0
- package/dist/erc8004/reputation.d.ts +133 -0
- package/dist/erc8004/reputation.d.ts.map +1 -0
- package/dist/erc8004/reputation.js +277 -0
- package/dist/erc8004/reputation.js.map +1 -0
- package/dist/escrow-templates.d.ts +38 -0
- package/dist/escrow-templates.d.ts.map +1 -0
- package/dist/escrow-templates.js +419 -0
- package/dist/escrow-templates.js.map +1 -0
- package/dist/escrow.d.ts +320 -0
- package/dist/escrow.d.ts.map +1 -0
- package/dist/escrow.js +854 -0
- package/dist/escrow.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/invoices.d.ts +212 -0
- package/dist/invoices.d.ts.map +1 -0
- package/dist/invoices.js +393 -0
- package/dist/invoices.js.map +1 -0
- package/dist/notifications.d.ts +141 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +350 -0
- package/dist/notifications.js.map +1 -0
- package/dist/tips.d.ts +171 -0
- package/dist/tips.d.ts.map +1 -0
- package/dist/tips.js +390 -0
- package/dist/tips.js.map +1 -0
- package/dist/types.d.ts +100 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/x402-client.d.ts +127 -0
- package/dist/x402-client.d.ts.map +1 -0
- package/dist/x402-client.js +350 -0
- package/dist/x402-client.js.map +1 -0
- package/dist/x402-server.d.ts +133 -0
- package/dist/x402-server.d.ts.map +1 -0
- package/dist/x402-server.js +330 -0
- package/dist/x402-server.js.map +1 -0
- package/lib/agent.ts +273 -0
- package/lib/analytics.ts +474 -0
- package/lib/analytics.ts.bak +474 -0
- package/lib/approvals.ts +585 -0
- package/lib/approvals.ts.bak +585 -0
- package/lib/circle-client.ts +376 -0
- package/lib/circle-client.ts.bak +376 -0
- package/lib/commission.ts +680 -0
- package/lib/commission.ts.bak +680 -0
- package/lib/condition-builder.ts +223 -0
- package/lib/condition-builder.ts.bak +223 -0
- package/lib/contacts.ts +615 -0
- package/lib/contacts.ts.bak +615 -0
- package/lib/easy.ts +46 -0
- package/lib/easy.ts.bak +352 -0
- package/lib/erc8004/constants.ts +175 -0
- package/lib/erc8004/discovery.ts +299 -0
- package/lib/erc8004/identity.ts +327 -0
- package/lib/erc8004/index.ts +285 -0
- package/lib/erc8004/reputation.ts +368 -0
- package/lib/escrow-templates.ts +462 -0
- package/lib/escrow.ts +1216 -0
- package/lib/index.ts +13 -0
- package/lib/invoices.ts +588 -0
- package/lib/notifications.ts +484 -0
- package/lib/tips.ts +570 -0
- package/lib/types.ts +108 -0
- package/lib/x402-client.ts +471 -0
- package/lib/x402-server.ts +462 -0
- package/package.json +58 -0
package/dist/contacts.js
ADDED
|
@@ -0,0 +1,445 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Contact & Address Book Management
|
|
4
|
+
*
|
|
5
|
+
* Secure storage for payment contacts with labels, validation, and search.
|
|
6
|
+
*/
|
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.PREMIUM_CONTACT_PRICING = exports.ContactManager = void 0;
|
|
12
|
+
exports.generateX402VerificationUrl = generateX402VerificationUrl;
|
|
13
|
+
exports.verifyContactPremium = verifyContactPremium;
|
|
14
|
+
exports.mockContactVerification = mockContactVerification;
|
|
15
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
16
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
|
17
|
+
const path_1 = __importDefault(require("path"));
|
|
18
|
+
const DATA_DIR = process.env.USDC_DATA_DIR || './data';
|
|
19
|
+
/**
|
|
20
|
+
* Contact Manager
|
|
21
|
+
*/
|
|
22
|
+
class ContactManager {
|
|
23
|
+
constructor(dataDir = DATA_DIR) {
|
|
24
|
+
this.dataPath = path_1.default.join(dataDir, 'contacts.json');
|
|
25
|
+
}
|
|
26
|
+
async loadContacts() {
|
|
27
|
+
try {
|
|
28
|
+
const data = await promises_1.default.readFile(this.dataPath, 'utf-8');
|
|
29
|
+
return JSON.parse(data);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async saveContacts(contacts) {
|
|
36
|
+
await promises_1.default.mkdir(path_1.default.dirname(this.dataPath), { recursive: true });
|
|
37
|
+
await promises_1.default.writeFile(this.dataPath, JSON.stringify(contacts, null, 2));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Add a new contact
|
|
41
|
+
*/
|
|
42
|
+
async add(params) {
|
|
43
|
+
const contacts = await this.loadContacts();
|
|
44
|
+
// Check for duplicate alias
|
|
45
|
+
if (params.alias) {
|
|
46
|
+
const existing = contacts.find(c => c.alias?.toLowerCase() === params.alias.toLowerCase());
|
|
47
|
+
if (existing) {
|
|
48
|
+
throw new Error(`Alias "${params.alias}" already exists`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const contact = {
|
|
52
|
+
id: crypto_1.default.randomUUID(),
|
|
53
|
+
name: params.name,
|
|
54
|
+
alias: params.alias,
|
|
55
|
+
email: params.email,
|
|
56
|
+
phone: params.phone,
|
|
57
|
+
addresses: (params.addresses || []).map(addr => ({
|
|
58
|
+
...addr,
|
|
59
|
+
verified: this.isValidAddress(addr.address),
|
|
60
|
+
addedAt: new Date().toISOString(),
|
|
61
|
+
})),
|
|
62
|
+
tags: params.tags || [],
|
|
63
|
+
totalSent: '0',
|
|
64
|
+
totalReceived: '0',
|
|
65
|
+
transactionCount: 0,
|
|
66
|
+
notes: params.notes,
|
|
67
|
+
createdAt: new Date().toISOString(),
|
|
68
|
+
updatedAt: new Date().toISOString(),
|
|
69
|
+
};
|
|
70
|
+
// Set default address if provided
|
|
71
|
+
if (contact.addresses.length > 0) {
|
|
72
|
+
contact.defaultChain = contact.addresses[0].chain;
|
|
73
|
+
contact.defaultAddress = contact.addresses[0].address;
|
|
74
|
+
}
|
|
75
|
+
contacts.push(contact);
|
|
76
|
+
await this.saveContacts(contacts);
|
|
77
|
+
return contact;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Find contact by name, alias, or address
|
|
81
|
+
*/
|
|
82
|
+
async find(query) {
|
|
83
|
+
const contacts = await this.loadContacts();
|
|
84
|
+
const lowerQuery = query.toLowerCase();
|
|
85
|
+
return contacts.find(c => c.name.toLowerCase() === lowerQuery ||
|
|
86
|
+
c.alias?.toLowerCase() === lowerQuery ||
|
|
87
|
+
c.addresses.some(a => a.address.toLowerCase() === lowerQuery)) || null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Resolve a recipient (name, alias, or address) to an address
|
|
91
|
+
*/
|
|
92
|
+
async resolveRecipient(recipient, chain) {
|
|
93
|
+
// If it's already a valid address, return it
|
|
94
|
+
if (this.isValidAddress(recipient)) {
|
|
95
|
+
const contact = await this.findByAddress(recipient);
|
|
96
|
+
return {
|
|
97
|
+
contact: contact || undefined,
|
|
98
|
+
address: recipient,
|
|
99
|
+
chain: chain || 'ETH-SEPOLIA',
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Look up contact
|
|
103
|
+
const contact = await this.find(recipient);
|
|
104
|
+
if (!contact) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
// Find address for requested chain or default
|
|
108
|
+
const targetChain = chain || contact.defaultChain || 'ETH-SEPOLIA';
|
|
109
|
+
const addr = contact.addresses.find(a => a.chain === targetChain) ||
|
|
110
|
+
contact.addresses[0];
|
|
111
|
+
if (!addr) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
contact,
|
|
116
|
+
address: addr.address,
|
|
117
|
+
chain: addr.chain,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Search contacts
|
|
122
|
+
*/
|
|
123
|
+
async search(query) {
|
|
124
|
+
const contacts = await this.loadContacts();
|
|
125
|
+
const lowerQuery = query.toLowerCase();
|
|
126
|
+
return contacts.filter(c => c.name.toLowerCase().includes(lowerQuery) ||
|
|
127
|
+
c.alias?.toLowerCase().includes(lowerQuery) ||
|
|
128
|
+
c.email?.toLowerCase().includes(lowerQuery) ||
|
|
129
|
+
c.tags.some(t => t.toLowerCase().includes(lowerQuery)) ||
|
|
130
|
+
c.notes?.toLowerCase().includes(lowerQuery));
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* List all contacts
|
|
134
|
+
*/
|
|
135
|
+
async list(options) {
|
|
136
|
+
let contacts = await this.loadContacts();
|
|
137
|
+
if (options?.tag) {
|
|
138
|
+
contacts = contacts.filter(c => c.tags.some(t => t.toLowerCase() === options.tag.toLowerCase()));
|
|
139
|
+
}
|
|
140
|
+
switch (options?.sortBy) {
|
|
141
|
+
case 'recent':
|
|
142
|
+
contacts.sort((a, b) => {
|
|
143
|
+
const dateA = a.lastTransactionAt || a.createdAt;
|
|
144
|
+
const dateB = b.lastTransactionAt || b.createdAt;
|
|
145
|
+
return new Date(dateB).getTime() - new Date(dateA).getTime();
|
|
146
|
+
});
|
|
147
|
+
break;
|
|
148
|
+
case 'frequent':
|
|
149
|
+
contacts.sort((a, b) => b.transactionCount - a.transactionCount);
|
|
150
|
+
break;
|
|
151
|
+
case 'name':
|
|
152
|
+
default:
|
|
153
|
+
contacts.sort((a, b) => a.name.localeCompare(b.name));
|
|
154
|
+
}
|
|
155
|
+
return contacts;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Find contact by address
|
|
159
|
+
*/
|
|
160
|
+
async findByAddress(address) {
|
|
161
|
+
const contacts = await this.loadContacts();
|
|
162
|
+
return contacts.find(c => c.addresses.some(a => a.address.toLowerCase() === address.toLowerCase())) || null;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Update contact
|
|
166
|
+
*/
|
|
167
|
+
async update(id, updates) {
|
|
168
|
+
const contacts = await this.loadContacts();
|
|
169
|
+
const contact = contacts.find(c => c.id === id);
|
|
170
|
+
if (contact) {
|
|
171
|
+
Object.assign(contact, updates, { updatedAt: new Date().toISOString() });
|
|
172
|
+
await this.saveContacts(contacts);
|
|
173
|
+
}
|
|
174
|
+
return contact || null;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Add address to contact
|
|
178
|
+
*/
|
|
179
|
+
async addAddress(contactId, address) {
|
|
180
|
+
const contacts = await this.loadContacts();
|
|
181
|
+
const contact = contacts.find(c => c.id === contactId);
|
|
182
|
+
if (contact) {
|
|
183
|
+
// Check if address already exists
|
|
184
|
+
if (contact.addresses.some(a => a.chain === address.chain &&
|
|
185
|
+
a.address.toLowerCase() === address.address.toLowerCase())) {
|
|
186
|
+
throw new Error('Address already exists for this chain');
|
|
187
|
+
}
|
|
188
|
+
contact.addresses.push({
|
|
189
|
+
...address,
|
|
190
|
+
verified: this.isValidAddress(address.address),
|
|
191
|
+
addedAt: new Date().toISOString(),
|
|
192
|
+
});
|
|
193
|
+
contact.updatedAt = new Date().toISOString();
|
|
194
|
+
await this.saveContacts(contacts);
|
|
195
|
+
}
|
|
196
|
+
return contact || null;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Remove address from contact
|
|
200
|
+
*/
|
|
201
|
+
async removeAddress(contactId, chain) {
|
|
202
|
+
const contacts = await this.loadContacts();
|
|
203
|
+
const contact = contacts.find(c => c.id === contactId);
|
|
204
|
+
if (contact) {
|
|
205
|
+
contact.addresses = contact.addresses.filter(a => a.chain !== chain);
|
|
206
|
+
contact.updatedAt = new Date().toISOString();
|
|
207
|
+
// Update default if removed
|
|
208
|
+
if (contact.defaultChain === chain && contact.addresses.length > 0) {
|
|
209
|
+
contact.defaultChain = contact.addresses[0].chain;
|
|
210
|
+
contact.defaultAddress = contact.addresses[0].address;
|
|
211
|
+
}
|
|
212
|
+
await this.saveContacts(contacts);
|
|
213
|
+
}
|
|
214
|
+
return contact || null;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Set default address for contact
|
|
218
|
+
*/
|
|
219
|
+
async setDefault(contactId, chain) {
|
|
220
|
+
const contacts = await this.loadContacts();
|
|
221
|
+
const contact = contacts.find(c => c.id === contactId);
|
|
222
|
+
if (contact) {
|
|
223
|
+
const addr = contact.addresses.find(a => a.chain === chain);
|
|
224
|
+
if (addr) {
|
|
225
|
+
contact.defaultChain = addr.chain;
|
|
226
|
+
contact.defaultAddress = addr.address;
|
|
227
|
+
contact.updatedAt = new Date().toISOString();
|
|
228
|
+
await this.saveContacts(contacts);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return contact || null;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Add tags to contact
|
|
235
|
+
*/
|
|
236
|
+
async addTags(contactId, tags) {
|
|
237
|
+
const contacts = await this.loadContacts();
|
|
238
|
+
const contact = contacts.find(c => c.id === contactId);
|
|
239
|
+
if (contact) {
|
|
240
|
+
const newTags = tags.filter(t => !contact.tags.includes(t));
|
|
241
|
+
contact.tags.push(...newTags);
|
|
242
|
+
contact.updatedAt = new Date().toISOString();
|
|
243
|
+
await this.saveContacts(contacts);
|
|
244
|
+
}
|
|
245
|
+
return contact || null;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Record a transaction with contact
|
|
249
|
+
*/
|
|
250
|
+
async recordTransaction(address, type, amount) {
|
|
251
|
+
const contacts = await this.loadContacts();
|
|
252
|
+
const contact = contacts.find(c => c.addresses.some(a => a.address.toLowerCase() === address.toLowerCase()));
|
|
253
|
+
if (contact) {
|
|
254
|
+
const amountNum = parseFloat(amount);
|
|
255
|
+
if (type === 'sent') {
|
|
256
|
+
contact.totalSent = (parseFloat(contact.totalSent) + amountNum).toString();
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
contact.totalReceived = (parseFloat(contact.totalReceived) + amountNum).toString();
|
|
260
|
+
}
|
|
261
|
+
contact.transactionCount++;
|
|
262
|
+
contact.lastTransactionAt = new Date().toISOString();
|
|
263
|
+
contact.updatedAt = new Date().toISOString();
|
|
264
|
+
await this.saveContacts(contacts);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Delete contact
|
|
269
|
+
*/
|
|
270
|
+
async delete(id) {
|
|
271
|
+
const contacts = await this.loadContacts();
|
|
272
|
+
const index = contacts.findIndex(c => c.id === id);
|
|
273
|
+
if (index >= 0) {
|
|
274
|
+
contacts.splice(index, 1);
|
|
275
|
+
await this.saveContacts(contacts);
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Export contacts to CSV
|
|
282
|
+
*/
|
|
283
|
+
async exportCSV() {
|
|
284
|
+
const contacts = await this.loadContacts();
|
|
285
|
+
const header = 'Name,Alias,Email,Chain,Address,Tags,Total Sent,Total Received\n';
|
|
286
|
+
const rows = contacts.flatMap(c => c.addresses.map(a => `"${c.name}","${c.alias || ''}","${c.email || ''}","${a.chain}","${a.address}","${c.tags.join(';')}","${c.totalSent}","${c.totalReceived}"`));
|
|
287
|
+
return header + rows.join('\n');
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Import contacts from CSV
|
|
291
|
+
*/
|
|
292
|
+
async importCSV(csvContent) {
|
|
293
|
+
const lines = csvContent.split('\n').slice(1); // Skip header
|
|
294
|
+
let imported = 0;
|
|
295
|
+
let skipped = 0;
|
|
296
|
+
for (const line of lines) {
|
|
297
|
+
if (!line.trim())
|
|
298
|
+
continue;
|
|
299
|
+
try {
|
|
300
|
+
// Simple CSV parsing (doesn't handle all edge cases)
|
|
301
|
+
const parts = line.match(/(?:"[^"]*"|[^,])+/g) || [];
|
|
302
|
+
const [name, alias, email, chain, address, tags] = parts.map(p => p.replace(/^"|"$/g, ''));
|
|
303
|
+
if (!name || !address) {
|
|
304
|
+
skipped++;
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
// Check if contact exists
|
|
308
|
+
let contact = await this.find(name);
|
|
309
|
+
if (contact) {
|
|
310
|
+
// Add address to existing contact
|
|
311
|
+
await this.addAddress(contact.id, { chain: chain || 'ETH-SEPOLIA', address });
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
// Create new contact
|
|
315
|
+
await this.add({
|
|
316
|
+
name,
|
|
317
|
+
alias: alias || undefined,
|
|
318
|
+
email: email || undefined,
|
|
319
|
+
addresses: [{ chain: chain || 'ETH-SEPOLIA', address }],
|
|
320
|
+
tags: tags ? tags.split(';') : [],
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
imported++;
|
|
324
|
+
}
|
|
325
|
+
catch (err) {
|
|
326
|
+
skipped++;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return { imported, skipped };
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Validate Ethereum address
|
|
333
|
+
*/
|
|
334
|
+
isValidAddress(address) {
|
|
335
|
+
return /^0x[a-fA-F0-9]{40}$/.test(address);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
exports.ContactManager = ContactManager;
|
|
339
|
+
// Premium verification pricing (in USDC)
|
|
340
|
+
exports.PREMIUM_CONTACT_PRICING = {
|
|
341
|
+
basicVerification: '0.05', // Basic on-chain verification
|
|
342
|
+
fullVerification: '0.10', // Full verification + risk score
|
|
343
|
+
fraudCheck: '0.15', // Fraud detection analysis
|
|
344
|
+
fullReport: '0.25', // Complete verification report
|
|
345
|
+
};
|
|
346
|
+
/**
|
|
347
|
+
* Generate x402 verification URL for contact
|
|
348
|
+
*/
|
|
349
|
+
function generateX402VerificationUrl(contactId, verificationType = 'basic', baseUrl) {
|
|
350
|
+
const base = baseUrl || process.env.X402_BASE_URL || 'https://api.lobster-pay.com';
|
|
351
|
+
return `${base}/contacts/${contactId}/verify/${verificationType}`;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Verify contact with premium features via x402
|
|
355
|
+
*/
|
|
356
|
+
async function verifyContactPremium(contact, features, x402Fetch) {
|
|
357
|
+
const result = {
|
|
358
|
+
contact,
|
|
359
|
+
onChainVerified: false,
|
|
360
|
+
verified: false,
|
|
361
|
+
verifiedAt: new Date().toISOString(),
|
|
362
|
+
};
|
|
363
|
+
try {
|
|
364
|
+
// Determine verification type based on features
|
|
365
|
+
let verificationType = 'basic';
|
|
366
|
+
if (features.fraudDetection) {
|
|
367
|
+
verificationType = 'fraud';
|
|
368
|
+
}
|
|
369
|
+
else if (features.onChainVerification && features.riskAssessment && features.transactionHistory) {
|
|
370
|
+
verificationType = 'report';
|
|
371
|
+
}
|
|
372
|
+
else if (features.riskAssessment) {
|
|
373
|
+
verificationType = 'full';
|
|
374
|
+
}
|
|
375
|
+
// Call x402-protected verification endpoint
|
|
376
|
+
const url = generateX402VerificationUrl(contact.id, verificationType);
|
|
377
|
+
const response = await x402Fetch(url);
|
|
378
|
+
if (!response.ok) {
|
|
379
|
+
throw new Error(`Verification failed: ${response.statusText}`);
|
|
380
|
+
}
|
|
381
|
+
const data = await response.json();
|
|
382
|
+
// Parse verification results
|
|
383
|
+
result.onChainVerified = data.onChainVerified || false;
|
|
384
|
+
result.riskScore = data.riskScore;
|
|
385
|
+
result.fraudFlags = data.fraudFlags;
|
|
386
|
+
result.transactionSummary = data.transactionSummary;
|
|
387
|
+
result.verified = true;
|
|
388
|
+
}
|
|
389
|
+
catch (error) {
|
|
390
|
+
console.error('Contact verification error:', error);
|
|
391
|
+
result.verified = false;
|
|
392
|
+
}
|
|
393
|
+
return result;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Mock verification for testing
|
|
397
|
+
* Simulates what a real x402-protected endpoint would return
|
|
398
|
+
*/
|
|
399
|
+
function mockContactVerification(contact) {
|
|
400
|
+
// Generate mock on-chain data
|
|
401
|
+
const addressCount = contact.addresses.length;
|
|
402
|
+
const hasMultipleChains = addressCount > 1;
|
|
403
|
+
// Calculate mock risk score
|
|
404
|
+
let riskScore = 20; // Base low risk
|
|
405
|
+
if (addressCount === 0)
|
|
406
|
+
riskScore += 40; // No addresses = higher risk
|
|
407
|
+
if (!contact.email && !contact.phone)
|
|
408
|
+
riskScore += 20; // No contact info
|
|
409
|
+
if (contact.transactionCount === 0)
|
|
410
|
+
riskScore += 30; // No transaction history
|
|
411
|
+
riskScore = Math.min(100, riskScore);
|
|
412
|
+
const riskLevel = riskScore < 25 ? 'low' :
|
|
413
|
+
riskScore < 50 ? 'medium' :
|
|
414
|
+
riskScore < 75 ? 'high' : 'critical';
|
|
415
|
+
const factors = [];
|
|
416
|
+
if (addressCount === 0)
|
|
417
|
+
factors.push('No wallet addresses on file');
|
|
418
|
+
if (contact.transactionCount === 0)
|
|
419
|
+
factors.push('No transaction history');
|
|
420
|
+
if (!contact.email && !contact.phone)
|
|
421
|
+
factors.push('No contact information');
|
|
422
|
+
if (hasMultipleChains)
|
|
423
|
+
factors.push('Active on multiple chains (positive)');
|
|
424
|
+
return {
|
|
425
|
+
contact,
|
|
426
|
+
onChainVerified: addressCount > 0,
|
|
427
|
+
riskScore: {
|
|
428
|
+
score: riskScore,
|
|
429
|
+
level: riskLevel,
|
|
430
|
+
factors,
|
|
431
|
+
},
|
|
432
|
+
fraudFlags: riskScore > 70 ? ['High risk score', 'Limited verification data'] : [],
|
|
433
|
+
transactionSummary: {
|
|
434
|
+
totalVolume: contact.totalSent || '0',
|
|
435
|
+
transactionCount: contact.transactionCount,
|
|
436
|
+
firstSeen: contact.createdAt,
|
|
437
|
+
lastSeen: contact.lastTransactionAt || contact.createdAt,
|
|
438
|
+
interactedWith: Math.floor(Math.random() * 50) + 5,
|
|
439
|
+
},
|
|
440
|
+
verified: true,
|
|
441
|
+
verifiedAt: new Date().toISOString(),
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
exports.default = ContactManager;
|
|
445
|
+
//# sourceMappingURL=contacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../lib/contacts.ts"],"names":[],"mappings":"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"}
|
package/dist/easy.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Easy Mode API - Simplified interface for Pay Lobster
|
|
3
|
+
*/
|
|
4
|
+
import { LobsterAgent } from './agent';
|
|
5
|
+
import type { LobsterConfig } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* Create a new Lobster agent with minimal configuration
|
|
8
|
+
*/
|
|
9
|
+
export declare function createLobsterAgent(config?: LobsterConfig): LobsterAgent;
|
|
10
|
+
/**
|
|
11
|
+
* Quick start - create and initialize an agent in one call
|
|
12
|
+
*/
|
|
13
|
+
export declare function quickStart(config?: LobsterConfig): Promise<LobsterAgent>;
|
|
14
|
+
/**
|
|
15
|
+
* One-liner to send USDC
|
|
16
|
+
*/
|
|
17
|
+
export declare function sendUSDC(to: string, amount: number, config?: LobsterConfig): Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* One-liner to check balance
|
|
20
|
+
*/
|
|
21
|
+
export declare function checkBalance(address: string, config?: LobsterConfig): Promise<string>;
|
|
22
|
+
//# sourceMappingURL=easy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"easy.d.ts","sourceRoot":"","sources":["../lib/easy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,aAAkB,GAAG,YAAY,CAE3E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAIlF;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,aAAkB,GACzB,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,aAAkB,GACzB,OAAO,CAAC,MAAM,CAAC,CAGjB"}
|
package/dist/easy.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Easy Mode API - Simplified interface for Pay Lobster
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createLobsterAgent = createLobsterAgent;
|
|
7
|
+
exports.quickStart = quickStart;
|
|
8
|
+
exports.sendUSDC = sendUSDC;
|
|
9
|
+
exports.checkBalance = checkBalance;
|
|
10
|
+
const agent_1 = require("./agent");
|
|
11
|
+
/**
|
|
12
|
+
* Create a new Lobster agent with minimal configuration
|
|
13
|
+
*/
|
|
14
|
+
function createLobsterAgent(config = {}) {
|
|
15
|
+
return new agent_1.LobsterAgent(config);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Quick start - create and initialize an agent in one call
|
|
19
|
+
*/
|
|
20
|
+
async function quickStart(config = {}) {
|
|
21
|
+
const agent = createLobsterAgent(config);
|
|
22
|
+
await agent.initialize();
|
|
23
|
+
return agent;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* One-liner to send USDC
|
|
27
|
+
*/
|
|
28
|
+
async function sendUSDC(to, amount, config = {}) {
|
|
29
|
+
const agent = await quickStart(config);
|
|
30
|
+
const tx = await agent.send(to, amount);
|
|
31
|
+
return tx.id;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* One-liner to check balance
|
|
35
|
+
*/
|
|
36
|
+
async function checkBalance(address, config = {}) {
|
|
37
|
+
const agent = createLobsterAgent({ ...config, walletId: address });
|
|
38
|
+
return agent.getBalance();
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=easy.js.map
|
package/dist/easy.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"easy.js","sourceRoot":"","sources":["../lib/easy.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAQH,gDAEC;AAKD,gCAIC;AAKD,4BAQC;AAKD,oCAMC;AAzCD,mCAAuC;AAGvC;;GAEG;AACH,SAAgB,kBAAkB,CAAC,SAAwB,EAAE;IAC3D,OAAO,IAAI,oBAAY,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAAC,SAAwB,EAAE;IACzD,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;IACzB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,QAAQ,CAC5B,EAAU,EACV,MAAc,EACd,SAAwB,EAAE;IAE1B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,EAAE,CAAC;AACf,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,SAAwB,EAAE;IAE1B,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC,UAAU,EAAE,CAAC;AAC5B,CAAC"}
|