@originals/sdk 1.1.0

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 (403) hide show
  1. package/.eslintrc.json +33 -0
  2. package/.turbo/turbo-build.log +1 -0
  3. package/.turbo/turbo-test.log +68353 -0
  4. package/dist/adapters/FeeOracleMock.d.ts +6 -0
  5. package/dist/adapters/FeeOracleMock.js +8 -0
  6. package/dist/adapters/index.d.ts +4 -0
  7. package/dist/adapters/index.js +4 -0
  8. package/dist/adapters/providers/OrdHttpProvider.d.ts +56 -0
  9. package/dist/adapters/providers/OrdHttpProvider.js +110 -0
  10. package/dist/adapters/providers/OrdMockProvider.d.ts +70 -0
  11. package/dist/adapters/providers/OrdMockProvider.js +75 -0
  12. package/dist/adapters/types.d.ts +71 -0
  13. package/dist/adapters/types.js +1 -0
  14. package/dist/bitcoin/BitcoinManager.d.ts +15 -0
  15. package/dist/bitcoin/BitcoinManager.js +262 -0
  16. package/dist/bitcoin/BroadcastClient.d.ts +30 -0
  17. package/dist/bitcoin/BroadcastClient.js +35 -0
  18. package/dist/bitcoin/OrdinalsClient.d.ts +21 -0
  19. package/dist/bitcoin/OrdinalsClient.js +105 -0
  20. package/dist/bitcoin/PSBTBuilder.d.ts +24 -0
  21. package/dist/bitcoin/PSBTBuilder.js +80 -0
  22. package/dist/bitcoin/fee-calculation.d.ts +14 -0
  23. package/dist/bitcoin/fee-calculation.js +31 -0
  24. package/dist/bitcoin/providers/OrdNodeProvider.d.ts +38 -0
  25. package/dist/bitcoin/providers/OrdNodeProvider.js +67 -0
  26. package/dist/bitcoin/providers/OrdinalsProvider.d.ts +33 -0
  27. package/dist/bitcoin/providers/OrdinalsProvider.js +50 -0
  28. package/dist/bitcoin/providers/types.d.ts +63 -0
  29. package/dist/bitcoin/providers/types.js +1 -0
  30. package/dist/bitcoin/transactions/commit.d.ts +89 -0
  31. package/dist/bitcoin/transactions/commit.js +311 -0
  32. package/dist/bitcoin/transactions/index.d.ts +7 -0
  33. package/dist/bitcoin/transactions/index.js +8 -0
  34. package/dist/bitcoin/transfer.d.ts +9 -0
  35. package/dist/bitcoin/transfer.js +26 -0
  36. package/dist/bitcoin/utxo-selection.d.ts +78 -0
  37. package/dist/bitcoin/utxo-selection.js +237 -0
  38. package/dist/bitcoin/utxo.d.ts +26 -0
  39. package/dist/bitcoin/utxo.js +78 -0
  40. package/dist/contexts/credentials-v1.json +195 -0
  41. package/dist/contexts/credentials-v2-examples.json +5 -0
  42. package/dist/contexts/credentials-v2.json +301 -0
  43. package/dist/contexts/credentials.json +195 -0
  44. package/dist/contexts/data-integrity-v2.json +81 -0
  45. package/dist/contexts/dids.json +57 -0
  46. package/dist/contexts/ed255192020.json +93 -0
  47. package/dist/contexts/ordinals-plus.json +23 -0
  48. package/dist/contexts/originals.json +22 -0
  49. package/dist/core/OriginalsSDK.d.ts +158 -0
  50. package/dist/core/OriginalsSDK.js +274 -0
  51. package/dist/crypto/Multikey.d.ts +30 -0
  52. package/dist/crypto/Multikey.js +149 -0
  53. package/dist/crypto/Signer.d.ts +21 -0
  54. package/dist/crypto/Signer.js +196 -0
  55. package/dist/crypto/noble-init.d.ts +18 -0
  56. package/dist/crypto/noble-init.js +106 -0
  57. package/dist/did/BtcoDidResolver.d.ts +57 -0
  58. package/dist/did/BtcoDidResolver.js +166 -0
  59. package/dist/did/DIDManager.d.ts +101 -0
  60. package/dist/did/DIDManager.js +493 -0
  61. package/dist/did/Ed25519Verifier.d.ts +30 -0
  62. package/dist/did/Ed25519Verifier.js +59 -0
  63. package/dist/did/KeyManager.d.ts +17 -0
  64. package/dist/did/KeyManager.js +207 -0
  65. package/dist/did/WebVHManager.d.ts +100 -0
  66. package/dist/did/WebVHManager.js +304 -0
  67. package/dist/did/createBtcoDidDocument.d.ts +10 -0
  68. package/dist/did/createBtcoDidDocument.js +42 -0
  69. package/dist/did/providers/OrdinalsClientProviderAdapter.d.ts +23 -0
  70. package/dist/did/providers/OrdinalsClientProviderAdapter.js +51 -0
  71. package/dist/events/EventEmitter.d.ts +115 -0
  72. package/dist/events/EventEmitter.js +198 -0
  73. package/dist/events/index.d.ts +7 -0
  74. package/dist/events/index.js +6 -0
  75. package/dist/events/types.d.ts +286 -0
  76. package/dist/events/types.js +9 -0
  77. package/dist/examples/basic-usage.d.ts +3 -0
  78. package/dist/examples/basic-usage.js +62 -0
  79. package/dist/examples/run.d.ts +1 -0
  80. package/dist/examples/run.js +4 -0
  81. package/dist/index.d.ts +39 -0
  82. package/dist/index.js +47 -0
  83. package/dist/lifecycle/BatchOperations.d.ts +147 -0
  84. package/dist/lifecycle/BatchOperations.js +251 -0
  85. package/dist/lifecycle/LifecycleManager.d.ts +116 -0
  86. package/dist/lifecycle/LifecycleManager.js +971 -0
  87. package/dist/lifecycle/OriginalsAsset.d.ts +164 -0
  88. package/dist/lifecycle/OriginalsAsset.js +380 -0
  89. package/dist/lifecycle/ProvenanceQuery.d.ts +126 -0
  90. package/dist/lifecycle/ProvenanceQuery.js +220 -0
  91. package/dist/lifecycle/ResourceVersioning.d.ts +73 -0
  92. package/dist/lifecycle/ResourceVersioning.js +127 -0
  93. package/dist/migration/MigrationManager.d.ts +86 -0
  94. package/dist/migration/MigrationManager.js +412 -0
  95. package/dist/migration/audit/AuditLogger.d.ts +51 -0
  96. package/dist/migration/audit/AuditLogger.js +156 -0
  97. package/dist/migration/checkpoint/CheckpointManager.d.ts +31 -0
  98. package/dist/migration/checkpoint/CheckpointManager.js +96 -0
  99. package/dist/migration/checkpoint/CheckpointStorage.d.ts +26 -0
  100. package/dist/migration/checkpoint/CheckpointStorage.js +89 -0
  101. package/dist/migration/index.d.ts +22 -0
  102. package/dist/migration/index.js +27 -0
  103. package/dist/migration/operations/BaseMigration.d.ts +48 -0
  104. package/dist/migration/operations/BaseMigration.js +83 -0
  105. package/dist/migration/operations/PeerToBtcoMigration.d.ts +25 -0
  106. package/dist/migration/operations/PeerToBtcoMigration.js +67 -0
  107. package/dist/migration/operations/PeerToWebvhMigration.d.ts +19 -0
  108. package/dist/migration/operations/PeerToWebvhMigration.js +46 -0
  109. package/dist/migration/operations/WebvhToBtcoMigration.d.ts +25 -0
  110. package/dist/migration/operations/WebvhToBtcoMigration.js +67 -0
  111. package/dist/migration/rollback/RollbackManager.d.ts +29 -0
  112. package/dist/migration/rollback/RollbackManager.js +146 -0
  113. package/dist/migration/state/StateMachine.d.ts +25 -0
  114. package/dist/migration/state/StateMachine.js +76 -0
  115. package/dist/migration/state/StateTracker.d.ts +36 -0
  116. package/dist/migration/state/StateTracker.js +123 -0
  117. package/dist/migration/types.d.ts +306 -0
  118. package/dist/migration/types.js +33 -0
  119. package/dist/migration/validation/BitcoinValidator.d.ts +13 -0
  120. package/dist/migration/validation/BitcoinValidator.js +83 -0
  121. package/dist/migration/validation/CredentialValidator.d.ts +13 -0
  122. package/dist/migration/validation/CredentialValidator.js +46 -0
  123. package/dist/migration/validation/DIDCompatibilityValidator.d.ts +16 -0
  124. package/dist/migration/validation/DIDCompatibilityValidator.js +127 -0
  125. package/dist/migration/validation/LifecycleValidator.d.ts +10 -0
  126. package/dist/migration/validation/LifecycleValidator.js +52 -0
  127. package/dist/migration/validation/StorageValidator.d.ts +10 -0
  128. package/dist/migration/validation/StorageValidator.js +65 -0
  129. package/dist/migration/validation/ValidationPipeline.d.ts +29 -0
  130. package/dist/migration/validation/ValidationPipeline.js +180 -0
  131. package/dist/storage/LocalStorageAdapter.d.ts +11 -0
  132. package/dist/storage/LocalStorageAdapter.js +53 -0
  133. package/dist/storage/MemoryStorageAdapter.d.ts +6 -0
  134. package/dist/storage/MemoryStorageAdapter.js +21 -0
  135. package/dist/storage/StorageAdapter.d.ts +16 -0
  136. package/dist/storage/StorageAdapter.js +1 -0
  137. package/dist/storage/index.d.ts +2 -0
  138. package/dist/storage/index.js +2 -0
  139. package/dist/types/bitcoin.d.ts +84 -0
  140. package/dist/types/bitcoin.js +1 -0
  141. package/dist/types/common.d.ts +82 -0
  142. package/dist/types/common.js +1 -0
  143. package/dist/types/credentials.d.ts +75 -0
  144. package/dist/types/credentials.js +1 -0
  145. package/dist/types/did.d.ts +26 -0
  146. package/dist/types/did.js +1 -0
  147. package/dist/types/index.d.ts +5 -0
  148. package/dist/types/index.js +5 -0
  149. package/dist/types/network.d.ts +78 -0
  150. package/dist/types/network.js +145 -0
  151. package/dist/utils/EventLogger.d.ts +71 -0
  152. package/dist/utils/EventLogger.js +232 -0
  153. package/dist/utils/Logger.d.ts +106 -0
  154. package/dist/utils/Logger.js +257 -0
  155. package/dist/utils/MetricsCollector.d.ts +110 -0
  156. package/dist/utils/MetricsCollector.js +264 -0
  157. package/dist/utils/bitcoin-address.d.ts +38 -0
  158. package/dist/utils/bitcoin-address.js +113 -0
  159. package/dist/utils/cbor.d.ts +2 -0
  160. package/dist/utils/cbor.js +9 -0
  161. package/dist/utils/encoding.d.ts +37 -0
  162. package/dist/utils/encoding.js +120 -0
  163. package/dist/utils/hash.d.ts +1 -0
  164. package/dist/utils/hash.js +5 -0
  165. package/dist/utils/retry.d.ts +10 -0
  166. package/dist/utils/retry.js +35 -0
  167. package/dist/utils/satoshi-validation.d.ts +60 -0
  168. package/dist/utils/satoshi-validation.js +156 -0
  169. package/dist/utils/serialization.d.ts +14 -0
  170. package/dist/utils/serialization.js +76 -0
  171. package/dist/utils/telemetry.d.ts +17 -0
  172. package/dist/utils/telemetry.js +24 -0
  173. package/dist/utils/validation.d.ts +5 -0
  174. package/dist/utils/validation.js +98 -0
  175. package/dist/vc/CredentialManager.d.ts +22 -0
  176. package/dist/vc/CredentialManager.js +227 -0
  177. package/dist/vc/Issuer.d.ts +27 -0
  178. package/dist/vc/Issuer.js +70 -0
  179. package/dist/vc/Verifier.d.ts +16 -0
  180. package/dist/vc/Verifier.js +50 -0
  181. package/dist/vc/cryptosuites/bbs.d.ts +44 -0
  182. package/dist/vc/cryptosuites/bbs.js +213 -0
  183. package/dist/vc/cryptosuites/bbsSimple.d.ts +9 -0
  184. package/dist/vc/cryptosuites/bbsSimple.js +12 -0
  185. package/dist/vc/cryptosuites/eddsa.d.ts +30 -0
  186. package/dist/vc/cryptosuites/eddsa.js +81 -0
  187. package/dist/vc/documentLoader.d.ts +16 -0
  188. package/dist/vc/documentLoader.js +59 -0
  189. package/dist/vc/proofs/data-integrity.d.ts +21 -0
  190. package/dist/vc/proofs/data-integrity.js +15 -0
  191. package/dist/vc/utils/jsonld.d.ts +2 -0
  192. package/dist/vc/utils/jsonld.js +15 -0
  193. package/package.json +79 -0
  194. package/src/adapters/FeeOracleMock.ts +9 -0
  195. package/src/adapters/index.ts +5 -0
  196. package/src/adapters/providers/OrdHttpProvider.ts +126 -0
  197. package/src/adapters/providers/OrdMockProvider.ts +101 -0
  198. package/src/adapters/types.ts +66 -0
  199. package/src/bitcoin/BitcoinManager.ts +330 -0
  200. package/src/bitcoin/BroadcastClient.ts +54 -0
  201. package/src/bitcoin/OrdinalsClient.ts +119 -0
  202. package/src/bitcoin/PSBTBuilder.ts +106 -0
  203. package/src/bitcoin/fee-calculation.ts +38 -0
  204. package/src/bitcoin/providers/OrdNodeProvider.ts +92 -0
  205. package/src/bitcoin/providers/OrdinalsProvider.ts +56 -0
  206. package/src/bitcoin/providers/types.ts +59 -0
  207. package/src/bitcoin/transactions/commit.ts +465 -0
  208. package/src/bitcoin/transactions/index.ts +13 -0
  209. package/src/bitcoin/transfer.ts +43 -0
  210. package/src/bitcoin/utxo-selection.ts +322 -0
  211. package/src/bitcoin/utxo.ts +113 -0
  212. package/src/contexts/credentials-v1.json +237 -0
  213. package/src/contexts/credentials-v2-examples.json +5 -0
  214. package/src/contexts/credentials-v2.json +340 -0
  215. package/src/contexts/credentials.json +237 -0
  216. package/src/contexts/data-integrity-v2.json +81 -0
  217. package/src/contexts/dids.json +58 -0
  218. package/src/contexts/ed255192020.json +93 -0
  219. package/src/contexts/ordinals-plus.json +23 -0
  220. package/src/contexts/originals.json +22 -0
  221. package/src/core/OriginalsSDK.ts +416 -0
  222. package/src/crypto/Multikey.ts +194 -0
  223. package/src/crypto/Signer.ts +254 -0
  224. package/src/crypto/noble-init.ts +121 -0
  225. package/src/did/BtcoDidResolver.ts +227 -0
  226. package/src/did/DIDManager.ts +694 -0
  227. package/src/did/Ed25519Verifier.ts +68 -0
  228. package/src/did/KeyManager.ts +236 -0
  229. package/src/did/WebVHManager.ts +489 -0
  230. package/src/did/createBtcoDidDocument.ts +59 -0
  231. package/src/did/providers/OrdinalsClientProviderAdapter.ts +68 -0
  232. package/src/events/EventEmitter.ts +222 -0
  233. package/src/events/index.ts +19 -0
  234. package/src/events/types.ts +331 -0
  235. package/src/examples/basic-usage.ts +78 -0
  236. package/src/examples/run.ts +5 -0
  237. package/src/index.ts +84 -0
  238. package/src/lifecycle/BatchOperations.ts +373 -0
  239. package/src/lifecycle/LifecycleManager.ts +1218 -0
  240. package/src/lifecycle/OriginalsAsset.ts +524 -0
  241. package/src/lifecycle/ProvenanceQuery.ts +280 -0
  242. package/src/lifecycle/ResourceVersioning.ts +163 -0
  243. package/src/migration/MigrationManager.ts +527 -0
  244. package/src/migration/audit/AuditLogger.ts +176 -0
  245. package/src/migration/checkpoint/CheckpointManager.ts +112 -0
  246. package/src/migration/checkpoint/CheckpointStorage.ts +101 -0
  247. package/src/migration/index.ts +33 -0
  248. package/src/migration/operations/BaseMigration.ts +126 -0
  249. package/src/migration/operations/PeerToBtcoMigration.ts +105 -0
  250. package/src/migration/operations/PeerToWebvhMigration.ts +62 -0
  251. package/src/migration/operations/WebvhToBtcoMigration.ts +105 -0
  252. package/src/migration/rollback/RollbackManager.ts +170 -0
  253. package/src/migration/state/StateMachine.ts +92 -0
  254. package/src/migration/state/StateTracker.ts +156 -0
  255. package/src/migration/types.ts +344 -0
  256. package/src/migration/validation/BitcoinValidator.ts +107 -0
  257. package/src/migration/validation/CredentialValidator.ts +62 -0
  258. package/src/migration/validation/DIDCompatibilityValidator.ts +151 -0
  259. package/src/migration/validation/LifecycleValidator.ts +64 -0
  260. package/src/migration/validation/StorageValidator.ts +79 -0
  261. package/src/migration/validation/ValidationPipeline.ts +213 -0
  262. package/src/storage/LocalStorageAdapter.ts +61 -0
  263. package/src/storage/MemoryStorageAdapter.ts +29 -0
  264. package/src/storage/StorageAdapter.ts +25 -0
  265. package/src/storage/index.ts +3 -0
  266. package/src/types/bitcoin.ts +98 -0
  267. package/src/types/common.ts +92 -0
  268. package/src/types/credentials.ts +88 -0
  269. package/src/types/did.ts +31 -0
  270. package/src/types/external-shims.d.ts +53 -0
  271. package/src/types/index.ts +7 -0
  272. package/src/types/network.ts +175 -0
  273. package/src/utils/EventLogger.ts +298 -0
  274. package/src/utils/Logger.ts +322 -0
  275. package/src/utils/MetricsCollector.ts +358 -0
  276. package/src/utils/bitcoin-address.ts +130 -0
  277. package/src/utils/cbor.ts +12 -0
  278. package/src/utils/encoding.ts +127 -0
  279. package/src/utils/hash.ts +6 -0
  280. package/src/utils/retry.ts +46 -0
  281. package/src/utils/satoshi-validation.ts +196 -0
  282. package/src/utils/serialization.ts +96 -0
  283. package/src/utils/telemetry.ts +40 -0
  284. package/src/utils/validation.ts +119 -0
  285. package/src/vc/CredentialManager.ts +273 -0
  286. package/src/vc/Issuer.ts +100 -0
  287. package/src/vc/Verifier.ts +47 -0
  288. package/src/vc/cryptosuites/bbs.ts +253 -0
  289. package/src/vc/cryptosuites/bbsSimple.ts +21 -0
  290. package/src/vc/cryptosuites/eddsa.ts +99 -0
  291. package/src/vc/documentLoader.ts +67 -0
  292. package/src/vc/proofs/data-integrity.ts +33 -0
  293. package/src/vc/utils/jsonld.ts +18 -0
  294. package/test/logs/did_webvh_QmQsRNhXxPSCSeLjpbKYcNMZj8b1kBQAoC6cZmkFAgmpHt_example_com.jsonl +1 -0
  295. package/test/logs/did_webvh_QmSQkpD58qxcqMWHYcEmDUn3wk7hHvJwzYTrZmhh6zjPQ8_example_com_users_alice123_profile.jsonl +1 -0
  296. package/test/logs/did_webvh_QmTMda6VW3cUPdKk5Yc3onnv1vdgEumvWWdP2noAYFSjeG_example_com.jsonl +1 -0
  297. package/test/logs/did_webvh_QmTkb8KnCYcsnKKDCY4eUQuKQdKJLrCinvhw13v3zETxpE_example_com_users_etc_passwd.jsonl +1 -0
  298. package/test/logs/did_webvh_QmTn9FdCfpXFDrxHH52pwB4iNrDFVvNDjJ5FQTcDbmM3Fg_example_com.jsonl +1 -0
  299. package/test/logs/did_webvh_QmUCQUi1xjtJjnSQ1XJZgKqcWgErx1v7E2dz4DAPraAyJP_example_com_etc_passwd.jsonl +1 -0
  300. package/test/logs/did_webvh_QmUENQJCDKBJVRS5BkL6zjaUvcRjkb9xHmy7foCgRjmv3W_example_com.jsonl +1 -0
  301. package/test/logs/did_webvh_QmUPdGyjYBEnQ3aQUkmqyyBKTyjvCP5RZQGiaEDeTtf6dc_example_com.jsonl +1 -0
  302. package/test/logs/did_webvh_QmUoHTuHMWzQM29ZFrE9VLtMxkZ5u869yqee8LwcCLN39M_example_com.jsonl +1 -0
  303. package/test/logs/did_webvh_QmUrnms8G65ggVKsr9oQeWrLUBuGChwQPPb2LCFvaoNxaw_example_com_users_alice.jsonl +1 -0
  304. package/test/logs/did_webvh_QmUwiw3eSXdHG1hPvoAGu3cuK5jF4aXRYDLBAjPXfv1qzb_example_com_level1_level2.jsonl +1 -0
  305. package/test/logs/did_webvh_QmW7bzKh6yFEKNAtmVsrPGvvsMHTUQdzJSNsTZkbuGFpbj_example_com_secret.jsonl +1 -0
  306. package/test/logs/did_webvh_QmXbFTFBBJ8zpjdz9WE1DNN44A2wprFmdvAubjSffeyoAG_example_com.jsonl +1 -0
  307. package/test/logs/did_webvh_QmXyVXFPCTffGb2mTUFDeMCsScjnpLWkyUkVkB6q6QoeBf_example_com_C_Windows_System32.jsonl +1 -0
  308. package/test/logs/did_webvh_QmZK9B81gxZtvo5fYHYKDtKt8zZfZZPhmCMhbujBJuRRzE_example_com_etc_passwd.jsonl +1 -0
  309. package/test/logs/did_webvh_QmbNLCVSdXSVLrwFBvCBQPAabjtRb1SGHjkGVyw3QUbfBL_example_com_users_etc_passwd.jsonl +1 -0
  310. package/test/logs/did_webvh_QmbeaicmGW3Q7Yzbqmftc8a9jLBngokveb5A2KVKfVGZRb_example_com_my_org_user_name_test_123.jsonl +1 -0
  311. package/test/logs/did_webvh_Qmdv7c7AjUreUfoKyvkN2UpAWTozxKsv99srQetPJMJEnp_example_com_users_etc_passwd.jsonl +1 -0
  312. package/test/logs/did_webvh_QmeioWY3uypYLkYpCXe9eCYnn4xBVruP9C1d79azMrTEHG_example_com.jsonl +1 -0
  313. package/test/logs/did_webvh_Qmf4QH5dsA6Ecr5HJ6KaJL9uJRyY8RxrQdqoRCM25DzvPi_example_com_users_alice.jsonl +1 -0
  314. package/tests/__mocks__/bbs-signatures.js +17 -0
  315. package/tests/__mocks__/mf-base58.js +24 -0
  316. package/tests/e2e/README.md +97 -0
  317. package/tests/e2e/example.spec.ts +78 -0
  318. package/tests/fixtures/did-documents.ts +247 -0
  319. package/tests/index.test.ts +21 -0
  320. package/tests/integration/BatchOperations.test.ts +531 -0
  321. package/tests/integration/CompleteLifecycle.e2e.test.ts +735 -0
  322. package/tests/integration/CredentialManager.test.ts +42 -0
  323. package/tests/integration/DIDManager.test.ts +41 -0
  324. package/tests/integration/DidPeerToWebVhFlow.test.ts +351 -0
  325. package/tests/integration/Events.test.ts +435 -0
  326. package/tests/integration/Lifecycle.transfer.btco.integration.test.ts +25 -0
  327. package/tests/integration/LifecycleManager.test.ts +21 -0
  328. package/tests/integration/MultikeyFlow.test.ts +52 -0
  329. package/tests/integration/TelemetryIntegration.test.ts +395 -0
  330. package/tests/integration/WebVhPublish.test.ts +48 -0
  331. package/tests/integration/migration/peer-to-webvh.test.ts +172 -0
  332. package/tests/manual/test-commit-creation.ts +323 -0
  333. package/tests/mocks/MockKeyStore.ts +38 -0
  334. package/tests/mocks/adapters/MemoryStorageAdapter.ts +24 -0
  335. package/tests/mocks/adapters/MockFeeOracle.ts +11 -0
  336. package/tests/mocks/adapters/MockOrdinalsProvider.ts +76 -0
  337. package/tests/mocks/adapters/OrdMockProvider.test.ts +176 -0
  338. package/tests/mocks/adapters/index.ts +6 -0
  339. package/tests/performance/BatchOperations.perf.test.ts +403 -0
  340. package/tests/performance/logging.perf.test.ts +336 -0
  341. package/tests/sdk.test.ts +43 -0
  342. package/tests/security/bitcoin-penetration-tests.test.ts +622 -0
  343. package/tests/setup.bun.ts +69 -0
  344. package/tests/setup.jest.ts +23 -0
  345. package/tests/stress/batch-operations-stress.test.ts +571 -0
  346. package/tests/unit/adapters/FeeOracleMock.test.ts +40 -0
  347. package/tests/unit/bitcoin/BitcoinManager.test.ts +293 -0
  348. package/tests/unit/bitcoin/BroadcastClient.test.ts +52 -0
  349. package/tests/unit/bitcoin/OrdNodeProvider.test.ts +53 -0
  350. package/tests/unit/bitcoin/OrdinalsClient.test.ts +381 -0
  351. package/tests/unit/bitcoin/OrdinalsClientProvider.test.ts +102 -0
  352. package/tests/unit/bitcoin/PSBTBuilder.test.ts +84 -0
  353. package/tests/unit/bitcoin/fee-calculation.test.ts +261 -0
  354. package/tests/unit/bitcoin/transactions/commit.test.ts +649 -0
  355. package/tests/unit/bitcoin/transfer.test.ts +31 -0
  356. package/tests/unit/bitcoin/utxo-selection-new.test.ts +502 -0
  357. package/tests/unit/bitcoin/utxo.more.test.ts +39 -0
  358. package/tests/unit/bitcoin/utxo.selection.test.ts +38 -0
  359. package/tests/unit/core/OriginalsSDK.test.ts +152 -0
  360. package/tests/unit/crypto/Multikey.test.ts +206 -0
  361. package/tests/unit/crypto/Signer.test.ts +408 -0
  362. package/tests/unit/did/BtcoDidResolver.test.ts +611 -0
  363. package/tests/unit/did/DIDManager.more.test.ts +43 -0
  364. package/tests/unit/did/DIDManager.test.ts +185 -0
  365. package/tests/unit/did/Ed25519Verifier.test.ts +160 -0
  366. package/tests/unit/did/KeyManager.test.ts +452 -0
  367. package/tests/unit/did/OrdinalsClientProviderAdapter.test.ts +45 -0
  368. package/tests/unit/did/WebVHManager.test.ts +435 -0
  369. package/tests/unit/did/createBtcoDidDocument.test.ts +67 -0
  370. package/tests/unit/did/providers/OrdinalsClientProviderAdapter.test.ts +159 -0
  371. package/tests/unit/events/EventEmitter.test.ts +407 -0
  372. package/tests/unit/lifecycle/BatchOperations.test.ts +527 -0
  373. package/tests/unit/lifecycle/LifecycleManager.keymanagement.test.ts +312 -0
  374. package/tests/unit/lifecycle/LifecycleManager.prov.test.ts +18 -0
  375. package/tests/unit/lifecycle/LifecycleManager.test.ts +213 -0
  376. package/tests/unit/lifecycle/LifecycleManager.transfer.unit.test.ts +30 -0
  377. package/tests/unit/lifecycle/OriginalsAsset.test.ts +176 -0
  378. package/tests/unit/lifecycle/ProvenanceQuery.test.ts +577 -0
  379. package/tests/unit/lifecycle/ResourceVersioning.test.ts +651 -0
  380. package/tests/unit/storage/MemoryStorageAdapter.test.ts +93 -0
  381. package/tests/unit/types/network.test.ts +255 -0
  382. package/tests/unit/utils/EventIntegration.test.ts +384 -0
  383. package/tests/unit/utils/Logger.test.ts +473 -0
  384. package/tests/unit/utils/MetricsCollector.test.ts +358 -0
  385. package/tests/unit/utils/bitcoin-address.test.ts +250 -0
  386. package/tests/unit/utils/cbor.test.ts +35 -0
  387. package/tests/unit/utils/encoding.test.ts +318 -0
  388. package/tests/unit/utils/hash.test.ts +12 -0
  389. package/tests/unit/utils/retry.test.ts +100 -0
  390. package/tests/unit/utils/satoshi-validation.test.ts +354 -0
  391. package/tests/unit/utils/serialization.test.ts +124 -0
  392. package/tests/unit/utils/telemetry.test.ts +52 -0
  393. package/tests/unit/utils/validation.test.ts +141 -0
  394. package/tests/unit/vc/CredentialManager.test.ts +487 -0
  395. package/tests/unit/vc/Issuer.test.ts +107 -0
  396. package/tests/unit/vc/Verifier.test.ts +525 -0
  397. package/tests/unit/vc/bbs.test.ts +282 -0
  398. package/tests/unit/vc/cryptosuites/eddsa.test.ts +398 -0
  399. package/tests/unit/vc/documentLoader.test.ts +121 -0
  400. package/tests/unit/vc/proofs/data-integrity.test.ts +24 -0
  401. package/tsconfig.json +32 -0
  402. package/tsconfig.test.json +15 -0
  403. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Migration system types and interfaces
