@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.
Files changed (212) hide show
  1. package/package.json +4 -1
  2. package/.eslintrc.json +0 -33
  3. package/src/adapters/FeeOracleMock.ts +0 -9
  4. package/src/adapters/index.ts +0 -5
  5. package/src/adapters/providers/OrdHttpProvider.ts +0 -126
  6. package/src/adapters/providers/OrdMockProvider.ts +0 -101
  7. package/src/adapters/types.ts +0 -66
  8. package/src/bitcoin/BitcoinManager.ts +0 -330
  9. package/src/bitcoin/BroadcastClient.ts +0 -54
  10. package/src/bitcoin/OrdinalsClient.ts +0 -119
  11. package/src/bitcoin/PSBTBuilder.ts +0 -106
  12. package/src/bitcoin/fee-calculation.ts +0 -38
  13. package/src/bitcoin/providers/OrdNodeProvider.ts +0 -92
  14. package/src/bitcoin/providers/OrdinalsProvider.ts +0 -56
  15. package/src/bitcoin/providers/types.ts +0 -59
  16. package/src/bitcoin/transactions/commit.ts +0 -465
  17. package/src/bitcoin/transactions/index.ts +0 -13
  18. package/src/bitcoin/transfer.ts +0 -43
  19. package/src/bitcoin/utxo-selection.ts +0 -322
  20. package/src/bitcoin/utxo.ts +0 -113
  21. package/src/contexts/credentials-v1.json +0 -237
  22. package/src/contexts/credentials-v2-examples.json +0 -5
  23. package/src/contexts/credentials-v2.json +0 -340
  24. package/src/contexts/credentials.json +0 -237
  25. package/src/contexts/data-integrity-v2.json +0 -81
  26. package/src/contexts/dids.json +0 -58
  27. package/src/contexts/ed255192020.json +0 -93
  28. package/src/contexts/ordinals-plus.json +0 -23
  29. package/src/contexts/originals.json +0 -22
  30. package/src/core/OriginalsSDK.ts +0 -416
  31. package/src/crypto/Multikey.ts +0 -194
  32. package/src/crypto/Signer.ts +0 -254
  33. package/src/crypto/noble-init.ts +0 -121
  34. package/src/did/BtcoDidResolver.ts +0 -227
  35. package/src/did/DIDManager.ts +0 -694
  36. package/src/did/Ed25519Verifier.ts +0 -68
  37. package/src/did/KeyManager.ts +0 -236
  38. package/src/did/WebVHManager.ts +0 -498
  39. package/src/did/createBtcoDidDocument.ts +0 -59
  40. package/src/did/providers/OrdinalsClientProviderAdapter.ts +0 -68
  41. package/src/events/EventEmitter.ts +0 -222
  42. package/src/events/index.ts +0 -19
  43. package/src/events/types.ts +0 -331
  44. package/src/examples/basic-usage.ts +0 -78
  45. package/src/examples/create-module-original.ts +0 -435
  46. package/src/examples/full-lifecycle-flow.ts +0 -514
  47. package/src/examples/run.ts +0 -60
  48. package/src/index.ts +0 -150
  49. package/src/kinds/KindRegistry.ts +0 -290
  50. package/src/kinds/index.ts +0 -74
  51. package/src/kinds/types.ts +0 -470
  52. package/src/kinds/validators/AgentValidator.ts +0 -257
  53. package/src/kinds/validators/AppValidator.ts +0 -211
  54. package/src/kinds/validators/DatasetValidator.ts +0 -242
  55. package/src/kinds/validators/DocumentValidator.ts +0 -311
  56. package/src/kinds/validators/MediaValidator.ts +0 -269
  57. package/src/kinds/validators/ModuleValidator.ts +0 -225
  58. package/src/kinds/validators/base.ts +0 -276
  59. package/src/kinds/validators/index.ts +0 -12
  60. package/src/lifecycle/BatchOperations.ts +0 -373
  61. package/src/lifecycle/LifecycleManager.ts +0 -2126
  62. package/src/lifecycle/OriginalsAsset.ts +0 -524
  63. package/src/lifecycle/ProvenanceQuery.ts +0 -280
  64. package/src/lifecycle/ResourceVersioning.ts +0 -163
  65. package/src/migration/MigrationManager.ts +0 -527
  66. package/src/migration/audit/AuditLogger.ts +0 -176
  67. package/src/migration/checkpoint/CheckpointManager.ts +0 -112
  68. package/src/migration/checkpoint/CheckpointStorage.ts +0 -101
  69. package/src/migration/index.ts +0 -33
  70. package/src/migration/operations/BaseMigration.ts +0 -126
  71. package/src/migration/operations/PeerToBtcoMigration.ts +0 -105
  72. package/src/migration/operations/PeerToWebvhMigration.ts +0 -62
  73. package/src/migration/operations/WebvhToBtcoMigration.ts +0 -105
  74. package/src/migration/rollback/RollbackManager.ts +0 -170
  75. package/src/migration/state/StateMachine.ts +0 -92
  76. package/src/migration/state/StateTracker.ts +0 -156
  77. package/src/migration/types.ts +0 -344
  78. package/src/migration/validation/BitcoinValidator.ts +0 -107
  79. package/src/migration/validation/CredentialValidator.ts +0 -62
  80. package/src/migration/validation/DIDCompatibilityValidator.ts +0 -151
  81. package/src/migration/validation/LifecycleValidator.ts +0 -64
  82. package/src/migration/validation/StorageValidator.ts +0 -79
  83. package/src/migration/validation/ValidationPipeline.ts +0 -213
  84. package/src/resources/ResourceManager.ts +0 -655
  85. package/src/resources/index.ts +0 -21
  86. package/src/resources/types.ts +0 -202
  87. package/src/storage/LocalStorageAdapter.ts +0 -61
  88. package/src/storage/MemoryStorageAdapter.ts +0 -29
  89. package/src/storage/StorageAdapter.ts +0 -25
  90. package/src/storage/index.ts +0 -3
  91. package/src/types/bitcoin.ts +0 -98
  92. package/src/types/common.ts +0 -92
  93. package/src/types/credentials.ts +0 -88
  94. package/src/types/did.ts +0 -31
  95. package/src/types/external-shims.d.ts +0 -53
  96. package/src/types/index.ts +0 -7
  97. package/src/types/network.ts +0 -175
  98. package/src/utils/EventLogger.ts +0 -298
  99. package/src/utils/Logger.ts +0 -322
  100. package/src/utils/MetricsCollector.ts +0 -358
  101. package/src/utils/bitcoin-address.ts +0 -130
  102. package/src/utils/cbor.ts +0 -12
  103. package/src/utils/encoding.ts +0 -127
  104. package/src/utils/hash.ts +0 -6
  105. package/src/utils/retry.ts +0 -46
  106. package/src/utils/satoshi-validation.ts +0 -196
  107. package/src/utils/serialization.ts +0 -96
  108. package/src/utils/telemetry.ts +0 -40
  109. package/src/utils/validation.ts +0 -119
  110. package/src/vc/CredentialManager.ts +0 -918
  111. package/src/vc/Issuer.ts +0 -100
  112. package/src/vc/Verifier.ts +0 -47
  113. package/src/vc/cryptosuites/bbs.ts +0 -253
  114. package/src/vc/cryptosuites/bbsSimple.ts +0 -21
  115. package/src/vc/cryptosuites/eddsa.ts +0 -99
  116. package/src/vc/documentLoader.ts +0 -67
  117. package/src/vc/proofs/data-integrity.ts +0 -33
  118. package/src/vc/utils/jsonld.ts +0 -18
  119. package/tests/__mocks__/bbs-signatures.js +0 -17
  120. package/tests/__mocks__/mf-base58.js +0 -24
  121. package/tests/fixtures/did-documents.ts +0 -247
  122. package/tests/index.test.ts +0 -21
  123. package/tests/integration/BatchOperations.test.ts +0 -531
  124. package/tests/integration/CompleteLifecycle.e2e.test.ts +0 -735
  125. package/tests/integration/CredentialManager.test.ts +0 -42
  126. package/tests/integration/DIDManager.test.ts +0 -41
  127. package/tests/integration/DidPeerToWebVhFlow.test.ts +0 -351
  128. package/tests/integration/Events.test.ts +0 -435
  129. package/tests/integration/Lifecycle.transfer.btco.integration.test.ts +0 -25
  130. package/tests/integration/LifecycleManager.test.ts +0 -21
  131. package/tests/integration/MultikeyFlow.test.ts +0 -52
  132. package/tests/integration/TelemetryIntegration.test.ts +0 -395
  133. package/tests/integration/WebVhPublish.test.ts +0 -48
  134. package/tests/integration/createTypedOriginal.test.ts +0 -379
  135. package/tests/integration/migration/peer-to-webvh.test.ts +0 -172
  136. package/tests/manual/test-commit-creation.ts +0 -323
  137. package/tests/mocks/MockKeyStore.ts +0 -38
  138. package/tests/mocks/adapters/MemoryStorageAdapter.ts +0 -24
  139. package/tests/mocks/adapters/MockFeeOracle.ts +0 -11
  140. package/tests/mocks/adapters/MockOrdinalsProvider.ts +0 -76
  141. package/tests/mocks/adapters/OrdMockProvider.test.ts +0 -176
  142. package/tests/mocks/adapters/index.ts +0 -6
  143. package/tests/performance/BatchOperations.perf.test.ts +0 -403
  144. package/tests/performance/logging.perf.test.ts +0 -336
  145. package/tests/sdk.test.ts +0 -43
  146. package/tests/security/bitcoin-penetration-tests.test.ts +0 -622
  147. package/tests/setup.bun.ts +0 -69
  148. package/tests/setup.jest.ts +0 -23
  149. package/tests/stress/batch-operations-stress.test.ts +0 -571
  150. package/tests/unit/adapters/FeeOracleMock.test.ts +0 -40
  151. package/tests/unit/bitcoin/BitcoinManager.test.ts +0 -293
  152. package/tests/unit/bitcoin/BroadcastClient.test.ts +0 -52
  153. package/tests/unit/bitcoin/OrdNodeProvider.test.ts +0 -53
  154. package/tests/unit/bitcoin/OrdinalsClient.test.ts +0 -381
  155. package/tests/unit/bitcoin/OrdinalsClientProvider.test.ts +0 -102
  156. package/tests/unit/bitcoin/PSBTBuilder.test.ts +0 -84
  157. package/tests/unit/bitcoin/fee-calculation.test.ts +0 -261
  158. package/tests/unit/bitcoin/transactions/commit.test.ts +0 -649
  159. package/tests/unit/bitcoin/transfer.test.ts +0 -31
  160. package/tests/unit/bitcoin/utxo-selection-new.test.ts +0 -502
  161. package/tests/unit/bitcoin/utxo.more.test.ts +0 -39
  162. package/tests/unit/bitcoin/utxo.selection.test.ts +0 -38
  163. package/tests/unit/core/OriginalsSDK.test.ts +0 -152
  164. package/tests/unit/crypto/Multikey.test.ts +0 -206
  165. package/tests/unit/crypto/Signer.test.ts +0 -408
  166. package/tests/unit/did/BtcoDidResolver.test.ts +0 -611
  167. package/tests/unit/did/DIDManager.more.test.ts +0 -43
  168. package/tests/unit/did/DIDManager.test.ts +0 -185
  169. package/tests/unit/did/Ed25519Verifier.test.ts +0 -160
  170. package/tests/unit/did/KeyManager.test.ts +0 -452
  171. package/tests/unit/did/OrdinalsClientProviderAdapter.test.ts +0 -45
  172. package/tests/unit/did/WebVHManager.test.ts +0 -435
  173. package/tests/unit/did/createBtcoDidDocument.test.ts +0 -67
  174. package/tests/unit/did/providers/OrdinalsClientProviderAdapter.test.ts +0 -159
  175. package/tests/unit/events/EventEmitter.test.ts +0 -407
  176. package/tests/unit/kinds/KindRegistry.test.ts +0 -329
  177. package/tests/unit/kinds/types.test.ts +0 -409
  178. package/tests/unit/kinds/validators.test.ts +0 -651
  179. package/tests/unit/lifecycle/BatchOperations.test.ts +0 -527
  180. package/tests/unit/lifecycle/LifecycleManager.cleanapi.test.ts +0 -441
  181. package/tests/unit/lifecycle/LifecycleManager.keymanagement.test.ts +0 -312
  182. package/tests/unit/lifecycle/LifecycleManager.prov.test.ts +0 -18
  183. package/tests/unit/lifecycle/LifecycleManager.test.ts +0 -213
  184. package/tests/unit/lifecycle/LifecycleManager.transfer.unit.test.ts +0 -30
  185. package/tests/unit/lifecycle/OriginalsAsset.test.ts +0 -176
  186. package/tests/unit/lifecycle/ProvenanceQuery.test.ts +0 -577
  187. package/tests/unit/lifecycle/ResourceVersioning.test.ts +0 -651
  188. package/tests/unit/resources/ResourceManager.test.ts +0 -740
  189. package/tests/unit/storage/MemoryStorageAdapter.test.ts +0 -93
  190. package/tests/unit/types/network.test.ts +0 -255
  191. package/tests/unit/utils/EventIntegration.test.ts +0 -384
  192. package/tests/unit/utils/Logger.test.ts +0 -473
  193. package/tests/unit/utils/MetricsCollector.test.ts +0 -358
  194. package/tests/unit/utils/bitcoin-address.test.ts +0 -250
  195. package/tests/unit/utils/cbor.test.ts +0 -35
  196. package/tests/unit/utils/encoding.test.ts +0 -318
  197. package/tests/unit/utils/hash.test.ts +0 -12
  198. package/tests/unit/utils/retry.test.ts +0 -100
  199. package/tests/unit/utils/satoshi-validation.test.ts +0 -354
  200. package/tests/unit/utils/serialization.test.ts +0 -124
  201. package/tests/unit/utils/telemetry.test.ts +0 -52
  202. package/tests/unit/utils/validation.test.ts +0 -141
  203. package/tests/unit/vc/CredentialManager.helpers.test.ts +0 -527
  204. package/tests/unit/vc/CredentialManager.test.ts +0 -487
  205. package/tests/unit/vc/Issuer.test.ts +0 -107
  206. package/tests/unit/vc/Verifier.test.ts +0 -525
  207. package/tests/unit/vc/bbs.test.ts +0 -282
  208. package/tests/unit/vc/cryptosuites/eddsa.test.ts +0 -398
  209. package/tests/unit/vc/documentLoader.test.ts +0 -121
  210. package/tests/unit/vc/proofs/data-integrity.test.ts +0 -24
  211. package/tsconfig.json +0 -31
  212. package/tsconfig.test.json +0 -15
