@dashevo/wasm-dpp 0.23.0-dev.15 → 0.24.0-dev.10

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 (272) hide show
  1. package/.eslintignore +1 -0
  2. package/Cargo.toml +23 -0
  3. package/README.md +21 -6
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.js +2 -0
  6. package/dist/index.js.LICENSE.txt +8 -0
  7. package/dist/lib/patchIdentifier.d.ts +2 -0
  8. package/dist/wasm/wasm_dpp.d.ts +2756 -0
  9. package/index.ts +30 -0
  10. package/karma.conf.js +6 -3
  11. package/lib/patchIdentifier.ts +37 -0
  12. package/lib/test/.eslintrc +9 -0
  13. package/lib/test/bootstrap.js +27 -0
  14. package/lib/test/expect/expectError.js +34 -0
  15. package/lib/test/karma/loader.js +6 -0
  16. package/lib/test/utils/generateRandomIdentifierAsync.js +14 -0
  17. package/package.json +31 -55
  18. package/scripts/build.sh +69 -0
  19. package/scripts/clean.sh +4 -0
  20. package/src/bls_adapter.rs +71 -0
  21. package/src/buffer.rs +15 -0
  22. package/src/dash_platform_protocol.rs +26 -0
  23. package/src/data_contract/data_contract.rs +290 -0
  24. package/src/data_contract/errors/data_contract_already_exists.rs +1 -0
  25. package/src/data_contract/errors/invalid_data_contract.rs +29 -0
  26. package/src/data_contract/errors/invalid_document_type.rs +33 -0
  27. package/src/data_contract/errors/mod.rs +37 -0
  28. package/src/data_contract/index.rs +61 -0
  29. package/src/data_contract/mod.rs +10 -0
  30. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +37 -0
  31. package/src/data_contract/state_transition/mod.rs +3 -0
  32. package/src/data_contract_factory/data_contract_factory.rs +155 -0
  33. package/src/data_contract_factory/mod.rs +1 -0
  34. package/src/document/errors/document_already_exists_error.rs +28 -0
  35. package/src/document/errors/document_not_provided_error.rs +28 -0
  36. package/src/document/errors/invalid_action_name_error.rs +24 -0
  37. package/src/document/errors/invalid_document_action_error.rs +28 -0
  38. package/src/document/errors/invalid_document_error.rs +32 -0
  39. package/src/document/errors/invalid_initial_revision_error.rs +25 -0
  40. package/src/document/errors/mismatch_owners_ids_error.rs +27 -0
  41. package/src/document/errors/mod.rs +55 -0
  42. package/src/document/errors/no_documents_supplied_error.rs +22 -0
  43. package/src/document/mod.rs +158 -0
  44. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +22 -0
  45. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +22 -0
  46. package/src/document/state_transition/document_batch_transition/document_transition/document_update_transition.rs +22 -0
  47. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +24 -0
  48. package/src/document/state_transition/document_batch_transition/mod.rs +1 -0
  49. package/src/document/state_transition/mod.rs +1 -0
  50. package/src/errors/consensus/basic/data_contract/data_contract_have_new_unique_index_error.rs +36 -0
  51. package/src/errors/consensus/basic/data_contract/data_contract_immutable_properties_update_error.rs +36 -0
  52. package/src/errors/consensus/basic/data_contract/data_contract_invalid_index_definition_update_error.rs +36 -0
  53. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +26 -0
  54. package/src/errors/consensus/basic/data_contract/data_contract_unique_indices_changed_error.rs +36 -0
  55. package/src/errors/consensus/basic/data_contract/duplicate_index_name_error.rs +36 -0
  56. package/src/errors/consensus/basic/data_contract/incompatible_data_contract_schema_error.rs +66 -0
  57. package/src/errors/consensus/basic/data_contract/incompatible_re2_pattern_error.rs +43 -0
  58. package/src/errors/consensus/basic/data_contract/index_error/duplicate_index_error.rs +39 -0
  59. package/src/errors/consensus/basic/data_contract/index_error/invalid_compound_index_error.rs +39 -0
  60. package/src/errors/consensus/basic/data_contract/index_error/invalid_index_property_type_error.rs +59 -0
  61. package/src/errors/consensus/basic/data_contract/index_error/invalid_indexed_property_constraint_error.rs +67 -0
  62. package/src/errors/consensus/basic/data_contract/index_error/mod.rs +15 -0
  63. package/src/errors/consensus/basic/data_contract/index_error/system_property_index_already_present_error.rs +51 -0
  64. package/src/errors/consensus/basic/data_contract/index_error/undefined_index_property_error.rs +51 -0
  65. package/src/errors/consensus/basic/data_contract/index_error/unique_indices_limit_reached_error.rs +36 -0
  66. package/src/errors/consensus/basic/data_contract/invalid_data_contract_id_error.rs +37 -0
  67. package/src/errors/consensus/basic/data_contract/invalid_data_contract_version_error.rs +36 -0
  68. package/src/errors/consensus/basic/data_contract/invalid_json_schema_ref_error.rs +26 -0
  69. package/src/errors/consensus/basic/data_contract/mod.rs +25 -0
  70. package/src/errors/consensus/basic/decode/mod.rs +5 -0
  71. package/src/errors/consensus/basic/decode/protocol_version_parsing_error.rs +29 -0
  72. package/src/errors/consensus/basic/decode/serialized_object_parsing_error.rs +29 -0
  73. package/src/errors/consensus/basic/document/data_contract_not_present_error.rs +32 -0
  74. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +36 -0
  75. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +40 -0
  76. package/src/errors/consensus/basic/document/invalid_document_transition_action_error.rs +26 -0
  77. package/src/errors/consensus/basic/document/invalid_document_transition_id_error.rs +38 -0
  78. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +39 -0
  79. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +20 -0
  80. package/src/errors/consensus/basic/document/missing_document_transition_action_error.rs +20 -0
  81. package/src/errors/consensus/basic/document/missing_document_type_error.rs +20 -0
  82. package/src/errors/consensus/basic/document/mod.rs +19 -0
  83. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +32 -0
  84. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +32 -0
  85. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +38 -0
  86. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_is_not_found_error.rs +31 -0
  87. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +37 -0
  88. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_output_not_found_error.rs +29 -0
  89. package/src/errors/consensus/basic/identity/identity_insufficient_balance_error.rs +33 -0
  90. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_core_chain_height_error.rs +34 -0
  91. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +34 -0
  92. package/src/errors/consensus/basic/identity/invalid_asset_lock_transaction_output_return_size_error.rs +29 -0
  93. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_error.rs +60 -0
  94. package/src/errors/consensus/basic/identity/invalid_identity_asset_lock_transaction_output_error.rs +29 -0
  95. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +29 -0
  96. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_output_script_error.rs +32 -0
  97. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +29 -0
  98. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +39 -0
  99. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +42 -0
  100. package/src/errors/consensus/basic/identity/invalid_identity_public_key_type_error.rs +30 -0
  101. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_error.rs +22 -0
  102. package/src/errors/consensus/basic/identity/invalid_instant_asset_lock_proof_signature_error.rs +24 -0
  103. package/src/errors/consensus/basic/identity/missing_master_public_key_error.rs +22 -0
  104. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +29 -0
  105. package/src/errors/consensus/basic/identity/mod.rs +45 -0
  106. package/src/errors/consensus/basic/incompatible_protocol_version_error.rs +32 -0
  107. package/src/errors/consensus/basic/invalid_identifier_error.rs +36 -0
  108. package/src/errors/consensus/basic/invalid_signature_public_key_security_level_error.rs +41 -0
  109. package/src/errors/consensus/basic/invalid_state_transition_signature_error.rs +20 -0
  110. package/src/errors/consensus/basic/json_schema_compilation_error.rs +26 -0
  111. package/src/errors/consensus/basic/json_schema_error.rs +274 -0
  112. package/src/errors/consensus/basic/mod.rs +30 -0
  113. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +30 -0
  114. package/src/errors/consensus/basic/public_key_security_level_not_met_error.rs +41 -0
  115. package/src/errors/consensus/basic/state_transition/invalid_state_transition_type_error.rs +29 -0
  116. package/src/errors/consensus/basic/state_transition/missing_state_transition_type_error.rs +20 -0
  117. package/src/errors/consensus/basic/state_transition/mod.rs +7 -0
  118. package/src/errors/consensus/basic/state_transition/state_transition_max_size_exceeded_error.rs +36 -0
  119. package/src/errors/consensus/basic/test_consensus_error.rs +21 -0
  120. package/src/errors/consensus/basic/unsupported_protocol_version_error.rs +32 -0
  121. package/src/errors/consensus/basic/wrong_public_key_purpose_error.rs +37 -0
  122. package/src/errors/consensus/fee/balance_is_not_enough_error.rs +32 -0
  123. package/src/errors/consensus/fee/mod.rs +3 -0
  124. package/src/errors/consensus/mod.rs +4 -0
  125. package/src/errors/consensus/signature/identity_not_found_error.rs +29 -0
  126. package/src/errors/consensus/signature/mod.rs +3 -0
  127. package/src/errors/consensus/state/data_contract/data_contract_already_present_error.rs +31 -0
  128. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +74 -0
  129. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +82 -0
  130. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +66 -0
  131. package/src/errors/consensus/state/data_contract/data_trigger/mod.rs +7 -0
  132. package/src/errors/consensus/state/data_contract/mod.rs +4 -0
  133. package/src/errors/consensus/state/document/document_already_present_error.rs +28 -0
  134. package/src/errors/consensus/state/document/document_not_found_error.rs +28 -0
  135. package/src/errors/consensus/state/document/document_owner_id_mismatch_error.rs +50 -0
  136. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +72 -0
  137. package/src/errors/consensus/state/document/document_timestamps_mismatch_error.rs +28 -0
  138. package/src/errors/consensus/state/document/duplicate_unique_index_error.rs +42 -0
  139. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +38 -0
  140. package/src/errors/consensus/state/document/mod.rs +15 -0
  141. package/src/errors/consensus/state/identity/identity_already_exists_error.rs +28 -0
  142. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +49 -0
  143. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +31 -0
  144. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +28 -0
  145. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +28 -0
  146. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +38 -0
  147. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +26 -0
  148. package/src/errors/consensus/state/identity/mod.rs +15 -0
  149. package/src/errors/consensus/state/mod.rs +3 -0
  150. package/src/errors/consensus_error.rs +612 -0
  151. package/src/errors/from.rs +24 -0
  152. package/src/errors/js_conversion.rs +63 -0
  153. package/src/errors/mod.rs +10 -0
  154. package/src/errors/public_key_validation_error.rs +23 -0
  155. package/src/identifier.rs +103 -0
  156. package/src/identity.rs +253 -0
  157. package/src/identity_facade.rs +55 -0
  158. package/src/identity_public_key/key_type.rs +22 -0
  159. package/src/identity_public_key/mod.rs +192 -0
  160. package/src/identity_public_key/public_keys_validator.rs +44 -0
  161. package/src/identity_public_key/purpose.rs +24 -0
  162. package/src/identity_public_key/security_level.rs +21 -0
  163. package/src/lib.rs +28 -0
  164. package/src/metadata.rs +54 -0
  165. package/src/utils.rs +59 -0
  166. package/src/validation_result.rs +41 -0
  167. package/test/integration/DashPlatformProtocol.spec.js +4 -4
  168. package/test/integration/ajv/keywords/byteArray/addByteArrayKeyword.spec.js +2 -2
  169. package/test/integration/dataContract/DataContractFacade.spec.js +6 -6
  170. package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +10 -10
  171. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +14 -14
  172. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +22 -22
  173. package/test/integration/document/Document.spec.js +10 -5
  174. package/test/integration/document/DocumentFacade.spec.js +11 -11
  175. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +5 -5
  176. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +25 -25
  177. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +15 -15
  178. package/test/integration/document/validation/validateDocumentFactory.spec.js +12 -12
  179. package/test/integration/error/consensus/createConsensusError.spec.js +3 -3
  180. package/test/integration/identity/IdentityFacade.spec.js +13 -13
  181. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +12 -12
  182. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +11 -11
  183. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +8 -8
  184. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +24 -39
  185. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +7 -7
  186. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +29 -35
  187. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +8 -8
  188. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +11 -11
  189. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +10 -10
  190. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +7 -7
  191. package/test/integration/identity/validation/validateIdentityFactory.spec.js +8 -8
  192. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +50 -24
  193. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +14 -14
  194. package/test/integration/stateTransition/StateTransitionFacade.spec.js +15 -19
  195. package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +8 -11
  196. package/test/integration/util/generateEntropy.spec.js +1 -1
  197. package/test/integration/util/serializer.spec.js +2 -2
  198. package/test/unit/DashPlatformProtocol.spec.js +4 -4
  199. package/test/unit/Identifier.spec.js +2 -2
  200. package/test/unit/Metadata.spec.js +1 -1
  201. package/test/unit/dataContract/DataContract.spec.js +100 -159
  202. package/test/unit/dataContract/DataContractFactory.spec.js +55 -111
  203. package/test/unit/dataContract/createDataContract.spec.js +20 -10
  204. package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +2 -2
  205. package/test/unit/dataContract/generateDataContractId.spec.js +23 -6
  206. package/test/unit/dataContract/getBinaryPropertiesFromSchema.spec.js +1 -1
  207. package/test/unit/dataContract/getPropertyDefinitionByPath.spec.js +1 -1
  208. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +8 -8
  209. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +6 -6
  210. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +8 -8
  211. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +8 -8
  212. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +6 -6
  213. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +6 -6
  214. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +9 -9
  215. package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +6 -6
  216. package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +3 -3
  217. package/test/unit/dataTrigger/DataTrigger.spec.js +8 -8
  218. package/test/unit/dataTrigger/DataTriggerExecutionContext.spec.js +4 -4
  219. package/test/unit/dataTrigger/dashpayDataTriggers/createContactRequestDataTrigger.spec.js +13 -15
  220. package/test/unit/dataTrigger/dpnsTriggers/createDomainDataTrigger.spec.js +12 -12
  221. package/test/unit/dataTrigger/featureFlagDataTriggers/createFeatureFlagDataTrigger.spec.js +11 -13
  222. package/test/unit/dataTrigger/getDataTriggersFactory.spec.js +7 -7
  223. package/test/unit/dataTrigger/rejectDataTrigger.spec.js +8 -8
  224. package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +9 -9
  225. package/test/unit/decodeProtocolEntityFactory.spec.js +4 -4
  226. package/test/unit/document/Document.spec.js +9 -9
  227. package/test/unit/document/DocumentFactory.spec.js +19 -19
  228. package/test/unit/document/errors/InvalidDocumentError.spec.js +2 -2
  229. package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +8 -8
  230. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +8 -8
  231. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +16 -17
  232. package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +1 -1
  233. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +2 -2
  234. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +6 -6
  235. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +7 -7
  236. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +6 -6
  237. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +27 -34
  238. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +9 -9
  239. package/test/unit/errors/consensus/codes.spec.js +7 -7
  240. package/test/unit/identity/Identity.spec.js +98 -69
  241. package/test/unit/identity/IdentityFactory.spec.js +15 -15
  242. package/test/unit/identity/IdentityPublicKey.spec.js +53 -66
  243. package/test/unit/identity/creditsConverter.spec.js +1 -1
  244. package/test/unit/identity/errors/InvalidIdentityError.spec.js +2 -2
  245. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +7 -7
  246. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +8 -8
  247. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +6 -6
  248. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +4 -4
  249. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +7 -7
  250. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +2 -2
  251. package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +6 -6
  252. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +6 -6
  253. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +5 -5
  254. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +3 -3
  255. package/test/unit/identity/validation/validateRequiredPurposeAndSecurityLevelFactory.spec.js +5 -5
  256. package/test/unit/stateTransition/StateTransitionFactory.spec.js +8 -8
  257. package/test/unit/stateTransition/createStateTransitionFactory.spec.js +8 -8
  258. package/test/unit/stateTransition/errors/InvalidStateTransitionError.spec.js +3 -3
  259. package/test/unit/stateTransition/validation/validateStateTransitionBasicFactory.spec.js +12 -12
  260. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +15 -15
  261. package/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +22 -22
  262. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +6 -6
  263. package/test/unit/stateTransition/validation/validateStateTransitionStateFactory.spec.js +9 -9
  264. package/test/unit/version/validateProtocolVersionFactory.spec.js +7 -7
  265. package/tsconfig.json +18 -0
  266. package/wasm/wasm_dpp.d.ts +2756 -0
  267. package/wasm/wasm_dpp.js +7750 -0
  268. package/wasm/wasm_dpp_bg.js +1 -0
  269. package/wasm/wasm_dpp_bg.wasm +0 -0
  270. package/wasm/wasm_dpp_bg.wasm.d.ts +518 -0
  271. package/webpack.config.js +22 -19
  272. package/CHANGELOG.md +0 -397
