@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,6 +1,25 @@
1
- use dpp::document::document_transition::DocumentCreateTransition;
1
+ use std::convert;
2
+
3
+ use dpp::{
4
+ document::document_transition::{
5
+ self, document_create_transition, DocumentCreateTransition, DocumentTransitionObjectLike,
6
+ },
7
+ prelude::{DataContract, Identifier},
8
+ util::{json_schema::JsonSchemaExt, json_value::JsonValueExt},
9
+ };
10
+ use serde::Serialize;
2
11
  use wasm_bindgen::prelude::*;
3
12
 
13
+ use crate::{
14
+ buffer::Buffer,
15
+ document,
16
+ document_batch_transition::document_transition::to_object,
17
+ identifier::IdentifierWrapper,
18
+ lodash::lodash_set,
19
+ utils::{replace_identifiers_with_bytes_without_failing, ToSerdeJSONExt, WithJsError},
20
+ BinaryType, DataContractWasm,
21
+ };
22
+
4
23
  #[wasm_bindgen(js_name=DocumentCreateTransition)]
5
24
  #[derive(Debug, Clone)]
6
25
  pub struct DocumentCreateTransitionWasm {
@@ -13,10 +32,243 @@ impl From<DocumentCreateTransition> for DocumentCreateTransitionWasm {
13
32
  }
14
33
  }
15
34
 
35
+ impl From<DocumentCreateTransitionWasm> for DocumentCreateTransition {
36
+ fn from(v: DocumentCreateTransitionWasm) -> Self {
37
+ v.inner
38
+ }
39
+ }
40
+
16
41
  #[wasm_bindgen(js_class=DocumentCreateTransition)]
