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.
Files changed (126) hide show
  1. package/.env.example +40 -0
  2. package/README.md +35 -4
  3. package/VERIFICATION_SUMMARY.txt +151 -0
  4. package/dist/api/server.d.ts.map +1 -1
  5. package/dist/api/server.js +530 -74
  6. package/dist/api/server.js.map +1 -1
  7. package/dist/bsv/crypto.d.ts +65 -0
  8. package/dist/bsv/crypto.d.ts.map +1 -0
  9. package/dist/bsv/crypto.js +158 -0
  10. package/dist/bsv/crypto.js.map +1 -0
  11. package/dist/bsv/mnee.d.ts +88 -0
  12. package/dist/bsv/mnee.d.ts.map +1 -0
  13. package/dist/bsv/mnee.js +173 -0
  14. package/dist/bsv/mnee.js.map +1 -0
  15. package/dist/bsv/opreturn.d.ts +22 -0
  16. package/dist/bsv/opreturn.d.ts.map +1 -0
  17. package/dist/bsv/opreturn.js +117 -0
  18. package/dist/bsv/opreturn.js.map +1 -0
  19. package/dist/bsv/whatsonchain.d.ts +46 -0
  20. package/dist/bsv/whatsonchain.d.ts.map +1 -0
  21. package/dist/bsv/whatsonchain.js +98 -0
  22. package/dist/bsv/whatsonchain.js.map +1 -0
  23. package/dist/config.d.ts +38 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +85 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/currency/currency.d.ts +70 -0
  28. package/dist/currency/currency.d.ts.map +1 -0
  29. package/dist/currency/currency.js +137 -0
  30. package/dist/currency/currency.js.map +1 -0
  31. package/dist/disputes/dispute.d.ts +50 -0
  32. package/dist/disputes/dispute.d.ts.map +1 -0
  33. package/dist/disputes/dispute.js +162 -0
  34. package/dist/disputes/dispute.js.map +1 -0
  35. package/dist/docs/openapi.yaml +1079 -0
  36. package/dist/docs/swagger.d.ts +12 -0
  37. package/dist/docs/swagger.d.ts.map +1 -0
  38. package/dist/docs/swagger.js +104 -0
  39. package/dist/docs/swagger.js.map +1 -0
  40. package/dist/middleware/auth.d.ts +20 -0
  41. package/dist/middleware/auth.d.ts.map +1 -0
  42. package/dist/middleware/auth.js +32 -0
  43. package/dist/middleware/auth.js.map +1 -0
  44. package/dist/middleware/rateLimit.d.ts +25 -0
  45. package/dist/middleware/rateLimit.d.ts.map +1 -0
  46. package/dist/middleware/rateLimit.js +61 -0
  47. package/dist/middleware/rateLimit.js.map +1 -0
  48. package/dist/payment/payment.d.ts +79 -9
  49. package/dist/payment/payment.d.ts.map +1 -1
  50. package/dist/payment/payment.js +387 -47
  51. package/dist/payment/payment.js.map +1 -1
  52. package/dist/registry/db.d.ts.map +1 -1
  53. package/dist/registry/db.js +110 -3
  54. package/dist/registry/db.js.map +1 -1
  55. package/dist/registry/registry.d.ts +1 -1
  56. package/dist/registry/registry.d.ts.map +1 -1
  57. package/dist/registry/registry.js +12 -4
  58. package/dist/registry/registry.js.map +1 -1
  59. package/dist/types/index.d.ts +34 -0
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/dist/types/index.js.map +1 -1
  62. package/dist/utils/validation.d.ts +27 -0
  63. package/dist/utils/validation.d.ts.map +1 -0
  64. package/dist/utils/validation.js +164 -0
  65. package/dist/utils/validation.js.map +1 -0
  66. package/dist/verification/receipt.d.ts +42 -0
  67. package/dist/verification/receipt.d.ts.map +1 -0
  68. package/dist/verification/receipt.js +10 -0
  69. package/dist/verification/receipt.js.map +1 -0
  70. package/dist/verification/verification.d.ts +41 -0
  71. package/dist/verification/verification.d.ts.map +1 -0
  72. package/dist/verification/verification.js +217 -0
  73. package/dist/verification/verification.js.map +1 -0
  74. package/dist/wallet/providerManager.d.ts +32 -0
  75. package/dist/wallet/providerManager.d.ts.map +1 -0
  76. package/dist/wallet/providerManager.js +118 -0
  77. package/dist/wallet/providerManager.js.map +1 -0
  78. package/dist/wallet/providers/handcash.d.ts +22 -0
  79. package/dist/wallet/providers/handcash.d.ts.map +1 -0
  80. package/dist/wallet/providers/handcash.js +214 -0
  81. package/dist/wallet/providers/handcash.js.map +1 -0
  82. package/dist/wallet/providers/internal.d.ts +15 -0
  83. package/dist/wallet/providers/internal.d.ts.map +1 -0
  84. package/dist/wallet/providers/internal.js +208 -0
  85. package/dist/wallet/providers/internal.js.map +1 -0
  86. package/dist/wallet/providers/types.d.ts +50 -0
  87. package/dist/wallet/providers/types.d.ts.map +1 -0
  88. package/dist/wallet/providers/types.js +6 -0
  89. package/dist/wallet/providers/types.js.map +1 -0
  90. package/dist/wallet/providers/yours.d.ts +18 -0
  91. package/dist/wallet/providers/yours.d.ts.map +1 -0
  92. package/dist/wallet/providers/yours.js +122 -0
  93. package/dist/wallet/providers/yours.js.map +1 -0
  94. package/dist/wallet/wallet.d.ts +52 -5
  95. package/dist/wallet/wallet.d.ts.map +1 -1
  96. package/dist/wallet/wallet.js +223 -34
  97. package/dist/wallet/wallet.js.map +1 -1
  98. package/dist/webhooks/delivery.d.ts +37 -0
  99. package/dist/webhooks/delivery.d.ts.map +1 -0
  100. package/dist/webhooks/delivery.js +182 -0
  101. package/dist/webhooks/delivery.js.map +1 -0
  102. package/dist/webhooks/webhook.d.ts +85 -0
  103. package/dist/webhooks/webhook.d.ts.map +1 -0
  104. package/dist/webhooks/webhook.js +271 -0
  105. package/dist/webhooks/webhook.js.map +1 -0
  106. package/package.json +74 -54
  107. package/sdk-python/LICENSE +21 -0
  108. package/sdk-python/MANIFEST.in +9 -0
  109. package/sdk-python/README.md +372 -0
  110. package/sdk-python/agentspay/__init__.py +97 -0
  111. package/sdk-python/agentspay/client.py +256 -0
  112. package/sdk-python/agentspay/disputes.py +174 -0
  113. package/sdk-python/agentspay/exceptions.py +53 -0
  114. package/sdk-python/agentspay/payments.py +169 -0
  115. package/sdk-python/agentspay/services.py +198 -0
  116. package/sdk-python/agentspay/types.py +154 -0
  117. package/sdk-python/agentspay/wallet.py +113 -0
  118. package/sdk-python/agentspay/webhooks.py +195 -0
  119. package/sdk-python/examples/consumer.py +147 -0
  120. package/sdk-python/examples/provider.py +116 -0
  121. package/sdk-python/pyproject.toml +61 -0
  122. package/sdk-python/setup.py +53 -0
  123. package/sdk-python/tests/test_client.py +221 -0
  124. package/test-addr.js +29 -0
  125. package/test-mnee-simple.js +51 -0
  126. 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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"}