@enbox/dwn-sdk-js 0.4.8 → 0.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist/browser.mjs +1 -1
  2. package/dist/browser.mjs.map +4 -4
  3. package/dist/esm/generated/precompiled-validators.js +1262 -3888
  4. package/dist/esm/generated/precompiled-validators.js.map +1 -1
  5. package/dist/esm/src/core/constants.js +0 -26
  6. package/dist/esm/src/core/constants.js.map +1 -1
  7. package/dist/esm/src/core/encryption-control.js +0 -10
  8. package/dist/esm/src/core/encryption-control.js.map +1 -1
  9. package/dist/esm/src/core/replication-apply.js.map +1 -1
  10. package/dist/esm/src/index.js +1 -1
  11. package/dist/esm/src/index.js.map +1 -1
  12. package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
  13. package/dist/esm/src/interfaces/records-write.js +0 -9
  14. package/dist/esm/src/interfaces/records-write.js.map +1 -1
  15. package/dist/esm/src/store/index-level-compound.js.map +1 -1
  16. package/dist/esm/src/store/level-wrapper.js +6 -2
  17. package/dist/esm/src/store/level-wrapper.js.map +1 -1
  18. package/dist/esm/src/utils/encryption.js +2 -7
  19. package/dist/esm/src/utils/encryption.js.map +1 -1
  20. package/dist/esm/src/utils/hd-key.js +0 -27
  21. package/dist/esm/src/utils/hd-key.js.map +1 -1
  22. package/dist/esm/src/utils/jws.js.map +1 -1
  23. package/dist/esm/src/utils/protocols.js +23 -51
  24. package/dist/esm/src/utils/protocols.js.map +1 -1
  25. package/dist/esm/src/utils/records.js +17 -31
  26. package/dist/esm/src/utils/records.js.map +1 -1
  27. package/dist/esm/tests/core/constants.spec.js +1 -11
  28. package/dist/esm/tests/core/constants.spec.js.map +1 -1
  29. package/dist/esm/tests/core/validation-read-closure.spec.js +1 -1
  30. package/dist/esm/tests/core/validation-read-closure.spec.js.map +1 -1
  31. package/dist/esm/tests/dwn.spec.js +5 -5
  32. package/dist/esm/tests/dwn.spec.js.map +1 -1
  33. package/dist/esm/tests/features/author-delegated-grant.spec.js +16 -16
  34. package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
  35. package/dist/esm/tests/features/owner-delegated-grant.spec.js +7 -7
  36. package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
  37. package/dist/esm/tests/features/permissions.spec.js +8 -8
  38. package/dist/esm/tests/features/permissions.spec.js.map +1 -1
  39. package/dist/esm/tests/features/protocol-composition.spec.js +18 -63
  40. package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
  41. package/dist/esm/tests/features/records-prune-cross-protocol.spec.js +5 -5
  42. package/dist/esm/tests/features/records-prune-cross-protocol.spec.js.map +1 -1
  43. package/dist/esm/tests/features/records-prune.spec.js +15 -15
  44. package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
  45. package/dist/esm/tests/features/records-squash.spec.js +9 -9
  46. package/dist/esm/tests/features/records-squash.spec.js.map +1 -1
  47. package/dist/esm/tests/features/records-tags.spec.js +28 -28
  48. package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
  49. package/dist/esm/tests/features/resumable-tasks.spec.js +3 -3
  50. package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
  51. package/dist/esm/tests/fuzz/data-stream.fuzz.spec.js +2 -2
  52. package/dist/esm/tests/fuzz/data-stream.fuzz.spec.js.map +1 -1
  53. package/dist/esm/tests/fuzz/filter.fuzz.spec.js +1 -1
  54. package/dist/esm/tests/fuzz/filter.fuzz.spec.js.map +1 -1
  55. package/dist/esm/tests/fuzz/records-utils.fuzz.spec.js +2 -2
  56. package/dist/esm/tests/fuzz/records-utils.fuzz.spec.js.map +1 -1
  57. package/dist/esm/tests/fuzz/resumable-task-store.fuzz.spec.js +4 -4
  58. package/dist/esm/tests/fuzz/resumable-task-store.fuzz.spec.js.map +1 -1
  59. package/dist/esm/tests/handlers/messages-subscribe.spec.js +16 -16
  60. package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
  61. package/dist/esm/tests/handlers/protocols-configure.spec.js +5 -5
  62. package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
  63. package/dist/esm/tests/handlers/protocols-query.spec.js +11 -11
  64. package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
  65. package/dist/esm/tests/handlers/records-delete.spec.js +23 -23
  66. package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
  67. package/dist/esm/tests/handlers/records-query.spec.js +120 -120
  68. package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
  69. package/dist/esm/tests/handlers/records-read.spec.js +16 -14
  70. package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
  71. package/dist/esm/tests/handlers/records-subscribe.spec.js +10 -10
  72. package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
  73. package/dist/esm/tests/handlers/records-write.spec.js +41 -41
  74. package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
  75. package/dist/esm/tests/interfaces/protocols-configure.spec.js +9 -9
  76. package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
  77. package/dist/esm/tests/interfaces/records-write.spec.js +5 -51
  78. package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
  79. package/dist/esm/tests/jose/jws/general.spec.js +4 -4
  80. package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
  81. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +2 -2
  82. package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
  83. package/dist/esm/tests/scenarios/nested-roles.spec.js +1 -1
  84. package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
  85. package/dist/esm/tests/scenarios/subscriptions.spec.js +28 -28
  86. package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
  87. package/dist/esm/tests/store/blockstore-mock.spec.js +1 -1
  88. package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
  89. package/dist/esm/tests/store/data-store-level.spec.js +3 -3
  90. package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
  91. package/dist/esm/tests/store/index-level.spec.js +83 -83
  92. package/dist/esm/tests/store/index-level.spec.js.map +1 -1
  93. package/dist/esm/tests/store/message-store-level.spec.js +2 -2
  94. package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
  95. package/dist/esm/tests/store/message-store.spec.js +30 -30
  96. package/dist/esm/tests/store/message-store.spec.js.map +1 -1
  97. package/dist/esm/tests/store-dependent-tests.spec.js +5 -0
  98. package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -1
  99. package/dist/esm/tests/utils/data-stream.spec.js +15 -15
  100. package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
  101. package/dist/esm/tests/utils/encryption-callbacks.spec.js +18 -30
  102. package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -1
  103. package/dist/esm/tests/utils/encryption-control-test-utils.js +1 -1
  104. package/dist/esm/tests/utils/encryption-control-test-utils.js.map +1 -1
  105. package/dist/esm/tests/utils/encryption.spec.js +31 -34
  106. package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
  107. package/dist/esm/tests/utils/messages.spec.js +8 -8
  108. package/dist/esm/tests/utils/messages.spec.js.map +1 -1
  109. package/dist/esm/tests/utils/secp256k1.spec.js +2 -2
  110. package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
  111. package/dist/esm/tests/utils/secp256r1.spec.js +1 -1
  112. package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
  113. package/dist/esm/tests/utils/test-data-generator.js +76 -24
  114. package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
  115. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +1 -1
  116. package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
  117. package/dist/types/generated/precompiled-validators.d.ts +88 -120
  118. package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
  119. package/dist/types/src/core/constants.d.ts +0 -13
  120. package/dist/types/src/core/constants.d.ts.map +1 -1
  121. package/dist/types/src/core/encryption-control.d.ts +0 -1
  122. package/dist/types/src/core/encryption-control.d.ts.map +1 -1
  123. package/dist/types/src/core/replication-apply.d.ts +0 -7
  124. package/dist/types/src/core/replication-apply.d.ts.map +1 -1
  125. package/dist/types/src/index.d.ts +1 -1
  126. package/dist/types/src/index.d.ts.map +1 -1
  127. package/dist/types/src/interfaces/messages-subscribe.d.ts +1 -2
  128. package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
  129. package/dist/types/src/interfaces/records-write.d.ts +0 -4
  130. package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
  131. package/dist/types/src/store/index-level-compound.d.ts +2 -4
  132. package/dist/types/src/store/index-level-compound.d.ts.map +1 -1
  133. package/dist/types/src/store/level-wrapper.d.ts.map +1 -1
  134. package/dist/types/src/types/protocols-types.d.ts +1 -1
  135. package/dist/types/src/types/protocols-types.d.ts.map +1 -1
  136. package/dist/types/src/utils/encryption.d.ts +0 -3
  137. package/dist/types/src/utils/encryption.d.ts.map +1 -1
  138. package/dist/types/src/utils/hd-key.d.ts +1 -11
  139. package/dist/types/src/utils/hd-key.d.ts.map +1 -1
  140. package/dist/types/src/utils/jws.d.ts +1 -2
  141. package/dist/types/src/utils/jws.d.ts.map +1 -1
  142. package/dist/types/src/utils/protocols.d.ts +2 -7
  143. package/dist/types/src/utils/protocols.d.ts.map +1 -1
  144. package/dist/types/src/utils/records.d.ts +1 -8
  145. package/dist/types/src/utils/records.d.ts.map +1 -1
  146. package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -1
  147. package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
  148. package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -1
  149. package/dist/types/tests/utils/test-data-generator.d.ts +17 -1
  150. package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
  151. package/package.json +4 -4
  152. package/src/core/constants.ts +0 -30
  153. package/src/core/encryption-control.ts +1 -17
  154. package/src/core/replication-apply.ts +0 -8
  155. package/src/index.ts +0 -1
  156. package/src/interfaces/messages-subscribe.ts +1 -2
  157. package/src/interfaces/records-write.ts +0 -13
  158. package/src/store/index-level-compound.ts +2 -5
  159. package/src/store/level-wrapper.ts +6 -2
  160. package/src/types/protocols-types.ts +2 -1
  161. package/src/utils/encryption.ts +2 -15
  162. package/src/utils/hd-key.ts +1 -32
  163. package/src/utils/jws.ts +1 -2
  164. package/src/utils/protocols.ts +15 -78
  165. package/src/utils/records.ts +15 -57
  166. package/dist/esm/tests/validation/json-schemas/encryption/delivery.spec.js +0 -47
  167. package/dist/esm/tests/validation/json-schemas/encryption/delivery.spec.js.map +0 -1
  168. package/dist/esm/tests/validation/json-schemas/encryption/grant-key.spec.js +0 -72
  169. package/dist/esm/tests/validation/json-schemas/encryption/grant-key.spec.js.map +0 -1
  170. package/dist/types/tests/validation/json-schemas/encryption/delivery.spec.d.ts +0 -2
  171. package/dist/types/tests/validation/json-schemas/encryption/delivery.spec.d.ts.map +0 -1
  172. package/dist/types/tests/validation/json-schemas/encryption/grant-key.spec.d.ts +0 -2
  173. package/dist/types/tests/validation/json-schemas/encryption/grant-key.spec.d.ts.map +0 -1
