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

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 (92) hide show
  1. package/Cargo.toml +2 -0
  2. package/dist/index.js +1 -1
  3. package/dist/lib/dpp.d.ts +9 -0
  4. package/dist/lib/errors/AbstractConsensusError.d.ts +10 -0
  5. package/dist/lib/errors/DPPError.d.ts +5 -0
  6. package/dist/lib/errors/patchConsensusErrors.d.ts +1 -0
  7. package/dist/lib/{patchIdentifier.d.ts → identifier/patchIdentifier.d.ts} +1 -1
  8. package/dist/{index.d.ts → lib/index.d.ts} +1 -1
  9. package/dist/lib/utils/extend.d.ts +1 -0
  10. package/dist/wasm/wasm_dpp.d.ts +503 -262
  11. package/lib/dpp.ts +24 -0
  12. package/lib/errors/AbstractConsensusError.ts +13 -0
  13. package/lib/errors/DPPError.ts +15 -0
  14. package/lib/errors/patchConsensusErrors.ts +175 -0
  15. package/lib/{patchIdentifier.ts → identifier/patchIdentifier.ts} +1 -1
  16. package/{index.ts → lib/index.ts} +4 -3
  17. package/lib/test/expect/expectError.js +4 -2
  18. package/lib/utils/extend.ts +6 -0
  19. package/package.json +5 -5
  20. package/src/data_contract/errors/invalid_data_contract.rs +21 -0
  21. package/src/data_contract/state_transition/data_contract_create_transition/apply.rs +44 -0
  22. package/src/data_contract/state_transition/data_contract_create_transition/mod.rs +107 -6
  23. package/src/data_contract/state_transition/data_contract_create_transition/validation.rs +24 -0
  24. package/src/data_contract/state_transition/data_contract_update_transition/apply.rs +44 -0
  25. package/src/data_contract/state_transition/data_contract_update_transition/mod.rs +147 -0
  26. package/src/data_contract/state_transition/data_contract_update_transition/validation.rs +46 -0
  27. package/src/data_contract/state_transition/mod.rs +2 -0
  28. package/src/data_contract_factory/data_contract_factory.rs +27 -12
  29. package/src/document/errors/document_already_exists_error.rs +1 -1
  30. package/src/document/errors/document_not_provided_error.rs +1 -1
  31. package/src/document/errors/invalid_document_action_error.rs +1 -1
  32. package/src/errors/consensus/basic/data_contract/data_contract_max_depth_exceed_error.rs +5 -5
  33. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_ids_error.rs +4 -4
  34. package/src/errors/consensus/basic/document/duplicate_document_transitions_with_indices_error.rs +36 -0
  35. package/src/errors/consensus/basic/document/missing_document_transition_type_error.rs +20 -0
  36. package/src/errors/consensus/basic/document/mod.rs +4 -0
  37. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_error.rs +2 -2
  38. package/src/errors/consensus/basic/identity/duplicated_identity_public_key_id_error.rs +2 -2
  39. package/src/errors/consensus/basic/identity/invalid_identity_public_key_security_level_error.rs +2 -2
  40. package/src/errors/consensus/basic/json_schema_error.rs +1 -1
  41. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_condition_error.rs +1 -1
  42. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_execution_error.rs +1 -1
  43. package/src/errors/consensus/state/data_contract/data_trigger/data_trigger_invalid_result_error.rs +1 -1
  44. package/src/errors/consensus_error.rs +15 -8
  45. package/src/errors/from.rs +1 -1
  46. package/src/errors/mod.rs +1 -0
  47. package/src/errors/protocol_error.rs +12 -0
  48. package/src/{identifier.rs → identifier/mod.rs} +0 -0
  49. package/src/{identity_facade.rs → identity/identity_facade.rs} +1 -1
  50. package/src/{identity_public_key → identity/identity_public_key}/key_type.rs +0 -0
  51. package/src/{identity_public_key → identity/identity_public_key}/mod.rs +0 -3
  52. package/src/{identity_public_key → identity/identity_public_key}/purpose.rs +0 -0
  53. package/src/{identity_public_key → identity/identity_public_key}/security_level.rs +0 -0
  54. package/src/{identity.rs → identity/mod.rs} +6 -7
  55. package/src/identity/validation/mod.rs +3 -0
  56. package/src/identity/validation/public_keys_validator.rs +70 -0
  57. package/src/lib.rs +4 -8
  58. package/src/state_repository.rs +229 -0
  59. package/src/state_transition/mod.rs +41 -0
  60. package/src/utils.rs +2 -2
  61. package/src/validation/mod.rs +3 -0
  62. package/src/{validation_result.rs → validation/validation_result.rs} +0 -0
  63. package/test/integration/identity/stateTransition/IdentityUpdateTransition/validation/state/validateIdentityUpdateTransitionStateFactory.spec.js +1 -1
  64. package/test/integration/identity/validation/validatePublicKeysFactory.spec.js +79 -114
  65. package/test/integration/stateTransition/AbstractStateTransitionIdentitySigned.spec.js +0 -11
  66. package/test/integration/stateTransition/StateTransitionFacade.spec.js +1 -1
  67. package/test/integration/stateTransition/calculateStateTransitionFeeFactory.spec.js +135 -0
  68. package/test/unit/dataContract/DataContract.spec.js +5 -9
  69. package/test/unit/dataContract/DataContractFactory.spec.js +13 -6
  70. package/test/unit/dataContract/errors/InvalidDataContractError.spec.js +11 -3
  71. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +17 -64
  72. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/applyDataContractCreateTransitionFactory.spec.js +28 -22
  73. package/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +49 -42
  74. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +23 -59
  75. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory.spec.js +27 -23
  76. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible.spec.js +29 -12
  77. package/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +66 -49
  78. package/test/unit/dataContract/validation/validateDataContractPatterns.spec.js +73 -0
  79. package/test/unit/document/stateTransition/DocumetsBatchTransition/applyDocumentsBatchTransitionFactory.spec.js +1 -1
  80. package/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +1 -1
  81. package/test/unit/identity/IdentityPublicKey.spec.js +25 -31
  82. package/tsconfig.json +1 -1
  83. package/wasm/wasm_dpp.d.ts +503 -262
  84. package/wasm/wasm_dpp.js +925 -310
  85. package/wasm/wasm_dpp_bg.js +1 -1
  86. package/wasm/wasm_dpp_bg.wasm +0 -0
  87. package/wasm/wasm_dpp_bg.wasm.d.ts +273 -225
  88. package/webpack.config.js +1 -1
  89. package/src/identity_public_key/public_keys_validator.rs +0 -44
  90. package/test/integration/stateTransition/calculateStateTransitionFee.spec.js +0 -32
  91. package/test/unit/dataContract/validation/validateDataContractMaxDepthFactory.spec.js +0 -93
  92. package/test/unit/dataContract/validation/validateDataContractPatternsFactory.spec.js +0 -64
