agentspay 0.1.0 → 0.2.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/.env.example +40 -0
- package/README.md +35 -4
- package/VERIFICATION_SUMMARY.txt +151 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +530 -74
- package/dist/api/server.js.map +1 -1
- package/dist/bsv/crypto.d.ts +65 -0
- package/dist/bsv/crypto.d.ts.map +1 -0
- package/dist/bsv/crypto.js +158 -0
- package/dist/bsv/crypto.js.map +1 -0
- package/dist/bsv/mnee.d.ts +88 -0
- package/dist/bsv/mnee.d.ts.map +1 -0
- package/dist/bsv/mnee.js +173 -0
- package/dist/bsv/mnee.js.map +1 -0
- package/dist/bsv/opreturn.d.ts +22 -0
- package/dist/bsv/opreturn.d.ts.map +1 -0
- package/dist/bsv/opreturn.js +117 -0
- package/dist/bsv/opreturn.js.map +1 -0
- package/dist/bsv/whatsonchain.d.ts +46 -0
- package/dist/bsv/whatsonchain.d.ts.map +1 -0
- package/dist/bsv/whatsonchain.js +98 -0
- package/dist/bsv/whatsonchain.js.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +85 -0
- package/dist/config.js.map +1 -0
- package/dist/currency/currency.d.ts +70 -0
- package/dist/currency/currency.d.ts.map +1 -0
- package/dist/currency/currency.js +137 -0
- package/dist/currency/currency.js.map +1 -0
- package/dist/disputes/dispute.d.ts +50 -0
- package/dist/disputes/dispute.d.ts.map +1 -0
- package/dist/disputes/dispute.js +162 -0
- package/dist/disputes/dispute.js.map +1 -0
- package/dist/docs/openapi.yaml +1079 -0
- package/dist/docs/swagger.d.ts +12 -0
- package/dist/docs/swagger.d.ts.map +1 -0
- package/dist/docs/swagger.js +104 -0
- package/dist/docs/swagger.js.map +1 -0
- package/dist/middleware/auth.d.ts +20 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +32 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/rateLimit.d.ts +25 -0
- package/dist/middleware/rateLimit.d.ts.map +1 -0
- package/dist/middleware/rateLimit.js +61 -0
- package/dist/middleware/rateLimit.js.map +1 -0
- package/dist/payment/payment.d.ts +79 -9
- package/dist/payment/payment.d.ts.map +1 -1
- package/dist/payment/payment.js +387 -47
- package/dist/payment/payment.js.map +1 -1
- package/dist/registry/db.d.ts.map +1 -1
- package/dist/registry/db.js +110 -3
- package/dist/registry/db.js.map +1 -1
- package/dist/registry/registry.d.ts +1 -1
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +12 -4
- package/dist/registry/registry.js.map +1 -1
- package/dist/types/index.d.ts +34 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/validation.d.ts +27 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +164 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/verification/receipt.d.ts +42 -0
- package/dist/verification/receipt.d.ts.map +1 -0
- package/dist/verification/receipt.js +10 -0
- package/dist/verification/receipt.js.map +1 -0
- package/dist/verification/verification.d.ts +41 -0
- package/dist/verification/verification.d.ts.map +1 -0
- package/dist/verification/verification.js +217 -0
- package/dist/verification/verification.js.map +1 -0
- package/dist/wallet/providerManager.d.ts +32 -0
- package/dist/wallet/providerManager.d.ts.map +1 -0
- package/dist/wallet/providerManager.js +118 -0
- package/dist/wallet/providerManager.js.map +1 -0
- package/dist/wallet/providers/handcash.d.ts +22 -0
- package/dist/wallet/providers/handcash.d.ts.map +1 -0
- package/dist/wallet/providers/handcash.js +214 -0
- package/dist/wallet/providers/handcash.js.map +1 -0
- package/dist/wallet/providers/internal.d.ts +15 -0
- package/dist/wallet/providers/internal.d.ts.map +1 -0
- package/dist/wallet/providers/internal.js +208 -0
- package/dist/wallet/providers/internal.js.map +1 -0
- package/dist/wallet/providers/types.d.ts +50 -0
- package/dist/wallet/providers/types.d.ts.map +1 -0
- package/dist/wallet/providers/types.js +6 -0
- package/dist/wallet/providers/types.js.map +1 -0
- package/dist/wallet/providers/yours.d.ts +18 -0
- package/dist/wallet/providers/yours.d.ts.map +1 -0
- package/dist/wallet/providers/yours.js +122 -0
- package/dist/wallet/providers/yours.js.map +1 -0
- package/dist/wallet/wallet.d.ts +52 -5
- package/dist/wallet/wallet.d.ts.map +1 -1
- package/dist/wallet/wallet.js +223 -34
- package/dist/wallet/wallet.js.map +1 -1
- package/dist/webhooks/delivery.d.ts +37 -0
- package/dist/webhooks/delivery.d.ts.map +1 -0
- package/dist/webhooks/delivery.js +182 -0
- package/dist/webhooks/delivery.js.map +1 -0
- package/dist/webhooks/webhook.d.ts +85 -0
- package/dist/webhooks/webhook.d.ts.map +1 -0
- package/dist/webhooks/webhook.js +271 -0
- package/dist/webhooks/webhook.js.map +1 -0
- package/package.json +74 -54
- package/sdk-python/LICENSE +21 -0
- package/sdk-python/MANIFEST.in +9 -0
- package/sdk-python/README.md +372 -0
- package/sdk-python/agentspay/__init__.py +97 -0
- package/sdk-python/agentspay/client.py +256 -0
- package/sdk-python/agentspay/disputes.py +174 -0
- package/sdk-python/agentspay/exceptions.py +53 -0
- package/sdk-python/agentspay/payments.py +169 -0
- package/sdk-python/agentspay/services.py +198 -0
- package/sdk-python/agentspay/types.py +154 -0
- package/sdk-python/agentspay/wallet.py +113 -0
- package/sdk-python/agentspay/webhooks.py +195 -0
- package/sdk-python/examples/consumer.py +147 -0
- package/sdk-python/examples/provider.py +116 -0
- package/sdk-python/pyproject.toml +61 -0
- package/sdk-python/setup.py +53 -0
- package/sdk-python/tests/test_client.py +221 -0
- package/test-addr.js +29 -0
- package/test-mnee-simple.js +51 -0
- package/test-mnee.js +47 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export interface Dispute {
|
|
2
|
+
id: string;
|
|
3
|
+
paymentId: string;
|
|
4
|
+
buyerWalletId: string;
|
|
5
|
+
providerWalletId: string;
|
|
6
|
+
reason: string;
|
|
7
|
+
evidence?: string;
|
|
8
|
+
status: 'open' | 'under_review' | 'resolved_refund' | 'resolved_release' | 'resolved_split' | 'expired';
|
|
9
|
+
resolution?: 'refund' | 'release' | 'split';
|
|
10
|
+
splitPercent?: number;
|
|
11
|
+
resolvedAt?: string;
|
|
12
|
+
createdAt: string;
|
|
13
|
+
}
|
|
14
|
+
export interface DisputeResolution {
|
|
15
|
+
resolution: 'refund' | 'release' | 'split';
|
|
16
|
+
splitPercent?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class DisputeManager {
|
|
19
|
+
/**
|
|
20
|
+
* Open a new dispute
|
|
21
|
+
* Can only be opened by buyer within the dispute window
|
|
22
|
+
*/
|
|
23
|
+
create(paymentId: string, buyerWalletId: string, reason: string, evidence?: string): Dispute | null;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve a dispute (admin/platform only)
|
|
26
|
+
*/
|
|
27
|
+
resolve(disputeId: string, resolution: DisputeResolution): Dispute | null;
|
|
28
|
+
/**
|
|
29
|
+
* Get dispute by ID
|
|
30
|
+
*/
|
|
31
|
+
getById(id: string): Dispute | null;
|
|
32
|
+
/**
|
|
33
|
+
* Get dispute by payment ID
|
|
34
|
+
*/
|
|
35
|
+
getByPaymentId(paymentId: string): Dispute | null;
|
|
36
|
+
/**
|
|
37
|
+
* List disputes filtered by wallet
|
|
38
|
+
*/
|
|
39
|
+
listByWallet(walletId: string, status?: Dispute['status']): Dispute[];
|
|
40
|
+
/**
|
|
41
|
+
* List all disputes (admin only)
|
|
42
|
+
*/
|
|
43
|
+
listAll(status?: Dispute['status']): Dispute[];
|
|
44
|
+
/**
|
|
45
|
+
* Check and auto-resolve expired dispute windows
|
|
46
|
+
* Should be called periodically or on payment completion
|
|
47
|
+
*/
|
|
48
|
+
checkExpiredWindows(): void;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=dispute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispute.d.ts","sourceRoot":"","sources":["../../src/disputes/dispute.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,SAAS,CAAA;IACvG,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,cAAc;IACzB;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IA2CnG;;OAEG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,GAAG,OAAO,GAAG,IAAI;IAkDzE;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAMnC;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAMjD;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE;IAgBrE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE;IAU9C;;;OAGG;IACH,mBAAmB,IAAI,IAAI;CA4B5B"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DisputeManager = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
const db_1 = require("../registry/db");
|
|
6
|
+
const delivery_1 = require("../webhooks/delivery");
|
|
7
|
+
class DisputeManager {
|
|
8
|
+
/**
|
|
9
|
+
* Open a new dispute
|
|
10
|
+
* Can only be opened by buyer within the dispute window
|
|
11
|
+
*/
|
|
12
|
+
create(paymentId, buyerWalletId, reason, evidence) {
|
|
13
|
+
const db = (0, db_1.getDb)();
|
|
14
|
+
// Validate payment exists and is in escrowed state
|
|
15
|
+
const payment = db.prepare('SELECT * FROM payments WHERE id = ?').get(paymentId);
|
|
16
|
+
if (!payment)
|
|
17
|
+
throw new Error('Payment not found');
|
|
18
|
+
if (payment.status !== 'escrowed')
|
|
19
|
+
throw new Error('Can only dispute escrowed payments');
|
|
20
|
+
if (payment.buyerWalletId !== buyerWalletId)
|
|
21
|
+
throw new Error('Only buyer can open dispute');
|
|
22
|
+
// Check if dispute already exists
|
|
23
|
+
const existing = db.prepare('SELECT id FROM disputes WHERE paymentId = ?').get(paymentId);
|
|
24
|
+
if (existing)
|
|
25
|
+
throw new Error('Dispute already exists for this payment');
|
|
26
|
+
// Get service to check dispute window
|
|
27
|
+
const service = db.prepare('SELECT disputeWindow FROM services WHERE id = ?').get(payment.serviceId);
|
|
28
|
+
if (!service)
|
|
29
|
+
throw new Error('Service not found');
|
|
30
|
+
const disputeWindowMinutes = service.disputeWindow || 30;
|
|
31
|
+
const disputeDeadline = new Date(new Date(payment.completedAt || payment.createdAt).getTime() + disputeWindowMinutes * 60000);
|
|
32
|
+
if (new Date() > disputeDeadline) {
|
|
33
|
+
throw new Error(`Dispute window expired. Must file within ${disputeWindowMinutes} minutes of execution`);
|
|
34
|
+
}
|
|
35
|
+
const id = (0, uuid_1.v4)();
|
|
36
|
+
const now = new Date().toISOString();
|
|
37
|
+
db.prepare(`
|
|
38
|
+
INSERT INTO disputes (id, paymentId, buyerWalletId, providerWalletId, reason, evidence, status, createdAt)
|
|
39
|
+
VALUES (?, ?, ?, ?, ?, ?, 'open', ?)
|
|
40
|
+
`).run(id, paymentId, buyerWalletId, payment.sellerWalletId, reason, evidence || null, now);
|
|
41
|
+
// Update payment status to disputed
|
|
42
|
+
db.prepare('UPDATE payments SET disputeStatus = ? WHERE id = ?').run('disputed', paymentId);
|
|
43
|
+
const dispute = this.getById(id);
|
|
44
|
+
if (dispute) {
|
|
45
|
+
delivery_1.webhookDelivery.trigger('dispute.opened', dispute).catch(console.error);
|
|
46
|
+
}
|
|
47
|
+
return dispute;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolve a dispute (admin/platform only)
|
|
51
|
+
*/
|
|
52
|
+
resolve(disputeId, resolution) {
|
|
53
|
+
const db = (0, db_1.getDb)();
|
|
54
|
+
const dispute = this.getById(disputeId);
|
|
55
|
+
if (!dispute)
|
|
56
|
+
throw new Error('Dispute not found');
|
|
57
|
+
if (dispute.status !== 'open' && dispute.status !== 'under_review') {
|
|
58
|
+
throw new Error('Dispute already resolved');
|
|
59
|
+
}
|
|
60
|
+
if (resolution.resolution === 'split') {
|
|
61
|
+
if (resolution.splitPercent === undefined || resolution.splitPercent < 0 || resolution.splitPercent > 100) {
|
|
62
|
+
throw new Error('splitPercent required for split resolution (0-100)');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const now = new Date().toISOString();
|
|
66
|
+
let status;
|
|
67
|
+
switch (resolution.resolution) {
|
|
68
|
+
case 'refund':
|
|
69
|
+
status = 'resolved_refund';
|
|
70
|
+
break;
|
|
71
|
+
case 'release':
|
|
72
|
+
status = 'resolved_release';
|
|
73
|
+
break;
|
|
74
|
+
case 'split':
|
|
75
|
+
status = 'resolved_split';
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
db.prepare(`
|
|
79
|
+
UPDATE disputes
|
|
80
|
+
SET status = ?, resolution = ?, splitPercent = ?, resolvedAt = ?
|
|
81
|
+
WHERE id = ?
|
|
82
|
+
`).run(status, resolution.resolution, resolution.splitPercent || null, now, disputeId);
|
|
83
|
+
// Update payment status based on resolution
|
|
84
|
+
const payment = db.prepare('SELECT * FROM payments WHERE id = ?').get(dispute.paymentId);
|
|
85
|
+
if (payment) {
|
|
86
|
+
db.prepare('UPDATE payments SET disputeStatus = ? WHERE id = ?').run(status, dispute.paymentId);
|
|
87
|
+
}
|
|
88
|
+
const resolvedDispute = this.getById(disputeId);
|
|
89
|
+
if (resolvedDispute) {
|
|
90
|
+
delivery_1.webhookDelivery.trigger('dispute.resolved', resolvedDispute).catch(console.error);
|
|
91
|
+
}
|
|
92
|
+
return resolvedDispute;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get dispute by ID
|
|
96
|
+
*/
|
|
97
|
+
getById(id) {
|
|
98
|
+
const db = (0, db_1.getDb)();
|
|
99
|
+
const row = db.prepare('SELECT * FROM disputes WHERE id = ?').get(id);
|
|
100
|
+
return row || null;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Get dispute by payment ID
|
|
104
|
+
*/
|
|
105
|
+
getByPaymentId(paymentId) {
|
|
106
|
+
const db = (0, db_1.getDb)();
|
|
107
|
+
const row = db.prepare('SELECT * FROM disputes WHERE paymentId = ?').get(paymentId);
|
|
108
|
+
return row || null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* List disputes filtered by wallet
|
|
112
|
+
*/
|
|
113
|
+
listByWallet(walletId, status) {
|
|
114
|
+
const db = (0, db_1.getDb)();
|
|
115
|
+
let query = 'SELECT * FROM disputes WHERE (buyerWalletId = ? OR providerWalletId = ?)';
|
|
116
|
+
const params = [walletId, walletId];
|
|
117
|
+
if (status) {
|
|
118
|
+
query += ' AND status = ?';
|
|
119
|
+
params.push(status);
|
|
120
|
+
}
|
|
121
|
+
query += ' ORDER BY createdAt DESC';
|
|
122
|
+
return db.prepare(query).all(...params);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* List all disputes (admin only)
|
|
126
|
+
*/
|
|
127
|
+
listAll(status) {
|
|
128
|
+
const db = (0, db_1.getDb)();
|
|
129
|
+
if (status) {
|
|
130
|
+
return db.prepare('SELECT * FROM disputes WHERE status = ? ORDER BY createdAt DESC').all(status);
|
|
131
|
+
}
|
|
132
|
+
return db.prepare('SELECT * FROM disputes ORDER BY createdAt DESC').all();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check and auto-resolve expired dispute windows
|
|
136
|
+
* Should be called periodically or on payment completion
|
|
137
|
+
*/
|
|
138
|
+
checkExpiredWindows() {
|
|
139
|
+
const db = (0, db_1.getDb)();
|
|
140
|
+
// Find all escrowed payments without disputes that have passed their dispute window
|
|
141
|
+
const expiredPayments = db.prepare(`
|
|
142
|
+
SELECT p.id, p.completedAt, p.createdAt, s.disputeWindow
|
|
143
|
+
FROM payments p
|
|
144
|
+
JOIN services s ON p.serviceId = s.id
|
|
145
|
+
WHERE p.status = 'escrowed'
|
|
146
|
+
AND p.disputeStatus IS NULL
|
|
147
|
+
AND NOT EXISTS (SELECT 1 FROM disputes WHERE paymentId = p.id)
|
|
148
|
+
`).all();
|
|
149
|
+
const now = new Date();
|
|
150
|
+
for (const payment of expiredPayments) {
|
|
151
|
+
const disputeWindowMinutes = payment.disputeWindow || 30;
|
|
152
|
+
const disputeDeadline = new Date(new Date(payment.completedAt || payment.createdAt).getTime() + disputeWindowMinutes * 60000);
|
|
153
|
+
if (now > disputeDeadline) {
|
|
154
|
+
// Auto-release payment to provider (dispute window expired)
|
|
155
|
+
db.prepare('UPDATE payments SET disputeStatus = ? WHERE id = ?').run('no_dispute', payment.id);
|
|
156
|
+
console.log(`[Disputes] Auto-release payment ${payment.id} - dispute window expired`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
exports.DisputeManager = DisputeManager;
|
|
162
|
+
//# sourceMappingURL=dispute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispute.js","sourceRoot":"","sources":["../../src/disputes/dispute.ts"],"names":[],"mappings":"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"}
|