@originals/sdk 1.2.0 → 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 (401) hide show
  1. package/package.json +4 -1
  2. package/.eslintrc.json +0 -33
  3. package/.turbo/turbo-build.log +0 -1
  4. package/dist/adapters/FeeOracleMock.d.ts +0 -6
  5. package/dist/adapters/FeeOracleMock.js +0 -8
  6. package/dist/adapters/index.d.ts +0 -4
  7. package/dist/adapters/index.js +0 -4
  8. package/dist/adapters/providers/OrdHttpProvider.d.ts +0 -56
  9. package/dist/adapters/providers/OrdHttpProvider.js +0 -110
  10. package/dist/adapters/providers/OrdMockProvider.d.ts +0 -70
  11. package/dist/adapters/providers/OrdMockProvider.js +0 -75
  12. package/dist/adapters/types.d.ts +0 -71
  13. package/dist/adapters/types.js +0 -1
  14. package/dist/bitcoin/BitcoinManager.d.ts +0 -15
  15. package/dist/bitcoin/BitcoinManager.js +0 -262
  16. package/dist/bitcoin/BroadcastClient.d.ts +0 -30
  17. package/dist/bitcoin/BroadcastClient.js +0 -35
  18. package/dist/bitcoin/OrdinalsClient.d.ts +0 -21
  19. package/dist/bitcoin/OrdinalsClient.js +0 -105
  20. package/dist/bitcoin/PSBTBuilder.d.ts +0 -24
  21. package/dist/bitcoin/PSBTBuilder.js +0 -80
  22. package/dist/bitcoin/fee-calculation.d.ts +0 -14
  23. package/dist/bitcoin/fee-calculation.js +0 -31
  24. package/dist/bitcoin/providers/OrdNodeProvider.d.ts +0 -38
  25. package/dist/bitcoin/providers/OrdNodeProvider.js +0 -67
  26. package/dist/bitcoin/providers/OrdinalsProvider.d.ts +0 -33
  27. package/dist/bitcoin/providers/OrdinalsProvider.js +0 -50
  28. package/dist/bitcoin/providers/types.d.ts +0 -63
  29. package/dist/bitcoin/providers/types.js +0 -1
  30. package/dist/bitcoin/transactions/commit.d.ts +0 -89
  31. package/dist/bitcoin/transactions/commit.js +0 -311
  32. package/dist/bitcoin/transactions/index.d.ts +0 -7
  33. package/dist/bitcoin/transactions/index.js +0 -8
  34. package/dist/bitcoin/transfer.d.ts +0 -9
  35. package/dist/bitcoin/transfer.js +0 -26
  36. package/dist/bitcoin/utxo-selection.d.ts +0 -78
  37. package/dist/bitcoin/utxo-selection.js +0 -237
  38. package/dist/bitcoin/utxo.d.ts +0 -26
  39. package/dist/bitcoin/utxo.js +0 -78
  40. package/dist/contexts/credentials-v1.json +0 -195
  41. package/dist/contexts/credentials-v2-examples.json +0 -5
  42. package/dist/contexts/credentials-v2.json +0 -301
  43. package/dist/contexts/credentials.json +0 -195
  44. package/dist/contexts/data-integrity-v2.json +0 -81
  45. package/dist/contexts/dids.json +0 -57
  46. package/dist/contexts/ed255192020.json +0 -93
  47. package/dist/contexts/ordinals-plus.json +0 -23
  48. package/dist/contexts/originals.json +0 -22
  49. package/dist/core/OriginalsSDK.d.ts +0 -158
  50. package/dist/core/OriginalsSDK.js +0 -274
  51. package/dist/crypto/Multikey.d.ts +0 -30
  52. package/dist/crypto/Multikey.js +0 -149
  53. package/dist/crypto/Signer.d.ts +0 -21
  54. package/dist/crypto/Signer.js +0 -196
  55. package/dist/crypto/noble-init.d.ts +0 -18
  56. package/dist/crypto/noble-init.js +0 -106
  57. package/dist/did/BtcoDidResolver.d.ts +0 -57
  58. package/dist/did/BtcoDidResolver.js +0 -166
  59. package/dist/did/DIDManager.d.ts +0 -101
  60. package/dist/did/DIDManager.js +0 -493
  61. package/dist/did/Ed25519Verifier.d.ts +0 -30
  62. package/dist/did/Ed25519Verifier.js +0 -59
  63. package/dist/did/KeyManager.d.ts +0 -17
  64. package/dist/did/KeyManager.js +0 -207
  65. package/dist/did/WebVHManager.d.ts +0 -100
  66. package/dist/did/WebVHManager.js +0 -304
  67. package/dist/did/createBtcoDidDocument.d.ts +0 -10
  68. package/dist/did/createBtcoDidDocument.js +0 -42
  69. package/dist/did/providers/OrdinalsClientProviderAdapter.d.ts +0 -23
  70. package/dist/did/providers/OrdinalsClientProviderAdapter.js +0 -51
  71. package/dist/events/EventEmitter.d.ts +0 -115
  72. package/dist/events/EventEmitter.js +0 -198
  73. package/dist/events/index.d.ts +0 -7
  74. package/dist/events/index.js +0 -6
  75. package/dist/events/types.d.ts +0 -286
  76. package/dist/events/types.js +0 -9
  77. package/dist/examples/basic-usage.d.ts +0 -3
  78. package/dist/examples/basic-usage.js +0 -62
  79. package/dist/examples/run.d.ts +0 -1
  80. package/dist/examples/run.js +0 -4
  81. package/dist/index.d.ts +0 -39
  82. package/dist/index.js +0 -47
  83. package/dist/lifecycle/BatchOperations.d.ts +0 -147
  84. package/dist/lifecycle/BatchOperations.js +0 -251
  85. package/dist/lifecycle/LifecycleManager.d.ts +0 -116
  86. package/dist/lifecycle/LifecycleManager.js +0 -971
  87. package/dist/lifecycle/OriginalsAsset.d.ts +0 -164
  88. package/dist/lifecycle/OriginalsAsset.js +0 -380
  89. package/dist/lifecycle/ProvenanceQuery.d.ts +0 -126
  90. package/dist/lifecycle/ProvenanceQuery.js +0 -220
  91. package/dist/lifecycle/ResourceVersioning.d.ts +0 -73
  92. package/dist/lifecycle/ResourceVersioning.js +0 -127
  93. package/dist/migration/MigrationManager.d.ts +0 -86
  94. package/dist/migration/MigrationManager.js +0 -412
  95. package/dist/migration/audit/AuditLogger.d.ts +0 -51
  96. package/dist/migration/audit/AuditLogger.js +0 -156
  97. package/dist/migration/checkpoint/CheckpointManager.d.ts +0 -31
  98. package/dist/migration/checkpoint/CheckpointManager.js +0 -96
  99. package/dist/migration/checkpoint/CheckpointStorage.d.ts +0 -26
  100. package/dist/migration/checkpoint/CheckpointStorage.js +0 -89
  101. package/dist/migration/index.d.ts +0 -22
  102. package/dist/migration/index.js +0 -27
  103. package/dist/migration/operations/BaseMigration.d.ts +0 -48
  104. package/dist/migration/operations/BaseMigration.js +0 -83
  105. package/dist/migration/operations/PeerToBtcoMigration.d.ts +0 -25
  106. package/dist/migration/operations/PeerToBtcoMigration.js +0 -67
  107. package/dist/migration/operations/PeerToWebvhMigration.d.ts +0 -19
  108. package/dist/migration/operations/PeerToWebvhMigration.js +0 -46
  109. package/dist/migration/operations/WebvhToBtcoMigration.d.ts +0 -25
  110. package/dist/migration/operations/WebvhToBtcoMigration.js +0 -67
  111. package/dist/migration/rollback/RollbackManager.d.ts +0 -29
  112. package/dist/migration/rollback/RollbackManager.js +0 -146
  113. package/dist/migration/state/StateMachine.d.ts +0 -25
  114. package/dist/migration/state/StateMachine.js +0 -76
  115. package/dist/migration/state/StateTracker.d.ts +0 -36
  116. package/dist/migration/state/StateTracker.js +0 -123
  117. package/dist/migration/types.d.ts +0 -306
  118. package/dist/migration/types.js +0 -33
  119. package/dist/migration/validation/BitcoinValidator.d.ts +0 -13
  120. package/dist/migration/validation/BitcoinValidator.js +0 -83
  121. package/dist/migration/validation/CredentialValidator.d.ts +0 -13
  122. package/dist/migration/validation/CredentialValidator.js +0 -46
  123. package/dist/migration/validation/DIDCompatibilityValidator.d.ts +0 -16
  124. package/dist/migration/validation/DIDCompatibilityValidator.js +0 -127
  125. package/dist/migration/validation/LifecycleValidator.d.ts +0 -10
  126. package/dist/migration/validation/LifecycleValidator.js +0 -52
  127. package/dist/migration/validation/StorageValidator.d.ts +0 -10
  128. package/dist/migration/validation/StorageValidator.js +0 -65
  129. package/dist/migration/validation/ValidationPipeline.d.ts +0 -29
  130. package/dist/migration/validation/ValidationPipeline.js +0 -180
  131. package/dist/storage/LocalStorageAdapter.d.ts +0 -11
  132. package/dist/storage/LocalStorageAdapter.js +0 -53
  133. package/dist/storage/MemoryStorageAdapter.d.ts +0 -6
  134. package/dist/storage/MemoryStorageAdapter.js +0 -21
  135. package/dist/storage/StorageAdapter.d.ts +0 -16
  136. package/dist/storage/StorageAdapter.js +0 -1
  137. package/dist/storage/index.d.ts +0 -2
  138. package/dist/storage/index.js +0 -2
  139. package/dist/types/bitcoin.d.ts +0 -84
  140. package/dist/types/bitcoin.js +0 -1
  141. package/dist/types/common.d.ts +0 -82
  142. package/dist/types/common.js +0 -1
  143. package/dist/types/credentials.d.ts +0 -75
  144. package/dist/types/credentials.js +0 -1
  145. package/dist/types/did.d.ts +0 -26
  146. package/dist/types/did.js +0 -1
  147. package/dist/types/index.d.ts +0 -5
  148. package/dist/types/index.js +0 -5
  149. package/dist/types/network.d.ts +0 -78
  150. package/dist/types/network.js +0 -145
  151. package/dist/utils/EventLogger.d.ts +0 -71
  152. package/dist/utils/EventLogger.js +0 -232
  153. package/dist/utils/Logger.d.ts +0 -106
  154. package/dist/utils/Logger.js +0 -257
  155. package/dist/utils/MetricsCollector.d.ts +0 -110
  156. package/dist/utils/MetricsCollector.js +0 -264
  157. package/dist/utils/bitcoin-address.d.ts +0 -38
  158. package/dist/utils/bitcoin-address.js +0 -113
  159. package/dist/utils/cbor.d.ts +0 -2
  160. package/dist/utils/cbor.js +0 -9
  161. package/dist/utils/encoding.d.ts +0 -37
  162. package/dist/utils/encoding.js +0 -120
  163. package/dist/utils/hash.d.ts +0 -1
  164. package/dist/utils/hash.js +0 -5
  165. package/dist/utils/retry.d.ts +0 -10
  166. package/dist/utils/retry.js +0 -35
  167. package/dist/utils/satoshi-validation.d.ts +0 -60
  168. package/dist/utils/satoshi-validation.js +0 -156
  169. package/dist/utils/serialization.d.ts +0 -14
  170. package/dist/utils/serialization.js +0 -76
  171. package/dist/utils/telemetry.d.ts +0 -17
  172. package/dist/utils/telemetry.js +0 -24
  173. package/dist/utils/validation.d.ts +0 -5
  174. package/dist/utils/validation.js +0 -98
  175. package/dist/vc/CredentialManager.d.ts +0 -22
  176. package/dist/vc/CredentialManager.js +0 -227
  177. package/dist/vc/Issuer.d.ts +0 -27
  178. package/dist/vc/Issuer.js +0 -70
  179. package/dist/vc/Verifier.d.ts +0 -16
  180. package/dist/vc/Verifier.js +0 -50
  181. package/dist/vc/cryptosuites/bbs.d.ts +0 -44
  182. package/dist/vc/cryptosuites/bbs.js +0 -213
  183. package/dist/vc/cryptosuites/bbsSimple.d.ts +0 -9
  184. package/dist/vc/cryptosuites/bbsSimple.js +0 -12
  185. package/dist/vc/cryptosuites/eddsa.d.ts +0 -30
  186. package/dist/vc/cryptosuites/eddsa.js +0 -81
  187. package/dist/vc/documentLoader.d.ts +0 -16
  188. package/dist/vc/documentLoader.js +0 -59
  189. package/dist/vc/proofs/data-integrity.d.ts +0 -21
  190. package/dist/vc/proofs/data-integrity.js +0 -15
  191. package/dist/vc/utils/jsonld.d.ts +0 -2
  192. package/dist/vc/utils/jsonld.js +0 -15
  193. package/src/adapters/FeeOracleMock.ts +0 -9
  194. package/src/adapters/index.ts +0 -5
  195. package/src/adapters/providers/OrdHttpProvider.ts +0 -126
  196. package/src/adapters/providers/OrdMockProvider.ts +0 -101
  197. package/src/adapters/types.ts +0 -66
  198. package/src/bitcoin/BitcoinManager.ts +0 -330
  199. package/src/bitcoin/BroadcastClient.ts +0 -54
  200. package/src/bitcoin/OrdinalsClient.ts +0 -119
  201. package/src/bitcoin/PSBTBuilder.ts +0 -106
  202. package/src/bitcoin/fee-calculation.ts +0 -38
  203. package/src/bitcoin/providers/OrdNodeProvider.ts +0 -92
  204. package/src/bitcoin/providers/OrdinalsProvider.ts +0 -56
  205. package/src/bitcoin/providers/types.ts +0 -59
  206. package/src/bitcoin/transactions/commit.ts +0 -465
  207. package/src/bitcoin/transactions/index.ts +0 -13
  208. package/src/bitcoin/transfer.ts +0 -43
  209. package/src/bitcoin/utxo-selection.ts +0 -322
  210. package/src/bitcoin/utxo.ts +0 -113
  211. package/src/contexts/credentials-v1.json +0 -237
  212. package/src/contexts/credentials-v2-examples.json +0 -5
  213. package/src/contexts/credentials-v2.json +0 -340
  214. package/src/contexts/credentials.json +0 -237
  215. package/src/contexts/data-integrity-v2.json +0 -81
  216. package/src/contexts/dids.json +0 -58
  217. package/src/contexts/ed255192020.json +0 -93
  218. package/src/contexts/ordinals-plus.json +0 -23
  219. package/src/contexts/originals.json +0 -22
  220. package/src/core/OriginalsSDK.ts +0 -416
  221. package/src/crypto/Multikey.ts +0 -194
  222. package/src/crypto/Signer.ts +0 -254
  223. package/src/crypto/noble-init.ts +0 -121
  224. package/src/did/BtcoDidResolver.ts +0 -227
  225. package/src/did/DIDManager.ts +0 -694
  226. package/src/did/Ed25519Verifier.ts +0 -68
  227. package/src/did/KeyManager.ts +0 -236
  228. package/src/did/WebVHManager.ts +0 -489
  229. package/src/did/createBtcoDidDocument.ts +0 -59
  230. package/src/did/providers/OrdinalsClientProviderAdapter.ts +0 -68
  231. package/src/events/EventEmitter.ts +0 -222
  232. package/src/events/index.ts +0 -19
  233. package/src/events/types.ts +0 -331
  234. package/src/examples/basic-usage.ts +0 -78
  235. package/src/examples/run.ts +0 -5
  236. package/src/index.ts +0 -84
  237. package/src/lifecycle/BatchOperations.ts +0 -373
  238. package/src/lifecycle/LifecycleManager.ts +0 -1218
  239. package/src/lifecycle/OriginalsAsset.ts +0 -524
  240. package/src/lifecycle/ProvenanceQuery.ts +0 -280
  241. package/src/lifecycle/ResourceVersioning.ts +0 -163
  242. package/src/migration/MigrationManager.ts +0 -527
  243. package/src/migration/audit/AuditLogger.ts +0 -176
  244. package/src/migration/checkpoint/CheckpointManager.ts +0 -112
  245. package/src/migration/checkpoint/CheckpointStorage.ts +0 -101
  246. package/src/migration/index.ts +0 -33
  247. package/src/migration/operations/BaseMigration.ts +0 -126
  248. package/src/migration/operations/PeerToBtcoMigration.ts +0 -105
  249. package/src/migration/operations/PeerToWebvhMigration.ts +0 -62
  250. package/src/migration/operations/WebvhToBtcoMigration.ts +0 -105
  251. package/src/migration/rollback/RollbackManager.ts +0 -170
  252. package/src/migration/state/StateMachine.ts +0 -92
  253. package/src/migration/state/StateTracker.ts +0 -156
  254. package/src/migration/types.ts +0 -344
  255. package/src/migration/validation/BitcoinValidator.ts +0 -107
  256. package/src/migration/validation/CredentialValidator.ts +0 -62
  257. package/src/migration/validation/DIDCompatibilityValidator.ts +0 -151
  258. package/src/migration/validation/LifecycleValidator.ts +0 -64
  259. package/src/migration/validation/StorageValidator.ts +0 -79
  260. package/src/migration/validation/ValidationPipeline.ts +0 -213
  261. package/src/storage/LocalStorageAdapter.ts +0 -61
  262. package/src/storage/MemoryStorageAdapter.ts +0 -29
  263. package/src/storage/StorageAdapter.ts +0 -25
  264. package/src/storage/index.ts +0 -3
  265. package/src/types/bitcoin.ts +0 -98
  266. package/src/types/common.ts +0 -92
  267. package/src/types/credentials.ts +0 -88
  268. package/src/types/did.ts +0 -31
  269. package/src/types/external-shims.d.ts +0 -53
  270. package/src/types/index.ts +0 -7
  271. package/src/types/network.ts +0 -175
  272. package/src/utils/EventLogger.ts +0 -298
  273. package/src/utils/Logger.ts +0 -322
  274. package/src/utils/MetricsCollector.ts +0 -358
  275. package/src/utils/bitcoin-address.ts +0 -130
  276. package/src/utils/cbor.ts +0 -12
  277. package/src/utils/encoding.ts +0 -127
  278. package/src/utils/hash.ts +0 -6
  279. package/src/utils/retry.ts +0 -46
  280. package/src/utils/satoshi-validation.ts +0 -196
  281. package/src/utils/serialization.ts +0 -96
  282. package/src/utils/telemetry.ts +0 -40
  283. package/src/utils/validation.ts +0 -119
  284. package/src/vc/CredentialManager.ts +0 -273
  285. package/src/vc/Issuer.ts +0 -100
  286. package/src/vc/Verifier.ts +0 -47
  287. package/src/vc/cryptosuites/bbs.ts +0 -253
  288. package/src/vc/cryptosuites/bbsSimple.ts +0 -21
  289. package/src/vc/cryptosuites/eddsa.ts +0 -99
  290. package/src/vc/documentLoader.ts +0 -67
  291. package/src/vc/proofs/data-integrity.ts +0 -33
  292. package/src/vc/utils/jsonld.ts +0 -18
  293. package/test/logs/did_webvh_QmNTn9Kkp8dQ75WrF9xqJ2kuDp9QhKc3aPiERRMj8XoTBN_example_com.jsonl +0 -1
  294. package/test/logs/did_webvh_QmNu4MNr8Lr5txx5gYNhuhZDchXsZEu3hJXKYuphpWTPDp_example_com_users_etc_passwd.jsonl +0 -1
  295. package/test/logs/did_webvh_QmR9MrGZACzjKETA8SBRNCKG11HxU85c4bVR2qN5eDCfsD_example_com.jsonl +0 -1
  296. package/test/logs/did_webvh_QmUc5suaqRM2P4nrXxZwqYMfqzhdMqjuL7oJaJbEpCQVCd_example_com_users_etc_passwd.jsonl +0 -1
  297. package/test/logs/did_webvh_QmUkiB2RCV2VZ1RTXsCebWN25Eiy9TLvpzDWAJNjhgvB4X_example_com_etc_passwd.jsonl +0 -1
  298. package/test/logs/did_webvh_QmUoRTe8UMwpAQXZSAW7pjAgZK1tq2X3C6Kfxq3UXGcaGy_example_com_secret.jsonl +0 -1
  299. package/test/logs/did_webvh_QmWWot3chx1t6KwTmcE5i2FeDZ5JMkQw3qXycsKDVmJ9Be_example_com_users_alice.jsonl +0 -1
  300. package/test/logs/did_webvh_QmWvVgALL5kjZdpgR7KZay7J8UiiUr834kkRmWeFAxjAuC_example_com_users_etc_passwd.jsonl +0 -1
  301. package/test/logs/did_webvh_QmWwaRQHUZAFcKihFC6xR6tRTTrQhHPTku6azf1egWbpy1_example_com_users_alice.jsonl +0 -1
  302. package/test/logs/did_webvh_QmXJLtkz23r7AozbtXsZMKWnVU6rd38CkVtjdWuATU3Yp6_example_com_users_alice123_profile.jsonl +0 -1
  303. package/test/logs/did_webvh_QmYsce448po14oDE1wXbyaP6wY9HQgHSKLwdezn1k577SF_example_com_my_org_user_name_test_123.jsonl +0 -1
  304. package/test/logs/did_webvh_QmZBeNzzqajxdfwcDUPZ4P8C5YSXyRztrAwmPiKuKUxmAK_example_com.jsonl +0 -1
  305. package/test/logs/did_webvh_QmZhJsqxizwVbRtqCUkmE6XQunSxtxMt3gbTYadVBNAaEq_example_com.jsonl +0 -1
  306. package/test/logs/did_webvh_QmZk7NHU2D57RzzbMq4tWW9gBa9AqtVTWfiRM6RFdwGVj2_example_com.jsonl +0 -1
  307. package/test/logs/did_webvh_QmZshSXp9w8ovH62zGGBS1b5pGGPsuYiu1VQ935sga2hWF_example_com_level1_level2.jsonl +0 -1
  308. package/test/logs/did_webvh_QmbWAmw7HQL7vKJyCsctZihXf1rmT4sGvggKCPKWcUWjw1_example_com.jsonl +0 -1
  309. package/test/logs/did_webvh_QmbdLUMbYs3juR39TLB6hhrFWLcNg45ybUzeBJCS1MhCh1_example_com_C_Windows_System32.jsonl +0 -1
  310. package/test/logs/did_webvh_QmcaQ1Ma4gkSbae85aCm8Mv4rvdT2Sb2RR3JzYwrm5XBq8_example_com_etc_passwd.jsonl +0 -1
  311. package/test/logs/did_webvh_QmcbA7WQhsBqZSoDpKJHjV8Q5o53h8vmgJhQfo6rqTY5ho_example_com.jsonl +0 -1
  312. package/test/logs/did_webvh_Qmdy8uWr2gkUJrXsThynAug3DASTWwb3onEj89LKmMGZYB_example_com.jsonl +0 -1
  313. package/tests/__mocks__/bbs-signatures.js +0 -17
  314. package/tests/__mocks__/mf-base58.js +0 -24
  315. package/tests/e2e/README.md +0 -97
  316. package/tests/e2e/example.spec.ts +0 -78
  317. package/tests/fixtures/did-documents.ts +0 -247
  318. package/tests/index.test.ts +0 -21
  319. package/tests/integration/BatchOperations.test.ts +0 -531
  320. package/tests/integration/CompleteLifecycle.e2e.test.ts +0 -735
  321. package/tests/integration/CredentialManager.test.ts +0 -42
  322. package/tests/integration/DIDManager.test.ts +0 -41
  323. package/tests/integration/DidPeerToWebVhFlow.test.ts +0 -351
  324. package/tests/integration/Events.test.ts +0 -435
  325. package/tests/integration/Lifecycle.transfer.btco.integration.test.ts +0 -25
  326. package/tests/integration/LifecycleManager.test.ts +0 -21
  327. package/tests/integration/MultikeyFlow.test.ts +0 -52
  328. package/tests/integration/TelemetryIntegration.test.ts +0 -395
  329. package/tests/integration/WebVhPublish.test.ts +0 -48
  330. package/tests/integration/migration/peer-to-webvh.test.ts +0 -172
  331. package/tests/manual/test-commit-creation.ts +0 -323
  332. package/tests/mocks/MockKeyStore.ts +0 -38
  333. package/tests/mocks/adapters/MemoryStorageAdapter.ts +0 -24
  334. package/tests/mocks/adapters/MockFeeOracle.ts +0 -11
  335. package/tests/mocks/adapters/MockOrdinalsProvider.ts +0 -76
  336. package/tests/mocks/adapters/OrdMockProvider.test.ts +0 -176
  337. package/tests/mocks/adapters/index.ts +0 -6
  338. package/tests/performance/BatchOperations.perf.test.ts +0 -403
  339. package/tests/performance/logging.perf.test.ts +0 -336
  340. package/tests/sdk.test.ts +0 -43
  341. package/tests/security/bitcoin-penetration-tests.test.ts +0 -622
  342. package/tests/setup.bun.ts +0 -69
  343. package/tests/setup.jest.ts +0 -23
  344. package/tests/stress/batch-operations-stress.test.ts +0 -571
  345. package/tests/unit/adapters/FeeOracleMock.test.ts +0 -40
  346. package/tests/unit/bitcoin/BitcoinManager.test.ts +0 -293
  347. package/tests/unit/bitcoin/BroadcastClient.test.ts +0 -52
  348. package/tests/unit/bitcoin/OrdNodeProvider.test.ts +0 -53
  349. package/tests/unit/bitcoin/OrdinalsClient.test.ts +0 -381
  350. package/tests/unit/bitcoin/OrdinalsClientProvider.test.ts +0 -102
  351. package/tests/unit/bitcoin/PSBTBuilder.test.ts +0 -84
  352. package/tests/unit/bitcoin/fee-calculation.test.ts +0 -261
  353. package/tests/unit/bitcoin/transactions/commit.test.ts +0 -649
  354. package/tests/unit/bitcoin/transfer.test.ts +0 -31
  355. package/tests/unit/bitcoin/utxo-selection-new.test.ts +0 -502
  356. package/tests/unit/bitcoin/utxo.more.test.ts +0 -39
  357. package/tests/unit/bitcoin/utxo.selection.test.ts +0 -38
  358. package/tests/unit/core/OriginalsSDK.test.ts +0 -152
  359. package/tests/unit/crypto/Multikey.test.ts +0 -206
  360. package/tests/unit/crypto/Signer.test.ts +0 -408
  361. package/tests/unit/did/BtcoDidResolver.test.ts +0 -611
  362. package/tests/unit/did/DIDManager.more.test.ts +0 -43
  363. package/tests/unit/did/DIDManager.test.ts +0 -185
  364. package/tests/unit/did/Ed25519Verifier.test.ts +0 -160
  365. package/tests/unit/did/KeyManager.test.ts +0 -452
  366. package/tests/unit/did/OrdinalsClientProviderAdapter.test.ts +0 -45
  367. package/tests/unit/did/WebVHManager.test.ts +0 -435
  368. package/tests/unit/did/createBtcoDidDocument.test.ts +0 -67
  369. package/tests/unit/did/providers/OrdinalsClientProviderAdapter.test.ts +0 -159
  370. package/tests/unit/events/EventEmitter.test.ts +0 -407
  371. package/tests/unit/lifecycle/BatchOperations.test.ts +0 -527
  372. package/tests/unit/lifecycle/LifecycleManager.keymanagement.test.ts +0 -312
  373. package/tests/unit/lifecycle/LifecycleManager.prov.test.ts +0 -18
  374. package/tests/unit/lifecycle/LifecycleManager.test.ts +0 -213
  375. package/tests/unit/lifecycle/LifecycleManager.transfer.unit.test.ts +0 -30
  376. package/tests/unit/lifecycle/OriginalsAsset.test.ts +0 -176
  377. package/tests/unit/lifecycle/ProvenanceQuery.test.ts +0 -577
  378. package/tests/unit/lifecycle/ResourceVersioning.test.ts +0 -651
  379. package/tests/unit/storage/MemoryStorageAdapter.test.ts +0 -93
  380. package/tests/unit/types/network.test.ts +0 -255
  381. package/tests/unit/utils/EventIntegration.test.ts +0 -384
  382. package/tests/unit/utils/Logger.test.ts +0 -473
  383. package/tests/unit/utils/MetricsCollector.test.ts +0 -358
  384. package/tests/unit/utils/bitcoin-address.test.ts +0 -250
  385. package/tests/unit/utils/cbor.test.ts +0 -35
  386. package/tests/unit/utils/encoding.test.ts +0 -318
  387. package/tests/unit/utils/hash.test.ts +0 -12
  388. package/tests/unit/utils/retry.test.ts +0 -100
  389. package/tests/unit/utils/satoshi-validation.test.ts +0 -354
  390. package/tests/unit/utils/serialization.test.ts +0 -124
  391. package/tests/unit/utils/telemetry.test.ts +0 -52
  392. package/tests/unit/utils/validation.test.ts +0 -141
  393. package/tests/unit/vc/CredentialManager.test.ts +0 -487
  394. package/tests/unit/vc/Issuer.test.ts +0 -107
  395. package/tests/unit/vc/Verifier.test.ts +0 -525
  396. package/tests/unit/vc/bbs.test.ts +0 -282
  397. package/tests/unit/vc/cryptosuites/eddsa.test.ts +0 -398
  398. package/tests/unit/vc/documentLoader.test.ts +0 -121
  399. package/tests/unit/vc/proofs/data-integrity.test.ts +0 -24
  400. package/tsconfig.json +0 -31
  401. package/tsconfig.test.json +0 -15
