@rookdaemon/agora 0.2.3 → 0.2.5

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 (57) hide show
  1. package/README.md +470 -0
  2. package/dist/cli.js +223 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.d.ts +5 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +5 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/message/envelope.d.ts +3 -2
  9. package/dist/message/envelope.d.ts.map +1 -1
  10. package/dist/message/envelope.js +2 -2
  11. package/dist/message/envelope.js.map +1 -1
  12. package/dist/registry/discovery-service.d.ts +1 -1
  13. package/dist/registry/discovery-service.d.ts.map +1 -1
  14. package/dist/registry/discovery-service.js +3 -3
  15. package/dist/registry/discovery-service.js.map +1 -1
  16. package/dist/registry/peer-store.d.ts +2 -1
  17. package/dist/registry/peer-store.d.ts.map +1 -1
  18. package/dist/registry/peer-store.js +3 -3
  19. package/dist/registry/peer-store.js.map +1 -1
  20. package/dist/relay/server.d.ts.map +1 -1
  21. package/dist/relay/server.js +1 -1
  22. package/dist/relay/server.js.map +1 -1
  23. package/dist/reputation/commit-reveal.d.ts +45 -0
  24. package/dist/reputation/commit-reveal.d.ts.map +1 -0
  25. package/dist/reputation/commit-reveal.js +125 -0
  26. package/dist/reputation/commit-reveal.js.map +1 -0
  27. package/dist/reputation/scoring.d.ts +31 -0
  28. package/dist/reputation/scoring.d.ts.map +1 -0
  29. package/dist/reputation/scoring.js +105 -0
  30. package/dist/reputation/scoring.js.map +1 -0
  31. package/dist/reputation/store.d.ts +83 -0
  32. package/dist/reputation/store.d.ts.map +1 -0
  33. package/dist/reputation/store.js +202 -0
  34. package/dist/reputation/store.js.map +1 -0
  35. package/dist/reputation/types.d.ts +150 -0
  36. package/dist/reputation/types.d.ts.map +1 -0
  37. package/dist/reputation/types.js +113 -0
  38. package/dist/reputation/types.js.map +1 -0
  39. package/dist/reputation/verification.d.ts +28 -0
  40. package/dist/reputation/verification.d.ts.map +1 -0
  41. package/dist/reputation/verification.js +91 -0
  42. package/dist/reputation/verification.js.map +1 -0
  43. package/dist/service.d.ts +3 -0
  44. package/dist/service.d.ts.map +1 -1
  45. package/dist/service.js +11 -2
  46. package/dist/service.js.map +1 -1
  47. package/dist/transport/http.d.ts.map +1 -1
  48. package/dist/transport/http.js +1 -1
  49. package/dist/transport/http.js.map +1 -1
  50. package/dist/transport/relay.d.ts.map +1 -1
  51. package/dist/transport/relay.js +2 -2
  52. package/dist/transport/relay.js.map +1 -1
  53. package/dist/utils.d.ts +1 -1
  54. package/dist/utils.d.ts.map +1 -1
  55. package/dist/utils.js +5 -4
  56. package/dist/utils.js.map +1 -1
  57. package/package.json +2 -2