3
+ * Defines all types used across the migration infrastructure
4
+ */
5
+ import { DIDDocument, VerifiableCredential } from '../types';
6
+ /**
7
+ * DID layer types
8
+ */
9
+ export type DIDLayer = 'peer' | 'webvh' | 'btco';
10
+ /**
11
+ * Migration state enum
12
+ */
13
+ export declare enum MigrationStateEnum {
14
+ PENDING = "pending",// Migration queued
15
+ VALIDATING = "validating",// Running validation pipeline
16
+ CHECKPOINTED = "checkpointed",// Checkpoint created
17
+ IN_PROGRESS = "in_progress",// Active migration
18
+ ANCHORING = "anchoring",// Bitcoin anchoring (btco only)
19
+ COMPLETED = "completed",// Successfully completed
20
+ FAILED = "failed",// Failed, rollback initiated
21
+ ROLLED_BACK = "rolled_back",// Rolled back successfully
22
+ QUARANTINED = "quarantined"
23
+ }
24
+ /**
25
+ * Migration error types
26
+ */
27
+ export declare enum MigrationErrorType {
28
+ VALIDATION_ERROR = "validation_error",// Pre-migration validation failed
29
+ STORAGE_ERROR = "storage_error",// Storage adapter failure
30
+ BITCOIN_ERROR = "bitcoin_error",// Bitcoin anchoring failed
31
+ CREDENTIAL_ERROR = "credential_error",// Credential re-issuance failed
32
+ NETWORK_ERROR = "network_error",// Network/connectivity failure
33
+ ROLLBACK_ERROR = "rollback_error",// Rollback failed (critical)
34
+ TIMEOUT_ERROR = "timeout_error",// Operation timeout
35
+ UNKNOWN_ERROR = "unknown_error"
36
+ }
37
+ /**
38
+ * Migration options for initiating a migration
39
+ */
40
+ export interface MigrationOptions {
41
+ sourceDid: string;
42
+ targetLayer: DIDLayer;
43
+ credentialIssuance?: boolean;
44
+ batchMode?: boolean;
45
+ partialMode?: {
46
+ chunkSize: number;
47
+ resumable: boolean;
48
+ };
49
+ estimateCostOnly?: boolean;
50
+ metadata?: Record<string, any>;
51
+ domain?: string;
52
+ satoshi?: string;
53
+ feeRate?: number;
54
+ }
55
+ /**
56
+ * Batch migration options
57
+ */
58
+ export interface BatchMigrationOptions extends MigrationOptions {
59
+ maxConcurrent?: number;
60
+ continueOnError?: boolean;
61
+ }
62
+ /**
63
+ * Cost estimate for a migration
64
+ */
65
+ export interface CostEstimate {
66
+ storageCost: number;
67
+ networkFees: number;
68
+ totalCost: number;
69
+ currency: string;
70
+ }
71
+ /**
72
+ * Validation error
73
+ */
74
+ export interface ValidationError {
75
+ code: string;
76
+ message: string;
77
+ field?: string;
78
+ details?: any;
79
+ }
80
+ /**
81
+ * Validation warning
82
+ */
83
+ export interface ValidationWarning {
84
+ code: string;
85
+ message: string;
86
+ field?: string;
87
+ }
88
+ /**
89
+ * Migration validation result
90
+ */
91
+ export interface MigrationValidationResult {
92
+ valid: boolean;
93
+ errors: ValidationError[];
94
+ warnings: ValidationWarning[];
95
+ estimatedCost: CostEstimate;
96
+ estimatedDuration: number;
97
+ }
98
+ /**
99
+ * Migration checkpoint data
100
+ */
101
+ export interface MigrationCheckpoint {
102
+ checkpointId?: string;
103
+ migrationId: string;
104
+ timestamp: number;
105
+ sourceDid: string;
106
+ sourceLayer: DIDLayer;
107
+ didDocument: DIDDocument;
108
+ credentials: VerifiableCredential[];
109
+ storageReferences: Record<string, any>;
110
+ lifecycleState: any;
111
+ ownershipProofs: any[];
112
+ metadata: Record<string, any>;
113
+ }
114
+ /**
115
+ * Rollback result
116
+ */
117
+ export interface RollbackResult {
118
+ success: boolean;
119
+ migrationId: string;
120
+ checkpointId?: string;
121
+ restoredState: MigrationStateEnum;
122
+ duration: number;
123
+ errors?: MigrationError[];
124
+ }
125
+ /**
126
+ * Migration state tracking
127
+ */
128
+ export interface MigrationState {
129
+ migrationId: string;
130
+ state: MigrationStateEnum;
131
+ sourceDid: string;
132
+ sourceLayer: DIDLayer;
133
+ targetDid?: string;
134
+ targetLayer: DIDLayer;
135
+ progress: number;
136
+ currentOperation: string;
137
+ startTime: number;
138
+ endTime?: number;
139
+ error?: MigrationError;
140
+ checkpointId?: string;
141
+ }
142
+ /**
143
+ * Migration error details
144
+ */
145
+ export interface MigrationError {
146
+ type: MigrationErrorType;
147
+ code: string;
148
+ message: string;
149
+ technicalDetails?: string;
150
+ suggestedRecovery?: string;
151
+ migrationId?: string;
152
+ sourceDid?: string;
153
+ targetDid?: string;
154
+ timestamp: number;
155
+ stack?: string;
156
+ }
157
+ /**
158
+ * Migration audit record
159
+ */
160
+ export interface MigrationAuditRecord {
161
+ migrationId: string;
162
+ timestamp: number;
163
+ initiator: string;
164
+ sourceDid: string;
165
+ sourceLayer: DIDLayer;
166
+ targetDid: string | null;
167
+ targetLayer: DIDLayer;
168
+ finalState: MigrationStateEnum;
169
+ validationResults: MigrationValidationResult;
170
+ costActual: CostEstimate;
171
+ duration: number;
172
+ checkpointId?: string;
173
+ errors: MigrationError[];
174
+ metadata: Record<string, any>;
175
+ signature?: string;
176
+ }
177
+ /**
178
+ * Migration result
179
+ */
180
+ export interface MigrationResult {
181
+ migrationId: string;
182
+ success: boolean;
183
+ sourceDid: string;
184
+ targetDid?: string;
185
+ sourceLayer: DIDLayer;
186
+ targetLayer: DIDLayer;
187
+ state: MigrationStateEnum;
188
+ duration: number;
189
+ cost: CostEstimate;
190
+ auditRecord?: MigrationAuditRecord;
191
+ error?: MigrationError;
192
+ }
193
+ /**
194
+ * Batch migration result
195
+ */
196
+ export interface BatchMigrationResult {
197
+ batchId: string;
198
+ total: number;
199
+ completed: number;
200
+ failed: number;
201
+ inProgress: number;
202
+ results: Map<string, MigrationResult>;
203
+ overallProgress: number;
204
+ startTime: number;
205
+ endTime?: number;
206
+ errors: MigrationError[];
207
+ }
208
+ /**
209
+ * Partial migration progress
210
+ */
211
+ export interface PartialMigrationProgress {
212
+ totalChunks: number;
213
+ completedChunks: number;
214
+ currentChunk: number;
215
+ bytesTransferred: number;
216
+ totalBytes: number;
217
+ percentComplete: number;
218
+ estimatedTimeRemaining: number;
219
+ }
220
+ /**
221
+ * Migration event types
222
+ */
223
+ export type MigrationEventType = 'migration:started' | 'migration:validated' | 'migration:checkpointed' | 'migration:in_progress' | 'migration:anchoring' | 'migration:completed' | 'migration:failed' | 'migration:rolledback' | 'migration:quarantine' | 'batch:progress';
224
+ /**
225
+ * Migration event payload
226
+ */
227
+ export interface MigrationEvent {
228
+ type: MigrationEventType;
229
+ migrationId: string;
230
+ timestamp: number;
231
+ state: MigrationStateEnum;
232
+ data?: any;
233
+ }
234
+ /**
235
+ * Storage migration context
236
+ */
237
+ export interface StorageMigrationContext {
238
+ sourceDid: string;
239
+ targetDid: string;
240
+ sourceLayer: DIDLayer;
241
+ targetLayer: DIDLayer;
242
+ resources: Array<{
243
+ id: string;
244
+ hash: string;
245
+ contentType: string;
246
+ size: number;
247
+ url?: string;
248
+ }>;
249
+ }
250
+ /**
251
+ * Bitcoin anchoring context
252
+ */
253
+ export interface BitcoinAnchoringContext {
254
+ didDocument: DIDDocument;
255
+ migrationMetadata: Record<string, any>;
256
+ network: 'mainnet' | 'testnet' | 'signet';
257
+ feeRate?: number;
258
+ satoshi?: string;
259
+ }
260
+ /**
261
+ * Lifecycle migration context
262
+ */
263
+ export interface LifecycleMigrationContext {
264
+ sourceDid: string;
265
+ targetDid: string;
266
+ currentState: any;
267
+ eventHistory: any[];
268
+ migrationId: string;
269
+ }
270
+ /**
271
+ * Validator interface
272
+ */
273
+ export interface IValidator {
274
+ validate(options: MigrationOptions): Promise<MigrationValidationResult>;
275
+ }
276
+ /**
277
+ * Checkpoint manager interface
278
+ */
279
+ export interface ICheckpointManager {
280
+ createCheckpoint(migrationId: string, options: MigrationOptions): Promise<MigrationCheckpoint>;
281
+ getCheckpoint(checkpointId: string): Promise<MigrationCheckpoint | null>;
282
+ deleteCheckpoint(checkpointId: string): Promise<void>;
283
+ }
284
+ /**
285
+ * Rollback manager interface
286
+ */
287
+ export interface IRollbackManager {
288
+ rollback(migrationId: string, checkpointId: string): Promise<RollbackResult>;
289
+ }
290
+ /**
291
+ * State tracker interface
292
+ */
293
+ export interface IStateTracker {
294
+ createMigration(options: MigrationOptions): Promise<MigrationState>;
295
+ updateState(migrationId: string, updates: Partial<MigrationState>): Promise<void>;
296
+ getState(migrationId: string): Promise<MigrationState | null>;
297
+ queryStates(filters: Partial<MigrationState>): Promise<MigrationState[]>;
298
+ }
299
+ /**
300
+ * Audit logger interface
301
+ */
302
+ export interface IAuditLogger {
303
+ logMigration(record: MigrationAuditRecord): Promise<void>;
304
+ getMigrationHistory(did: string): Promise<MigrationAuditRecord[]>;
305
+ getSystemMigrationLogs(filters: any): Promise<MigrationAuditRecord[]>;
306
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Migration system types and interfaces
3
+ * Defines all types used across the migration infrastructure
4
+ */
5
+ /**
6
+ * Migration state enum
7
+ */
8
+ export var MigrationStateEnum;
9
+ (function (MigrationStateEnum) {
10
+ MigrationStateEnum["PENDING"] = "pending";
11
+ MigrationStateEnum["VALIDATING"] = "validating";
12
+ MigrationStateEnum["CHECKPOINTED"] = "checkpointed";
13
+ MigrationStateEnum["IN_PROGRESS"] = "in_progress";
14
+ MigrationStateEnum["ANCHORING"] = "anchoring";
15
+ MigrationStateEnum["COMPLETED"] = "completed";
16
+ MigrationStateEnum["FAILED"] = "failed";
17
+ MigrationStateEnum["ROLLED_BACK"] = "rolled_back";
18
+ MigrationStateEnum["QUARANTINED"] = "quarantined"; // Rollback failed, needs manual intervention
19
+ })(MigrationStateEnum || (MigrationStateEnum = {}));
20
+ /**
21
+ * Migration error types
22
+ */
23
+ export var MigrationErrorType;
24
+ (function (MigrationErrorType) {
25
+ MigrationErrorType["VALIDATION_ERROR"] = "validation_error";
26
+ MigrationErrorType["STORAGE_ERROR"] = "storage_error";
27
+ MigrationErrorType["BITCOIN_ERROR"] = "bitcoin_error";
28
+ MigrationErrorType["CREDENTIAL_ERROR"] = "credential_error";
29
+ MigrationErrorType["NETWORK_ERROR"] = "network_error";
30
+ MigrationErrorType["ROLLBACK_ERROR"] = "rollback_error";
31
+ MigrationErrorType["TIMEOUT_ERROR"] = "timeout_error";
32
+ MigrationErrorType["UNKNOWN_ERROR"] = "unknown_error"; // Unexpected error
33
+ })(MigrationErrorType || (MigrationErrorType = {}));
@@ -0,0 +1,13 @@
1
+ /**
2
+ * BitcoinValidator - Validates Bitcoin network requirements for btco migrations
3
+ */
4
+ import { MigrationOptions, MigrationValidationResult, IValidator } from '../types';
5
+ import { OriginalsConfig } from '../../types';
6
+ import { BitcoinManager } from '../../bitcoin/BitcoinManager';
7
+ export declare class BitcoinValidator implements IValidator {
8
+ private config;
9
+ private bitcoinManager;
10
+ constructor(config: OriginalsConfig, bitcoinManager: BitcoinManager);
11
+ validate(options: MigrationOptions): Promise<MigrationValidationResult>;
12
+ private createResult;
13
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * BitcoinValidator - Validates Bitcoin network requirements for btco migrations
3
+ */
4
+ export class BitcoinValidator {
5
+ constructor(config, bitcoinManager) {
6
+ this.config = config;
7
+ this.bitcoinManager = bitcoinManager;
8
+ }
9
+ async validate(options) {
10
+ const errors = [];
11
+ const warnings = [];
12
+ try {
13
+ // Only validate for btco migrations
14
+ if (options.targetLayer !== 'btco') {
15
+ return this.createResult(true, errors, warnings, 0, 0);
16
+ }
17
+ // Check if Bitcoin provider is configured
18
+ const ordinalsProvider = this.config.ordinalsProvider;
19
+ if (!ordinalsProvider) {
20
+ errors.push({
21
+ code: 'BITCOIN_PROVIDER_REQUIRED',
22
+ message: 'Ordinals provider is required for btco migrations',
23
+ details: { targetLayer: options.targetLayer }
24
+ });
25
+ return this.createResult(false, errors, warnings, 0, 0);
26
+ }
27
+ // Estimate Bitcoin network fees
28
+ let networkFees = 0;
29
+ let estimatedDuration = 600000; // 10 minutes default
30
+ try {
31
+ // Estimate fee for a typical inscription (assume 1KB data)
32
+ const estimatedSize = 1024; // bytes
33
+ const feeRate = options.feeRate || 10; // sats/vB
34
+ networkFees = estimatedSize * feeRate;
35
+ // Check if fee is within reasonable limits
36
+ if (feeRate > 1000) {
37
+ warnings.push({
38
+ code: 'HIGH_FEE_RATE',
39
+ message: `Fee rate of ${feeRate} sat/vB is unusually high`,
40
+ field: 'feeRate'
41
+ });
42
+ }
43
+ }
44
+ catch (error) {
45
+ warnings.push({
46
+ code: 'FEE_ESTIMATION_FAILED',
47
+ message: `Could not estimate Bitcoin network fees: ${error instanceof Error ? error.message : String(error)}`
48
+ });
49
+ networkFees = 10240; // Default fallback: ~1KB at 10 sat/vB
50
+ }
51
+ // Validate network (should be signet for testnet)
52
+ if (this.config.network !== 'mainnet' && this.config.network !== 'signet') {
53
+ warnings.push({
54
+ code: 'NETWORK_MISMATCH',
55
+ message: `Network '${this.config.network}' will use signet for Bitcoin anchoring`
56
+ });
57
+ }
58
+ return this.createResult(true, errors, warnings, networkFees, estimatedDuration);
59
+ }
60
+ catch (error) {
61
+ errors.push({
62
+ code: 'BITCOIN_VALIDATION_ERROR',
63
+ message: 'Error validating Bitcoin requirements',
64
+ details: { error: error instanceof Error ? error.message : String(error) }
65
+ });
66
+ return this.createResult(false, errors, warnings, 0, 0);
67
+ }
68
+ }
69
+ createResult(valid, errors, warnings, networkFees, duration) {
70
+ return {
71
+ valid,
72
+ errors,
73
+ warnings,
74
+ estimatedCost: {
75
+ storageCost: 0,
76
+ networkFees,
77
+ totalCost: networkFees,
78
+ currency: 'sats'
79
+ },
80
+ estimatedDuration: duration
81
+ };
82
+ }
83
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * CredentialValidator - Validates credential compatibility for migration
3
+ */
4
+ import { MigrationOptions, MigrationValidationResult, IValidator } from '../types';
5
+ import { OriginalsConfig } from '../../types';
6
+ import { CredentialManager } from '../../vc/CredentialManager';
7
+ export declare class CredentialValidator implements IValidator {
8
+ private config;
9
+ private credentialManager;
10
+ constructor(config: OriginalsConfig, credentialManager: CredentialManager);
11
+ validate(options: MigrationOptions): Promise<MigrationValidationResult>;
12
+ private createResult;
13
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * CredentialValidator - Validates credential compatibility for migration
3
+ */
4
+ export class CredentialValidator {
5
+ constructor(config, credentialManager) {
6
+ this.config = config;
7
+ this.credentialManager = credentialManager;
8
+ }
9
+ async validate(options) {
10
+ const errors = [];
11
+ const warnings = [];
12
+ try {
13
+ // Credential validation is optional if credentialIssuance is false
14
+ if (options.credentialIssuance === false) {
15
+ return this.createResult(true, errors, warnings);
16
+ }
17
+ // All credential types are compatible with all layers
18
+ // This validator primarily checks that credential issuance is possible
19
+ // For now, credentials are always compatible
20
+ // Future enhancements could include schema validation
21
+ return this.createResult(true, errors, warnings);
22
+ }
23
+ catch (error) {
24
+ errors.push({
25
+ code: 'CREDENTIAL_VALIDATION_ERROR',
26
+ message: 'Error validating credential compatibility',
27
+ details: { error: error instanceof Error ? error.message : String(error) }
28
+ });
29
+ return this.createResult(false, errors, warnings);
30
+ }
31
+ }
32
+ createResult(valid, errors, warnings) {
33
+ return {
34
+ valid,
35
+ errors,
36
+ warnings,
37
+ estimatedCost: {
38
+ storageCost: 0,
39
+ networkFees: 0,
40
+ totalCost: 0,
41
+ currency: 'sats'
42
+ },
43
+ estimatedDuration: 50 // Credential validation typically takes ~50ms
44
+ };
45
+ }
46
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * DIDCompatibilityValidator - Validates DID document compatibility between layers
3
+ */
4
+ import { MigrationOptions, MigrationValidationResult, IValidator } from '../types';
5
+ import { OriginalsConfig } from '../../types';
6
+ import { DIDManager } from '../../did/DIDManager';
7
+ export declare class DIDCompatibilityValidator implements IValidator {
8
+ private config;
9
+ private didManager;
10
+ constructor(config: OriginalsConfig, didManager: DIDManager);
11
+ validate(options: MigrationOptions): Promise<MigrationValidationResult>;
12
+ private extractLayer;
13
+ private validateMigrationPath;
14
+ private isVerificationMethodCompatible;
15
+ private createResult;
16
+ }
@@ -0,0 +1,127 @@
1
+ /**
2
+ * DIDCompatibilityValidator - Validates DID document compatibility between layers
3
+ */
4
+ export class DIDCompatibilityValidator {
5
+ constructor(config, didManager) {
6
+ this.config = config;
7
+ this.didManager = didManager;
8
+ }
9
+ async validate(options) {
10
+ const errors = [];
11
+ const warnings = [];
12
+ try {
13
+ // Resolve source DID
14
+ const sourceDid = await this.didManager.resolveDID(options.sourceDid);
15
+ if (!sourceDid) {
16
+ errors.push({
17
+ code: 'SOURCE_DID_NOT_FOUND',
18
+ message: `Could not resolve source DID: ${options.sourceDid}`,
19
+ field: 'sourceDid'
20
+ });
21
+ return this.createResult(false, errors, warnings);
22
+ }
23
+ // Extract source layer from DID
24
+ const sourceLayer = this.extractLayer(options.sourceDid);
25
+ if (!sourceLayer) {
26
+ errors.push({
27
+ code: 'INVALID_SOURCE_DID_FORMAT',
28
+ message: 'Source DID has unsupported format',
29
+ field: 'sourceDid',
30
+ details: { did: options.sourceDid }
31
+ });
32
+ return this.createResult(false, errors, warnings);
33
+ }
34
+ // Validate migration path
35
+ const pathErrors = this.validateMigrationPath(sourceLayer, options.targetLayer);
36
+ errors.push(...pathErrors);
37
+ if (errors.length > 0) {
38
+ return this.createResult(false, errors, warnings);
39
+ }
40
+ // Validate verification methods compatibility
41
+ if (sourceDid.verificationMethod && Array.isArray(sourceDid.verificationMethod)) {
42
+ for (const vm of sourceDid.verificationMethod) {
43
+ if (!this.isVerificationMethodCompatible(vm, options.targetLayer)) {
44
+ warnings.push({
45
+ code: 'VERIFICATION_METHOD_INCOMPATIBLE',
46
+ message: `Verification method ${vm.id} may not be compatible with ${options.targetLayer}`,
47
+ field: 'verificationMethod'
48
+ });
49
+ }
50
+ }
51
+ }
52
+ // Validate service endpoints
53
+ if (sourceDid.service && Array.isArray(sourceDid.service)) {
54
+ if (options.targetLayer === 'peer' && sourceDid.service.length > 0) {
55
+ warnings.push({
56
+ code: 'SERVICE_ENDPOINTS_ON_PEER',
57
+ message: 'Service endpoints on peer DIDs may have limited discoverability'
58
+ });
59
+ }
60
+ }
61
+ return this.createResult(true, errors, warnings);
62
+ }
63
+ catch (error) {
64
+ errors.push({
65
+ code: 'DID_VALIDATION_ERROR',
66
+ message: 'Error validating DID compatibility',
67
+ details: { error: error instanceof Error ? error.message : String(error) }
68
+ });
69
+ return this.createResult(false, errors, warnings);
70
+ }
71
+ }
72
+ extractLayer(did) {
73
+ if (did.startsWith('did:peer:'))
74
+ return 'peer';
75
+ if (did.startsWith('did:webvh:'))
76
+ return 'webvh';
77
+ if (did.startsWith('did:btco:'))
78
+ return 'btco';
79
+ return null;
80
+ }
81
+ validateMigrationPath(sourceLayer, targetLayer) {
82
+ const errors = [];
83
+ // Check for invalid reverse migrations
84
+ const layerOrder = { peer: 0, webvh: 1, btco: 2 };
85
+ const sourceOrder = layerOrder[sourceLayer];
86
+ const targetOrder = layerOrder[targetLayer];
87
+ if (sourceOrder === undefined || targetOrder === undefined) {
88
+ errors.push({
89
+ code: 'INVALID_LAYER',
90
+ message: 'Invalid source or target layer',
91
+ details: { sourceLayer, targetLayer }
92
+ });
93
+ return errors;
94
+ }
95
+ if (sourceOrder >= targetOrder) {
96
+ errors.push({
97
+ code: 'INVALID_MIGRATION_PATH',
98
+ message: `Cannot migrate from ${sourceLayer} to ${targetLayer}. Migrations must move forward through layers (peer → webvh → btco)`,
99
+ details: { sourceLayer, targetLayer }
100
+ });
101
+ }
102
+ return errors;
103
+ }
104
+ isVerificationMethodCompatible(vm, targetLayer) {
105
+ // All verification method types are compatible with all layers
106
+ // This is a placeholder for more sophisticated compatibility checks
107
+ if (!vm.type)
108
+ return false;
109
+ // Common types that are widely supported
110
+ const supportedTypes = ['Multikey', 'Ed25519VerificationKey2020', 'EcdsaSecp256k1VerificationKey2019'];
111
+ return supportedTypes.includes(vm.type);
112
+ }
113
+ createResult(valid, errors, warnings) {
114
+ return {
115
+ valid,
116
+ errors,
117
+ warnings,
118
+ estimatedCost: {
119
+ storageCost: 0,
120
+ networkFees: 0,
121
+ totalCost: 0,
122
+ currency: 'sats'
123
+ },
124
+ estimatedDuration: 100 // DID validation typically takes ~100ms
125
+ };
126
+ }
127
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * LifecycleValidator - Validates lifecycle state transitions
3
+ */
4
+ import { MigrationOptions, MigrationValidationResult, IValidator } from '../types';
5
+ import { OriginalsConfig } from '../../types';
6
+ export declare class LifecycleValidator implements IValidator {
7
+ private config;
8
+ constructor(config: OriginalsConfig);
9
+ validate(options: MigrationOptions): Promise<MigrationValidationResult>;
10
+ }