@originals/sdk 1.8.1 → 1.8.2

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 (145) hide show
  1. package/dist/utils/hash.js +1 -0
  2. package/package.json +6 -5
  3. package/src/adapters/FeeOracleMock.ts +9 -0
  4. package/src/adapters/index.ts +5 -0
  5. package/src/adapters/providers/OrdHttpProvider.ts +126 -0
  6. package/src/adapters/providers/OrdMockProvider.ts +101 -0
  7. package/src/adapters/types.ts +66 -0
  8. package/src/bitcoin/BitcoinManager.ts +329 -0
  9. package/src/bitcoin/BroadcastClient.ts +54 -0
  10. package/src/bitcoin/OrdinalsClient.ts +120 -0
  11. package/src/bitcoin/PSBTBuilder.ts +106 -0
  12. package/src/bitcoin/fee-calculation.ts +38 -0
  13. package/src/bitcoin/providers/OrdNodeProvider.ts +92 -0
  14. package/src/bitcoin/providers/OrdinalsProvider.ts +56 -0
  15. package/src/bitcoin/providers/types.ts +59 -0
  16. package/src/bitcoin/transactions/commit.ts +465 -0
  17. package/src/bitcoin/transactions/index.ts +13 -0
  18. package/src/bitcoin/transfer.ts +43 -0
  19. package/src/bitcoin/utxo-selection.ts +322 -0
  20. package/src/bitcoin/utxo.ts +113 -0
  21. package/src/cel/ExternalReferenceManager.ts +87 -0
  22. package/src/cel/OriginalsCel.ts +460 -0
  23. package/src/cel/algorithms/createEventLog.ts +68 -0
  24. package/src/cel/algorithms/deactivateEventLog.ts +109 -0
  25. package/src/cel/algorithms/index.ts +11 -0
  26. package/src/cel/algorithms/updateEventLog.ts +99 -0
  27. package/src/cel/algorithms/verifyEventLog.ts +306 -0
  28. package/src/cel/algorithms/witnessEvent.ts +87 -0
  29. package/src/cel/cli/create.ts +330 -0
  30. package/src/cel/cli/index.ts +383 -0
  31. package/src/cel/cli/inspect.ts +549 -0
  32. package/src/cel/cli/migrate.ts +473 -0
  33. package/src/cel/cli/verify.ts +249 -0
  34. package/src/cel/hash.ts +71 -0
  35. package/src/cel/index.ts +16 -0
  36. package/src/cel/layers/BtcoCelManager.ts +408 -0
  37. package/src/cel/layers/PeerCelManager.ts +371 -0
  38. package/src/cel/layers/WebVHCelManager.ts +361 -0
  39. package/src/cel/layers/index.ts +27 -0
  40. package/src/cel/serialization/cbor.ts +189 -0
  41. package/src/cel/serialization/index.ts +10 -0
  42. package/src/cel/serialization/json.ts +209 -0
  43. package/src/cel/types.ts +160 -0
  44. package/src/cel/witnesses/BitcoinWitness.ts +184 -0
  45. package/src/cel/witnesses/HttpWitness.ts +241 -0
  46. package/src/cel/witnesses/WitnessService.ts +51 -0
  47. package/src/cel/witnesses/index.ts +11 -0
  48. package/src/contexts/credentials-v1.json +237 -0
  49. package/src/contexts/credentials-v2-examples.json +5 -0
  50. package/src/contexts/credentials-v2.json +340 -0
  51. package/src/contexts/credentials.json +237 -0
  52. package/src/contexts/data-integrity-v2.json +81 -0
  53. package/src/contexts/dids.json +58 -0
  54. package/src/contexts/ed255192020.json +93 -0
  55. package/src/contexts/ordinals-plus.json +23 -0
  56. package/src/contexts/originals.json +22 -0
  57. package/src/core/OriginalsSDK.ts +420 -0
  58. package/src/crypto/Multikey.ts +194 -0
  59. package/src/crypto/Signer.ts +262 -0
  60. package/src/crypto/noble-init.ts +138 -0
  61. package/src/did/BtcoDidResolver.ts +231 -0
  62. package/src/did/DIDManager.ts +705 -0
  63. package/src/did/Ed25519Verifier.ts +68 -0
  64. package/src/did/KeyManager.ts +239 -0
  65. package/src/did/WebVHManager.ts +499 -0
  66. package/src/did/createBtcoDidDocument.ts +60 -0
  67. package/src/did/providers/OrdinalsClientProviderAdapter.ts +68 -0
  68. package/src/events/EventEmitter.ts +222 -0
  69. package/src/events/index.ts +19 -0
  70. package/src/events/types.ts +331 -0
  71. package/src/examples/basic-usage.ts +78 -0
  72. package/src/examples/create-module-original.ts +435 -0
  73. package/src/examples/full-lifecycle-flow.ts +514 -0
  74. package/src/examples/run.ts +60 -0
  75. package/src/index.ts +204 -0
  76. package/src/kinds/KindRegistry.ts +320 -0
  77. package/src/kinds/index.ts +74 -0
  78. package/src/kinds/types.ts +470 -0
  79. package/src/kinds/validators/AgentValidator.ts +257 -0
  80. package/src/kinds/validators/AppValidator.ts +211 -0
  81. package/src/kinds/validators/DatasetValidator.ts +242 -0
  82. package/src/kinds/validators/DocumentValidator.ts +311 -0
  83. package/src/kinds/validators/MediaValidator.ts +269 -0
  84. package/src/kinds/validators/ModuleValidator.ts +225 -0
  85. package/src/kinds/validators/base.ts +276 -0
  86. package/src/kinds/validators/index.ts +12 -0
  87. package/src/lifecycle/BatchOperations.ts +381 -0
  88. package/src/lifecycle/LifecycleManager.ts +2156 -0
  89. package/src/lifecycle/OriginalsAsset.ts +524 -0
  90. package/src/lifecycle/ProvenanceQuery.ts +280 -0
  91. package/src/lifecycle/ResourceVersioning.ts +163 -0
  92. package/src/migration/MigrationManager.ts +587 -0
  93. package/src/migration/audit/AuditLogger.ts +176 -0
  94. package/src/migration/checkpoint/CheckpointManager.ts +112 -0
  95. package/src/migration/checkpoint/CheckpointStorage.ts +101 -0
  96. package/src/migration/index.ts +33 -0
  97. package/src/migration/operations/BaseMigration.ts +126 -0
  98. package/src/migration/operations/PeerToBtcoMigration.ts +105 -0
  99. package/src/migration/operations/PeerToWebvhMigration.ts +62 -0
  100. package/src/migration/operations/WebvhToBtcoMigration.ts +105 -0
  101. package/src/migration/rollback/RollbackManager.ts +170 -0
  102. package/src/migration/state/StateMachine.ts +92 -0
  103. package/src/migration/state/StateTracker.ts +156 -0
  104. package/src/migration/types.ts +356 -0
  105. package/src/migration/validation/BitcoinValidator.ts +107 -0
  106. package/src/migration/validation/CredentialValidator.ts +62 -0
  107. package/src/migration/validation/DIDCompatibilityValidator.ts +151 -0
  108. package/src/migration/validation/LifecycleValidator.ts +64 -0
  109. package/src/migration/validation/StorageValidator.ts +79 -0
  110. package/src/migration/validation/ValidationPipeline.ts +213 -0
  111. package/src/resources/ResourceManager.ts +655 -0
  112. package/src/resources/index.ts +21 -0
  113. package/src/resources/types.ts +202 -0
  114. package/src/storage/LocalStorageAdapter.ts +64 -0
  115. package/src/storage/MemoryStorageAdapter.ts +29 -0
  116. package/src/storage/StorageAdapter.ts +25 -0
  117. package/src/storage/index.ts +3 -0
  118. package/src/types/bitcoin.ts +98 -0
  119. package/src/types/common.ts +92 -0
  120. package/src/types/credentials.ts +89 -0
  121. package/src/types/did.ts +31 -0
  122. package/src/types/external-shims.d.ts +53 -0
  123. package/src/types/index.ts +7 -0
  124. package/src/types/network.ts +178 -0
  125. package/src/utils/EventLogger.ts +298 -0
  126. package/src/utils/Logger.ts +324 -0
  127. package/src/utils/MetricsCollector.ts +358 -0
  128. package/src/utils/bitcoin-address.ts +132 -0
  129. package/src/utils/cbor.ts +31 -0
  130. package/src/utils/encoding.ts +135 -0
  131. package/src/utils/hash.ts +12 -0
  132. package/src/utils/retry.ts +46 -0
  133. package/src/utils/satoshi-validation.ts +196 -0
  134. package/src/utils/serialization.ts +102 -0
  135. package/src/utils/telemetry.ts +44 -0
  136. package/src/utils/validation.ts +123 -0
  137. package/src/vc/CredentialManager.ts +955 -0
  138. package/src/vc/Issuer.ts +105 -0
  139. package/src/vc/Verifier.ts +54 -0
  140. package/src/vc/cryptosuites/bbs.ts +253 -0
  141. package/src/vc/cryptosuites/bbsSimple.ts +21 -0
  142. package/src/vc/cryptosuites/eddsa.ts +99 -0
  143. package/src/vc/documentLoader.ts +81 -0
  144. package/src/vc/proofs/data-integrity.ts +33 -0
  145. package/src/vc/utils/jsonld.ts +18 -0
