@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,647 @@
|
|
|
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 { expect } from 'chai';
|
|
11
|
+
import { GeneralJwsVerifier } from '../../src/jose/jws/general/verifier.js';
|
|
12
|
+
import { Message } from '../../src/core/message.js';
|
|
13
|
+
import minimalProtocolDefinition from '../vectors/protocol-definitions/minimal.json' assert { type: 'json' };
|
|
14
|
+
import { TestDataGenerator } from '../utils/test-data-generator.js';
|
|
15
|
+
import { TestEventStream } from '../test-event-stream.js';
|
|
16
|
+
import { TestStores } from '../test-stores.js';
|
|
17
|
+
import { DataStream, Dwn, DwnConstant, DwnErrorCode, DwnInterfaceName, DwnMethodName, Jws, PermissionGrant, PermissionsProtocol, Time } from '../../src/index.js';
|
|
18
|
+
import { DidKey, UniversalResolver } from '@enbox/dids';
|
|
19
|
+
import sinon from 'sinon';
|
|
20
|
+
export function testMessagesReadHandler() {
|
|
21
|
+
describe('MessagesReadHandler.handle()', () => {
|
|
22
|
+
let dwn;
|
|
23
|
+
let didResolver;
|
|
24
|
+
let messageStore;
|
|
25
|
+
let dataStore;
|
|
26
|
+
let resumableTaskStore;
|
|
27
|
+
let eventLog;
|
|
28
|
+
let eventStream;
|
|
29
|
+
// important to follow the `before` and `after` pattern to initialize and clean the stores in tests
|
|
30
|
+
// so that different test suites can reuse the same backend store for testing
|
|
31
|
+
before(() => __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
33
|
+
const stores = TestStores.get();
|
|
34
|
+
messageStore = stores.messageStore;
|
|
35
|
+
dataStore = stores.dataStore;
|
|
36
|
+
resumableTaskStore = stores.resumableTaskStore;
|
|
37
|
+
eventLog = stores.eventLog;
|
|
38
|
+
eventStream = TestEventStream.get();
|
|
39
|
+
dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, eventStream, resumableTaskStore });
|
|
40
|
+
}));
|
|
41
|
+
beforeEach(() => __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
// clean up before each test rather than after so that a test does not depend on other tests to do the clean up
|
|
43
|
+
yield messageStore.clear();
|
|
44
|
+
yield dataStore.clear();
|
|
45
|
+
yield resumableTaskStore.clear();
|
|
46
|
+
yield eventLog.clear();
|
|
47
|
+
sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
|
|
48
|
+
}));
|
|
49
|
+
after(() => __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
sinon.restore();
|
|
51
|
+
yield dwn.close();
|
|
52
|
+
}));
|
|
53
|
+
it('returns a 401 if authentication fails', () => __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
55
|
+
sinon.stub(GeneralJwsVerifier, 'verifySignatures').throws(new Error('Invalid signature'));
|
|
56
|
+
// alice creates a record
|
|
57
|
+
const { message } = yield TestDataGenerator.generateMessagesRead({
|
|
58
|
+
author: alice,
|
|
59
|
+
messageCid: yield TestDataGenerator.randomCborSha256Cid()
|
|
60
|
+
});
|
|
61
|
+
// alice is not the author of the message
|
|
62
|
+
const reply = yield dwn.processMessage(alice.did, message);
|
|
63
|
+
expect(reply.status.code).to.equal(401);
|
|
64
|
+
expect(reply.status.detail).to.include('Invalid signature');
|
|
65
|
+
}));
|
|
66
|
+
it('returns a 400 if message is invalid', () => __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
68
|
+
const { recordsWrite } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
|
|
69
|
+
const { message } = yield TestDataGenerator.generateMessagesRead({
|
|
70
|
+
author: alice,
|
|
71
|
+
messageCid: yield Message.getCid(recordsWrite.message)
|
|
72
|
+
});
|
|
73
|
+
message['descriptor']['troll'] = 'hehe';
|
|
74
|
+
const reply = yield dwn.processMessage(alice.did, message);
|
|
75
|
+
expect(reply.status.code).to.equal(400);
|
|
76
|
+
}));
|
|
77
|
+
it('returns a 400 if message contains an invalid message cid', () => __awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
79
|
+
const { recordsWrite } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
|
|
80
|
+
const { message } = yield TestDataGenerator.generateMessagesRead({
|
|
81
|
+
author: alice,
|
|
82
|
+
messageCid: yield Message.getCid(recordsWrite.message)
|
|
83
|
+
});
|
|
84
|
+
message.descriptor.messageCid = 'hehetroll';
|
|
85
|
+
const reply = yield dwn.processMessage(alice.did, message);
|
|
86
|
+
expect(reply.status.code).to.equal(400);
|
|
87
|
+
expect(reply.status.detail).to.include('is not a valid CID');
|
|
88
|
+
expect(reply.entry).to.be.undefined;
|
|
89
|
+
}));
|
|
90
|
+
it('returns a 404 and the entry as undefined in reply entry when a messageCid is not found', () => __awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
92
|
+
const { recordsWrite } = yield TestDataGenerator.generateRecordsWrite({ author: alice });
|
|
93
|
+
const recordsWriteMessageCid = yield Message.getCid(recordsWrite.message);
|
|
94
|
+
const { message } = yield TestDataGenerator.generateMessagesRead({
|
|
95
|
+
author: alice,
|
|
96
|
+
messageCid: recordsWriteMessageCid
|
|
97
|
+
});
|
|
98
|
+
// returns a 404 because the RecordsWrite created above was never stored
|
|
99
|
+
const reply = yield dwn.processMessage(alice.did, message);
|
|
100
|
+
expect(reply.status.code).to.equal(404);
|
|
101
|
+
expect(reply.entry).to.be.undefined;
|
|
102
|
+
}));
|
|
103
|
+
describe('without a grant', () => {
|
|
104
|
+
describe('records interface messages', () => {
|
|
105
|
+
it('returns a 401 if the tenant is not the author', () => __awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
107
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
108
|
+
// bob creates a record that alice will try and get
|
|
109
|
+
const { message: recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({ author: bob });
|
|
110
|
+
const { status } = yield dwn.processMessage(bob.did, recordsWrite, { dataStream });
|
|
111
|
+
expect(status.code).to.equal(202);
|
|
112
|
+
// alice tries to read the message
|
|
113
|
+
const { message } = yield TestDataGenerator.generateMessagesRead({
|
|
114
|
+
author: alice,
|
|
115
|
+
messageCid: yield Message.getCid(recordsWrite)
|
|
116
|
+
});
|
|
117
|
+
const reply = yield dwn.processMessage(bob.did, message);
|
|
118
|
+
expect(reply.status.code).to.equal(401);
|
|
119
|
+
expect(reply.status.detail).to.include(DwnErrorCode.MessagesReadAuthorizationFailed);
|
|
120
|
+
}));
|
|
121
|
+
describe('gets record data in the reply entry', () => {
|
|
122
|
+
it('data is less than threshold', () => __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
124
|
+
const { message: recordsWrite, dataStream, dataBytes } = yield TestDataGenerator.generateRecordsWrite({
|
|
125
|
+
author: alice,
|
|
126
|
+
data: TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded),
|
|
127
|
+
});
|
|
128
|
+
const reply = yield dwn.processMessage(alice.did, recordsWrite, { dataStream });
|
|
129
|
+
expect(reply.status.code).to.equal(202);
|
|
130
|
+
const recordsWriteMessageCid = yield Message.getCid(recordsWrite);
|
|
131
|
+
const { message } = yield TestDataGenerator.generateMessagesRead({
|
|
132
|
+
author: alice,
|
|
133
|
+
messageCid: recordsWriteMessageCid
|
|
134
|
+
});
|
|
135
|
+
const messagesReadReply = yield dwn.processMessage(alice.did, message);
|
|
136
|
+
expect(messagesReadReply.status.code).to.equal(200);
|
|
137
|
+
expect(messagesReadReply.entry).to.exist;
|
|
138
|
+
const messageReply = messagesReadReply.entry;
|
|
139
|
+
expect(messageReply.messageCid).to.exist;
|
|
140
|
+
expect(messageReply.messageCid).to.equal(recordsWriteMessageCid);
|
|
141
|
+
expect(messageReply.message).to.exist.and.not.be.undefined;
|
|
142
|
+
expect(messageReply.data).to.exist.and.not.be.undefined;
|
|
143
|
+
const messageData = yield DataStream.toBytes(messageReply.data);
|
|
144
|
+
expect(messageData).to.eql(dataBytes);
|
|
145
|
+
}));
|
|
146
|
+
it('data is greater than threshold', () => __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
148
|
+
const { message: recordsWrite, dataStream, dataBytes } = yield TestDataGenerator.generateRecordsWrite({
|
|
149
|
+
author: alice,
|
|
150
|
+
data: TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded + 10),
|
|
151
|
+
});
|
|
152
|
+
const reply = yield dwn.processMessage(alice.did, recordsWrite, { dataStream });
|
|
153
|
+
expect(reply.status.code).to.equal(202);
|
|
154
|
+
const recordsWriteMessageCid = yield Message.getCid(recordsWrite);
|
|
155
|
+
const { message } = yield TestDataGenerator.generateMessagesRead({
|
|
156
|
+
author: alice,
|
|
157
|
+
messageCid: recordsWriteMessageCid
|
|
158
|
+
});
|
|
159
|
+
const messagesReadReply = yield dwn.processMessage(alice.did, message);
|
|
160
|
+
expect(messagesReadReply.status.code).to.equal(200);
|
|
161
|
+
expect(messagesReadReply.entry).to.exist;
|
|
162
|
+
const messageReply = messagesReadReply.entry;
|
|
163
|
+
expect(messageReply.messageCid).to.exist;
|
|
164
|
+
expect(messageReply.messageCid).to.equal(recordsWriteMessageCid);
|
|
165
|
+
expect(messageReply.message).to.exist.and.not.be.undefined;
|
|
166
|
+
expect(messageReply.data).to.exist.and.not.be.undefined;
|
|
167
|
+
const messageData = yield DataStream.toBytes(messageReply.data);
|
|
168
|
+
expect(messageData).to.eql(dataBytes);
|
|
169
|
+
}));
|
|
170
|
+
it('data is not available', () => __awaiter(this, void 0, void 0, function* () {
|
|
171
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
172
|
+
// initial write
|
|
173
|
+
const { message: recordsWriteMessage, recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({
|
|
174
|
+
author: alice,
|
|
175
|
+
data: TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded + 10),
|
|
176
|
+
});
|
|
177
|
+
const initialMessageCid = yield Message.getCid(recordsWriteMessage);
|
|
178
|
+
let reply = yield dwn.processMessage(alice.did, recordsWriteMessage, { dataStream });
|
|
179
|
+
expect(reply.status.code).to.equal(202);
|
|
180
|
+
const { recordsWrite: updateMessage, dataStream: updateDataStream } = yield TestDataGenerator.generateFromRecordsWrite({
|
|
181
|
+
author: alice,
|
|
182
|
+
existingWrite: recordsWrite,
|
|
183
|
+
data: TestDataGenerator.randomBytes(DwnConstant.maxDataSizeAllowedToBeEncoded + 10),
|
|
184
|
+
});
|
|
185
|
+
reply = yield dwn.processMessage(alice.did, updateMessage.toJSON(), { dataStream: updateDataStream });
|
|
186
|
+
expect(reply.status.code).to.equal(202);
|
|
187
|
+
const { message } = yield TestDataGenerator.generateMessagesRead({
|
|
188
|
+
author: alice,
|
|
189
|
+
messageCid: initialMessageCid
|
|
190
|
+
});
|
|
191
|
+
const messagesReadReply = yield dwn.processMessage(alice.did, message);
|
|
192
|
+
expect(messagesReadReply.status.code).to.equal(200);
|
|
193
|
+
expect(messagesReadReply.entry).to.exist;
|
|
194
|
+
const messageReply = messagesReadReply.entry;
|
|
195
|
+
expect(messageReply.messageCid).to.exist;
|
|
196
|
+
expect(messageReply.messageCid).to.equal(initialMessageCid);
|
|
197
|
+
expect(messageReply.message).to.exist.and.not.be.undefined;
|
|
198
|
+
expect(messageReply.data).to.be.undefined;
|
|
199
|
+
}));
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
describe('Protocol interface messages', () => {
|
|
203
|
+
it('returns a 401 if the tenant is not the author', () => __awaiter(this, void 0, void 0, function* () {
|
|
204
|
+
// scenario: Alice configures both a published and non-published protocol and writes it to her DWN.
|
|
205
|
+
// Bob is unable to read either of the ProtocolConfigure messages because he is not the author.
|
|
206
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
207
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
208
|
+
// unpublished protocol configuration
|
|
209
|
+
const unpublishedProtocolDefinition = Object.assign(Object.assign({}, minimalProtocolDefinition), { protocol: 'http://example.com/protocol/unpublished', published: false });
|
|
210
|
+
const { message: unpublishedProtocolsConfigure } = yield TestDataGenerator.generateProtocolsConfigure({
|
|
211
|
+
author: alice,
|
|
212
|
+
protocolDefinition: unpublishedProtocolDefinition
|
|
213
|
+
});
|
|
214
|
+
const unpublishedProtocolsConfigureReply = yield dwn.processMessage(alice.did, unpublishedProtocolsConfigure);
|
|
215
|
+
expect(unpublishedProtocolsConfigureReply.status.code).to.equal(202);
|
|
216
|
+
// published protocol configuration
|
|
217
|
+
const publishedProtocolDefinition = Object.assign(Object.assign({}, minimalProtocolDefinition), { protocol: 'http://example.com/protocol/published', published: true });
|
|
218
|
+
const { message: publishedProtocolsConfigure } = yield TestDataGenerator.generateProtocolsConfigure({
|
|
219
|
+
author: alice,
|
|
220
|
+
protocolDefinition: publishedProtocolDefinition
|
|
221
|
+
});
|
|
222
|
+
const publishedProtocolsConfigureReply = yield dwn.processMessage(alice.did, publishedProtocolsConfigure);
|
|
223
|
+
expect(publishedProtocolsConfigureReply.status.code).to.equal(202);
|
|
224
|
+
// get the message CIDs
|
|
225
|
+
const unpublishedProtocolMessageCid = yield Message.getCid(unpublishedProtocolsConfigure);
|
|
226
|
+
const publishedProtocolMessageCid = yield Message.getCid(publishedProtocolsConfigure);
|
|
227
|
+
// bob attempts to read the unpublished protocol configuration
|
|
228
|
+
const { message: getUnpublishedProtocolConfigure } = yield TestDataGenerator.generateMessagesRead({
|
|
229
|
+
author: bob,
|
|
230
|
+
messageCid: unpublishedProtocolMessageCid,
|
|
231
|
+
});
|
|
232
|
+
const getUnpublishedProtocolConfigureReply = yield dwn.processMessage(alice.did, getUnpublishedProtocolConfigure);
|
|
233
|
+
expect(getUnpublishedProtocolConfigureReply.status.code).to.equal(401);
|
|
234
|
+
expect(getUnpublishedProtocolConfigureReply.status.detail).to.include(DwnErrorCode.MessagesReadAuthorizationFailed);
|
|
235
|
+
expect(getUnpublishedProtocolConfigureReply.entry).to.be.undefined;
|
|
236
|
+
// bob attempts to read the published protocol configuration
|
|
237
|
+
const { message: getPublishedProtocolConfigure } = yield TestDataGenerator.generateMessagesRead({
|
|
238
|
+
author: bob,
|
|
239
|
+
messageCid: publishedProtocolMessageCid,
|
|
240
|
+
});
|
|
241
|
+
const getPublishedProtocolConfigureReply = yield dwn.processMessage(alice.did, getPublishedProtocolConfigure);
|
|
242
|
+
expect(getPublishedProtocolConfigureReply.status.code).to.equal(401);
|
|
243
|
+
expect(getPublishedProtocolConfigureReply.status.detail).to.include(DwnErrorCode.MessagesReadAuthorizationFailed);
|
|
244
|
+
expect(getPublishedProtocolConfigureReply.entry).to.be.undefined;
|
|
245
|
+
// control: alice is able to read both the published and unpublished protocol configurations
|
|
246
|
+
const { message: getUnpublishedProtocolConfigureAlice } = yield TestDataGenerator.generateMessagesRead({
|
|
247
|
+
author: alice,
|
|
248
|
+
messageCid: unpublishedProtocolMessageCid,
|
|
249
|
+
});
|
|
250
|
+
const getUnpublishedProtocolConfigureAliceReply = yield dwn.processMessage(alice.did, getUnpublishedProtocolConfigureAlice);
|
|
251
|
+
expect(getUnpublishedProtocolConfigureAliceReply.status.code).to.equal(200);
|
|
252
|
+
expect(getUnpublishedProtocolConfigureAliceReply.entry).to.exist;
|
|
253
|
+
expect(getUnpublishedProtocolConfigureAliceReply.entry.messageCid).to.equal(unpublishedProtocolMessageCid);
|
|
254
|
+
expect(getUnpublishedProtocolConfigureAliceReply.entry.message).to.deep.equal(unpublishedProtocolsConfigure);
|
|
255
|
+
const { message: getPublishedProtocolConfigureAlice } = yield TestDataGenerator.generateMessagesRead({
|
|
256
|
+
author: alice,
|
|
257
|
+
messageCid: publishedProtocolMessageCid,
|
|
258
|
+
});
|
|
259
|
+
const getPublishedProtocolConfigureAliceReply = yield dwn.processMessage(alice.did, getPublishedProtocolConfigureAlice);
|
|
260
|
+
expect(getPublishedProtocolConfigureAliceReply.status.code).to.equal(200);
|
|
261
|
+
expect(getPublishedProtocolConfigureAliceReply.entry).to.exist;
|
|
262
|
+
expect(getPublishedProtocolConfigureAliceReply.entry.messageCid).to.equal(publishedProtocolMessageCid);
|
|
263
|
+
expect(getPublishedProtocolConfigureAliceReply.entry.message).to.deep.equal(publishedProtocolsConfigure);
|
|
264
|
+
}));
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
describe('with a grant', () => {
|
|
268
|
+
it('returns a 401 if grant has different DWN interface scope', () => __awaiter(this, void 0, void 0, function* () {
|
|
269
|
+
// scenario: Alice grants Bob access to RecordsWrite, then Bob tries to invoke the grant with MessagesRead
|
|
270
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
271
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
272
|
+
// alice installs a protocol
|
|
273
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
274
|
+
author: alice,
|
|
275
|
+
protocolDefinition: minimalProtocolDefinition
|
|
276
|
+
});
|
|
277
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
278
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
279
|
+
// Alice writes a record which Bob will later try to read
|
|
280
|
+
const { recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({
|
|
281
|
+
author: alice,
|
|
282
|
+
protocol: minimalProtocolDefinition.protocol,
|
|
283
|
+
protocolPath: 'foo',
|
|
284
|
+
});
|
|
285
|
+
const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
|
|
286
|
+
expect(recordsWriteReply.status.code).to.equal(202);
|
|
287
|
+
// Alice gives Bob a permission grant scoped to a RecordsWrite and the protocol
|
|
288
|
+
const permissionGrant = yield PermissionsProtocol.createGrant({
|
|
289
|
+
signer: Jws.createSigner(alice),
|
|
290
|
+
grantedTo: bob.did,
|
|
291
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
|
|
292
|
+
scope: {
|
|
293
|
+
interface: DwnInterfaceName.Records,
|
|
294
|
+
method: DwnMethodName.Write,
|
|
295
|
+
protocol: minimalProtocolDefinition.protocol,
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
|
|
299
|
+
const permissionGrantWriteReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
|
|
300
|
+
expect(permissionGrantWriteReply.status.code).to.equal(202);
|
|
301
|
+
// Bob tries to MessagesRead using the RecordsWrite grant
|
|
302
|
+
const messagesRead = yield TestDataGenerator.generateMessagesRead({
|
|
303
|
+
author: bob,
|
|
304
|
+
messageCid: yield Message.getCid(recordsWrite.message),
|
|
305
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
306
|
+
});
|
|
307
|
+
const messagesReadReply = yield dwn.processMessage(alice.did, messagesRead.message);
|
|
308
|
+
expect(messagesReadReply.status.code).to.equal(401);
|
|
309
|
+
expect(messagesReadReply.status.detail).to.contain(DwnErrorCode.GrantAuthorizationInterfaceMismatch);
|
|
310
|
+
}));
|
|
311
|
+
it('allows external parties to read a message using a grant with unrestricted scope', () => __awaiter(this, void 0, void 0, function* () {
|
|
312
|
+
// scenario: Alice gives Bob a grant allowing him to read any message in her DWN.
|
|
313
|
+
// Bob invokes that grant to read a message.
|
|
314
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
315
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
316
|
+
// Alice writes a record to her DWN
|
|
317
|
+
const { message, dataStream } = yield TestDataGenerator.generateRecordsWrite({
|
|
318
|
+
author: alice,
|
|
319
|
+
});
|
|
320
|
+
const writeReply = yield dwn.processMessage(alice.did, message, { dataStream });
|
|
321
|
+
expect(writeReply.status.code).to.equal(202);
|
|
322
|
+
const messageCid = yield Message.getCid(message);
|
|
323
|
+
// Alice issues a permission grant allowing Bob to read any record in her DWN
|
|
324
|
+
const permissionGrant = yield PermissionsProtocol.createGrant({
|
|
325
|
+
signer: Jws.createSigner(alice),
|
|
326
|
+
grantedTo: bob.did,
|
|
327
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
|
|
328
|
+
scope: {
|
|
329
|
+
interface: DwnInterfaceName.Messages,
|
|
330
|
+
method: DwnMethodName.Read,
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
|
|
334
|
+
const grantReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
|
|
335
|
+
expect(grantReply.status.code).to.equal(202);
|
|
336
|
+
// Bob invokes that grant to read a record from Alice's DWN
|
|
337
|
+
const messagesRead = yield TestDataGenerator.generateMessagesRead({
|
|
338
|
+
author: bob,
|
|
339
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
340
|
+
messageCid,
|
|
341
|
+
});
|
|
342
|
+
const readReply = yield dwn.processMessage(alice.did, messagesRead.message);
|
|
343
|
+
expect(readReply.status.code).to.equal(200);
|
|
344
|
+
expect(readReply.entry).to.not.be.undefined;
|
|
345
|
+
expect(readReply.entry.messageCid).to.equal(messageCid);
|
|
346
|
+
}));
|
|
347
|
+
describe('protocol scoped messages', () => {
|
|
348
|
+
it('allows reads of protocol messages with a protocol restricted grant scope', () => __awaiter(this, void 0, void 0, function* () {
|
|
349
|
+
// This test will verify that a grant scoped to a specific protocol will allow a user to read messages associated with that protocol.
|
|
350
|
+
// These messages include the ProtocolConfiguration itself, even if not published,
|
|
351
|
+
// any RecordsWrite or RecordsDelete messages associated with the protocol,
|
|
352
|
+
// and any PermissionProtocol RecordsWrite messages associated with the protocol.
|
|
353
|
+
// scenario: Alice configures a protocol that is unpublished and writes it to her DWN.
|
|
354
|
+
// Alice then gives Bob a grant to read messages from that protocol.
|
|
355
|
+
// Carol requests a grant to RecordsWrite to the protocol, and Alice grants it.
|
|
356
|
+
// Alice and Carol write records associated with the protocol.
|
|
357
|
+
// Alice also deletes a record associated with the protocol.
|
|
358
|
+
// Alice revokes the grant to Carol.
|
|
359
|
+
// Bob invokes his grant to read the various messages.
|
|
360
|
+
// As a control, Alice writes a record not associated with the protocol and Bob tries to unsuccessfully read it.
|
|
361
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
362
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
363
|
+
const carol = yield TestDataGenerator.generateDidKeyPersona();
|
|
364
|
+
const protocolDefinition = Object.assign(Object.assign({}, minimalProtocolDefinition), { published: false });
|
|
365
|
+
// Alice installs the unpublished protocol
|
|
366
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
367
|
+
author: alice,
|
|
368
|
+
protocolDefinition
|
|
369
|
+
});
|
|
370
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
371
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
372
|
+
const protocolConfigureMessageCid = yield Message.getCid(protocolsConfig.message);
|
|
373
|
+
// Carol requests a grant to write records to the protocol
|
|
374
|
+
const permissionRequestCarol = yield PermissionsProtocol.createRequest({
|
|
375
|
+
signer: Jws.createSigner(alice),
|
|
376
|
+
delegated: false,
|
|
377
|
+
scope: {
|
|
378
|
+
interface: DwnInterfaceName.Records,
|
|
379
|
+
method: DwnMethodName.Write,
|
|
380
|
+
protocol: protocolDefinition.protocol,
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
const requestDataStreamCarol = DataStream.fromBytes(permissionRequestCarol.permissionRequestBytes);
|
|
384
|
+
const permissionRequestWriteReplyCarol = yield dwn.processMessage(alice.did, permissionRequestCarol.recordsWrite.message, { dataStream: requestDataStreamCarol });
|
|
385
|
+
expect(permissionRequestWriteReplyCarol.status.code).to.equal(202);
|
|
386
|
+
// Alice gives Carol a grant to write records to the protocol
|
|
387
|
+
const permissionGrantCarol = yield PermissionsProtocol.createGrant({
|
|
388
|
+
signer: Jws.createSigner(alice),
|
|
389
|
+
grantedTo: carol.did,
|
|
390
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
|
|
391
|
+
delegated: permissionRequestCarol.permissionRequestData.delegated,
|
|
392
|
+
scope: permissionRequestCarol.permissionRequestData.scope,
|
|
393
|
+
});
|
|
394
|
+
const grantDataStreamCarol = DataStream.fromBytes(permissionGrantCarol.permissionGrantBytes);
|
|
395
|
+
const permissionGrantWriteReplyCarol = yield dwn.processMessage(alice.did, permissionGrantCarol.recordsWrite.message, { dataStream: grantDataStreamCarol });
|
|
396
|
+
expect(permissionGrantWriteReplyCarol.status.code).to.equal(202);
|
|
397
|
+
const carolGrantMessageCiD = yield Message.getCid(permissionGrantCarol.recordsWrite.message);
|
|
398
|
+
// Alice writes a record associated with the protocol
|
|
399
|
+
const { recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({
|
|
400
|
+
author: alice,
|
|
401
|
+
protocol: protocolDefinition.protocol,
|
|
402
|
+
protocolPath: 'foo',
|
|
403
|
+
});
|
|
404
|
+
const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
|
|
405
|
+
expect(recordsWriteReply.status.code).to.equal(202);
|
|
406
|
+
const aliceRecordMessageCid = yield Message.getCid(recordsWrite.message);
|
|
407
|
+
// Alice deletes a record associated with the protocol
|
|
408
|
+
const recordsDelete = yield TestDataGenerator.generateRecordsDelete({
|
|
409
|
+
author: alice,
|
|
410
|
+
recordId: recordsWrite.message.recordId,
|
|
411
|
+
});
|
|
412
|
+
const recordsDeleteReply = yield dwn.processMessage(alice.did, recordsDelete.message);
|
|
413
|
+
expect(recordsDeleteReply.status.code).to.equal(202);
|
|
414
|
+
// Carol writes a record associated with the protocol
|
|
415
|
+
const { recordsWrite: recordsWriteCarol, dataStream: dataStreamCarol } = yield TestDataGenerator.generateRecordsWrite({
|
|
416
|
+
author: carol,
|
|
417
|
+
protocol: protocolDefinition.protocol,
|
|
418
|
+
protocolPath: 'foo',
|
|
419
|
+
permissionGrantId: permissionGrantCarol.recordsWrite.message.recordId,
|
|
420
|
+
});
|
|
421
|
+
const recordsWriteReplyCarol = yield dwn.processMessage(alice.did, recordsWriteCarol.message, { dataStream: dataStreamCarol });
|
|
422
|
+
expect(recordsWriteReplyCarol.status.code).to.equal(202);
|
|
423
|
+
const carolRecordMessageCid = yield Message.getCid(recordsWriteCarol.message);
|
|
424
|
+
// Alice revokes Carol's grant
|
|
425
|
+
const permissionRevocationCarol = yield PermissionsProtocol.createRevocation({
|
|
426
|
+
signer: Jws.createSigner(alice),
|
|
427
|
+
grant: yield PermissionGrant.parse(permissionGrantCarol.dataEncodedMessage),
|
|
428
|
+
});
|
|
429
|
+
const permissionRevocationCarolDataStream = DataStream.fromBytes(permissionRevocationCarol.permissionRevocationBytes);
|
|
430
|
+
const permissionRevocationCarolReply = yield dwn.processMessage(alice.did, permissionRevocationCarol.recordsWrite.message, { dataStream: permissionRevocationCarolDataStream });
|
|
431
|
+
expect(permissionRevocationCarolReply.status.code).to.equal(202);
|
|
432
|
+
// Alice gives Bob a permission grant with scope MessagesRead
|
|
433
|
+
const permissionGrant = yield PermissionsProtocol.createGrant({
|
|
434
|
+
signer: Jws.createSigner(alice),
|
|
435
|
+
grantedTo: bob.did,
|
|
436
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
|
|
437
|
+
scope: {
|
|
438
|
+
interface: DwnInterfaceName.Messages,
|
|
439
|
+
method: DwnMethodName.Read,
|
|
440
|
+
protocol: protocolDefinition.protocol,
|
|
441
|
+
}
|
|
442
|
+
});
|
|
443
|
+
const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
|
|
444
|
+
const permissionGrantWriteReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
|
|
445
|
+
expect(permissionGrantWriteReply.status.code).to.equal(202);
|
|
446
|
+
// Bob is unable to read the message without using the permission grant
|
|
447
|
+
const messagesReadWithoutGrant = yield TestDataGenerator.generateMessagesRead({
|
|
448
|
+
author: bob,
|
|
449
|
+
messageCid: aliceRecordMessageCid,
|
|
450
|
+
});
|
|
451
|
+
const messagesReadWithoutGrantReply = yield dwn.processMessage(alice.did, messagesReadWithoutGrant.message);
|
|
452
|
+
expect(messagesReadWithoutGrantReply.status.code).to.equal(401);
|
|
453
|
+
expect(messagesReadWithoutGrantReply.status.detail).to.contain(DwnErrorCode.MessagesReadAuthorizationFailed);
|
|
454
|
+
// Bob is able to read all the associated messages when using the permission grant
|
|
455
|
+
// Expected Messages:
|
|
456
|
+
// - Protocol Configuration
|
|
457
|
+
// - Alice's RecordsWrite
|
|
458
|
+
// - Alice's RecordsDelete
|
|
459
|
+
// - Carol's Permission Request
|
|
460
|
+
// - Alice's Permission Grant to Carol
|
|
461
|
+
// - Carol's RecordsWrite
|
|
462
|
+
// - Alice's Revocation of Carol's Grant
|
|
463
|
+
// Protocol configuration
|
|
464
|
+
const messagesReadProtocolConfigure = yield TestDataGenerator.generateMessagesRead({
|
|
465
|
+
author: bob,
|
|
466
|
+
messageCid: protocolConfigureMessageCid,
|
|
467
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
468
|
+
});
|
|
469
|
+
const messagesReadProtocolConfigureReply = yield dwn.processMessage(alice.did, messagesReadProtocolConfigure.message);
|
|
470
|
+
expect(messagesReadProtocolConfigureReply.status.code).to.equal(200);
|
|
471
|
+
expect(messagesReadProtocolConfigureReply.entry).to.exist;
|
|
472
|
+
expect(messagesReadProtocolConfigureReply.entry.message).to.deep.equal(protocolsConfig.message);
|
|
473
|
+
// alice RecordsWrite
|
|
474
|
+
const messagesReadWithGrant = yield TestDataGenerator.generateMessagesRead({
|
|
475
|
+
author: bob,
|
|
476
|
+
messageCid: aliceRecordMessageCid,
|
|
477
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
478
|
+
});
|
|
479
|
+
const messagesReadWithGrantReply = yield dwn.processMessage(alice.did, messagesReadWithGrant.message);
|
|
480
|
+
expect(messagesReadWithGrantReply.status.code).to.equal(200);
|
|
481
|
+
expect(messagesReadWithGrantReply.entry).to.exist;
|
|
482
|
+
expect(messagesReadWithGrantReply.entry.message).to.deep.equal(recordsWrite.message);
|
|
483
|
+
// alice RecordsDelete
|
|
484
|
+
const messagesReadDelete = yield TestDataGenerator.generateMessagesRead({
|
|
485
|
+
author: bob,
|
|
486
|
+
messageCid: yield Message.getCid(recordsDelete.message),
|
|
487
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
488
|
+
});
|
|
489
|
+
const messagesReadDeleteReply = yield dwn.processMessage(alice.did, messagesReadDelete.message);
|
|
490
|
+
expect(messagesReadDeleteReply.status.code).to.equal(200);
|
|
491
|
+
expect(messagesReadDeleteReply.entry).to.exist;
|
|
492
|
+
expect(messagesReadDeleteReply.entry.message).to.deep.equal(recordsDelete.message);
|
|
493
|
+
// carol's Permission Request
|
|
494
|
+
const messagesReadCarolRequest = yield TestDataGenerator.generateMessagesRead({
|
|
495
|
+
author: bob,
|
|
496
|
+
messageCid: yield Message.getCid(permissionRequestCarol.recordsWrite.message),
|
|
497
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
498
|
+
});
|
|
499
|
+
const messagesReadCarolRequestReply = yield dwn.processMessage(alice.did, messagesReadCarolRequest.message);
|
|
500
|
+
expect(messagesReadCarolRequestReply.status.code).to.equal(200);
|
|
501
|
+
expect(messagesReadCarolRequestReply.entry).to.exist;
|
|
502
|
+
expect(messagesReadCarolRequestReply.entry.message).to.deep.equal(permissionRequestCarol.recordsWrite.message);
|
|
503
|
+
// carol's Permission Grant
|
|
504
|
+
const messagesReadCarolGrant = yield TestDataGenerator.generateMessagesRead({
|
|
505
|
+
author: bob,
|
|
506
|
+
messageCid: carolGrantMessageCiD,
|
|
507
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
508
|
+
});
|
|
509
|
+
const messagesReadCarolGrantReply = yield dwn.processMessage(alice.did, messagesReadCarolGrant.message);
|
|
510
|
+
expect(messagesReadCarolGrantReply.status.code).to.equal(200);
|
|
511
|
+
expect(messagesReadCarolGrantReply.entry).to.exist;
|
|
512
|
+
expect(messagesReadCarolGrantReply.entry.message).to.deep.equal(permissionGrantCarol.recordsWrite.message);
|
|
513
|
+
// carol's RecordsWrite
|
|
514
|
+
const messagesReadCarolRecord = yield TestDataGenerator.generateMessagesRead({
|
|
515
|
+
author: bob,
|
|
516
|
+
messageCid: carolRecordMessageCid,
|
|
517
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
518
|
+
});
|
|
519
|
+
const messagesReadCarolRecordReply = yield dwn.processMessage(alice.did, messagesReadCarolRecord.message);
|
|
520
|
+
expect(messagesReadCarolRecordReply.status.code).to.equal(200);
|
|
521
|
+
expect(messagesReadCarolRecordReply.entry).to.exist;
|
|
522
|
+
expect(messagesReadCarolRecordReply.entry.message).to.deep.equal(recordsWriteCarol.message);
|
|
523
|
+
// carol's Grant Revocation
|
|
524
|
+
const messagesReadCarolGrantRevocation = yield TestDataGenerator.generateMessagesRead({
|
|
525
|
+
author: bob,
|
|
526
|
+
messageCid: yield Message.getCid(permissionRevocationCarol.recordsWrite.message),
|
|
527
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
528
|
+
});
|
|
529
|
+
const messagesReadCarolGrantRevocationReply = yield dwn.processMessage(alice.did, messagesReadCarolGrantRevocation.message);
|
|
530
|
+
expect(messagesReadCarolGrantRevocationReply.status.code).to.equal(200);
|
|
531
|
+
expect(messagesReadCarolGrantRevocationReply.entry).to.exist;
|
|
532
|
+
expect(messagesReadCarolGrantRevocationReply.entry.message).to.deep.equal(permissionRevocationCarol.recordsWrite.message);
|
|
533
|
+
// CONTROL: Alice writes a record not associated with the protocol
|
|
534
|
+
const { recordsWrite: recordsWriteControl, dataStream: dataStreamControl } = yield TestDataGenerator.generateRecordsWrite({
|
|
535
|
+
author: alice,
|
|
536
|
+
});
|
|
537
|
+
const recordsWriteControlReply = yield dwn.processMessage(alice.did, recordsWriteControl.message, { dataStream: dataStreamControl });
|
|
538
|
+
expect(recordsWriteControlReply.status.code).to.equal(202);
|
|
539
|
+
// Bob is unable to read the control message
|
|
540
|
+
const messagesReadControl = yield TestDataGenerator.generateMessagesRead({
|
|
541
|
+
author: bob,
|
|
542
|
+
messageCid: yield Message.getCid(recordsWriteControl.message),
|
|
543
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
544
|
+
});
|
|
545
|
+
const messagesReadControlReply = yield dwn.processMessage(alice.did, messagesReadControl.message);
|
|
546
|
+
expect(messagesReadControlReply.status.code).to.equal(401);
|
|
547
|
+
}));
|
|
548
|
+
it('rejects message read of protocol messages with mismatching protocol grant scopes', () => __awaiter(this, void 0, void 0, function* () {
|
|
549
|
+
// scenario: Alice writes a protocol record. Alice gives Bob a grant to read messages from a different protocol
|
|
550
|
+
// Bob invokes that grant to read the protocol message, but fails.
|
|
551
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
552
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
553
|
+
const protocolDefinition = minimalProtocolDefinition;
|
|
554
|
+
// Alice installs the protocol
|
|
555
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
556
|
+
author: alice,
|
|
557
|
+
protocolDefinition
|
|
558
|
+
});
|
|
559
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
560
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
561
|
+
// Alice writes a record which Bob will later try to read
|
|
562
|
+
const { recordsWrite, dataStream } = yield TestDataGenerator.generateRecordsWrite({
|
|
563
|
+
author: alice,
|
|
564
|
+
protocol: protocolDefinition.protocol,
|
|
565
|
+
protocolPath: 'foo',
|
|
566
|
+
});
|
|
567
|
+
const recordsWriteReply = yield dwn.processMessage(alice.did, recordsWrite.message, { dataStream });
|
|
568
|
+
expect(recordsWriteReply.status.code).to.equal(202);
|
|
569
|
+
// Alice gives Bob a permission grant with scope MessagesRead
|
|
570
|
+
const permissionGrant = yield PermissionsProtocol.createGrant({
|
|
571
|
+
signer: Jws.createSigner(alice),
|
|
572
|
+
grantedTo: bob.did,
|
|
573
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
|
|
574
|
+
scope: {
|
|
575
|
+
interface: DwnInterfaceName.Messages,
|
|
576
|
+
method: DwnMethodName.Read,
|
|
577
|
+
protocol: 'a-different-protocol'
|
|
578
|
+
}
|
|
579
|
+
});
|
|
580
|
+
const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
|
|
581
|
+
const permissionGrantWriteReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
|
|
582
|
+
expect(permissionGrantWriteReply.status.code).to.equal(202);
|
|
583
|
+
// Bob is unable to read the record using the mismatched permission grant
|
|
584
|
+
const messagesReadWithoutGrant = yield TestDataGenerator.generateMessagesRead({
|
|
585
|
+
author: bob,
|
|
586
|
+
messageCid: yield Message.getCid(recordsWrite.message),
|
|
587
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
588
|
+
});
|
|
589
|
+
const messagesReadWithoutGrantReply = yield dwn.processMessage(alice.did, messagesReadWithoutGrant.message);
|
|
590
|
+
expect(messagesReadWithoutGrantReply.status.code).to.equal(401);
|
|
591
|
+
expect(messagesReadWithoutGrantReply.status.detail).to.contain(DwnErrorCode.MessagesReadVerifyScopeFailed);
|
|
592
|
+
}));
|
|
593
|
+
it('rejects message if the RecordsWrite message is not found for a RecordsDelete being retrieved', () => __awaiter(this, void 0, void 0, function* () {
|
|
594
|
+
// NOTE: This is a corner case that is unlikely to happen in practice, but is tested for completeness
|
|
595
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
596
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
597
|
+
const protocolDefinition = minimalProtocolDefinition;
|
|
598
|
+
// Alice installs the protocol
|
|
599
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
600
|
+
author: alice,
|
|
601
|
+
protocolDefinition,
|
|
602
|
+
});
|
|
603
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
604
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
605
|
+
// Alice gives bob a grant to read messages in the protocol
|
|
606
|
+
const permissionGrant = yield PermissionsProtocol.createGrant({
|
|
607
|
+
signer: Jws.createSigner(alice),
|
|
608
|
+
grantedTo: bob.did,
|
|
609
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 60 * 60 * 24 }), // 24 hours
|
|
610
|
+
scope: {
|
|
611
|
+
interface: DwnInterfaceName.Messages,
|
|
612
|
+
method: DwnMethodName.Read,
|
|
613
|
+
protocol: protocolDefinition.protocol,
|
|
614
|
+
}
|
|
615
|
+
});
|
|
616
|
+
const grantDataStream = DataStream.fromBytes(permissionGrant.permissionGrantBytes);
|
|
617
|
+
const permissionGrantWriteReply = yield dwn.processMessage(alice.did, permissionGrant.recordsWrite.message, { dataStream: grantDataStream });
|
|
618
|
+
expect(permissionGrantWriteReply.status.code).to.equal(202);
|
|
619
|
+
// Alice creates the records write and records delete messages
|
|
620
|
+
const { recordsWrite } = yield TestDataGenerator.generateRecordsWrite({
|
|
621
|
+
author: alice,
|
|
622
|
+
protocol: protocolDefinition.protocol,
|
|
623
|
+
protocolPath: 'foo',
|
|
624
|
+
});
|
|
625
|
+
const { recordsDelete } = yield TestDataGenerator.generateRecordsDelete({
|
|
626
|
+
author: alice,
|
|
627
|
+
recordId: recordsWrite.message.recordId,
|
|
628
|
+
});
|
|
629
|
+
// Alice inserts the RecordsDelete message directly into the message store
|
|
630
|
+
const recordsDeleteCid = yield Message.getCid(recordsDelete.message);
|
|
631
|
+
const indexes = recordsDelete.constructIndexes(recordsWrite.message);
|
|
632
|
+
yield messageStore.put(alice.did, recordsDelete.message, indexes);
|
|
633
|
+
// Bob tries to read the message
|
|
634
|
+
const messagesRead = yield TestDataGenerator.generateMessagesRead({
|
|
635
|
+
author: bob,
|
|
636
|
+
messageCid: recordsDeleteCid,
|
|
637
|
+
permissionGrantId: permissionGrant.recordsWrite.message.recordId,
|
|
638
|
+
});
|
|
639
|
+
const messagesReadReply = yield dwn.processMessage(alice.did, messagesRead.message);
|
|
640
|
+
expect(messagesReadReply.status.code).to.equal(401);
|
|
641
|
+
expect(messagesReadReply.status.detail).to.contain(DwnErrorCode.RecordsWriteGetNewestWriteRecordNotFound);
|
|
642
|
+
}));
|
|
643
|
+
});
|
|
644
|
+
});
|
|
645
|
+
});
|
|
646
|
+
}
|
|
647
|
+
//# sourceMappingURL=messages-read.spec.js.map
|