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,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Verification Manager
|
|
4
|
+
*
|
|
5
|
+
* Handles creation, storage, and verification of execution receipts.
|
|
6
|
+
* Provides cryptographic proof of service execution.
|
|
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.VerificationManager = void 0;
|
|
13
|
+
const uuid_1 = require("uuid");
|
|
14
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
15
|
+
const db_1 = require("../registry/db");
|
|
16
|
+
class VerificationManager {
|
|
17
|
+
platformSecret;
|
|
18
|
+
constructor(platformSecret) {
|
|
19
|
+
// Use environment variable or generate deterministic secret
|
|
20
|
+
this.platformSecret = platformSecret || process.env.AGENTPAY_PLATFORM_SECRET || 'agentspay-platform-secret-change-in-production';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create an execution receipt after service execution
|
|
24
|
+
*/
|
|
25
|
+
async createReceipt(payment, input, output, executionTimeMs, providerSecret) {
|
|
26
|
+
const db = (0, db_1.getDb)();
|
|
27
|
+
const now = Date.now();
|
|
28
|
+
const receiptData = {
|
|
29
|
+
paymentId: payment.id,
|
|
30
|
+
serviceId: payment.serviceId,
|
|
31
|
+
input,
|
|
32
|
+
output,
|
|
33
|
+
timestamp: now,
|
|
34
|
+
executionTimeMs,
|
|
35
|
+
};
|
|
36
|
+
// Hash inputs and outputs
|
|
37
|
+
const inputHash = this.hashData(input);
|
|
38
|
+
const outputHash = this.hashData(output);
|
|
39
|
+
// Create receipt ID
|
|
40
|
+
const id = (0, uuid_1.v4)();
|
|
41
|
+
// Generate provider signature (if provider secret available)
|
|
42
|
+
const providerSignature = providerSecret
|
|
43
|
+
? this.signReceipt(receiptData, providerSecret)
|
|
44
|
+
: this.signReceipt(receiptData, this.platformSecret); // Fallback to platform
|
|
45
|
+
// Generate platform signature
|
|
46
|
+
const platformSignature = this.signReceipt(receiptData, this.platformSecret);
|
|
47
|
+
// Create receipt hash (hash of all fields for integrity)
|
|
48
|
+
const receiptHash = this.hashReceipt({
|
|
49
|
+
id,
|
|
50
|
+
paymentId: payment.id,
|
|
51
|
+
serviceId: payment.serviceId,
|
|
52
|
+
inputHash,
|
|
53
|
+
outputHash,
|
|
54
|
+
timestamp: now,
|
|
55
|
+
executionTimeMs,
|
|
56
|
+
providerSignature,
|
|
57
|
+
platformSignature,
|
|
58
|
+
});
|
|
59
|
+
const receipt = {
|
|
60
|
+
id,
|
|
61
|
+
paymentId: payment.id,
|
|
62
|
+
serviceId: payment.serviceId,
|
|
63
|
+
inputHash,
|
|
64
|
+
outputHash,
|
|
65
|
+
timestamp: now,
|
|
66
|
+
executionTimeMs,
|
|
67
|
+
providerSignature,
|
|
68
|
+
platformSignature,
|
|
69
|
+
receiptHash,
|
|
70
|
+
};
|
|
71
|
+
// Store in database
|
|
72
|
+
db.prepare(`
|
|
73
|
+
INSERT INTO execution_receipts (
|
|
74
|
+
id, paymentId, serviceId, inputHash, outputHash,
|
|
75
|
+
timestamp, executionTimeMs, providerSignature, platformSignature,
|
|
76
|
+
receiptHash, createdAt
|
|
77
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
78
|
+
`).run(receipt.id, receipt.paymentId, receipt.serviceId, receipt.inputHash, receipt.outputHash, receipt.timestamp, receipt.executionTimeMs, receipt.providerSignature, receipt.platformSignature, receipt.receiptHash, new Date(now).toISOString());
|
|
79
|
+
return receipt;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get receipt by payment ID
|
|
83
|
+
*/
|
|
84
|
+
getReceipt(paymentId) {
|
|
85
|
+
const db = (0, db_1.getDb)();
|
|
86
|
+
const row = db.prepare(`
|
|
87
|
+
SELECT id, paymentId, serviceId, inputHash, outputHash,
|
|
88
|
+
timestamp, executionTimeMs, providerSignature, platformSignature,
|
|
89
|
+
receiptHash, blockchainTxId, blockchainAnchoredAt
|
|
90
|
+
FROM execution_receipts
|
|
91
|
+
WHERE paymentId = ?
|
|
92
|
+
`).get(paymentId);
|
|
93
|
+
if (!row)
|
|
94
|
+
return null;
|
|
95
|
+
return {
|
|
96
|
+
id: row.id,
|
|
97
|
+
paymentId: row.paymentId,
|
|
98
|
+
serviceId: row.serviceId,
|
|
99
|
+
inputHash: row.inputHash,
|
|
100
|
+
outputHash: row.outputHash,
|
|
101
|
+
timestamp: row.timestamp,
|
|
102
|
+
executionTimeMs: row.executionTimeMs,
|
|
103
|
+
providerSignature: row.providerSignature,
|
|
104
|
+
platformSignature: row.platformSignature,
|
|
105
|
+
receiptHash: row.receiptHash,
|
|
106
|
+
blockchainTxId: row.blockchainTxId || undefined,
|
|
107
|
+
blockchainAnchoredAt: row.blockchainAnchoredAt || undefined,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Verify receipt integrity and signatures
|
|
112
|
+
*/
|
|
113
|
+
async verifyReceipt(receipt) {
|
|
114
|
+
const errors = [];
|
|
115
|
+
// 1. Verify receipt hash integrity
|
|
116
|
+
const expectedHash = this.hashReceipt({
|
|
117
|
+
id: receipt.id,
|
|
118
|
+
paymentId: receipt.paymentId,
|
|
119
|
+
serviceId: receipt.serviceId,
|
|
120
|
+
inputHash: receipt.inputHash,
|
|
121
|
+
outputHash: receipt.outputHash,
|
|
122
|
+
timestamp: receipt.timestamp,
|
|
123
|
+
executionTimeMs: receipt.executionTimeMs,
|
|
124
|
+
providerSignature: receipt.providerSignature,
|
|
125
|
+
platformSignature: receipt.platformSignature,
|
|
126
|
+
});
|
|
127
|
+
if (expectedHash !== receipt.receiptHash) {
|
|
128
|
+
errors.push('Receipt hash mismatch - data has been tampered');
|
|
129
|
+
}
|
|
130
|
+
// 2. Verify platform signature
|
|
131
|
+
const receiptData = {
|
|
132
|
+
paymentId: receipt.paymentId,
|
|
133
|
+
serviceId: receipt.serviceId,
|
|
134
|
+
input: {}, // We don't store raw input, only hash
|
|
135
|
+
output: {},
|
|
136
|
+
timestamp: receipt.timestamp,
|
|
137
|
+
executionTimeMs: receipt.executionTimeMs,
|
|
138
|
+
};
|
|
139
|
+
const expectedPlatformSig = this.signReceipt(receiptData, this.platformSecret);
|
|
140
|
+
if (expectedPlatformSig !== receipt.platformSignature) {
|
|
141
|
+
errors.push('Platform signature invalid');
|
|
142
|
+
}
|
|
143
|
+
// 3. Check if exists in database
|
|
144
|
+
const stored = this.getReceipt(receipt.paymentId);
|
|
145
|
+
if (!stored) {
|
|
146
|
+
errors.push('Receipt not found in database');
|
|
147
|
+
}
|
|
148
|
+
else if (stored.receiptHash !== receipt.receiptHash) {
|
|
149
|
+
errors.push('Receipt does not match stored version');
|
|
150
|
+
}
|
|
151
|
+
// 4. Optional: Verify blockchain anchor
|
|
152
|
+
let blockchainVerified = false;
|
|
153
|
+
if (receipt.blockchainTxId) {
|
|
154
|
+
// TODO: Implement blockchain verification via WhatsOnChain API
|
|
155
|
+
// For now, just flag as anchored
|
|
156
|
+
blockchainVerified = true;
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
valid: errors.length === 0,
|
|
160
|
+
errors,
|
|
161
|
+
receipt,
|
|
162
|
+
blockchainVerified,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Update receipt with blockchain anchor
|
|
167
|
+
*/
|
|
168
|
+
async anchorToBlockchain(receiptHash, txId) {
|
|
169
|
+
const db = (0, db_1.getDb)();
|
|
170
|
+
const now = new Date().toISOString();
|
|
171
|
+
db.prepare(`
|
|
172
|
+
UPDATE execution_receipts
|
|
173
|
+
SET blockchainTxId = ?, blockchainAnchoredAt = ?
|
|
174
|
+
WHERE receiptHash = ?
|
|
175
|
+
`).run(txId, now, receiptHash);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Hash arbitrary data (for inputs/outputs)
|
|
179
|
+
*/
|
|
180
|
+
hashData(data) {
|
|
181
|
+
const json = JSON.stringify(data, Object.keys(data).sort()); // Deterministic
|
|
182
|
+
return crypto_1.default.createHash('sha256').update(json).digest('hex');
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Hash receipt fields for integrity check
|
|
186
|
+
*/
|
|
187
|
+
hashReceipt(fields) {
|
|
188
|
+
const canonical = JSON.stringify({
|
|
189
|
+
id: fields.id,
|
|
190
|
+
paymentId: fields.paymentId,
|
|
191
|
+
serviceId: fields.serviceId,
|
|
192
|
+
inputHash: fields.inputHash,
|
|
193
|
+
outputHash: fields.outputHash,
|
|
194
|
+
timestamp: fields.timestamp,
|
|
195
|
+
executionTimeMs: fields.executionTimeMs,
|
|
196
|
+
providerSignature: fields.providerSignature,
|
|
197
|
+
platformSignature: fields.platformSignature,
|
|
198
|
+
});
|
|
199
|
+
return crypto_1.default.createHash('sha256').update(canonical).digest('hex');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Sign receipt data with HMAC-SHA256
|
|
203
|
+
*/
|
|
204
|
+
signReceipt(data, secret) {
|
|
205
|
+
const canonical = JSON.stringify({
|
|
206
|
+
paymentId: data.paymentId,
|
|
207
|
+
serviceId: data.serviceId,
|
|
208
|
+
inputHash: this.hashData(data.input),
|
|
209
|
+
outputHash: this.hashData(data.output),
|
|
210
|
+
timestamp: data.timestamp,
|
|
211
|
+
executionTimeMs: data.executionTimeMs,
|
|
212
|
+
});
|
|
213
|
+
return crypto_1.default.createHmac('sha256', secret).update(canonical).digest('hex');
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.VerificationManager = VerificationManager;
|
|
217
|
+
//# sourceMappingURL=verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/verification/verification.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wallet Provider Manager
|
|
3
|
+
*
|
|
4
|
+
* Central coordinator for all wallet providers.
|
|
5
|
+
* Handles provider selection, switching, and delegation.
|
|
6
|
+
*/
|
|
7
|
+
import type { WalletProvider, WalletProviderType, WalletConnection, SignedTransaction, TransactionRequest, WalletProviderMetadata } from './providers/types';
|
|
8
|
+
export declare class ProviderManager {
|
|
9
|
+
private providers;
|
|
10
|
+
constructor();
|
|
11
|
+
getProvider(type: WalletProviderType): WalletProvider;
|
|
12
|
+
getWalletProvider(walletId: string): WalletProvider;
|
|
13
|
+
getProviderMetadata(walletId: string): WalletProviderMetadata | null;
|
|
14
|
+
connect(type: WalletProviderType, params?: any): Promise<WalletConnection>;
|
|
15
|
+
getBalance(walletId: string): Promise<number>;
|
|
16
|
+
signTransaction(walletId: string, txReq: TransactionRequest): Promise<SignedTransaction>;
|
|
17
|
+
getAddress(walletId: string): Promise<string>;
|
|
18
|
+
disconnect(walletId: string): Promise<void>;
|
|
19
|
+
getWalletInfo(walletId: string): Promise<{
|
|
20
|
+
wallet: any;
|
|
21
|
+
provider: WalletProviderMetadata | null;
|
|
22
|
+
balance: number;
|
|
23
|
+
}>;
|
|
24
|
+
listProviders(): Array<{
|
|
25
|
+
type: WalletProviderType;
|
|
26
|
+
name: string;
|
|
27
|
+
description: string;
|
|
28
|
+
}>;
|
|
29
|
+
switchProvider(walletId: string, newType: WalletProviderType, params?: any): Promise<WalletConnection>;
|
|
30
|
+
}
|
|
31
|
+
export declare function getProviderManager(): ProviderManager;
|
|
32
|
+
//# sourceMappingURL=providerManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerManager.d.ts","sourceRoot":"","sources":["../../src/wallet/providerManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,mBAAmB,CAAA;AAE1B,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAyC;;IAS1D,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc;IAQrD,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAQnD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI;IAiB9D,OAAO,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAK1E,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7C,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKxF,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7C,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7C,MAAM,EAAE,GAAG,CAAA;QACX,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAA;QACvC,OAAO,EAAE,MAAM,CAAA;KAChB,CAAC;IAkBF,aAAa,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,kBAAkB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBjF,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAK7G;AAID,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Wallet Provider Manager
|
|
4
|
+
*
|
|
5
|
+
* Central coordinator for all wallet providers.
|
|
6
|
+
* Handles provider selection, switching, and delegation.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ProviderManager = void 0;
|
|
10
|
+
exports.getProviderManager = getProviderManager;
|
|
11
|
+
const db_1 = require("../registry/db");
|
|
12
|
+
const internal_1 = require("./providers/internal");
|
|
13
|
+
const handcash_1 = require("./providers/handcash");
|
|
14
|
+
const yours_1 = require("./providers/yours");
|
|
15
|
+
class ProviderManager {
|
|
16
|
+
providers;
|
|
17
|
+
constructor() {
|
|
18
|
+
this.providers = new Map();
|
|
19
|
+
this.providers.set('internal', new internal_1.InternalWalletProvider());
|
|
20
|
+
this.providers.set('handcash', new handcash_1.HandCashWalletProvider());
|
|
21
|
+
this.providers.set('yours', new yours_1.YoursWalletProvider());
|
|
22
|
+
}
|
|
23
|
+
getProvider(type) {
|
|
24
|
+
const provider = this.providers.get(type);
|
|
25
|
+
if (!provider) {
|
|
26
|
+
throw new Error(`Unknown provider type: ${type}`);
|
|
27
|
+
}
|
|
28
|
+
return provider;
|
|
29
|
+
}
|
|
30
|
+
getWalletProvider(walletId) {
|
|
31
|
+
const metadata = this.getProviderMetadata(walletId);
|
|
32
|
+
if (!metadata) {
|
|
33
|
+
return this.getProvider('internal');
|
|
34
|
+
}
|
|
35
|
+
return this.getProvider(metadata.providerType);
|
|
36
|
+
}
|
|
37
|
+
getProviderMetadata(walletId) {
|
|
38
|
+
const db = (0, db_1.getDb)();
|
|
39
|
+
db.exec(`
|
|
40
|
+
CREATE TABLE IF NOT EXISTS wallet_providers (
|
|
41
|
+
walletId TEXT PRIMARY KEY,
|
|
42
|
+
providerType TEXT NOT NULL,
|
|
43
|
+
providerData TEXT NOT NULL,
|
|
44
|
+
createdAt TEXT NOT NULL,
|
|
45
|
+
lastUsed TEXT
|
|
46
|
+
)
|
|
47
|
+
`);
|
|
48
|
+
const row = db.prepare('SELECT * FROM wallet_providers WHERE walletId = ?').get(walletId);
|
|
49
|
+
return row || null;
|
|
50
|
+
}
|
|
51
|
+
async connect(type, params) {
|
|
52
|
+
const provider = this.getProvider(type);
|
|
53
|
+
return provider.connect(params);
|
|
54
|
+
}
|
|
55
|
+
async getBalance(walletId) {
|
|
56
|
+
const provider = this.getWalletProvider(walletId);
|
|
57
|
+
return provider.getBalance(walletId);
|
|
58
|
+
}
|
|
59
|
+
async signTransaction(walletId, txReq) {
|
|
60
|
+
const provider = this.getWalletProvider(walletId);
|
|
61
|
+
return provider.signTransaction(walletId, txReq);
|
|
62
|
+
}
|
|
63
|
+
async getAddress(walletId) {
|
|
64
|
+
const provider = this.getWalletProvider(walletId);
|
|
65
|
+
return provider.getAddress(walletId);
|
|
66
|
+
}
|
|
67
|
+
async disconnect(walletId) {
|
|
68
|
+
const provider = this.getWalletProvider(walletId);
|
|
69
|
+
await provider.disconnect(walletId);
|
|
70
|
+
}
|
|
71
|
+
async getWalletInfo(walletId) {
|
|
72
|
+
const db = (0, db_1.getDb)();
|
|
73
|
+
const wallet = db.prepare('SELECT id, publicKey, address, createdAt FROM wallets WHERE id = ?').get(walletId);
|
|
74
|
+
if (!wallet) {
|
|
75
|
+
throw new Error('Wallet not found');
|
|
76
|
+
}
|
|
77
|
+
const provider = this.getProviderMetadata(walletId);
|
|
78
|
+
const balance = await this.getBalance(walletId);
|
|
79
|
+
return {
|
|
80
|
+
wallet,
|
|
81
|
+
provider,
|
|
82
|
+
balance,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
listProviders() {
|
|
86
|
+
return [
|
|
87
|
+
{
|
|
88
|
+
type: 'internal',
|
|
89
|
+
name: 'Internal Wallet',
|
|
90
|
+
description: 'Private key stored on server (encrypted). For development only.',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
type: 'handcash',
|
|
94
|
+
name: 'HandCash',
|
|
95
|
+
description: 'Connect your HandCash wallet. Private keys never leave HandCash.',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
type: 'yours',
|
|
99
|
+
name: 'Yours Wallet',
|
|
100
|
+
description: 'Use Yours Wallet browser extension. Sign transactions locally.',
|
|
101
|
+
},
|
|
102
|
+
];
|
|
103
|
+
}
|
|
104
|
+
async switchProvider(walletId, newType, params) {
|
|
105
|
+
await this.disconnect(walletId);
|
|
106
|
+
const provider = this.getProvider(newType);
|
|
107
|
+
return provider.connect(params);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.ProviderManager = ProviderManager;
|
|
111
|
+
let providerManager = null;
|
|
112
|
+
function getProviderManager() {
|
|
113
|
+
if (!providerManager) {
|
|
114
|
+
providerManager = new ProviderManager();
|
|
115
|
+
}
|
|
116
|
+
return providerManager;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=providerManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerManager.js","sourceRoot":"","sources":["../../src/wallet/providerManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HandCash Connect Provider
|
|
3
|
+
*/
|
|
4
|
+
import type { WalletProvider, WalletConnection, SignedTransaction, TransactionRequest, HandCashConnectParams } from './types';
|
|
5
|
+
export declare class HandCashWalletProvider implements WalletProvider {
|
|
6
|
+
type: "handcash";
|
|
7
|
+
private appId;
|
|
8
|
+
private appSecret;
|
|
9
|
+
private redirectUrl;
|
|
10
|
+
constructor();
|
|
11
|
+
getAuthorizationUrl(): string;
|
|
12
|
+
connect(params?: HandCashConnectParams): Promise<WalletConnection>;
|
|
13
|
+
getBalance(walletId: string): Promise<number>;
|
|
14
|
+
signTransaction(walletId: string, txReq: TransactionRequest): Promise<SignedTransaction>;
|
|
15
|
+
getAddress(walletId: string): Promise<string>;
|
|
16
|
+
disconnect(walletId: string): Promise<void>;
|
|
17
|
+
private storeProviderMetadata;
|
|
18
|
+
private updateProviderMetadata;
|
|
19
|
+
private getProviderMetadata;
|
|
20
|
+
private updateLastUsed;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=handcash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handcash.d.ts","sourceRoot":"","sources":["../../../src/wallet/providers/handcash.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAShB,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,IAAI,EAAG,UAAU,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,WAAW,CAAQ;;IAQ3B,mBAAmB,IAAI,MAAM;IAavB,OAAO,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoFlE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB7C,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+CxF,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ7C,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,cAAc;CAIvB"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HandCash Connect Provider
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HandCashWalletProvider = void 0;
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
const db_1 = require("../../registry/db");
|
|
9
|
+
const config_1 = require("../../config");
|
|
10
|
+
let HandCashConnect = null;
|
|
11
|
+
try {
|
|
12
|
+
HandCashConnect = require('@handcash/handcash-connect').HandCashConnect;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
console.warn('⚠️ HandCash Connect SDK not installed. HandCash provider will use mock mode.');
|
|
16
|
+
}
|
|
17
|
+
class HandCashWalletProvider {
|
|
18
|
+
type = 'handcash';
|
|
19
|
+
appId;
|
|
20
|
+
appSecret;
|
|
21
|
+
redirectUrl;
|
|
22
|
+
constructor() {
|
|
23
|
+
this.appId = process.env.HANDCASH_APP_ID || 'demo-app-id';
|
|
24
|
+
this.appSecret = process.env.HANDCASH_APP_SECRET || 'demo-app-secret';
|
|
25
|
+
this.redirectUrl = process.env.HANDCASH_REDIRECT_URL || 'http://localhost:3100/api/wallets/connect/handcash/callback';
|
|
26
|
+
}
|
|
27
|
+
getAuthorizationUrl() {
|
|
28
|
+
if (!HandCashConnect || config_1.config.demoMode) {
|
|
29
|
+
return 'https://demo-handcash-auth-url.com';
|
|
30
|
+
}
|
|
31
|
+
const handCashConnect = new HandCashConnect({
|
|
32
|
+
appId: this.appId,
|
|
33
|
+
appSecret: this.appSecret,
|
|
34
|
+
});
|
|
35
|
+
return handCashConnect.getRedirectionUrl();
|
|
36
|
+
}
|
|
37
|
+
async connect(params) {
|
|
38
|
+
if (!params?.authToken) {
|
|
39
|
+
throw new Error('HandCash auth token required');
|
|
40
|
+
}
|
|
41
|
+
const db = (0, db_1.getDb)();
|
|
42
|
+
const id = (0, uuid_1.v4)();
|
|
43
|
+
if (!HandCashConnect || config_1.config.demoMode) {
|
|
44
|
+
const mockConnection = {
|
|
45
|
+
walletId: id,
|
|
46
|
+
address: '1MockHandCashAddress' + Math.random().toString(36).slice(2, 8),
|
|
47
|
+
paymail: 'demo@handcash.io',
|
|
48
|
+
displayName: 'Demo HandCash User',
|
|
49
|
+
providerType: 'handcash',
|
|
50
|
+
};
|
|
51
|
+
this.storeProviderMetadata(id, {
|
|
52
|
+
authToken: params.authToken,
|
|
53
|
+
paymail: mockConnection.paymail,
|
|
54
|
+
displayName: mockConnection.displayName,
|
|
55
|
+
});
|
|
56
|
+
db.prepare(`
|
|
57
|
+
INSERT INTO wallets (id, publicKey, address, privateKey, createdAt)
|
|
58
|
+
VALUES (?, ?, ?, ?, ?)
|
|
59
|
+
`).run(id, '', mockConnection.paymail, '', new Date().toISOString());
|
|
60
|
+
return mockConnection;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const handCashConnect = new HandCashConnect({
|
|
64
|
+
appId: this.appId,
|
|
65
|
+
appSecret: this.appSecret,
|
|
66
|
+
});
|
|
67
|
+
const account = handCashConnect.getAccountFromAuthToken(params.authToken);
|
|
68
|
+
const profile = await account.profile.getCurrentProfile();
|
|
69
|
+
const existing = db.prepare('SELECT id FROM wallet_providers WHERE providerData LIKE ?')
|
|
70
|
+
.get(`%"paymail":"${profile.paymail}"%`);
|
|
71
|
+
if (existing) {
|
|
72
|
+
this.updateProviderMetadata(existing.id, {
|
|
73
|
+
authToken: params.authToken,
|
|
74
|
+
paymail: profile.paymail,
|
|
75
|
+
displayName: profile.displayName,
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
walletId: existing.id,
|
|
79
|
+
address: profile.paymail,
|
|
80
|
+
paymail: profile.paymail,
|
|
81
|
+
displayName: profile.displayName,
|
|
82
|
+
providerType: 'handcash',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const createdAt = new Date().toISOString();
|
|
86
|
+
db.prepare(`
|
|
87
|
+
INSERT INTO wallets (id, publicKey, address, privateKey, createdAt)
|
|
88
|
+
VALUES (?, ?, ?, ?, ?)
|
|
89
|
+
`).run(id, '', profile.paymail, '', createdAt);
|
|
90
|
+
this.storeProviderMetadata(id, {
|
|
91
|
+
authToken: params.authToken,
|
|
92
|
+
paymail: profile.paymail,
|
|
93
|
+
displayName: profile.displayName,
|
|
94
|
+
handle: profile.handle,
|
|
95
|
+
});
|
|
96
|
+
return {
|
|
97
|
+
walletId: id,
|
|
98
|
+
address: profile.paymail,
|
|
99
|
+
paymail: profile.paymail,
|
|
100
|
+
displayName: profile.displayName,
|
|
101
|
+
providerType: 'handcash',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
throw new Error(`HandCash connection failed: ${error.message}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async getBalance(walletId) {
|
|
109
|
+
if (!HandCashConnect || config_1.config.demoMode) {
|
|
110
|
+
return 100000;
|
|
111
|
+
}
|
|
112
|
+
const metadata = this.getProviderMetadata(walletId);
|
|
113
|
+
if (!metadata)
|
|
114
|
+
throw new Error('HandCash wallet not found');
|
|
115
|
+
const data = JSON.parse(metadata.providerData);
|
|
116
|
+
try {
|
|
117
|
+
const handCashConnect = new HandCashConnect({
|
|
118
|
+
appId: this.appId,
|
|
119
|
+
appSecret: this.appSecret,
|
|
120
|
+
});
|
|
121
|
+
const account = handCashConnect.getAccountFromAuthToken(data.authToken);
|
|
122
|
+
const balanceBsv = await account.wallet.getSpendableBalance('BSV');
|
|
123
|
+
return Math.floor(balanceBsv * 100000000);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
throw new Error(`Failed to fetch HandCash balance: ${error.message}`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async signTransaction(walletId, txReq) {
|
|
130
|
+
if (!HandCashConnect || config_1.config.demoMode) {
|
|
131
|
+
return {
|
|
132
|
+
txHex: '0100000001...' + Math.random().toString(36),
|
|
133
|
+
txId: 'mock-handcash-tx-' + (0, uuid_1.v4)(),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
const metadata = this.getProviderMetadata(walletId);
|
|
137
|
+
if (!metadata)
|
|
138
|
+
throw new Error('HandCash wallet not found');
|
|
139
|
+
const data = JSON.parse(metadata.providerData);
|
|
140
|
+
try {
|
|
141
|
+
const handCashConnect = new HandCashConnect({
|
|
142
|
+
appId: this.appId,
|
|
143
|
+
appSecret: this.appSecret,
|
|
144
|
+
});
|
|
145
|
+
const account = handCashConnect.getAccountFromAuthToken(data.authToken);
|
|
146
|
+
const payments = txReq.recipients.map(r => ({
|
|
147
|
+
destination: r.address,
|
|
148
|
+
currencyCode: 'SAT',
|
|
149
|
+
sendAmount: r.amount,
|
|
150
|
+
}));
|
|
151
|
+
const attachment = txReq.data && txReq.data.length > 0
|
|
152
|
+
? { data: txReq.data.join(' ') }
|
|
153
|
+
: undefined;
|
|
154
|
+
const paymentResult = await account.wallet.pay({
|
|
155
|
+
payments,
|
|
156
|
+
attachment,
|
|
157
|
+
});
|
|
158
|
+
this.updateLastUsed(walletId);
|
|
159
|
+
return {
|
|
160
|
+
txHex: paymentResult.rawTransactionHex || '',
|
|
161
|
+
txId: paymentResult.transactionId,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
throw new Error(`HandCash payment failed: ${error.message}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async getAddress(walletId) {
|
|
169
|
+
const metadata = this.getProviderMetadata(walletId);
|
|
170
|
+
if (!metadata)
|
|
171
|
+
throw new Error('HandCash wallet not found');
|
|
172
|
+
const data = JSON.parse(metadata.providerData);
|
|
173
|
+
return data.paymail;
|
|
174
|
+
}
|
|
175
|
+
async disconnect(walletId) {
|
|
176
|
+
const db = (0, db_1.getDb)();
|
|
177
|
+
db.prepare('DELETE FROM wallet_providers WHERE walletId = ?').run(walletId);
|
|
178
|
+
}
|
|
179
|
+
storeProviderMetadata(walletId, data) {
|
|
180
|
+
const db = (0, db_1.getDb)();
|
|
181
|
+
db.exec(`
|
|
182
|
+
CREATE TABLE IF NOT EXISTS wallet_providers (
|
|
183
|
+
walletId TEXT PRIMARY KEY,
|
|
184
|
+
providerType TEXT NOT NULL,
|
|
185
|
+
providerData TEXT NOT NULL,
|
|
186
|
+
createdAt TEXT NOT NULL,
|
|
187
|
+
lastUsed TEXT
|
|
188
|
+
)
|
|
189
|
+
`);
|
|
190
|
+
db.prepare(`
|
|
191
|
+
INSERT OR REPLACE INTO wallet_providers (walletId, providerType, providerData, createdAt, lastUsed)
|
|
192
|
+
VALUES (?, ?, ?, datetime('now'), datetime('now'))
|
|
193
|
+
`).run(walletId, 'handcash', JSON.stringify(data));
|
|
194
|
+
}
|
|
195
|
+
updateProviderMetadata(walletId, data) {
|
|
196
|
+
const db = (0, db_1.getDb)();
|
|
197
|
+
db.prepare(`
|
|
198
|
+
UPDATE wallet_providers
|
|
199
|
+
SET providerData = ?, lastUsed = datetime('now')
|
|
200
|
+
WHERE walletId = ?
|
|
201
|
+
`).run(JSON.stringify(data), walletId);
|
|
202
|
+
}
|
|
203
|
+
getProviderMetadata(walletId) {
|
|
204
|
+
const db = (0, db_1.getDb)();
|
|
205
|
+
return db.prepare('SELECT * FROM wallet_providers WHERE walletId = ? AND providerType = ?')
|
|
206
|
+
.get(walletId, 'handcash');
|
|
207
|
+
}
|
|
208
|
+
updateLastUsed(walletId) {
|
|
209
|
+
const db = (0, db_1.getDb)();
|
|
210
|
+
db.prepare(`UPDATE wallet_providers SET lastUsed = datetime('now') WHERE walletId = ?`).run(walletId);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
exports.HandCashWalletProvider = HandCashWalletProvider;
|
|
214
|
+
//# sourceMappingURL=handcash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handcash.js","sourceRoot":"","sources":["../../../src/wallet/providers/handcash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal Wallet Provider
|
|
3
|
+
*/
|
|
4
|
+
import type { WalletProvider, WalletConnection, SignedTransaction, TransactionRequest, InternalConnectParams } from './types';
|
|
5
|
+
export declare class InternalWalletProvider implements WalletProvider {
|
|
6
|
+
type: "internal";
|
|
7
|
+
connect(params?: InternalConnectParams): Promise<WalletConnection>;
|
|
8
|
+
getBalance(walletId: string): Promise<number>;
|
|
9
|
+
signTransaction(walletId: string, txReq: TransactionRequest): Promise<SignedTransaction>;
|
|
10
|
+
getAddress(walletId: string): Promise<string>;
|
|
11
|
+
disconnect(_walletId: string): Promise<void>;
|
|
12
|
+
private getInternalBalance;
|
|
13
|
+
private storeProviderMetadata;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/wallet/providers/internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,SAAS,CAAA;AAGhB,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,IAAI,EAAG,UAAU,CAAS;IAEpB,OAAO,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyClE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkB7C,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6ExF,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO7C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,qBAAqB;CAkB9B"}
|