@enbox/dwn-sdk-js 0.0.2 → 0.0.3
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/README.md +52 -301
- package/dist/bundles/dwn.js +19 -21
- package/dist/esm/generated/precompiled-validators.js +2764 -1773
- package/dist/esm/generated/precompiled-validators.js.map +1 -1
- package/dist/esm/src/core/dwn-error.js +27 -3
- package/dist/esm/src/core/dwn-error.js.map +1 -1
- package/dist/esm/src/core/message.js.map +1 -1
- package/dist/esm/src/core/messages-grant-authorization.js +17 -6
- package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
- package/dist/esm/src/core/protocol-authorization.js +245 -69
- package/dist/esm/src/core/protocol-authorization.js.map +1 -1
- package/dist/esm/src/core/resumable-task-manager.js +4 -4
- package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
- package/dist/esm/src/dwn.js +10 -8
- package/dist/esm/src/dwn.js.map +1 -1
- package/dist/esm/src/enums/dwn-interface-method.js +4 -2
- package/dist/esm/src/enums/dwn-interface-method.js.map +1 -1
- package/dist/esm/src/event-stream/event-emitter-stream.js.map +1 -0
- package/dist/esm/src/handlers/messages-subscribe.js +1 -1
- package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
- package/dist/esm/src/handlers/messages-sync.js +116 -0
- package/dist/esm/src/handlers/messages-sync.js.map +1 -0
- package/dist/esm/src/handlers/protocols-configure.js +149 -16
- package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
- package/dist/esm/src/handlers/protocols-query.js +2 -2
- package/dist/esm/src/handlers/protocols-query.js.map +1 -1
- package/dist/esm/src/handlers/records-count.js +143 -0
- package/dist/esm/src/handlers/records-count.js.map +1 -0
- package/dist/esm/src/handlers/records-query.js +4 -0
- package/dist/esm/src/handlers/records-query.js.map +1 -1
- package/dist/esm/src/handlers/records-read.js +4 -6
- package/dist/esm/src/handlers/records-read.js.map +1 -1
- package/dist/esm/src/handlers/records-write.js +17 -18
- package/dist/esm/src/handlers/records-write.js.map +1 -1
- package/dist/esm/src/index.js +9 -5
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/interfaces/messages-read.js +2 -7
- package/dist/esm/src/interfaces/messages-read.js.map +1 -1
- package/dist/esm/src/interfaces/messages-subscribe.js +1 -0
- package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
- package/dist/esm/src/interfaces/{messages-query.js → messages-sync.js} +11 -12
- package/dist/esm/src/interfaces/messages-sync.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-configure.js +153 -30
- package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
- package/dist/esm/src/interfaces/protocols-query.js +1 -0
- package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
- package/dist/esm/src/interfaces/records-count.js +91 -0
- package/dist/esm/src/interfaces/records-count.js.map +1 -0
- package/dist/esm/src/interfaces/records-read.js +15 -1
- package/dist/esm/src/interfaces/records-read.js.map +1 -1
- package/dist/esm/src/interfaces/records-write.js +64 -15
- package/dist/esm/src/interfaces/records-write.js.map +1 -1
- package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
- package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -1
- package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
- package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
- package/dist/esm/src/protocols/permission-grant.js +30 -0
- package/dist/esm/src/protocols/permission-grant.js.map +1 -1
- package/dist/esm/src/protocols/permission-request.js +24 -0
- package/dist/esm/src/protocols/permission-request.js.map +1 -1
- package/dist/esm/src/protocols/permissions.js +1 -1
- package/dist/esm/src/protocols/permissions.js.map +1 -1
- package/dist/esm/src/schema-validator.js +0 -1
- package/dist/esm/src/schema-validator.js.map +1 -1
- package/dist/esm/src/smt/smt-store-level.js +125 -0
- package/dist/esm/src/smt/smt-store-level.js.map +1 -0
- package/dist/esm/src/smt/smt-store-memory.js +67 -0
- package/dist/esm/src/smt/smt-store-memory.js.map +1 -0
- package/dist/esm/src/smt/smt-utils.js +146 -0
- package/dist/esm/src/smt/smt-utils.js.map +1 -0
- package/dist/esm/src/smt/sparse-merkle-tree.js +622 -0
- package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -0
- package/dist/esm/src/state-index/state-index-level.js +228 -0
- package/dist/esm/src/state-index/state-index-level.js.map +1 -0
- package/dist/esm/src/store/data-store-level.js +6 -6
- package/dist/esm/src/store/data-store-level.js.map +1 -1
- package/dist/esm/src/store/index-level.js +375 -17
- package/dist/esm/src/store/index-level.js.map +1 -1
- package/dist/esm/src/store/message-store-level.js +56 -0
- package/dist/esm/src/store/message-store-level.js.map +1 -1
- package/dist/esm/src/store/storage-controller.js +19 -16
- package/dist/esm/src/store/storage-controller.js.map +1 -1
- package/dist/esm/src/types/encryption-types.js +2 -0
- package/dist/esm/src/types/encryption-types.js.map +1 -0
- package/dist/esm/src/types/message-types.js.map +1 -1
- package/dist/esm/src/types/protocols-types.js +0 -2
- package/dist/esm/src/types/protocols-types.js.map +1 -1
- package/dist/esm/src/types/records-types.js +2 -0
- package/dist/esm/src/types/records-types.js.map +1 -1
- package/dist/esm/src/types/smt-types.js +5 -0
- package/dist/esm/src/types/smt-types.js.map +1 -0
- package/dist/esm/src/types/state-index.js +2 -0
- package/dist/esm/src/types/state-index.js.map +1 -0
- package/dist/esm/src/utils/cid.js +2 -1
- package/dist/esm/src/utils/cid.js.map +1 -1
- package/dist/esm/src/utils/data-stream.js +84 -29
- package/dist/esm/src/utils/data-stream.js.map +1 -1
- package/dist/esm/src/utils/encryption.js +22 -31
- package/dist/esm/src/utils/encryption.js.map +1 -1
- package/dist/esm/src/utils/hd-key.js +3 -3
- package/dist/esm/src/utils/hd-key.js.map +1 -1
- package/dist/esm/src/utils/jws.js +4 -4
- package/dist/esm/src/utils/jws.js.map +1 -1
- package/dist/esm/src/utils/private-key-signer.js +4 -3
- package/dist/esm/src/utils/private-key-signer.js.map +1 -1
- package/dist/esm/src/utils/protocols.js +82 -9
- package/dist/esm/src/utils/protocols.js.map +1 -1
- package/dist/esm/src/utils/records.js +82 -26
- package/dist/esm/src/utils/records.js.map +1 -1
- package/dist/esm/src/utils/secp256k1.js +4 -3
- package/dist/esm/src/utils/secp256k1.js.map +1 -1
- package/dist/esm/src/utils/secp256r1.js +3 -2
- package/dist/esm/src/utils/secp256r1.js.map +1 -1
- package/dist/esm/src/utils/time.js +1 -1
- package/dist/esm/src/utils/url.js +1 -1
- package/dist/esm/src/utils/url.js.map +1 -1
- package/dist/esm/tests/core/auth.spec.js +2 -2
- package/dist/esm/tests/core/auth.spec.js.map +1 -1
- package/dist/esm/tests/core/message-reply.spec.js +3 -3
- package/dist/esm/tests/core/message-reply.spec.js.map +1 -1
- package/dist/esm/tests/core/message.spec.js +13 -13
- package/dist/esm/tests/core/message.spec.js.map +1 -1
- package/dist/esm/tests/core/protocol-authorization.spec.js +3 -3
- package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
- package/dist/esm/tests/dwn.spec.js +27 -37
- package/dist/esm/tests/dwn.spec.js.map +1 -1
- package/dist/esm/tests/{event-log → event-stream}/event-emitter-stream.spec.js +14 -15
- package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +1 -0
- package/dist/esm/tests/{event-log → event-stream}/event-stream.spec.js +13 -15
- package/dist/esm/tests/event-stream/event-stream.spec.js.map +1 -0
- package/dist/esm/tests/features/author-delegated-grant.spec.js +281 -135
- package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-delegated-grant.spec.js +57 -59
- package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-signature.spec.js +32 -34
- package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
- package/dist/esm/tests/features/permissions.spec.js +73 -95
- package/dist/esm/tests/features/permissions.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-composition.spec.js +1645 -0
- package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -0
- package/dist/esm/tests/features/protocol-create-action.spec.js +25 -27
- package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-delete-action.spec.js +42 -44
- package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-update-action.spec.js +53 -55
- package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
- package/dist/esm/tests/features/records-prune.spec.js +126 -100
- package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
- package/dist/esm/tests/features/records-tags.spec.js +272 -272
- package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
- package/dist/esm/tests/features/resumable-tasks.spec.js +35 -37
- package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-read.spec.js +112 -112
- package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-subscribe.spec.js +78 -76
- package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-sync.spec.js +528 -0
- package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -0
- package/dist/esm/tests/handlers/protocols-configure.spec.js +545 -152
- package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/handlers/protocols-query.spec.js +70 -72
- package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-count.spec.js +313 -0
- package/dist/esm/tests/handlers/records-count.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-delete.spec.js +106 -109
- package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-query.spec.js +863 -463
- package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-read.spec.js +439 -209
- package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-subscribe.spec.js +292 -97
- package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-write.spec.js +481 -483
- package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/messages-get.spec.js +31 -11
- package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js +5 -5
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-configure.spec.js +64 -134
- package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-query.spec.js +4 -6
- package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-delete.spec.js +3 -5
- package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-query.spec.js +9 -11
- package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-read.spec.js +76 -7
- package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-subscribe.spec.js +7 -9
- package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-write.spec.js +244 -48
- package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
- package/dist/esm/tests/jose/jws/general.spec.js +15 -18
- package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permission-grant.spec.js +114 -0
- package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -0
- package/dist/esm/tests/protocols/permission-request.spec.js +43 -7
- package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permissions.spec.js +9 -11
- package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/aggregator.spec.js +90 -92
- package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/deleted-record.spec.js +17 -19
- package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +27 -29
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/nested-roles.spec.js +37 -39
- package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/subscriptions.spec.js +163 -163
- package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
- package/dist/esm/tests/smt/smt-store-level.spec.js +143 -0
- package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -0
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +741 -0
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -0
- package/dist/esm/tests/state-index/state-index-level.spec.js +254 -0
- package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -0
- package/dist/esm/tests/store/blockstore-level.spec.js +136 -0
- package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -0
- package/dist/esm/tests/store/blockstore-mock.spec.js +29 -28
- package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
- package/dist/esm/tests/store/data-store-level.spec.js +23 -25
- package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/index-level.spec.js +544 -194
- package/dist/esm/tests/store/index-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store-level.spec.js +4 -4
- package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store.spec.js +147 -73
- package/dist/esm/tests/store/message-store.spec.js.map +1 -1
- package/dist/esm/tests/store-dependent-tests.spec.js +1 -0
- package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -1
- package/dist/esm/tests/test-stores.js +5 -5
- package/dist/esm/tests/test-stores.js.map +1 -1
- package/dist/esm/tests/test-suite.js +9 -8
- package/dist/esm/tests/test-suite.js.map +1 -1
- package/dist/esm/tests/utils/cid.spec.js +8 -11
- package/dist/esm/tests/utils/cid.spec.js.map +1 -1
- package/dist/esm/tests/utils/data-stream.spec.js +167 -13
- package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
- package/dist/esm/tests/utils/encryption-callbacks.spec.js +233 -0
- package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -0
- package/dist/esm/tests/utils/encryption.spec.js +34 -85
- package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
- package/dist/esm/tests/utils/filters.spec.js +67 -69
- package/dist/esm/tests/utils/filters.spec.js.map +1 -1
- package/dist/esm/tests/utils/hd-key.spec.js +3 -3
- package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
- package/dist/esm/tests/utils/jws.spec.js +54 -3
- package/dist/esm/tests/utils/jws.spec.js.map +1 -1
- package/dist/esm/tests/utils/memory-cache.spec.js +6 -9
- package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
- package/dist/esm/tests/utils/messages.spec.js +63 -29
- package/dist/esm/tests/utils/messages.spec.js.map +1 -1
- package/dist/esm/tests/utils/object.spec.js +3 -3
- package/dist/esm/tests/utils/object.spec.js.map +1 -1
- package/dist/esm/tests/utils/poller.js +1 -1
- package/dist/esm/tests/utils/poller.js.map +1 -1
- package/dist/esm/tests/utils/private-key-signer.spec.js +6 -6
- package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
- package/dist/esm/tests/utils/records.spec.js +37 -5
- package/dist/esm/tests/utils/records.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256k1.spec.js +7 -7
- package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256r1.spec.js +7 -7
- package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
- package/dist/esm/tests/utils/test-data-generator.js +47 -28
- package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
- package/dist/esm/tests/utils/time.spec.js +7 -7
- package/dist/esm/tests/utils/time.spec.js.map +1 -1
- package/dist/esm/tests/utils/url.spec.js +25 -27
- package/dist/esm/tests/utils/url.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js +4 -4
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +15 -3
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +8 -8
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +8 -18
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +3 -3
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +9 -9
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js +106 -0
- package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +18 -18
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
- package/dist/esm/tests/vectors/protocol-definitions/email.json +1 -1
- package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +2 -4
- package/dist/esm/tests/vectors/protocol-definitions/slack.json +2 -6
- package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +2 -6
- package/dist/types/generated/precompiled-validators.d.ts +82 -64
- package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
- package/dist/types/src/core/dwn-error.d.ts +27 -3
- package/dist/types/src/core/dwn-error.d.ts.map +1 -1
- package/dist/types/src/core/message-reply.d.ts +1 -1
- package/dist/types/src/core/message.d.ts +3 -3
- package/dist/types/src/core/message.d.ts.map +1 -1
- package/dist/types/src/core/messages-grant-authorization.d.ts +4 -4
- package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/protocol-authorization.d.ts +43 -2
- package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
- package/dist/types/src/core/records-grant-authorization.d.ts +2 -2
- package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/resumable-task-manager.d.ts +1 -0
- package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -1
- package/dist/types/src/dwn.d.ts +8 -8
- package/dist/types/src/dwn.d.ts.map +1 -1
- package/dist/types/src/enums/dwn-interface-method.d.ts +5 -3
- package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -1
- package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-sync.d.ts +21 -0
- package/dist/types/src/handlers/messages-sync.d.ts.map +1 -0
- package/dist/types/src/handlers/protocols-configure.d.ts +24 -4
- package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
- package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
- package/dist/types/src/handlers/records-count.d.ts +43 -0
- package/dist/types/src/handlers/records-count.d.ts.map +1 -0
- package/dist/types/src/handlers/records-query.d.ts.map +1 -1
- package/dist/types/src/handlers/records-read.d.ts.map +1 -1
- package/dist/types/src/handlers/records-write.d.ts +5 -5
- package/dist/types/src/handlers/records-write.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +72 -37
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-read.d.ts +2 -2
- package/dist/types/src/interfaces/messages-read.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-subscribe.d.ts +2 -2
- package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-sync.d.ts +16 -0
- package/dist/types/src/interfaces/messages-sync.d.ts.map +1 -0
- package/dist/types/src/interfaces/protocols-configure.d.ts +22 -2
- package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
- package/dist/types/src/interfaces/protocols-query.d.ts +2 -2
- package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-count.d.ts +27 -0
- package/dist/types/src/interfaces/records-count.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-delete.d.ts +2 -2
- package/dist/types/src/interfaces/records-delete.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-query.d.ts +2 -2
- package/dist/types/src/interfaces/records-query.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-read.d.ts +4 -2
- package/dist/types/src/interfaces/records-read.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-subscribe.d.ts +2 -2
- package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-write.d.ts +37 -15
- package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
- package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -1
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +5 -1
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -1
- package/dist/types/src/jose/jws/general/builder.d.ts +3 -3
- package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -1
- package/dist/types/src/protocols/permission-grant.d.ts +11 -0
- package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
- package/dist/types/src/protocols/permission-request.d.ts +11 -0
- package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
- package/dist/types/src/protocols/permissions.d.ts +4 -4
- package/dist/types/src/protocols/permissions.d.ts.map +1 -1
- package/dist/types/src/schema-validator.d.ts +1 -1
- package/dist/types/src/schema-validator.d.ts.map +1 -1
- package/dist/types/src/smt/smt-store-level.d.ts +32 -0
- package/dist/types/src/smt/smt-store-level.d.ts.map +1 -0
- package/dist/types/src/smt/smt-store-memory.d.ts +22 -0
- package/dist/types/src/smt/smt-store-memory.d.ts.map +1 -0
- package/dist/types/src/smt/smt-utils.d.ts +58 -0
- package/dist/types/src/smt/smt-utils.d.ts.map +1 -0
- package/dist/types/src/smt/sparse-merkle-tree.d.ts +124 -0
- package/dist/types/src/smt/sparse-merkle-tree.d.ts.map +1 -0
- package/dist/types/src/state-index/state-index-level.d.ts +83 -0
- package/dist/types/src/state-index/state-index-level.d.ts.map +1 -0
- package/dist/types/src/store/data-store-level.d.ts +1 -2
- package/dist/types/src/store/data-store-level.d.ts.map +1 -1
- package/dist/types/src/store/index-level.d.ts +98 -2
- package/dist/types/src/store/index-level.d.ts.map +1 -1
- package/dist/types/src/store/level-wrapper.d.ts.map +1 -1
- package/dist/types/src/store/message-store-level.d.ts +5 -0
- package/dist/types/src/store/message-store-level.d.ts.map +1 -1
- package/dist/types/src/store/storage-controller.d.ts +7 -7
- package/dist/types/src/store/storage-controller.d.ts.map +1 -1
- package/dist/types/src/types/data-store.d.ts +2 -3
- package/dist/types/src/types/data-store.d.ts.map +1 -1
- package/dist/types/src/types/encryption-types.d.ts +48 -0
- package/dist/types/src/types/encryption-types.d.ts.map +1 -0
- package/dist/types/src/types/jose-types.d.ts +9 -40
- package/dist/types/src/types/jose-types.d.ts.map +1 -1
- package/dist/types/src/types/message-store.d.ts +5 -0
- package/dist/types/src/types/message-store.d.ts.map +1 -1
- package/dist/types/src/types/message-types.d.ts +19 -0
- package/dist/types/src/types/message-types.d.ts.map +1 -1
- package/dist/types/src/types/messages-types.d.ts +16 -11
- package/dist/types/src/types/messages-types.d.ts.map +1 -1
- package/dist/types/src/types/method-handler.d.ts +1 -2
- package/dist/types/src/types/method-handler.d.ts.map +1 -1
- package/dist/types/src/types/permission-types.d.ts +2 -2
- package/dist/types/src/types/permission-types.d.ts.map +1 -1
- package/dist/types/src/types/protocols-types.d.ts +49 -5
- package/dist/types/src/types/protocols-types.d.ts.map +1 -1
- package/dist/types/src/types/records-types.d.ts +23 -7
- package/dist/types/src/types/records-types.d.ts.map +1 -1
- package/dist/types/src/types/signer.d.ts +1 -1
- package/dist/types/src/types/signer.d.ts.map +1 -1
- package/dist/types/src/types/smt-types.d.ts +81 -0
- package/dist/types/src/types/smt-types.d.ts.map +1 -0
- package/dist/types/src/types/state-index.d.ts +90 -0
- package/dist/types/src/types/state-index.d.ts.map +1 -0
- package/dist/types/src/utils/cid.d.ts +1 -2
- package/dist/types/src/utils/cid.d.ts.map +1 -1
- package/dist/types/src/utils/data-stream.d.ts +14 -7
- package/dist/types/src/utils/data-stream.d.ts.map +1 -1
- package/dist/types/src/utils/encryption.d.ts +2 -3
- package/dist/types/src/utils/encryption.d.ts.map +1 -1
- package/dist/types/src/utils/hd-key.d.ts +4 -4
- package/dist/types/src/utils/hd-key.d.ts.map +1 -1
- package/dist/types/src/utils/jws.d.ts +7 -7
- package/dist/types/src/utils/jws.d.ts.map +1 -1
- package/dist/types/src/utils/private-key-signer.d.ts +4 -4
- package/dist/types/src/utils/private-key-signer.d.ts.map +1 -1
- package/dist/types/src/utils/protocols.d.ts +46 -3
- package/dist/types/src/utils/protocols.d.ts.map +1 -1
- package/dist/types/src/utils/records.d.ts +33 -6
- package/dist/types/src/utils/records.d.ts.map +1 -1
- package/dist/types/src/utils/secp256k1.d.ts +11 -11
- package/dist/types/src/utils/secp256k1.d.ts.map +1 -1
- package/dist/types/src/utils/secp256r1.d.ts +8 -8
- package/dist/types/src/utils/secp256r1.d.ts.map +1 -1
- package/dist/types/src/utils/time.d.ts +1 -1
- package/dist/types/tests/dwn.spec.d.ts.map +1 -1
- package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
- package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
- package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
- package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-composition.spec.d.ts +5 -0
- package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -0
- package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
- package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-sync.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-count.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
- package/dist/types/tests/protocols/permission-grant.spec.d.ts +2 -0
- package/dist/types/tests/protocols/permission-grant.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/deleted-record.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/scenarios/nested-roles.spec.d.ts.map +1 -1
- package/dist/types/tests/smt/smt-store-level.spec.d.ts +2 -0
- package/dist/types/tests/smt/smt-store-level.spec.d.ts.map +1 -0
- package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts +2 -0
- package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts.map +1 -0
- package/dist/types/tests/state-index/state-index-level.spec.d.ts +2 -0
- package/dist/types/tests/state-index/state-index-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/blockstore-level.spec.d.ts +2 -0
- package/dist/types/tests/store/blockstore-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
- package/dist/types/tests/test-stores.d.ts +4 -4
- package/dist/types/tests/test-stores.d.ts.map +1 -1
- package/dist/types/tests/test-suite.d.ts +2 -2
- package/dist/types/tests/test-suite.d.ts.map +1 -1
- package/dist/types/tests/utils/encryption-callbacks.spec.d.ts +2 -0
- package/dist/types/tests/utils/encryption-callbacks.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/test-data-generator.d.ts +31 -28
- package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
- package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts.map +1 -0
- package/package.json +27 -46
- package/src/core/dwn-error.ts +27 -3
- package/src/core/message-reply.ts +1 -1
- package/src/core/message.ts +5 -5
- package/src/core/messages-grant-authorization.ts +22 -8
- package/src/core/protocol-authorization.ts +345 -68
- package/src/core/records-grant-authorization.ts +2 -2
- package/src/core/resumable-task-manager.ts +4 -5
- package/src/dwn.ts +25 -20
- package/src/enums/dwn-interface-method.ts +5 -3
- package/src/handlers/messages-subscribe.ts +1 -1
- package/src/handlers/messages-sync.ts +129 -0
- package/src/handlers/protocols-configure.ts +195 -17
- package/src/handlers/protocols-query.ts +7 -5
- package/src/handlers/records-count.ts +184 -0
- package/src/handlers/records-query.ts +4 -0
- package/src/handlers/records-read.ts +4 -8
- package/src/handlers/records-write.ts +20 -21
- package/src/index.ts +74 -37
- package/src/interfaces/messages-read.ts +6 -5
- package/src/interfaces/messages-subscribe.ts +7 -6
- package/src/interfaces/messages-sync.ts +59 -0
- package/src/interfaces/protocols-configure.ts +211 -33
- package/src/interfaces/protocols-query.ts +7 -6
- package/src/interfaces/records-count.ts +106 -0
- package/src/interfaces/records-delete.ts +2 -2
- package/src/interfaces/records-query.ts +2 -2
- package/src/interfaces/records-read.ts +26 -3
- package/src/interfaces/records-subscribe.ts +2 -2
- package/src/interfaces/records-write.ts +115 -46
- package/src/jose/algorithms/signing/ed25519.ts +13 -12
- package/src/jose/algorithms/signing/signature-algorithms.ts +6 -1
- package/src/jose/jws/general/builder.ts +3 -3
- package/src/jose/jws/general/verifier.ts +3 -3
- package/src/protocols/permission-grant.ts +51 -0
- package/src/protocols/permission-request.ts +37 -0
- package/src/protocols/permissions.ts +5 -5
- package/src/schema-validator.ts +11 -3
- package/src/smt/smt-store-level.ts +143 -0
- package/src/smt/smt-store-memory.ts +53 -0
- package/src/smt/smt-utils.ts +149 -0
- package/src/smt/sparse-merkle-tree.ts +698 -0
- package/src/state-index/state-index-level.ts +241 -0
- package/src/store/data-store-level.ts +8 -7
- package/src/store/index-level.ts +415 -19
- package/src/store/level-wrapper.ts +1 -1
- package/src/store/message-store-level.ts +62 -0
- package/src/store/storage-controller.ts +21 -19
- package/src/types/data-store.ts +2 -4
- package/src/types/encryption-types.ts +52 -0
- package/src/types/jose-types.ts +10 -42
- package/src/types/message-store.ts +11 -0
- package/src/types/message-types.ts +21 -0
- package/src/types/messages-types.ts +21 -15
- package/src/types/method-handler.ts +1 -2
- package/src/types/permission-types.ts +2 -2
- package/src/types/protocols-types.ts +55 -6
- package/src/types/records-types.ts +26 -7
- package/src/types/signer.ts +1 -1
- package/src/types/smt-types.ts +95 -0
- package/src/types/state-index.ts +100 -0
- package/src/utils/cid.ts +3 -4
- package/src/utils/data-stream.ts +75 -38
- package/src/utils/encryption.ts +24 -39
- package/src/utils/hd-key.ts +6 -6
- package/src/utils/jws.ts +9 -9
- package/src/utils/private-key-signer.ts +9 -8
- package/src/utils/protocols.ts +132 -6
- package/src/utils/records.ts +118 -29
- package/src/utils/secp256k1.ts +23 -21
- package/src/utils/secp256r1.ts +17 -15
- package/src/utils/time.ts +1 -1
- package/src/utils/url.ts +1 -1
- package/dist/cjs/index.js +0 -36749
- package/dist/cjs/package.json +0 -1
- package/dist/esm/src/event-log/event-emitter-stream.js.map +0 -1
- package/dist/esm/src/event-log/event-log-level.js +0 -63
- package/dist/esm/src/event-log/event-log-level.js.map +0 -1
- package/dist/esm/src/handlers/messages-query.js +0 -71
- package/dist/esm/src/handlers/messages-query.js.map +0 -1
- package/dist/esm/src/interfaces/messages-query.js.map +0 -1
- package/dist/esm/src/types/event-log.js +0 -2
- package/dist/esm/src/types/event-log.js.map +0 -1
- package/dist/esm/tests/event-log/event-emitter-stream.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-log-level.spec.js +0 -44
- package/dist/esm/tests/event-log/event-log-level.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-log.spec.js +0 -236
- package/dist/esm/tests/event-log/event-log.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-stream.spec.js.map +0 -1
- package/dist/esm/tests/handlers/messages-query.spec.js +0 -349
- package/dist/esm/tests/handlers/messages-query.spec.js.map +0 -1
- package/dist/esm/tests/interfaces/messagess-query.spec.js +0 -127
- package/dist/esm/tests/interfaces/messagess-query.spec.js.map +0 -1
- package/dist/esm/tests/scenarios/messages-query.spec.js +0 -395
- package/dist/esm/tests/scenarios/messages-query.spec.js.map +0 -1
- package/dist/types/src/event-log/event-emitter-stream.d.ts.map +0 -1
- package/dist/types/src/event-log/event-log-level.d.ts +0 -35
- package/dist/types/src/event-log/event-log-level.d.ts.map +0 -1
- package/dist/types/src/handlers/messages-query.d.ts +0 -17
- package/dist/types/src/handlers/messages-query.d.ts.map +0 -1
- package/dist/types/src/interfaces/messages-query.d.ts +0 -16
- package/dist/types/src/interfaces/messages-query.d.ts.map +0 -1
- package/dist/types/src/types/event-log.d.ts +0 -52
- package/dist/types/src/types/event-log.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-log-level.spec.d.ts +0 -2
- package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-log.spec.d.ts +0 -2
- package/dist/types/tests/event-log/event-log.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-stream.spec.d.ts.map +0 -1
- package/dist/types/tests/handlers/messages-query.spec.d.ts +0 -2
- package/dist/types/tests/handlers/messages-query.spec.d.ts.map +0 -1
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts +0 -2
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts.map +0 -1
- package/dist/types/tests/scenarios/messages-query.spec.d.ts +0 -2
- package/dist/types/tests/scenarios/messages-query.spec.d.ts.map +0 -1
- package/src/event-log/event-log-level.ts +0 -72
- package/src/handlers/messages-query.ts +0 -67
- package/src/interfaces/messages-query.ts +0 -60
- package/src/types/event-log.ts +0 -52
- /package/dist/esm/src/{event-log → event-stream}/event-emitter-stream.js +0 -0
- /package/dist/types/src/{event-log → event-stream}/event-emitter-stream.d.ts +0 -0
- /package/dist/types/tests/{event-log → event-stream}/event-emitter-stream.spec.d.ts +0 -0
- /package/dist/types/tests/{event-log → event-stream}/event-stream.spec.d.ts +0 -0
- /package/src/{event-log → event-stream}/event-emitter-stream.ts +0 -0
|
@@ -7,39 +7,37 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import
|
|
10
|
+
import messageProtocolDefinition from '../vectors/protocol-definitions/message.json' with { type: 'json' };
|
|
11
|
+
import nestedProtocolDefinition from '../vectors/protocol-definitions/nested.json' with { type: 'json' };
|
|
11
12
|
import sinon from 'sinon';
|
|
12
|
-
import chai, { expect } from 'chai';
|
|
13
|
-
import messageProtocolDefinition from '../vectors/protocol-definitions/message.json' assert { type: 'json' };
|
|
14
|
-
import nestedProtocolDefinition from '../vectors/protocol-definitions/nested.json' assert { type: 'json' };
|
|
15
13
|
import { DwnInterfaceName } from '../../src/enums/dwn-interface-method.js';
|
|
16
14
|
import { Message } from '../../src/core/message.js';
|
|
17
15
|
import { TestDataGenerator } from '../utils/test-data-generator.js';
|
|
18
16
|
import { TestEventStream } from '../test-event-stream.js';
|
|
19
17
|
import { TestStores } from '../test-stores.js';
|
|
18
|
+
import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'bun:test';
|
|
20
19
|
import { DataStream, Dwn, DwnConstant, DwnErrorCode, Jws, ProtocolsConfigure, RecordsDelete, RecordsQuery, RecordsWrite, SortDirection } from '../../src/index.js';
|
|
21
20
|
import { DidKey, UniversalResolver } from '@enbox/dids';
|
|
22
|
-
chai.use(chaiAsPromised);
|
|
23
21
|
export function testRecordsPrune() {
|
|
24
22
|
describe('records pruning', () => {
|
|
25
23
|
let didResolver;
|
|
26
24
|
let messageStore;
|
|
27
25
|
let dataStore;
|
|
28
26
|
let resumableTaskStore;
|
|
29
|
-
let
|
|
27
|
+
let stateIndex;
|
|
30
28
|
let eventStream;
|
|
31
29
|
let dwn;
|
|
32
30
|
// important to follow the `before` and `after` pattern to initialize and clean the stores in tests
|
|
33
31
|
// so that different test suites can reuse the same backend store for testing
|
|
34
|
-
|
|
32
|
+
beforeAll(() => __awaiter(this, void 0, void 0, function* () {
|
|
35
33
|
didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
36
34
|
const stores = TestStores.get();
|
|
37
35
|
messageStore = stores.messageStore;
|
|
38
36
|
dataStore = stores.dataStore;
|
|
39
37
|
resumableTaskStore = stores.resumableTaskStore;
|
|
40
|
-
|
|
38
|
+
stateIndex = stores.stateIndex;
|
|
41
39
|
eventStream = TestEventStream.get();
|
|
42
|
-
dwn = yield Dwn.create({ didResolver, messageStore, dataStore,
|
|
40
|
+
dwn = yield Dwn.create({ didResolver, messageStore, dataStore, stateIndex, eventStream, resumableTaskStore });
|
|
43
41
|
}));
|
|
44
42
|
beforeEach(() => __awaiter(this, void 0, void 0, function* () {
|
|
45
43
|
sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
|
|
@@ -47,9 +45,9 @@ export function testRecordsPrune() {
|
|
|
47
45
|
yield messageStore.clear();
|
|
48
46
|
yield dataStore.clear();
|
|
49
47
|
yield resumableTaskStore.clear();
|
|
50
|
-
yield
|
|
48
|
+
yield stateIndex.clear();
|
|
51
49
|
}));
|
|
52
|
-
|
|
50
|
+
afterAll(() => __awaiter(this, void 0, void 0, function* () {
|
|
53
51
|
yield dwn.close();
|
|
54
52
|
}));
|
|
55
53
|
it('should prune all descendants when given RecordsDelete with `prune` set to `true`', () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -62,7 +60,7 @@ export function testRecordsPrune() {
|
|
|
62
60
|
signer: Jws.createSigner(alice)
|
|
63
61
|
});
|
|
64
62
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
65
|
-
expect(protocolsConfigureReply.status.code).
|
|
63
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
66
64
|
// writes 2 foos, 2 bars under foo1, and 2 bazes under bar1
|
|
67
65
|
// write 2 foos
|
|
68
66
|
const fooData = TestDataGenerator.randomBytes(100);
|
|
@@ -76,10 +74,10 @@ export function testRecordsPrune() {
|
|
|
76
74
|
};
|
|
77
75
|
const foo1 = yield RecordsWrite.create(fooOptions);
|
|
78
76
|
const foo1WriteResponse = yield dwn.processMessage(alice.did, foo1.message, { dataStream: DataStream.fromBytes(fooData) });
|
|
79
|
-
expect(foo1WriteResponse.status.code).
|
|
77
|
+
expect(foo1WriteResponse.status.code).toBe(202);
|
|
80
78
|
const foo2 = yield RecordsWrite.create(fooOptions);
|
|
81
79
|
const foo2WriteResponse = yield dwn.processMessage(alice.did, foo2.message, { dataStream: DataStream.fromBytes(fooData) });
|
|
82
|
-
expect(foo2WriteResponse.status.code).
|
|
80
|
+
expect(foo2WriteResponse.status.code).toBe(202);
|
|
83
81
|
// write 2 bars under foo1 with data large enough to be required to be stored in the data store so we can test purge in data store
|
|
84
82
|
const barData = TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded + 1);
|
|
85
83
|
const barOptions = {
|
|
@@ -93,10 +91,10 @@ export function testRecordsPrune() {
|
|
|
93
91
|
};
|
|
94
92
|
const bar1 = yield RecordsWrite.create(Object.assign({}, barOptions));
|
|
95
93
|
const bar1WriteResponse = yield dwn.processMessage(alice.did, bar1.message, { dataStream: DataStream.fromBytes(barData) });
|
|
96
|
-
expect(bar1WriteResponse.status.code).
|
|
94
|
+
expect(bar1WriteResponse.status.code).toBe(202);
|
|
97
95
|
const bar2 = yield RecordsWrite.create(Object.assign({}, barOptions));
|
|
98
96
|
const bar2WriteResponse = yield dwn.processMessage(alice.did, bar2.message, { dataStream: DataStream.fromBytes(barData) });
|
|
99
|
-
expect(bar2WriteResponse.status.code).
|
|
97
|
+
expect(bar2WriteResponse.status.code).toBe(202);
|
|
100
98
|
// write 2 bazes under bar1, each has more than 1 message associated with the record so we can test multi-message purge
|
|
101
99
|
const bazData = TestDataGenerator.randomBytes(100);
|
|
102
100
|
const bazOptions = {
|
|
@@ -110,10 +108,10 @@ export function testRecordsPrune() {
|
|
|
110
108
|
};
|
|
111
109
|
const baz1 = yield RecordsWrite.create(Object.assign({}, bazOptions));
|
|
112
110
|
const baz1WriteResponse = yield dwn.processMessage(alice.did, baz1.message, { dataStream: DataStream.fromBytes(bazData) });
|
|
113
|
-
expect(baz1WriteResponse.status.code).
|
|
111
|
+
expect(baz1WriteResponse.status.code).toBe(202);
|
|
114
112
|
const baz2 = yield RecordsWrite.create(Object.assign({}, bazOptions));
|
|
115
113
|
const baz2WriteResponse = yield dwn.processMessage(alice.did, baz2.message, { dataStream: DataStream.fromBytes(bazData) });
|
|
116
|
-
expect(baz2WriteResponse.status.code).
|
|
114
|
+
expect(baz2WriteResponse.status.code).toBe(202);
|
|
117
115
|
// make latest state of baz1 a `RecordsWrite`
|
|
118
116
|
const newBaz1Data = TestDataGenerator.randomBytes(100);
|
|
119
117
|
const baz1Update = yield RecordsWrite.createFrom({
|
|
@@ -122,29 +120,30 @@ export function testRecordsPrune() {
|
|
|
122
120
|
data: newBaz1Data
|
|
123
121
|
});
|
|
124
122
|
const baz1UpdateResponse = yield dwn.processMessage(alice.did, baz1Update.message, { dataStream: DataStream.fromBytes(newBaz1Data) });
|
|
125
|
-
expect(baz1UpdateResponse.status.code).
|
|
123
|
+
expect(baz1UpdateResponse.status.code).toBe(202);
|
|
126
124
|
// make latest state of baz2 a `RecordsDelete`
|
|
127
125
|
const baz2Delete = yield RecordsDelete.create({
|
|
128
126
|
signer: Jws.createSigner(alice),
|
|
129
127
|
recordId: baz2.message.recordId
|
|
130
128
|
});
|
|
131
129
|
const baz2DeleteResponse = yield dwn.processMessage(alice.did, baz2Delete.message);
|
|
132
|
-
expect(baz2DeleteResponse.status.code).
|
|
130
|
+
expect(baz2DeleteResponse.status.code).toBe(202);
|
|
133
131
|
// sanity test messages are inserted in message store
|
|
134
132
|
const queryFilter = [{
|
|
135
133
|
interface: DwnInterfaceName.Records,
|
|
136
134
|
protocol: nestedProtocol.protocol
|
|
137
135
|
}];
|
|
138
136
|
const queryResult = yield messageStore.query(alice.did, queryFilter);
|
|
139
|
-
expect(queryResult.messages.length).
|
|
140
|
-
// sanity test events are inserted in
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
expect(queryResult.messages.length).toBe(8); // 2 foos, 2 bars, 2 bazes x 2 messages each
|
|
138
|
+
// sanity test events are inserted in state index
|
|
139
|
+
// NOTE: getLeaves returns ALL messageCids (including ProtocolsConfigure), so count is 9 not 8
|
|
140
|
+
const events = yield stateIndex.getLeaves(alice.did, []);
|
|
141
|
+
expect(events.length).toBe(9);
|
|
143
142
|
// sanity test data is inserted in data store
|
|
144
143
|
const bar1DataGetResult = yield dataStore.get(alice.did, bar1.message.recordId, bar1.message.descriptor.dataCid);
|
|
145
144
|
const bar2DataGetResult = yield dataStore.get(alice.did, bar2.message.recordId, bar2.message.descriptor.dataCid);
|
|
146
|
-
expect(bar1DataGetResult).
|
|
147
|
-
expect(bar2DataGetResult).
|
|
145
|
+
expect(bar1DataGetResult).toBeDefined();
|
|
146
|
+
expect(bar2DataGetResult).toBeDefined();
|
|
148
147
|
// Delete foo1 with prune enabled
|
|
149
148
|
const foo1Delete = yield RecordsDelete.create({
|
|
150
149
|
recordId: foo1.message.recordId,
|
|
@@ -152,34 +151,35 @@ export function testRecordsPrune() {
|
|
|
152
151
|
signer: Jws.createSigner(alice)
|
|
153
152
|
});
|
|
154
153
|
const deleteReply = yield dwn.processMessage(alice.did, foo1Delete.message);
|
|
155
|
-
expect(deleteReply.status.code).
|
|
154
|
+
expect(deleteReply.status.code).toBe(202);
|
|
156
155
|
// verify all bar and baz message are permanently deleted
|
|
157
156
|
const queryResult2 = yield messageStore.query(alice.did, queryFilter, { messageTimestamp: SortDirection.Ascending });
|
|
158
|
-
expect(queryResult2.messages.length).
|
|
159
|
-
expect(queryResult2.messages[0]).
|
|
160
|
-
expect(queryResult2.messages[1]).
|
|
161
|
-
expect(queryResult2.messages[2]).
|
|
157
|
+
expect(queryResult2.messages.length).toBe(3); // foo2 RecordsWrite, foo1 RecordsWrite and RecordsDelete
|
|
158
|
+
expect(queryResult2.messages[0]).toEqual(expect.objectContaining(foo1.message));
|
|
159
|
+
expect(queryResult2.messages[1]).toEqual(expect.objectContaining(foo2.message));
|
|
160
|
+
expect(queryResult2.messages[2]).toEqual(expect.objectContaining(foo1Delete.message));
|
|
162
161
|
// verify all bar and baz events are permanently deleted
|
|
163
|
-
|
|
164
|
-
|
|
162
|
+
// NOTE: getLeaves returns ALL messageCids (including ProtocolsConfigure), so count is 4 not 3
|
|
163
|
+
const events2 = yield stateIndex.getLeaves(alice.did, []);
|
|
164
|
+
expect(events2.length).toBe(4);
|
|
165
165
|
const foo1RecordsWriteCid = yield Message.getCid(foo1.message);
|
|
166
166
|
const foo2RecordsWriteCid = yield Message.getCid(foo2.message);
|
|
167
167
|
const foo2RecordsDeleteCid = yield Message.getCid(foo1Delete.message);
|
|
168
|
-
expect(events2).
|
|
168
|
+
expect(events2).toEqual(expect.arrayContaining([foo1RecordsWriteCid, foo2RecordsWriteCid, foo2RecordsDeleteCid]));
|
|
169
169
|
// verify all bar data are permanently deleted
|
|
170
170
|
const bar1DataGetResult2 = yield dataStore.get(alice.did, bar1.message.recordId, bar1.message.descriptor.dataCid);
|
|
171
171
|
const bar2DataGetResult2 = yield dataStore.get(alice.did, bar2.message.recordId, bar2.message.descriptor.dataCid);
|
|
172
|
-
expect(bar1DataGetResult2).
|
|
173
|
-
expect(bar2DataGetResult2).
|
|
172
|
+
expect(bar1DataGetResult2).toBeUndefined();
|
|
173
|
+
expect(bar2DataGetResult2).toBeUndefined();
|
|
174
174
|
// sanity test an external query will no longer return the deleted records
|
|
175
175
|
const queryData = yield RecordsQuery.create({
|
|
176
176
|
signer: Jws.createSigner(alice),
|
|
177
177
|
filter: { protocol: nestedProtocol.protocol }
|
|
178
178
|
});
|
|
179
179
|
const reply2 = yield dwn.processMessage(alice.did, queryData.message);
|
|
180
|
-
expect(reply2.status.code).
|
|
181
|
-
expect((_a = reply2.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
182
|
-
expect(reply2.entries[0]).
|
|
180
|
+
expect(reply2.status.code).toBe(200);
|
|
181
|
+
expect((_a = reply2.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1); // only foo2 is left
|
|
182
|
+
expect(reply2.entries[0]).toEqual(expect.objectContaining(foo2.message));
|
|
183
183
|
}));
|
|
184
184
|
it('should allow pruning against a deleted record that is not already pruned', () => __awaiter(this, void 0, void 0, function* () {
|
|
185
185
|
// Scenario:
|
|
@@ -195,7 +195,7 @@ export function testRecordsPrune() {
|
|
|
195
195
|
signer: Jws.createSigner(alice)
|
|
196
196
|
});
|
|
197
197
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
198
|
-
expect(protocolsConfigureReply.status.code).
|
|
198
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
199
199
|
// 1. Alice has a record `foo` with a descendent chain
|
|
200
200
|
// write foo <- bar <- baz records
|
|
201
201
|
const fooData = TestDataGenerator.randomBytes(100);
|
|
@@ -209,7 +209,7 @@ export function testRecordsPrune() {
|
|
|
209
209
|
};
|
|
210
210
|
const foo = yield RecordsWrite.create(fooOptions);
|
|
211
211
|
const fooWriteResponse = yield dwn.processMessage(alice.did, foo.message, { dataStream: DataStream.fromBytes(fooData) });
|
|
212
|
-
expect(fooWriteResponse.status.code).
|
|
212
|
+
expect(fooWriteResponse.status.code).toBe(202);
|
|
213
213
|
const barData = TestDataGenerator.randomBytes(100);
|
|
214
214
|
const barOptions = {
|
|
215
215
|
signer: Jws.createSigner(alice),
|
|
@@ -222,7 +222,7 @@ export function testRecordsPrune() {
|
|
|
222
222
|
};
|
|
223
223
|
const bar = yield RecordsWrite.create(Object.assign({}, barOptions));
|
|
224
224
|
const barWriteResponse = yield dwn.processMessage(alice.did, bar.message, { dataStream: DataStream.fromBytes(barData) });
|
|
225
|
-
expect(barWriteResponse.status.code).
|
|
225
|
+
expect(barWriteResponse.status.code).toBe(202);
|
|
226
226
|
const bazData = TestDataGenerator.randomBytes(100);
|
|
227
227
|
const bazOptions = {
|
|
228
228
|
signer: Jws.createSigner(alice),
|
|
@@ -235,22 +235,22 @@ export function testRecordsPrune() {
|
|
|
235
235
|
};
|
|
236
236
|
const baz = yield RecordsWrite.create(Object.assign({}, bazOptions));
|
|
237
237
|
const bazWriteResponse = yield dwn.processMessage(alice.did, baz.message, { dataStream: DataStream.fromBytes(bazData) });
|
|
238
|
-
expect(bazWriteResponse.status.code).
|
|
238
|
+
expect(bazWriteResponse.status.code).toBe(202);
|
|
239
239
|
// sanity records are inserted in message store
|
|
240
240
|
const queryFilter = [{
|
|
241
241
|
interface: DwnInterfaceName.Records,
|
|
242
242
|
protocol: nestedProtocol.protocol
|
|
243
243
|
}];
|
|
244
244
|
const messagesBeforeDelete = yield messageStore.query(alice.did, queryFilter);
|
|
245
|
-
expect(messagesBeforeDelete.messages.length).
|
|
245
|
+
expect(messagesBeforeDelete.messages.length).toBe(3);
|
|
246
246
|
// sanity verify RecordsQuery returns no records
|
|
247
247
|
const recordsQuery = yield RecordsQuery.create({
|
|
248
248
|
signer: Jws.createSigner(alice),
|
|
249
249
|
filter: { protocol: nestedProtocol.protocol }
|
|
250
250
|
});
|
|
251
251
|
const recordsQueryBeforeDeleteReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
252
|
-
expect(recordsQueryBeforeDeleteReply.status.code).
|
|
253
|
-
expect((_a = recordsQueryBeforeDeleteReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
252
|
+
expect(recordsQueryBeforeDeleteReply.status.code).toBe(200);
|
|
253
|
+
expect((_a = recordsQueryBeforeDeleteReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(3);
|
|
254
254
|
// 2. Alice deletes the record `foo` WITHOUT prune, leaving the descendants intact
|
|
255
255
|
const fooDelete = yield RecordsDelete.create({
|
|
256
256
|
recordId: foo.message.recordId,
|
|
@@ -258,14 +258,14 @@ export function testRecordsPrune() {
|
|
|
258
258
|
signer: Jws.createSigner(alice)
|
|
259
259
|
});
|
|
260
260
|
const deleteReply = yield dwn.processMessage(alice.did, fooDelete.message);
|
|
261
|
-
expect(deleteReply.status.code).
|
|
261
|
+
expect(deleteReply.status.code).toBe(202);
|
|
262
262
|
// verify bar and baz messages still exists
|
|
263
263
|
const messagesAfterDelete = yield messageStore.query(alice.did, queryFilter, { messageTimestamp: SortDirection.Ascending });
|
|
264
|
-
expect(messagesAfterDelete.messages.length).
|
|
264
|
+
expect(messagesAfterDelete.messages.length).toBe(4); // RecordsWrite for foo, bar, baz, and RecordsDelete for foo
|
|
265
265
|
// sanity verify RecordsQuery returns the descendants
|
|
266
266
|
const recordsQueryAfterDeleteReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
267
|
-
expect(recordsQueryAfterDeleteReply.status.code).
|
|
268
|
-
expect((_b = recordsQueryAfterDeleteReply.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
267
|
+
expect(recordsQueryAfterDeleteReply.status.code).toBe(200);
|
|
268
|
+
expect((_b = recordsQueryAfterDeleteReply.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(2);
|
|
269
269
|
// 3. Verify that Alice is able to perform a prune on `foo` to delete all its descendants
|
|
270
270
|
const fooPrune = yield RecordsDelete.create({
|
|
271
271
|
recordId: foo.message.recordId,
|
|
@@ -273,16 +273,16 @@ export function testRecordsPrune() {
|
|
|
273
273
|
signer: Jws.createSigner(alice)
|
|
274
274
|
});
|
|
275
275
|
const pruneReply = yield dwn.processMessage(alice.did, fooPrune.message);
|
|
276
|
-
expect(pruneReply.status.code).
|
|
276
|
+
expect(pruneReply.status.code).toBe(202);
|
|
277
277
|
// verify bar and baz messages are permanently deleted
|
|
278
278
|
const messagesAfterPrune = yield messageStore.query(alice.did, queryFilter, { messageTimestamp: SortDirection.Ascending });
|
|
279
|
-
expect(messagesAfterPrune.messages.length).
|
|
280
|
-
expect(messagesAfterPrune.messages[0]).
|
|
281
|
-
expect(messagesAfterPrune.messages[1]).
|
|
279
|
+
expect(messagesAfterPrune.messages.length).toBe(2); // just RecordsWrite and RecordsDelete for foo
|
|
280
|
+
expect(messagesAfterPrune.messages[0]).toEqual(expect.objectContaining(foo.message));
|
|
281
|
+
expect(messagesAfterPrune.messages[1]).toEqual(expect.objectContaining(fooPrune.message));
|
|
282
282
|
// sanity verify RecordsQuery returns no records
|
|
283
283
|
const recordsQueryAfterPruneReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
284
|
-
expect(recordsQueryAfterPruneReply.status.code).
|
|
285
|
-
expect((_c = recordsQueryAfterPruneReply.entries) === null || _c === void 0 ? void 0 : _c.length).
|
|
284
|
+
expect(recordsQueryAfterPruneReply.status.code).toBe(200);
|
|
285
|
+
expect((_c = recordsQueryAfterPruneReply.entries) === null || _c === void 0 ? void 0 : _c.length).toBe(0);
|
|
286
286
|
}));
|
|
287
287
|
it('should return 404 when attempting to prune against a record that is already pruned', () => __awaiter(this, void 0, void 0, function* () {
|
|
288
288
|
// Scenario:
|
|
@@ -298,7 +298,7 @@ export function testRecordsPrune() {
|
|
|
298
298
|
signer: Jws.createSigner(alice)
|
|
299
299
|
});
|
|
300
300
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
301
|
-
expect(protocolsConfigureReply.status.code).
|
|
301
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
302
302
|
// 1. Alice has a record `foo` with a descendent chain
|
|
303
303
|
// write foo <- bar <- baz records
|
|
304
304
|
const fooData = TestDataGenerator.randomBytes(100);
|
|
@@ -312,7 +312,7 @@ export function testRecordsPrune() {
|
|
|
312
312
|
};
|
|
313
313
|
const foo = yield RecordsWrite.create(fooOptions);
|
|
314
314
|
const fooWriteResponse = yield dwn.processMessage(alice.did, foo.message, { dataStream: DataStream.fromBytes(fooData) });
|
|
315
|
-
expect(fooWriteResponse.status.code).
|
|
315
|
+
expect(fooWriteResponse.status.code).toBe(202);
|
|
316
316
|
const barData = TestDataGenerator.randomBytes(100);
|
|
317
317
|
const barOptions = {
|
|
318
318
|
signer: Jws.createSigner(alice),
|
|
@@ -325,7 +325,7 @@ export function testRecordsPrune() {
|
|
|
325
325
|
};
|
|
326
326
|
const bar = yield RecordsWrite.create(Object.assign({}, barOptions));
|
|
327
327
|
const barWriteResponse = yield dwn.processMessage(alice.did, bar.message, { dataStream: DataStream.fromBytes(barData) });
|
|
328
|
-
expect(barWriteResponse.status.code).
|
|
328
|
+
expect(barWriteResponse.status.code).toBe(202);
|
|
329
329
|
const bazData = TestDataGenerator.randomBytes(100);
|
|
330
330
|
const bazOptions = {
|
|
331
331
|
signer: Jws.createSigner(alice),
|
|
@@ -338,22 +338,22 @@ export function testRecordsPrune() {
|
|
|
338
338
|
};
|
|
339
339
|
const baz = yield RecordsWrite.create(Object.assign({}, bazOptions));
|
|
340
340
|
const bazWriteResponse = yield dwn.processMessage(alice.did, baz.message, { dataStream: DataStream.fromBytes(bazData) });
|
|
341
|
-
expect(bazWriteResponse.status.code).
|
|
341
|
+
expect(bazWriteResponse.status.code).toBe(202);
|
|
342
342
|
// sanity records are inserted in message store
|
|
343
343
|
const queryFilter = [{
|
|
344
344
|
interface: DwnInterfaceName.Records,
|
|
345
345
|
protocol: nestedProtocol.protocol
|
|
346
346
|
}];
|
|
347
347
|
const queryResult = yield messageStore.query(alice.did, queryFilter);
|
|
348
|
-
expect(queryResult.messages.length).
|
|
348
|
+
expect(queryResult.messages.length).toBe(3);
|
|
349
349
|
// sanity verify RecordsQuery returns no records
|
|
350
350
|
const recordsQuery = yield RecordsQuery.create({
|
|
351
351
|
signer: Jws.createSigner(alice),
|
|
352
352
|
filter: { protocol: nestedProtocol.protocol }
|
|
353
353
|
});
|
|
354
354
|
const recordsQueryBeforeDeleteReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
355
|
-
expect(recordsQueryBeforeDeleteReply.status.code).
|
|
356
|
-
expect((_a = recordsQueryBeforeDeleteReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
355
|
+
expect(recordsQueryBeforeDeleteReply.status.code).toBe(200);
|
|
356
|
+
expect((_a = recordsQueryBeforeDeleteReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(3);
|
|
357
357
|
// 2. Alice prunes the record `foo`
|
|
358
358
|
const fooPrune1 = yield RecordsDelete.create({
|
|
359
359
|
recordId: foo.message.recordId,
|
|
@@ -361,7 +361,7 @@ export function testRecordsPrune() {
|
|
|
361
361
|
signer: Jws.createSigner(alice)
|
|
362
362
|
});
|
|
363
363
|
const prune1Reply = yield dwn.processMessage(alice.did, fooPrune1.message);
|
|
364
|
-
expect(prune1Reply.status.code).
|
|
364
|
+
expect(prune1Reply.status.code).toBe(202);
|
|
365
365
|
// 3. Verify that Alice is unable to perform a prune on `foo` again
|
|
366
366
|
const fooPrune2 = yield RecordsDelete.create({
|
|
367
367
|
recordId: foo.message.recordId,
|
|
@@ -369,7 +369,7 @@ export function testRecordsPrune() {
|
|
|
369
369
|
signer: Jws.createSigner(alice)
|
|
370
370
|
});
|
|
371
371
|
const prune2Reply = yield dwn.processMessage(alice.did, fooPrune2.message);
|
|
372
|
-
expect(prune2Reply.status.code).
|
|
372
|
+
expect(prune2Reply.status.code).toBe(404);
|
|
373
373
|
}));
|
|
374
374
|
describe('prune and co-prune protocol action', () => {
|
|
375
375
|
it('should only allow a non-owner author to prune if `prune` is allowed and set to `true` in RecordsDelete', () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -422,7 +422,7 @@ export function testRecordsPrune() {
|
|
|
422
422
|
signer: Jws.createSigner(alice)
|
|
423
423
|
});
|
|
424
424
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
425
|
-
expect(protocolsConfigureReply.status.code).
|
|
425
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
426
426
|
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
427
427
|
const postData = TestDataGenerator.randomBytes(100);
|
|
428
428
|
const postOptions = {
|
|
@@ -434,7 +434,7 @@ export function testRecordsPrune() {
|
|
|
434
434
|
};
|
|
435
435
|
const post = yield RecordsWrite.create(postOptions);
|
|
436
436
|
const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
|
|
437
|
-
expect(postWriteResponse.status.code).
|
|
437
|
+
expect(postWriteResponse.status.code).toBe(202);
|
|
438
438
|
const attachmentData = TestDataGenerator.randomBytes(100);
|
|
439
439
|
const attachmentOptions = {
|
|
440
440
|
signer: Jws.createSigner(bob),
|
|
@@ -446,7 +446,7 @@ export function testRecordsPrune() {
|
|
|
446
446
|
};
|
|
447
447
|
const attachment = yield RecordsWrite.create(attachmentOptions);
|
|
448
448
|
const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
|
|
449
|
-
expect(attachmentWriteResponse.status.code).
|
|
449
|
+
expect(attachmentWriteResponse.status.code).toBe(202);
|
|
450
450
|
// 3. Verify Bob cannot prune the records if `prune` is not set to `true` in RecordsDelete.
|
|
451
451
|
const unauthorizedPostPrune = yield RecordsDelete.create({
|
|
452
452
|
recordId: post.message.recordId,
|
|
@@ -454,8 +454,8 @@ export function testRecordsPrune() {
|
|
|
454
454
|
signer: Jws.createSigner(bob)
|
|
455
455
|
});
|
|
456
456
|
const unauthorizedPostPruneReply = yield dwn.processMessage(alice.did, unauthorizedPostPrune.message);
|
|
457
|
-
expect(unauthorizedPostPruneReply.status.code).
|
|
458
|
-
expect(unauthorizedPostPruneReply.status.detail).
|
|
457
|
+
expect(unauthorizedPostPruneReply.status.code).toBe(401);
|
|
458
|
+
expect(unauthorizedPostPruneReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
459
459
|
// 4. Verify Bob can prune the records by setting `prune` to `true` in RecordsDelete.
|
|
460
460
|
const postPrune = yield RecordsDelete.create({
|
|
461
461
|
recordId: post.message.recordId,
|
|
@@ -463,15 +463,15 @@ export function testRecordsPrune() {
|
|
|
463
463
|
signer: Jws.createSigner(bob)
|
|
464
464
|
});
|
|
465
465
|
const pruneReply = yield dwn.processMessage(alice.did, postPrune.message);
|
|
466
|
-
expect(pruneReply.status.code).
|
|
466
|
+
expect(pruneReply.status.code).toBe(202);
|
|
467
467
|
// sanity test `RecordsQuery` no longer returns the deleted record
|
|
468
468
|
const recordsQuery = yield RecordsQuery.create({
|
|
469
469
|
signer: Jws.createSigner(bob),
|
|
470
470
|
filter: { protocol: protocolDefinition.protocol }
|
|
471
471
|
});
|
|
472
472
|
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
473
|
-
expect(recordsQueryReply.status.code).
|
|
474
|
-
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
473
|
+
expect(recordsQueryReply.status.code).toBe(200);
|
|
474
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(0);
|
|
475
475
|
}));
|
|
476
476
|
it('should not allow a non-owner author to prune if `prune` is not an authorized action', () => __awaiter(this, void 0, void 0, function* () {
|
|
477
477
|
// Scenario:
|
|
@@ -488,7 +488,7 @@ export function testRecordsPrune() {
|
|
|
488
488
|
signer: Jws.createSigner(alice)
|
|
489
489
|
});
|
|
490
490
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
491
|
-
expect(protocolsConfigureReply.status.code).
|
|
491
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
492
492
|
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
493
493
|
const messageData = TestDataGenerator.randomBytes(100);
|
|
494
494
|
const messageOptions = {
|
|
@@ -501,7 +501,7 @@ export function testRecordsPrune() {
|
|
|
501
501
|
};
|
|
502
502
|
const message = yield RecordsWrite.create(messageOptions);
|
|
503
503
|
const messageWriteResponse = yield dwn.processMessage(alice.did, message.message, { dataStream: DataStream.fromBytes(messageData) });
|
|
504
|
-
expect(messageWriteResponse.status.code).
|
|
504
|
+
expect(messageWriteResponse.status.code).toBe(202);
|
|
505
505
|
const attachmentData = TestDataGenerator.randomBytes(100);
|
|
506
506
|
const attachmentOptions = {
|
|
507
507
|
signer: Jws.createSigner(bob),
|
|
@@ -513,7 +513,7 @@ export function testRecordsPrune() {
|
|
|
513
513
|
};
|
|
514
514
|
const attachment = yield RecordsWrite.create(attachmentOptions);
|
|
515
515
|
const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
|
|
516
|
-
expect(attachmentWriteResponse.status.code).
|
|
516
|
+
expect(attachmentWriteResponse.status.code).toBe(202);
|
|
517
517
|
// 3. Verify Bob cannot prune the records.
|
|
518
518
|
const messagePrune = yield RecordsDelete.create({
|
|
519
519
|
recordId: message.message.recordId,
|
|
@@ -521,16 +521,16 @@ export function testRecordsPrune() {
|
|
|
521
521
|
signer: Jws.createSigner(bob)
|
|
522
522
|
});
|
|
523
523
|
const deleteReply = yield dwn.processMessage(alice.did, messagePrune.message);
|
|
524
|
-
expect(deleteReply.status.code).
|
|
525
|
-
expect(deleteReply.status.detail).
|
|
524
|
+
expect(deleteReply.status.code).toBe(401);
|
|
525
|
+
expect(deleteReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
526
526
|
// sanity test `RecordsQuery` still returns the records
|
|
527
527
|
const recordsQuery = yield RecordsQuery.create({
|
|
528
528
|
signer: Jws.createSigner(alice),
|
|
529
529
|
filter: { protocol: protocolDefinition.protocol }
|
|
530
530
|
});
|
|
531
531
|
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
532
|
-
expect(recordsQueryReply.status.code).
|
|
533
|
-
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
532
|
+
expect(recordsQueryReply.status.code).toBe(200);
|
|
533
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(2);
|
|
534
534
|
}));
|
|
535
535
|
it('should allow a non-author to prune if `co-prune` is allowed and `prune` is set to `true` in RecordsDelete', () => __awaiter(this, void 0, void 0, function* () {
|
|
536
536
|
// Scenario:
|
|
@@ -581,7 +581,7 @@ export function testRecordsPrune() {
|
|
|
581
581
|
signer: Jws.createSigner(alice)
|
|
582
582
|
});
|
|
583
583
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
584
|
-
expect(protocolsConfigureReply.status.code).
|
|
584
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
585
585
|
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
586
586
|
const postData = TestDataGenerator.randomBytes(100);
|
|
587
587
|
const postOptions = {
|
|
@@ -593,7 +593,7 @@ export function testRecordsPrune() {
|
|
|
593
593
|
};
|
|
594
594
|
const post = yield RecordsWrite.create(postOptions);
|
|
595
595
|
const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
|
|
596
|
-
expect(postWriteResponse.status.code).
|
|
596
|
+
expect(postWriteResponse.status.code).toBe(202);
|
|
597
597
|
const attachmentData = TestDataGenerator.randomBytes(100);
|
|
598
598
|
const attachmentOptions = {
|
|
599
599
|
signer: Jws.createSigner(bob),
|
|
@@ -605,7 +605,7 @@ export function testRecordsPrune() {
|
|
|
605
605
|
};
|
|
606
606
|
const attachment = yield RecordsWrite.create(attachmentOptions);
|
|
607
607
|
const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
|
|
608
|
-
expect(attachmentWriteResponse.status.code).
|
|
608
|
+
expect(attachmentWriteResponse.status.code).toBe(202);
|
|
609
609
|
// 3. Verify Carol cannot prune the records if `prune` is not set to `true` in RecordsDelete.
|
|
610
610
|
const unauthorizedPostPrune = yield RecordsDelete.create({
|
|
611
611
|
recordId: post.message.recordId,
|
|
@@ -613,8 +613,8 @@ export function testRecordsPrune() {
|
|
|
613
613
|
signer: Jws.createSigner(carol)
|
|
614
614
|
});
|
|
615
615
|
const unauthorizedPostPruneReply = yield dwn.processMessage(alice.did, unauthorizedPostPrune.message);
|
|
616
|
-
expect(unauthorizedPostPruneReply.status.code).
|
|
617
|
-
expect(unauthorizedPostPruneReply.status.detail).
|
|
616
|
+
expect(unauthorizedPostPruneReply.status.code).toBe(401);
|
|
617
|
+
expect(unauthorizedPostPruneReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
618
618
|
// 4. Verify Carol can prune the records by setting `prune` to `true` in RecordsDelete.
|
|
619
619
|
const postPrune = yield RecordsDelete.create({
|
|
620
620
|
recordId: post.message.recordId,
|
|
@@ -622,15 +622,15 @@ export function testRecordsPrune() {
|
|
|
622
622
|
signer: Jws.createSigner(carol)
|
|
623
623
|
});
|
|
624
624
|
const deleteReply = yield dwn.processMessage(alice.did, postPrune.message);
|
|
625
|
-
expect(deleteReply.status.code).
|
|
625
|
+
expect(deleteReply.status.code).toBe(202);
|
|
626
626
|
// sanity test `RecordsQuery` no longer returns the deleted record
|
|
627
627
|
const recordsQuery = yield RecordsQuery.create({
|
|
628
628
|
signer: Jws.createSigner(bob),
|
|
629
629
|
filter: { protocol: protocolDefinition.protocol }
|
|
630
630
|
});
|
|
631
631
|
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
632
|
-
expect(recordsQueryReply.status.code).
|
|
633
|
-
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
632
|
+
expect(recordsQueryReply.status.code).toBe(200);
|
|
633
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(0);
|
|
634
634
|
}));
|
|
635
635
|
it('should not allow a non-author to prune if `prune` is allowed but `co-prune` is not allowed', () => __awaiter(this, void 0, void 0, function* () {
|
|
636
636
|
// Scenario:
|
|
@@ -682,7 +682,7 @@ export function testRecordsPrune() {
|
|
|
682
682
|
signer: Jws.createSigner(alice)
|
|
683
683
|
});
|
|
684
684
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
685
|
-
expect(protocolsConfigureReply.status.code).
|
|
685
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
686
686
|
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
687
687
|
const postData = TestDataGenerator.randomBytes(100);
|
|
688
688
|
const postOptions = {
|
|
@@ -694,7 +694,7 @@ export function testRecordsPrune() {
|
|
|
694
694
|
};
|
|
695
695
|
const post = yield RecordsWrite.create(postOptions);
|
|
696
696
|
const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
|
|
697
|
-
expect(postWriteResponse.status.code).
|
|
697
|
+
expect(postWriteResponse.status.code).toBe(202);
|
|
698
698
|
const attachmentData = TestDataGenerator.randomBytes(100);
|
|
699
699
|
const attachmentOptions = {
|
|
700
700
|
signer: Jws.createSigner(bob),
|
|
@@ -706,7 +706,7 @@ export function testRecordsPrune() {
|
|
|
706
706
|
};
|
|
707
707
|
const attachment = yield RecordsWrite.create(attachmentOptions);
|
|
708
708
|
const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
|
|
709
|
-
expect(attachmentWriteResponse.status.code).
|
|
709
|
+
expect(attachmentWriteResponse.status.code).toBe(202);
|
|
710
710
|
// 3. Verify Carol cannot prune the records.
|
|
711
711
|
const postPrune = yield RecordsDelete.create({
|
|
712
712
|
recordId: post.message.recordId,
|
|
@@ -714,16 +714,16 @@ export function testRecordsPrune() {
|
|
|
714
714
|
signer: Jws.createSigner(carol)
|
|
715
715
|
});
|
|
716
716
|
const deleteReply = yield dwn.processMessage(alice.did, postPrune.message);
|
|
717
|
-
expect(deleteReply.status.code).
|
|
718
|
-
expect(deleteReply.status.detail).
|
|
717
|
+
expect(deleteReply.status.code).toBe(401);
|
|
718
|
+
expect(deleteReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
719
719
|
// sanity test `RecordsQuery` still returns the records
|
|
720
720
|
const recordsQuery = yield RecordsQuery.create({
|
|
721
721
|
signer: Jws.createSigner(bob),
|
|
722
722
|
filter: { protocol: protocolDefinition.protocol }
|
|
723
723
|
});
|
|
724
724
|
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
725
|
-
expect(recordsQueryReply.status.code).
|
|
726
|
-
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
725
|
+
expect(recordsQueryReply.status.code).toBe(200);
|
|
726
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(2);
|
|
727
727
|
}));
|
|
728
728
|
it('should throw if only `delete` is allowed but received a RecordsDelete with `prune` set to `true`', () => __awaiter(this, void 0, void 0, function* () {
|
|
729
729
|
// Scenario:
|
|
@@ -771,7 +771,7 @@ export function testRecordsPrune() {
|
|
|
771
771
|
signer: Jws.createSigner(alice)
|
|
772
772
|
});
|
|
773
773
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
774
|
-
expect(protocolsConfigureReply.status.code).
|
|
774
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
775
775
|
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
776
776
|
const postData = TestDataGenerator.randomBytes(100);
|
|
777
777
|
const postOptions = {
|
|
@@ -783,7 +783,7 @@ export function testRecordsPrune() {
|
|
|
783
783
|
};
|
|
784
784
|
const post = yield RecordsWrite.create(postOptions);
|
|
785
785
|
const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
|
|
786
|
-
expect(postWriteResponse.status.code).
|
|
786
|
+
expect(postWriteResponse.status.code).toBe(202);
|
|
787
787
|
const attachmentData = TestDataGenerator.randomBytes(100);
|
|
788
788
|
const attachmentOptions = {
|
|
789
789
|
signer: Jws.createSigner(bob),
|
|
@@ -795,7 +795,7 @@ export function testRecordsPrune() {
|
|
|
795
795
|
};
|
|
796
796
|
const attachment = yield RecordsWrite.create(attachmentOptions);
|
|
797
797
|
const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
|
|
798
|
-
expect(attachmentWriteResponse.status.code).
|
|
798
|
+
expect(attachmentWriteResponse.status.code).toBe(202);
|
|
799
799
|
// 3. Verify Bob cannot prune the records.
|
|
800
800
|
const unauthorizedPostPrune = yield RecordsDelete.create({
|
|
801
801
|
recordId: post.message.recordId,
|
|
@@ -803,8 +803,34 @@ export function testRecordsPrune() {
|
|
|
803
803
|
signer: Jws.createSigner(bob)
|
|
804
804
|
});
|
|
805
805
|
const unauthorizedPostPruneReply = yield dwn.processMessage(alice.did, unauthorizedPostPrune.message);
|
|
806
|
-
expect(unauthorizedPostPruneReply.status.code).
|
|
807
|
-
expect(unauthorizedPostPruneReply.status.detail).
|
|
806
|
+
expect(unauthorizedPostPruneReply.status.code).toBe(401);
|
|
807
|
+
expect(unauthorizedPostPruneReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
808
|
+
}));
|
|
809
|
+
it('should not allow creation of a protocol definition with action rule containing `prune` without `create`', () => __awaiter(this, void 0, void 0, function* () {
|
|
810
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
811
|
+
const protocolDefinition = {
|
|
812
|
+
protocol: 'http://prune-without-create.xyz',
|
|
813
|
+
published: true,
|
|
814
|
+
types: {
|
|
815
|
+
post: {},
|
|
816
|
+
},
|
|
817
|
+
structure: {
|
|
818
|
+
post: {
|
|
819
|
+
$actions: [
|
|
820
|
+
{
|
|
821
|
+
who: 'anyone',
|
|
822
|
+
can: ['prune'] // intentionally missing `create` action
|
|
823
|
+
}
|
|
824
|
+
]
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
};
|
|
828
|
+
const protocolsConfigureCreatePromise = ProtocolsConfigure.create({
|
|
829
|
+
definition: protocolDefinition,
|
|
830
|
+
signer: Jws.createSigner(alice)
|
|
831
|
+
});
|
|
832
|
+
yield expect(protocolsConfigureCreatePromise)
|
|
833
|
+
.rejects.toThrow(DwnErrorCode.ProtocolsConfigureInvalidActionPruneWithoutCreate);
|
|
808
834
|
}));
|
|
809
835
|
});
|
|
810
836
|
});
|