@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,684 @@
|
|
|
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 friendRoleProtocolDefinition from '../vectors/protocol-definitions/friend-role.json' assert { type: 'json' };
|
|
14
|
+
import threadRoleProtocolDefinition from '../vectors/protocol-definitions/thread-role.json' assert { type: 'json' };
|
|
15
|
+
import { Jws } from '../../src/utils/jws.js';
|
|
16
|
+
import { Message } from '../../src/core/message.js';
|
|
17
|
+
import { Poller } from '../utils/poller.js';
|
|
18
|
+
import { RecordsSubscribe } from '../../src/interfaces/records-subscribe.js';
|
|
19
|
+
import { RecordsSubscribeHandler } from '../../src/handlers/records-subscribe.js';
|
|
20
|
+
import { TestDataGenerator } from '../utils/test-data-generator.js';
|
|
21
|
+
import { TestEventStream } from '../test-event-stream.js';
|
|
22
|
+
import { TestStores } from '../test-stores.js';
|
|
23
|
+
import { TestStubGenerator } from '../utils/test-stub-generator.js';
|
|
24
|
+
import { DidKey, UniversalResolver } from '@enbox/dids';
|
|
25
|
+
import { Dwn, DwnErrorCode, DwnMethodName, EventEmitterStream, MessageStoreLevel, Time } from '../../src/index.js';
|
|
26
|
+
chai.use(chaiAsPromised);
|
|
27
|
+
export function testRecordsSubscribeHandler() {
|
|
28
|
+
describe('RecordsSubscribeHandler.handle()', () => {
|
|
29
|
+
describe('EventStream disabled', () => {
|
|
30
|
+
let didResolver;
|
|
31
|
+
let messageStore;
|
|
32
|
+
let resumableTaskStore;
|
|
33
|
+
let dataStore;
|
|
34
|
+
let eventLog;
|
|
35
|
+
let dwn;
|
|
36
|
+
// important to follow the `before` and `after` pattern to initialize and clean the stores in tests
|
|
37
|
+
// so that different test suites can reuse the same backend store for testing
|
|
38
|
+
before(() => __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
40
|
+
const stores = TestStores.get();
|
|
41
|
+
messageStore = stores.messageStore;
|
|
42
|
+
dataStore = stores.dataStore;
|
|
43
|
+
resumableTaskStore = stores.resumableTaskStore;
|
|
44
|
+
eventLog = stores.eventLog;
|
|
45
|
+
dwn = yield Dwn.create({
|
|
46
|
+
didResolver,
|
|
47
|
+
messageStore,
|
|
48
|
+
dataStore,
|
|
49
|
+
resumableTaskStore,
|
|
50
|
+
eventLog,
|
|
51
|
+
});
|
|
52
|
+
}));
|
|
53
|
+
beforeEach(() => __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
|
|
55
|
+
// clean up before each test rather than after so that a test does not depend on other tests to do the clean up
|
|
56
|
+
yield messageStore.clear();
|
|
57
|
+
yield dataStore.clear();
|
|
58
|
+
yield resumableTaskStore.clear();
|
|
59
|
+
yield eventLog.clear();
|
|
60
|
+
}));
|
|
61
|
+
after(() => __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
yield dwn.close();
|
|
63
|
+
}));
|
|
64
|
+
it('should respond with a 501 if subscriptions are not supported', () => __awaiter(this, void 0, void 0, function* () {
|
|
65
|
+
yield dwn.close(); // close the original dwn instance
|
|
66
|
+
dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, resumableTaskStore }); // leave out eventStream
|
|
67
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
68
|
+
// attempt to subscribe
|
|
69
|
+
const { message } = yield TestDataGenerator.generateRecordsSubscribe({
|
|
70
|
+
author: alice,
|
|
71
|
+
});
|
|
72
|
+
const subscriptionMessageReply = yield dwn.processMessage(alice.did, message, { subscriptionHandler: (_) => { } });
|
|
73
|
+
expect(subscriptionMessageReply.status.code).to.equal(501, subscriptionMessageReply.status.detail);
|
|
74
|
+
expect(subscriptionMessageReply.status.detail).to.include(DwnErrorCode.RecordsSubscribeEventStreamUnimplemented);
|
|
75
|
+
}));
|
|
76
|
+
});
|
|
77
|
+
describe('functional tests', () => {
|
|
78
|
+
let didResolver;
|
|
79
|
+
let messageStore;
|
|
80
|
+
let dataStore;
|
|
81
|
+
let resumableTaskStore;
|
|
82
|
+
let eventLog;
|
|
83
|
+
let eventStream;
|
|
84
|
+
let dwn;
|
|
85
|
+
// important to follow the `before` and `after` pattern to initialize and clean the stores in tests
|
|
86
|
+
// so that different test suites can reuse the same backend store for testing
|
|
87
|
+
before(() => __awaiter(this, void 0, void 0, function* () {
|
|
88
|
+
didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
89
|
+
const stores = TestStores.get();
|
|
90
|
+
messageStore = stores.messageStore;
|
|
91
|
+
dataStore = stores.dataStore;
|
|
92
|
+
resumableTaskStore = stores.resumableTaskStore;
|
|
93
|
+
eventLog = stores.eventLog;
|
|
94
|
+
eventStream = TestEventStream.get();
|
|
95
|
+
dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, eventStream, resumableTaskStore });
|
|
96
|
+
}));
|
|
97
|
+
beforeEach(() => __awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
|
|
99
|
+
// clean up before each test rather than after so that a test does not depend on other tests to do the clean up
|
|
100
|
+
yield messageStore.clear();
|
|
101
|
+
yield dataStore.clear();
|
|
102
|
+
yield resumableTaskStore.clear();
|
|
103
|
+
yield eventLog.clear();
|
|
104
|
+
}));
|
|
105
|
+
after(() => __awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
yield dwn.close();
|
|
107
|
+
}));
|
|
108
|
+
it('should return a subscription object', () => __awaiter(this, void 0, void 0, function* () {
|
|
109
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
110
|
+
const recordsSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
|
|
111
|
+
author: alice,
|
|
112
|
+
filter: { schema: 'some-schema' },
|
|
113
|
+
});
|
|
114
|
+
// Send records subscribe message
|
|
115
|
+
const reply = yield dwn.processMessage(alice.did, recordsSubscribe.message, { subscriptionHandler: () => { } });
|
|
116
|
+
expect(reply.status.code).to.equal(200);
|
|
117
|
+
expect(reply.subscription).to.exist;
|
|
118
|
+
}));
|
|
119
|
+
it('should return 400 if protocol is not normalized', () => __awaiter(this, void 0, void 0, function* () {
|
|
120
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
121
|
+
// subscribe for non-normalized protocol
|
|
122
|
+
const recordsSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
|
|
123
|
+
author: alice,
|
|
124
|
+
filter: { protocol: 'example.com/' },
|
|
125
|
+
});
|
|
126
|
+
// overwrite protocol because #create auto-normalizes protocol
|
|
127
|
+
recordsSubscribe.message.descriptor.filter.protocol = 'example.com/';
|
|
128
|
+
// Re-create auth because we altered the descriptor after signing
|
|
129
|
+
recordsSubscribe.message.authorization = yield Message.createAuthorization({
|
|
130
|
+
descriptor: recordsSubscribe.message.descriptor,
|
|
131
|
+
signer: Jws.createSigner(alice)
|
|
132
|
+
});
|
|
133
|
+
// Send records subscribe message
|
|
134
|
+
const reply = yield dwn.processMessage(alice.did, recordsSubscribe.message);
|
|
135
|
+
expect(reply.status.code).to.equal(400);
|
|
136
|
+
expect(reply.status.detail).to.contain(DwnErrorCode.UrlProtocolNotNormalized);
|
|
137
|
+
}));
|
|
138
|
+
it('should return 400 if schema is not normalized', () => __awaiter(this, void 0, void 0, function* () {
|
|
139
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
140
|
+
// subscribe for non-normalized schema
|
|
141
|
+
const recordsSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
|
|
142
|
+
author: alice,
|
|
143
|
+
filter: { schema: 'example.com/' },
|
|
144
|
+
});
|
|
145
|
+
// overwrite schema because #create auto-normalizes schema
|
|
146
|
+
recordsSubscribe.message.descriptor.filter.schema = 'example.com/';
|
|
147
|
+
// Re-create auth because we altered the descriptor after signing
|
|
148
|
+
recordsSubscribe.message.authorization = yield Message.createAuthorization({
|
|
149
|
+
descriptor: recordsSubscribe.message.descriptor,
|
|
150
|
+
signer: Jws.createSigner(alice)
|
|
151
|
+
});
|
|
152
|
+
// Send records subscribe message
|
|
153
|
+
const reply = yield dwn.processMessage(alice.did, recordsSubscribe.message);
|
|
154
|
+
expect(reply.status.code).to.equal(400);
|
|
155
|
+
expect(reply.status.detail).to.contain(DwnErrorCode.UrlSchemaNotNormalized);
|
|
156
|
+
}));
|
|
157
|
+
it('should return 400 if published is set to false and a datePublished range is provided', () => __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
const fromDatePublished = Time.getCurrentTimestamp();
|
|
159
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
160
|
+
// set to true so create does not fail
|
|
161
|
+
const recordSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
|
|
162
|
+
author: alice,
|
|
163
|
+
filter: { datePublished: { from: fromDatePublished }, published: true }
|
|
164
|
+
});
|
|
165
|
+
// set to false
|
|
166
|
+
recordSubscribe.message.descriptor.filter.published = false;
|
|
167
|
+
const subscribeResponse = yield dwn.processMessage(alice.did, recordSubscribe.message);
|
|
168
|
+
expect(subscribeResponse.status.code).to.equal(400);
|
|
169
|
+
expect(subscribeResponse.status.detail).to.contain('descriptor/filter/published: must be equal to one of the allowed values');
|
|
170
|
+
}));
|
|
171
|
+
it('should return 401 for anonymous subscriptions that filter explicitly for unpublished records', () => __awaiter(this, void 0, void 0, function* () {
|
|
172
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
173
|
+
// create an unpublished record
|
|
174
|
+
const draftWrite = yield TestDataGenerator.generateRecordsWrite({ author: alice, schema: 'post' });
|
|
175
|
+
const draftWriteReply = yield dwn.processMessage(alice.did, draftWrite.message, { dataStream: draftWrite.dataStream });
|
|
176
|
+
expect(draftWriteReply.status.code).to.equal(202);
|
|
177
|
+
// validate that alice can subscribe
|
|
178
|
+
const unpublishedPostSubscribe = yield TestDataGenerator.generateRecordsSubscribe({ author: alice, filter: { schema: 'post', published: false } });
|
|
179
|
+
const unpublishedPostReply = yield dwn.processMessage(alice.did, unpublishedPostSubscribe.message, { subscriptionHandler: () => { } });
|
|
180
|
+
expect(unpublishedPostReply.status.code).to.equal(200);
|
|
181
|
+
expect(unpublishedPostReply.subscription).to.exist;
|
|
182
|
+
// anonymous subscribe for unpublished records
|
|
183
|
+
const unpublishedAnonymous = yield RecordsSubscribe.create({ filter: { schema: 'post', published: false } });
|
|
184
|
+
const anonymousPostReply = yield dwn.processMessage(alice.did, unpublishedAnonymous.message);
|
|
185
|
+
expect(anonymousPostReply.status.code).to.equal(401);
|
|
186
|
+
expect(anonymousPostReply.status.detail).contains('Missing JWS');
|
|
187
|
+
expect(anonymousPostReply.subscription).to.not.exist;
|
|
188
|
+
}));
|
|
189
|
+
it('should return 401 if signature check fails', () => __awaiter(this, void 0, void 0, function* () {
|
|
190
|
+
const { author, message } = yield TestDataGenerator.generateRecordsSubscribe();
|
|
191
|
+
const tenant = author.did;
|
|
192
|
+
// setting up a stub did resolver & message store
|
|
193
|
+
// intentionally not supplying the public key so a different public key is generated to simulate invalid signature
|
|
194
|
+
const mismatchingPersona = yield TestDataGenerator.generatePersona({ did: author.did, keyId: author.keyId });
|
|
195
|
+
const didResolver = TestStubGenerator.createDidResolverStub(mismatchingPersona);
|
|
196
|
+
const messageStoreStub = sinon.createStubInstance(MessageStoreLevel);
|
|
197
|
+
const eventStreamStub = sinon.createStubInstance(EventEmitterStream);
|
|
198
|
+
const recordsSubscribeHandler = new RecordsSubscribeHandler(didResolver, messageStoreStub, eventStreamStub);
|
|
199
|
+
const reply = yield recordsSubscribeHandler.handle({ tenant, message, subscriptionHandler: () => { } });
|
|
200
|
+
expect(reply.status.code).to.equal(401);
|
|
201
|
+
}));
|
|
202
|
+
it('should return 400 if fail parsing the message', () => __awaiter(this, void 0, void 0, function* () {
|
|
203
|
+
const { author, message } = yield TestDataGenerator.generateRecordsSubscribe();
|
|
204
|
+
const tenant = author.did;
|
|
205
|
+
// setting up a stub method resolver & message store
|
|
206
|
+
const didResolver = TestStubGenerator.createDidResolverStub(author);
|
|
207
|
+
const messageStoreStub = sinon.createStubInstance(MessageStoreLevel);
|
|
208
|
+
const eventStreamStub = sinon.createStubInstance(EventEmitterStream);
|
|
209
|
+
const recordsSubscribeHandler = new RecordsSubscribeHandler(didResolver, messageStoreStub, eventStreamStub);
|
|
210
|
+
// stub the `parse()` function to throw an error
|
|
211
|
+
sinon.stub(RecordsSubscribe, 'parse').throws('anyError');
|
|
212
|
+
const reply = yield recordsSubscribeHandler.handle({ tenant, message, subscriptionHandler: () => { } });
|
|
213
|
+
expect(reply.status.code).to.equal(400);
|
|
214
|
+
}));
|
|
215
|
+
describe('protocol based subscriptions', () => {
|
|
216
|
+
it('does not try protocol authorization if protocolRole is not invoked', () => __awaiter(this, void 0, void 0, function* () {
|
|
217
|
+
// scenario:
|
|
218
|
+
// Bob and Carol subscribe to a chat protocol without invoking a protocolRole,
|
|
219
|
+
// they should receive chat messages addressed to them, respectively.
|
|
220
|
+
// Alice creates a thread and writes some chat messages to Bob and Carol.
|
|
221
|
+
// Bob receives only the chat messages addressed to him, Carol receives only the chat messages addressed to her.
|
|
222
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
223
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
224
|
+
const carol = yield TestDataGenerator.generateDidKeyPersona();
|
|
225
|
+
const protocolDefinition = threadRoleProtocolDefinition;
|
|
226
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
227
|
+
author: alice,
|
|
228
|
+
protocolDefinition
|
|
229
|
+
});
|
|
230
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
231
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
232
|
+
const bobMessages = [];
|
|
233
|
+
const handleForBob = (event) => __awaiter(this, void 0, void 0, function* () {
|
|
234
|
+
const { message } = event;
|
|
235
|
+
const messageCid = yield Message.getCid(message);
|
|
236
|
+
bobMessages.push(messageCid);
|
|
237
|
+
});
|
|
238
|
+
const bobSubscription = yield TestDataGenerator.generateRecordsSubscribe({
|
|
239
|
+
author: bob,
|
|
240
|
+
filter: {
|
|
241
|
+
published: false,
|
|
242
|
+
protocol: protocolDefinition.protocol,
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
const subscriptionReply = yield dwn.processMessage(alice.did, bobSubscription.message, { subscriptionHandler: handleForBob });
|
|
246
|
+
expect(subscriptionReply.status.code).to.equal(200);
|
|
247
|
+
expect(subscriptionReply.subscription).to.exist;
|
|
248
|
+
const carolMessages = [];
|
|
249
|
+
const handleForCarol = (event) => __awaiter(this, void 0, void 0, function* () {
|
|
250
|
+
const { message } = event;
|
|
251
|
+
const messageCid = yield Message.getCid(message);
|
|
252
|
+
carolMessages.push(messageCid);
|
|
253
|
+
});
|
|
254
|
+
const carolSubscription = yield TestDataGenerator.generateRecordsSubscribe({
|
|
255
|
+
author: carol,
|
|
256
|
+
filter: {
|
|
257
|
+
published: false,
|
|
258
|
+
protocol: protocolDefinition.protocol,
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
const carolSubscriptionReply = yield dwn.processMessage(alice.did, carolSubscription.message, { subscriptionHandler: handleForCarol });
|
|
262
|
+
expect(carolSubscriptionReply.status.code).to.equal(200);
|
|
263
|
+
expect(carolSubscriptionReply.subscription).to.exist;
|
|
264
|
+
// Alice writes a 'thread' record
|
|
265
|
+
const threadRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
266
|
+
author: alice,
|
|
267
|
+
protocol: protocolDefinition.protocol,
|
|
268
|
+
protocolPath: 'thread',
|
|
269
|
+
});
|
|
270
|
+
const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
|
|
271
|
+
expect(threadRoleReply.status.code).to.equal(202);
|
|
272
|
+
// Alice writes one 'chat' record addressed to Bob
|
|
273
|
+
const chatRecordForBob = yield TestDataGenerator.generateRecordsWrite({
|
|
274
|
+
author: alice,
|
|
275
|
+
recipient: bob.did,
|
|
276
|
+
protocol: protocolDefinition.protocol,
|
|
277
|
+
protocolPath: 'thread/chat',
|
|
278
|
+
published: false,
|
|
279
|
+
parentContextId: threadRecord.message.contextId,
|
|
280
|
+
data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
|
|
281
|
+
});
|
|
282
|
+
const chatRecordForBobReply = yield dwn.processMessage(alice.did, chatRecordForBob.message, { dataStream: chatRecordForBob.dataStream });
|
|
283
|
+
expect(chatRecordForBobReply.status.code).to.equal(202);
|
|
284
|
+
const chatRecordForBobCid = yield Message.getCid(chatRecordForBob.message);
|
|
285
|
+
// Alice writes two 'chat' records addressed to Carol
|
|
286
|
+
const chatRecordForCarol1 = yield TestDataGenerator.generateRecordsWrite({
|
|
287
|
+
author: alice,
|
|
288
|
+
recipient: carol.did,
|
|
289
|
+
protocol: protocolDefinition.protocol,
|
|
290
|
+
protocolPath: 'thread/chat',
|
|
291
|
+
published: false,
|
|
292
|
+
parentContextId: threadRecord.message.contextId,
|
|
293
|
+
data: new TextEncoder().encode('Bob cannot read this'),
|
|
294
|
+
});
|
|
295
|
+
const chatRecordForCarol1Reply = yield dwn.processMessage(alice.did, chatRecordForCarol1.message, { dataStream: chatRecordForCarol1.dataStream });
|
|
296
|
+
expect(chatRecordForCarol1Reply.status.code).to.equal(202);
|
|
297
|
+
const chatRecordForCarol1Cid = yield Message.getCid(chatRecordForCarol1.message);
|
|
298
|
+
const chatRecordForCarol2 = yield TestDataGenerator.generateRecordsWrite({
|
|
299
|
+
author: alice,
|
|
300
|
+
recipient: carol.did,
|
|
301
|
+
protocol: protocolDefinition.protocol,
|
|
302
|
+
protocolPath: 'thread/chat',
|
|
303
|
+
published: false,
|
|
304
|
+
parentContextId: threadRecord.message.contextId,
|
|
305
|
+
data: new TextEncoder().encode('Bob cannot read this either'),
|
|
306
|
+
});
|
|
307
|
+
const chatRecordForCarol2Reply = yield dwn.processMessage(alice.did, chatRecordForCarol2.message, { dataStream: chatRecordForCarol2.dataStream });
|
|
308
|
+
expect(chatRecordForCarol2Reply.status.code).to.equal(202);
|
|
309
|
+
const chatRecordForCarol2Cid = yield Message.getCid(chatRecordForCarol2.message);
|
|
310
|
+
yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
311
|
+
expect(bobMessages.length).to.equal(1);
|
|
312
|
+
expect(bobMessages).to.have.members([chatRecordForBobCid]);
|
|
313
|
+
}));
|
|
314
|
+
yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
315
|
+
expect(carolMessages.length).to.equal(2);
|
|
316
|
+
expect(carolMessages).to.have.members([chatRecordForCarol1Cid, chatRecordForCarol2Cid]);
|
|
317
|
+
}));
|
|
318
|
+
}));
|
|
319
|
+
it('allows root-level role authorized subscriptions', () => __awaiter(this, void 0, void 0, function* () {
|
|
320
|
+
// scenario: Alice creates a thread and writes some chat messages writes a chat message. Bob invokes his
|
|
321
|
+
// thread member role in order to subscribe to the chat messages.
|
|
322
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
323
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
324
|
+
const carol = yield TestDataGenerator.generateDidKeyPersona();
|
|
325
|
+
const protocolDefinition = friendRoleProtocolDefinition;
|
|
326
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
327
|
+
author: alice,
|
|
328
|
+
protocolDefinition
|
|
329
|
+
});
|
|
330
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
331
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
332
|
+
const filter = {
|
|
333
|
+
protocol: protocolDefinition.protocol,
|
|
334
|
+
protocolPath: 'chat'
|
|
335
|
+
};
|
|
336
|
+
const noRoleRecords = new Set();
|
|
337
|
+
const addNoRole = (event) => __awaiter(this, void 0, void 0, function* () {
|
|
338
|
+
const { message } = event;
|
|
339
|
+
if (message.descriptor.method === DwnMethodName.Write) {
|
|
340
|
+
const recordsWriteMessage = message;
|
|
341
|
+
noRoleRecords.add(recordsWriteMessage.recordId);
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
noRoleRecords.delete(message.descriptor.recordId);
|
|
345
|
+
}
|
|
346
|
+
});
|
|
347
|
+
// subscribe without role, expect no messages
|
|
348
|
+
const noRoleSubscription = yield TestDataGenerator.generateRecordsSubscribe({
|
|
349
|
+
author: bob,
|
|
350
|
+
filter
|
|
351
|
+
});
|
|
352
|
+
const subscriptionReply = yield dwn.processMessage(alice.did, noRoleSubscription.message, { subscriptionHandler: addNoRole });
|
|
353
|
+
expect(subscriptionReply.status.code).to.equal(200);
|
|
354
|
+
expect(subscriptionReply.subscription).to.exist;
|
|
355
|
+
// Alice writes a 'friend' root-level role record with Bob as recipient
|
|
356
|
+
const friendRoleRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
357
|
+
author: alice,
|
|
358
|
+
recipient: bob.did,
|
|
359
|
+
protocol: protocolDefinition.protocol,
|
|
360
|
+
protocolPath: 'friend',
|
|
361
|
+
data: new TextEncoder().encode('Bob is my friend'),
|
|
362
|
+
});
|
|
363
|
+
const friendRoleReply = yield dwn.processMessage(alice.did, friendRoleRecord.message, { dataStream: friendRoleRecord.dataStream });
|
|
364
|
+
expect(friendRoleReply.status.code).to.equal(202);
|
|
365
|
+
const recordIds = new Set();
|
|
366
|
+
const addRecord = (event) => __awaiter(this, void 0, void 0, function* () {
|
|
367
|
+
const { message } = event;
|
|
368
|
+
if (message.descriptor.method === DwnMethodName.Write) {
|
|
369
|
+
const recordsWriteMessage = message;
|
|
370
|
+
recordIds.add(recordsWriteMessage.recordId);
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
recordIds.delete(message.descriptor.recordId);
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
// subscribe with friend role
|
|
377
|
+
const bobSubscriptionWithRole = yield TestDataGenerator.generateRecordsSubscribe({
|
|
378
|
+
filter,
|
|
379
|
+
author: bob,
|
|
380
|
+
protocolRole: 'friend',
|
|
381
|
+
});
|
|
382
|
+
const subscriptionWithRoleReply = yield dwn.processMessage(alice.did, bobSubscriptionWithRole.message, { subscriptionHandler: addRecord });
|
|
383
|
+
expect(subscriptionWithRoleReply.status.code).to.equal(200);
|
|
384
|
+
expect(subscriptionWithRoleReply.subscription).to.exist;
|
|
385
|
+
// Create one chat message for Bob as a control to show up in the `noRoleRecords` array
|
|
386
|
+
const chatRecordForBob = yield TestDataGenerator.generateRecordsWrite({
|
|
387
|
+
author: alice,
|
|
388
|
+
recipient: bob.did,
|
|
389
|
+
protocol: protocolDefinition.protocol,
|
|
390
|
+
protocolPath: 'chat',
|
|
391
|
+
published: false,
|
|
392
|
+
data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
|
|
393
|
+
});
|
|
394
|
+
const chatRecordForBobReply = yield dwn.processMessage(alice.did, chatRecordForBob.message, { dataStream: chatRecordForBob.dataStream });
|
|
395
|
+
expect(chatRecordForBobReply.status.code).to.equal(202);
|
|
396
|
+
// Alice writes three more 'chat' records for carol, Bob's friend role should allow him to see these messages.
|
|
397
|
+
const chatRecordIds = [];
|
|
398
|
+
for (let i = 0; i < 3; i++) {
|
|
399
|
+
const chatRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
400
|
+
author: alice,
|
|
401
|
+
recipient: carol.did,
|
|
402
|
+
protocol: protocolDefinition.protocol,
|
|
403
|
+
protocolPath: 'chat',
|
|
404
|
+
published: false,
|
|
405
|
+
data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
|
|
406
|
+
});
|
|
407
|
+
const chatReply = yield dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
|
|
408
|
+
expect(chatReply.status.code).to.equal(202);
|
|
409
|
+
chatRecordIds.push(chatRecord.message.recordId);
|
|
410
|
+
}
|
|
411
|
+
// there should only be the control message for bob in the subscription without a friend role.
|
|
412
|
+
yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
413
|
+
expect(noRoleRecords.size).to.equal(1);
|
|
414
|
+
expect([...noRoleRecords]).to.have.members([chatRecordForBob.message.recordId]);
|
|
415
|
+
}));
|
|
416
|
+
// All chats should be in the subscription with the friend role.
|
|
417
|
+
yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
418
|
+
expect(recordIds.size).to.equal(4);
|
|
419
|
+
expect([...recordIds]).to.have.members([chatRecordForBob.message.recordId, ...chatRecordIds]);
|
|
420
|
+
}));
|
|
421
|
+
// TODO: https://github.com/TBD54566975/dwn-sdk-js/issues/759
|
|
422
|
+
// When `RecordsSubscribeHandler` builds up the matchFilters there are no matching filters for a delete within a context
|
|
423
|
+
// so the delete event is not being captured by the subscription handler. This is likely due to some of the filters including
|
|
424
|
+
// `published: false` which is a mutable property and not included with the delete event
|
|
425
|
+
//
|
|
426
|
+
// When the issue is resolved, uncomment the code below
|
|
427
|
+
// Delete a chat message for Bob
|
|
428
|
+
// const chatForBobDelete = await TestDataGenerator.generateRecordsDelete({
|
|
429
|
+
// author : alice,
|
|
430
|
+
// recordId : chatRecordForBob.message.recordId,
|
|
431
|
+
// });
|
|
432
|
+
// const chatForBobDeleteReply = await dwn.processMessage(alice.did, chatForBobDelete.message);
|
|
433
|
+
// expect(chatForBobDeleteReply.status.code).to.equal(202);
|
|
434
|
+
// // Delete one of the other chat messages
|
|
435
|
+
// const chatForCarolDelete = await TestDataGenerator.generateRecordsDelete({
|
|
436
|
+
// author : alice,
|
|
437
|
+
// recordId : chatRecordIds[0],
|
|
438
|
+
// });
|
|
439
|
+
// const chatForCarolDeleteReply = await dwn.processMessage(alice.did, chatForCarolDelete.message);
|
|
440
|
+
// expect(chatForCarolDeleteReply.status.code).to.equal(202);
|
|
441
|
+
// await Poller.pollUntilSuccessOrTimeout(async () => {
|
|
442
|
+
// expect(noRoleRecords.size).to.equal(0); // chat record was removed from the set
|
|
443
|
+
// expect(recordIds.size).to.equal(2); // both chat records were removed from the set
|
|
444
|
+
// expect([ ...recordIds ]).to.have.members([ ...chatRecordIds.slice(1) ]); // only the last two chat records remain
|
|
445
|
+
// });
|
|
446
|
+
}));
|
|
447
|
+
it('can authorize subscriptions using a context role', () => __awaiter(this, void 0, void 0, function* () {
|
|
448
|
+
// scenario: Alice writes some chat messages.
|
|
449
|
+
// Bob, having a thread/participant record, can subscribe to the chat.
|
|
450
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
451
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
452
|
+
const protocolDefinition = threadRoleProtocolDefinition;
|
|
453
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
454
|
+
author: alice,
|
|
455
|
+
protocolDefinition
|
|
456
|
+
});
|
|
457
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
458
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
459
|
+
// Alice writes a 'thread' record
|
|
460
|
+
const threadRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
461
|
+
author: alice,
|
|
462
|
+
protocol: protocolDefinition.protocol,
|
|
463
|
+
protocolPath: 'thread',
|
|
464
|
+
});
|
|
465
|
+
const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
|
|
466
|
+
expect(threadRoleReply.status.code).to.equal(202);
|
|
467
|
+
const filter = {
|
|
468
|
+
protocol: protocolDefinition.protocol,
|
|
469
|
+
protocolPath: 'thread/chat',
|
|
470
|
+
contextId: threadRecord.message.contextId,
|
|
471
|
+
};
|
|
472
|
+
const noRoleRecords = [];
|
|
473
|
+
const addNoRole = (event) => __awaiter(this, void 0, void 0, function* () {
|
|
474
|
+
const { message } = event;
|
|
475
|
+
if (message.descriptor.method === DwnMethodName.Write) {
|
|
476
|
+
const recordsWriteMessage = message;
|
|
477
|
+
noRoleRecords.push(recordsWriteMessage.recordId);
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
// subscribe without role, expect no messages
|
|
481
|
+
const noRoleSubscription = yield TestDataGenerator.generateRecordsSubscribe({
|
|
482
|
+
author: bob,
|
|
483
|
+
filter
|
|
484
|
+
});
|
|
485
|
+
const subscriptionReply = yield dwn.processMessage(alice.did, noRoleSubscription.message, { subscriptionHandler: addNoRole });
|
|
486
|
+
expect(subscriptionReply.status.code).to.equal(200);
|
|
487
|
+
expect(subscriptionReply.subscription).to.exist;
|
|
488
|
+
// Alice writes a 'participant' role record with Bob as recipient
|
|
489
|
+
const participantRoleRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
490
|
+
author: alice,
|
|
491
|
+
recipient: bob.did,
|
|
492
|
+
protocol: protocolDefinition.protocol,
|
|
493
|
+
protocolPath: 'thread/participant',
|
|
494
|
+
parentContextId: threadRecord.message.contextId,
|
|
495
|
+
data: new TextEncoder().encode('Bob is my friend'),
|
|
496
|
+
});
|
|
497
|
+
const participantRoleReply = yield dwn.processMessage(alice.did, participantRoleRecord.message, { dataStream: participantRoleRecord.dataStream });
|
|
498
|
+
expect(participantRoleReply.status.code).to.equal(202);
|
|
499
|
+
const recordIds = [];
|
|
500
|
+
const addRecord = (event) => __awaiter(this, void 0, void 0, function* () {
|
|
501
|
+
const { message } = event;
|
|
502
|
+
if (message.descriptor.method === DwnMethodName.Write) {
|
|
503
|
+
const recordsWriteMessage = message;
|
|
504
|
+
recordIds.push(recordsWriteMessage.recordId);
|
|
505
|
+
}
|
|
506
|
+
});
|
|
507
|
+
// subscribe with the participant role
|
|
508
|
+
const bobSubscriptionWithRole = yield TestDataGenerator.generateRecordsSubscribe({
|
|
509
|
+
filter,
|
|
510
|
+
author: bob,
|
|
511
|
+
protocolRole: 'thread/participant',
|
|
512
|
+
});
|
|
513
|
+
const subscriptionWithRoleReply = yield dwn.processMessage(alice.did, bobSubscriptionWithRole.message, { subscriptionHandler: addRecord });
|
|
514
|
+
expect(subscriptionWithRoleReply.status.code).to.equal(200);
|
|
515
|
+
expect(subscriptionWithRoleReply.subscription).to.exist;
|
|
516
|
+
// Alice writes three 'chat' records
|
|
517
|
+
const chatRecordIds = [];
|
|
518
|
+
for (let i = 0; i < 3; i++) {
|
|
519
|
+
const chatRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
520
|
+
author: alice,
|
|
521
|
+
recipient: alice.did,
|
|
522
|
+
protocol: protocolDefinition.protocol,
|
|
523
|
+
protocolPath: 'thread/chat',
|
|
524
|
+
published: false,
|
|
525
|
+
parentContextId: threadRecord.message.contextId,
|
|
526
|
+
data: new TextEncoder().encode('Bob can read this cuz he is my friend'),
|
|
527
|
+
});
|
|
528
|
+
const chatReply = yield dwn.processMessage(alice.did, chatRecord.message, { dataStream: chatRecord.dataStream });
|
|
529
|
+
expect(chatReply.status.code).to.equal(202);
|
|
530
|
+
chatRecordIds.push(chatRecord.message.recordId);
|
|
531
|
+
}
|
|
532
|
+
yield Poller.pollUntilSuccessOrTimeout(() => __awaiter(this, void 0, void 0, function* () {
|
|
533
|
+
// should have all chat messages.
|
|
534
|
+
expect(recordIds).to.have.members(chatRecordIds);
|
|
535
|
+
// there should not be any messages in the subscription without a participant role.
|
|
536
|
+
expect(noRoleRecords.length).to.equal(0);
|
|
537
|
+
}));
|
|
538
|
+
}));
|
|
539
|
+
it('does not execute protocol subscriptions where protocolPath is missing from the filter', () => __awaiter(this, void 0, void 0, function* () {
|
|
540
|
+
// scenario: Alice assigns Bob a friend role and writes some chat messages. Bob invokes his role to subscribe those messages,
|
|
541
|
+
// but his subscription filter does not include protocolPath.
|
|
542
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
543
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
544
|
+
const protocolDefinition = friendRoleProtocolDefinition;
|
|
545
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
546
|
+
author: alice,
|
|
547
|
+
protocolDefinition
|
|
548
|
+
});
|
|
549
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
550
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
551
|
+
// Alice writes a 'friend' root-level role record with Bob as recipient
|
|
552
|
+
const friendRoleRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
553
|
+
author: alice,
|
|
554
|
+
recipient: bob.did,
|
|
555
|
+
protocol: protocolDefinition.protocol,
|
|
556
|
+
protocolPath: 'friend',
|
|
557
|
+
data: new TextEncoder().encode('Bob is my friend'),
|
|
558
|
+
});
|
|
559
|
+
const friendRoleReply = yield dwn.processMessage(alice.did, friendRoleRecord.message, { dataStream: friendRoleRecord.dataStream });
|
|
560
|
+
expect(friendRoleReply.status.code).to.equal(202);
|
|
561
|
+
// Bob invokes his friendRole to subscribe but does not have `protocolPath` in the filter
|
|
562
|
+
const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
|
|
563
|
+
author: bob,
|
|
564
|
+
filter: {
|
|
565
|
+
protocol: protocolDefinition.protocol,
|
|
566
|
+
// protocolPath deliberately omitted
|
|
567
|
+
},
|
|
568
|
+
protocolRole: 'friend',
|
|
569
|
+
});
|
|
570
|
+
const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
|
|
571
|
+
expect(chatSubscribeReply.status.code).to.equal(400);
|
|
572
|
+
expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.RecordsSubscribeFilterMissingRequiredProperties);
|
|
573
|
+
expect(chatSubscribeReply.subscription).to.not.exist;
|
|
574
|
+
}));
|
|
575
|
+
it('does not execute context role authorized subscriptions where contextId is missing from the filter', () => __awaiter(this, void 0, void 0, function* () {
|
|
576
|
+
// scenario: Alice gives Bob a role allowing him to access a particular chat thread.
|
|
577
|
+
// But Bob's filter does not contain a contextId so the subscription fails.
|
|
578
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
579
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
580
|
+
const protocolDefinition = threadRoleProtocolDefinition;
|
|
581
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
582
|
+
author: alice,
|
|
583
|
+
protocolDefinition
|
|
584
|
+
});
|
|
585
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
586
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
587
|
+
// Alice writes a 'thread' record
|
|
588
|
+
const threadRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
589
|
+
author: alice,
|
|
590
|
+
protocol: protocolDefinition.protocol,
|
|
591
|
+
protocolPath: 'thread',
|
|
592
|
+
});
|
|
593
|
+
const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
|
|
594
|
+
expect(threadRoleReply.status.code).to.equal(202);
|
|
595
|
+
// Alice writes a 'friend' root-level role record with Bob as recipient
|
|
596
|
+
const participantRoleRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
597
|
+
author: alice,
|
|
598
|
+
recipient: bob.did,
|
|
599
|
+
protocol: protocolDefinition.protocol,
|
|
600
|
+
protocolPath: 'thread/participant',
|
|
601
|
+
parentContextId: threadRecord.message.contextId,
|
|
602
|
+
data: new TextEncoder().encode('Bob is my friend'),
|
|
603
|
+
});
|
|
604
|
+
const participantRoleReply = yield dwn.processMessage(alice.did, participantRoleRecord.message, { dataStream: participantRoleRecord.dataStream });
|
|
605
|
+
expect(participantRoleReply.status.code).to.equal(202);
|
|
606
|
+
// Bob invokes his thread participant role to subscribe but omits the contextId
|
|
607
|
+
const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
|
|
608
|
+
author: bob,
|
|
609
|
+
filter: {
|
|
610
|
+
protocol: protocolDefinition.protocol,
|
|
611
|
+
protocolPath: 'thread/chat',
|
|
612
|
+
// contextId deliberately omitted
|
|
613
|
+
},
|
|
614
|
+
protocolRole: 'thread/participant',
|
|
615
|
+
});
|
|
616
|
+
const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
|
|
617
|
+
expect(chatSubscribeReply.status.code).to.eq(401);
|
|
618
|
+
expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationMissingContextId);
|
|
619
|
+
expect(chatSubscribeReply.subscription).to.not.exist;
|
|
620
|
+
}));
|
|
621
|
+
it('rejects role authorized subscriptions if the request author does not have a matching root-level role', () => __awaiter(this, void 0, void 0, function* () {
|
|
622
|
+
// scenario: Alice installs a chat protocol.
|
|
623
|
+
// Bob invokes a root-level role within that protocol to subscribe but fails because he does not actually have a role.
|
|
624
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
625
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
626
|
+
const protocolDefinition = friendRoleProtocolDefinition;
|
|
627
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
628
|
+
author: alice,
|
|
629
|
+
protocolDefinition
|
|
630
|
+
});
|
|
631
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
632
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
633
|
+
// Bob invokes a friendRole he does not have to subscribe to the records
|
|
634
|
+
const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
|
|
635
|
+
author: bob,
|
|
636
|
+
filter: {
|
|
637
|
+
protocol: protocolDefinition.protocol,
|
|
638
|
+
protocolPath: 'chat',
|
|
639
|
+
},
|
|
640
|
+
protocolRole: 'friend',
|
|
641
|
+
});
|
|
642
|
+
const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
|
|
643
|
+
expect(chatSubscribeReply.status.code).to.eq(401);
|
|
644
|
+
expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound);
|
|
645
|
+
expect(chatSubscribeReply.subscription).to.not.exist;
|
|
646
|
+
}));
|
|
647
|
+
it('rejects role authorized subscriptions where the subscription author does not have a matching context role', () => __awaiter(this, void 0, void 0, function* () {
|
|
648
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
649
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
650
|
+
const protocolDefinition = threadRoleProtocolDefinition;
|
|
651
|
+
const protocolsConfig = yield TestDataGenerator.generateProtocolsConfigure({
|
|
652
|
+
author: alice,
|
|
653
|
+
protocolDefinition
|
|
654
|
+
});
|
|
655
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
656
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
657
|
+
// Alice writes a 'thread' record
|
|
658
|
+
const threadRecord = yield TestDataGenerator.generateRecordsWrite({
|
|
659
|
+
author: alice,
|
|
660
|
+
protocol: protocolDefinition.protocol,
|
|
661
|
+
protocolPath: 'thread',
|
|
662
|
+
});
|
|
663
|
+
const threadRoleReply = yield dwn.processMessage(alice.did, threadRecord.message, { dataStream: threadRecord.dataStream });
|
|
664
|
+
expect(threadRoleReply.status.code).to.equal(202);
|
|
665
|
+
// Bob invokes his a `thread/participant` role which he does not have to subscribe to the records
|
|
666
|
+
const chatSubscribe = yield TestDataGenerator.generateRecordsSubscribe({
|
|
667
|
+
author: bob,
|
|
668
|
+
filter: {
|
|
669
|
+
protocol: protocolDefinition.protocol,
|
|
670
|
+
protocolPath: 'thread/chat',
|
|
671
|
+
contextId: threadRecord.message.contextId,
|
|
672
|
+
},
|
|
673
|
+
protocolRole: 'thread/participant',
|
|
674
|
+
});
|
|
675
|
+
const chatSubscribeReply = yield dwn.processMessage(alice.did, chatSubscribe.message);
|
|
676
|
+
expect(chatSubscribeReply.status.code).to.eq(401);
|
|
677
|
+
expect(chatSubscribeReply.status.detail).to.contain(DwnErrorCode.ProtocolAuthorizationMatchingRoleRecordNotFound);
|
|
678
|
+
expect(chatSubscribeReply.subscription).to.not.exist;
|
|
679
|
+
}));
|
|
680
|
+
});
|
|
681
|
+
});
|
|
682
|
+
});
|
|
683
|
+
}
|
|
684
|
+
//# sourceMappingURL=records-subscribe.spec.js.map
|