@@ -0,0 +1,202 @@
1
+ /**
2
+ * Local reputation store using JSONL append-only log.
3
+ * Stores verification records, commits, and reveals.
4
+ */
5
+ import { promises as fs } from 'node:fs';
6
+ import { dirname } from 'node:path';
7
+ import { validateVerificationRecord, validateCommitRecord, validateRevealRecord } from './types.js';
8
+ /**
9
+ * Reputation store with JSONL persistence
10
+ */
11
+ export class ReputationStore {
12
+ filePath;
13
+ verifications = new Map();
14
+ commits = new Map();
15
+ reveals = new Map();
16
+ loaded = false;
17
+ constructor(filePath) {
18
+ this.filePath = filePath;
19
+ }
20
+ /**
21
+ * Load records from JSONL file
22
+ */
23
+ async load() {
24
+ try {
25
+ const content = await fs.readFile(this.filePath, 'utf-8');
26
+ const lines = content.trim().split('\n').filter(line => line.length > 0);
27
+ for (const line of lines) {
28
+ try {
29
+ const record = JSON.parse(line);
30
+ switch (record.type) {
31
+ case 'verification': {
32
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
33
+ const { type: _type, ...verification } = record;
34
+ const validation = validateVerificationRecord(verification);
35
+ if (validation.valid) {
36
+ this.verifications.set(verification.id, verification);
37
+ }
38
+ break;
39
+ }
40
+ case 'commit': {
41
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
42
+ const { type: _type, ...commit } = record;
43
+ const validation = validateCommitRecord(commit);
44
+ if (validation.valid) {
45
+ this.commits.set(commit.id, commit);
46
+ }
47
+ break;
48
+ }
49
+ case 'reveal': {
50
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
51
+ const { type: _type, ...reveal } = record;
52
+ const validation = validateRevealRecord(reveal);
53
+ if (validation.valid) {
54
+ this.reveals.set(reveal.id, reveal);
55
+ }
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ catch {
61
+ // Skip invalid lines
62
+ continue;
63
+ }
64
+ }
65
+ this.loaded = true;
66
+ }
67
+ catch (error) {
68
+ // File doesn't exist yet - that's okay for first run
69
+ if (error.code === 'ENOENT') {
70
+ this.loaded = true;
71
+ return;
72
+ }
73
+ throw error;
74
+ }
75
+ }
76
+ /**
77
+ * Ensure the store is loaded
78
+ */
79
+ async ensureLoaded() {
80
+ if (!this.loaded) {
81
+ await this.load();
82
+ }
83
+ }
84
+ /**
85
+ * Append a record to the JSONL file
86
+ */
87
+ async appendToFile(record) {
88
+ // Ensure directory exists
89
+ await fs.mkdir(dirname(this.filePath), { recursive: true });
90
+ // Append JSONL line
91
+ const line = JSON.stringify(record) + '\n';
92
+ await fs.appendFile(this.filePath, line, 'utf-8');
93
+ }
94
+ /**
95
+ * Add a verification record
96
+ */
97
+ async addVerification(verification) {
98
+ await this.ensureLoaded();
99
+ const validation = validateVerificationRecord(verification);
100
+ if (!validation.valid) {
101
+ throw new Error(`Invalid verification: ${validation.errors.join(', ')}`);
102
+ }
103
+ this.verifications.set(verification.id, verification);
104
+ await this.appendToFile({ type: 'verification', ...verification });
105
+ }
106
+ /**
107
+ * Add a commit record
108
+ */
109
+ async addCommit(commit) {
110
+ await this.ensureLoaded();
111
+ const validation = validateCommitRecord(commit);
112
+ if (!validation.valid) {
113
+ throw new Error(`Invalid commit: ${validation.errors.join(', ')}`);
114
+ }
115
+ this.commits.set(commit.id, commit);
116
+ await this.appendToFile({ type: 'commit', ...commit });
117
+ }
118
+ /**
119
+ * Add a reveal record
120
+ */
121
+ async addReveal(reveal) {
122
+ await this.ensureLoaded();
123
+ const validation = validateRevealRecord(reveal);
124
+ if (!validation.valid) {
125
+ throw new Error(`Invalid reveal: ${validation.errors.join(', ')}`);
126
+ }
127
+ this.reveals.set(reveal.id, reveal);
128
+ await this.appendToFile({ type: 'reveal', ...reveal });
129
+ }
130
+ /**
131
+ * Get all verifications
132
+ */
133
+ async getVerifications() {
134
+ await this.ensureLoaded();
135
+ return Array.from(this.verifications.values());
136
+ }
137
+ /**
138
+ * Get verifications for a specific target
139
+ */
140
+ async getVerificationsByTarget(target) {
141
+ await this.ensureLoaded();
142
+ return Array.from(this.verifications.values()).filter(v => v.target === target);
143
+ }
144
+ /**
145
+ * Get verifications by domain
146
+ */
147
+ async getVerificationsByDomain(domain) {
148
+ await this.ensureLoaded();
149
+ return Array.from(this.verifications.values()).filter(v => v.domain === domain);
150
+ }
151
+ /**
152
+ * Get verifications for an agent (where they are the target of verification)
153
+ * This requires looking up the target message to find the agent
154
+ * For now, we'll return all verifications and let the caller filter
155
+ */
156
+ async getVerificationsByDomainForAgent(domain) {
157
+ return this.getVerificationsByDomain(domain);
158
+ }
159
+ /**
160
+ * Get all commits
161
+ */
162
+ async getCommits() {
163
+ await this.ensureLoaded();
164
+ return Array.from(this.commits.values());
165
+ }
166
+ /**
167
+ * Get commit by ID
168
+ */
169
+ async getCommit(id) {
170
+ await this.ensureLoaded();
171
+ return this.commits.get(id) || null;
172
+ }
173
+ /**
174
+ * Get commits by agent
175
+ */
176
+ async getCommitsByAgent(agent) {
177
+ await this.ensureLoaded();
178
+ return Array.from(this.commits.values()).filter(c => c.agent === agent);
179
+ }
180
+ /**
181
+ * Get all reveals
182
+ */
183
+ async getReveals() {
184
+ await this.ensureLoaded();
185
+ return Array.from(this.reveals.values());
186
+ }
187
+ /**
188
+ * Get reveal by commitment ID
189
+ */
190
+ async getRevealByCommitment(commitmentId) {
191
+ await this.ensureLoaded();
192
+ return Array.from(this.reveals.values()).find(r => r.commitmentId === commitmentId) || null;
193
+ }
194
+ /**
195
+ * Get reveals by agent
196
+ */
197
+ async getRevealsByAgent(agent) {
198
+ await this.ensureLoaded();
199
+ return Array.from(this.reveals.values()).filter(r => r.agent === agent);
200
+ }
201
+ }
202
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/reputation/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Core data structures for the Agora reputation layer.
3
+ * Phase 1: Verification records, commit-reveal patterns, and trust scoring.
4
+ */
5
+ /**
6
+ * A cryptographically signed verification of another agent's output or claim.
7
+ * Core primitive for building computational reputation.
8
+ */
9
+ export interface VerificationRecord {
10
+ /** Content-addressed ID (hash of canonical JSON) */
11
+ id: string;
12
+ /** Public key of verifying agent */
13
+ verifier: string;
14
+ /** ID of message/output being verified */
15
+ target: string;
16
+ /** Capability domain (e.g., 'ocr', 'summarization', 'code_review') */
17
+ domain: string;
18
+ /** Verification verdict */
19
+ verdict: 'correct' | 'incorrect' | 'disputed';
20
+ /** Verifier's confidence in their check (0-1) */
21
+ confidence: number;
22
+ /** Optional link to independent verification data */
23
+ evidence?: string;
24
+ /** Unix timestamp (ms) */
25
+ timestamp: number;
26
+ /** Ed25519 signature over canonical JSON */
27
+ signature: string;
28
+ }
29
+ /**
30
+ * A commitment to a prediction before outcome is known.
31
+ * Prevents post-hoc editing of predictions.
32
+ */
33
+ export interface CommitRecord {
34
+ /** Content-addressed ID */
35
+ id: string;
36
+ /** Public key of committing agent */
37
+ agent: string;
38
+ /** Domain of prediction */
39
+ domain: string;
40
+ /** SHA-256 hash of prediction string */
41
+ commitment: string;
42
+ /** Unix timestamp (ms) */
43
+ timestamp: number;
44
+ /** Expiry time (ms) - commitment invalid after this */
45
+ expiry: number;
46
+ /** Ed25519 signature */
47
+ signature: string;
48
+ }
49
+ /**
50
+ * Reveals the prediction and outcome after commitment expiry.
51
+ * Enables verification of prediction accuracy.
52
+ */
53
+ export interface RevealRecord {
54
+ /** Content-addressed ID */
55
+ id: string;
56
+ /** Public key of revealing agent */
57
+ agent: string;
58
+ /** ID of original commit message */
59
+ commitmentId: string;
60
+ /** Original prediction (plaintext) */
61
+ prediction: string;
62
+ /** Observed outcome */
63
+ outcome: string;
64
+ /** Evidence for outcome (optional) */
65
+ evidence?: string;
66
+ /** Unix timestamp (ms) */
67
+ timestamp: number;
68
+ /** Ed25519 signature */
69
+ signature: string;
70
+ }
71
+ /**
72
+ * Computed reputation score for an agent in a specific domain.
73
+ * Derived from verification history, not stored directly.
74
+ */
75
+ export interface TrustScore {
76
+ /** Public key of agent being scored */
77
+ agent: string;
78
+ /** Domain of reputation */
79
+ domain: string;
80
+ /** Computed score (0-1, where 1 = highest trust) */
81
+ score: number;
82
+ /** Number of verifications considered */
83
+ verificationCount: number;
84
+ /** Timestamp of most recent verification (ms) */
85
+ lastVerified: number;
86
+ /** Public keys of top verifiers (by weight) */
87
+ topVerifiers: string[];
88
+ }
89
+ /**
90
+ * Request for reputation data about a specific agent.
91
+ */
92
+ export interface ReputationQuery {
93
+ /** Public key of agent being queried */
94
+ agent: string;
95
+ /** Optional: filter by capability domain */
96
+ domain?: string;
97
+ /** Optional: only include verifications after this timestamp */
98
+ after?: number;
99
+ }
100
+ /**
101
+ * Response containing reputation data for a queried agent.
102
+ */
103
+ export interface ReputationResponse {
104
+ /** Public key of agent being reported on */
105
+ agent: string;
106
+ /** Domain filter (if requested) */
107
+ domain?: string;
108
+ /** Verification records matching the query */
109
+ verifications: VerificationRecord[];
110
+ /** Computed trust scores by domain */
111
+ scores: Record<string, TrustScore>;
112
+ }
113
+ /**
114
+ * Revocation of a previously issued verification.
115
+ * Used when a verifier discovers their verification was incorrect.
116
+ */
117
+ export interface RevocationRecord {
118
+ /** Content-addressed ID of this revocation */
119
+ id: string;
120
+ /** Public key of agent revoking (must match original verifier) */
121
+ verifier: string;
122
+ /** ID of verification being revoked */
123
+ verificationId: string;
124
+ /** Reason for revocation */
125
+ reason: string;
126
+ /** Unix timestamp (ms) */
127
+ timestamp: number;
128
+ /** Ed25519 signature */
129
+ signature: string;
130
+ }
131
+ /**
132
+ * Validation result structure
133
+ */
134
+ export interface ValidationResult {
135
+ valid: boolean;
136
+ errors: string[];
137
+ }
138
+ /**
139
+ * Validate a verification record structure
140
+ */
141
+ export declare function validateVerificationRecord(record: unknown): ValidationResult;
142
+ /**
143
+ * Validate a commit record structure
144
+ */
145
+ export declare function validateCommitRecord(record: unknown): ValidationResult;
146
+ /**
147
+ * Validate a reveal record structure
148
+ */
149
+ export declare function validateRevealRecord(record: unknown): ValidationResult;
150
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/reputation/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Core data structures for the Agora reputation layer.
3
+ * Phase 1: Verification records, commit-reveal patterns, and trust scoring.
4
+ */
5
+ /**
6
+ * Validate a verification record structure
7
+ */
8
+ export function validateVerificationRecord(record) {
9
+ const errors = [];
10
+ if (typeof record !== 'object' || record === null) {
11
+ return { valid: false, errors: ['Record must be an object'] };
12
+ }
13
+ const r = record;
14
+ if (typeof r.id !== 'string' || r.id.length === 0) {
15
+ errors.push('id must be a non-empty string');
16
+ }
17
+ if (typeof r.verifier !== 'string' || r.verifier.length === 0) {
18
+ errors.push('verifier must be a non-empty string');
19
+ }
20
+ if (typeof r.target !== 'string' || r.target.length === 0) {
21
+ errors.push('target must be a non-empty string');
22
+ }
23
+ if (typeof r.domain !== 'string' || r.domain.length === 0) {
24
+ errors.push('domain must be a non-empty string');
25
+ }
26
+ if (!['correct', 'incorrect', 'disputed'].includes(r.verdict)) {
27
+ errors.push('verdict must be one of: correct, incorrect, disputed');
28
+ }
29
+ if (typeof r.confidence !== 'number' || r.confidence < 0 || r.confidence > 1) {
30
+ errors.push('confidence must be a number between 0 and 1');
31
+ }
32
+ if (r.evidence !== undefined && typeof r.evidence !== 'string') {
33
+ errors.push('evidence must be a string if provided');
34
+ }
35
+ if (typeof r.timestamp !== 'number' || r.timestamp <= 0) {
36
+ errors.push('timestamp must be a positive number');
37
+ }
38
+ if (typeof r.signature !== 'string' || r.signature.length === 0) {
39
+ errors.push('signature must be a non-empty string');
40
+ }
41
+ return { valid: errors.length === 0, errors };
42
+ }
43
+ /**
44
+ * Validate a commit record structure
45
+ */
46
+ export function validateCommitRecord(record) {
47
+ const errors = [];
48
+ if (typeof record !== 'object' || record === null) {
49
+ return { valid: false, errors: ['Record must be an object'] };
50
+ }
51
+ const r = record;
52
+ if (typeof r.id !== 'string' || r.id.length === 0) {
53
+ errors.push('id must be a non-empty string');
54
+ }
55
+ if (typeof r.agent !== 'string' || r.agent.length === 0) {
56
+ errors.push('agent must be a non-empty string');
57
+ }
58
+ if (typeof r.domain !== 'string' || r.domain.length === 0) {
59
+ errors.push('domain must be a non-empty string');
60
+ }
61
+ if (typeof r.commitment !== 'string' || r.commitment.length !== 64) {
62
+ errors.push('commitment must be a 64-character hex string (SHA-256 hash)');
63
+ }
64
+ if (typeof r.timestamp !== 'number' || r.timestamp <= 0) {
65
+ errors.push('timestamp must be a positive number');
66
+ }
67
+ if (typeof r.expiry !== 'number' || r.expiry <= 0) {
68
+ errors.push('expiry must be a positive number');
69
+ }
70
+ if (typeof r.expiry === 'number' && typeof r.timestamp === 'number' && r.expiry <= r.timestamp) {
71
+ errors.push('expiry must be after timestamp');
72
+ }
73
+ if (typeof r.signature !== 'string' || r.signature.length === 0) {
74
+ errors.push('signature must be a non-empty string');
75
+ }
76
+ return { valid: errors.length === 0, errors };
77
+ }
78
+ /**
79
+ * Validate a reveal record structure
80
+ */
81
+ export function validateRevealRecord(record) {
82
+ const errors = [];
83
+ if (typeof record !== 'object' || record === null) {
84
+ return { valid: false, errors: ['Record must be an object'] };
85
+ }
86
+ const r = record;
87
+ if (typeof r.id !== 'string' || r.id.length === 0) {
88
+ errors.push('id must be a non-empty string');
89
+ }
90
+ if (typeof r.agent !== 'string' || r.agent.length === 0) {
91
+ errors.push('agent must be a non-empty string');
92
+ }
93
+ if (typeof r.commitmentId !== 'string' || r.commitmentId.length === 0) {
94
+ errors.push('commitmentId must be a non-empty string');
95
+ }
96
+ if (typeof r.prediction !== 'string' || r.prediction.length === 0) {
97
+ errors.push('prediction must be a non-empty string');
98
+ }
99
+ if (typeof r.outcome !== 'string' || r.outcome.length === 0) {
100
+ errors.push('outcome must be a non-empty string');
101
+ }
102
+ if (r.evidence !== undefined && typeof r.evidence !== 'string') {
103
+ errors.push('evidence must be a string if provided');
104
+ }
105
+ if (typeof r.timestamp !== 'number' || r.timestamp <= 0) {
106
+ errors.push('timestamp must be a positive number');
107
+ }
108
+ if (typeof r.signature !== 'string' || r.signature.length === 0) {
109
+ errors.push('signature must be a non-empty string');
110
+ }
111
+ return { valid: errors.length === 0, errors };
112
+ }
113
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/reputation/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmLH;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAe;IACxD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,GAAG,MAAiC,CAAC;IAE5C,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAiB,CAAC,EAAE,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAClD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,GAAG,MAAiC,CAAC;IAE5C,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAClD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,GAAG,MAAiC,CAAC;IAE5C,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Verification record creation and validation.
3
+ * Core primitive for computational reputation.
4
+ */
5
+ import type { VerificationRecord } from './types.js';
6
+ /**
7
+ * Create a signed verification record
8
+ * @param verifier - Public key of the verifying agent
9
+ * @param privateKey - Private key for signing
10
+ * @param target - ID of the message/output being verified
11
+ * @param domain - Capability domain
12
+ * @param verdict - Verification verdict
13
+ * @param confidence - Verifier's confidence (0-1)
14
+ * @param timestamp - Timestamp for the verification (ms)
15
+ * @param evidence - Optional link to verification evidence
16
+ * @returns Signed VerificationRecord
17
+ */
18
+ export declare function createVerification(verifier: string, privateKey: string, target: string, domain: string, verdict: 'correct' | 'incorrect' | 'disputed', confidence: number, timestamp: number, evidence?: string): VerificationRecord;
19
+ /**
20
+ * Verify the cryptographic signature of a verification record
21
+ * @param record - The verification record to verify
22
+ * @returns Object with valid flag and optional reason for failure
23
+ */
24
+ export declare function verifyVerificationSignature(record: VerificationRecord): {
25
+ valid: boolean;
26
+ reason?: string;
27
+ };
28
+ //# sourceMappingURL=verification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../src/reputation/verification.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,EAC7C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,kBAAkB,CAwCpB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,kBAAkB,GACzB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAmCrC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Verification record creation and validation.
3
+ * Core primitive for computational reputation.
4
+ */
5
+ import { createEnvelope, verifyEnvelope } from '../message/envelope.js';
6
+ import { validateVerificationRecord } from './types.js';
7
+ /**
8
+ * Create a signed verification record
9
+ * @param verifier - Public key of the verifying agent
10
+ * @param privateKey - Private key for signing
11
+ * @param target - ID of the message/output being verified
12
+ * @param domain - Capability domain
13
+ * @param verdict - Verification verdict
14
+ * @param confidence - Verifier's confidence (0-1)
15
+ * @param timestamp - Timestamp for the verification (ms)
16
+ * @param evidence - Optional link to verification evidence
17
+ * @returns Signed VerificationRecord
18
+ */
19
+ export function createVerification(verifier, privateKey, target, domain, verdict, confidence, timestamp, evidence) {
20
+ // Validate confidence range
21
+ if (confidence < 0 || confidence > 1) {
22
+ throw new Error('confidence must be between 0 and 1');
23
+ }
24
+ // Create the payload for signing
25
+ const payload = {
26
+ verifier,
27
+ target,
28
+ domain,
29
+ verdict,
30
+ confidence,
31
+ timestamp,
32
+ };
33
+ if (evidence !== undefined) {
34
+ payload.evidence = evidence;
35
+ }
36
+ // Create signed envelope with type 'verification'
37
+ const envelope = createEnvelope('verification', verifier, privateKey, payload, timestamp);
38
+ // Return verification record
39
+ const record = {
40
+ id: envelope.id,
41
+ verifier,
42
+ target,
43
+ domain,
44
+ verdict,
45
+ confidence,
46
+ timestamp,
47
+ signature: envelope.signature,
48
+ };
49
+ if (evidence !== undefined) {
50
+ record.evidence = evidence;
51
+ }
52
+ return record;
53
+ }
54
+ /**
55
+ * Verify the cryptographic signature of a verification record
56
+ * @param record - The verification record to verify
57
+ * @returns Object with valid flag and optional reason for failure
58
+ */
59
+ export function verifyVerificationSignature(record) {
60
+ // First validate the structure
61
+ const structureValidation = validateVerificationRecord(record);
62
+ if (!structureValidation.valid) {
63
+ return {
64
+ valid: false,
65
+ reason: `Invalid structure: ${structureValidation.errors.join(', ')}`
66
+ };
67
+ }
68
+ // Reconstruct the envelope for signature verification
69
+ const payload = {
70
+ verifier: record.verifier,
71
+ target: record.target,
72
+ domain: record.domain,
73
+ verdict: record.verdict,
74
+ confidence: record.confidence,
75
+ timestamp: record.timestamp,
76
+ };
77
+ if (record.evidence !== undefined) {
78
+ payload.evidence = record.evidence;
79
+ }
80
+ const envelope = {
81
+ id: record.id,
82
+ type: 'verification',
83
+ sender: record.verifier,
84
+ timestamp: record.timestamp,
85
+ payload,
86
+ signature: record.signature,
87
+ };
88
+ // Verify the envelope signature
89
+ return verifyEnvelope(envelope);
90
+ }
91
+ //# sourceMappingURL=verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../../src/reputation/verification.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAgB,EAChB,UAAkB,EAClB,MAAc,EACd,MAAc,EACd,OAA6C,EAC7C,UAAkB,EAClB,SAAiB,EACjB,QAAiB;IAEjB,4BAA4B;IAC5B,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,iCAAiC;IACjC,MAAM,OAAO,GAA4B;QACvC,QAAQ;QACR,MAAM;QACN,MAAM;QACN,OAAO;QACP,UAAU;QACV,SAAS;KACV,CAAC;IAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,CAAC;IAED,kDAAkD;IAClD,MAAM,QAAQ,GAAG,cAAc,CAAC,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAE1F,6BAA6B;IAC7B,MAAM,MAAM,GAAuB;QACjC,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,QAAQ;QACR,MAAM;QACN,MAAM;QACN,OAAO;QACP,UAAU;QACV,SAAS;QACT,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAC;IAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAA0B;IAE1B,+BAA+B;IAC/B,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QAC/B,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,sBAAsB,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACtE,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,MAAM,OAAO,GAA4B;QACvC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;IAEF,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACrC,CAAC;IAED,MAAM,QAAQ,GAAG;QACf,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,cAAuB;QAC7B,MAAM,EAAE,MAAM,CAAC,QAAQ;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO;QACP,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;IAEF,gCAAgC;IAChC,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC"}
package/dist/service.d.ts CHANGED
@@ -27,6 +27,7 @@ export interface DecodeInboundResult {
27
27
  reason?: string;
28
28
  }
29
29
  export type RelayMessageHandler = (envelope: Envelope) => void;
30
+ export type RelayMessageHandlerWithName = (envelope: Envelope, from: string, fromName?: string) => void;
30
31
  export interface Logger {
31
32
  debug(message: string): void;
32
33
  }
@@ -54,6 +55,7 @@ export declare class AgoraService {
54
55
  private config;
55
56
  private relayClient;
56
57
  private relayMessageHandler;
58
+ private relayMessageHandlerWithName;
57
59
  private logger;
58
60
  private relayClientFactory;
59
61
  constructor(config: AgoraServiceConfig, logger?: Logger, relayClientFactory?: RelayClientFactory);
@@ -72,6 +74,7 @@ export declare class AgoraService {
72
74
  */
73
75
  connectRelay(url: string): Promise<void>;
74
76
  setRelayMessageHandler(handler: RelayMessageHandler): void;
77
+ setRelayMessageHandlerWithName(handler: RelayMessageHandlerWithName): void;
75
78
  disconnectRelay(): Promise<void>;
76
79
  isRelayConnected(): boolean;
77
80
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}