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
|
@@ -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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"}
|