@enbox/dwn-sdk-js 0.0.6 → 0.0.7
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/dist/browser.mjs +8 -8
- package/dist/browser.mjs.map +4 -4
- package/dist/esm/generated/precompiled-validators.js +1 -2
- package/dist/esm/generated/precompiled-validators.js.map +1 -1
- package/dist/esm/src/core/abstract-message.js +4 -0
- package/dist/esm/src/core/abstract-message.js.map +1 -1
- package/dist/esm/src/core/auth.js +22 -33
- package/dist/esm/src/core/auth.js.map +1 -1
- package/dist/esm/src/core/dwn-constant.js +7 -7
- package/dist/esm/src/core/dwn-constant.js.map +1 -1
- package/dist/esm/src/core/dwn-error.js +1 -0
- package/dist/esm/src/core/dwn-error.js.map +1 -1
- package/dist/esm/src/core/grant-authorization.js +37 -52
- package/dist/esm/src/core/grant-authorization.js.map +1 -1
- package/dist/esm/src/core/message.js +85 -116
- package/dist/esm/src/core/message.js.map +1 -1
- package/dist/esm/src/core/messages-grant-authorization.js +63 -78
- package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
- package/dist/esm/src/core/protocol-authorization-action.js +266 -0
- package/dist/esm/src/core/protocol-authorization-action.js.map +1 -0
- package/dist/esm/src/core/protocol-authorization-validation.js +254 -0
- package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -0
- package/dist/esm/src/core/protocol-authorization.js +122 -740
- package/dist/esm/src/core/protocol-authorization.js.map +1 -1
- package/dist/esm/src/core/protocols-grant-authorization.js +24 -38
- package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -1
- package/dist/esm/src/core/record-chain.js +64 -0
- package/dist/esm/src/core/record-chain.js.map +1 -0
- package/dist/esm/src/core/records-grant-authorization.js +55 -72
- package/dist/esm/src/core/records-grant-authorization.js.map +1 -1
- package/dist/esm/src/core/resumable-task-manager.js +50 -65
- package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
- package/dist/esm/src/core/tenant-gate.js +2 -13
- package/dist/esm/src/core/tenant-gate.js.map +1 -1
- package/dist/esm/src/dwn.js +69 -86
- package/dist/esm/src/dwn.js.map +1 -1
- package/dist/esm/src/event-stream/event-emitter-stream.js +17 -31
- package/dist/esm/src/event-stream/event-emitter-stream.js.map +1 -1
- package/dist/esm/src/handlers/messages-read.js +67 -77
- package/dist/esm/src/handlers/messages-read.js.map +1 -1
- package/dist/esm/src/handlers/messages-subscribe.js +51 -61
- package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
- package/dist/esm/src/handlers/messages-sync.js +75 -85
- package/dist/esm/src/handlers/messages-sync.js.map +1 -1
- package/dist/esm/src/handlers/protocols-configure.js +135 -155
- package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
- package/dist/esm/src/handlers/protocols-query.js +52 -51
- package/dist/esm/src/handlers/protocols-query.js.map +1 -1
- package/dist/esm/src/handlers/records-count.js +96 -82
- package/dist/esm/src/handlers/records-count.js.map +1 -1
- package/dist/esm/src/handlers/records-delete.js +78 -88
- package/dist/esm/src/handlers/records-delete.js.map +1 -1
- package/dist/esm/src/handlers/records-query.js +116 -101
- package/dist/esm/src/handlers/records-query.js.map +1 -1
- package/dist/esm/src/handlers/records-read.js +124 -131
- package/dist/esm/src/handlers/records-read.js.map +1 -1
- package/dist/esm/src/handlers/records-subscribe.js +150 -103
- package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
- package/dist/esm/src/handlers/records-write.js +250 -259
- package/dist/esm/src/handlers/records-write.js.map +1 -1
- package/dist/esm/src/interfaces/messages-read.js +24 -32
- package/dist/esm/src/interfaces/messages-read.js.map +1 -1
- package/dist/esm/src/interfaces/messages-subscribe.js +27 -41
- package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
- package/dist/esm/src/interfaces/messages-sync.js +26 -40
- package/dist/esm/src/interfaces/messages-sync.js.map +1 -1
- package/dist/esm/src/interfaces/protocols-configure.js +63 -63
- package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
- package/dist/esm/src/interfaces/protocols-query.js +55 -68
- package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
- package/dist/esm/src/interfaces/records-count.js +50 -66
- package/dist/esm/src/interfaces/records-count.js.map +1 -1
- package/dist/esm/src/interfaces/records-delete.js +45 -55
- package/dist/esm/src/interfaces/records-delete.js.map +1 -1
- package/dist/esm/src/interfaces/records-query.js +60 -76
- package/dist/esm/src/interfaces/records-query.js.map +1 -1
- package/dist/esm/src/interfaces/records-read.js +51 -67
- package/dist/esm/src/interfaces/records-read.js.map +1 -1
- package/dist/esm/src/interfaces/records-subscribe.js +52 -68
- package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
- package/dist/esm/src/interfaces/records-write-query.js +102 -0
- package/dist/esm/src/interfaces/records-write-query.js.map +1 -0
- package/dist/esm/src/interfaces/records-write-signing.js +92 -0
- package/dist/esm/src/interfaces/records-write-signing.js.map +1 -0
- package/dist/esm/src/interfaces/records-write.js +407 -602
- package/dist/esm/src/interfaces/records-write.js.map +1 -1
- package/dist/esm/src/jose/algorithms/signing/ed25519.js +10 -19
- package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
- package/dist/esm/src/jose/jws/general/builder.js +23 -35
- package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
- package/dist/esm/src/jose/jws/general/verifier.js +56 -69
- package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
- package/dist/esm/src/protocols/permission-grant.js +44 -15
- package/dist/esm/src/protocols/permission-grant.js.map +1 -1
- package/dist/esm/src/protocols/permission-request.js +29 -15
- package/dist/esm/src/protocols/permission-request.js.map +1 -1
- package/dist/esm/src/protocols/permissions.js +216 -226
- package/dist/esm/src/protocols/permissions.js.map +1 -1
- package/dist/esm/src/smt/smt-store-level.js +42 -64
- package/dist/esm/src/smt/smt-store-level.js.map +1 -1
- package/dist/esm/src/smt/smt-store-memory.js +19 -45
- package/dist/esm/src/smt/smt-store-memory.js.map +1 -1
- package/dist/esm/src/smt/smt-utils.js +28 -45
- package/dist/esm/src/smt/smt-utils.js.map +1 -1
- package/dist/esm/src/smt/sparse-merkle-tree.js +426 -471
- package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -1
- package/dist/esm/src/state-index/state-index-level.js +115 -150
- package/dist/esm/src/state-index/state-index-level.js.map +1 -1
- package/dist/esm/src/store/blockstore-level.js +54 -156
- package/dist/esm/src/store/blockstore-level.js.map +1 -1
- package/dist/esm/src/store/blockstore-mock.js +48 -153
- package/dist/esm/src/store/blockstore-mock.js.map +1 -1
- package/dist/esm/src/store/data-store-level.js +59 -99
- package/dist/esm/src/store/data-store-level.js.map +1 -1
- package/dist/esm/src/store/index-level-compound.js +246 -0
- package/dist/esm/src/store/index-level-compound.js.map +1 -0
- package/dist/esm/src/store/index-level.js +295 -713
- package/dist/esm/src/store/index-level.js.map +1 -1
- package/dist/esm/src/store/level-wrapper.js +143 -244
- package/dist/esm/src/store/level-wrapper.js.map +1 -1
- package/dist/esm/src/store/message-store-level.js +71 -94
- package/dist/esm/src/store/message-store-level.js.map +1 -1
- package/dist/esm/src/store/resumable-task-store-level.js +62 -101
- package/dist/esm/src/store/resumable-task-store-level.js.map +1 -1
- package/dist/esm/src/store/storage-controller.js +129 -144
- package/dist/esm/src/store/storage-controller.js.map +1 -1
- package/dist/esm/src/utils/abort.js +8 -19
- package/dist/esm/src/utils/abort.js.map +1 -1
- package/dist/esm/src/utils/array.js +15 -49
- package/dist/esm/src/utils/array.js.map +1 -1
- package/dist/esm/src/utils/cid.js +29 -77
- package/dist/esm/src/utils/cid.js.map +1 -1
- package/dist/esm/src/utils/data-stream.js +37 -65
- package/dist/esm/src/utils/data-stream.js.map +1 -1
- package/dist/esm/src/utils/encryption.js +136 -162
- package/dist/esm/src/utils/encryption.js.map +1 -1
- package/dist/esm/src/utils/filter.js +1 -12
- package/dist/esm/src/utils/filter.js.map +1 -1
- package/dist/esm/src/utils/hd-key.js +45 -63
- package/dist/esm/src/utils/hd-key.js.map +1 -1
- package/dist/esm/src/utils/jws.js +9 -20
- package/dist/esm/src/utils/jws.js.map +1 -1
- package/dist/esm/src/utils/memory-cache.js +12 -23
- package/dist/esm/src/utils/memory-cache.js.map +1 -1
- package/dist/esm/src/utils/messages.js +9 -3
- package/dist/esm/src/utils/messages.js.map +1 -1
- package/dist/esm/src/utils/private-key-signer.js +9 -17
- package/dist/esm/src/utils/private-key-signer.js.map +1 -1
- package/dist/esm/src/utils/protocols.js +62 -70
- package/dist/esm/src/utils/protocols.js.map +1 -1
- package/dist/esm/src/utils/records.js +100 -125
- package/dist/esm/src/utils/records.js.map +1 -1
- package/dist/esm/src/utils/secp256k1.js +60 -96
- package/dist/esm/src/utils/secp256k1.js.map +1 -1
- package/dist/esm/src/utils/secp256r1.js +54 -71
- package/dist/esm/src/utils/secp256r1.js.map +1 -1
- package/dist/esm/src/utils/time.js +5 -18
- package/dist/esm/src/utils/time.js.map +1 -1
- package/dist/esm/src/utils/url.js +3 -3
- package/dist/esm/src/utils/url.js.map +1 -1
- package/dist/esm/tests/core/auth.spec.js +3 -12
- package/dist/esm/tests/core/auth.spec.js.map +1 -1
- package/dist/esm/tests/core/message.spec.js +50 -59
- package/dist/esm/tests/core/message.spec.js.map +1 -1
- package/dist/esm/tests/core/protocol-authorization.spec.js +9 -18
- package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
- package/dist/esm/tests/dwn.spec.js +45 -58
- package/dist/esm/tests/dwn.spec.js.map +1 -1
- package/dist/esm/tests/event-stream/event-emitter-stream.spec.js +24 -33
- package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +1 -1
- package/dist/esm/tests/event-stream/event-stream.spec.js +46 -55
- package/dist/esm/tests/event-stream/event-stream.spec.js.map +1 -1
- package/dist/esm/tests/features/author-delegated-grant.spec.js +326 -343
- package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-delegated-grant.spec.js +153 -169
- package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-signature.spec.js +67 -78
- package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
- package/dist/esm/tests/features/permissions.spec.js +446 -181
- package/dist/esm/tests/features/permissions.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-composition.spec.js +346 -356
- package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-create-action.spec.js +42 -51
- package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-delete-action.spec.js +94 -103
- package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-update-action.spec.js +105 -114
- package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
- package/dist/esm/tests/features/records-prune.spec.js +175 -191
- package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
- package/dist/esm/tests/features/records-tags.spec.js +441 -460
- package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
- package/dist/esm/tests/features/resumable-tasks.spec.js +82 -91
- package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-read.spec.js +206 -207
- package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-subscribe.spec.js +145 -154
- package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-sync.spec.js +174 -183
- package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -1
- package/dist/esm/tests/handlers/protocols-configure.spec.js +244 -238
- package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/handlers/protocols-query.spec.js +156 -169
- package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-count.spec.js +93 -102
- package/dist/esm/tests/handlers/records-count.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-delete.spec.js +252 -264
- package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-query.spec.js +917 -988
- package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-read.spec.js +549 -564
- package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-subscribe.spec.js +269 -278
- package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-write.spec.js +1057 -1082
- package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/messages-get.spec.js +39 -48
- package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js +4 -13
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-configure.spec.js +212 -88
- package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-query.spec.js +8 -17
- package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-delete.spec.js +8 -17
- package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-query.spec.js +20 -29
- package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-read.spec.js +42 -51
- package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-subscribe.spec.js +16 -25
- package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-write.spec.js +152 -165
- package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
- package/dist/esm/tests/jose/jws/general.spec.js +36 -45
- package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permission-grant.spec.js +44 -50
- package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permission-request.spec.js +23 -32
- package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permissions.spec.js +49 -55
- package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/aggregator.spec.js +124 -135
- package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/deleted-record.spec.js +23 -32
- package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +52 -61
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/nested-roles.spec.js +63 -73
- package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/subscriptions.spec.js +377 -333
- package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
- package/dist/esm/tests/smt/smt-store-level.spec.js +76 -87
- package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -1
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +344 -353
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -1
- package/dist/esm/tests/state-index/state-index-level.spec.js +117 -126
- package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -1
- package/dist/esm/tests/store/blockstore-level.spec.js +44 -99
- package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -1
- package/dist/esm/tests/store/blockstore-mock.spec.js +40 -120
- package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
- package/dist/esm/tests/store/data-store-level.spec.js +86 -95
- package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/index-level.spec.js +404 -414
- package/dist/esm/tests/store/index-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store-level.spec.js +13 -22
- package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store.spec.js +229 -238
- package/dist/esm/tests/store/message-store.spec.js.map +1 -1
- package/dist/esm/tests/test-event-stream.js +3 -3
- package/dist/esm/tests/test-event-stream.js.map +1 -1
- package/dist/esm/tests/test-stores.js +16 -13
- package/dist/esm/tests/test-stores.js.map +1 -1
- package/dist/esm/tests/test-suite.js +2 -11
- package/dist/esm/tests/test-suite.js.map +1 -1
- package/dist/esm/tests/utils/cid.spec.js +24 -33
- package/dist/esm/tests/utils/cid.spec.js.map +1 -1
- package/dist/esm/tests/utils/data-stream.spec.js +48 -57
- package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
- package/dist/esm/tests/utils/encryption-callbacks.spec.js +45 -54
- package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -1
- package/dist/esm/tests/utils/encryption.spec.js +229 -82
- package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
- package/dist/esm/tests/utils/filters.spec.js +46 -55
- package/dist/esm/tests/utils/filters.spec.js.map +1 -1
- package/dist/esm/tests/utils/hd-key.spec.js +10 -19
- package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
- package/dist/esm/tests/utils/jws.spec.js +3 -12
- package/dist/esm/tests/utils/jws.spec.js.map +1 -1
- package/dist/esm/tests/utils/memory-cache.spec.js +9 -18
- package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
- package/dist/esm/tests/utils/messages.spec.js +6 -15
- package/dist/esm/tests/utils/messages.spec.js.map +1 -1
- package/dist/esm/tests/utils/poller.js +22 -33
- package/dist/esm/tests/utils/poller.js.map +1 -1
- package/dist/esm/tests/utils/private-key-signer.spec.js +15 -24
- package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
- package/dist/esm/tests/utils/records.spec.js +10 -19
- package/dist/esm/tests/utils/records.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256k1.spec.js +16 -25
- package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256r1.spec.js +18 -27
- package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
- package/dist/esm/tests/utils/test-data-generator.js +414 -468
- package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js +2 -11
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +4 -13
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +8 -17
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +3 -12
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +4 -13
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +2 -11
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js +2 -11
- package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +7 -16
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
- package/dist/types/src/core/protocol-authorization-action.d.ts +42 -0
- package/dist/types/src/core/protocol-authorization-action.d.ts.map +1 -0
- package/dist/types/src/core/protocol-authorization-validation.d.ts +60 -0
- package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -0
- package/dist/types/src/core/protocol-authorization.d.ts +10 -100
- package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
- package/dist/types/src/core/record-chain.d.ts +24 -0
- package/dist/types/src/core/record-chain.d.ts.map +1 -0
- package/dist/types/src/handlers/records-write.d.ts +2 -1
- package/dist/types/src/handlers/records-write.d.ts.map +1 -1
- package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-write-query.d.ts +33 -0
- package/dist/types/src/interfaces/records-write-query.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-write-signing.d.ts +35 -0
- package/dist/types/src/interfaces/records-write-signing.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-write.d.ts +10 -44
- package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
- package/dist/types/src/store/index-level-compound.d.ts +70 -0
- package/dist/types/src/store/index-level-compound.d.ts.map +1 -0
- package/dist/types/src/store/index-level.d.ts +0 -58
- package/dist/types/src/store/index-level.d.ts.map +1 -1
- package/dist/types/src/utils/protocols.d.ts +5 -0
- package/dist/types/src/utils/protocols.d.ts.map +1 -1
- package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/core/protocol-authorization-action.ts +377 -0
- package/src/core/protocol-authorization-validation.ts +391 -0
- package/src/core/protocol-authorization.ts +60 -849
- package/src/core/record-chain.ts +99 -0
- package/src/handlers/records-read.ts +1 -1
- package/src/handlers/records-write.ts +37 -21
- package/src/interfaces/protocols-configure.ts +33 -5
- package/src/interfaces/records-write-query.ts +139 -0
- package/src/interfaces/records-write-signing.ts +143 -0
- package/src/interfaces/records-write.ts +49 -221
- package/src/store/index-level-compound.ts +324 -0
- package/src/store/index-level.ts +24 -306
- package/src/utils/protocols.ts +8 -0
- package/src/utils/records.ts +1 -1
|
@@ -1,12 +1,3 @@
|
|
|
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
1
|
import { Dwn } from '../../src/dwn.js';
|
|
11
2
|
import { DwnErrorCode } from '../../src/core/dwn-error.js';
|
|
12
3
|
import freeForAll from '../vectors/protocol-definitions/free-for-all.json' with { type: 'json' };
|
|
@@ -33,42 +24,42 @@ export function testMessagesSubscribeHandler() {
|
|
|
33
24
|
let dwn;
|
|
34
25
|
// important to follow the `before` and `after` pattern to initialize and clean the stores in tests
|
|
35
26
|
// so that different test suites can reuse the same backend store for testing
|
|
36
|
-
beforeAll(() =>
|
|
27
|
+
beforeAll(async () => {
|
|
37
28
|
didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
38
29
|
const stores = TestStores.get();
|
|
39
30
|
messageStore = stores.messageStore;
|
|
40
31
|
dataStore = stores.dataStore;
|
|
41
32
|
resumableTaskStore = stores.resumableTaskStore;
|
|
42
33
|
stateIndex = stores.stateIndex;
|
|
43
|
-
dwn =
|
|
34
|
+
dwn = await Dwn.create({
|
|
44
35
|
didResolver,
|
|
45
36
|
messageStore,
|
|
46
37
|
dataStore,
|
|
47
38
|
resumableTaskStore,
|
|
48
39
|
stateIndex,
|
|
49
40
|
});
|
|
50
|
-
})
|
|
51
|
-
beforeEach(() =>
|
|
41
|
+
});
|
|
42
|
+
beforeEach(async () => {
|
|
52
43
|
sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
|
|
53
44
|
// clean up before each test rather than after so that a test does not depend on other tests to do the clean up
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
})
|
|
59
|
-
afterAll(() =>
|
|
60
|
-
|
|
61
|
-
})
|
|
62
|
-
it('should respond with a 501 if subscriptions are not supported', () =>
|
|
63
|
-
|
|
64
|
-
dwn =
|
|
65
|
-
const alice =
|
|
45
|
+
await messageStore.clear();
|
|
46
|
+
await dataStore.clear();
|
|
47
|
+
await resumableTaskStore.clear();
|
|
48
|
+
await stateIndex.clear();
|
|
49
|
+
});
|
|
50
|
+
afterAll(async () => {
|
|
51
|
+
await dwn.close();
|
|
52
|
+
});
|
|
53
|
+
it('should respond with a 501 if subscriptions are not supported', async () => {
|
|
54
|
+
await dwn.close(); // close the original dwn instance
|
|
55
|
+
dwn = await Dwn.create({ didResolver, messageStore, dataStore, stateIndex, resumableTaskStore }); // leave out eventStream
|
|
56
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
66
57
|
// attempt to subscribe
|
|
67
|
-
const { message } =
|
|
68
|
-
const subscriptionMessageReply =
|
|
58
|
+
const { message } = await MessagesSubscribe.create({ signer: Jws.createSigner(alice) });
|
|
59
|
+
const subscriptionMessageReply = await dwn.processMessage(alice.did, message, { subscriptionHandler: (_) => { } });
|
|
69
60
|
expect(subscriptionMessageReply.status.code).toBe(501);
|
|
70
61
|
expect(subscriptionMessageReply.status.detail).toContain(DwnErrorCode.MessagesSubscribeEventStreamUnimplemented);
|
|
71
|
-
})
|
|
62
|
+
});
|
|
72
63
|
});
|
|
73
64
|
describe('EventStream enabled', () => {
|
|
74
65
|
let didResolver;
|
|
@@ -80,7 +71,7 @@ export function testMessagesSubscribeHandler() {
|
|
|
80
71
|
let dwn;
|
|
81
72
|
// important to follow the `before` and `after` pattern to initialize and clean the stores in tests
|
|
82
73
|
// so that different test suites can reuse the same backend store for testing
|
|
83
|
-
beforeAll(() =>
|
|
74
|
+
beforeAll(async () => {
|
|
84
75
|
didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
85
76
|
const stores = TestStores.get();
|
|
86
77
|
messageStore = stores.messageStore;
|
|
@@ -88,7 +79,7 @@ export function testMessagesSubscribeHandler() {
|
|
|
88
79
|
resumableTaskStore = stores.resumableTaskStore;
|
|
89
80
|
stateIndex = stores.stateIndex;
|
|
90
81
|
eventStream = TestEventStream.get();
|
|
91
|
-
dwn =
|
|
82
|
+
dwn = await Dwn.create({
|
|
92
83
|
didResolver,
|
|
93
84
|
messageStore,
|
|
94
85
|
dataStore,
|
|
@@ -96,84 +87,84 @@ export function testMessagesSubscribeHandler() {
|
|
|
96
87
|
stateIndex,
|
|
97
88
|
eventStream,
|
|
98
89
|
});
|
|
99
|
-
})
|
|
100
|
-
beforeEach(() =>
|
|
90
|
+
});
|
|
91
|
+
beforeEach(async () => {
|
|
101
92
|
sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
|
|
102
93
|
// clean up before each test rather than after so that a test does not depend on other tests to do the clean up
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
})
|
|
108
|
-
afterAll(() =>
|
|
109
|
-
|
|
110
|
-
})
|
|
111
|
-
it('returns a 400 if message is invalid', () =>
|
|
112
|
-
const alice =
|
|
113
|
-
const { message } =
|
|
94
|
+
await messageStore.clear();
|
|
95
|
+
await dataStore.clear();
|
|
96
|
+
await resumableTaskStore.clear();
|
|
97
|
+
await stateIndex.clear();
|
|
98
|
+
});
|
|
99
|
+
afterAll(async () => {
|
|
100
|
+
await dwn.close();
|
|
101
|
+
});
|
|
102
|
+
it('returns a 400 if message is invalid', async () => {
|
|
103
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
104
|
+
const { message } = await TestDataGenerator.generateMessagesSubscribe({ author: alice });
|
|
114
105
|
// add an invalid property to the descriptor
|
|
115
106
|
message['descriptor']['invalid'] = 'invalid';
|
|
116
107
|
const messagesSubscribeHandler = new MessagesSubscribeHandler(didResolver, messageStore, eventStream);
|
|
117
|
-
const reply =
|
|
108
|
+
const reply = await messagesSubscribeHandler.handle({ tenant: alice.did, message, subscriptionHandler: (_) => { } });
|
|
118
109
|
expect(reply.status.code).toBe(400);
|
|
119
|
-
})
|
|
120
|
-
it('should allow tenant to subscribe their own event stream', () =>
|
|
121
|
-
const alice =
|
|
110
|
+
});
|
|
111
|
+
it('should allow tenant to subscribe their own event stream', async () => {
|
|
112
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
122
113
|
// set up a promise to read later that captures the emitted messageCid
|
|
123
114
|
let handler;
|
|
124
115
|
const messageSubscriptionPromise = new Promise((resolve) => {
|
|
125
|
-
handler = (event) =>
|
|
116
|
+
handler = async (event) => {
|
|
126
117
|
const { message } = event;
|
|
127
|
-
const messageCid =
|
|
118
|
+
const messageCid = await Message.getCid(message);
|
|
128
119
|
resolve(messageCid);
|
|
129
|
-
}
|
|
120
|
+
};
|
|
130
121
|
});
|
|
131
122
|
// testing MessagesSubscribe
|
|
132
|
-
const messagesSubscribe =
|
|
123
|
+
const messagesSubscribe = await MessagesSubscribe.create({
|
|
133
124
|
signer: Jws.createSigner(alice),
|
|
134
125
|
});
|
|
135
|
-
const subscriptionReply =
|
|
126
|
+
const subscriptionReply = await dwn.processMessage(alice.did, messagesSubscribe.message, { subscriptionHandler: handler });
|
|
136
127
|
expect(subscriptionReply.status.code).toBe(200);
|
|
137
128
|
expect(subscriptionReply.subscription).toBeDefined();
|
|
138
|
-
const messageWrite =
|
|
139
|
-
const writeReply =
|
|
129
|
+
const messageWrite = await TestDataGenerator.generateRecordsWrite({ author: alice });
|
|
130
|
+
const writeReply = await dwn.processMessage(alice.did, messageWrite.message, { dataStream: messageWrite.dataStream });
|
|
140
131
|
expect(writeReply.status.code).toBe(202);
|
|
141
|
-
const messageCid =
|
|
132
|
+
const messageCid = await Message.getCid(messageWrite.message);
|
|
142
133
|
// control: ensure that the event exists
|
|
143
|
-
const events =
|
|
134
|
+
const events = await stateIndex.getLeaves(alice.did, []);
|
|
144
135
|
expect(events.length).toBe(1);
|
|
145
136
|
expect(events[0]).toBe(messageCid);
|
|
146
137
|
// await the event
|
|
147
|
-
const resolvedCid =
|
|
138
|
+
const resolvedCid = await messageSubscriptionPromise;
|
|
148
139
|
expect(resolvedCid).toBe(messageCid);
|
|
149
|
-
})
|
|
150
|
-
it('should not allow non-tenant to subscribe to an event stream they are not authorized for', () =>
|
|
151
|
-
const alice =
|
|
152
|
-
const bob =
|
|
140
|
+
});
|
|
141
|
+
it('should not allow non-tenant to subscribe to an event stream they are not authorized for', async () => {
|
|
142
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
143
|
+
const bob = await TestDataGenerator.generateDidKeyPersona();
|
|
153
144
|
// test anonymous request
|
|
154
|
-
const anonymousSubscription =
|
|
145
|
+
const anonymousSubscription = await TestDataGenerator.generateMessagesSubscribe();
|
|
155
146
|
delete anonymousSubscription.message.authorization;
|
|
156
|
-
const anonymousReply =
|
|
147
|
+
const anonymousReply = await dwn.processMessage(alice.did, anonymousSubscription.message);
|
|
157
148
|
expect(anonymousReply.status.code).toBe(400);
|
|
158
149
|
expect(anonymousReply.status.detail).toContain(`MessagesSubscribe: must have required property 'authorization'`);
|
|
159
150
|
expect(anonymousReply.subscription).toBeUndefined();
|
|
160
151
|
// testing MessagesSubscribe
|
|
161
|
-
const messagesSubscribe =
|
|
152
|
+
const messagesSubscribe = await MessagesSubscribe.create({
|
|
162
153
|
signer: Jws.createSigner(bob),
|
|
163
154
|
});
|
|
164
|
-
const subscriptionReply =
|
|
155
|
+
const subscriptionReply = await dwn.processMessage(alice.did, messagesSubscribe.message);
|
|
165
156
|
expect(subscriptionReply.status.code).toBe(401);
|
|
166
157
|
expect(subscriptionReply.subscription).toBeUndefined();
|
|
167
|
-
})
|
|
158
|
+
});
|
|
168
159
|
describe('grant based subscribes', () => {
|
|
169
|
-
it('allows subscribe of messages with matching interface and method grant scope', () =>
|
|
160
|
+
it('allows subscribe of messages with matching interface and method grant scope', async () => {
|
|
170
161
|
// scenario: Alice gives Bob permission to subscribe for all of her messages
|
|
171
162
|
// Alice writes various messages
|
|
172
163
|
// When Bob subscribes for messages, he should receive updates to all of Alice's messages
|
|
173
|
-
const alice =
|
|
174
|
-
const bob =
|
|
164
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
165
|
+
const bob = await TestDataGenerator.generateDidKeyPersona();
|
|
175
166
|
// create grant that is scoped to `MessagesSubscribe` for bob
|
|
176
|
-
const { message: grantMessage, dataStream } =
|
|
167
|
+
const { message: grantMessage, dataStream } = await TestDataGenerator.generateGrantCreate({
|
|
177
168
|
author: alice,
|
|
178
169
|
grantedTo: bob,
|
|
179
170
|
scope: {
|
|
@@ -181,67 +172,67 @@ export function testMessagesSubscribeHandler() {
|
|
|
181
172
|
method: DwnMethodName.Subscribe
|
|
182
173
|
}
|
|
183
174
|
});
|
|
184
|
-
const grantReply =
|
|
175
|
+
const grantReply = await dwn.processMessage(alice.did, grantMessage, { dataStream });
|
|
185
176
|
expect(grantReply.status.code).toBe(202);
|
|
186
177
|
// create a handler to capture the emitted messageCids
|
|
187
178
|
const messageCids = [];
|
|
188
|
-
const handler = (event) =>
|
|
179
|
+
const handler = async (event) => {
|
|
189
180
|
const { message } = event;
|
|
190
|
-
const messageCid =
|
|
181
|
+
const messageCid = await Message.getCid(message);
|
|
191
182
|
messageCids.push(messageCid);
|
|
192
|
-
}
|
|
183
|
+
};
|
|
193
184
|
// subscribe to messages
|
|
194
|
-
const { message: subscribeMessage } =
|
|
185
|
+
const { message: subscribeMessage } = await TestDataGenerator.generateMessagesSubscribe({
|
|
195
186
|
author: bob,
|
|
196
187
|
permissionGrantId: grantMessage.recordId,
|
|
197
188
|
});
|
|
198
|
-
const subscribeReply =
|
|
189
|
+
const subscribeReply = await dwn.processMessage(alice.did, subscribeMessage, { subscriptionHandler: handler });
|
|
199
190
|
expect(subscribeReply.status.code).toBe(200);
|
|
200
191
|
// configure the freeForAll protocol
|
|
201
|
-
const { message: freeForAllConfigure } =
|
|
192
|
+
const { message: freeForAllConfigure } = await TestDataGenerator.generateProtocolsConfigure({
|
|
202
193
|
author: alice,
|
|
203
194
|
protocolDefinition: freeForAll,
|
|
204
195
|
});
|
|
205
|
-
const { status: freeForAllReplyStatus } =
|
|
196
|
+
const { status: freeForAllReplyStatus } = await dwn.processMessage(alice.did, freeForAllConfigure);
|
|
206
197
|
expect(freeForAllReplyStatus.code).toBe(202);
|
|
207
198
|
// configure a random protocol configuration
|
|
208
|
-
const { message: protocolMessage } =
|
|
199
|
+
const { message: protocolMessage } = await TestDataGenerator.generateProtocolsConfigure({
|
|
209
200
|
author: alice,
|
|
210
201
|
});
|
|
211
|
-
const { status: configureStatus } =
|
|
202
|
+
const { status: configureStatus } = await dwn.processMessage(alice.did, protocolMessage);
|
|
212
203
|
expect(configureStatus.code).toBe(202);
|
|
213
204
|
// write a message to the Records free for all interface
|
|
214
|
-
const { message: recordMessage, dataStream: recordDataStream } =
|
|
205
|
+
const { message: recordMessage, dataStream: recordDataStream } = await TestDataGenerator.generateRecordsWrite({
|
|
215
206
|
protocol: freeForAll.protocol,
|
|
216
207
|
protocolPath: 'post',
|
|
217
208
|
schema: freeForAll.types.post.schema,
|
|
218
209
|
author: alice
|
|
219
210
|
});
|
|
220
|
-
const recordReply =
|
|
211
|
+
const recordReply = await dwn.processMessage(alice.did, recordMessage, { dataStream: recordDataStream });
|
|
221
212
|
expect(recordReply.status.code).toBe(202);
|
|
222
213
|
// write a random message
|
|
223
|
-
const { message: randomMessage, dataStream: randomDataStream } =
|
|
214
|
+
const { message: randomMessage, dataStream: randomDataStream } = await TestDataGenerator.generateRecordsWrite({
|
|
224
215
|
author: alice
|
|
225
216
|
});
|
|
226
|
-
const randomReply =
|
|
217
|
+
const randomReply = await dwn.processMessage(alice.did, randomMessage, { dataStream: randomDataStream });
|
|
227
218
|
expect(randomReply.status.code).toBe(202);
|
|
228
219
|
// ensure that all messages have been received
|
|
229
|
-
|
|
220
|
+
await Poller.pollUntilSuccessOrTimeout(async () => {
|
|
230
221
|
expect(messageCids.length).toBe(4);
|
|
231
222
|
const expectedCids = [
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
223
|
+
await Message.getCid(freeForAllConfigure),
|
|
224
|
+
await Message.getCid(protocolMessage),
|
|
225
|
+
await Message.getCid(recordMessage),
|
|
226
|
+
await Message.getCid(randomMessage),
|
|
236
227
|
];
|
|
237
228
|
expect(messageCids.sort()).toEqual(expectedCids.sort());
|
|
238
|
-
})
|
|
239
|
-
})
|
|
240
|
-
it('rejects subscribe of messages with mismatching interface grant scope', () =>
|
|
241
|
-
const alice =
|
|
242
|
-
const bob =
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
it('rejects subscribe of messages with mismatching interface grant scope', async () => {
|
|
232
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
233
|
+
const bob = await TestDataGenerator.generateDidKeyPersona();
|
|
243
234
|
// create grant that is scoped to `RecordsWrite` for bob scoped to the `freeForAll` protocol
|
|
244
|
-
const { message: grantMessage, dataStream } =
|
|
235
|
+
const { message: grantMessage, dataStream } = await TestDataGenerator.generateGrantCreate({
|
|
245
236
|
author: alice,
|
|
246
237
|
grantedTo: bob,
|
|
247
238
|
scope: {
|
|
@@ -250,22 +241,22 @@ export function testMessagesSubscribeHandler() {
|
|
|
250
241
|
protocol: freeForAll.protocol
|
|
251
242
|
}
|
|
252
243
|
});
|
|
253
|
-
const grantReply =
|
|
244
|
+
const grantReply = await dwn.processMessage(alice.did, grantMessage, { dataStream });
|
|
254
245
|
expect(grantReply.status.code).toBe(202);
|
|
255
246
|
// bob attempts to use the `RecordsWrite` grant on an `MessagesSubscribe` message
|
|
256
|
-
const { message: bobSubscribe } =
|
|
247
|
+
const { message: bobSubscribe } = await TestDataGenerator.generateMessagesSubscribe({
|
|
257
248
|
author: bob,
|
|
258
249
|
permissionGrantId: grantMessage.recordId
|
|
259
250
|
});
|
|
260
|
-
const bobReply =
|
|
251
|
+
const bobReply = await dwn.processMessage(alice.did, bobSubscribe);
|
|
261
252
|
expect(bobReply.status.code).toBe(401);
|
|
262
253
|
expect(bobReply.status.detail).toContain(DwnErrorCode.GrantAuthorizationInterfaceMismatch);
|
|
263
|
-
})
|
|
264
|
-
it('rejects subscribe of messages with mismatching method grant scopes', () =>
|
|
265
|
-
const alice =
|
|
266
|
-
const bob =
|
|
254
|
+
});
|
|
255
|
+
it('rejects subscribe of messages with mismatching method grant scopes', async () => {
|
|
256
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
257
|
+
const bob = await TestDataGenerator.generateDidKeyPersona();
|
|
267
258
|
// create grant that is scoped to `MessagesSync` for bob
|
|
268
|
-
const { message: grantMessage, dataStream } =
|
|
259
|
+
const { message: grantMessage, dataStream } = await TestDataGenerator.generateGrantCreate({
|
|
269
260
|
author: alice,
|
|
270
261
|
grantedTo: bob,
|
|
271
262
|
scope: {
|
|
@@ -273,39 +264,39 @@ export function testMessagesSubscribeHandler() {
|
|
|
273
264
|
method: DwnMethodName.Sync,
|
|
274
265
|
}
|
|
275
266
|
});
|
|
276
|
-
const grantReply =
|
|
267
|
+
const grantReply = await dwn.processMessage(alice.did, grantMessage, { dataStream });
|
|
277
268
|
expect(grantReply.status.code).toBe(202);
|
|
278
269
|
// bob attempts to use the `MessagesSync` grant on an `MessagesSubscribe` message
|
|
279
|
-
const { message: bobSubscribe } =
|
|
270
|
+
const { message: bobSubscribe } = await TestDataGenerator.generateMessagesSubscribe({
|
|
280
271
|
author: bob,
|
|
281
272
|
permissionGrantId: grantMessage.recordId
|
|
282
273
|
});
|
|
283
|
-
const bobReply =
|
|
274
|
+
const bobReply = await dwn.processMessage(alice.did, bobSubscribe);
|
|
284
275
|
expect(bobReply.status.code).toBe(401);
|
|
285
276
|
expect(bobReply.status.detail).toContain(DwnErrorCode.GrantAuthorizationMethodMismatch);
|
|
286
|
-
})
|
|
277
|
+
});
|
|
287
278
|
describe('protocol filtered messages', () => {
|
|
288
|
-
it('allows subscribe of protocol filtered messages with matching protocol grant scopes', () =>
|
|
289
|
-
const alice =
|
|
290
|
-
const bob =
|
|
279
|
+
it('allows subscribe of protocol filtered messages with matching protocol grant scopes', async () => {
|
|
280
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
281
|
+
const bob = await TestDataGenerator.generateDidKeyPersona();
|
|
291
282
|
// install protocol 1
|
|
292
|
-
const protocol1 =
|
|
293
|
-
const { message: protocol1Configure } =
|
|
283
|
+
const protocol1 = { ...freeForAll, published: true, protocol: 'http://protcol1' };
|
|
284
|
+
const { message: protocol1Configure } = await TestDataGenerator.generateProtocolsConfigure({
|
|
294
285
|
author: alice,
|
|
295
286
|
protocolDefinition: protocol1,
|
|
296
287
|
});
|
|
297
|
-
const { status: protocol1ConfigureStatus } =
|
|
288
|
+
const { status: protocol1ConfigureStatus } = await dwn.processMessage(alice.did, protocol1Configure);
|
|
298
289
|
expect(protocol1ConfigureStatus.code).toBe(202);
|
|
299
290
|
// install protocol 2
|
|
300
|
-
const protocol2 =
|
|
301
|
-
const { message: protocol2Configure } =
|
|
291
|
+
const protocol2 = { ...freeForAll, published: true, protocol: 'http://protcol2' };
|
|
292
|
+
const { message: protocol2Configure } = await TestDataGenerator.generateProtocolsConfigure({
|
|
302
293
|
author: alice,
|
|
303
294
|
protocolDefinition: protocol2,
|
|
304
295
|
});
|
|
305
|
-
const { status: protocol2ConfigureStatus } =
|
|
296
|
+
const { status: protocol2ConfigureStatus } = await dwn.processMessage(alice.did, protocol2Configure);
|
|
306
297
|
expect(protocol2ConfigureStatus.code).toBe(202);
|
|
307
298
|
// grant bob permission to subscribe for protocol 1
|
|
308
|
-
const { message: grant1Message, dataStream: grant1DataStream } =
|
|
299
|
+
const { message: grant1Message, dataStream: grant1DataStream } = await TestDataGenerator.generateGrantCreate({
|
|
309
300
|
author: alice,
|
|
310
301
|
grantedTo: bob,
|
|
311
302
|
scope: {
|
|
@@ -314,86 +305,86 @@ export function testMessagesSubscribeHandler() {
|
|
|
314
305
|
protocol: protocol1.protocol
|
|
315
306
|
}
|
|
316
307
|
});
|
|
317
|
-
const grant1Reply =
|
|
308
|
+
const grant1Reply = await dwn.processMessage(alice.did, grant1Message, { dataStream: grant1DataStream });
|
|
318
309
|
expect(grant1Reply.status.code).toBe(202);
|
|
319
310
|
// bob uses the grant to subscribe to protocol 1 messages
|
|
320
311
|
const proto1MessageCids = [];
|
|
321
|
-
const proto1Handler = (event) =>
|
|
312
|
+
const proto1Handler = async (event) => {
|
|
322
313
|
const { message } = event;
|
|
323
|
-
const messageCid =
|
|
314
|
+
const messageCid = await Message.getCid(message);
|
|
324
315
|
proto1MessageCids.push(messageCid);
|
|
325
|
-
}
|
|
326
|
-
const { message: bobSubscribe1 } =
|
|
316
|
+
};
|
|
317
|
+
const { message: bobSubscribe1 } = await TestDataGenerator.generateMessagesSubscribe({
|
|
327
318
|
author: bob,
|
|
328
319
|
filters: [{ protocol: protocol1.protocol }],
|
|
329
320
|
permissionGrantId: grant1Message.recordId
|
|
330
321
|
});
|
|
331
|
-
const bobReply1 =
|
|
322
|
+
const bobReply1 = await dwn.processMessage(alice.did, bobSubscribe1, { subscriptionHandler: proto1Handler });
|
|
332
323
|
expect(bobReply1.status.code).toBe(200);
|
|
333
324
|
const allMessages = [];
|
|
334
|
-
const allHandler = (event) =>
|
|
325
|
+
const allHandler = async (event) => {
|
|
335
326
|
const { message } = event;
|
|
336
|
-
const messageCid =
|
|
327
|
+
const messageCid = await Message.getCid(message);
|
|
337
328
|
allMessages.push(messageCid);
|
|
338
|
-
}
|
|
339
|
-
const { message: allSubscribe } =
|
|
329
|
+
};
|
|
330
|
+
const { message: allSubscribe } = await TestDataGenerator.generateMessagesSubscribe({
|
|
340
331
|
author: alice,
|
|
341
332
|
});
|
|
342
|
-
const allReply =
|
|
333
|
+
const allReply = await dwn.processMessage(alice.did, allSubscribe, { subscriptionHandler: allHandler });
|
|
343
334
|
expect(allReply.status.code).toBe(200);
|
|
344
335
|
// alice writes a message to protocol 1
|
|
345
|
-
const { message: proto1Message, dataStream: proto1DataStream } =
|
|
336
|
+
const { message: proto1Message, dataStream: proto1DataStream } = await TestDataGenerator.generateRecordsWrite({
|
|
346
337
|
protocol: protocol1.protocol,
|
|
347
338
|
protocolPath: 'post',
|
|
348
339
|
schema: protocol1.types.post.schema,
|
|
349
340
|
author: alice
|
|
350
341
|
});
|
|
351
|
-
const proto1Reply =
|
|
342
|
+
const proto1Reply = await dwn.processMessage(alice.did, proto1Message, { dataStream: proto1DataStream });
|
|
352
343
|
expect(proto1Reply.status.code).toBe(202);
|
|
353
344
|
// alice writes a message to protocol 2
|
|
354
|
-
const { message: proto2Message, dataStream: proto2DataStream } =
|
|
345
|
+
const { message: proto2Message, dataStream: proto2DataStream } = await TestDataGenerator.generateRecordsWrite({
|
|
355
346
|
protocol: protocol2.protocol,
|
|
356
347
|
protocolPath: 'post',
|
|
357
348
|
schema: protocol2.types.post.schema,
|
|
358
349
|
author: alice
|
|
359
350
|
});
|
|
360
|
-
const proto2Reply =
|
|
351
|
+
const proto2Reply = await dwn.processMessage(alice.did, proto2Message, { dataStream: proto2DataStream });
|
|
361
352
|
expect(proto2Reply.status.code).toBe(202);
|
|
362
353
|
// ensure that all messages have been received as a control
|
|
363
|
-
|
|
354
|
+
await Poller.pollUntilSuccessOrTimeout(async () => {
|
|
364
355
|
expect(allMessages.length).toBe(2);
|
|
365
356
|
const expectedAllCids = [
|
|
366
|
-
|
|
367
|
-
|
|
357
|
+
await Message.getCid(proto1Message),
|
|
358
|
+
await Message.getCid(proto2Message)
|
|
368
359
|
];
|
|
369
360
|
expect(allMessages.sort()).toEqual(expectedAllCids.sort());
|
|
370
361
|
// proto 1 messages should only have one message
|
|
371
362
|
expect(proto1MessageCids.length).toBe(1);
|
|
372
|
-
const expectedProto1Cids = [
|
|
363
|
+
const expectedProto1Cids = [await Message.getCid(proto1Message)];
|
|
373
364
|
expect(proto1MessageCids.sort()).toEqual(expectedProto1Cids.sort());
|
|
374
|
-
})
|
|
375
|
-
})
|
|
376
|
-
it('rejects subscribe of protocol filtered messages with mismatching protocol grant scopes', () =>
|
|
377
|
-
const alice =
|
|
378
|
-
const bob =
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
it('rejects subscribe of protocol filtered messages with mismatching protocol grant scopes', async () => {
|
|
368
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
369
|
+
const bob = await TestDataGenerator.generateDidKeyPersona();
|
|
379
370
|
// install protocol 1
|
|
380
|
-
const protocol1 =
|
|
381
|
-
const { message: protocol1Configure } =
|
|
371
|
+
const protocol1 = { ...freeForAll, published: true, protocol: 'http://protcol1' };
|
|
372
|
+
const { message: protocol1Configure } = await TestDataGenerator.generateProtocolsConfigure({
|
|
382
373
|
author: alice,
|
|
383
374
|
protocolDefinition: protocol1,
|
|
384
375
|
});
|
|
385
|
-
const { status: protocol1ConfigureStatus } =
|
|
376
|
+
const { status: protocol1ConfigureStatus } = await dwn.processMessage(alice.did, protocol1Configure);
|
|
386
377
|
expect(protocol1ConfigureStatus.code).toBe(202);
|
|
387
378
|
// install protocol 2
|
|
388
|
-
const protocol2 =
|
|
389
|
-
const { message: protocol2Configure } =
|
|
379
|
+
const protocol2 = { ...freeForAll, published: true, protocol: 'http://protcol2' };
|
|
380
|
+
const { message: protocol2Configure } = await TestDataGenerator.generateProtocolsConfigure({
|
|
390
381
|
author: alice,
|
|
391
382
|
protocolDefinition: protocol2,
|
|
392
383
|
});
|
|
393
|
-
const { status: protocol2ConfigureStatus } =
|
|
384
|
+
const { status: protocol2ConfigureStatus } = await dwn.processMessage(alice.did, protocol2Configure);
|
|
394
385
|
expect(protocol2ConfigureStatus.code).toBe(202);
|
|
395
386
|
// grant bob permission to subscribe for protocol 1
|
|
396
|
-
const { message: grant1Message, dataStream: grant1DataStream } =
|
|
387
|
+
const { message: grant1Message, dataStream: grant1DataStream } = await TestDataGenerator.generateGrantCreate({
|
|
397
388
|
author: alice,
|
|
398
389
|
grantedTo: bob,
|
|
399
390
|
scope: {
|
|
@@ -402,30 +393,30 @@ export function testMessagesSubscribeHandler() {
|
|
|
402
393
|
protocol: protocol1.protocol
|
|
403
394
|
}
|
|
404
395
|
});
|
|
405
|
-
const grant1Reply =
|
|
396
|
+
const grant1Reply = await dwn.processMessage(alice.did, grant1Message, { dataStream: grant1DataStream });
|
|
406
397
|
expect(grant1Reply.status.code).toBe(202);
|
|
407
398
|
// bob uses the grant for protocol 1 to subscribe for protocol 2 messages
|
|
408
|
-
const { message: bobSubscribe1 } =
|
|
399
|
+
const { message: bobSubscribe1 } = await TestDataGenerator.generateMessagesSubscribe({
|
|
409
400
|
author: bob,
|
|
410
401
|
filters: [{ protocol: protocol2.protocol }],
|
|
411
402
|
permissionGrantId: grant1Message.recordId
|
|
412
403
|
});
|
|
413
|
-
const bobReply1 =
|
|
404
|
+
const bobReply1 = await dwn.processMessage(alice.did, bobSubscribe1);
|
|
414
405
|
expect(bobReply1.status.code).toBe(401);
|
|
415
406
|
expect(bobReply1.status.detail).toContain(DwnErrorCode.MessagesGrantAuthorizationMismatchedProtocol);
|
|
416
407
|
expect(bobReply1.subscription).toBeUndefined();
|
|
417
408
|
// bob attempts to use the grant for protocol 1 to subscribe to messages in protocol 1 OR protocol 2 given two filters
|
|
418
409
|
// this should fail because the grant is scoped to protocol 1 only
|
|
419
|
-
const { message: bobSubscribe2 } =
|
|
410
|
+
const { message: bobSubscribe2 } = await TestDataGenerator.generateMessagesSubscribe({
|
|
420
411
|
author: bob,
|
|
421
412
|
filters: [{ protocol: protocol1.protocol }, { protocol: protocol2.protocol }],
|
|
422
413
|
permissionGrantId: grant1Message.recordId
|
|
423
414
|
});
|
|
424
|
-
const bobReply2 =
|
|
415
|
+
const bobReply2 = await dwn.processMessage(alice.did, bobSubscribe2);
|
|
425
416
|
expect(bobReply2.status.code).toBe(401);
|
|
426
417
|
expect(bobReply2.status.detail).toContain(DwnErrorCode.MessagesGrantAuthorizationMismatchedProtocol);
|
|
427
418
|
expect(bobReply2.subscription).toBeUndefined();
|
|
428
|
-
})
|
|
419
|
+
});
|
|
429
420
|
});
|
|
430
421
|
});
|
|
431
422
|
});
|