@@ -0,0 +1,7 @@
1
+ export * from './common';
2
+ export * from './did';
3
+ export * from './credentials';
4
+ export * from './bitcoin';
5
+ export * from './network';
6
+
7
+
@@ -0,0 +1,178 @@
1
+ /**
2
+ * WebVH Network Configuration
3
+ *
4
+ * Defines the three deployment networks for the Originals Protocol:
5
+ * - magby: Development network (patch versions) → Bitcoin regtest
6
+ * - cleffa: Staging network (minor versions) → Bitcoin signet
7
+ * - pichu: Production network (major versions) → Bitcoin mainnet
8
+ */
9
+
10
+ export type WebVHNetworkName = 'magby' | 'cleffa' | 'pichu';
11
+
12
+ export type BitcoinNetworkName = 'mainnet' | 'regtest' | 'signet';
13
+
14
+ export type VersionStability = 'patch' | 'minor' | 'major';
15
+
16
+ export interface WebVHNetworkConfig {
17
+ name: WebVHNetworkName;
18
+ domain: string;
19
+ stability: VersionStability;
20
+ description: string;
21
+ contextUrl: string;
22
+ bitcoinNetwork: BitcoinNetworkName; // Corresponding Bitcoin network for did:btco migrations
23
+ }
24
+
25
+ /**
26
+ * Network configurations for the Originals Protocol WebVH deployments
27
+ */
28
+ export const WEBVH_NETWORKS: Record<WebVHNetworkName, WebVHNetworkConfig> = {
29
+ magby: {
30
+ name: 'magby',
31
+ domain: 'magby.originals.build',
32
+ stability: 'patch',
33
+ description: 'Development network - accepts all patch versions (most unstable)',
34
+ contextUrl: 'https://magby.originals.build/context',
35
+ bitcoinNetwork: 'regtest', // Development → regtest
36
+ },
37
+ cleffa: {
38
+ name: 'cleffa',
39
+ domain: 'cleffa.originals.build',
40
+ stability: 'minor',
41
+ description: 'Staging network - accepts minor releases',
42
+ contextUrl: 'https://cleffa.originals.build/context',
43
+ bitcoinNetwork: 'signet', // Staging → signet
44
+ },
45
+ pichu: {
46
+ name: 'pichu',
47
+ domain: 'pichu.originals.build',
48
+ stability: 'major',
49
+ description: 'Production network - accepts major releases only (most stable)',
50
+ contextUrl: 'https://pichu.originals.build/context',
51
+ bitcoinNetwork: 'mainnet', // Production → mainnet
52
+ },
53
+ };
54
+
55
+ /**
56
+ * Default network for backward compatibility
57
+ */
58
+ export const DEFAULT_WEBVH_NETWORK: WebVHNetworkName = 'pichu';
59
+
60
+ /**
61
+ * Get network configuration by name
62
+ * @param network - Network name
63
+ * @returns Network configuration
64
+ */
65
+ export function getNetworkConfig(network: WebVHNetworkName): WebVHNetworkConfig {
66
+ const config = WEBVH_NETWORKS[network];
67
+ if (!config) {
68
+ throw new Error(`Invalid WebVH network: ${network}. Valid networks: magby, cleffa, pichu`);
69
+ }
70
+ return config;
71
+ }
72
+
73
+ /**
74
+ * Get network domain
75
+ * @param network - Network name
76
+ * @returns Network domain
77
+ */
78
+ export function getNetworkDomain(network: WebVHNetworkName): string {
79
+ return getNetworkConfig(network).domain;
80
+ }
81
+
82
+ /**
83
+ * Get network context URL
84
+ * @param network - Network name
85
+ * @returns Context URL for the network
86
+ */
87
+ export function getNetworkContextUrl(network: WebVHNetworkName): string {
88
+ return getNetworkConfig(network).contextUrl;
89
+ }
90
+
91
+ /**
92
+ * Validate that a version string matches the network's stability requirements
93
+ * @param version - Semver version string (e.g., "1.2.3")
94
+ * @param network - Network name
95
+ * @returns True if the version is allowed on this network
96
+ */
97
+ export function validateVersionForNetwork(version: string, network: WebVHNetworkName): boolean {
98
+ const config = getNetworkConfig(network);
99
+
100
+ // Parse semver (basic parsing, assumes format X.Y.Z)
101
+ const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-.*)?$/);
102
+ if (!match) {
103
+ throw new Error(`Invalid version format: ${version}. Expected semver format (e.g., 1.2.3)`);
104
+ }
105
+
106
+ const [, , minor, patch] = match;
107
+
108
+ switch (config.stability) {
109
+ case 'major':
110
+ // Pichu: Only allow major releases (X.0.0)
111
+ return minor === '0' && patch === '0';
112
+
113
+ case 'minor':
114
+ // Cleffa: Allow minor releases (X.Y.0)
115
+ return patch === '0';
116
+
117
+ case 'patch':
118
+ // Magby: Allow all versions including patches
119
+ return true;
120
+
121
+ default: {
122
+ // TypeScript exhaustiveness check
123
+ const _exhaustive: never = config.stability;
124
+ throw new Error(`Unknown stability level: ${String(_exhaustive)}`);
125
+ }
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Get the appropriate network for a given version
131
+ * Returns the most restrictive network that accepts this version
132
+ * @param version - Semver version string
133
+ * @returns Recommended network name
134
+ */
135
+ export function getRecommendedNetworkForVersion(version: string): WebVHNetworkName {
136
+ // Try networks from most restrictive to least restrictive
137
+ if (validateVersionForNetwork(version, 'pichu')) {
138
+ return 'pichu';
139
+ }
140
+ if (validateVersionForNetwork(version, 'cleffa')) {
141
+ return 'cleffa';
142
+ }
143
+ return 'magby';
144
+ }
145
+
146
+ /**
147
+ * Get the corresponding Bitcoin network for a WebVH network
148
+ * This ensures consistent environment mapping across the stack:
149
+ * - magby (dev) → regtest (dev)
150
+ * - cleffa (staging) → signet (staging)
151
+ * - pichu (production) → mainnet (production)
152
+ *
153
+ * @param webvhNetwork - WebVH network name
154
+ * @returns Corresponding Bitcoin network name
155
+ */
156
+ export function getBitcoinNetworkForWebVH(webvhNetwork: WebVHNetworkName): BitcoinNetworkName {
157
+ return getNetworkConfig(webvhNetwork).bitcoinNetwork;
158
+ }
159
+
160
+ /**
161
+ * Get the WebVH network that corresponds to a Bitcoin network
162
+ * This is the reverse mapping of getBitcoinNetworkForWebVH
163
+ *
164
+ * @param bitcoinNetwork - Bitcoin network name
165
+ * @returns Corresponding WebVH network name, or undefined if no mapping exists
166
+ */
167
+ export function getWebVHNetworkForBitcoin(bitcoinNetwork: BitcoinNetworkName): WebVHNetworkName | undefined {
168
+ switch (bitcoinNetwork) {
169
+ case 'mainnet':
170
+ return 'pichu';
171
+ case 'signet':
172
+ return 'cleffa';
173
+ case 'regtest':
174
+ return 'magby';
175
+ default:
176
+ return undefined;
177
+ }
178
+ }
@@ -0,0 +1,298 @@
1
+ /**
2
+ * Event Logger - Integration between Event System and Logger
3
+ *
4
+ * Features:
5
+ * - Auto-subscribe to EventEmitter events
6
+ * - Configurable logging levels per event type
7
+ * - Automatic metrics extraction from events
8
+ * - Performance tracking
9
+ */
10
+
11
+ import type { EventEmitter } from '../events/EventEmitter';
12
+ import type { OriginalsEvent, EventTypeMap } from '../events/types';
13
+ import type { Logger, LogLevel } from './Logger';
14
+ import type { MetricsCollector } from './MetricsCollector';
15
+
16
+ /**
17
+ * Event logging configuration
18
+ */
19
+ export interface EventLoggingConfig {
20
+ 'asset:created'?: LogLevel | false;
21
+ 'asset:migrated'?: LogLevel | false;
22
+ 'asset:transferred'?: LogLevel | false;
23
+ 'resource:published'?: LogLevel | false;
24
+ 'credential:issued'?: LogLevel | false;
25
+ 'resource:version:created'?: LogLevel | false;
26
+ 'verification:completed'?: LogLevel | false;
27
+ 'batch:started'?: LogLevel | false;
28
+ 'batch:completed'?: LogLevel | false;
29
+ 'batch:failed'?: LogLevel | false;
30
+ 'migration:started'?: LogLevel | false;
31
+ 'migration:validated'?: LogLevel | false;
32
+ 'migration:checkpointed'?: LogLevel | false;
33
+ 'migration:in_progress'?: LogLevel | false;
34
+ 'migration:anchoring'?: LogLevel | false;
35
+ 'migration:completed'?: LogLevel | false;
36
+ 'migration:failed'?: LogLevel | false;
37
+ 'migration:rolledback'?: LogLevel | false;
38
+ 'migration:quarantine'?: LogLevel | false;
39
+ 'batch:progress'?: LogLevel | false;
40
+ }
41
+
42
+ /**
43
+ * Default event logging configuration
44
+ */
45
+ const DEFAULT_EVENT_CONFIG: EventLoggingConfig = {
46
+ 'asset:created': 'info',
47
+ 'asset:migrated': 'info',
48
+ 'asset:transferred': 'info',
49
+ 'resource:published': 'info',
50
+ 'credential:issued': 'info',
51
+ 'resource:version:created': 'info',
52
+ 'verification:completed': 'info',
53
+ 'batch:started': 'info',
54
+ 'batch:completed': 'info',
55
+ 'batch:failed': 'warn',
56
+ 'migration:started': 'info',
57
+ 'migration:validated': 'info',
58
+ 'migration:checkpointed': 'info',
59
+ 'migration:in_progress': 'info',
60
+ 'migration:anchoring': 'info',
61
+ 'migration:completed': 'info',
62
+ 'migration:failed': 'warn',
63
+ 'migration:rolledback': 'warn',
64
+ 'migration:quarantine': 'error',
65
+ 'batch:progress': 'debug'
66
+ };
67
+
68
+ /**
69
+ * EventLogger class for integrating events with logging and metrics
70
+ */
71
+ export class EventLogger {
72
+ private config: EventLoggingConfig;
73
+ private unsubscribeFns: Array<() => void> = [];
74
+
75
+ constructor(
76
+ private logger: Logger,
77
+ private metricsCollector: MetricsCollector
78
+ ) {
79
+ this.config = { ...DEFAULT_EVENT_CONFIG };
80
+ }
81
+
82
+ /**
83
+ * Subscribe to all events from an EventEmitter
84
+ */
85
+ subscribeToEvents(eventEmitter: EventEmitter): void {
86
+ // Subscribe to each event type
87
+ const eventTypes: Array<keyof EventTypeMap> = [
88
+ 'asset:created',
89
+ 'asset:migrated',
90
+ 'asset:transferred',
91
+ 'resource:published',
92
+ 'credential:issued',
93
+ 'resource:version:created',
94
+ 'verification:completed',
95
+ 'batch:started',
96
+ 'batch:completed',
97
+ 'batch:failed'
98
+ ];
99
+
100
+ for (const eventType of eventTypes) {
101
+ const unsubscribe = eventEmitter.on(eventType, (event) => {
102
+ this.handleEvent(event);
103
+ });
104
+
105
+ this.unsubscribeFns.push(unsubscribe);
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Configure which events to log at which levels
111
+ */
112
+ configureEventLogging(config: EventLoggingConfig): void {
113
+ this.config = { ...this.config, ...config };
114
+ }
115
+
116
+ /**
117
+ * Unsubscribe from all events
118
+ */
119
+ unsubscribe(): void {
120
+ for (const unsubscribe of this.unsubscribeFns) {
121
+ unsubscribe();
122
+ }
123
+ this.unsubscribeFns = [];
124
+ }
125
+
126
+ /**
127
+ * Handle an event - log and extract metrics
128
+ */
129
+ private handleEvent(event: OriginalsEvent): void {
130
+ const eventType = event.type;
131
+ const logLevel = this.config[eventType];
132
+
133
+ // Always extract metrics from the event (even if logging is disabled)
134
+ this.extractMetrics(event);
135
+
136
+ // Skip logging if disabled for this event type
137
+ if (logLevel === false) {
138
+ return;
139
+ }
140
+
141
+ // Log the event
142
+ if (logLevel) {
143
+ this.logEvent(event, logLevel);
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Log an event at the specified level
149
+ */
150
+ private logEvent(event: OriginalsEvent, level: LogLevel): void {
151
+ let message: string;
152
+ let data: Record<string, unknown>;
153
+
154
+ switch (event.type) {
155
+ case 'asset:created':
156
+ message = 'Asset created';
157
+ data = {
158
+ assetId: event.asset.id,
159
+ layer: event.asset.layer,
160
+ resourceCount: event.asset.resourceCount
161
+ };
162
+ break;
163
+
164
+ case 'asset:migrated':
165
+ message = 'Asset migrated';
166
+ data = {
167
+ assetId: event.asset.id,
168
+ fromLayer: event.asset.fromLayer,
169
+ toLayer: event.asset.toLayer,
170
+ details: event.details
171
+ };
172
+ break;
173
+
174
+ case 'asset:transferred':
175
+ message = 'Asset transferred';
176
+ data = {
177
+ assetId: event.asset.id,
178
+ layer: event.asset.layer,
179
+ from: event.from,
180
+ to: event.to,
181
+ transactionId: event.transactionId
182
+ };
183
+ break;
184
+
185
+ case 'resource:published':
186
+ message = 'Resource published';
187
+ data = {
188
+ assetId: event.asset.id,
189
+ resourceId: event.resource.id,
190
+ url: event.resource.url,
191
+ publisherDid: event.publisherDid
192
+ };
193
+ break;
194
+
195
+ case 'credential:issued':
196
+ message = 'Credential issued';
197
+ data = {
198
+ assetId: event.asset.id,
199
+ credentialType: event.credential.type,
200
+ issuer: event.credential.issuer
201
+ };
202
+ break;
203
+
204
+ case 'resource:version:created':
205
+ message = 'Resource version created';
206
+ data = {
207
+ assetId: event.asset.id,
208
+ resourceId: event.resource.id,
209
+ fromVersion: event.resource.fromVersion,
210
+ toVersion: event.resource.toVersion,
211
+ changes: event.changes
212
+ };
213
+ break;
214
+
215
+ case 'verification:completed':
216
+ message = 'Verification completed';
217
+ data = {
218
+ assetId: event.asset.id,
219
+ result: event.result,
220
+ checks: event.checks
221
+ };
222
+ break;
223
+
224
+ case 'batch:started':
225
+ message = 'Batch operation started';
226
+ data = {
227
+ batchId: event.batchId,
228
+ operation: event.operation,
229
+ itemCount: event.itemCount
230
+ };
231
+ break;
232
+
233
+ case 'batch:completed':
234
+ message = 'Batch operation completed';
235
+ data = {
236
+ batchId: event.batchId,
237
+ operation: event.operation,
238
+ results: event.results
239
+ };
240
+ break;
241
+
242
+ case 'batch:failed':
243
+ message = 'Batch operation failed';
244
+ data = {
245
+ batchId: event.batchId,
246
+ operation: event.operation,
247
+ error: event.error,
248
+ partialResults: event.partialResults
249
+ };
250
+ break;
251
+
252
+ default:
253
+ return; // Unknown event type
254
+ }
255
+
256
+ // Call the appropriate log method based on level
257
+ switch (level) {
258
+ case 'debug':
259
+ this.logger.debug(message, data);
260
+ break;
261
+ case 'info':
262
+ this.logger.info(message, data);
263
+ break;
264
+ case 'warn':
265
+ this.logger.warn(message, data);
266
+ break;
267
+ case 'error':
268
+ this.logger.error(message, undefined, data);
269
+ break;
270
+ }
271
+ }
272
+
273
+ /**
274
+ * Extract metrics from an event
275
+ */
276
+ private extractMetrics(event: OriginalsEvent): void {
277
+ switch (event.type) {
278
+ case 'asset:created':
279
+ this.metricsCollector.recordAssetCreated();
280
+ break;
281
+
282
+ case 'asset:migrated':
283
+ this.metricsCollector.recordMigration(
284
+ event.asset.fromLayer,
285
+ event.asset.toLayer
286
+ );
287
+ break;
288
+
289
+ case 'asset:transferred':
290
+ this.metricsCollector.recordTransfer();
291
+ break;
292
+
293
+ // Other events don't need explicit metric recording
294
+ // as they're tracked elsewhere
295
+ }
296
+ }
297
+ }
298
+