@enbox/dwn-sdk-js 0.0.5 → 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 +108 -140
- 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 +553 -568
- 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 +291 -44
- 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/src/utils/records.d.ts +3 -1
- package/dist/types/src/utils/records.d.ts.map +1 -1
- package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
- package/package.json +3 -3
- 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 +9 -15
|
@@ -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 sinon from 'sinon';
|
|
11
2
|
import { DataStream } from '../../src/utils/data-stream.js';
|
|
12
3
|
import { Dwn } from '../../src/dwn.js';
|
|
@@ -31,7 +22,7 @@ export function testProtocolUpdateAction() {
|
|
|
31
22
|
let dwn;
|
|
32
23
|
// important to follow the `before` and `after` pattern to initialize and clean the stores in tests
|
|
33
24
|
// so that different test suites can reuse the same backend store for testing
|
|
34
|
-
beforeAll(() =>
|
|
25
|
+
beforeAll(async () => {
|
|
35
26
|
didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
36
27
|
const stores = TestStores.get();
|
|
37
28
|
messageStore = stores.messageStore;
|
|
@@ -39,20 +30,20 @@ export function testProtocolUpdateAction() {
|
|
|
39
30
|
resumableTaskStore = stores.resumableTaskStore;
|
|
40
31
|
stateIndex = stores.stateIndex;
|
|
41
32
|
eventStream = TestEventStream.get();
|
|
42
|
-
dwn =
|
|
43
|
-
})
|
|
44
|
-
beforeEach(() =>
|
|
33
|
+
dwn = await Dwn.create({ didResolver, messageStore, dataStore, stateIndex, eventStream, resumableTaskStore });
|
|
34
|
+
});
|
|
35
|
+
beforeEach(async () => {
|
|
45
36
|
sinon.restore(); // wipe all previous stubs/spies/mocks/fakes
|
|
46
37
|
// clean up before each test rather than after so that a test does not depend on other tests to do the clean up
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
})
|
|
52
|
-
afterAll(() =>
|
|
53
|
-
|
|
54
|
-
})
|
|
55
|
-
it('should only allow author of a role-authorized create to update', () =>
|
|
38
|
+
await messageStore.clear();
|
|
39
|
+
await dataStore.clear();
|
|
40
|
+
await resumableTaskStore.clear();
|
|
41
|
+
await stateIndex.clear();
|
|
42
|
+
});
|
|
43
|
+
afterAll(async () => {
|
|
44
|
+
await dwn.close();
|
|
45
|
+
});
|
|
46
|
+
it('should only allow author of a role-authorized create to update', async () => {
|
|
56
47
|
// Scenario:
|
|
57
48
|
// 1. Alice installs a protocol with a "author of a role-authorized create can update" rule.
|
|
58
49
|
// 2. Alice gives Bob and Carol the "user" role to be able to write `foo` records.
|
|
@@ -62,9 +53,9 @@ export function testProtocolUpdateAction() {
|
|
|
62
53
|
// 5. Carol creates a `foo` by invoking the user role.
|
|
63
54
|
// 6. Verify that Carol can update her `foo`
|
|
64
55
|
// 7. Verify that Bob cannot update Carol's `foo`
|
|
65
|
-
const alice =
|
|
66
|
-
const bob =
|
|
67
|
-
const carol =
|
|
56
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
57
|
+
const bob = await TestDataGenerator.generateDidKeyPersona();
|
|
58
|
+
const carol = await TestDataGenerator.generateDidKeyPersona();
|
|
68
59
|
// 1. Alice installs a protocol with a "author of a role-authorized create can update" rule.
|
|
69
60
|
const protocolDefinition = {
|
|
70
61
|
protocol: 'foo',
|
|
@@ -87,32 +78,32 @@ export function testProtocolUpdateAction() {
|
|
|
87
78
|
}
|
|
88
79
|
}
|
|
89
80
|
};
|
|
90
|
-
const protocolsConfig =
|
|
81
|
+
const protocolsConfig = await ProtocolsConfigure.create({
|
|
91
82
|
definition: protocolDefinition,
|
|
92
83
|
signer: Jws.createSigner(alice)
|
|
93
84
|
});
|
|
94
|
-
const protocolsConfigureReply =
|
|
85
|
+
const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
|
|
95
86
|
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
96
87
|
// 2. Alice gives Bob and Carol the "user" role to be able to write `foo` records.
|
|
97
|
-
const userBobRecordsWrite =
|
|
88
|
+
const userBobRecordsWrite = await TestDataGenerator.generateRecordsWrite({
|
|
98
89
|
author: alice,
|
|
99
90
|
recipient: bob.did,
|
|
100
91
|
protocol: protocolDefinition.protocol,
|
|
101
92
|
protocolPath: 'user'
|
|
102
93
|
});
|
|
103
|
-
const userBobRecordsWriteReply =
|
|
94
|
+
const userBobRecordsWriteReply = await dwn.processMessage(alice.did, userBobRecordsWrite.message, { dataStream: userBobRecordsWrite.dataStream });
|
|
104
95
|
expect(userBobRecordsWriteReply.status.code).toBe(202);
|
|
105
|
-
const userCarolRecordsWrite =
|
|
96
|
+
const userCarolRecordsWrite = await TestDataGenerator.generateRecordsWrite({
|
|
106
97
|
author: alice,
|
|
107
98
|
recipient: carol.did,
|
|
108
99
|
protocol: protocolDefinition.protocol,
|
|
109
100
|
protocolPath: 'user'
|
|
110
101
|
});
|
|
111
|
-
const userCarolRecordsWriteReply =
|
|
102
|
+
const userCarolRecordsWriteReply = await dwn.processMessage(alice.did, userCarolRecordsWrite.message, { dataStream: userCarolRecordsWrite.dataStream });
|
|
112
103
|
expect(userCarolRecordsWriteReply.status.code).toBe(202);
|
|
113
104
|
// 3. Bob creates a `foo` by invoking the user role.
|
|
114
105
|
const bobFooBytes = TestDataGenerator.randomBytes(100);
|
|
115
|
-
const bobRoleAuthorizedFoo =
|
|
106
|
+
const bobRoleAuthorizedFoo = await RecordsWrite.create({
|
|
116
107
|
signer: Jws.createSigner(bob),
|
|
117
108
|
protocolRole: 'user',
|
|
118
109
|
protocol: protocolDefinition.protocol,
|
|
@@ -121,32 +112,32 @@ export function testProtocolUpdateAction() {
|
|
|
121
112
|
dataFormat: 'any-format',
|
|
122
113
|
data: bobFooBytes
|
|
123
114
|
});
|
|
124
|
-
const bobRoleAuthorizedCreateReply =
|
|
115
|
+
const bobRoleAuthorizedCreateReply = await dwn.processMessage(alice.did, bobRoleAuthorizedFoo.message, { dataStream: DataStream.fromBytes(bobFooBytes) });
|
|
125
116
|
expect(bobRoleAuthorizedCreateReply.status.code).toBe(202);
|
|
126
117
|
// 4. Verify that Bob can update his `foo`
|
|
127
118
|
const bobFooNewBytes = TestDataGenerator.randomBytes(100);
|
|
128
|
-
const bobAuthorizedFooUpdate =
|
|
119
|
+
const bobAuthorizedFooUpdate = await RecordsWrite.createFrom({
|
|
129
120
|
recordsWriteMessage: bobRoleAuthorizedFoo.message,
|
|
130
121
|
data: bobFooNewBytes,
|
|
131
122
|
signer: Jws.createSigner(bob)
|
|
132
123
|
});
|
|
133
|
-
const bobAuthorizedFooUpdateReply =
|
|
124
|
+
const bobAuthorizedFooUpdateReply = await dwn.processMessage(alice.did, bobAuthorizedFooUpdate.message, { dataStream: DataStream.fromBytes(bobFooNewBytes) });
|
|
134
125
|
expect(bobAuthorizedFooUpdateReply.status.code).toBe(202);
|
|
135
126
|
// 4a. Sanity verify that the update took effect by reading the record back
|
|
136
|
-
const recordsRead =
|
|
127
|
+
const recordsRead = await RecordsRead.create({
|
|
137
128
|
filter: {
|
|
138
129
|
recordId: bobRoleAuthorizedFoo.message.recordId
|
|
139
130
|
},
|
|
140
131
|
signer: Jws.createSigner(alice)
|
|
141
132
|
});
|
|
142
|
-
const recordsReadReply =
|
|
133
|
+
const recordsReadReply = await dwn.processMessage(alice.did, recordsRead.message);
|
|
143
134
|
expect(recordsReadReply.status.code).toBe(200);
|
|
144
135
|
expect(recordsReadReply.entry.data).toBeDefined();
|
|
145
|
-
const dataFromReply =
|
|
136
|
+
const dataFromReply = await DataStream.toBytes(recordsReadReply.entry.data);
|
|
146
137
|
expect(dataFromReply).toEqual(bobFooNewBytes);
|
|
147
138
|
// 5. Carol creates a `foo` by invoking the user role.
|
|
148
139
|
const carolFooBytes = TestDataGenerator.randomBytes(100);
|
|
149
|
-
const carolRoleAuthorizedFoo =
|
|
140
|
+
const carolRoleAuthorizedFoo = await RecordsWrite.create({
|
|
150
141
|
signer: Jws.createSigner(carol),
|
|
151
142
|
protocolRole: 'user',
|
|
152
143
|
protocol: protocolDefinition.protocol,
|
|
@@ -155,28 +146,28 @@ export function testProtocolUpdateAction() {
|
|
|
155
146
|
dataFormat: 'any-format',
|
|
156
147
|
data: carolFooBytes
|
|
157
148
|
});
|
|
158
|
-
const carolRoleAuthorizedCreateReply =
|
|
149
|
+
const carolRoleAuthorizedCreateReply = await dwn.processMessage(alice.did, carolRoleAuthorizedFoo.message, { dataStream: DataStream.fromBytes(carolFooBytes) });
|
|
159
150
|
expect(carolRoleAuthorizedCreateReply.status.code).toBe(202);
|
|
160
151
|
// 6. Verify that carol can update her `foo`
|
|
161
152
|
const carolFooNewBytes = TestDataGenerator.randomBytes(100);
|
|
162
|
-
const carolAuthorizedFooUpdate =
|
|
153
|
+
const carolAuthorizedFooUpdate = await RecordsWrite.createFrom({
|
|
163
154
|
recordsWriteMessage: carolRoleAuthorizedFoo.message,
|
|
164
155
|
data: carolFooNewBytes,
|
|
165
156
|
signer: Jws.createSigner(carol)
|
|
166
157
|
});
|
|
167
|
-
const carolAuthorizedFooUpdateReply =
|
|
158
|
+
const carolAuthorizedFooUpdateReply = await dwn.processMessage(alice.did, carolAuthorizedFooUpdate.message, { dataStream: DataStream.fromBytes(carolFooNewBytes) });
|
|
168
159
|
expect(carolAuthorizedFooUpdateReply.status.code).toBe(202);
|
|
169
160
|
// 7. Verify that Bob cannot update Carol's `foo`
|
|
170
|
-
const bobUnauthorizedFooUpdate =
|
|
161
|
+
const bobUnauthorizedFooUpdate = await RecordsWrite.createFrom({
|
|
171
162
|
recordsWriteMessage: carolRoleAuthorizedFoo.message,
|
|
172
163
|
data: bobFooNewBytes,
|
|
173
164
|
signer: Jws.createSigner(bob)
|
|
174
165
|
});
|
|
175
|
-
const bobUnauthorizedFooUpdateReply =
|
|
166
|
+
const bobUnauthorizedFooUpdateReply = await dwn.processMessage(alice.did, bobUnauthorizedFooUpdate.message, { dataStream: DataStream.fromBytes(bobFooNewBytes) });
|
|
176
167
|
expect(bobUnauthorizedFooUpdateReply.status.code).toBe(401);
|
|
177
168
|
expect(bobUnauthorizedFooUpdateReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
178
|
-
})
|
|
179
|
-
it('should only allow author of an author/recipient-authorized create to update', () =>
|
|
169
|
+
});
|
|
170
|
+
it('should only allow author of an author/recipient-authorized create to update', async () => {
|
|
180
171
|
// Scenario:
|
|
181
172
|
// 1. Alice installs a protocol with "author of an author/recipient-authorized create can update" rules.
|
|
182
173
|
// 2. Alice creates a `foo` with Bob being the recipient, so that Bob can create `bar`.
|
|
@@ -191,9 +182,9 @@ export function testProtocolUpdateAction() {
|
|
|
191
182
|
// 10. Verify that Bob can update his `baz`
|
|
192
183
|
// 10a. Sanity verify that the update took effect by reading the record back.
|
|
193
184
|
// 11. Verify that Bob cannot update Carol's `baz`
|
|
194
|
-
const alice =
|
|
195
|
-
const bob =
|
|
196
|
-
const carol =
|
|
185
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
186
|
+
const bob = await TestDataGenerator.generateDidKeyPersona();
|
|
187
|
+
const carol = await TestDataGenerator.generateDidKeyPersona();
|
|
197
188
|
// 1. Alice installs a protocol with "author of an author/recipient-authorized create can update" rules.
|
|
198
189
|
const protocolDefinition = {
|
|
199
190
|
protocol: 'foo-bar-baz',
|
|
@@ -226,33 +217,33 @@ export function testProtocolUpdateAction() {
|
|
|
226
217
|
}
|
|
227
218
|
}
|
|
228
219
|
};
|
|
229
|
-
const protocolsConfig =
|
|
220
|
+
const protocolsConfig = await ProtocolsConfigure.create({
|
|
230
221
|
definition: protocolDefinition,
|
|
231
222
|
signer: Jws.createSigner(alice)
|
|
232
223
|
});
|
|
233
|
-
const protocolsConfigureReply =
|
|
224
|
+
const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
|
|
234
225
|
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
235
226
|
// 2. Alice creates a `foo` with Bob being the recipient, so that Bob can create `bar`.
|
|
236
|
-
const fooForBob =
|
|
227
|
+
const fooForBob = await TestDataGenerator.generateRecordsWrite({
|
|
237
228
|
author: alice,
|
|
238
229
|
recipient: bob.did,
|
|
239
230
|
protocol: protocolDefinition.protocol,
|
|
240
231
|
protocolPath: 'foo'
|
|
241
232
|
});
|
|
242
|
-
const fooForBobReply =
|
|
233
|
+
const fooForBobReply = await dwn.processMessage(alice.did, fooForBob.message, { dataStream: fooForBob.dataStream });
|
|
243
234
|
expect(fooForBobReply.status.code).toBe(202);
|
|
244
235
|
// 3. Alice creates a `foo` with Carol being the recipient, so that Carol can create `bar`.
|
|
245
|
-
const fooForCarol =
|
|
236
|
+
const fooForCarol = await TestDataGenerator.generateRecordsWrite({
|
|
246
237
|
author: alice,
|
|
247
238
|
recipient: carol.did,
|
|
248
239
|
protocol: protocolDefinition.protocol,
|
|
249
240
|
protocolPath: 'foo'
|
|
250
241
|
});
|
|
251
|
-
const fooForCarolReply =
|
|
242
|
+
const fooForCarolReply = await dwn.processMessage(alice.did, fooForCarol.message, { dataStream: fooForCarol.dataStream });
|
|
252
243
|
expect(fooForCarolReply.status.code).toBe(202);
|
|
253
244
|
// 4. Bob creates a recipient-authorized `bar`.
|
|
254
245
|
const bobBarBytes = TestDataGenerator.randomBytes(100);
|
|
255
|
-
const bobRecipientAuthorizedBar =
|
|
246
|
+
const bobRecipientAuthorizedBar = await RecordsWrite.create({
|
|
256
247
|
signer: Jws.createSigner(bob),
|
|
257
248
|
protocol: protocolDefinition.protocol,
|
|
258
249
|
protocolPath: 'foo/bar',
|
|
@@ -261,11 +252,11 @@ export function testProtocolUpdateAction() {
|
|
|
261
252
|
dataFormat: 'any-format',
|
|
262
253
|
data: bobBarBytes
|
|
263
254
|
});
|
|
264
|
-
const bobRecipientAuthorizedBarReply =
|
|
255
|
+
const bobRecipientAuthorizedBarReply = await dwn.processMessage(alice.did, bobRecipientAuthorizedBar.message, { dataStream: DataStream.fromBytes(bobBarBytes) });
|
|
265
256
|
expect(bobRecipientAuthorizedBarReply.status.code).toBe(202);
|
|
266
257
|
// 5. Carol creates a recipient-authorized `bar`.
|
|
267
258
|
const carolBarBytes = TestDataGenerator.randomBytes(100);
|
|
268
|
-
const carolRecipientAuthorizedBar =
|
|
259
|
+
const carolRecipientAuthorizedBar = await RecordsWrite.create({
|
|
269
260
|
signer: Jws.createSigner(carol),
|
|
270
261
|
protocol: protocolDefinition.protocol,
|
|
271
262
|
protocolPath: 'foo/bar',
|
|
@@ -274,41 +265,41 @@ export function testProtocolUpdateAction() {
|
|
|
274
265
|
dataFormat: 'any-format',
|
|
275
266
|
data: carolBarBytes
|
|
276
267
|
});
|
|
277
|
-
const carolRecipientAuthorizedBarReply =
|
|
268
|
+
const carolRecipientAuthorizedBarReply = await dwn.processMessage(alice.did, carolRecipientAuthorizedBar.message, { dataStream: DataStream.fromBytes(carolBarBytes) });
|
|
278
269
|
expect(carolRecipientAuthorizedBarReply.status.code).toBe(202);
|
|
279
270
|
// 6. Verify that Bob can update his `bar`.
|
|
280
271
|
const bobBarNewBytes = TestDataGenerator.randomBytes(100);
|
|
281
|
-
const bobAuthorizedBarUpdate =
|
|
272
|
+
const bobAuthorizedBarUpdate = await RecordsWrite.createFrom({
|
|
282
273
|
recordsWriteMessage: bobRecipientAuthorizedBar.message,
|
|
283
274
|
data: bobBarNewBytes,
|
|
284
275
|
signer: Jws.createSigner(bob)
|
|
285
276
|
});
|
|
286
|
-
const bobAuthorizedBarUpdateReply =
|
|
277
|
+
const bobAuthorizedBarUpdateReply = await dwn.processMessage(alice.did, bobAuthorizedBarUpdate.message, { dataStream: DataStream.fromBytes(bobBarNewBytes) });
|
|
287
278
|
expect(bobAuthorizedBarUpdateReply.status.code).toBe(202);
|
|
288
279
|
// 6a. Sanity verify that the update took effect by reading the record back.
|
|
289
|
-
const bobBarRead =
|
|
280
|
+
const bobBarRead = await RecordsRead.create({
|
|
290
281
|
filter: {
|
|
291
282
|
recordId: bobRecipientAuthorizedBar.message.recordId
|
|
292
283
|
},
|
|
293
284
|
signer: Jws.createSigner(alice)
|
|
294
285
|
});
|
|
295
|
-
const bobBarReadReply =
|
|
286
|
+
const bobBarReadReply = await dwn.processMessage(alice.did, bobBarRead.message);
|
|
296
287
|
expect(bobBarReadReply.status.code).toBe(200);
|
|
297
288
|
expect(bobBarReadReply.entry.data).toBeDefined();
|
|
298
|
-
const dataFromBobBarRead =
|
|
289
|
+
const dataFromBobBarRead = await DataStream.toBytes(bobBarReadReply.entry.data);
|
|
299
290
|
expect(dataFromBobBarRead).toEqual(bobBarNewBytes);
|
|
300
291
|
// 7. Verify that Bob cannot update Carol's `bar`.
|
|
301
|
-
const bobUnauthorizedBarUpdate =
|
|
292
|
+
const bobUnauthorizedBarUpdate = await RecordsWrite.createFrom({
|
|
302
293
|
recordsWriteMessage: carolRecipientAuthorizedBar.message,
|
|
303
294
|
data: bobBarNewBytes,
|
|
304
295
|
signer: Jws.createSigner(bob)
|
|
305
296
|
});
|
|
306
|
-
const bobUnauthorizedBarUpdateReply =
|
|
297
|
+
const bobUnauthorizedBarUpdateReply = await dwn.processMessage(alice.did, bobUnauthorizedBarUpdate.message, { dataStream: DataStream.fromBytes(bobBarNewBytes) });
|
|
307
298
|
expect(bobUnauthorizedBarUpdateReply.status.code).toBe(401);
|
|
308
299
|
expect(bobUnauthorizedBarUpdateReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
309
300
|
// 8. Bob creates a author-authorized `baz` after his `bar`.
|
|
310
301
|
const bobBazBytes = TestDataGenerator.randomBytes(100);
|
|
311
|
-
const bobAuthorAuthorizedBaz =
|
|
302
|
+
const bobAuthorAuthorizedBaz = await RecordsWrite.create({
|
|
312
303
|
signer: Jws.createSigner(bob),
|
|
313
304
|
protocol: protocolDefinition.protocol,
|
|
314
305
|
protocolPath: 'foo/bar/baz',
|
|
@@ -317,11 +308,11 @@ export function testProtocolUpdateAction() {
|
|
|
317
308
|
dataFormat: 'any-format',
|
|
318
309
|
data: bobBazBytes
|
|
319
310
|
});
|
|
320
|
-
const bobAuthorAuthorizedBazReply =
|
|
311
|
+
const bobAuthorAuthorizedBazReply = await dwn.processMessage(alice.did, bobAuthorAuthorizedBaz.message, { dataStream: DataStream.fromBytes(bobBazBytes) });
|
|
321
312
|
expect(bobAuthorAuthorizedBazReply.status.code).toBe(202);
|
|
322
313
|
// 9. Carol creates a author-authorized `baz` after her `bar`.
|
|
323
314
|
const carolBazBytes = TestDataGenerator.randomBytes(100);
|
|
324
|
-
const carolAuthorAuthorizedBaz =
|
|
315
|
+
const carolAuthorAuthorizedBaz = await RecordsWrite.create({
|
|
325
316
|
signer: Jws.createSigner(carol),
|
|
326
317
|
protocol: protocolDefinition.protocol,
|
|
327
318
|
protocolPath: 'foo/bar/baz',
|
|
@@ -330,40 +321,40 @@ export function testProtocolUpdateAction() {
|
|
|
330
321
|
dataFormat: 'any-format',
|
|
331
322
|
data: carolBazBytes
|
|
332
323
|
});
|
|
333
|
-
const carolAuthorAuthorizedBazReply =
|
|
324
|
+
const carolAuthorAuthorizedBazReply = await dwn.processMessage(alice.did, carolAuthorAuthorizedBaz.message, { dataStream: DataStream.fromBytes(carolBazBytes) });
|
|
334
325
|
expect(carolAuthorAuthorizedBazReply.status.code).toBe(202);
|
|
335
326
|
// 10. Verify that Bob can update his `baz`
|
|
336
327
|
const bobBazNewBytes = TestDataGenerator.randomBytes(100);
|
|
337
|
-
const bobAuthorizedBazUpdate =
|
|
328
|
+
const bobAuthorizedBazUpdate = await RecordsWrite.createFrom({
|
|
338
329
|
recordsWriteMessage: bobAuthorAuthorizedBaz.message,
|
|
339
330
|
data: bobBazNewBytes,
|
|
340
331
|
signer: Jws.createSigner(bob)
|
|
341
332
|
});
|
|
342
|
-
const bobAuthorizedBazUpdateReply =
|
|
333
|
+
const bobAuthorizedBazUpdateReply = await dwn.processMessage(alice.did, bobAuthorizedBazUpdate.message, { dataStream: DataStream.fromBytes(bobBazNewBytes) });
|
|
343
334
|
expect(bobAuthorizedBazUpdateReply.status.code).toBe(202);
|
|
344
335
|
// 10a. Sanity verify that the update took effect by reading the record back.
|
|
345
|
-
const bobBazRead =
|
|
336
|
+
const bobBazRead = await RecordsRead.create({
|
|
346
337
|
filter: {
|
|
347
338
|
recordId: bobAuthorAuthorizedBaz.message.recordId
|
|
348
339
|
},
|
|
349
340
|
signer: Jws.createSigner(alice)
|
|
350
341
|
});
|
|
351
|
-
const bobBazReadReply =
|
|
342
|
+
const bobBazReadReply = await dwn.processMessage(alice.did, bobBazRead.message);
|
|
352
343
|
expect(bobBazReadReply.status.code).toBe(200);
|
|
353
344
|
expect(bobBazReadReply.entry.data).toBeDefined();
|
|
354
|
-
const dataFromBobBazRead =
|
|
345
|
+
const dataFromBobBazRead = await DataStream.toBytes(bobBazReadReply.entry.data);
|
|
355
346
|
expect(dataFromBobBazRead).toEqual(bobBazNewBytes);
|
|
356
347
|
// 11. Verify that Bob cannot update Carol's `baz`
|
|
357
|
-
const bobUnauthorizedBazUpdate =
|
|
348
|
+
const bobUnauthorizedBazUpdate = await RecordsWrite.createFrom({
|
|
358
349
|
recordsWriteMessage: carolRecipientAuthorizedBar.message,
|
|
359
350
|
data: bobBazNewBytes,
|
|
360
351
|
signer: Jws.createSigner(bob)
|
|
361
352
|
});
|
|
362
|
-
const bobUnauthorizedBazUpdateReply =
|
|
353
|
+
const bobUnauthorizedBazUpdateReply = await dwn.processMessage(alice.did, bobUnauthorizedBazUpdate.message, { dataStream: DataStream.fromBytes(bobBazNewBytes) });
|
|
363
354
|
expect(bobUnauthorizedBazUpdateReply.status.code).toBe(401);
|
|
364
355
|
expect(bobUnauthorizedBazUpdateReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
365
|
-
})
|
|
366
|
-
it('should only allow author of an anyone-authorized create to update', () =>
|
|
356
|
+
});
|
|
357
|
+
it('should only allow author of an anyone-authorized create to update', async () => {
|
|
367
358
|
// Scenario:
|
|
368
359
|
// 1. Alice installs a protocol with "author of an anyone-authorized create can update" rules.
|
|
369
360
|
// 2. Bob creates an anyone-authorized `foo`.
|
|
@@ -371,9 +362,9 @@ export function testProtocolUpdateAction() {
|
|
|
371
362
|
// 4. Verify that Bob can update his `foo`.
|
|
372
363
|
// 4a. Sanity verify that the update took effect by reading the record back.
|
|
373
364
|
// 5. Verify that Bob cannot update Carol's `foo`.
|
|
374
|
-
const alice =
|
|
375
|
-
const bob =
|
|
376
|
-
const carol =
|
|
365
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
366
|
+
const bob = await TestDataGenerator.generateDidKeyPersona();
|
|
367
|
+
const carol = await TestDataGenerator.generateDidKeyPersona();
|
|
377
368
|
// 1. Alice installs a protocol with "author of an anyone-authorized create can update" rule.
|
|
378
369
|
const protocolDefinition = {
|
|
379
370
|
protocol: 'foo',
|
|
@@ -392,15 +383,15 @@ export function testProtocolUpdateAction() {
|
|
|
392
383
|
}
|
|
393
384
|
}
|
|
394
385
|
};
|
|
395
|
-
const protocolsConfig =
|
|
386
|
+
const protocolsConfig = await ProtocolsConfigure.create({
|
|
396
387
|
definition: protocolDefinition,
|
|
397
388
|
signer: Jws.createSigner(alice)
|
|
398
389
|
});
|
|
399
|
-
const protocolsConfigureReply =
|
|
390
|
+
const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
|
|
400
391
|
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
401
392
|
// 2. Bob creates an anyone-authorized `foo`.
|
|
402
393
|
const bobFooBytes = TestDataGenerator.randomBytes(100);
|
|
403
|
-
const bobAnyoneAuthorizedFoo =
|
|
394
|
+
const bobAnyoneAuthorizedFoo = await RecordsWrite.create({
|
|
404
395
|
signer: Jws.createSigner(bob),
|
|
405
396
|
protocol: protocolDefinition.protocol,
|
|
406
397
|
protocolPath: 'foo',
|
|
@@ -408,11 +399,11 @@ export function testProtocolUpdateAction() {
|
|
|
408
399
|
dataFormat: 'any-format',
|
|
409
400
|
data: bobFooBytes
|
|
410
401
|
});
|
|
411
|
-
const bobAnyoneAuthorizedFooReply =
|
|
402
|
+
const bobAnyoneAuthorizedFooReply = await dwn.processMessage(alice.did, bobAnyoneAuthorizedFoo.message, { dataStream: DataStream.fromBytes(bobFooBytes) });
|
|
412
403
|
expect(bobAnyoneAuthorizedFooReply.status.code).toBe(202);
|
|
413
404
|
// 3. Carol creates a anyone-authorized `foo`.
|
|
414
405
|
const carolFooBytes = TestDataGenerator.randomBytes(100);
|
|
415
|
-
const carolAnyoneAuthorizedFoo =
|
|
406
|
+
const carolAnyoneAuthorizedFoo = await RecordsWrite.create({
|
|
416
407
|
signer: Jws.createSigner(carol),
|
|
417
408
|
protocol: protocolDefinition.protocol,
|
|
418
409
|
protocolPath: 'foo',
|
|
@@ -420,46 +411,46 @@ export function testProtocolUpdateAction() {
|
|
|
420
411
|
dataFormat: 'any-format',
|
|
421
412
|
data: carolFooBytes
|
|
422
413
|
});
|
|
423
|
-
const carolAnyoneAuthorizedFooReply =
|
|
414
|
+
const carolAnyoneAuthorizedFooReply = await dwn.processMessage(alice.did, carolAnyoneAuthorizedFoo.message, { dataStream: DataStream.fromBytes(carolFooBytes) });
|
|
424
415
|
expect(carolAnyoneAuthorizedFooReply.status.code).toBe(202);
|
|
425
416
|
// 4. Verify that Bob can update his `foo`.
|
|
426
417
|
const bobFooNewBytes = TestDataGenerator.randomBytes(100);
|
|
427
|
-
const bobAuthorizedFooUpdate =
|
|
418
|
+
const bobAuthorizedFooUpdate = await RecordsWrite.createFrom({
|
|
428
419
|
recordsWriteMessage: bobAnyoneAuthorizedFoo.message,
|
|
429
420
|
data: bobFooNewBytes,
|
|
430
421
|
signer: Jws.createSigner(bob)
|
|
431
422
|
});
|
|
432
|
-
const bobAuthorizedFooUpdateReply =
|
|
423
|
+
const bobAuthorizedFooUpdateReply = await dwn.processMessage(alice.did, bobAuthorizedFooUpdate.message, { dataStream: DataStream.fromBytes(bobFooNewBytes) });
|
|
433
424
|
expect(bobAuthorizedFooUpdateReply.status.code).toBe(202);
|
|
434
425
|
// 4a. Sanity verify that the update took effect by reading the record back.
|
|
435
|
-
const bobBarRead =
|
|
426
|
+
const bobBarRead = await RecordsRead.create({
|
|
436
427
|
filter: {
|
|
437
428
|
recordId: bobAnyoneAuthorizedFoo.message.recordId
|
|
438
429
|
},
|
|
439
430
|
signer: Jws.createSigner(alice)
|
|
440
431
|
});
|
|
441
|
-
const bobFooReadReply =
|
|
432
|
+
const bobFooReadReply = await dwn.processMessage(alice.did, bobBarRead.message);
|
|
442
433
|
expect(bobFooReadReply.status.code).toBe(200);
|
|
443
434
|
expect(bobFooReadReply.entry.data).toBeDefined();
|
|
444
|
-
const dataFromBobFooRead =
|
|
435
|
+
const dataFromBobFooRead = await DataStream.toBytes(bobFooReadReply.entry.data);
|
|
445
436
|
expect(dataFromBobFooRead).toEqual(bobFooNewBytes);
|
|
446
437
|
// 5. Verify that Bob cannot update Carol's `foo`.
|
|
447
|
-
const bobUnauthorizedBarUpdate =
|
|
438
|
+
const bobUnauthorizedBarUpdate = await RecordsWrite.createFrom({
|
|
448
439
|
recordsWriteMessage: carolAnyoneAuthorizedFoo.message,
|
|
449
440
|
data: bobFooNewBytes,
|
|
450
441
|
signer: Jws.createSigner(bob)
|
|
451
442
|
});
|
|
452
|
-
const bobUnauthorizedFooUpdateReply =
|
|
443
|
+
const bobUnauthorizedFooUpdateReply = await dwn.processMessage(alice.did, bobUnauthorizedBarUpdate.message, { dataStream: DataStream.fromBytes(bobFooNewBytes) });
|
|
453
444
|
expect(bobUnauthorizedFooUpdateReply.status.code).toBe(401);
|
|
454
445
|
expect(bobUnauthorizedFooUpdateReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
455
|
-
})
|
|
456
|
-
it('should fail an update to an non-existent record', () =>
|
|
446
|
+
});
|
|
447
|
+
it('should fail an update to an non-existent record', async () => {
|
|
457
448
|
// Scenario:
|
|
458
449
|
// 1. Alice installs a protocol with "author of an anyone-authorized create can update" rules.
|
|
459
450
|
// 2. Bob constructs an anyone-authorized `foo` but never sent it to the DWN.
|
|
460
451
|
// 3. Verify that Bob cannot update a `foo` that does not exist in the DWN.
|
|
461
|
-
const alice =
|
|
462
|
-
const bob =
|
|
452
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
453
|
+
const bob = await TestDataGenerator.generateDidKeyPersona();
|
|
463
454
|
// 1. Alice installs a protocol with "author of an anyone-authorized create can update" rule.
|
|
464
455
|
const protocolDefinition = {
|
|
465
456
|
protocol: 'foo',
|
|
@@ -478,15 +469,15 @@ export function testProtocolUpdateAction() {
|
|
|
478
469
|
}
|
|
479
470
|
}
|
|
480
471
|
};
|
|
481
|
-
const protocolsConfig =
|
|
472
|
+
const protocolsConfig = await ProtocolsConfigure.create({
|
|
482
473
|
definition: protocolDefinition,
|
|
483
474
|
signer: Jws.createSigner(alice)
|
|
484
475
|
});
|
|
485
|
-
const protocolsConfigureReply =
|
|
476
|
+
const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfig.message);
|
|
486
477
|
expect(protocolsConfigureReply.status.code).toBe(202);
|
|
487
478
|
// 2. Bob constructs an anyone-authorized `foo` but never sent it to the DWN.
|
|
488
479
|
const bobFooBytes = TestDataGenerator.randomBytes(100);
|
|
489
|
-
const bobAnyoneAuthorizedFoo =
|
|
480
|
+
const bobAnyoneAuthorizedFoo = await RecordsWrite.create({
|
|
490
481
|
signer: Jws.createSigner(bob),
|
|
491
482
|
protocol: protocolDefinition.protocol,
|
|
492
483
|
protocolPath: 'foo',
|
|
@@ -496,16 +487,16 @@ export function testProtocolUpdateAction() {
|
|
|
496
487
|
});
|
|
497
488
|
// 3. Verify that Bob cannot update a `foo` that does not exist in the DWN.
|
|
498
489
|
const bobFooNewBytes = TestDataGenerator.randomBytes(100);
|
|
499
|
-
const bobAuthorizedFooUpdate =
|
|
490
|
+
const bobAuthorizedFooUpdate = await RecordsWrite.createFrom({
|
|
500
491
|
recordsWriteMessage: bobAnyoneAuthorizedFoo.message,
|
|
501
492
|
data: bobFooNewBytes,
|
|
502
493
|
signer: Jws.createSigner(bob)
|
|
503
494
|
});
|
|
504
|
-
const bobAuthorizedFooUpdateReply =
|
|
495
|
+
const bobAuthorizedFooUpdateReply = await dwn.processMessage(alice.did, bobAuthorizedFooUpdate.message, { dataStream: DataStream.fromBytes(bobFooNewBytes) });
|
|
505
496
|
expect(bobAuthorizedFooUpdateReply.status.code).toBe(401);
|
|
506
497
|
expect(bobAuthorizedFooUpdateReply.status.detail).toContain(DwnErrorCode.ProtocolAuthorizationActionNotAllowed);
|
|
507
|
-
})
|
|
508
|
-
it('should not allow creation of a protocol definition with action rule containing `update` without `create`', () =>
|
|
498
|
+
});
|
|
499
|
+
it('should not allow creation of a protocol definition with action rule containing `update` without `create`', async () => {
|
|
509
500
|
const protocolDefinition = {
|
|
510
501
|
protocol: 'foo',
|
|
511
502
|
published: true,
|
|
@@ -523,14 +514,14 @@ export function testProtocolUpdateAction() {
|
|
|
523
514
|
}
|
|
524
515
|
}
|
|
525
516
|
};
|
|
526
|
-
const alice =
|
|
517
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
527
518
|
const protocolsConfigureCreatePromise = ProtocolsConfigure.create({
|
|
528
519
|
definition: protocolDefinition,
|
|
529
520
|
signer: Jws.createSigner(alice)
|
|
530
521
|
});
|
|
531
|
-
|
|
532
|
-
})
|
|
533
|
-
it('should reject ProtocolsConfigure with action rule containing `update` action without `create` during processing', () =>
|
|
522
|
+
await expect(protocolsConfigureCreatePromise).rejects.toThrow(DwnErrorCode.ProtocolsConfigureInvalidActionUpdateWithoutCreate);
|
|
523
|
+
});
|
|
524
|
+
it('should reject ProtocolsConfigure with action rule containing `update` action without `create` during processing', async () => {
|
|
534
525
|
const protocolDefinition = {
|
|
535
526
|
protocol: 'http://foo',
|
|
536
527
|
published: true,
|
|
@@ -555,16 +546,16 @@ export function testProtocolUpdateAction() {
|
|
|
555
546
|
messageTimestamp: Time.getCurrentTimestamp(),
|
|
556
547
|
definition: protocolDefinition
|
|
557
548
|
};
|
|
558
|
-
const alice =
|
|
559
|
-
const authorization =
|
|
549
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
550
|
+
const authorization = await Message.createAuthorization({
|
|
560
551
|
descriptor,
|
|
561
552
|
signer: Jws.createSigner(alice)
|
|
562
553
|
});
|
|
563
554
|
const protocolsConfigureMessage = { descriptor, authorization };
|
|
564
|
-
const protocolsConfigureReply =
|
|
555
|
+
const protocolsConfigureReply = await dwn.processMessage(alice.did, protocolsConfigureMessage);
|
|
565
556
|
expect(protocolsConfigureReply.status.code).toBe(400);
|
|
566
557
|
expect(protocolsConfigureReply.status.detail).toContain(DwnErrorCode.ProtocolsConfigureInvalidActionUpdateWithoutCreate);
|
|
567
|
-
})
|
|
558
|
+
});
|
|
568
559
|
});
|
|
569
560
|
}
|
|
570
561
|
//# sourceMappingURL=protocol-update-action.spec.js.map
|