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,266 @@
1
+ "use strict";
2
+ /**
3
+ * Circle Programmable Wallets Client
4
+ *
5
+ * Wrapper around Circle's Developer-Controlled Wallets API
6
+ * for USDC operations on testnet.
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.CircleClient = exports.CHAIN_NAMES = exports.USDC_TOKENS = void 0;
13
+ const crypto_1 = __importDefault(require("crypto"));
14
+ // Testnet USDC Token IDs (from Circle's registry)
15
+ exports.USDC_TOKENS = {
16
+ 'ETH-SEPOLIA': 'eth-sepolia-usdc',
17
+ 'MATIC-AMOY': 'matic-amoy-usdc',
18
+ 'AVAX-FUJI': 'avax-fuji-usdc',
19
+ 'ARB-SEPOLIA': 'arb-sepolia-usdc',
20
+ };
21
+ exports.CHAIN_NAMES = {
22
+ 'ETH-SEPOLIA': 'Ethereum Sepolia',
23
+ 'MATIC-AMOY': 'Polygon Amoy',
24
+ 'AVAX-FUJI': 'Avalanche Fuji',
25
+ 'ARB-SEPOLIA': 'Arbitrum Sepolia',
26
+ };
27
+ /**
28
+ * Circle Programmable Wallets Client
29
+ */
30
+ class CircleClient {
31
+ constructor(config) {
32
+ this.apiKey = config.apiKey;
33
+ this.entitySecret = config.entitySecret;
34
+ this.baseUrl = config.baseUrl || 'https://api.circle.com/v1/w3s';
35
+ }
36
+ /**
37
+ * Generate entity secret ciphertext for API calls
38
+ */
39
+ generateEntitySecretCiphertext() {
40
+ // Entity secret should be hex-encoded 32 bytes
41
+ const entitySecretBuffer = Buffer.from(this.entitySecret, 'hex');
42
+ // Generate random IV
43
+ const iv = crypto_1.default.randomBytes(12);
44
+ // For demo purposes, return base64 encoded secret
45
+ // In production, this would use Circle's public key for encryption
46
+ return Buffer.concat([iv, entitySecretBuffer]).toString('base64');
47
+ }
48
+ /**
49
+ * Make authenticated API request
50
+ */
51
+ async request(method, path, body) {
52
+ const url = `${this.baseUrl}${path}`;
53
+ const headers = {
54
+ 'Content-Type': 'application/json',
55
+ 'Authorization': `Bearer ${this.apiKey}`,
56
+ };
57
+ const options = {
58
+ method,
59
+ headers,
60
+ };
61
+ if (body) {
62
+ // Add idempotency key for mutations
63
+ if (method !== 'GET') {
64
+ body.idempotencyKey = crypto_1.default.randomUUID();
65
+ }
66
+ // Add entity secret ciphertext for transaction operations
67
+ if (path.includes('/transactions') || path.includes('/wallets')) {
68
+ body.entitySecretCiphertext = this.generateEntitySecretCiphertext();
69
+ }
70
+ options.body = JSON.stringify(body);
71
+ }
72
+ const response = await fetch(url, options);
73
+ if (!response.ok) {
74
+ const error = await response.text();
75
+ throw new Error(`Circle API error (${response.status}): ${error}`);
76
+ }
77
+ const data = await response.json();
78
+ return data.data || data;
79
+ }
80
+ // ============ Wallet Set Operations ============
81
+ /**
82
+ * Create a new wallet set
83
+ */
84
+ async createWalletSet(name) {
85
+ return this.request('POST', '/developer/walletSets', { name });
86
+ }
87
+ /**
88
+ * List all wallet sets
89
+ */
90
+ async listWalletSets() {
91
+ const result = await this.request('GET', '/developer/walletSets');
92
+ return result.walletSets || [];
93
+ }
94
+ // ============ Wallet Operations ============
95
+ /**
96
+ * Create wallets in a wallet set
97
+ */
98
+ async createWallets(walletSetId, blockchains, count = 1) {
99
+ const result = await this.request('POST', '/developer/wallets', {
100
+ walletSetId,
101
+ blockchains,
102
+ count,
103
+ });
104
+ return result.wallets || [];
105
+ }
106
+ /**
107
+ * Get wallet by ID
108
+ */
109
+ async getWallet(walletId) {
110
+ return this.request('GET', `/wallets/${walletId}`);
111
+ }
112
+ /**
113
+ * List all wallets
114
+ */
115
+ async listWallets() {
116
+ const result = await this.request('GET', '/wallets');
117
+ return result.wallets || [];
118
+ }
119
+ // ============ Balance Operations ============
120
+ /**
121
+ * Get token balances for a wallet
122
+ */
123
+ async getBalances(walletId) {
124
+ const result = await this.request('GET', `/wallets/${walletId}/balances`);
125
+ return result.tokenBalances || [];
126
+ }
127
+ /**
128
+ * Get USDC balance across all wallets
129
+ */
130
+ async getAllUSDCBalances() {
131
+ const wallets = await this.listWallets();
132
+ const results = [];
133
+ for (const wallet of wallets) {
134
+ try {
135
+ const balances = await this.getBalances(wallet.id);
136
+ const usdcBalance = balances.find(b => b.token.symbol === 'USDC');
137
+ results.push({
138
+ wallet,
139
+ balance: usdcBalance?.amount || '0',
140
+ chain: wallet.blockchain,
141
+ });
142
+ }
143
+ catch (err) {
144
+ console.error(`Failed to get balance for wallet ${wallet.id}:`, err);
145
+ }
146
+ }
147
+ return results;
148
+ }
149
+ // ============ Transaction Operations ============
150
+ /**
151
+ * Send USDC to an address
152
+ */
153
+ async sendUSDC(options) {
154
+ const wallet = await this.getWallet(options.fromWalletId);
155
+ const tokenId = options.tokenId || exports.USDC_TOKENS[wallet.blockchain];
156
+ if (!tokenId) {
157
+ throw new Error(`No USDC token ID found for chain ${wallet.blockchain}`);
158
+ }
159
+ return this.request('POST', '/developer/transactions/transfer', {
160
+ walletId: options.fromWalletId,
161
+ tokenId,
162
+ destinationAddress: options.toAddress,
163
+ amounts: [options.amount],
164
+ fee: {
165
+ type: 'level',
166
+ config: {
167
+ feeLevel: options.feeLevel || 'MEDIUM',
168
+ },
169
+ },
170
+ });
171
+ }
172
+ /**
173
+ * Get transaction by ID
174
+ */
175
+ async getTransaction(transactionId) {
176
+ return this.request('GET', `/transactions/${transactionId}`);
177
+ }
178
+ /**
179
+ * List recent transactions
180
+ */
181
+ async listTransactions(walletId) {
182
+ const path = walletId
183
+ ? `/wallets/${walletId}/transactions`
184
+ : '/transactions';
185
+ const result = await this.request('GET', path);
186
+ return result.transactions || [];
187
+ }
188
+ // ============ CCTP Bridge Operations ============
189
+ /**
190
+ * Bridge USDC across chains via CCTP
191
+ */
192
+ async bridgeUSDC(options) {
193
+ // CCTP bridge is done through contract interactions
194
+ // This is a simplified version - full implementation would use
195
+ // Circle's CCTP contracts directly
196
+ return this.request('POST', '/developer/transactions/contractExecution', {
197
+ walletId: options.fromWalletId,
198
+ contractAddress: this.getCCTPContractAddress(options.fromChain),
199
+ abiFunctionSignature: 'depositForBurn(uint256,uint32,bytes32,address)',
200
+ abiParameters: [
201
+ options.amount,
202
+ this.getChainDomain(options.toChain),
203
+ this.addressToBytes32(options.toAddress),
204
+ exports.USDC_TOKENS[options.fromChain],
205
+ ],
206
+ fee: {
207
+ type: 'level',
208
+ config: { feeLevel: 'HIGH' },
209
+ },
210
+ });
211
+ }
212
+ /**
213
+ * Get CCTP TokenMessenger contract address for chain
214
+ */
215
+ getCCTPContractAddress(chain) {
216
+ const contracts = {
217
+ 'ETH-SEPOLIA': '0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5',
218
+ 'AVAX-FUJI': '0xeb08f243E5d3FCFF26A9E38Ae5520A669f4019d0',
219
+ 'ARB-SEPOLIA': '0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5',
220
+ };
221
+ return contracts[chain] || '';
222
+ }
223
+ /**
224
+ * Get CCTP domain ID for chain
225
+ */
226
+ getChainDomain(chain) {
227
+ const domains = {
228
+ 'ETH-SEPOLIA': 0,
229
+ 'AVAX-FUJI': 1,
230
+ 'ARB-SEPOLIA': 3,
231
+ 'MATIC-AMOY': 7,
232
+ };
233
+ return domains[chain] || 0;
234
+ }
235
+ /**
236
+ * Convert address to bytes32 format
237
+ */
238
+ addressToBytes32(address) {
239
+ return '0x' + address.slice(2).padStart(64, '0');
240
+ }
241
+ // ============ Utility Methods ============
242
+ /**
243
+ * Format USDC amount for display
244
+ */
245
+ static formatUSDC(amount) {
246
+ const num = parseFloat(amount);
247
+ return `${num.toFixed(2)} USDC`;
248
+ }
249
+ /**
250
+ * Parse human-readable amount to wei
251
+ */
252
+ static parseAmount(amount) {
253
+ // USDC has 6 decimals
254
+ const num = parseFloat(amount);
255
+ return (num * 1000000).toString();
256
+ }
257
+ /**
258
+ * Validate Ethereum address
259
+ */
260
+ static isValidAddress(address) {
261
+ return /^0x[a-fA-F0-9]{40}$/.test(address);
262
+ }
263
+ }
264
+ exports.CircleClient = CircleClient;
265
+ exports.default = CircleClient;
266
+ //# sourceMappingURL=circle-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-client.js","sourceRoot":"","sources":["../lib/circle-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Commission Splitter Module
3
+ *
4
+ * Auto-distribute USDC commissions between multiple parties:
5
+ * agents, brokers, referral partners, team members.
6
+ */
7
+ export interface SplitRecipient {
8
+ id: string;
9
+ name: string;
10
+ role: 'listing_agent' | 'buyer_agent' | 'broker' | 'referral' | 'team_member' | 'company' | 'custom';
11
+ walletAddress: string;
12
+ splitType: 'percentage' | 'fixed';
13
+ splitValue: string;
14
+ minAmount?: string;
15
+ maxAmount?: string;
16
+ tier?: number;
17
+ }
18
+ export interface CommissionSplit {
19
+ id: string;
20
+ name: string;
21
+ description?: string;
22
+ propertyAddress?: string;
23
+ mlsNumber?: string;
24
+ closingDate?: string;
25
+ salePrice?: string;
26
+ totalCommission: string;
27
+ chain: string;
28
+ sourceWalletId: string;
29
+ recipients: SplitRecipient[];
30
+ payouts: {
31
+ recipientId: string;
32
+ amount: string;
33
+ status: 'pending' | 'processing' | 'sent' | 'failed';
34
+ txHash?: string;
35
+ sentAt?: string;
36
+ error?: string;
37
+ }[];
38
+ status: 'draft' | 'ready' | 'processing' | 'completed' | 'partial' | 'failed';
39
+ executeAt?: string;
40
+ executedAt?: string;
41
+ notes?: string;
42
+ createdAt: string;
43
+ updatedAt: string;
44
+ }
45
+ export interface SplitTemplate {
46
+ id: string;
47
+ name: string;
48
+ description?: string;
49
+ recipients: {
50
+ role: SplitRecipient['role'];
51
+ splitType: SplitRecipient['splitType'];
52
+ splitValue: string;
53
+ tier?: number;
54
+ }[];
55
+ usageCount: number;
56
+ lastUsedAt?: string;
57
+ createdAt: string;
58
+ }
59
+ /**
60
+ * Commission Splitter
61
+ */
62
+ export declare class CommissionSplitter {
63
+ private splitsPath;
64
+ private templatesPath;
65
+ constructor(dataDir?: string);
66
+ private loadSplits;
67
+ private saveSplits;
68
+ private loadTemplates;
69
+ private saveTemplates;
70
+ /**
71
+ * Create a commission split
72
+ */
73
+ createSplit(params: {
74
+ name: string;
75
+ totalCommission: string;
76
+ chain: string;
77
+ sourceWalletId: string;
78
+ recipients: Omit<SplitRecipient, 'id'>[];
79
+ propertyAddress?: string;
80
+ mlsNumber?: string;
81
+ closingDate?: string;
82
+ salePrice?: string;
83
+ executeAt?: string;
84
+ notes?: string;
85
+ }): Promise<CommissionSplit>;
86
+ /**
87
+ * Create split from template
88
+ */
89
+ createFromTemplate(templateId: string, params: {
90
+ totalCommission: string;
91
+ chain: string;
92
+ sourceWalletId: string;
93
+ recipientAddresses: {
94
+ role: string;
95
+ name: string;
96
+ address: string;
97
+ }[];
98
+ propertyAddress?: string;
99
+ closingDate?: string;
100
+ salePrice?: string;
101
+ }): Promise<CommissionSplit>;
102
+ /**
103
+ * Quick split for common scenarios
104
+ */
105
+ quickSplit(params: {
106
+ totalCommission: string;
107
+ chain: string;
108
+ sourceWalletId: string;
109
+ scenario: 'listing_side' | 'buyer_side' | 'both_sides' | 'referral';
110
+ agent: {
111
+ name: string;
112
+ address: string;
113
+ split?: string;
114
+ };
115
+ broker: {
116
+ name: string;
117
+ address: string;
118
+ split?: string;
119
+ };
120
+ referral?: {
121
+ name: string;
122
+ address: string;
123
+ split?: string;
124
+ };
125
+ propertyAddress?: string;
126
+ }): Promise<CommissionSplit>;
127
+ /**
128
+ * Calculate payouts for all recipients
129
+ */
130
+ private calculatePayouts;
131
+ /**
132
+ * Validate splits add up correctly
133
+ */
134
+ private validateSplits;
135
+ /**
136
+ * Execute a split (send all payouts)
137
+ * Returns the split with updated payout statuses
138
+ */
139
+ execute(splitId: string, sendFn: (to: string, amount: string, chain: string) => Promise<{
140
+ txHash: string;
141
+ }>): Promise<CommissionSplit | null>;
142
+ /**
143
+ * Retry failed payouts
144
+ */
145
+ retryFailed(splitId: string, sendFn: (to: string, amount: string, chain: string) => Promise<{
146
+ txHash: string;
147
+ }>): Promise<CommissionSplit | null>;
148
+ /**
149
+ * Create a split template
150
+ */
151
+ createTemplate(params: {
152
+ name: string;
153
+ description?: string;
154
+ recipients: SplitTemplate['recipients'];
155
+ }): Promise<SplitTemplate>;
156
+ /**
157
+ * List templates
158
+ */
159
+ listTemplates(): Promise<SplitTemplate[]>;
160
+ /**
161
+ * Get common RE templates
162
+ */
163
+ getDefaultTemplates(): Promise<SplitTemplate[]>;
164
+ /**
165
+ * Get split by ID
166
+ */
167
+ get(id: string): Promise<CommissionSplit | null>;
168
+ /**
169
+ * List splits with filters
170
+ */
171
+ list(filters?: {
172
+ status?: CommissionSplit['status'];
173
+ recipientAddress?: string;
174
+ fromDate?: string;
175
+ toDate?: string;
176
+ }): Promise<CommissionSplit[]>;
177
+ /**
178
+ * Get pending splits (ready but not executed)
179
+ */
180
+ getPending(): Promise<CommissionSplit[]>;
181
+ /**
182
+ * Get splits due for execution
183
+ */
184
+ getDue(): Promise<CommissionSplit[]>;
185
+ /**
186
+ * Format split summary
187
+ */
188
+ formatSplitSummary(split: CommissionSplit): string;
189
+ }
190
+ export default CommissionSplitter;
191
+ //# sourceMappingURL=commission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commission.d.ts","sourceRoot":"","sources":["../lib/commission.ts"],"names":[],"mappings":"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"}