@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,584 @@
|
|
|
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 minimalProtocolDefinition from '../vectors/protocol-definitions/minimal.json' assert { type: 'json' };
|
|
12
|
+
import sinon from 'sinon';
|
|
13
|
+
import chai, { expect } from 'chai';
|
|
14
|
+
import { DataStream } from '../../src/utils/data-stream.js';
|
|
15
|
+
import { Dwn } from '../../src/dwn.js';
|
|
16
|
+
import { DwnErrorCode } from '../../src/core/dwn-error.js';
|
|
17
|
+
import { Jws } from '../../src/utils/jws.js';
|
|
18
|
+
import { PermissionGrant } from '../../src/protocols/permission-grant.js';
|
|
19
|
+
import { RecordsWrite } from '../../src/interfaces/records-write.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 { Time } from '../../src/utils/time.js';
|
|
24
|
+
import { DidKey, UniversalResolver } from '@enbox/dids';
|
|
25
|
+
import { DwnInterfaceName, DwnMethodName, Encoder, PermissionsProtocol, ProtocolsConfigure } from '../../src/index.js';
|
|
26
|
+
chai.use(chaiAsPromised);
|
|
27
|
+
export function testOwnerDelegatedGrant() {
|
|
28
|
+
describe('owner delegated grant', () => __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
let didResolver;
|
|
30
|
+
let messageStore;
|
|
31
|
+
let dataStore;
|
|
32
|
+
let resumableTaskStore;
|
|
33
|
+
let eventLog;
|
|
34
|
+
let eventStream;
|
|
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
|
+
eventStream = TestEventStream.get();
|
|
46
|
+
dwn = yield Dwn.create({ didResolver, messageStore, dataStore, eventLog, eventStream, resumableTaskStore });
|
|
47
|
+
}));
|
|
48
|
+
beforeEach(() => __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
|
|
50
|
+
// clean up before each test rather than after so that a test does not depend on other tests to do the clean up
|
|
51
|
+
yield messageStore.clear();
|
|
52
|
+
yield dataStore.clear();
|
|
53
|
+
yield resumableTaskStore.clear();
|
|
54
|
+
yield eventLog.clear();
|
|
55
|
+
}));
|
|
56
|
+
after(() => __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
yield dwn.close();
|
|
58
|
+
}));
|
|
59
|
+
describe('RecordsWrite.parse()', () => __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
it('should throw if a message invokes an owner-delegated grant (ID) but the owner-delegated grant is not given', () => __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
const alice = yield TestDataGenerator.generatePersona();
|
|
62
|
+
const bob = yield TestDataGenerator.generatePersona();
|
|
63
|
+
const appX = yield TestDataGenerator.generatePersona();
|
|
64
|
+
// Alice grants App X to write as her for the chat protocol
|
|
65
|
+
const scope = {
|
|
66
|
+
interface: DwnInterfaceName.Records,
|
|
67
|
+
method: DwnMethodName.Write,
|
|
68
|
+
protocol: 'chat'
|
|
69
|
+
};
|
|
70
|
+
const grantToAppX = yield PermissionsProtocol.createGrant({
|
|
71
|
+
delegated: true, // this is a delegated grant
|
|
72
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 100 }),
|
|
73
|
+
description: 'Allow App X to write as me in chat protocol',
|
|
74
|
+
grantedTo: appX.did,
|
|
75
|
+
scope,
|
|
76
|
+
signer: Jws.createSigner(alice)
|
|
77
|
+
});
|
|
78
|
+
// Bob creates a RecordsWrite message
|
|
79
|
+
const recordsWrite = yield RecordsWrite.create({
|
|
80
|
+
signer: Jws.createSigner(bob),
|
|
81
|
+
dataFormat: 'application/octet-stream',
|
|
82
|
+
data: TestDataGenerator.randomBytes(10),
|
|
83
|
+
});
|
|
84
|
+
// App X signs over Bob's RecordsWrite as DWN owner but does not include the delegated grant (we remove it below)
|
|
85
|
+
yield recordsWrite.signAsOwnerDelegate(Jws.createSigner(appX), grantToAppX.dataEncodedMessage);
|
|
86
|
+
delete recordsWrite.message.authorization.ownerDelegatedGrant; // intentionally remove `ownerDelegatedGrant`
|
|
87
|
+
const parsePromise = RecordsWrite.parse(recordsWrite.message);
|
|
88
|
+
yield expect(parsePromise).to.be.rejectedWith(DwnErrorCode.RecordsOwnerDelegatedGrantAndIdExistenceMismatch);
|
|
89
|
+
}));
|
|
90
|
+
it('should throw if a message includes an owner-delegated grant but does not reference it in owner signature', () => __awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
const alice = yield TestDataGenerator.generatePersona();
|
|
92
|
+
const bob = yield TestDataGenerator.generatePersona();
|
|
93
|
+
const appX = yield TestDataGenerator.generatePersona();
|
|
94
|
+
// Alice grants App X to write as her for the chat protocol
|
|
95
|
+
const scope = {
|
|
96
|
+
interface: DwnInterfaceName.Records,
|
|
97
|
+
method: DwnMethodName.Write,
|
|
98
|
+
protocol: 'chat'
|
|
99
|
+
};
|
|
100
|
+
const grantToAppX = yield PermissionsProtocol.createGrant({
|
|
101
|
+
delegated: true, // this is a delegated grant
|
|
102
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 100 }),
|
|
103
|
+
description: 'Allow App X to write as me in chat protocol',
|
|
104
|
+
grantedTo: appX.did,
|
|
105
|
+
scope,
|
|
106
|
+
signer: Jws.createSigner(alice)
|
|
107
|
+
});
|
|
108
|
+
// Bob creates a RecordsWrite message
|
|
109
|
+
const recordsWrite = yield RecordsWrite.create({
|
|
110
|
+
signer: Jws.createSigner(bob),
|
|
111
|
+
dataFormat: 'application/octet-stream',
|
|
112
|
+
data: TestDataGenerator.randomBytes(10),
|
|
113
|
+
});
|
|
114
|
+
// App X attempts to sign over Bob's RecordsWrite as the DWN owner by including an owner-delegated grant
|
|
115
|
+
// but does not reference the grant ID in owner signature (we remove it below)
|
|
116
|
+
yield recordsWrite.signAsOwnerDelegate(Jws.createSigner(appX), grantToAppX.dataEncodedMessage);
|
|
117
|
+
const ownerSignaturePayloadCopy = Object.assign({}, recordsWrite.ownerSignaturePayload);
|
|
118
|
+
delete ownerSignaturePayloadCopy.delegatedGrantId; // intentionally remove `delegatedGrantId` in ownerSignature
|
|
119
|
+
recordsWrite.message.authorization.ownerSignature.payload = Encoder.stringToBase64Url(JSON.stringify(ownerSignaturePayloadCopy));
|
|
120
|
+
const parsePromise = RecordsWrite.parse(recordsWrite.message);
|
|
121
|
+
yield expect(parsePromise).to.be.rejectedWith(DwnErrorCode.RecordsOwnerDelegatedGrantAndIdExistenceMismatch);
|
|
122
|
+
}));
|
|
123
|
+
}));
|
|
124
|
+
it('should only allow correct entity invoking an owner-delegated grant to write', () => __awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
var _a;
|
|
126
|
+
// scenario:
|
|
127
|
+
// 1. Alice installs a protocol
|
|
128
|
+
// 2. Alice creates a delegated grant for app X to write in the protocol
|
|
129
|
+
// 3. A third party (Bob) authors a RecordsWrite
|
|
130
|
+
// 4. Sanity test that Bob's RecordsWrite cannot be written to Alice's DWN by itself
|
|
131
|
+
// 5. Verify that App Y cannot write Bob's message in Alice's DWN by invoking the delegated grant for App X.
|
|
132
|
+
// 6. Verify that App X can successfully write Bob's message in Alice's DWN by invoking an owner-delegated grant
|
|
133
|
+
// 7. Sanity verify the RecordsWrite written by App X
|
|
134
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
135
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
136
|
+
const appX = yield TestDataGenerator.generateDidKeyPersona();
|
|
137
|
+
const appY = yield TestDataGenerator.generateDidKeyPersona();
|
|
138
|
+
// 1. Alice installs a protocol
|
|
139
|
+
const protocolDefinition = minimalProtocolDefinition;
|
|
140
|
+
const protocol = minimalProtocolDefinition.protocol;
|
|
141
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
142
|
+
signer: Jws.createSigner(alice),
|
|
143
|
+
definition: protocolDefinition
|
|
144
|
+
});
|
|
145
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
146
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
147
|
+
// 2. Alice creates a delegated grant for app X to write in the protocol
|
|
148
|
+
const scope = {
|
|
149
|
+
interface: DwnInterfaceName.Records,
|
|
150
|
+
method: DwnMethodName.Write,
|
|
151
|
+
protocol
|
|
152
|
+
};
|
|
153
|
+
const appXGrant = yield PermissionsProtocol.createGrant({
|
|
154
|
+
delegated: true, // this is a delegated grant
|
|
155
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 100 }),
|
|
156
|
+
grantedTo: appX.did,
|
|
157
|
+
scope: scope,
|
|
158
|
+
signer: Jws.createSigner(alice)
|
|
159
|
+
});
|
|
160
|
+
// 3. A third party (Bob) authors a RecordsWrite
|
|
161
|
+
const bobRecordsWriteBytes = new TextEncoder().encode('message from Bob');
|
|
162
|
+
const bobRecordsWrite = yield RecordsWrite.create({
|
|
163
|
+
signer: Jws.createSigner(bob),
|
|
164
|
+
protocol,
|
|
165
|
+
protocolPath: 'foo', // this comes from `types` in protocol definition
|
|
166
|
+
dataFormat: 'any-format',
|
|
167
|
+
data: bobRecordsWriteBytes
|
|
168
|
+
});
|
|
169
|
+
// 4. Sanity test that Bob's RecordsWrite cannot be written to Alice's DWN by itself
|
|
170
|
+
const unauthorizedRecordsWriteReply = yield dwn.processMessage(alice.did, bobRecordsWrite.message, { dataStream: DataStream.fromBytes(bobRecordsWriteBytes) });
|
|
171
|
+
expect(unauthorizedRecordsWriteReply.status.code).to.equal(401);
|
|
172
|
+
// 5. Verify that App Y cannot write Bob's message in Alice's DWN by invoking the delegated grant for App X.
|
|
173
|
+
const appYAugmentedWrite = yield RecordsWrite.parse(bobRecordsWrite.message);
|
|
174
|
+
yield appYAugmentedWrite.signAsOwnerDelegate(Jws.createSigner(appY), appXGrant.dataEncodedMessage);
|
|
175
|
+
const appYWriteReply = yield dwn.processMessage(alice.did, appYAugmentedWrite.message, { dataStream: DataStream.fromBytes(bobRecordsWriteBytes) });
|
|
176
|
+
expect(appYWriteReply.status.code).to.equal(400);
|
|
177
|
+
expect(appYWriteReply.status.detail).to.contain(DwnErrorCode.RecordsOwnerDelegatedGrantGrantedToAndOwnerSignatureMismatch);
|
|
178
|
+
// 6. Verify that App X can successfully write Bob's message in Alice's DWN by invoking an owner-delegated grant
|
|
179
|
+
const appXAugmentedWrite = yield RecordsWrite.parse(bobRecordsWrite.message);
|
|
180
|
+
yield appXAugmentedWrite.signAsOwnerDelegate(Jws.createSigner(appX), appXGrant.dataEncodedMessage);
|
|
181
|
+
const appXWriteReply = yield dwn.processMessage(alice.did, appXAugmentedWrite.message, { dataStream: DataStream.fromBytes(bobRecordsWriteBytes) });
|
|
182
|
+
expect(appXWriteReply.status.code).to.equal(202);
|
|
183
|
+
// 7. Sanity verify the RecordsWrite written by App X
|
|
184
|
+
const recordsQuery = yield TestDataGenerator.generateRecordsQuery({
|
|
185
|
+
author: alice,
|
|
186
|
+
filter: { protocol }
|
|
187
|
+
});
|
|
188
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
189
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
190
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(1);
|
|
191
|
+
const fetchedEntry = recordsQueryReply.entries[0];
|
|
192
|
+
expect(fetchedEntry.encodedData).to.equal(Encoder.bytesToBase64Url(bobRecordsWriteBytes));
|
|
193
|
+
const fetchedRecordsWrite = yield RecordsWrite.parse(fetchedEntry);
|
|
194
|
+
expect(fetchedRecordsWrite.author).to.equal(bob.did);
|
|
195
|
+
}));
|
|
196
|
+
it('should not allow entity using a non-delegated grant as an owner-delegated grant to invoke write', () => __awaiter(this, void 0, void 0, function* () {
|
|
197
|
+
var _a;
|
|
198
|
+
// scenario:
|
|
199
|
+
// 1. Alice installs a protocol
|
|
200
|
+
// 2. Alice creates a non-delegated grant for app X to write in the protocol
|
|
201
|
+
// 3. A third party (Bob) authors a RecordsWrite
|
|
202
|
+
// 4. Verify that App X cannot write Bob's message in Alice's DWN by invoking an non-delegated grant
|
|
203
|
+
// 5. Sanity verify the RecordsWrite is not written by App X
|
|
204
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
205
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
206
|
+
const appX = yield TestDataGenerator.generateDidKeyPersona();
|
|
207
|
+
// 1. Alice installs a protocol
|
|
208
|
+
const protocolDefinition = minimalProtocolDefinition;
|
|
209
|
+
const protocol = minimalProtocolDefinition.protocol;
|
|
210
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
211
|
+
signer: Jws.createSigner(alice),
|
|
212
|
+
definition: protocolDefinition
|
|
213
|
+
});
|
|
214
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
215
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
216
|
+
// 2. Alice creates a non-delegated grant for app X to write in the protocol
|
|
217
|
+
const scope = {
|
|
218
|
+
interface: DwnInterfaceName.Records,
|
|
219
|
+
method: DwnMethodName.Write,
|
|
220
|
+
protocol
|
|
221
|
+
};
|
|
222
|
+
const appXGrant = yield PermissionsProtocol.createGrant({
|
|
223
|
+
// delegated : true, // intentionally commented out to show that this is not a delegated grant
|
|
224
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 100 }),
|
|
225
|
+
grantedTo: appX.did,
|
|
226
|
+
scope: scope,
|
|
227
|
+
signer: Jws.createSigner(alice)
|
|
228
|
+
});
|
|
229
|
+
// 3. A third party (Bob) authors a RecordsWrite
|
|
230
|
+
const bobRecordsWriteBytes = new TextEncoder().encode('message from Bob');
|
|
231
|
+
const bobRecordsWrite = yield RecordsWrite.create({
|
|
232
|
+
signer: Jws.createSigner(bob),
|
|
233
|
+
protocol,
|
|
234
|
+
protocolPath: 'foo', // this comes from `types` in protocol definition
|
|
235
|
+
dataFormat: 'any-format',
|
|
236
|
+
data: bobRecordsWriteBytes
|
|
237
|
+
});
|
|
238
|
+
// 4. Verify that App X cannot write Bob's message in Alice's DWN by invoking an non-delegated grant
|
|
239
|
+
const appXAugmentedWrite = yield RecordsWrite.parse(bobRecordsWrite.message);
|
|
240
|
+
yield appXAugmentedWrite.signAsOwnerDelegate(Jws.createSigner(appX), appXGrant.dataEncodedMessage);
|
|
241
|
+
const appXWriteReply = yield dwn.processMessage(alice.did, appXAugmentedWrite.message, { dataStream: DataStream.fromBytes(bobRecordsWriteBytes) });
|
|
242
|
+
expect(appXWriteReply.status.code).to.equal(400);
|
|
243
|
+
expect(appXWriteReply.status.detail).to.contain(DwnErrorCode.RecordsOwnerDelegatedGrantNotADelegatedGrant);
|
|
244
|
+
// 5. Sanity verify the RecordsWrite is not written by App X
|
|
245
|
+
const recordsQuery = yield TestDataGenerator.generateRecordsQuery({
|
|
246
|
+
author: alice,
|
|
247
|
+
filter: { protocol }
|
|
248
|
+
});
|
|
249
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
250
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
251
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(0);
|
|
252
|
+
}));
|
|
253
|
+
it('should fail if owner-delegated grant invoked for write has a mismatching interface method or protocol scope', () => __awaiter(this, void 0, void 0, function* () {
|
|
254
|
+
var _a;
|
|
255
|
+
// scenario:
|
|
256
|
+
// 1. Alice installs a protocol
|
|
257
|
+
// 2. Alice creates a delegated grant for app X to read in the protocol
|
|
258
|
+
// 3. Alice creates a delegated grant for app X to write in another random protocol
|
|
259
|
+
// 4. A third party (Bob) authors a RecordsWrite
|
|
260
|
+
// 5. Verify that App X cannot write Bob's message in Alice's DWN by invoking a delegated grant for RecordsRead
|
|
261
|
+
// 6. Verify that App X cannot write Bob's message in Alice's DWN by invoking a delegated grant for writing in another random protocol
|
|
262
|
+
// 7. Sanity verify the RecordsWrite is not written by App X
|
|
263
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
264
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
265
|
+
const appX = yield TestDataGenerator.generateDidKeyPersona();
|
|
266
|
+
// 1. Alice installs a protocol
|
|
267
|
+
const protocolDefinition = minimalProtocolDefinition;
|
|
268
|
+
const protocol = minimalProtocolDefinition.protocol;
|
|
269
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
270
|
+
signer: Jws.createSigner(alice),
|
|
271
|
+
definition: protocolDefinition
|
|
272
|
+
});
|
|
273
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
274
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
275
|
+
// 2. Alice creates a delegated grant for app X to read in the protocol
|
|
276
|
+
const readScope = {
|
|
277
|
+
interface: DwnInterfaceName.Records,
|
|
278
|
+
method: DwnMethodName.Read,
|
|
279
|
+
protocol
|
|
280
|
+
};
|
|
281
|
+
const appXGrantToRead = yield PermissionsProtocol.createGrant({
|
|
282
|
+
delegated: true,
|
|
283
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 100 }),
|
|
284
|
+
grantedTo: appX.did,
|
|
285
|
+
scope: readScope,
|
|
286
|
+
signer: Jws.createSigner(alice)
|
|
287
|
+
});
|
|
288
|
+
// 3. Alice creates a delegated grant for app X to write in another random protocol
|
|
289
|
+
const randomProtocolWriteScope = {
|
|
290
|
+
interface: DwnInterfaceName.Records,
|
|
291
|
+
method: DwnMethodName.Write,
|
|
292
|
+
protocol: `random-protocol`
|
|
293
|
+
};
|
|
294
|
+
const appXGrantToWriteInRandomProtocol = yield PermissionsProtocol.createGrant({
|
|
295
|
+
delegated: true,
|
|
296
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 100 }),
|
|
297
|
+
grantedTo: appX.did,
|
|
298
|
+
scope: randomProtocolWriteScope,
|
|
299
|
+
signer: Jws.createSigner(alice)
|
|
300
|
+
});
|
|
301
|
+
// 4. A third party (Bob) authors a RecordsWrite
|
|
302
|
+
const bobRecordsWriteBytes = new TextEncoder().encode('message from Bob');
|
|
303
|
+
const bobRecordsWrite = yield RecordsWrite.create({
|
|
304
|
+
signer: Jws.createSigner(bob),
|
|
305
|
+
protocol,
|
|
306
|
+
protocolPath: 'foo', // this comes from `types` in protocol definition
|
|
307
|
+
dataFormat: 'any-format',
|
|
308
|
+
data: bobRecordsWriteBytes
|
|
309
|
+
});
|
|
310
|
+
// 5. Verify that App X cannot write Bob's message in Alice's DWN by invoking a delegated grant for RecordsRead
|
|
311
|
+
const appXAugmentedWrite = yield RecordsWrite.parse(bobRecordsWrite.message);
|
|
312
|
+
yield appXAugmentedWrite.signAsOwnerDelegate(Jws.createSigner(appX), appXGrantToRead.dataEncodedMessage);
|
|
313
|
+
const appXWriteReply = yield dwn.processMessage(alice.did, appXAugmentedWrite.message, { dataStream: DataStream.fromBytes(bobRecordsWriteBytes) });
|
|
314
|
+
expect(appXWriteReply.status.code).to.equal(401);
|
|
315
|
+
expect(appXWriteReply.status.detail).to.contain(DwnErrorCode.GrantAuthorizationMethodMismatch);
|
|
316
|
+
// 6. Verify that App X cannot write Bob's message in Alice's DWN by invoking a delegated grant for writing in another random protocol
|
|
317
|
+
const appXAugmentedWrite2 = yield RecordsWrite.parse(bobRecordsWrite.message);
|
|
318
|
+
yield appXAugmentedWrite2.signAsOwnerDelegate(Jws.createSigner(appX), appXGrantToWriteInRandomProtocol.dataEncodedMessage);
|
|
319
|
+
const appXWriteReply2 = yield dwn.processMessage(alice.did, appXAugmentedWrite2.message, { dataStream: DataStream.fromBytes(bobRecordsWriteBytes) });
|
|
320
|
+
expect(appXWriteReply2.status.code).to.equal(401);
|
|
321
|
+
expect(appXWriteReply2.status.detail).to.contain(DwnErrorCode.RecordsGrantAuthorizationScopeProtocolMismatch);
|
|
322
|
+
// 7. Sanity verify the RecordsWrite is not written by App X
|
|
323
|
+
const recordsQuery = yield TestDataGenerator.generateRecordsQuery({
|
|
324
|
+
author: alice,
|
|
325
|
+
filter: { protocol }
|
|
326
|
+
});
|
|
327
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
328
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
329
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(0);
|
|
330
|
+
}));
|
|
331
|
+
it('should fail RecordsWrite if presented with an owner-delegated grant with invalid grantor signature', () => __awaiter(this, void 0, void 0, function* () {
|
|
332
|
+
var _a;
|
|
333
|
+
// scenario:
|
|
334
|
+
// 1. Alice installs a protocol
|
|
335
|
+
// 2. Alice creates a delegated grant for App X to write as Alice, but with invalid signature
|
|
336
|
+
// 3. A third party (Bob) authors a RecordsWrite
|
|
337
|
+
// 4. Verify that App X cannot write Bob's message in Alice's DWN by invoking an owner-delegated grant with invalid signature
|
|
338
|
+
// 5. Sanity verify the RecordsWrite is not written by App X
|
|
339
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
340
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
341
|
+
const appX = yield TestDataGenerator.generateDidKeyPersona();
|
|
342
|
+
// 1. Alice installs a protocol
|
|
343
|
+
const protocolDefinition = minimalProtocolDefinition;
|
|
344
|
+
const protocol = minimalProtocolDefinition.protocol;
|
|
345
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
346
|
+
signer: Jws.createSigner(alice),
|
|
347
|
+
definition: protocolDefinition
|
|
348
|
+
});
|
|
349
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
350
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
351
|
+
// 2. Alice creates a delegated grant for App X to write as Alice, but with invalid signature
|
|
352
|
+
const scope = {
|
|
353
|
+
interface: DwnInterfaceName.Records,
|
|
354
|
+
method: DwnMethodName.Write,
|
|
355
|
+
protocol
|
|
356
|
+
};
|
|
357
|
+
const appXGrant = yield PermissionsProtocol.createGrant({
|
|
358
|
+
delegated: true,
|
|
359
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 100 }),
|
|
360
|
+
grantedTo: appX.did,
|
|
361
|
+
scope: scope,
|
|
362
|
+
signer: Jws.createSigner(alice)
|
|
363
|
+
});
|
|
364
|
+
const appXGrantMessage = appXGrant.dataEncodedMessage;
|
|
365
|
+
appXGrantMessage.authorization.signature.signatures[0].signature = yield TestDataGenerator.randomSignatureString();
|
|
366
|
+
// 3. A third party (Bob) authors a RecordsWrite
|
|
367
|
+
const bobRecordsWriteBytes = new TextEncoder().encode('message from Bob');
|
|
368
|
+
const bobRecordsWrite = yield RecordsWrite.create({
|
|
369
|
+
signer: Jws.createSigner(bob),
|
|
370
|
+
protocol,
|
|
371
|
+
protocolPath: 'foo', // this comes from `types` in protocol definition
|
|
372
|
+
dataFormat: 'any-format',
|
|
373
|
+
data: bobRecordsWriteBytes
|
|
374
|
+
});
|
|
375
|
+
// 4. Verify that App X cannot write Bob's message in Alice's DWN by invoking an owner-delegated grant with invalid signature
|
|
376
|
+
const appXAugmentedWrite = yield RecordsWrite.parse(bobRecordsWrite.message);
|
|
377
|
+
yield appXAugmentedWrite.signAsOwnerDelegate(Jws.createSigner(appX), appXGrantMessage);
|
|
378
|
+
const appXWriteReply = yield dwn.processMessage(alice.did, appXAugmentedWrite.message, { dataStream: DataStream.fromBytes(bobRecordsWriteBytes) });
|
|
379
|
+
expect(appXWriteReply.status.code).to.equal(401);
|
|
380
|
+
expect(appXWriteReply.status.detail).to.contain(DwnErrorCode.GeneralJwsVerifierInvalidSignature);
|
|
381
|
+
// 5. Sanity verify the RecordsWrite is not written by App X
|
|
382
|
+
const recordsQuery = yield TestDataGenerator.generateRecordsQuery({
|
|
383
|
+
author: alice,
|
|
384
|
+
filter: { protocol }
|
|
385
|
+
});
|
|
386
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
387
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
388
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(0);
|
|
389
|
+
}));
|
|
390
|
+
it('should fail RecordsWrite if grant ID in owner signature payload and CID of owner-delegated grant are mismatching', () => __awaiter(this, void 0, void 0, function* () {
|
|
391
|
+
var _a;
|
|
392
|
+
// scenario:
|
|
393
|
+
// 1. Alice installs a protocol
|
|
394
|
+
// 2. Creates two delegated grant for App X to write as Alice
|
|
395
|
+
// 3. A third party (Bob) authors a RecordsWrite
|
|
396
|
+
// 4. Verify that App X cannot write Bob's message in Alice's DWN by invoking an owner-delegated grant with the wrong ID
|
|
397
|
+
// 5. Sanity verify the RecordsWrite is not written by App X
|
|
398
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
399
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
400
|
+
const appX = yield TestDataGenerator.generateDidKeyPersona();
|
|
401
|
+
// 1. Alice installs a protocol
|
|
402
|
+
const protocolDefinition = minimalProtocolDefinition;
|
|
403
|
+
const protocol = minimalProtocolDefinition.protocol;
|
|
404
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
405
|
+
signer: Jws.createSigner(alice),
|
|
406
|
+
definition: protocolDefinition
|
|
407
|
+
});
|
|
408
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
409
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
410
|
+
// 2. Creates two delegated grant for App X to write as Alice
|
|
411
|
+
const scope = {
|
|
412
|
+
interface: DwnInterfaceName.Records,
|
|
413
|
+
method: DwnMethodName.Write,
|
|
414
|
+
protocol
|
|
415
|
+
};
|
|
416
|
+
const appXGrant = yield PermissionsProtocol.createGrant({
|
|
417
|
+
delegated: true,
|
|
418
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 100 }),
|
|
419
|
+
grantedTo: appX.did,
|
|
420
|
+
scope: scope,
|
|
421
|
+
signer: Jws.createSigner(alice)
|
|
422
|
+
});
|
|
423
|
+
yield Time.minimalSleep();
|
|
424
|
+
const appXGrant2 = yield PermissionsProtocol.createGrant({
|
|
425
|
+
delegated: true,
|
|
426
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 100 }),
|
|
427
|
+
grantedTo: appX.did,
|
|
428
|
+
scope: scope,
|
|
429
|
+
signer: Jws.createSigner(alice)
|
|
430
|
+
});
|
|
431
|
+
// 3. A third party (Bob) authors a RecordsWrite
|
|
432
|
+
const bobRecordsWriteBytes = new TextEncoder().encode('message from Bob');
|
|
433
|
+
const bobRecordsWrite = yield RecordsWrite.create({
|
|
434
|
+
signer: Jws.createSigner(bob),
|
|
435
|
+
protocol,
|
|
436
|
+
protocolPath: 'foo', // this comes from `types` in protocol definition
|
|
437
|
+
dataFormat: 'any-format',
|
|
438
|
+
data: bobRecordsWriteBytes
|
|
439
|
+
});
|
|
440
|
+
// 4. Verify that App X cannot write Bob's message in Alice's DWN by invoking an owner-delegated grant with the wrong ID
|
|
441
|
+
const appXAugmentedWrite = yield RecordsWrite.parse(bobRecordsWrite.message);
|
|
442
|
+
yield appXAugmentedWrite.signAsOwnerDelegate(Jws.createSigner(appX), appXGrant.dataEncodedMessage);
|
|
443
|
+
appXAugmentedWrite.message.authorization.ownerDelegatedGrant = appXGrant2.dataEncodedMessage; // intentionally have a mismatching grant
|
|
444
|
+
const appXWriteReply = yield dwn.processMessage(alice.did, appXAugmentedWrite.message, { dataStream: DataStream.fromBytes(bobRecordsWriteBytes) });
|
|
445
|
+
expect(appXWriteReply.status.code).to.equal(400);
|
|
446
|
+
expect(appXWriteReply.status.detail).to.contain(DwnErrorCode.RecordsOwnerDelegatedGrantCidMismatch);
|
|
447
|
+
// 5. Sanity verify the RecordsWrite is not written by App X
|
|
448
|
+
const recordsQuery = yield TestDataGenerator.generateRecordsQuery({
|
|
449
|
+
author: alice,
|
|
450
|
+
filter: { protocol }
|
|
451
|
+
});
|
|
452
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
453
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
454
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(0);
|
|
455
|
+
}));
|
|
456
|
+
it('should fail RecordsWrite if owner-delegated grant is revoked', () => __awaiter(this, void 0, void 0, function* () {
|
|
457
|
+
var _a;
|
|
458
|
+
// scenario:
|
|
459
|
+
// 1. Alice installs a protocol
|
|
460
|
+
// 2. Alice creates a delegated grant for App X to write as Alice
|
|
461
|
+
// 3. Alice revokes the grant
|
|
462
|
+
// 4. A third party (Bob) authors a RecordsWrite
|
|
463
|
+
// 5. Verify that App X cannot write Bob's message in Alice's DWN by invoking a revoked owner-delegated grant
|
|
464
|
+
// 6. Sanity verify the RecordsWrite is not written by App X
|
|
465
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
466
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
467
|
+
const appX = yield TestDataGenerator.generateDidKeyPersona();
|
|
468
|
+
// 1. Alice installs a protocol
|
|
469
|
+
const protocolDefinition = minimalProtocolDefinition;
|
|
470
|
+
const protocol = minimalProtocolDefinition.protocol;
|
|
471
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
472
|
+
signer: Jws.createSigner(alice),
|
|
473
|
+
definition: protocolDefinition
|
|
474
|
+
});
|
|
475
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
476
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
477
|
+
// 2. Alice creates a delegated grant for App X to write as Alice
|
|
478
|
+
const scope = {
|
|
479
|
+
interface: DwnInterfaceName.Records,
|
|
480
|
+
method: DwnMethodName.Write,
|
|
481
|
+
protocol
|
|
482
|
+
};
|
|
483
|
+
const appXGrant = yield PermissionsProtocol.createGrant({
|
|
484
|
+
delegated: true,
|
|
485
|
+
dateExpires: Time.createOffsetTimestamp({ seconds: 100 }),
|
|
486
|
+
grantedTo: appX.did,
|
|
487
|
+
scope: scope,
|
|
488
|
+
signer: Jws.createSigner(alice)
|
|
489
|
+
});
|
|
490
|
+
const grantDataStream = DataStream.fromBytes(appXGrant.permissionGrantBytes);
|
|
491
|
+
const permissionGrantWriteReply = yield dwn.processMessage(alice.did, appXGrant.recordsWrite.message, { dataStream: grantDataStream });
|
|
492
|
+
expect(permissionGrantWriteReply.status.code).to.equal(202);
|
|
493
|
+
// 3. Alice revokes the grant
|
|
494
|
+
const permissionRevoke = yield PermissionsProtocol.createRevocation({
|
|
495
|
+
signer: Jws.createSigner(alice),
|
|
496
|
+
grant: yield PermissionGrant.parse(appXGrant.dataEncodedMessage),
|
|
497
|
+
});
|
|
498
|
+
const revocationDataStream = DataStream.fromBytes(permissionRevoke.permissionRevocationBytes);
|
|
499
|
+
const permissionRevokeReply = yield dwn.processMessage(alice.did, permissionRevoke.recordsWrite.message, { dataStream: revocationDataStream });
|
|
500
|
+
expect(permissionRevokeReply.status.code).to.equal(202);
|
|
501
|
+
// 4. A third party (Bob) authors a RecordsWrite
|
|
502
|
+
const bobRecordsWriteBytes = new TextEncoder().encode('message from Bob');
|
|
503
|
+
const bobRecordsWrite = yield RecordsWrite.create({
|
|
504
|
+
signer: Jws.createSigner(bob),
|
|
505
|
+
protocol,
|
|
506
|
+
protocolPath: 'foo', // this comes from `types` in protocol definition
|
|
507
|
+
dataFormat: 'any-format',
|
|
508
|
+
data: bobRecordsWriteBytes
|
|
509
|
+
});
|
|
510
|
+
// 5. Verify that App X cannot write Bob's message in Alice's DWN by invoking a revoked owner-delegated grant
|
|
511
|
+
const appXAugmentedWrite = yield RecordsWrite.parse(bobRecordsWrite.message);
|
|
512
|
+
yield appXAugmentedWrite.signAsOwnerDelegate(Jws.createSigner(appX), appXGrant.dataEncodedMessage);
|
|
513
|
+
const appXWriteReply = yield dwn.processMessage(alice.did, appXAugmentedWrite.message, { dataStream: DataStream.fromBytes(bobRecordsWriteBytes) });
|
|
514
|
+
expect(appXWriteReply.status.code).to.equal(401);
|
|
515
|
+
expect(appXWriteReply.status.detail).to.contain(DwnErrorCode.GrantAuthorizationGrantRevoked);
|
|
516
|
+
// 6. Sanity verify the RecordsWrite is not written by App X
|
|
517
|
+
const recordsQuery = yield TestDataGenerator.generateRecordsQuery({
|
|
518
|
+
author: alice,
|
|
519
|
+
filter: { protocol }
|
|
520
|
+
});
|
|
521
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
522
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
523
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(0);
|
|
524
|
+
}));
|
|
525
|
+
it('should fail RecordsWrite if owner-delegated grant is expired', () => __awaiter(this, void 0, void 0, function* () {
|
|
526
|
+
var _a;
|
|
527
|
+
// scenario:
|
|
528
|
+
// 1. Alice installs a protocol
|
|
529
|
+
// 2. Alice creates a delegated grant for App X to write as Alice, but make it expired
|
|
530
|
+
// 3. A third party (Bob) authors a RecordsWrite
|
|
531
|
+
// 4. Verify that App X cannot write Bob's message in Alice's DWN by invoking an expired owner-delegated grant
|
|
532
|
+
// 5. Sanity verify the RecordsWrite is not written by App X
|
|
533
|
+
const alice = yield TestDataGenerator.generateDidKeyPersona();
|
|
534
|
+
const bob = yield TestDataGenerator.generateDidKeyPersona();
|
|
535
|
+
const appX = yield TestDataGenerator.generateDidKeyPersona();
|
|
536
|
+
// 1. Alice installs a protocol
|
|
537
|
+
const protocolDefinition = minimalProtocolDefinition;
|
|
538
|
+
const protocol = minimalProtocolDefinition.protocol;
|
|
539
|
+
const protocolsConfig = yield ProtocolsConfigure.create({
|
|
540
|
+
signer: Jws.createSigner(alice),
|
|
541
|
+
definition: protocolDefinition
|
|
542
|
+
});
|
|
543
|
+
const protocolsConfigureReply = yield dwn.processMessage(alice.did, protocolsConfig.message);
|
|
544
|
+
expect(protocolsConfigureReply.status.code).to.equal(202);
|
|
545
|
+
// 2. Alice creates a delegated grant for App X to write as Alice, but make it expired
|
|
546
|
+
const scope = {
|
|
547
|
+
interface: DwnInterfaceName.Records,
|
|
548
|
+
method: DwnMethodName.Write,
|
|
549
|
+
protocol
|
|
550
|
+
};
|
|
551
|
+
const appXGrant = yield PermissionsProtocol.createGrant({
|
|
552
|
+
delegated: true,
|
|
553
|
+
dateExpires: Time.getCurrentTimestamp(), // intentionally set to current time to make it expired immediately
|
|
554
|
+
grantedTo: appX.did,
|
|
555
|
+
scope: scope,
|
|
556
|
+
signer: Jws.createSigner(alice)
|
|
557
|
+
});
|
|
558
|
+
// 3. A third party (Bob) authors a RecordsWrite
|
|
559
|
+
const bobRecordsWriteBytes = new TextEncoder().encode('message from Bob');
|
|
560
|
+
const bobRecordsWrite = yield RecordsWrite.create({
|
|
561
|
+
signer: Jws.createSigner(bob),
|
|
562
|
+
protocol,
|
|
563
|
+
protocolPath: 'foo', // this comes from `types` in protocol definition
|
|
564
|
+
dataFormat: 'any-format',
|
|
565
|
+
data: bobRecordsWriteBytes
|
|
566
|
+
});
|
|
567
|
+
// 4. Verify that App X cannot write Bob's message in Alice's DWN by invoking an expired owner-delegated grant
|
|
568
|
+
const appXAugmentedWrite = yield RecordsWrite.parse(bobRecordsWrite.message);
|
|
569
|
+
yield appXAugmentedWrite.signAsOwnerDelegate(Jws.createSigner(appX), appXGrant.dataEncodedMessage);
|
|
570
|
+
const appXWriteReply = yield dwn.processMessage(alice.did, appXAugmentedWrite.message, { dataStream: DataStream.fromBytes(bobRecordsWriteBytes) });
|
|
571
|
+
expect(appXWriteReply.status.code).to.equal(401);
|
|
572
|
+
expect(appXWriteReply.status.detail).to.contain(DwnErrorCode.GrantAuthorizationGrantExpired);
|
|
573
|
+
// 5. Sanity verify the RecordsWrite is not written by App X
|
|
574
|
+
const recordsQuery = yield TestDataGenerator.generateRecordsQuery({
|
|
575
|
+
author: alice,
|
|
576
|
+
filter: { protocol }
|
|
577
|
+
});
|
|
578
|
+
const recordsQueryReply = yield dwn.processMessage(alice.did, recordsQuery.message);
|
|
579
|
+
expect(recordsQueryReply.status.code).to.equal(200);
|
|
580
|
+
expect((_a = recordsQueryReply.entries) === null || _a === void 0 ? void 0 : _a.length).to.equal(0);
|
|
581
|
+
}));
|
|
582
|
+
}));
|
|
583
|
+
}
|
|
584
|
+
//# sourceMappingURL=owner-delegated-grant.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owner-delegated-grant.spec.js","sourceRoot":"","sources":["../../../../tests/features/owner-delegated-grant.spec.ts"],"names":[],"mappings":"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"}
|