@@ -75,7 +75,7 @@ export function testRecordsWriteHandler() {
75
75
  await dwn.close();
76
76
  });
77
77
  async function installEncryptedProtocol(author, protocolDefinition) {
78
- const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, author.keyId, author.encryptionKeyPair.privateJwk);
78
+ const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, TestDataGenerator.createProtocolPathKeyDeriver(author.keyId, author.encryptionKeyPair.privateJwk));
79
79
  const protocolConfig = await TestDataGenerator.generateProtocolsConfigure({
80
80
  author,
81
81
  protocolDefinition: encryptedProtocolDefinition,
@@ -405,7 +405,7 @@ export function testRecordsWriteHandler() {
405
405
  message: {},
406
406
  },
407
407
  };
408
- const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, alice.keyId, alice.encryptionKeyPair.privateJwk);
408
+ const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, TestDataGenerator.createProtocolPathKeyDeriver(alice.keyId, alice.encryptionKeyPair.privateJwk));
409
409
  const protocolConfig = await TestDataGenerator.generateProtocolsConfigure({
410
410
  author: alice,
411
411
  protocolDefinition: encryptedProtocolDefinition,
@@ -922,7 +922,7 @@ export function testRecordsWriteHandler() {
922
922
  // verify the message written can be queried
923
923
  const recordsQueryReply = await dwn.processMessage(tenant, recordsQueryMessageData.message);
924
924
  expect(recordsQueryReply.status.code).toBe(200);
925
- expect(recordsQueryReply.entries?.length).toBe(1);
925
+ expect(recordsQueryReply.entries).toHaveLength(1);
926
926
  expect(recordsQueryReply.entries[0].encodedData).toBe(base64url.baseEncode(data1));
927
927
  // generate and write a new RecordsWrite to overwrite the existing record
928
928
  // a new RecordsWrite by default will have a later `messageTimestamp`
@@ -940,7 +940,7 @@ export function testRecordsWriteHandler() {
940
940
  // verify new record has overwritten the existing record
941
941
  const newRecordsQueryReply = await dwn.processMessage(tenant, recordsQueryMessageData.message);
942
942
  expect(newRecordsQueryReply.status.code).toBe(200);
943
- expect(newRecordsQueryReply.entries?.length).toBe(1);
943
+ expect(newRecordsQueryReply.entries).toHaveLength(1);
944
944
  expect(newRecordsQueryReply.entries[0].encodedData).toBe(newDataEncoded);
945
945
  // try to write the older message to store again and verify that it is not accepted
946
946
  const thirdRecordsWriteReply = await dwn.processMessage(tenant, recordsWriteMessageData.message, { dataStream: recordsWriteMessageData.dataStream });
@@ -948,7 +948,7 @@ export function testRecordsWriteHandler() {
948
948
  // expecting unchanged
949
949
  const thirdRecordsQueryReply = await dwn.processMessage(tenant, recordsQueryMessageData.message);
950
950
  expect(thirdRecordsQueryReply.status.code).toBe(200);
951
- expect(thirdRecordsQueryReply.entries?.length).toBe(1);
951
+ expect(thirdRecordsQueryReply.entries).toHaveLength(1);
952
952
  expect(thirdRecordsQueryReply.entries[0].encodedData).toBe(newDataEncoded);
953
953
  });
954
954
  it('should return 409 for an exact duplicate initial RecordsWrite with large data', async () => {
@@ -1054,7 +1054,7 @@ export function testRecordsWriteHandler() {
1054
1054
  // verify the data is written
1055
1055
  const recordsQueryReply = await dwn.processMessage(tenant, recordsQueryMessageData.message);
1056
1056
  expect(recordsQueryReply.status.code).toBe(200);
1057
- expect(recordsQueryReply.entries?.length).toBe(1);
1057
+ expect(recordsQueryReply.entries).toHaveLength(1);
1058
1058
  expect(recordsQueryReply.entries[0].descriptor.dataCid)
1059
1059
  .toBe(olderWrite.message.descriptor.dataCid);
1060
1060
  // attempt to write the message with larger lexicographical message CID
@@ -1063,7 +1063,7 @@ export function testRecordsWriteHandler() {
1063
1063
  // verify new record has overwritten the existing record
1064
1064
  const newRecordsQueryReply = await dwn.processMessage(tenant, recordsQueryMessageData.message);
1065
1065
  expect(newRecordsQueryReply.status.code).toBe(200);
1066
- expect(newRecordsQueryReply.entries?.length).toBe(1);
1066
+ expect(newRecordsQueryReply.entries).toHaveLength(1);
1067
1067
  expect(newRecordsQueryReply.entries[0].descriptor.dataCid)
1068
1068
  .toBe(newerWrite.message.descriptor.dataCid);
1069
1069
  // try to write the message with smaller lexicographical message CID again
@@ -1073,7 +1073,7 @@ export function testRecordsWriteHandler() {
1073
1073
  // verify the message in store is still the one with larger lexicographical message CID
1074
1074
  const thirdRecordsQueryReply = await dwn.processMessage(tenant, recordsQueryMessageData.message);
1075
1075
  expect(thirdRecordsQueryReply.status.code).toBe(200);
1076
- expect(thirdRecordsQueryReply.entries?.length).toBe(1);
1076
+ expect(thirdRecordsQueryReply.entries).toHaveLength(1);
1077
1077
  expect(thirdRecordsQueryReply.entries[0].descriptor.dataCid)
1078
1078
  .toBe(newerWrite.message.descriptor.dataCid); // expecting unchanged
1079
1079
  });
@@ -1211,7 +1211,7 @@ export function testRecordsWriteHandler() {
1211
1211
  });
1212
1212
  const recordsQueryReply = await dwn.processMessage(alice.did, recordsQueryMessageData.message);
1213
1213
  expect(recordsQueryReply.status.code).toBe(200);
1214
- expect(recordsQueryReply.entries?.length).toBe(0);
1214
+ expect(recordsQueryReply.entries).toHaveLength(0);
1215
1215
  // generate and write a new `RecordsWrite` to overwrite the existing record
1216
1216
  const newDataBytes = Encoder.stringToBytes('new data');
1217
1217
  const newDataEncoded = Encoder.bytesToBase64Url(newDataBytes);
@@ -1225,7 +1225,7 @@ export function testRecordsWriteHandler() {
1225
1225
  // verify new `RecordsWrite` has overwritten the existing record with new data
1226
1226
  const newRecordsQueryReply = await dwn.processMessage(alice.did, recordsQueryMessageData.message);
1227
1227
  expect(newRecordsQueryReply.status.code).toBe(200);
1228
- expect(newRecordsQueryReply.entries?.length).toBe(1);
1228
+ expect(newRecordsQueryReply.entries).toHaveLength(1);
1229
1229
  expect(newRecordsQueryReply.entries[0].encodedData).toBe(newDataEncoded);
1230
1230
  });
1231
1231
  it('should not allow non-initial writes to be written without supplying data', async () => {
@@ -1244,7 +1244,7 @@ export function testRecordsWriteHandler() {
1244
1244
  });
1245
1245
  const recordsQueryReply = await dwn.processMessage(alice.did, recordsQueryMessageData.message);
1246
1246
  expect(recordsQueryReply.status.code).toBe(200);
1247
- expect(recordsQueryReply.entries?.length).toBe(1);
1247
+ expect(recordsQueryReply.entries).toHaveLength(1);
1248
1248
  // generate and write a new `RecordsWrite` to overwrite the existing record
1249
1249
  const newDataBytes = Encoder.stringToBytes('new data');
1250
1250
  const newRecordsWrite = await TestDataGenerator.generateFromRecordsWrite({
@@ -1259,7 +1259,7 @@ export function testRecordsWriteHandler() {
1259
1259
  // verify the original `RecordsWrite` and data are still available
1260
1260
  const newRecordsQueryReply = await dwn.processMessage(alice.did, recordsQueryMessageData.message);
1261
1261
  expect(newRecordsQueryReply.status.code).toBe(200);
1262
- expect(newRecordsQueryReply.entries?.length).toBe(1);
1262
+ expect(newRecordsQueryReply.entries).toHaveLength(1);
1263
1263
  const originalEncodedData = Encoder.bytesToBase64Url(dataBytes);
1264
1264
  expect(newRecordsQueryReply.entries[0].encodedData).toBe(originalEncodedData);
1265
1265
  });
@@ -1611,7 +1611,7 @@ export function testRecordsWriteHandler() {
1611
1611
  });
1612
1612
  const recordsQueryReply = await dwn.processMessage(tenant, recordsQueryMessageData.message);
1613
1613
  expect(recordsQueryReply.status.code).toBe(200);
1614
- expect(recordsQueryReply.entries?.length).toBe(1);
1614
+ expect(recordsQueryReply.entries).toHaveLength(1);
1615
1615
  expect(recordsQueryReply.entries[0].descriptor.published).toBe(true);
1616
1616
  // very importantly verify the original data is still returned
1617
1617
  expect(recordsQueryReply.entries[0].encodedData).toBe(encodedData);
@@ -1643,7 +1643,7 @@ export function testRecordsWriteHandler() {
1643
1643
  });
1644
1644
  const recordsQueryReply = await dwn.processMessage(tenant, recordsQueryMessageData.message);
1645
1645
  expect(recordsQueryReply.status.code).toBe(200);
1646
- expect(recordsQueryReply.entries?.length).toBe(1);
1646
+ expect(recordsQueryReply.entries).toHaveLength(1);
1647
1647
  const recordsWriteReturned = recordsQueryReply.entries[0];
1648
1648
  expect(recordsWriteReturned.encodedData).toBe(Encoder.bytesToBase64Url(newData));
1649
1649
  expect(recordsWriteReturned.descriptor.published).toBe(true);
@@ -1718,7 +1718,7 @@ export function testRecordsWriteHandler() {
1718
1718
  expect(newestWriteReply.status.code).toBe(202);
1719
1719
  const deletedMessageCid = await Message.getCid(newWrite.message);
1720
1720
  const { messages } = await messageStore.query(author.did, [{ recordId: message.recordId }]);
1721
- expect(messages.length).toBe(2); // first write + latest write
1721
+ expect(messages).toHaveLength(2); // first write + latest write
1722
1722
  const retainedCids = await Promise.all(messages.map((storedMessage) => Message.getCid(storedMessage)));
1723
1723
  expect(retainedCids).not.toContain(deletedMessageCid);
1724
1724
  });
@@ -1758,7 +1758,7 @@ export function testRecordsWriteHandler() {
1758
1758
  });
1759
1759
  const bobRecordsQueryReply = await dwn.processMessage(alice.did, messageDataForQueryingBobsWrite.message);
1760
1760
  expect(bobRecordsQueryReply.status.code).toBe(200);
1761
- expect(bobRecordsQueryReply.entries?.length).toBe(1);
1761
+ expect(bobRecordsQueryReply.entries).toHaveLength(1);
1762
1762
  expect(bobRecordsQueryReply.entries[0].encodedData).toBe(Encoder.bytesToBase64Url(bobData));
1763
1763
  });
