@dashevo/wasm-dpp 0.23.0-dev.14 → 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,290 @@
1
+ #![allow(clippy::from_over_into)]
2
+
3
+ use std::collections::BTreeMap;
4
+ use std::convert::{TryFrom, TryInto};
5
+
6
+ pub use serde::{Deserialize, Serialize};
7
+ use serde_json::Value;
8
+ use wasm_bindgen::prelude::*;
9
+
10
+ use dpp::data_contract::{DataContract, SCHEMA_URI};
11
+ use dpp::util::string_encoding::Encoding;
12
+
13
+ use crate::errors::{from_dpp_err, RustConversionError};
14
+ use crate::metadata::MetadataWasm;
15
+ use crate::{bail_js, with_js_error};
16
+ use crate::{buffer::Buffer, identifier::IdentifierWrapper};
17
+
18
+ #[wasm_bindgen(js_name=DataContract)]
19
+ #[derive(Debug, Clone)]
20
+ pub struct DataContractWasm(DataContract);
21
+
22
+ impl std::convert::From<DataContract> for DataContractWasm {
23
+ fn from(v: DataContract) -> Self {
24
+ DataContractWasm(v)
25
+ }
26
+ }
27
+
28
+ impl std::convert::Into<DataContract> for DataContractWasm {
29
+ fn into(self) -> DataContract {
30
+ self.0
31
+ }
32
+ }
33
+
34
+ #[derive(Debug, Serialize, Deserialize)]
35
+ #[serde(rename_all = "camelCase")]
36
+ pub(crate) struct DataContractParameters {
37
+ #[serde(rename = "$schema")]
38
+ schema: String,
39
+ #[serde(rename = "$id")]
40
+ id: Vec<u8>,
41
+ owner_id: Vec<u8>,
42
+ #[serde(skip_serializing_if = "serde_json::Value::is_null", default)]
43
+ documents: serde_json::Value,
44
+ #[serde(
45
+ skip_serializing_if = "serde_json::Value::is_null",
46
+ default,
47
+ rename = "$defs"
48
+ )]
49
+ defs: serde_json::Value,
50
+ protocol_version: u32,
51
+ version: u32,
52
+ }
53
+
54
+ #[wasm_bindgen(js_class=DataContract)]
55
+ impl DataContractWasm {
56
+ #[wasm_bindgen(constructor)]
57
+ pub fn new(raw_parameters: JsValue) -> Result<DataContractWasm, JsValue> {
58
+ let parameters: DataContractParameters =
59
+ with_js_error!(serde_wasm_bindgen::from_value(raw_parameters))?;
60
+
61
+ DataContract::from_raw_object(
62
+ serde_json::to_value(parameters).expect("Implements Serialize"),
63
+ )
64
+ .map_err(from_dpp_err)
65
+ .map(Into::into)
66
+ }
67
+
68
+ #[wasm_bindgen(js_name=getProtocolVersion)]
69
+ pub fn get_protocol_version(&self) -> u32 {
70
+ self.0.protocol_version
71
+ }
72
+
73
+ #[wasm_bindgen(js_name=getId)]
74
+ pub fn get_id(&self) -> IdentifierWrapper {
75
+ self.0.id.clone().into()
76
+ }
77
+
78
+ #[wasm_bindgen(js_name=getOwnerId)]
79
+ pub fn get_owner_id(&self) -> IdentifierWrapper {
80
+ self.0.owner_id.clone().into()
81
+ }
82
+
83
+ #[wasm_bindgen(js_name=getVersion)]
84
+ pub fn get_version(&self) -> u32 {
85
+ self.0.version
86
+ }
87
+
88
+ #[wasm_bindgen(js_name=setVersion)]
89
+ pub fn set_version(&mut self, v: u32) {
90
+ self.0.version = v;
91
+ }
92
+
93
+ #[wasm_bindgen(js_name=incrementVersion)]
94
+ pub fn increment_version(&mut self) {
95
+ self.0.increment_version()
96
+ }
97
+
98
+ #[wasm_bindgen(js_name=getJsonSchemaId)]
99
+ pub fn get_json_schema_id(&self) -> String {
100
+ self.0.id.to_string(Encoding::Base58)
101
+ }
102
+
103
+ #[wasm_bindgen(js_name=setJsonMetaSchema)]
104
+ pub fn set_json_meta_schema(&mut self, schema: String) {
105
+ self.0.schema = schema;
106
+ }
107
+
108
+ #[wasm_bindgen(js_name=getJsonMetaSchema)]
109
+ pub fn get_json_meta_schema(&self) -> String {
110
+ self.0.schema.clone()
111
+ }
112
+ #[wasm_bindgen(js_name=setDocuments)]
113
+ pub fn set_documents(&mut self, documents: JsValue) -> Result<(), JsValue> {
114
+ let json_value: Value = with_js_error!(serde_wasm_bindgen::from_value(documents))?;
115
+
116
+ let mut docs: BTreeMap<String, Value> = BTreeMap::new();
117
+ if let Value::Object(o) = json_value {
118
+ for (k, v) in o.into_iter() {
119
+ if !v.is_object() {
120
+ bail_js!("is not an object")
121
+ }
122
+ docs.insert(k, v);
123
+ }
124
+ self.0.documents = docs;
125
+ } else {
126
+ bail_js!("the parameter 'documents' is not an JS object")
127
+ }
128
+ Ok(())
129
+ }
130
+
131
+ #[wasm_bindgen(js_name=getDocuments)]
132
+ pub fn get_documents(&self) -> Result<JsValue, JsValue> {
133
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
134
+ with_js_error!(self.0.documents.serialize(&serializer))
135
+ }
136
+
137
+ #[wasm_bindgen(js_name=isDocumentDefined)]
138
+ pub fn is_document_defined(&self, doc_type: String) -> bool {
139
+ self.0.is_document_defined(&doc_type)
140
+ }
141
+
142
+ #[wasm_bindgen(js_name=setDocumentSchema)]
143
+ pub fn set_document_schema(
144
+ &mut self,
145
+ doc_type: String,
146
+ schema: JsValue,
147
+ ) -> Result<(), JsValue> {
148
+ let json_schema: Value = with_js_error!(serde_wasm_bindgen::from_value(schema))?;
149
+ self.0.set_document_schema(doc_type, json_schema);
150
+ Ok(())
151
+ }
152
+
153
+ #[wasm_bindgen(js_name=getDocumentSchema)]
154
+ pub fn get_document_schema(&mut self, doc_type: &str) -> Result<JsValue, JsValue> {
155
+ let doc_schema = self.0.get_document_schema(doc_type).map_err(from_dpp_err)?;
156
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
157
+ with_js_error!(doc_schema.serialize(&serializer))
158
+ }
159
+
160
+ #[wasm_bindgen(js_name=getDocumentSchemaRef)]
161
+ pub fn get_document_schema_ref(&self, doc_type: &str) -> Result<JsValue, JsValue> {
162
+ with_js_error!(serde_wasm_bindgen::to_value(
163
+ &self
164
+ .0
165
+ .get_document_schema_ref(doc_type)
166
+ .map_err(from_dpp_err)?
167
+ ))
168
+ }
169
+
170
+ #[wasm_bindgen(js_name=setDefinitions)]
171
+ pub fn set_definitions(&mut self, definitions: JsValue) -> Result<(), JsValue> {
172
+ let json_value: Value = with_js_error!(serde_wasm_bindgen::from_value(definitions))?;
173
+ let mut definitions: BTreeMap<String, Value> = BTreeMap::new();
174
+ if let Value::Object(o) = json_value {
175
+ for (k, v) in o.into_iter() {
176
+ // v must be a Object
177
+ if !v.is_object() {
178
+ bail_js!("{:?} is not an object", v);
179
+ }
180
+ definitions.insert(k, v);
181
+ }
182
+ if definitions.is_empty() {
183
+ bail_js!("`defitions` cannot be empty");
184
+ }
185
+ self.0.defs = Some(definitions);
186
+ } else {
187
+ bail_js!("the parameter 'definitions' is not an JS object");
188
+ }
189
+ Ok(())
190
+ }
191
+
192
+ #[wasm_bindgen(js_name=getDefinitions)]
193
+ pub fn get_definitions(&self) -> Result<JsValue, JsValue> {
194
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
195
+ with_js_error!(self.0.defs.serialize(&serializer))
196
+ }
197
+
198
+ #[wasm_bindgen(js_name=setEntropy)]
199
+ pub fn set_entropy(&mut self, e: Vec<u8>) -> Result<(), JsValue> {
200
+ let entropy: [u8; 32] = e.try_into().map_err(|_| {
201
+ RustConversionError::Error(String::from(
202
+ "unable to turn the data into 32 bytes array of bytes",
203
+ ))
204
+ .to_js_value()
205
+ })?;
206
+ self.0.entropy = entropy;
207
+ Ok(())
208
+ }
209
+
210
+ #[wasm_bindgen(js_name=getEntropy)]
211
+ pub fn get_entropy(&mut self) -> Buffer {
212
+ Buffer::from_bytes(&self.0.entropy)
213
+ }
214
+
215
+ #[wasm_bindgen(js_name=getBinaryProperties)]
216
+ pub fn get_binary_properties(&self, doc_type: &str) -> Result<JsValue, JsValue> {
217
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
218
+ with_js_error!(self
219
+ .0
220
+ .get_binary_properties(doc_type)
221
+ .map_err(from_dpp_err)?
222
+ .serialize(&serializer))
223
+ }
224
+
225
+ #[wasm_bindgen(js_name=getMetadata)]
226
+ pub fn get_metadata(&self) -> Option<MetadataWasm> {
227
+ self.0.metadata.clone().map(Into::into)
228
+ }
229
+
230
+ #[wasm_bindgen(js_name=setMetadata)]
231
+ pub fn set_metadata(&mut self, metadata: MetadataWasm) {
232
+ self.0.metadata = Some(metadata.into());
233
+ }
234
+
235
+ #[wasm_bindgen(js_name=toObject)]
236
+ pub fn to_object(&self) -> Result<JsValue, JsValue> {
237
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
238
+ let object = with_js_error!(self.0.serialize(&serializer))?;
239
+
240
+ js_sys::Reflect::set(
241
+ &object,
242
+ &Into::<JsValue>::into("$id".to_owned()),
243
+ &Into::<JsValue>::into(Buffer::from_bytes(&self.0.id.buffer)),
244
+ )
245
+ .expect("target is an object");
246
+ js_sys::Reflect::set(
247
+ &object,
248
+ &Into::<JsValue>::into("ownerId".to_owned()),
249
+ &Into::<JsValue>::into(Buffer::from_bytes(&self.0.owner_id.buffer)),
250
+ )
251
+ .expect("target is an object");
252
+ Ok(object)
253
+ }
254
+
255
+ #[wasm_bindgen(js_name=toJSON)]
256
+ pub fn to_json(&self) -> Result<JsValue, JsValue> {
257
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
258
+ with_js_error!(self.0.serialize(&serializer))
259
+ }
260
+
261
+ #[wasm_bindgen(js_name=toBuffer)]
262
+ pub fn to_buffer(&self) -> Result<Buffer, JsValue> {
263
+ let bytes = self.0.to_buffer().map_err(from_dpp_err)?;
264
+ Ok(Buffer::from_bytes(&bytes))
265
+ }
266
+
267
+ #[wasm_bindgen(js_name=hash)]
268
+ pub fn hash(&self) -> Result<Vec<u8>, JsValue> {
269
+ self.0.hash().map_err(from_dpp_err)
270
+ }
271
+
272
+ #[wasm_bindgen(js_name=from)]
273
+ pub fn from(v: JsValue) -> Result<DataContractWasm, JsValue> {
274
+ let json_contract: Value = with_js_error!(serde_wasm_bindgen::from_value(v))?;
275
+ Ok(DataContract::try_from(json_contract)
276
+ .map_err(from_dpp_err)?
277
+ .into())
278
+ }
279
+ }
280
+
281
+ #[wasm_bindgen(js_name=DataContractDefaults)]
282
+ pub struct DataContractDefaults;
283
+
284
+ #[wasm_bindgen(js_class=DataContractDefaults)]
285
+ impl DataContractDefaults {
286
+ #[wasm_bindgen(getter = SCHEMA)]
287
+ pub fn get_default_schema() -> String {
288
+ SCHEMA_URI.to_string()
289
+ }
290
+ }
@@ -0,0 +1 @@
1
+ // TODO: Implement
@@ -0,0 +1,29 @@
1
+ use wasm_bindgen::prelude::*;
2
+
3
+ #[wasm_bindgen(js_name=InvalidDataContractError)]
4
+ #[derive(Debug)]
5
+ pub struct InvalidDataContractError {
6
+ // we have to store it as JsValue as the errors of 'class' Consensus are of different types
7
+ errors: Vec<JsValue>,
8
+ raw_data_contract: JsValue,
9
+ }
10
+
11
+ #[wasm_bindgen(js_class=InvalidDataContractError)]
12
+ impl InvalidDataContractError {
13
+ pub fn new(errors: Vec<JsValue>, raw_data_contract: JsValue) -> Self {
14
+ InvalidDataContractError {
15
+ errors,
16
+ raw_data_contract,
17
+ }
18
+ }
19
+
20
+ #[wasm_bindgen(js_name=getErrors)]
21
+ pub fn get_errors(&self) -> Vec<JsValue> {
22
+ self.errors.clone().into_iter().map(JsValue::from).collect()
23
+ }
24
+
25
+ #[wasm_bindgen(js_name=getRawDataContract)]
26
+ pub fn get_raw_data_contract(&self) -> JsValue {
27
+ self.raw_data_contract.clone()
28
+ }
29
+ }
@@ -0,0 +1,33 @@
1
+ use thiserror::Error;
2
+ use wasm_bindgen::prelude::*;
3
+
4
+ use crate::DataContractWasm;
5
+
6
+ #[wasm_bindgen]
7
+ #[derive(Error, Debug)]
8
+ #[error("Invalid Document Type")]
9
+ pub struct InvalidDocumentTypeInDataContractError {
10
+ // we have to store it as JsValue as the errors of 'class' Consensus are of different types
11
+ doc_type: String,
12
+ data_contract: DataContractWasm,
13
+ }
14
+
15
+ #[wasm_bindgen]
16
+ impl InvalidDocumentTypeInDataContractError {
17
+ #[wasm_bindgen(constructor)]
18
+ pub fn new(doc_type: String, data_contract: DataContractWasm) -> Self {
19
+ InvalidDocumentTypeInDataContractError {
20
+ doc_type,
21
+ data_contract,
22
+ }
23
+ }
24
+ #[wasm_bindgen(js_name = "getDocType")]
25
+ pub fn get_doc_type(&self) -> String {
26
+ self.doc_type.clone()
27
+ }
28
+
29
+ #[wasm_bindgen(js_name = "getDataContract")]
30
+ pub fn get_data_contract(&self) -> DataContractWasm {
31
+ self.data_contract.clone()
32
+ }
33
+ }
@@ -0,0 +1,37 @@
1
+ mod data_contract_already_exists;
2
+ mod invalid_data_contract;
3
+ mod invalid_document_type;
4
+
5
+ use wasm_bindgen::prelude::*;
6
+
7
+ use crate::errors::consensus_error::from_consensus_error;
8
+ pub use data_contract_already_exists::*;
9
+ use dpp::data_contract::errors::DataContractError;
10
+ pub use invalid_data_contract::*;
11
+
12
+ pub fn from_data_contract_to_js_error(e: DataContractError) -> JsValue {
13
+ match e {
14
+ DataContractError::InvalidDataContractError {
15
+ errors,
16
+ raw_data_contract,
17
+ } => {
18
+ let js_errors = errors.into_iter().map(from_consensus_error).collect();
19
+
20
+ InvalidDataContractError::new(
21
+ js_errors,
22
+ serde_wasm_bindgen::to_value(&raw_data_contract)
23
+ .expect("statically known structure should be a valid JSON"),
24
+ )
25
+ .into()
26
+ }
27
+ DataContractError::InvalidDocumentTypeError {
28
+ doc_type,
29
+ data_contract,
30
+ } => invalid_document_type::InvalidDocumentTypeInDataContractError::new(
31
+ doc_type,
32
+ data_contract.into(),
33
+ )
34
+ .into(),
35
+ _ => todo!(),
36
+ }
37
+ }
@@ -0,0 +1,61 @@
1
+ use dpp::{data_contract::extra::IndexProperty, util::json_schema::Index};
2
+ use wasm_bindgen::prelude::*;
3
+
4
+ #[wasm_bindgen(js_name=IndexProperty)]
5
+ #[derive(Debug, Clone)]
6
+ pub struct IndexPropertyWasm {
7
+ inner: IndexProperty,
8
+ }
9
+
10
+ impl From<IndexProperty> for IndexPropertyWasm {
11
+ fn from(v: IndexProperty) -> Self {
12
+ Self { inner: v }
13
+ }
14
+ }
15
+
16
+ #[wasm_bindgen(js_class=IndexProperty)]
17
+ impl IndexPropertyWasm {
18
+ #[wasm_bindgen(js_name=getName)]
19
+ pub fn get_name(&self) -> String {
20
+ self.inner.name.clone()
21
+ }
22
+
23
+ #[wasm_bindgen(js_name=isAscending)]
24
+ pub fn is_ascending(&self) -> bool {
25
+ self.inner.ascending
26
+ }
27
+ }
28
+
29
+ #[wasm_bindgen(js_name=IndexDefinition)]
30
+ #[derive(Debug, Clone)]
31
+ pub struct IndexDefinitionWasm {
32
+ inner: Index,
33
+ }
34
+
35
+ impl From<Index> for IndexDefinitionWasm {
36
+ fn from(v: Index) -> Self {
37
+ Self { inner: v }
38
+ }
39
+ }
40
+
41
+ #[wasm_bindgen(js_class=IndexDefinition)]
42
+ impl IndexDefinitionWasm {
43
+ #[wasm_bindgen(js_name=getName)]
44
+ pub fn get_name(&self) -> String {
45
+ self.inner.name.clone()
46
+ }
47
+
48
+ #[wasm_bindgen(js_name=getProperties)]
49
+ pub fn get_properties(&self) -> Vec<JsValue> {
50
+ self.inner
51
+ .properties
52
+ .iter()
53
+ .map(|property| IndexPropertyWasm::from(property.clone()).into())
54
+ .collect::<Vec<JsValue>>()
55
+ }
56
+
57
+ #[wasm_bindgen(js_name=isUnique)]
58
+ pub fn is_unique(&self) -> bool {
59
+ self.inner.unique
60
+ }
61
+ }
@@ -0,0 +1,10 @@
1
+ #![allow(clippy::module_inception)]
2
+ pub use data_contract::*;
3
+ pub use state_transition::*;
4
+
5
+ mod data_contract;
6
+ pub mod errors;
7
+ mod state_transition;
8
+
9
+ mod index;
10
+ pub use index::*;
@@ -0,0 +1,37 @@
1
+ use dpp::data_contract::state_transition::DataContractCreateTransition;
2
+ use wasm_bindgen::prelude::*;
3
+
4
+ use crate::{buffer::Buffer, DataContractWasm};
5
+
6
+ #[wasm_bindgen(js_name=DataContractCreateTransition)]
7
+ pub struct DataContractCreateTransitionWasm(DataContractCreateTransition);
8
+
9
+ impl From<DataContractCreateTransition> for DataContractCreateTransitionWasm {
10
+ fn from(v: DataContractCreateTransition) -> Self {
11
+ DataContractCreateTransitionWasm(v)
12
+ }
13
+ }
14
+
15
+ impl Into<DataContractCreateTransition> for DataContractCreateTransitionWasm {
16
+ fn into(self) -> DataContractCreateTransition {
17
+ self.0
18
+ }
19
+ }
20
+
21
+ #[wasm_bindgen(js_class=DataContractCreateTransition)]
22
+ impl DataContractCreateTransitionWasm {
23
+ #[wasm_bindgen(js_name=getDataContract)]
24
+ pub fn get_data_contract(&self) -> DataContractWasm {
25
+ self.0.data_contract.clone().into()
26
+ }
27
+
28
+ #[wasm_bindgen(js_name=getProtocolVersion)]
29
+ pub fn get_protocol_version(&self) -> u32 {
30
+ self.0.protocol_version.into()
31
+ }
32
+
33
+ #[wasm_bindgen(js_name=getEntropy)]
34
+ pub fn get_entropy(&self) -> Buffer {
35
+ Buffer::from_bytes(&self.0.entropy)
36
+ }
37
+ }
@@ -0,0 +1,3 @@
1
+ mod data_contract_create_transition;
2
+
3
+ pub use data_contract_create_transition::*;
@@ -0,0 +1,155 @@
1
+ use std::convert::TryInto;
2
+
3
+ use dpp::{
4
+ data_contract::{
5
+ validation::data_contract_validator::DataContractValidator, DataContractFactory,
6
+ EntropyGenerator,
7
+ },
8
+ prelude::Identifier,
9
+ version::ProtocolVersionValidator,
10
+ };
11
+ use wasm_bindgen::prelude::*;
12
+
13
+ use crate::{
14
+ data_contract::errors::InvalidDataContractError,
15
+ errors::{consensus_error::from_consensus_error, from_dpp_err, RustConversionError},
16
+ with_js_error, DataContractCreateTransitionWasm, DataContractParameters, DataContractWasm,
17
+ };
18
+
19
+ #[wasm_bindgen(js_name=DataContractValidator)]
20
+ pub struct DataContractValidatorWasm(DataContractValidator);
21
+
22
+ impl From<DataContractValidator> for DataContractValidatorWasm {
23
+ fn from(v: DataContractValidator) -> Self {
24
+ DataContractValidatorWasm(v)
25
+ }
26
+ }
27
+
28
+ impl Into<DataContractValidator> for DataContractValidatorWasm {
29
+ fn into(self) -> DataContractValidator {
30
+ self.0
31
+ }
32
+ }
33
+
34
+ #[wasm_bindgen(js_class=DataContractValidator)]
35
+ impl DataContractValidatorWasm {
36
+ #[wasm_bindgen(constructor)]
37
+ pub fn new() -> Self {
38
+ DataContractValidator::new(std::sync::Arc::new(ProtocolVersionValidator::default())).into()
39
+ }
40
+ }
41
+
42
+ #[wasm_bindgen(js_name=DataContractFactory)]
43
+ pub struct DataContractFactoryWasm(DataContractFactory);
44
+
45
+ impl From<DataContractFactory> for DataContractFactoryWasm {
46
+ fn from(v: DataContractFactory) -> Self {
47
+ DataContractFactoryWasm(v)
48
+ }
49
+ }
50
+
51
+ impl Into<DataContractFactory> for DataContractFactoryWasm {
52
+ fn into(self) -> DataContractFactory {
53
+ self.0
54
+ }
55
+ }
56
+
57
+ #[wasm_bindgen]
58
+ extern "C" {
59
+ pub type ExternalEntropyGenerator;
60
+
61
+ #[wasm_bindgen(structural, method)]
62
+ pub fn generate(this: &ExternalEntropyGenerator) -> Vec<u8>;
63
+ }
64
+
65
+ impl EntropyGenerator for ExternalEntropyGenerator {
66
+ fn generate(&self) -> [u8; 32] {
67
+ // TODO: think about changing API to return an error but does it worth it for JS?
68
+ let res = ExternalEntropyGenerator::generate(self)
69
+ .try_into()
70
+ .expect("Bad entropy generator provided: should return 32 bytes");
71
+ res
72
+ }
73
+ }
74
+ #[wasm_bindgen(js_class=DataContractFactory)]
75
+ impl DataContractFactoryWasm {
76
+ #[wasm_bindgen(constructor)]
77
+ pub fn new(
78
+ protocol_version: u32,
79
+ validate_data_contract: DataContractValidatorWasm,
80
+ external_entropy_generator_arg: Option<ExternalEntropyGenerator>,
81
+ ) -> DataContractFactoryWasm {
82
+ if let Some(external_entropy_generator) = external_entropy_generator_arg {
83
+ DataContractFactory::new_with_entropy_generator(
84
+ protocol_version,
85
+ validate_data_contract.into(),
86
+ Box::new(external_entropy_generator),
87
+ )
88
+ } else {
89
+ DataContractFactory::new(protocol_version, validate_data_contract.into()).into()
90
+ }
91
+ .into()
92
+ }
93
+
94
+ #[wasm_bindgen(js_name=create)]
95
+ pub fn create(
96
+ &self,
97
+ owner_id: Vec<u8>,
98
+ documents: JsValue,
99
+ ) -> Result<DataContractWasm, JsValue> {
100
+ let documents_json: serde_json::Value =
101
+ with_js_error!(serde_wasm_bindgen::from_value(documents))?;
102
+ let identifier = Identifier::from_bytes(&owner_id).map_err(from_dpp_err)?;
103
+ self.0
104
+ .create(identifier, documents_json)
105
+ .map(Into::into)
106
+ .map_err(from_dpp_err)
107
+ }
108
+
109
+ #[wasm_bindgen(js_name=createFromObject)]
110
+ pub async fn create_from_object(
111
+ &self,
112
+ object: JsValue,
113
+ skip_validation: Option<bool>,
114
+ ) -> Result<DataContractWasm, JsValue> {
115
+ let parameters: DataContractParameters =
116
+ with_js_error!(serde_wasm_bindgen::from_value(object.clone()))?;
117
+ let parameters_json = serde_json::to_value(parameters).expect("Implements Serialize");
118
+ let result = self
119
+ .0
120
+ .create_from_object(parameters_json, skip_validation.unwrap_or(false))
121
+ .await;
122
+ match result {
123
+ Ok(data_contract) => Ok(data_contract.into()),
124
+ Err(dpp::ProtocolError::InvalidDataContractError { errors, .. }) => {
125
+ let js_errors = errors.into_iter().map(from_consensus_error).collect();
126
+ Err(InvalidDataContractError::new(js_errors, object).into())
127
+ }
128
+ Err(other) => Err(from_dpp_err(other)),
129
+ }
130
+ }
131
+
132
+ #[wasm_bindgen(js_name=createFromBuffer)]
133
+ pub async fn create_from_buffer(
134
+ &self,
135
+ buffer: Vec<u8>,
136
+ skip_validation: Option<bool>,
137
+ ) -> Result<DataContractWasm, JsValue> {
138
+ self.0
139
+ .create_from_buffer(buffer, skip_validation.unwrap_or(false))
140
+ .await
141
+ .map(Into::into)
142
+ .map_err(from_dpp_err)
143
+ }
144
+
145
+ #[wasm_bindgen(js_name=createDataContractCreateTransition)]
146
+ pub async fn create_data_contract_create_transition(
147
+ &self,
148
+ data_contract: DataContractWasm,
149
+ ) -> Result<DataContractCreateTransitionWasm, JsValue> {
150
+ self.0
151
+ .create_data_contract_create_transition(data_contract.into())
152
+ .map(Into::into)
153
+ .map_err(from_dpp_err)
154
+ }
155
+ }
@@ -0,0 +1 @@
1
+ mod data_contract_factory;
@@ -0,0 +1,28 @@
1
+ use crate::state_transition::document_batch_transition::document_transition::from_document_transition_to_js_value;
2
+ use dpp::prelude::DocumentTransition;
3
+ use thiserror::Error;
4
+
5
+ use super::*;
6
+
7
+ #[wasm_bindgen]
8
+ #[derive(Error, Debug)]
9
+ #[error("Document already exists")]
10
+ pub struct DocumentAlreadyExistsError {
11
+ document_transition: DocumentTransition,
12
+ }
13
+
14
+ #[wasm_bindgen]
15
+ impl DocumentAlreadyExistsError {
16
+ #[wasm_bindgen(js_name=getDocumentTransition)]
17
+ pub fn get_document_transition(&self) -> JsValue {
18
+ from_document_transition_to_js_value(self.document_transition.clone())
19
+ }
20
+ }
21
+
22
+ impl DocumentAlreadyExistsError {
23
+ pub fn new(document_transition: DocumentTransition) -> DocumentAlreadyExistsError {
24
+ Self {
25
+ document_transition,
26
+ }
27
+ }
28
+ }