@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.
- package/dist/browser.mjs +1 -1
- package/dist/browser.mjs.map +4 -4
- package/dist/esm/generated/precompiled-validators.js +1262 -3888
- package/dist/esm/generated/precompiled-validators.js.map +1 -1
- package/dist/esm/src/core/constants.js +0 -26
- package/dist/esm/src/core/constants.js.map +1 -1
- package/dist/esm/src/core/encryption-control.js +0 -10
- package/dist/esm/src/core/encryption-control.js.map +1 -1
- package/dist/esm/src/core/replication-apply.js.map +1 -1
- package/dist/esm/src/index.js +1 -1
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
- package/dist/esm/src/interfaces/records-write.js +0 -9
- package/dist/esm/src/interfaces/records-write.js.map +1 -1
- package/dist/esm/src/store/index-level-compound.js.map +1 -1
- package/dist/esm/src/store/level-wrapper.js +6 -2
- package/dist/esm/src/store/level-wrapper.js.map +1 -1
- package/dist/esm/src/utils/encryption.js +2 -7
- package/dist/esm/src/utils/encryption.js.map +1 -1
- package/dist/esm/src/utils/hd-key.js +0 -27
- package/dist/esm/src/utils/hd-key.js.map +1 -1
- package/dist/esm/src/utils/jws.js.map +1 -1
- package/dist/esm/src/utils/protocols.js +23 -51
- package/dist/esm/src/utils/protocols.js.map +1 -1
- package/dist/esm/src/utils/records.js +17 -31
- package/dist/esm/src/utils/records.js.map +1 -1
- package/dist/esm/tests/core/constants.spec.js +1 -11
- package/dist/esm/tests/core/constants.spec.js.map +1 -1
- package/dist/esm/tests/core/validation-read-closure.spec.js +1 -1
- package/dist/esm/tests/core/validation-read-closure.spec.js.map +1 -1
- package/dist/esm/tests/dwn.spec.js +5 -5
- package/dist/esm/tests/dwn.spec.js.map +1 -1
- package/dist/esm/tests/features/author-delegated-grant.spec.js +16 -16
- package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-delegated-grant.spec.js +7 -7
- package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/permissions.spec.js +8 -8
- package/dist/esm/tests/features/permissions.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-composition.spec.js +18 -63
- package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
- package/dist/esm/tests/features/records-prune-cross-protocol.spec.js +5 -5
- package/dist/esm/tests/features/records-prune-cross-protocol.spec.js.map +1 -1
- package/dist/esm/tests/features/records-prune.spec.js +15 -15
- package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
- package/dist/esm/tests/features/records-squash.spec.js +9 -9
- package/dist/esm/tests/features/records-squash.spec.js.map +1 -1
- package/dist/esm/tests/features/records-tags.spec.js +28 -28
- package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
- package/dist/esm/tests/features/resumable-tasks.spec.js +3 -3
- package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
- package/dist/esm/tests/fuzz/data-stream.fuzz.spec.js +2 -2
- package/dist/esm/tests/fuzz/data-stream.fuzz.spec.js.map +1 -1
- package/dist/esm/tests/fuzz/filter.fuzz.spec.js +1 -1
- package/dist/esm/tests/fuzz/filter.fuzz.spec.js.map +1 -1
- package/dist/esm/tests/fuzz/records-utils.fuzz.spec.js +2 -2
- package/dist/esm/tests/fuzz/records-utils.fuzz.spec.js.map +1 -1
- package/dist/esm/tests/fuzz/resumable-task-store.fuzz.spec.js +4 -4
- package/dist/esm/tests/fuzz/resumable-task-store.fuzz.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-subscribe.spec.js +16 -16
- package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/protocols-configure.spec.js +5 -5
- package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/handlers/protocols-query.spec.js +11 -11
- package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-delete.spec.js +23 -23
- package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-query.spec.js +120 -120
- package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-read.spec.js +16 -14
- package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-subscribe.spec.js +10 -10
- package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-write.spec.js +41 -41
- package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-configure.spec.js +9 -9
- package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-write.spec.js +5 -51
- package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
- package/dist/esm/tests/jose/jws/general.spec.js +4 -4
- package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +2 -2
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/nested-roles.spec.js +1 -1
- package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/subscriptions.spec.js +28 -28
- package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
- package/dist/esm/tests/store/blockstore-mock.spec.js +1 -1
- package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
- package/dist/esm/tests/store/data-store-level.spec.js +3 -3
- package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/index-level.spec.js +83 -83
- package/dist/esm/tests/store/index-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store-level.spec.js +2 -2
- package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store.spec.js +30 -30
- package/dist/esm/tests/store/message-store.spec.js.map +1 -1
- package/dist/esm/tests/store-dependent-tests.spec.js +5 -0
- package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -1
- package/dist/esm/tests/utils/data-stream.spec.js +15 -15
- package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
- package/dist/esm/tests/utils/encryption-callbacks.spec.js +18 -30
- package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -1
- package/dist/esm/tests/utils/encryption-control-test-utils.js +1 -1
- package/dist/esm/tests/utils/encryption-control-test-utils.js.map +1 -1
- package/dist/esm/tests/utils/encryption.spec.js +31 -34
- package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
- package/dist/esm/tests/utils/messages.spec.js +8 -8
- package/dist/esm/tests/utils/messages.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256k1.spec.js +2 -2
- package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256r1.spec.js +1 -1
- package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
- package/dist/esm/tests/utils/test-data-generator.js +76 -24
- package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +1 -1
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
- package/dist/types/generated/precompiled-validators.d.ts +88 -120
- package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
- package/dist/types/src/core/constants.d.ts +0 -13
- package/dist/types/src/core/constants.d.ts.map +1 -1
- package/dist/types/src/core/encryption-control.d.ts +0 -1
- package/dist/types/src/core/encryption-control.d.ts.map +1 -1
- package/dist/types/src/core/replication-apply.d.ts +0 -7
- package/dist/types/src/core/replication-apply.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-subscribe.d.ts +1 -2
- package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-write.d.ts +0 -4
- package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
- package/dist/types/src/store/index-level-compound.d.ts +2 -4
- package/dist/types/src/store/index-level-compound.d.ts.map +1 -1
- package/dist/types/src/store/level-wrapper.d.ts.map +1 -1
- package/dist/types/src/types/protocols-types.d.ts +1 -1
- package/dist/types/src/types/protocols-types.d.ts.map +1 -1
- package/dist/types/src/utils/encryption.d.ts +0 -3
- package/dist/types/src/utils/encryption.d.ts.map +1 -1
- package/dist/types/src/utils/hd-key.d.ts +1 -11
- package/dist/types/src/utils/hd-key.d.ts.map +1 -1
- package/dist/types/src/utils/jws.d.ts +1 -2
- package/dist/types/src/utils/jws.d.ts.map +1 -1
- package/dist/types/src/utils/protocols.d.ts +2 -7
- package/dist/types/src/utils/protocols.d.ts.map +1 -1
- package/dist/types/src/utils/records.d.ts +1 -8
- package/dist/types/src/utils/records.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
- package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -1
- package/dist/types/tests/utils/test-data-generator.d.ts +17 -1
- package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/core/constants.ts +0 -30
- package/src/core/encryption-control.ts +1 -17
- package/src/core/replication-apply.ts +0 -8
- package/src/index.ts +0 -1
- package/src/interfaces/messages-subscribe.ts +1 -2
- package/src/interfaces/records-write.ts +0 -13
- package/src/store/index-level-compound.ts +2 -5
- package/src/store/level-wrapper.ts +6 -2
- package/src/types/protocols-types.ts +2 -1
- package/src/utils/encryption.ts +2 -15
- package/src/utils/hd-key.ts +1 -32
- package/src/utils/jws.ts +1 -2
- package/src/utils/protocols.ts +15 -78
- package/src/utils/records.ts +15 -57
- package/dist/esm/tests/validation/json-schemas/encryption/delivery.spec.js +0 -47
- package/dist/esm/tests/validation/json-schemas/encryption/delivery.spec.js.map +0 -1
- package/dist/esm/tests/validation/json-schemas/encryption/grant-key.spec.js +0 -72
- package/dist/esm/tests/validation/json-schemas/encryption/grant-key.spec.js.map +0 -1
- package/dist/types/tests/validation/json-schemas/encryption/delivery.spec.d.ts +0 -2
- package/dist/types/tests/validation/json-schemas/encryption/delivery.spec.d.ts.map +0 -1
- package/dist/types/tests/validation/json-schemas/encryption/grant-key.spec.d.ts +0 -2
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 () => {
|