@originals/sdk 1.4.2 → 1.4.5

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 (424) hide show
  1. package/dist/adapters/FeeOracleMock.d.ts +6 -0
  2. package/dist/adapters/FeeOracleMock.js +8 -0
  3. package/{src/adapters/index.ts → dist/adapters/index.d.ts} +0 -1
  4. package/dist/adapters/index.js +4 -0
  5. package/dist/adapters/providers/OrdHttpProvider.d.ts +56 -0
  6. package/dist/adapters/providers/OrdHttpProvider.js +110 -0
  7. package/dist/adapters/providers/OrdMockProvider.d.ts +70 -0
  8. package/dist/adapters/providers/OrdMockProvider.js +75 -0
  9. package/dist/adapters/types.d.ts +71 -0
  10. package/dist/adapters/types.js +1 -0
  11. package/dist/bitcoin/BitcoinManager.d.ts +15 -0
  12. package/dist/bitcoin/BitcoinManager.js +262 -0
  13. package/dist/bitcoin/BroadcastClient.d.ts +30 -0
  14. package/dist/bitcoin/BroadcastClient.js +35 -0
  15. package/dist/bitcoin/OrdinalsClient.d.ts +21 -0
  16. package/dist/bitcoin/OrdinalsClient.js +105 -0
  17. package/dist/bitcoin/PSBTBuilder.d.ts +24 -0
  18. package/dist/bitcoin/PSBTBuilder.js +80 -0
  19. package/dist/bitcoin/fee-calculation.d.ts +14 -0
  20. package/{src/bitcoin/fee-calculation.ts → dist/bitcoin/fee-calculation.js} +5 -12
  21. package/dist/bitcoin/providers/OrdNodeProvider.d.ts +38 -0
  22. package/dist/bitcoin/providers/OrdNodeProvider.js +67 -0
  23. package/dist/bitcoin/providers/OrdinalsProvider.d.ts +33 -0
  24. package/dist/bitcoin/providers/OrdinalsProvider.js +50 -0
  25. package/dist/bitcoin/providers/types.d.ts +63 -0
  26. package/dist/bitcoin/providers/types.js +1 -0
  27. package/dist/bitcoin/transactions/commit.d.ts +89 -0
  28. package/dist/bitcoin/transactions/commit.js +311 -0
  29. package/dist/bitcoin/transactions/index.d.ts +7 -0
  30. package/{src/bitcoin/transactions/index.ts → dist/bitcoin/transactions/index.js} +1 -6
  31. package/dist/bitcoin/transfer.d.ts +9 -0
  32. package/dist/bitcoin/transfer.js +26 -0
  33. package/dist/bitcoin/utxo-selection.d.ts +78 -0
  34. package/dist/bitcoin/utxo-selection.js +237 -0
  35. package/dist/bitcoin/utxo.d.ts +26 -0
  36. package/dist/bitcoin/utxo.js +78 -0
  37. package/dist/contexts/credentials-v1.json +195 -0
  38. package/dist/contexts/credentials-v2-examples.json +5 -0
  39. package/dist/contexts/credentials-v2.json +301 -0
  40. package/dist/contexts/credentials.json +195 -0
  41. package/dist/contexts/data-integrity-v2.json +81 -0
  42. package/dist/contexts/dids.json +57 -0
  43. package/dist/contexts/ed255192020.json +93 -0
  44. package/dist/contexts/ordinals-plus.json +23 -0
  45. package/dist/contexts/originals.json +22 -0
  46. package/dist/core/OriginalsSDK.d.ts +158 -0
  47. package/dist/core/OriginalsSDK.js +274 -0
  48. package/dist/crypto/Multikey.d.ts +30 -0
  49. package/dist/crypto/Multikey.js +149 -0
  50. package/dist/crypto/Signer.d.ts +21 -0
  51. package/dist/crypto/Signer.js +196 -0
  52. package/dist/crypto/noble-init.d.ts +18 -0
  53. package/dist/crypto/noble-init.js +106 -0
  54. package/dist/did/BtcoDidResolver.d.ts +57 -0
  55. package/dist/did/BtcoDidResolver.js +166 -0
  56. package/dist/did/DIDManager.d.ts +101 -0
  57. package/dist/did/DIDManager.js +493 -0
  58. package/dist/did/Ed25519Verifier.d.ts +30 -0
  59. package/dist/did/Ed25519Verifier.js +59 -0
  60. package/dist/did/KeyManager.d.ts +17 -0
  61. package/dist/did/KeyManager.js +207 -0
  62. package/dist/did/WebVHManager.d.ts +100 -0
  63. package/dist/did/WebVHManager.js +312 -0
  64. package/dist/did/createBtcoDidDocument.d.ts +10 -0
  65. package/dist/did/createBtcoDidDocument.js +42 -0
  66. package/dist/did/providers/OrdinalsClientProviderAdapter.d.ts +23 -0
  67. package/dist/did/providers/OrdinalsClientProviderAdapter.js +51 -0
  68. package/dist/events/EventEmitter.d.ts +115 -0
  69. package/dist/events/EventEmitter.js +198 -0
  70. package/dist/events/index.d.ts +7 -0
  71. package/dist/events/index.js +6 -0
  72. package/dist/events/types.d.ts +286 -0
  73. package/dist/events/types.js +9 -0
  74. package/dist/examples/basic-usage.d.ts +3 -0
  75. package/dist/examples/basic-usage.js +62 -0
  76. package/dist/examples/create-module-original.d.ts +32 -0
  77. package/dist/examples/create-module-original.js +376 -0
  78. package/dist/examples/full-lifecycle-flow.d.ts +56 -0
  79. package/dist/examples/full-lifecycle-flow.js +419 -0
  80. package/dist/examples/run.d.ts +12 -0
  81. package/dist/examples/run.js +51 -0
  82. package/dist/index.d.ts +43 -0
  83. package/dist/index.js +52 -0
  84. package/dist/kinds/KindRegistry.d.ts +76 -0
  85. package/dist/kinds/KindRegistry.js +216 -0
  86. package/dist/kinds/index.d.ts +33 -0
  87. package/{src/kinds/index.ts → dist/kinds/index.js} +6 -44
  88. package/dist/kinds/types.d.ts +363 -0
  89. package/dist/kinds/types.js +25 -0
  90. package/dist/kinds/validators/AgentValidator.d.ts +14 -0
  91. package/dist/kinds/validators/AgentValidator.js +155 -0
  92. package/dist/kinds/validators/AppValidator.d.ts +14 -0
  93. package/dist/kinds/validators/AppValidator.js +135 -0
  94. package/dist/kinds/validators/DatasetValidator.d.ts +14 -0
  95. package/dist/kinds/validators/DatasetValidator.js +148 -0
  96. package/dist/kinds/validators/DocumentValidator.d.ts +14 -0
  97. package/dist/kinds/validators/DocumentValidator.js +180 -0
  98. package/dist/kinds/validators/MediaValidator.d.ts +14 -0
  99. package/dist/kinds/validators/MediaValidator.js +172 -0
  100. package/dist/kinds/validators/ModuleValidator.d.ts +14 -0
  101. package/dist/kinds/validators/ModuleValidator.js +140 -0
  102. package/dist/kinds/validators/base.d.ts +96 -0
  103. package/dist/kinds/validators/base.js +218 -0
  104. package/{src/kinds/validators/index.ts → dist/kinds/validators/index.d.ts} +0 -2
  105. package/dist/kinds/validators/index.js +10 -0
  106. package/dist/lifecycle/BatchOperations.d.ts +147 -0
  107. package/dist/lifecycle/BatchOperations.js +251 -0
  108. package/dist/lifecycle/LifecycleManager.d.ts +362 -0
  109. package/dist/lifecycle/LifecycleManager.js +1692 -0
  110. package/dist/lifecycle/OriginalsAsset.d.ts +164 -0
  111. package/dist/lifecycle/OriginalsAsset.js +380 -0
  112. package/dist/lifecycle/ProvenanceQuery.d.ts +126 -0
  113. package/dist/lifecycle/ProvenanceQuery.js +220 -0
  114. package/dist/lifecycle/ResourceVersioning.d.ts +73 -0
  115. package/dist/lifecycle/ResourceVersioning.js +127 -0
  116. package/dist/migration/MigrationManager.d.ts +86 -0
  117. package/dist/migration/MigrationManager.js +412 -0
  118. package/dist/migration/audit/AuditLogger.d.ts +51 -0
  119. package/dist/migration/audit/AuditLogger.js +156 -0
  120. package/dist/migration/checkpoint/CheckpointManager.d.ts +31 -0
  121. package/dist/migration/checkpoint/CheckpointManager.js +96 -0
  122. package/dist/migration/checkpoint/CheckpointStorage.d.ts +26 -0
  123. package/dist/migration/checkpoint/CheckpointStorage.js +89 -0
  124. package/dist/migration/index.d.ts +22 -0
  125. package/{src/migration/index.ts → dist/migration/index.js} +0 -6
  126. package/dist/migration/operations/BaseMigration.d.ts +48 -0
  127. package/dist/migration/operations/BaseMigration.js +83 -0
  128. package/dist/migration/operations/PeerToBtcoMigration.d.ts +25 -0
  129. package/dist/migration/operations/PeerToBtcoMigration.js +67 -0
  130. package/dist/migration/operations/PeerToWebvhMigration.d.ts +19 -0
  131. package/dist/migration/operations/PeerToWebvhMigration.js +46 -0
  132. package/dist/migration/operations/WebvhToBtcoMigration.d.ts +25 -0
  133. package/dist/migration/operations/WebvhToBtcoMigration.js +67 -0
  134. package/dist/migration/rollback/RollbackManager.d.ts +29 -0
  135. package/dist/migration/rollback/RollbackManager.js +146 -0
  136. package/dist/migration/state/StateMachine.d.ts +25 -0
  137. package/dist/migration/state/StateMachine.js +76 -0
  138. package/dist/migration/state/StateTracker.d.ts +36 -0
  139. package/dist/migration/state/StateTracker.js +123 -0
  140. package/dist/migration/types.d.ts +306 -0
  141. package/dist/migration/types.js +33 -0
  142. package/dist/migration/validation/BitcoinValidator.d.ts +13 -0
  143. package/dist/migration/validation/BitcoinValidator.js +83 -0
  144. package/dist/migration/validation/CredentialValidator.d.ts +13 -0
  145. package/dist/migration/validation/CredentialValidator.js +46 -0
  146. package/dist/migration/validation/DIDCompatibilityValidator.d.ts +16 -0
  147. package/dist/migration/validation/DIDCompatibilityValidator.js +127 -0
  148. package/dist/migration/validation/LifecycleValidator.d.ts +10 -0
  149. package/dist/migration/validation/LifecycleValidator.js +52 -0
  150. package/dist/migration/validation/StorageValidator.d.ts +10 -0
  151. package/dist/migration/validation/StorageValidator.js +65 -0
  152. package/dist/migration/validation/ValidationPipeline.d.ts +29 -0
  153. package/dist/migration/validation/ValidationPipeline.js +180 -0
  154. package/dist/resources/ResourceManager.d.ts +231 -0
  155. package/dist/resources/ResourceManager.js +573 -0
  156. package/{src/resources/index.ts → dist/resources/index.d.ts} +3 -13
  157. package/dist/resources/index.js +10 -0
  158. package/dist/resources/types.d.ts +93 -0
  159. package/dist/resources/types.js +80 -0
  160. package/dist/storage/LocalStorageAdapter.d.ts +11 -0
  161. package/dist/storage/LocalStorageAdapter.js +53 -0
  162. package/dist/storage/MemoryStorageAdapter.d.ts +6 -0
  163. package/dist/storage/MemoryStorageAdapter.js +21 -0
  164. package/dist/storage/StorageAdapter.d.ts +16 -0
  165. package/dist/storage/StorageAdapter.js +1 -0
  166. package/{src/storage/index.ts → dist/storage/index.d.ts} +0 -1
  167. package/dist/storage/index.js +2 -0
  168. package/dist/types/bitcoin.d.ts +84 -0
  169. package/dist/types/bitcoin.js +1 -0
  170. package/dist/types/common.d.ts +82 -0
  171. package/dist/types/common.js +1 -0
  172. package/dist/types/credentials.d.ts +75 -0
  173. package/dist/types/credentials.js +1 -0
  174. package/dist/types/did.d.ts +26 -0
  175. package/dist/types/did.js +1 -0
  176. package/{src/types/index.ts → dist/types/index.d.ts} +0 -2
  177. package/dist/types/index.js +5 -0
  178. package/dist/types/network.d.ts +78 -0
  179. package/dist/types/network.js +145 -0
  180. package/dist/utils/EventLogger.d.ts +71 -0
  181. package/dist/utils/EventLogger.js +232 -0
  182. package/dist/utils/Logger.d.ts +106 -0
  183. package/dist/utils/Logger.js +257 -0
  184. package/dist/utils/MetricsCollector.d.ts +110 -0
  185. package/dist/utils/MetricsCollector.js +264 -0
  186. package/dist/utils/bitcoin-address.d.ts +38 -0
  187. package/dist/utils/bitcoin-address.js +113 -0
  188. package/dist/utils/cbor.d.ts +2 -0
  189. package/dist/utils/cbor.js +9 -0
  190. package/dist/utils/encoding.d.ts +37 -0
  191. package/dist/utils/encoding.js +120 -0
  192. package/dist/utils/hash.d.ts +1 -0
  193. package/dist/utils/hash.js +5 -0
  194. package/dist/utils/retry.d.ts +10 -0
  195. package/dist/utils/retry.js +35 -0
  196. package/dist/utils/satoshi-validation.d.ts +60 -0
  197. package/dist/utils/satoshi-validation.js +156 -0
  198. package/dist/utils/serialization.d.ts +14 -0
  199. package/dist/utils/serialization.js +76 -0
  200. package/dist/utils/telemetry.d.ts +17 -0
  201. package/dist/utils/telemetry.js +24 -0
  202. package/dist/utils/validation.d.ts +5 -0
  203. package/dist/utils/validation.js +98 -0
  204. package/dist/vc/CredentialManager.d.ts +329 -0
  205. package/dist/vc/CredentialManager.js +615 -0
  206. package/dist/vc/Issuer.d.ts +27 -0
  207. package/dist/vc/Issuer.js +70 -0
  208. package/dist/vc/Verifier.d.ts +16 -0
  209. package/dist/vc/Verifier.js +50 -0
  210. package/dist/vc/cryptosuites/bbs.d.ts +44 -0
  211. package/dist/vc/cryptosuites/bbs.js +213 -0
  212. package/dist/vc/cryptosuites/bbsSimple.d.ts +9 -0
  213. package/dist/vc/cryptosuites/bbsSimple.js +12 -0
  214. package/dist/vc/cryptosuites/eddsa.d.ts +30 -0
  215. package/dist/vc/cryptosuites/eddsa.js +81 -0
  216. package/dist/vc/documentLoader.d.ts +16 -0
  217. package/dist/vc/documentLoader.js +59 -0
  218. package/dist/vc/proofs/data-integrity.d.ts +21 -0
  219. package/dist/vc/proofs/data-integrity.js +15 -0
  220. package/dist/vc/utils/jsonld.d.ts +2 -0
  221. package/dist/vc/utils/jsonld.js +15 -0
  222. package/package.json +5 -1
  223. package/.eslintrc.json +0 -33
  224. package/src/adapters/FeeOracleMock.ts +0 -9
  225. package/src/adapters/providers/OrdHttpProvider.ts +0 -126
  226. package/src/adapters/providers/OrdMockProvider.ts +0 -101
  227. package/src/adapters/types.ts +0 -66
  228. package/src/bitcoin/BitcoinManager.ts +0 -330
  229. package/src/bitcoin/BroadcastClient.ts +0 -54
  230. package/src/bitcoin/OrdinalsClient.ts +0 -119
  231. package/src/bitcoin/PSBTBuilder.ts +0 -106
  232. package/src/bitcoin/providers/OrdNodeProvider.ts +0 -92
  233. package/src/bitcoin/providers/OrdinalsProvider.ts +0 -56
  234. package/src/bitcoin/providers/types.ts +0 -59
  235. package/src/bitcoin/transactions/commit.ts +0 -465
  236. package/src/bitcoin/transfer.ts +0 -43
  237. package/src/bitcoin/utxo-selection.ts +0 -322
  238. package/src/bitcoin/utxo.ts +0 -113
  239. package/src/contexts/credentials-v1.json +0 -237
  240. package/src/contexts/credentials-v2-examples.json +0 -5
  241. package/src/contexts/credentials-v2.json +0 -340
  242. package/src/contexts/credentials.json +0 -237
  243. package/src/contexts/data-integrity-v2.json +0 -81
  244. package/src/contexts/dids.json +0 -58
  245. package/src/contexts/ed255192020.json +0 -93
  246. package/src/contexts/ordinals-plus.json +0 -23
  247. package/src/contexts/originals.json +0 -22
  248. package/src/core/OriginalsSDK.ts +0 -416
  249. package/src/crypto/Multikey.ts +0 -194
  250. package/src/crypto/Signer.ts +0 -254
  251. package/src/crypto/noble-init.ts +0 -121
  252. package/src/did/BtcoDidResolver.ts +0 -227
  253. package/src/did/DIDManager.ts +0 -694
  254. package/src/did/Ed25519Verifier.ts +0 -68
  255. package/src/did/KeyManager.ts +0 -236
  256. package/src/did/WebVHManager.ts +0 -498
  257. package/src/did/createBtcoDidDocument.ts +0 -59
  258. package/src/did/providers/OrdinalsClientProviderAdapter.ts +0 -68
  259. package/src/events/EventEmitter.ts +0 -222
  260. package/src/events/index.ts +0 -19
  261. package/src/events/types.ts +0 -331
  262. package/src/examples/basic-usage.ts +0 -78
  263. package/src/examples/create-module-original.ts +0 -435
  264. package/src/examples/full-lifecycle-flow.ts +0 -514
  265. package/src/examples/run.ts +0 -60
  266. package/src/index.ts +0 -150
  267. package/src/kinds/KindRegistry.ts +0 -290
  268. package/src/kinds/types.ts +0 -470
  269. package/src/kinds/validators/AgentValidator.ts +0 -257
  270. package/src/kinds/validators/AppValidator.ts +0 -211
  271. package/src/kinds/validators/DatasetValidator.ts +0 -242
  272. package/src/kinds/validators/DocumentValidator.ts +0 -311
  273. package/src/kinds/validators/MediaValidator.ts +0 -269
  274. package/src/kinds/validators/ModuleValidator.ts +0 -225
  275. package/src/kinds/validators/base.ts +0 -276
  276. package/src/lifecycle/BatchOperations.ts +0 -373
  277. package/src/lifecycle/LifecycleManager.ts +0 -2126
  278. package/src/lifecycle/OriginalsAsset.ts +0 -524
  279. package/src/lifecycle/ProvenanceQuery.ts +0 -280
  280. package/src/lifecycle/ResourceVersioning.ts +0 -163
  281. package/src/migration/MigrationManager.ts +0 -527
  282. package/src/migration/audit/AuditLogger.ts +0 -176
  283. package/src/migration/checkpoint/CheckpointManager.ts +0 -112
  284. package/src/migration/checkpoint/CheckpointStorage.ts +0 -101
  285. package/src/migration/operations/BaseMigration.ts +0 -126
  286. package/src/migration/operations/PeerToBtcoMigration.ts +0 -105
  287. package/src/migration/operations/PeerToWebvhMigration.ts +0 -62
  288. package/src/migration/operations/WebvhToBtcoMigration.ts +0 -105
  289. package/src/migration/rollback/RollbackManager.ts +0 -170
  290. package/src/migration/state/StateMachine.ts +0 -92
  291. package/src/migration/state/StateTracker.ts +0 -156
  292. package/src/migration/types.ts +0 -344
  293. package/src/migration/validation/BitcoinValidator.ts +0 -107
  294. package/src/migration/validation/CredentialValidator.ts +0 -62
  295. package/src/migration/validation/DIDCompatibilityValidator.ts +0 -151
  296. package/src/migration/validation/LifecycleValidator.ts +0 -64
  297. package/src/migration/validation/StorageValidator.ts +0 -79
  298. package/src/migration/validation/ValidationPipeline.ts +0 -213
  299. package/src/resources/ResourceManager.ts +0 -655
  300. package/src/resources/types.ts +0 -202
  301. package/src/storage/LocalStorageAdapter.ts +0 -61
  302. package/src/storage/MemoryStorageAdapter.ts +0 -29
  303. package/src/storage/StorageAdapter.ts +0 -25
  304. package/src/types/bitcoin.ts +0 -98
  305. package/src/types/common.ts +0 -92
  306. package/src/types/credentials.ts +0 -88
  307. package/src/types/did.ts +0 -31
  308. package/src/types/external-shims.d.ts +0 -53
  309. package/src/types/network.ts +0 -175
  310. package/src/utils/EventLogger.ts +0 -298
  311. package/src/utils/Logger.ts +0 -322
  312. package/src/utils/MetricsCollector.ts +0 -358
  313. package/src/utils/bitcoin-address.ts +0 -130
  314. package/src/utils/cbor.ts +0 -12
  315. package/src/utils/encoding.ts +0 -127
  316. package/src/utils/hash.ts +0 -6
  317. package/src/utils/retry.ts +0 -46
  318. package/src/utils/satoshi-validation.ts +0 -196
  319. package/src/utils/serialization.ts +0 -96
  320. package/src/utils/telemetry.ts +0 -40
  321. package/src/utils/validation.ts +0 -119
  322. package/src/vc/CredentialManager.ts +0 -918
  323. package/src/vc/Issuer.ts +0 -100
  324. package/src/vc/Verifier.ts +0 -47
  325. package/src/vc/cryptosuites/bbs.ts +0 -253
  326. package/src/vc/cryptosuites/bbsSimple.ts +0 -21
  327. package/src/vc/cryptosuites/eddsa.ts +0 -99
  328. package/src/vc/documentLoader.ts +0 -67
  329. package/src/vc/proofs/data-integrity.ts +0 -33
  330. package/src/vc/utils/jsonld.ts +0 -18
  331. package/tests/__mocks__/bbs-signatures.js +0 -17
  332. package/tests/__mocks__/mf-base58.js +0 -24
  333. package/tests/fixtures/did-documents.ts +0 -247
  334. package/tests/index.test.ts +0 -21
  335. package/tests/integration/BatchOperations.test.ts +0 -531
  336. package/tests/integration/CompleteLifecycle.e2e.test.ts +0 -735
  337. package/tests/integration/CredentialManager.test.ts +0 -42
  338. package/tests/integration/DIDManager.test.ts +0 -41
  339. package/tests/integration/DidPeerToWebVhFlow.test.ts +0 -351
  340. package/tests/integration/Events.test.ts +0 -435
  341. package/tests/integration/Lifecycle.transfer.btco.integration.test.ts +0 -25
  342. package/tests/integration/LifecycleManager.test.ts +0 -21
  343. package/tests/integration/MultikeyFlow.test.ts +0 -52
  344. package/tests/integration/TelemetryIntegration.test.ts +0 -395
  345. package/tests/integration/WebVhPublish.test.ts +0 -48
  346. package/tests/integration/createTypedOriginal.test.ts +0 -379
  347. package/tests/integration/migration/peer-to-webvh.test.ts +0 -172
  348. package/tests/manual/test-commit-creation.ts +0 -323
  349. package/tests/mocks/MockKeyStore.ts +0 -38
  350. package/tests/mocks/adapters/MemoryStorageAdapter.ts +0 -24
  351. package/tests/mocks/adapters/MockFeeOracle.ts +0 -11
  352. package/tests/mocks/adapters/MockOrdinalsProvider.ts +0 -76
  353. package/tests/mocks/adapters/OrdMockProvider.test.ts +0 -176
  354. package/tests/mocks/adapters/index.ts +0 -6
  355. package/tests/performance/BatchOperations.perf.test.ts +0 -403
  356. package/tests/performance/logging.perf.test.ts +0 -336
  357. package/tests/sdk.test.ts +0 -43
  358. package/tests/security/bitcoin-penetration-tests.test.ts +0 -622
  359. package/tests/setup.bun.ts +0 -69
  360. package/tests/setup.jest.ts +0 -23
  361. package/tests/stress/batch-operations-stress.test.ts +0 -571
  362. package/tests/unit/adapters/FeeOracleMock.test.ts +0 -40
  363. package/tests/unit/bitcoin/BitcoinManager.test.ts +0 -293
  364. package/tests/unit/bitcoin/BroadcastClient.test.ts +0 -52
  365. package/tests/unit/bitcoin/OrdNodeProvider.test.ts +0 -53
  366. package/tests/unit/bitcoin/OrdinalsClient.test.ts +0 -381
  367. package/tests/unit/bitcoin/OrdinalsClientProvider.test.ts +0 -102
  368. package/tests/unit/bitcoin/PSBTBuilder.test.ts +0 -84
  369. package/tests/unit/bitcoin/fee-calculation.test.ts +0 -261
  370. package/tests/unit/bitcoin/transactions/commit.test.ts +0 -649
  371. package/tests/unit/bitcoin/transfer.test.ts +0 -31
  372. package/tests/unit/bitcoin/utxo-selection-new.test.ts +0 -502
  373. package/tests/unit/bitcoin/utxo.more.test.ts +0 -39
  374. package/tests/unit/bitcoin/utxo.selection.test.ts +0 -38
  375. package/tests/unit/core/OriginalsSDK.test.ts +0 -152
  376. package/tests/unit/crypto/Multikey.test.ts +0 -206
  377. package/tests/unit/crypto/Signer.test.ts +0 -408
  378. package/tests/unit/did/BtcoDidResolver.test.ts +0 -611
  379. package/tests/unit/did/DIDManager.more.test.ts +0 -43
  380. package/tests/unit/did/DIDManager.test.ts +0 -185
  381. package/tests/unit/did/Ed25519Verifier.test.ts +0 -160
  382. package/tests/unit/did/KeyManager.test.ts +0 -452
  383. package/tests/unit/did/OrdinalsClientProviderAdapter.test.ts +0 -45
  384. package/tests/unit/did/WebVHManager.test.ts +0 -435
  385. package/tests/unit/did/createBtcoDidDocument.test.ts +0 -67
  386. package/tests/unit/did/providers/OrdinalsClientProviderAdapter.test.ts +0 -159
  387. package/tests/unit/events/EventEmitter.test.ts +0 -407
  388. package/tests/unit/kinds/KindRegistry.test.ts +0 -329
  389. package/tests/unit/kinds/types.test.ts +0 -409
  390. package/tests/unit/kinds/validators.test.ts +0 -651
  391. package/tests/unit/lifecycle/BatchOperations.test.ts +0 -527
  392. package/tests/unit/lifecycle/LifecycleManager.cleanapi.test.ts +0 -441
  393. package/tests/unit/lifecycle/LifecycleManager.keymanagement.test.ts +0 -312
  394. package/tests/unit/lifecycle/LifecycleManager.prov.test.ts +0 -18
  395. package/tests/unit/lifecycle/LifecycleManager.test.ts +0 -213
  396. package/tests/unit/lifecycle/LifecycleManager.transfer.unit.test.ts +0 -30
  397. package/tests/unit/lifecycle/OriginalsAsset.test.ts +0 -176
  398. package/tests/unit/lifecycle/ProvenanceQuery.test.ts +0 -577
  399. package/tests/unit/lifecycle/ResourceVersioning.test.ts +0 -651
  400. package/tests/unit/resources/ResourceManager.test.ts +0 -740
  401. package/tests/unit/storage/MemoryStorageAdapter.test.ts +0 -93
  402. package/tests/unit/types/network.test.ts +0 -255
  403. package/tests/unit/utils/EventIntegration.test.ts +0 -384
  404. package/tests/unit/utils/Logger.test.ts +0 -473
  405. package/tests/unit/utils/MetricsCollector.test.ts +0 -358
  406. package/tests/unit/utils/bitcoin-address.test.ts +0 -250
  407. package/tests/unit/utils/cbor.test.ts +0 -35
  408. package/tests/unit/utils/encoding.test.ts +0 -318
  409. package/tests/unit/utils/hash.test.ts +0 -12
  410. package/tests/unit/utils/retry.test.ts +0 -100
  411. package/tests/unit/utils/satoshi-validation.test.ts +0 -354
  412. package/tests/unit/utils/serialization.test.ts +0 -124
  413. package/tests/unit/utils/telemetry.test.ts +0 -52
  414. package/tests/unit/utils/validation.test.ts +0 -141
  415. package/tests/unit/vc/CredentialManager.helpers.test.ts +0 -527
  416. package/tests/unit/vc/CredentialManager.test.ts +0 -487
  417. package/tests/unit/vc/Issuer.test.ts +0 -107
  418. package/tests/unit/vc/Verifier.test.ts +0 -525
  419. package/tests/unit/vc/bbs.test.ts +0 -282
  420. package/tests/unit/vc/cryptosuites/eddsa.test.ts +0 -398
  421. package/tests/unit/vc/documentLoader.test.ts +0 -121
  422. package/tests/unit/vc/proofs/data-integrity.test.ts +0 -24
  423. package/tsconfig.json +0 -31
  424. package/tsconfig.test.json +0 -15