@@ -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
-
@@ -1,322 +0,0 @@
1
- /**
2
- * UTXO Selection for Ordinals Transactions
3
- *
4
- * This module implements functions for selecting UTXOs for ordinals transactions.
5
- * It provides a simple coin selection algorithm optimized for ordinals inscriptions.
6
- *
7
- * Ported from legacy ordinalsplus transaction infrastructure.
8
- */
9
-
10
- import {
11
- Utxo,
12
- DUST_LIMIT_SATS,
13
- ResourceUtxo,
14
- ResourceUtxoSelectionOptions,
15
- ResourceUtxoSelectionResult
16
- } from '../types/bitcoin.js';
17
- import { calculateFee } from './fee-calculation.js';
18
-
19
- // Minimum dust limit for Bitcoin outputs (546 satoshis)
20
- const MIN_DUST_LIMIT = DUST_LIMIT_SATS;
21
-
22
- /**
23
- * Estimates transaction size in vbytes based on input and output counts
24
- * This is a simplified calculation, and actual size may vary based on script types
25
- *
26
- * @param inputCount Number of inputs in the transaction
27
- * @param outputCount Number of outputs in the transaction
28
- * @returns Estimated transaction size in vbytes
29
- */
30
- export function estimateTransactionSize(inputCount: number, outputCount: number): number {
31
- // Rough estimation based on segwit transaction format
32
- // Transaction overhead: ~10 vbytes
33
- // Each input: ~68 vbytes (P2WPKH)
34
- // Each output: ~31 vbytes
35
- return 10 + (inputCount * 68) + (outputCount * 31);
36
- }
37
-
38
- /**
39
- * Tags UTXOs as resource-containing or regular based on provided data
40
- *
41
- * @param utxos List of UTXOs to tag
42
- * @param resourceData Optional data about which UTXOs contain resources
43
- * @returns Tagged ResourceUtxo[] list with hasResource flags set appropriately
44
- */
45
- export function tagResourceUtxos(
46
- utxos: ResourceUtxo[],
47
- resourceData?: {[utxoId: string]: boolean}
48
- ): ResourceUtxo[] {
49
- return utxos.map(utxo => {
50
- const utxoId = `${utxo.txid}:${utxo.vout}`;
51
- const hasResource = resourceData ? !!resourceData[utxoId] : utxo.hasResource || false;
52
-
53
- return {
54
- ...utxo,
55
- hasResource
56
- };
57
- });
58
- }
59
-
60
- /**
61
- * Options for simple UTXO selection
62
- */
63
- export interface SimpleUtxoSelectionOptions {
64
- /** Target amount to reach (in satoshis) */
65
- targetAmount: number;
66
- /** Optional maximum amount of UTXOs to use */
67
- maxNumUtxos?: number;
68
- /** Optional preference for UTXO selection strategy */
69
- strategy?: 'minimize_change' | 'minimize_inputs' | 'optimize_size';
70
- }
71
-
72
- /**
73
- * Result of simple UTXO selection
74
- */
75
- export interface SimpleUtxoSelectionResult {
76
- /** Selected UTXOs for the transaction */
77
- selectedUtxos: Utxo[];
78
- /** Total value of selected UTXOs */
79
- totalInputValue: number;
80
- /** Estimated change amount (if any) */
81
- changeAmount: number;
82
- }
83
-
84
- /**
85
- * Selects UTXOs to cover a target amount using a simplified approach.
86
- * This version is used specifically for commit transactions where we
87
- * don't need the more complex resource-aware selection.
88
- *
89
- * @param utxos - Available UTXOs
90
- * @param options - Target amount or detailed options
91
- * @returns Selected UTXOs and related information
92
- */
93
- export function selectUtxos(
94
- utxos: Utxo[],
95
- options: number | SimpleUtxoSelectionOptions
96
- ): SimpleUtxoSelectionResult {
97
- // Handle simple number input
98
- const targetAmount = typeof options === 'number'
99
- ? options
100
- : options.targetAmount;
101
-
102
- const maxNumUtxos = typeof options === 'number'
103
- ? undefined
104
- : options.maxNumUtxos;
105
-
106
- const strategy = typeof options === 'number'
107
- ? 'minimize_inputs'
108
- : options.strategy || 'minimize_inputs';
109
-
110
- // Validate inputs
111
- if (!utxos || utxos.length === 0) {
112
- throw new Error('No UTXOs provided for selection.');
113
- }
114
-
115
- if (targetAmount <= 0) {
116
- throw new Error(`Invalid target amount: ${targetAmount}`);
117
- }
118
-
119
- // Sort UTXOs based on selected strategy
120
- let sortedUtxos = [...utxos];
121
-
122
- if (strategy === 'minimize_inputs') {
123
- // Sort by value descending to use fewest inputs
124
- sortedUtxos.sort((a, b) => b.value - a.value);
125
- } else if (strategy === 'minimize_change') {
126
- // Sort by value ascending to minimize change
127
- sortedUtxos.sort((a, b) => a.value - b.value);
128
- } else if (strategy === 'optimize_size') {
129
- // Sort by value/size ratio (value density) for optimal fee efficiency
130
- // For now, just sort by value as a reasonable approximation
131
- sortedUtxos.sort((a, b) => b.value - a.value);
132
- }
133
-
134
- const selected: Utxo[] = [];
135
- let totalValue = 0;
136
-
137
- // Add UTXOs until we reach the target amount
138
- for (const utxo of sortedUtxos) {
139
- // Skip invalid UTXOs
140
- if (!utxo.txid || utxo.vout === undefined || !utxo.value) {
141
- console.warn(`Skipping invalid UTXO: ${utxo.txid}:${utxo.vout}`);
142
- continue;
143
- }
144
-
145
- selected.push(utxo);
146
- totalValue += utxo.value;
147
-
148
- // Check if we've reached the target
149
- if (totalValue >= targetAmount) {
150
- break;
151
- }
152
-
153
- // Check if we've reached the maximum allowed number of UTXOs
154
- if (maxNumUtxos && selected.length >= maxNumUtxos) {
155
- break;
156
- }
157
- }
158
-
159
- // Check if we have enough funds
160
- if (totalValue < targetAmount) {
161
- throw new Error(`Insufficient funds. Required: ${targetAmount}, Available: ${totalValue} from ${utxos.length} UTXOs.`);
162
- }
163
-
164
- // Calculate change amount
165
- const changeAmount = totalValue - targetAmount;
166
-
167
- return {
168
- selectedUtxos: selected,
169
- totalInputValue: totalValue,
170
- changeAmount
171
- };
172
- }
173
-
174
- /**
175
- * Selects UTXOs for a transaction, excluding UTXOs with resources unless explicitly allowed
176
- *
177
- * @param availableUtxos List of available UTXOs to select from
178
- * @param options Configuration options for the selection process
179
- * @returns Selection result with chosen UTXOs and fee information
180
- * @throws Error if insufficient funds or if all available UTXOs contain resources
181
- */
182
- export function selectResourceUtxos(
183
- availableUtxos: ResourceUtxo[],
184
- options: ResourceUtxoSelectionOptions
185
- ): ResourceUtxoSelectionResult {
186
- const {
187
- requiredAmount,
188
- feeRate,
189
- allowResourceUtxos = false,
190
- preferOlder = false,
191
- preferCloserAmount = false,
192
- avoidUtxoIds = []
193
- } = options;
194
-
195
- // Convert requiredAmount to bigint for compatibility with fee calculations
196
- const requiredAmountBigInt = BigInt(requiredAmount);
197
-
198
- // Filter out UTXOs to avoid and those with resources if not allowed
199
- let eligibleUtxos = availableUtxos.filter(utxo => {
200
- const utxoId = `${utxo.txid}:${utxo.vout}`;
201
- const shouldAvoid = avoidUtxoIds.includes(utxoId);
202
- const containsResource = utxo.hasResource === true;
203
-
204
- // Skip this UTXO if it's in the avoid list
205
- if (shouldAvoid) return false;
206
-
207
- // Skip this UTXO if it contains a resource and we're not allowed to use resource UTXOs
208
- if (containsResource && !allowResourceUtxos) return false;
209
-
210
- return true;
211
- });
212
-
213
- if (eligibleUtxos.length === 0) {
214
- // Special error message if we have UTXOs but they all contain resources
215
- if (availableUtxos.length > 0 && availableUtxos.every(u => u.hasResource)) {
216
- throw new Error('All available UTXOs contain resources and cannot be used for fees/payments. Please add non-resource UTXOs to your wallet.');
217
- }
218
- throw new Error('No eligible UTXOs available for selection');
219
- }
220
-
221
- // Apply sorting strategy
222
- if (preferCloserAmount) {
223
- // Sort by closest to required amount (but still above it)
224
- eligibleUtxos.sort((a, b) => {
225
- const aDiff = a.value - requiredAmount;
226
- const bDiff = b.value - requiredAmount;
227
-
228
- // Prioritize UTXOs that cover the amount
229
- if (aDiff >= 0 && bDiff < 0) return -1;
230
- if (aDiff < 0 && bDiff >= 0) return 1;
231
-
232
- // If both cover or both don't cover, prefer the one closer to required amount
233
- return Math.abs(aDiff) - Math.abs(bDiff);
234
- });
235
- } else if (preferOlder) {
236
- // Prefer older UTXOs (by txid as a proxy for age - not perfect but simple)
237
- eligibleUtxos.sort((a, b) => a.txid.localeCompare(b.txid));
238
- } else {
239
- // Default: sort by value descending (largest first)
240
- eligibleUtxos.sort((a, b) => b.value - a.value);
241
- }
242
-
243
- // Initial fee estimation (1 input, 2 outputs - payment and change)
244
- let estimatedVbytes = estimateTransactionSize(1, 2);
245
- let estimatedFee = calculateFee(estimatedVbytes, feeRate);
246
-
247
- // Target amount including estimated fee
248
- let targetAmount = requiredAmountBigInt + estimatedFee;
249
-
250
- // Select UTXOs
251
- const selectedUtxos: ResourceUtxo[] = [];
252
- let totalSelectedValue = 0n;
253
-
254
- // First pass: try to find a single UTXO that covers the amount
255
- const singleUtxo = eligibleUtxos.find(utxo => BigInt(utxo.value) >= targetAmount);
256
-
257
- if (singleUtxo) {
258
- selectedUtxos.push(singleUtxo);
259
- totalSelectedValue = BigInt(singleUtxo.value);
260
- } else {
261
- // Second pass: accumulate UTXOs until we reach the target amount
262
- for (const utxo of eligibleUtxos) {
263
- selectedUtxos.push(utxo);
264
- totalSelectedValue += BigInt(utxo.value);
265
-
266
- // Recalculate fee as we add more inputs
267
- estimatedVbytes = estimateTransactionSize(selectedUtxos.length, 2);
268
- estimatedFee = calculateFee(estimatedVbytes, feeRate);
269
- targetAmount = requiredAmountBigInt + estimatedFee;
270
-
271
- if (totalSelectedValue >= targetAmount) {
272
- break;
273
- }
274
- }
275
- }
276
-
277
- // Final fee calculation based on actual number of inputs
278
- estimatedVbytes = estimateTransactionSize(selectedUtxos.length, 2);
279
- estimatedFee = calculateFee(estimatedVbytes, feeRate);
280
-
281
- // Check if we have enough funds
282
- if (totalSelectedValue < requiredAmountBigInt + estimatedFee) {
283
- throw new Error(`Insufficient funds. Required: ${requiredAmountBigInt + estimatedFee}, Available: ${totalSelectedValue}`);
284
- }
285
-
286
- // Calculate change
287
- let changeAmount = totalSelectedValue - requiredAmountBigInt - estimatedFee;
288
-
289
- // If change is less than dust limit, add it to the fee
290
- if (changeAmount > 0n && changeAmount < BigInt(MIN_DUST_LIMIT)) {
291
- estimatedFee += changeAmount;
292
- changeAmount = 0n;
293
- }
294
-
295
- return {
296
- selectedUtxos,
297
- totalSelectedValue: Number(totalSelectedValue),
298
- estimatedFee: Number(estimatedFee),
299
- changeAmount: Number(changeAmount)
300
- };
301
- }
302
-
303
- /**
304
- * Convenience function to select UTXOs for a payment, explicitly avoiding resource UTXOs
305
- *
306
- * @param availableUtxos List of available UTXOs
307
- * @param requiredAmount Amount needed for the payment in satoshis
308
- * @param feeRate Fee rate in satoshis per vbyte
309
- * @returns Selection result with UTXOs, fee and change information
310
- */
311
- export function selectUtxosForPayment(
312
- availableUtxos: ResourceUtxo[],
313
- requiredAmount: number,
314
- feeRate: number
315
- ): ResourceUtxoSelectionResult {
316
- return selectResourceUtxos(availableUtxos, {
317
- requiredAmount,
318
- feeRate,
319
- allowResourceUtxos: false // Never use resource UTXOs for payments
320
- });
321
- }
322
-
@@ -1,113 +0,0 @@
1
- import { DUST_LIMIT_SATS, Utxo } from '../types';
2
-
3
- export interface FeeEstimateOptions {
4
- bytesPerInput?: number;
5
- bytesPerOutput?: number;
6
- baseTxBytes?: number;
7
- }
8
-
9
- export interface SelectionOptions {
10
- feeRateSatsPerVb: number; // sats/vbyte
11
- targetAmountSats: number; // includes recipient output value
12
- allowLocked?: boolean;
13
- forbidInscriptionBearingInputs?: boolean;
14
- changeAddress?: string;
15
- feeEstimate?: FeeEstimateOptions;
16
- }
17
-
18
- export interface SelectionResult {
19
- selected: Utxo[];
20
- feeSats: number;
21
- changeSats: number;
22
- }
23
-
24
- export const DEFAULT_FEE_ESTIMATE: Required<FeeEstimateOptions> = {
25
- bytesPerInput: 148,
26
- bytesPerOutput: 34,
27
- baseTxBytes: 10
28
- };
29
-
30
- export function estimateFeeSats(numInputs: number, numOutputs: number, feeRateSatsPerVb: number, feeEstimate: FeeEstimateOptions = {}): number {
31
- const est = { ...DEFAULT_FEE_ESTIMATE, ...feeEstimate };
32
- const bytes = est.baseTxBytes + numInputs * est.bytesPerInput + numOutputs * est.bytesPerOutput;
33
- return Math.ceil(bytes * feeRateSatsPerVb);
34
- }
35
-
36
- export class UtxoSelectionError extends Error {
37
- code: 'INSUFFICIENT_FUNDS' | 'TOO_LOW_FEE' | 'DUST_OUTPUT' | 'CONFLICTING_LOCKS' | 'SAT_SAFETY';
38
- constructor(code: UtxoSelectionError['code'], message?: string) {
39
- super(message || code);
40
- this.code = code;
41
- }
42
- }
43
-
44
- export function selectUtxos(utxos: Utxo[], options: SelectionOptions): SelectionResult {
45
- const { feeRateSatsPerVb, targetAmountSats, allowLocked, forbidInscriptionBearingInputs, feeEstimate } = options;
46
- if (feeRateSatsPerVb <= 0) {
47
- const err = new UtxoSelectionError('TOO_LOW_FEE', 'TOO_LOW_FEE');
48
- throw err;
49
- }
50
- if (targetAmountSats < DUST_LIMIT_SATS) {
51
- const err = new UtxoSelectionError('DUST_OUTPUT', 'DUST_OUTPUT');
52
- throw err;
53
- }
54
-
55
- // Filter UTXOs based on policy
56
- let candidateUtxos = utxos.slice().filter(u => typeof u.value === 'number' && u.value > 0);
57
- const hasLocked = candidateUtxos.some(u => u.locked);
58
- if (hasLocked && !allowLocked) {
59
- // If excluding locked leaves insufficient funds, surface a specific error later; but first mark conflict
60
- // We'll check after filtering
61
- }
62
-
63
- if (!allowLocked) {
64
- candidateUtxos = candidateUtxos.filter(u => !u.locked);
65
- }
66
- if (forbidInscriptionBearingInputs) {
67
- candidateUtxos = candidateUtxos.filter(u => !u.inscriptions || u.inscriptions.length === 0);
68
- }
69
-
70
- // Greedy accumulate until amount + fee is satisfied. Start with 2 outputs (recipient + change), adjust if change is dust.
71
- const selected: Utxo[] = [];
72
- let accumulated = 0;
73
-
74
- // Sort largest first to reduce change outputs and input count
75
- candidateUtxos.sort((a, b) => b.value - a.value);
76
-
77
- // We'll iteratively include inputs and recompute fee until covered
78
- for (const utxo of candidateUtxos) {
79
- selected.push(utxo);
80
- accumulated += utxo.value;
81
-
82
- // Assume two outputs initially
83
- let fee = estimateFeeSats(selected.length, 2, feeRateSatsPerVb, feeEstimate);
84
- let required = targetAmountSats + fee;
85
-
86
- if (accumulated >= required) {
87
- // Compute change and dust policy
88
- let change = accumulated - required;
89
- if (change > 0 && change < DUST_LIMIT_SATS) {
90
- // If change would be dust, try recomputing fee for single output (recipient only)
91
- fee = estimateFeeSats(selected.length, 1, feeRateSatsPerVb, feeEstimate);
92
- required = targetAmountSats + fee;
93
- change = accumulated - required;
94
- if (change > 0 && change < DUST_LIMIT_SATS) {
95
- // Force add to fee (better than creating dust)
96
- change = 0;
97
- }
98
- }
99
- if (accumulated >= targetAmountSats + fee) {
100
- return { selected, feeSats: fee, changeSats: Math.max(0, change) };
101
- }
102
- }
103
- }
104
-
105
- // If we got here, insufficient funds with the given policy
106
- if (hasLocked && !allowLocked) {
107
- const err = new UtxoSelectionError('CONFLICTING_LOCKS', 'CONFLICTING_LOCKS');
108
- throw err;
109
- }
110
- const err = new UtxoSelectionError('INSUFFICIENT_FUNDS', 'INSUFFICIENT_FUNDS');
111
- throw err;
112
- }
113
-