@enbox/dwn-sdk-js 0.0.1 → 0.0.3
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/README.md +52 -301
- package/dist/bundles/dwn.js +19 -21
- package/dist/esm/generated/precompiled-validators.js +2764 -1773
- package/dist/esm/generated/precompiled-validators.js.map +1 -1
- package/dist/esm/src/core/dwn-error.js +27 -3
- package/dist/esm/src/core/dwn-error.js.map +1 -1
- package/dist/esm/src/core/message.js.map +1 -1
- package/dist/esm/src/core/messages-grant-authorization.js +17 -6
- package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
- package/dist/esm/src/core/protocol-authorization.js +245 -69
- package/dist/esm/src/core/protocol-authorization.js.map +1 -1
- package/dist/esm/src/core/resumable-task-manager.js +4 -4
- package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
- package/dist/esm/src/dwn.js +10 -8
- package/dist/esm/src/dwn.js.map +1 -1
- package/dist/esm/src/enums/dwn-interface-method.js +4 -2
- package/dist/esm/src/enums/dwn-interface-method.js.map +1 -1
- package/dist/esm/src/event-stream/event-emitter-stream.js.map +1 -0
- package/dist/esm/src/handlers/messages-subscribe.js +1 -1
- package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
- package/dist/esm/src/handlers/messages-sync.js +116 -0
- package/dist/esm/src/handlers/messages-sync.js.map +1 -0
- package/dist/esm/src/handlers/protocols-configure.js +149 -16
- package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
- package/dist/esm/src/handlers/protocols-query.js +2 -2
- package/dist/esm/src/handlers/protocols-query.js.map +1 -1
- package/dist/esm/src/handlers/records-count.js +143 -0
- package/dist/esm/src/handlers/records-count.js.map +1 -0
- package/dist/esm/src/handlers/records-query.js +4 -0
- package/dist/esm/src/handlers/records-query.js.map +1 -1
- package/dist/esm/src/handlers/records-read.js +4 -6
- package/dist/esm/src/handlers/records-read.js.map +1 -1
- package/dist/esm/src/handlers/records-write.js +17 -18
- package/dist/esm/src/handlers/records-write.js.map +1 -1
- package/dist/esm/src/index.js +9 -5
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/interfaces/messages-read.js +2 -7
- package/dist/esm/src/interfaces/messages-read.js.map +1 -1
- package/dist/esm/src/interfaces/messages-subscribe.js +1 -0
- package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
- package/dist/esm/src/interfaces/{messages-query.js → messages-sync.js} +11 -12
- package/dist/esm/src/interfaces/messages-sync.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-configure.js +153 -30
- package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
- package/dist/esm/src/interfaces/protocols-query.js +1 -0
- package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
- package/dist/esm/src/interfaces/records-count.js +91 -0
- package/dist/esm/src/interfaces/records-count.js.map +1 -0
- package/dist/esm/src/interfaces/records-read.js +15 -1
- package/dist/esm/src/interfaces/records-read.js.map +1 -1
- package/dist/esm/src/interfaces/records-write.js +64 -15
- package/dist/esm/src/interfaces/records-write.js.map +1 -1
- package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
- package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -1
- package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
- package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
- package/dist/esm/src/protocols/permission-grant.js +30 -0
- package/dist/esm/src/protocols/permission-grant.js.map +1 -1
- package/dist/esm/src/protocols/permission-request.js +24 -0
- package/dist/esm/src/protocols/permission-request.js.map +1 -1
- package/dist/esm/src/protocols/permissions.js +1 -1
- package/dist/esm/src/protocols/permissions.js.map +1 -1
- package/dist/esm/src/schema-validator.js +0 -1
- package/dist/esm/src/schema-validator.js.map +1 -1
- package/dist/esm/src/smt/smt-store-level.js +125 -0
- package/dist/esm/src/smt/smt-store-level.js.map +1 -0
- package/dist/esm/src/smt/smt-store-memory.js +67 -0
- package/dist/esm/src/smt/smt-store-memory.js.map +1 -0
- package/dist/esm/src/smt/smt-utils.js +146 -0
- package/dist/esm/src/smt/smt-utils.js.map +1 -0
- package/dist/esm/src/smt/sparse-merkle-tree.js +622 -0
- package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -0
- package/dist/esm/src/state-index/state-index-level.js +228 -0
- package/dist/esm/src/state-index/state-index-level.js.map +1 -0
- package/dist/esm/src/store/data-store-level.js +6 -6
- package/dist/esm/src/store/data-store-level.js.map +1 -1
- package/dist/esm/src/store/index-level.js +375 -17
- package/dist/esm/src/store/index-level.js.map +1 -1
- package/dist/esm/src/store/message-store-level.js +56 -0
- package/dist/esm/src/store/message-store-level.js.map +1 -1
- package/dist/esm/src/store/storage-controller.js +19 -16
- package/dist/esm/src/store/storage-controller.js.map +1 -1
- package/dist/esm/src/types/encryption-types.js +2 -0
- package/dist/esm/src/types/encryption-types.js.map +1 -0
- package/dist/esm/src/types/message-types.js.map +1 -1
- package/dist/esm/src/types/protocols-types.js +0 -2
- package/dist/esm/src/types/protocols-types.js.map +1 -1
- package/dist/esm/src/types/records-types.js +2 -0
- package/dist/esm/src/types/records-types.js.map +1 -1
- package/dist/esm/src/types/smt-types.js +5 -0
- package/dist/esm/src/types/smt-types.js.map +1 -0
- package/dist/esm/src/types/state-index.js +2 -0
- package/dist/esm/src/types/state-index.js.map +1 -0
- package/dist/esm/src/utils/cid.js +2 -1
- package/dist/esm/src/utils/cid.js.map +1 -1
- package/dist/esm/src/utils/data-stream.js +84 -29
- package/dist/esm/src/utils/data-stream.js.map +1 -1
- package/dist/esm/src/utils/encryption.js +22 -31
- package/dist/esm/src/utils/encryption.js.map +1 -1
- package/dist/esm/src/utils/hd-key.js +3 -3
- package/dist/esm/src/utils/hd-key.js.map +1 -1
- package/dist/esm/src/utils/jws.js +4 -4
- package/dist/esm/src/utils/jws.js.map +1 -1
- package/dist/esm/src/utils/private-key-signer.js +4 -3
- package/dist/esm/src/utils/private-key-signer.js.map +1 -1
- package/dist/esm/src/utils/protocols.js +82 -9
- package/dist/esm/src/utils/protocols.js.map +1 -1
- package/dist/esm/src/utils/records.js +82 -26
- package/dist/esm/src/utils/records.js.map +1 -1
- package/dist/esm/src/utils/secp256k1.js +4 -3
- package/dist/esm/src/utils/secp256k1.js.map +1 -1
- package/dist/esm/src/utils/secp256r1.js +3 -2
- package/dist/esm/src/utils/secp256r1.js.map +1 -1
- package/dist/esm/src/utils/time.js +1 -1
- package/dist/esm/src/utils/url.js +1 -1
- package/dist/esm/src/utils/url.js.map +1 -1
- package/dist/esm/tests/core/auth.spec.js +2 -2
- package/dist/esm/tests/core/auth.spec.js.map +1 -1
- package/dist/esm/tests/core/message-reply.spec.js +3 -3
- package/dist/esm/tests/core/message-reply.spec.js.map +1 -1
- package/dist/esm/tests/core/message.spec.js +13 -13
- package/dist/esm/tests/core/message.spec.js.map +1 -1
- package/dist/esm/tests/core/protocol-authorization.spec.js +3 -3
- package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
- package/dist/esm/tests/dwn.spec.js +27 -37
- package/dist/esm/tests/dwn.spec.js.map +1 -1
- package/dist/esm/tests/{event-log → event-stream}/event-emitter-stream.spec.js +14 -15
- package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +1 -0
- package/dist/esm/tests/{event-log → event-stream}/event-stream.spec.js +13 -15
- package/dist/esm/tests/event-stream/event-stream.spec.js.map +1 -0
- package/dist/esm/tests/features/author-delegated-grant.spec.js +281 -135
- package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-delegated-grant.spec.js +57 -59
- package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-signature.spec.js +32 -34
- package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
- package/dist/esm/tests/features/permissions.spec.js +73 -95
- package/dist/esm/tests/features/permissions.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-composition.spec.js +1645 -0
- package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -0
- package/dist/esm/tests/features/protocol-create-action.spec.js +25 -27
- package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-delete-action.spec.js +42 -44
- package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-update-action.spec.js +53 -55
- package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
- package/dist/esm/tests/features/records-prune.spec.js +126 -100
- package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
- package/dist/esm/tests/features/records-tags.spec.js +272 -272
- package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
- package/dist/esm/tests/features/resumable-tasks.spec.js +35 -37
- package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-read.spec.js +112 -112
- package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-subscribe.spec.js +78 -76
- package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-sync.spec.js +528 -0
- package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -0
- package/dist/esm/tests/handlers/protocols-configure.spec.js +545 -152
- package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/handlers/protocols-query.spec.js +70 -72
- package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-count.spec.js +313 -0
- package/dist/esm/tests/handlers/records-count.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-delete.spec.js +106 -109
- package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-query.spec.js +863 -463
- package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-read.spec.js +439 -209
- package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-subscribe.spec.js +292 -97
- package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-write.spec.js +481 -483
- package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/messages-get.spec.js +31 -11
- package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js +5 -5
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-configure.spec.js +64 -134
- package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-query.spec.js +4 -6
- package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-delete.spec.js +3 -5
- package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-query.spec.js +9 -11
- package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-read.spec.js +76 -7
- package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-subscribe.spec.js +7 -9
- package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-write.spec.js +244 -48
- package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
- package/dist/esm/tests/jose/jws/general.spec.js +15 -18
- package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permission-grant.spec.js +114 -0
- package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -0
- package/dist/esm/tests/protocols/permission-request.spec.js +43 -7
- package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permissions.spec.js +9 -11
- package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/aggregator.spec.js +90 -92
- package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/deleted-record.spec.js +17 -19
- package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +27 -29
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/nested-roles.spec.js +37 -39
- package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/subscriptions.spec.js +163 -163
- package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
- package/dist/esm/tests/smt/smt-store-level.spec.js +143 -0
- package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -0
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +741 -0
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -0
- package/dist/esm/tests/state-index/state-index-level.spec.js +254 -0
- package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -0
- package/dist/esm/tests/store/blockstore-level.spec.js +136 -0
- package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -0
- package/dist/esm/tests/store/blockstore-mock.spec.js +29 -28
- package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
- package/dist/esm/tests/store/data-store-level.spec.js +23 -25
- package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/index-level.spec.js +544 -194
- package/dist/esm/tests/store/index-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store-level.spec.js +4 -4
- package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store.spec.js +147 -73
- package/dist/esm/tests/store/message-store.spec.js.map +1 -1
- package/dist/esm/tests/store-dependent-tests.spec.js +1 -0
- package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -1
- package/dist/esm/tests/test-stores.js +5 -5
- package/dist/esm/tests/test-stores.js.map +1 -1
- package/dist/esm/tests/test-suite.js +9 -8
- package/dist/esm/tests/test-suite.js.map +1 -1
- package/dist/esm/tests/utils/cid.spec.js +8 -11
- package/dist/esm/tests/utils/cid.spec.js.map +1 -1
- package/dist/esm/tests/utils/data-stream.spec.js +167 -13
- package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
- package/dist/esm/tests/utils/encryption-callbacks.spec.js +233 -0
- package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -0
- package/dist/esm/tests/utils/encryption.spec.js +34 -85
- package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
- package/dist/esm/tests/utils/filters.spec.js +67 -69
- package/dist/esm/tests/utils/filters.spec.js.map +1 -1
- package/dist/esm/tests/utils/hd-key.spec.js +3 -3
- package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
- package/dist/esm/tests/utils/jws.spec.js +54 -3
- package/dist/esm/tests/utils/jws.spec.js.map +1 -1
- package/dist/esm/tests/utils/memory-cache.spec.js +6 -9
- package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
- package/dist/esm/tests/utils/messages.spec.js +63 -29
- package/dist/esm/tests/utils/messages.spec.js.map +1 -1
- package/dist/esm/tests/utils/object.spec.js +3 -3
- package/dist/esm/tests/utils/object.spec.js.map +1 -1
- package/dist/esm/tests/utils/poller.js +1 -1
- package/dist/esm/tests/utils/poller.js.map +1 -1
- package/dist/esm/tests/utils/private-key-signer.spec.js +6 -6
- package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
- package/dist/esm/tests/utils/records.spec.js +37 -5
- package/dist/esm/tests/utils/records.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256k1.spec.js +7 -7
- package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256r1.spec.js +7 -7
- package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
- package/dist/esm/tests/utils/test-data-generator.js +47 -28
- package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
- package/dist/esm/tests/utils/time.spec.js +7 -7
- package/dist/esm/tests/utils/time.spec.js.map +1 -1
- package/dist/esm/tests/utils/url.spec.js +25 -27
- package/dist/esm/tests/utils/url.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js +4 -4
- 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 +15 -3
- 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 -8
- 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 +8 -18
- 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 +3 -3
- 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 +9 -9
- 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 +106 -0
- package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +18 -18
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
- package/dist/esm/tests/vectors/protocol-definitions/email.json +1 -1
- package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +2 -4
- package/dist/esm/tests/vectors/protocol-definitions/slack.json +2 -6
- package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +2 -6
- package/dist/types/generated/precompiled-validators.d.ts +82 -64
- package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
- package/dist/types/src/core/dwn-error.d.ts +27 -3
- package/dist/types/src/core/dwn-error.d.ts.map +1 -1
- package/dist/types/src/core/message-reply.d.ts +1 -1
- package/dist/types/src/core/message.d.ts +3 -3
- package/dist/types/src/core/message.d.ts.map +1 -1
- package/dist/types/src/core/messages-grant-authorization.d.ts +4 -4
- package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/protocol-authorization.d.ts +43 -2
- package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
- package/dist/types/src/core/records-grant-authorization.d.ts +2 -2
- package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/resumable-task-manager.d.ts +1 -0
- package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -1
- package/dist/types/src/dwn.d.ts +8 -8
- package/dist/types/src/dwn.d.ts.map +1 -1
- package/dist/types/src/enums/dwn-interface-method.d.ts +5 -3
- package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -1
- package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-sync.d.ts +21 -0
- package/dist/types/src/handlers/messages-sync.d.ts.map +1 -0
- package/dist/types/src/handlers/protocols-configure.d.ts +24 -4
- package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
- package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
- package/dist/types/src/handlers/records-count.d.ts +43 -0
- package/dist/types/src/handlers/records-count.d.ts.map +1 -0
- package/dist/types/src/handlers/records-query.d.ts.map +1 -1
- package/dist/types/src/handlers/records-read.d.ts.map +1 -1
- package/dist/types/src/handlers/records-write.d.ts +5 -5
- package/dist/types/src/handlers/records-write.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +72 -37
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-read.d.ts +2 -2
- package/dist/types/src/interfaces/messages-read.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-subscribe.d.ts +2 -2
- package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-sync.d.ts +16 -0
- package/dist/types/src/interfaces/messages-sync.d.ts.map +1 -0
- package/dist/types/src/interfaces/protocols-configure.d.ts +22 -2
- package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
- package/dist/types/src/interfaces/protocols-query.d.ts +2 -2
- package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-count.d.ts +27 -0
- package/dist/types/src/interfaces/records-count.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-delete.d.ts +2 -2
- package/dist/types/src/interfaces/records-delete.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-query.d.ts +2 -2
- package/dist/types/src/interfaces/records-query.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-read.d.ts +4 -2
- package/dist/types/src/interfaces/records-read.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-subscribe.d.ts +2 -2
- package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-write.d.ts +37 -15
- package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
- package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -1
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +5 -1
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -1
- package/dist/types/src/jose/jws/general/builder.d.ts +3 -3
- package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -1
- package/dist/types/src/protocols/permission-grant.d.ts +11 -0
- package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
- package/dist/types/src/protocols/permission-request.d.ts +11 -0
- package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
- package/dist/types/src/protocols/permissions.d.ts +4 -4
- package/dist/types/src/protocols/permissions.d.ts.map +1 -1
- package/dist/types/src/schema-validator.d.ts +1 -1
- package/dist/types/src/schema-validator.d.ts.map +1 -1
- package/dist/types/src/smt/smt-store-level.d.ts +32 -0
- package/dist/types/src/smt/smt-store-level.d.ts.map +1 -0
- package/dist/types/src/smt/smt-store-memory.d.ts +22 -0
- package/dist/types/src/smt/smt-store-memory.d.ts.map +1 -0
- package/dist/types/src/smt/smt-utils.d.ts +58 -0
- package/dist/types/src/smt/smt-utils.d.ts.map +1 -0
- package/dist/types/src/smt/sparse-merkle-tree.d.ts +124 -0
- package/dist/types/src/smt/sparse-merkle-tree.d.ts.map +1 -0
- package/dist/types/src/state-index/state-index-level.d.ts +83 -0
- package/dist/types/src/state-index/state-index-level.d.ts.map +1 -0
- package/dist/types/src/store/data-store-level.d.ts +1 -2
- package/dist/types/src/store/data-store-level.d.ts.map +1 -1
- package/dist/types/src/store/index-level.d.ts +98 -2
- package/dist/types/src/store/index-level.d.ts.map +1 -1
- package/dist/types/src/store/level-wrapper.d.ts.map +1 -1
- package/dist/types/src/store/message-store-level.d.ts +5 -0
- package/dist/types/src/store/message-store-level.d.ts.map +1 -1
- package/dist/types/src/store/storage-controller.d.ts +7 -7
- package/dist/types/src/store/storage-controller.d.ts.map +1 -1
- package/dist/types/src/types/data-store.d.ts +2 -3
- package/dist/types/src/types/data-store.d.ts.map +1 -1
- package/dist/types/src/types/encryption-types.d.ts +48 -0
- package/dist/types/src/types/encryption-types.d.ts.map +1 -0
- package/dist/types/src/types/jose-types.d.ts +9 -40
- package/dist/types/src/types/jose-types.d.ts.map +1 -1
- package/dist/types/src/types/message-store.d.ts +5 -0
- package/dist/types/src/types/message-store.d.ts.map +1 -1
- package/dist/types/src/types/message-types.d.ts +19 -0
- package/dist/types/src/types/message-types.d.ts.map +1 -1
- package/dist/types/src/types/messages-types.d.ts +16 -11
- package/dist/types/src/types/messages-types.d.ts.map +1 -1
- package/dist/types/src/types/method-handler.d.ts +1 -2
- package/dist/types/src/types/method-handler.d.ts.map +1 -1
- package/dist/types/src/types/permission-types.d.ts +2 -2
- package/dist/types/src/types/permission-types.d.ts.map +1 -1
- package/dist/types/src/types/protocols-types.d.ts +49 -5
- package/dist/types/src/types/protocols-types.d.ts.map +1 -1
- package/dist/types/src/types/records-types.d.ts +23 -7
- package/dist/types/src/types/records-types.d.ts.map +1 -1
- package/dist/types/src/types/signer.d.ts +1 -1
- package/dist/types/src/types/signer.d.ts.map +1 -1
- package/dist/types/src/types/smt-types.d.ts +81 -0
- package/dist/types/src/types/smt-types.d.ts.map +1 -0
- package/dist/types/src/types/state-index.d.ts +90 -0
- package/dist/types/src/types/state-index.d.ts.map +1 -0
- package/dist/types/src/utils/cid.d.ts +1 -2
- package/dist/types/src/utils/cid.d.ts.map +1 -1
- package/dist/types/src/utils/data-stream.d.ts +14 -7
- package/dist/types/src/utils/data-stream.d.ts.map +1 -1
- package/dist/types/src/utils/encryption.d.ts +2 -3
- package/dist/types/src/utils/encryption.d.ts.map +1 -1
- package/dist/types/src/utils/hd-key.d.ts +4 -4
- package/dist/types/src/utils/hd-key.d.ts.map +1 -1
- package/dist/types/src/utils/jws.d.ts +7 -7
- package/dist/types/src/utils/jws.d.ts.map +1 -1
- package/dist/types/src/utils/private-key-signer.d.ts +4 -4
- package/dist/types/src/utils/private-key-signer.d.ts.map +1 -1
- package/dist/types/src/utils/protocols.d.ts +46 -3
- package/dist/types/src/utils/protocols.d.ts.map +1 -1
- package/dist/types/src/utils/records.d.ts +33 -6
- package/dist/types/src/utils/records.d.ts.map +1 -1
- package/dist/types/src/utils/secp256k1.d.ts +11 -11
- package/dist/types/src/utils/secp256k1.d.ts.map +1 -1
- package/dist/types/src/utils/secp256r1.d.ts +8 -8
- package/dist/types/src/utils/secp256r1.d.ts.map +1 -1
- package/dist/types/src/utils/time.d.ts +1 -1
- package/dist/types/tests/dwn.spec.d.ts.map +1 -1
- package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
- package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
- package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
- package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-composition.spec.d.ts +5 -0
- package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -0
- package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
- package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-sync.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-count.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
- package/dist/types/tests/protocols/permission-grant.spec.d.ts +2 -0
- package/dist/types/tests/protocols/permission-grant.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
- package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -1
- package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -1
- package/dist/types/tests/smt/smt-store-level.spec.d.ts +2 -0
- package/dist/types/tests/smt/smt-store-level.spec.d.ts.map +1 -0
- package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts +2 -0
- package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts.map +1 -0
- package/dist/types/tests/state-index/state-index-level.spec.d.ts +2 -0
- package/dist/types/tests/state-index/state-index-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/blockstore-level.spec.d.ts +2 -0
- package/dist/types/tests/store/blockstore-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
- package/dist/types/tests/test-stores.d.ts +4 -4
- package/dist/types/tests/test-stores.d.ts.map +1 -1
- package/dist/types/tests/test-suite.d.ts +2 -2
- package/dist/types/tests/test-suite.d.ts.map +1 -1
- package/dist/types/tests/utils/encryption-callbacks.spec.d.ts +2 -0
- package/dist/types/tests/utils/encryption-callbacks.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/test-data-generator.d.ts +31 -28
- package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
- package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts.map +1 -0
- package/package.json +26 -45
- package/src/core/dwn-error.ts +27 -3
- package/src/core/message-reply.ts +1 -1
- package/src/core/message.ts +5 -5
- package/src/core/messages-grant-authorization.ts +22 -8
- package/src/core/protocol-authorization.ts +345 -68
- package/src/core/records-grant-authorization.ts +2 -2
- package/src/core/resumable-task-manager.ts +4 -5
- package/src/dwn.ts +25 -20
- package/src/enums/dwn-interface-method.ts +5 -3
- package/src/handlers/messages-subscribe.ts +1 -1
- package/src/handlers/messages-sync.ts +129 -0
- package/src/handlers/protocols-configure.ts +195 -17
- package/src/handlers/protocols-query.ts +7 -5
- package/src/handlers/records-count.ts +184 -0
- package/src/handlers/records-query.ts +4 -0
- package/src/handlers/records-read.ts +4 -8
- package/src/handlers/records-write.ts +20 -21
- package/src/index.ts +74 -37
- package/src/interfaces/messages-read.ts +6 -5
- package/src/interfaces/messages-subscribe.ts +7 -6
- package/src/interfaces/messages-sync.ts +59 -0
- package/src/interfaces/protocols-configure.ts +211 -33
- package/src/interfaces/protocols-query.ts +7 -6
- package/src/interfaces/records-count.ts +106 -0
- package/src/interfaces/records-delete.ts +2 -2
- package/src/interfaces/records-query.ts +2 -2
- package/src/interfaces/records-read.ts +26 -3
- package/src/interfaces/records-subscribe.ts +2 -2
- package/src/interfaces/records-write.ts +115 -46
- package/src/jose/algorithms/signing/ed25519.ts +13 -12
- package/src/jose/algorithms/signing/signature-algorithms.ts +6 -1
- package/src/jose/jws/general/builder.ts +3 -3
- package/src/jose/jws/general/verifier.ts +3 -3
- package/src/protocols/permission-grant.ts +51 -0
- package/src/protocols/permission-request.ts +37 -0
- package/src/protocols/permissions.ts +5 -5
- package/src/schema-validator.ts +11 -3
- package/src/smt/smt-store-level.ts +143 -0
- package/src/smt/smt-store-memory.ts +53 -0
- package/src/smt/smt-utils.ts +149 -0
- package/src/smt/sparse-merkle-tree.ts +698 -0
- package/src/state-index/state-index-level.ts +241 -0
- package/src/store/data-store-level.ts +8 -7
- package/src/store/index-level.ts +415 -19
- package/src/store/level-wrapper.ts +1 -1
- package/src/store/message-store-level.ts +62 -0
- package/src/store/storage-controller.ts +21 -19
- package/src/types/data-store.ts +2 -4
- package/src/types/encryption-types.ts +52 -0
- package/src/types/jose-types.ts +10 -42
- package/src/types/message-store.ts +11 -0
- package/src/types/message-types.ts +21 -0
- package/src/types/messages-types.ts +21 -15
- package/src/types/method-handler.ts +1 -2
- package/src/types/permission-types.ts +2 -2
- package/src/types/protocols-types.ts +55 -6
- package/src/types/records-types.ts +26 -7
- package/src/types/signer.ts +1 -1
- package/src/types/smt-types.ts +95 -0
- package/src/types/state-index.ts +100 -0
- package/src/utils/cid.ts +3 -4
- package/src/utils/data-stream.ts +75 -38
- package/src/utils/encryption.ts +24 -39
- package/src/utils/hd-key.ts +6 -6
- package/src/utils/jws.ts +9 -9
- package/src/utils/private-key-signer.ts +9 -8
- package/src/utils/protocols.ts +132 -6
- package/src/utils/records.ts +118 -29
- package/src/utils/secp256k1.ts +23 -21
- package/src/utils/secp256r1.ts +17 -15
- package/src/utils/time.ts +1 -1
- package/src/utils/url.ts +1 -1
- package/dist/cjs/index.js +0 -36749
- package/dist/cjs/package.json +0 -1
- package/dist/esm/src/event-log/event-emitter-stream.js.map +0 -1
- package/dist/esm/src/event-log/event-log-level.js +0 -63
- package/dist/esm/src/event-log/event-log-level.js.map +0 -1
- package/dist/esm/src/handlers/messages-query.js +0 -71
- package/dist/esm/src/handlers/messages-query.js.map +0 -1
- package/dist/esm/src/interfaces/messages-query.js.map +0 -1
- package/dist/esm/src/types/event-log.js +0 -2
- package/dist/esm/src/types/event-log.js.map +0 -1
- package/dist/esm/tests/event-log/event-emitter-stream.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-log-level.spec.js +0 -44
- package/dist/esm/tests/event-log/event-log-level.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-log.spec.js +0 -236
- package/dist/esm/tests/event-log/event-log.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-stream.spec.js.map +0 -1
- package/dist/esm/tests/handlers/messages-query.spec.js +0 -349
- package/dist/esm/tests/handlers/messages-query.spec.js.map +0 -1
- package/dist/esm/tests/interfaces/messagess-query.spec.js +0 -127
- package/dist/esm/tests/interfaces/messagess-query.spec.js.map +0 -1
- package/dist/esm/tests/scenarios/messages-query.spec.js +0 -395
- package/dist/esm/tests/scenarios/messages-query.spec.js.map +0 -1
- package/dist/types/src/event-log/event-emitter-stream.d.ts.map +0 -1
- package/dist/types/src/event-log/event-log-level.d.ts +0 -35
- package/dist/types/src/event-log/event-log-level.d.ts.map +0 -1
- package/dist/types/src/handlers/messages-query.d.ts +0 -17
- package/dist/types/src/handlers/messages-query.d.ts.map +0 -1
- package/dist/types/src/interfaces/messages-query.d.ts +0 -16
- package/dist/types/src/interfaces/messages-query.d.ts.map +0 -1
- package/dist/types/src/types/event-log.d.ts +0 -52
- package/dist/types/src/types/event-log.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-log-level.spec.d.ts +0 -2
- package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-log.spec.d.ts +0 -2
- package/dist/types/tests/event-log/event-log.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-stream.spec.d.ts.map +0 -1
- package/dist/types/tests/handlers/messages-query.spec.d.ts +0 -2
- package/dist/types/tests/handlers/messages-query.spec.d.ts.map +0 -1
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts +0 -2
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts.map +0 -1
- package/dist/types/tests/scenarios/messages-query.spec.d.ts +0 -2
- package/dist/types/tests/scenarios/messages-query.spec.d.ts.map +0 -1
- package/src/event-log/event-log-level.ts +0 -72
- package/src/handlers/messages-query.ts +0 -67
- package/src/interfaces/messages-query.ts +0 -60
- package/src/types/event-log.ts +0 -52
- /package/dist/esm/src/{event-log → event-stream}/event-emitter-stream.js +0 -0
- /package/dist/types/src/{event-log → event-stream}/event-emitter-stream.d.ts +0 -0
- /package/dist/types/tests/{event-log → event-stream}/event-emitter-stream.spec.d.ts +0 -0
- /package/dist/types/tests/{event-log → event-stream}/event-stream.spec.d.ts +0 -0
- /package/src/{event-log → event-stream}/event-emitter-stream.ts +0 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import type { DidResolver } from '@enbox/dids';
|
|
2
|
+
import type { Filter } from '../types/query-types.js';
|
|
3
|
+
import type { MessageStore } from '../types//message-store.js';
|
|
4
|
+
import type { MethodHandler } from '../types/method-handler.js';
|
|
5
|
+
import type { RecordsCountMessage, RecordsCountReply } from '../types/records-types.js';
|
|
6
|
+
|
|
7
|
+
import { authenticate } from '../core/auth.js';
|
|
8
|
+
import { Message } from '../core/message.js';
|
|
9
|
+
import { messageReplyFromError } from '../core/message-reply.js';
|
|
10
|
+
import { ProtocolAuthorization } from '../core/protocol-authorization.js';
|
|
11
|
+
import { Records } from '../utils/records.js';
|
|
12
|
+
import { RecordsCount } from '../interfaces/records-count.js';
|
|
13
|
+
import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
|
|
14
|
+
|
|
15
|
+
export class RecordsCountHandler implements MethodHandler {
|
|
16
|
+
|
|
17
|
+
constructor(private didResolver: DidResolver, private messageStore: MessageStore) { }
|
|
18
|
+
|
|
19
|
+
public async handle({
|
|
20
|
+
tenant,
|
|
21
|
+
message
|
|
22
|
+
}: {tenant: string, message: RecordsCountMessage}): Promise<RecordsCountReply> {
|
|
23
|
+
let recordsCount: RecordsCount;
|
|
24
|
+
try {
|
|
25
|
+
recordsCount = await RecordsCount.parse(message);
|
|
26
|
+
} catch (e) {
|
|
27
|
+
return messageReplyFromError(e, 400);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let count: number;
|
|
31
|
+
|
|
32
|
+
// if this is an anonymous count and the filter supports published records, count only published records
|
|
33
|
+
if (Records.filterIncludesPublishedRecords(recordsCount.message.descriptor.filter) && recordsCount.author === undefined) {
|
|
34
|
+
count = await this.countPublishedRecords(tenant, recordsCount);
|
|
35
|
+
} else {
|
|
36
|
+
// authentication and authorization
|
|
37
|
+
try {
|
|
38
|
+
await authenticate(message.authorization!, this.didResolver);
|
|
39
|
+
|
|
40
|
+
await RecordsCountHandler.authorizeRecordsCount(tenant, recordsCount, this.messageStore);
|
|
41
|
+
} catch (e) {
|
|
42
|
+
return messageReplyFromError(e, 401);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (recordsCount.author === tenant) {
|
|
46
|
+
count = await this.countRecordsAsOwner(tenant, recordsCount);
|
|
47
|
+
} else {
|
|
48
|
+
count = await this.countRecordsAsNonOwner(tenant, recordsCount);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return {
|
|
53
|
+
status: { code: 200, detail: 'OK' },
|
|
54
|
+
count,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Counts records as the owner of the DWN with no additional filtering.
|
|
60
|
+
*/
|
|
61
|
+
private async countRecordsAsOwner(tenant: string, recordsCount: RecordsCount): Promise<number> {
|
|
62
|
+
const { filter } = recordsCount.message.descriptor;
|
|
63
|
+
const countFilter = {
|
|
64
|
+
...Records.convertFilter(filter),
|
|
65
|
+
interface : DwnInterfaceName.Records,
|
|
66
|
+
method : DwnMethodName.Write,
|
|
67
|
+
isLatestBaseState : true
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
return this.messageStore.count(tenant, [countFilter]);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Counts records as a non-owner, applying the same filter logic as RecordsQuery.
|
|
75
|
+
*/
|
|
76
|
+
private async countRecordsAsNonOwner(tenant: string, recordsCount: RecordsCount): Promise<number> {
|
|
77
|
+
const { filter } = recordsCount.message.descriptor;
|
|
78
|
+
const filters: Filter[] = [];
|
|
79
|
+
|
|
80
|
+
if (Records.filterIncludesPublishedRecords(filter)) {
|
|
81
|
+
filters.push(RecordsCountHandler.buildPublishedRecordsFilter(recordsCount));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (Records.filterIncludesUnpublishedRecords(filter)) {
|
|
85
|
+
if (Records.shouldBuildUnpublishedAuthorFilter(filter, recordsCount.author!)) {
|
|
86
|
+
filters.push(RecordsCountHandler.buildUnpublishedRecordsByCountAuthorFilter(recordsCount));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (Records.shouldProtocolAuthorize(recordsCount.signaturePayload!)) {
|
|
90
|
+
filters.push(RecordsCountHandler.buildUnpublishedProtocolAuthorizedRecordsFilter(recordsCount));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (Records.shouldBuildUnpublishedRecipientFilter(filter, recordsCount.author!)) {
|
|
94
|
+
filters.push(RecordsCountHandler.buildUnpublishedRecordsForCountAuthorFilter(recordsCount));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return this.messageStore.count(tenant, filters);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Counts only published records.
|
|
103
|
+
*/
|
|
104
|
+
private async countPublishedRecords(tenant: string, recordsCount: RecordsCount): Promise<number> {
|
|
105
|
+
const filter = RecordsCountHandler.buildPublishedRecordsFilter(recordsCount);
|
|
106
|
+
return this.messageStore.count(tenant, [filter]);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private static buildPublishedRecordsFilter(recordsCount: RecordsCount): Filter {
|
|
110
|
+
const { filter } = recordsCount.message.descriptor;
|
|
111
|
+
return {
|
|
112
|
+
...Records.convertFilter(filter),
|
|
113
|
+
interface : DwnInterfaceName.Records,
|
|
114
|
+
method : DwnMethodName.Write,
|
|
115
|
+
published : true,
|
|
116
|
+
isLatestBaseState : true
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Creates a filter for unpublished records that are intended for the count author (where `recipient` is the author).
|
|
122
|
+
*/
|
|
123
|
+
private static buildUnpublishedRecordsForCountAuthorFilter(recordsCount: RecordsCount): Filter {
|
|
124
|
+
const { filter } = recordsCount.message.descriptor;
|
|
125
|
+
return {
|
|
126
|
+
...Records.convertFilter(filter),
|
|
127
|
+
interface : DwnInterfaceName.Records,
|
|
128
|
+
method : DwnMethodName.Write,
|
|
129
|
+
recipient : recordsCount.author!,
|
|
130
|
+
isLatestBaseState : true,
|
|
131
|
+
published : false
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Creates a filter for unpublished records that are within the specified protocol.
|
|
137
|
+
*/
|
|
138
|
+
private static buildUnpublishedProtocolAuthorizedRecordsFilter(recordsCount: RecordsCount): Filter {
|
|
139
|
+
const { filter } = recordsCount.message.descriptor;
|
|
140
|
+
return {
|
|
141
|
+
...Records.convertFilter(filter),
|
|
142
|
+
interface : DwnInterfaceName.Records,
|
|
143
|
+
method : DwnMethodName.Write,
|
|
144
|
+
isLatestBaseState : true,
|
|
145
|
+
published : false
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Creates a filter for only unpublished records where the author is the same as the count author.
|
|
151
|
+
*/
|
|
152
|
+
private static buildUnpublishedRecordsByCountAuthorFilter(recordsCount: RecordsCount): Filter {
|
|
153
|
+
const { filter } = recordsCount.message.descriptor;
|
|
154
|
+
return {
|
|
155
|
+
...Records.convertFilter(filter),
|
|
156
|
+
author : recordsCount.author!,
|
|
157
|
+
interface : DwnInterfaceName.Records,
|
|
158
|
+
method : DwnMethodName.Write,
|
|
159
|
+
isLatestBaseState : true,
|
|
160
|
+
published : false
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* @param messageStore Used to check if the grant has been revoked.
|
|
166
|
+
*/
|
|
167
|
+
private static async authorizeRecordsCount(
|
|
168
|
+
tenant: string,
|
|
169
|
+
recordsCount: RecordsCount,
|
|
170
|
+
messageStore: MessageStore
|
|
171
|
+
): Promise<void> {
|
|
172
|
+
|
|
173
|
+
if (Message.isSignedByAuthorDelegate(recordsCount.message)) {
|
|
174
|
+
await recordsCount.authorizeDelegate(messageStore);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// NOTE: not all RecordsCount messages require protocol authorization even if the filter includes protocol-related fields,
|
|
178
|
+
// this is because we dynamically filter out records that the caller is not authorized to see.
|
|
179
|
+
// Currently only run protocol authorization if message deliberately invokes a protocol role.
|
|
180
|
+
if (Records.shouldProtocolAuthorize(recordsCount.signaturePayload!)) {
|
|
181
|
+
await ProtocolAuthorization.authorizeQueryOrSubscribe(tenant, recordsCount, messageStore);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
@@ -97,6 +97,10 @@ export class RecordsQueryHandler implements MethodHandler {
|
|
|
97
97
|
return { datePublished: SortDirection.Ascending };
|
|
98
98
|
case DateSort.PublishedDescending:
|
|
99
99
|
return { datePublished: SortDirection.Descending };
|
|
100
|
+
case DateSort.UpdatedAscending:
|
|
101
|
+
return { messageTimestamp: SortDirection.Ascending };
|
|
102
|
+
case DateSort.UpdatedDescending:
|
|
103
|
+
return { messageTimestamp: SortDirection.Descending };
|
|
100
104
|
default:
|
|
101
105
|
return { dateCreated: SortDirection.Ascending };
|
|
102
106
|
}
|
|
@@ -44,29 +44,25 @@ export class RecordsReadHandler implements MethodHandler {
|
|
|
44
44
|
return messageReplyFromError(e, 401);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
// get the latest active
|
|
47
|
+
// get the latest active message matching the supplied filter, sorted and limited to 1 result
|
|
48
48
|
const query: Filter = {
|
|
49
49
|
// NOTE: we don't filter by `method` so that we get both RecordsWrite and RecordsDelete messages
|
|
50
50
|
interface : DwnInterfaceName.Records,
|
|
51
51
|
isLatestBaseState : true,
|
|
52
52
|
...Records.convertFilter(message.descriptor.filter)
|
|
53
53
|
};
|
|
54
|
-
const
|
|
54
|
+
const messageSort = Records.convertDateSort(message.descriptor.dateSort);
|
|
55
|
+
const { messages: existingMessages } = await this.messageStore.query(tenant, [ query ], messageSort, { limit: 1 });
|
|
55
56
|
if (existingMessages.length === 0) {
|
|
56
57
|
return {
|
|
57
58
|
status: { code: 404, detail: 'Not Found' }
|
|
58
59
|
};
|
|
59
|
-
} else if (existingMessages.length > 1) {
|
|
60
|
-
return messageReplyFromError(new DwnError(
|
|
61
|
-
DwnErrorCode.RecordsReadReturnedMultiple,
|
|
62
|
-
'Multiple records exist for the RecordsRead filter'
|
|
63
|
-
), 400);
|
|
64
60
|
}
|
|
65
61
|
|
|
66
62
|
const matchedMessage = existingMessages[0];
|
|
67
63
|
|
|
68
64
|
// if the matched message is a RecordsDelete, we mark the record as not-found and return both the RecordsDelete and the initial RecordsWrite
|
|
69
|
-
// TODO: https://github.com/
|
|
65
|
+
// TODO: https://github.com/enboxorg/enbox/issues/819:
|
|
70
66
|
// Consider performing authorization checks like when records exists before returning RecordsDelete and initial RecordsWrite of a deleted record
|
|
71
67
|
if (matchedMessage.descriptor.method === DwnMethodName.Delete) {
|
|
72
68
|
const recordsDeleteMessage = matchedMessage as RecordsDeleteMessage;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { DataStore } from '../types/data-store.js';
|
|
2
2
|
import type { DidResolver } from '@enbox/dids';
|
|
3
|
-
import type { EventLog } from '../types/event-log.js';
|
|
4
3
|
import type { EventStream } from '../types/subscriptions.js';
|
|
5
4
|
import type { GenericMessageReply } from '../types/message-types.js';
|
|
6
|
-
import type { MessageStore } from '../types
|
|
5
|
+
import type { MessageStore } from '../types/message-store.js';
|
|
7
6
|
import type { MethodHandler } from '../types/method-handler.js';
|
|
7
|
+
import type { StateIndex } from '../types/state-index.js';
|
|
8
8
|
import type { RecordsQueryReplyEntry, RecordsWriteMessage } from '../types/records-types.js';
|
|
9
9
|
|
|
10
10
|
import { authenticate } from '../core/auth.js';
|
|
@@ -22,7 +22,7 @@ import { StorageController } from '../store/storage-controller.js';
|
|
|
22
22
|
import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
|
|
23
23
|
import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
|
|
24
24
|
|
|
25
|
-
type HandlerArgs = { tenant: string, message: RecordsWriteMessage, dataStream?:
|
|
25
|
+
type HandlerArgs = { tenant: string, message: RecordsWriteMessage, dataStream?: ReadableStream<Uint8Array>};
|
|
26
26
|
|
|
27
27
|
export class RecordsWriteHandler implements MethodHandler {
|
|
28
28
|
|
|
@@ -30,7 +30,7 @@ export class RecordsWriteHandler implements MethodHandler {
|
|
|
30
30
|
private didResolver: DidResolver,
|
|
31
31
|
private messageStore: MessageStore,
|
|
32
32
|
private dataStore: DataStore,
|
|
33
|
-
private
|
|
33
|
+
private stateIndex: StateIndex,
|
|
34
34
|
private eventStream?: EventStream
|
|
35
35
|
) { }
|
|
36
36
|
|
|
@@ -113,7 +113,7 @@ export class RecordsWriteHandler implements MethodHandler {
|
|
|
113
113
|
// This would allow an initial write to be written to the DB without data, but having it not queryable,
|
|
114
114
|
// because query implementation filters on `isLatestBaseState` being `true`
|
|
115
115
|
// thus preventing a user's attempt to gain authorized access to data by referencing the dataCid of a private data in their initial writes,
|
|
116
|
-
// See: https://github.com/
|
|
116
|
+
// See: https://github.com/enboxorg/enbox/issues/359 for more info
|
|
117
117
|
let isLatestBaseState = false;
|
|
118
118
|
let messageWithOptionalEncodedData = message as RecordsQueryReplyEntry;
|
|
119
119
|
|
|
@@ -134,7 +134,7 @@ export class RecordsWriteHandler implements MethodHandler {
|
|
|
134
134
|
|
|
135
135
|
const indexes = await recordsWrite.constructIndexes(isLatestBaseState);
|
|
136
136
|
await this.messageStore.put(tenant, messageWithOptionalEncodedData, indexes);
|
|
137
|
-
await this.
|
|
137
|
+
await this.stateIndex.insert(tenant, await Message.getCid(message), indexes);
|
|
138
138
|
|
|
139
139
|
// NOTE: We only emit a `RecordsWrite` when the message is the latest base state.
|
|
140
140
|
// Because we allow a `RecordsWrite` which is not the latest state to be written, but not queried, we shouldn't emit it either.
|
|
@@ -143,15 +143,14 @@ export class RecordsWriteHandler implements MethodHandler {
|
|
|
143
143
|
this.eventStream.emit(tenant, { message, initialWrite }, indexes);
|
|
144
144
|
}
|
|
145
145
|
} catch (error) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
e.code.startsWith('SchemaValidator')) {
|
|
146
|
+
if (error instanceof DwnError) {
|
|
147
|
+
if (error.code === DwnErrorCode.RecordsWriteMissingEncodedDataInPrevious ||
|
|
148
|
+
error.code === DwnErrorCode.RecordsWriteMissingDataInPrevious ||
|
|
149
|
+
error.code === DwnErrorCode.RecordsWriteNotAllowedAfterDelete ||
|
|
150
|
+
error.code === DwnErrorCode.RecordsWriteDataCidMismatch ||
|
|
151
|
+
error.code === DwnErrorCode.RecordsWriteDataSizeMismatch ||
|
|
152
|
+
error.code.startsWith('PermissionsProtocolValidate') ||
|
|
153
|
+
error.code.startsWith('SchemaValidator')) {
|
|
155
154
|
return messageReplyFromError(error, 400);
|
|
156
155
|
}
|
|
157
156
|
}
|
|
@@ -162,7 +161,7 @@ export class RecordsWriteHandler implements MethodHandler {
|
|
|
162
161
|
|
|
163
162
|
const messageReply = {
|
|
164
163
|
// In order to discern between something that was accepted as a queryable write and something that was accepted
|
|
165
|
-
// as an initial state we use separate response codes. See https://github.com/
|
|
164
|
+
// as an initial state we use separate response codes. See https://github.com/enboxorg/enbox/issues/695
|
|
166
165
|
// for more details.
|
|
167
166
|
status: (newMessageIsInitialWrite && dataStream === undefined) ?
|
|
168
167
|
{ code: 204, detail: 'No Content' } :
|
|
@@ -171,7 +170,7 @@ export class RecordsWriteHandler implements MethodHandler {
|
|
|
171
170
|
|
|
172
171
|
// delete all existing messages of the same record that are not newest, except for the initial write
|
|
173
172
|
await StorageController.deleteAllOlderMessagesButKeepInitialWrite(
|
|
174
|
-
tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.
|
|
173
|
+
tenant, existingMessages, newestMessage, this.messageStore, this.dataStore, this.stateIndex
|
|
175
174
|
);
|
|
176
175
|
|
|
177
176
|
await this.postProcessingForCoreRecordsWrite(tenant, recordsWrite);
|
|
@@ -220,7 +219,7 @@ export class RecordsWriteHandler implements MethodHandler {
|
|
|
220
219
|
*/
|
|
221
220
|
private async postProcessingForCoreRecordsWrite(tenant: string, recordsWrite: RecordsWrite): Promise<void> {
|
|
222
221
|
// If this message is a Permission revocation, we need to delete all grant-authorized messages with timestamp after revocation
|
|
223
|
-
// TODO: https://github.com/
|
|
222
|
+
// TODO: https://github.com/enboxorg/enbox/issues/716
|
|
224
223
|
// This code is a direct copy and paste from the original PermissionsRevokeHandler (no longer exists),
|
|
225
224
|
// but it appears that there was no test for it and it does not look like the code worked:
|
|
226
225
|
// - not seeing `permissionGrantId` being an index
|
|
@@ -239,7 +238,7 @@ export class RecordsWriteHandler implements MethodHandler {
|
|
|
239
238
|
const messageCid = await Message.getCid(grantAuthorizedMessage);
|
|
240
239
|
await this.messageStore.delete(tenant, messageCid);
|
|
241
240
|
}
|
|
242
|
-
this.
|
|
241
|
+
this.stateIndex.delete(tenant, grantAuthorizedMessageCidsAfterRevoke);
|
|
243
242
|
}
|
|
244
243
|
}
|
|
245
244
|
|
|
@@ -255,7 +254,7 @@ export class RecordsWriteHandler implements MethodHandler {
|
|
|
255
254
|
private async processMessageWithDataStream(
|
|
256
255
|
tenant: string,
|
|
257
256
|
message: RecordsWriteMessage,
|
|
258
|
-
dataStream:
|
|
257
|
+
dataStream: ReadableStream<Uint8Array>,
|
|
259
258
|
):Promise<RecordsQueryReplyEntry> {
|
|
260
259
|
let messageWithOptionalEncodedData: RecordsQueryReplyEntry = message;
|
|
261
260
|
|
|
@@ -303,7 +302,7 @@ export class RecordsWriteHandler implements MethodHandler {
|
|
|
303
302
|
// Since incoming message is not an initial write, and no dataStream is provided, we first check integrity against newest existing write.
|
|
304
303
|
// we preform the dataCid check in case a user attempts to gain access to data by referencing a different known dataCid,
|
|
305
304
|
// so we insure that the data is already associated with the existing newest message
|
|
306
|
-
// See: https://github.com/
|
|
305
|
+
// See: https://github.com/enboxorg/enbox/issues/359 for more info
|
|
307
306
|
RecordsWriteHandler.validateDataIntegrity(dataCid, dataSize, newestExistingWrite.descriptor.dataCid, newestExistingWrite.descriptor.dataSize);
|
|
308
307
|
|
|
309
308
|
if (dataSize <= DwnConstant.maxDataSizeAllowedToBeEncoded) {
|
package/src/index.ts
CHANGED
|
@@ -1,67 +1,104 @@
|
|
|
1
1
|
// export everything that we want to be consumable
|
|
2
2
|
export type { DwnConfig } from './dwn.js';
|
|
3
|
-
export type { EventLog } from './types/event-log.js';
|
|
4
3
|
export type { EventListener, EventStream, EventSubscription, MessageEvent, SubscriptionReply } from './types/subscriptions.js';
|
|
5
4
|
export type { AuthorizationModel, Descriptor, DelegatedGrantRecordsWriteMessage, GenericMessage, GenericMessageReply, GenericSignaturePayload, MessageSort, MessageSubscription, Pagination, QueryResultEntry, Status } from './types/message-types.js';
|
|
6
|
-
export type { MessagesFilter, MessagesReadMessage as MessagesReadMessage, MessagesReadReply as MessagesReadReply, MessagesReadReplyEntry as MessagesReadReplyEntry, MessagesReadDescriptor,
|
|
5
|
+
export type { MessagesFilter, MessagesReadMessage as MessagesReadMessage, MessagesReadReply as MessagesReadReply, MessagesReadReplyEntry as MessagesReadReplyEntry, MessagesReadDescriptor, MessagesSubscribeDescriptor, MessagesSubscribeMessage, MessagesSubscribeReply, MessageSubscriptionHandler, MessagesSubscribeMessageOptions, MessagesSyncAction, MessagesSyncDescriptor, MessagesSyncMessage, MessagesSyncReply } from './types/messages-types.js';
|
|
7
6
|
export type { GT, LT, Filter, FilterValue, KeyValues, EqualFilter, OneOfFilter, RangeFilter, RangeCriterion, PaginationCursor, QueryOptions, RangeValue, StartsWithFilter } from './types/query-types.js';
|
|
8
|
-
export type { ProtocolsConfigureDescriptor, ProtocolDefinition, ProtocolTypes, ProtocolRuleSet, ProtocolsQueryFilter, ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply, ProtocolActionRule, ProtocolPathEncryption, ProtocolsQueryDescriptor, ProtocolType } from './types/protocols-types.js';
|
|
9
|
-
export type { DataEncodedRecordsWriteMessage, EncryptedKey, EncryptionProperty, RecordsDeleteMessage, RecordsFilter, RecordsQueryMessage, RecordsQueryReply, RecordsQueryReplyEntry, RecordsReadMessage, RecordsReadReply, RecordsSubscribeDescriptor, RecordsSubscribeMessage, RecordsSubscribeReply, RecordSubscriptionHandler, RecordsWriteDescriptor, RecordsWriteTags, RecordsWriteTagValue, RecordsWriteMessage, RecordsWriteSignaturePayload, RecordsDeleteDescriptor, RecordsQueryDescriptor, RecordsReadDescriptor, RecordsSubscribeMessageOptions, RecordsWriteMessageOptions, InternalRecordsWriteMessage, RecordEvent, RecordsWriteTagsFilter } from './types/records-types.js';
|
|
7
|
+
export type { ProtocolsConfigureDescriptor, ProtocolDefinition, ProtocolTypes, ProtocolRuleSet, ProtocolsQueryFilter, ProtocolsConfigureMessage, ProtocolsQueryMessage, ProtocolsQueryReply, ProtocolActionRule, ProtocolPathEncryption, ProtocolsQueryDescriptor, ProtocolType, ProtocolUses } from './types/protocols-types.js';
|
|
8
|
+
export type { DataEncodedRecordsWriteMessage, EncryptedKey, EncryptionProperty, RecordsCountDescriptor, RecordsCountMessage, RecordsCountReply, RecordsDeleteMessage, RecordsFilter, RecordsQueryMessage, RecordsQueryReply, RecordsQueryReplyEntry, RecordsReadMessage, RecordsReadReply, RecordsSubscribeDescriptor, RecordsSubscribeMessage, RecordsSubscribeReply, RecordSubscriptionHandler, RecordsWriteDescriptor, RecordsWriteTags, RecordsWriteTagValue, RecordsWriteMessage, RecordsWriteSignaturePayload, RecordsDeleteDescriptor, RecordsQueryDescriptor, RecordsReadDescriptor, RecordsSubscribeMessageOptions, RecordsWriteMessageOptions, InternalRecordsWriteMessage, RecordEvent, RecordsWriteTagsFilter } from './types/records-types.js';
|
|
10
9
|
export type { GeneralJws, SignatureEntry } from './types/jws-types.js';
|
|
11
10
|
export { authenticate } from './core/auth.js';
|
|
12
|
-
export {
|
|
11
|
+
export { AllowAllTenantGate } from './core/tenant-gate.js';
|
|
12
|
+
export type { ActiveTenantCheckResult, TenantGate } from './core/tenant-gate.js';
|
|
13
13
|
export { Cid } from './utils/cid.js';
|
|
14
|
-
export {
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
14
|
+
export { RecordsCount } from './interfaces/records-count.js';
|
|
15
|
+
export type { RecordsCountOptions } from './interfaces/records-count.js';
|
|
16
|
+
export { RecordsQuery } from './interfaces/records-query.js';
|
|
17
|
+
export type { RecordsQueryOptions } from './interfaces/records-query.js';
|
|
18
|
+
export type { DataStore, DataStorePutResult, DataStoreGetResult } from './types/data-store.js';
|
|
19
|
+
export type { ResumableTaskStore, ManagedResumableTask } from './types/resumable-task-store.js';
|
|
17
20
|
export { DataStream } from './utils/data-stream.js';
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
21
|
+
export { HdKey, KeyDerivationScheme } from './utils/hd-key.js';
|
|
22
|
+
export type { DerivedPrivateJwk } from './utils/hd-key.js';
|
|
23
|
+
export { Dwn } from './dwn.js';
|
|
24
|
+
export type { MessageOptions } from './dwn.js';
|
|
20
25
|
export { DwnConstant } from './core/dwn-constant.js';
|
|
21
26
|
export { DwnError, DwnErrorCode } from './core/dwn-error.js';
|
|
22
27
|
export { DwnInterfaceName, DwnMethodName } from './enums/dwn-interface-method.js';
|
|
23
28
|
export { Encoder } from './utils/encoder.js';
|
|
24
|
-
export { MessagesSubscribe as MessagesSubscribe
|
|
25
|
-
export {
|
|
26
|
-
export {
|
|
29
|
+
export { MessagesSubscribe as MessagesSubscribe } from './interfaces/messages-subscribe.js';
|
|
30
|
+
export type { MessagesSubscribeOptions as MessagesSubscribeOptions } from './interfaces/messages-subscribe.js';
|
|
31
|
+
export { Encryption, EncryptionAlgorithm } from './utils/encryption.js';
|
|
32
|
+
export type { EciesEncryptionOutput, EciesEncryptionInput } from './utils/encryption.js';
|
|
33
|
+
export { RecordsWrite } from './interfaces/records-write.js';
|
|
34
|
+
export type { EncryptionInput, KeyEncryptionInput, RecordsWriteOptions, CreateFromOptions } from './interfaces/records-write.js';
|
|
27
35
|
export { executeUnlessAborted } from './utils/abort.js';
|
|
28
36
|
export { Jws } from './utils/jws.js';
|
|
29
|
-
export { KeyMaterial,
|
|
37
|
+
export type { KeyMaterial, PrivateKeyJwk, PublicKeyJwk, Jwk } from './types/jose-types.js';
|
|
30
38
|
export { Message } from './core/message.js';
|
|
31
|
-
export { MessagesRead as MessagesRead
|
|
32
|
-
export {
|
|
33
|
-
export {
|
|
34
|
-
export {
|
|
35
|
-
export {
|
|
39
|
+
export { MessagesRead as MessagesRead } from './interfaces/messages-read.js';
|
|
40
|
+
export type { MessagesReadOptions as MessagesReadOptions } from './interfaces/messages-read.js';
|
|
41
|
+
export { MessagesSync } from './interfaces/messages-sync.js';
|
|
42
|
+
export type { MessagesSyncOptions } from './interfaces/messages-sync.js';
|
|
43
|
+
export type { UnionMessageReply } from './core/message-reply.js';
|
|
44
|
+
export type { MessageStore, MessageStoreOptions } from './types/message-store.js';
|
|
45
|
+
export type { MessageInterface } from './types/message-interface.js';
|
|
36
46
|
export { PermissionGrant } from './protocols/permission-grant.js';
|
|
37
47
|
export { PermissionRequest } from './protocols/permission-request.js';
|
|
38
|
-
export { PermissionsProtocol
|
|
39
|
-
export {
|
|
40
|
-
export {
|
|
41
|
-
export {
|
|
42
|
-
export {
|
|
48
|
+
export { PermissionsProtocol } from './protocols/permissions.js';
|
|
49
|
+
export type { PermissionGrantCreateOptions, PermissionRequestCreateOptions, PermissionRevocationCreateOptions } from './protocols/permissions.js';
|
|
50
|
+
export { PrivateKeySigner } from './utils/private-key-signer.js';
|
|
51
|
+
export type { PrivateKeySignerOptions } from './utils/private-key-signer.js';
|
|
52
|
+
export { Protocols, parseCrossProtocolRef, isCrossProtocolRef, getRuleSetAtPath } from './utils/protocols.js';
|
|
53
|
+
export type { CrossProtocolRef } from './utils/protocols.js';
|
|
54
|
+
export { ProtocolsConfigure } from './interfaces/protocols-configure.js';
|
|
55
|
+
export type { ProtocolsConfigureOptions } from './interfaces/protocols-configure.js';
|
|
56
|
+
export { ProtocolsQuery } from './interfaces/protocols-query.js';
|
|
57
|
+
export type { ProtocolsQueryOptions } from './interfaces/protocols-query.js';
|
|
43
58
|
export { Records } from './utils/records.js';
|
|
44
|
-
export { RecordsDelete
|
|
45
|
-
export {
|
|
46
|
-
export {
|
|
59
|
+
export { RecordsDelete } from './interfaces/records-delete.js';
|
|
60
|
+
export type { RecordsDeleteOptions } from './interfaces/records-delete.js';
|
|
61
|
+
export { RecordsRead } from './interfaces/records-read.js';
|
|
62
|
+
export type { RecordsReadOptions } from './interfaces/records-read.js';
|
|
63
|
+
export { RecordsSubscribe } from './interfaces/records-subscribe.js';
|
|
64
|
+
export type { RecordsSubscribeOptions } from './interfaces/records-subscribe.js';
|
|
47
65
|
export { Secp256k1 } from './utils/secp256k1.js';
|
|
48
66
|
export { Secp256r1 } from './utils/secp256r1.js';
|
|
49
|
-
export {
|
|
67
|
+
export type { SupportedCurve } from './jose/algorithms/signing/signature-algorithms.js';
|
|
68
|
+
export type { MessageSigner } from './types/signer.js';
|
|
50
69
|
export { SortDirection } from './types/query-types.js';
|
|
70
|
+
export type { EncryptionKeyDeriver, KeyDecrypter } from './types/encryption-types.js';
|
|
51
71
|
export { Time } from './utils/time.js';
|
|
52
72
|
export * from './types/permission-types.js';
|
|
53
73
|
export * from './types/records-types.js';
|
|
54
74
|
|
|
55
75
|
// concrete implementations of stores and event stream
|
|
56
|
-
export { BlockstoreLevel
|
|
57
|
-
export {
|
|
58
|
-
export {
|
|
59
|
-
export {
|
|
60
|
-
export {
|
|
61
|
-
export {
|
|
62
|
-
export {
|
|
63
|
-
export {
|
|
76
|
+
export { BlockstoreLevel } from './store/blockstore-level.js';
|
|
77
|
+
export type { BlockstoreLevelConfig } from './store/blockstore-level.js';
|
|
78
|
+
export { DataStoreLevel } from './store/data-store-level.js';
|
|
79
|
+
export type { DataStoreLevelConfig } from './store/data-store-level.js';
|
|
80
|
+
export { IndexLevel } from './store/index-level.js';
|
|
81
|
+
export type { CompoundIndexDefinition, IndexLevelConfig, IndexedItem, IndexLevelOptions } from './store/index-level.js';
|
|
82
|
+
export { createLevelDatabase, LevelWrapper } from './store/level-wrapper.js';
|
|
83
|
+
export type { CreateLevelDatabaseOptions, LevelDatabase, LevelWrapperConfig, LevelWrapperBatchOperation, LevelWrapperOptions, LevelWrapperIteratorOptions } from './store/level-wrapper.js';
|
|
84
|
+
export { MessageStoreLevel } from './store/message-store-level.js';
|
|
85
|
+
export type { MessageStoreLevelConfig } from './store/message-store-level.js';
|
|
86
|
+
export { ResumableTaskStoreLevel } from './store/resumable-task-store-level.js';
|
|
87
|
+
export type { ResumableTaskStoreLevelConfig } from './store/resumable-task-store-level.js';
|
|
88
|
+
export { EventEmitterStream } from './event-stream/event-emitter-stream.js';
|
|
89
|
+
export type { EventEmitterStreamConfig } from './event-stream/event-emitter-stream.js';
|
|
90
|
+
|
|
91
|
+
// Sparse Merkle Tree and StateIndex
|
|
92
|
+
export type { StateIndex } from './types/state-index.js';
|
|
93
|
+
export { StateIndexLevel } from './state-index/state-index-level.js';
|
|
94
|
+
export type { StateIndexLevelConfig } from './state-index/state-index-level.js';
|
|
95
|
+
export { SparseMerkleTree } from './smt/sparse-merkle-tree.js';
|
|
96
|
+
export { SMTStoreLevel } from './smt/smt-store-level.js';
|
|
97
|
+
export { SMTStoreMemory } from './smt/smt-store-memory.js';
|
|
98
|
+
export type { Hash, SMTNode, SMTInternalNode, SMTLeafNode, SMTProof, SMTDiffResult, SMTNodeStore } from './types/smt-types.js';
|
|
99
|
+
export { hashChildren, hashEquals, hashKey, hashLeaf, hashToHex, hexToHash, getBit, initDefaultHashes, getDefaultHashes, SMT_DEPTH, ZERO_HASH } from './smt/smt-utils.js';
|
|
64
100
|
|
|
65
101
|
// test library exports
|
|
66
|
-
export {
|
|
102
|
+
export type { GenerateFromRecordsWriteInput, GenerateFromRecordsWriteOut, GenerateGrantCreateInput, GenerateGrantCreateOutput, GenerateMessagesReadInput, GenerateMessagesReadOutput, GenerateMessagesSubscribeInput, GenerateMessagesSubscribeOutput, GenerateProtocolsConfigureInput, GenerateProtocolsConfigureOutput, GenerateProtocolsQueryInput, GenerateProtocolsQueryOutput, GenerateRecordsCountInput, GenerateRecordsCountOutput, GenerateRecordsDeleteInput, GenerateRecordsDeleteOutput, GenerateRecordsQueryInput, GenerateRecordsQueryOutput, GenerateRecordsSubscribeInput, GenerateRecordsSubscribeOutput, GenerateRecordsWriteInput, GenerateRecordsWriteOutput, Persona } from '../tests/utils/test-data-generator.js';
|
|
103
|
+
export { TestDataGenerator } from '../tests/utils/test-data-generator.js';
|
|
67
104
|
export { Poller } from '../tests/utils/poller.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MessageSigner } from '../types/signer.js';
|
|
2
2
|
import type { MessagesReadDescriptor, MessagesReadMessage } from '../types/messages-types.js';
|
|
3
3
|
|
|
4
4
|
import { AbstractMessage } from '../core/abstract-message.js';
|
|
@@ -10,7 +10,7 @@ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.j
|
|
|
10
10
|
|
|
11
11
|
export type MessagesReadOptions = {
|
|
12
12
|
messageCid: string;
|
|
13
|
-
signer:
|
|
13
|
+
signer: MessageSigner;
|
|
14
14
|
messageTimestamp?: string;
|
|
15
15
|
permissionGrantId?: string;
|
|
16
16
|
};
|
|
@@ -27,14 +27,15 @@ export class MessagesRead extends AbstractMessage<MessagesReadMessage> {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
public static async create(options: MessagesReadOptions): Promise<MessagesRead> {
|
|
30
|
+
const { signer, permissionGrantId } = options;
|
|
31
|
+
|
|
30
32
|
const descriptor: MessagesReadDescriptor = {
|
|
31
33
|
interface : DwnInterfaceName.Messages,
|
|
32
34
|
method : DwnMethodName.Read,
|
|
33
35
|
messageCid : options.messageCid,
|
|
34
36
|
messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),
|
|
37
|
+
...(permissionGrantId !== undefined && { permissionGrantId }),
|
|
35
38
|
};
|
|
36
|
-
|
|
37
|
-
const { signer, permissionGrantId } = options;
|
|
38
39
|
const authorization = await Message.createAuthorization({
|
|
39
40
|
descriptor,
|
|
40
41
|
signer,
|
|
@@ -56,7 +57,7 @@ export class MessagesRead extends AbstractMessage<MessagesReadMessage> {
|
|
|
56
57
|
private static validateMessageCid(messageCid: string): void {
|
|
57
58
|
try {
|
|
58
59
|
Cid.parseCid(messageCid);
|
|
59
|
-
} catch
|
|
60
|
+
} catch {
|
|
60
61
|
throw new DwnError(DwnErrorCode.MessagesReadInvalidCid, `${messageCid} is not a valid CID`);
|
|
61
62
|
}
|
|
62
63
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { MessagesFilter } from '../types/messages-types.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { MessageSigner } from '../types/signer.js';
|
|
3
3
|
import type { MessagesSubscribeDescriptor, MessagesSubscribeMessage } from '../types/messages-types.js';
|
|
4
4
|
|
|
5
5
|
import { AbstractMessage } from '../core/abstract-message.js';
|
|
@@ -11,7 +11,7 @@ import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.j
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
export type MessagesSubscribeOptions = {
|
|
14
|
-
signer:
|
|
14
|
+
signer: MessageSigner;
|
|
15
15
|
messageTimestamp?: string;
|
|
16
16
|
filters?: MessagesFilter[]
|
|
17
17
|
permissionGrantId?: string;
|
|
@@ -43,10 +43,11 @@ export class MessagesSubscribe extends AbstractMessage<MessagesSubscribeMessage>
|
|
|
43
43
|
const currentTime = Time.getCurrentTimestamp();
|
|
44
44
|
|
|
45
45
|
const descriptor: MessagesSubscribeDescriptor = {
|
|
46
|
-
interface
|
|
47
|
-
method
|
|
48
|
-
filters
|
|
49
|
-
messageTimestamp
|
|
46
|
+
interface : DwnInterfaceName.Messages,
|
|
47
|
+
method : DwnMethodName.Subscribe,
|
|
48
|
+
filters : options.filters ?? [],
|
|
49
|
+
messageTimestamp : options.messageTimestamp ?? currentTime,
|
|
50
|
+
permissionGrantId : options.permissionGrantId,
|
|
50
51
|
};
|
|
51
52
|
|
|
52
53
|
removeUndefinedProperties(descriptor);
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { MessageSigner } from '../types/signer.js';
|
|
2
|
+
import type { MessagesSyncAction, MessagesSyncDescriptor, MessagesSyncMessage } from '../types/messages-types.js';
|
|
3
|
+
|
|
4
|
+
import { AbstractMessage } from '../core/abstract-message.js';
|
|
5
|
+
import { Message } from '../core/message.js';
|
|
6
|
+
import { removeUndefinedProperties } from '../utils/object.js';
|
|
7
|
+
import { Time } from '../utils/time.js';
|
|
8
|
+
import { validateProtocolUrlNormalized } from '../utils/url.js';
|
|
9
|
+
import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
|
|
10
|
+
|
|
11
|
+
export type MessagesSyncOptions = {
|
|
12
|
+
signer : MessageSigner;
|
|
13
|
+
action : MessagesSyncAction;
|
|
14
|
+
protocol? : string;
|
|
15
|
+
prefix? : string;
|
|
16
|
+
messageTimestamp? : string;
|
|
17
|
+
permissionGrantId? : string;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export class MessagesSync extends AbstractMessage<MessagesSyncMessage> {
|
|
21
|
+
|
|
22
|
+
public static async parse(message: MessagesSyncMessage): Promise<MessagesSync> {
|
|
23
|
+
Message.validateJsonSchema(message);
|
|
24
|
+
await Message.validateSignatureStructure(message.authorization.signature, message.descriptor);
|
|
25
|
+
|
|
26
|
+
if (message.descriptor.protocol !== undefined) {
|
|
27
|
+
validateProtocolUrlNormalized(message.descriptor.protocol);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return new MessagesSync(message);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public static async create(options: MessagesSyncOptions): Promise<MessagesSync> {
|
|
34
|
+
const descriptor: MessagesSyncDescriptor = {
|
|
35
|
+
interface : DwnInterfaceName.Messages,
|
|
36
|
+
method : DwnMethodName.Sync,
|
|
37
|
+
messageTimestamp : options.messageTimestamp ?? Time.getCurrentTimestamp(),
|
|
38
|
+
action : options.action,
|
|
39
|
+
protocol : options.protocol,
|
|
40
|
+
prefix : options.prefix,
|
|
41
|
+
permissionGrantId : options.permissionGrantId,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
removeUndefinedProperties(descriptor);
|
|
45
|
+
|
|
46
|
+
const { permissionGrantId, signer } = options;
|
|
47
|
+
const authorization = await Message.createAuthorization({
|
|
48
|
+
descriptor,
|
|
49
|
+
signer,
|
|
50
|
+
permissionGrantId
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const message = { descriptor, authorization };
|
|
54
|
+
|
|
55
|
+
Message.validateJsonSchema(message);
|
|
56
|
+
|
|
57
|
+
return new MessagesSync(message);
|
|
58
|
+
}
|
|
59
|
+
}
|