@originals/sdk 1.2.0 → 1.4.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.
- package/package.json +1 -1
- package/src/did/DIDManager.ts +1 -1
- package/src/did/WebVHManager.ts +11 -2
- package/src/examples/create-module-original.ts +435 -0
- package/src/examples/full-lifecycle-flow.ts +514 -0
- package/src/examples/run.ts +59 -4
- package/src/index.ts +69 -3
- package/src/kinds/KindRegistry.ts +290 -0
- package/src/kinds/index.ts +74 -0
- package/src/kinds/types.ts +470 -0
- package/src/kinds/validators/AgentValidator.ts +257 -0
- package/src/kinds/validators/AppValidator.ts +211 -0
- package/src/kinds/validators/DatasetValidator.ts +242 -0
- package/src/kinds/validators/DocumentValidator.ts +311 -0
- package/src/kinds/validators/MediaValidator.ts +269 -0
- package/src/kinds/validators/ModuleValidator.ts +225 -0
- package/src/kinds/validators/base.ts +276 -0
- package/src/kinds/validators/index.ts +12 -0
- package/src/lifecycle/LifecycleManager.ts +909 -1
- package/src/resources/ResourceManager.ts +655 -0
- package/src/resources/index.ts +21 -0
- package/src/resources/types.ts +202 -0
- package/src/types/common.ts +1 -1
- package/src/vc/CredentialManager.ts +647 -2
- package/tests/integration/createTypedOriginal.test.ts +379 -0
- package/tests/performance/BatchOperations.perf.test.ts +2 -2
- package/tests/unit/kinds/KindRegistry.test.ts +329 -0
- package/tests/unit/kinds/types.test.ts +409 -0
- package/tests/unit/kinds/validators.test.ts +651 -0
- package/tests/unit/lifecycle/LifecycleManager.cleanapi.test.ts +441 -0
- package/tests/unit/resources/ResourceManager.test.ts +740 -0
- package/tests/unit/vc/CredentialManager.helpers.test.ts +527 -0
- package/.turbo/turbo-build.log +0 -1
- package/dist/adapters/FeeOracleMock.d.ts +0 -6
- package/dist/adapters/FeeOracleMock.js +0 -8
- package/dist/adapters/index.d.ts +0 -4
- package/dist/adapters/index.js +0 -4
- package/dist/adapters/providers/OrdHttpProvider.d.ts +0 -56
- package/dist/adapters/providers/OrdHttpProvider.js +0 -110
- package/dist/adapters/providers/OrdMockProvider.d.ts +0 -70
- package/dist/adapters/providers/OrdMockProvider.js +0 -75
- package/dist/adapters/types.d.ts +0 -71
- package/dist/adapters/types.js +0 -1
- package/dist/bitcoin/BitcoinManager.d.ts +0 -15
- package/dist/bitcoin/BitcoinManager.js +0 -262
- package/dist/bitcoin/BroadcastClient.d.ts +0 -30
- package/dist/bitcoin/BroadcastClient.js +0 -35
- package/dist/bitcoin/OrdinalsClient.d.ts +0 -21
- package/dist/bitcoin/OrdinalsClient.js +0 -105
- package/dist/bitcoin/PSBTBuilder.d.ts +0 -24
- package/dist/bitcoin/PSBTBuilder.js +0 -80
- package/dist/bitcoin/fee-calculation.d.ts +0 -14
- package/dist/bitcoin/fee-calculation.js +0 -31
- package/dist/bitcoin/providers/OrdNodeProvider.d.ts +0 -38
- package/dist/bitcoin/providers/OrdNodeProvider.js +0 -67
- package/dist/bitcoin/providers/OrdinalsProvider.d.ts +0 -33
- package/dist/bitcoin/providers/OrdinalsProvider.js +0 -50
- package/dist/bitcoin/providers/types.d.ts +0 -63
- package/dist/bitcoin/providers/types.js +0 -1
- package/dist/bitcoin/transactions/commit.d.ts +0 -89
- package/dist/bitcoin/transactions/commit.js +0 -311
- package/dist/bitcoin/transactions/index.d.ts +0 -7
- package/dist/bitcoin/transactions/index.js +0 -8
- package/dist/bitcoin/transfer.d.ts +0 -9
- package/dist/bitcoin/transfer.js +0 -26
- package/dist/bitcoin/utxo-selection.d.ts +0 -78
- package/dist/bitcoin/utxo-selection.js +0 -237
- package/dist/bitcoin/utxo.d.ts +0 -26
- package/dist/bitcoin/utxo.js +0 -78
- package/dist/contexts/credentials-v1.json +0 -195
- package/dist/contexts/credentials-v2-examples.json +0 -5
- package/dist/contexts/credentials-v2.json +0 -301
- package/dist/contexts/credentials.json +0 -195
- package/dist/contexts/data-integrity-v2.json +0 -81
- package/dist/contexts/dids.json +0 -57
- package/dist/contexts/ed255192020.json +0 -93
- package/dist/contexts/ordinals-plus.json +0 -23
- package/dist/contexts/originals.json +0 -22
- package/dist/core/OriginalsSDK.d.ts +0 -158
- package/dist/core/OriginalsSDK.js +0 -274
- package/dist/crypto/Multikey.d.ts +0 -30
- package/dist/crypto/Multikey.js +0 -149
- package/dist/crypto/Signer.d.ts +0 -21
- package/dist/crypto/Signer.js +0 -196
- package/dist/crypto/noble-init.d.ts +0 -18
- package/dist/crypto/noble-init.js +0 -106
- package/dist/did/BtcoDidResolver.d.ts +0 -57
- package/dist/did/BtcoDidResolver.js +0 -166
- package/dist/did/DIDManager.d.ts +0 -101
- package/dist/did/DIDManager.js +0 -493
- package/dist/did/Ed25519Verifier.d.ts +0 -30
- package/dist/did/Ed25519Verifier.js +0 -59
- package/dist/did/KeyManager.d.ts +0 -17
- package/dist/did/KeyManager.js +0 -207
- package/dist/did/WebVHManager.d.ts +0 -100
- package/dist/did/WebVHManager.js +0 -304
- package/dist/did/createBtcoDidDocument.d.ts +0 -10
- package/dist/did/createBtcoDidDocument.js +0 -42
- package/dist/did/providers/OrdinalsClientProviderAdapter.d.ts +0 -23
- package/dist/did/providers/OrdinalsClientProviderAdapter.js +0 -51
- package/dist/events/EventEmitter.d.ts +0 -115
- package/dist/events/EventEmitter.js +0 -198
- package/dist/events/index.d.ts +0 -7
- package/dist/events/index.js +0 -6
- package/dist/events/types.d.ts +0 -286
- package/dist/events/types.js +0 -9
- package/dist/examples/basic-usage.d.ts +0 -3
- package/dist/examples/basic-usage.js +0 -62
- package/dist/examples/run.d.ts +0 -1
- package/dist/examples/run.js +0 -4
- package/dist/index.d.ts +0 -39
- package/dist/index.js +0 -47
- package/dist/lifecycle/BatchOperations.d.ts +0 -147
- package/dist/lifecycle/BatchOperations.js +0 -251
- package/dist/lifecycle/LifecycleManager.d.ts +0 -116
- package/dist/lifecycle/LifecycleManager.js +0 -971
- package/dist/lifecycle/OriginalsAsset.d.ts +0 -164
- package/dist/lifecycle/OriginalsAsset.js +0 -380
- package/dist/lifecycle/ProvenanceQuery.d.ts +0 -126
- package/dist/lifecycle/ProvenanceQuery.js +0 -220
- package/dist/lifecycle/ResourceVersioning.d.ts +0 -73
- package/dist/lifecycle/ResourceVersioning.js +0 -127
- package/dist/migration/MigrationManager.d.ts +0 -86
- package/dist/migration/MigrationManager.js +0 -412
- package/dist/migration/audit/AuditLogger.d.ts +0 -51
- package/dist/migration/audit/AuditLogger.js +0 -156
- package/dist/migration/checkpoint/CheckpointManager.d.ts +0 -31
- package/dist/migration/checkpoint/CheckpointManager.js +0 -96
- package/dist/migration/checkpoint/CheckpointStorage.d.ts +0 -26
- package/dist/migration/checkpoint/CheckpointStorage.js +0 -89
- package/dist/migration/index.d.ts +0 -22
- package/dist/migration/index.js +0 -27
- package/dist/migration/operations/BaseMigration.d.ts +0 -48
- package/dist/migration/operations/BaseMigration.js +0 -83
- package/dist/migration/operations/PeerToBtcoMigration.d.ts +0 -25
- package/dist/migration/operations/PeerToBtcoMigration.js +0 -67
- package/dist/migration/operations/PeerToWebvhMigration.d.ts +0 -19
- package/dist/migration/operations/PeerToWebvhMigration.js +0 -46
- package/dist/migration/operations/WebvhToBtcoMigration.d.ts +0 -25
- package/dist/migration/operations/WebvhToBtcoMigration.js +0 -67
- package/dist/migration/rollback/RollbackManager.d.ts +0 -29
- package/dist/migration/rollback/RollbackManager.js +0 -146
- package/dist/migration/state/StateMachine.d.ts +0 -25
- package/dist/migration/state/StateMachine.js +0 -76
- package/dist/migration/state/StateTracker.d.ts +0 -36
- package/dist/migration/state/StateTracker.js +0 -123
- package/dist/migration/types.d.ts +0 -306
- package/dist/migration/types.js +0 -33
- package/dist/migration/validation/BitcoinValidator.d.ts +0 -13
- package/dist/migration/validation/BitcoinValidator.js +0 -83
- package/dist/migration/validation/CredentialValidator.d.ts +0 -13
- package/dist/migration/validation/CredentialValidator.js +0 -46
- package/dist/migration/validation/DIDCompatibilityValidator.d.ts +0 -16
- package/dist/migration/validation/DIDCompatibilityValidator.js +0 -127
- package/dist/migration/validation/LifecycleValidator.d.ts +0 -10
- package/dist/migration/validation/LifecycleValidator.js +0 -52
- package/dist/migration/validation/StorageValidator.d.ts +0 -10
- package/dist/migration/validation/StorageValidator.js +0 -65
- package/dist/migration/validation/ValidationPipeline.d.ts +0 -29
- package/dist/migration/validation/ValidationPipeline.js +0 -180
- package/dist/storage/LocalStorageAdapter.d.ts +0 -11
- package/dist/storage/LocalStorageAdapter.js +0 -53
- package/dist/storage/MemoryStorageAdapter.d.ts +0 -6
- package/dist/storage/MemoryStorageAdapter.js +0 -21
- package/dist/storage/StorageAdapter.d.ts +0 -16
- package/dist/storage/StorageAdapter.js +0 -1
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.js +0 -2
- package/dist/types/bitcoin.d.ts +0 -84
- package/dist/types/bitcoin.js +0 -1
- package/dist/types/common.d.ts +0 -82
- package/dist/types/common.js +0 -1
- package/dist/types/credentials.d.ts +0 -75
- package/dist/types/credentials.js +0 -1
- package/dist/types/did.d.ts +0 -26
- package/dist/types/did.js +0 -1
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.js +0 -5
- package/dist/types/network.d.ts +0 -78
- package/dist/types/network.js +0 -145
- package/dist/utils/EventLogger.d.ts +0 -71
- package/dist/utils/EventLogger.js +0 -232
- package/dist/utils/Logger.d.ts +0 -106
- package/dist/utils/Logger.js +0 -257
- package/dist/utils/MetricsCollector.d.ts +0 -110
- package/dist/utils/MetricsCollector.js +0 -264
- package/dist/utils/bitcoin-address.d.ts +0 -38
- package/dist/utils/bitcoin-address.js +0 -113
- package/dist/utils/cbor.d.ts +0 -2
- package/dist/utils/cbor.js +0 -9
- package/dist/utils/encoding.d.ts +0 -37
- package/dist/utils/encoding.js +0 -120
- package/dist/utils/hash.d.ts +0 -1
- package/dist/utils/hash.js +0 -5
- package/dist/utils/retry.d.ts +0 -10
- package/dist/utils/retry.js +0 -35
- package/dist/utils/satoshi-validation.d.ts +0 -60
- package/dist/utils/satoshi-validation.js +0 -156
- package/dist/utils/serialization.d.ts +0 -14
- package/dist/utils/serialization.js +0 -76
- package/dist/utils/telemetry.d.ts +0 -17
- package/dist/utils/telemetry.js +0 -24
- package/dist/utils/validation.d.ts +0 -5
- package/dist/utils/validation.js +0 -98
- package/dist/vc/CredentialManager.d.ts +0 -22
- package/dist/vc/CredentialManager.js +0 -227
- package/dist/vc/Issuer.d.ts +0 -27
- package/dist/vc/Issuer.js +0 -70
- package/dist/vc/Verifier.d.ts +0 -16
- package/dist/vc/Verifier.js +0 -50
- package/dist/vc/cryptosuites/bbs.d.ts +0 -44
- package/dist/vc/cryptosuites/bbs.js +0 -213
- package/dist/vc/cryptosuites/bbsSimple.d.ts +0 -9
- package/dist/vc/cryptosuites/bbsSimple.js +0 -12
- package/dist/vc/cryptosuites/eddsa.d.ts +0 -30
- package/dist/vc/cryptosuites/eddsa.js +0 -81
- package/dist/vc/documentLoader.d.ts +0 -16
- package/dist/vc/documentLoader.js +0 -59
- package/dist/vc/proofs/data-integrity.d.ts +0 -21
- package/dist/vc/proofs/data-integrity.js +0 -15
- package/dist/vc/utils/jsonld.d.ts +0 -2
- package/dist/vc/utils/jsonld.js +0 -15
- package/test/logs/did_webvh_QmNTn9Kkp8dQ75WrF9xqJ2kuDp9QhKc3aPiERRMj8XoTBN_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmNu4MNr8Lr5txx5gYNhuhZDchXsZEu3hJXKYuphpWTPDp_example_com_users_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmR9MrGZACzjKETA8SBRNCKG11HxU85c4bVR2qN5eDCfsD_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmUc5suaqRM2P4nrXxZwqYMfqzhdMqjuL7oJaJbEpCQVCd_example_com_users_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmUkiB2RCV2VZ1RTXsCebWN25Eiy9TLvpzDWAJNjhgvB4X_example_com_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmUoRTe8UMwpAQXZSAW7pjAgZK1tq2X3C6Kfxq3UXGcaGy_example_com_secret.jsonl +0 -1
- package/test/logs/did_webvh_QmWWot3chx1t6KwTmcE5i2FeDZ5JMkQw3qXycsKDVmJ9Be_example_com_users_alice.jsonl +0 -1
- package/test/logs/did_webvh_QmWvVgALL5kjZdpgR7KZay7J8UiiUr834kkRmWeFAxjAuC_example_com_users_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmWwaRQHUZAFcKihFC6xR6tRTTrQhHPTku6azf1egWbpy1_example_com_users_alice.jsonl +0 -1
- package/test/logs/did_webvh_QmXJLtkz23r7AozbtXsZMKWnVU6rd38CkVtjdWuATU3Yp6_example_com_users_alice123_profile.jsonl +0 -1
- package/test/logs/did_webvh_QmYsce448po14oDE1wXbyaP6wY9HQgHSKLwdezn1k577SF_example_com_my_org_user_name_test_123.jsonl +0 -1
- package/test/logs/did_webvh_QmZBeNzzqajxdfwcDUPZ4P8C5YSXyRztrAwmPiKuKUxmAK_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmZhJsqxizwVbRtqCUkmE6XQunSxtxMt3gbTYadVBNAaEq_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmZk7NHU2D57RzzbMq4tWW9gBa9AqtVTWfiRM6RFdwGVj2_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmZshSXp9w8ovH62zGGBS1b5pGGPsuYiu1VQ935sga2hWF_example_com_level1_level2.jsonl +0 -1
- package/test/logs/did_webvh_QmbWAmw7HQL7vKJyCsctZihXf1rmT4sGvggKCPKWcUWjw1_example_com.jsonl +0 -1
- package/test/logs/did_webvh_QmbdLUMbYs3juR39TLB6hhrFWLcNg45ybUzeBJCS1MhCh1_example_com_C_Windows_System32.jsonl +0 -1
- package/test/logs/did_webvh_QmcaQ1Ma4gkSbae85aCm8Mv4rvdT2Sb2RR3JzYwrm5XBq8_example_com_etc_passwd.jsonl +0 -1
- package/test/logs/did_webvh_QmcbA7WQhsBqZSoDpKJHjV8Q5o53h8vmgJhQfo6rqTY5ho_example_com.jsonl +0 -1
- package/test/logs/did_webvh_Qmdy8uWr2gkUJrXsThynAug3DASTWwb3onEj89LKmMGZYB_example_com.jsonl +0 -1
- package/tests/e2e/README.md +0 -97
- package/tests/e2e/example.spec.ts +0 -78
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CheckpointManager - Creates and manages migration checkpoints for rollback
|
|
3
|
-
*/
|
|
4
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
5
|
-
import { CheckpointStorage } from './CheckpointStorage';
|
|
6
|
-
export class CheckpointManager {
|
|
7
|
-
constructor(config, didManager, credentialManager) {
|
|
8
|
-
this.config = config;
|
|
9
|
-
this.didManager = didManager;
|
|
10
|
-
this.credentialManager = credentialManager;
|
|
11
|
-
this.storage = new CheckpointStorage(config);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Create a checkpoint before migration
|
|
15
|
-
*/
|
|
16
|
-
async createCheckpoint(migrationId, options) {
|
|
17
|
-
try {
|
|
18
|
-
const checkpointId = `chk_${uuidv4()}`;
|
|
19
|
-
// Resolve source DID document
|
|
20
|
-
const didDocument = await this.didManager.resolveDID(options.sourceDid);
|
|
21
|
-
if (!didDocument) {
|
|
22
|
-
throw new Error(`Could not resolve source DID: ${options.sourceDid}`);
|
|
23
|
-
}
|
|
24
|
-
// Extract source layer
|
|
25
|
-
const sourceLayer = this.extractLayer(options.sourceDid);
|
|
26
|
-
if (!sourceLayer) {
|
|
27
|
-
throw new Error(`Invalid source DID format: ${options.sourceDid}`);
|
|
28
|
-
}
|
|
29
|
-
// Create checkpoint
|
|
30
|
-
const checkpoint = {
|
|
31
|
-
checkpointId,
|
|
32
|
-
migrationId,
|
|
33
|
-
timestamp: Date.now(),
|
|
34
|
-
sourceDid: options.sourceDid,
|
|
35
|
-
sourceLayer,
|
|
36
|
-
didDocument,
|
|
37
|
-
credentials: [], // Would be populated by querying credential store
|
|
38
|
-
storageReferences: {}, // Would be populated by querying storage adapter
|
|
39
|
-
lifecycleState: {}, // Would be populated by querying lifecycle manager
|
|
40
|
-
ownershipProofs: [], // Would be populated if available
|
|
41
|
-
metadata: options.metadata || {}
|
|
42
|
-
};
|
|
43
|
-
// Store checkpoint
|
|
44
|
-
await this.storage.save(checkpoint);
|
|
45
|
-
return checkpoint;
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
throw new Error(`Failed to create checkpoint: ${error instanceof Error ? error.message : String(error)}`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Retrieve a checkpoint by ID
|
|
53
|
-
*/
|
|
54
|
-
async getCheckpoint(checkpointId) {
|
|
55
|
-
try {
|
|
56
|
-
return await this.storage.get(checkpointId);
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
console.error(`Error retrieving checkpoint ${checkpointId}:`, error);
|
|
60
|
-
return null;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Delete a checkpoint (after successful migration or cleanup)
|
|
65
|
-
*/
|
|
66
|
-
async deleteCheckpoint(checkpointId) {
|
|
67
|
-
try {
|
|
68
|
-
await this.storage.delete(checkpointId);
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
console.error(`Error deleting checkpoint ${checkpointId}:`, error);
|
|
72
|
-
// Don't throw - deletion failures shouldn't break migrations
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Clean up old checkpoints (older than 24 hours for successful migrations)
|
|
77
|
-
*/
|
|
78
|
-
async cleanupOldCheckpoints() {
|
|
79
|
-
try {
|
|
80
|
-
const cutoffTime = Date.now() - (24 * 60 * 60 * 1000); // 24 hours
|
|
81
|
-
await this.storage.deleteOlderThan(cutoffTime);
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
console.error('Error cleaning up old checkpoints:', error);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
extractLayer(did) {
|
|
88
|
-
if (did.startsWith('did:peer:'))
|
|
89
|
-
return 'peer';
|
|
90
|
-
if (did.startsWith('did:webvh:'))
|
|
91
|
-
return 'webvh';
|
|
92
|
-
if (did.startsWith('did:btco:'))
|
|
93
|
-
return 'btco';
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CheckpointStorage - Persists checkpoints to storage
|
|
3
|
-
*/
|
|
4
|
-
import { MigrationCheckpoint } from '../types';
|
|
5
|
-
import { OriginalsConfig } from '../../types';
|
|
6
|
-
export declare class CheckpointStorage {
|
|
7
|
-
private config;
|
|
8
|
-
private checkpoints;
|
|
9
|
-
constructor(config: OriginalsConfig);
|
|
10
|
-
/**
|
|
11
|
-
* Save a checkpoint
|
|
12
|
-
*/
|
|
13
|
-
save(checkpoint: MigrationCheckpoint): Promise<void>;
|
|
14
|
-
/**
|
|
15
|
-
* Retrieve a checkpoint
|
|
16
|
-
*/
|
|
17
|
-
get(checkpointId: string): Promise<MigrationCheckpoint | null>;
|
|
18
|
-
/**
|
|
19
|
-
* Delete a checkpoint
|
|
20
|
-
*/
|
|
21
|
-
delete(checkpointId: string): Promise<void>;
|
|
22
|
-
/**
|
|
23
|
-
* Delete checkpoints older than specified timestamp
|
|
24
|
-
*/
|
|
25
|
-
deleteOlderThan(cutoffTime: number): Promise<void>;
|
|
26
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CheckpointStorage - Persists checkpoints to storage
|
|
3
|
-
*/
|
|
4
|
-
export class CheckpointStorage {
|
|
5
|
-
constructor(config) {
|
|
6
|
-
this.config = config;
|
|
7
|
-
this.checkpoints = new Map();
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Save a checkpoint
|
|
11
|
-
*/
|
|
12
|
-
async save(checkpoint) {
|
|
13
|
-
if (!checkpoint.checkpointId) {
|
|
14
|
-
throw new Error('Checkpoint must have an ID');
|
|
15
|
-
}
|
|
16
|
-
this.checkpoints.set(checkpoint.checkpointId, checkpoint);
|
|
17
|
-
// Optionally persist to configured storage adapter
|
|
18
|
-
const storageAdapter = this.config.storageAdapter;
|
|
19
|
-
if (storageAdapter && typeof storageAdapter.put === 'function') {
|
|
20
|
-
try {
|
|
21
|
-
const data = JSON.stringify(checkpoint);
|
|
22
|
-
const key = `checkpoints/${checkpoint.checkpointId}.json`;
|
|
23
|
-
await storageAdapter.put(key, Buffer.from(data), { contentType: 'application/json' });
|
|
24
|
-
}
|
|
25
|
-
catch (error) {
|
|
26
|
-
console.error('Failed to persist checkpoint to storage:', error);
|
|
27
|
-
// Continue - in-memory checkpoint is still available
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Retrieve a checkpoint
|
|
33
|
-
*/
|
|
34
|
-
async get(checkpointId) {
|
|
35
|
-
// Try in-memory first
|
|
36
|
-
const memoryCheckpoint = this.checkpoints.get(checkpointId);
|
|
37
|
-
if (memoryCheckpoint) {
|
|
38
|
-
return memoryCheckpoint;
|
|
39
|
-
}
|
|
40
|
-
// Try loading from storage adapter
|
|
41
|
-
const storageAdapter = this.config.storageAdapter;
|
|
42
|
-
if (storageAdapter && typeof storageAdapter.get === 'function') {
|
|
43
|
-
try {
|
|
44
|
-
const key = `checkpoints/${checkpointId}.json`;
|
|
45
|
-
const data = await storageAdapter.get(key);
|
|
46
|
-
if (data) {
|
|
47
|
-
const checkpoint = JSON.parse(data.toString());
|
|
48
|
-
this.checkpoints.set(checkpointId, checkpoint);
|
|
49
|
-
return checkpoint;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
// Checkpoint not found in storage
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Delete a checkpoint
|
|
60
|
-
*/
|
|
61
|
-
async delete(checkpointId) {
|
|
62
|
-
this.checkpoints.delete(checkpointId);
|
|
63
|
-
// Also delete from storage adapter
|
|
64
|
-
const storageAdapter = this.config.storageAdapter;
|
|
65
|
-
if (storageAdapter && typeof storageAdapter.delete === 'function') {
|
|
66
|
-
try {
|
|
67
|
-
const key = `checkpoints/${checkpointId}.json`;
|
|
68
|
-
await storageAdapter.delete(key);
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
// Ignore deletion errors
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Delete checkpoints older than specified timestamp
|
|
77
|
-
*/
|
|
78
|
-
async deleteOlderThan(cutoffTime) {
|
|
79
|
-
const toDelete = [];
|
|
80
|
-
for (const [id, checkpoint] of this.checkpoints.entries()) {
|
|
81
|
-
if (checkpoint.timestamp < cutoffTime) {
|
|
82
|
-
toDelete.push(id);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
for (const id of toDelete) {
|
|
86
|
-
await this.delete(id);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migration module exports
|
|
3
|
-
* Provides DID layer migration capabilities with validation, checkpoints, and rollbacks
|
|
4
|
-
*/
|
|
5
|
-
export { MigrationManager } from './MigrationManager';
|
|
6
|
-
export * from './types';
|
|
7
|
-
export { ValidationPipeline } from './validation/ValidationPipeline';
|
|
8
|
-
export { DIDCompatibilityValidator } from './validation/DIDCompatibilityValidator';
|
|
9
|
-
export { CredentialValidator } from './validation/CredentialValidator';
|
|
10
|
-
export { StorageValidator } from './validation/StorageValidator';
|
|
11
|
-
export { LifecycleValidator } from './validation/LifecycleValidator';
|
|
12
|
-
export { BitcoinValidator } from './validation/BitcoinValidator';
|
|
13
|
-
export { CheckpointManager } from './checkpoint/CheckpointManager';
|
|
14
|
-
export { CheckpointStorage } from './checkpoint/CheckpointStorage';
|
|
15
|
-
export { RollbackManager } from './rollback/RollbackManager';
|
|
16
|
-
export { StateTracker } from './state/StateTracker';
|
|
17
|
-
export { StateMachine } from './state/StateMachine';
|
|
18
|
-
export { AuditLogger } from './audit/AuditLogger';
|
|
19
|
-
export { BaseMigration } from './operations/BaseMigration';
|
|
20
|
-
export { PeerToWebvhMigration } from './operations/PeerToWebvhMigration';
|
|
21
|
-
export { WebvhToBtcoMigration } from './operations/WebvhToBtcoMigration';
|
|
22
|
-
export { PeerToBtcoMigration } from './operations/PeerToBtcoMigration';
|
package/dist/migration/index.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Migration module exports
|
|
3
|
-
* Provides DID layer migration capabilities with validation, checkpoints, and rollbacks
|
|
4
|
-
*/
|
|
5
|
-
export { MigrationManager } from './MigrationManager';
|
|
6
|
-
export * from './types';
|
|
7
|
-
// Validators
|
|
8
|
-
export { ValidationPipeline } from './validation/ValidationPipeline';
|
|
9
|
-
export { DIDCompatibilityValidator } from './validation/DIDCompatibilityValidator';
|
|
10
|
-
export { CredentialValidator } from './validation/CredentialValidator';
|
|
11
|
-
export { StorageValidator } from './validation/StorageValidator';
|
|
12
|
-
export { LifecycleValidator } from './validation/LifecycleValidator';
|
|
13
|
-
export { BitcoinValidator } from './validation/BitcoinValidator';
|
|
14
|
-
// Checkpoint and Rollback
|
|
15
|
-
export { CheckpointManager } from './checkpoint/CheckpointManager';
|
|
16
|
-
export { CheckpointStorage } from './checkpoint/CheckpointStorage';
|
|
17
|
-
export { RollbackManager } from './rollback/RollbackManager';
|
|
18
|
-
// State Management
|
|
19
|
-
export { StateTracker } from './state/StateTracker';
|
|
20
|
-
export { StateMachine } from './state/StateMachine';
|
|
21
|
-
// Audit
|
|
22
|
-
export { AuditLogger } from './audit/AuditLogger';
|
|
23
|
-
// Operations
|
|
24
|
-
export { BaseMigration } from './operations/BaseMigration';
|
|
25
|
-
export { PeerToWebvhMigration } from './operations/PeerToWebvhMigration';
|
|
26
|
-
export { WebvhToBtcoMigration } from './operations/WebvhToBtcoMigration';
|
|
27
|
-
export { PeerToBtcoMigration } from './operations/PeerToBtcoMigration';
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BaseMigration - Base class for all migration operations
|
|
3
|
-
*/
|
|
4
|
-
import { MigrationOptions, MigrationError, MigrationErrorType, CostEstimate } from '../types';
|
|
5
|
-
import { OriginalsConfig, DIDDocument } from '../../types';
|
|
6
|
-
import { DIDManager } from '../../did/DIDManager';
|
|
7
|
-
import { CredentialManager } from '../../vc/CredentialManager';
|
|
8
|
-
import { StateTracker } from '../state/StateTracker';
|
|
9
|
-
import { EventEmitter } from '../../events/EventEmitter';
|
|
10
|
-
export declare abstract class BaseMigration {
|
|
11
|
-
protected config: OriginalsConfig;
|
|
12
|
-
protected didManager: DIDManager;
|
|
13
|
-
protected credentialManager: CredentialManager;
|
|
14
|
-
protected stateTracker: StateTracker;
|
|
15
|
-
protected eventEmitter: EventEmitter;
|
|
16
|
-
constructor(config: OriginalsConfig, didManager: DIDManager, credentialManager: CredentialManager, stateTracker: StateTracker);
|
|
17
|
-
/**
|
|
18
|
-
* Execute the migration (to be implemented by subclasses)
|
|
19
|
-
*/
|
|
20
|
-
abstract executeMigration(options: MigrationOptions, migrationId: string): Promise<{
|
|
21
|
-
targetDid: string;
|
|
22
|
-
didDocument: DIDDocument;
|
|
23
|
-
}>;
|
|
24
|
-
/**
|
|
25
|
-
* Get estimated cost (to be implemented by subclasses)
|
|
26
|
-
*/
|
|
27
|
-
abstract estimateCost(options: MigrationOptions): Promise<CostEstimate>;
|
|
28
|
-
/**
|
|
29
|
-
* Emit migration event
|
|
30
|
-
*/
|
|
31
|
-
protected emitEvent(type: string, data: any): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* Create migration error
|
|
34
|
-
*/
|
|
35
|
-
protected createError(type: MigrationErrorType, code: string, message: string, migrationId?: string, details?: any): MigrationError;
|
|
36
|
-
/**
|
|
37
|
-
* Update migration state with error handling
|
|
38
|
-
*/
|
|
39
|
-
protected updateStateWithRetry(migrationId: string, updates: any, maxRetries?: number): Promise<void>;
|
|
40
|
-
/**
|
|
41
|
-
* Resolve source DID document
|
|
42
|
-
*/
|
|
43
|
-
protected resolveSourceDid(sourceDid: string): Promise<DIDDocument>;
|
|
44
|
-
/**
|
|
45
|
-
* Extract layer from DID
|
|
46
|
-
*/
|
|
47
|
-
protected extractLayer(did: string): 'peer' | 'webvh' | 'btco';
|
|
48
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* BaseMigration - Base class for all migration operations
|
|
3
|
-
*/
|
|
4
|
-
import { EventEmitter } from '../../events/EventEmitter';
|
|
5
|
-
export class BaseMigration {
|
|
6
|
-
constructor(config, didManager, credentialManager, stateTracker) {
|
|
7
|
-
this.config = config;
|
|
8
|
-
this.didManager = didManager;
|
|
9
|
-
this.credentialManager = credentialManager;
|
|
10
|
-
this.stateTracker = stateTracker;
|
|
11
|
-
this.eventEmitter = new EventEmitter();
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Emit migration event
|
|
15
|
-
*/
|
|
16
|
-
async emitEvent(type, data) {
|
|
17
|
-
try {
|
|
18
|
-
await this.eventEmitter.emit({
|
|
19
|
-
type,
|
|
20
|
-
timestamp: new Date().toISOString(),
|
|
21
|
-
...data
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
catch (error) {
|
|
25
|
-
console.error(`Error emitting event ${type}:`, error);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Create migration error
|
|
30
|
-
*/
|
|
31
|
-
createError(type, code, message, migrationId, details) {
|
|
32
|
-
return {
|
|
33
|
-
type,
|
|
34
|
-
code,
|
|
35
|
-
message,
|
|
36
|
-
technicalDetails: details ? JSON.stringify(details) : undefined,
|
|
37
|
-
migrationId,
|
|
38
|
-
timestamp: Date.now()
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Update migration state with error handling
|
|
43
|
-
*/
|
|
44
|
-
async updateStateWithRetry(migrationId, updates, maxRetries = 3) {
|
|
45
|
-
let lastError = null;
|
|
46
|
-
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
47
|
-
try {
|
|
48
|
-
await this.stateTracker.updateState(migrationId, updates);
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
lastError = error instanceof Error ? error : new Error(String(error));
|
|
53
|
-
if (attempt < maxRetries - 1) {
|
|
54
|
-
// Exponential backoff: 100ms, 200ms, 400ms
|
|
55
|
-
await new Promise(resolve => setTimeout(resolve, 100 * Math.pow(2, attempt)));
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
throw lastError || new Error('Failed to update state after retries');
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Resolve source DID document
|
|
63
|
-
*/
|
|
64
|
-
async resolveSourceDid(sourceDid) {
|
|
65
|
-
const didDocument = await this.didManager.resolveDID(sourceDid);
|
|
66
|
-
if (!didDocument) {
|
|
67
|
-
throw new Error(`Could not resolve source DID: ${sourceDid}`);
|
|
68
|
-
}
|
|
69
|
-
return didDocument;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Extract layer from DID
|
|
73
|
-
*/
|
|
74
|
-
extractLayer(did) {
|
|
75
|
-
if (did.startsWith('did:peer:'))
|
|
76
|
-
return 'peer';
|
|
77
|
-
if (did.startsWith('did:webvh:'))
|
|
78
|
-
return 'webvh';
|
|
79
|
-
if (did.startsWith('did:btco:'))
|
|
80
|
-
return 'btco';
|
|
81
|
-
throw new Error(`Unsupported DID method: ${did}`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PeerToBtcoMigration - Handles direct migration from did:peer to did:btco
|
|
3
|
-
*/
|
|
4
|
-
import { MigrationOptions, CostEstimate } from '../types';
|
|
5
|
-
import { DIDDocument, OriginalsConfig } from '../../types';
|
|
6
|
-
import { BaseMigration } from './BaseMigration';
|
|
7
|
-
import { BitcoinManager } from '../../bitcoin/BitcoinManager';
|
|
8
|
-
import { DIDManager } from '../../did/DIDManager';
|
|
9
|
-
import { CredentialManager } from '../../vc/CredentialManager';
|
|
10
|
-
import { StateTracker } from '../state/StateTracker';
|
|
11
|
-
export declare class PeerToBtcoMigration extends BaseMigration {
|
|
12
|
-
private bitcoinManager;
|
|
13
|
-
constructor(config: OriginalsConfig, didManager: DIDManager, credentialManager: CredentialManager, stateTracker: StateTracker, bitcoinManager: BitcoinManager);
|
|
14
|
-
/**
|
|
15
|
-
* Execute peer → btco migration (direct, skipping webvh layer)
|
|
16
|
-
*/
|
|
17
|
-
executeMigration(options: MigrationOptions, migrationId: string): Promise<{
|
|
18
|
-
targetDid: string;
|
|
19
|
-
didDocument: DIDDocument;
|
|
20
|
-
}>;
|
|
21
|
-
/**
|
|
22
|
-
* Estimate cost for peer → btco migration
|
|
23
|
-
*/
|
|
24
|
-
estimateCost(options: MigrationOptions): Promise<CostEstimate>;
|
|
25
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PeerToBtcoMigration - Handles direct migration from did:peer to did:btco
|
|
3
|
-
*/
|
|
4
|
-
import { MigrationStateEnum } from '../types';
|
|
5
|
-
import { BaseMigration } from './BaseMigration';
|
|
6
|
-
export class PeerToBtcoMigration extends BaseMigration {
|
|
7
|
-
constructor(config, didManager, credentialManager, stateTracker, bitcoinManager) {
|
|
8
|
-
super(config, didManager, credentialManager, stateTracker);
|
|
9
|
-
this.bitcoinManager = bitcoinManager;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Execute peer → btco migration (direct, skipping webvh layer)
|
|
13
|
-
*/
|
|
14
|
-
async executeMigration(options, migrationId) {
|
|
15
|
-
// Resolve source DID
|
|
16
|
-
const sourceDid = await this.resolveSourceDid(options.sourceDid);
|
|
17
|
-
await this.updateStateWithRetry(migrationId, {
|
|
18
|
-
state: MigrationStateEnum.IN_PROGRESS,
|
|
19
|
-
currentOperation: 'Creating Bitcoin inscription',
|
|
20
|
-
progress: 30
|
|
21
|
-
});
|
|
22
|
-
// Create Bitcoin inscription with DID document
|
|
23
|
-
const manifest = {
|
|
24
|
-
didDocument: sourceDid,
|
|
25
|
-
migrationId,
|
|
26
|
-
timestamp: new Date().toISOString()
|
|
27
|
-
};
|
|
28
|
-
const payload = Buffer.from(JSON.stringify(manifest));
|
|
29
|
-
await this.updateStateWithRetry(migrationId, {
|
|
30
|
-
state: MigrationStateEnum.ANCHORING,
|
|
31
|
-
currentOperation: 'Anchoring to Bitcoin',
|
|
32
|
-
progress: 50
|
|
33
|
-
});
|
|
34
|
-
const inscription = await this.bitcoinManager.inscribeData(payload, 'application/json', options.feeRate);
|
|
35
|
-
// Use satoshi identifier or inscription ID
|
|
36
|
-
const satoshiId = inscription.satoshi || inscription.inscriptionId.split('i')[0];
|
|
37
|
-
await this.updateStateWithRetry(migrationId, {
|
|
38
|
-
currentOperation: 'Creating btco DID document',
|
|
39
|
-
progress: 80
|
|
40
|
-
});
|
|
41
|
-
// Migrate DID document to btco
|
|
42
|
-
const migratedDoc = await this.didManager.migrateToDIDBTCO(sourceDid, satoshiId);
|
|
43
|
-
await this.updateStateWithRetry(migrationId, {
|
|
44
|
-
currentOperation: 'Migration completed',
|
|
45
|
-
progress: 100,
|
|
46
|
-
targetDid: migratedDoc.id
|
|
47
|
-
});
|
|
48
|
-
return {
|
|
49
|
-
targetDid: migratedDoc.id,
|
|
50
|
-
didDocument: migratedDoc
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Estimate cost for peer → btco migration
|
|
55
|
-
*/
|
|
56
|
-
async estimateCost(options) {
|
|
57
|
-
const feeRate = options.feeRate || 10; // default 10 sat/vB
|
|
58
|
-
const estimatedSize = 1024; // ~1KB for typical DID document
|
|
59
|
-
const networkFees = estimatedSize * feeRate;
|
|
60
|
-
return {
|
|
61
|
-
storageCost: 0,
|
|
62
|
-
networkFees,
|
|
63
|
-
totalCost: networkFees,
|
|
64
|
-
currency: 'sats'
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PeerToWebvhMigration - Handles migration from did:peer to did:webvh
|
|
3
|
-
*/
|
|
4
|
-
import { MigrationOptions, CostEstimate } from '../types';
|
|
5
|
-
import { DIDDocument } from '../../types';
|
|
6
|
-
import { BaseMigration } from './BaseMigration';
|
|
7
|
-
export declare class PeerToWebvhMigration extends BaseMigration {
|
|
8
|
-
/**
|
|
9
|
-
* Execute peer → webvh migration
|
|
10
|
-
*/
|
|
11
|
-
executeMigration(options: MigrationOptions, migrationId: string): Promise<{
|
|
12
|
-
targetDid: string;
|
|
13
|
-
didDocument: DIDDocument;
|
|
14
|
-
}>;
|
|
15
|
-
/**
|
|
16
|
-
* Estimate cost for peer → webvh migration
|
|
17
|
-
*/
|
|
18
|
-
estimateCost(options: MigrationOptions): Promise<CostEstimate>;
|
|
19
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PeerToWebvhMigration - Handles migration from did:peer to did:webvh
|
|
3
|
-
*/
|
|
4
|
-
import { MigrationStateEnum } from '../types';
|
|
5
|
-
import { BaseMigration } from './BaseMigration';
|
|
6
|
-
export class PeerToWebvhMigration extends BaseMigration {
|
|
7
|
-
/**
|
|
8
|
-
* Execute peer → webvh migration
|
|
9
|
-
*/
|
|
10
|
-
async executeMigration(options, migrationId) {
|
|
11
|
-
// Resolve source DID
|
|
12
|
-
const sourceDid = await this.resolveSourceDid(options.sourceDid);
|
|
13
|
-
// Validate domain is provided
|
|
14
|
-
if (!options.domain) {
|
|
15
|
-
throw new Error('Domain is required for webvh migrations');
|
|
16
|
-
}
|
|
17
|
-
await this.updateStateWithRetry(migrationId, {
|
|
18
|
-
state: MigrationStateEnum.IN_PROGRESS,
|
|
19
|
-
currentOperation: 'Creating webvh DID document',
|
|
20
|
-
progress: 30
|
|
21
|
-
});
|
|
22
|
-
// Migrate DID document to webvh
|
|
23
|
-
const migratedDoc = await this.didManager.migrateToDIDWebVH(sourceDid, options.domain);
|
|
24
|
-
await this.updateStateWithRetry(migrationId, {
|
|
25
|
-
currentOperation: 'Migration completed',
|
|
26
|
-
progress: 100,
|
|
27
|
-
targetDid: migratedDoc.id
|
|
28
|
-
});
|
|
29
|
-
return {
|
|
30
|
-
targetDid: migratedDoc.id,
|
|
31
|
-
didDocument: migratedDoc
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Estimate cost for peer → webvh migration
|
|
36
|
-
*/
|
|
37
|
-
async estimateCost(options) {
|
|
38
|
-
// Web hosting is typically negligible cost
|
|
39
|
-
return {
|
|
40
|
-
storageCost: 0,
|
|
41
|
-
networkFees: 0,
|
|
42
|
-
totalCost: 0,
|
|
43
|
-
currency: 'sats'
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebvhToBtcoMigration - Handles migration from did:webvh to did:btco
|
|
3
|
-
*/
|
|
4
|
-
import { MigrationOptions, CostEstimate } from '../types';
|
|
5
|
-
import { DIDDocument, OriginalsConfig } from '../../types';
|
|
6
|
-
import { BaseMigration } from './BaseMigration';
|
|
7
|
-
import { BitcoinManager } from '../../bitcoin/BitcoinManager';
|
|
8
|
-
import { DIDManager } from '../../did/DIDManager';
|
|
9
|
-
import { CredentialManager } from '../../vc/CredentialManager';
|
|
10
|
-
import { StateTracker } from '../state/StateTracker';
|
|
11
|
-
export declare class WebvhToBtcoMigration extends BaseMigration {
|
|
12
|
-
private bitcoinManager;
|
|
13
|
-
constructor(config: OriginalsConfig, didManager: DIDManager, credentialManager: CredentialManager, stateTracker: StateTracker, bitcoinManager: BitcoinManager);
|
|
14
|
-
/**
|
|
15
|
-
* Execute webvh → btco migration
|
|
16
|
-
*/
|
|
17
|
-
executeMigration(options: MigrationOptions, migrationId: string): Promise<{
|
|
18
|
-
targetDid: string;
|
|
19
|
-
didDocument: DIDDocument;
|
|
20
|
-
}>;
|
|
21
|
-
/**
|
|
22
|
-
* Estimate cost for webvh → btco migration
|
|
23
|
-
*/
|
|
24
|
-
estimateCost(options: MigrationOptions): Promise<CostEstimate>;
|
|
25
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WebvhToBtcoMigration - Handles migration from did:webvh to did:btco
|
|
3
|
-
*/
|
|
4
|
-
import { MigrationStateEnum } from '../types';
|
|
5
|
-
import { BaseMigration } from './BaseMigration';
|
|
6
|
-
export class WebvhToBtcoMigration extends BaseMigration {
|
|
7
|
-
constructor(config, didManager, credentialManager, stateTracker, bitcoinManager) {
|
|
8
|
-
super(config, didManager, credentialManager, stateTracker);
|
|
9
|
-
this.bitcoinManager = bitcoinManager;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Execute webvh → btco migration
|
|
13
|
-
*/
|
|
14
|
-
async executeMigration(options, migrationId) {
|
|
15
|
-
// Resolve source DID
|
|
16
|
-
const sourceDid = await this.resolveSourceDid(options.sourceDid);
|
|
17
|
-
await this.updateStateWithRetry(migrationId, {
|
|
18
|
-
state: MigrationStateEnum.IN_PROGRESS,
|
|
19
|
-
currentOperation: 'Creating Bitcoin inscription',
|
|
20
|
-
progress: 30
|
|
21
|
-
});
|
|
22
|
-
// Create Bitcoin inscription with DID document
|
|
23
|
-
const manifest = {
|
|
24
|
-
didDocument: sourceDid,
|
|
25
|
-
migrationId,
|
|
26
|
-
timestamp: new Date().toISOString()
|
|
27
|
-
};
|
|
28
|
-
const payload = Buffer.from(JSON.stringify(manifest));
|
|
29
|
-
await this.updateStateWithRetry(migrationId, {
|
|
30
|
-
state: MigrationStateEnum.ANCHORING,
|
|
31
|
-
currentOperation: 'Anchoring to Bitcoin',
|
|
32
|
-
progress: 50
|
|
33
|
-
});
|
|
34
|
-
const inscription = await this.bitcoinManager.inscribeData(payload, 'application/json', options.feeRate);
|
|
35
|
-
// Use satoshi identifier or inscription ID
|
|
36
|
-
const satoshiId = inscription.satoshi || inscription.inscriptionId.split('i')[0];
|
|
37
|
-
await this.updateStateWithRetry(migrationId, {
|
|
38
|
-
currentOperation: 'Creating btco DID document',
|
|
39
|
-
progress: 80
|
|
40
|
-
});
|
|
41
|
-
// Migrate DID document to btco
|
|
42
|
-
const migratedDoc = await this.didManager.migrateToDIDBTCO(sourceDid, satoshiId);
|
|
43
|
-
await this.updateStateWithRetry(migrationId, {
|
|
44
|
-
currentOperation: 'Migration completed',
|
|
45
|
-
progress: 100,
|
|
46
|
-
targetDid: migratedDoc.id
|
|
47
|
-
});
|
|
48
|
-
return {
|
|
49
|
-
targetDid: migratedDoc.id,
|
|
50
|
-
didDocument: migratedDoc
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Estimate cost for webvh → btco migration
|
|
55
|
-
*/
|
|
56
|
-
async estimateCost(options) {
|
|
57
|
-
const feeRate = options.feeRate || 10; // default 10 sat/vB
|
|
58
|
-
const estimatedSize = 1024; // ~1KB for typical DID document
|
|
59
|
-
const networkFees = estimatedSize * feeRate;
|
|
60
|
-
return {
|
|
61
|
-
storageCost: 0,
|
|
62
|
-
networkFees,
|
|
63
|
-
totalCost: networkFees,
|
|
64
|
-
currency: 'sats'
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
}
|