@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
|
@@ -8,14 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { ResumableTaskManager } from '../../src/core/resumable-task-manager.js';
|
|
11
|
-
import chaiAsPromised from 'chai-as-promised';
|
|
12
11
|
import sinon from 'sinon';
|
|
13
|
-
import
|
|
14
|
-
import anyoneCollaborateProtocolDefinition from '../vectors/protocol-definitions/anyone-collaborate.json'
|
|
15
|
-
import authorCanProtocolDefinition from '../vectors/protocol-definitions/author-can.json'
|
|
16
|
-
import friendRoleProtocolDefinition from '../vectors/protocol-definitions/friend-role.json'
|
|
17
|
-
import recipientCanProtocolDefinition from '../vectors/protocol-definitions/recipient-can.json'
|
|
18
|
-
import threadRoleProtocolDefinition from '../vectors/protocol-definitions/thread-role.json'
|
|
12
|
+
import { afterAll, beforeAll, beforeEach, describe, expect, it } from 'bun:test';
|
|
13
|
+
import anyoneCollaborateProtocolDefinition from '../vectors/protocol-definitions/anyone-collaborate.json' with { type: 'json' };
|
|
14
|
+
import authorCanProtocolDefinition from '../vectors/protocol-definitions/author-can.json' with { type: 'json' };
|
|
15
|
+
import friendRoleProtocolDefinition from '../vectors/protocol-definitions/friend-role.json' with { type: 'json' };
|
|
16
|
+
import recipientCanProtocolDefinition from '../vectors/protocol-definitions/recipient-can.json' with { type: 'json' };
|
|
17
|
+
import threadRoleProtocolDefinition from '../vectors/protocol-definitions/thread-role.json' with { type: 'json' };
|
|
19
18
|
import { ArrayUtility } from '../../src/utils/array.js';
|
|
20
19
|
import { DwnErrorCode } from '../../src/core/dwn-error.js';
|
|
21
20
|
import { DwnMethodName } from '../../src/enums/dwn-interface-method.js';
|
|
@@ -29,43 +28,42 @@ import { TestStubGenerator } from '../utils/test-stub-generator.js';
|
|
|
29
28
|
import { Time } from '../../src/utils/time.js';
|
|
30
29
|
import { DataStream, Dwn, Encoder, Jws, MessageStoreLevel, RecordsDelete, RecordsRead, RecordsWrite } from '../../src/index.js';
|
|
31
30
|
import { DidKey, UniversalResolver } from '@enbox/dids';
|
|
32
|
-
chai.use(chaiAsPromised);
|
|
33
31
|
export function testRecordsDeleteHandler() {
|
|
34
32
|
describe('RecordsDeleteHandler.handle()', () => {
|
|
35
33
|
let didResolver;
|
|
36
34
|
let messageStore;
|
|
37
35
|
let dataStore;
|
|
38
36
|
let resumableTaskStore;
|
|
39
|
-
let
|
|
37
|
+
let stateIndex;
|
|
40
38
|
let eventStream;
|
|
41
39
|
let dwn;
|
|
42
40
|
beforeEach(() => {
|
|
43
41
|
sinon.restore();
|
|
44
42
|
});
|
|
45
|
-
|
|
43
|
+
afterAll(() => {
|
|
46
44
|
sinon.restore();
|
|
47
45
|
});
|
|
48
46
|
describe('functional tests', () => {
|
|
49
47
|
// important to follow the `before` and `after` pattern to initialize and clean the stores in tests
|
|
50
48
|
// so that different test suites can reuse the same backend store for testing
|
|
51
|
-
|
|
49
|
+
beforeAll(() => __awaiter(this, void 0, void 0, function* () {
|
|
52
50
|
didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
53
51
|
const stores = TestStores.get();
|
|
54
52
|
messageStore = stores.messageStore;
|
|
55
53
|
dataStore = stores.dataStore;
|
|
56
54
|
resumableTaskStore = stores.resumableTaskStore;
|
|
57
|
-
|
|
55
|
+
stateIndex = stores.stateIndex;
|
|
58
56
|
eventStream = TestEventStream.get();
|
|
59
|
-
dwn = yield Dwn.create({ didResolver, messageStore, dataStore,
|
|
57
|
+
dwn = yield Dwn.create({ didResolver, messageStore, dataStore, stateIndex, eventStream, resumableTaskStore });
|
|
60
58
|
}));
|
|
61
59
|
beforeEach(() => __awaiter(this, void 0, void 0, function* () {
|
|
62
60
|
// clean up before each test rather than after so that a test does not depend on other tests to do the clean up
|
|
63
61
|
yield messageStore.clear();
|
|
64
62
|
yield dataStore.clear();
|
|
65
63
|
yield resumableTaskStore.clear();
|
|
66
|
-
yield
|
|
64
|
+
yield stateIndex.clear();
|
|
67
65
|
}));
|
|
68
|
-
|
|
66
|
+
afterAll(() => __awaiter(this, void 0, void 0, function* () {
|
|
69
67
|
yield dwn.close();
|
|
70
68
|
}));
|
|
71
69
|
it('should handle RecordsDelete successfully and return 404 if deleting a deleted record', () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -74,33 +72,33 @@ export function testRecordsDeleteHandler() {
|
|
|
74
72
|
// insert data
|
|
75
73
|
const { message, dataStream } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
|
|
76
74
|
const writeReply = yield dwn.processMessage(alice.did, message, { dataStream });
|
|
77
|
-
expect(writeReply.status.code).
|
|
75
|
+
expect(writeReply.status.code).toBe(202);
|
|
78
76
|
// ensure data is inserted
|
|
79
77
|
const queryData = yield TestDataGenerator.generateRecordsQuery({
|
|
80
78
|
author: alice,
|
|
81
79
|
filter: { recordId: message.recordId }
|
|
82
80
|
});
|
|
83
81
|
const reply = yield dwn.processMessage(alice.did, queryData.message);
|
|
84
|
-
expect(reply.status.code).
|
|
85
|
-
expect((_a = reply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
82
|
+
expect(reply.status.code).toBe(200);
|
|
83
|
+
expect((_a = reply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
|
|
86
84
|
// testing delete
|
|
87
85
|
const recordsDelete = yield RecordsDelete.create({
|
|
88
86
|
recordId: message.recordId,
|
|
89
87
|
signer: Jws.createSigner(alice)
|
|
90
88
|
});
|
|
91
89
|
const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
|
|
92
|
-
expect(deleteReply.status.code).
|
|
90
|
+
expect(deleteReply.status.code).toBe(202);
|
|
93
91
|
// ensure a query will no longer find the deleted record
|
|
94
92
|
const reply2 = yield dwn.processMessage(alice.did, queryData.message);
|
|
95
|
-
expect(reply2.status.code).
|
|
96
|
-
expect((_b = reply2.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
93
|
+
expect(reply2.status.code).toBe(200);
|
|
94
|
+
expect((_b = reply2.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(0);
|
|
97
95
|
// testing deleting a deleted record
|
|
98
96
|
const recordsDelete2 = yield RecordsDelete.create({
|
|
99
97
|
recordId: message.recordId,
|
|
100
98
|
signer: Jws.createSigner(alice)
|
|
101
99
|
});
|
|
102
100
|
const recordsDelete2Reply = yield dwn.processMessage(alice.did, recordsDelete2.message);
|
|
103
|
-
expect(recordsDelete2Reply.status.code).
|
|
101
|
+
expect(recordsDelete2Reply.status.code).toBe(404);
|
|
104
102
|
}));
|
|
105
103
|
it('should not affect other records or tenants with the same data', () => __awaiter(this, void 0, void 0, function* () {
|
|
106
104
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -109,26 +107,26 @@ export function testRecordsDeleteHandler() {
|
|
|
109
107
|
// alice writes a records with data
|
|
110
108
|
const aliceWriteData = yield TestDataGenerator.generateRecordsWrite({ author: alice, data });
|
|
111
109
|
const aliceWriteReply = yield dwn.processMessage(alice.did, aliceWriteData.message, { dataStream: aliceWriteData.dataStream });
|
|
112
|
-
expect(aliceWriteReply.status.code).
|
|
110
|
+
expect(aliceWriteReply.status.code).toBe(202);
|
|
113
111
|
// alice writes another record with the same data
|
|
114
112
|
const aliceWrite2Data = yield TestDataGenerator.generateRecordsWrite({ author: alice, data });
|
|
115
113
|
const aliceWrite2Reply = yield dwn.processMessage(alice.did, aliceWrite2Data.message, { dataStream: aliceWrite2Data.dataStream });
|
|
116
|
-
expect(aliceWrite2Reply.status.code).
|
|
114
|
+
expect(aliceWrite2Reply.status.code).toBe(202);
|
|
117
115
|
// bob writes a records with same data
|
|
118
116
|
const bobWriteData = yield TestDataGenerator.generateRecordsWrite({ author: bob, data });
|
|
119
117
|
const bobWriteReply = yield dwn.processMessage(bob.did, bobWriteData.message, { dataStream: bobWriteData.dataStream });
|
|
120
|
-
expect(bobWriteReply.status.code).
|
|
118
|
+
expect(bobWriteReply.status.code).toBe(202);
|
|
121
119
|
// bob writes another record with the same data
|
|
122
120
|
const bobWrite2Data = yield TestDataGenerator.generateRecordsWrite({ author: bob, data });
|
|
123
121
|
const bobWrite2Reply = yield dwn.processMessage(bob.did, bobWrite2Data.message, { dataStream: bobWrite2Data.dataStream });
|
|
124
|
-
expect(bobWrite2Reply.status.code).
|
|
122
|
+
expect(bobWrite2Reply.status.code).toBe(202);
|
|
125
123
|
// alice deletes one of the two records
|
|
126
124
|
const aliceDeleteWriteData = yield TestDataGenerator.generateRecordsDelete({
|
|
127
125
|
author: alice,
|
|
128
126
|
recordId: aliceWriteData.message.recordId
|
|
129
127
|
});
|
|
130
128
|
const aliceDeleteWriteReply = yield dwn.processMessage(alice.did, aliceDeleteWriteData.message);
|
|
131
|
-
expect(aliceDeleteWriteReply.status.code).
|
|
129
|
+
expect(aliceDeleteWriteReply.status.code).toBe(202);
|
|
132
130
|
// verify the other record with the same data is unaffected
|
|
133
131
|
const aliceRead1 = yield RecordsRead.create({
|
|
134
132
|
filter: {
|
|
@@ -137,19 +135,19 @@ export function testRecordsDeleteHandler() {
|
|
|
137
135
|
signer: Jws.createSigner(alice)
|
|
138
136
|
});
|
|
139
137
|
const aliceRead1Reply = yield dwn.processMessage(alice.did, aliceRead1.message);
|
|
140
|
-
expect(aliceRead1Reply.status.code).
|
|
138
|
+
expect(aliceRead1Reply.status.code).toBe(200);
|
|
141
139
|
const aliceDataFetched = yield DataStream.toBytes(aliceRead1Reply.entry.data);
|
|
142
|
-
expect(ArrayUtility.byteArraysEqual(aliceDataFetched, data)).
|
|
140
|
+
expect(ArrayUtility.byteArraysEqual(aliceDataFetched, data)).toBe(true);
|
|
143
141
|
// alice deletes the other record
|
|
144
142
|
const aliceDeleteWrite2Data = yield TestDataGenerator.generateRecordsDelete({
|
|
145
143
|
author: alice,
|
|
146
144
|
recordId: aliceWrite2Data.message.recordId
|
|
147
145
|
});
|
|
148
146
|
const aliceDeleteWrite2Reply = yield dwn.processMessage(alice.did, aliceDeleteWrite2Data.message);
|
|
149
|
-
expect(aliceDeleteWrite2Reply.status.code).
|
|
147
|
+
expect(aliceDeleteWrite2Reply.status.code).toBe(202);
|
|
150
148
|
// verify that alice can no longer fetch the 2nd record
|
|
151
149
|
const aliceRead2Reply = yield dwn.processMessage(alice.did, aliceRead1.message);
|
|
152
|
-
expect(aliceRead2Reply.status.code).
|
|
150
|
+
expect(aliceRead2Reply.status.code).toBe(404);
|
|
153
151
|
// verify that bob can still fetch record with the same data
|
|
154
152
|
const bobRead1 = yield RecordsRead.create({
|
|
155
153
|
filter: {
|
|
@@ -158,9 +156,9 @@ export function testRecordsDeleteHandler() {
|
|
|
158
156
|
signer: Jws.createSigner(bob)
|
|
159
157
|
});
|
|
160
158
|
const bobRead1Reply = yield dwn.processMessage(bob.did, bobRead1.message);
|
|
161
|
-
expect(bobRead1Reply.status.code).
|
|
159
|
+
expect(bobRead1Reply.status.code).toBe(200);
|
|
162
160
|
const bobDataFetched = yield DataStream.toBytes(bobRead1Reply.entry.data);
|
|
163
|
-
expect(ArrayUtility.byteArraysEqual(bobDataFetched, data)).
|
|
161
|
+
expect(ArrayUtility.byteArraysEqual(bobDataFetched, data)).toBe(true);
|
|
164
162
|
}));
|
|
165
163
|
it('should return 404 if deleting a non-existent record', () => __awaiter(this, void 0, void 0, function* () {
|
|
166
164
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
@@ -170,7 +168,7 @@ export function testRecordsDeleteHandler() {
|
|
|
170
168
|
signer: Jws.createSigner(alice)
|
|
171
169
|
});
|
|
172
170
|
const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
|
|
173
|
-
expect(deleteReply.status.code).
|
|
171
|
+
expect(deleteReply.status.code).toBe(404);
|
|
174
172
|
}));
|
|
175
173
|
it('should be disallowed if there is a newer RecordsWrite already in the DWN ', () => __awaiter(this, void 0, void 0, function* () {
|
|
176
174
|
var _a;
|
|
@@ -178,7 +176,7 @@ export function testRecordsDeleteHandler() {
|
|
|
178
176
|
// initial write
|
|
179
177
|
const initialWriteData = yield TestDataGenerator.generateRecordsWrite({ author: alice });
|
|
180
178
|
const initialWriteReply = yield dwn.processMessage(alice.did, initialWriteData.message, { dataStream: initialWriteData.dataStream });
|
|
181
|
-
expect(initialWriteReply.status.code).
|
|
179
|
+
expect(initialWriteReply.status.code).toBe(202);
|
|
182
180
|
// generate subsequent write and delete with the delete having an earlier timestamp
|
|
183
181
|
// NOTE: creating RecordsDelete first ensures it has an earlier `messageTimestamp` time
|
|
184
182
|
const recordsDelete = yield RecordsDelete.create({
|
|
@@ -192,10 +190,10 @@ export function testRecordsDeleteHandler() {
|
|
|
192
190
|
});
|
|
193
191
|
// subsequent write
|
|
194
192
|
const subsequentWriteReply = yield dwn.processMessage(alice.did, subsequentWriteData.message, { dataStream: subsequentWriteData.dataStream });
|
|
195
|
-
expect(subsequentWriteReply.status.code).
|
|
193
|
+
expect(subsequentWriteReply.status.code).toBe(202);
|
|
196
194
|
// test that a delete with an earlier `messageTimestamp` results in a 409
|
|
197
195
|
const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
|
|
198
|
-
expect(deleteReply.status.code).
|
|
196
|
+
expect(deleteReply.status.code).toBe(409);
|
|
199
197
|
// ensure data still exists
|
|
200
198
|
const queryData = yield TestDataGenerator.generateRecordsQuery({
|
|
201
199
|
author: alice,
|
|
@@ -203,9 +201,9 @@ export function testRecordsDeleteHandler() {
|
|
|
203
201
|
});
|
|
204
202
|
const expectedEncodedData = Encoder.bytesToBase64Url(subsequentWriteData.dataBytes);
|
|
205
203
|
const reply = yield dwn.processMessage(alice.did, queryData.message);
|
|
206
|
-
expect(reply.status.code).
|
|
207
|
-
expect((_a = reply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
208
|
-
expect(reply.entries[0].encodedData).
|
|
204
|
+
expect(reply.status.code).toBe(200);
|
|
205
|
+
expect((_a = reply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
|
|
206
|
+
expect(reply.entries[0].encodedData).toBe(expectedEncodedData);
|
|
209
207
|
}));
|
|
210
208
|
it('should be able to delete then rewrite the same data', () => __awaiter(this, void 0, void 0, function* () {
|
|
211
209
|
var _a, _b, _c;
|
|
@@ -218,44 +216,44 @@ export function testRecordsDeleteHandler() {
|
|
|
218
216
|
data
|
|
219
217
|
});
|
|
220
218
|
const aliceWriteReply = yield dwn.processMessage(alice.did, aliceWriteData.message, { dataStream: aliceWriteData.dataStream });
|
|
221
|
-
expect(aliceWriteReply.status.code).
|
|
219
|
+
expect(aliceWriteReply.status.code).toBe(202);
|
|
222
220
|
const aliceQueryWriteAfterAliceWriteData = yield TestDataGenerator.generateRecordsQuery({
|
|
223
221
|
author: alice,
|
|
224
222
|
filter: { recordId: aliceWriteData.message.recordId }
|
|
225
223
|
});
|
|
226
224
|
const aliceQueryWriteAfterAliceWriteReply = yield dwn.processMessage(alice.did, aliceQueryWriteAfterAliceWriteData.message);
|
|
227
|
-
expect(aliceQueryWriteAfterAliceWriteReply.status.code).
|
|
228
|
-
expect((_a = aliceQueryWriteAfterAliceWriteReply.entries) === null || _a === void 0 ? void 0 : _a.length).
|
|
229
|
-
expect(aliceQueryWriteAfterAliceWriteReply.entries[0].encodedData).
|
|
225
|
+
expect(aliceQueryWriteAfterAliceWriteReply.status.code).toBe(200);
|
|
226
|
+
expect((_a = aliceQueryWriteAfterAliceWriteReply.entries) === null || _a === void 0 ? void 0 : _a.length).toBe(1);
|
|
227
|
+
expect(aliceQueryWriteAfterAliceWriteReply.entries[0].encodedData).toBe(encodedData);
|
|
230
228
|
// alice deleting the record
|
|
231
229
|
const aliceDeleteWriteData = yield TestDataGenerator.generateRecordsDelete({
|
|
232
230
|
author: alice,
|
|
233
231
|
recordId: aliceWriteData.message.recordId
|
|
234
232
|
});
|
|
235
233
|
const aliceDeleteWriteReply = yield dwn.processMessage(alice.did, aliceDeleteWriteData.message);
|
|
236
|
-
expect(aliceDeleteWriteReply.status.code).
|
|
234
|
+
expect(aliceDeleteWriteReply.status.code).toBe(202);
|
|
237
235
|
const aliceQueryWriteAfterAliceDeleteData = yield TestDataGenerator.generateRecordsQuery({
|
|
238
236
|
author: alice,
|
|
239
237
|
filter: { recordId: aliceWriteData.message.recordId }
|
|
240
238
|
});
|
|
241
239
|
const aliceQueryWriteAfterAliceDeleteReply = yield dwn.processMessage(alice.did, aliceQueryWriteAfterAliceDeleteData.message);
|
|
242
|
-
expect(aliceQueryWriteAfterAliceDeleteReply.status.code).
|
|
243
|
-
expect((_b = aliceQueryWriteAfterAliceDeleteReply.entries) === null || _b === void 0 ? void 0 : _b.length).
|
|
240
|
+
expect(aliceQueryWriteAfterAliceDeleteReply.status.code).toBe(200);
|
|
241
|
+
expect((_b = aliceQueryWriteAfterAliceDeleteReply.entries) === null || _b === void 0 ? void 0 : _b.length).toBe(0);
|
|
244
242
|
// alice writes a new record with the same data
|
|
245
243
|
const aliceRewriteData = yield TestDataGenerator.generateRecordsWrite({
|
|
246
244
|
author: alice,
|
|
247
245
|
data
|
|
248
246
|
});
|
|
249
247
|
const aliceRewriteReply = yield dwn.processMessage(alice.did, aliceRewriteData.message, { dataStream: aliceRewriteData.dataStream });
|
|
250
|
-
expect(aliceRewriteReply.status.code).
|
|
248
|
+
expect(aliceRewriteReply.status.code).toBe(202);
|
|
251
249
|
const aliceQueryWriteAfterAliceRewriteData = yield TestDataGenerator.generateRecordsQuery({
|
|
252
250
|
author: alice,
|
|
253
251
|
filter: { recordId: aliceRewriteData.message.recordId }
|
|
254
252
|
});
|
|
255
253
|
const aliceQueryWriteAfterAliceRewriteReply = yield dwn.processMessage(alice.did, aliceQueryWriteAfterAliceRewriteData.message);
|
|
256
|
-
expect(aliceQueryWriteAfterAliceRewriteReply.status.code).
|
|
257
|
-
expect((_c = aliceQueryWriteAfterAliceRewriteReply.entries) === null || _c === void 0 ? void 0 : _c.length).
|
|
258
|
-
expect(aliceQueryWriteAfterAliceRewriteReply.entries[0].encodedData).
|
|
254
|
+
expect(aliceQueryWriteAfterAliceRewriteReply.status.code).toBe(200);
|
|
255
|
+
expect((_c = aliceQueryWriteAfterAliceRewriteReply.entries) === null || _c === void 0 ? void 0 : _c.length).toBe(1);
|
|
256
|
+
expect(aliceQueryWriteAfterAliceRewriteReply.entries[0].encodedData).toBe(encodedData);
|
|
259
257
|
}));
|
|
260
258
|
describe('protocol based deletes', () => {
|
|
261
259
|
it('should allow delete with allow-anyone rule', () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -270,7 +268,7 @@ export function testRecordsDeleteHandler() {
|
|
|
270
268
|
// setting up a stub DID resolver
|
|
271
269
|
TestStubGenerator.stubDidResolver(didResolver, [alice, bob]);
|
|
272
270
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
273
|
-
expect(protocolsConfigureReply.status.code).
|
|
271
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
274
272
|
// Alice writes a record
|
|
275
273
|
const recordsWrite = yield TestDataGenerator.generateRecordsWrite({
|
|
276
274
|
author: alice,
|
|
@@ -278,14 +276,14 @@ export function testRecordsDeleteHandler() {
|
|
|
278
276
|
protocolPath: 'doc',
|
|
279
277
|
});
|
|
280
278
|
const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream: recordsWrite.dataStream });
|
|
281
|
-
expect(recordsWriteReply.status.code).
|
|
279
|
+
expect(recordsWriteReply.status.code).toBe(202);
|
|
282
280
|
// Bob (anyone) is able to delete the record
|
|
283
281
|
const recordsDelete = yield TestDataGenerator.generateRecordsDelete({
|
|
284
282
|
author: bob,
|
|
285
283
|
recordId: recordsWrite.message.recordId,
|
|
286
284
|
});
|
|
287
285
|
const recordsDeleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
|
|
288
|
-
expect(recordsDeleteReply.status.code).
|
|
286
|
+
expect(recordsDeleteReply.status.code).toBe(202);
|
|
289
287
|
}));
|
|
290
288
|
describe('recipient rules', () => {
|
|
291
289
|
it('should allow delete with ancestor recipient rule', () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -302,7 +300,7 @@ export function testRecordsDeleteHandler() {
|
|
|
302
300
|
// setting up a stub DID resolver
|
|
303
301
|
TestStubGenerator.stubDidResolver(didResolver, [alice, bob, carol]);
|
|
304
302
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
305
|
-
expect(protocolsConfigureReply.status.code).
|
|
303
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
306
304
|
// Alice writes a chat
|
|
307
305
|
const chatRecordsWrite = yield TestDataGenerator.generateRecordsWrite({
|
|
308
306
|
author: alice,
|
|
@@ -311,7 +309,7 @@ export function testRecordsDeleteHandler() {
|
|
|
311
309
|
protocolPath: 'post',
|
|
312
310
|
});
|
|
313
311
|
const chatRecordsWriteReply = yield dwn.processMessage(alice.did, chatRecordsWrite.message, { dataStream: chatRecordsWrite.dataStream });
|
|
314
|
-
expect(chatRecordsWriteReply.status.code).
|
|
312
|
+
expect(chatRecordsWriteReply.status.code).toBe(202);
|
|
315
313
|
// Alice writes a 'chat/tag'
|
|
316
314
|
const tagRecordsWrite = yield TestDataGenerator.generateRecordsWrite({
|
|
317
315
|
author: alice,
|
|
@@ -320,22 +318,22 @@ export function testRecordsDeleteHandler() {
|
|
|
320
318
|
parentContextId: chatRecordsWrite.message.contextId,
|
|
321
319
|
});
|
|
322
320
|
const tagRecordsWriteReply = yield dwn.processMessage(alice.did, tagRecordsWrite.message, { dataStream: tagRecordsWrite.dataStream });
|
|
323
|
-
expect(tagRecordsWriteReply.status.code).
|
|
321
|
+
expect(tagRecordsWriteReply.status.code).toBe(202);
|
|
324
322
|
// Carol is unable to delete the 'chat/tag'
|
|
325
323
|
const recordsDeleteCarol = yield TestDataGenerator.generateRecordsDelete({
|
|
326
324
|
author: carol,
|
|
327
325
|
recordId: tagRecordsWrite.message.recordId,
|
|
328
326
|
});
|
|
329
327
|
const recordsDeleteCarolReply = yield dwn.processMessage(alice.did, recordsDeleteCarol.message);
|
|
330
|
-
expect(recordsDeleteCarolReply.status.code).
|
|
331
|
-
expect(recordsDeleteCarolReply.status.detail).
|
|
328
|
+
expect(recordsDeleteCarolReply.status.code).toBe(401);
|
|
329
|
+
expect(recordsDeleteCarolReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
332
330
|
// Bob is able to delete the 'chat/tag'
|
|
333
331
|
const recordsDelete = yield TestDataGenerator.generateRecordsDelete({
|
|
334
332
|
author: bob,
|
|
335
333
|
recordId: tagRecordsWrite.message.recordId,
|
|
336
334
|
});
|
|
337
335
|
const recordsDeleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
|
|
338
|
-
expect(recordsDeleteReply.status.code).
|
|
336
|
+
expect(recordsDeleteReply.status.code).toBe(202);
|
|
339
337
|
}));
|
|
340
338
|
it('should allow delete with direct recipient rule', () => __awaiter(this, void 0, void 0, function* () {
|
|
341
339
|
// scenario: Alice creates a 'post' with Bob as recipient. Bob is able to delete
|
|
@@ -351,7 +349,7 @@ export function testRecordsDeleteHandler() {
|
|
|
351
349
|
// setting up a stub DID resolver
|
|
352
350
|
TestStubGenerator.stubDidResolver(didResolver, [alice, bob, carol]);
|
|
353
351
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
354
|
-
expect(protocolsConfigureReply.status.code).
|
|
352
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
355
353
|
// Alice creates a 'post' with Bob as recipient
|
|
356
354
|
const recordsWrite = yield TestDataGenerator.generateRecordsWrite({
|
|
357
355
|
author: alice,
|
|
@@ -360,22 +358,22 @@ export function testRecordsDeleteHandler() {
|
|
|
360
358
|
protocolPath: 'post',
|
|
361
359
|
});
|
|
362
360
|
const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream: recordsWrite.dataStream });
|
|
363
|
-
expect(recordsWriteReply.status.code).
|
|
361
|
+
expect(recordsWriteReply.status.code).toBe(202);
|
|
364
362
|
// Carol is unable to delete the 'post'
|
|
365
363
|
const carolRecordsDelete = yield TestDataGenerator.generateRecordsDelete({
|
|
366
364
|
author: carol,
|
|
367
365
|
recordId: recordsWrite.message.recordId,
|
|
368
366
|
});
|
|
369
367
|
const carolRecordsDeleteReply = yield dwn.processMessage(alice.did, carolRecordsDelete.message);
|
|
370
|
-
expect(carolRecordsDeleteReply.status.code).
|
|
371
|
-
expect(carolRecordsDeleteReply.status.detail).
|
|
368
|
+
expect(carolRecordsDeleteReply.status.code).toBe(401);
|
|
369
|
+
expect(carolRecordsDeleteReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
372
370
|
// Bob is able to delete the post
|
|
373
371
|
const bobRecordsDelete = yield TestDataGenerator.generateRecordsDelete({
|
|
374
372
|
author: bob,
|
|
375
373
|
recordId: recordsWrite.message.recordId,
|
|
376
374
|
});
|
|
377
375
|
const bobRecordsDeleteReply = yield dwn.processMessage(alice.did, bobRecordsDelete.message);
|
|
378
|
-
expect(bobRecordsDeleteReply.status.code).
|
|
376
|
+
expect(bobRecordsDeleteReply.status.code).toBe(202);
|
|
379
377
|
}));
|
|
380
378
|
});
|
|
381
379
|
describe('author action rules', () => {
|
|
@@ -393,7 +391,7 @@ export function testRecordsDeleteHandler() {
|
|
|
393
391
|
// setting up a stub DID resolver
|
|
394
392
|
TestStubGenerator.stubDidResolver(didResolver, [alice, bob, carol]);
|
|
395
393
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
396
|
-
expect(protocolsConfigureReply.status.code).
|
|
394
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
397
395
|
// Bob writes a post
|
|
398
396
|
const postRecordsWrite = yield TestDataGenerator.generateRecordsWrite({
|
|
399
397
|
author: bob,
|
|
@@ -401,7 +399,7 @@ export function testRecordsDeleteHandler() {
|
|
|
401
399
|
protocolPath: 'post',
|
|
402
400
|
});
|
|
403
401
|
const postRecordsWriteReply = yield dwn.processMessage(alice.did, postRecordsWrite.message, { dataStream: postRecordsWrite.dataStream });
|
|
404
|
-
expect(postRecordsWriteReply.status.code).
|
|
402
|
+
expect(postRecordsWriteReply.status.code).toBe(202);
|
|
405
403
|
// Alice writes a 'post/comment'
|
|
406
404
|
const commentRecordsWrite = yield TestDataGenerator.generateRecordsWrite({
|
|
407
405
|
author: alice,
|
|
@@ -410,22 +408,22 @@ export function testRecordsDeleteHandler() {
|
|
|
410
408
|
parentContextId: postRecordsWrite.message.contextId,
|
|
411
409
|
});
|
|
412
410
|
const commentRecordsWriteReply = yield dwn.processMessage(alice.did, commentRecordsWrite.message, { dataStream: commentRecordsWrite.dataStream });
|
|
413
|
-
expect(commentRecordsWriteReply.status.code).
|
|
411
|
+
expect(commentRecordsWriteReply.status.code).toBe(202);
|
|
414
412
|
// Carol is unable to delete Alice's 'post/comment'
|
|
415
413
|
const recordsDeleteCarol = yield TestDataGenerator.generateRecordsDelete({
|
|
416
414
|
author: carol,
|
|
417
415
|
recordId: commentRecordsWrite.message.recordId,
|
|
418
416
|
});
|
|
419
417
|
const recordsDeleteCarolReply = yield dwn.processMessage(alice.did, recordsDeleteCarol.message);
|
|
420
|
-
expect(recordsDeleteCarolReply.status.code).
|
|
421
|
-
expect(recordsDeleteCarolReply.status.detail).
|
|
418
|
+
expect(recordsDeleteCarolReply.status.code).toBe(401);
|
|
419
|
+
expect(recordsDeleteCarolReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
422
420
|
// Bob is able to delete the Alice's 'post/comment'
|
|
423
421
|
const recordsDelete = yield TestDataGenerator.generateRecordsDelete({
|
|
424
422
|
author: bob,
|
|
425
423
|
recordId: commentRecordsWrite.message.recordId,
|
|
426
424
|
});
|
|
427
425
|
const recordsDeleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
|
|
428
|
-
expect(recordsDeleteReply.status.code).
|
|
426
|
+
expect(recordsDeleteReply.status.code).toBe(202);
|
|
429
427
|
}));
|
|
430
428
|
});
|
|
431
429
|
describe('role based deletes', () => {
|
|
@@ -442,7 +440,7 @@ export function testRecordsDeleteHandler() {
|
|
|
442
440
|
protocolDefinition
|
|
443
441
|
});
|
|
444
442
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
445
|
-
expect(protocolsConfigureReply.status.code).
|
|
443
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
446
444
|
// Alice creates a thread
|
|
447
445
|
const threadRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
448
446
|
author: alice,
|
|
@@ -451,7 +449,7 @@ export function testRecordsDeleteHandler() {
|
|
|
451
449
|
protocolPath: 'thread'
|
|
452
450
|
});
|
|
453
451
|
const threadRecordReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
|
|
454
|
-
expect(threadRecordReply.status.code).
|
|
452
|
+
expect(threadRecordReply.status.code).toBe(202);
|
|
455
453
|
// Alice adds Bob as a 'thread/admin' in that thread
|
|
456
454
|
const participantRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
457
455
|
author: alice,
|
|
@@ -461,7 +459,7 @@ export function testRecordsDeleteHandler() {
|
|
|
461
459
|
parentContextId: threadRecord.message.contextId,
|
|
462
460
|
});
|
|
463
461
|
const participantRecordReply = yield dwn.processMessage(alice.did, participantRecord.message, { dataStream: participantRecord.dataStream });
|
|
464
|
-
expect(participantRecordReply.status.code).
|
|
462
|
+
expect(participantRecordReply.status.code).toBe(202);
|
|
465
463
|
// Alice writes a chat message in that thread
|
|
466
464
|
const chatRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
467
465
|
author: alice,
|
|
@@ -471,15 +469,15 @@ export function testRecordsDeleteHandler() {
|
|
|
471
469
|
parentContextId: threadRecord.message.contextId,
|
|
472
470
|
});
|
|
473
471
|
const chatRecordReply = yield dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
|
|
474
|
-
expect(chatRecordReply.status.code).
|
|
472
|
+
expect(chatRecordReply.status.code).toBe(202);
|
|
475
473
|
// Verifies that Carol cannot delete without appropriate role
|
|
476
474
|
const chatDeleteCarol = yield TestDataGenerator.generateRecordsDelete({
|
|
477
475
|
author: carol,
|
|
478
476
|
recordId: chatRecord.message.recordId,
|
|
479
477
|
});
|
|
480
478
|
const chatDeleteReplyCarol = yield dwn.processMessage(alice.did, chatDeleteCarol.message);
|
|
481
|
-
expect(chatDeleteReplyCarol.status.code).
|
|
482
|
-
expect(chatDeleteReplyCarol.status.detail).
|
|
479
|
+
expect(chatDeleteReplyCarol.status.code).toBe(401);
|
|
480
|
+
expect(chatDeleteReplyCarol.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
483
481
|
// Bob invokes the role to delete the chat message
|
|
484
482
|
const chatDelete = yield TestDataGenerator.generateRecordsDelete({
|
|
485
483
|
author: bob,
|
|
@@ -487,7 +485,7 @@ export function testRecordsDeleteHandler() {
|
|
|
487
485
|
protocolRole: 'thread/admin',
|
|
488
486
|
});
|
|
489
487
|
const chatDeleteReply = yield dwn.processMessage(alice.did, chatDelete.message);
|
|
490
|
-
expect(chatDeleteReply.status.code).
|
|
488
|
+
expect(chatDeleteReply.status.code).toBe(202);
|
|
491
489
|
}));
|
|
492
490
|
it('should allow co-delete invoking a root-level role', () => __awaiter(this, void 0, void 0, function* () {
|
|
493
491
|
// scenario: Alice adds Bob as a root-level 'admin' role. She writes a 'chat'.
|
|
@@ -501,7 +499,7 @@ export function testRecordsDeleteHandler() {
|
|
|
501
499
|
protocolDefinition
|
|
502
500
|
});
|
|
503
501
|
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
504
|
-
expect(protocolsConfigureReply.status.code).
|
|
502
|
+
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
505
503
|
// Alice adds Bob as a 'thread/admin' in that thread
|
|
506
504
|
const participantRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
507
505
|
author: alice,
|
|
@@ -510,7 +508,7 @@ export function testRecordsDeleteHandler() {
|
|
|
510
508
|
protocolPath: 'admin',
|
|
511
509
|
});
|
|
512
510
|
const participantRecordReply = yield dwn.processMessage(alice.did, participantRecord.message, { dataStream: participantRecord.dataStream });
|
|
513
|
-
expect(participantRecordReply.status.code).
|
|
511
|
+
expect(participantRecordReply.status.code).toBe(202);
|
|
514
512
|
// Alice writes a chat message in that thread
|
|
515
513
|
const chatRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
516
514
|
author: alice,
|
|
@@ -519,15 +517,15 @@ export function testRecordsDeleteHandler() {
|
|
|
519
517
|
protocolPath: 'chat',
|
|
520
518
|
});
|
|
521
519
|
const chatRecordReply = yield dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
|
|
522
|
-
expect(chatRecordReply.status.code).
|
|
520
|
+
expect(chatRecordReply.status.code).toBe(202);
|
|
523
521
|
// Carol is unable to delete the chat message
|
|
524
522
|
const chatDeleteCarol = yield TestDataGenerator.generateRecordsDelete({
|
|
525
523
|
author: carol,
|
|
526
524
|
recordId: chatRecord.message.recordId,
|
|
527
525
|
});
|
|
528
526
|
const chatDeleteCarolReply = yield dwn.processMessage(alice.did, chatDeleteCarol.message);
|
|
529
|
-
expect(chatDeleteCarolReply.status.code).
|
|
530
|
-
expect(chatDeleteCarolReply.status.detail).
|
|
527
|
+
expect(chatDeleteCarolReply.status.code).toBe(401);
|
|
528
|
+
expect(chatDeleteCarolReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
531
529
|
// Bob invokes the role to delete the chat message
|
|
532
530
|
const chatDelete = yield TestDataGenerator.generateRecordsDelete({
|
|
533
531
|
author: bob,
|
|
@@ -535,7 +533,7 @@ export function testRecordsDeleteHandler() {
|
|
|
535
533
|
protocolRole: 'admin',
|
|
536
534
|
});
|
|
537
535
|
const chatDeleteReply = yield dwn.processMessage(alice.did, chatDelete.message);
|
|
538
|
-
expect(chatDeleteReply.status.code).
|
|
536
|
+
expect(chatDeleteReply.status.code).toBe(202);
|
|
539
537
|
}));
|
|
540
538
|
});
|
|
541
539
|
});
|
|
@@ -547,21 +545,21 @@ export function testRecordsDeleteHandler() {
|
|
|
547
545
|
author: alice,
|
|
548
546
|
});
|
|
549
547
|
const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream: recordsWrite.dataStream });
|
|
550
|
-
expect(recordsWriteReply.status.code).
|
|
548
|
+
expect(recordsWriteReply.status.code).toBe(202);
|
|
551
549
|
const recordsDelete = yield TestDataGenerator.generateRecordsDelete({
|
|
552
550
|
author: bob,
|
|
553
551
|
recordId: recordsWrite.message.recordId,
|
|
554
552
|
});
|
|
555
553
|
const recordsDeleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
|
|
556
|
-
expect(recordsDeleteReply.status.code).
|
|
557
|
-
expect(recordsDeleteReply.status.detail).
|
|
554
|
+
expect(recordsDeleteReply.status.code).toBe(401);
|
|
555
|
+
expect(recordsDeleteReply.status.detail).toContain(DwnErrorCode.RecordsDeleteAuthorizationFailed);
|
|
558
556
|
}));
|
|
559
557
|
it('should index additional properties from the RecordsWrite being deleted', () => __awaiter(this, void 0, void 0, function* () {
|
|
560
558
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
561
559
|
// initial write
|
|
562
560
|
const initialWriteData = yield TestDataGenerator.generateRecordsWrite({ author: alice, schema: 'testSchema' });
|
|
563
561
|
const initialWriteReply = yield dwn.processMessage(alice.did, initialWriteData.message, { dataStream: initialWriteData.dataStream });
|
|
564
|
-
expect(initialWriteReply.status.code).
|
|
562
|
+
expect(initialWriteReply.status.code).toBe(202);
|
|
565
563
|
// generate subsequent write and delete with the delete having an earlier timestamp
|
|
566
564
|
// NOTE: creating RecordsDelete first ensures it has an earlier `messageTimestamp` time
|
|
567
565
|
const recordsDelete = yield RecordsDelete.create({
|
|
@@ -570,62 +568,61 @@ export function testRecordsDeleteHandler() {
|
|
|
570
568
|
});
|
|
571
569
|
const deleteMessageCid = yield Message.getCid(recordsDelete.message);
|
|
572
570
|
const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
|
|
573
|
-
expect(deleteReply.status.code).
|
|
571
|
+
expect(deleteReply.status.code).toBe(202);
|
|
574
572
|
// message store
|
|
575
573
|
const { messages } = yield messageStore.query(alice.did, [{ schema: normalizeSchemaUrl('testSchema'), method: DwnMethodName.Delete }]);
|
|
576
|
-
expect(messages.length).
|
|
577
|
-
expect(yield Message.getCid(messages[0])).
|
|
578
|
-
//
|
|
579
|
-
const
|
|
580
|
-
expect(events
|
|
581
|
-
expect(events[0]).to.equal(deleteMessageCid);
|
|
574
|
+
expect(messages.length).toBe(1);
|
|
575
|
+
expect(yield Message.getCid(messages[0])).toBe(deleteMessageCid);
|
|
576
|
+
// state index
|
|
577
|
+
const events = yield stateIndex.getLeaves(alice.did, []);
|
|
578
|
+
expect(events).toContain(deleteMessageCid);
|
|
582
579
|
}));
|
|
583
|
-
describe('
|
|
580
|
+
describe('state index', () => {
|
|
584
581
|
it('should include RecordsDelete event and keep initial RecordsWrite event', () => __awaiter(this, void 0, void 0, function* () {
|
|
585
582
|
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
586
583
|
const { message, dataStream } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
|
|
587
584
|
const writeReply = yield dwn.processMessage(alice.did, message, { dataStream });
|
|
588
|
-
expect(writeReply.status.code).
|
|
585
|
+
expect(writeReply.status.code).toBe(202);
|
|
589
586
|
const recordsDelete = yield RecordsDelete.create({
|
|
590
587
|
recordId: message.recordId,
|
|
591
588
|
signer: Jws.createSigner(alice)
|
|
592
589
|
});
|
|
593
590
|
const deleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
|
|
594
|
-
expect(deleteReply.status.code).
|
|
595
|
-
const
|
|
596
|
-
expect(events.length).
|
|
591
|
+
expect(deleteReply.status.code).toBe(202);
|
|
592
|
+
const events = yield stateIndex.getLeaves(alice.did, []);
|
|
593
|
+
expect(events.length).toBe(2);
|
|
597
594
|
const writeMessageCid = yield Message.getCid(message);
|
|
598
595
|
const deleteMessageCid = yield Message.getCid(recordsDelete.message);
|
|
599
596
|
const expectedMessageCids = new Set([writeMessageCid, deleteMessageCid]);
|
|
600
597
|
for (const messageCid of events) {
|
|
601
598
|
expectedMessageCids.delete(messageCid);
|
|
602
599
|
}
|
|
603
|
-
expect(expectedMessageCids.size).
|
|
600
|
+
expect(expectedMessageCids.size).toBe(0);
|
|
604
601
|
}));
|
|
605
602
|
it('should only keep first write and delete when subsequent writes happen', () => __awaiter(this, void 0, void 0, function* () {
|
|
606
603
|
const { message, author, dataStream, recordsWrite } = yield TestDataGenerator.generateRecordsWrite();
|
|
607
604
|
TestStubGenerator.stubDidResolver(didResolver, [author]);
|
|
608
605
|
const reply = yield dwn.processMessage(author.did, message, { dataStream });
|
|
609
|
-
expect(reply.status.code).
|
|
606
|
+
expect(reply.status.code).toBe(202);
|
|
610
607
|
const newWrite = yield RecordsWrite.createFrom({
|
|
611
608
|
recordsWriteMessage: recordsWrite.message,
|
|
612
609
|
published: true,
|
|
613
610
|
signer: Jws.createSigner(author)
|
|
614
611
|
});
|
|
615
612
|
const newWriteReply = yield dwn.processMessage(author.did, newWrite.message);
|
|
616
|
-
expect(newWriteReply.status.code).
|
|
613
|
+
expect(newWriteReply.status.code).toBe(202);
|
|
617
614
|
const recordsDelete = yield RecordsDelete.create({
|
|
618
615
|
recordId: message.recordId,
|
|
619
616
|
signer: Jws.createSigner(author)
|
|
620
617
|
});
|
|
621
618
|
const deleteReply = yield dwn.processMessage(author.did, recordsDelete.message);
|
|
622
|
-
expect(deleteReply.status.code).
|
|
623
|
-
const
|
|
624
|
-
expect(events.length).
|
|
619
|
+
expect(deleteReply.status.code).toBe(202);
|
|
620
|
+
const events = yield stateIndex.getLeaves(author.did, []);
|
|
621
|
+
expect(events.length).toBe(2);
|
|
625
622
|
const deletedMessageCid = yield Message.getCid(newWrite.message);
|
|
626
623
|
for (const messageCid of events) {
|
|
627
624
|
if (messageCid === deletedMessageCid) {
|
|
628
|
-
|
|
625
|
+
throw new Error(`${messageCid} should not exist`);
|
|
629
626
|
}
|
|
630
627
|
}
|
|
631
628
|
}));
|
|
@@ -643,7 +640,7 @@ export function testRecordsDeleteHandler() {
|
|
|
643
640
|
const resumableTaskManagerStub = sinon.createStubInstance(ResumableTaskManager);
|
|
644
641
|
const recordsDeleteHandler = new RecordsDeleteHandler(didResolver, messageStoreStub, resumableTaskManagerStub);
|
|
645
642
|
const reply = yield recordsDeleteHandler.handle({ tenant, message });
|
|
646
|
-
expect(reply.status.code).
|
|
643
|
+
expect(reply.status.code).toBe(401);
|
|
647
644
|
}));
|
|
648
645
|
it('should return 400 if fail parsing the message', () => __awaiter(this, void 0, void 0, function* () {
|
|
649
646
|
const { author, message } = yield TestDataGenerator.generateRecordsDelete();
|
|
@@ -655,7 +652,7 @@ export function testRecordsDeleteHandler() {
|
|
|
655
652
|
// stub the `parse()` function to throw an error
|
|
656
653
|
sinon.stub(RecordsDelete, 'parse').throws('anyError');
|
|
657
654
|
const reply = yield recordsDeleteHandler.handle({ tenant, message });
|
|
658
|
-
expect(reply.status.code).
|
|
655
|
+
expect(reply.status.code).toBe(400);
|
|
659
656
|
}));
|
|
660
657
|
});
|
|
661
658
|
}
|