1764
1764
  it('should allow co-update with allow-anyone rule', async () => {
@@ -1854,7 +1854,7 @@ export function testRecordsWriteHandler() {
1854
1854
  });
1855
1855
  const applicationResponseQueryReply = await dwn.processMessage(alice.did, messageDataForQueryingCredentialResponse.message);
1856
1856
  expect(applicationResponseQueryReply.status.code).toBe(200);
1857
- expect(applicationResponseQueryReply.entries?.length).toBe(1);
1857
+ expect(applicationResponseQueryReply.entries).toHaveLength(1);
1858
1858
  expect(applicationResponseQueryReply.entries[0].encodedData)
1859
1859
  .toBe(base64url.baseEncode(encodedCredentialResponse));
1860
1860
  });
@@ -2016,7 +2016,7 @@ export function testRecordsWriteHandler() {
2016
2016
  });
2017
2017
  const applicationResponseQueryReply = await dwn.processMessage(bob.did, messageDataForQueryingCaptionResponse.message);
2018
2018
  expect(applicationResponseQueryReply.status.code).toBe(200);
2019
- expect(applicationResponseQueryReply.entries?.length).toBe(1);
2019
+ expect(applicationResponseQueryReply.entries).toHaveLength(1);
2020
2020
  expect(applicationResponseQueryReply.entries[0].encodedData)
