@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,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Emitter - Creates and chains proof events
|
|
3
|
+
*
|
|
4
|
+
* Handles the creation of properly hashed and chained proof events,
|
|
5
|
+
* ensuring immutability and tamper detection.
|
|
6
|
+
*/
|
|
7
|
+
import type { ProofEvent, ProofEventPayload, ProofEventType, LogProofEventRequest, ShadowModeStatus } from '@vorion/contracts';
|
|
8
|
+
import { type ProofEventStore } from './event-store.js';
|
|
9
|
+
import { type EventSigningService } from './event-signatures.js';
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for the event emitter
|
|
12
|
+
*/
|
|
13
|
+
export interface EventEmitterConfig {
|
|
14
|
+
/** Event store to use */
|
|
15
|
+
store: ProofEventStore;
|
|
16
|
+
/** Signer identifier (e.g., service name) */
|
|
17
|
+
signedBy?: string;
|
|
18
|
+
/** Enable signature generation */
|
|
19
|
+
enableSignatures?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Signing service for Ed25519 signatures
|
|
22
|
+
* Required when enableSignatures is true
|
|
23
|
+
*/
|
|
24
|
+
signingService?: EventSigningService;
|
|
25
|
+
/**
|
|
26
|
+
* Private key for signing (base64-encoded Ed25519 private key)
|
|
27
|
+
* Alternative to signingService for simple setups
|
|
28
|
+
*/
|
|
29
|
+
privateKey?: string;
|
|
30
|
+
/** Event listeners for real-time notifications */
|
|
31
|
+
listeners?: EventListener[];
|
|
32
|
+
/**
|
|
33
|
+
* Shadow mode for sandbox/testnet events
|
|
34
|
+
*
|
|
35
|
+
* When set, all emitted events are tagged with this status.
|
|
36
|
+
* Used for T0_SANDBOX agents whose events need HITL verification.
|
|
37
|
+
*
|
|
38
|
+
* @default 'production'
|
|
39
|
+
*/
|
|
40
|
+
shadowMode?: ShadowModeStatus;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Event listener callback
|
|
44
|
+
*/
|
|
45
|
+
export type EventListener = (event: ProofEvent) => void | Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Result of emitting an event
|
|
48
|
+
*/
|
|
49
|
+
export interface EmitResult {
|
|
50
|
+
/** The created event */
|
|
51
|
+
event: ProofEvent;
|
|
52
|
+
/** Whether this is the first event in the chain */
|
|
53
|
+
isGenesis: boolean;
|
|
54
|
+
/** Previous event hash (null for genesis) */
|
|
55
|
+
previousHash: string | null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Batch emit options
|
|
59
|
+
*/
|
|
60
|
+
export interface BatchEmitOptions {
|
|
61
|
+
/** Whether to stop on first error */
|
|
62
|
+
stopOnError?: boolean;
|
|
63
|
+
/** Correlation ID to use for all events */
|
|
64
|
+
correlationId?: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Result of batch emit
|
|
68
|
+
*/
|
|
69
|
+
export interface BatchEmitResult {
|
|
70
|
+
/** Successfully created events */
|
|
71
|
+
events: ProofEvent[];
|
|
72
|
+
/** Errors encountered */
|
|
73
|
+
errors: Array<{
|
|
74
|
+
index: number;
|
|
75
|
+
error: Error;
|
|
76
|
+
}>;
|
|
77
|
+
/** Whether all events were created successfully */
|
|
78
|
+
success: boolean;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* ProofEventEmitter - Creates properly hashed and chained events
|
|
82
|
+
*/
|
|
83
|
+
export declare class ProofEventEmitter {
|
|
84
|
+
private readonly store;
|
|
85
|
+
private readonly signedBy?;
|
|
86
|
+
private readonly enableSignatures;
|
|
87
|
+
private readonly signingService?;
|
|
88
|
+
private readonly privateKey?;
|
|
89
|
+
private readonly listeners;
|
|
90
|
+
private readonly shadowMode;
|
|
91
|
+
private emitLock;
|
|
92
|
+
constructor(config: EventEmitterConfig);
|
|
93
|
+
/**
|
|
94
|
+
* Check if signature generation is enabled and configured
|
|
95
|
+
*/
|
|
96
|
+
isSigningEnabled(): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Check if this emitter is in shadow mode
|
|
99
|
+
*/
|
|
100
|
+
isShadowMode(): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Get the current shadow mode status
|
|
103
|
+
*/
|
|
104
|
+
getShadowMode(): ShadowModeStatus;
|
|
105
|
+
/**
|
|
106
|
+
* Emit a new proof event
|
|
107
|
+
*
|
|
108
|
+
* Events are serialized to ensure proper chaining.
|
|
109
|
+
*/
|
|
110
|
+
emit(request: LogProofEventRequest): Promise<EmitResult>;
|
|
111
|
+
/**
|
|
112
|
+
* Emit an event with specific type helper
|
|
113
|
+
*/
|
|
114
|
+
emitTyped<T extends ProofEventPayload>(eventType: ProofEventType, correlationId: string, payload: T, agentId?: string): Promise<EmitResult>;
|
|
115
|
+
/**
|
|
116
|
+
* Emit multiple events in a batch
|
|
117
|
+
*/
|
|
118
|
+
emitBatch(requests: LogProofEventRequest[], options?: BatchEmitOptions): Promise<BatchEmitResult>;
|
|
119
|
+
/**
|
|
120
|
+
* Add an event listener
|
|
121
|
+
*/
|
|
122
|
+
addListener(listener: EventListener): void;
|
|
123
|
+
/**
|
|
124
|
+
* Remove an event listener
|
|
125
|
+
*/
|
|
126
|
+
removeListener(listener: EventListener): void;
|
|
127
|
+
/**
|
|
128
|
+
* Get the underlying store
|
|
129
|
+
*/
|
|
130
|
+
getStore(): ProofEventStore;
|
|
131
|
+
private serializedEmit;
|
|
132
|
+
private createAndStoreEvent;
|
|
133
|
+
private validateEvent;
|
|
134
|
+
private notifyListeners;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Create a proof event emitter
|
|
138
|
+
*/
|
|
139
|
+
export declare function createEventEmitter(config: EventEmitterConfig): ProofEventEmitter;
|
|
140
|
+
//# sourceMappingURL=event-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../src/events/event-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Emitter - Creates and chains proof events
|
|
3
|
+
*
|
|
4
|
+
* Handles the creation of properly hashed and chained proof events,
|
|
5
|
+
* ensuring immutability and tamper detection.
|
|
6
|
+
*/
|
|
7
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
8
|
+
import { EventStoreError, EventStoreErrorCode } from './event-store.js';
|
|
9
|
+
import { computeEventHash, getGenesisHash } from './hash-chain.js';
|
|
10
|
+
import { signEvent } from './event-signatures.js';
|
|
11
|
+
/**
|
|
12
|
+
* ProofEventEmitter - Creates properly hashed and chained events
|
|
13
|
+
*/
|
|
14
|
+
export class ProofEventEmitter {
|
|
15
|
+
store;
|
|
16
|
+
signedBy;
|
|
17
|
+
enableSignatures;
|
|
18
|
+
signingService;
|
|
19
|
+
privateKey;
|
|
20
|
+
listeners;
|
|
21
|
+
shadowMode;
|
|
22
|
+
emitLock = Promise.resolve();
|
|
23
|
+
constructor(config) {
|
|
24
|
+
this.store = config.store;
|
|
25
|
+
this.signedBy = config.signedBy;
|
|
26
|
+
this.enableSignatures = config.enableSignatures ?? false;
|
|
27
|
+
this.signingService = config.signingService;
|
|
28
|
+
this.privateKey = config.privateKey;
|
|
29
|
+
this.listeners = config.listeners ?? [];
|
|
30
|
+
this.shadowMode = config.shadowMode ?? 'production';
|
|
31
|
+
// Validate signing configuration
|
|
32
|
+
if (this.enableSignatures && !this.signingService && !this.privateKey) {
|
|
33
|
+
console.warn('[ProofEventEmitter] Signatures enabled but no signingService or privateKey provided. ' +
|
|
34
|
+
'Events will be emitted without signatures.');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if signature generation is enabled and configured
|
|
39
|
+
*/
|
|
40
|
+
isSigningEnabled() {
|
|
41
|
+
return this.enableSignatures && (this.signingService?.canSign() || !!this.privateKey);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Check if this emitter is in shadow mode
|
|
45
|
+
*/
|
|
46
|
+
isShadowMode() {
|
|
47
|
+
return this.shadowMode !== 'production';
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get the current shadow mode status
|
|
51
|
+
*/
|
|
52
|
+
getShadowMode() {
|
|
53
|
+
return this.shadowMode;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Emit a new proof event
|
|
57
|
+
*
|
|
58
|
+
* Events are serialized to ensure proper chaining.
|
|
59
|
+
*/
|
|
60
|
+
async emit(request) {
|
|
61
|
+
// Serialize event creation to ensure proper chaining
|
|
62
|
+
return this.serializedEmit(request);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Emit an event with specific type helper
|
|
66
|
+
*/
|
|
67
|
+
async emitTyped(eventType, correlationId, payload, agentId) {
|
|
68
|
+
return this.emit({
|
|
69
|
+
eventType,
|
|
70
|
+
correlationId,
|
|
71
|
+
payload,
|
|
72
|
+
agentId,
|
|
73
|
+
occurredAt: new Date(),
|
|
74
|
+
signedBy: this.signedBy,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Emit multiple events in a batch
|
|
79
|
+
*/
|
|
80
|
+
async emitBatch(requests, options) {
|
|
81
|
+
const events = [];
|
|
82
|
+
const errors = [];
|
|
83
|
+
for (let i = 0; i < requests.length; i++) {
|
|
84
|
+
try {
|
|
85
|
+
const request = {
|
|
86
|
+
...requests[i],
|
|
87
|
+
correlationId: options?.correlationId ?? requests[i].correlationId,
|
|
88
|
+
};
|
|
89
|
+
const result = await this.emit(request);
|
|
90
|
+
events.push(result.event);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
94
|
+
errors.push({ index: i, error: err });
|
|
95
|
+
if (options?.stopOnError) {
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
events,
|
|
102
|
+
errors,
|
|
103
|
+
success: errors.length === 0,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Add an event listener
|
|
108
|
+
*/
|
|
109
|
+
addListener(listener) {
|
|
110
|
+
this.listeners.push(listener);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Remove an event listener
|
|
114
|
+
*/
|
|
115
|
+
removeListener(listener) {
|
|
116
|
+
const index = this.listeners.indexOf(listener);
|
|
117
|
+
if (index !== -1) {
|
|
118
|
+
this.listeners.splice(index, 1);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get the underlying store
|
|
123
|
+
*/
|
|
124
|
+
getStore() {
|
|
125
|
+
return this.store;
|
|
126
|
+
}
|
|
127
|
+
// Private methods
|
|
128
|
+
async serializedEmit(request) {
|
|
129
|
+
// Wait for any pending emit to complete
|
|
130
|
+
const previousLock = this.emitLock;
|
|
131
|
+
let resolve;
|
|
132
|
+
this.emitLock = new Promise(r => { resolve = r; });
|
|
133
|
+
try {
|
|
134
|
+
await previousLock;
|
|
135
|
+
return await this.createAndStoreEvent(request);
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
resolve();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async createAndStoreEvent(request) {
|
|
142
|
+
const now = new Date();
|
|
143
|
+
const eventId = uuidv4();
|
|
144
|
+
// Get previous hash for chaining
|
|
145
|
+
const previousHash = await this.store.getLatestHash() ?? getGenesisHash();
|
|
146
|
+
const isGenesis = previousHash === null;
|
|
147
|
+
// Determine the signer identity
|
|
148
|
+
const signerIdentity = request.signedBy ?? this.signedBy ?? this.signingService?.getServiceId();
|
|
149
|
+
// Build event without hash and signature
|
|
150
|
+
const eventWithoutHashAndSig = {
|
|
151
|
+
eventId,
|
|
152
|
+
eventType: request.eventType,
|
|
153
|
+
correlationId: request.correlationId,
|
|
154
|
+
agentId: request.agentId,
|
|
155
|
+
payload: request.payload,
|
|
156
|
+
previousHash,
|
|
157
|
+
occurredAt: request.occurredAt ?? now,
|
|
158
|
+
signedBy: signerIdentity,
|
|
159
|
+
// Tag with shadow mode for T0 sandbox/testnet events
|
|
160
|
+
shadowMode: this.shadowMode !== 'production' ? this.shadowMode : undefined,
|
|
161
|
+
};
|
|
162
|
+
// Generate signature if enabled
|
|
163
|
+
let signature;
|
|
164
|
+
if (this.isSigningEnabled() && signerIdentity) {
|
|
165
|
+
try {
|
|
166
|
+
if (this.signingService?.canSign()) {
|
|
167
|
+
signature = await this.signingService.sign(eventWithoutHashAndSig);
|
|
168
|
+
}
|
|
169
|
+
else if (this.privateKey) {
|
|
170
|
+
signature = await signEvent(eventWithoutHashAndSig, this.privateKey, signerIdentity);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
console.error('[ProofEventEmitter] Failed to sign event:', error);
|
|
175
|
+
// Continue without signature - event is still valid for hash chain
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Build event with signature (for hash computation)
|
|
179
|
+
const eventWithSig = {
|
|
180
|
+
...eventWithoutHashAndSig,
|
|
181
|
+
signature,
|
|
182
|
+
};
|
|
183
|
+
// Compute hash (includes signature if present)
|
|
184
|
+
const eventHash = await computeEventHash(eventWithSig);
|
|
185
|
+
// Create complete event
|
|
186
|
+
const event = {
|
|
187
|
+
...eventWithSig,
|
|
188
|
+
eventHash,
|
|
189
|
+
recordedAt: now,
|
|
190
|
+
};
|
|
191
|
+
// Validate the event
|
|
192
|
+
this.validateEvent(event);
|
|
193
|
+
// Store the event
|
|
194
|
+
const storedEvent = await this.store.append(event);
|
|
195
|
+
// Notify listeners
|
|
196
|
+
await this.notifyListeners(storedEvent);
|
|
197
|
+
return {
|
|
198
|
+
event: storedEvent,
|
|
199
|
+
isGenesis,
|
|
200
|
+
previousHash,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
validateEvent(event) {
|
|
204
|
+
if (!event.eventId) {
|
|
205
|
+
throw new EventStoreError('Event ID is required', EventStoreErrorCode.INVALID_EVENT);
|
|
206
|
+
}
|
|
207
|
+
if (!event.eventType) {
|
|
208
|
+
throw new EventStoreError('Event type is required', EventStoreErrorCode.INVALID_EVENT);
|
|
209
|
+
}
|
|
210
|
+
if (!event.correlationId) {
|
|
211
|
+
throw new EventStoreError('Correlation ID is required', EventStoreErrorCode.INVALID_EVENT);
|
|
212
|
+
}
|
|
213
|
+
if (!event.payload) {
|
|
214
|
+
throw new EventStoreError('Event payload is required', EventStoreErrorCode.INVALID_EVENT);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async notifyListeners(event) {
|
|
218
|
+
for (const listener of this.listeners) {
|
|
219
|
+
try {
|
|
220
|
+
await listener(event);
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
// Log but don't throw - listeners shouldn't block event creation
|
|
224
|
+
console.error('Event listener error:', error);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Create a proof event emitter
|
|
231
|
+
*/
|
|
232
|
+
export function createEventEmitter(config) {
|
|
233
|
+
return new ProofEventEmitter(config);
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=event-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../../src/events/event-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Signatures - Ed25519 Digital Signatures for Proof Events
|
|
3
|
+
*
|
|
4
|
+
* Provides cryptographic signing and verification for proof events,
|
|
5
|
+
* ensuring authenticity and non-repudiation in the audit trail.
|
|
6
|
+
*
|
|
7
|
+
* Uses Ed25519 (EdDSA) which provides:
|
|
8
|
+
* - 128-bit security level
|
|
9
|
+
* - Small signatures (64 bytes)
|
|
10
|
+
* - Fast signing and verification
|
|
11
|
+
* - Deterministic signatures (no random nonce needed)
|
|
12
|
+
*/
|
|
13
|
+
import type { ProofEvent } from '@vorion/contracts';
|
|
14
|
+
/**
|
|
15
|
+
* Signing key pair
|
|
16
|
+
*/
|
|
17
|
+
export interface SigningKeyPair {
|
|
18
|
+
/** Public key in base64 format */
|
|
19
|
+
publicKey: string;
|
|
20
|
+
/** Private key in base64 format (keep secret!) */
|
|
21
|
+
privateKey: string;
|
|
22
|
+
/** Key ID for identification */
|
|
23
|
+
keyId: string;
|
|
24
|
+
/** When the key was created */
|
|
25
|
+
createdAt: Date;
|
|
26
|
+
/** Service/component that owns this key */
|
|
27
|
+
owner: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Public key for verification only
|
|
31
|
+
*/
|
|
32
|
+
export interface PublicKey {
|
|
33
|
+
/** Public key in base64 format */
|
|
34
|
+
publicKey: string;
|
|
35
|
+
/** Key ID for identification */
|
|
36
|
+
keyId: string;
|
|
37
|
+
/** Service/component that owns this key */
|
|
38
|
+
owner: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Result of signature verification
|
|
42
|
+
*/
|
|
43
|
+
export interface SignatureVerificationResult {
|
|
44
|
+
/** Is the signature valid? */
|
|
45
|
+
valid: boolean;
|
|
46
|
+
/** Key ID that was used for signing */
|
|
47
|
+
keyId?: string;
|
|
48
|
+
/** Signer identity (signedBy field) */
|
|
49
|
+
signer?: string;
|
|
50
|
+
/** Error message if verification failed */
|
|
51
|
+
error?: string;
|
|
52
|
+
/** Verification timestamp */
|
|
53
|
+
verifiedAt: Date;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Configuration for the signing service
|
|
57
|
+
*/
|
|
58
|
+
export interface SigningServiceConfig {
|
|
59
|
+
/** Service identifier (used in signedBy field) */
|
|
60
|
+
serviceId: string;
|
|
61
|
+
/** Private key for signing (base64) */
|
|
62
|
+
privateKey?: string;
|
|
63
|
+
/** Key ID */
|
|
64
|
+
keyId?: string;
|
|
65
|
+
/** Known public keys for verification */
|
|
66
|
+
trustedKeys?: PublicKey[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Generate a new Ed25519 signing key pair
|
|
70
|
+
*/
|
|
71
|
+
export declare function generateSigningKeyPair(owner: string): Promise<SigningKeyPair>;
|
|
72
|
+
/**
|
|
73
|
+
* Sign an event using Ed25519
|
|
74
|
+
*/
|
|
75
|
+
export declare function signEvent(event: Omit<ProofEvent, 'signature' | 'eventHash' | 'recordedAt'>, privateKeyBase64: string, signedBy: string): Promise<string>;
|
|
76
|
+
/**
|
|
77
|
+
* Verify an event signature using Ed25519
|
|
78
|
+
*/
|
|
79
|
+
export declare function verifyEventSignature(event: ProofEvent, publicKeyBase64: string): Promise<SignatureVerificationResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Event Signing Service - Manages signing keys and operations
|
|
82
|
+
*/
|
|
83
|
+
export declare class EventSigningService {
|
|
84
|
+
private readonly serviceId;
|
|
85
|
+
private readonly privateKey?;
|
|
86
|
+
private readonly keyId?;
|
|
87
|
+
private readonly trustedKeys;
|
|
88
|
+
constructor(config: SigningServiceConfig);
|
|
89
|
+
/**
|
|
90
|
+
* Check if this service can sign events
|
|
91
|
+
*/
|
|
92
|
+
canSign(): boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Get the service ID (used in signedBy field)
|
|
95
|
+
*/
|
|
96
|
+
getServiceId(): string;
|
|
97
|
+
/**
|
|
98
|
+
* Get the key ID
|
|
99
|
+
*/
|
|
100
|
+
getKeyId(): string | undefined;
|
|
101
|
+
/**
|
|
102
|
+
* Sign an event
|
|
103
|
+
*/
|
|
104
|
+
sign(event: Omit<ProofEvent, 'signature' | 'eventHash' | 'recordedAt'>): Promise<string>;
|
|
105
|
+
/**
|
|
106
|
+
* Verify an event signature
|
|
107
|
+
*/
|
|
108
|
+
verify(event: ProofEvent): Promise<SignatureVerificationResult>;
|
|
109
|
+
/**
|
|
110
|
+
* Add a trusted public key
|
|
111
|
+
*/
|
|
112
|
+
addTrustedKey(key: PublicKey): void;
|
|
113
|
+
/**
|
|
114
|
+
* Remove a trusted public key
|
|
115
|
+
*/
|
|
116
|
+
removeTrustedKey(owner: string): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Get all trusted keys
|
|
119
|
+
*/
|
|
120
|
+
getTrustedKeys(): PublicKey[];
|
|
121
|
+
/**
|
|
122
|
+
* Check if a signer is trusted
|
|
123
|
+
*/
|
|
124
|
+
isTrusted(signer: string): boolean;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Create an event signing service
|
|
128
|
+
*/
|
|
129
|
+
export declare function createSigningService(config: SigningServiceConfig): EventSigningService;
|
|
130
|
+
/**
|
|
131
|
+
* Batch verification result
|
|
132
|
+
*/
|
|
133
|
+
export interface BatchVerificationResult {
|
|
134
|
+
/** Number of events verified */
|
|
135
|
+
totalEvents: number;
|
|
136
|
+
/** Number of valid signatures */
|
|
137
|
+
validCount: number;
|
|
138
|
+
/** Number of invalid signatures */
|
|
139
|
+
invalidCount: number;
|
|
140
|
+
/** Number of unsigned events */
|
|
141
|
+
unsignedCount: number;
|
|
142
|
+
/** All verification results */
|
|
143
|
+
results: Array<{
|
|
144
|
+
eventId: string;
|
|
145
|
+
result: SignatureVerificationResult;
|
|
146
|
+
}>;
|
|
147
|
+
/** Overall success (all signed events valid) */
|
|
148
|
+
success: boolean;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Verify signatures for a batch of events
|
|
152
|
+
*/
|
|
153
|
+
export declare function verifyEventSignatures(events: ProofEvent[], signingService: EventSigningService): Promise<BatchVerificationResult>;
|
|
154
|
+
//# sourceMappingURL=event-signatures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-signatures.d.ts","sourceRoot":"","sources":["../../src/events/event-signatures.ts"],"names":[],"mappings":"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"}
|