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
@@ -0,0 +1,393 @@
1
+ "use strict";
2
+ /**
3
+ * Invoice & Payment Request System
4
+ *
5
+ * Generate, track, and manage USDC invoices and payment requests.
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.RecurringPaymentManager = exports.InvoiceManager = void 0;
12
+ const crypto_1 = __importDefault(require("crypto"));
13
+ const promises_1 = __importDefault(require("fs/promises"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const DATA_DIR = process.env.USDC_DATA_DIR || './data';
16
+ /**
17
+ * Invoice Manager
18
+ */
19
+ class InvoiceManager {
20
+ constructor(dataDir = DATA_DIR) {
21
+ this.dataPath = path_1.default.join(dataDir, 'invoices.json');
22
+ }
23
+ async loadInvoices() {
24
+ try {
25
+ const data = await promises_1.default.readFile(this.dataPath, 'utf-8');
26
+ return JSON.parse(data);
27
+ }
28
+ catch {
29
+ return [];
30
+ }
31
+ }
32
+ async saveInvoices(invoices) {
33
+ await promises_1.default.mkdir(path_1.default.dirname(this.dataPath), { recursive: true });
34
+ await promises_1.default.writeFile(this.dataPath, JSON.stringify(invoices, null, 2));
35
+ }
36
+ /**
37
+ * Create a new invoice
38
+ */
39
+ async create(params) {
40
+ const invoices = await this.loadInvoices();
41
+ const invoiceNumber = `INV-${Date.now().toString(36).toUpperCase()}`;
42
+ const items = params.items.map(item => ({
43
+ ...item,
44
+ total: (item.quantity * parseFloat(item.unitPrice)).toFixed(2),
45
+ }));
46
+ const subtotal = items.reduce((sum, item) => sum + parseFloat(item.total), 0);
47
+ const tax = params.taxRate ? subtotal * (params.taxRate / 100) : 0;
48
+ const total = subtotal + tax;
49
+ const invoice = {
50
+ id: crypto_1.default.randomUUID(),
51
+ number: invoiceNumber,
52
+ status: 'draft',
53
+ from: params.from,
54
+ to: params.to,
55
+ items,
56
+ subtotal: subtotal.toFixed(2),
57
+ tax: tax > 0 ? tax.toFixed(2) : undefined,
58
+ taxRate: params.taxRate,
59
+ total: total.toFixed(2),
60
+ currency: 'USDC',
61
+ paymentChain: params.chain || 'ETH-SEPOLIA',
62
+ paymentAddress: params.from.walletAddress,
63
+ memo: params.memo,
64
+ dueDate: params.dueDate,
65
+ createdAt: new Date().toISOString(),
66
+ updatedAt: new Date().toISOString(),
67
+ };
68
+ // Generate payment link
69
+ invoice.paymentLink = this.generatePaymentLink(invoice);
70
+ // Generate x402 payment URL
71
+ invoice.x402PaymentUrl = this.generateX402PaymentUrl(invoice);
72
+ invoices.push(invoice);
73
+ await this.saveInvoices(invoices);
74
+ return invoice;
75
+ }
76
+ /**
77
+ * Get invoice by ID or number
78
+ */
79
+ async get(idOrNumber) {
80
+ const invoices = await this.loadInvoices();
81
+ return invoices.find(inv => inv.id === idOrNumber || inv.number === idOrNumber) || null;
82
+ }
83
+ /**
84
+ * List invoices with optional filters
85
+ */
86
+ async list(filters) {
87
+ let invoices = await this.loadInvoices();
88
+ if (filters?.status) {
89
+ invoices = invoices.filter(inv => inv.status === filters.status);
90
+ }
91
+ if (filters?.toName) {
92
+ invoices = invoices.filter(inv => inv.to.name.toLowerCase().includes(filters.toName.toLowerCase()));
93
+ }
94
+ if (filters?.fromDate) {
95
+ invoices = invoices.filter(inv => inv.createdAt >= filters.fromDate);
96
+ }
97
+ if (filters?.toDate) {
98
+ invoices = invoices.filter(inv => inv.createdAt <= filters.toDate);
99
+ }
100
+ return invoices.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
101
+ }
102
+ /**
103
+ * Mark invoice as sent
104
+ */
105
+ async markSent(id) {
106
+ const invoices = await this.loadInvoices();
107
+ const invoice = invoices.find(inv => inv.id === id);
108
+ if (invoice) {
109
+ invoice.status = 'sent';
110
+ invoice.sentAt = new Date().toISOString();
111
+ invoice.updatedAt = new Date().toISOString();
112
+ await this.saveInvoices(invoices);
113
+ }
114
+ return invoice || null;
115
+ }
116
+ /**
117
+ * Mark invoice as paid
118
+ */
119
+ async markPaid(id, txHash, amount) {
120
+ const invoices = await this.loadInvoices();
121
+ const invoice = invoices.find(inv => inv.id === id);
122
+ if (invoice) {
123
+ invoice.status = 'paid';
124
+ invoice.txHash = txHash;
125
+ invoice.paidAt = new Date().toISOString();
126
+ invoice.paidAmount = amount || invoice.total;
127
+ invoice.updatedAt = new Date().toISOString();
128
+ await this.saveInvoices(invoices);
129
+ }
130
+ return invoice || null;
131
+ }
132
+ /**
133
+ * Cancel invoice
134
+ */
135
+ async cancel(id) {
136
+ const invoices = await this.loadInvoices();
137
+ const invoice = invoices.find(inv => inv.id === id);
138
+ if (invoice && invoice.status !== 'paid') {
139
+ invoice.status = 'cancelled';
140
+ invoice.updatedAt = new Date().toISOString();
141
+ await this.saveInvoices(invoices);
142
+ }
143
+ return invoice || null;
144
+ }
145
+ /**
146
+ * Generate payment link for invoice
147
+ */
148
+ generatePaymentLink(invoice) {
149
+ // EIP-681 style payment request (simplified)
150
+ const params = new URLSearchParams({
151
+ to: invoice.paymentAddress,
152
+ value: invoice.total,
153
+ chain: invoice.paymentChain,
154
+ ref: invoice.number,
155
+ });
156
+ return `usdc://pay?${params.toString()}`;
157
+ }
158
+ /**
159
+ * Generate x402-enabled payment URL for invoice
160
+ * Returns a URL that triggers 402 Payment Required
161
+ */
162
+ generateX402PaymentUrl(invoice) {
163
+ // This would point to your x402-enabled invoice payment endpoint
164
+ const baseUrl = process.env.X402_BASE_URL || 'https://api.lobster-pay.com';
165
+ return `${baseUrl}/invoices/${invoice.id}/pay`;
166
+ }
167
+ /**
168
+ * Add x402 payment method to invoice
169
+ * Creates a payment-gated endpoint for this invoice
170
+ */
171
+ async enableX402Payment(invoiceId, options) {
172
+ const invoice = await this.get(invoiceId);
173
+ if (!invoice) {
174
+ throw new Error('Invoice not found');
175
+ }
176
+ const baseUrl = options?.baseUrl || process.env.X402_BASE_URL || 'https://api.lobster-pay.com';
177
+ const x402Url = `${baseUrl}/invoices/${invoice.id}/pay`;
178
+ invoice.x402PaymentUrl = x402Url;
179
+ invoice.updatedAt = new Date().toISOString();
180
+ const invoices = await this.loadInvoices();
181
+ const index = invoices.findIndex(inv => inv.id === invoiceId);
182
+ if (index !== -1) {
183
+ invoices[index] = invoice;
184
+ await this.saveInvoices(invoices);
185
+ }
186
+ return x402Url;
187
+ }
188
+ /**
189
+ * Format invoice as text for messaging
190
+ */
191
+ formatInvoiceText(invoice) {
192
+ let text = `📄 **Invoice ${invoice.number}**\n\n`;
193
+ text += `To: ${invoice.to.name}\n`;
194
+ text += `Status: ${invoice.status.toUpperCase()}\n\n`;
195
+ text += `**Items:**\n`;
196
+ for (const item of invoice.items) {
197
+ text += `• ${item.description} (x${item.quantity}) — $${item.total}\n`;
198
+ }
199
+ text += `\nSubtotal: $${invoice.subtotal} USDC\n`;
200
+ if (invoice.tax) {
201
+ text += `Tax (${invoice.taxRate}%): $${invoice.tax} USDC\n`;
202
+ }
203
+ text += `**Total: $${invoice.total} USDC**\n\n`;
204
+ if (invoice.dueDate) {
205
+ text += `Due: ${new Date(invoice.dueDate).toLocaleDateString()}\n`;
206
+ }
207
+ text += `\nPay to: \`${invoice.paymentAddress}\`\n`;
208
+ text += `Chain: ${invoice.paymentChain}\n`;
209
+ if (invoice.memo) {
210
+ text += `\nMemo: ${invoice.memo}\n`;
211
+ }
212
+ return text;
213
+ }
214
+ /**
215
+ * Check for overdue invoices
216
+ */
217
+ async checkOverdue() {
218
+ const invoices = await this.loadInvoices();
219
+ const now = new Date();
220
+ const overdue = [];
221
+ for (const invoice of invoices) {
222
+ if (invoice.status === 'sent' &&
223
+ invoice.dueDate &&
224
+ new Date(invoice.dueDate) < now) {
225
+ invoice.status = 'overdue';
226
+ invoice.updatedAt = now.toISOString();
227
+ overdue.push(invoice);
228
+ }
229
+ }
230
+ if (overdue.length > 0) {
231
+ await this.saveInvoices(invoices);
232
+ }
233
+ return overdue;
234
+ }
235
+ }
236
+ exports.InvoiceManager = InvoiceManager;
237
+ /**
238
+ * Recurring Payment Manager
239
+ */
240
+ class RecurringPaymentManager {
241
+ constructor(dataDir = DATA_DIR) {
242
+ this.dataPath = path_1.default.join(dataDir, 'recurring.json');
243
+ }
244
+ async loadPayments() {
245
+ try {
246
+ const data = await promises_1.default.readFile(this.dataPath, 'utf-8');
247
+ return JSON.parse(data);
248
+ }
249
+ catch {
250
+ return [];
251
+ }
252
+ }
253
+ async savePayments(payments) {
254
+ await promises_1.default.mkdir(path_1.default.dirname(this.dataPath), { recursive: true });
255
+ await promises_1.default.writeFile(this.dataPath, JSON.stringify(payments, null, 2));
256
+ }
257
+ /**
258
+ * Schedule a recurring payment
259
+ */
260
+ async schedule(params) {
261
+ const payments = await this.loadPayments();
262
+ const startDate = params.startDate || new Date().toISOString().split('T')[0];
263
+ const nextPaymentDate = this.calculateNextDate(startDate, params.frequency);
264
+ const payment = {
265
+ id: crypto_1.default.randomUUID(),
266
+ name: params.name,
267
+ amount: params.amount,
268
+ toAddress: params.toAddress,
269
+ toName: params.toName,
270
+ chain: params.chain,
271
+ frequency: params.frequency,
272
+ startDate,
273
+ endDate: params.endDate,
274
+ nextPaymentDate,
275
+ status: 'active',
276
+ walletId: params.walletId,
277
+ payments: [],
278
+ createdAt: new Date().toISOString(),
279
+ };
280
+ payments.push(payment);
281
+ await this.savePayments(payments);
282
+ return payment;
283
+ }
284
+ /**
285
+ * Get all due payments
286
+ */
287
+ async getDuePayments() {
288
+ const payments = await this.loadPayments();
289
+ const today = new Date().toISOString().split('T')[0];
290
+ return payments.filter(p => p.status === 'active' &&
291
+ p.nextPaymentDate <= today &&
292
+ (!p.endDate || p.endDate >= today));
293
+ }
294
+ /**
295
+ * Record a payment execution
296
+ */
297
+ async recordExecution(id, txHash) {
298
+ const payments = await this.loadPayments();
299
+ const payment = payments.find(p => p.id === id);
300
+ if (payment) {
301
+ payment.payments.push({
302
+ date: new Date().toISOString(),
303
+ txHash,
304
+ amount: payment.amount,
305
+ });
306
+ // Calculate next payment date
307
+ payment.nextPaymentDate = this.calculateNextDate(payment.nextPaymentDate, payment.frequency);
308
+ // Check if completed
309
+ if (payment.endDate && payment.nextPaymentDate > payment.endDate) {
310
+ payment.status = 'completed';
311
+ }
312
+ await this.savePayments(payments);
313
+ }
314
+ return payment || null;
315
+ }
316
+ /**
317
+ * Pause recurring payment
318
+ */
319
+ async pause(id) {
320
+ const payments = await this.loadPayments();
321
+ const payment = payments.find(p => p.id === id);
322
+ if (payment && payment.status === 'active') {
323
+ payment.status = 'paused';
324
+ await this.savePayments(payments);
325
+ }
326
+ return payment || null;
327
+ }
328
+ /**
329
+ * Resume recurring payment
330
+ */
331
+ async resume(id) {
332
+ const payments = await this.loadPayments();
333
+ const payment = payments.find(p => p.id === id);
334
+ if (payment && payment.status === 'paused') {
335
+ payment.status = 'active';
336
+ // Recalculate next payment from today
337
+ payment.nextPaymentDate = this.calculateNextDate(new Date().toISOString().split('T')[0], payment.frequency);
338
+ await this.savePayments(payments);
339
+ }
340
+ return payment || null;
341
+ }
342
+ /**
343
+ * Cancel recurring payment
344
+ */
345
+ async cancel(id) {
346
+ const payments = await this.loadPayments();
347
+ const payment = payments.find(p => p.id === id);
348
+ if (payment) {
349
+ payment.status = 'cancelled';
350
+ await this.savePayments(payments);
351
+ }
352
+ return payment || null;
353
+ }
354
+ /**
355
+ * List all recurring payments
356
+ */
357
+ async list(status) {
358
+ const payments = await this.loadPayments();
359
+ return status
360
+ ? payments.filter(p => p.status === status)
361
+ : payments;
362
+ }
363
+ /**
364
+ * Calculate next payment date based on frequency
365
+ */
366
+ calculateNextDate(fromDate, frequency) {
367
+ const date = new Date(fromDate);
368
+ switch (frequency) {
369
+ case 'daily':
370
+ date.setDate(date.getDate() + 1);
371
+ break;
372
+ case 'weekly':
373
+ date.setDate(date.getDate() + 7);
374
+ break;
375
+ case 'biweekly':
376
+ date.setDate(date.getDate() + 14);
377
+ break;
378
+ case 'monthly':
379
+ date.setMonth(date.getMonth() + 1);
380
+ break;
381
+ case 'quarterly':
382
+ date.setMonth(date.getMonth() + 3);
383
+ break;
384
+ case 'yearly':
385
+ date.setFullYear(date.getFullYear() + 1);
386
+ break;
387
+ }
388
+ return date.toISOString().split('T')[0];
389
+ }
390
+ }
391
+ exports.RecurringPaymentManager = RecurringPaymentManager;
392
+ exports.default = { InvoiceManager, RecurringPaymentManager };
393
+ //# sourceMappingURL=invoices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.js","sourceRoot":"","sources":["../lib/invoices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Payment Notifications & Webhooks
3
+ *
4
+ * Real-time notifications for USDC transactions and events.
5
+ */
6
+ export interface NotificationConfig {
7
+ id: string;
8
+ name: string;
9
+ enabled: boolean;
10
+ triggers: {
11
+ type: 'incoming' | 'outgoing' | 'recurring' | 'invoice' | 'threshold';
12
+ minAmount?: string;
13
+ addresses?: string[];
14
+ chains?: string[];
15
+ }[];
16
+ channels: {
17
+ type: 'webhook' | 'telegram' | 'email' | 'clawdbot';
18
+ config: Record<string, string>;
19
+ }[];
20
+ cooldownMs?: number;
21
+ lastTriggeredAt?: string;
22
+ createdAt: string;
23
+ updatedAt: string;
24
+ }
25
+ export interface Notification {
26
+ id: string;
27
+ configId?: string;
28
+ type: 'payment_received' | 'payment_sent' | 'recurring_due' | 'invoice_paid' | 'threshold_alert' | 'bridge_complete';
29
+ title: string;
30
+ message: string;
31
+ data: Record<string, any>;
32
+ deliveries: {
33
+ channel: string;
34
+ status: 'pending' | 'sent' | 'failed';
35
+ sentAt?: string;
36
+ error?: string;
37
+ }[];
38
+ createdAt: string;
39
+ readAt?: string;
40
+ }
41
+ /**
42
+ * Notification Manager
43
+ */
44
+ export declare class NotificationManager {
45
+ private configPath;
46
+ private historyPath;
47
+ constructor(dataDir?: string);
48
+ private loadConfigs;
49
+ private saveConfigs;
50
+ private loadHistory;
51
+ private saveHistory;
52
+ /**
53
+ * Create notification configuration
54
+ */
55
+ createConfig(params: {
56
+ name: string;
57
+ triggers: NotificationConfig['triggers'];
58
+ channels: NotificationConfig['channels'];
59
+ cooldownMs?: number;
60
+ }): Promise<NotificationConfig>;
61
+ /**
62
+ * Enable/disable notification config
63
+ */
64
+ toggleConfig(id: string, enabled: boolean): Promise<NotificationConfig | null>;
65
+ /**
66
+ * List notification configs
67
+ */
68
+ listConfigs(): Promise<NotificationConfig[]>;
69
+ /**
70
+ * Delete notification config
71
+ */
72
+ deleteConfig(id: string): Promise<boolean>;
73
+ /**
74
+ * Process a transaction and trigger matching notifications
75
+ */
76
+ processTransaction(tx: {
77
+ type: 'incoming' | 'outgoing';
78
+ amount: string;
79
+ fromAddress: string;
80
+ toAddress: string;
81
+ chain: string;
82
+ txHash: string;
83
+ }): Promise<Notification[]>;
84
+ /**
85
+ * Create and deliver a notification
86
+ */
87
+ createNotification(params: {
88
+ configId?: string;
89
+ type: Notification['type'];
90
+ title: string;
91
+ message: string;
92
+ data: Record<string, any>;
93
+ channels: NotificationConfig['channels'];
94
+ }): Promise<Notification>;
95
+ /**
96
+ * Deliver notification to a channel
97
+ */
98
+ private deliver;
99
+ /**
100
+ * Deliver via webhook
101
+ */
102
+ private deliverWebhook;
103
+ /**
104
+ * Deliver via Telegram (would integrate with Clawdbot's messaging)
105
+ */
106
+ private deliverTelegram;
107
+ /**
108
+ * Deliver via Clawdbot session message
109
+ */
110
+ private deliverClawdbot;
111
+ /**
112
+ * Get notification history
113
+ */
114
+ getHistory(options?: {
115
+ type?: Notification['type'];
116
+ limit?: number;
117
+ unreadOnly?: boolean;
118
+ }): Promise<Notification[]>;
119
+ /**
120
+ * Mark notification as read
121
+ */
122
+ markRead(id: string): Promise<void>;
123
+ /**
124
+ * Mark all as read
125
+ */
126
+ markAllRead(): Promise<void>;
127
+ /**
128
+ * Get unread count
129
+ */
130
+ getUnreadCount(): Promise<number>;
131
+ /**
132
+ * Shorten address for display
133
+ */
134
+ private shortAddress;
135
+ /**
136
+ * Create default notification configs for a new user
137
+ */
138
+ createDefaultConfigs(): Promise<NotificationConfig[]>;
139
+ }
140
+ export default NotificationManager;
141
+ //# sourceMappingURL=notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../lib/notifications.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IAGjB,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;QACtE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,EAAE,CAAC;IAGJ,QAAQ,EAAE;QACR,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;QACpD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC,EAAE,CAAC;IAGJ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;IACrH,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,UAAU,EAAE;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;QACtC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,EAAE,CAAC;IACJ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,SAAW;YAKhB,WAAW;YASX,WAAW;YAKX,WAAW;YASX,WAAW;IASzB;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACzC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACzC,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoB/B;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAapF;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAIlD;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAehD;;OAEG;IACG,kBAAkB,CAAC,EAAE,EAAE;QAC3B,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;QAC9B,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA8D3B;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE;QAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAC3B,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1B,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;KAC1C,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCzB;;OAEG;YACW,OAAO;IAuBrB;;OAEG;YACW,cAAc;IAyC5B;;OAEG;YACW,eAAe;IAS7B;;OAEG;YACW,eAAe;IAW7B;;OAEG;IACG,UAAU,CAAC,OAAO,CAAC,EAAE;QACzB,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAsB3B;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAalC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAOvC;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAoB5D;AAED,eAAe,mBAAmB,CAAC"}