@@ -1,465 +0,0 @@
1
- /**
2
- * Commit Transaction Processing for Ordinals
3
- *
4
- * This module implements the commit transaction process for ordinals inscriptions.
5
- * It handles the generation of the commit address and preparation of the commit transaction.
6
- *
7
- * Ported from legacy ordinalsplus transaction infrastructure.
8
- */
9
-
10
- import * as btc from '@scure/btc-signer';
11
- import * as ordinals from 'micro-ordinals';
12
- import { schnorr } from '@noble/curves/secp256k1';
13
- import { Utxo } from '../../types/bitcoin.js';
14
- import { calculateFee } from '../fee-calculation.js';
15
- import { selectUtxos, SimpleUtxoSelectionOptions } from '../utxo-selection.js';
16
-
17
- // Define minimum dust limit (satoshis)
18
- const MIN_DUST_LIMIT = 546;
19
-
20
- // Maximum iterations for UTXO reselection to prevent infinite loops
21
- const MAX_SELECTION_ITERATIONS = 5;
22
-
23
- /**
24
- * Bitcoin network type for @scure/btc-signer
25
- */
26
- type BitcoinNetwork = 'mainnet' | 'testnet' | 'regtest' | 'signet';
27
-
28
- /**
29
- * Get @scure/btc-signer network configuration
30
- */
31
- function getScureNetwork(network: BitcoinNetwork): typeof btc.NETWORK {
32
- switch (network) {
33
- case 'mainnet':
34
- return btc.NETWORK;
35
- case 'testnet':
36
- case 'signet':
37
- case 'regtest':
38
- return btc.TEST_NETWORK;
39
- default:
40
- return btc.NETWORK;
41
- }
42
- }
43
-
44
- /**
45
- * Validates that a UTXO has all required fields for spending
46
- *
47
- * @param utxo - The UTXO to validate
48
- * @returns true if the UTXO is valid and spendable, false otherwise
49
- */
50
- function isValidSpendableUtxo(utxo: Utxo): boolean {
51
- return !!(
52
- utxo.txid &&
53
- typeof utxo.vout === 'number' &&
54
- utxo.value > 0 &&
55
- utxo.scriptPubKey &&
56
- utxo.scriptPubKey.length > 0
57
- );
58
- }
59
-
60
- /**
61
- * Parameters for creating a commit transaction
62
- */
63
- export interface CommitTransactionParams {
64
- /** Inscription content as Buffer */
65
- content: Buffer;
66
- /** MIME type of the content (e.g., 'text/plain', 'image/png') */
67
- contentType: string;
68
- /** Available UTXOs to fund the transaction */
69
- utxos: Utxo[];
70
- /** Address to send change back to */
71
- changeAddress: string;
72
- /** Fee rate in sats/vB */
73
- feeRate: number;
74
- /** Bitcoin network configuration */
75
- network: BitcoinNetwork;
76
- /** Optional minimum amount for the commit output */
77
- minimumCommitAmount?: number;
78
- /** Optional metadata for the inscription */
79
- metadata?: Record<string, unknown>;
80
- /** Optional pointer to target specific satoshi */
81
- pointer?: number;
82
- }
83
-
84
- /**
85
- * Result of the commit transaction creation
86
- */
87
- export interface CommitTransactionResult {
88
- /** P2TR address for the commit output */
89
- commitAddress: string;
90
- /** Base64-encoded PSBT for the commit transaction */
91
- commitPsbtBase64: string;
92
- /** Raw PSBT object for commit transaction (for direct manipulation) */
93
- commitPsbt: btc.Transaction;
94
- /** The exact amount sent to the commit output */
95
- commitAmount: number;
96
- /** Selected UTXOs for the transaction */
97
- selectedUtxos: Utxo[];
98
- /** Fee information */
99
- fees: {
100
- /** Fee for the commit transaction in satoshis */
101
- commit: number;
102
- };
103
- /** Reveal private key (hex string) - needed for reveal transaction */
104
- revealPrivateKey: string;
105
- /** Reveal public key (hex string) */
106
- revealPublicKey: string;
107
- /** Inscription script for reveal transaction */
108
- inscriptionScript: {
109
- script: Uint8Array;
110
- controlBlock: Uint8Array;
111
- leafVersion: number;
112
- };
113
- }
114
-
115
- /**
116
- * Estimates the size of a commit transaction
117
- *
118
- * @param inputCount - Number of transaction inputs
119
- * @param outputCount - Number of transaction outputs (including commit and change)
120
- * @returns Estimated transaction size in virtual bytes
121
- */
122
- function estimateCommitTxSize(inputCount: number, outputCount: number): number {
123
- // Transaction overhead
124
- const overhead = 10.5;
125
-
126
- // P2WPKH inputs (assuming most common case)
127
- const inputSize = 68 * inputCount;
128
-
129
- // P2TR output for commit and P2WPKH for change
130
- const commitOutputSize = 43; // P2TR output
131
- const changeOutputSize = outputCount > 1 ? 31 * (outputCount - 1) : 0; // P2WPKH outputs for change
132
-
133
- return Math.ceil(overhead + inputSize + commitOutputSize + changeOutputSize);
134
- }
135
-
136
- /**
137
- * Creates a commit transaction for an ordinals inscription
138
- *
139
- * This function:
140
- * 1. Validates and filters UTXOs to ensure they are spendable
141
- * 2. Creates an inscription with the provided content
142
- * 3. Generates a reveal keypair and script
143
- * 4. Creates a P2TR commit address
144
- * 5. Selects UTXOs to fund the transaction (with iterative reselection if needed)
145
- * 6. Builds a PSBT with commit output and change
146
- *
147
- * The function ensures that:
148
- * - All selected UTXOs have valid scriptPubKey fields
149
- * - Total input value always covers output value + fees
150
- * - UTXO selection is re-run if fee increases after accurate calculation
151
- *
152
- * @param params - Parameters for the commit transaction
153
- * @returns Complete information for the prepared commit transaction
154
- * @throws Error if no valid UTXOs are available or insufficient funds
155
- */
156
- export async function createCommitTransaction(
157
- params: CommitTransactionParams
158
- ): Promise<CommitTransactionResult> {
159
- const {
160
- content,
161
- contentType,
162
- utxos,
163
- changeAddress,
164
- feeRate,
165
- network,
166
- minimumCommitAmount = MIN_DUST_LIMIT,
167
- metadata,
168
- pointer
169
- } = params;
170
-
171
- // Validate inputs
172
- if (!utxos || utxos.length === 0) {
173
- throw new Error('No UTXOs provided to fund the transaction.');
174
- }
175
-
176
- if (!content || content.length === 0) {
177
- throw new Error('Invalid inscription: missing content.');
178
- }
179
-
180
- if (!contentType) {
181
- throw new Error('Invalid inscription: missing content type.');
182
- }
183
-
184
- if (!changeAddress) {
185
- throw new Error('Change address is required.');
186
- }
187
-
188
- if (feeRate <= 0) {
189
- throw new Error(`Invalid fee rate: ${feeRate}`);
190
- }
191
-
192
- // CRITICAL: Pre-filter UTXOs to ensure all have valid scriptPubKey
193
- // This prevents silent failures where UTXOs are selected but can't be spent
194
- const validUtxos = utxos.filter(isValidSpendableUtxo);
195
-
196
- if (validUtxos.length === 0) {
197
- const invalidCount = utxos.length;
198
- const invalidReasons: string[] = [];
199
-
200
- utxos.forEach((utxo, idx) => {
201
- if (!utxo.scriptPubKey || utxo.scriptPubKey.length === 0) {
202
- invalidReasons.push(`UTXO ${idx} (${utxo.txid}:${utxo.vout}): missing scriptPubKey`);
203
- } else if (!utxo.txid) {
204
- invalidReasons.push(`UTXO ${idx}: missing txid`);
205
- } else if (typeof utxo.vout !== 'number') {
206
- invalidReasons.push(`UTXO ${idx} (${utxo.txid}): missing or invalid vout`);
207
- } else if (utxo.value <= 0) {
208
- invalidReasons.push(`UTXO ${idx} (${utxo.txid}:${utxo.vout}): invalid value (${utxo.value})`);
209
- }
210
- });
211
-
212
- throw new Error(
213
- `No valid spendable UTXOs available. ${invalidCount} UTXO(s) provided but all are invalid:\n` +
214
- invalidReasons.slice(0, 5).join('\n') +
215
- (invalidReasons.length > 5 ? `\n... and ${invalidReasons.length - 5} more` : '')
216
- );
217
- }
218
-
219
- // Log filtered UTXOs for debugging
220
- if (validUtxos.length < utxos.length) {
221
- const filteredCount = utxos.length - validUtxos.length;
222
- console.warn(`Filtered out ${filteredCount} invalid UTXO(s). ${validUtxos.length} valid UTXO(s) remain.`);
223
- }
224
-
225
- // Step 1: Create the inscription object
226
- const tags: ordinals.Tags = {
227
- contentType
228
- };
229
-
230
- // Add metadata if provided
231
- if (metadata && Object.keys(metadata).length > 0) {
232
- tags.metadata = metadata;
233
- }
234
-
235
- // Add pointer if provided
236
- if (typeof pointer !== 'undefined') {
237
- (tags as any).pointer = pointer;
238
- }
239
-
240
- const inscription: ordinals.Inscription = {
241
- tags,
242
- body: new Uint8Array(content)
243
- };
244
-
245
- // Step 2: Generate a reveal keypair
246
- // Use random private key for reveal transaction
247
- const revealPrivateKey = schnorr.utils.randomPrivateKey();
248
- const revealPublicKey = schnorr.getPublicKey(revealPrivateKey);
249
-
250
- // Step 3: Create the inscription script tree using micro-ordinals
251
- const scriptTree = ordinals.p2tr_ord_reveal(revealPublicKey, [inscription]);
252
-
253
- // Step 4: Create P2TR address for the commit output
254
- const scureNetwork = getScureNetwork(network);
255
-
256
- // Create taproot output using the inscription script tree
257
- // Use the reveal public key as the internal key
258
- const taprootPayment = btc.p2tr(
259
- revealPublicKey, // internal key
260
- scriptTree, // script tree
261
- scureNetwork,
262
- false, // allowUnknownOutputs
263
- [ordinals.OutOrdinalReveal] // customScripts
264
- );
265
-
266
- if (!taprootPayment.address) {
267
- throw new Error('Failed to generate P2TR commit address');
268
- }
269
-
270
- const commitAddress = taprootPayment.address;
271
-
272
- // Extract script information from the taproot payment
273
- if (!taprootPayment.leaves || taprootPayment.leaves.length === 0) {
274
- throw new Error('Failed to extract taproot leaves from P2TR payment');
275
- }
276
-
277
- const leaf = taprootPayment.leaves[0];
278
- const leafVersion = leaf.version ?? 0xc0;
279
-
280
- // Compute control block from leaf data
281
- // The control block is: version byte | internal key (32 bytes) | merkle path
282
- const controlBlock = btc.TaprootControlBlock.encode({
283
- version: leafVersion,
284
- internalKey: revealPublicKey,
285
- merklePath: leaf.path
286
- });
287
-
288
- // Step 5: Calculate minimum amount needed for the commit output
289
- const commitOutputValue = Math.max(minimumCommitAmount, MIN_DUST_LIMIT);
290
-
291
- // Step 6: Iterative UTXO selection with fee recalculation
292
- // This ensures that after we know the actual input count, we have enough funds
293
- let selectedUtxos: Utxo[] = [];
294
- let totalInputValue = 0;
295
- let estimatedFee = 0;
296
- let iteration = 0;
297
-
298
- // Start with initial estimate (1 input, 2 outputs)
299
- let targetAmount = commitOutputValue + Number(calculateFee(estimateCommitTxSize(1, 2), feeRate));
300
-
301
- while (iteration < MAX_SELECTION_ITERATIONS) {
302
- iteration++;
303
-
304
- // Select UTXOs based on current target amount
305
- const options: SimpleUtxoSelectionOptions = {
306
- targetAmount
307
- };
308
-
309
- try {
310
- const selectionResult = selectUtxos(validUtxos, options);
311
- selectedUtxos = selectionResult.selectedUtxos;
312
- totalInputValue = selectionResult.totalInputValue;
313
- } catch (error) {
314
- throw new Error(
315
- `Insufficient funds. Need ${targetAmount} sats for commit output (${commitOutputValue} sats) and estimated fees. ` +
316
- `Available: ${validUtxos.reduce((sum, u) => sum + u.value, 0)} sats from ${validUtxos.length} valid UTXO(s). ` +
317
- `${error instanceof Error ? error.message : 'Unknown error'}`
318
- );
319
- }
320
-
321
- // Calculate accurate fee based on actual selected input count
322
- // Assume 2 outputs (commit + change) for now - we'll adjust later if no change
323
- const actualInputCount = selectedUtxos.length;
324
- const estimatedVBytes = estimateCommitTxSize(actualInputCount, 2);
325
- estimatedFee = Number(calculateFee(estimatedVBytes, feeRate));
326
-
327
- // Check if we need to account for no change output
328
- const potentialChange = totalInputValue - commitOutputValue - estimatedFee;
329
- let finalOutputCount = 2;
330
-
331
- if (potentialChange < MIN_DUST_LIMIT) {
332
- // No change output, recalculate fee with 1 output
333
- finalOutputCount = 1;
334
- const adjustedVBytes = estimateCommitTxSize(actualInputCount, finalOutputCount);
335
- estimatedFee = Number(calculateFee(adjustedVBytes, feeRate));
336
- }
337
-
338
- // Check if we have enough funds with the accurate fee calculation
339
- const requiredTotal = commitOutputValue + estimatedFee;
340
-
341
- if (totalInputValue >= requiredTotal) {
342
- // We have enough funds, break out of loop
343
- break;
344
- }
345
-
346
- // Not enough funds, need to reselect with higher target
347
- // Add a small buffer (5%) to account for potential fee variations
348
- targetAmount = Math.ceil(requiredTotal * 1.05);
349
-
350
- if (iteration >= MAX_SELECTION_ITERATIONS) {
351
- throw new Error(
352
- `Unable to select sufficient UTXOs after ${MAX_SELECTION_ITERATIONS} iterations. ` +
353
- `Required: ${requiredTotal} sats (commit: ${commitOutputValue}, fee: ${estimatedFee}), ` +
354
- `Selected: ${totalInputValue} sats from ${selectedUtxos.length} UTXO(s). ` +
355
- `Total available: ${validUtxos.reduce((sum, u) => sum + u.value, 0)} sats from ${validUtxos.length} valid UTXO(s).`
356
- );
357
- }
358
- }
359
-
360
- // Final validation: ensure we have selected UTXOs
361
- if (!selectedUtxos || selectedUtxos.length === 0) {
362
- throw new Error('No UTXOs selected for the transaction after selection process.');
363
- }
364
-
365
- // Step 7: Create transaction using @scure/btc-signer
366
- const tx = new btc.Transaction();
367
-
368
- // Add inputs - all selected UTXOs are already validated to have scriptPubKey
369
- for (const utxo of selectedUtxos) {
370
- // This check is now redundant due to pre-filtering, but kept as defense-in-depth
371
- if (!utxo.scriptPubKey) {
372
- throw new Error(
373
- `CRITICAL ERROR: Selected UTXO ${utxo.txid}:${utxo.vout} is missing scriptPubKey. ` +
374
- `This should never happen due to pre-filtering. Please report this bug.`
375
- );
376
- }
377
-
378
- tx.addInput({
379
- txid: utxo.txid,
380
- index: utxo.vout,
381
- witnessUtxo: {
382
- script: Buffer.from(utxo.scriptPubKey, 'hex'),
383
- amount: BigInt(utxo.value)
384
- }
385
- });
386
- }
387
-
388
- // Verify input count matches selected UTXOs
389
- if (tx.inputsLength !== selectedUtxos.length) {
390
- throw new Error(
391
- `Input count mismatch: expected ${selectedUtxos.length} inputs but transaction has ${tx.inputsLength}. ` +
392
- `This indicates a critical error in transaction construction.`
393
- );
394
- }
395
-
396
- // Step 8: Calculate final fee based on actual transaction structure
397
- const actualInputCount = tx.inputsLength;
398
-
399
- // Determine if we'll have a change output
400
- const preliminaryChange = totalInputValue - commitOutputValue - estimatedFee;
401
- const willHaveChange = preliminaryChange >= MIN_DUST_LIMIT;
402
- const finalOutputCount = willHaveChange ? 2 : 1;
403
-
404
- // Calculate final fee with correct output count
405
- const finalVBytes = estimateCommitTxSize(actualInputCount, finalOutputCount);
406
- const finalFee = Number(calculateFee(finalVBytes, feeRate));
407
-
408
- // CRITICAL: Final validation that inputs cover outputs + fees
409
- const finalChange = totalInputValue - commitOutputValue - finalFee;
410
-
411
- if (finalChange < 0) {
412
- throw new Error(
413
- `CRITICAL ERROR: Outputs exceed inputs! ` +
414
- `Inputs: ${totalInputValue} sats, ` +
415
- `Outputs: ${commitOutputValue} sats (commit) + ${finalFee} sats (fee) = ${commitOutputValue + finalFee} sats. ` +
416
- `Deficit: ${Math.abs(finalChange)} sats. ` +
417
- `This should never happen due to iterative selection. Please report this bug.`
418
- );
419
- }
420
-
421
- // Step 9: Add the commit output using the P2TR address
422
- tx.addOutputAddress(
423
- commitAddress,
424
- BigInt(commitOutputValue),
425
- scureNetwork
426
- );
427
-
428
- // Step 10: Add change output if above dust limit
429
- if (finalChange >= MIN_DUST_LIMIT) {
430
- tx.addOutputAddress(
431
- changeAddress,
432
- BigInt(finalChange),
433
- scureNetwork
434
- );
435
- } else if (finalChange > 0) {
436
- // If change is below dust limit, it's effectively added to the fee
437
- console.log(
438
- `Change amount ${finalChange} sats is below dust limit (${MIN_DUST_LIMIT} sats), adding to fee. ` +
439
- `Final fee: ${finalFee + finalChange} sats.`
440
- );
441
- }
442
-
443
- // Step 11: Get the PSBT as base64
444
- const txPsbt = tx.toPSBT();
445
- const commitPsbtBase64 = typeof txPsbt === 'string' ? txPsbt : Buffer.from(txPsbt).toString('base64');
446
-
447
- return {
448
- commitAddress,
449
- commitPsbtBase64,
450
- commitPsbt: tx,
451
- commitAmount: commitOutputValue,
452
- selectedUtxos,
453
- fees: {
454
- // Include dust in final fee if no change output
455
- commit: finalChange >= MIN_DUST_LIMIT ? finalFee : finalFee + finalChange
456
- },
457
- revealPrivateKey: Buffer.from(revealPrivateKey).toString('hex'),
458
- revealPublicKey: Buffer.from(revealPublicKey).toString('hex'),
459
- inscriptionScript: {
460
- script: leaf.script,
461
- controlBlock,
462
- leafVersion
463
- }
464
- };
465
- }
@@ -1,43 +0,0 @@
1
- import { BitcoinTransaction, TransactionInput, TransactionOutput, Utxo, DUST_LIMIT_SATS } from '../types';
2
- import { estimateFeeSats, selectUtxos, SelectionOptions, SelectionResult } from './utxo';
3
-
4
- export interface BuildTransferOptions extends Omit<SelectionOptions, 'targetAmountSats' | 'feeRateSatsPerVb'> {
5
- changeAddress?: string;
6
- }
7
-
8
- export function buildTransferTransaction(
9
- availableUtxos: Utxo[],
10
- recipientAddress: string,
11
- amountSats: number,
12
- feeRateSatsPerVb: number,
13
- options: BuildTransferOptions = {}
14
- ): { tx: BitcoinTransaction; selection: SelectionResult } {
15
- const selection = selectUtxos(availableUtxos, {
16
- targetAmountSats: amountSats,
17
- feeRateSatsPerVb,
18
- allowLocked: options.allowLocked,
19
- forbidInscriptionBearingInputs: options.forbidInscriptionBearingInputs,
20
- changeAddress: options.changeAddress,
21
- feeEstimate: options.feeEstimate
22
- });
23
-
24
- const vin: TransactionInput[] = selection.selected.map(u => ({ txid: u.txid, vout: u.vout }));
25
-
26
- const outputs: TransactionOutput[] = [];
27
- outputs.push({ value: amountSats, scriptPubKey: 'script', address: recipientAddress });
28
-
29
- if (selection.changeSats >= DUST_LIMIT_SATS) {
30
- const changeAddress = options.changeAddress || (selection.selected.find(u => !!u.address)?.address ?? 'change');
31
- outputs.push({ value: selection.changeSats, scriptPubKey: 'script', address: changeAddress });
32
- }
33
-
34
- const tx: BitcoinTransaction = {
35
- txid: '',
36
- vin,
37
- vout: outputs,
38
- fee: selection.feeSats
39
- };
40
-
41
- return { tx, selection };
42
- }
43
-