2021
2021
  .toBe(base64url.baseEncode(encodedCaption));
2022
2022
  });
@@ -2680,7 +2680,7 @@ export function testRecordsWriteHandler() {
2680
2680
  });
2681
2681
  const bobRecordsQueryReply = await dwn.processMessage(alice.did, messageDataForQueryingBobsWrite.message);
2682
2682
  expect(bobRecordsQueryReply.status.code).toBe(200);
2683
- expect(bobRecordsQueryReply.entries?.length).toBe(1);
2683
+ expect(bobRecordsQueryReply.entries).toHaveLength(1);
2684
2684
  expect(bobRecordsQueryReply.entries[0].encodedData).toBe(base64url.baseEncode(bobData));
2685
2685
  // generate a new message from bob updating the existing message
2686
2686
  const updatedMessageBytes = Encoder.stringToBytes('updated message from bob');
@@ -2694,7 +2694,7 @@ export function testRecordsWriteHandler() {
2694
2694
  // verify bob's message got written to the DB
2695
2695
  const newRecordQueryReply = await dwn.processMessage(alice.did, messageDataForQueryingBobsWrite.message);
2696
2696
  expect(newRecordQueryReply.status.code).toBe(200);
2697
- expect(newRecordQueryReply.entries?.length).toBe(1);
2697
+ expect(newRecordQueryReply.entries).toHaveLength(1);
2698
2698
  expect(newRecordQueryReply.entries[0].encodedData).toBe(Encoder.bytesToBase64Url(updatedMessageBytes));
2699
2699
  });
