@dashevo/wasm-dpp 0.24.0-dev.12 → 0.24.0-dev.14

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 (245) hide show
  1. package/.mocharc.yml +1 -1
  2. package/Cargo.toml +5 -2
  3. package/README.md +5 -1
  4. package/dist/index.js +1 -1
  5. package/dist/index.js.LICENSE.txt +9 -0
  6. package/dist/wasm/wasm_dpp.d.ts +3397 -1237
  7. package/karma.conf.js +5 -0
  8. package/lib/identifier/patchIdentifier.ts +5 -4
  9. package/lib/index.ts +1 -1
  10. package/lib/test/bootstrap.js +5 -0
  11. package/lib/test/fixtures/getDataContractFixture.js +267 -0
  12. package/lib/test/fixtures/getDocumentsFixture.js +43 -0
  13. package/lib/test/mocks/createStateRepositoryMock.js +64 -0
  14. package/lib/test/mocks/getBlsAdapterMock.js +51 -0
  15. package/package.json +11 -8
  16. package/src/bls_adapter.rs +17 -1
  17. package/src/buffer.rs +3 -0
  18. package/src/dash_platform_protocol.rs +107 -10
  19. package/src/data_contract/data_contract.rs +59 -10
  20. package/src/data_contract/data_contract_facade.rs +128 -0
  21. package/src/data_contract/errors/invalid_data_contract.rs +16 -16
  22. package/src/data_contract/errors/invalid_document_type.rs +8 -8
  23. package/src/data_contract/errors/mod.rs +10 -16
  24. package/src/data_contract/index.rs +56 -1
  25. package/src/data_contract/mod.rs +4 -0
  26. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +1 -1
  27. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +41 -10
  28. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +35 -4
  29. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +1 -1
  30. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +20 -7
  31. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +47 -11
  32. package/src/data_contract_factory/data_contract_factory.rs +19 -17
  33. package/src/data_trigger/data_trigger_execution_context.rs +95 -0
  34. package/src/data_trigger/data_trigger_execution_result.rs +48 -0
  35. package/src/data_trigger/execute_data_triggers_factory.rs +60 -0
  36. package/src/data_trigger/get_data_triggers_factory.rs +65 -0
  37. package/src/data_trigger/mod.rs +121 -0
  38. package/src/document/document_facade.rs +125 -0
  39. package/src/document/errors/invalid_document_error.rs +10 -9
  40. package/src/document/errors/invalid_initial_revision_error.rs +1 -1
  41. package/src/document/errors/mismatch_owners_ids_error.rs +14 -4
  42. package/src/document/errors/mod.rs +17 -13
  43. package/src/document/errors/no_documents_supplied_error.rs +4 -4
  44. package/src/document/factory.rs +257 -0
  45. package/src/document/fetch_and_validate_data_contract.rs +77 -0
  46. package/src/document/generate_document_id.rs +17 -0
  47. package/src/document/mod.rs +311 -37
  48. package/src/document/state_transition/document_batch_transition/apply_document_batch_transition.rs +22 -0
  49. package/src/document/state_transition/document_batch_transition/document_transition/document_create_transition.rs +253 -1
  50. package/src/document/state_transition/document_batch_transition/document_transition/document_delete_transition.rs +60 -1
  51. package/src/document/state_transition/document_batch_transition/document_transition/document_replace_transition.rs +263 -0
  52. package/src/document/state_transition/document_batch_transition/document_transition/mod.rs +302 -3
  53. package/src/document/state_transition/document_batch_transition/mod.rs +378 -0
  54. package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_id.rs +40 -0
  55. package/src/document/state_transition/document_batch_transition/validation/basic/find_duplicates_by_indices.rs +50 -0
  56. package/src/document/state_transition/document_batch_transition/validation/basic/mod.rs +8 -0
  57. package/src/document/state_transition/document_batch_transition/validation/basic/validate_documents_batch_transition_basic.rs +34 -0
  58. package/src/document/state_transition/document_batch_transition/validation/basic/validate_partial_compound_indices.rs +39 -0
  59. package/src/document/state_transition/document_batch_transition/validation/mod.rs +2 -0
  60. package/src/document/state_transition/document_batch_transition/validation/state/fetch_documents.rs +43 -0
  61. package/src/document/state_transition/document_batch_transition/validation/state/mod.rs +3 -0
  62. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_batch_transitions_state.rs +27 -0
  63. package/src/document/state_transition/document_batch_transition/validation/state/validate_documents_uniqueness_by_indices.rs +47 -0
  64. package/src/document/validator.rs +52 -0
  65. package/src/errors/compatible_protocol_version_is_not_defined_error.rs +24 -0
  66. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +1 -1
  67. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +1 -1
  68. package/src/errors/consensus/basic/document/inconsistent_compound_index_data_error.rs +2 -2
  69. package/src/errors/consensus/basic/document/invalid_document_type_error.rs +15 -1
  70. package/src/errors/consensus/basic/document/missing_data_contract_id_error.rs +16 -2
  71. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +1 -1
  72. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +1 -1
  73. package/src/errors/consensus/basic/identity/identity_asset_lock_proof_locked_transaction_mismatch_error.rs +6 -2
  74. package/src/errors/consensus/basic/identity/identity_asset_lock_transaction_out_point_already_exists_error.rs +5 -2
  75. package/src/errors/consensus/basic/identity/invalid_asset_lock_proof_transaction_height_error.rs +3 -3
  76. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_core_fee_error.rs +2 -2
  77. package/src/errors/consensus/basic/identity/invalid_identity_credit_withdrawal_transition_pooling_error.rs +29 -0
  78. package/src/errors/consensus/basic/identity/invalid_identity_key_signature_error.rs +4 -3
  79. package/src/errors/consensus/basic/identity/invalid_identity_public_key_data_error.rs +1 -1
  80. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +1 -1
  81. package/src/errors/consensus/basic/identity/missing_public_key_error.rs +4 -3
  82. package/src/errors/consensus/basic/identity/mod.rs +2 -0
  83. package/src/errors/consensus/basic/invalid_identifier_error.rs +1 -1
  84. package/src/errors/consensus/basic/json_schema_error.rs +8 -2
  85. package/src/errors/consensus/basic/public_key_is_disabled_error.rs +1 -1
  86. package/src/errors/consensus/state/document/document_timestamp_window_violation_error.rs +9 -9
  87. package/src/errors/consensus/state/document/invalid_document_revision_error.rs +4 -4
  88. package/src/errors/consensus/state/identity/duplicated_identity_public_key_id_state_error.rs +35 -0
  89. package/src/errors/consensus/state/identity/duplicated_identity_public_key_state_error.rs +34 -0
  90. package/src/errors/consensus/state/identity/identity_public_key_disabled_at_window_violation_error.rs +10 -7
  91. package/src/errors/consensus/state/identity/identity_public_key_is_disabled_error.rs +2 -3
  92. package/src/errors/consensus/state/identity/identity_public_key_is_read_only_error.rs +7 -3
  93. package/src/errors/consensus/state/identity/invalid_identity_public_key_id_error.rs +2 -3
  94. package/src/errors/consensus/state/identity/invalid_identity_revision_error.rs +7 -4
  95. package/src/errors/consensus/state/identity/max_identity_public_key_limit_reached_error.rs +2 -1
  96. package/src/errors/consensus/state/identity/mod.rs +4 -0
  97. package/src/errors/consensus_error.rs +218 -268
  98. package/src/errors/data_contract_not_present_error.rs +23 -0
  99. package/src/errors/dpp_error.rs +17 -0
  100. package/src/errors/from.rs +22 -0
  101. package/src/errors/js_conversion.rs +52 -5
  102. package/src/errors/mod.rs +6 -0
  103. package/src/errors/protocol_error.rs +14 -3
  104. package/src/identifier/errors.rs +30 -0
  105. package/src/identifier/mod.rs +95 -11
  106. package/src/identity/errors/asset_lock_output_not_found_error.rs +11 -0
  107. package/src/identity/errors/asset_lock_transaction_is_not_found_error.rs +20 -0
  108. package/src/identity/errors/invalid_identity_error.rs +32 -0
  109. package/src/identity/errors/mod.rs +9 -0
  110. package/src/identity/errors/unknown_asset_lock_proof_type_error.rs +26 -0
  111. package/src/identity/factory_utils.rs +87 -0
  112. package/src/identity/identity_facade.rs +194 -20
  113. package/src/identity/identity_factory.rs +209 -0
  114. package/src/identity/identity_public_key/mod.rs +51 -40
  115. package/src/identity/mod.rs +31 -17
  116. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof.rs +132 -0
  117. package/src/identity/state_transition/asset_lock_proof/chain/chain_asset_lock_proof_structure_validator.rs +72 -0
  118. package/src/identity/state_transition/asset_lock_proof/chain/mod.rs +4 -0
  119. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof.rs +177 -0
  120. package/src/identity/state_transition/asset_lock_proof/instant/instant_asset_lock_proof_structure_validator.rs +72 -0
  121. package/src/identity/state_transition/asset_lock_proof/instant/mod.rs +4 -0
  122. package/src/identity/state_transition/asset_lock_proof/mod.rs +269 -0
  123. package/src/identity/state_transition/identity_create_transition/apply_identity_create_transition.rs +26 -0
  124. package/src/identity/state_transition/identity_create_transition/identity_create_transition.rs +337 -0
  125. package/src/identity/state_transition/identity_create_transition/identity_create_transition_basic_validator.rs +153 -0
  126. package/src/identity/state_transition/identity_create_transition/identity_create_transition_state_validator.rs +37 -0
  127. package/src/identity/state_transition/identity_create_transition/mod.rs +8 -0
  128. package/src/identity/state_transition/identity_create_transition/to_object.rs +45 -0
  129. package/src/identity/state_transition/identity_public_key_transitions.rs +207 -0
  130. package/src/identity/state_transition/identity_topup_transition/apply_identity_topup_transition.rs +31 -0
  131. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition.rs +278 -0
  132. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_basic_validator.rs +113 -0
  133. package/src/identity/state_transition/identity_topup_transition/identity_topup_transition_state_validator.rs +37 -0
  134. package/src/identity/state_transition/identity_topup_transition/mod.rs +8 -0
  135. package/src/identity/state_transition/identity_topup_transition/to_object.rs +42 -0
  136. package/src/identity/state_transition/identity_update_transition/apply_identity_update_transition.rs +24 -0
  137. package/src/identity/state_transition/identity_update_transition/identity_update_public_keys_validator.rs +55 -0
  138. package/src/identity/state_transition/identity_update_transition/identity_update_transition.rs +448 -0
  139. package/src/identity/state_transition/identity_update_transition/identity_update_transition_basic_validator.rs +94 -0
  140. package/src/identity/state_transition/identity_update_transition/identity_update_transition_state_validator.rs +53 -0
  141. package/src/identity/state_transition/identity_update_transition/mod.rs +9 -0
  142. package/src/identity/state_transition/identity_update_transition/to_object.rs +66 -0
  143. package/src/identity/state_transition/mod.rs +12 -0
  144. package/src/identity/state_transition/validate_public_key_signatures.rs +61 -0
  145. package/src/identity/validation/identity_validator.rs +50 -0
  146. package/src/identity/validation/mod.rs +2 -0
  147. package/src/identity/validation/public_keys_validator.rs +14 -13
  148. package/src/identity_public_key/public_keys_validator.rs +44 -0
  149. package/src/lib.rs +6 -0
  150. package/src/lodash.rs +7 -0
  151. package/src/metadata.rs +54 -10
  152. package/src/state_repository.rs +598 -101
  153. package/src/state_transition/conversion.rs +104 -0
  154. package/src/state_transition/errors/invalid_state_transition_error.rs +32 -0
  155. package/src/state_transition/errors/mod.rs +1 -0
  156. package/src/state_transition/mod.rs +46 -0
  157. package/src/state_transition/state_transition_facade.rs +263 -0
  158. package/src/state_transition/state_transition_factory.rs +216 -0
  159. package/src/state_transition/validation/mod.rs +1 -0
  160. package/src/state_transition/validation/validate_state_transition_key_signature.rs +62 -0
  161. package/src/utils.rs +210 -8
  162. package/src/validation/json_schema_validator.rs +41 -0
  163. package/src/validation/mod.rs +2 -0
  164. package/src/validation/validation_result.rs +29 -5
  165. package/src/version/mod.rs +2 -0
  166. package/src/version/protocol_version.rs +103 -0
  167. package/test/integration/dataContract/DataContractFacade.spec.js +46 -30
  168. package/test/integration/dataContract/stateTransition/DataContractCreateTransition/validation/basic/validateDataContractCreateTransitionBasicFactory.spec.js +45 -127
  169. package/test/integration/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateDataContractUpdateTransitionBasicFactory.spec.js +91 -139
  170. package/test/integration/dataContract/validation/validateDataContractFactory.spec.js +577 -503
  171. package/test/integration/document/Document.spec.js +55 -29
  172. package/test/integration/document/DocumentFacade.spec.js +51 -64
  173. package/test/integration/document/stateTransition/DocumentsBatchTransition/DocumentBatchTransition.spec.js +38 -16
  174. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +341 -396
  175. package/test/integration/document/stateTransition/DocumentsBatchTransition/validation/state/executeDataTriggersFactory.spec.js +116 -218
  176. package/test/integration/document/validation/validateDocumentFactory.spec.js +123 -171
  177. package/test/integration/identity/IdentityFacade.spec.js +52 -27
  178. package/test/integration/identity/stateTransition/IdentityCreateTransition/validation/basic/validateIdentityCreateTransitionBasicFactory.spec.js +185 -164
  179. package/test/integration/identity/stateTransition/IdentityTopUpTransition/validation/basic/validateIdentityTopUpTransitionBasicFactory.spec.js +84 -114
  180. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/basic/validateIdentityUpdateTransitionBasicFactory.spec.js +120 -137
  181. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +106 -91
  182. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validatePublicKeysState.spec.js +50 -16
  183. package/test/integration/identity/stateTransition/assetLockProof/chain/validateChainAssetLockProofStructureFactory.spec.js +78 -86
  184. package/test/integration/identity/stateTransition/assetLockProof/fetchAssetLockTransactionOutputFactory.spec.js +74 -30
  185. package/test/integration/identity/stateTransition/assetLockProof/instant/validateInstantAssetLockProofStructureFactory.spec.js +93 -147
  186. package/test/integration/identity/stateTransition/assetLockProof/validateAssetLockTransactionFactory.spec.js +65 -77
  187. package/test/integration/identity/stateTransition/validatePublicKeySignaturesFactory.spec.js +60 -23
  188. package/test/integration/identity/validation/validateIdentityFactory.spec.js +46 -114
  189. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +9 -3
  190. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +12 -8
  191. package/test/integration/stateTransition/StateTransitionFacade.spec.js +95 -233
  192. package/test/integration/stateTransition/calculateStateTransitionFeeFromOperationsFactory.spec.js +53 -0
  193. package/test/unit/Identifier.spec.js +36 -36
  194. package/test/unit/Metadata.spec.js +17 -3
  195. package/test/unit/dataContract/DataContract.spec.js +9 -4
  196. package/test/unit/dataContract/createDataContract.spec.js +0 -1
  197. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +3 -3
  198. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +1 -1
  199. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +2 -2
  200. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +3 -3
  201. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +1 -1
  202. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +25 -31
  203. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +3 -3
  204. package/test/unit/dataTrigger/rewardShareDataTriggers/createMasternodeRewardSharesDataTrigger.spec.js +2 -0
  205. package/test/unit/decodeProtocolEntityFactory.spec.js +2 -2
  206. package/test/unit/document/Document.spec.js +147 -155
  207. package/test/unit/document/DocumentFactory.spec.js +153 -153
  208. package/test/unit/document/fetchAndValidateDataContractFactory.spec.js +59 -14
  209. package/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +131 -62
  210. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +144 -56
  211. package/test/unit/document/stateTransition/DocumetsBatchTransition/documentTransition/DocumentCreateTransition.spec.js +38 -8
  212. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesById.spec.js +11 -7
  213. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/findDuplicatesByIndices.spec.js +29 -18
  214. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/basic/validatePartialCompoundIndices.spec.js +38 -29
  215. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/fetchDocumentsFactory.spec.js +53 -91
  216. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +357 -493
  217. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +133 -72
  218. package/test/unit/identity/Identity.spec.js +26 -9
  219. package/test/unit/identity/IdentityFactory.spec.js +81 -89
  220. package/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +73 -30
  221. package/test/unit/identity/stateTransition/IdentityCreateTransition/applyIdentityCreateTransitionFactory.spec.js +38 -38
  222. package/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +34 -25
  223. package/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +36 -16
  224. package/test/unit/identity/stateTransition/IdentityTopUpTransition/applyIdentityTopUpTransitionFactory.spec.js +85 -50
  225. package/test/unit/identity/stateTransition/IdentityTopUpTransition/validation/state/validateIdentityTopUpTransitionStateFactory.spec.js +24 -6
  226. package/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +44 -22
  227. package/test/unit/identity/stateTransition/IdentityUpdateTransition/applyIdentityUpdateTransitionFactory.spec.js +58 -103
  228. package/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +63 -0
  229. package/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +90 -0
  230. package/test/unit/identity/stateTransition/assetLockProof/createAssetLockProofInstance.spec.js +18 -3
  231. package/test/unit/identity/stateTransition/assetLockProof/fetchAssetLockPublicKeyHashFactory.spec.js +38 -11
  232. package/test/unit/stateTransition/StateTransitionFactory.spec.js +49 -101
  233. package/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +23 -25
  234. package/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +73 -46
  235. package/test/unit/version/validateProtocolVersionFactory.spec.js +45 -27
  236. package/wasm/package.json +5 -0
  237. package/wasm/wasm_dpp.d.ts +3397 -1237
  238. package/wasm/wasm_dpp.js +7158 -1384
  239. package/wasm/wasm_dpp_bg.js +1 -1
  240. package/wasm/wasm_dpp_bg.wasm +0 -0
  241. package/wasm/wasm_dpp_bg.wasm.d.ts +777 -389
  242. package/webpack.config.js +9 -0
  243. package/src/document/state_transition/document_batch_transition/document_transition/document_update_transition.rs +0 -22
  244. package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +0 -135
  245. package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +0 -54