17
42
  impl DocumentCreateTransitionWasm {
43
+ #[wasm_bindgen(constructor)]
44
+ pub fn from_raw_object(
45
+ raw_object: JsValue,
46
+ data_contract: &DataContractWasm,
47
+ ) -> Result<DocumentCreateTransitionWasm, JsValue> {
48
+ let data_contract: DataContract = data_contract.clone().into();
49
+ let mut value = raw_object.with_serde_to_json_value()?;
50
+ let document_type = value
51
+ .get_string(document::property_names::DOCUMENT_TYPE)
52
+ .with_js_error()?;
53
+
54
+ let (identifier_paths, _) = data_contract
55
+ .get_identifiers_and_binary_paths(document_type)
56
+ .with_js_error()?;
57
+ replace_identifiers_with_bytes_without_failing(
58
+ &mut value,
59
+ identifier_paths
60
+ .into_iter()
61
+ .chain(document_create_transition::IDENTIFIER_FIELDS),
62
+ );
63
+ let transition =
64
+ DocumentCreateTransition::from_raw_object(value, data_contract).with_js_error()?;
65
+
66
+ Ok(transition.into())
67
+ }
68
+
69
+ // DocumentCreateTransition
70
+ #[wasm_bindgen(js_name=getEntropy)]
71
+ pub fn entropy(&self) -> Vec<u8> {
72
+ self.inner.entropy.to_vec()
73
+ }
74
+
75
+ #[wasm_bindgen(js_name=getCreatedAt)]
76
+ pub fn created_at(&self) -> Option<i64> {
77
+ self.inner.created_at
78
+ }
79
+
80
+ #[wasm_bindgen(js_name=getUpdatedAt)]
81
+ pub fn updated_at(&self) -> Option<i64> {
82
+ self.inner.updated_at
83
+ }
84
+
85
+ #[wasm_bindgen(js_name=getRevision)]
86
+ pub fn revision(&self) -> u32 {
87
+ document_transition::INITIAL_REVISION
88
+ }
89
+
90
+ // AbstractDocumentTransitionMethods
91
+ #[wasm_bindgen(js_name=getId)]
92
+ pub fn id(&self) -> IdentifierWrapper {
93
+ self.inner.base.id.clone().into()
94
+ }
95
+
96
+ #[wasm_bindgen(js_name=getType)]
97
+ pub fn document_type(&self) -> String {
98
+ self.inner.base.document_type.clone()
99
+ }
100
+
18
101
  #[wasm_bindgen(js_name=getAction)]
19
102
  pub fn action(&self) -> u8 {
20
103
  self.inner.base.action as u8
21
104
  }
105
+
106
+ #[wasm_bindgen(js_name=getDataContract)]
107
+ pub fn data_contract(&self) -> DataContractWasm {
108
+ self.inner.base.data_contract.clone().into()
109
+ }
110
+
111
+ #[wasm_bindgen(js_name=getDataContractId)]
112
+ pub fn data_contract_id(&self) -> IdentifierWrapper {
113
+ self.inner.base.data_contract.id.into()
114
+ }
115
+
116
+ #[wasm_bindgen]
117
+ pub fn get(&self, path: String) -> Result<JsValue, JsValue> {
118
+ let document_data = if let Some(ref data) = self.inner.data {
119
+ data
120
+ } else {
121
+ return Ok(JsValue::undefined());
122
+ };
123
+
124
+ let mut value = if let Ok(value) = document_data.get_value(&path) {
125
+ value.to_owned()
126
+ } else {
127
+ return Ok(JsValue::undefined());
128
+ };
129
+
130
+ match self.get_binary_type_of_path(&path) {
131
+ BinaryType::Buffer => {
132
+ let bytes: Vec<u8> = serde_json::from_value(value).unwrap();
133
+ let buffer = Buffer::from_bytes(&bytes);
134
+ return Ok(buffer.into());
135
+ }
136
+ BinaryType::Identifier => {
137
+ let bytes: Vec<u8> = serde_json::from_value(value).unwrap();
138
+ let id = <IdentifierWrapper as convert::From<Identifier>>::from(
139
+ Identifier::from_bytes(&bytes).with_js_error()?,
140
+ );
141
+ return Ok(id.into());
142
+ }
143
+ BinaryType::None => {
144
+ // Do nothing. If is 'None' it means that binary may contain binary data
145
+ // or may not captain it at all
146
+ }
147
+ }
148
+
149
+ let js_value = value.serialize(&serde_wasm_bindgen::Serializer::json_compatible())?;
150
+ let (identifier_paths, binary_paths) = self
151
+ .inner
152
+ .base
153
+ .data_contract
154
+ .get_identifiers_and_binary_paths(&self.inner.base.document_type)
155
+ .with_js_error()?;
156
+
157
+ for property_path in identifier_paths {
158
+ if property_path.starts_with(&path) {
159
+ let (_, suffix) = property_path.split_at(path.len() + 1);
160
+
161
+ if value.get_value(suffix).is_ok() {
162
+ // unwrap allowed because the line above
163
+ let bytes = value.remove_path_into::<Vec<u8>>(suffix).unwrap();
164
+ let id = <IdentifierWrapper as convert::From<Identifier>>::from(
165
+ Identifier::from_bytes(&bytes).unwrap(),
166
+ );
167
+ lodash_set(&js_value, suffix, id.into());
168
+ }
169
+ }
170
+ }
171
+
172
+ for property_path in binary_paths {
173
+ if property_path.starts_with(&path) {
174
+ let (_, suffix) = property_path.split_at(path.len() + 1);
175
+
176
+ if value.get_value(suffix).is_ok() {
177
+ // unwrap allowed because the line above
178
+ let bytes = value.remove_path_into::<Vec<u8>>(suffix).unwrap();
179
+ let buffer = Buffer::from_bytes(&bytes);
180
+ lodash_set(&js_value, suffix, buffer.into());
181
+ }
182
+ }
183
+ }
184
+
185
+ Ok(js_value)
186
+ }
187
+
188
+ // DocumentTransitionObjectLike
189
+ #[wasm_bindgen(js_name=toObject)]
190
+ pub fn to_object(&self, options: &JsValue) -> Result<JsValue, JsValue> {
191
+ let (identifiers_paths, binary_paths) = self
192
+ .inner
193
+ .base
194
+ .data_contract
195
+ .get_identifiers_and_binary_paths(&self.inner.base.document_type)
196
+ .with_js_error()?;
197
+
198
+ to_object(
199
+ self.inner.to_object().with_js_error()?,
200
+ options,
201
+ identifiers_paths
202
+ .into_iter()
203
+ .chain(document_create_transition::IDENTIFIER_FIELDS),
204
+ binary_paths
205
+ .into_iter()
206
+ .chain(document_create_transition::BINARY_FIELDS),
207
+ )
208
+ }
209
+
210
+ #[wasm_bindgen(js_name=toJSON)]
211
+ pub fn to_json(&self) -> Result<JsValue, JsValue> {
212
+ let value = self.inner.to_json().with_js_error()?;
213
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
214
+ let js_value = value.serialize(&serializer)?;
215
+ Ok(js_value)
216
+ }
217
+
218
+ // AbstractDataDocumentTransition
219
+ #[wasm_bindgen(js_name=getData)]
220
+ pub fn get_data(&self) -> Result<JsValue, JsValue> {
221
+ let data = if let Some(ref data) = self.inner.data {
222
+ data
223
+ } else {
224
+ return Ok(JsValue::undefined());
225
+ };
226
+
227
+ let js_value = data.serialize(&serde_wasm_bindgen::Serializer::json_compatible())?;
228
+ let (identifier_paths, binary_paths) = self
229
+ .inner
230
+ .base
231
+ .data_contract
232
+ .get_identifiers_and_binary_paths(&self.inner.base.document_type)
233
+ .with_js_error()?;
234
+
235
+ for path in identifier_paths {
236
+ if let Ok(value) = data.get_value(path) {
237
+ let bytes: Vec<u8> = serde_json::from_value(value.to_owned()).with_js_error()?;
238
+ let id = <IdentifierWrapper as convert::From<Identifier>>::from(
239
+ Identifier::from_bytes(&bytes).unwrap(),
240
+ );
241
+ lodash_set(&js_value, path, id.into());
242
+ }
243
+ }
244
+ for path in binary_paths {
245
+ if let Ok(value) = data.get_value(path) {
246
+ let bytes: Vec<u8> = serde_json::from_value(value.to_owned()).with_js_error()?;
247
+ let buffer = Buffer::from_bytes(&bytes);
248
+ lodash_set(&js_value, path, buffer.into());
249
+ }
250
+ }
251
+
252
+ Ok(js_value)
253
+ }
254
+ }
255
+
256
+ impl DocumentCreateTransitionWasm {
257
+ fn get_binary_type_of_path(&self, path: &String) -> BinaryType {
258
+ let maybe_binary_properties = self
259
+ .inner
260
+ .base
261
+ .data_contract
262
+ .get_binary_properties(&self.inner.base.document_type);
263
+
264
+ if let Ok(binary_properties) = maybe_binary_properties {
265
+ if let Some(data) = binary_properties.get(path) {
266
+ if data.is_type_of_identifier() {
267
+ return BinaryType::Identifier;
268
+ }
269
+ return BinaryType::Buffer;
270
+ }
271
+ }
272
+ BinaryType::None
273
+ }
22
274
  }
