trustgate-middleware 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.
@@ -0,0 +1,38 @@
1
+ /**
2
+ * TrustGate Trust Score Engine
3
+ *
4
+ * Based on:
5
+ * - EigenTrust (Kamvar, Schlosser & Garcia-Molina, 2003)
6
+ * - PeerTrust (Xiong & Liu, 2004)
7
+ * - EigenTrust++ (Fan et al., 2012)
8
+ *
9
+ * Formula: TrustScore = IdentityScore + BehaviorScore + ReputationScore - RiskPenalty
10
+ * Range: 0-90 (clamped)
11
+ */
12
+ import type { AgentProfile, TrustBreakdown } from './types';
13
+ /**
14
+ * IDENTITY SCORE (0-50 points)
15
+ * Pre-trusted peers (World ID) are the trust anchors.
16
+ * OWS-verified agents get a higher score than self-reported addresses.
17
+ */
18
+ export declare function identityScore(agent: AgentProfile): number;
19
+ /**
20
+ * BEHAVIOR SCORE (0-25 points)
21
+ * Multi-dimensional behavioral context: payment success, regularity, diversity, pacing.
22
+ */
23
+ export declare function behaviorScore(agent: AgentProfile): number;
24
+ /**
25
+ * REPUTATION SCORE (0-15 points)
26
+ * Trust builds over time through consistent participation.
27
+ */
28
+ export declare function reputationScore(agent: AgentProfile): number;
29
+ /**
30
+ * RISK PENALTY (0-30 points subtracted)
31
+ * Attack-resilient trust with active threat detection.
32
+ */
33
+ export declare function riskPenalty(agent: AgentProfile): number;
34
+ /** Calculate the full trust score with breakdown */
35
+ export declare function calculateTrustScore(agent: AgentProfile): number;
36
+ /** Get a full breakdown of the trust score components */
37
+ export declare function getTrustBreakdown(agent: AgentProfile): TrustBreakdown;
38
+ //# sourceMappingURL=scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../src/scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE3D;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAQzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA0BzD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAQ3D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAcvD;AAED,oDAAoD;AACpD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAG/D;AAED,yDAAyD;AACzD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CAYrE"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * TrustGate Trust Score Engine
3
+ *
4
+ * Based on:
5
+ * - EigenTrust (Kamvar, Schlosser & Garcia-Molina, 2003)
6
+ * - PeerTrust (Xiong & Liu, 2004)
7
+ * - EigenTrust++ (Fan et al., 2012)
8
+ *
9
+ * Formula: TrustScore = IdentityScore + BehaviorScore + ReputationScore - RiskPenalty
10
+ * Range: 0-90 (clamped)
11
+ */
12
+ /**
13
+ * IDENTITY SCORE (0-50 points)
14
+ * Pre-trusted peers (World ID) are the trust anchors.
15
+ * OWS-verified agents get a higher score than self-reported addresses.
16
+ */
17
+ export function identityScore(agent) {
18
+ switch (agent.tier) {
19
+ case 'HUMAN': return 50;
20
+ case 'HUMAN_AGENT': return 35;
21
+ case 'ANON_BOT': return agent.owsVerified ? 20 : 15;
22
+ case 'BLOCKED': return 0;
23
+ default: return 0;
24
+ }
25
+ }
26
+ /**
27
+ * BEHAVIOR SCORE (0-25 points)
28
+ * Multi-dimensional behavioral context: payment success, regularity, diversity, pacing.
29
+ */
30
+ export function behaviorScore(agent) {
31
+ if (agent.totalRequests === 0)
32
+ return 0;
33
+ const successRate = agent.successfulRequests / agent.totalRequests;
34
+ const paymentScore = Math.min(10, successRate * 10);
35
+ let regularityScore = 2.5;
36
+ if (agent.requestTimestamps.length >= 5) {
37
+ const intervals = [];
38
+ for (let i = 1; i < agent.requestTimestamps.length; i++) {
39
+ intervals.push(agent.requestTimestamps[i] - agent.requestTimestamps[i - 1]);
40
+ }
41
+ const mean = intervals.reduce((a, b) => a + b, 0) / intervals.length;
42
+ const variance = intervals.reduce((sum, v) => sum + Math.pow(v - mean, 2), 0) / intervals.length;
43
+ const coeffOfVariation = mean > 0 ? Math.sqrt(variance) / mean : 0;
44
+ regularityScore = Math.min(5, coeffOfVariation * 5);
45
+ }
46
+ const diversityScore = Math.min(5, agent.endpointsAccessed.size / 3 * 5);
47
+ const rpm = agent.recentRequestsPerMinute;
48
+ let pacingScore = 5;
49
+ if (rpm > 30)
50
+ pacingScore = 2;
51
+ if (rpm > 60)
52
+ pacingScore = 0;
53
+ return Math.round(paymentScore + regularityScore + diversityScore + pacingScore);
54
+ }
55
+ /**
56
+ * REPUTATION SCORE (0-15 points)
57
+ * Trust builds over time through consistent participation.
58
+ */
59
+ export function reputationScore(agent) {
60
+ const now = Date.now();
61
+ const daysSinceFirst = (now - agent.firstSeen) / (1000 * 60 * 60 * 24);
62
+ const ageScore = Math.min(5, daysSinceFirst * 0.5);
63
+ const volumeScore = agent.totalRequests > 0 ? Math.min(5, Math.log10(agent.totalRequests) * 2.5) : 0;
64
+ const totalDays = Math.max(1, daysSinceFirst);
65
+ const consistencyScore = Math.min(5, (agent.daysActive.size / totalDays) * 5);
66
+ return Math.round(ageScore + volumeScore + consistencyScore);
67
+ }
68
+ /**
69
+ * RISK PENALTY (0-30 points subtracted)
70
+ * Attack-resilient trust with active threat detection.
71
+ */
72
+ export function riskPenalty(agent) {
73
+ const now = Date.now();
74
+ const hoursInactive = (now - agent.lastSeen) / (1000 * 60 * 60);
75
+ const inactivityPenalty = Math.min(5, hoursInactive * 0.5);
76
+ let frequencyPenalty = 0;
77
+ if (agent.recentRequestsPerMinute > 50)
78
+ frequencyPenalty = 10;
79
+ else if (agent.recentRequestsPerMinute > 20)
80
+ frequencyPenalty = 5;
81
+ else if (agent.recentRequestsPerMinute > 10)
82
+ frequencyPenalty = 2;
83
+ const failurePenalty = Math.min(5, agent.failedPayments * 2);
84
+ const sybilPenalty = Math.min(5, Math.max(0, (agent.addressesFromSameIp.size - 1) * 2.5));
85
+ return Math.round(inactivityPenalty + frequencyPenalty + failurePenalty + sybilPenalty);
86
+ }
87
+ /** Calculate the full trust score with breakdown */
88
+ export function calculateTrustScore(agent) {
89
+ const raw = identityScore(agent) + behaviorScore(agent) + reputationScore(agent) - riskPenalty(agent);
90
+ return Math.max(0, Math.min(90, Math.round(raw)));
91
+ }
92
+ /** Get a full breakdown of the trust score components */
93
+ export function getTrustBreakdown(agent) {
94
+ const id = identityScore(agent);
95
+ const beh = behaviorScore(agent);
96
+ const rep = reputationScore(agent);
97
+ const risk = riskPenalty(agent);
98
+ return {
99
+ identity: id,
100
+ behavior: beh,
101
+ reputation: rep,
102
+ riskPenalty: risk,
103
+ total: Math.max(0, Math.min(90, Math.round(id + beh + rep - risk))),
104
+ };
105
+ }
106
+ //# sourceMappingURL=scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring.js","sourceRoot":"","sources":["../src/scoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Tier, AgentProfile } from './types';
2
+ export declare function addVerifiedHuman(nullifierHash: string): void;
3
+ export declare function isVerifiedHuman(nullifierHash: string): boolean;
4
+ export declare function getOrCreateAgent(address: string, tier: Tier, humanId?: string | null, owsVerified?: boolean): AgentProfile;
5
+ export declare function recordRequest(address: string, tier: Tier, success: boolean, humanId?: string | null, endpoint?: string, clientIp?: string, owsVerified?: boolean): AgentProfile;
6
+ export declare function getAgent(address: string): AgentProfile | undefined;
7
+ export declare function getAllAgents(): AgentProfile[];
8
+ export declare function getTopAgents(n?: number): AgentProfile[];
9
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAMjD,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,QAErD;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAE9D;AAMD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,MAAM,GAAG,IAAW,EAAE,WAAW,UAAQ,GAAG,YAAY,CA2B9H;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAC7C,OAAO,GAAE,MAAM,GAAG,IAAW,EAAE,QAAQ,SAAc,EAAE,QAAQ,SAAY,EAC3E,WAAW,UAAQ,GAClB,YAAY,CAsBd;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAElE;AAED,wBAAgB,YAAY,IAAI,YAAY,EAAE,CAE7C;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAI,GAAG,YAAY,EAAE,CAElD"}
package/dist/store.js ADDED
@@ -0,0 +1,72 @@
1
+ import { calculateTrustScore } from './scoring';
2
+ const agents = new Map();
3
+ const verifiedHumans = new Set();
4
+ export function addVerifiedHuman(nullifierHash) {
5
+ verifiedHumans.add(nullifierHash);
6
+ }
7
+ export function isVerifiedHuman(nullifierHash) {
8
+ return verifiedHumans.has(nullifierHash);
9
+ }
10
+ function tierRank(tier) {
11
+ return { HUMAN: 4, HUMAN_AGENT: 3, ANON_BOT: 2, BLOCKED: 1 }[tier] ?? 0;
12
+ }
13
+ export function getOrCreateAgent(address, tier, humanId = null, owsVerified = false) {
14
+ if (agents.has(address)) {
15
+ const agent = agents.get(address);
16
+ if (tierRank(tier) > tierRank(agent.tier)) {
17
+ agent.tier = tier;
18
+ agent.isHumanBacked = tier === 'HUMAN' || tier === 'HUMAN_AGENT';
19
+ if (humanId)
20
+ agent.humanId = humanId;
21
+ }
22
+ if (owsVerified)
23
+ agent.owsVerified = true;
24
+ return agent;
25
+ }
26
+ const profile = {
27
+ address, tier, trustScore: 0,
28
+ totalRequests: 0, successfulRequests: 0, failedPayments: 0,
29
+ firstSeen: Date.now(), lastSeen: Date.now(),
30
+ isHumanBacked: tier === 'HUMAN' || tier === 'HUMAN_AGENT',
31
+ humanId,
32
+ owsVerified,
33
+ requestTimestamps: [],
34
+ endpointsAccessed: new Set(),
35
+ recentRequestsPerMinute: 0,
36
+ addressesFromSameIp: new Set(),
37
+ daysActive: new Set(),
38
+ };
39
+ agents.set(address, profile);
40
+ return profile;
41
+ }
42
+ export function recordRequest(address, tier, success, humanId = null, endpoint = '/api/data', clientIp = 'unknown', owsVerified = false) {
43
+ const agent = getOrCreateAgent(address, tier, humanId, owsVerified);
44
+ const now = Date.now();
45
+ agent.totalRequests++;
46
+ if (success)
47
+ agent.successfulRequests++;
48
+ else
49
+ agent.failedPayments++;
50
+ agent.lastSeen = now;
51
+ agent.requestTimestamps.push(now);
52
+ if (agent.requestTimestamps.length > 100)
53
+ agent.requestTimestamps = agent.requestTimestamps.slice(-100);
54
+ agent.endpointsAccessed.add(endpoint);
55
+ agent.daysActive.add(new Date().toISOString().split('T')[0]);
56
+ if (clientIp !== 'unknown')
57
+ agent.addressesFromSameIp.add(clientIp);
58
+ const oneMinuteAgo = now - 60_000;
59
+ agent.recentRequestsPerMinute = agent.requestTimestamps.filter(t => t > oneMinuteAgo).length;
60
+ agent.trustScore = calculateTrustScore(agent);
61
+ return agent;
62
+ }
63
+ export function getAgent(address) {
64
+ return agents.get(address);
65
+ }
66
+ export function getAllAgents() {
67
+ return Array.from(agents.values());
68
+ }
69
+ export function getTopAgents(n = 8) {
70
+ return getAllAgents().sort((a, b) => b.trustScore - a.trustScore).slice(0, n);
71
+ }
72
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export type Tier = 'HUMAN' | 'HUMAN_AGENT' | 'ANON_BOT' | 'BLOCKED';
2
+ export declare const TIER_COLORS: Record<Tier, string>;
3
+ export interface AgentProfile {
4
+ address: string;
5
+ tier: Tier;
6
+ trustScore: number;
7
+ totalRequests: number;
8
+ successfulRequests: number;
9
+ failedPayments: number;
10
+ firstSeen: number;
11
+ lastSeen: number;
12
+ isHumanBacked: boolean;
13
+ humanId: string | null;
14
+ owsVerified: boolean;
15
+ name?: string;
16
+ specialty?: string;
17
+ requestTimestamps: number[];
18
+ endpointsAccessed: Set<string>;
19
+ recentRequestsPerMinute: number;
20
+ addressesFromSameIp: Set<string>;
21
+ daysActive: Set<string>;
22
+ }
23
+ export interface TrustGateEvent {
24
+ id: string;
25
+ timestamp: number;
26
+ tier: Tier;
27
+ color: string;
28
+ agentAddress: string | null;
29
+ trustScore: number;
30
+ priceCharged: number;
31
+ humanId: string | null;
32
+ requestPath: string;
33
+ }
34
+ export interface ClassificationResult {
35
+ tier: Tier;
36
+ color: string;
37
+ agentAddress: string | null;
38
+ humanId: string | null;
39
+ trustScore: number;
40
+ owsVerified: boolean;
41
+ }
42
+ export interface TrustGateConfig {
43
+ payTo: string;
44
+ network?: string;
45
+ worldId?: {
46
+ rpId: string;
47
+ signingKey: string;
48
+ };
49
+ dashboard?: boolean;
50
+ wsPort?: number;
51
+ }
52
+ export interface TrustBreakdown {
53
+ identity: number;
54
+ behavior: number;
55
+ reputation: number;
56
+ riskPenalty: number;
57
+ total: number;
58
+ }
59
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,CAAA;AAEnE,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAK5C,CAAA;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,IAAI,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,WAAW,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,uBAAuB,EAAE,MAAM,CAAA;IAC/B,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;IACD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd"}
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ export const TIER_COLORS = {
2
+ HUMAN: '#36d068',
3
+ HUMAN_AGENT: '#4a91f7',
4
+ ANON_BOT: '#f0a020',
5
+ BLOCKED: '#ee5555',
6
+ };
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,SAAS;IACtB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;CACnB,CAAA"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "trustgate-middleware",
3
+ "version": "1.0.0",
4
+ "description": "The trust layer for the agent economy — classify, score, and price every AI agent request",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist/",
9
+ "dashboard-dist/",
10
+ "README.md"
11
+ ],
12
+ "scripts": {
13
+ "build": "npx tsc",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "peerDependencies": {
17
+ "hono": ">=4.0.0"
18
+ },
19
+ "dependencies": {
20
+ "@worldcoin/agentkit": "^0.1.5",
21
+ "@worldcoin/idkit-server": "^1.0.0",
22
+ "ws": "^8.0.0"
23
+ },
24
+ "devDependencies": {
25
+ "@types/node": "^22.0.0",
26
+ "@types/ws": "^8.0.0",
27
+ "hono": "^4.12.0",
28
+ "typescript": "^5.0.0"
29
+ },
30
+ "keywords": [
31
+ "trustgate",
32
+ "trust",
33
+ "x402",
34
+ "world-id",
35
+ "agentkit",
36
+ "middleware",
37
+ "agent-economy",
38
+ "hono"
39
+ ],
40
+ "license": "MIT",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://github.com/open-biz/trustgate"
44
+ },
45
+ "homepage": "https://github.com/open-biz/trustgate#readme"
46
+ }