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
package/dist/registry/db.js
CHANGED
|
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.getDb = getDb;
|
|
7
7
|
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const
|
|
10
|
-
const __dirname2 = path_1.default.dirname(__filename2);
|
|
11
|
-
const DB_PATH = process.env.AGENTPAY_DB || path_1.default.join(__dirname2, '../../data/agentpay.db');
|
|
9
|
+
const DB_PATH = process.env.AGENTPAY_DB || path_1.default.join(process.cwd(), 'data', 'agentpay.db');
|
|
12
10
|
let db;
|
|
13
11
|
function getDb() {
|
|
14
12
|
if (!db) {
|
|
@@ -25,6 +23,8 @@ function initSchema(db) {
|
|
|
25
23
|
id TEXT PRIMARY KEY,
|
|
26
24
|
publicKey TEXT NOT NULL,
|
|
27
25
|
address TEXT NOT NULL UNIQUE,
|
|
26
|
+
privateKey TEXT,
|
|
27
|
+
apiKeyHash TEXT,
|
|
28
28
|
createdAt TEXT NOT NULL DEFAULT (datetime('now'))
|
|
29
29
|
);
|
|
30
30
|
|
|
@@ -35,11 +35,14 @@ function initSchema(db) {
|
|
|
35
35
|
description TEXT NOT NULL,
|
|
36
36
|
category TEXT NOT NULL DEFAULT 'general',
|
|
37
37
|
price INTEGER NOT NULL,
|
|
38
|
+
currency TEXT NOT NULL DEFAULT 'BSV',
|
|
38
39
|
endpoint TEXT NOT NULL,
|
|
39
40
|
method TEXT NOT NULL DEFAULT 'POST',
|
|
40
41
|
inputSchema TEXT,
|
|
41
42
|
outputSchema TEXT,
|
|
42
43
|
active INTEGER NOT NULL DEFAULT 1,
|
|
44
|
+
timeout INTEGER NOT NULL DEFAULT 30,
|
|
45
|
+
disputeWindow INTEGER NOT NULL DEFAULT 30,
|
|
43
46
|
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
44
47
|
updatedAt TEXT NOT NULL DEFAULT (datetime('now'))
|
|
45
48
|
);
|
|
@@ -51,12 +54,43 @@ function initSchema(db) {
|
|
|
51
54
|
sellerWalletId TEXT NOT NULL REFERENCES wallets(id),
|
|
52
55
|
amount INTEGER NOT NULL,
|
|
53
56
|
platformFee INTEGER NOT NULL,
|
|
57
|
+
currency TEXT NOT NULL DEFAULT 'BSV',
|
|
54
58
|
status TEXT NOT NULL DEFAULT 'pending',
|
|
59
|
+
disputeStatus TEXT,
|
|
55
60
|
txId TEXT,
|
|
61
|
+
escrowTxId TEXT,
|
|
62
|
+
releaseTxId TEXT,
|
|
56
63
|
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
57
64
|
completedAt TEXT
|
|
58
65
|
);
|
|
59
66
|
|
|
67
|
+
CREATE TABLE IF NOT EXISTS disputes (
|
|
68
|
+
id TEXT PRIMARY KEY,
|
|
69
|
+
paymentId TEXT NOT NULL UNIQUE REFERENCES payments(id),
|
|
70
|
+
buyerWalletId TEXT NOT NULL REFERENCES wallets(id),
|
|
71
|
+
providerWalletId TEXT NOT NULL REFERENCES wallets(id),
|
|
72
|
+
reason TEXT NOT NULL,
|
|
73
|
+
evidence TEXT,
|
|
74
|
+
status TEXT NOT NULL DEFAULT 'open',
|
|
75
|
+
resolution TEXT,
|
|
76
|
+
splitPercent INTEGER,
|
|
77
|
+
resolvedAt TEXT,
|
|
78
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now'))
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
CREATE TABLE IF NOT EXISTS utxos (
|
|
82
|
+
id TEXT PRIMARY KEY,
|
|
83
|
+
walletId TEXT NOT NULL REFERENCES wallets(id),
|
|
84
|
+
txid TEXT NOT NULL,
|
|
85
|
+
vout INTEGER NOT NULL,
|
|
86
|
+
amount INTEGER NOT NULL,
|
|
87
|
+
script TEXT NOT NULL,
|
|
88
|
+
spent INTEGER NOT NULL DEFAULT 0,
|
|
89
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
90
|
+
spentAt TEXT,
|
|
91
|
+
UNIQUE(txid, vout)
|
|
92
|
+
);
|
|
93
|
+
|
|
60
94
|
CREATE TABLE IF NOT EXISTS ratings (
|
|
61
95
|
id TEXT PRIMARY KEY,
|
|
62
96
|
paymentId TEXT NOT NULL UNIQUE REFERENCES payments(id),
|
|
@@ -72,6 +106,79 @@ function initSchema(db) {
|
|
|
72
106
|
CREATE INDEX IF NOT EXISTS idx_payments_status ON payments(status);
|
|
73
107
|
CREATE INDEX IF NOT EXISTS idx_payments_buyer ON payments(buyerWalletId);
|
|
74
108
|
CREATE INDEX IF NOT EXISTS idx_payments_seller ON payments(sellerWalletId);
|
|
109
|
+
CREATE INDEX IF NOT EXISTS idx_payments_dispute_status ON payments(disputeStatus);
|
|
110
|
+
CREATE INDEX IF NOT EXISTS idx_disputes_payment ON disputes(paymentId);
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_disputes_buyer ON disputes(buyerWalletId);
|
|
112
|
+
CREATE INDEX IF NOT EXISTS idx_disputes_provider ON disputes(providerWalletId);
|
|
113
|
+
CREATE INDEX IF NOT EXISTS idx_disputes_status ON disputes(status);
|
|
114
|
+
CREATE INDEX IF NOT EXISTS idx_utxos_wallet ON utxos(walletId);
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_utxos_spent ON utxos(spent);
|
|
116
|
+
CREATE INDEX IF NOT EXISTS idx_utxos_txid_vout ON utxos(txid, vout);
|
|
117
|
+
|
|
118
|
+
CREATE TABLE IF NOT EXISTS webhooks (
|
|
119
|
+
id TEXT PRIMARY KEY,
|
|
120
|
+
url TEXT NOT NULL,
|
|
121
|
+
events TEXT NOT NULL,
|
|
122
|
+
secret TEXT NOT NULL,
|
|
123
|
+
active INTEGER NOT NULL DEFAULT 1,
|
|
124
|
+
ownerId TEXT REFERENCES wallets(id),
|
|
125
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now'))
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
CREATE TABLE IF NOT EXISTS webhook_deliveries (
|
|
129
|
+
id TEXT PRIMARY KEY,
|
|
130
|
+
webhookId TEXT NOT NULL REFERENCES webhooks(id) ON DELETE CASCADE,
|
|
131
|
+
eventType TEXT NOT NULL,
|
|
132
|
+
payload TEXT NOT NULL,
|
|
133
|
+
signature TEXT NOT NULL,
|
|
134
|
+
idempotencyKey TEXT NOT NULL UNIQUE,
|
|
135
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
136
|
+
attempts INTEGER NOT NULL DEFAULT 0,
|
|
137
|
+
lastAttemptAt TEXT,
|
|
138
|
+
nextRetryAt TEXT,
|
|
139
|
+
responseStatus INTEGER,
|
|
140
|
+
responseBody TEXT,
|
|
141
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now')),
|
|
142
|
+
completedAt TEXT
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
CREATE INDEX IF NOT EXISTS idx_webhooks_active ON webhooks(active);
|
|
146
|
+
CREATE INDEX IF NOT EXISTS idx_webhooks_owner ON webhooks(ownerId);
|
|
147
|
+
CREATE INDEX IF NOT EXISTS idx_webhook_deliveries_webhook ON webhook_deliveries(webhookId);
|
|
148
|
+
CREATE INDEX IF NOT EXISTS idx_webhook_deliveries_status ON webhook_deliveries(status);
|
|
149
|
+
CREATE INDEX IF NOT EXISTS idx_webhook_deliveries_retry ON webhook_deliveries(status, nextRetryAt);
|
|
150
|
+
|
|
151
|
+
CREATE TABLE IF NOT EXISTS execution_receipts (
|
|
152
|
+
id TEXT PRIMARY KEY,
|
|
153
|
+
paymentId TEXT NOT NULL UNIQUE REFERENCES payments(id),
|
|
154
|
+
serviceId TEXT NOT NULL REFERENCES services(id),
|
|
155
|
+
inputHash TEXT NOT NULL,
|
|
156
|
+
outputHash TEXT NOT NULL,
|
|
157
|
+
timestamp INTEGER NOT NULL,
|
|
158
|
+
executionTimeMs INTEGER NOT NULL,
|
|
159
|
+
providerSignature TEXT NOT NULL,
|
|
160
|
+
platformSignature TEXT NOT NULL,
|
|
161
|
+
receiptHash TEXT NOT NULL UNIQUE,
|
|
162
|
+
blockchainTxId TEXT,
|
|
163
|
+
blockchainAnchoredAt TEXT,
|
|
164
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now'))
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
CREATE INDEX IF NOT EXISTS idx_receipts_payment ON execution_receipts(paymentId);
|
|
168
|
+
CREATE INDEX IF NOT EXISTS idx_receipts_service ON execution_receipts(serviceId);
|
|
169
|
+
CREATE INDEX IF NOT EXISTS idx_receipts_hash ON execution_receipts(receiptHash);
|
|
170
|
+
|
|
171
|
+
-- MNEE token ledger for demo mode
|
|
172
|
+
CREATE TABLE IF NOT EXISTS mnee_ledger (
|
|
173
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
174
|
+
address TEXT NOT NULL,
|
|
175
|
+
amount INTEGER NOT NULL,
|
|
176
|
+
txid TEXT NOT NULL,
|
|
177
|
+
createdAt TEXT NOT NULL DEFAULT (datetime('now'))
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
CREATE INDEX IF NOT EXISTS idx_mnee_ledger_address ON mnee_ledger(address);
|
|
181
|
+
CREATE INDEX IF NOT EXISTS idx_mnee_ledger_txid ON mnee_ledger(txid);
|
|
75
182
|
`);
|
|
76
183
|
}
|
|
77
184
|
//# sourceMappingURL=db.js.map
|
package/dist/registry/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/registry/db.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/registry/db.ts"],"names":[],"mappings":";;;;;AAOA,sBAQC;AAfD,oEAAqC;AACrC,gDAAuB;AAEvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,CAAA;AAE1F,IAAI,EAAqB,CAAA;AAEzB,SAAgB,KAAK;IACnB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,EAAE,GAAG,IAAI,wBAAQ,CAAC,OAAO,CAAC,CAAA;QAC1B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;QAC/B,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAA;QAC9B,UAAU,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAS,UAAU,CAAC,EAAqB;IACvC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiKP,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -3,7 +3,7 @@ export declare class Registry {
|
|
|
3
3
|
register(service: Omit<Service, 'id' | 'active' | 'createdAt' | 'updatedAt'>): Service;
|
|
4
4
|
search(query: ServiceQuery): Service[];
|
|
5
5
|
getById(id: string): Service | null;
|
|
6
|
-
update(id: string, updates: Partial<Pick<Service, 'name' | 'description' | 'price' | 'endpoint' | 'active'>>): Service | null;
|
|
6
|
+
update(id: string, updates: Partial<Pick<Service, 'name' | 'description' | 'price' | 'currency' | 'endpoint' | 'active' | 'timeout' | 'disputeWindow'>>): Service | null;
|
|
7
7
|
getReputation(agentId: string): ReputationScore;
|
|
8
8
|
private rowToService;
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAGtE,qBAAa,QAAQ;IAEnB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO;IA8BtF,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,EAAE;IAgCtC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAOnC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,eAAe,CAAC,CAAC,GAAG,OAAO,GAAG,IAAI;IAgBxK,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe;IA8B/C,OAAO,CAAC,YAAY;CASrB"}
|
|
@@ -3,17 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Registry = void 0;
|
|
4
4
|
const uuid_1 = require("uuid");
|
|
5
5
|
const db_1 = require("./db");
|
|
6
|
+
const delivery_1 = require("../webhooks/delivery");
|
|
6
7
|
class Registry {
|
|
7
8
|
// Register a new service
|
|
8
9
|
register(service) {
|
|
9
10
|
const db = (0, db_1.getDb)();
|
|
10
11
|
const id = (0, uuid_1.v4)();
|
|
11
12
|
const now = new Date().toISOString();
|
|
13
|
+
const timeout = service.timeout || 30;
|
|
14
|
+
const disputeWindow = service.disputeWindow || 30;
|
|
15
|
+
const currency = service.currency || 'BSV';
|
|
12
16
|
db.prepare(`
|
|
13
|
-
INSERT INTO services (id, agentId, name, description, category, price, endpoint, method, inputSchema, outputSchema, active, createdAt, updatedAt)
|
|
14
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?)
|
|
15
|
-
`).run(id, service.agentId, service.name, service.description, service.category, service.price, service.endpoint, service.method, service.inputSchema ? JSON.stringify(service.inputSchema) : null, service.outputSchema ? JSON.stringify(service.outputSchema) : null, now, now);
|
|
16
|
-
|
|
17
|
+
INSERT INTO services (id, agentId, name, description, category, price, currency, endpoint, method, inputSchema, outputSchema, active, timeout, disputeWindow, createdAt, updatedAt)
|
|
18
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?)
|
|
19
|
+
`).run(id, service.agentId, service.name, service.description, service.category, service.price, currency, service.endpoint, service.method, service.inputSchema ? JSON.stringify(service.inputSchema) : null, service.outputSchema ? JSON.stringify(service.outputSchema) : null, timeout, disputeWindow, now, now);
|
|
20
|
+
const registeredService = { ...service, id, active: true, currency, timeout, disputeWindow, createdAt: now, updatedAt: now };
|
|
21
|
+
// Trigger webhook
|
|
22
|
+
delivery_1.webhookDelivery.trigger('service.registered', registeredService).catch(console.error);
|
|
23
|
+
return registeredService;
|
|
17
24
|
}
|
|
18
25
|
// Search/discover services
|
|
19
26
|
search(query) {
|
|
@@ -92,6 +99,7 @@ class Registry {
|
|
|
92
99
|
return {
|
|
93
100
|
...row,
|
|
94
101
|
active: !!row.active,
|
|
102
|
+
currency: row.currency || 'BSV',
|
|
95
103
|
inputSchema: row.inputSchema ? JSON.parse(row.inputSchema) : undefined,
|
|
96
104
|
outputSchema: row.outputSchema ? JSON.parse(row.outputSchema) : undefined,
|
|
97
105
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":";;;AAAA,+BAAiC;AACjC,6BAA4B;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
export type Currency = 'BSV' | 'MNEE';
|
|
1
2
|
export interface AgentWallet {
|
|
2
3
|
id: string;
|
|
3
4
|
publicKey: string;
|
|
4
5
|
address: string;
|
|
5
6
|
createdAt: string;
|
|
6
7
|
balance?: number;
|
|
8
|
+
balanceMnee?: number;
|
|
7
9
|
}
|
|
8
10
|
export interface Service {
|
|
9
11
|
id: string;
|
|
@@ -12,11 +14,14 @@ export interface Service {
|
|
|
12
14
|
description: string;
|
|
13
15
|
category: string;
|
|
14
16
|
price: number;
|
|
17
|
+
currency: Currency;
|
|
15
18
|
endpoint: string;
|
|
16
19
|
method: 'POST' | 'GET';
|
|
17
20
|
inputSchema?: object;
|
|
18
21
|
outputSchema?: object;
|
|
19
22
|
active: boolean;
|
|
23
|
+
timeout: number;
|
|
24
|
+
disputeWindow: number;
|
|
20
25
|
createdAt: string;
|
|
21
26
|
updatedAt: string;
|
|
22
27
|
}
|
|
@@ -27,7 +32,9 @@ export interface Payment {
|
|
|
27
32
|
sellerWalletId: string;
|
|
28
33
|
amount: number;
|
|
29
34
|
platformFee: number;
|
|
35
|
+
currency: Currency;
|
|
30
36
|
status: 'pending' | 'escrowed' | 'released' | 'disputed' | 'refunded';
|
|
37
|
+
disputeStatus?: string;
|
|
31
38
|
txId?: string;
|
|
32
39
|
createdAt: string;
|
|
33
40
|
completedAt?: string;
|
|
@@ -61,6 +68,33 @@ export interface ServiceQuery {
|
|
|
61
68
|
limit?: number;
|
|
62
69
|
offset?: number;
|
|
63
70
|
}
|
|
71
|
+
export interface Dispute {
|
|
72
|
+
id: string;
|
|
73
|
+
paymentId: string;
|
|
74
|
+
buyerWalletId: string;
|
|
75
|
+
providerWalletId: string;
|
|
76
|
+
reason: string;
|
|
77
|
+
evidence?: string;
|
|
78
|
+
status: 'open' | 'under_review' | 'resolved_refund' | 'resolved_release' | 'resolved_split' | 'expired';
|
|
79
|
+
resolution?: 'refund' | 'release' | 'split';
|
|
80
|
+
splitPercent?: number;
|
|
81
|
+
resolvedAt?: string;
|
|
82
|
+
createdAt: string;
|
|
83
|
+
}
|
|
84
|
+
export interface ExecutionReceipt {
|
|
85
|
+
id: string;
|
|
86
|
+
paymentId: string;
|
|
87
|
+
serviceId: string;
|
|
88
|
+
inputHash: string;
|
|
89
|
+
outputHash: string;
|
|
90
|
+
timestamp: number;
|
|
91
|
+
executionTimeMs: number;
|
|
92
|
+
providerSignature: string;
|
|
93
|
+
platformSignature: string;
|
|
94
|
+
receiptHash: string;
|
|
95
|
+
blockchainTxId?: string;
|
|
96
|
+
blockchainAnchoredAt?: string;
|
|
97
|
+
}
|
|
64
98
|
export declare const PLATFORM_FEE_RATE = 0.02;
|
|
65
99
|
export declare const MIN_PRICE_SATOSHIS = 1;
|
|
66
100
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA,sBAAsB;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";AAAA,sBAAsB;;;AA6GT,QAAA,iBAAiB,GAAG,IAAI,CAAA,CAAC,KAAK;AAC9B,QAAA,kBAAkB,GAAG,CAAC,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSRF Protection: Validate service endpoint URL
|
|
3
|
+
* Prevents Server-Side Request Forgery attacks
|
|
4
|
+
*/
|
|
5
|
+
export declare function validateServiceEndpoint(endpoint: string): Promise<{
|
|
6
|
+
valid: boolean;
|
|
7
|
+
error?: string;
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* Input Validation: Service Registration
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateServiceRegistration(data: any): {
|
|
13
|
+
valid: boolean;
|
|
14
|
+
errors: string[];
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Input Validation: Funding Amount
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateFundingAmount(amount: any): {
|
|
20
|
+
valid: boolean;
|
|
21
|
+
error?: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Sanitize search query (prevent SQL injection and DoS)
|
|
25
|
+
*/
|
|
26
|
+
export declare function sanitizeSearchQuery(query: string): string;
|
|
27
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+E3G;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,GAAG,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA+C3F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAcrF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAczD"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.validateServiceEndpoint = validateServiceEndpoint;
|
|
7
|
+
exports.validateServiceRegistration = validateServiceRegistration;
|
|
8
|
+
exports.validateFundingAmount = validateFundingAmount;
|
|
9
|
+
exports.sanitizeSearchQuery = sanitizeSearchQuery;
|
|
10
|
+
const url_1 = require("url");
|
|
11
|
+
const promises_1 = __importDefault(require("dns/promises"));
|
|
12
|
+
const config_1 = require("../config");
|
|
13
|
+
const VALID_CATEGORIES = ['ai', 'data', 'compute', 'storage', 'analytics', 'other'];
|
|
14
|
+
/**
|
|
15
|
+
* SSRF Protection: Validate service endpoint URL
|
|
16
|
+
* Prevents Server-Side Request Forgery attacks
|
|
17
|
+
*/
|
|
18
|
+
async function validateServiceEndpoint(endpoint) {
|
|
19
|
+
try {
|
|
20
|
+
const url = new url_1.URL(endpoint);
|
|
21
|
+
// 1. Protocol validation
|
|
22
|
+
if (!['http:', 'https:'].includes(url.protocol)) {
|
|
23
|
+
return { valid: false, error: 'Only HTTP/HTTPS protocols allowed' };
|
|
24
|
+
}
|
|
25
|
+
// 2. Require HTTPS in production (allow HTTP localhost in demo mode)
|
|
26
|
+
if (!config_1.config.demoMode && url.protocol !== 'https:') {
|
|
27
|
+
return { valid: false, error: 'HTTPS required in production' };
|
|
28
|
+
}
|
|
29
|
+
// 3. Block private IP ranges and localhost in production
|
|
30
|
+
const privateIpPatterns = [
|
|
31
|
+
/^127\./, // Loopback
|
|
32
|
+
/^10\./, // Private class A
|
|
33
|
+
/^172\.(1[6-9]|2[0-9]|3[0-1])\./, // Private class B
|
|
34
|
+
/^192\.168\./, // Private class C
|
|
35
|
+
/^169\.254\./, // Link-local (AWS metadata)
|
|
36
|
+
/^::1$/, // IPv6 loopback
|
|
37
|
+
/^fc00:/, // IPv6 private
|
|
38
|
+
/^fe80:/, // IPv6 link-local
|
|
39
|
+
];
|
|
40
|
+
// In production, block localhost and private IPs
|
|
41
|
+
if (!config_1.config.demoMode) {
|
|
42
|
+
if (url.hostname === 'localhost' || url.hostname === '127.0.0.1' || url.hostname === '::1') {
|
|
43
|
+
return { valid: false, error: 'Localhost not allowed in production' };
|
|
44
|
+
}
|
|
45
|
+
if (privateIpPatterns.some(pattern => pattern.test(url.hostname))) {
|
|
46
|
+
return { valid: false, error: 'Private IP addresses not allowed' };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// 4. Block cloud metadata endpoints
|
|
50
|
+
const blockedHosts = [
|
|
51
|
+
'169.254.169.254', // AWS/Azure metadata
|
|
52
|
+
'metadata.google.internal', // GCP metadata
|
|
53
|
+
'metadata',
|
|
54
|
+
];
|
|
55
|
+
if (blockedHosts.includes(url.hostname.toLowerCase())) {
|
|
56
|
+
return { valid: false, error: 'Metadata endpoints not allowed' };
|
|
57
|
+
}
|
|
58
|
+
// 5. DNS resolution check (prevent DNS rebinding) - only in production
|
|
59
|
+
if (!config_1.config.demoMode) {
|
|
60
|
+
try {
|
|
61
|
+
const addresses = await promises_1.default.resolve4(url.hostname);
|
|
62
|
+
for (const addr of addresses) {
|
|
63
|
+
if (privateIpPatterns.some(pattern => pattern.test(addr))) {
|
|
64
|
+
return { valid: false, error: 'Hostname resolves to private IP' };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (dnsError) {
|
|
69
|
+
// If DNS resolution fails, block the request in production
|
|
70
|
+
return { valid: false, error: 'Could not resolve hostname' };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// 6. Port restrictions (block common internal services)
|
|
74
|
+
const blockedPorts = [22, 23, 25, 3306, 5432, 6379, 27017]; // SSH, Telnet, SMTP, MySQL, PostgreSQL, Redis, MongoDB
|
|
75
|
+
if (url.port && blockedPorts.includes(parseInt(url.port))) {
|
|
76
|
+
return { valid: false, error: 'Port not allowed' };
|
|
77
|
+
}
|
|
78
|
+
// 7. URL length check
|
|
79
|
+
if (endpoint.length > 500) {
|
|
80
|
+
return { valid: false, error: 'Endpoint URL too long (max 500 characters)' };
|
|
81
|
+
}
|
|
82
|
+
return { valid: true };
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
return { valid: false, error: 'Invalid URL' };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Input Validation: Service Registration
|
|
90
|
+
*/
|
|
91
|
+
function validateServiceRegistration(data) {
|
|
92
|
+
const errors = [];
|
|
93
|
+
// Name validation
|
|
94
|
+
if (!data.name || typeof data.name !== 'string') {
|
|
95
|
+
errors.push('Name is required');
|
|
96
|
+
}
|
|
97
|
+
else if (data.name.length < 3 || data.name.length > 200) {
|
|
98
|
+
errors.push('Name must be 3-200 characters');
|
|
99
|
+
}
|
|
100
|
+
// Description validation
|
|
101
|
+
if (!data.description || typeof data.description !== 'string') {
|
|
102
|
+
errors.push('Description is required');
|
|
103
|
+
}
|
|
104
|
+
else if (data.description.length < 10 || data.description.length > 2000) {
|
|
105
|
+
errors.push('Description must be 10-2000 characters');
|
|
106
|
+
}
|
|
107
|
+
// Category validation
|
|
108
|
+
if (!data.category || !VALID_CATEGORIES.includes(data.category)) {
|
|
109
|
+
errors.push(`Category must be one of: ${VALID_CATEGORIES.join(', ')}`);
|
|
110
|
+
}
|
|
111
|
+
// Price validation (satoshis)
|
|
112
|
+
if (!Number.isInteger(data.price)) {
|
|
113
|
+
errors.push('Price must be an integer (satoshis)');
|
|
114
|
+
}
|
|
115
|
+
else if (data.price < 1) {
|
|
116
|
+
errors.push('Price must be at least 1 satoshi');
|
|
117
|
+
}
|
|
118
|
+
else if (data.price > 100000000) {
|
|
119
|
+
errors.push('Price cannot exceed 100 million satoshis (1 BSV)');
|
|
120
|
+
}
|
|
121
|
+
// Endpoint validation
|
|
122
|
+
if (!data.endpoint || typeof data.endpoint !== 'string') {
|
|
123
|
+
errors.push('Endpoint is required');
|
|
124
|
+
}
|
|
125
|
+
// Method validation
|
|
126
|
+
if (!['GET', 'POST'].includes(data.method)) {
|
|
127
|
+
errors.push('Method must be GET or POST');
|
|
128
|
+
}
|
|
129
|
+
// Agent ID validation
|
|
130
|
+
if (!data.agentId || typeof data.agentId !== 'string') {
|
|
131
|
+
errors.push('Agent ID is required');
|
|
132
|
+
}
|
|
133
|
+
return { valid: errors.length === 0, errors };
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Input Validation: Funding Amount
|
|
137
|
+
*/
|
|
138
|
+
function validateFundingAmount(amount) {
|
|
139
|
+
if (!Number.isInteger(amount)) {
|
|
140
|
+
return { valid: false, error: 'Amount must be an integer' };
|
|
141
|
+
}
|
|
142
|
+
if (amount <= 0) {
|
|
143
|
+
return { valid: false, error: 'Amount must be positive' };
|
|
144
|
+
}
|
|
145
|
+
if (amount > 100000000) { // 1 BSV = 100 million satoshis
|
|
146
|
+
return { valid: false, error: 'Amount cannot exceed 100 million satoshis (1 BSV)' };
|
|
147
|
+
}
|
|
148
|
+
return { valid: true };
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Sanitize search query (prevent SQL injection and DoS)
|
|
152
|
+
*/
|
|
153
|
+
function sanitizeSearchQuery(query) {
|
|
154
|
+
// Limit length
|
|
155
|
+
query = query.substring(0, 200);
|
|
156
|
+
// Remove leading/trailing wildcards to prevent DoS
|
|
157
|
+
query = query.replace(/^%+|%+$/g, '');
|
|
158
|
+
// Limit consecutive wildcards
|
|
159
|
+
query = query.replace(/%{2,}/g, '%');
|
|
160
|
+
// Remove SQL special characters
|
|
161
|
+
query = query.replace(/[;'"\\]/g, '');
|
|
162
|
+
return query.trim();
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Execution Receipt Types
|
|
3
|
+
*
|
|
4
|
+
* Cryptographic proof that a service execution occurred with specific
|
|
5
|
+
* inputs, outputs, and timing. Receipts are signed by both provider
|
|
6
|
+
* and platform for dual verification.
|
|
7
|
+
*/
|
|
8
|
+
export interface ExecutionReceipt {
|
|
9
|
+
id: string;
|
|
10
|
+
paymentId: string;
|
|
11
|
+
serviceId: string;
|
|
12
|
+
inputHash: string;
|
|
13
|
+
outputHash: string;
|
|
14
|
+
timestamp: number;
|
|
15
|
+
executionTimeMs: number;
|
|
16
|
+
providerSignature: string;
|
|
17
|
+
platformSignature: string;
|
|
18
|
+
receiptHash: string;
|
|
19
|
+
blockchainTxId?: string;
|
|
20
|
+
blockchainAnchoredAt?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Receipt creation data (before signing)
|
|
24
|
+
*/
|
|
25
|
+
export interface ReceiptData {
|
|
26
|
+
paymentId: string;
|
|
27
|
+
serviceId: string;
|
|
28
|
+
input: Record<string, unknown>;
|
|
29
|
+
output: Record<string, unknown>;
|
|
30
|
+
timestamp: number;
|
|
31
|
+
executionTimeMs: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Verification result
|
|
35
|
+
*/
|
|
36
|
+
export interface ReceiptVerification {
|
|
37
|
+
valid: boolean;
|
|
38
|
+
errors: string[];
|
|
39
|
+
receipt?: ExecutionReceipt;
|
|
40
|
+
blockchainVerified?: boolean;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/verification/receipt.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Execution Receipt Types
|
|
4
|
+
*
|
|
5
|
+
* Cryptographic proof that a service execution occurred with specific
|
|
6
|
+
* inputs, outputs, and timing. Receipts are signed by both provider
|
|
7
|
+
* and platform for dual verification.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
//# sourceMappingURL=receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/verification/receipt.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles creation, storage, and verification of execution receipts.
|
|
5
|
+
* Provides cryptographic proof of service execution.
|
|
6
|
+
*/
|
|
7
|
+
import type { ExecutionReceipt, ReceiptVerification } from './receipt';
|
|
8
|
+
import type { Payment } from '../types';
|
|
9
|
+
export declare class VerificationManager {
|
|
10
|
+
private platformSecret;
|
|
11
|
+
constructor(platformSecret?: string);
|
|
12
|
+
/**
|
|
13
|
+
* Create an execution receipt after service execution
|
|
14
|
+
*/
|
|
15
|
+
createReceipt(payment: Payment, input: Record<string, unknown>, output: Record<string, unknown>, executionTimeMs: number, providerSecret?: string): Promise<ExecutionReceipt>;
|
|
16
|
+
/**
|
|
17
|
+
* Get receipt by payment ID
|
|
18
|
+
*/
|
|
19
|
+
getReceipt(paymentId: string): ExecutionReceipt | null;
|
|
20
|
+
/**
|
|
21
|
+
* Verify receipt integrity and signatures
|
|
22
|
+
*/
|
|
23
|
+
verifyReceipt(receipt: ExecutionReceipt): Promise<ReceiptVerification>;
|
|
24
|
+
/**
|
|
25
|
+
* Update receipt with blockchain anchor
|
|
26
|
+
*/
|
|
27
|
+
anchorToBlockchain(receiptHash: string, txId: string): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Hash arbitrary data (for inputs/outputs)
|
|
30
|
+
*/
|
|
31
|
+
private hashData;
|
|
32
|
+
/**
|
|
33
|
+
* Hash receipt fields for integrity check
|
|
34
|
+
*/
|
|
35
|
+
private hashReceipt;
|
|
36
|
+
/**
|
|
37
|
+
* Sign receipt data with HMAC-SHA256
|
|
38
|
+
*/
|
|
39
|
+
private signReceipt;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/verification/verification.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAe,mBAAmB,EAAE,MAAM,WAAW,CAAA;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,cAAc,CAAQ;gBAElB,cAAc,CAAC,EAAE,MAAM;IAKnC;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,eAAe,EAAE,MAAM,EACvB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,gBAAgB,CAAC;IA8E5B;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IA4BtD;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2D5E;;OAEG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1E;;OAEG;IACH,OAAO,CAAC,QAAQ;IAKhB;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,OAAO,CAAC,WAAW;CAWpB"}
|