2700
2700
  it('should disallow overwriting existing records by a different author if author is not authorized to `co-update`', async () => {
@@ -2732,7 +2732,7 @@ export function testRecordsWriteHandler() {
2732
2732
  });
2733
2733
  const bobRecordsQueryReply = await dwn.processMessage(alice.did, messageDataForQueryingBobsWrite.message);
2734
2734
  expect(bobRecordsQueryReply.status.code).toBe(200);
2735
- expect(bobRecordsQueryReply.entries?.length).toBe(1);
2735
+ expect(bobRecordsQueryReply.entries).toHaveLength(1);
2736
2736
  expect(bobRecordsQueryReply.entries[0].encodedData).toBe(base64url.baseEncode(bobData));
2737
2737
  // generate a well-formed update from Carol, which should not be allowed/accepted
2738
2738
  const modifiedMessageData = new TextEncoder().encode('modified message by carol');
@@ -2781,7 +2781,7 @@ export function testRecordsWriteHandler() {
2781
2781
  });
2782
2782
  const bobRecordsQueryReply = await dwn.processMessage(alice.did, messageDataForQueryingBobsWrite.message);
2783
2783
  expect(bobRecordsQueryReply.status.code).toBe(200);
2784
- expect(bobRecordsQueryReply.entries?.length).toBe(1);
2784
+ expect(bobRecordsQueryReply.entries).toHaveLength(1);
2785
2785
  expect(bobRecordsQueryReply.entries[0].encodedData).toBe(base64url.baseEncode(bobData));