@@ -1,6 +1,14 @@
1
- use dpp::document::document_transition::DocumentDeleteTransition;
1
+ use dpp::document::document_transition::{
2
+ document_delete_transition, DocumentDeleteTransition, DocumentTransitionObjectLike,
3
+ };
4
+ use serde::Serialize;
2
5
  use wasm_bindgen::prelude::*;
3
6
 
7
+ use crate::{
8
+ document_batch_transition::document_transition::to_object, identifier::IdentifierWrapper,
9
+ utils::WithJsError, DataContractWasm,
10
+ };
11
+
4
12
  #[wasm_bindgen(js_name=DocumentDeleteTransition)]
5
13
  #[derive(Debug, Clone)]
6
14
  pub struct DocumentDeleteTransitionWasm {
@@ -13,10 +21,61 @@ impl From<DocumentDeleteTransition> for DocumentDeleteTransitionWasm {
13
21
  }
14
22
  }
15
23
 
24
+ impl From<DocumentDeleteTransitionWasm> for DocumentDeleteTransition {
25
+ fn from(v: DocumentDeleteTransitionWasm) -> Self {
26
+ v.inner
27
+ }
28
+ }
29
+
16
30
  #[wasm_bindgen(js_class=DocumentDeleteTransition)]
17
31
  impl DocumentDeleteTransitionWasm {
18
32
  #[wasm_bindgen(js_name=getAction)]
19
33
  pub fn action(&self) -> u8 {
20
34
  self.inner.base.action as u8
21
35
  }
36
+
37
+ #[wasm_bindgen(js_name=toObject)]
38
+ pub fn to_object(&self, options: &JsValue) -> Result<JsValue, JsValue> {
39
+ to_object(
40
+ self.inner.to_object().with_js_error()?,
41
+ options,
42
+ document_delete_transition::IDENTIFIER_FIELDS,
43
+ [],
44
+ )
45
+ }
46
+
47
+ #[wasm_bindgen(js_name=toJSON)]
48
+ pub fn to_json(&self) -> Result<JsValue, JsValue> {
49
+ let value = self.inner.to_json().with_js_error()?;
50
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
51
+ let js_value = value.serialize(&serializer)?;
52
+ Ok(js_value)
53
+ }
54
+
55
+ // AbstractDocumentTransition
56
+ #[wasm_bindgen(js_name=getId)]
57
+ pub fn id(&self) -> IdentifierWrapper {
58
+ self.inner.base.id.clone().into()
59
+ }
60
+
61
+ #[wasm_bindgen(js_name=getType)]
62
+ pub fn document_type(&self) -> String {
63
+ self.inner.base.document_type.clone()
64
+ }
65
+
66
+ #[wasm_bindgen(js_name=getDataContract)]
67
+ pub fn data_contract(&self) -> DataContractWasm {
68
+ self.inner.base.data_contract.clone().into()
69
+ }
70
+
71
+ #[wasm_bindgen(js_name=getDataContractId)]
72
+ pub fn data_contract_id(&self) -> IdentifierWrapper {
73
+ self.inner.base.data_contract.id.clone().into()
74
+ }
75
+
76
+ #[wasm_bindgen(js_name=get)]
77
+ pub fn get(&self, path: String) -> Result<JsValue, JsValue> {
78
+ let _ = path;
79
+ Ok(JsValue::undefined())
80
+ }
22
81
  }