@@ -0,0 +1,612 @@
1
+ use crate::errors::consensus::basic::{
2
+ IncompatibleProtocolVersionErrorWasm, InvalidIdentifierErrorWasm, JsonSchemaErrorWasm,
3
+ UnsupportedProtocolVersionErrorWasm,
4
+ };
5
+ use dpp::consensus::ConsensusError as DPPConsensusError;
6
+ use std::ops::Deref;
7
+
8
+ use crate::errors::consensus::basic::identity::{
9
+ DuplicatedIdentityPublicKeyErrorWasm, DuplicatedIdentityPublicKeyIdErrorWasm,
10
+ IdentityAssetLockProofLockedTransactionMismatchErrorWasm,
11
+ IdentityAssetLockTransactionIsNotFoundErrorWasm,
12
+ IdentityAssetLockTransactionOutPointAlreadyExistsErrorWasm,
13
+ IdentityAssetLockTransactionOutputNotFoundErrorWasm, IdentityInsufficientBalanceErrorWasm,
14
+ InvalidAssetLockProofCoreChainHeightErrorWasm, InvalidAssetLockProofTransactionHeightErrorWasm,
15
+ InvalidAssetLockTransactionOutputReturnSizeErrorWasm,
16
+ InvalidIdentityAssetLockTransactionErrorWasm,
17
+ InvalidIdentityAssetLockTransactionOutputErrorWasm,
18
+ InvalidIdentityCreditWithdrawalTransitionCoreFeeErrorWasm,
19
+ InvalidIdentityCreditWithdrawalTransitionOutputScriptErrorWasm,
20
+ InvalidIdentityKeySignatureErrorWasm, InvalidIdentityPublicKeyDataErrorWasm,
21
+ InvalidIdentityPublicKeySecurityLevelErrorWasm, InvalidInstantAssetLockProofErrorWasm,
22
+ InvalidInstantAssetLockProofSignatureErrorWasm, MissingMasterPublicKeyErrorWasm,
23
+ };
24
+ use dpp::codes::ErrorWithCode;
25
+ use dpp::consensus::basic::identity::{
26
+ DuplicatedIdentityPublicKeyError, DuplicatedIdentityPublicKeyIdError,
27
+ };
28
+ use dpp::consensus::basic::BasicError;
29
+ use dpp::consensus::signature::SignatureError;
30
+ use dpp::StateError;
31
+ use wasm_bindgen::JsValue;
32
+
33
+ use crate::errors::consensus::basic::data_contract::{
34
+ DataContractHaveNewUniqueIndexErrorWasm, DataContractImmutablePropertiesUpdateErrorWasm,
35
+ DataContractInvalidIndexDefinitionUpdateErrorWasm, DataContractUniqueIndicesChangedErrorWasm,
36
+ IncompatibleDataContractSchemaErrorWasm, InvalidDataContractIdErrorWasm,
37
+ };
38
+ use crate::errors::consensus::basic::document::{
39
+ DuplicateDocumentTransitionsWithIdsError, InvalidDocumentTransitionActionErrorWasm,
40
+ InvalidDocumentTransitionIdErrorWasm, MissingDataContractIdErrorWasm,
41
+ };
42
+ use crate::errors::consensus::basic::state_transition::{
43
+ InvalidStateTransitionTypeErrorWasm, MissingStateTransitionTypeErrorWasm,
44
+ StateTransitionMaxSizeExceededErrorWasm,
45
+ };
46
+ use crate::errors::consensus::signature::IdentityNotFoundErrorWasm;
47
+ use crate::errors::consensus::state::data_contract::data_trigger::{
48
+ DataTriggerConditionErrorWasm, DataTriggerExecutionErrorWasm,
49
+ };
50
+ use crate::errors::consensus::state::data_contract::DataContractAlreadyPresentErrorWasm;
51
+ use crate::errors::consensus::state::document::{
52
+ DocumentAlreadyPresentErrorWasm, DocumentNotFoundErrorWasm, DocumentOwnerIdMismatchErrorWasm,
53
+ DocumentTimestampWindowViolationErrorWasm, DocumentTimestampsMismatchErrorWasm,
54
+ DuplicateUniqueIndexErrorWasm, InvalidDocumentRevisionErrorWasm,
55
+ };
56
+ use crate::errors::consensus::state::identity::{
57
+ IdentityAlreadyExistsErrorWasm, IdentityPublicKeyDisabledAtWindowViolationErrorWasm,
58
+ IdentityPublicKeyIsDisabledErrorWasm, IdentityPublicKeyIsReadOnlyErrorWasm,
59
+ InvalidIdentityPublicKeyIdErrorWasm, InvalidIdentityRevisionErrorWasm,
60
+ MaxIdentityPublicKeyLimitReachedErrorWasm,
61
+ };
62
+ use dpp::errors::DataTriggerError;
63
+
64
+ use super::consensus::basic::data_contract::{
65
+ DataContractMaxDepthErrorWasm, DuplicateIndexErrorWasm, DuplicateIndexNameErrorWasm,
66
+ IncompatibleRe2PatternErrorWasm, InvalidCompoundIndexErrorWasm,
67
+ InvalidDataContractVersionErrorWasm, InvalidIndexPropertyTypeErrorWasm,
68
+ InvalidIndexedPropertyConstraintErrorWasm, InvalidJsonSchemaRefErrorWasm,
69
+ SystemPropertyIndexAlreadyPresentErrorWasm, UndefinedIndexPropertyErrorWasm,
70
+ UniqueIndicesLimitReachedErrorWasm,
71
+ };
72
+ use super::consensus::basic::decode::{
73
+ ProtocolVersionParsingErrorWasm, SerializedObjectParsingErrorWasm,
74
+ };
75
+ use super::consensus::basic::document::{
76
+ DataContractNotPresentErrorWasm, InconsistentCompoundIndexDataErrorWasm,
77
+ InvalidDocumentTypeErrorWasm, MissingDocumentTransitionActionErrorWasm,
78
+ MissingDocumentTypeErrorWasm,
79
+ };
80
+ use super::consensus::basic::identity::{
81
+ InvalidIdentityPublicKeyTypeErrorWasm, MissingPublicKeyErrorWasm,
82
+ };
83
+ use super::consensus::basic::{
84
+ InvalidSignaturePublicKeySecurityLevelErrorWasm, InvalidStateTransitionSignatureErrorWasm,
85
+ JsonSchemaCompilationErrorWasm, PublicKeyIsDisabledErrorWasm,
86
+ PublicKeySecurityLevelNotMetErrorWasm, WrongPublicKeyPurposeErrorWasm,
87
+ };
88
+ use super::consensus::fee::BalanceIsNotEnoughErrorWasm;
89
+ use super::consensus::state::data_contract::data_trigger::DataTriggerInvalidResultErrorWasm;
90
+
91
+ pub fn from_consensus_error_ref(e: &DPPConsensusError) -> JsValue {
92
+ let code = e.code();
93
+
94
+ match e {
95
+ DPPConsensusError::JsonSchemaError(e) => JsonSchemaErrorWasm::new(e, code).into(),
96
+ DPPConsensusError::UnsupportedProtocolVersionError(e) => {
97
+ UnsupportedProtocolVersionErrorWasm::from(e).into()
98
+ }
99
+ DPPConsensusError::IncompatibleProtocolVersionError(e) => {
100
+ IncompatibleProtocolVersionErrorWasm::from(e).into()
101
+ }
102
+ DPPConsensusError::DuplicatedIdentityPublicKeyIdError(e) => {
103
+ DuplicatedIdentityPublicKeyIdErrorWasm::from(e).into()
104
+ }
105
+ DPPConsensusError::InvalidIdentityPublicKeyDataError(e) => {
106
+ InvalidIdentityPublicKeyDataErrorWasm::from(e).into()
107
+ }
108
+ DPPConsensusError::InvalidIdentityPublicKeySecurityLevelError(e) => {
109
+ InvalidIdentityPublicKeySecurityLevelErrorWasm::from(e).into()
110
+ }
111
+ DPPConsensusError::DuplicatedIdentityPublicKeyError(e) => {
112
+ DuplicatedIdentityPublicKeyErrorWasm::from(e).into()
113
+ }
114
+ DPPConsensusError::MissingMasterPublicKeyError(e) => {
115
+ MissingMasterPublicKeyErrorWasm::from(e).into()
116
+ }
117
+ DPPConsensusError::IdentityAssetLockTransactionOutPointAlreadyExistsError(e) => {
118
+ IdentityAssetLockTransactionOutPointAlreadyExistsErrorWasm::from(e).into()
119
+ }
120
+ DPPConsensusError::InvalidIdentityAssetLockTransactionOutputError(e) => {
121
+ InvalidIdentityAssetLockTransactionOutputErrorWasm::from(e).into()
122
+ }
123
+ DPPConsensusError::InvalidAssetLockTransactionOutputReturnSize(e) => {
124
+ InvalidAssetLockTransactionOutputReturnSizeErrorWasm::from(e).into()
125
+ }
126
+ DPPConsensusError::IdentityAssetLockTransactionOutputNotFoundError(e) => {
127
+ IdentityAssetLockTransactionOutputNotFoundErrorWasm::from(e).into()
128
+ }
129
+ DPPConsensusError::InvalidIdentityAssetLockTransactionError(e) => {
130
+ InvalidIdentityAssetLockTransactionErrorWasm::from(e).into()
131
+ }
132
+ DPPConsensusError::InvalidInstantAssetLockProofError(e) => {
133
+ InvalidInstantAssetLockProofErrorWasm::from(e).into()
134
+ }
135
+ DPPConsensusError::InvalidInstantAssetLockProofSignatureError(e) => {
136
+ InvalidInstantAssetLockProofSignatureErrorWasm::from(e).into()
137
+ }
138
+ DPPConsensusError::IdentityAssetLockProofLockedTransactionMismatchError(e) => {
139
+ IdentityAssetLockProofLockedTransactionMismatchErrorWasm::from(e).into()
140
+ }
141
+ DPPConsensusError::IdentityAssetLockTransactionIsNotFoundError(e) => {
142
+ IdentityAssetLockTransactionIsNotFoundErrorWasm::from(e).into()
143
+ }
144
+ DPPConsensusError::InvalidAssetLockProofCoreChainHeightError(e) => {
145
+ InvalidAssetLockProofCoreChainHeightErrorWasm::from(e).into()
146
+ }
147
+ DPPConsensusError::InvalidAssetLockProofTransactionHeightError(e) => {
148
+ InvalidAssetLockProofTransactionHeightErrorWasm::from(e).into()
149
+ }
150
+ DPPConsensusError::InvalidIdentityCreditWithdrawalTransitionCoreFeeError(e) => {
151
+ InvalidIdentityCreditWithdrawalTransitionCoreFeeErrorWasm::from(e).into()
152
+ }
153
+ DPPConsensusError::InvalidIdentityCreditWithdrawalTransitionOutputScriptError(e) => {
154
+ InvalidIdentityCreditWithdrawalTransitionOutputScriptErrorWasm::from(e).into()
155
+ }
156
+ DPPConsensusError::IdentityInsufficientBalanceError(e) => {
157
+ IdentityInsufficientBalanceErrorWasm::from(e).into()
158
+ }
159
+ DPPConsensusError::IdentityAlreadyExistsError(e) => {
160
+ IdentityAlreadyExistsErrorWasm::from(e).into()
161
+ }
162
+ DPPConsensusError::SerializedObjectParsingError { parsing_error } => {
163
+ SerializedObjectParsingErrorWasm::new(
164
+ wasm_bindgen::JsError::new(parsing_error.to_string().as_ref()),
165
+ code,
166
+ )
167
+ .into()
168
+ }
169
+ DPPConsensusError::ProtocolVersionParsingError { parsing_error } => {
170
+ ProtocolVersionParsingErrorWasm::new(
171
+ wasm_bindgen::JsError::new(parsing_error.to_string().as_ref()),
172
+ code,
173
+ )
174
+ .into()
175
+ }
176
+ DPPConsensusError::IncompatibleRe2PatternError {
177
+ pattern,
178
+ path,
179
+ message,
180
+ } => IncompatibleRe2PatternErrorWasm::new(
181
+ pattern.clone(),
182
+ path.clone(),
183
+ message.clone(),
184
+ code,
185
+ )
186
+ .into(),
187
+ DPPConsensusError::FeeError(e) => match e {
188
+ dpp::consensus::fee::FeeError::BalanceIsNotEnoughError { balance, fee } => {
189
+ BalanceIsNotEnoughErrorWasm::new(*balance, *fee, code).into()
190
+ }
191
+ },
192
+ DPPConsensusError::SignatureError(e) => from_signature_error(e),
193
+ DPPConsensusError::StateError(state_error) => from_state_error(state_error),
194
+ DPPConsensusError::BasicError(basic_error) => from_basic_error(basic_error),
195
+ }
196
+ }
197
+
198
+ fn from_state_error(state_error: &Box<StateError>) -> JsValue {
199
+ let code = state_error.get_code();
200
+
201
+ match state_error.deref() {
202
+ StateError::DuplicatedIdentityPublicKeyIdError { duplicated_ids } => {
203
+ let e = DuplicatedIdentityPublicKeyIdError::new(duplicated_ids.clone());
204
+ DuplicatedIdentityPublicKeyIdErrorWasm::from(&e).into()
205
+ }
206
+ StateError::DuplicatedIdentityPublicKeyError {
207
+ duplicated_public_key_ids,
208
+ } => {
209
+ let e = DuplicatedIdentityPublicKeyError::new(duplicated_public_key_ids.clone());
210
+ DuplicatedIdentityPublicKeyErrorWasm::from(&e).into()
211
+ }
212
+ StateError::DocumentAlreadyPresentError { document_id } => {
213
+ DocumentAlreadyPresentErrorWasm::new(document_id.clone(), code).into()
214
+ }
215
+ StateError::DataContractAlreadyPresentError { data_contract_id } => {
216
+ DataContractAlreadyPresentErrorWasm::new(data_contract_id.clone(), code).into()
217
+ }
218
+ StateError::DocumentNotFoundError { document_id } => {
219
+ DocumentNotFoundErrorWasm::new(document_id.clone(), code).into()
220
+ }
221
+ StateError::DocumentOwnerIdMismatchError {
222
+ document_id,
223
+ document_owner_id,
224
+ existing_document_owner_id,
225
+ } => DocumentOwnerIdMismatchErrorWasm::new(
226
+ document_id.clone(),
227
+ document_owner_id.clone(),
228
+ existing_document_owner_id.clone(),
229
+ code,
230
+ )
231
+ .into(),
232
+ StateError::DocumentTimestampsMismatchError { document_id } => {
233
+ DocumentTimestampsMismatchErrorWasm::new(document_id.clone(), code).into()
234
+ }
235
+ StateError::DocumentTimestampWindowViolationError {
236
+ timestamp_name,
237
+ document_id,
238
+ timestamp,
239
+ time_window_start,
240
+ time_window_end,
241
+ } => DocumentTimestampWindowViolationErrorWasm::new(
242
+ timestamp_name.clone(),
243
+ document_id.clone(),
244
+ *timestamp,
245
+ *time_window_start,
246
+ *time_window_end,
247
+ code,
248
+ )
249
+ .into(),
250
+ StateError::DuplicateUniqueIndexError {
251
+ document_id,
252
+ duplicating_properties,
253
+ } => DuplicateUniqueIndexErrorWasm::new(
254
+ document_id.clone(),
255
+ duplicating_properties.clone(),
256
+ code,
257
+ )
258
+ .into(),
259
+ StateError::InvalidDocumentRevisionError {
260
+ document_id,
261
+ current_revision,
262
+ } => InvalidDocumentRevisionErrorWasm::new(document_id.clone(), *current_revision, code)
263
+ .into(),
264
+ StateError::InvalidIdentityRevisionError {
265
+ identity_id,
266
+ current_revision,
267
+ } => InvalidIdentityRevisionErrorWasm::new(identity_id.clone(), *current_revision, code)
268
+ .into(),
269
+ StateError::IdentityPublicKeyDisabledAtWindowViolationError {
270
+ disabled_at,
271
+ time_window_start,
272
+ time_window_end,
273
+ } => IdentityPublicKeyDisabledAtWindowViolationErrorWasm::new(
274
+ *disabled_at,
275
+ *time_window_start,
276
+ *time_window_end,
277
+ code,
278
+ )
279
+ .into(),
280
+ StateError::IdentityPublicKeyIsReadOnlyError { public_key_index } => {
281
+ IdentityPublicKeyIsReadOnlyErrorWasm::new(*public_key_index, code).into()
282
+ }
283
+ StateError::InvalidIdentityPublicKeyIdError { id } => {
284
+ InvalidIdentityPublicKeyIdErrorWasm::new(*id, code).into()
285
+ }
286
+ StateError::MaxIdentityPublicKeyLimitReachedError { max_items } => {
287
+ MaxIdentityPublicKeyLimitReachedErrorWasm::new(*max_items, code).into()
288
+ }
289
+ StateError::IdentityPublicKeyIsDisabledError { public_key_index } => {
290
+ IdentityPublicKeyIsDisabledErrorWasm::new(*public_key_index, code).into()
291
+ }
292
+ StateError::DataTriggerError(data_trigger_error) => match data_trigger_error.deref() {
293
+ DataTriggerError::DataTriggerConditionError {
294
+ data_contract_id,
295
+ document_transition_id,
296
+ message,
297
+ document_transition,
298
+ owner_id,
299
+ } => DataTriggerConditionErrorWasm::new(
300
+ data_contract_id.clone(),
301
+ document_transition_id.clone(),
302
+ message.clone(),
303
+ document_transition.clone(),
304
+ owner_id.clone(),
305
+ code,
306
+ )
307
+ .into(),
308
+ DataTriggerError::DataTriggerExecutionError {
309
+ data_contract_id,
310
+ document_transition_id,
311
+ message,
312
+ execution_error,
313
+ document_transition,
314
+ owner_id,
315
+ } => DataTriggerExecutionErrorWasm::new(
316
+ data_contract_id.clone(),
317
+ document_transition_id.clone(),
318
+ message.clone(),
319
+ wasm_bindgen::JsError::new(execution_error.to_string().as_ref()),
320
+ document_transition.clone(),
321
+ owner_id.clone(),
322
+ code,
323
+ )
324
+ .into(),
325
+ DataTriggerError::DataTriggerInvalidResultError {
326
+ data_contract_id,
327
+ document_transition_id,
328
+ document_transition,
329
+ owner_id,
330
+ } => DataTriggerInvalidResultErrorWasm::new(
331
+ data_contract_id.clone(),
332
+ document_transition_id.clone(),
333
+ document_transition.clone(),
334
+ owner_id.clone(),
335
+ code,
336
+ )
337
+ .into(),
338
+ },
339
+ }
340
+ }
341
+
342
+ fn from_basic_error(basic_error: &Box<BasicError>) -> JsValue {
343
+ let code = basic_error.get_code();
344
+
345
+ match basic_error.deref() {
346
+ BasicError::DataContractNotPresent { data_contract_id } => {
347
+ DataContractNotPresentErrorWasm::new(data_contract_id.clone(), code).into()
348
+ }
349
+ BasicError::InvalidDataContractVersionError {
350
+ expected_version,
351
+ version,
352
+ } => InvalidDataContractVersionErrorWasm::new(*expected_version, *version, code).into(),
353
+ BasicError::DataContractMaxDepthExceedError(depth) => {
354
+ DataContractMaxDepthErrorWasm::new(*depth, code).into()
355
+ }
356
+ BasicError::InvalidDocumentTypeError {
357
+ document_type,
358
+ data_contract_id,
359
+ } => {
360
+ InvalidDocumentTypeErrorWasm::new(document_type.clone(), data_contract_id.clone(), code)
361
+ .into()
362
+ }
363
+ BasicError::DuplicateIndexNameError {
364
+ document_type,
365
+ duplicate_index_name,
366
+ } => DuplicateIndexNameErrorWasm::new(
367
+ document_type.clone(),
368
+ duplicate_index_name.clone(),
369
+ code,
370
+ )
371
+ .into(),
372
+ BasicError::InvalidJsonSchemaRefError { ref_error } => {
373
+ InvalidJsonSchemaRefErrorWasm::new(ref_error.clone(), code).into()
374
+ }
375
+ BasicError::IndexError(index_error) => match index_error {
376
+ dpp::consensus::basic::IndexError::UniqueIndicesLimitReachedError {
377
+ document_type,
378
+ index_limit,
379
+ } => UniqueIndicesLimitReachedErrorWasm::new(document_type.clone(), *index_limit, code)
380
+ .into(),
381
+ dpp::consensus::basic::IndexError::SystemPropertyIndexAlreadyPresentError {
382
+ document_type,
383
+ index_definition,
384
+ property_name,
385
+ } => SystemPropertyIndexAlreadyPresentErrorWasm::new(
386
+ document_type.clone(),
387
+ index_definition.clone(),
388
+ property_name.clone(),
389
+ code,
390
+ )
391
+ .into(),
392
+ dpp::consensus::basic::IndexError::UndefinedIndexPropertyError {
393
+ document_type,
394
+ index_definition,
395
+ property_name,
396
+ } => UndefinedIndexPropertyErrorWasm::new(
397
+ document_type.clone(),
398
+ index_definition.clone(),
399
+ property_name.clone(),
400
+ code,
401
+ )
402
+ .into(),
403
+ dpp::consensus::basic::IndexError::InvalidIndexPropertyTypeError {
404
+ document_type,
405
+ index_definition,
406
+ property_name,
407
+ property_type,
408
+ } => InvalidIndexPropertyTypeErrorWasm::new(
409
+ document_type.clone(),
410
+ index_definition.clone(),
411
+ property_name.clone(),
412
+ property_type.clone(),
413
+ code,
414
+ )
415
+ .into(),
416
+ dpp::consensus::basic::IndexError::InvalidIndexedPropertyConstraintError {
417
+ document_type,
418
+ index_definition,
419
+ property_name,
420
+ constraint_name,
421
+ reason,
422
+ } => InvalidIndexedPropertyConstraintErrorWasm::new(
423
+ document_type.clone(),
424
+ index_definition.clone(),
425
+ property_name.clone(),
426
+ constraint_name.clone(),
427
+ reason.clone(),
428
+ code,
429
+ )
430
+ .into(),
431
+ dpp::consensus::basic::IndexError::InvalidCompoundIndexError {
432
+ document_type,
433
+ index_definition,
434
+ } => InvalidCompoundIndexErrorWasm::new(
435
+ document_type.clone(),
436
+ index_definition.clone(),
437
+ code,
438
+ )
439
+ .into(),
440
+ dpp::consensus::basic::IndexError::DuplicateIndexError {
441
+ document_type,
442
+ index_definition,
443
+ } => {
444
+ DuplicateIndexErrorWasm::new(document_type.clone(), index_definition.clone(), code)
445
+ .into()
446
+ }
447
+ },
448
+ BasicError::JsonSchemaCompilationError(error) => {
449
+ JsonSchemaCompilationErrorWasm::new(error.clone(), code).into()
450
+ }
451
+ BasicError::InconsistentCompoundIndexDataError {
452
+ index_properties,
453
+ document_type,
454
+ } => InconsistentCompoundIndexDataErrorWasm::new(
455
+ index_properties.clone(),
456
+ document_type.clone(),
457
+ code,
458
+ )
459
+ .into(),
460
+ BasicError::MissingDocumentTypeError => MissingDocumentTypeErrorWasm::new(code).into(),
461
+ BasicError::MissingDocumentTransitionActionError => {
462
+ MissingDocumentTransitionActionErrorWasm::new(code).into()
463
+ }
464
+
465
+ BasicError::InvalidDocumentTransitionActionError { action } => {
466
+ InvalidDocumentTransitionActionErrorWasm::new(action.clone(), code).into()
467
+ }
468
+ BasicError::InvalidDocumentTransitionIdError {
469
+ expected_id,
470
+ invalid_id,
471
+ } => {
472
+ InvalidDocumentTransitionIdErrorWasm::new(expected_id.clone(), invalid_id.clone(), code)
473
+ .into()
474
+ }
475
+ BasicError::DuplicateDocumentTransitionsWithIdsError { references } => {
476
+ DuplicateDocumentTransitionsWithIdsError::new(references.clone(), code).into()
477
+ }
478
+ BasicError::MissingDataContractIdError => MissingDataContractIdErrorWasm::new(code).into(),
479
+ BasicError::InvalidIdentifierError {
480
+ identifier_name,
481
+ error,
482
+ } => InvalidIdentifierErrorWasm::new(identifier_name.clone(), error.clone(), code).into(),
483
+ BasicError::DataContractUniqueIndicesChangedError {
484
+ document_type,
485
+ index_name,
486
+ } => DataContractUniqueIndicesChangedErrorWasm::new(
487
+ document_type.clone(),
488
+ index_name.clone(),
489
+ code,
490
+ )
491
+ .into(),
492
+ BasicError::DataContractInvalidIndexDefinitionUpdateError {
493
+ document_type,
494
+ index_name,
495
+ } => DataContractInvalidIndexDefinitionUpdateErrorWasm::new(
496
+ document_type.clone(),
497
+ index_name.clone(),
498
+ code,
499
+ )
500
+ .into(),
501
+ BasicError::DataContractHaveNewUniqueIndexError {
502
+ document_type,
503
+ index_name,
504
+ } => DataContractHaveNewUniqueIndexErrorWasm::new(
505
+ document_type.clone(),
506
+ index_name.clone(),
507
+ code,
508
+ )
509
+ .into(),
510
+ BasicError::IdentityNotFoundError { identity_id } => {
511
+ IdentityNotFoundErrorWasm::new(identity_id.clone(), code).into()
512
+ }
513
+ BasicError::MissingStateTransitionTypeError => {
514
+ MissingStateTransitionTypeErrorWasm::new(code).into()
515
+ }
516
+ BasicError::InvalidStateTransitionTypeError { transition_type } => {
517
+ InvalidStateTransitionTypeErrorWasm::new(*transition_type, code).into()
518
+ }
519
+ BasicError::StateTransitionMaxSizeExceededError {
520
+ actual_size_kbytes,
521
+ max_size_kbytes,
522
+ } => StateTransitionMaxSizeExceededErrorWasm::new(
523
+ *actual_size_kbytes,
524
+ *max_size_kbytes,
525
+ code,
526
+ )
527
+ .into(),
528
+ BasicError::DataContractImmutablePropertiesUpdateError {
529
+ operation,
530
+ field_path,
531
+ } => DataContractImmutablePropertiesUpdateErrorWasm::new(
532
+ operation.clone(),
533
+ field_path.clone(),
534
+ code,
535
+ )
536
+ .into(),
537
+ BasicError::IncompatibleDataContractSchemaError {
538
+ data_contract_id,
539
+ operation,
540
+ field_path,
541
+ old_schema,
542
+ new_schema,
543
+ } => IncompatibleDataContractSchemaErrorWasm::new(
544
+ data_contract_id.clone(),
545
+ operation.clone(),
546
+ field_path.clone(),
547
+ old_schema.clone(),
548
+ new_schema.clone(),
549
+ code,
550
+ )
551
+ .into(),
552
+ BasicError::InvalidIdentityKeySignatureError { public_key_id } => {
553
+ InvalidIdentityKeySignatureErrorWasm::new(*public_key_id as u32, code).into()
554
+ }
555
+ BasicError::InvalidDataContractIdError {
556
+ expected_id,
557
+ invalid_id,
558
+ } => InvalidDataContractIdErrorWasm::new(expected_id.clone(), invalid_id.clone(), code)
559
+ .into(),
560
+ }
561
+ }
562
+
563
+ fn from_signature_error(signature_error: &SignatureError) -> JsValue {
564
+ let code = signature_error.get_code();
565
+
566
+ match signature_error.deref() {
567
+ SignatureError::MissingPublicKeyError { public_key_id } => {
568
+ MissingPublicKeyErrorWasm::new(*public_key_id, code).into()
569
+ }
570
+ SignatureError::InvalidIdentityPublicKeyTypeError { public_key_type } => {
571
+ InvalidIdentityPublicKeyTypeErrorWasm::new(*public_key_type, code).into()
572
+ }
573
+ SignatureError::InvalidStateTransitionSignatureError => {
574
+ InvalidStateTransitionSignatureErrorWasm::new(code).into()
575
+ }
576
+ SignatureError::IdentityNotFoundError { identity_id } => {
577
+ IdentityNotFoundErrorWasm::new(identity_id.clone(), code).into()
578
+ }
579
+ SignatureError::InvalidSignaturePublicKeySecurityLevelError {
580
+ public_key_security_level,
581
+ required_key_security_level,
582
+ } => InvalidSignaturePublicKeySecurityLevelErrorWasm::new(
583
+ *public_key_security_level,
584
+ *required_key_security_level,
585
+ code,
586
+ )
587
+ .into(),
588
+ SignatureError::PublicKeyIsDisabledError { public_key_id } => {
589
+ PublicKeyIsDisabledErrorWasm::new(*public_key_id, code).into()
590
+ }
591
+ SignatureError::PublicKeySecurityLevelNotMetError {
592
+ public_key_security_level,
593
+ required_security_level,
594
+ } => PublicKeySecurityLevelNotMetErrorWasm::new(
595
+ *public_key_security_level,
596
+ *required_security_level,
597
+ code,
598
+ )
599
+ .into(),
600
+ SignatureError::WrongPublicKeyPurposeError {
601
+ public_key_purpose,
602
+ key_purpose_requirement,
603
+ } => {
604
+ WrongPublicKeyPurposeErrorWasm::new(*public_key_purpose, *key_purpose_requirement, code)
605
+ .into()
606
+ }
607
+ }
608
+ }
609
+
610
+ pub fn from_consensus_error(consensus_error: DPPConsensusError) -> JsValue {
611
+ from_consensus_error_ref(&consensus_error)
612
+ }
@@ -0,0 +1,24 @@
1
+ use wasm_bindgen::JsValue;
2
+
3
+ use dpp::errors::ProtocolError;
4
+
5
+ use crate::data_contract::errors::from_data_contract_to_js_error;
6
+ use crate::document::errors::from_document_to_js_error;
7
+
8
+ pub fn from_dpp_err(pe: ProtocolError) -> JsValue {
9
+ match pe {
10
+ ProtocolError::DataContractError(e) => from_data_contract_to_js_error(e),
11
+
12
+ ProtocolError::Document(e) => from_document_to_js_error(*e),
13
+
14
+ ProtocolError::ParsingJsonError(err) => format!(
15
+ "Parsing error at line {}, column {}: {}",
16
+ err.line(),
17
+ err.column(),
18
+ err
19
+ )
20
+ .into(),
21
+
22
+ _ => JsValue::from_str(&format!("Kek: {:#}", pe,)),
23
+ }
24
+ }
@@ -0,0 +1,63 @@
1
+ use serde_json;
2
+ use serde_wasm_bindgen::Error;
3
+ use thiserror::Error;
4
+ use wasm_bindgen::JsValue;
5
+
6
+ /// This is a rust-specific errors. In addition to all errors defined in `js-dpp`, the
7
+ /// error might be triggered when using JS bindings
8
+ #[derive(Error, Debug)]
9
+ pub enum RustConversionError {
10
+ #[error(transparent)]
11
+ SerdeConversionError(#[from] serde_json::Error),
12
+
13
+ #[error("Conversion Error: {0}")]
14
+ Error(String),
15
+ }
16
+
17
+ impl RustConversionError {
18
+ pub fn to_js_value(self) -> JsValue {
19
+ self.into()
20
+ }
21
+ }
22
+
23
+ impl From<String> for RustConversionError {
24
+ fn from(v: String) -> Self {
25
+ RustConversionError::Error(v)
26
+ }
27
+ }
28
+
29
+ impl From<RustConversionError> for JsValue {
30
+ fn from(err: RustConversionError) -> Self {
31
+ Self::from(err.to_string())
32
+ }
33
+ }
34
+
35
+ impl From<serde_wasm_bindgen::Error> for RustConversionError {
36
+ fn from(err: Error) -> Self {
37
+ Self::from(err.to_string())
38
+ }
39
+ }
40
+
41
+ #[macro_export]
42
+ macro_rules! with_js_error {
43
+ ($o:expr) => {
44
+ $o.map_err(|e| RustConversionError::from(e).to_js_value())
45
+ };
46
+ }
47
+
48
+ #[macro_export]
49
+ macro_rules! bail_js {
50
+ ($msg:literal) => ({
51
+ return Err(RustConversionError::from(String::from($msg)).to_js_value())
52
+ });
53
+
54
+ ($err:expr $(,)?) => ({
55
+ use $crate::private::kind::*;
56
+ return Err(RustConversionError::from($err).to_js_value())
57
+ });
58
+
59
+ ($fmt:expr, $($arg:tt)*) => {
60
+ return Err(RustConversionError::from(format!($fmt, $($arg)*)).to_js_value())
61
+ };
62
+
63
+ }