triage-ows 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.
- package/README.md +786 -0
- package/bin/triage-ows.js +218 -0
- package/bin/triage-policy.js +66 -0
- package/bin/triage-server.js +4 -0
- package/dashboard-dist/assets/index-Dnhi_dJQ.css +2 -0
- package/dashboard-dist/assets/index-g_2MwC-o.js +9 -0
- package/dashboard-dist/favicon.svg +7 -0
- package/dashboard-dist/index.html +16 -0
- package/dist/config.d.ts +32 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +61 -0
- package/dist/config.js.map +1 -0
- package/dist/emitter.d.ts +7 -0
- package/dist/emitter.d.ts.map +1 -0
- package/dist/emitter.js +41 -0
- package/dist/emitter.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/scoring/behavior.d.ts +3 -0
- package/dist/scoring/behavior.d.ts.map +1 -0
- package/dist/scoring/behavior.js +13 -0
- package/dist/scoring/behavior.js.map +1 -0
- package/dist/scoring/compliance.d.ts +3 -0
- package/dist/scoring/compliance.d.ts.map +1 -0
- package/dist/scoring/compliance.js +11 -0
- package/dist/scoring/compliance.js.map +1 -0
- package/dist/scoring/identity.d.ts +3 -0
- package/dist/scoring/identity.d.ts.map +1 -0
- package/dist/scoring/identity.js +16 -0
- package/dist/scoring/identity.js.map +1 -0
- package/dist/scoring/index.d.ts +10 -0
- package/dist/scoring/index.d.ts.map +1 -0
- package/dist/scoring/index.js +35 -0
- package/dist/scoring/index.js.map +1 -0
- package/dist/scoring/limits.d.ts +7 -0
- package/dist/scoring/limits.d.ts.map +1 -0
- package/dist/scoring/limits.js +9 -0
- package/dist/scoring/limits.js.map +1 -0
- package/dist/scoring/network.d.ts +3 -0
- package/dist/scoring/network.d.ts.map +1 -0
- package/dist/scoring/network.js +16 -0
- package/dist/scoring/network.js.map +1 -0
- package/dist/scoring/onchain.d.ts +4 -0
- package/dist/scoring/onchain.d.ts.map +1 -0
- package/dist/scoring/onchain.js +35 -0
- package/dist/scoring/onchain.js.map +1 -0
- package/dist/scoring/risk.d.ts +3 -0
- package/dist/scoring/risk.d.ts.map +1 -0
- package/dist/scoring/risk.js +22 -0
- package/dist/scoring/risk.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +405 -0
- package/dist/server.js.map +1 -0
- package/dist/store.d.ts +13 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +177 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +107 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +26 -0
- package/dist/types.js.map +1 -0
- package/dist/webbotauth.d.ts +38 -0
- package/dist/webbotauth.d.ts.map +1 -0
- package/dist/webbotauth.js +120 -0
- package/dist/webbotauth.js.map +1 -0
- package/dist/xmtp.d.ts +6 -0
- package/dist/xmtp.d.ts.map +1 -0
- package/dist/xmtp.js +161 -0
- package/dist/xmtp.js.map +1 -0
- package/package.json +58 -0
- package/policy-template.json +14 -0
- package/src/config.ts +86 -0
- package/src/emitter.ts +40 -0
- package/src/index.ts +18 -0
- package/src/scoring/behavior.ts +15 -0
- package/src/scoring/compliance.ts +12 -0
- package/src/scoring/identity.ts +12 -0
- package/src/scoring/index.ts +31 -0
- package/src/scoring/limits.ts +10 -0
- package/src/scoring/network.ts +18 -0
- package/src/scoring/onchain.ts +44 -0
- package/src/scoring/risk.ts +25 -0
- package/src/server.ts +410 -0
- package/src/store.ts +197 -0
- package/src/types.ts +137 -0
- package/src/webbotauth.ts +128 -0
- package/src/xmtp.ts +188 -0
- package/triage.config.example.json +22 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadConfig = loadConfig;
|
|
4
|
+
exports.getConfig = getConfig;
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
const DEFAULT_CONFIG = {
|
|
9
|
+
scoreBands: [
|
|
10
|
+
{ name: 'Sovereign', min: 80, dailyLimit: 1000, perTxLimit: 500, color: '#fff8e1' },
|
|
11
|
+
{ name: 'Trusted', min: 60, dailyLimit: 200, perTxLimit: 100, color: '#ffd700' },
|
|
12
|
+
{ name: 'Building', min: 40, dailyLimit: 50, perTxLimit: 25, color: '#4caf50' },
|
|
13
|
+
{ name: 'Cautious', min: 20, dailyLimit: 10, perTxLimit: 5, color: '#00bcd4' },
|
|
14
|
+
{ name: 'Restricted', min: 1, dailyLimit: 2, perTxLimit: 1, color: '#2196f3' },
|
|
15
|
+
{ name: 'Frozen', min: 0, dailyLimit: 0, perTxLimit: 0, color: '#1a1a4e' },
|
|
16
|
+
],
|
|
17
|
+
warningThreshold: 0.8,
|
|
18
|
+
xmtp: { enabled: true },
|
|
19
|
+
worldId: { enabled: true },
|
|
20
|
+
webBotAuth: { enabled: true },
|
|
21
|
+
networkScore: { enabled: true },
|
|
22
|
+
scoring: { overrideBoost: 3, maxFrequencyPenalty: 10, inactivityDecayRate: 0.5 },
|
|
23
|
+
port: 4021,
|
|
24
|
+
dashboardEnabled: true,
|
|
25
|
+
};
|
|
26
|
+
let _config = { ...DEFAULT_CONFIG };
|
|
27
|
+
function loadConfig(configPath) {
|
|
28
|
+
const path = configPath || process.env.TRIAGE_CONFIG_PATH || (0, path_1.join)(process.cwd(), 'triage.config.json');
|
|
29
|
+
try {
|
|
30
|
+
const raw = (0, fs_1.readFileSync)(path, 'utf-8');
|
|
31
|
+
const parsed = JSON.parse(raw);
|
|
32
|
+
_config = {
|
|
33
|
+
...DEFAULT_CONFIG,
|
|
34
|
+
...parsed,
|
|
35
|
+
xmtp: { ...DEFAULT_CONFIG.xmtp, ...parsed.xmtp },
|
|
36
|
+
worldId: { ...DEFAULT_CONFIG.worldId, ...parsed.worldId },
|
|
37
|
+
webBotAuth: { ...DEFAULT_CONFIG.webBotAuth, ...parsed.webBotAuth },
|
|
38
|
+
networkScore: { ...DEFAULT_CONFIG.networkScore, ...parsed.networkScore },
|
|
39
|
+
scoring: { ...DEFAULT_CONFIG.scoring, ...parsed.scoring },
|
|
40
|
+
};
|
|
41
|
+
if (parsed.scoreBands) {
|
|
42
|
+
_config.scoreBands = parsed.scoreBands;
|
|
43
|
+
(0, types_1.updateSpendingTiers)(parsed.scoreBands.map(b => ({
|
|
44
|
+
name: b.name,
|
|
45
|
+
color: b.color || '#666',
|
|
46
|
+
dailyLimit: b.dailyLimit,
|
|
47
|
+
perTxLimit: b.perTxLimit,
|
|
48
|
+
minScore: b.min,
|
|
49
|
+
})));
|
|
50
|
+
}
|
|
51
|
+
console.log(`[Config] Loaded from ${path}`);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
console.log('[Config] No triage.config.json found — using defaults');
|
|
55
|
+
}
|
|
56
|
+
return _config;
|
|
57
|
+
}
|
|
58
|
+
function getConfig() {
|
|
59
|
+
return _config;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TriageEvent } from './types';
|
|
2
|
+
export declare function startWebSocketServer(port: number): void;
|
|
3
|
+
export declare function attachWebSocketToServer(server: {
|
|
4
|
+
on: (event: string, handler: (...args: any[]) => void) => void;
|
|
5
|
+
}): void;
|
|
6
|
+
export declare function emitEvent(event: TriageEvent): void;
|
|
7
|
+
//# sourceMappingURL=emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAK1C,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,QAGhD;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAAE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;CAAE,QAWjH;AAUD,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,QAK3C"}
|
package/dist/emitter.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startWebSocketServer = startWebSocketServer;
|
|
4
|
+
exports.attachWebSocketToServer = attachWebSocketToServer;
|
|
5
|
+
exports.emitEvent = emitEvent;
|
|
6
|
+
const ws_1 = require("ws");
|
|
7
|
+
let wss = null;
|
|
8
|
+
const clients = new Set();
|
|
9
|
+
function startWebSocketServer(port) {
|
|
10
|
+
wss = new ws_1.WebSocketServer({ port });
|
|
11
|
+
wireConnections();
|
|
12
|
+
}
|
|
13
|
+
function attachWebSocketToServer(server) {
|
|
14
|
+
wss = new ws_1.WebSocketServer({ noServer: true });
|
|
15
|
+
wireConnections();
|
|
16
|
+
server.on('upgrade', (request, socket, head) => {
|
|
17
|
+
const url = new URL(request.url || '/', `http://${request.headers.host}`);
|
|
18
|
+
if (url.pathname === '/ws') {
|
|
19
|
+
wss.handleUpgrade(request, socket, head, (ws) => wss.emit('connection', ws, request));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
socket.destroy();
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function wireConnections() {
|
|
27
|
+
if (!wss)
|
|
28
|
+
return;
|
|
29
|
+
wss.on('connection', (ws) => {
|
|
30
|
+
clients.add(ws);
|
|
31
|
+
ws.on('close', () => clients.delete(ws));
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function emitEvent(event) {
|
|
35
|
+
const data = JSON.stringify(event);
|
|
36
|
+
for (const client of clients) {
|
|
37
|
+
if (client.readyState === ws_1.WebSocket.OPEN)
|
|
38
|
+
client.send(data);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":";;AAQA,oDAGC;AAED,0DAWC;AAUD,8BAKC;AAvCD,2BAA+C;AAK/C,IAAI,GAAG,GAA2B,IAAI,CAAA;AACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAa,CAAA;AAEpC,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,GAAG,GAAG,IAAI,oBAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IACnC,eAAe,EAAE,CAAA;AACnB,CAAC;AAED,SAAgB,uBAAuB,CAAC,MAA0E;IAChH,GAAG,GAAG,IAAI,oBAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,eAAe,EAAE,CAAA;IACjB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAwB,EAAE,MAAc,EAAE,IAAY,EAAE,EAAE;QAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QACzE,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC3B,GAAI,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;QACzF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,EAAE,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,CAAC,GAAG;QAAE,OAAM;IAChB,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,SAAS,CAAC,KAAkB;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAClC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,UAAU,KAAK,cAAS,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { app, startServer, BASE_SEPOLIA, USDC_BASE_SEPOLIA } from './server';
|
|
2
|
+
export { computeTrustScore } from './scoring/index';
|
|
3
|
+
export { getSpendingLimits } from './scoring/limits';
|
|
4
|
+
export { identityScore } from './scoring/identity';
|
|
5
|
+
export { onChainScore, refreshOnChainData } from './scoring/onchain';
|
|
6
|
+
export { behaviorScore } from './scoring/behavior';
|
|
7
|
+
export { complianceScore } from './scoring/compliance';
|
|
8
|
+
export { networkScore } from './scoring/network';
|
|
9
|
+
export { riskPenalty } from './scoring/risk';
|
|
10
|
+
export { getOrCreateAgent, getAgent, getAllAgents, getTopAgents, recordApproval, recordDenial, recordOverride, addVerifiedHuman, isVerifiedHuman, setOWSWallet, setWebBotAuthVerified } from './store';
|
|
11
|
+
export { verifyWebBotAuth, registerAgentPublicKey, parseSignatureInput } from './webbotauth';
|
|
12
|
+
export { emitEvent, startWebSocketServer, attachWebSocketToServer } from './emitter';
|
|
13
|
+
export { loadConfig, getConfig } from './config';
|
|
14
|
+
export type { TriageConfig } from './config';
|
|
15
|
+
export { getTierForScore, SPENDING_TIERS, updateSpendingTiers } from './types';
|
|
16
|
+
export type { PolicyContext, PolicyResult, TrustBreakdown, SpendingTier, AgentProfile, PolicyDecisionEvent, TrustChangeEvent, BudgetWarningEvent, TriageEvent } from './types';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AACtM,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAC5F,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AAGpF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAC9E,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateSpendingTiers = exports.SPENDING_TIERS = exports.getTierForScore = exports.getConfig = exports.loadConfig = exports.attachWebSocketToServer = exports.startWebSocketServer = exports.emitEvent = exports.parseSignatureInput = exports.registerAgentPublicKey = exports.verifyWebBotAuth = exports.setWebBotAuthVerified = exports.setOWSWallet = exports.isVerifiedHuman = exports.addVerifiedHuman = exports.recordOverride = exports.recordDenial = exports.recordApproval = exports.getTopAgents = exports.getAllAgents = exports.getAgent = exports.getOrCreateAgent = exports.riskPenalty = exports.networkScore = exports.complianceScore = exports.behaviorScore = exports.refreshOnChainData = exports.onChainScore = exports.identityScore = exports.getSpendingLimits = exports.computeTrustScore = exports.USDC_BASE_SEPOLIA = exports.BASE_SEPOLIA = exports.startServer = exports.app = void 0;
|
|
4
|
+
var server_1 = require("./server");
|
|
5
|
+
Object.defineProperty(exports, "app", { enumerable: true, get: function () { return server_1.app; } });
|
|
6
|
+
Object.defineProperty(exports, "startServer", { enumerable: true, get: function () { return server_1.startServer; } });
|
|
7
|
+
Object.defineProperty(exports, "BASE_SEPOLIA", { enumerable: true, get: function () { return server_1.BASE_SEPOLIA; } });
|
|
8
|
+
Object.defineProperty(exports, "USDC_BASE_SEPOLIA", { enumerable: true, get: function () { return server_1.USDC_BASE_SEPOLIA; } });
|
|
9
|
+
var index_1 = require("./scoring/index");
|
|
10
|
+
Object.defineProperty(exports, "computeTrustScore", { enumerable: true, get: function () { return index_1.computeTrustScore; } });
|
|
11
|
+
var limits_1 = require("./scoring/limits");
|
|
12
|
+
Object.defineProperty(exports, "getSpendingLimits", { enumerable: true, get: function () { return limits_1.getSpendingLimits; } });
|
|
13
|
+
var identity_1 = require("./scoring/identity");
|
|
14
|
+
Object.defineProperty(exports, "identityScore", { enumerable: true, get: function () { return identity_1.identityScore; } });
|
|
15
|
+
var onchain_1 = require("./scoring/onchain");
|
|
16
|
+
Object.defineProperty(exports, "onChainScore", { enumerable: true, get: function () { return onchain_1.onChainScore; } });
|
|
17
|
+
Object.defineProperty(exports, "refreshOnChainData", { enumerable: true, get: function () { return onchain_1.refreshOnChainData; } });
|
|
18
|
+
var behavior_1 = require("./scoring/behavior");
|
|
19
|
+
Object.defineProperty(exports, "behaviorScore", { enumerable: true, get: function () { return behavior_1.behaviorScore; } });
|
|
20
|
+
var compliance_1 = require("./scoring/compliance");
|
|
21
|
+
Object.defineProperty(exports, "complianceScore", { enumerable: true, get: function () { return compliance_1.complianceScore; } });
|
|
22
|
+
var network_1 = require("./scoring/network");
|
|
23
|
+
Object.defineProperty(exports, "networkScore", { enumerable: true, get: function () { return network_1.networkScore; } });
|
|
24
|
+
var risk_1 = require("./scoring/risk");
|
|
25
|
+
Object.defineProperty(exports, "riskPenalty", { enumerable: true, get: function () { return risk_1.riskPenalty; } });
|
|
26
|
+
var store_1 = require("./store");
|
|
27
|
+
Object.defineProperty(exports, "getOrCreateAgent", { enumerable: true, get: function () { return store_1.getOrCreateAgent; } });
|
|
28
|
+
Object.defineProperty(exports, "getAgent", { enumerable: true, get: function () { return store_1.getAgent; } });
|
|
29
|
+
Object.defineProperty(exports, "getAllAgents", { enumerable: true, get: function () { return store_1.getAllAgents; } });
|
|
30
|
+
Object.defineProperty(exports, "getTopAgents", { enumerable: true, get: function () { return store_1.getTopAgents; } });
|
|
31
|
+
Object.defineProperty(exports, "recordApproval", { enumerable: true, get: function () { return store_1.recordApproval; } });
|
|
32
|
+
Object.defineProperty(exports, "recordDenial", { enumerable: true, get: function () { return store_1.recordDenial; } });
|
|
33
|
+
Object.defineProperty(exports, "recordOverride", { enumerable: true, get: function () { return store_1.recordOverride; } });
|
|
34
|
+
Object.defineProperty(exports, "addVerifiedHuman", { enumerable: true, get: function () { return store_1.addVerifiedHuman; } });
|
|
35
|
+
Object.defineProperty(exports, "isVerifiedHuman", { enumerable: true, get: function () { return store_1.isVerifiedHuman; } });
|
|
36
|
+
Object.defineProperty(exports, "setOWSWallet", { enumerable: true, get: function () { return store_1.setOWSWallet; } });
|
|
37
|
+
Object.defineProperty(exports, "setWebBotAuthVerified", { enumerable: true, get: function () { return store_1.setWebBotAuthVerified; } });
|
|
38
|
+
var webbotauth_1 = require("./webbotauth");
|
|
39
|
+
Object.defineProperty(exports, "verifyWebBotAuth", { enumerable: true, get: function () { return webbotauth_1.verifyWebBotAuth; } });
|
|
40
|
+
Object.defineProperty(exports, "registerAgentPublicKey", { enumerable: true, get: function () { return webbotauth_1.registerAgentPublicKey; } });
|
|
41
|
+
Object.defineProperty(exports, "parseSignatureInput", { enumerable: true, get: function () { return webbotauth_1.parseSignatureInput; } });
|
|
42
|
+
var emitter_1 = require("./emitter");
|
|
43
|
+
Object.defineProperty(exports, "emitEvent", { enumerable: true, get: function () { return emitter_1.emitEvent; } });
|
|
44
|
+
Object.defineProperty(exports, "startWebSocketServer", { enumerable: true, get: function () { return emitter_1.startWebSocketServer; } });
|
|
45
|
+
Object.defineProperty(exports, "attachWebSocketToServer", { enumerable: true, get: function () { return emitter_1.attachWebSocketToServer; } });
|
|
46
|
+
// XMTP exports are intentionally omitted — @xmtp/node-sdk requires native bindings.
|
|
47
|
+
// Import lazily: const xmtp = await import('triage-ows/dist/xmtp')
|
|
48
|
+
var config_1 = require("./config");
|
|
49
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_1.loadConfig; } });
|
|
50
|
+
Object.defineProperty(exports, "getConfig", { enumerable: true, get: function () { return config_1.getConfig; } });
|
|
51
|
+
var types_1 = require("./types");
|
|
52
|
+
Object.defineProperty(exports, "getTierForScore", { enumerable: true, get: function () { return types_1.getTierForScore; } });
|
|
53
|
+
Object.defineProperty(exports, "SPENDING_TIERS", { enumerable: true, get: function () { return types_1.SPENDING_TIERS; } });
|
|
54
|
+
Object.defineProperty(exports, "updateSpendingTiers", { enumerable: true, get: function () { return types_1.updateSpendingTiers; } });
|
|
55
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA4E;AAAnE,6FAAA,GAAG,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAC1D,yCAAmD;AAA1C,0GAAA,iBAAiB,OAAA;AAC1B,2CAAoD;AAA3C,2GAAA,iBAAiB,OAAA;AAC1B,+CAAkD;AAAzC,yGAAA,aAAa,OAAA;AACtB,6CAAoE;AAA3D,uGAAA,YAAY,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AACzC,+CAAkD;AAAzC,yGAAA,aAAa,OAAA;AACtB,mDAAsD;AAA7C,6GAAA,eAAe,OAAA;AACxB,6CAAgD;AAAvC,uGAAA,YAAY,OAAA;AACrB,uCAA4C;AAAnC,mGAAA,WAAW,OAAA;AACpB,iCAAsM;AAA7L,yGAAA,gBAAgB,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,uGAAA,cAAc,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,uGAAA,cAAc,OAAA;AAAE,yGAAA,gBAAgB,OAAA;AAAE,wGAAA,eAAe,OAAA;AAAE,qGAAA,YAAY,OAAA;AAAE,8GAAA,qBAAqB,OAAA;AACrL,2CAA4F;AAAnF,8GAAA,gBAAgB,OAAA;AAAE,oHAAA,sBAAsB,OAAA;AAAE,iHAAA,mBAAmB,OAAA;AACtE,qCAAoF;AAA3E,oGAAA,SAAS,OAAA;AAAE,+GAAA,oBAAoB,OAAA;AAAE,kHAAA,uBAAuB,OAAA;AACjE,oFAAoF;AACpF,mEAAmE;AACnE,mCAAgD;AAAvC,oGAAA,UAAU,OAAA;AAAE,mGAAA,SAAS,OAAA;AAE9B,iCAA8E;AAArE,wGAAA,eAAe,OAAA;AAAE,uGAAA,cAAc,OAAA;AAAE,4GAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavior.d.ts","sourceRoot":"","sources":["../../src/scoring/behavior.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAYzD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.behaviorScore = behaviorScore;
|
|
4
|
+
function behaviorScore(agent) {
|
|
5
|
+
const successRate = Math.min(5, (agent.successfulRequests / Math.max(1, agent.totalRequests)) * 5);
|
|
6
|
+
const now = Date.now();
|
|
7
|
+
const last60s = agent.requestTimestamps.filter(t => now - t < 60_000).length;
|
|
8
|
+
const pacing = last60s > 15 ? 0 : last60s > 5 ? 2 : 5;
|
|
9
|
+
const cleanDays = Math.min(5, agent.consecutiveCleanDays * 0.5);
|
|
10
|
+
const concentration = agent.counterparties.length >= 5 ? 5 : agent.counterparties.length >= 2 ? 2 : 0;
|
|
11
|
+
return Math.min(20, successRate + pacing + cleanDays + concentration);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=behavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavior.js","sourceRoot":"","sources":["../../src/scoring/behavior.ts"],"names":[],"mappings":";;AAEA,sCAYC;AAZD,SAAgB,aAAa,CAAC,KAAmB;IAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAElG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAA;IAC5E,MAAM,MAAM,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAErD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,oBAAoB,GAAG,GAAG,CAAC,CAAA;IAE/D,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAErG,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC,CAAA;AACvE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.d.ts","sourceRoot":"","sources":["../../src/scoring/compliance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAS3D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.complianceScore = complianceScore;
|
|
4
|
+
function complianceScore(agent) {
|
|
5
|
+
const total = agent.totalApproved + agent.totalDenied;
|
|
6
|
+
const approvalRate = Math.min(5, (agent.totalApproved / Math.max(1, total)) * 5);
|
|
7
|
+
const streak = Math.min(5, agent.consecutiveApprovals * 0.25);
|
|
8
|
+
const overrideFreq = 5 - Math.min(5, agent.humanOverrides * 1.67);
|
|
9
|
+
return Math.min(15, approvalRate + streak + overrideFreq);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=compliance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../src/scoring/compliance.ts"],"names":[],"mappings":";;AAEA,0CASC;AATD,SAAgB,eAAe,CAAC,KAAmB;IACjD,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,WAAW,CAAA;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAEhF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAA;IAE7D,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAEjE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,GAAG,YAAY,CAAC,CAAA;AAC3D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/scoring/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CASzD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.identityScore = identityScore;
|
|
4
|
+
function identityScore(agent) {
|
|
5
|
+
let score = 4; // base: fresh wallet
|
|
6
|
+
if (agent.totalRequests > 0)
|
|
7
|
+
score = 12; // funded with tx history
|
|
8
|
+
if (agent.isOWSWallet && agent.totalApproved > 0)
|
|
9
|
+
score = 20; // OWS wallet with policy trail
|
|
10
|
+
if (agent.webBotAuthVerified)
|
|
11
|
+
score += 4; // +4 request-level crypto identity
|
|
12
|
+
if (agent.worldIdVerified)
|
|
13
|
+
score += 11; // +11 human verified
|
|
14
|
+
return Math.min(35, score);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/scoring/identity.ts"],"names":[],"mappings":";;AAEA,sCASC;AATD,SAAgB,aAAa,CAAC,KAAmB;IAC/C,IAAI,KAAK,GAAG,CAAC,CAAA,CAAC,qBAAqB;IAEnC,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC;QAAE,KAAK,GAAG,EAAE,CAAA,CAAC,yBAAyB;IACjE,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC;QAAE,KAAK,GAAG,EAAE,CAAA,CAAC,+BAA+B;IAC5F,IAAI,KAAK,CAAC,kBAAkB;QAAE,KAAK,IAAI,CAAC,CAAA,CAAC,mCAAmC;IAC5E,IAAI,KAAK,CAAC,eAAe;QAAE,KAAK,IAAI,EAAE,CAAA,CAAC,qBAAqB;IAE5D,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;AAC5B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AgentProfile, TrustBreakdown } from '../types';
|
|
2
|
+
export declare function computeTrustScore(agent: AgentProfile, getAgent: (addr: string) => AgentProfile | undefined): TrustBreakdown;
|
|
3
|
+
export { identityScore } from './identity';
|
|
4
|
+
export { onChainScore } from './onchain';
|
|
5
|
+
export { behaviorScore } from './behavior';
|
|
6
|
+
export { complianceScore } from './compliance';
|
|
7
|
+
export { networkScore } from './network';
|
|
8
|
+
export { riskPenalty } from './risk';
|
|
9
|
+
export { getSpendingLimits } from './limits';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scoring/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAQ5D,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,GACnD,cAAc,CAWhB;AAED,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSpendingLimits = exports.riskPenalty = exports.networkScore = exports.complianceScore = exports.behaviorScore = exports.onChainScore = exports.identityScore = void 0;
|
|
4
|
+
exports.computeTrustScore = computeTrustScore;
|
|
5
|
+
const identity_1 = require("./identity");
|
|
6
|
+
const onchain_1 = require("./onchain");
|
|
7
|
+
const behavior_1 = require("./behavior");
|
|
8
|
+
const compliance_1 = require("./compliance");
|
|
9
|
+
const network_1 = require("./network");
|
|
10
|
+
const risk_1 = require("./risk");
|
|
11
|
+
function computeTrustScore(agent, getAgent) {
|
|
12
|
+
const identity = (0, identity_1.identityScore)(agent);
|
|
13
|
+
const onChain = (0, onchain_1.onChainScore)(agent);
|
|
14
|
+
const behavior = (0, behavior_1.behaviorScore)(agent);
|
|
15
|
+
const compliance = (0, compliance_1.complianceScore)(agent);
|
|
16
|
+
const network = (0, network_1.networkScore)(agent, getAgent);
|
|
17
|
+
const risk = (0, risk_1.riskPenalty)(agent);
|
|
18
|
+
const total = Math.max(0, Math.min(100, identity + onChain + behavior + compliance + network - risk));
|
|
19
|
+
return { identity, onChain, behavior, compliance, network, risk, total };
|
|
20
|
+
}
|
|
21
|
+
var identity_2 = require("./identity");
|
|
22
|
+
Object.defineProperty(exports, "identityScore", { enumerable: true, get: function () { return identity_2.identityScore; } });
|
|
23
|
+
var onchain_2 = require("./onchain");
|
|
24
|
+
Object.defineProperty(exports, "onChainScore", { enumerable: true, get: function () { return onchain_2.onChainScore; } });
|
|
25
|
+
var behavior_2 = require("./behavior");
|
|
26
|
+
Object.defineProperty(exports, "behaviorScore", { enumerable: true, get: function () { return behavior_2.behaviorScore; } });
|
|
27
|
+
var compliance_2 = require("./compliance");
|
|
28
|
+
Object.defineProperty(exports, "complianceScore", { enumerable: true, get: function () { return compliance_2.complianceScore; } });
|
|
29
|
+
var network_2 = require("./network");
|
|
30
|
+
Object.defineProperty(exports, "networkScore", { enumerable: true, get: function () { return network_2.networkScore; } });
|
|
31
|
+
var risk_2 = require("./risk");
|
|
32
|
+
Object.defineProperty(exports, "riskPenalty", { enumerable: true, get: function () { return risk_2.riskPenalty; } });
|
|
33
|
+
var limits_1 = require("./limits");
|
|
34
|
+
Object.defineProperty(exports, "getSpendingLimits", { enumerable: true, get: function () { return limits_1.getSpendingLimits; } });
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scoring/index.ts"],"names":[],"mappings":";;;AAQA,8CAcC;AArBD,yCAA0C;AAC1C,uCAAwC;AACxC,yCAA0C;AAC1C,6CAA8C;AAC9C,uCAAwC;AACxC,iCAAoC;AAEpC,SAAgB,iBAAiB,CAC/B,KAAmB,EACnB,QAAoD;IAEpD,MAAM,QAAQ,GAAG,IAAA,wBAAa,EAAC,KAAK,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,KAAK,CAAC,CAAA;IACnC,MAAM,QAAQ,GAAG,IAAA,wBAAa,EAAC,KAAK,CAAC,CAAA;IACrC,MAAM,UAAU,GAAG,IAAA,4BAAe,EAAC,KAAK,CAAC,CAAA;IACzC,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC7C,MAAM,IAAI,GAAG,IAAA,kBAAW,EAAC,KAAK,CAAC,CAAA;IAE/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAA;IAErG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AAC1E,CAAC;AAED,uCAA0C;AAAjC,yGAAA,aAAa,OAAA;AACtB,qCAAwC;AAA/B,uGAAA,YAAY,OAAA;AACrB,uCAA0C;AAAjC,yGAAA,aAAa,OAAA;AACtB,2CAA8C;AAArC,6GAAA,eAAe,OAAA;AACxB,qCAAwC;AAA/B,uGAAA,YAAY,OAAA;AACrB,+BAAoC;AAA3B,mGAAA,WAAW,OAAA;AACpB,mCAA4C;AAAnC,2GAAA,iBAAiB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/scoring/limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAA;AAE7D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAChD,IAAI,EAAE,YAAY,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB,CAGA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSpendingLimits = getSpendingLimits;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
function getSpendingLimits(score) {
|
|
6
|
+
const tier = (0, types_1.getTierForScore)(score);
|
|
7
|
+
return { tier, dailyLimit: tier.dailyLimit, perTxLimit: tier.perTxLimit };
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=limits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/scoring/limits.ts"],"names":[],"mappings":";;AAEA,8CAOC;AATD,oCAA6D;AAE7D,SAAgB,iBAAiB,CAAC,KAAa;IAK7C,MAAM,IAAI,GAAG,IAAA,uBAAe,EAAC,KAAK,CAAC,CAAA;IACnC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAA;AAC3E,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/scoring/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAG5C,wBAAgB,YAAY,CAC1B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,GACnD,MAAM,CAWR"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.networkScore = networkScore;
|
|
4
|
+
const config_1 = require("../config");
|
|
5
|
+
function networkScore(agent, getAgent) {
|
|
6
|
+
if (!(0, config_1.getConfig)().networkScore?.enabled)
|
|
7
|
+
return 0;
|
|
8
|
+
const known = agent.counterparties
|
|
9
|
+
.map(addr => getAgent(addr))
|
|
10
|
+
.filter((a) => a !== undefined);
|
|
11
|
+
if (known.length === 0)
|
|
12
|
+
return 0;
|
|
13
|
+
const avg = known.reduce((sum, a) => sum + a.trustScore, 0) / known.length;
|
|
14
|
+
return Math.min(5, avg / 20);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/scoring/network.ts"],"names":[],"mappings":";;AAGA,oCAcC;AAhBD,sCAAqC;AAErC,SAAgB,YAAY,CAC1B,KAAmB,EACnB,QAAoD;IAEpD,IAAI,CAAC,IAAA,kBAAS,GAAE,CAAC,YAAY,EAAE,OAAO;QAAE,OAAO,CAAC,CAAA;IAEhD,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc;SAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAA;IAEpD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAEhC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;IAC1E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onchain.d.ts","sourceRoot":"","sources":["../../src/scoring/onchain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAoB5C,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQvE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAaxD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.refreshOnChainData = refreshOnChainData;
|
|
4
|
+
exports.onChainScore = onChainScore;
|
|
5
|
+
const viem_1 = require("viem");
|
|
6
|
+
const chains_1 = require("viem/chains");
|
|
7
|
+
const CACHE_TTL = 10 * 60 * 1000; // 10 minutes
|
|
8
|
+
const balanceCache = new Map();
|
|
9
|
+
function getRpcClient() {
|
|
10
|
+
return (0, viem_1.createPublicClient)({
|
|
11
|
+
chain: chains_1.baseSepolia,
|
|
12
|
+
transport: (0, viem_1.http)(process.env.BASE_SEPOLIA_RPC_URL || 'https://sepolia.base.org'),
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async function refreshOnChainData(address) {
|
|
16
|
+
try {
|
|
17
|
+
const client = getRpcClient();
|
|
18
|
+
const raw = await client.getBalance({ address: address });
|
|
19
|
+
balanceCache.set(address, { balance: Number(raw), fetchedAt: Date.now() });
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// On failure, keep old cached value (or leave absent — score will default to 0)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function onChainScore(agent) {
|
|
26
|
+
const monthsOld = (Date.now() - agent.createdAt) / (30 * 24 * 60 * 60 * 1000);
|
|
27
|
+
const age = Math.min(5, monthsOld * 0.5);
|
|
28
|
+
const txCount = Math.min(5, Math.log10(Math.max(1, agent.totalRequests)) * 2.5);
|
|
29
|
+
const diversity = Math.min(5, (agent.counterparties.length / 10) * 5);
|
|
30
|
+
const cached = balanceCache.get(agent.address);
|
|
31
|
+
const fresh = cached && (Date.now() - cached.fetchedAt) < CACHE_TTL;
|
|
32
|
+
const balance = fresh ? (cached.balance > 0 ? 5 : 0) : 0;
|
|
33
|
+
return Math.min(20, age + txCount + diversity + balance);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=onchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onchain.js","sourceRoot":"","sources":["../../src/scoring/onchain.ts"],"names":[],"mappings":";;AAoBA,gDAQC;AAED,oCAaC;AA1CD,+BAA+C;AAC/C,wCAAyC;AAEzC,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,aAAa;AAO9C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAA;AAErD,SAAS,YAAY;IACnB,OAAO,IAAA,yBAAkB,EAAC;QACxB,KAAK,EAAE,oBAAW;QAClB,SAAS,EAAE,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,0BAA0B,CAAC;KAChF,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;QAC7B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,OAAwB,EAAE,CAAC,CAAA;QAC1E,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,gFAAgF;IAClF,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,KAAmB;IAC9C,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,CAAA;IAExC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;IAE/E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAErE,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,CAAA;IACnE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAExD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,CAAA;AAC1D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk.d.ts","sourceRoot":"","sources":["../../src/scoring/risk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAI5C,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAoBvD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.riskPenalty = riskPenalty;
|
|
4
|
+
const types_1 = require("../types");
|
|
5
|
+
const config_1 = require("../config");
|
|
6
|
+
function riskPenalty(agent) {
|
|
7
|
+
const cfg = (0, config_1.getConfig)().scoring;
|
|
8
|
+
const now = Date.now();
|
|
9
|
+
const last60s = agent.requestTimestamps.filter(t => now - t < 60_000).length;
|
|
10
|
+
const maxFreqPenalty = cfg?.maxFrequencyPenalty ?? 10;
|
|
11
|
+
const freqSpike = last60s > 15 ? maxFreqPenalty : last60s > 10 ? Math.min(7, maxFreqPenalty) : last60s > 5 ? Math.min(3, maxFreqPenalty) : 0;
|
|
12
|
+
const failedTx = Math.min(5, agent.failedRequests * 2);
|
|
13
|
+
const hoursInactive = (now - agent.lastActive) / (60 * 60 * 1000);
|
|
14
|
+
const decayRate = cfg?.inactivityDecayRate ?? 0.5;
|
|
15
|
+
const inactivity = Math.min(5, hoursInactive * decayRate);
|
|
16
|
+
const dailyLimit = (0, types_1.getTierForScore)(agent.trustScore).dailyLimit;
|
|
17
|
+
const spendRatio = dailyLimit > 0 ? agent.dailySpent / dailyLimit : 0;
|
|
18
|
+
const spendPressure = spendRatio > 0.85 && agent.consecutiveApprovals > 0 ? 5 : 0;
|
|
19
|
+
const denialStreak = Math.min(5, agent.consecutiveDenials * 2.5);
|
|
20
|
+
return Math.min(30, freqSpike + failedTx + inactivity + spendPressure + denialStreak);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=risk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/scoring/risk.ts"],"names":[],"mappings":";;AAIA,kCAoBC;AAvBD,oCAA0C;AAC1C,sCAAqC;AAErC,SAAgB,WAAW,CAAC,KAAmB;IAC7C,MAAM,GAAG,GAAG,IAAA,kBAAS,GAAE,CAAC,OAAO,CAAA;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAA;IAC5E,MAAM,cAAc,GAAG,GAAG,EAAE,mBAAmB,IAAI,EAAE,CAAA;IACrD,MAAM,SAAS,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE5I,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAA;IAEtD,MAAM,aAAa,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACjE,MAAM,SAAS,GAAG,GAAG,EAAE,mBAAmB,IAAI,GAAG,CAAA;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC,CAAA;IAEzD,MAAM,UAAU,GAAG,IAAA,uBAAe,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC,UAAU,CAAA;IAC/D,MAAM,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;IACrE,MAAM,aAAa,GAAG,UAAU,GAAG,IAAI,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEjF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAA;IAEhE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,CAAC,CAAA;AACvF,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
export declare const BASE_SEPOLIA = "eip155:84532";
|
|
3
|
+
export declare const USDC_BASE_SEPOLIA = "0x036CbD53842c5426634e7929541eC2318f3dCF7e";
|
|
4
|
+
export declare const app: Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
5
|
+
export declare function startServer(port?: number): import("@hono/node-server").ServerType;
|
|
6
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAkB3B,eAAO,MAAM,YAAY,iBAAiB,CAAA;AAC1C,eAAO,MAAM,iBAAiB,+CAA+C,CAAA;AAwB7E,eAAO,MAAM,GAAG,4EAAa,CAAA;AAqV7B,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,0CAmBxC"}
|