2786
2786
  // generate a new message from bob changing immutable recipient
2787
2787
  const updatedMessageFromBob = await TestDataGenerator.generateRecordsWrite({
@@ -3043,7 +3043,7 @@ export function testRecordsWriteHandler() {
3043
3043
  secret: {}
3044
3044
  }
3045
3045
  };
3046
- const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, alice.keyId, alice.encryptionKeyPair.privateJwk);
3046
+ const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, TestDataGenerator.createProtocolPathKeyDeriver(alice.keyId, alice.encryptionKeyPair.privateJwk));
3047
3047
  // Alice installs the protocol
3048
3048
  const protocolConfig = await TestDataGenerator.generateProtocolsConfigure({
3049
3049
  author: alice,
@@ -3079,7 +3079,7 @@ export function testRecordsWriteHandler() {
3079
3079
  secret: {}
3080
3080
  }
3081
3081
  };
3082
- const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, alice.keyId, alice.encryptionKeyPair.privateJwk);
3082
+ const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, TestDataGenerator.createProtocolPathKeyDeriver(alice.keyId, alice.encryptionKeyPair.privateJwk));
3083
3083
  // Alice installs the protocol
3084
3084
  const protocolConfig = await TestDataGenerator.generateProtocolsConfigure({
3085
3085
  author: alice,
@@ -3134,7 +3134,7 @@ export function testRecordsWriteHandler() {
3134
3134
  },
3135
3135
  },
3136
3136
  };
3137
- const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, alice.keyId, alice.encryptionKeyPair.privateJwk);
3137
+ const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, TestDataGenerator.createProtocolPathKeyDeriver(alice.keyId, alice.encryptionKeyPair.privateJwk));
3138
3138
  const protocolConfig = await TestDataGenerator.generateProtocolsConfigure({
3139
3139
  author: alice,
3140
3140
  protocolDefinition: encryptedProtocolDefinition,
@@ -3201,7 +3201,7 @@ export function testRecordsWriteHandler() {
3201
3201
  },
3202
3202
  },
3203
3203
  };
3204
- const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, alice.keyId, alice.encryptionKeyPair.privateJwk);
3204
+ const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, TestDataGenerator.createProtocolPathKeyDeriver(alice.keyId, alice.encryptionKeyPair.privateJwk));
3205
3205
  const protocolConfig = await TestDataGenerator.generateProtocolsConfigure({
3206
3206
  author: alice,
3207
3207
  protocolDefinition: encryptedProtocolDefinition,
@@ -3279,7 +3279,7 @@ export function testRecordsWriteHandler() {
3279
3279
  },
3280
3280
  },
3281
3281
  };
3282
- const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, alice.keyId, alice.encryptionKeyPair.privateJwk);
3282
+ const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, TestDataGenerator.createProtocolPathKeyDeriver(alice.keyId, alice.encryptionKeyPair.privateJwk));
3283
3283
  const protocolConfig = await TestDataGenerator.generateProtocolsConfigure({
3284
3284
  author: alice,
3285
3285
  protocolDefinition: encryptedProtocolDefinition,
@@ -3478,7 +3478,7 @@ export function testRecordsWriteHandler() {
3478
3478
  },
3479
3479
  },
3480
3480
  };
