@enbox/dwn-sdk-js 0.0.1
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/LICENSE +201 -0
- package/README.md +352 -0
- package/dist/bundles/dwn.js +153 -0
- package/dist/cjs/index.js +36749 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/generated/precompiled-validators.js +11973 -0
- package/dist/esm/generated/precompiled-validators.js.map +1 -0
- package/dist/esm/json-schemas/definitions.json +23 -0
- package/dist/esm/src/core/abstract-message.js +47 -0
- package/dist/esm/src/core/abstract-message.js.map +1 -0
- package/dist/esm/src/core/auth.js +39 -0
- package/dist/esm/src/core/auth.js.map +1 -0
- package/dist/esm/src/core/dwn-constant.js +10 -0
- package/dist/esm/src/core/dwn-constant.js.map +1 -0
- package/dist/esm/src/core/dwn-error.js +169 -0
- package/dist/esm/src/core/dwn-error.js.map +1 -0
- package/dist/esm/src/core/grant-authorization.js +97 -0
- package/dist/esm/src/core/grant-authorization.js.map +1 -0
- package/dist/esm/src/core/message-reply.js +5 -0
- package/dist/esm/src/core/message-reply.js.map +1 -0
- package/dist/esm/src/core/message.js +233 -0
- package/dist/esm/src/core/message.js.map +1 -0
- package/dist/esm/src/core/messages-grant-authorization.js +101 -0
- package/dist/esm/src/core/messages-grant-authorization.js.map +1 -0
- package/dist/esm/src/core/protocol-authorization.js +608 -0
- package/dist/esm/src/core/protocol-authorization.js.map +1 -0
- package/dist/esm/src/core/protocols-grant-authorization.js +66 -0
- package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -0
- package/dist/esm/src/core/records-grant-authorization.js +132 -0
- package/dist/esm/src/core/records-grant-authorization.js.map +1 -0
- package/dist/esm/src/core/resumable-task-manager.js +109 -0
- package/dist/esm/src/core/resumable-task-manager.js.map +1 -0
- package/dist/esm/src/core/tenant-gate.js +20 -0
- package/dist/esm/src/core/tenant-gate.js.map +1 -0
- package/dist/esm/src/dwn.js +164 -0
- package/dist/esm/src/dwn.js.map +1 -0
- package/dist/esm/src/enums/dwn-interface-method.js +16 -0
- package/dist/esm/src/enums/dwn-interface-method.js.map +1 -0
- package/dist/esm/src/event-log/event-emitter-stream.js +60 -0
- package/dist/esm/src/event-log/event-emitter-stream.js.map +1 -0
- package/dist/esm/src/event-log/event-log-level.js +63 -0
- package/dist/esm/src/event-log/event-log-level.js.map +1 -0
- package/dist/esm/src/handlers/messages-query.js +71 -0
- package/dist/esm/src/handlers/messages-query.js.map +1 -0
- package/dist/esm/src/handlers/messages-read.js +102 -0
- package/dist/esm/src/handlers/messages-read.js.map +1 -0
- package/dist/esm/src/handlers/messages-subscribe.js +81 -0
- package/dist/esm/src/handlers/messages-subscribe.js.map +1 -0
- package/dist/esm/src/handlers/protocols-configure.js +133 -0
- package/dist/esm/src/handlers/protocols-configure.js.map +1 -0
- package/dist/esm/src/handlers/protocols-query.js +73 -0
- package/dist/esm/src/handlers/protocols-query.js.map +1 -0
- package/dist/esm/src/handlers/records-delete.js +107 -0
- package/dist/esm/src/handlers/records-delete.js.map +1 -0
- package/dist/esm/src/handlers/records-query.js +210 -0
- package/dist/esm/src/handlers/records-query.js.map +1 -0
- package/dist/esm/src/handlers/records-read.js +169 -0
- package/dist/esm/src/handlers/records-read.js.map +1 -0
- package/dist/esm/src/handlers/records-subscribe.js +172 -0
- package/dist/esm/src/handlers/records-subscribe.js.map +1 -0
- package/dist/esm/src/handlers/records-write.js +344 -0
- package/dist/esm/src/handlers/records-write.js.map +1 -0
- package/dist/esm/src/index.js +49 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/interfaces/messages-query.js +53 -0
- package/dist/esm/src/interfaces/messages-query.js.map +1 -0
- package/dist/esm/src/interfaces/messages-read.js +61 -0
- package/dist/esm/src/interfaces/messages-read.js.map +1 -0
- package/dist/esm/src/interfaces/messages-subscribe.js +58 -0
- package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-configure.js +271 -0
- package/dist/esm/src/interfaces/protocols-configure.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-query.js +84 -0
- package/dist/esm/src/interfaces/protocols-query.js.map +1 -0
- package/dist/esm/src/interfaces/records-delete.js +89 -0
- package/dist/esm/src/interfaces/records-delete.js.map +1 -0
- package/dist/esm/src/interfaces/records-query.js +104 -0
- package/dist/esm/src/interfaces/records-query.js.map +1 -0
- package/dist/esm/src/interfaces/records-read.js +84 -0
- package/dist/esm/src/interfaces/records-read.js.map +1 -0
- package/dist/esm/src/interfaces/records-subscribe.js +91 -0
- package/dist/esm/src/interfaces/records-subscribe.js.map +1 -0
- package/dist/esm/src/interfaces/records-write.js +795 -0
- package/dist/esm/src/interfaces/records-write.js.map +1 -0
- package/dist/esm/src/jose/algorithms/signing/ed25519.js +51 -0
- package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -0
- package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js +20 -0
- package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -0
- package/dist/esm/src/jose/jws/general/builder.js +47 -0
- package/dist/esm/src/jose/jws/general/builder.js.map +1 -0
- package/dist/esm/src/jose/jws/general/verifier.js +97 -0
- package/dist/esm/src/jose/jws/general/verifier.js.map +1 -0
- package/dist/esm/src/protocols/permission-grant.js +39 -0
- package/dist/esm/src/protocols/permission-grant.js.map +1 -0
- package/dist/esm/src/protocols/permission-request.js +35 -0
- package/dist/esm/src/protocols/permission-request.js.map +1 -0
- package/dist/esm/src/protocols/permissions.js +357 -0
- package/dist/esm/src/protocols/permissions.js.map +1 -0
- package/dist/esm/src/schema-validator.js +37 -0
- package/dist/esm/src/schema-validator.js.map +1 -0
- package/dist/esm/src/store/blockstore-level.js +187 -0
- package/dist/esm/src/store/blockstore-level.js.map +1 -0
- package/dist/esm/src/store/blockstore-mock.js +168 -0
- package/dist/esm/src/store/blockstore-mock.js.map +1 -0
- package/dist/esm/src/store/data-store-level.js +136 -0
- package/dist/esm/src/store/data-store-level.js.map +1 -0
- package/dist/esm/src/store/index-level.js +660 -0
- package/dist/esm/src/store/index-level.js.map +1 -0
- package/dist/esm/src/store/level-wrapper.js +305 -0
- package/dist/esm/src/store/level-wrapper.js.map +1 -0
- package/dist/esm/src/store/message-store-level.js +159 -0
- package/dist/esm/src/store/message-store-level.js.map +1 -0
- package/dist/esm/src/store/resumable-task-store-level.js +131 -0
- package/dist/esm/src/store/resumable-task-store-level.js.map +1 -0
- package/dist/esm/src/store/storage-controller.js +184 -0
- package/dist/esm/src/store/storage-controller.js.map +1 -0
- package/dist/esm/src/types/cache.js +2 -0
- package/dist/esm/src/types/cache.js.map +1 -0
- package/dist/esm/src/types/data-store.js +2 -0
- package/dist/esm/src/types/data-store.js.map +1 -0
- package/dist/esm/src/types/event-log.js +2 -0
- package/dist/esm/src/types/event-log.js.map +1 -0
- package/dist/esm/src/types/jose-types.js +2 -0
- package/dist/esm/src/types/jose-types.js.map +1 -0
- package/dist/esm/src/types/jws-types.js +2 -0
- package/dist/esm/src/types/jws-types.js.map +1 -0
- package/dist/esm/src/types/message-interface.js +2 -0
- package/dist/esm/src/types/message-interface.js.map +1 -0
- package/dist/esm/src/types/message-store.js +2 -0
- package/dist/esm/src/types/message-store.js.map +1 -0
- package/dist/esm/src/types/message-types.js +3 -0
- package/dist/esm/src/types/message-types.js.map +1 -0
- package/dist/esm/src/types/messages-types.js +2 -0
- package/dist/esm/src/types/messages-types.js.map +1 -0
- package/dist/esm/src/types/method-handler.js +2 -0
- package/dist/esm/src/types/method-handler.js.map +1 -0
- package/dist/esm/src/types/permission-types.js +6 -0
- package/dist/esm/src/types/permission-types.js.map +1 -0
- package/dist/esm/src/types/protocols-types.js +20 -0
- package/dist/esm/src/types/protocols-types.js.map +1 -0
- package/dist/esm/src/types/query-types.js +6 -0
- package/dist/esm/src/types/query-types.js.map +1 -0
- package/dist/esm/src/types/records-types.js +8 -0
- package/dist/esm/src/types/records-types.js.map +1 -0
- package/dist/esm/src/types/resumable-task-store.js +2 -0
- package/dist/esm/src/types/resumable-task-store.js.map +1 -0
- package/dist/esm/src/types/signer.js +2 -0
- package/dist/esm/src/types/signer.js.map +1 -0
- package/dist/esm/src/types/subscriptions.js +2 -0
- package/dist/esm/src/types/subscriptions.js.map +1 -0
- package/dist/esm/src/utils/abort.js +40 -0
- package/dist/esm/src/utils/abort.js.map +1 -0
- package/dist/esm/src/utils/array.js +72 -0
- package/dist/esm/src/utils/array.js.map +1 -0
- package/dist/esm/src/utils/cid.js +130 -0
- package/dist/esm/src/utils/cid.js.map +1 -0
- package/dist/esm/src/utils/data-stream.js +100 -0
- package/dist/esm/src/utils/data-stream.js.map +1 -0
- package/dist/esm/src/utils/encoder.js +45 -0
- package/dist/esm/src/utils/encoder.js.map +1 -0
- package/dist/esm/src/utils/encryption.js +128 -0
- package/dist/esm/src/utils/encryption.js.map +1 -0
- package/dist/esm/src/utils/filter.js +229 -0
- package/dist/esm/src/utils/filter.js.map +1 -0
- package/dist/esm/src/utils/hd-key.js +114 -0
- package/dist/esm/src/utils/hd-key.js.map +1 -0
- package/dist/esm/src/utils/jws.js +89 -0
- package/dist/esm/src/utils/jws.js.map +1 -0
- package/dist/esm/src/utils/memory-cache.js +41 -0
- package/dist/esm/src/utils/memory-cache.js.map +1 -0
- package/dist/esm/src/utils/messages.js +84 -0
- package/dist/esm/src/utils/messages.js.map +1 -0
- package/dist/esm/src/utils/object.js +40 -0
- package/dist/esm/src/utils/object.js.map +1 -0
- package/dist/esm/src/utils/private-key-signer.js +43 -0
- package/dist/esm/src/utils/private-key-signer.js.map +1 -0
- package/dist/esm/src/utils/protocols.js +51 -0
- package/dist/esm/src/utils/protocols.js.map +1 -0
- package/dist/esm/src/utils/records.js +454 -0
- package/dist/esm/src/utils/records.js.map +1 -0
- package/dist/esm/src/utils/secp256k1.js +166 -0
- package/dist/esm/src/utils/secp256k1.js.map +1 -0
- package/dist/esm/src/utils/secp256r1.js +120 -0
- package/dist/esm/src/utils/secp256r1.js.map +1 -0
- package/dist/esm/src/utils/string.js +16 -0
- package/dist/esm/src/utils/string.js.map +1 -0
- package/dist/esm/src/utils/time.js +85 -0
- package/dist/esm/src/utils/time.js.map +1 -0
- package/dist/esm/src/utils/url.js +62 -0
- package/dist/esm/src/utils/url.js.map +1 -0
- package/dist/esm/tests/core/auth.spec.js +22 -0
- package/dist/esm/tests/core/auth.spec.js.map +1 -0
- package/dist/esm/tests/core/message-reply.spec.js +16 -0
- package/dist/esm/tests/core/message-reply.spec.js.map +1 -0
- package/dist/esm/tests/core/message.spec.js +146 -0
- package/dist/esm/tests/core/message.spec.js.map +1 -0
- package/dist/esm/tests/core/protocol-authorization.spec.js +48 -0
- package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -0
- package/dist/esm/tests/dwn.spec.js +166 -0
- package/dist/esm/tests/dwn.spec.js.map +1 -0
- package/dist/esm/tests/event-log/event-emitter-stream.spec.js +78 -0
- package/dist/esm/tests/event-log/event-emitter-stream.spec.js.map +1 -0
- package/dist/esm/tests/event-log/event-log-level.spec.js +44 -0
- package/dist/esm/tests/event-log/event-log-level.spec.js.map +1 -0
- package/dist/esm/tests/event-log/event-log.spec.js +236 -0
- package/dist/esm/tests/event-log/event-log.spec.js.map +1 -0
- package/dist/esm/tests/event-log/event-stream.spec.js +125 -0
- package/dist/esm/tests/event-log/event-stream.spec.js.map +1 -0
- package/dist/esm/tests/features/author-delegated-grant.spec.js +1273 -0
- package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -0
- package/dist/esm/tests/features/owner-delegated-grant.spec.js +584 -0
- package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -0
- package/dist/esm/tests/features/owner-signature.spec.js +192 -0
- package/dist/esm/tests/features/owner-signature.spec.js.map +1 -0
- package/dist/esm/tests/features/permissions.spec.js +815 -0
- package/dist/esm/tests/features/permissions.spec.js.map +1 -0
- package/dist/esm/tests/features/protocol-create-action.spec.js +248 -0
- package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -0
- package/dist/esm/tests/features/protocol-delete-action.spec.js +492 -0
- package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -0
- package/dist/esm/tests/features/protocol-update-action.spec.js +572 -0
- package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -0
- package/dist/esm/tests/features/records-prune.spec.js +812 -0
- package/dist/esm/tests/features/records-prune.spec.js.map +1 -0
- package/dist/esm/tests/features/records-tags.spec.js +2516 -0
- package/dist/esm/tests/features/records-tags.spec.js.map +1 -0
- package/dist/esm/tests/features/resumable-tasks.spec.js +349 -0
- package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -0
- package/dist/esm/tests/handlers/messages-query.spec.js +349 -0
- package/dist/esm/tests/handlers/messages-query.spec.js.map +1 -0
- package/dist/esm/tests/handlers/messages-read.spec.js +647 -0
- package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -0
- package/dist/esm/tests/handlers/messages-subscribe.spec.js +432 -0
- package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -0
- package/dist/esm/tests/handlers/protocols-configure.spec.js +608 -0
- package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -0
- package/dist/esm/tests/handlers/protocols-query.spec.js +454 -0
- package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-delete.spec.js +662 -0
- package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-query.spec.js +2695 -0
- package/dist/esm/tests/handlers/records-query.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-read.spec.js +1724 -0
- package/dist/esm/tests/handlers/records-read.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-subscribe.spec.js +684 -0
- package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-write.spec.js +3637 -0
- package/dist/esm/tests/handlers/records-write.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/messages-get.spec.js +78 -0
- package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js +30 -0
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/messagess-query.spec.js +127 -0
- package/dist/esm/tests/interfaces/messagess-query.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/protocols-configure.spec.js +489 -0
- package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/protocols-query.spec.js +46 -0
- package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-delete.spec.js +39 -0
- package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-query.spec.js +85 -0
- package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-read.spec.js +62 -0
- package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-subscribe.spec.js +72 -0
- package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-write.spec.js +423 -0
- package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -0
- package/dist/esm/tests/jose/jws/general.spec.js +243 -0
- package/dist/esm/tests/jose/jws/general.spec.js.map +1 -0
- package/dist/esm/tests/protocols/permission-request.spec.js +40 -0
- package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -0
- package/dist/esm/tests/protocols/permissions.spec.js +123 -0
- package/dist/esm/tests/protocols/permissions.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/aggregator.spec.js +670 -0
- package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/deleted-record.spec.js +102 -0
- package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +220 -0
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/messages-query.spec.js +395 -0
- package/dist/esm/tests/scenarios/messages-query.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/nested-roles.spec.js +300 -0
- package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/subscriptions.spec.js +886 -0
- package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -0
- package/dist/esm/tests/store/blockstore-mock.spec.js +192 -0
- package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -0
- package/dist/esm/tests/store/data-store-level.spec.js +146 -0
- package/dist/esm/tests/store/data-store-level.spec.js.map +1 -0
- package/dist/esm/tests/store/index-level.spec.js +1208 -0
- package/dist/esm/tests/store/index-level.spec.js.map +1 -0
- package/dist/esm/tests/store/message-store-level.spec.js +48 -0
- package/dist/esm/tests/store/message-store-level.spec.js.map +1 -0
- package/dist/esm/tests/store/message-store.spec.js +404 -0
- package/dist/esm/tests/store/message-store.spec.js.map +1 -0
- package/dist/esm/tests/store-dependent-tests.spec.js +5 -0
- package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -0
- package/dist/esm/tests/test-event-stream.js +25 -0
- package/dist/esm/tests/test-event-stream.js.map +1 -0
- package/dist/esm/tests/test-stores.js +45 -0
- package/dist/esm/tests/test-stores.js.map +1 -0
- package/dist/esm/tests/test-suite.js +88 -0
- package/dist/esm/tests/test-suite.js.map +1 -0
- package/dist/esm/tests/utils/cid.spec.js +80 -0
- package/dist/esm/tests/utils/cid.spec.js.map +1 -0
- package/dist/esm/tests/utils/data-stream.spec.js +27 -0
- package/dist/esm/tests/utils/data-stream.spec.js.map +1 -0
- package/dist/esm/tests/utils/encryption.spec.js +148 -0
- package/dist/esm/tests/utils/encryption.spec.js.map +1 -0
- package/dist/esm/tests/utils/filters.spec.js +295 -0
- package/dist/esm/tests/utils/filters.spec.js.map +1 -0
- package/dist/esm/tests/utils/hd-key.spec.js +35 -0
- package/dist/esm/tests/utils/hd-key.spec.js.map +1 -0
- package/dist/esm/tests/utils/jws.spec.js +8 -0
- package/dist/esm/tests/utils/jws.spec.js.map +1 -0
- package/dist/esm/tests/utils/memory-cache.spec.js +35 -0
- package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -0
- package/dist/esm/tests/utils/messages.spec.js +101 -0
- package/dist/esm/tests/utils/messages.spec.js.map +1 -0
- package/dist/esm/tests/utils/object.spec.js +36 -0
- package/dist/esm/tests/utils/object.spec.js.map +1 -0
- package/dist/esm/tests/utils/poller.js +49 -0
- package/dist/esm/tests/utils/poller.js.map +1 -0
- package/dist/esm/tests/utils/private-key-signer.spec.js +44 -0
- package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -0
- package/dist/esm/tests/utils/records.spec.js +53 -0
- package/dist/esm/tests/utils/records.spec.js.map +1 -0
- package/dist/esm/tests/utils/secp256k1.spec.js +50 -0
- package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -0
- package/dist/esm/tests/utils/secp256r1.spec.js +56 -0
- package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -0
- package/dist/esm/tests/utils/test-data-generator.js +643 -0
- package/dist/esm/tests/utils/test-data-generator.js.map +1 -0
- package/dist/esm/tests/utils/test-stub-generator.js +39 -0
- package/dist/esm/tests/utils/test-stub-generator.js.map +1 -0
- package/dist/esm/tests/utils/time.spec.js +64 -0
- package/dist/esm/tests/utils/time.spec.js.map +1 -0
- package/dist/esm/tests/utils/url.spec.js +43 -0
- package/dist/esm/tests/utils/url.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js +33 -0
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +50 -0
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +36 -0
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +82 -0
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +75 -0
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +148 -0
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +421 -0
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -0
- package/dist/esm/tests/vectors/protocol-definitions/anyone-collaborate.json +21 -0
- package/dist/esm/tests/vectors/protocol-definitions/author-can.json +33 -0
- package/dist/esm/tests/vectors/protocol-definitions/chat.json +70 -0
- package/dist/esm/tests/vectors/protocol-definitions/credential-issuance.json +41 -0
- package/dist/esm/tests/vectors/protocol-definitions/dex.json +58 -0
- package/dist/esm/tests/vectors/protocol-definitions/email.json +62 -0
- package/dist/esm/tests/vectors/protocol-definitions/free-for-all.json +45 -0
- package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +48 -0
- package/dist/esm/tests/vectors/protocol-definitions/message.json +37 -0
- package/dist/esm/tests/vectors/protocol-definitions/minimal.json +10 -0
- package/dist/esm/tests/vectors/protocol-definitions/nested.json +31 -0
- package/dist/esm/tests/vectors/protocol-definitions/private-protocol.json +15 -0
- package/dist/esm/tests/vectors/protocol-definitions/recipient-can.json +33 -0
- package/dist/esm/tests/vectors/protocol-definitions/slack.json +242 -0
- package/dist/esm/tests/vectors/protocol-definitions/social-media.json +106 -0
- package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +70 -0
- package/dist/types/generated/precompiled-validators.d.ts +597 -0
- package/dist/types/generated/precompiled-validators.d.ts.map +1 -0
- package/dist/types/src/core/abstract-message.d.ts +25 -0
- package/dist/types/src/core/abstract-message.d.ts.map +1 -0
- package/dist/types/src/core/auth.d.ts +9 -0
- package/dist/types/src/core/auth.d.ts.map +1 -0
- package/dist/types/src/core/dwn-constant.d.ts +10 -0
- package/dist/types/src/core/dwn-constant.d.ts.map +1 -0
- package/dist/types/src/core/dwn-error.d.ts +164 -0
- package/dist/types/src/core/dwn-error.d.ts.map +1 -0
- package/dist/types/src/core/grant-authorization.d.ts +43 -0
- package/dist/types/src/core/grant-authorization.d.ts.map +1 -0
- package/dist/types/src/core/message-reply.d.ts +32 -0
- package/dist/types/src/core/message-reply.d.ts.map +1 -0
- package/dist/types/src/core/message.d.ts +94 -0
- package/dist/types/src/core/message.d.ts.map +1 -0
- package/dist/types/src/core/messages-grant-authorization.d.ts +34 -0
- package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -0
- package/dist/types/src/core/protocol-authorization.d.ts +103 -0
- package/dist/types/src/core/protocol-authorization.d.ts.map +1 -0
- package/dist/types/src/core/protocols-grant-authorization.d.ts +31 -0
- package/dist/types/src/core/protocols-grant-authorization.d.ts.map +1 -0
- package/dist/types/src/core/records-grant-authorization.d.ts +60 -0
- package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -0
- package/dist/types/src/core/resumable-task-manager.d.ts +43 -0
- package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -0
- package/dist/types/src/core/tenant-gate.d.ts +29 -0
- package/dist/types/src/core/tenant-gate.d.ts.map +1 -0
- package/dist/types/src/dwn.d.ts +85 -0
- package/dist/types/src/dwn.d.ts.map +1 -0
- package/dist/types/src/enums/dwn-interface-method.d.ts +14 -0
- package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -0
- package/dist/types/src/event-log/event-emitter-stream.d.ts +23 -0
- package/dist/types/src/event-log/event-emitter-stream.d.ts.map +1 -0
- package/dist/types/src/event-log/event-log-level.d.ts +35 -0
- package/dist/types/src/event-log/event-log-level.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-query.d.ts +17 -0
- package/dist/types/src/handlers/messages-query.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-read.d.ts +22 -0
- package/dist/types/src/handlers/messages-read.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-subscribe.d.ts +18 -0
- package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -0
- package/dist/types/src/handlers/protocols-configure.d.ts +24 -0
- package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -0
- package/dist/types/src/handlers/protocols-query.d.ts +20 -0
- package/dist/types/src/handlers/protocols-query.d.ts.map +1 -0
- package/dist/types/src/handlers/records-delete.d.ts +23 -0
- package/dist/types/src/handlers/records-delete.d.ts.map +1 -0
- package/dist/types/src/handlers/records-query.d.ts +70 -0
- package/dist/types/src/handlers/records-query.d.ts.map +1 -0
- package/dist/types/src/handlers/records-read.d.ts +20 -0
- package/dist/types/src/handlers/records-read.d.ts.map +1 -0
- package/dist/types/src/handlers/records-subscribe.d.ts +62 -0
- package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -0
- package/dist/types/src/handlers/records-write.d.ts +51 -0
- package/dist/types/src/handlers/records-write.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +63 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/interfaces/messages-query.d.ts +16 -0
- package/dist/types/src/interfaces/messages-query.d.ts.map +1 -0
- package/dist/types/src/interfaces/messages-read.d.ts +20 -0
- package/dist/types/src/interfaces/messages-read.d.ts.map +1 -0
- package/dist/types/src/interfaces/messages-subscribe.d.ts +20 -0
- package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -0
- package/dist/types/src/interfaces/protocols-configure.d.ts +40 -0
- package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -0
- package/dist/types/src/interfaces/protocols-query.d.ts +17 -0
- package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-delete.d.ts +34 -0
- package/dist/types/src/interfaces/records-delete.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-query.d.ts +31 -0
- package/dist/types/src/interfaces/records-query.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-read.d.ts +36 -0
- package/dist/types/src/interfaces/records-read.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-subscribe.d.ts +27 -0
- package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-write.d.ts +309 -0
- package/dist/types/src/interfaces/records-write.d.ts.map +1 -0
- package/dist/types/src/jose/algorithms/signing/ed25519.d.ts +3 -0
- package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -0
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +3 -0
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -0
- package/dist/types/src/jose/jws/general/builder.d.ts +10 -0
- package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -0
- package/dist/types/src/jose/jws/general/verifier.d.ts +32 -0
- package/dist/types/src/jose/jws/general/verifier.d.ts.map +1 -0
- package/dist/types/src/protocols/permission-grant.d.ts +50 -0
- package/dist/types/src/protocols/permission-grant.d.ts.map +1 -0
- package/dist/types/src/protocols/permission-request.d.ts +35 -0
- package/dist/types/src/protocols/permission-request.d.ts.map +1 -0
- package/dist/types/src/protocols/permissions.d.ts +150 -0
- package/dist/types/src/protocols/permissions.d.ts.map +1 -0
- package/dist/types/src/schema-validator.d.ts +8 -0
- package/dist/types/src/schema-validator.d.ts.map +1 -0
- package/dist/types/src/store/blockstore-level.d.ts +34 -0
- package/dist/types/src/store/blockstore-level.d.ts.map +1 -0
- package/dist/types/src/store/blockstore-mock.d.ts +27 -0
- package/dist/types/src/store/blockstore-mock.d.ts.map +1 -0
- package/dist/types/src/store/data-store-level.d.ts +34 -0
- package/dist/types/src/store/data-store-level.d.ts.map +1 -0
- package/dist/types/src/store/index-level.d.ts +171 -0
- package/dist/types/src/store/index-level.d.ts.map +1 -0
- package/dist/types/src/store/level-wrapper.d.ts +48 -0
- package/dist/types/src/store/level-wrapper.d.ts.map +1 -0
- package/dist/types/src/store/message-store-level.d.ts +46 -0
- package/dist/types/src/store/message-store-level.d.ts.map +1 -0
- package/dist/types/src/store/resumable-task-store-level.d.ts +28 -0
- package/dist/types/src/store/resumable-task-store-level.d.ts.map +1 -0
- package/dist/types/src/store/storage-controller.d.ts +46 -0
- package/dist/types/src/store/storage-controller.d.ts.map +1 -0
- package/dist/types/src/types/cache.d.ts +16 -0
- package/dist/types/src/types/cache.d.ts.map +1 -0
- package/dist/types/src/types/data-store.d.ts +57 -0
- package/dist/types/src/types/data-store.d.ts.map +1 -0
- package/dist/types/src/types/event-log.d.ts +52 -0
- package/dist/types/src/types/event-log.d.ts.map +1 -0
- package/dist/types/src/types/jose-types.d.ts +75 -0
- package/dist/types/src/types/jose-types.d.ts.map +1 -0
- package/dist/types/src/types/jws-types.d.ts +27 -0
- package/dist/types/src/types/jws-types.d.ts.map +1 -0
- package/dist/types/src/types/message-interface.d.ts +27 -0
- package/dist/types/src/types/message-interface.d.ts.map +1 -0
- package/dist/types/src/types/message-store.d.ts +42 -0
- package/dist/types/src/types/message-store.d.ts.map +1 -0
- package/dist/types/src/types/message-types.d.ts +116 -0
- package/dist/types/src/types/message-types.d.ts.map +1 -0
- package/dist/types/src/types/messages-types.d.ts +65 -0
- package/dist/types/src/types/messages-types.d.ts.map +1 -0
- package/dist/types/src/types/method-handler.d.ts +19 -0
- package/dist/types/src/types/method-handler.d.ts.map +1 -0
- package/dist/types/src/types/permission-types.d.ts +93 -0
- package/dist/types/src/types/permission-types.d.ts.map +1 -0
- package/dist/types/src/types/protocols-types.d.ts +154 -0
- package/dist/types/src/types/protocols-types.d.ts.map +1 -0
- package/dist/types/src/types/query-types.d.ts +66 -0
- package/dist/types/src/types/query-types.d.ts.map +1 -0
- package/dist/types/src/types/records-types.d.ts +230 -0
- package/dist/types/src/types/records-types.d.ts.map +1 -0
- package/dist/types/src/types/resumable-task-store.d.ts +89 -0
- package/dist/types/src/types/resumable-task-store.d.ts.map +1 -0
- package/dist/types/src/types/signer.d.ts +26 -0
- package/dist/types/src/types/signer.d.ts.map +1 -0
- package/dist/types/src/types/subscriptions.d.ts +30 -0
- package/dist/types/src/types/subscriptions.d.ts.map +1 -0
- package/dist/types/src/utils/abort.d.ts +5 -0
- package/dist/types/src/utils/abort.d.ts.map +1 -0
- package/dist/types/src/utils/array.d.ts +18 -0
- package/dist/types/src/utils/array.d.ts.map +1 -0
- package/dist/types/src/utils/cid.d.ts +30 -0
- package/dist/types/src/utils/cid.d.ts.map +1 -0
- package/dist/types/src/utils/data-stream.d.ts +31 -0
- package/dist/types/src/utils/data-stream.d.ts.map +1 -0
- package/dist/types/src/utils/encoder.d.ts +14 -0
- package/dist/types/src/utils/encoder.d.ts.map +1 -0
- package/dist/types/src/utils/encryption.d.ts +44 -0
- package/dist/types/src/utils/encryption.d.ts.map +1 -0
- package/dist/types/src/utils/filter.d.ts +60 -0
- package/dist/types/src/utils/filter.d.ts.map +1 -0
- package/dist/types/src/utils/hd-key.d.ts +54 -0
- package/dist/types/src/utils/hd-key.d.ts.map +1 -0
- package/dist/types/src/utils/jws.d.ts +39 -0
- package/dist/types/src/utils/jws.d.ts.map +1 -0
- package/dist/types/src/utils/memory-cache.d.ts +15 -0
- package/dist/types/src/utils/memory-cache.d.ts.map +1 -0
- package/dist/types/src/utils/messages.d.ts +27 -0
- package/dist/types/src/utils/messages.d.ts.map +1 -0
- package/dist/types/src/utils/object.d.ts +13 -0
- package/dist/types/src/utils/object.d.ts.map +1 -0
- package/dist/types/src/utils/private-key-signer.d.ts +34 -0
- package/dist/types/src/utils/private-key-signer.d.ts.map +1 -0
- package/dist/types/src/utils/protocols.d.ts +14 -0
- package/dist/types/src/utils/protocols.d.ts.map +1 -0
- package/dist/types/src/utils/records.d.ts +122 -0
- package/dist/types/src/utils/records.d.ts.map +1 -0
- package/dist/types/src/utils/secp256k1.d.ts +59 -0
- package/dist/types/src/utils/secp256k1.d.ts.map +1 -0
- package/dist/types/src/utils/secp256r1.d.ts +39 -0
- package/dist/types/src/utils/secp256r1.d.ts.map +1 -0
- package/dist/types/src/utils/string.d.ts +6 -0
- package/dist/types/src/utils/string.d.ts.map +1 -0
- package/dist/types/src/utils/time.d.ts +50 -0
- package/dist/types/src/utils/time.d.ts.map +1 -0
- package/dist/types/src/utils/url.d.ts +5 -0
- package/dist/types/src/utils/url.d.ts.map +1 -0
- package/dist/types/tests/core/auth.spec.d.ts +2 -0
- package/dist/types/tests/core/auth.spec.d.ts.map +1 -0
- package/dist/types/tests/core/message-reply.spec.d.ts +2 -0
- package/dist/types/tests/core/message-reply.spec.d.ts.map +1 -0
- package/dist/types/tests/core/message.spec.d.ts +2 -0
- package/dist/types/tests/core/message.spec.d.ts.map +1 -0
- package/dist/types/tests/core/protocol-authorization.spec.d.ts +2 -0
- package/dist/types/tests/core/protocol-authorization.spec.d.ts.map +1 -0
- package/dist/types/tests/dwn.spec.d.ts +2 -0
- package/dist/types/tests/dwn.spec.d.ts.map +1 -0
- package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts +2 -0
- package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/event-log/event-log-level.spec.d.ts +2 -0
- package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +1 -0
- package/dist/types/tests/event-log/event-log.spec.d.ts +2 -0
- package/dist/types/tests/event-log/event-log.spec.d.ts.map +1 -0
- package/dist/types/tests/event-log/event-stream.spec.d.ts +2 -0
- package/dist/types/tests/event-log/event-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/features/author-delegated-grant.spec.d.ts +2 -0
- package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -0
- package/dist/types/tests/features/owner-delegated-grant.spec.d.ts +2 -0
- package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -0
- package/dist/types/tests/features/owner-signature.spec.d.ts +2 -0
- package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -0
- package/dist/types/tests/features/permissions.spec.d.ts +2 -0
- package/dist/types/tests/features/permissions.spec.d.ts.map +1 -0
- package/dist/types/tests/features/protocol-create-action.spec.d.ts +2 -0
- package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -0
- package/dist/types/tests/features/protocol-delete-action.spec.d.ts +2 -0
- package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -0
- package/dist/types/tests/features/protocol-update-action.spec.d.ts +2 -0
- package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -0
- package/dist/types/tests/features/records-prune.spec.d.ts +2 -0
- package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -0
- package/dist/types/tests/features/records-tags.spec.d.ts +2 -0
- package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -0
- package/dist/types/tests/features/resumable-tasks.spec.d.ts +2 -0
- package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/messages-query.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-query.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/messages-read.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/messages-subscribe.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/protocols-configure.spec.d.ts +2 -0
- package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/protocols-query.spec.d.ts +2 -0
- package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-delete.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-query.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-read.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-subscribe.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-write.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/messages-get.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/messages-get.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/messages-subscribe.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/messages-subscribe.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/protocols-configure.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/protocols-configure.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/protocols-query.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/protocols-query.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/records-delete.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/records-delete.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/records-query.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/records-query.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/records-read.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/records-read.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/records-subscribe.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/records-subscribe.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/records-write.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/records-write.spec.d.ts.map +1 -0
- package/dist/types/tests/jose/jws/general.spec.d.ts +2 -0
- package/dist/types/tests/jose/jws/general.spec.d.ts.map +1 -0
- package/dist/types/tests/protocols/permission-request.spec.d.ts +2 -0
- package/dist/types/tests/protocols/permission-request.spec.d.ts.map +1 -0
- package/dist/types/tests/protocols/permissions.spec.d.ts +2 -0
- package/dist/types/tests/protocols/permissions.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/aggregator.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/aggregator.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/deleted-record.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/messages-query.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/messages-query.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/nested-roles.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/subscriptions.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -0
- package/dist/types/tests/store/blockstore-mock.spec.d.ts +2 -0
- package/dist/types/tests/store/blockstore-mock.spec.d.ts.map +1 -0
- package/dist/types/tests/store/data-store-level.spec.d.ts +2 -0
- package/dist/types/tests/store/data-store-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/index-level.spec.d.ts +2 -0
- package/dist/types/tests/store/index-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/message-store-level.spec.d.ts +2 -0
- package/dist/types/tests/store/message-store-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/message-store.spec.d.ts +2 -0
- package/dist/types/tests/store/message-store.spec.d.ts.map +1 -0
- package/dist/types/tests/store-dependent-tests.spec.d.ts +2 -0
- package/dist/types/tests/store-dependent-tests.spec.d.ts.map +1 -0
- package/dist/types/tests/test-event-stream.d.ts +22 -0
- package/dist/types/tests/test-event-stream.d.ts.map +1 -0
- package/dist/types/tests/test-stores.d.ts +33 -0
- package/dist/types/tests/test-stores.d.ts.map +1 -0
- package/dist/types/tests/test-suite.d.ts +18 -0
- package/dist/types/tests/test-suite.d.ts.map +1 -0
- package/dist/types/tests/utils/cid.spec.d.ts +2 -0
- package/dist/types/tests/utils/cid.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/data-stream.spec.d.ts +2 -0
- package/dist/types/tests/utils/data-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/encryption.spec.d.ts +2 -0
- package/dist/types/tests/utils/encryption.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/filters.spec.d.ts +2 -0
- package/dist/types/tests/utils/filters.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/hd-key.spec.d.ts +2 -0
- package/dist/types/tests/utils/hd-key.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/jws.spec.d.ts +2 -0
- package/dist/types/tests/utils/jws.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/memory-cache.spec.d.ts +2 -0
- package/dist/types/tests/utils/memory-cache.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/messages.spec.d.ts +2 -0
- package/dist/types/tests/utils/messages.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/object.spec.d.ts +2 -0
- package/dist/types/tests/utils/object.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/poller.d.ts +21 -0
- package/dist/types/tests/utils/poller.d.ts.map +1 -0
- package/dist/types/tests/utils/private-key-signer.spec.d.ts +2 -0
- package/dist/types/tests/utils/private-key-signer.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/records.spec.d.ts +2 -0
- package/dist/types/tests/utils/records.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/secp256k1.spec.d.ts +2 -0
- package/dist/types/tests/utils/secp256k1.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/secp256r1.spec.d.ts +2 -0
- package/dist/types/tests/utils/secp256r1.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/test-data-generator.d.ts +342 -0
- package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -0
- package/dist/types/tests/utils/test-stub-generator.d.ts +16 -0
- package/dist/types/tests/utils/test-stub-generator.d.ts.map +1 -0
- package/dist/types/tests/utils/time.spec.d.ts +2 -0
- package/dist/types/tests/utils/time.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/url.spec.d.ts +2 -0
- package/dist/types/tests/utils/url.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/definitions.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/definitions.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/jwk/general-jwk.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/jwk/general-jwk.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/jwk/public-jwk.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/jwk/public-jwk.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/jwk-verification-method.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/jwk-verification-method.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/protocols/protocols-configure.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/protocols/protocols-configure.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/records/records-query.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/records/records-query.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/records/records-write.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/records/records-write.spec.d.ts.map +1 -0
- package/package.json +167 -0
- package/src/core/abstract-message.ts +62 -0
- package/src/core/auth.ts +36 -0
- package/src/core/dwn-constant.ts +9 -0
- package/src/core/dwn-error.ts +167 -0
- package/src/core/grant-authorization.ts +148 -0
- package/src/core/message-reply.ts +41 -0
- package/src/core/message.ts +259 -0
- package/src/core/messages-grant-authorization.ts +134 -0
- package/src/core/protocol-authorization.ts +903 -0
- package/src/core/protocols-grant-authorization.ts +88 -0
- package/src/core/records-grant-authorization.ts +197 -0
- package/src/core/resumable-task-manager.ts +114 -0
- package/src/core/tenant-gate.ts +33 -0
- package/src/dwn.ts +264 -0
- package/src/enums/dwn-interface-method.ts +14 -0
- package/src/event-log/event-emitter-stream.ts +69 -0
- package/src/event-log/event-log-level.ts +72 -0
- package/src/handlers/messages-query.ts +67 -0
- package/src/handlers/messages-read.ts +103 -0
- package/src/handlers/messages-subscribe.ts +89 -0
- package/src/handlers/protocols-configure.ts +137 -0
- package/src/handlers/protocols-query.ts +82 -0
- package/src/handlers/records-delete.ts +124 -0
- package/src/handlers/records-query.ts +262 -0
- package/src/handlers/records-read.ts +187 -0
- package/src/handlers/records-subscribe.ts +218 -0
- package/src/handlers/records-write.ts +404 -0
- package/src/index.ts +67 -0
- package/src/interfaces/messages-query.ts +60 -0
- package/src/interfaces/messages-read.ts +63 -0
- package/src/interfaces/messages-subscribe.ts +64 -0
- package/src/interfaces/protocols-configure.ts +340 -0
- package/src/interfaces/protocols-query.ts +96 -0
- package/src/interfaces/records-delete.ts +117 -0
- package/src/interfaces/records-query.ts +131 -0
- package/src/interfaces/records-read.ts +100 -0
- package/src/interfaces/records-subscribe.ts +104 -0
- package/src/interfaces/records-write.ts +1072 -0
- package/src/jose/algorithms/signing/ed25519.ts +58 -0
- package/src/jose/algorithms/signing/signature-algorithms.ts +22 -0
- package/src/jose/jws/general/builder.ts +48 -0
- package/src/jose/jws/general/verifier.ts +112 -0
- package/src/protocols/permission-grant.ts +86 -0
- package/src/protocols/permission-request.ts +63 -0
- package/src/protocols/permissions.ts +508 -0
- package/src/schema-validator.ts +46 -0
- package/src/store/blockstore-level.ts +113 -0
- package/src/store/blockstore-mock.ts +80 -0
- package/src/store/data-store-level.ts +120 -0
- package/src/store/index-level.ts +691 -0
- package/src/store/level-wrapper.ts +272 -0
- package/src/store/message-store-level.ts +195 -0
- package/src/store/resumable-task-store-level.ts +120 -0
- package/src/store/storage-controller.ts +240 -0
- package/src/types/cache.ts +16 -0
- package/src/types/data-store.ts +64 -0
- package/src/types/event-log.ts +52 -0
- package/src/types/jose-types.ts +76 -0
- package/src/types/jws-types.ts +28 -0
- package/src/types/message-interface.ts +30 -0
- package/src/types/message-store.ts +57 -0
- package/src/types/message-types.ts +132 -0
- package/src/types/messages-types.ts +77 -0
- package/src/types/method-handler.ts +19 -0
- package/src/types/permission-types.ts +110 -0
- package/src/types/protocols-types.ts +177 -0
- package/src/types/query-types.ts +61 -0
- package/src/types/records-types.ts +263 -0
- package/src/types/resumable-task-store.ts +96 -0
- package/src/types/signer.ts +27 -0
- package/src/types/subscriptions.ts +34 -0
- package/src/utils/abort.ts +31 -0
- package/src/utils/array.ts +39 -0
- package/src/utils/cid.ts +101 -0
- package/src/utils/data-stream.ts +99 -0
- package/src/utils/encoder.ts +54 -0
- package/src/utils/encryption.ts +145 -0
- package/src/utils/filter.ts +245 -0
- package/src/utils/hd-key.ts +126 -0
- package/src/utils/jws.ts +95 -0
- package/src/utils/memory-cache.ts +31 -0
- package/src/utils/messages.ts +109 -0
- package/src/utils/object.ts +43 -0
- package/src/utils/private-key-signer.ts +72 -0
- package/src/utils/protocols.ts +50 -0
- package/src/utils/records.ts +559 -0
- package/src/utils/secp256k1.ts +157 -0
- package/src/utils/secp256r1.ts +142 -0
- package/src/utils/string.ts +13 -0
- package/src/utils/time.ts +78 -0
- package/src/utils/url.ts +65 -0
|
@@ -0,0 +1,812 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chaiAsPromised from 'chai-as-promised';
|
|
11
|
+
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
|
+
import { DwnInterfaceName } from '../../src/enums/dwn-interface-method.js';
|
|
16
|
+
import { Message } from '../../src/core/message.js';
|
|
17
|
+
import { TestDataGenerator } from '../utils/test-data-generator.js';
|
|
18
|
+
import { TestEventStream } from '../test-event-stream.js';
|
|
19
|
+
import { TestStores } from '../test-stores.js';
|
|
20
|
+
import { DataStream, Dwn, DwnConstant, DwnErrorCode, Jws, ProtocolsConfigure, RecordsDelete, RecordsQuery, RecordsWrite, SortDirection } from '../../src/index.js';
|
|
21
|
+
import { DidKey, UniversalResolver } from '@enbox/dids';
|
|
22
|
+
chai.use(chaiAsPromised);
|
|
23
|
+
export function testRecordsPrune() {
|
|
24
|
+
describe('records pruning', () => {
|
|
25
|
+
let didResolver;
|
|
26
|
+
let messageStore;
|
|
27
|
+
let dataStore;
|
|
28
|
+
let resumableTaskStore;
|
|
29
|
+
let eventLog;
|
|
30
|
+
let eventStream;
|
|
31
|
+
let dwn;
|
|
32
|
+
// important to follow the `before` and `after` pattern to initialize and clean the stores in tests
|
|
33
|
+
// so that different test suites can reuse the same backend store for testing
|
|
34
|
+
before(() => __awaiter(this, void 0, void 0, function* () {
|
|
35
|
+
didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
36
|
+
const stores = TestStores.get();
|
|
37
|
+
messageStore = stores.messageStore;
|
|
38
|
+
dataStore = stores.dataStore;
|
|
39
|
+
resumableTaskStore = stores.resumableTaskStore;
|
|
40
|
+
eventLog = stores.eventLog;
|
|
41
|
+
eventStream = TestEventStream.get();
|
|
42
|
+
dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, eventStream, resumableTaskStore });
|
|
43
|
+
}));
|
|
44
|
+
beforeEach(() => __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
|
|
46
|
+
// clean up before each test rather than after so that a test does not depend on other tests to do the clean up
|
|
47
|
+
yield messageStore.clear();
|
|
48
|
+
yield dataStore.clear();
|
|
49
|
+
yield resumableTaskStore.clear();
|
|
50
|
+
yield eventLog.clear();
|
|
51
|
+
}));
|
|
52
|
+
after(() => __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
yield dwn.close();
|
|
54
|
+
}));
|
|
55
|
+
it('should prune all descendants when given RecordsDelete with `prune` set to `true`', () => __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
var _a;
|
|
57
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
58
|
+
// install a protocol with foo <- bar <- baz structure
|
|
59
|
+
const nestedProtocol = nestedProtocolDefinition;
|
|
60
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
61
|
+
definition: nestedProtocol,
|
|
62
|
+
signer: Jws.createSigner(alice)
|
|
63
|
+
});
|
|
64
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
65
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
66
|
+
// writes 2 foos, 2 bars under foo1, and 2 bazes under bar1
|
|
67
|
+
// write 2 foos
|
|
68
|
+
const fooData = TestDataGenerator.randomBytes(100);
|
|
69
|
+
const fooOptions = {
|
|
70
|
+
signer: Jws.createSigner(alice),
|
|
71
|
+
protocol: nestedProtocol.protocol,
|
|
72
|
+
protocolPath: 'foo',
|
|
73
|
+
schema: nestedProtocol.types.foo.schema,
|
|
74
|
+
dataFormat: nestedProtocol.types.foo.dataFormats[0],
|
|
75
|
+
data: fooData
|
|
76
|
+
};
|
|
77
|
+
const foo1 = yield RecordsWrite.create(fooOptions);
|
|
78
|
+
const foo1WriteResponse = yield dwn.processMessage(alice.did, foo1.message, { dataStream: DataStream.fromBytes(fooData) });
|
|
79
|
+
expect(foo1WriteResponse.status.code).equals(202);
|
|
80
|
+
const foo2 = yield RecordsWrite.create(fooOptions);
|
|
81
|
+
const foo2WriteResponse = yield dwn.processMessage(alice.did, foo2.message, { dataStream: DataStream.fromBytes(fooData) });
|
|
82
|
+
expect(foo2WriteResponse.status.code).equals(202);
|
|
83
|
+
// 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
|
+
const barData = TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded + 1);
|
|
85
|
+
const barOptions = {
|
|
86
|
+
signer: Jws.createSigner(alice),
|
|
87
|
+
protocol: nestedProtocol.protocol,
|
|
88
|
+
protocolPath: 'foo/bar',
|
|
89
|
+
schema: nestedProtocol.types.bar.schema,
|
|
90
|
+
dataFormat: nestedProtocol.types.bar.dataFormats[0],
|
|
91
|
+
parentContextId: foo1.message.contextId,
|
|
92
|
+
data: barData
|
|
93
|
+
};
|
|
94
|
+
const bar1 = yield RecordsWrite.create(Object.assign({}, barOptions));
|
|
95
|
+
const bar1WriteResponse = yield dwn.processMessage(alice.did, bar1.message, { dataStream: DataStream.fromBytes(barData) });
|
|
96
|
+
expect(bar1WriteResponse.status.code).equals(202);
|
|
97
|
+
const bar2 = yield RecordsWrite.create(Object.assign({}, barOptions));
|
|
98
|
+
const bar2WriteResponse = yield dwn.processMessage(alice.did, bar2.message, { dataStream: DataStream.fromBytes(barData) });
|
|
99
|
+
expect(bar2WriteResponse.status.code).equals(202);
|
|
100
|
+
// write 2 bazes under bar1, each has more than 1 message associated with the record so we can test multi-message purge
|
|
101
|
+
const bazData = TestDataGenerator.randomBytes(100);
|
|
102
|
+
const bazOptions = {
|
|
103
|
+
signer: Jws.createSigner(alice),
|
|
104
|
+
protocol: nestedProtocol.protocol,
|
|
105
|
+
protocolPath: 'foo/bar/baz',
|
|
106
|
+
schema: nestedProtocol.types.baz.schema,
|
|
107
|
+
dataFormat: nestedProtocol.types.baz.dataFormats[0],
|
|
108
|
+
parentContextId: bar1.message.contextId,
|
|
109
|
+
data: bazData
|
|
110
|
+
};
|
|
111
|
+
const baz1 = yield RecordsWrite.create(Object.assign({}, bazOptions));
|
|
112
|
+
const baz1WriteResponse = yield dwn.processMessage(alice.did, baz1.message, { dataStream: DataStream.fromBytes(bazData) });
|
|
113
|
+
expect(baz1WriteResponse.status.code).equals(202);
|
|
114
|
+
const baz2 = yield RecordsWrite.create(Object.assign({}, bazOptions));
|
|
115
|
+
const baz2WriteResponse = yield dwn.processMessage(alice.did, baz2.message, { dataStream: DataStream.fromBytes(bazData) });
|
|
116
|
+
expect(baz2WriteResponse.status.code).equals(202);
|
|
117
|
+
// make latest state of baz1 a `RecordsWrite`
|
|
118
|
+
const newBaz1Data = TestDataGenerator.randomBytes(100);
|
|
119
|
+
const baz1Update = yield RecordsWrite.createFrom({
|
|
120
|
+
signer: Jws.createSigner(alice),
|
|
121
|
+
recordsWriteMessage: baz1.message,
|
|
122
|
+
data: newBaz1Data
|
|
123
|
+
});
|
|
124
|
+
const baz1UpdateResponse = yield dwn.processMessage(alice.did, baz1Update.message, { dataStream: DataStream.fromBytes(newBaz1Data) });
|
|
125
|
+
expect(baz1UpdateResponse.status.code).equals(202);
|
|
126
|
+
// make latest state of baz2 a `RecordsDelete`
|
|
127
|
+
const baz2Delete = yield RecordsDelete.create({
|
|
128
|
+
signer: Jws.createSigner(alice),
|
|
129
|
+
recordId: baz2.message.recordId
|
|
130
|
+
});
|
|
131
|
+
const baz2DeleteResponse = yield dwn.processMessage(alice.did, baz2Delete.message);
|
|
132
|
+
expect(baz2DeleteResponse.status.code).equals(202);
|
|
133
|
+
// sanity test messages are inserted in message store
|
|
134
|
+
const queryFilter = [{
|
|
135
|
+
interface: DwnInterfaceName.Records,
|
|
136
|
+
protocol: nestedProtocol.protocol
|
|
137
|
+
}];
|
|
138
|
+
const queryResult = yield messageStore.query(alice.did, queryFilter);
|
|
139
|
+
expect(queryResult.messages.length).to.equal(8); // 2 foos, 2 bars, 2 bazes x 2 messages each
|
|
140
|
+
// sanity test events are inserted in event log
|
|
141
|
+
const { events } = yield eventLog.queryEvents(alice.did, queryFilter);
|
|
142
|
+
expect(events.length).to.equal(8);
|
|
143
|
+
// sanity test data is inserted in data store
|
|
144
|
+
const bar1DataGetResult = yield dataStore.get(alice.did, bar1.message.recordId, bar1.message.descriptor.dataCid);
|
|
145
|
+
const bar2DataGetResult = yield dataStore.get(alice.did, bar2.message.recordId, bar2.message.descriptor.dataCid);
|
|
146
|
+
expect(bar1DataGetResult).to.not.be.undefined;
|
|
147
|
+
expect(bar2DataGetResult).to.not.be.undefined;
|
|
148
|
+
// Delete foo1 with prune enabled
|
|
149
|
+
const foo1Delete = yield RecordsDelete.create({
|
|
150
|
+
recordId: foo1.message.recordId,
|
|
151
|
+
prune: true,
|
|
152
|
+
signer: Jws.createSigner(alice)
|
|
153
|
+
});
|
|
154
|
+
const deleteReply = yield dwn.processMessage(alice.did, foo1Delete.message);
|
|
155
|
+
expect(deleteReply.status.code).to.equal(202);
|
|
156
|
+
// verify all bar and baz message are permanently deleted
|
|
157
|
+
const queryResult2 = yield messageStore.query(alice.did, queryFilter, { messageTimestamp: SortDirection.Ascending });
|
|
158
|
+
expect(queryResult2.messages.length).to.equal(3); // foo2 RecordsWrite, foo1 RecordsWrite and RecordsDelete
|
|
159
|
+
expect(queryResult2.messages[0]).to.deep.include(foo1.message);
|
|
160
|
+
expect(queryResult2.messages[1]).to.deep.include(foo2.message);
|
|
161
|
+
expect(queryResult2.messages[2]).to.deep.include(foo1Delete.message);
|
|
162
|
+
// verify all bar and baz events are permanently deleted
|
|
163
|
+
const { events: events2 } = yield eventLog.queryEvents(alice.did, queryFilter);
|
|
164
|
+
expect(events2.length).to.equal(3);
|
|
165
|
+
const foo1RecordsWriteCid = yield Message.getCid(foo1.message);
|
|
166
|
+
const foo2RecordsWriteCid = yield Message.getCid(foo2.message);
|
|
167
|
+
const foo2RecordsDeleteCid = yield Message.getCid(foo1Delete.message);
|
|
168
|
+
expect(events2).to.contain.members([foo1RecordsWriteCid, foo2RecordsWriteCid, foo2RecordsDeleteCid]);
|
|
169
|
+
// verify all bar data are permanently deleted
|
|
170
|
+
const bar1DataGetResult2 = yield dataStore.get(alice.did, bar1.message.recordId, bar1.message.descriptor.dataCid);
|
|
171
|
+
const bar2DataGetResult2 = yield dataStore.get(alice.did, bar2.message.recordId, bar2.message.descriptor.dataCid);
|
|
172
|
+
expect(bar1DataGetResult2).to.be.undefined;
|
|
173
|
+
expect(bar2DataGetResult2).to.be.undefined;
|
|
174
|
+
// sanity test an external query will no longer return the deleted records
|
|
175
|
+
const queryData = yield RecordsQuery.create({
|
|
176
|
+
signer: Jws.createSigner(alice),
|
|
177
|
+
filter: { protocol: nestedProtocol.protocol }
|
|
178
|
+
});
|
|
179
|
+
const reply2 = yield dwn.processMessage(alice.did, queryData.message);
|
|
180
|
+
expect(reply2.status.code).to.equal(200);
|
|
181
|
+
expect((_a = reply2.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(1); // only foo2 is left
|
|
182
|
+
expect(reply2.entries[0]).to.deep.include(foo2.message);
|
|
183
|
+
}));
|
|
184
|
+
it('should allow pruning against a deleted record that is not already pruned', () => __awaiter(this, void 0, void 0, function* () {
|
|
185
|
+
// Scenario:
|
|
186
|
+
// 1. Alice has a record `foo` with a descendent chain
|
|
187
|
+
// 2. Alice deletes the record `foo` WITHOUT prune, leaving the descendants intact
|
|
188
|
+
// 3. Verify that Alice is able to perform a prune on `foo` to delete all its descendants
|
|
189
|
+
var _a, _b, _c;
|
|
190
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
191
|
+
// install a protocol with foo <- bar <- baz structure
|
|
192
|
+
const nestedProtocol = nestedProtocolDefinition;
|
|
193
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
194
|
+
definition: nestedProtocol,
|
|
195
|
+
signer: Jws.createSigner(alice)
|
|
196
|
+
});
|
|
197
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
198
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
199
|
+
// 1. Alice has a record `foo` with a descendent chain
|
|
200
|
+
// write foo <- bar <- baz records
|
|
201
|
+
const fooData = TestDataGenerator.randomBytes(100);
|
|
202
|
+
const fooOptions = {
|
|
203
|
+
signer: Jws.createSigner(alice),
|
|
204
|
+
protocol: nestedProtocol.protocol,
|
|
205
|
+
protocolPath: 'foo',
|
|
206
|
+
schema: nestedProtocol.types.foo.schema,
|
|
207
|
+
dataFormat: nestedProtocol.types.foo.dataFormats[0],
|
|
208
|
+
data: fooData
|
|
209
|
+
};
|
|
210
|
+
const foo = yield RecordsWrite.create(fooOptions);
|
|
211
|
+
const fooWriteResponse = yield dwn.processMessage(alice.did, foo.message, { dataStream: DataStream.fromBytes(fooData) });
|
|
212
|
+
expect(fooWriteResponse.status.code).equals(202);
|
|
213
|
+
const barData = TestDataGenerator.randomBytes(100);
|
|
214
|
+
const barOptions = {
|
|
215
|
+
signer: Jws.createSigner(alice),
|
|
216
|
+
protocol: nestedProtocol.protocol,
|
|
217
|
+
protocolPath: 'foo/bar',
|
|
218
|
+
schema: nestedProtocol.types.bar.schema,
|
|
219
|
+
dataFormat: nestedProtocol.types.bar.dataFormats[0],
|
|
220
|
+
parentContextId: foo.message.contextId,
|
|
221
|
+
data: barData
|
|
222
|
+
};
|
|
223
|
+
const bar = yield RecordsWrite.create(Object.assign({}, barOptions));
|
|
224
|
+
const barWriteResponse = yield dwn.processMessage(alice.did, bar.message, { dataStream: DataStream.fromBytes(barData) });
|
|
225
|
+
expect(barWriteResponse.status.code).equals(202);
|
|
226
|
+
const bazData = TestDataGenerator.randomBytes(100);
|
|
227
|
+
const bazOptions = {
|
|
228
|
+
signer: Jws.createSigner(alice),
|
|
229
|
+
protocol: nestedProtocol.protocol,
|
|
230
|
+
protocolPath: 'foo/bar/baz',
|
|
231
|
+
schema: nestedProtocol.types.baz.schema,
|
|
232
|
+
dataFormat: nestedProtocol.types.baz.dataFormats[0],
|
|
233
|
+
parentContextId: bar.message.contextId,
|
|
234
|
+
data: bazData
|
|
235
|
+
};
|
|
236
|
+
const baz = yield RecordsWrite.create(Object.assign({}, bazOptions));
|
|
237
|
+
const bazWriteResponse = yield dwn.processMessage(alice.did, baz.message, { dataStream: DataStream.fromBytes(bazData) });
|
|
238
|
+
expect(bazWriteResponse.status.code).equals(202);
|
|
239
|
+
// sanity records are inserted in message store
|
|
240
|
+
const queryFilter = [{
|
|
241
|
+
interface: DwnInterfaceName.Records,
|
|
242
|
+
protocol: nestedProtocol.protocol
|
|
243
|
+
}];
|
|
244
|
+
const messagesBeforeDelete = yield messageStore.query(alice.did, queryFilter);
|
|
245
|
+
expect(messagesBeforeDelete.messages.length).to.equal(3);
|
|
246
|
+
// sanity verify RecordsQuery returns no records
|
|
247
|
+
const recordsQuery = yield RecordsQuery.create({
|
|
248
|
+
signer: Jws.createSigner(alice),
|
|
249
|
+
filter: { protocol: nestedProtocol.protocol }
|
|
250
|
+
});
|
|
251
|
+
const recordsQueryBeforeDeleteReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
252
|
+
expect(recordsQueryBeforeDeleteReply.status.code).to.equal(200);
|
|
253
|
+
expect((_a = recordsQueryBeforeDeleteReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(3);
|
|
254
|
+
// 2. Alice deletes the record `foo` WITHOUT prune, leaving the descendants intact
|
|
255
|
+
const fooDelete = yield RecordsDelete.create({
|
|
256
|
+
recordId: foo.message.recordId,
|
|
257
|
+
// prune : true, // intentionally showing that this is a RecordsDelete WITHOUT pruning
|
|
258
|
+
signer: Jws.createSigner(alice)
|
|
259
|
+
});
|
|
260
|
+
const deleteReply = yield dwn.processMessage(alice.did, fooDelete.message);
|
|
261
|
+
expect(deleteReply.status.code).to.equal(202);
|
|
262
|
+
// verify bar and baz messages still exists
|
|
263
|
+
const messagesAfterDelete = yield messageStore.query(alice.did, queryFilter, { messageTimestamp: SortDirection.Ascending });
|
|
264
|
+
expect(messagesAfterDelete.messages.length).to.equal(4); // RecordsWrite for foo, bar, baz, and RecordsDelete for foo
|
|
265
|
+
// sanity verify RecordsQuery returns the descendants
|
|
266
|
+
const recordsQueryAfterDeleteReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
267
|
+
expect(recordsQueryAfterDeleteReply.status.code).to.equal(200);
|
|
268
|
+
expect((_b = recordsQueryAfterDeleteReply.entries) === null || _b === void 0 ? void 0 : _b.length).to.equal(2);
|
|
269
|
+
// 3. Verify that Alice is able to perform a prune on `foo` to delete all its descendants
|
|
270
|
+
const fooPrune = yield RecordsDelete.create({
|
|
271
|
+
recordId: foo.message.recordId,
|
|
272
|
+
prune: true,
|
|
273
|
+
signer: Jws.createSigner(alice)
|
|
274
|
+
});
|
|
275
|
+
const pruneReply = yield dwn.processMessage(alice.did, fooPrune.message);
|
|
276
|
+
expect(pruneReply.status.code).to.equal(202);
|
|
277
|
+
// verify bar and baz messages are permanently deleted
|
|
278
|
+
const messagesAfterPrune = yield messageStore.query(alice.did, queryFilter, { messageTimestamp: SortDirection.Ascending });
|
|
279
|
+
expect(messagesAfterPrune.messages.length).to.equal(2); // just RecordsWrite and RecordsDelete for foo
|
|
280
|
+
expect(messagesAfterPrune.messages[0]).to.deep.include(foo.message);
|
|
281
|
+
expect(messagesAfterPrune.messages[1]).to.deep.include(fooPrune.message);
|
|
282
|
+
// sanity verify RecordsQuery returns no records
|
|
283
|
+
const recordsQueryAfterPruneReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
284
|
+
expect(recordsQueryAfterPruneReply.status.code).to.equal(200);
|
|
285
|
+
expect((_c = recordsQueryAfterPruneReply.entries) === null || _c === void 0 ? void 0 : _c.length).to.equal(0);
|
|
286
|
+
}));
|
|
287
|
+
it('should return 404 when attempting to prune against a record that is already pruned', () => __awaiter(this, void 0, void 0, function* () {
|
|
288
|
+
// Scenario:
|
|
289
|
+
// 1. Alice has a record `foo` with a descendent chain
|
|
290
|
+
// 2. Alice prunes the record `foo`
|
|
291
|
+
// 3. Verify that Alice is unable to perform a prune on `foo` again
|
|
292
|
+
var _a;
|
|
293
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
294
|
+
// install a protocol with foo <- bar <- baz structure
|
|
295
|
+
const nestedProtocol = nestedProtocolDefinition;
|
|
296
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
297
|
+
definition: nestedProtocol,
|
|
298
|
+
signer: Jws.createSigner(alice)
|
|
299
|
+
});
|
|
300
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
301
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
302
|
+
// 1. Alice has a record `foo` with a descendent chain
|
|
303
|
+
// write foo <- bar <- baz records
|
|
304
|
+
const fooData = TestDataGenerator.randomBytes(100);
|
|
305
|
+
const fooOptions = {
|
|
306
|
+
signer: Jws.createSigner(alice),
|
|
307
|
+
protocol: nestedProtocol.protocol,
|
|
308
|
+
protocolPath: 'foo',
|
|
309
|
+
schema: nestedProtocol.types.foo.schema,
|
|
310
|
+
dataFormat: nestedProtocol.types.foo.dataFormats[0],
|
|
311
|
+
data: fooData
|
|
312
|
+
};
|
|
313
|
+
const foo = yield RecordsWrite.create(fooOptions);
|
|
314
|
+
const fooWriteResponse = yield dwn.processMessage(alice.did, foo.message, { dataStream: DataStream.fromBytes(fooData) });
|
|
315
|
+
expect(fooWriteResponse.status.code).equals(202);
|
|
316
|
+
const barData = TestDataGenerator.randomBytes(100);
|
|
317
|
+
const barOptions = {
|
|
318
|
+
signer: Jws.createSigner(alice),
|
|
319
|
+
protocol: nestedProtocol.protocol,
|
|
320
|
+
protocolPath: 'foo/bar',
|
|
321
|
+
schema: nestedProtocol.types.bar.schema,
|
|
322
|
+
dataFormat: nestedProtocol.types.bar.dataFormats[0],
|
|
323
|
+
parentContextId: foo.message.contextId,
|
|
324
|
+
data: barData
|
|
325
|
+
};
|
|
326
|
+
const bar = yield RecordsWrite.create(Object.assign({}, barOptions));
|
|
327
|
+
const barWriteResponse = yield dwn.processMessage(alice.did, bar.message, { dataStream: DataStream.fromBytes(barData) });
|
|
328
|
+
expect(barWriteResponse.status.code).equals(202);
|
|
329
|
+
const bazData = TestDataGenerator.randomBytes(100);
|
|
330
|
+
const bazOptions = {
|
|
331
|
+
signer: Jws.createSigner(alice),
|
|
332
|
+
protocol: nestedProtocol.protocol,
|
|
333
|
+
protocolPath: 'foo/bar/baz',
|
|
334
|
+
schema: nestedProtocol.types.baz.schema,
|
|
335
|
+
dataFormat: nestedProtocol.types.baz.dataFormats[0],
|
|
336
|
+
parentContextId: bar.message.contextId,
|
|
337
|
+
data: bazData
|
|
338
|
+
};
|
|
339
|
+
const baz = yield RecordsWrite.create(Object.assign({}, bazOptions));
|
|
340
|
+
const bazWriteResponse = yield dwn.processMessage(alice.did, baz.message, { dataStream: DataStream.fromBytes(bazData) });
|
|
341
|
+
expect(bazWriteResponse.status.code).equals(202);
|
|
342
|
+
// sanity records are inserted in message store
|
|
343
|
+
const queryFilter = [{
|
|
344
|
+
interface: DwnInterfaceName.Records,
|
|
345
|
+
protocol: nestedProtocol.protocol
|
|
346
|
+
}];
|
|
347
|
+
const queryResult = yield messageStore.query(alice.did, queryFilter);
|
|
348
|
+
expect(queryResult.messages.length).to.equal(3);
|
|
349
|
+
// sanity verify RecordsQuery returns no records
|
|
350
|
+
const recordsQuery = yield RecordsQuery.create({
|
|
351
|
+
signer: Jws.createSigner(alice),
|
|
352
|
+
filter: { protocol: nestedProtocol.protocol }
|
|
353
|
+
});
|
|
354
|
+
const recordsQueryBeforeDeleteReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
355
|
+
expect(recordsQueryBeforeDeleteReply.status.code).to.equal(200);
|
|
356
|
+
expect((_a = recordsQueryBeforeDeleteReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(3);
|
|
357
|
+
// 2. Alice prunes the record `foo`
|
|
358
|
+
const fooPrune1 = yield RecordsDelete.create({
|
|
359
|
+
recordId: foo.message.recordId,
|
|
360
|
+
prune: true,
|
|
361
|
+
signer: Jws.createSigner(alice)
|
|
362
|
+
});
|
|
363
|
+
const prune1Reply = yield dwn.processMessage(alice.did, fooPrune1.message);
|
|
364
|
+
expect(prune1Reply.status.code).to.equal(202);
|
|
365
|
+
// 3. Verify that Alice is unable to perform a prune on `foo` again
|
|
366
|
+
const fooPrune2 = yield RecordsDelete.create({
|
|
367
|
+
recordId: foo.message.recordId,
|
|
368
|
+
prune: true,
|
|
369
|
+
signer: Jws.createSigner(alice)
|
|
370
|
+
});
|
|
371
|
+
const prune2Reply = yield dwn.processMessage(alice.did, fooPrune2.message);
|
|
372
|
+
expect(prune2Reply.status.code).to.equal(404);
|
|
373
|
+
}));
|
|
374
|
+
describe('prune and co-prune protocol action', () => {
|
|
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* () {
|
|
376
|
+
// Scenario:
|
|
377
|
+
// 1. Alice installs a protocol allowing others to add and prune records.
|
|
378
|
+
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
379
|
+
// 3. Verify Bob cannot prune the records if `prune` is not set to `true` in RecordsDelete.
|
|
380
|
+
// 4. Verify Bob can prune the records by setting `prune` to `true` in RecordsDelete.
|
|
381
|
+
var _a;
|
|
382
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
383
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
384
|
+
// 1. Alice installs a protocol allowing others to add and prune records.
|
|
385
|
+
const protocolDefinition = {
|
|
386
|
+
protocol: 'http://post-protocol.xyz',
|
|
387
|
+
published: true,
|
|
388
|
+
types: {
|
|
389
|
+
post: {},
|
|
390
|
+
attachment: {}
|
|
391
|
+
},
|
|
392
|
+
structure: {
|
|
393
|
+
post: {
|
|
394
|
+
$actions: [
|
|
395
|
+
{
|
|
396
|
+
who: 'anyone',
|
|
397
|
+
can: [
|
|
398
|
+
'create',
|
|
399
|
+
'prune', // allowing author to prune, but not delete
|
|
400
|
+
'read'
|
|
401
|
+
]
|
|
402
|
+
}
|
|
403
|
+
],
|
|
404
|
+
attachment: {
|
|
405
|
+
$actions: [
|
|
406
|
+
{
|
|
407
|
+
who: 'anyone',
|
|
408
|
+
can: ['read']
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
who: 'author',
|
|
412
|
+
of: 'post',
|
|
413
|
+
can: ['create']
|
|
414
|
+
}
|
|
415
|
+
]
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
};
|
|
420
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
421
|
+
definition: protocolDefinition,
|
|
422
|
+
signer: Jws.createSigner(alice)
|
|
423
|
+
});
|
|
424
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
425
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
426
|
+
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
427
|
+
const postData = TestDataGenerator.randomBytes(100);
|
|
428
|
+
const postOptions = {
|
|
429
|
+
signer: Jws.createSigner(bob),
|
|
430
|
+
protocol: protocolDefinition.protocol,
|
|
431
|
+
protocolPath: 'post',
|
|
432
|
+
dataFormat: 'application/json',
|
|
433
|
+
data: postData
|
|
434
|
+
};
|
|
435
|
+
const post = yield RecordsWrite.create(postOptions);
|
|
436
|
+
const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
|
|
437
|
+
expect(postWriteResponse.status.code).equals(202);
|
|
438
|
+
const attachmentData = TestDataGenerator.randomBytes(100);
|
|
439
|
+
const attachmentOptions = {
|
|
440
|
+
signer: Jws.createSigner(bob),
|
|
441
|
+
protocol: protocolDefinition.protocol,
|
|
442
|
+
protocolPath: 'post/attachment',
|
|
443
|
+
parentContextId: post.message.contextId,
|
|
444
|
+
dataFormat: 'application/octet-stream',
|
|
445
|
+
data: attachmentData
|
|
446
|
+
};
|
|
447
|
+
const attachment = yield RecordsWrite.create(attachmentOptions);
|
|
448
|
+
const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
|
|
449
|
+
expect(attachmentWriteResponse.status.code).equals(202);
|
|
450
|
+
// 3. Verify Bob cannot prune the records if `prune` is not set to `true` in RecordsDelete.
|
|
451
|
+
const unauthorizedPostPrune = yield RecordsDelete.create({
|
|
452
|
+
recordId: post.message.recordId,
|
|
453
|
+
// prune : true, // intentionally not setting `prune` to true
|
|
454
|
+
signer: Jws.createSigner(bob)
|
|
455
|
+
});
|
|
456
|
+
const unauthorizedPostPruneReply = yield dwn.processMessage(alice.did, unauthorizedPostPrune.message);
|
|
457
|
+
expect(unauthorizedPostPruneReply.status.code).to.equal(401);
|
|
458
|
+
expect(unauthorizedPostPruneReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
459
|
+
// 4. Verify Bob can prune the records by setting `prune` to `true` in RecordsDelete.
|
|
460
|
+
const postPrune = yield RecordsDelete.create({
|
|
461
|
+
recordId: post.message.recordId,
|
|
462
|
+
prune: true,
|
|
463
|
+
signer: Jws.createSigner(bob)
|
|
464
|
+
});
|
|
465
|
+
const pruneReply = yield dwn.processMessage(alice.did, postPrune.message);
|
|
466
|
+
expect(pruneReply.status.code).to.equal(202);
|
|
467
|
+
// sanity test `RecordsQuery` no longer returns the deleted record
|
|
468
|
+
const recordsQuery = yield RecordsQuery.create({
|
|
469
|
+
signer: Jws.createSigner(bob),
|
|
470
|
+
filter: { protocol: protocolDefinition.protocol }
|
|
471
|
+
});
|
|
472
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
473
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
474
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(0);
|
|
475
|
+
}));
|
|
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
|
+
// Scenario:
|
|
478
|
+
// 1. Alice installs a protocol allowing others to add records but not prune.
|
|
479
|
+
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
480
|
+
// 3. Verify Bob cannot prune the records.
|
|
481
|
+
var _a;
|
|
482
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
483
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
484
|
+
// 1. Alice installs a protocol allowing others to add records but not prune.
|
|
485
|
+
const protocolDefinition = messageProtocolDefinition;
|
|
486
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
487
|
+
definition: protocolDefinition,
|
|
488
|
+
signer: Jws.createSigner(alice)
|
|
489
|
+
});
|
|
490
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
491
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
492
|
+
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
493
|
+
const messageData = TestDataGenerator.randomBytes(100);
|
|
494
|
+
const messageOptions = {
|
|
495
|
+
signer: Jws.createSigner(bob),
|
|
496
|
+
protocol: protocolDefinition.protocol,
|
|
497
|
+
protocolPath: 'message',
|
|
498
|
+
schema: protocolDefinition.types.message.schema,
|
|
499
|
+
dataFormat: protocolDefinition.types.message.dataFormats[0],
|
|
500
|
+
data: messageData
|
|
501
|
+
};
|
|
502
|
+
const message = yield RecordsWrite.create(messageOptions);
|
|
503
|
+
const messageWriteResponse = yield dwn.processMessage(alice.did, message.message, { dataStream: DataStream.fromBytes(messageData) });
|
|
504
|
+
expect(messageWriteResponse.status.code).equals(202);
|
|
505
|
+
const attachmentData = TestDataGenerator.randomBytes(100);
|
|
506
|
+
const attachmentOptions = {
|
|
507
|
+
signer: Jws.createSigner(bob),
|
|
508
|
+
protocol: protocolDefinition.protocol,
|
|
509
|
+
protocolPath: 'message/attachment',
|
|
510
|
+
parentContextId: message.message.contextId,
|
|
511
|
+
dataFormat: 'application/octet-stream',
|
|
512
|
+
data: attachmentData
|
|
513
|
+
};
|
|
514
|
+
const attachment = yield RecordsWrite.create(attachmentOptions);
|
|
515
|
+
const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
|
|
516
|
+
expect(attachmentWriteResponse.status.code).equals(202);
|
|
517
|
+
// 3. Verify Bob cannot prune the records.
|
|
518
|
+
const messagePrune = yield RecordsDelete.create({
|
|
519
|
+
recordId: message.message.recordId,
|
|
520
|
+
prune: true,
|
|
521
|
+
signer: Jws.createSigner(bob)
|
|
522
|
+
});
|
|
523
|
+
const deleteReply = yield dwn.processMessage(alice.did, messagePrune.message);
|
|
524
|
+
expect(deleteReply.status.code).to.equal(401);
|
|
525
|
+
expect(deleteReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
526
|
+
// sanity test `RecordsQuery` still returns the records
|
|
527
|
+
const recordsQuery = yield RecordsQuery.create({
|
|
528
|
+
signer: Jws.createSigner(alice),
|
|
529
|
+
filter: { protocol: protocolDefinition.protocol }
|
|
530
|
+
});
|
|
531
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
532
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
533
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(2);
|
|
534
|
+
}));
|
|
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
|
+
// Scenario:
|
|
537
|
+
// 1. Alice installs a protocol allowing others to add and prune records.
|
|
538
|
+
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
539
|
+
// 3. Verify Carol cannot prune the records if `prune` is not set to `true` in RecordsDelete.
|
|
540
|
+
// 4. Verify Carol can prune the records by setting `prune` to `true` in RecordsDelete.
|
|
541
|
+
var _a;
|
|
542
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
543
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
544
|
+
const carol = yield TestDataGenerator.generateDidKeyPersona();
|
|
545
|
+
// 1. Alice installs a protocol allowing others to add and prune records.
|
|
546
|
+
const protocolDefinition = {
|
|
547
|
+
protocol: 'http://post-protocol.xyz',
|
|
548
|
+
published: true,
|
|
549
|
+
types: {
|
|
550
|
+
post: {},
|
|
551
|
+
attachment: {}
|
|
552
|
+
},
|
|
553
|
+
structure: {
|
|
554
|
+
post: {
|
|
555
|
+
$actions: [
|
|
556
|
+
{
|
|
557
|
+
who: 'anyone',
|
|
558
|
+
can: [
|
|
559
|
+
'create',
|
|
560
|
+
'co-prune', // allowing anyone to prune
|
|
561
|
+
'read'
|
|
562
|
+
]
|
|
563
|
+
}
|
|
564
|
+
],
|
|
565
|
+
attachment: {
|
|
566
|
+
$actions: [
|
|
567
|
+
{
|
|
568
|
+
who: 'anyone',
|
|
569
|
+
can: [
|
|
570
|
+
'create',
|
|
571
|
+
'read'
|
|
572
|
+
]
|
|
573
|
+
}
|
|
574
|
+
]
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
};
|
|
579
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
580
|
+
definition: protocolDefinition,
|
|
581
|
+
signer: Jws.createSigner(alice)
|
|
582
|
+
});
|
|
583
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
584
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
585
|
+
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
586
|
+
const postData = TestDataGenerator.randomBytes(100);
|
|
587
|
+
const postOptions = {
|
|
588
|
+
signer: Jws.createSigner(bob),
|
|
589
|
+
protocol: protocolDefinition.protocol,
|
|
590
|
+
protocolPath: 'post',
|
|
591
|
+
dataFormat: 'application/json',
|
|
592
|
+
data: postData
|
|
593
|
+
};
|
|
594
|
+
const post = yield RecordsWrite.create(postOptions);
|
|
595
|
+
const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
|
|
596
|
+
expect(postWriteResponse.status.code).equals(202);
|
|
597
|
+
const attachmentData = TestDataGenerator.randomBytes(100);
|
|
598
|
+
const attachmentOptions = {
|
|
599
|
+
signer: Jws.createSigner(bob),
|
|
600
|
+
protocol: protocolDefinition.protocol,
|
|
601
|
+
protocolPath: 'post/attachment',
|
|
602
|
+
parentContextId: post.message.contextId,
|
|
603
|
+
dataFormat: 'application/octet-stream',
|
|
604
|
+
data: attachmentData
|
|
605
|
+
};
|
|
606
|
+
const attachment = yield RecordsWrite.create(attachmentOptions);
|
|
607
|
+
const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
|
|
608
|
+
expect(attachmentWriteResponse.status.code).equals(202);
|
|
609
|
+
// 3. Verify Carol cannot prune the records if `prune` is not set to `true` in RecordsDelete.
|
|
610
|
+
const unauthorizedPostPrune = yield RecordsDelete.create({
|
|
611
|
+
recordId: post.message.recordId,
|
|
612
|
+
// prune : true, // intentionally not setting `prune` to true
|
|
613
|
+
signer: Jws.createSigner(carol)
|
|
614
|
+
});
|
|
615
|
+
const unauthorizedPostPruneReply = yield dwn.processMessage(alice.did, unauthorizedPostPrune.message);
|
|
616
|
+
expect(unauthorizedPostPruneReply.status.code).to.equal(401);
|
|
617
|
+
expect(unauthorizedPostPruneReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
618
|
+
// 4. Verify Carol can prune the records by setting `prune` to `true` in RecordsDelete.
|
|
619
|
+
const postPrune = yield RecordsDelete.create({
|
|
620
|
+
recordId: post.message.recordId,
|
|
621
|
+
prune: true,
|
|
622
|
+
signer: Jws.createSigner(carol)
|
|
623
|
+
});
|
|
624
|
+
const deleteReply = yield dwn.processMessage(alice.did, postPrune.message);
|
|
625
|
+
expect(deleteReply.status.code).to.equal(202);
|
|
626
|
+
// sanity test `RecordsQuery` no longer returns the deleted record
|
|
627
|
+
const recordsQuery = yield RecordsQuery.create({
|
|
628
|
+
signer: Jws.createSigner(bob),
|
|
629
|
+
filter: { protocol: protocolDefinition.protocol }
|
|
630
|
+
});
|
|
631
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
632
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
633
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(0);
|
|
634
|
+
}));
|
|
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
|
+
// Scenario:
|
|
637
|
+
// 1. Alice installs a protocol allowing others to add records AND only author to prune.
|
|
638
|
+
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
639
|
+
// 3. Verify Carol cannot prune the records.
|
|
640
|
+
var _a;
|
|
641
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
642
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
643
|
+
const carol = yield TestDataGenerator.generateDidKeyPersona();
|
|
644
|
+
// 1. Alice installs a protocol allowing others to add records AND only author to prune.
|
|
645
|
+
const protocolDefinition = {
|
|
646
|
+
protocol: 'http://post-protocol.xyz',
|
|
647
|
+
published: true,
|
|
648
|
+
types: {
|
|
649
|
+
post: {},
|
|
650
|
+
attachment: {}
|
|
651
|
+
},
|
|
652
|
+
structure: {
|
|
653
|
+
post: {
|
|
654
|
+
$actions: [
|
|
655
|
+
{
|
|
656
|
+
who: 'anyone',
|
|
657
|
+
can: [
|
|
658
|
+
'create',
|
|
659
|
+
'prune', // allowing author to prune, but not delete
|
|
660
|
+
'read'
|
|
661
|
+
]
|
|
662
|
+
}
|
|
663
|
+
],
|
|
664
|
+
attachment: {
|
|
665
|
+
$actions: [
|
|
666
|
+
{
|
|
667
|
+
who: 'anyone',
|
|
668
|
+
can: ['read']
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
who: 'author',
|
|
672
|
+
of: 'post',
|
|
673
|
+
can: ['create']
|
|
674
|
+
}
|
|
675
|
+
]
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
};
|
|
680
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
681
|
+
definition: protocolDefinition,
|
|
682
|
+
signer: Jws.createSigner(alice)
|
|
683
|
+
});
|
|
684
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
685
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
686
|
+
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
687
|
+
const postData = TestDataGenerator.randomBytes(100);
|
|
688
|
+
const postOptions = {
|
|
689
|
+
signer: Jws.createSigner(bob),
|
|
690
|
+
protocol: protocolDefinition.protocol,
|
|
691
|
+
protocolPath: 'post',
|
|
692
|
+
dataFormat: 'application/json',
|
|
693
|
+
data: postData
|
|
694
|
+
};
|
|
695
|
+
const post = yield RecordsWrite.create(postOptions);
|
|
696
|
+
const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
|
|
697
|
+
expect(postWriteResponse.status.code).equals(202);
|
|
698
|
+
const attachmentData = TestDataGenerator.randomBytes(100);
|
|
699
|
+
const attachmentOptions = {
|
|
700
|
+
signer: Jws.createSigner(bob),
|
|
701
|
+
protocol: protocolDefinition.protocol,
|
|
702
|
+
protocolPath: 'post/attachment',
|
|
703
|
+
parentContextId: post.message.contextId,
|
|
704
|
+
dataFormat: 'application/octet-stream',
|
|
705
|
+
data: attachmentData
|
|
706
|
+
};
|
|
707
|
+
const attachment = yield RecordsWrite.create(attachmentOptions);
|
|
708
|
+
const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
|
|
709
|
+
expect(attachmentWriteResponse.status.code).equals(202);
|
|
710
|
+
// 3. Verify Carol cannot prune the records.
|
|
711
|
+
const postPrune = yield RecordsDelete.create({
|
|
712
|
+
recordId: post.message.recordId,
|
|
713
|
+
prune: true,
|
|
714
|
+
signer: Jws.createSigner(carol)
|
|
715
|
+
});
|
|
716
|
+
const deleteReply = yield dwn.processMessage(alice.did, postPrune.message);
|
|
717
|
+
expect(deleteReply.status.code).to.equal(401);
|
|
718
|
+
expect(deleteReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
719
|
+
// sanity test `RecordsQuery` still returns the records
|
|
720
|
+
const recordsQuery = yield RecordsQuery.create({
|
|
721
|
+
signer: Jws.createSigner(bob),
|
|
722
|
+
filter: { protocol: protocolDefinition.protocol }
|
|
723
|
+
});
|
|
724
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
725
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
726
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(2);
|
|
727
|
+
}));
|
|
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
|
+
// Scenario:
|
|
730
|
+
// 1. Alice installs a protocol allowing others to add and delete (not prune) records.
|
|
731
|
+
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
732
|
+
// 3. Verify Bob cannot prune the records.
|
|
733
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
734
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
735
|
+
// 1. Alice installs a protocol allowing others to add and delete (not prune) records.
|
|
736
|
+
const protocolDefinition = {
|
|
737
|
+
protocol: 'http://post-protocol.xyz',
|
|
738
|
+
published: true,
|
|
739
|
+
types: {
|
|
740
|
+
post: {},
|
|
741
|
+
attachment: {}
|
|
742
|
+
},
|
|
743
|
+
structure: {
|
|
744
|
+
post: {
|
|
745
|
+
$actions: [
|
|
746
|
+
{
|
|
747
|
+
who: 'anyone',
|
|
748
|
+
can: [
|
|
749
|
+
'create',
|
|
750
|
+
'delete', // only allow delete, not prune
|
|
751
|
+
'read'
|
|
752
|
+
]
|
|
753
|
+
}
|
|
754
|
+
],
|
|
755
|
+
attachment: {
|
|
756
|
+
$actions: [
|
|
757
|
+
{
|
|
758
|
+
who: 'anyone',
|
|
759
|
+
can: [
|
|
760
|
+
'create',
|
|
761
|
+
'read'
|
|
762
|
+
]
|
|
763
|
+
}
|
|
764
|
+
]
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
};
|
|
769
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
770
|
+
definition: protocolDefinition,
|
|
771
|
+
signer: Jws.createSigner(alice)
|
|
772
|
+
});
|
|
773
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
774
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
775
|
+
// 2. Bob writes a record + a descendant in Alice's DWN.
|
|
776
|
+
const postData = TestDataGenerator.randomBytes(100);
|
|
777
|
+
const postOptions = {
|
|
778
|
+
signer: Jws.createSigner(bob),
|
|
779
|
+
protocol: protocolDefinition.protocol,
|
|
780
|
+
protocolPath: 'post',
|
|
781
|
+
dataFormat: 'application/json',
|
|
782
|
+
data: postData
|
|
783
|
+
};
|
|
784
|
+
const post = yield RecordsWrite.create(postOptions);
|
|
785
|
+
const postWriteResponse = yield dwn.processMessage(alice.did, post.message, { dataStream: DataStream.fromBytes(postData) });
|
|
786
|
+
expect(postWriteResponse.status.code).equals(202);
|
|
787
|
+
const attachmentData = TestDataGenerator.randomBytes(100);
|
|
788
|
+
const attachmentOptions = {
|
|
789
|
+
signer: Jws.createSigner(bob),
|
|
790
|
+
protocol: protocolDefinition.protocol,
|
|
791
|
+
protocolPath: 'post/attachment',
|
|
792
|
+
parentContextId: post.message.contextId,
|
|
793
|
+
dataFormat: 'application/octet-stream',
|
|
794
|
+
data: attachmentData
|
|
795
|
+
};
|
|
796
|
+
const attachment = yield RecordsWrite.create(attachmentOptions);
|
|
797
|
+
const attachmentWriteResponse = yield dwn.processMessage(alice.did, attachment.message, { dataStream: DataStream.fromBytes(attachmentData) });
|
|
798
|
+
expect(attachmentWriteResponse.status.code).equals(202);
|
|
799
|
+
// 3. Verify Bob cannot prune the records.
|
|
800
|
+
const unauthorizedPostPrune = yield RecordsDelete.create({
|
|
801
|
+
recordId: post.message.recordId,
|
|
802
|
+
prune: true,
|
|
803
|
+
signer: Jws.createSigner(bob)
|
|
804
|
+
});
|
|
805
|
+
const unauthorizedPostPruneReply = yield dwn.processMessage(alice.did, unauthorizedPostPrune.message);
|
|
806
|
+
expect(unauthorizedPostPruneReply.status.code).to.equal(401);
|
|
807
|
+
expect(unauthorizedPostPruneReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
808
|
+
}));
|
|
809
|
+
});
|
|
810
|
+
});
|
|
811
|
+
}
|
|
812
|
+
//# sourceMappingURL=records-prune.spec.js.map
|