@@ -1,11 +1,13 @@
1
1
  mod apply;
2
2
  mod validation;
3
3
 
4
+ use std::collections::HashMap;
5
+
4
6
  pub use apply::*;
5
7
  pub use validation::*;
6
8
 
7
9
  use dpp::{
8
- data_contract::state_transition::DataContractCreateTransition,
10
+ data_contract::state_transition::data_contract_create_transition::DataContractCreateTransition,
9
11
  state_transition::{
10
12
  StateTransitionConvert, StateTransitionIdentitySigned, StateTransitionLike,
11
13
  },
@@ -13,13 +15,15 @@ use dpp::{
13
15
  use serde::{Deserialize, Serialize};
14
16
  use wasm_bindgen::prelude::*;
15
17
 
18
+ use crate::bls_adapter::{BlsAdapter, JsBlsAdapter};
19
+ use crate::errors::protocol_error::from_protocol_error;
16
20
  use crate::{
17
- buffer::Buffer,
18
- errors::{from_dpp_err, RustConversionError},
19
- identifier::IdentifierWrapper,
20
- with_js_error, DataContractParameters, DataContractWasm, StateTransitionExecutionContextWasm,
21
+ buffer::Buffer, errors::from_dpp_err, identifier::IdentifierWrapper, with_js_error,
22
+ DataContractParameters, DataContractWasm, IdentityPublicKeyWasm,
23
+ StateTransitionExecutionContextWasm,
21
24
  };
22
25
 
26
+ #[derive(Clone)]
23
27
  #[wasm_bindgen(js_name=DataContractCreateTransition)]
24
28
  pub struct DataContractCreateTransitionWasm(DataContractCreateTransition);
25
29
 
@@ -38,15 +42,14 @@ impl From<DataContractCreateTransitionWasm> for DataContractCreateTransition {
38
42
  #[derive(Debug, Serialize, Deserialize)]
39
43
  #[serde(rename_all = "camelCase")]
40
44
  struct DataContractCreateTransitionParameters {
41
- protocol_version: u32,
42
45
  #[serde(skip_serializing_if = "Option::is_none", default)]
43
46
  data_contract: Option<DataContractParameters>,
44
47
  #[serde(skip_serializing_if = "Option::is_none", default)]
45
48
  entropy: Option<Vec<u8>>,
46
49
  #[serde(skip_serializing_if = "Option::is_none", default)]
47
- signature_public_key_id: Option<u64>,
48
- #[serde(skip_serializing_if = "Option::is_none", default)]
49
50
  signature: Option<Vec<u8>>,
51
+ #[serde(flatten)]
52
+ extra: HashMap<String, serde_json::Value>,
50
53
  }
51
54
 
52
55
  #[wasm_bindgen(js_class=DataContractCreateTransition)]
@@ -79,7 +82,7 @@ impl DataContractCreateTransitionWasm {
79
82
 
80
83
  #[wasm_bindgen(js_name=getOwnerId)]
81
84
  pub fn get_owner_id(&self) -> IdentifierWrapper {
82
- self.0.get_owner_id().clone().into()
85
+ (*self.0.get_owner_id()).into()
83
86
  }
84
87
 
85
88
  #[wasm_bindgen(js_name=getType)]
@@ -112,7 +115,7 @@ impl DataContractCreateTransitionWasm {
112
115
  self.0
113
116
  .get_modified_data_ids()
114
117
  .into_iter()
115
- .map(|identifier| Into::<IdentifierWrapper>::into(identifier.clone()).into())
118
+ .map(|identifier| Into::<IdentifierWrapper>::into(identifier).into())
116
119
  .collect()
117
120
  }
118
121
 
@@ -135,4 +138,32 @@ impl DataContractCreateTransitionWasm {
135
138
  pub fn set_execution_context(&mut self, context: &StateTransitionExecutionContextWasm) {
136
139
  self.0.set_execution_context(context.into())
137
140
  }
141
+
142
+ #[wasm_bindgen(js_name=toObject)]
143
+ pub fn to_object(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {
144
+ let serde_object = self
145
+ .0
146
+ .to_object(skip_signature.unwrap_or(false))
147
+ .map_err(from_protocol_error)?;
148
+ serde_object
149
+ .serialize(&serde_wasm_bindgen::Serializer::json_compatible())
150
+ .map_err(|e| e.into())
151
+ }
152
+
153
+ #[wasm_bindgen]
154
+ pub fn sign(
155
+ &mut self,
156
+ identity_public_key: &IdentityPublicKeyWasm,
157
+ private_key: Vec<u8>,
158
+ bls: JsBlsAdapter,
159
+ ) -> Result<(), JsValue> {
160
+ let bls_adapter = BlsAdapter(bls);
161
+ self.0
162
+ .sign(
163
+ &identity_public_key.to_owned().into(),
164
+ &private_key,
165
+ &bls_adapter,
166
+ )
167
+ .map_err(from_dpp_err)
168
+ }
138
169
  }
@@ -1,4 +1,14 @@
1
- use dpp::data_contract::state_transition::data_contract_create_transition::validation::state::validate_data_contract_create_transition_state::validate_data_contract_create_transition_state as dpp_validate_data_contract_create_transition_state;
1
+ use std::sync::Arc;
2
+
3
+ use dpp::{
4
+ data_contract::state_transition::data_contract_create_transition::validation::state::{
5
+ validate_data_contract_create_transition_basic::DataContractCreateTransitionBasicValidator,
6
+ validate_data_contract_create_transition_state::validate_data_contract_create_transition_state as dpp_validate_data_contract_create_transition_state,
7
+ },
8
+ state_transition::state_transition_execution_context::StateTransitionExecutionContext,
9
+ validation::DataValidatorWithContext,
10
+ version::ProtocolVersionValidator,
11
+ };
2
12
  use wasm_bindgen::prelude::*;
3
13
 
4
14
  use crate::validation::ValidationResultWasm;
@@ -8,17 +18,38 @@ use crate::{
8
18
  DataContractCreateTransitionWasm,
9
19
  };
10
20
 
21
+ use super::DataContractCreateTransitionParameters;
22
+
11
23
  #[wasm_bindgen(js_name=validateDataContractCreateTransitionState)]
12
24
  pub async fn validate_data_contract_create_transition_state(
13
25
  state_repository: ExternalStateRepositoryLike,
14
26
  state_transition: DataContractCreateTransitionWasm,
15
27
  ) -> Result<ValidationResultWasm, JsValue> {
16
28
  let wrapped_state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
17
- dpp_validate_data_contract_create_transition_state(
29
+ let validation_result = dpp_validate_data_contract_create_transition_state(
18
30
  &wrapped_state_repository,
19
31
  &state_transition.into(),
20
32
  )
21
33
  .await
22
- .map(Into::<ValidationResultWasm>::into)
23
- .map_err(from_dpp_err)
34
+ .map_err(from_dpp_err)?;
35
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
36
+ }
37
+
38
+ #[wasm_bindgen(js_name=validateDataContractCreateTransitionBasic)]
39
+ pub async fn validate_data_contract_create_transition_basic(
40
+ raw_parameters: JsValue,
41
+ ) -> Result<ValidationResultWasm, JsError> {
42
+ let parameters: DataContractCreateTransitionParameters =
43
+ serde_wasm_bindgen::from_value(raw_parameters)?;
44
+
45
+ let validator = DataContractCreateTransitionBasicValidator::new(Arc::new(
46
+ ProtocolVersionValidator::default(),
47
+ ))?;
48
+
49
+ let validation_result = validator.validate(
50
+ &serde_json::to_value(&parameters)?,
51
+ &StateTransitionExecutionContext::default(),
52
+ )?;
53
+
54
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
24
55
  }
@@ -1,6 +1,6 @@
1
1
  use std::ops::Deref;
2
2
 
3
- use dpp::data_contract::state_transition::apply_data_contract_update_transition_factory::ApplyDataContractUpdateTransition;
3
+ use dpp::data_contract::state_transition::data_contract_update_transition::apply_data_contract_update_transition_factory::ApplyDataContractUpdateTransition;
4
4
  use wasm_bindgen::prelude::*;
5
5
 
6
6
  use crate::{
@@ -1,11 +1,13 @@
1
1
  mod apply;
2
2
  mod validation;
3
3
 
4
+ use std::collections::HashMap;
5
+
4
6
  pub use apply::*;
5
7
  pub use validation::*;
6
8
 
7
9
  use dpp::{
8
- data_contract::state_transition::DataContractUpdateTransition,
10
+ data_contract::state_transition::data_contract_update_transition::DataContractUpdateTransition,
9
11
  state_transition::{
10
12
  StateTransitionConvert, StateTransitionIdentitySigned, StateTransitionLike,
11
13
  },
@@ -15,11 +17,12 @@ use wasm_bindgen::prelude::*;
15
17
 
16
18
  use crate::{
17
19
  buffer::Buffer,
18
- errors::{from_dpp_err, RustConversionError},
20
+ errors::{from_dpp_err, protocol_error::from_protocol_error},
19
21
  identifier::IdentifierWrapper,
20
22
  with_js_error, DataContractParameters, DataContractWasm, StateTransitionExecutionContextWasm,
21
23
  };
22
24
 
25
+ #[derive(Clone)]
23
26
  #[wasm_bindgen(js_name=DataContractUpdateTransition)]
24
27
  pub struct DataContractUpdateTransitionWasm(DataContractUpdateTransition);
25
28
 
@@ -38,15 +41,14 @@ impl From<DataContractUpdateTransitionWasm> for DataContractUpdateTransition {
38
41
  #[derive(Debug, Serialize, Deserialize)]
39
42
  #[serde(rename_all = "camelCase")]
40
43
  struct DataContractUpdateTransitionParameters {
41
- protocol_version: u32,
42
44
  #[serde(skip_serializing_if = "Option::is_none", default)]
43
45
  data_contract: Option<DataContractParameters>,
44
46
  #[serde(skip_serializing_if = "Option::is_none", default)]
45
47
  entropy: Option<Vec<u8>>,
46
48
  #[serde(skip_serializing_if = "Option::is_none", default)]
47
- signature_public_key_id: Option<u64>,
48
- #[serde(skip_serializing_if = "Option::is_none", default)]
49
49
  signature: Option<Vec<u8>>,
50
+ #[serde(flatten)]
51
+ extra: HashMap<String, serde_json::Value>,
50
52
  }
51
53
 
52
54
  #[wasm_bindgen(js_class=DataContractUpdateTransition)]
@@ -79,7 +81,7 @@ impl DataContractUpdateTransitionWasm {
79
81
 
80
82
  #[wasm_bindgen(js_name=getOwnerId)]
81
83
  pub fn get_owner_id(&self) -> IdentifierWrapper {
82
- self.0.get_owner_id().clone().into()
84
+ (*self.0.get_owner_id()).into()
83
85
  }
84
86
 
85
87
  #[wasm_bindgen(js_name=getType)]
@@ -112,7 +114,7 @@ impl DataContractUpdateTransitionWasm {
112
114
  self.0
113
115
  .get_modified_data_ids()
114
116
  .into_iter()
115
- .map(|identifier| Into::<IdentifierWrapper>::into(identifier.clone()).into())
117
+ .map(|identifier| Into::<IdentifierWrapper>::into(identifier).into())
116
118
  .collect()
117
119
  }
118
120
 
@@ -144,4 +146,15 @@ impl DataContractUpdateTransitionWasm {
144
146
  .map_err(from_dpp_err)?;
145
147
  Ok(Buffer::from_bytes(&bytes))
146
148
  }
149
+
150
+ #[wasm_bindgen(js_name=toObject)]
151
+ pub fn to_object(&self, skip_signature: Option<bool>) -> Result<JsValue, JsValue> {
152
+ let serde_object = self
153
+ .0
154
+ .to_object(skip_signature.unwrap_or(false))
155
+ .map_err(from_protocol_error)?;
156
+ serde_object
157
+ .serialize(&serde_wasm_bindgen::Serializer::json_compatible())
158
+ .map_err(|e| e.into())
159
+ }
147
160
  }
@@ -1,16 +1,24 @@
1
- use std::collections::BTreeMap;
1
+ use std::{collections::BTreeMap, sync::Arc};
2
2
 
3
- use dpp::data_contract::state_transition::data_contract_update_transition::validation::{
4
- basic::validate_indices_are_backward_compatible as dpp_validate_indices_are_backward_compatible,
5
- state::validate_data_contract_update_transition_state::validate_data_contract_update_transition_state as dpp_validate_data_contract_update_transition_state,
3
+ use dpp::validation::AsyncDataValidatorWithContext;
4
+ use dpp::{
5
+ data_contract::state_transition::data_contract_update_transition::validation::{
6
+ basic::{
7
+ validate_indices_are_backward_compatible as dpp_validate_indices_are_backward_compatible,
8
+ DataContractUpdateTransitionBasicValidator,
9
+ },
10
+ state::validate_data_contract_update_transition_state::validate_data_contract_update_transition_state as dpp_validate_data_contract_update_transition_state,
11
+ },
12
+ version::ProtocolVersionValidator,
6
13
  };
7
14
  use wasm_bindgen::prelude::*;
8
15
 
9
16
  use crate::{
17
+ data_contract::state_transition::data_contract_update_transition::DataContractUpdateTransitionParameters,
10
18
  errors::{from_dpp_err, protocol_error::from_protocol_error},
11
19
  state_repository::{ExternalStateRepositoryLike, ExternalStateRepositoryLikeWrapper},
12
20
  validation::ValidationResultWasm,
13
- DataContractUpdateTransitionWasm,
21
+ DataContractUpdateTransitionWasm, StateTransitionExecutionContextWasm,
14
22
  };
15
23
 
16
24
  #[wasm_bindgen(js_name=validateDataContractUpdateTransitionState)]
@@ -19,13 +27,14 @@ pub async fn validate_data_contract_update_transition_state(
19
27
  state_transition: DataContractUpdateTransitionWasm,
20
28
  ) -> Result<ValidationResultWasm, JsValue> {
21
29
  let wrapped_state_repository = ExternalStateRepositoryLikeWrapper::new(state_repository);
22
- dpp_validate_data_contract_update_transition_state(
30
+ let result = dpp_validate_data_contract_update_transition_state(
23
31
  &wrapped_state_repository,
24
32
  &state_transition.into(),
25
33
  )
26
34
  .await
27
- .map(Into::into)
28
- .map_err(from_dpp_err)
35
+ .map_err(from_dpp_err)?;
36
+
37
+ Ok(result.map(|_| JsValue::undefined()).into())
29
38
  }
30
39
 
31
40
  #[wasm_bindgen(js_name=validateIndicesAreBackwardCompatible)]
@@ -40,7 +49,34 @@ pub fn validate_indices_are_backward_compatible(
40
49
  new_documents_schema,
41
50
  )?;
42
51
 
43
- dpp_validate_indices_are_backward_compatible(old_documents.iter(), new_documents.iter())
44
- .map(Into::into)
45
- .map_err(from_protocol_error)
52
+ let result =
53
+ dpp_validate_indices_are_backward_compatible(old_documents.iter(), new_documents.iter())
54
+ .map_err(from_protocol_error)?;
55
+
56
+ Ok(result.map(|_| JsValue::undefined()).into())
57
+ }
58
+
59
+ #[wasm_bindgen(js_name=validateDataContractUpdateTransitionBasic)]
60
+ pub async fn validate_data_contract_update_transition_basic(
61
+ state_repository: ExternalStateRepositoryLike,
62
+ raw_parameters: JsValue,
63
+ execution_context: &StateTransitionExecutionContextWasm,
64
+ ) -> Result<ValidationResultWasm, JsError> {
65
+ let parameters: DataContractUpdateTransitionParameters =
66
+ serde_wasm_bindgen::from_value(raw_parameters)?;
67
+
68
+ let validator: DataContractUpdateTransitionBasicValidator<ExternalStateRepositoryLikeWrapper> =
69
+ DataContractUpdateTransitionBasicValidator::new(
70
+ Arc::new(ExternalStateRepositoryLikeWrapper::new(state_repository)),
71
+ Arc::new(ProtocolVersionValidator::default()),
72
+ )?;
73
+
74
+ let validation_result = validator
75
+ .validate(
76
+ &serde_json::to_value(&parameters)?,
77
+ &execution_context.into(),
78
+ )
79
+ .await?;
80
+
81
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
46
82
  }
@@ -1,4 +1,5 @@
1
1
  use std::convert::TryInto;
2
+ use std::sync::Arc;
2
3
 
3
4
  use dpp::{
4
5
  data_contract::{
@@ -12,10 +13,7 @@ use wasm_bindgen::prelude::*;
12
13
 
13
14
  use crate::{
14
15
  data_contract::errors::InvalidDataContractError,
15
- errors::{
16
- consensus_error::from_consensus_error, from_dpp_err, protocol_error::from_protocol_error,
17
- RustConversionError,
18
- },
16
+ errors::{from_dpp_err, protocol_error::from_protocol_error},
19
17
  validation::ValidationResultWasm,
20
18
  with_js_error, DataContractCreateTransitionWasm, DataContractParameters, DataContractWasm,
21
19
  };
@@ -35,6 +33,12 @@ impl From<DataContractValidatorWasm> for DataContractValidator {
35
33
  }
36
34
  }
37
35
 
36
+ impl Default for DataContractValidatorWasm {
37
+ fn default() -> Self {
38
+ Self::new()
39
+ }
40
+ }
41
+
38
42
  #[wasm_bindgen(js_class=DataContractValidator)]
39
43
  impl DataContractValidatorWasm {
40
44
  #[wasm_bindgen(constructor)]
@@ -42,15 +46,14 @@ impl DataContractValidatorWasm {
42
46
  DataContractValidator::new(std::sync::Arc::new(ProtocolVersionValidator::default())).into()
43
47
  }
44
48
 
45
- #[wasm_bindgen(js_name=validate)]
49
+ #[wasm_bindgen]
46
50
  pub fn validate(&self, raw_data_contract: JsValue) -> Result<ValidationResultWasm, JsValue> {
47
51
  let parameters: DataContractParameters =
48
52
  with_js_error!(serde_wasm_bindgen::from_value(raw_data_contract))?;
49
53
  let json_object = serde_json::to_value(parameters).expect("Implements Serialize");
50
- self.0
51
- .validate(&json_object)
52
- .map(Into::into)
53
- .map_err(from_protocol_error)
54
+
55
+ let validation_result = self.0.validate(&json_object).map_err(from_protocol_error)?;
56
+ Ok(validation_result.map(|_| JsValue::undefined()).into())
54
57
  }
55
58
  }
56
59
 
@@ -97,11 +100,11 @@ impl DataContractFactoryWasm {
97
100
  if let Some(external_entropy_generator) = external_entropy_generator_arg {
98
101
  DataContractFactory::new_with_entropy_generator(
99
102
  protocol_version,
100
- validate_data_contract.into(),
103
+ Arc::new(validate_data_contract.into()),
101
104
  Box::new(external_entropy_generator),
102
105
  )
103
106
  } else {
104
- DataContractFactory::new(protocol_version, validate_data_contract.into())
107
+ DataContractFactory::new(protocol_version, Arc::new(validate_data_contract.into()))
105
108
  }
106
109
  .into()
107
110
  }
@@ -116,7 +119,7 @@ impl DataContractFactoryWasm {
116
119
  with_js_error!(serde_wasm_bindgen::from_value(documents))?;
117
120
  let identifier = Identifier::from_bytes(&owner_id).map_err(from_dpp_err)?;
118
121
  self.0
119
- .create(identifier, documents_json)
122
+ .create(identifier, documents_json, None)
120
123
  .map(Into::into)
121
124
  .map_err(from_dpp_err)
122
125
  }
@@ -136,9 +139,8 @@ impl DataContractFactoryWasm {
136
139
  .await;
137
140
  match result {
138
141
  Ok(data_contract) => Ok(data_contract.into()),
139
- Err(dpp::ProtocolError::InvalidDataContractError { errors, .. }) => {
140
- let js_errors = errors.into_iter().map(from_consensus_error).collect();
141
- Err(InvalidDataContractError::new(js_errors, object).into())
142
+ Err(dpp::ProtocolError::InvalidDataContractError(err)) => {
143
+ Err(InvalidDataContractError::new(err.errors, object).into())
142
144
  }
143
145
  Err(other) => Err(from_dpp_err(other)),
144
146
  }
@@ -160,10 +162,10 @@ impl DataContractFactoryWasm {
160
162
  #[wasm_bindgen(js_name=createDataContractCreateTransition)]
161
163
  pub async fn create_data_contract_create_transition(
162
164
  &self,
163
- data_contract: DataContractWasm,
165
+ data_contract: &DataContractWasm,
164
166
  ) -> Result<DataContractCreateTransitionWasm, JsValue> {
165
167
  self.0
166
- .create_data_contract_create_transition(data_contract.into())
168
+ .create_data_contract_create_transition(data_contract.clone().into())
167
169
  .map(Into::into)
168
170
  .map_err(from_dpp_err)
169
171
  }
@@ -0,0 +1,95 @@
1
+ use std::sync::Arc;
2
+
3
+ use dpp::{data_trigger::DataTriggerExecutionContext, state_repository::StateRepositoryLike};
4
+ use wasm_bindgen::prelude::*;
5
+
6
+ use crate::{
7
+ identifier::{identifier_from_js_value, IdentifierWrapper},
8
+ state_repository::ExternalStateRepositoryLike,
9
+ utils::Inner,
10
+ DataContractWasm, StateTransitionExecutionContextWasm,
11
+ };
12
+
13
+ #[wasm_bindgen(js_name=DataTriggerExecutionContext)]
14
+ pub struct DataTriggerExecutionContextWasm {
15
+ state_repository: Arc<ExternalStateRepositoryLike>,
16
+ owner_id: IdentifierWrapper,
17
+ data_contract: DataContractWasm,
18
+ state_transition_execution_context: StateTransitionExecutionContextWasm,
19
+ }
20
+
21
+ #[wasm_bindgen(js_class=DataTriggerExecutionContext)]
22
+ impl DataTriggerExecutionContextWasm {
23
+ #[wasm_bindgen(constructor)]
24
+ pub fn new(
25
+ state_repository: ExternalStateRepositoryLike,
26
+ js_owner_id: &JsValue,
27
+ data_contract: DataContractWasm,
28
+ state_transition_execution_context: StateTransitionExecutionContextWasm,
29
+ ) -> Result<DataTriggerExecutionContextWasm, JsValue> {
30
+ let owner_id: IdentifierWrapper = identifier_from_js_value(js_owner_id)?.into();
31
+
32
+ Ok(Self {
33
+ state_repository: Arc::new(state_repository),
34
+ owner_id,
35
+ data_contract,
36
+ state_transition_execution_context,
37
+ })
38
+ }
39
+
40
+ #[wasm_bindgen(getter, js_name=ownerId)]
41
+ pub fn get_owner_id(&self) -> IdentifierWrapper {
42
+ self.owner_id.clone()
43
+ }
44
+
45
+ #[wasm_bindgen(setter, js_name=ownerId)]
46
+ pub fn set_owner_id(&mut self, owner_id: &JsValue) -> Result<(), JsValue> {
47
+ let id = identifier_from_js_value(owner_id)?;
48
+ self.owner_id = id.into();
49
+ Ok(())
50
+ }
51
+
52
+ #[wasm_bindgen(getter, js_name=dataContract)]
53
+ pub fn get_data_contract(&self) -> DataContractWasm {
54
+ self.data_contract.clone()
55
+ }
56
+
57
+ #[wasm_bindgen(setter, js_name=dataContract)]
58
+ pub fn set_data_contract(&mut self, data_contract: &DataContractWasm) {
59
+ self.data_contract = data_contract.clone();
60
+ }
61
+
62
+ #[wasm_bindgen(getter, js_name=stateTransitionExecutionContext)]
63
+ pub fn get_state_transition_execution_context(&self) -> StateTransitionExecutionContextWasm {
64
+ self.state_transition_execution_context.clone()
65
+ }
66
+
67
+ #[wasm_bindgen(setter, js_name=statTransitionExecutionContext)]
68
+ pub fn set_state_transition_execution_context(
69
+ &mut self,
70
+ context: &StateTransitionExecutionContextWasm,
71
+ ) {
72
+ self.state_transition_execution_context = context.clone();
73
+ }
74
+ }
75
+
76
+ impl DataTriggerExecutionContextWasm {
77
+ pub fn state_repository(&self) -> Arc<ExternalStateRepositoryLike> {
78
+ self.state_repository.clone()
79
+ }
80
+ }
81
+
82
+ pub(crate) fn data_trigger_context_from_wasm<'a, SR>(
83
+ value: &'a DataTriggerExecutionContextWasm,
84
+ external_state_repository: &'a SR,
85
+ ) -> DataTriggerExecutionContext<'a, SR>
86
+ where
87
+ SR: StateRepositoryLike,
88
+ {
89
+ DataTriggerExecutionContext {
90
+ data_contract: value.data_contract.inner(),
91
+ owner_id: value.owner_id.inner(),
92
+ state_transition_execution_context: value.state_transition_execution_context.inner(),
93
+ state_repository: external_state_repository,
94
+ }
95
+ }
@@ -0,0 +1,48 @@
1
+ use dpp::data_trigger::DataTriggerExecutionResult;
2
+ use js_sys::Array;
3
+ use wasm_bindgen::prelude::*;
4
+
5
+ use crate::{errors::consensus_error::from_state_error, utils::Inner};
6
+
7
+ #[wasm_bindgen(js_name=DataTriggerExecutionResult)]
8
+ pub struct DataTriggerExecutionResultWasm(DataTriggerExecutionResult);
9
+
10
+ impl From<DataTriggerExecutionResult> for DataTriggerExecutionResultWasm {
11
+ fn from(value: DataTriggerExecutionResult) -> Self {
12
+ DataTriggerExecutionResultWasm(value)
13
+ }
14
+ }
15
+
16
+ #[wasm_bindgen(js_class=DataTriggerExecutionResult)]
17
+ impl DataTriggerExecutionResultWasm {
18
+ #[wasm_bindgen(js_name=isOk)]
19
+ pub fn is_ok(&self) -> bool {
20
+ self.0.errors.is_empty()
21
+ }
22
+
23
+ #[wasm_bindgen(js_name=getErrors)]
24
+ pub fn get_errors(&self) -> Array {
25
+ let errors = self.0.get_errors().iter().map(from_state_error);
26
+ let array_with_errors = Array::new();
27
+ for error in errors {
28
+ array_with_errors.push(&error);
29
+ }
30
+ array_with_errors
31
+ }
32
+ }
33
+
34
+ impl Inner for DataTriggerExecutionResultWasm {
35
+ type InnerItem = DataTriggerExecutionResult;
36
+
37
+ fn into_inner(self) -> Self::InnerItem {
38
+ self.0
39
+ }
40
+
41
+ fn inner(&self) -> &Self::InnerItem {
42
+ &self.0
43
+ }
44
+
45
+ fn inner_mut(&mut self) -> &mut Self::InnerItem {
46
+ &mut self.0
47
+ }
48
+ }
@@ -0,0 +1,60 @@
1
+ use dpp::document::validation::state::execute_data_triggers::execute_data_triggers_with_custom_list;
2
+ use itertools::Itertools;
3
+ use js_sys::Array;
4
+ use wasm_bindgen::prelude::*;
5
+
6
+ use crate::{
7
+ document_batch_transition::document_transition::DocumentTransitionWasm,
8
+ state_repository::ExternalStateRepositoryLikeWrapper,
9
+ utils::{Inner, IntoWasm, WithJsError},
10
+ DataTriggerWasm,
11
+ };
12
+
13
+ use super::{
14
+ data_trigger_execution_context::{
15
+ data_trigger_context_from_wasm, DataTriggerExecutionContextWasm,
16
+ },
17
+ data_trigger_execution_result::DataTriggerExecutionResultWasm,
18
+ };
19
+
20
+ #[wasm_bindgen(js_name=executeDataTriggers)]
21
+ pub async fn execute_data_triggers_wasm(
22
+ js_document_transitions: Array,
23
+ js_context: DataTriggerExecutionContextWasm,
24
+ js_data_triggers: Array,
25
+ ) -> Result<Array, JsValue> {
26
+ let st_wrapper =
27
+ ExternalStateRepositoryLikeWrapper::new_with_arc(js_context.state_repository());
28
+ let context = data_trigger_context_from_wasm(&js_context, &st_wrapper);
29
+ let document_transitions: Vec<_> = js_document_transitions
30
+ .iter()
31
+ .map(|v| {
32
+ v.to_wasm::<DocumentTransitionWasm>("DocumentTransition")
33
+ .map(|v| v.to_owned())
34
+ })
35
+ .try_collect()?;
36
+
37
+ let data_triggers: Vec<_> = js_data_triggers
38
+ .iter()
39
+ .map(|v| {
40
+ v.to_wasm::<DataTriggerWasm>("DataTrigger")
41
+ .map(|v| v.to_owned().into_inner())
42
+ })
43
+ .try_collect()?;
44
+
45
+ let results = execute_data_triggers_with_custom_list(
46
+ document_transitions.iter().map(|v| v.inner()),
47
+ &context,
48
+ data_triggers,
49
+ )
50
+ .await
51
+ .with_js_error()?;
52
+
53
+ let array_with_results = js_sys::Array::new();
54
+ for result in results {
55
+ let result_wasm: DataTriggerExecutionResultWasm = result.into();
56
+ array_with_results.push(&result_wasm.into());
57
+ }
58
+
59
+ Ok(array_with_results)
60
+ }