@vorionsys/proof-plane 0.1.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/dist/events/event-emitter.d.ts +140 -0
- package/dist/events/event-emitter.d.ts.map +1 -0
- package/dist/events/event-emitter.js +235 -0
- package/dist/events/event-emitter.js.map +1 -0
- package/dist/events/event-signatures.d.ts +154 -0
- package/dist/events/event-signatures.d.ts.map +1 -0
- package/dist/events/event-signatures.js +302 -0
- package/dist/events/event-signatures.js.map +1 -0
- package/dist/events/event-store.d.ts +159 -0
- package/dist/events/event-store.d.ts.map +1 -0
- package/dist/events/event-store.js +36 -0
- package/dist/events/event-store.js.map +1 -0
- package/dist/events/hash-chain.d.ts +63 -0
- package/dist/events/hash-chain.d.ts.map +1 -0
- package/dist/events/hash-chain.js +135 -0
- package/dist/events/hash-chain.js.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +9 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/memory-store.d.ts +82 -0
- package/dist/events/memory-store.d.ts.map +1 -0
- package/dist/events/memory-store.js +215 -0
- package/dist/events/memory-store.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/proof-plane/index.d.ts +6 -0
- package/dist/proof-plane/index.d.ts.map +1 -0
- package/dist/proof-plane/index.js +6 -0
- package/dist/proof-plane/index.js.map +1 -0
- package/dist/proof-plane/logger.d.ts +47 -0
- package/dist/proof-plane/logger.d.ts.map +1 -0
- package/dist/proof-plane/logger.js +48 -0
- package/dist/proof-plane/logger.js.map +1 -0
- package/dist/proof-plane/proof-plane.d.ts +263 -0
- package/dist/proof-plane/proof-plane.d.ts.map +1 -0
- package/dist/proof-plane/proof-plane.js +431 -0
- package/dist/proof-plane/proof-plane.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hash Chain Utilities - Cryptographic hash chain for tamper detection
|
|
3
|
+
*
|
|
4
|
+
* Each proof event contains a hash of its contents and a reference
|
|
5
|
+
* to the previous event's hash, forming an immutable chain.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Create a SHA-256 hash of the given data
|
|
9
|
+
*/
|
|
10
|
+
export async function sha256(data) {
|
|
11
|
+
const encoder = new TextEncoder();
|
|
12
|
+
const dataBuffer = encoder.encode(data);
|
|
13
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);
|
|
14
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
15
|
+
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create the hashable representation of an event
|
|
19
|
+
*/
|
|
20
|
+
function getHashableData(event) {
|
|
21
|
+
return {
|
|
22
|
+
eventId: event.eventId,
|
|
23
|
+
eventType: event.eventType,
|
|
24
|
+
correlationId: event.correlationId,
|
|
25
|
+
agentId: event.agentId,
|
|
26
|
+
payload: event.payload,
|
|
27
|
+
previousHash: event.previousHash,
|
|
28
|
+
occurredAt: event.occurredAt instanceof Date
|
|
29
|
+
? event.occurredAt.toISOString()
|
|
30
|
+
: event.occurredAt,
|
|
31
|
+
signedBy: event.signedBy,
|
|
32
|
+
signature: event.signature,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Recursively sort object keys for deterministic serialization
|
|
37
|
+
*/
|
|
38
|
+
function sortObjectKeys(obj) {
|
|
39
|
+
if (obj === null || typeof obj !== 'object') {
|
|
40
|
+
return obj;
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(obj)) {
|
|
43
|
+
return obj.map(sortObjectKeys);
|
|
44
|
+
}
|
|
45
|
+
const sorted = {};
|
|
46
|
+
for (const key of Object.keys(obj).sort()) {
|
|
47
|
+
sorted[key] = sortObjectKeys(obj[key]);
|
|
48
|
+
}
|
|
49
|
+
return sorted;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Compute the hash of an event's content
|
|
53
|
+
*/
|
|
54
|
+
export async function computeEventHash(event) {
|
|
55
|
+
const hashable = getHashableData(event);
|
|
56
|
+
const sortedHashable = sortObjectKeys(hashable);
|
|
57
|
+
const serialized = JSON.stringify(sortedHashable);
|
|
58
|
+
return sha256(serialized);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Verify that an event's hash is correct
|
|
62
|
+
*/
|
|
63
|
+
export async function verifyEventHash(event) {
|
|
64
|
+
const computedHash = await computeEventHash(event);
|
|
65
|
+
return computedHash === event.eventHash;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Verify that an event correctly chains to the previous event
|
|
69
|
+
*/
|
|
70
|
+
export function verifyChainLink(event, previousEvent) {
|
|
71
|
+
if (previousEvent === null) {
|
|
72
|
+
// First event in chain should have null previousHash
|
|
73
|
+
return event.previousHash === null;
|
|
74
|
+
}
|
|
75
|
+
return event.previousHash === previousEvent.eventHash;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Verify an entire chain of events
|
|
79
|
+
*/
|
|
80
|
+
export async function verifyChain(events) {
|
|
81
|
+
if (events.length === 0) {
|
|
82
|
+
return { valid: true, verifiedCount: 0 };
|
|
83
|
+
}
|
|
84
|
+
// Events should be in order (oldest first)
|
|
85
|
+
for (let i = 0; i < events.length; i++) {
|
|
86
|
+
const event = events[i];
|
|
87
|
+
const previousEvent = i === 0 ? null : events[i - 1];
|
|
88
|
+
// Verify hash integrity
|
|
89
|
+
const hashValid = await verifyEventHash(event);
|
|
90
|
+
if (!hashValid) {
|
|
91
|
+
return {
|
|
92
|
+
valid: false,
|
|
93
|
+
verifiedCount: i,
|
|
94
|
+
brokenAtIndex: i,
|
|
95
|
+
brokenAtEventId: event.eventId,
|
|
96
|
+
error: `Event ${event.eventId} has invalid hash`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// Verify chain link
|
|
100
|
+
const chainValid = verifyChainLink(event, previousEvent);
|
|
101
|
+
if (!chainValid) {
|
|
102
|
+
return {
|
|
103
|
+
valid: false,
|
|
104
|
+
verifiedCount: i,
|
|
105
|
+
brokenAtIndex: i,
|
|
106
|
+
brokenAtEventId: event.eventId,
|
|
107
|
+
error: `Event ${event.eventId} has broken chain link`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return { valid: true, verifiedCount: events.length };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create a genesis hash for the first event in a chain
|
|
115
|
+
*/
|
|
116
|
+
export function getGenesisHash() {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Verify a chain and return detailed results
|
|
121
|
+
*/
|
|
122
|
+
export async function verifyChainWithDetails(events) {
|
|
123
|
+
const result = await verifyChain(events);
|
|
124
|
+
return {
|
|
125
|
+
valid: result.valid,
|
|
126
|
+
verifiedCount: result.verifiedCount,
|
|
127
|
+
totalEvents: events.length,
|
|
128
|
+
firstEventId: events[0]?.eventId,
|
|
129
|
+
lastEventId: events[events.length - 1]?.eventId,
|
|
130
|
+
brokenAtEventId: result.brokenAtEventId,
|
|
131
|
+
brokenAtIndex: result.brokenAtIndex,
|
|
132
|
+
error: result.error,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=hash-chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash-chain.js","sourceRoot":"","sources":["../../src/events/hash-chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events module - Event store, emitter, and hash chain utilities
|
|
3
|
+
*/
|
|
4
|
+
export * from './event-store.js';
|
|
5
|
+
export * from './memory-store.js';
|
|
6
|
+
export * from './event-emitter.js';
|
|
7
|
+
export * from './hash-chain.js';
|
|
8
|
+
export * from './event-signatures.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Events module - Event store, emitter, and hash chain utilities
|
|
3
|
+
*/
|
|
4
|
+
export * from './event-store.js';
|
|
5
|
+
export * from './memory-store.js';
|
|
6
|
+
export * from './event-emitter.js';
|
|
7
|
+
export * from './hash-chain.js';
|
|
8
|
+
export * from './event-signatures.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-Memory Event Store - Reference implementation for testing
|
|
3
|
+
*
|
|
4
|
+
* This implementation stores events in memory. For production,
|
|
5
|
+
* use a persistent store (PostgreSQL, Supabase, etc.).
|
|
6
|
+
*/
|
|
7
|
+
import type { ProofEvent, ProofEventFilter, ProofEventSummary, ProofEventType } from '@vorion/contracts';
|
|
8
|
+
import { type ProofEventStore, type EventQueryOptions, type EventQueryResult, type EventStats } from './event-store.js';
|
|
9
|
+
/**
|
|
10
|
+
* In-memory implementation of ProofEventStore
|
|
11
|
+
*/
|
|
12
|
+
export declare class InMemoryEventStore implements ProofEventStore {
|
|
13
|
+
private events;
|
|
14
|
+
private eventOrder;
|
|
15
|
+
/**
|
|
16
|
+
* Append an event to the store
|
|
17
|
+
*/
|
|
18
|
+
append(event: ProofEvent): Promise<ProofEvent>;
|
|
19
|
+
/**
|
|
20
|
+
* Get an event by ID
|
|
21
|
+
*/
|
|
22
|
+
get(eventId: string): Promise<ProofEvent | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Get the latest event
|
|
25
|
+
*/
|
|
26
|
+
getLatest(): Promise<ProofEvent | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Get the latest hash for chaining
|
|
29
|
+
*/
|
|
30
|
+
getLatestHash(): Promise<string | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Query events with filters
|
|
33
|
+
*/
|
|
34
|
+
query(filter?: ProofEventFilter, options?: EventQueryOptions): Promise<EventQueryResult>;
|
|
35
|
+
/**
|
|
36
|
+
* Get events by correlation ID
|
|
37
|
+
*/
|
|
38
|
+
getByCorrelationId(correlationId: string, options?: EventQueryOptions): Promise<ProofEvent[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Get events by agent ID
|
|
41
|
+
*/
|
|
42
|
+
getByAgentId(agentId: string, options?: EventQueryOptions): Promise<ProofEvent[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Get events in a time range
|
|
45
|
+
*/
|
|
46
|
+
getByTimeRange(from: Date, to: Date, options?: EventQueryOptions): Promise<ProofEvent[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Get events by type
|
|
49
|
+
*/
|
|
50
|
+
getByType(eventType: ProofEventType, options?: EventQueryOptions): Promise<ProofEvent[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Get event summaries
|
|
53
|
+
*/
|
|
54
|
+
getSummaries(filter?: ProofEventFilter, options?: EventQueryOptions): Promise<ProofEventSummary[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Get the chain from a starting point
|
|
57
|
+
*/
|
|
58
|
+
getChain(fromEventId?: string, limit?: number): Promise<ProofEvent[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Get event count
|
|
61
|
+
*/
|
|
62
|
+
count(filter?: ProofEventFilter): Promise<number>;
|
|
63
|
+
/**
|
|
64
|
+
* Get event statistics
|
|
65
|
+
*/
|
|
66
|
+
getStats(): Promise<EventStats>;
|
|
67
|
+
/**
|
|
68
|
+
* Check if an event exists
|
|
69
|
+
*/
|
|
70
|
+
exists(eventId: string): Promise<boolean>;
|
|
71
|
+
/**
|
|
72
|
+
* Clear all events
|
|
73
|
+
*/
|
|
74
|
+
clear(): Promise<void>;
|
|
75
|
+
private getOrderedEvents;
|
|
76
|
+
private applyFilter;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create an in-memory event store
|
|
80
|
+
*/
|
|
81
|
+
export declare function createInMemoryEventStore(): InMemoryEventStore;
|
|
82
|
+
//# sourceMappingURL=memory-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/events/memory-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAGhB,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,UAAU,CAAgB;IAElC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAqBpD;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAItD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQ7C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK7C;;OAEG;IACG,KAAK,CACT,MAAM,CAAC,EAAE,gBAAgB,EACzB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IA2B5B;;OAEG;IACG,kBAAkB,CACtB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC;IAKxB;;OAEG;IACG,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC;IAKxB;;OAEG;IACG,cAAc,CAClB,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,IAAI,EACR,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC;IAKxB;;OAEG;IACG,SAAS,CACb,SAAS,EAAE,cAAc,EACzB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC;IAKxB;;OAEG;IACG,YAAY,CAChB,MAAM,CAAC,EAAE,gBAAgB,EACzB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAY/B;;OAEG;IACG,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAe3E;;OAEG;IACG,KAAK,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAQvD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAsBrC;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,WAAW;CAoBpB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-Memory Event Store - Reference implementation for testing
|
|
3
|
+
*
|
|
4
|
+
* This implementation stores events in memory. For production,
|
|
5
|
+
* use a persistent store (PostgreSQL, Supabase, etc.).
|
|
6
|
+
*/
|
|
7
|
+
import { EventStoreError, EventStoreErrorCode, } from './event-store.js';
|
|
8
|
+
/**
|
|
9
|
+
* In-memory implementation of ProofEventStore
|
|
10
|
+
*/
|
|
11
|
+
export class InMemoryEventStore {
|
|
12
|
+
events = new Map();
|
|
13
|
+
eventOrder = []; // Maintains insertion order
|
|
14
|
+
/**
|
|
15
|
+
* Append an event to the store
|
|
16
|
+
*/
|
|
17
|
+
async append(event) {
|
|
18
|
+
if (this.events.has(event.eventId)) {
|
|
19
|
+
throw new EventStoreError(`Event ${event.eventId} already exists`, EventStoreErrorCode.DUPLICATE_EVENT, event.eventId);
|
|
20
|
+
}
|
|
21
|
+
// Set recorded timestamp if not already set
|
|
22
|
+
const storedEvent = {
|
|
23
|
+
...event,
|
|
24
|
+
recordedAt: event.recordedAt ?? new Date(),
|
|
25
|
+
};
|
|
26
|
+
this.events.set(event.eventId, storedEvent);
|
|
27
|
+
this.eventOrder.push(event.eventId);
|
|
28
|
+
return storedEvent;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get an event by ID
|
|
32
|
+
*/
|
|
33
|
+
async get(eventId) {
|
|
34
|
+
return this.events.get(eventId) ?? null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the latest event
|
|
38
|
+
*/
|
|
39
|
+
async getLatest() {
|
|
40
|
+
if (this.eventOrder.length === 0) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const lastId = this.eventOrder[this.eventOrder.length - 1];
|
|
44
|
+
return this.events.get(lastId) ?? null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get the latest hash for chaining
|
|
48
|
+
*/
|
|
49
|
+
async getLatestHash() {
|
|
50
|
+
const latest = await this.getLatest();
|
|
51
|
+
return latest?.eventHash ?? null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Query events with filters
|
|
55
|
+
*/
|
|
56
|
+
async query(filter, options) {
|
|
57
|
+
let events = this.getOrderedEvents(options?.order);
|
|
58
|
+
// Apply filters
|
|
59
|
+
if (filter) {
|
|
60
|
+
events = this.applyFilter(events, filter);
|
|
61
|
+
}
|
|
62
|
+
const totalCount = events.length;
|
|
63
|
+
// Apply pagination
|
|
64
|
+
const offset = options?.offset ?? 0;
|
|
65
|
+
const limit = options?.limit ?? 100;
|
|
66
|
+
const paginatedEvents = events.slice(offset, offset + limit);
|
|
67
|
+
// Optionally strip payloads
|
|
68
|
+
const resultEvents = options?.includePayload === false
|
|
69
|
+
? paginatedEvents.map(e => ({ ...e, payload: { type: e.payload.type } }))
|
|
70
|
+
: paginatedEvents;
|
|
71
|
+
return {
|
|
72
|
+
events: resultEvents,
|
|
73
|
+
totalCount,
|
|
74
|
+
hasMore: offset + limit < totalCount,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get events by correlation ID
|
|
79
|
+
*/
|
|
80
|
+
async getByCorrelationId(correlationId, options) {
|
|
81
|
+
const result = await this.query({ correlationId }, options);
|
|
82
|
+
return result.events;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get events by agent ID
|
|
86
|
+
*/
|
|
87
|
+
async getByAgentId(agentId, options) {
|
|
88
|
+
const result = await this.query({ agentId }, options);
|
|
89
|
+
return result.events;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get events in a time range
|
|
93
|
+
*/
|
|
94
|
+
async getByTimeRange(from, to, options) {
|
|
95
|
+
const result = await this.query({ from, to }, options);
|
|
96
|
+
return result.events;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get events by type
|
|
100
|
+
*/
|
|
101
|
+
async getByType(eventType, options) {
|
|
102
|
+
const result = await this.query({ eventTypes: [eventType] }, options);
|
|
103
|
+
return result.events;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get event summaries
|
|
107
|
+
*/
|
|
108
|
+
async getSummaries(filter, options) {
|
|
109
|
+
const result = await this.query(filter, options);
|
|
110
|
+
return result.events.map(e => ({
|
|
111
|
+
eventId: e.eventId,
|
|
112
|
+
eventType: e.eventType,
|
|
113
|
+
correlationId: e.correlationId,
|
|
114
|
+
agentId: e.agentId,
|
|
115
|
+
occurredAt: e.occurredAt,
|
|
116
|
+
recordedAt: e.recordedAt,
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get the chain from a starting point
|
|
121
|
+
*/
|
|
122
|
+
async getChain(fromEventId, limit) {
|
|
123
|
+
const events = this.getOrderedEvents('asc');
|
|
124
|
+
if (fromEventId) {
|
|
125
|
+
const startIndex = events.findIndex(e => e.eventId === fromEventId);
|
|
126
|
+
if (startIndex === -1) {
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
const chainEvents = events.slice(startIndex);
|
|
130
|
+
return limit ? chainEvents.slice(0, limit) : chainEvents;
|
|
131
|
+
}
|
|
132
|
+
return limit ? events.slice(0, limit) : events;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get event count
|
|
136
|
+
*/
|
|
137
|
+
async count(filter) {
|
|
138
|
+
if (!filter) {
|
|
139
|
+
return this.events.size;
|
|
140
|
+
}
|
|
141
|
+
const events = this.applyFilter(this.getOrderedEvents(), filter);
|
|
142
|
+
return events.length;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get event statistics
|
|
146
|
+
*/
|
|
147
|
+
async getStats() {
|
|
148
|
+
const events = this.getOrderedEvents('asc');
|
|
149
|
+
const byType = {};
|
|
150
|
+
const byAgent = {};
|
|
151
|
+
for (const event of events) {
|
|
152
|
+
byType[event.eventType] = (byType[event.eventType] ?? 0) + 1;
|
|
153
|
+
if (event.agentId) {
|
|
154
|
+
byAgent[event.agentId] = (byAgent[event.agentId] ?? 0) + 1;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
totalEvents: events.length,
|
|
159
|
+
byType,
|
|
160
|
+
byAgent,
|
|
161
|
+
oldestEvent: events[0]?.occurredAt,
|
|
162
|
+
newestEvent: events[events.length - 1]?.occurredAt,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Check if an event exists
|
|
167
|
+
*/
|
|
168
|
+
async exists(eventId) {
|
|
169
|
+
return this.events.has(eventId);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Clear all events
|
|
173
|
+
*/
|
|
174
|
+
async clear() {
|
|
175
|
+
this.events.clear();
|
|
176
|
+
this.eventOrder = [];
|
|
177
|
+
}
|
|
178
|
+
// Private helpers
|
|
179
|
+
getOrderedEvents(order = 'asc') {
|
|
180
|
+
const events = this.eventOrder
|
|
181
|
+
.map(id => this.events.get(id))
|
|
182
|
+
.filter((e) => e !== undefined);
|
|
183
|
+
if (order === 'desc') {
|
|
184
|
+
return events.reverse();
|
|
185
|
+
}
|
|
186
|
+
return events;
|
|
187
|
+
}
|
|
188
|
+
applyFilter(events, filter) {
|
|
189
|
+
return events.filter(event => {
|
|
190
|
+
if (filter.correlationId && event.correlationId !== filter.correlationId) {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
if (filter.agentId && event.agentId !== filter.agentId) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
if (filter.eventTypes && !filter.eventTypes.includes(event.eventType)) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
if (filter.from && event.occurredAt < filter.from) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
if (filter.to && event.occurredAt > filter.to) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
return true;
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Create an in-memory event store
|
|
211
|
+
*/
|
|
212
|
+
export function createInMemoryEventStore() {
|
|
213
|
+
return new InMemoryEventStore();
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/events/memory-store.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vorion Package - Proof Plane for AI Agent Operations
|
|
3
|
+
*
|
|
4
|
+
* The Vorion proof plane provides an immutable audit trail for all
|
|
5
|
+
* AI agent operations, enabling compliance, debugging, and trust verification.
|
|
6
|
+
*
|
|
7
|
+
* Key components:
|
|
8
|
+
* - ProofPlane: High-level API for the audit system
|
|
9
|
+
* - ProofEventStore: Abstract storage interface
|
|
10
|
+
* - ProofEventEmitter: Event creation with hash chaining
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createProofPlane } from '@vorion/proof-plane';
|
|
15
|
+
*
|
|
16
|
+
* const proofPlane = createProofPlane({ signedBy: 'my-service' });
|
|
17
|
+
*
|
|
18
|
+
* // Log events
|
|
19
|
+
* await proofPlane.logIntentReceived(intent);
|
|
20
|
+
* await proofPlane.logDecisionMade(decision);
|
|
21
|
+
*
|
|
22
|
+
* // Query events
|
|
23
|
+
* const trace = await proofPlane.getTrace(correlationId);
|
|
24
|
+
*
|
|
25
|
+
* // Verify chain integrity
|
|
26
|
+
* const verification = await proofPlane.verifyChain();
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export { ProofPlane, createProofPlane, type ProofPlaneConfig, } from './proof-plane/proof-plane.js';
|
|
30
|
+
export { ProofPlaneLoggerImpl, createProofPlaneLogger, noopProofPlaneLogger, type ProofPlaneLogger, type ProofPlaneLoggerConfig, } from './proof-plane/logger.js';
|
|
31
|
+
export { type ProofEventStore, type EventQueryOptions, type EventQueryResult, type EventStats, EventStoreError, EventStoreErrorCode, } from './events/event-store.js';
|
|
32
|
+
export { InMemoryEventStore, createInMemoryEventStore, } from './events/memory-store.js';
|
|
33
|
+
export { ProofEventEmitter, createEventEmitter, type EventEmitterConfig, type EventListener, type EmitResult, type BatchEmitOptions, type BatchEmitResult, } from './events/event-emitter.js';
|
|
34
|
+
export { sha256, computeEventHash, verifyEventHash, verifyChainLink, verifyChain, verifyChainWithDetails, getGenesisHash, type ChainVerificationResult, } from './events/hash-chain.js';
|
|
35
|
+
export { generateSigningKeyPair, signEvent, verifyEventSignature, verifyEventSignatures, EventSigningService, createSigningService, type SigningKeyPair, type PublicKey, type SignatureVerificationResult, type SigningServiceConfig, type BatchVerificationResult, } from './events/event-signatures.js';
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,KAAK,gBAAgB,GACtB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,eAAe,EACf,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,cAAc,EACd,KAAK,uBAAuB,GAC7B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,sBAAsB,EACtB,SAAS,EACT,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,GAC7B,MAAM,8BAA8B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vorion Package - Proof Plane for AI Agent Operations
|
|
3
|
+
*
|
|
4
|
+
* The Vorion proof plane provides an immutable audit trail for all
|
|
5
|
+
* AI agent operations, enabling compliance, debugging, and trust verification.
|
|
6
|
+
*
|
|
7
|
+
* Key components:
|
|
8
|
+
* - ProofPlane: High-level API for the audit system
|
|
9
|
+
* - ProofEventStore: Abstract storage interface
|
|
10
|
+
* - ProofEventEmitter: Event creation with hash chaining
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { createProofPlane } from '@vorion/proof-plane';
|
|
15
|
+
*
|
|
16
|
+
* const proofPlane = createProofPlane({ signedBy: 'my-service' });
|
|
17
|
+
*
|
|
18
|
+
* // Log events
|
|
19
|
+
* await proofPlane.logIntentReceived(intent);
|
|
20
|
+
* await proofPlane.logDecisionMade(decision);
|
|
21
|
+
*
|
|
22
|
+
* // Query events
|
|
23
|
+
* const trace = await proofPlane.getTrace(correlationId);
|
|
24
|
+
*
|
|
25
|
+
* // Verify chain integrity
|
|
26
|
+
* const verification = await proofPlane.verifyChain();
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
// Main exports
|
|
30
|
+
export { ProofPlane, createProofPlane, } from './proof-plane/proof-plane.js';
|
|
31
|
+
export { ProofPlaneLoggerImpl, createProofPlaneLogger, noopProofPlaneLogger, } from './proof-plane/logger.js';
|
|
32
|
+
// Event store exports
|
|
33
|
+
export { EventStoreError, EventStoreErrorCode, } from './events/event-store.js';
|
|
34
|
+
export { InMemoryEventStore, createInMemoryEventStore, } from './events/memory-store.js';
|
|
35
|
+
// Event emitter exports
|
|
36
|
+
export { ProofEventEmitter, createEventEmitter, } from './events/event-emitter.js';
|
|
37
|
+
// Hash chain exports
|
|
38
|
+
export { sha256, computeEventHash, verifyEventHash, verifyChainLink, verifyChain, verifyChainWithDetails, getGenesisHash, } from './events/hash-chain.js';
|
|
39
|
+
// Event signature exports
|
|
40
|
+
export { generateSigningKeyPair, signEvent, verifyEventSignature, verifyEventSignatures, EventSigningService, createSigningService, } from './events/event-signatures.js';
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,eAAe;AACf,OAAO,EACL,UAAU,EACV,gBAAgB,GAEjB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GAGrB,MAAM,yBAAyB,CAAC;AAEjC,sBAAsB;AACtB,OAAO,EAKL,eAAe,EACf,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAElC,wBAAwB;AACxB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GAMnB,MAAM,2BAA2B,CAAC;AAEnC,qBAAqB;AACrB,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,cAAc,GAEf,MAAM,wBAAwB,CAAC;AAEhC,0BAA0B;AAC1B,OAAO,EACL,sBAAsB,EACtB,SAAS,EACT,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,GAMrB,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proof-plane/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proof-plane/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof Plane Logger - Implements the ProofPlaneLogger interface for A3I
|
|
3
|
+
*
|
|
4
|
+
* This bridges the A3I authorization engine with the Vorion proof plane,
|
|
5
|
+
* automatically logging authorization decisions to the audit trail.
|
|
6
|
+
*/
|
|
7
|
+
import type { Intent, Decision } from '@vorion/contracts';
|
|
8
|
+
import { ProofPlane } from './proof-plane.js';
|
|
9
|
+
/**
|
|
10
|
+
* Interface for proof plane logging (matches A3I's expected interface)
|
|
11
|
+
*/
|
|
12
|
+
export interface ProofPlaneLogger {
|
|
13
|
+
logDecision(decision: Decision, intent: Intent): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for the proof plane logger
|
|
17
|
+
*/
|
|
18
|
+
export interface ProofPlaneLoggerConfig {
|
|
19
|
+
/** The proof plane instance to use */
|
|
20
|
+
proofPlane: ProofPlane;
|
|
21
|
+
/** Whether to log intent received events */
|
|
22
|
+
logIntentReceived?: boolean;
|
|
23
|
+
/** Whether to log decision made events */
|
|
24
|
+
logDecisionMade?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* ProofPlaneLoggerImpl - Logs A3I events to the proof plane
|
|
28
|
+
*/
|
|
29
|
+
export declare class ProofPlaneLoggerImpl implements ProofPlaneLogger {
|
|
30
|
+
private readonly proofPlane;
|
|
31
|
+
private readonly logIntentReceived;
|
|
32
|
+
private readonly logDecisionMade;
|
|
33
|
+
constructor(config: ProofPlaneLoggerConfig);
|
|
34
|
+
/**
|
|
35
|
+
* Log a decision (and optionally the intent)
|
|
36
|
+
*/
|
|
37
|
+
logDecision(decision: Decision, intent: Intent): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Create a proof plane logger
|
|
41
|
+
*/
|
|
42
|
+
export declare function createProofPlaneLogger(config: ProofPlaneLoggerConfig): ProofPlaneLoggerImpl;
|
|
43
|
+
/**
|
|
44
|
+
* No-op logger for when proof plane is not connected
|
|
45
|
+
*/
|
|
46
|
+
export declare const noopProofPlaneLogger: ProofPlaneLogger;
|
|
47
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/proof-plane/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,sCAAsC;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0CAA0C;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;gBAE9B,MAAM,EAAE,sBAAsB;IAM1C;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAarE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,GAAG,oBAAoB,CAE3F;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAIlC,CAAC"}
|