@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,68 +0,0 @@
1
- import { verifyAsync } from '@noble/ed25519';
2
- import type { ExternalVerifier } from '../types/common.js';
3
-
4
- /**
5
- * Ed25519Verifier - A simple Ed25519 verifier for DID operations
6
- * Compatible with didwebvh-ts resolveDIDFromLog
7
- */
8
- export class Ed25519Verifier implements ExternalVerifier {
9
- private verificationMethodId?: string;
10
- private publicKey?: Uint8Array;
11
-
12
- constructor(verificationMethodId?: string, publicKey?: Uint8Array) {
13
- this.verificationMethodId = verificationMethodId;
14
- this.publicKey = publicKey;
15
- }
16
-
17
- /**
18
- * Verify a signature using Ed25519
19
- * @param signature - The signature bytes
20
- * @param message - The message bytes that were signed
21
- * @param publicKey - The public key bytes (can be different from constructor publicKey)
22
- * @returns True if the signature is valid
23
- */
24
- async verify(signature: Uint8Array, message: Uint8Array, publicKey: Uint8Array): Promise<boolean> {
25
- try {
26
- // Ed25519 public keys must be exactly 32 bytes
27
- // Some keys may have a version byte prefix, so remove it if present
28
- let ed25519PublicKey = publicKey;
29
- if (publicKey.length === 33) {
30
- ed25519PublicKey = publicKey.slice(1);
31
- } else if (publicKey.length !== 32) {
32
- console.error(`[Ed25519Verifier] Invalid public key length: ${publicKey.length} (expected 32 bytes)`);
33
- return false;
34
- }
35
-
36
- // Correct parameter order: verifyAsync(signature, message, publicKey)
37
- return await verifyAsync(signature, message, ed25519PublicKey);
38
- } catch (error) {
39
- console.error('[Ed25519Verifier] Verification error:', error);
40
- return false;
41
- }
42
- }
43
-
44
- /**
45
- * Get the verification method ID associated with this verifier
46
- */
47
- getVerificationMethodId(): string | undefined {
48
- return this.verificationMethodId;
49
- }
50
-
51
- /**
52
- * Get the public key as Uint8Array
53
- */
54
- getPublicKey(): Uint8Array | undefined {
55
- return this.publicKey;
56
- }
57
-
58
- /**
59
- * Get the public key in multibase format (base64url with 'z' prefix)
60
- */
61
- getPublicKeyMultibase(): string | undefined {
62
- if (!this.publicKey) {
63
- return undefined;
64
- }
65
- return `z${Buffer.from(this.publicKey).toString('base64')}`;
66
- }
67
- }
68
-
@@ -1,236 +0,0 @@
1
- // Initialize noble crypto libraries first (idempotent - safe to import multiple times)
2
- import '../crypto/noble-init.js';
3
-
4
- import { DIDDocument, KeyPair, KeyType, KeyRecoveryCredential } from '../types';
5
- import * as secp256k1 from '@noble/secp256k1';
6
- import * as ed25519 from '@noble/ed25519';
7
- import { p256 } from '@noble/curves/p256';
8
- import { multikey, MultikeyType } from '../crypto/Multikey';
9
-
10
- function toMultikeyType(type: KeyType): MultikeyType {
11
- if (type === 'ES256K') return 'Secp256k1';
12
- if (type === 'Ed25519') return 'Ed25519';
13
- if (type === 'ES256') return 'P256';
14
- throw new Error(`Unsupported key type: ${type}`);
15
- }
16
-
17
- function fromMultikeyType(type: MultikeyType): KeyType {
18
- if (type === 'Secp256k1') return 'ES256K';
19
- if (type === 'Ed25519') return 'Ed25519';
20
- if (type === 'P256') return 'ES256';
21
- throw new Error('Unsupported key type');
22
- }
23
-
24
- export class KeyManager {
25
- constructor() {
26
- // Noble crypto libraries are initialized via noble-init.ts (imported at SDK entry point)
27
- // No initialization needed here
28
- }
29
- async generateKeyPair(type: KeyType): Promise<KeyPair> {
30
- if (type === 'ES256K') {
31
- const privateKeyBytes = secp256k1.utils.randomPrivateKey();
32
- const publicKeyBytes = secp256k1.getPublicKey(privateKeyBytes, true);
33
- return {
34
- privateKey: multikey.encodePrivateKey(privateKeyBytes, 'Secp256k1'),
35
- publicKey: multikey.encodePublicKey(publicKeyBytes, 'Secp256k1')
36
- };
37
- }
38
-
39
- if (type === 'Ed25519') {
40
- const privateKeyBytes = ed25519.utils.randomPrivateKey();
41
- const publicKeyBytes = await (ed25519 as any).getPublicKeyAsync(privateKeyBytes);
42
- return {
43
- privateKey: multikey.encodePrivateKey(privateKeyBytes as Uint8Array, 'Ed25519'),
44
- publicKey: multikey.encodePublicKey(publicKeyBytes as Uint8Array, 'Ed25519')
45
- };
46
- }
47
-
48
- if (type === 'ES256') {
49
- const privateKeyBytes = p256.utils.randomPrivateKey();
50
- const publicKeyBytes = p256.getPublicKey(privateKeyBytes, true);
51
- return {
52
- privateKey: multikey.encodePrivateKey(privateKeyBytes, 'P256'),
53
- publicKey: multikey.encodePublicKey(publicKeyBytes, 'P256')
54
- };
55
- }
56
-
57
- throw new Error(`Unsupported key type: ${type}`);
58
- }
59
-
60
- async rotateKeys(didDoc: DIDDocument, newKeyPair: KeyPair): Promise<DIDDocument> {
61
- const multikeyContext = 'https://w3id.org/security/multikey/v1';
62
- const securityContext = 'https://w3id.org/security/v1';
63
-
64
- // Ensure required contexts are present
65
- const updatedContext = [...didDoc['@context']];
66
- if (!updatedContext.includes(multikeyContext)) {
67
- updatedContext.push(multikeyContext);
68
- }
69
- if (!updatedContext.includes(securityContext)) {
70
- updatedContext.push(securityContext);
71
- }
72
-
73
- // Generate new key ID
74
- const existingKeys = didDoc.verificationMethod || [];
75
- const keyIndex = existingKeys.length;
76
- const newKeyId = `${didDoc.id}#keys-${keyIndex}`;
77
-
78
- // Mark all existing verification methods as revoked with current timestamp
79
- const revokedTimestamp = new Date().toISOString();
80
- const revokedVerificationMethods = existingKeys.map(vm => ({
81
- ...vm,
82
- revoked: revokedTimestamp
83
- }));
84
-
85
- // Create new verification method
86
- const newVerificationMethod = {
87
- id: newKeyId,
88
- type: 'Multikey',
89
- controller: didDoc.id,
90
- publicKeyMultibase: newKeyPair.publicKey
91
- };
92
-
93
- // Update authentication and assertionMethod arrays to reference only the new key
94
- const newKeyReference = newKeyId;
95
-
96
- const updated: DIDDocument = {
97
- ...didDoc,
98
- '@context': updatedContext,
99
- verificationMethod: [...revokedVerificationMethods, newVerificationMethod],
100
- authentication: [newKeyReference],
101
- assertionMethod: [newKeyReference]
102
- };
103
-
104
- // Preserve other properties if they exist
105
- if (didDoc.keyAgreement) {
106
- updated.keyAgreement = didDoc.keyAgreement;
107
- }
108
- if (didDoc.capabilityInvocation) {
109
- updated.capabilityInvocation = didDoc.capabilityInvocation;
110
- }
111
- if (didDoc.capabilityDelegation) {
112
- updated.capabilityDelegation = didDoc.capabilityDelegation;
113
- }
114
- if (didDoc.service) {
115
- updated.service = didDoc.service;
116
- }
117
-
118
- return updated;
119
- }
120
-
121
- async recoverFromCompromise(didDoc: DIDDocument): Promise<{
122
- didDocument: DIDDocument;
123
- recoveryCredential: KeyRecoveryCredential;
124
- newKeyPair: KeyPair;
125
- }> {
126
- // Determine key type from existing verification methods or default to Ed25519
127
- let keyType: KeyType = 'Ed25519';
128
- if (didDoc.verificationMethod && didDoc.verificationMethod.length > 0) {
129
- try {
130
- const firstKey = didDoc.verificationMethod[0];
131
- const decoded = multikey.decodePublicKey(firstKey.publicKeyMultibase);
132
- keyType = fromMultikeyType(decoded.type);
133
- } catch (e) {
134
- // If decoding fails, use default Ed25519
135
- }
136
- }
137
-
138
- // Generate new key pair
139
- const newKeyPair = await this.generateKeyPair(keyType);
140
-
141
- // Ensure required contexts
142
- const multikeyContext = 'https://w3id.org/security/multikey/v1';
143
- const securityContext = 'https://w3id.org/security/v1';
144
- const credentialsContext = 'https://www.w3.org/2018/credentials/v1';
145
-
146
- const updatedContext = [...didDoc['@context']];
147
- if (!updatedContext.includes(multikeyContext)) {
148
- updatedContext.push(multikeyContext);
149
- }
150
- if (!updatedContext.includes(securityContext)) {
151
- updatedContext.push(securityContext);
152
- }
153
-
154
- // Mark all existing verification methods as compromised
155
- const compromisedTimestamp = new Date().toISOString();
156
- const existingKeys = didDoc.verificationMethod || [];
157
- const compromisedVerificationMethods = existingKeys.map(vm => ({
158
- ...vm,
159
- compromised: compromisedTimestamp
160
- }));
161
-
162
- // Collect IDs of compromised keys
163
- const previousVerificationMethodIds = existingKeys.map(vm => vm.id);
164
-
165
- // Generate new key ID
166
- const keyIndex = existingKeys.length;
167
- const newKeyId = `${didDoc.id}#keys-${keyIndex}`;
168
-
169
- // Create new verification method
170
- const newVerificationMethod = {
171
- id: newKeyId,
172
- type: 'Multikey',
173
- controller: didDoc.id,
174
- publicKeyMultibase: newKeyPair.publicKey
175
- };
176
-
177
- // Update DID document
178
- const updatedDidDocument: DIDDocument = {
179
- ...didDoc,
180
- '@context': updatedContext,
181
- verificationMethod: [...compromisedVerificationMethods, newVerificationMethod],
182
- authentication: [newKeyId],
183
- assertionMethod: [newKeyId]
184
- };
185
-
186
- // Preserve other properties
187
- if (didDoc.keyAgreement) {
188
- updatedDidDocument.keyAgreement = didDoc.keyAgreement;
189
- }
190
- if (didDoc.capabilityInvocation) {
191
- updatedDidDocument.capabilityInvocation = didDoc.capabilityInvocation;
192
- }
193
- if (didDoc.capabilityDelegation) {
194
- updatedDidDocument.capabilityDelegation = didDoc.capabilityDelegation;
195
- }
196
- if (didDoc.service) {
197
- updatedDidDocument.service = didDoc.service;
198
- }
199
-
200
- // Create recovery credential
201
- const recoveryCredential: KeyRecoveryCredential = {
202
- '@context': [credentialsContext, securityContext],
203
- type: ['VerifiableCredential', 'KeyRecoveryCredential'],
204
- issuer: didDoc.id,
205
- issuanceDate: compromisedTimestamp,
206
- credentialSubject: {
207
- id: didDoc.id,
208
- recoveredAt: compromisedTimestamp,
209
- recoveryReason: 'key_compromise',
210
- previousVerificationMethods: previousVerificationMethodIds,
211
- newVerificationMethod: newKeyId
212
- }
213
- };
214
-
215
- return { didDocument: updatedDidDocument, recoveryCredential, newKeyPair };
216
- }
217
-
218
- encodePublicKeyMultibase(publicKey: Buffer, type: KeyType): string {
219
- const mkType = toMultikeyType(type);
220
- return multikey.encodePublicKey(new Uint8Array(publicKey), mkType);
221
- }
222
-
223
- decodePublicKeyMultibase(encoded: string): { key: Buffer; type: KeyType } {
224
- if (!encoded || typeof encoded !== 'string') {
225
- throw new Error('Invalid multibase string');
226
- }
227
- try {
228
- const decoded = multikey.decodePublicKey(encoded);
229
- return { key: Buffer.from(decoded.key), type: fromMultikeyType(decoded.type) };
230
- } catch {
231
- throw new Error('Invalid multibase string');
232
- }
233
- }
234
- }
235
-
236
-