@@ -0,0 +1,263 @@
1
+ use std::convert;
2
+
3
+ use dpp::{
4
+ document::{
5
+ self,
6
+ document_transition::{
7
+ document_create_transition, document_replace_transition, DocumentReplaceTransition,
8
+ DocumentTransitionObjectLike,
9
+ },
10
+ },
11
+ prelude::{DataContract, Identifier},
12
+ util::{json_schema::JsonSchemaExt, json_value::JsonValueExt},
13
+ };
14
+ use serde::Serialize;
15
+ use wasm_bindgen::prelude::*;
16
+
17
+ use crate::{
18
+ buffer::Buffer,
19
+ document_batch_transition::document_transition::to_object,
20
+ identifier::IdentifierWrapper,
21
+ lodash::lodash_set,
22
+ utils::{replace_identifiers_with_bytes_without_failing, ToSerdeJSONExt, WithJsError},
23
+ BinaryType, DataContractWasm,
24
+ };
25
+
26
+ #[wasm_bindgen(js_name=DocumentReplaceTransition)]
27
+ #[derive(Debug, Clone)]
28
+ pub struct DocumentReplaceTransitionWasm {
29
+ inner: DocumentReplaceTransition,
30
+ }
31
+
32
+ impl From<DocumentReplaceTransition> for DocumentReplaceTransitionWasm {
33
+ fn from(v: DocumentReplaceTransition) -> Self {
34
+ Self { inner: v }
35
+ }
36
+ }
37
+
38
+ impl From<DocumentReplaceTransitionWasm> for DocumentReplaceTransition {
39
+ fn from(v: DocumentReplaceTransitionWasm) -> Self {
40
+ v.inner
41
+ }
42
+ }
43
+
44
+ #[wasm_bindgen(js_class=DocumentReplaceTransition)]
45
+ impl DocumentReplaceTransitionWasm {
46
+ #[wasm_bindgen(constructor)]
47
+ pub fn from_raw_object(
48
+ raw_object: JsValue,
49
+ data_contract: &DataContractWasm,
50
+ ) -> Result<DocumentReplaceTransitionWasm, JsValue> {
51
+ let data_contract: DataContract = data_contract.clone().into();
52
+ let mut value = raw_object.with_serde_to_json_value()?;
53
+ let document_type = value
54
+ .get_string(document::property_names::DOCUMENT_TYPE)
55
+ .with_js_error()?;
56
+
57
+ let (identifier_paths, _) = data_contract
58
+ .get_identifiers_and_binary_paths(document_type)
59
+ .with_js_error()?;
60
+ replace_identifiers_with_bytes_without_failing(
61
+ &mut value,
62
+ identifier_paths
63
+ .into_iter()
64
+ .chain(document_create_transition::BINARY_FIELDS),
65
+ );
66
+ let transition =
67
+ DocumentReplaceTransition::from_raw_object(value, data_contract).with_js_error()?;
68
+
69
+ Ok(transition.into())
70
+ }
71
+
72
+ #[wasm_bindgen(js_name=getAction)]
73
+ pub fn action(&self) -> u8 {
74
+ self.inner.base.action as u8
75
+ }
76
+
77
+ #[wasm_bindgen(js_name=getRevision)]
78
+ pub fn revision(&self) -> u32 {
79
+ self.inner.revision
80
+ }
81
+
82
+ #[wasm_bindgen(js_name=getUpdatedAt)]
83
+ pub fn updated_at(&self) -> Option<i64> {
84
+ self.inner.updated_at
85
+ }
86
+
87
+ #[wasm_bindgen(js_name=toObject)]
88
+ pub fn to_object(&self, options: &JsValue) -> Result<JsValue, JsValue> {
89
+ let (identifiers_paths, binary_paths) = self
90
+ .inner
91
+ .base
92
+ .data_contract
93
+ .get_identifiers_and_binary_paths(&self.inner.base.document_type)
94
+ .with_js_error()?;
95
+
96
+ to_object(
97
+ self.inner.to_object().with_js_error()?,
98
+ options,
99
+ identifiers_paths
100
+ .into_iter()
101
+ .chain(document_replace_transition::IDENTIFIER_FIELDS),
102
+ binary_paths,
103
+ )
104
+ }
105
+
106
+ #[wasm_bindgen(js_name=toJSON)]
107
+ pub fn to_json(&self) -> Result<JsValue, JsValue> {
108
+ let value = self.inner.to_json().with_js_error()?;
109
+ let serializer = serde_wasm_bindgen::Serializer::json_compatible();
110
+ let js_value = value.serialize(&serializer)?;
111
+ Ok(js_value)
112
+ }
113
+
114
+ // AbstractDataDocumentTransition
115
+ #[wasm_bindgen(js_name=getData)]
116
+ pub fn get_data(&self) -> Result<JsValue, JsValue> {
117
+ let data = if let Some(ref data) = self.inner.data {
118
+ data
119
+ } else {
120
+ return Ok(JsValue::undefined());
121
+ };
122
+
123
+ let js_value = data.serialize(&serde_wasm_bindgen::Serializer::json_compatible())?;
124
+ let (identifier_paths, binary_paths) = self
125
+ .inner
126
+ .base
127
+ .data_contract
128
+ .get_identifiers_and_binary_paths(&self.inner.base.document_type)
129
+ .with_js_error()?;
130
+
131
+ for path in identifier_paths {
132
+ if let Ok(value) = data.get_value(path) {
133
+ let bytes: Vec<u8> = serde_json::from_value(value.to_owned()).with_js_error()?;
134
+ let id = <IdentifierWrapper as convert::From<Identifier>>::from(
135
+ Identifier::from_bytes(&bytes).unwrap(),
136
+ );
137
+ lodash_set(&js_value, path, id.into());
138
+ }
139
+ }
140
+ for path in binary_paths {
141
+ if let Ok(value) = data.get_value(path) {
142
+ let bytes: Vec<u8> = serde_json::from_value(value.to_owned()).with_js_error()?;
143
+ let buffer = Buffer::from_bytes(&bytes);
144
+ lodash_set(&js_value, path, buffer.into());
145
+ }
146
+ }
147
+
148
+ Ok(js_value)
149
+ }
150
+
151
+ // AbstractDocumentTransition
152
+ #[wasm_bindgen(js_name=getId)]
153
+ pub fn id(&self) -> IdentifierWrapper {
154
+ self.inner.base.id.clone().into()
155
+ }
156
+
157
+ #[wasm_bindgen(js_name=getType)]
158
+ pub fn document_type(&self) -> String {
159
+ self.inner.base.document_type.clone()
160
+ }
161
+
162
+ #[wasm_bindgen(js_name=getDataContract)]
163
+ pub fn data_contract(&self) -> DataContractWasm {
164
+ self.inner.base.data_contract.clone().into()
165
+ }
166
+
167
+ #[wasm_bindgen(js_name=getDataContractId)]
168
+ pub fn data_contract_id(&self) -> IdentifierWrapper {
169
+ self.inner.base.data_contract.id.clone().into()
170
+ }
171
+
172
+ #[wasm_bindgen(js_name=get)]
173
+ pub fn get(&self, path: String) -> Result<JsValue, JsValue> {
174
+ let document_data = if let Some(ref data) = self.inner.data {
175
+ data
176
+ } else {
177
+ return Ok(JsValue::undefined());
178
+ };
179
+
180
+ let mut value = if let Ok(value) = document_data.get_value(&path) {
181
+ value.to_owned()
182
+ } else {
183
+ return Ok(JsValue::undefined());
184
+ };
185
+
186
+ match self.get_binary_type_of_path(&path) {
187
+ BinaryType::Buffer => {
188
+ let bytes: Vec<u8> = serde_json::from_value(value).unwrap();
189
+ let buffer = Buffer::from_bytes(&bytes);
190
+ return Ok(buffer.into());
191
+ }
192
+ BinaryType::Identifier => {
193
+ let bytes: Vec<u8> = serde_json::from_value(value).unwrap();
194
+ let id = <IdentifierWrapper as convert::From<Identifier>>::from(
195
+ Identifier::from_bytes(&bytes).unwrap(),
196
+ );
197
+ return Ok(id.into());
198
+ }
199
+ BinaryType::None => {
200
+ // Do nothing. If is 'None' it means that binary may contain binary data
201
+ // or may not captain it at all
202
+ }
203
+ }
204
+
205
+ let js_value = value.serialize(&serde_wasm_bindgen::Serializer::json_compatible())?;
206
+ let (identifier_paths, binary_paths) = self
207
+ .inner
208
+ .base
209
+ .data_contract
210
+ .get_identifiers_and_binary_paths(&self.inner.base.document_type)
211
+ .with_js_error()?;
212
+
213
+ for property_path in identifier_paths {
214
+ if property_path.starts_with(&path) {
215
+ let (_, suffix) = property_path.split_at(path.len() + 1);
216
+
217
+ if value.get_value(suffix).is_ok() {
218
+ // unwrap allowed because the line above
219
+ let bytes = value.remove_path_into::<Vec<u8>>(suffix).unwrap();
220
+ let id = <IdentifierWrapper as convert::From<Identifier>>::from(
221
+ Identifier::from_bytes(&bytes).unwrap(),
222
+ );
223
+ lodash_set(&js_value, suffix, id.into());
224
+ }
225
+ }
226
+ }
227
+
228
+ for property_path in binary_paths {
229
+ if property_path.starts_with(&path) {
230
+ let (_, suffix) = property_path.split_at(path.len() + 1);
231
+
232
+ if value.get_value(suffix).is_ok() {
233
+ // unwrap allowed because the line above
234
+ let bytes = value.remove_path_into::<Vec<u8>>(suffix).unwrap();
235
+ let buffer = Buffer::from_bytes(&bytes);
236
+ lodash_set(&js_value, suffix, buffer.into());
237
+ }
238
+ }
239
+ }
240
+
241
+ Ok(js_value)
242
+ }
243
+ }
244
+
245
+ impl DocumentReplaceTransitionWasm {
246
+ fn get_binary_type_of_path(&self, path: &String) -> BinaryType {
247
+ let maybe_binary_properties = self
248
+ .inner
249
+ .base
250
+ .data_contract
251
+ .get_binary_properties(&self.inner.base.document_type);
252
+
253
+ if let Ok(binary_properties) = maybe_binary_properties {
254
+ if let Some(data) = binary_properties.get(path) {
255
+ if data.is_type_of_identifier() {
256
+ return BinaryType::Identifier;
257
+ }
258
+ return BinaryType::Buffer;
259
+ }
260
+ }
261
+ BinaryType::None
262
+ }
263
+ }