@originals/sdk 1.4.2 → 1.4.3
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/package.json +4 -1
- package/.eslintrc.json +0 -33
- package/src/adapters/FeeOracleMock.ts +0 -9
- package/src/adapters/index.ts +0 -5
- package/src/adapters/providers/OrdHttpProvider.ts +0 -126
- package/src/adapters/providers/OrdMockProvider.ts +0 -101
- package/src/adapters/types.ts +0 -66
- package/src/bitcoin/BitcoinManager.ts +0 -330
- package/src/bitcoin/BroadcastClient.ts +0 -54
- package/src/bitcoin/OrdinalsClient.ts +0 -119
- package/src/bitcoin/PSBTBuilder.ts +0 -106
- package/src/bitcoin/fee-calculation.ts +0 -38
- package/src/bitcoin/providers/OrdNodeProvider.ts +0 -92
- package/src/bitcoin/providers/OrdinalsProvider.ts +0 -56
- package/src/bitcoin/providers/types.ts +0 -59
- package/src/bitcoin/transactions/commit.ts +0 -465
- package/src/bitcoin/transactions/index.ts +0 -13
- package/src/bitcoin/transfer.ts +0 -43
- package/src/bitcoin/utxo-selection.ts +0 -322
- package/src/bitcoin/utxo.ts +0 -113
- package/src/contexts/credentials-v1.json +0 -237
- package/src/contexts/credentials-v2-examples.json +0 -5
- package/src/contexts/credentials-v2.json +0 -340
- package/src/contexts/credentials.json +0 -237
- package/src/contexts/data-integrity-v2.json +0 -81
- package/src/contexts/dids.json +0 -58
- package/src/contexts/ed255192020.json +0 -93
- package/src/contexts/ordinals-plus.json +0 -23
- package/src/contexts/originals.json +0 -22
- package/src/core/OriginalsSDK.ts +0 -416
- package/src/crypto/Multikey.ts +0 -194
- package/src/crypto/Signer.ts +0 -254
- package/src/crypto/noble-init.ts +0 -121
- package/src/did/BtcoDidResolver.ts +0 -227
- package/src/did/DIDManager.ts +0 -694
- package/src/did/Ed25519Verifier.ts +0 -68
- package/src/did/KeyManager.ts +0 -236
- package/src/did/WebVHManager.ts +0 -498
- package/src/did/createBtcoDidDocument.ts +0 -59
- package/src/did/providers/OrdinalsClientProviderAdapter.ts +0 -68
- package/src/events/EventEmitter.ts +0 -222
- package/src/events/index.ts +0 -19
- package/src/events/types.ts +0 -331
- package/src/examples/basic-usage.ts +0 -78
- package/src/examples/create-module-original.ts +0 -435
- package/src/examples/full-lifecycle-flow.ts +0 -514
- package/src/examples/run.ts +0 -60
- package/src/index.ts +0 -150
- package/src/kinds/KindRegistry.ts +0 -290
- package/src/kinds/index.ts +0 -74
- package/src/kinds/types.ts +0 -470
- package/src/kinds/validators/AgentValidator.ts +0 -257
- package/src/kinds/validators/AppValidator.ts +0 -211
- package/src/kinds/validators/DatasetValidator.ts +0 -242
- package/src/kinds/validators/DocumentValidator.ts +0 -311
- package/src/kinds/validators/MediaValidator.ts +0 -269
- package/src/kinds/validators/ModuleValidator.ts +0 -225
- package/src/kinds/validators/base.ts +0 -276
- package/src/kinds/validators/index.ts +0 -12
- package/src/lifecycle/BatchOperations.ts +0 -373
- package/src/lifecycle/LifecycleManager.ts +0 -2126
- package/src/lifecycle/OriginalsAsset.ts +0 -524
- package/src/lifecycle/ProvenanceQuery.ts +0 -280
- package/src/lifecycle/ResourceVersioning.ts +0 -163
- package/src/migration/MigrationManager.ts +0 -527
- package/src/migration/audit/AuditLogger.ts +0 -176
- package/src/migration/checkpoint/CheckpointManager.ts +0 -112
- package/src/migration/checkpoint/CheckpointStorage.ts +0 -101
- package/src/migration/index.ts +0 -33
- package/src/migration/operations/BaseMigration.ts +0 -126
- package/src/migration/operations/PeerToBtcoMigration.ts +0 -105
- package/src/migration/operations/PeerToWebvhMigration.ts +0 -62
- package/src/migration/operations/WebvhToBtcoMigration.ts +0 -105
- package/src/migration/rollback/RollbackManager.ts +0 -170
- package/src/migration/state/StateMachine.ts +0 -92
- package/src/migration/state/StateTracker.ts +0 -156
- package/src/migration/types.ts +0 -344
- package/src/migration/validation/BitcoinValidator.ts +0 -107
- package/src/migration/validation/CredentialValidator.ts +0 -62
- package/src/migration/validation/DIDCompatibilityValidator.ts +0 -151
- package/src/migration/validation/LifecycleValidator.ts +0 -64
- package/src/migration/validation/StorageValidator.ts +0 -79
- package/src/migration/validation/ValidationPipeline.ts +0 -213
- package/src/resources/ResourceManager.ts +0 -655
- package/src/resources/index.ts +0 -21
- package/src/resources/types.ts +0 -202
- package/src/storage/LocalStorageAdapter.ts +0 -61
- package/src/storage/MemoryStorageAdapter.ts +0 -29
- package/src/storage/StorageAdapter.ts +0 -25
- package/src/storage/index.ts +0 -3
- package/src/types/bitcoin.ts +0 -98
- package/src/types/common.ts +0 -92
- package/src/types/credentials.ts +0 -88
- package/src/types/did.ts +0 -31
- package/src/types/external-shims.d.ts +0 -53
- package/src/types/index.ts +0 -7
- package/src/types/network.ts +0 -175
- package/src/utils/EventLogger.ts +0 -298
- package/src/utils/Logger.ts +0 -322
- package/src/utils/MetricsCollector.ts +0 -358
- package/src/utils/bitcoin-address.ts +0 -130
- package/src/utils/cbor.ts +0 -12
- package/src/utils/encoding.ts +0 -127
- package/src/utils/hash.ts +0 -6
- package/src/utils/retry.ts +0 -46
- package/src/utils/satoshi-validation.ts +0 -196
- package/src/utils/serialization.ts +0 -96
- package/src/utils/telemetry.ts +0 -40
- package/src/utils/validation.ts +0 -119
- package/src/vc/CredentialManager.ts +0 -918
- package/src/vc/Issuer.ts +0 -100
- package/src/vc/Verifier.ts +0 -47
- package/src/vc/cryptosuites/bbs.ts +0 -253
- package/src/vc/cryptosuites/bbsSimple.ts +0 -21
- package/src/vc/cryptosuites/eddsa.ts +0 -99
- package/src/vc/documentLoader.ts +0 -67
- package/src/vc/proofs/data-integrity.ts +0 -33
- package/src/vc/utils/jsonld.ts +0 -18
- package/tests/__mocks__/bbs-signatures.js +0 -17
- package/tests/__mocks__/mf-base58.js +0 -24
- package/tests/fixtures/did-documents.ts +0 -247
- package/tests/index.test.ts +0 -21
- package/tests/integration/BatchOperations.test.ts +0 -531
- package/tests/integration/CompleteLifecycle.e2e.test.ts +0 -735
- package/tests/integration/CredentialManager.test.ts +0 -42
- package/tests/integration/DIDManager.test.ts +0 -41
- package/tests/integration/DidPeerToWebVhFlow.test.ts +0 -351
- package/tests/integration/Events.test.ts +0 -435
- package/tests/integration/Lifecycle.transfer.btco.integration.test.ts +0 -25
- package/tests/integration/LifecycleManager.test.ts +0 -21
- package/tests/integration/MultikeyFlow.test.ts +0 -52
- package/tests/integration/TelemetryIntegration.test.ts +0 -395
- package/tests/integration/WebVhPublish.test.ts +0 -48
- package/tests/integration/createTypedOriginal.test.ts +0 -379
- package/tests/integration/migration/peer-to-webvh.test.ts +0 -172
- package/tests/manual/test-commit-creation.ts +0 -323
- package/tests/mocks/MockKeyStore.ts +0 -38
- package/tests/mocks/adapters/MemoryStorageAdapter.ts +0 -24
- package/tests/mocks/adapters/MockFeeOracle.ts +0 -11
- package/tests/mocks/adapters/MockOrdinalsProvider.ts +0 -76
- package/tests/mocks/adapters/OrdMockProvider.test.ts +0 -176
- package/tests/mocks/adapters/index.ts +0 -6
- package/tests/performance/BatchOperations.perf.test.ts +0 -403
- package/tests/performance/logging.perf.test.ts +0 -336
- package/tests/sdk.test.ts +0 -43
- package/tests/security/bitcoin-penetration-tests.test.ts +0 -622
- package/tests/setup.bun.ts +0 -69
- package/tests/setup.jest.ts +0 -23
- package/tests/stress/batch-operations-stress.test.ts +0 -571
- package/tests/unit/adapters/FeeOracleMock.test.ts +0 -40
- package/tests/unit/bitcoin/BitcoinManager.test.ts +0 -293
- package/tests/unit/bitcoin/BroadcastClient.test.ts +0 -52
- package/tests/unit/bitcoin/OrdNodeProvider.test.ts +0 -53
- package/tests/unit/bitcoin/OrdinalsClient.test.ts +0 -381
- package/tests/unit/bitcoin/OrdinalsClientProvider.test.ts +0 -102
- package/tests/unit/bitcoin/PSBTBuilder.test.ts +0 -84
- package/tests/unit/bitcoin/fee-calculation.test.ts +0 -261
- package/tests/unit/bitcoin/transactions/commit.test.ts +0 -649
- package/tests/unit/bitcoin/transfer.test.ts +0 -31
- package/tests/unit/bitcoin/utxo-selection-new.test.ts +0 -502
- package/tests/unit/bitcoin/utxo.more.test.ts +0 -39
- package/tests/unit/bitcoin/utxo.selection.test.ts +0 -38
- package/tests/unit/core/OriginalsSDK.test.ts +0 -152
- package/tests/unit/crypto/Multikey.test.ts +0 -206
- package/tests/unit/crypto/Signer.test.ts +0 -408
- package/tests/unit/did/BtcoDidResolver.test.ts +0 -611
- package/tests/unit/did/DIDManager.more.test.ts +0 -43
- package/tests/unit/did/DIDManager.test.ts +0 -185
- package/tests/unit/did/Ed25519Verifier.test.ts +0 -160
- package/tests/unit/did/KeyManager.test.ts +0 -452
- package/tests/unit/did/OrdinalsClientProviderAdapter.test.ts +0 -45
- package/tests/unit/did/WebVHManager.test.ts +0 -435
- package/tests/unit/did/createBtcoDidDocument.test.ts +0 -67
- package/tests/unit/did/providers/OrdinalsClientProviderAdapter.test.ts +0 -159
- package/tests/unit/events/EventEmitter.test.ts +0 -407
- package/tests/unit/kinds/KindRegistry.test.ts +0 -329
- package/tests/unit/kinds/types.test.ts +0 -409
- package/tests/unit/kinds/validators.test.ts +0 -651
- package/tests/unit/lifecycle/BatchOperations.test.ts +0 -527
- package/tests/unit/lifecycle/LifecycleManager.cleanapi.test.ts +0 -441
- package/tests/unit/lifecycle/LifecycleManager.keymanagement.test.ts +0 -312
- package/tests/unit/lifecycle/LifecycleManager.prov.test.ts +0 -18
- package/tests/unit/lifecycle/LifecycleManager.test.ts +0 -213
- package/tests/unit/lifecycle/LifecycleManager.transfer.unit.test.ts +0 -30
- package/tests/unit/lifecycle/OriginalsAsset.test.ts +0 -176
- package/tests/unit/lifecycle/ProvenanceQuery.test.ts +0 -577
- package/tests/unit/lifecycle/ResourceVersioning.test.ts +0 -651
- package/tests/unit/resources/ResourceManager.test.ts +0 -740
- package/tests/unit/storage/MemoryStorageAdapter.test.ts +0 -93
- package/tests/unit/types/network.test.ts +0 -255
- package/tests/unit/utils/EventIntegration.test.ts +0 -384
- package/tests/unit/utils/Logger.test.ts +0 -473
- package/tests/unit/utils/MetricsCollector.test.ts +0 -358
- package/tests/unit/utils/bitcoin-address.test.ts +0 -250
- package/tests/unit/utils/cbor.test.ts +0 -35
- package/tests/unit/utils/encoding.test.ts +0 -318
- package/tests/unit/utils/hash.test.ts +0 -12
- package/tests/unit/utils/retry.test.ts +0 -100
- package/tests/unit/utils/satoshi-validation.test.ts +0 -354
- package/tests/unit/utils/serialization.test.ts +0 -124
- package/tests/unit/utils/telemetry.test.ts +0 -52
- package/tests/unit/utils/validation.test.ts +0 -141
- package/tests/unit/vc/CredentialManager.helpers.test.ts +0 -527
- package/tests/unit/vc/CredentialManager.test.ts +0 -487
- package/tests/unit/vc/Issuer.test.ts +0 -107
- package/tests/unit/vc/Verifier.test.ts +0 -525
- package/tests/unit/vc/bbs.test.ts +0 -282
- package/tests/unit/vc/cryptosuites/eddsa.test.ts +0 -398
- package/tests/unit/vc/documentLoader.test.ts +0 -121
- package/tests/unit/vc/proofs/data-integrity.test.ts +0 -24
- package/tsconfig.json +0 -31
- package/tsconfig.test.json +0 -15
|
@@ -1,384 +0,0 @@
|
|
|
1
|
-
import { describe, test, expect, beforeEach, mock } from 'bun:test';
|
|
2
|
-
import { EventLogger } from '../../../src/utils/EventLogger';
|
|
3
|
-
import { Logger, type LogOutput } from '../../../src/utils/Logger';
|
|
4
|
-
import { MetricsCollector } from '../../../src/utils/MetricsCollector';
|
|
5
|
-
import { EventEmitter } from '../../../src/events/EventEmitter';
|
|
6
|
-
import type { AssetCreatedEvent, AssetMigratedEvent, AssetTransferredEvent } from '../../../src/events/types';
|
|
7
|
-
import type { OriginalsConfig } from '../../../src/types';
|
|
8
|
-
|
|
9
|
-
describe('EventIntegration', () => {
|
|
10
|
-
let eventEmitter: EventEmitter;
|
|
11
|
-
let logger: Logger;
|
|
12
|
-
let metricsCollector: MetricsCollector;
|
|
13
|
-
let eventLogger: EventLogger;
|
|
14
|
-
let config: OriginalsConfig;
|
|
15
|
-
let logOutput: any;
|
|
16
|
-
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
eventEmitter = new EventEmitter();
|
|
19
|
-
metricsCollector = new MetricsCollector();
|
|
20
|
-
|
|
21
|
-
logOutput = mock(() => {});
|
|
22
|
-
const mockOutput: LogOutput = {
|
|
23
|
-
write: logOutput
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
config = {
|
|
27
|
-
network: 'mainnet',
|
|
28
|
-
defaultKeyType: 'ES256K',
|
|
29
|
-
logging: {
|
|
30
|
-
level: 'info',
|
|
31
|
-
outputs: [mockOutput]
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
logger = new Logger('Test', config);
|
|
36
|
-
eventLogger = new EventLogger(logger, metricsCollector);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
describe('event subscription', () => {
|
|
40
|
-
test('should subscribe to all event types', () => {
|
|
41
|
-
eventLogger.subscribeToEvents(eventEmitter);
|
|
42
|
-
|
|
43
|
-
// Check that event emitter has listeners
|
|
44
|
-
expect(eventEmitter.hasListeners('asset:created')).toBe(true);
|
|
45
|
-
expect(eventEmitter.hasListeners('asset:migrated')).toBe(true);
|
|
46
|
-
expect(eventEmitter.hasListeners('asset:transferred')).toBe(true);
|
|
47
|
-
expect(eventEmitter.hasListeners('resource:published')).toBe(true);
|
|
48
|
-
expect(eventEmitter.hasListeners('credential:issued')).toBe(true);
|
|
49
|
-
expect(eventEmitter.hasListeners('verification:completed')).toBe(true);
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
test('should unsubscribe from all events', () => {
|
|
53
|
-
eventLogger.subscribeToEvents(eventEmitter);
|
|
54
|
-
eventLogger.unsubscribe();
|
|
55
|
-
|
|
56
|
-
expect(eventEmitter.hasListeners('asset:created')).toBe(false);
|
|
57
|
-
expect(eventEmitter.hasListeners('asset:migrated')).toBe(false);
|
|
58
|
-
expect(eventEmitter.hasListeners('asset:transferred')).toBe(false);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
describe('event logging', () => {
|
|
63
|
-
beforeEach(() => {
|
|
64
|
-
eventLogger.subscribeToEvents(eventEmitter);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
test('should log asset:created events', async () => {
|
|
68
|
-
const event: AssetCreatedEvent = {
|
|
69
|
-
type: 'asset:created',
|
|
70
|
-
timestamp: new Date().toISOString(),
|
|
71
|
-
asset: {
|
|
72
|
-
id: 'did:peer:123',
|
|
73
|
-
layer: 'did:peer',
|
|
74
|
-
resourceCount: 2,
|
|
75
|
-
createdAt: new Date().toISOString()
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
await eventEmitter.emit(event);
|
|
80
|
-
|
|
81
|
-
expect(logOutput).toHaveBeenCalled();
|
|
82
|
-
const logEntry = logOutput.mock.calls[0][0];
|
|
83
|
-
expect(logEntry.message).toBe('Asset created');
|
|
84
|
-
expect(logEntry.data.assetId).toBe('did:peer:123');
|
|
85
|
-
expect(logEntry.data.resourceCount).toBe(2);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
test('should log asset:migrated events', async () => {
|
|
89
|
-
const event: AssetMigratedEvent = {
|
|
90
|
-
type: 'asset:migrated',
|
|
91
|
-
timestamp: new Date().toISOString(),
|
|
92
|
-
asset: {
|
|
93
|
-
id: 'did:peer:123',
|
|
94
|
-
fromLayer: 'did:peer',
|
|
95
|
-
toLayer: 'did:webvh'
|
|
96
|
-
},
|
|
97
|
-
details: {
|
|
98
|
-
transactionId: 'tx123'
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
await eventEmitter.emit(event);
|
|
103
|
-
|
|
104
|
-
expect(logOutput).toHaveBeenCalled();
|
|
105
|
-
const logEntry = logOutput.mock.calls[0][0];
|
|
106
|
-
expect(logEntry.message).toBe('Asset migrated');
|
|
107
|
-
expect(logEntry.data.fromLayer).toBe('did:peer');
|
|
108
|
-
expect(logEntry.data.toLayer).toBe('did:webvh');
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
test('should log asset:transferred events', async () => {
|
|
112
|
-
const event: AssetTransferredEvent = {
|
|
113
|
-
type: 'asset:transferred',
|
|
114
|
-
timestamp: new Date().toISOString(),
|
|
115
|
-
asset: {
|
|
116
|
-
id: 'did:btco:123',
|
|
117
|
-
layer: 'did:btco'
|
|
118
|
-
},
|
|
119
|
-
from: 'alice',
|
|
120
|
-
to: 'bc1q...',
|
|
121
|
-
transactionId: 'tx456'
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
await eventEmitter.emit(event);
|
|
125
|
-
|
|
126
|
-
expect(logOutput).toHaveBeenCalled();
|
|
127
|
-
const logEntry = logOutput.mock.calls[0][0];
|
|
128
|
-
expect(logEntry.message).toBe('Asset transferred');
|
|
129
|
-
expect(logEntry.data.from).toBe('alice');
|
|
130
|
-
expect(logEntry.data.to).toBe('bc1q...');
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
describe('metrics extraction', () => {
|
|
135
|
-
beforeEach(() => {
|
|
136
|
-
eventLogger.subscribeToEvents(eventEmitter);
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
test('should extract metrics from asset:created events', async () => {
|
|
140
|
-
const event: AssetCreatedEvent = {
|
|
141
|
-
type: 'asset:created',
|
|
142
|
-
timestamp: new Date().toISOString(),
|
|
143
|
-
asset: {
|
|
144
|
-
id: 'did:peer:123',
|
|
145
|
-
layer: 'did:peer',
|
|
146
|
-
resourceCount: 1,
|
|
147
|
-
createdAt: new Date().toISOString()
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
await eventEmitter.emit(event);
|
|
152
|
-
|
|
153
|
-
const metrics = metricsCollector.getMetrics();
|
|
154
|
-
expect(metrics.assetsCreated).toBe(1);
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
test('should extract metrics from asset:migrated events', async () => {
|
|
158
|
-
const event: AssetMigratedEvent = {
|
|
159
|
-
type: 'asset:migrated',
|
|
160
|
-
timestamp: new Date().toISOString(),
|
|
161
|
-
asset: {
|
|
162
|
-
id: 'did:peer:123',
|
|
163
|
-
fromLayer: 'did:peer',
|
|
164
|
-
toLayer: 'did:webvh'
|
|
165
|
-
}
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
await eventEmitter.emit(event);
|
|
169
|
-
|
|
170
|
-
const metrics = metricsCollector.getMetrics();
|
|
171
|
-
expect(metrics.assetsMigrated['peer→webvh']).toBe(1);
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
test('should extract metrics from asset:transferred events', async () => {
|
|
175
|
-
const event: AssetTransferredEvent = {
|
|
176
|
-
type: 'asset:transferred',
|
|
177
|
-
timestamp: new Date().toISOString(),
|
|
178
|
-
asset: {
|
|
179
|
-
id: 'did:btco:123',
|
|
180
|
-
layer: 'did:btco'
|
|
181
|
-
},
|
|
182
|
-
from: 'alice',
|
|
183
|
-
to: 'bc1q...',
|
|
184
|
-
transactionId: 'tx456'
|
|
185
|
-
};
|
|
186
|
-
|
|
187
|
-
await eventEmitter.emit(event);
|
|
188
|
-
|
|
189
|
-
const metrics = metricsCollector.getMetrics();
|
|
190
|
-
expect(metrics.assetsTransferred).toBe(1);
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
test('should track multiple events', async () => {
|
|
194
|
-
const events = [
|
|
195
|
-
{
|
|
196
|
-
type: 'asset:created' as const,
|
|
197
|
-
timestamp: new Date().toISOString(),
|
|
198
|
-
asset: {
|
|
199
|
-
id: 'did:peer:1',
|
|
200
|
-
layer: 'did:peer' as const,
|
|
201
|
-
resourceCount: 1,
|
|
202
|
-
createdAt: new Date().toISOString()
|
|
203
|
-
}
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
type: 'asset:created' as const,
|
|
207
|
-
timestamp: new Date().toISOString(),
|
|
208
|
-
asset: {
|
|
209
|
-
id: 'did:peer:2',
|
|
210
|
-
layer: 'did:peer' as const,
|
|
211
|
-
resourceCount: 1,
|
|
212
|
-
createdAt: new Date().toISOString()
|
|
213
|
-
}
|
|
214
|
-
},
|
|
215
|
-
{
|
|
216
|
-
type: 'asset:migrated' as const,
|
|
217
|
-
timestamp: new Date().toISOString(),
|
|
218
|
-
asset: {
|
|
219
|
-
id: 'did:peer:1',
|
|
220
|
-
fromLayer: 'did:peer' as const,
|
|
221
|
-
toLayer: 'did:webvh' as const
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
];
|
|
225
|
-
|
|
226
|
-
for (const event of events) {
|
|
227
|
-
await eventEmitter.emit(event);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
const metrics = metricsCollector.getMetrics();
|
|
231
|
-
expect(metrics.assetsCreated).toBe(2);
|
|
232
|
-
expect(metrics.assetsMigrated['peer→webvh']).toBe(1);
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
describe('event logging configuration', () => {
|
|
237
|
-
test('should respect custom log levels', async () => {
|
|
238
|
-
eventLogger.configureEventLogging({
|
|
239
|
-
'asset:created': 'debug',
|
|
240
|
-
'asset:migrated': 'warn'
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
eventLogger.subscribeToEvents(eventEmitter);
|
|
244
|
-
|
|
245
|
-
const event: AssetCreatedEvent = {
|
|
246
|
-
type: 'asset:created',
|
|
247
|
-
timestamp: new Date().toISOString(),
|
|
248
|
-
asset: {
|
|
249
|
-
id: 'did:peer:123',
|
|
250
|
-
layer: 'did:peer',
|
|
251
|
-
resourceCount: 1,
|
|
252
|
-
createdAt: new Date().toISOString()
|
|
253
|
-
}
|
|
254
|
-
};
|
|
255
|
-
|
|
256
|
-
// With default info level, debug logs won't appear
|
|
257
|
-
await eventEmitter.emit(event);
|
|
258
|
-
|
|
259
|
-
// Log should not appear because debug is below info threshold
|
|
260
|
-
// (Logger is configured with 'info' level)
|
|
261
|
-
// This is a smoke test to ensure configuration doesn't crash
|
|
262
|
-
expect(logOutput.mock.calls.length).toBeGreaterThanOrEqual(0);
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
test('should disable logging for specific events', async () => {
|
|
266
|
-
eventLogger.configureEventLogging({
|
|
267
|
-
'asset:created': false
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
eventLogger.subscribeToEvents(eventEmitter);
|
|
271
|
-
|
|
272
|
-
const createdEvent: AssetCreatedEvent = {
|
|
273
|
-
type: 'asset:created',
|
|
274
|
-
timestamp: new Date().toISOString(),
|
|
275
|
-
asset: {
|
|
276
|
-
id: 'did:peer:123',
|
|
277
|
-
layer: 'did:peer',
|
|
278
|
-
resourceCount: 1,
|
|
279
|
-
createdAt: new Date().toISOString()
|
|
280
|
-
}
|
|
281
|
-
};
|
|
282
|
-
|
|
283
|
-
const migratedEvent: AssetMigratedEvent = {
|
|
284
|
-
type: 'asset:migrated',
|
|
285
|
-
timestamp: new Date().toISOString(),
|
|
286
|
-
asset: {
|
|
287
|
-
id: 'did:peer:123',
|
|
288
|
-
fromLayer: 'did:peer',
|
|
289
|
-
toLayer: 'did:webvh'
|
|
290
|
-
}
|
|
291
|
-
};
|
|
292
|
-
|
|
293
|
-
await eventEmitter.emit(createdEvent);
|
|
294
|
-
const callsAfterCreated = logOutput.mock.calls.length;
|
|
295
|
-
|
|
296
|
-
await eventEmitter.emit(migratedEvent);
|
|
297
|
-
const callsAfterMigrated = logOutput.mock.calls.length;
|
|
298
|
-
|
|
299
|
-
// asset:created should not log, asset:migrated should log
|
|
300
|
-
expect(callsAfterMigrated).toBeGreaterThan(callsAfterCreated);
|
|
301
|
-
});
|
|
302
|
-
|
|
303
|
-
test('should still extract metrics even when logging is disabled', async () => {
|
|
304
|
-
eventLogger.configureEventLogging({
|
|
305
|
-
'asset:created': false
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
eventLogger.subscribeToEvents(eventEmitter);
|
|
309
|
-
|
|
310
|
-
const event: AssetCreatedEvent = {
|
|
311
|
-
type: 'asset:created',
|
|
312
|
-
timestamp: new Date().toISOString(),
|
|
313
|
-
asset: {
|
|
314
|
-
id: 'did:peer:123',
|
|
315
|
-
layer: 'did:peer',
|
|
316
|
-
resourceCount: 1,
|
|
317
|
-
createdAt: new Date().toISOString()
|
|
318
|
-
}
|
|
319
|
-
};
|
|
320
|
-
|
|
321
|
-
await eventEmitter.emit(event);
|
|
322
|
-
|
|
323
|
-
// Metrics should still be recorded
|
|
324
|
-
const metrics = metricsCollector.getMetrics();
|
|
325
|
-
expect(metrics.assetsCreated).toBe(1);
|
|
326
|
-
});
|
|
327
|
-
});
|
|
328
|
-
|
|
329
|
-
describe('performance', () => {
|
|
330
|
-
test('should have minimal overhead (<1ms per event)', async () => {
|
|
331
|
-
eventLogger.subscribeToEvents(eventEmitter);
|
|
332
|
-
|
|
333
|
-
const event: AssetCreatedEvent = {
|
|
334
|
-
type: 'asset:created',
|
|
335
|
-
timestamp: new Date().toISOString(),
|
|
336
|
-
asset: {
|
|
337
|
-
id: 'did:peer:123',
|
|
338
|
-
layer: 'did:peer',
|
|
339
|
-
resourceCount: 1,
|
|
340
|
-
createdAt: new Date().toISOString()
|
|
341
|
-
}
|
|
342
|
-
};
|
|
343
|
-
|
|
344
|
-
const start = performance.now();
|
|
345
|
-
for (let i = 0; i < 100; i++) {
|
|
346
|
-
await eventEmitter.emit(event);
|
|
347
|
-
}
|
|
348
|
-
const duration = performance.now() - start;
|
|
349
|
-
|
|
350
|
-
const avgDuration = duration / 100;
|
|
351
|
-
|
|
352
|
-
// Each event should add less than 1ms overhead
|
|
353
|
-
expect(avgDuration).toBeLessThan(1);
|
|
354
|
-
});
|
|
355
|
-
});
|
|
356
|
-
|
|
357
|
-
describe('error handling', () => {
|
|
358
|
-
test('should not throw if metrics recording fails', async () => {
|
|
359
|
-
// Create a spy that throws
|
|
360
|
-
const brokenMetrics = new MetricsCollector();
|
|
361
|
-
(brokenMetrics as any).recordAssetCreated = () => {
|
|
362
|
-
throw new Error('Metrics error');
|
|
363
|
-
};
|
|
364
|
-
|
|
365
|
-
const brokenEventLogger = new EventLogger(logger, brokenMetrics);
|
|
366
|
-
brokenEventLogger.subscribeToEvents(eventEmitter);
|
|
367
|
-
|
|
368
|
-
const event: AssetCreatedEvent = {
|
|
369
|
-
type: 'asset:created',
|
|
370
|
-
timestamp: new Date().toISOString(),
|
|
371
|
-
asset: {
|
|
372
|
-
id: 'did:peer:123',
|
|
373
|
-
layer: 'did:peer',
|
|
374
|
-
resourceCount: 1,
|
|
375
|
-
createdAt: new Date().toISOString()
|
|
376
|
-
}
|
|
377
|
-
};
|
|
378
|
-
|
|
379
|
-
// Should not throw even if metrics recording fails
|
|
380
|
-
await expect(eventEmitter.emit(event)).resolves.toBeUndefined();
|
|
381
|
-
});
|
|
382
|
-
});
|
|
383
|
-
});
|
|
384
|
-
|