3481
- const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, alice.keyId, alice.encryptionKeyPair.privateJwk);
3481
+ const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, TestDataGenerator.createProtocolPathKeyDeriver(alice.keyId, alice.encryptionKeyPair.privateJwk));
3482
3482
  const protocolConfig = await TestDataGenerator.generateProtocolsConfigure({
3483
3483
  author: alice,
3484
3484
  protocolDefinition: encryptedProtocolDefinition,
@@ -3564,7 +3564,7 @@ export function testRecordsWriteHandler() {
3564
3564
  },
3565
3565
  },
3566
3566
  };
3567
- const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, alice.keyId, alice.encryptionKeyPair.privateJwk);
3567
+ const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, TestDataGenerator.createProtocolPathKeyDeriver(alice.keyId, alice.encryptionKeyPair.privateJwk));
3568
3568
  const protocolConfig = await TestDataGenerator.generateProtocolsConfigure({
3569
3569
  author: alice,
3570
3570
  protocolDefinition: encryptedProtocolDefinition,
@@ -3643,7 +3643,7 @@ export function testRecordsWriteHandler() {
3643
3643
  secret: {},
3644
3644
  }
3645
3645
  };
3646
- const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, alice.keyId, alice.encryptionKeyPair.privateJwk);
3646
+ const encryptedProtocolDefinition = await Protocols.deriveAndInjectPublicEncryptionKeys(protocolDefinition, TestDataGenerator.createProtocolPathKeyDeriver(alice.keyId, alice.encryptionKeyPair.privateJwk));
3647
3647
  // Alice installs the protocol