@@ -1,170 +0,0 @@
1
- /**
2
- * RollbackManager - Handles migration rollbacks
3
- */
4
-
5
- import {
6
- MigrationStateEnum,
7
- RollbackResult,
8
- MigrationError,
9
- MigrationErrorType,
10
- IRollbackManager
11
- } from '../types';
12
- import { OriginalsConfig } from '../../types';
13
- import { CheckpointManager } from '../checkpoint/CheckpointManager';
14
- import { DIDManager } from '../../did/DIDManager';
15
-
16
- export class RollbackManager implements IRollbackManager {
17
- constructor(
18
- private config: OriginalsConfig,
19
- private checkpointManager: CheckpointManager,
20
- private didManager: DIDManager
21
- ) {}
22
-
23
- /**
24
- * Rollback a migration to its checkpoint state
25
- */
26
- async rollback(migrationId: string, checkpointId: string): Promise<RollbackResult> {
27
- const startTime = Date.now();
28
- const errors: MigrationError[] = [];
29
-
30
- try {
31
- // Retrieve checkpoint
32
- const checkpoint = await this.checkpointManager.getCheckpoint(checkpointId);
33
- if (!checkpoint) {
34
- const error: MigrationError = {
35
- type: MigrationErrorType.ROLLBACK_ERROR,
36
- code: 'CHECKPOINT_NOT_FOUND',
37
- message: `Checkpoint ${checkpointId} not found`,
38
- migrationId,
39
- timestamp: Date.now()
40
- };
41
- errors.push(error);
42
-
43
- return {
44
- success: false,
45
- migrationId,
46
- checkpointId,
47
- restoredState: MigrationStateEnum.QUARANTINED,
48
- duration: Date.now() - startTime,
49
- errors
50
- };
51
- }
52
-
53
- // Verify checkpoint belongs to this migration
54
- if (checkpoint.migrationId !== migrationId) {
55
- const error: MigrationError = {
56
- type: MigrationErrorType.ROLLBACK_ERROR,
57
- code: 'CHECKPOINT_MISMATCH',
58
- message: `Checkpoint ${checkpointId} does not belong to migration ${migrationId}`,
59
- migrationId,
60
- timestamp: Date.now()
61
- };
62
- errors.push(error);
63
-
64
- return {
65
- success: false,
66
- migrationId,
67
- checkpointId,
68
- restoredState: MigrationStateEnum.QUARANTINED,
69
- duration: Date.now() - startTime,
70
- errors
71
- };
72
- }
73
-
74
- // Perform rollback based on source layer
75
- await this.performLayerSpecificRollback(checkpoint);
76
-
77
- // Clean up any partial migration artifacts
78
- await this.cleanupMigrationArtifacts(migrationId);
79
-
80
- const duration = Date.now() - startTime;
81
-
82
- // Verify rollback success
83
- if (errors.length === 0) {
84
- return {
85
- success: true,
86
- migrationId,
87
- checkpointId,
88
- restoredState: MigrationStateEnum.ROLLED_BACK,
89
- duration,
90
- errors: []
91
- };
92
- } else {
93
- return {
94
- success: false,
95
- migrationId,
96
- checkpointId,
97
- restoredState: MigrationStateEnum.QUARANTINED,
98
- duration,
99
- errors
100
- };
101
- }
102
- } catch (error) {
103
- const rollbackError: MigrationError = {
104
- type: MigrationErrorType.ROLLBACK_ERROR,
105
- code: 'ROLLBACK_FAILED',
106
- message: 'Rollback operation failed',
107
- technicalDetails: error instanceof Error ? error.message : String(error),
108
- migrationId,
109
- timestamp: Date.now()
110
- };
111
- errors.push(rollbackError);
112
-
113
- return {
114
- success: false,
115
- migrationId,
116
- checkpointId,
117
- restoredState: MigrationStateEnum.QUARANTINED,
118
- duration: Date.now() - startTime,
119
- errors
120
- };
121
- }
122
- }
123
-
124
- /**
125
- * Perform layer-specific rollback operations
126
- */
127
- private async performLayerSpecificRollback(checkpoint: any): Promise<void> {
128
- // For now, rollback mainly involves:
129
- // 1. Ensuring source DID is still valid (it should be, as we don't delete it)
130
- // 2. Cleaning up any partial artifacts on target layer
131
- // 3. Restoring any modified state
132
-
133
- // Verify source DID still resolves
134
- const sourceDid = await this.didManager.resolveDID(checkpoint.sourceDid);
135
- if (!sourceDid) {
136
- throw new Error(`Source DID ${checkpoint.sourceDid} could not be resolved during rollback`);
137
- }
138
-
139
- // Layer-specific cleanup would go here
140
- // For peer → webvh: Remove any published resources
141
- // For webvh → btco: Nothing to do (Bitcoin tx cannot be reversed)
142
- // For peer → btco: Nothing to do (Bitcoin tx cannot be reversed)
143
- }
144
-
145
- /**
146
- * Clean up migration artifacts
147
- */
148
- private async cleanupMigrationArtifacts(migrationId: string): Promise<void> {
149
- // Clean up any temporary files, partial uploads, etc.
150
- // This is a placeholder for actual cleanup logic
151
- }
152
-
153
- /**
154
- * Check if a rollback is possible
155
- */
156
- async canRollback(migrationId: string, checkpointId: string): Promise<boolean> {
157
- try {
158
- const checkpoint = await this.checkpointManager.getCheckpoint(checkpointId);
159
- if (!checkpoint || checkpoint.migrationId !== migrationId) {
160
- return false;
161
- }
162
-
163
- // Bitcoin transactions cannot be rolled back
164
- // But we can still restore the source DID to working state
165
- return true;
166
- } catch (error) {
167
- return false;
168
- }
169
- }
170
- }
@@ -1,92 +0,0 @@
1
- /**
2
- * StateMachine - Defines valid migration state transitions
3
- */
4
-
5
- import { MigrationStateEnum } from '../types';
6
-
7
- export class StateMachine {
8
- private transitions: Map<MigrationStateEnum, MigrationStateEnum[]>;
9
-
10
- constructor() {
11
- this.transitions = this.initializeTransitions();
12
- }
13
-
14
- /**
15
- * Initialize valid state transitions
16
- */
17
- private initializeTransitions(): Map<MigrationStateEnum, MigrationStateEnum[]> {
18
- const transitions = new Map<MigrationStateEnum, MigrationStateEnum[]>();
19
-
20
- // PENDING can transition to VALIDATING or FAILED
21
- transitions.set(MigrationStateEnum.PENDING, [
22
- MigrationStateEnum.VALIDATING,
23
- MigrationStateEnum.FAILED
24
- ]);
25
-
26
- // VALIDATING can transition to CHECKPOINTED or FAILED
27
- transitions.set(MigrationStateEnum.VALIDATING, [
28
- MigrationStateEnum.CHECKPOINTED,
29
- MigrationStateEnum.FAILED
30
- ]);
31
-
32
- // CHECKPOINTED can transition to IN_PROGRESS or FAILED
33
- transitions.set(MigrationStateEnum.CHECKPOINTED, [
34
- MigrationStateEnum.IN_PROGRESS,
35
- MigrationStateEnum.FAILED
36
- ]);
37
-
38
- // IN_PROGRESS can transition to ANCHORING (for btco), COMPLETED, or FAILED
39
- transitions.set(MigrationStateEnum.IN_PROGRESS, [
40
- MigrationStateEnum.ANCHORING,
41
- MigrationStateEnum.COMPLETED,
42
- MigrationStateEnum.FAILED
43
- ]);
44
-
45
- // ANCHORING can transition to COMPLETED or FAILED
46
- transitions.set(MigrationStateEnum.ANCHORING, [
47
- MigrationStateEnum.COMPLETED,
48
- MigrationStateEnum.FAILED
49
- ]);
50
-
51
- // FAILED can transition to ROLLED_BACK or QUARANTINED
52
- transitions.set(MigrationStateEnum.FAILED, [
53
- MigrationStateEnum.ROLLED_BACK,
54
- MigrationStateEnum.QUARANTINED
55
- ]);
56
-
57
- // COMPLETED, ROLLED_BACK, and QUARANTINED are terminal states
58
- transitions.set(MigrationStateEnum.COMPLETED, []);
59
- transitions.set(MigrationStateEnum.ROLLED_BACK, []);
60
- transitions.set(MigrationStateEnum.QUARANTINED, []);
61
-
62
- return transitions;
63
- }
64
-
65
- /**
66
- * Check if a state transition is valid
67
- */
68
- canTransition(fromState: MigrationStateEnum, toState: MigrationStateEnum): boolean {
69
- const validTransitions = this.transitions.get(fromState);
70
- if (!validTransitions) {
71
- return false;
72
- }
73
- return validTransitions.includes(toState);
74
- }
75
-
76
- /**
77
- * Get all valid transitions from a given state
78
- * Returns a copy to prevent external mutation of the transition table
79
- */
80
- getValidTransitions(fromState: MigrationStateEnum): MigrationStateEnum[] {
81
- const transitions = this.transitions.get(fromState);
82
- return transitions ? [...transitions] : [];
83
- }
84
-
85
- /**
86
- * Check if a state is terminal (no further transitions)
87
- */
88
- isTerminalState(state: MigrationStateEnum): boolean {
89
- const validTransitions = this.transitions.get(state);
90
- return !validTransitions || validTransitions.length === 0;
91
- }
92
- }
@@ -1,156 +0,0 @@
1
- /**
2
- * StateTracker - Tracks migration state throughout the migration lifecycle
3
- */
4
-
5
- import { v4 as uuidv4 } from 'uuid';
6
- import {
7
- MigrationOptions,
8
- MigrationState,
9
- MigrationStateEnum,
10
- IStateTracker
11
- } from '../types';
12
- import { OriginalsConfig } from '../../types';
13
- import { StateMachine } from './StateMachine';
14
-
15
- export class StateTracker implements IStateTracker {
16
- private states: Map<string, MigrationState>;
17
- private stateMachine: StateMachine;
18
-
19
- constructor(private config: OriginalsConfig) {
20
- this.states = new Map();
21
- this.stateMachine = new StateMachine();
22
- }
23
-
24
- /**
25
- * Create a new migration state
26
- */
27
- async createMigration(options: MigrationOptions): Promise<MigrationState> {
28
- const migrationId = `mig_${uuidv4()}`;
29
- const sourceLayer = this.extractLayer(options.sourceDid);
30
-
31
- if (!sourceLayer) {
32
- throw new Error(`Invalid source DID format: ${options.sourceDid}`);
33
- }
34
-
35
- const state: MigrationState = {
36
- migrationId,
37
- state: MigrationStateEnum.PENDING,
38
- sourceDid: options.sourceDid,
39
- sourceLayer,
40
- targetLayer: options.targetLayer,
41
- progress: 0,
42
- currentOperation: 'Initializing migration',
43
- startTime: Date.now()
44
- };
45
-
46
- this.states.set(migrationId, state);
47
- return state;
48
- }
49
-
50
- /**
51
- * Update migration state
52
- */
53
- async updateState(migrationId: string, updates: Partial<MigrationState>): Promise<void> {
54
- const currentState = this.states.get(migrationId);
55
- if (!currentState) {
56
- throw new Error(`Migration ${migrationId} not found`);
57
- }
58
-
59
- // Validate state transition if state is being updated
60
- if (updates.state && updates.state !== currentState.state) {
61
- if (!this.stateMachine.canTransition(currentState.state, updates.state)) {
62
- throw new Error(
63
- `Invalid state transition from ${currentState.state} to ${updates.state}`
64
- );
65
- }
66
- }
67
-
68
- // Update the state
69
- const updatedState = {
70
- ...currentState,
71
- ...updates
72
- };
73
-
74
- // Set end time if migration is completed, failed, or rolled back
75
- if (
76
- updatedState.state === MigrationStateEnum.COMPLETED ||
77
- updatedState.state === MigrationStateEnum.FAILED ||
78
- updatedState.state === MigrationStateEnum.ROLLED_BACK ||
79
- updatedState.state === MigrationStateEnum.QUARANTINED
80
- ) {
81
- updatedState.endTime = Date.now();
82
- }
83
-
84
- this.states.set(migrationId, updatedState);
85
- }
86
-
87
- /**
88
- * Get migration state
89
- */
90
- async getState(migrationId: string): Promise<MigrationState | null> {
91
- return this.states.get(migrationId) || null;
92
- }
93
-
94
- /**
95
- * Query migration states by filters
96
- */
97
- async queryStates(filters: Partial<MigrationState>): Promise<MigrationState[]> {
98
- const results: MigrationState[] = [];
99
-
100
- for (const state of this.states.values()) {
101
- let matches = true;
102
-
103
- for (const [key, value] of Object.entries(filters)) {
104
- if (state[key as keyof MigrationState] !== value) {
105
- matches = false;
106
- break;
107
- }
108
- }
109
-
110
- if (matches) {
111
- results.push(state);
112
- }
113
- }
114
-
115
- return results;
116
- }
117
-
118
- /**
119
- * Get all active migrations
120
- */
121
- async getActiveMigrations(): Promise<MigrationState[]> {
122
- return this.queryStates({
123
- state: MigrationStateEnum.IN_PROGRESS
124
- });
125
- }
126
-
127
- /**
128
- * Clean up old completed migrations
129
- */
130
- async cleanupOldStates(olderThanMs: number = 7 * 24 * 60 * 60 * 1000): Promise<void> {
131
- const cutoffTime = Date.now() - olderThanMs;
132
- const toDelete: string[] = [];
133
-
134
- for (const [id, state] of this.states.entries()) {
135
- if (
136
- state.endTime &&
137
- state.endTime < cutoffTime &&
138
- (state.state === MigrationStateEnum.COMPLETED ||
139
- state.state === MigrationStateEnum.ROLLED_BACK)
140
- ) {
141
- toDelete.push(id);
142
- }
143
- }
144
-
145
- for (const id of toDelete) {
146
- this.states.delete(id);
147
- }
148
- }
149
-
150
- private extractLayer(did: string): 'peer' | 'webvh' | 'btco' | null {
151
- if (did.startsWith('did:peer:')) return 'peer';
152
- if (did.startsWith('did:webvh:')) return 'webvh';
153
- if (did.startsWith('did:btco:')) return 'btco';
154
- return null;
155
- }
156
- }