ai2ai-assertion-marketplace 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -0
  3. package/dist/cli/cli.d.ts +3 -0
  4. package/dist/cli/cli.d.ts.map +1 -0
  5. package/dist/cli/cli.js +207 -0
  6. package/dist/cli/cli.js.map +1 -0
  7. package/dist/src/api/rest.d.ts +4 -0
  8. package/dist/src/api/rest.d.ts.map +1 -0
  9. package/dist/src/api/rest.js +191 -0
  10. package/dist/src/api/rest.js.map +1 -0
  11. package/dist/src/index.d.ts +3 -0
  12. package/dist/src/index.d.ts.map +1 -0
  13. package/dist/src/index.js +35 -0
  14. package/dist/src/index.js.map +1 -0
  15. package/dist/src/marketplace/marketplace.d.ts +6 -0
  16. package/dist/src/marketplace/marketplace.d.ts.map +1 -0
  17. package/dist/src/marketplace/marketplace.js +72 -0
  18. package/dist/src/marketplace/marketplace.js.map +1 -0
  19. package/dist/src/mcp/entry.d.ts +3 -0
  20. package/dist/src/mcp/entry.d.ts.map +1 -0
  21. package/dist/src/mcp/entry.js +7 -0
  22. package/dist/src/mcp/entry.js.map +1 -0
  23. package/dist/src/mcp/server.d.ts +2 -0
  24. package/dist/src/mcp/server.d.ts.map +1 -0
  25. package/dist/src/mcp/server.js +346 -0
  26. package/dist/src/mcp/server.js.map +1 -0
  27. package/dist/src/registry/attestations.d.ts +25 -0
  28. package/dist/src/registry/attestations.d.ts.map +1 -0
  29. package/dist/src/registry/attestations.js +200 -0
  30. package/dist/src/registry/attestations.js.map +1 -0
  31. package/dist/src/registry/database.d.ts +5 -0
  32. package/dist/src/registry/database.d.ts.map +1 -0
  33. package/dist/src/registry/database.js +112 -0
  34. package/dist/src/registry/database.js.map +1 -0
  35. package/dist/src/registry/verifiers.d.ts +18 -0
  36. package/dist/src/registry/verifiers.d.ts.map +1 -0
  37. package/dist/src/registry/verifiers.js +129 -0
  38. package/dist/src/registry/verifiers.js.map +1 -0
  39. package/dist/src/types/index.d.ts +184 -0
  40. package/dist/src/types/index.d.ts.map +1 -0
  41. package/dist/src/types/index.js +46 -0
  42. package/dist/src/types/index.js.map +1 -0
  43. package/package.json +87 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Colby Eggleston
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,120 @@
1
+ # AI2AI Assertion Marketplace
2
+
3
+ **Buy and sell verified attestations between AI agents. Eliminate redundant compute.**
4
+
5
+ ## What This Is
6
+
7
+ Every AI pipeline re-runs expensive verification work someone already paid for. Deepfake detection, identity verification, document validation, fact-checking — same compute, same result, repeated millions of times.
8
+
9
+ This marketplace lets the first verifier sell their result to every subsequent agent that needs it. One expensive compute run, sold at a fraction of a cent per query, earns royalties forever.
10
+
11
+ For agents, it's the difference between burning tokens on redundant verification and paying a micro-fee for an already-computed, reputation-backed result.
12
+
13
+ ## How Agents Discover It
14
+
15
+ ### MCP Server (Model Context Protocol)
16
+ Agents using MCP-compatible clients (Claude, Cursor, etc.) discover this marketplace as a tool at boot:
17
+
18
+ ```json
19
+ {
20
+ "mcpServers": {
21
+ "ai2ai-marketplace": {
22
+ "command": "npx",
23
+ "args": ["tsx", "src/mcp/entry.ts"],
24
+ "cwd": "/path/to/ai2ai-assertion-marketplace"
25
+ }
26
+ }
27
+ }
28
+ ```
29
+
30
+ ### REST API
31
+ Direct integration for LangChain, crewAI, Mastra, or any HTTP-capable agent:
32
+
33
+ ```
34
+ GET /stats Marketplace statistics
35
+ GET /attestations?type=&... Query attestations
36
+ POST /attestations Submit new attestation
37
+ GET /attestations/:id Get attestation
38
+ POST /attestations/:id/purchase Purchase attestation
39
+ POST /attestations/:id/dispute Dispute attestation
40
+ GET /verifiers List verifiers
41
+ POST /verifiers Register verifier
42
+ POST /verifiers/:id/stake Add stake
43
+ POST /verifiers/:id/slash Slash verifier
44
+ GET /transactions Recent transactions
45
+ ```
46
+
47
+ ### npm Package
48
+ ```bash
49
+ npm install ai2ai-assertion-marketplace
50
+ ```
51
+
52
+ ```typescript
53
+ import { queryAttestations, purchaseAttestation, submitAttestation } from 'ai2ai-assertion-marketplace';
54
+ ```
55
+
56
+ ## Architecture
57
+
58
+ ### Economic Model
59
+ - **Marketplace fee:** 10% per transaction
60
+ - **Verifier royalty:** Configurable per-attestation royalty on every access
61
+ - **Staking:** Verifiers stake tokens as collateral against bad attestations
62
+ - **Slashing:** Disputed attestations reduce verifier reputation and stake
63
+ - **Reputation:** 1000-point scale, decays with disputes, grows with successful attestations
64
+
65
+ ### Attestation Types
66
+ - `content-authenticity` — Is this content AI-generated?
67
+ - `identity-verification` — Is this person who they claim to be?
68
+ - `document-validation` — Is this document legitimate?
69
+ - `deepfake-detection` — Is this media manipulated?
70
+ - `code-audit` — Has this code been audited?
71
+ - `fact-check` — Is this claim verified?
72
+ - `custom` — Any other verification
73
+
74
+ ### Subject Hashing
75
+ All attestations are indexed by SHA-256 hash of their subject. Agents query by hash to find existing verifications before running their own.
76
+
77
+ ## Quick Start
78
+
79
+ ```bash
80
+ # Install
81
+ npm install
82
+
83
+ # Seed demo data (3 verifiers, 5 attestations)
84
+ npm run db:seed
85
+
86
+ # Start the REST API
87
+ npm run api
88
+
89
+ # Query attestations via CLI
90
+ npm run cli -- query --type deepfake-detection
91
+
92
+ # View marketplace stats
93
+ npm run cli -- stats
94
+ ```
95
+
96
+ ## Configuration
97
+
98
+ Copy `.env.example` to `.env` and configure:
99
+
100
+ | Variable | Default | Description |
101
+ |---|---|---|
102
+ | `PORT` | 3099 | REST API port |
103
+ | `DATABASE_PATH` | ./data/marketplace.db | SQLite database path |
104
+ | `MARKETPLACE_FEE_PERCENT` | 10 | Fee percentage per transaction |
105
+ | `MAX_ATTESTATION_AGE` | 7776000 | Max attestation age before expiry (90 days) |
106
+
107
+ ## Distribution Channels
108
+
109
+ | Channel | Status | Reach |
110
+ |---|---|---|
111
+ | MCP Server | Active | All MCP-compatible agents |
112
+ | REST API | Active | All HTTP-capable agents |
113
+ | npm Package | Active | Node.js ecosystem |
114
+ | A2A Agent Card | Available | Google A2A agents |
115
+ | LangChain Tool | Available | LangChain ecosystem |
116
+ | On-chain Registry | Planned | Smart contract verifier discovery |
117
+
118
+ ## License
119
+
120
+ MIT
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env tsx
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../cli/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,207 @@
1
+ #!/usr/bin/env tsx
2
+ import { Command } from 'commander';
3
+ import { getDatabase, resetDatabase } from '../src/registry/database.js';
4
+ import { registerVerifier, listVerifiers } from '../src/registry/verifiers.js';
5
+ import { submitAttestation, queryAttestations, getAttestation } from '../src/registry/attestations.js';
6
+ import { getMarketplaceStats } from '../src/marketplace/marketplace.js';
7
+ const program = new Command();
8
+ program
9
+ .name('ai2ai')
10
+ .description('AI2AI Assertion Marketplace CLI')
11
+ .version('1.0.0');
12
+ // --- Database ---
13
+ program
14
+ .command('db-init')
15
+ .description('Initialize the database schema')
16
+ .action(() => {
17
+ getDatabase();
18
+ console.log('Database initialized at data/marketplace.db');
19
+ });
20
+ program
21
+ .command('db-reset')
22
+ .description('Reset the database (WARNING: deletes all data)')
23
+ .action(() => {
24
+ resetDatabase();
25
+ console.log('Database reset complete');
26
+ });
27
+ program
28
+ .command('db-seed')
29
+ .description('Seed the database with demo data')
30
+ .action(() => {
31
+ getDatabase();
32
+ const v1 = registerVerifier({
33
+ name: 'DeepTrust Verify',
34
+ endpoint: 'https://deeptrust.example/verify',
35
+ publicKey: 'ed25519:abc123def456',
36
+ initialStake: 10000,
37
+ });
38
+ const v2 = registerVerifier({
39
+ name: 'FactCheck AI',
40
+ endpoint: 'https://factcheck.example/verify',
41
+ publicKey: 'ed25519:ghi789jkl012',
42
+ initialStake: 5000,
43
+ });
44
+ const v3 = registerVerifier({
45
+ name: 'IdentityGuard',
46
+ endpoint: 'https://idguard.example/verify',
47
+ publicKey: 'ed25519:mno345pqr678',
48
+ initialStake: 25000,
49
+ });
50
+ submitAttestation({
51
+ type: 'deepfake-detection',
52
+ subject: 'https://example.com/video/political-rally.mp4',
53
+ result: JSON.stringify({
54
+ isDeepfake: false,
55
+ manipulationDetected: false,
56
+ analysisMethod: 'ensemble-cnn-transformer',
57
+ frameAnalysis: 'all-frames',
58
+ }),
59
+ resultSummary: 'Video is authentic, no deepfake manipulation detected with 0.97 confidence',
60
+ confidence: 0.97,
61
+ verifierId: v1.id,
62
+ price: 0.50,
63
+ royaltyPerAccess: 0.05,
64
+ expiresInSeconds: 86400 * 30,
65
+ metadata: { fileSize: '250MB', duration: '3m42s', format: 'mp4' },
66
+ });
67
+ submitAttestation({
68
+ type: 'deepfake-detection',
69
+ subject: 'https://example.com/video/celebrity-speech.mp4',
70
+ result: JSON.stringify({
71
+ isDeepfake: true,
72
+ manipulationDetected: true,
73
+ manipulationType: 'face-swap',
74
+ confidenceBreakdown: { faceSwap: 0.94, voiceSynthesis: 0.12 },
75
+ }),
76
+ resultSummary: 'Deepfake detected: face-swap manipulation with 0.94 confidence',
77
+ confidence: 0.94,
78
+ verifierId: v1.id,
79
+ price: 0.75,
80
+ royaltyPerAccess: 0.07,
81
+ expiresInSeconds: null,
82
+ metadata: { fileSize: '180MB', duration: '2m15s', format: 'mp4' },
83
+ });
84
+ submitAttestation({
85
+ type: 'fact-check',
86
+ subject: 'Statement: "Global temperatures have risen 2.5C since 1880"',
87
+ result: JSON.stringify({
88
+ claim: 'Global temperatures have risen 2.5C since 1880',
89
+ verdict: 'mostly-true',
90
+ actualRise: 'approximately 1.2C per NASA/NOAA data',
91
+ sources: ['NASA GISS', 'NOAA GlobalTemp', 'IPCC AR6'],
92
+ correction: 'The rise is approximately 1.2C, not 2.5C',
93
+ }),
94
+ resultSummary: 'Mostly true but overstated: actual rise is ~1.2C, not 2.5C',
95
+ confidence: 0.92,
96
+ verifierId: v2.id,
97
+ price: 0.10,
98
+ royaltyPerAccess: 0.01,
99
+ expiresInSeconds: 86400 * 90,
100
+ metadata: { topic: 'climate', sources: 3 },
101
+ });
102
+ submitAttestation({
103
+ type: 'identity-verification',
104
+ subject: 'email:john.doe@example.com',
105
+ result: JSON.stringify({
106
+ verified: true,
107
+ domainValidated: true,
108
+ mailboxExists: true,
109
+ disposable: false,
110
+ riskScore: 0.02,
111
+ }),
112
+ resultSummary: 'Email identity verified: valid, non-disposable, low risk',
113
+ confidence: 0.99,
114
+ verifierId: v3.id,
115
+ price: 0.05,
116
+ royaltyPerAccess: 0.005,
117
+ expiresInSeconds: null,
118
+ metadata: { provider: 'gmail', verificationMethod: 'smtp-check' },
119
+ });
120
+ submitAttestation({
121
+ type: 'document-validation',
122
+ subject: 'hash:sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
123
+ result: JSON.stringify({
124
+ valid: true,
125
+ documentType: 'legal-contract',
126
+ signatureValid: true,
127
+ notarized: true,
128
+ jurisdiction: 'US-GA',
129
+ }),
130
+ resultSummary: 'Legal document validated: signatures authentic, properly notarized in GA',
131
+ confidence: 0.95,
132
+ verifierId: v3.id,
133
+ price: 2.00,
134
+ royaltyPerAccess: 0.20,
135
+ expiresInSeconds: null,
136
+ metadata: { pages: 12, signatories: 3, date: '2025-03-15' },
137
+ });
138
+ console.log('Seeded database with 3 verifiers and 5 attestations');
139
+ console.log(` Verifiers: ${v1.name}, ${v2.name}, ${v3.name}`);
140
+ console.log(' 5 attestations across deepfake-detection, fact-check, identity-verification, document-validation');
141
+ });
142
+ // --- Query ---
143
+ program
144
+ .command('query')
145
+ .description('Query attestations')
146
+ .option('--type <type>', 'Attestation type')
147
+ .option('--subject <subject>', 'Subject to search')
148
+ .option('--hash <hash>', 'Subject hash')
149
+ .option('--verifier <id>', 'Verifier ID')
150
+ .option('--min-confidence <n>', 'Minimum confidence')
151
+ .option('--max-price <n>', 'Maximum price')
152
+ .option('--limit <n>', 'Result limit', '50')
153
+ .action((opts) => {
154
+ const limit = parseInt(opts.limit) || 50;
155
+ const minConf = opts.minConfidence ? parseFloat(opts.minConfidence) : undefined;
156
+ const maxPr = opts.maxPrice ? parseFloat(opts.maxPrice) : undefined;
157
+ const result = queryAttestations({
158
+ type: opts.type,
159
+ subject: opts.subject,
160
+ subjectHash: opts.hash,
161
+ verifierId: opts.verifier,
162
+ minConfidence: minConf,
163
+ maxPrice: maxPr,
164
+ limit,
165
+ });
166
+ console.log(JSON.stringify(result, null, 2));
167
+ });
168
+ // --- Verifiers ---
169
+ program
170
+ .command('verifiers')
171
+ .description('List active verifiers')
172
+ .action(() => {
173
+ const verifiers = listVerifiers(true);
174
+ if (verifiers.length === 0) {
175
+ console.log('No verifiers registered. Run `ai2ai db-seed` to add demo data.');
176
+ return;
177
+ }
178
+ console.log(`\nActive Verifiers (${verifiers.length}):\n`);
179
+ verifiers.forEach((v) => {
180
+ console.log(` ${v.name} (${v.id.slice(0, 8)}...)`);
181
+ console.log(` Reputation: ${v.reputationScore.toFixed(1)} | Stake: ${v.stakedAmount}`);
182
+ console.log(` Attestations: ${v.totalAttestations} | Disputes: ${v.disputedAttestations}`);
183
+ console.log(` Registered: ${v.registeredAt}\n`);
184
+ });
185
+ });
186
+ // --- Stats ---
187
+ program
188
+ .command('stats')
189
+ .description('Show marketplace statistics')
190
+ .action(() => {
191
+ const stats = getMarketplaceStats();
192
+ console.log(JSON.stringify(stats, null, 2));
193
+ });
194
+ // --- Get attestation ---
195
+ program
196
+ .command('get <id>')
197
+ .description('Get an attestation by ID')
198
+ .action((id) => {
199
+ const a = getAttestation(id);
200
+ if (!a) {
201
+ console.log('Attestation not found');
202
+ return;
203
+ }
204
+ console.log(JSON.stringify(a, null, 2));
205
+ });
206
+ program.parse();
207
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../cli/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import express from 'express';
2
+ export declare function createAPI(): express.Express;
3
+ export declare function startAPI(port?: number): void;
4
+ //# sourceMappingURL=rest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../../../src/api/rest.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAiC9B,wBAAgB,SAAS,IAAI,OAAO,CAAC,OAAO,CAqL3C;AAED,wBAAgB,QAAQ,CAAC,IAAI,SAAO,GAAG,IAAI,CAiB1C"}
@@ -0,0 +1,191 @@
1
+ import express from 'express';
2
+ import cors from 'cors';
3
+ import { submitAttestation, queryAttestations, purchaseAttestation, getAttestation, disputeAttestation, hashSubject, getAttestationsByVerifier, } from '../registry/attestations.js';
4
+ import { registerVerifier, getVerifier, listVerifiers, stake, slash, updateReputation, getTopVerifiers, getStakingHistory, } from '../registry/verifiers.js';
5
+ import { getMarketplaceStats, getRecentTransactions, getBuyerHistory, } from '../marketplace/marketplace.js';
6
+ import { AttestationSubmissionSchema, VerifierRegistrationSchema, AttestationQuerySchema, DisputeSchema, } from '../types/index.js';
7
+ export function createAPI() {
8
+ const app = express();
9
+ app.use(cors());
10
+ app.use(express.json());
11
+ app.get('/health', (_req, res) => {
12
+ res.json({ status: 'ok', marketplace: 'ai2ai-assertion-marketplace' });
13
+ });
14
+ app.get('/stats', (_req, res) => {
15
+ res.json(getMarketplaceStats());
16
+ });
17
+ // --- Attestations ---
18
+ app.get('/attestations', (req, res) => {
19
+ try {
20
+ const validated = AttestationQuerySchema.parse(req.query);
21
+ res.json(queryAttestations(validated));
22
+ }
23
+ catch (err) {
24
+ res.status(400).json({ error: String(err) });
25
+ }
26
+ });
27
+ app.get('/attestations/:id', (req, res) => {
28
+ const a = getAttestation(req.params.id);
29
+ if (!a) {
30
+ res.status(404).json({ error: 'Not found' });
31
+ return;
32
+ }
33
+ res.json(a);
34
+ });
35
+ app.post('/attestations', (req, res) => {
36
+ try {
37
+ const validated = AttestationSubmissionSchema.parse(req.body);
38
+ const { verifierId, ...rest } = validated;
39
+ const verifier = getVerifier(verifierId);
40
+ if (!verifier) {
41
+ res.status(404).json({ error: `Verifier not found: ${verifierId}` });
42
+ return;
43
+ }
44
+ if (!verifier.active) {
45
+ res.status(403).json({ error: `Verifier is inactive: ${verifierId}` });
46
+ return;
47
+ }
48
+ const attestation = submitAttestation({ ...rest, verifierId });
49
+ res.status(201).json(attestation);
50
+ }
51
+ catch (err) {
52
+ res.status(400).json({ error: String(err) });
53
+ }
54
+ });
55
+ app.post('/attestations/:id/purchase', (req, res) => {
56
+ try {
57
+ const { buyerId } = req.body;
58
+ if (!buyerId) {
59
+ res.status(400).json({ error: 'buyerId required' });
60
+ return;
61
+ }
62
+ const result = purchaseAttestation(req.params.id, buyerId);
63
+ res.json(result);
64
+ }
65
+ catch (err) {
66
+ res.status(400).json({ error: String(err) });
67
+ }
68
+ });
69
+ app.post('/attestations/:id/dispute', (req, res) => {
70
+ try {
71
+ const validated = DisputeSchema.parse({
72
+ attestationId: req.params.id,
73
+ ...req.body,
74
+ });
75
+ const updated = disputeAttestation(validated.attestationId, validated.reason);
76
+ res.json(updated);
77
+ }
78
+ catch (err) {
79
+ res.status(400).json({ error: String(err) });
80
+ }
81
+ });
82
+ // --- Verifiers ---
83
+ app.get('/verifiers', (_req, res) => {
84
+ res.json(listVerifiers(true));
85
+ });
86
+ app.get('/verifiers/top', (req, res) => {
87
+ const limit = Number(req.query.limit) || 10;
88
+ res.json(getTopVerifiers(limit));
89
+ });
90
+ app.get('/verifiers/:id', (req, res) => {
91
+ const v = getVerifier(req.params.id);
92
+ if (!v) {
93
+ res.status(404).json({ error: 'Not found' });
94
+ return;
95
+ }
96
+ res.json(v);
97
+ });
98
+ app.post('/verifiers', (req, res) => {
99
+ try {
100
+ const validated = VerifierRegistrationSchema.parse(req.body);
101
+ const verifier = registerVerifier(validated);
102
+ res.status(201).json(verifier);
103
+ }
104
+ catch (err) {
105
+ res.status(400).json({ error: String(err) });
106
+ }
107
+ });
108
+ app.get('/verifiers/:id/attestations', (req, res) => {
109
+ const v = getVerifier(req.params.id);
110
+ if (!v) {
111
+ res.status(404).json({ error: 'Not found' });
112
+ return;
113
+ }
114
+ res.json(getAttestationsByVerifier(req.params.id));
115
+ });
116
+ app.get('/verifiers/:id/staking-history', (req, res) => {
117
+ const v = getVerifier(req.params.id);
118
+ if (!v) {
119
+ res.status(404).json({ error: 'Not found' });
120
+ return;
121
+ }
122
+ res.json(getStakingHistory(req.params.id));
123
+ });
124
+ app.post('/verifiers/:id/stake', (req, res) => {
125
+ try {
126
+ const { amount } = req.body;
127
+ const v = stake(req.params.id, amount);
128
+ res.json(v);
129
+ }
130
+ catch (err) {
131
+ res.status(400).json({ error: String(err) });
132
+ }
133
+ });
134
+ app.post('/verifiers/:id/slash', (req, res) => {
135
+ try {
136
+ const { amount, reason } = req.body;
137
+ const v = slash(req.params.id, amount, reason);
138
+ res.json(v);
139
+ }
140
+ catch (err) {
141
+ res.status(400).json({ error: String(err) });
142
+ }
143
+ });
144
+ app.post('/verifiers/:id/reputation', (req, res) => {
145
+ try {
146
+ const { delta } = req.body;
147
+ const v = updateReputation(req.params.id, delta);
148
+ res.json(v);
149
+ }
150
+ catch (err) {
151
+ res.status(400).json({ error: String(err) });
152
+ }
153
+ });
154
+ // --- Transactions ---
155
+ app.get('/transactions', (req, res) => {
156
+ const limit = Number(req.query.limit) || 50;
157
+ res.json(getRecentTransactions(limit));
158
+ });
159
+ app.get('/transactions/:buyerId', (req, res) => {
160
+ res.json(getBuyerHistory(req.params.buyerId));
161
+ });
162
+ // --- Utility ---
163
+ app.post('/hash', (req, res) => {
164
+ const { subject } = req.body;
165
+ if (!subject) {
166
+ res.status(400).json({ error: 'subject required' });
167
+ return;
168
+ }
169
+ res.json({ subject, hash: hashSubject(subject) });
170
+ });
171
+ return app;
172
+ }
173
+ export function startAPI(port = 3099) {
174
+ const app = createAPI();
175
+ app.listen(port, () => {
176
+ console.log(`AI2AI Assertion Marketplace API running on http://localhost:${port}`);
177
+ console.log(` GET /stats Marketplace statistics`);
178
+ console.log(` GET /attestations?type=&... Query attestations`);
179
+ console.log(` POST /attestations Submit new attestation`);
180
+ console.log(` GET /attestations/:id Get attestation`);
181
+ console.log(` POST /attestations/:id/purchase Purchase attestation`);
182
+ console.log(` POST /attestations/:id/dispute Dispute attestation`);
183
+ console.log(` GET /verifiers List verifiers`);
184
+ console.log(` POST /verifiers Register verifier`);
185
+ console.log(` GET /verifiers/:id Get verifier`);
186
+ console.log(` POST /verifiers/:id/stake Add stake`);
187
+ console.log(` POST /verifiers/:id/slash Slash verifier`);
188
+ console.log(` GET /transactions Recent transactions`);
189
+ });
190
+ }
191
+ //# sourceMappingURL=rest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest.js","sourceRoot":"","sources":["../../../src/api/rest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env tsx
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env tsx
2
+ import { startAPI } from './api/rest.js';
3
+ const command = process.argv[2];
4
+ switch (command) {
5
+ case 'api':
6
+ startAPI(Number(process.env.PORT) || 3099);
7
+ break;
8
+ case 'mcp':
9
+ console.error('MCP server must be run via the MCP client, not directly.');
10
+ console.error('Configure it in your MCP client settings pointing to:');
11
+ console.error(' npx tsx src/mcp/entry.ts');
12
+ console.error('');
13
+ console.error('Or in opencode.json / claude_desktop_config.json:');
14
+ console.error('{');
15
+ console.error(' "mcpServers": {');
16
+ console.error(' "ai2ai-marketplace": {');
17
+ console.error(` "command": "npx",`);
18
+ console.error(` "args": ["tsx", "src/mcp/entry.ts"],`);
19
+ console.error(` "cwd": "${process.cwd()}"`);
20
+ console.error(' }');
21
+ console.error(' }');
22
+ console.error('}');
23
+ break;
24
+ default:
25
+ console.log('AI2AI Assertion Marketplace');
26
+ console.log('');
27
+ console.log('Usage:');
28
+ console.log(' npm run api Start the REST API server');
29
+ console.log(' npm run mcp MCP server (configure in MCP client)');
30
+ console.log(' npm run cli CLI management tool');
31
+ console.log(' npm run db:seed Seed with demo data');
32
+ console.log('');
33
+ break;
34
+ }
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,KAAK;QACR,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAC3C,MAAM;IACR,KAAK,KAAK;QACR,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5D,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACjD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM;IACR;QACE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM;AACV,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { MarketplaceStats, Transaction } from '../types/index.js';
2
+ export declare function getMarketplaceStats(): MarketplaceStats;
3
+ export declare function getRecentTransactions(limit?: number): Transaction[];
4
+ export declare function getBuyerHistory(buyerId: string): Transaction[];
5
+ export declare function calculateDynamicPrice(basePrice: number, accessCount: number, verifierReputation: number, daysSinceCreation: number): number;
6
+ //# sourceMappingURL=marketplace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../../src/marketplace/marketplace.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAavE,wBAAgB,mBAAmB,IAAI,gBAAgB,CA4CtD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,SAAK,GAAG,WAAW,EAAE,CAgB/D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAgB9D;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,EAC1B,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAKR"}