3648
3648
  const protocolConfig = await TestDataGenerator.generateProtocolsConfigure({
3649
3649
  author: alice,
@@ -3836,7 +3836,7 @@ export function testRecordsWriteHandler() {
3836
3836
  // verify the data is written
3837
3837
  const recordsQueryReply = await dwn.processMessage(pfi.did, recordsQueryMessageData.message);
3838
3838
  expect(recordsQueryReply.status.code).toBe(200);
3839
- expect(recordsQueryReply.entries?.length).toBe(1);
3839
+ expect(recordsQueryReply.entries).toHaveLength(1);
3840
3840
  expect(recordsQueryReply.entries[0].descriptor.dataCid).toBe(fulfillmentMessageData.message.descriptor.dataCid);
3841
3841
  });
3842
3842
  it('should fail authorization if incoming message contains `parentId` that leads to no record', async () => {
@@ -4110,7 +4110,7 @@ export function testRecordsWriteHandler() {
4110
4110
  });
4111
4111
  const bobRecordsQueryReply = await dwn.processMessage(alice.did, bobRecordsQuery.message);
4112
4112
  expect(bobRecordsQueryReply.status.code).toBe(200);
4113
- expect(bobRecordsQueryReply.entries?.length).toBe(0);
4113
+ expect(bobRecordsQueryReply.entries).toHaveLength(0);
4114
4114
  //further sanity query for specific recordId
4115
4115
  const bobRecordsQueryRecordId = await RecordsQuery.create({
4116
4116
  filter: {
@@ -4120,7 +4120,7 @@ export function testRecordsWriteHandler() {
4120
4120
  });
4121
4121
  const bobRecordsQueryRecordIdReply = await dwn.processMessage(alice.did, bobRecordsQueryRecordId.message);
4122
4122
  expect(bobRecordsQueryRecordIdReply.status.code).toBe(200);
4123
- expect(bobRecordsQueryRecordIdReply.entries?.length).toBe(0);
4123
+ expect(bobRecordsQueryRecordIdReply.entries).toHaveLength(0);
4124
4124
  // attempt update recordsWrite without data, this will reject
4125
4125
  const updateRecord = await RecordsWrite.createFrom({
4126
4126
  recordsWriteMessage: imageRecordsWrite.message,
@@ -4133,7 +4133,7 @@ export function testRecordsWriteHandler() {
4133
4133
  // sanity still can't query
4134
4134
  const bobRecordsQueryReply2 = await dwn.processMessage(alice.did, bobRecordsQuery.message);
4135
4135
  expect(bobRecordsQueryReply2.status.code).toBe(200);
4136
- expect(bobRecordsQueryReply2.entries?.length).toBe(0);
4136
+ expect(bobRecordsQueryReply2.entries).toHaveLength(0);
4137
4137
  });
4138
4138
  it('#359 - should not allow access of data by referencing `dataCid` in protocol authorized `RecordsWrite` with large data', async () => {
4139
4139
  const alice = await TestDataGenerator.generateDidKeyPersona();
@@ -4192,7 +4192,7 @@ export function testRecordsWriteHandler() {
4192
4192
  });
4193
4193
  const bobRecordsQueryReply = await dwn.processMessage(alice.did, bobRecordsQuery.message);
4194
4194
  expect(bobRecordsQueryReply.status.code).toBe(200);
4195
- expect(bobRecordsQueryReply.entries?.length).toBe(0);
4195
+ expect(bobRecordsQueryReply.entries).toHaveLength(0);
4196
4196
  //further sanity query for specific recordId
4197
4197
  const bobRecordsQueryRecordId = await RecordsQuery.create({
4198
4198
  filter: {
@@ -4202,7 +4202,7 @@ export function testRecordsWriteHandler() {
4202
4202
  });
4203
4203
  const bobRecordsQueryRecordIdReply = await dwn.processMessage(alice.did, bobRecordsQueryRecordId.message);
4204
4204
  expect(bobRecordsQueryRecordIdReply.status.code).toBe(200);
4205
- expect(bobRecordsQueryRecordIdReply.entries?.length).toBe(0);
4205
+ expect(bobRecordsQueryRecordIdReply.entries).toHaveLength(0);
4206
4206
  // attempt update recordsWrite without data, this will reject
4207
4207
  const updateRecord = await RecordsWrite.createFrom({
4208
4208
  recordsWriteMessage: imageRecordsWrite.message,
@@ -4215,7 +4215,7 @@ export function testRecordsWriteHandler() {
4215
4215
  // sanity still can't query
4216
4216
  const bobRecordsQueryReply2 = await dwn.processMessage(alice.did, bobRecordsQuery.message);
4217
4217
  expect(bobRecordsQueryReply2.status.code).toBe(200);
4218
- expect(bobRecordsQueryReply2.entries?.length).toBe(0);
4218
+ expect(bobRecordsQueryReply2.entries).toHaveLength(0);
4219
4219
  });
4220
4220
  it('should allow record with or without schema if protocol does not require schema for a record type', async () => {
4221
4221
  // scenario: Alice's DWN has a protocol that allows anyone to write a record without schema
@@ -4260,7 +4260,7 @@ export function testRecordsWriteHandler() {
4260
4260
  });
4261
4261
  const recordsReadReply = await dwn.processMessage(alice.did, recordsQuery.message);
4262
4262
  expect(recordsReadReply.status.code).toBe(200);
4263
- expect(recordsReadReply.entries?.length).toBe(2);
4263
+ expect(recordsReadReply.entries).toHaveLength(2);
4264
4264
  });
4265
4265
  it('should allow authorization if protocol message size is within min and max size', async () => {
4266
4266
  const alice = await TestDataGenerator.generatePersona();
@@ -5042,7 +5042,7 @@ export function testRecordsWriteHandler() {
5042
5042
  });
5043
5043
  const aliceQueryWriteAfterAliceWriteReply = await dwn.processMessage(alice.did, aliceQueryWriteAfterAliceWriteData.message);
5044
5044
  expect(aliceQueryWriteAfterAliceWriteReply.status.code).toBe(200);
5045
- expect(aliceQueryWriteAfterAliceWriteReply.entries?.length).toBe(1);
5045
+ expect(aliceQueryWriteAfterAliceWriteReply.entries).toHaveLength(1);
5046
5046
  expect(aliceQueryWriteAfterAliceWriteReply.entries[0].encodedData).toBe(encodedData);
5047
5047
  // bob learns of the CID of data of alice and tries to gain unauthorized access by referencing it in his own DWN
5048
5048
  const bobWriteData = await TestDataGenerator.generateRecordsWrite({
@@ -5058,7 +5058,7 @@ export function testRecordsWriteHandler() {
5058
5058
  });
5059
5059
  const aliceQueryWriteAfterBobWriteReply = await dwn.processMessage(alice.did, aliceQueryWriteAfterBobWriteData.message);
5060
5060
  expect(aliceQueryWriteAfterBobWriteReply.status.code).toBe(200);
5061
- expect(aliceQueryWriteAfterBobWriteReply.entries?.length).toBe(1);
5061
+ expect(aliceQueryWriteAfterBobWriteReply.entries).toHaveLength(1);
5062
5062
  expect(aliceQueryWriteAfterBobWriteReply.entries[0].encodedData).toBe(encodedData);
5063
5063
  // verify that bob has not gained access to alice's data
5064
5064
  const bobQueryAfterBobWriteData = await TestDataGenerator.generateRecordsQuery({
@@ -5067,7 +5067,7 @@ export function testRecordsWriteHandler() {
5067
5067
  });
5068
5068
  const bobQueryAfterBobWriteReply = await dwn.processMessage(bob.did, bobQueryAfterBobWriteData.message);
5069
5069
  expect(bobQueryAfterBobWriteReply.status.code).toBe(200);
5070
- expect(bobQueryAfterBobWriteReply.entries?.length).toBe(0);
5070
+ expect(bobQueryAfterBobWriteReply.entries).toHaveLength(0);
5071
5071
  });
5072
5072
  describe('encodedData threshold', () => {
5073
5073
  it('should call cloneAndAddEncodedData if dataSize is less than or equal to the threshold', async () => {