@@ -1,47 +1,51 @@
1
- const DataContractUpdateTransition = require(
2
- '@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition',
3
- );
4
-
5
1
  const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
2
+ const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
6
3
 
7
- const applyDataContractUpdateTransitionFactory = require(
8
- '@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/applyDataContractUpdateTransitionFactory',
9
- );
10
-
11
- const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
12
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
4
+ const { default: loadWasmDpp } = require('../../../../../dist');
13
5
 
14
6
  describe('applyDataContractUpdateTransitionFactory', () => {
15
7
  let stateTransition;
16
8
  let dataContract;
17
- let stateRepositoryMock;
18
- let applyDataContractUpdateTransition;
19
9
  let executionContext;
10
+ let dataContractStored;
11
+ let factory;
12
+ let DataContractUpdateTransition;
13
+ let ApplyDataContractUpdateTransition;
14
+ let StateTransitionExecutionContext;
15
+
16
+ before(async () => {
17
+ ({
18
+ DataContractUpdateTransition,
19
+ ApplyDataContractUpdateTransition,
20
+ StateTransitionExecutionContext,
21
+ } = await loadWasmDpp());
22
+ });
20
23
 
21
- beforeEach(function beforeEach() {
24
+ beforeEach(() => {
22
25
  dataContract = getDataContractFixture();
23
26
 
24
27
  stateTransition = new DataContractUpdateTransition({
25
28
  dataContract: dataContract.toObject(),
29
+ protocolVersion: protocolVersion.latestVersion,
26
30
  });
27
31
 
28
32
  executionContext = new StateTransitionExecutionContext();
29
33
 
30
34
  stateTransition.setExecutionContext(executionContext);
31
35
 
32
- stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
36
+ const stateRepositoryLike = {
37
+ storeDataContract: () => {
38
+ dataContractStored = true;
39
+ },
40
+ };
33
41
 
34
- applyDataContractUpdateTransition = applyDataContractUpdateTransitionFactory(
35
- stateRepositoryMock,
36
- );
42
+ factory = new ApplyDataContractUpdateTransition(stateRepositoryLike);
43
+
44
+ dataContractStored = false;
37
45
  });
38
46
 
39
47
  it('should store a data contract from state transition in the repository', async () => {
40
- await applyDataContractUpdateTransition(stateTransition);
41
-
42
- expect(stateRepositoryMock.updateDataContract).to.have.been.calledOnceWithExactly(
43
- stateTransition.getDataContract(),
44
- executionContext,
45
- );
48
+ await factory.applyDataContractUpdateTransition(stateTransition);
49
+ expect(dataContractStored).to.be.true();
46
50
  });
47
51
  });
@@ -1,13 +1,23 @@
1
- const validateIndicesAreBackwardCompatible = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/validation/basic/validateIndicesAreBackwardCompatible');
2
- const DataContractHaveNewIndexWithOldPropertiesError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/DataContractInvalidIndexDefinitionUpdateError');
3
- const DataContractHaveNewUniqueIndexError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/DataContractHaveNewUniqueIndexError');
4
- const DataContractIndicesChangedError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/DataContractUniqueIndicesChangedError');
5
1
  const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
6
- const DataContractInvalidIndexDefinitionUpdateError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/DataContractInvalidIndexDefinitionUpdateError');
2
+
3
+ const { default: loadWasmDpp } = require('../../../../../../../dist');
7
4
 
8
5
  describe('validateIndicesAreBackwardCompatible', () => {
9
6
  let oldDocumentsSchema;
10
7
  let newDocumentsSchema;
8
+ let validateIndicesAreBackwardCompatible;
9
+ let DataContractUniqueIndicesChangedError;
10
+ let DataContractInvalidIndexDefinitionUpdateError;
11
+ let DataContractHaveNewUniqueIndexError;
12
+
13
+ before(async () => {
14
+ ({
15
+ validateIndicesAreBackwardCompatible,
16
+ DataContractUniqueIndicesChangedError,
17
+ DataContractInvalidIndexDefinitionUpdateError,
18
+ DataContractHaveNewUniqueIndexError,
19
+ } = await loadWasmDpp());
20
+ });
11
21
 
12
22
  beforeEach(() => {
13
23
  const oldDataContract = getDataContractFixture();
@@ -37,20 +47,19 @@ describe('validateIndicesAreBackwardCompatible', () => {
37
47
  });
38
48
 
39
49
  it('should return invalid result if some of unique indices have changed', async () => {
40
- newDocumentsSchema.indexedDocument.indices[0].properties[0].lastName = 'asc';
41
-
50
+ newDocumentsSchema.indexedDocument.indices[0].properties[1].firstName = 'desc';
42
51
  const result = validateIndicesAreBackwardCompatible(oldDocumentsSchema, newDocumentsSchema);
43
52
 
44
53
  expect(result.isValid()).to.be.false();
45
54
 
46
55
  const error = result.getErrors()[0];
47
56
 
48
- expect(error).to.be.an.instanceOf(DataContractIndicesChangedError);
57
+ expect(error).to.be.an.instanceOf(DataContractUniqueIndicesChangedError);
49
58
  expect(error.getIndexName()).to.equal(newDocumentsSchema.indexedDocument.indices[0].name);
50
59
  });
51
60
 
52
61
  it('should return invalid result if non-unique index update failed due to changed old properties', async () => {
53
- newDocumentsSchema.indexedDocument.indices[2].properties[0].$id = 'asc';
62
+ newDocumentsSchema.indexedDocument.indices[2].properties[0].lastName = 'desc';
54
63
 
55
64
  const result = validateIndicesAreBackwardCompatible(oldDocumentsSchema, newDocumentsSchema);
56
65
 
@@ -63,7 +72,14 @@ describe('validateIndicesAreBackwardCompatible', () => {
63
72
  });
64
73
 
65
74
  it('should return invalid result if non-unique index update failed due old properties used', async () => {
66
- newDocumentsSchema.indexedDocument.indices[2].properties.push({ firstName: 'asc' });
75
+ newDocumentsSchema.indexedDocument.indices.push({
76
+ name: 'oldFieldIndex',
77
+ properties: [
78
+ {
79
+ otherProperty: 'asc',
80
+ },
81
+ ],
82
+ });
67
83
 
68
84
  const result = validateIndicesAreBackwardCompatible(oldDocumentsSchema, newDocumentsSchema);
69
85
 
@@ -72,7 +88,7 @@ describe('validateIndicesAreBackwardCompatible', () => {
72
88
  const error = result.getErrors()[0];
73
89
 
74
90
  expect(error).to.be.an.instanceOf(DataContractInvalidIndexDefinitionUpdateError);
75
- expect(error.getIndexName()).to.equal(newDocumentsSchema.indexedDocument.indices[2].name);
91
+ expect(error.getIndexName()).to.equal('oldFieldIndex');
76
92
  });
77
93
 
78
94
  it('should return invalid result if one of new indices contains old properties in the wrong order', async () => {
@@ -90,7 +106,8 @@ describe('validateIndicesAreBackwardCompatible', () => {
90
106
 
91
107
  const error = result.getErrors()[0];
92
108
 
93
- expect(error).to.be.an.instanceOf(DataContractHaveNewIndexWithOldPropertiesError);
109
+ // TODO
110
+ // expect(error).to.be.an.instanceOf(DataContractHaveNewIndexWithOldPropertiesError);
94
111
  expect(error.getIndexName()).to.equal('index_other');
95
112
  });
96
113
 
@@ -1,27 +1,36 @@
1
- const validateDataContractUpdateTransitionStateFactory = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory');
2
- const DataContractUpdateTransition = require('@dashevo/dpp/lib/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition');
3
-
4
- const createStateRepositoryMock = require('@dashevo/dpp/lib/test/mocks/createStateRepositoryMock');
5
1
  const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
2
+ const protocolVersion = require('@dashevo/dpp/lib/version/protocolVersion');
6
3
 
7
- const { expectValidationError } = require('@dashevo/dpp/lib/test/expect/expectError');
8
-
9
- const ValidationResult = require('@dashevo/dpp/lib/validation/ValidationResult');
10
-
11
- const DataContractNotPresentError = require('@dashevo/dpp/lib/errors/consensus/basic/document/DataContractNotPresentError');
12
- const InvalidDataContractVersionError = require('@dashevo/dpp/lib/errors/consensus/basic/dataContract/InvalidDataContractVersionError');
13
- const StateTransitionExecutionContext = require('@dashevo/dpp/lib/stateTransition/StateTransitionExecutionContext');
4
+ const { default: loadWasmDpp } = require('../../../../../../../dist');
14
5
 
15
6
  describe('validateDataContractUpdateTransitionStateFactory', () => {
16
7
  let validateDataContractUpdateTransitionState;
17
8
  let dataContract;
18
9
  let stateTransition;
19
- let stateRepositoryMock;
20
10
  let executionContext;
11
+ let DataContractUpdateTransition;
12
+ let StateTransitionExecutionContext;
13
+ let DataContractFactory;
14
+ let DataContractValidator;
15
+ let validateTransitionWithExistingContract;
16
+ let DataContractNotPresentError;
17
+ let InvalidDataContractVersionError;
18
+ let ValidationResult;
19
+
20
+ before(async () => {
21
+ ({
22
+ DataContractUpdateTransition,
23
+ StateTransitionExecutionContext,
24
+ validateDataContractUpdateTransitionState,
25
+ ValidationResult,
26
+ DataContractFactory,
27
+ DataContractValidator,
28
+ DataContractNotPresentError,
29
+ InvalidDataContractVersionError,
30
+ } = await loadWasmDpp());
31
+ });
21
32
 
22
- beforeEach(function beforeEach() {
23
- stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
24
-
33
+ beforeEach(async () => {
25
34
  dataContract = getDataContractFixture();
26
35
 
27
36
  const updatedRawDataContract = dataContract.toObject();
@@ -30,82 +39,90 @@ describe('validateDataContractUpdateTransitionStateFactory', () => {
30
39
 
31
40
  stateTransition = new DataContractUpdateTransition({
32
41
  dataContract: updatedRawDataContract,
42
+ protocolVersion: protocolVersion.latestVersion,
33
43
  });
34
44
 
35
45
  executionContext = new StateTransitionExecutionContext();
36
46
 
37
47
  stateTransition.setExecutionContext(executionContext);
38
48
 
39
- stateRepositoryMock.fetchDataContract.resolves(dataContract);
49
+ const validator = new DataContractValidator();
50
+ const dataContractFactory = new DataContractFactory(protocolVersion.latestVersion, validator);
51
+ const wasmDataContract = await dataContractFactory.createFromBuffer(dataContract.toBuffer());
52
+
53
+ const stateRepositoryLike = {
54
+ fetchDataContract: () => wasmDataContract,
55
+ };
40
56
 
41
- validateDataContractUpdateTransitionState = validateDataContractUpdateTransitionStateFactory(
42
- stateRepositoryMock,
57
+ validateTransitionWithExistingContract = (t) => validateDataContractUpdateTransitionState(
58
+ stateRepositoryLike,
59
+ t,
43
60
  );
44
61
  });
45
62
 
46
63
  it('should return invalid result if Data Contract with specified contractId was not found', async () => {
47
- stateRepositoryMock.fetchDataContract.resolves(undefined);
64
+ const stateRepositoryLikeNoDataContract = {
65
+ fetchDataContract: () => undefined,
66
+ };
48
67
 
49
- const result = await validateDataContractUpdateTransitionState(stateTransition);
68
+ const validateTransitionWithNoContract = (t) => validateDataContractUpdateTransitionState(
69
+ stateRepositoryLikeNoDataContract,
70
+ t,
71
+ );
72
+
73
+ const result = await validateTransitionWithNoContract(stateTransition);
50
74
 
51
- expectValidationError(result, DataContractNotPresentError);
75
+ expect(result.isValid()).to.be.false();
52
76
 
53
77
  const [error] = result.getErrors();
54
78
 
79
+ expect(error).to.be.an.instanceOf(DataContractNotPresentError);
55
80
  expect(error.getCode()).to.equal(1018);
56
- expect(Buffer.isBuffer(error.getDataContractId())).to.be.true();
57
81
  expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBuffer());
58
-
59
- expect(stateRepositoryMock.fetchDataContract).to.be.calledOnceWithExactly(
60
- dataContract.getId(),
61
- executionContext,
62
- );
63
82
  });
64
83
 
65
84
  it('should return invalid result if Data Contract version is not larger by 1', async () => {
66
- dataContract.version -= 1;
85
+ const badlyUpdatedRawDataContract = dataContract.toObject();
86
+ badlyUpdatedRawDataContract.version += 2;
67
87
 
68
- const result = await validateDataContractUpdateTransitionState(stateTransition);
88
+ const badStateTransition = new DataContractUpdateTransition({
89
+ dataContract: badlyUpdatedRawDataContract,
90
+ protocolVersion: protocolVersion.latestVersion,
91
+ });
69
92
 
70
- expectValidationError(result, InvalidDataContractVersionError);
93
+ const result = await validateTransitionWithExistingContract(badStateTransition);
71
94
 
72
- const [error] = result.getErrors();
95
+ expect(result.isValid()).to.be.false();
73
96
 
97
+ const [error] = result.getErrors();
98
+ expect(error).to.be.an.instanceOf(InvalidDataContractVersionError);
74
99
  expect(error.getCode()).to.equal(1050);
75
-
76
- expect(stateRepositoryMock.fetchDataContract).to.be.calledOnceWithExactly(
77
- dataContract.getId(),
78
- executionContext,
79
- );
80
100
  });
81
101
 
82
102
  it('should return valid result', async () => {
83
- const result = await validateDataContractUpdateTransitionState(stateTransition);
103
+ const result = await validateTransitionWithExistingContract(stateTransition);
84
104
 
85
105
  expect(result).to.be.an.instanceOf(ValidationResult);
86
106
  expect(result.isValid()).to.be.true();
87
-
88
- expect(stateRepositoryMock.fetchDataContract).to.be.calledOnceWithExactly(
89
- dataContract.getId(),
90
- executionContext,
91
- );
92
107
  });
93
108
 
94
109
  it('should return valid result on dry run', async () => {
95
- stateRepositoryMock.fetchDataContract.resolves(undefined);
110
+ const stateRepositoryLikeNoDataContract = {
111
+ fetchDataContract: () => undefined,
112
+ };
113
+
114
+ const validateTransitionWithNoContract = (t) => validateDataContractUpdateTransitionState(
115
+ stateRepositoryLikeNoDataContract,
116
+ t,
117
+ );
96
118
 
97
119
  executionContext.enableDryRun();
98
120
 
99
- const result = await validateDataContractUpdateTransitionState(stateTransition);
121
+ const result = await validateTransitionWithNoContract(stateTransition);
100
122
 
101
123
  executionContext.disableDryRun();
102
124
 
103
125
  expect(result).to.be.an.instanceOf(ValidationResult);
104
126
  expect(result.isValid()).to.be.true();
105
-
106
- expect(stateRepositoryMock.fetchDataContract).to.be.calledOnceWithExactly(
107
- dataContract.getId(),
108
- executionContext,
109
- );
110
127
  });
111
128
  });
@@ -0,0 +1,73 @@
1
+ const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataContractFixture');
2
+
3
+ const { default: loadWasmDpp } = require('../../../../dist');
4
+
5
+ describe('validateDataContractPatterns', () => {
6
+ let DataContractValidator;
7
+ let IncompatibleRe2PatternError;
8
+
9
+ before(async () => {
10
+ ({
11
+ DataContractValidator,
12
+ IncompatibleRe2PatternError,
13
+ } = await loadWasmDpp());
14
+ });
15
+
16
+ it('should return valid result', () => {
17
+ const rawDataContract = getDataContractFixture().toObject();
18
+ delete rawDataContract.$defs;
19
+
20
+ const schema = {
21
+ type: 'object',
22
+ properties: {
23
+ foo: { type: 'integer' },
24
+ bar: {
25
+ type: 'string',
26
+ pattern: '([a-z]+)+$',
27
+ maxLength: 1337,
28
+ },
29
+ },
30
+ required: ['foo'],
31
+ additionalProperties: false,
32
+ };
33
+
34
+ rawDataContract.documents.totallyFineDocument = schema;
35
+
36
+ const validator = new DataContractValidator();
37
+
38
+ const result = validator.validate(rawDataContract);
39
+ expect(result.isValid()).to.be.true();
40
+ });
41
+
42
+ it('should return invalid result on incompatible pattern', () => {
43
+ const rawDataContract = getDataContractFixture().toObject();
44
+ delete rawDataContract.$defs;
45
+
46
+ const schema = {
47
+ type: 'object',
48
+ properties: {
49
+ foo: { type: 'integer' },
50
+ bar: {
51
+ type: 'string',
52
+ pattern: '^((?!-|_)[a-zA-Z0-9-_]{0,62}[a-zA-Z0-9])$',
53
+ maxLength: 1337,
54
+ },
55
+ },
56
+ required: ['foo'],
57
+ additionalProperties: false,
58
+ };
59
+
60
+ rawDataContract.documents.notFineDocument = schema;
61
+
62
+ const validator = new DataContractValidator();
63
+
64
+ const result = validator.validate(rawDataContract);
65
+
66
+ const [error] = result.getErrors();
67
+
68
+ expect(error).to.be.instanceOf(IncompatibleRe2PatternError);
69
+ expect(error.getCode()).to.equal(1009);
70
+ expect(error.getPattern()).to.equal('^((?!-|_)[a-zA-Z0-9-_]{0,62}[a-zA-Z0-9])$');
71
+ expect(error.getPath()).to.equal('/documents/notFineDocument/properties/bar');
72
+ });
73
+ });
@@ -66,7 +66,7 @@ describe('applyDocumentsBatchTransitionFactory', () => {
66
66
 
67
67
  stateRepositoryMock = createStateRepositoryMock(this.sinonSandbox);
68
68
  stateRepositoryMock.fetchDataContract.resolves(dataContract);
69
- stateRepositoryMock.fetchLatestPlatformBlockTime.returns(blockTimeMs);
69
+ stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTimeMs);
70
70
 
71
71
  fetchDocumentsMock = this.sinonSandbox.stub();
72
72
  fetchDocumentsMock.resolves([
@@ -68,7 +68,7 @@ describe('validateDocumentsBatchTransitionStateFactory', () => {
68
68
 
69
69
  blockTime = Date.now();
70
70
 
71
- stateRepositoryMock.fetchLatestPlatformBlockTime.returns(blockTime);
71
+ stateRepositoryMock.fetchLatestPlatformBlockTime.resolves(blockTime);
72
72
 
73
73
  fetchDocumentsMock = this.sinonSandbox.stub().resolves([]);
74
74
 
@@ -4,24 +4,18 @@ describe('IdentityPublicKey', () => {
4
4
  let rawPublicKey;
5
5
  let publicKey;
6
6
  let IdentityPublicKey;
7
- let KeyPurpose;
8
- let KeyType;
9
- let KeySecurityLevel;
10
7
 
11
8
  beforeEach(async () => {
12
- ({
13
- IdentityPublicKey, KeyPurpose, KeyType, KeySecurityLevel,
14
- } = await loadWasmDpp());
9
+ ({ IdentityPublicKey } = await loadWasmDpp());
15
10
 
16
11
  rawPublicKey = {
17
12
  id: 0,
18
- type: KeyType.ECDSA_SECP256K1,
13
+ type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
19
14
  data: Buffer.from('AkVuTKyF3YgKLAQlLEtaUL2HTditwGILfWUVqjzYnIgH', 'base64'),
20
- purpose: KeyPurpose.AUTHENTICATION,
21
- securityLevel: KeySecurityLevel.MASTER,
15
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
16
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
22
17
  readOnly: false,
23
18
  };
24
-
25
19
  publicKey = new IdentityPublicKey(rawPublicKey);
26
20
  });
27
21
 
@@ -89,9 +83,9 @@ describe('IdentityPublicKey', () => {
89
83
 
90
84
  describe('#setPurpose', () => {
91
85
  it('should set data', () => {
92
- publicKey.setPurpose(KeyPurpose.DECRYPTION);
86
+ publicKey.setPurpose(IdentityPublicKey.PURPOSES.DECRYPTION);
93
87
 
94
- expect(publicKey.getPurpose()).to.equal(KeyPurpose.DECRYPTION);
88
+ expect(publicKey.getPurpose()).to.equal(IdentityPublicKey.PURPOSES.DECRYPTION);
95
89
  });
96
90
  });
97
91
 
@@ -103,9 +97,9 @@ describe('IdentityPublicKey', () => {
103
97
 
104
98
  describe('#setSecurityLevel', () => {
105
99
  it('should set data', () => {
106
- publicKey.setSecurityLevel(KeySecurityLevel.MEDIUM);
100
+ publicKey.setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.MEDIUM);
107
101
 
108
- expect(publicKey.getSecurityLevel()).to.equal(KeySecurityLevel.MEDIUM);
102
+ expect(publicKey.getSecurityLevel()).to.equal(IdentityPublicKey.SECURITY_LEVELS.MEDIUM);
109
103
  });
110
104
  });
111
105
 
@@ -151,10 +145,10 @@ describe('IdentityPublicKey', () => {
151
145
  it('should return data in case ECDSA_HASH160', () => {
152
146
  rawPublicKey = {
153
147
  id: 0,
154
- type: KeyType.ECDSA_HASH160,
148
+ type: IdentityPublicKey.TYPES.ECDSA_HASH160,
155
149
  data: Buffer.from('AkVuTKyF3YgKLAQlLEtaUL2HTditwGILfWUVqjzYnIgH', 'base64'),
156
- purpose: KeyPurpose.AUTHENTICATION,
157
- securityLevel: KeySecurityLevel.MASTER,
150
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
151
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
158
152
  readOnly: false,
159
153
  disabledAt: 123,
160
154
  };
@@ -171,10 +165,10 @@ describe('IdentityPublicKey', () => {
171
165
  it('should return original public key hash in case BLS12_381', () => {
172
166
  rawPublicKey = {
173
167
  id: 0,
174
- type: KeyType.BLS12_381,
168
+ type: IdentityPublicKey.TYPES.BLS12_381,
175
169
  data: Buffer.from('01fac99ca2c8f39c286717c213e190aba4b7af76db320ec43f479b7d9a2012313a0ae59ca576edf801444bc694686694', 'hex'),
176
- purpose: KeyPurpose.AUTHENTICATION,
177
- securityLevel: KeySecurityLevel.MASTER,
170
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
171
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
178
172
  readOnly: false,
179
173
  disabledAt: 123,
180
174
  };
@@ -191,10 +185,10 @@ describe('IdentityPublicKey', () => {
191
185
  it('should return data in case BIP13_SCRIPT_HASH', () => {
192
186
  rawPublicKey = {
193
187
  id: 0,
194
- type: KeyType.BIP13_SCRIPT_HASH,
188
+ type: IdentityPublicKey.TYPES.BIP13_SCRIPT_HASH,
195
189
  data: Buffer.from('54c557e07dde5bb6cb791c7a540e0a4796f5e97e', 'hex'),
196
- purpose: KeyPurpose.AUTHENTICATION,
197
- securityLevel: KeySecurityLevel.MASTER,
190
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
191
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
198
192
  readOnly: false,
199
193
  disabledAt: 123,
200
194
  };
@@ -215,10 +209,10 @@ describe('IdentityPublicKey', () => {
215
209
 
216
210
  expect(jsonPublicKey).to.deep.equal({
217
211
  id: 0,
218
- type: KeyType.ECDSA_SECP256K1,
212
+ type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
219
213
  data: 'AkVuTKyF3YgKLAQlLEtaUL2HTditwGILfWUVqjzYnIgH',
220
- purpose: KeyPurpose.AUTHENTICATION,
221
- securityLevel: KeySecurityLevel.MASTER,
214
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
215
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
222
216
  readOnly: false,
223
217
  });
224
218
  });
@@ -230,10 +224,10 @@ describe('IdentityPublicKey', () => {
230
224
 
231
225
  expect(jsonPublicKey).to.deep.equal({
232
226
  id: 0,
233
- type: KeyType.ECDSA_SECP256K1,
227
+ type: IdentityPublicKey.TYPES.ECDSA_SECP256K1,
234
228
  data: 'AkVuTKyF3YgKLAQlLEtaUL2HTditwGILfWUVqjzYnIgH',
235
- purpose: KeyPurpose.AUTHENTICATION,
236
- securityLevel: KeySecurityLevel.MASTER,
229
+ purpose: IdentityPublicKey.PURPOSES.AUTHENTICATION,
230
+ securityLevel: IdentityPublicKey.SECURITY_LEVELS.MASTER,
237
231
  readOnly: false,
238
232
  disabledAt: 42,
239
233
  });
@@ -242,7 +236,7 @@ describe('IdentityPublicKey', () => {
242
236
 
243
237
  describe('#isMaster', () => {
244
238
  it('should return true when public key has MASTER security level', () => {
245
- publicKey.setSecurityLevel(KeySecurityLevel.MASTER);
239
+ publicKey.setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.MASTER);
246
240
 
247
241
  const result = publicKey.isMaster();
248
242
 
@@ -250,7 +244,7 @@ describe('IdentityPublicKey', () => {
250
244
  });
251
245
 
252
246
  it('should return false when public key doesn\'t have MASTER security level', () => {
253
- publicKey.setSecurityLevel(KeySecurityLevel.HIGH);
247
+ publicKey.setSecurityLevel(IdentityPublicKey.SECURITY_LEVELS.HIGH);
254
248
 
255
249
  const result = publicKey.isMaster();
256
250
 
package/tsconfig.json CHANGED
@@ -13,6 +13,6 @@
13
13
  ]
14
14
  },
15
15
  "include": [
16
- "index.ts", "wasm/wasm_dpp.js, lib/*"
16
+ "lib/**/*.ts", "wasm/wasm_dpp.js"
17
17
  ],
18
18
  }