@enbox/dwn-sdk-js 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +352 -0
- package/dist/bundles/dwn.js +153 -0
- package/dist/cjs/index.js +36749 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/generated/precompiled-validators.js +11973 -0
- package/dist/esm/generated/precompiled-validators.js.map +1 -0
- package/dist/esm/json-schemas/definitions.json +23 -0
- package/dist/esm/src/core/abstract-message.js +47 -0
- package/dist/esm/src/core/abstract-message.js.map +1 -0
- package/dist/esm/src/core/auth.js +39 -0
- package/dist/esm/src/core/auth.js.map +1 -0
- package/dist/esm/src/core/dwn-constant.js +10 -0
- package/dist/esm/src/core/dwn-constant.js.map +1 -0
- package/dist/esm/src/core/dwn-error.js +169 -0
- package/dist/esm/src/core/dwn-error.js.map +1 -0
- package/dist/esm/src/core/grant-authorization.js +97 -0
- package/dist/esm/src/core/grant-authorization.js.map +1 -0
- package/dist/esm/src/core/message-reply.js +5 -0
- package/dist/esm/src/core/message-reply.js.map +1 -0
- package/dist/esm/src/core/message.js +233 -0
- package/dist/esm/src/core/message.js.map +1 -0
- package/dist/esm/src/core/messages-grant-authorization.js +101 -0
- package/dist/esm/src/core/messages-grant-authorization.js.map +1 -0
- package/dist/esm/src/core/protocol-authorization.js +608 -0
- package/dist/esm/src/core/protocol-authorization.js.map +1 -0
- package/dist/esm/src/core/protocols-grant-authorization.js +66 -0
- package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -0
- package/dist/esm/src/core/records-grant-authorization.js +132 -0
- package/dist/esm/src/core/records-grant-authorization.js.map +1 -0
- package/dist/esm/src/core/resumable-task-manager.js +109 -0
- package/dist/esm/src/core/resumable-task-manager.js.map +1 -0
- package/dist/esm/src/core/tenant-gate.js +20 -0
- package/dist/esm/src/core/tenant-gate.js.map +1 -0
- package/dist/esm/src/dwn.js +164 -0
- package/dist/esm/src/dwn.js.map +1 -0
- package/dist/esm/src/enums/dwn-interface-method.js +16 -0
- package/dist/esm/src/enums/dwn-interface-method.js.map +1 -0
- package/dist/esm/src/event-log/event-emitter-stream.js +60 -0
- package/dist/esm/src/event-log/event-emitter-stream.js.map +1 -0
- package/dist/esm/src/event-log/event-log-level.js +63 -0
- package/dist/esm/src/event-log/event-log-level.js.map +1 -0
- package/dist/esm/src/handlers/messages-query.js +71 -0
- package/dist/esm/src/handlers/messages-query.js.map +1 -0
- package/dist/esm/src/handlers/messages-read.js +102 -0
- package/dist/esm/src/handlers/messages-read.js.map +1 -0
- package/dist/esm/src/handlers/messages-subscribe.js +81 -0
- package/dist/esm/src/handlers/messages-subscribe.js.map +1 -0
- package/dist/esm/src/handlers/protocols-configure.js +133 -0
- package/dist/esm/src/handlers/protocols-configure.js.map +1 -0
- package/dist/esm/src/handlers/protocols-query.js +73 -0
- package/dist/esm/src/handlers/protocols-query.js.map +1 -0
- package/dist/esm/src/handlers/records-delete.js +107 -0
- package/dist/esm/src/handlers/records-delete.js.map +1 -0
- package/dist/esm/src/handlers/records-query.js +210 -0
- package/dist/esm/src/handlers/records-query.js.map +1 -0
- package/dist/esm/src/handlers/records-read.js +169 -0
- package/dist/esm/src/handlers/records-read.js.map +1 -0
- package/dist/esm/src/handlers/records-subscribe.js +172 -0
- package/dist/esm/src/handlers/records-subscribe.js.map +1 -0
- package/dist/esm/src/handlers/records-write.js +344 -0
- package/dist/esm/src/handlers/records-write.js.map +1 -0
- package/dist/esm/src/index.js +49 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/interfaces/messages-query.js +53 -0
- package/dist/esm/src/interfaces/messages-query.js.map +1 -0
- package/dist/esm/src/interfaces/messages-read.js +61 -0
- package/dist/esm/src/interfaces/messages-read.js.map +1 -0
- package/dist/esm/src/interfaces/messages-subscribe.js +58 -0
- package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-configure.js +271 -0
- package/dist/esm/src/interfaces/protocols-configure.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-query.js +84 -0
- package/dist/esm/src/interfaces/protocols-query.js.map +1 -0
- package/dist/esm/src/interfaces/records-delete.js +89 -0
- package/dist/esm/src/interfaces/records-delete.js.map +1 -0
- package/dist/esm/src/interfaces/records-query.js +104 -0
- package/dist/esm/src/interfaces/records-query.js.map +1 -0
- package/dist/esm/src/interfaces/records-read.js +84 -0
- package/dist/esm/src/interfaces/records-read.js.map +1 -0
- package/dist/esm/src/interfaces/records-subscribe.js +91 -0
- package/dist/esm/src/interfaces/records-subscribe.js.map +1 -0
- package/dist/esm/src/interfaces/records-write.js +795 -0
- package/dist/esm/src/interfaces/records-write.js.map +1 -0
- package/dist/esm/src/jose/algorithms/signing/ed25519.js +51 -0
- package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -0
- package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js +20 -0
- package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -0
- package/dist/esm/src/jose/jws/general/builder.js +47 -0
- package/dist/esm/src/jose/jws/general/builder.js.map +1 -0
- package/dist/esm/src/jose/jws/general/verifier.js +97 -0
- package/dist/esm/src/jose/jws/general/verifier.js.map +1 -0
- package/dist/esm/src/protocols/permission-grant.js +39 -0
- package/dist/esm/src/protocols/permission-grant.js.map +1 -0
- package/dist/esm/src/protocols/permission-request.js +35 -0
- package/dist/esm/src/protocols/permission-request.js.map +1 -0
- package/dist/esm/src/protocols/permissions.js +357 -0
- package/dist/esm/src/protocols/permissions.js.map +1 -0
- package/dist/esm/src/schema-validator.js +37 -0
- package/dist/esm/src/schema-validator.js.map +1 -0
- package/dist/esm/src/store/blockstore-level.js +187 -0
- package/dist/esm/src/store/blockstore-level.js.map +1 -0
- package/dist/esm/src/store/blockstore-mock.js +168 -0
- package/dist/esm/src/store/blockstore-mock.js.map +1 -0
- package/dist/esm/src/store/data-store-level.js +136 -0
- package/dist/esm/src/store/data-store-level.js.map +1 -0
- package/dist/esm/src/store/index-level.js +660 -0
- package/dist/esm/src/store/index-level.js.map +1 -0
- package/dist/esm/src/store/level-wrapper.js +305 -0
- package/dist/esm/src/store/level-wrapper.js.map +1 -0
- package/dist/esm/src/store/message-store-level.js +159 -0
- package/dist/esm/src/store/message-store-level.js.map +1 -0
- package/dist/esm/src/store/resumable-task-store-level.js +131 -0
- package/dist/esm/src/store/resumable-task-store-level.js.map +1 -0
- package/dist/esm/src/store/storage-controller.js +184 -0
- package/dist/esm/src/store/storage-controller.js.map +1 -0
- package/dist/esm/src/types/cache.js +2 -0
- package/dist/esm/src/types/cache.js.map +1 -0
- package/dist/esm/src/types/data-store.js +2 -0
- package/dist/esm/src/types/data-store.js.map +1 -0
- package/dist/esm/src/types/event-log.js +2 -0
- package/dist/esm/src/types/event-log.js.map +1 -0
- package/dist/esm/src/types/jose-types.js +2 -0
- package/dist/esm/src/types/jose-types.js.map +1 -0
- package/dist/esm/src/types/jws-types.js +2 -0
- package/dist/esm/src/types/jws-types.js.map +1 -0
- package/dist/esm/src/types/message-interface.js +2 -0
- package/dist/esm/src/types/message-interface.js.map +1 -0
- package/dist/esm/src/types/message-store.js +2 -0
- package/dist/esm/src/types/message-store.js.map +1 -0
- package/dist/esm/src/types/message-types.js +3 -0
- package/dist/esm/src/types/message-types.js.map +1 -0
- package/dist/esm/src/types/messages-types.js +2 -0
- package/dist/esm/src/types/messages-types.js.map +1 -0
- package/dist/esm/src/types/method-handler.js +2 -0
- package/dist/esm/src/types/method-handler.js.map +1 -0
- package/dist/esm/src/types/permission-types.js +6 -0
- package/dist/esm/src/types/permission-types.js.map +1 -0
- package/dist/esm/src/types/protocols-types.js +20 -0
- package/dist/esm/src/types/protocols-types.js.map +1 -0
- package/dist/esm/src/types/query-types.js +6 -0
- package/dist/esm/src/types/query-types.js.map +1 -0
- package/dist/esm/src/types/records-types.js +8 -0
- package/dist/esm/src/types/records-types.js.map +1 -0
- package/dist/esm/src/types/resumable-task-store.js +2 -0
- package/dist/esm/src/types/resumable-task-store.js.map +1 -0
- package/dist/esm/src/types/signer.js +2 -0
- package/dist/esm/src/types/signer.js.map +1 -0
- package/dist/esm/src/types/subscriptions.js +2 -0
- package/dist/esm/src/types/subscriptions.js.map +1 -0
- package/dist/esm/src/utils/abort.js +40 -0
- package/dist/esm/src/utils/abort.js.map +1 -0
- package/dist/esm/src/utils/array.js +72 -0
- package/dist/esm/src/utils/array.js.map +1 -0
- package/dist/esm/src/utils/cid.js +130 -0
- package/dist/esm/src/utils/cid.js.map +1 -0
- package/dist/esm/src/utils/data-stream.js +100 -0
- package/dist/esm/src/utils/data-stream.js.map +1 -0
- package/dist/esm/src/utils/encoder.js +45 -0
- package/dist/esm/src/utils/encoder.js.map +1 -0
- package/dist/esm/src/utils/encryption.js +128 -0
- package/dist/esm/src/utils/encryption.js.map +1 -0
- package/dist/esm/src/utils/filter.js +229 -0
- package/dist/esm/src/utils/filter.js.map +1 -0
- package/dist/esm/src/utils/hd-key.js +114 -0
- package/dist/esm/src/utils/hd-key.js.map +1 -0
- package/dist/esm/src/utils/jws.js +89 -0
- package/dist/esm/src/utils/jws.js.map +1 -0
- package/dist/esm/src/utils/memory-cache.js +41 -0
- package/dist/esm/src/utils/memory-cache.js.map +1 -0
- package/dist/esm/src/utils/messages.js +84 -0
- package/dist/esm/src/utils/messages.js.map +1 -0
- package/dist/esm/src/utils/object.js +40 -0
- package/dist/esm/src/utils/object.js.map +1 -0
- package/dist/esm/src/utils/private-key-signer.js +43 -0
- package/dist/esm/src/utils/private-key-signer.js.map +1 -0
- package/dist/esm/src/utils/protocols.js +51 -0
- package/dist/esm/src/utils/protocols.js.map +1 -0
- package/dist/esm/src/utils/records.js +454 -0
- package/dist/esm/src/utils/records.js.map +1 -0
- package/dist/esm/src/utils/secp256k1.js +166 -0
- package/dist/esm/src/utils/secp256k1.js.map +1 -0
- package/dist/esm/src/utils/secp256r1.js +120 -0
- package/dist/esm/src/utils/secp256r1.js.map +1 -0
- package/dist/esm/src/utils/string.js +16 -0
- package/dist/esm/src/utils/string.js.map +1 -0
- package/dist/esm/src/utils/time.js +85 -0
- package/dist/esm/src/utils/time.js.map +1 -0
- package/dist/esm/src/utils/url.js +62 -0
- package/dist/esm/src/utils/url.js.map +1 -0
- package/dist/esm/tests/core/auth.spec.js +22 -0
- package/dist/esm/tests/core/auth.spec.js.map +1 -0
- package/dist/esm/tests/core/message-reply.spec.js +16 -0
- package/dist/esm/tests/core/message-reply.spec.js.map +1 -0
- package/dist/esm/tests/core/message.spec.js +146 -0
- package/dist/esm/tests/core/message.spec.js.map +1 -0
- package/dist/esm/tests/core/protocol-authorization.spec.js +48 -0
- package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -0
- package/dist/esm/tests/dwn.spec.js +166 -0
- package/dist/esm/tests/dwn.spec.js.map +1 -0
- package/dist/esm/tests/event-log/event-emitter-stream.spec.js +78 -0
- package/dist/esm/tests/event-log/event-emitter-stream.spec.js.map +1 -0
- package/dist/esm/tests/event-log/event-log-level.spec.js +44 -0
- package/dist/esm/tests/event-log/event-log-level.spec.js.map +1 -0
- package/dist/esm/tests/event-log/event-log.spec.js +236 -0
- package/dist/esm/tests/event-log/event-log.spec.js.map +1 -0
- package/dist/esm/tests/event-log/event-stream.spec.js +125 -0
- package/dist/esm/tests/event-log/event-stream.spec.js.map +1 -0
- package/dist/esm/tests/features/author-delegated-grant.spec.js +1273 -0
- package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -0
- package/dist/esm/tests/features/owner-delegated-grant.spec.js +584 -0
- package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -0
- package/dist/esm/tests/features/owner-signature.spec.js +192 -0
- package/dist/esm/tests/features/owner-signature.spec.js.map +1 -0
- package/dist/esm/tests/features/permissions.spec.js +815 -0
- package/dist/esm/tests/features/permissions.spec.js.map +1 -0
- package/dist/esm/tests/features/protocol-create-action.spec.js +248 -0
- package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -0
- package/dist/esm/tests/features/protocol-delete-action.spec.js +492 -0
- package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -0
- package/dist/esm/tests/features/protocol-update-action.spec.js +572 -0
- package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -0
- package/dist/esm/tests/features/records-prune.spec.js +812 -0
- package/dist/esm/tests/features/records-prune.spec.js.map +1 -0
- package/dist/esm/tests/features/records-tags.spec.js +2516 -0
- package/dist/esm/tests/features/records-tags.spec.js.map +1 -0
- package/dist/esm/tests/features/resumable-tasks.spec.js +349 -0
- package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -0
- package/dist/esm/tests/handlers/messages-query.spec.js +349 -0
- package/dist/esm/tests/handlers/messages-query.spec.js.map +1 -0
- package/dist/esm/tests/handlers/messages-read.spec.js +647 -0
- package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -0
- package/dist/esm/tests/handlers/messages-subscribe.spec.js +432 -0
- package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -0
- package/dist/esm/tests/handlers/protocols-configure.spec.js +608 -0
- package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -0
- package/dist/esm/tests/handlers/protocols-query.spec.js +454 -0
- package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-delete.spec.js +662 -0
- package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-query.spec.js +2695 -0
- package/dist/esm/tests/handlers/records-query.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-read.spec.js +1724 -0
- package/dist/esm/tests/handlers/records-read.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-subscribe.spec.js +684 -0
- package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-write.spec.js +3637 -0
- package/dist/esm/tests/handlers/records-write.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/messages-get.spec.js +78 -0
- package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js +30 -0
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/messagess-query.spec.js +127 -0
- package/dist/esm/tests/interfaces/messagess-query.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/protocols-configure.spec.js +489 -0
- package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/protocols-query.spec.js +46 -0
- package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-delete.spec.js +39 -0
- package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-query.spec.js +85 -0
- package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-read.spec.js +62 -0
- package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-subscribe.spec.js +72 -0
- package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-write.spec.js +423 -0
- package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -0
- package/dist/esm/tests/jose/jws/general.spec.js +243 -0
- package/dist/esm/tests/jose/jws/general.spec.js.map +1 -0
- package/dist/esm/tests/protocols/permission-request.spec.js +40 -0
- package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -0
- package/dist/esm/tests/protocols/permissions.spec.js +123 -0
- package/dist/esm/tests/protocols/permissions.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/aggregator.spec.js +670 -0
- package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/deleted-record.spec.js +102 -0
- package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +220 -0
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/messages-query.spec.js +395 -0
- package/dist/esm/tests/scenarios/messages-query.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/nested-roles.spec.js +300 -0
- package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/subscriptions.spec.js +886 -0
- package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -0
- package/dist/esm/tests/store/blockstore-mock.spec.js +192 -0
- package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -0
- package/dist/esm/tests/store/data-store-level.spec.js +146 -0
- package/dist/esm/tests/store/data-store-level.spec.js.map +1 -0
- package/dist/esm/tests/store/index-level.spec.js +1208 -0
- package/dist/esm/tests/store/index-level.spec.js.map +1 -0
- package/dist/esm/tests/store/message-store-level.spec.js +48 -0
- package/dist/esm/tests/store/message-store-level.spec.js.map +1 -0
- package/dist/esm/tests/store/message-store.spec.js +404 -0
- package/dist/esm/tests/store/message-store.spec.js.map +1 -0
- package/dist/esm/tests/store-dependent-tests.spec.js +5 -0
- package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -0
- package/dist/esm/tests/test-event-stream.js +25 -0
- package/dist/esm/tests/test-event-stream.js.map +1 -0
- package/dist/esm/tests/test-stores.js +45 -0
- package/dist/esm/tests/test-stores.js.map +1 -0
- package/dist/esm/tests/test-suite.js +88 -0
- package/dist/esm/tests/test-suite.js.map +1 -0
- package/dist/esm/tests/utils/cid.spec.js +80 -0
- package/dist/esm/tests/utils/cid.spec.js.map +1 -0
- package/dist/esm/tests/utils/data-stream.spec.js +27 -0
- package/dist/esm/tests/utils/data-stream.spec.js.map +1 -0
- package/dist/esm/tests/utils/encryption.spec.js +148 -0
- package/dist/esm/tests/utils/encryption.spec.js.map +1 -0
- package/dist/esm/tests/utils/filters.spec.js +295 -0
- package/dist/esm/tests/utils/filters.spec.js.map +1 -0
- package/dist/esm/tests/utils/hd-key.spec.js +35 -0
- package/dist/esm/tests/utils/hd-key.spec.js.map +1 -0
- package/dist/esm/tests/utils/jws.spec.js +8 -0
- package/dist/esm/tests/utils/jws.spec.js.map +1 -0
- package/dist/esm/tests/utils/memory-cache.spec.js +35 -0
- package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -0
- package/dist/esm/tests/utils/messages.spec.js +101 -0
- package/dist/esm/tests/utils/messages.spec.js.map +1 -0
- package/dist/esm/tests/utils/object.spec.js +36 -0
- package/dist/esm/tests/utils/object.spec.js.map +1 -0
- package/dist/esm/tests/utils/poller.js +49 -0
- package/dist/esm/tests/utils/poller.js.map +1 -0
- package/dist/esm/tests/utils/private-key-signer.spec.js +44 -0
- package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -0
- package/dist/esm/tests/utils/records.spec.js +53 -0
- package/dist/esm/tests/utils/records.spec.js.map +1 -0
- package/dist/esm/tests/utils/secp256k1.spec.js +50 -0
- package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -0
- package/dist/esm/tests/utils/secp256r1.spec.js +56 -0
- package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -0
- package/dist/esm/tests/utils/test-data-generator.js +643 -0
- package/dist/esm/tests/utils/test-data-generator.js.map +1 -0
- package/dist/esm/tests/utils/test-stub-generator.js +39 -0
- package/dist/esm/tests/utils/test-stub-generator.js.map +1 -0
- package/dist/esm/tests/utils/time.spec.js +64 -0
- package/dist/esm/tests/utils/time.spec.js.map +1 -0
- package/dist/esm/tests/utils/url.spec.js +43 -0
- package/dist/esm/tests/utils/url.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js +33 -0
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +50 -0
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +36 -0
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +82 -0
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +75 -0
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +148 -0
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +421 -0
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -0
- package/dist/esm/tests/vectors/protocol-definitions/anyone-collaborate.json +21 -0
- package/dist/esm/tests/vectors/protocol-definitions/author-can.json +33 -0
- package/dist/esm/tests/vectors/protocol-definitions/chat.json +70 -0
- package/dist/esm/tests/vectors/protocol-definitions/credential-issuance.json +41 -0
- package/dist/esm/tests/vectors/protocol-definitions/dex.json +58 -0
- package/dist/esm/tests/vectors/protocol-definitions/email.json +62 -0
- package/dist/esm/tests/vectors/protocol-definitions/free-for-all.json +45 -0
- package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +48 -0
- package/dist/esm/tests/vectors/protocol-definitions/message.json +37 -0
- package/dist/esm/tests/vectors/protocol-definitions/minimal.json +10 -0
- package/dist/esm/tests/vectors/protocol-definitions/nested.json +31 -0
- package/dist/esm/tests/vectors/protocol-definitions/private-protocol.json +15 -0
- package/dist/esm/tests/vectors/protocol-definitions/recipient-can.json +33 -0
- package/dist/esm/tests/vectors/protocol-definitions/slack.json +242 -0
- package/dist/esm/tests/vectors/protocol-definitions/social-media.json +106 -0
- package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +70 -0
- package/dist/types/generated/precompiled-validators.d.ts +597 -0
- package/dist/types/generated/precompiled-validators.d.ts.map +1 -0
- package/dist/types/src/core/abstract-message.d.ts +25 -0
- package/dist/types/src/core/abstract-message.d.ts.map +1 -0
- package/dist/types/src/core/auth.d.ts +9 -0
- package/dist/types/src/core/auth.d.ts.map +1 -0
- package/dist/types/src/core/dwn-constant.d.ts +10 -0
- package/dist/types/src/core/dwn-constant.d.ts.map +1 -0
- package/dist/types/src/core/dwn-error.d.ts +164 -0
- package/dist/types/src/core/dwn-error.d.ts.map +1 -0
- package/dist/types/src/core/grant-authorization.d.ts +43 -0
- package/dist/types/src/core/grant-authorization.d.ts.map +1 -0
- package/dist/types/src/core/message-reply.d.ts +32 -0
- package/dist/types/src/core/message-reply.d.ts.map +1 -0
- package/dist/types/src/core/message.d.ts +94 -0
- package/dist/types/src/core/message.d.ts.map +1 -0
- package/dist/types/src/core/messages-grant-authorization.d.ts +34 -0
- package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -0
- package/dist/types/src/core/protocol-authorization.d.ts +103 -0
- package/dist/types/src/core/protocol-authorization.d.ts.map +1 -0
- package/dist/types/src/core/protocols-grant-authorization.d.ts +31 -0
- package/dist/types/src/core/protocols-grant-authorization.d.ts.map +1 -0
- package/dist/types/src/core/records-grant-authorization.d.ts +60 -0
- package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -0
- package/dist/types/src/core/resumable-task-manager.d.ts +43 -0
- package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -0
- package/dist/types/src/core/tenant-gate.d.ts +29 -0
- package/dist/types/src/core/tenant-gate.d.ts.map +1 -0
- package/dist/types/src/dwn.d.ts +85 -0
- package/dist/types/src/dwn.d.ts.map +1 -0
- package/dist/types/src/enums/dwn-interface-method.d.ts +14 -0
- package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -0
- package/dist/types/src/event-log/event-emitter-stream.d.ts +23 -0
- package/dist/types/src/event-log/event-emitter-stream.d.ts.map +1 -0
- package/dist/types/src/event-log/event-log-level.d.ts +35 -0
- package/dist/types/src/event-log/event-log-level.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-query.d.ts +17 -0
- package/dist/types/src/handlers/messages-query.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-read.d.ts +22 -0
- package/dist/types/src/handlers/messages-read.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-subscribe.d.ts +18 -0
- package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -0
- package/dist/types/src/handlers/protocols-configure.d.ts +24 -0
- package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -0
- package/dist/types/src/handlers/protocols-query.d.ts +20 -0
- package/dist/types/src/handlers/protocols-query.d.ts.map +1 -0
- package/dist/types/src/handlers/records-delete.d.ts +23 -0
- package/dist/types/src/handlers/records-delete.d.ts.map +1 -0
- package/dist/types/src/handlers/records-query.d.ts +70 -0
- package/dist/types/src/handlers/records-query.d.ts.map +1 -0
- package/dist/types/src/handlers/records-read.d.ts +20 -0
- package/dist/types/src/handlers/records-read.d.ts.map +1 -0
- package/dist/types/src/handlers/records-subscribe.d.ts +62 -0
- package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -0
- package/dist/types/src/handlers/records-write.d.ts +51 -0
- package/dist/types/src/handlers/records-write.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +63 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/interfaces/messages-query.d.ts +16 -0
- package/dist/types/src/interfaces/messages-query.d.ts.map +1 -0
- package/dist/types/src/interfaces/messages-read.d.ts +20 -0
- package/dist/types/src/interfaces/messages-read.d.ts.map +1 -0
- package/dist/types/src/interfaces/messages-subscribe.d.ts +20 -0
- package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -0
- package/dist/types/src/interfaces/protocols-configure.d.ts +40 -0
- package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -0
- package/dist/types/src/interfaces/protocols-query.d.ts +17 -0
- package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-delete.d.ts +34 -0
- package/dist/types/src/interfaces/records-delete.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-query.d.ts +31 -0
- package/dist/types/src/interfaces/records-query.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-read.d.ts +36 -0
- package/dist/types/src/interfaces/records-read.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-subscribe.d.ts +27 -0
- package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-write.d.ts +309 -0
- package/dist/types/src/interfaces/records-write.d.ts.map +1 -0
- package/dist/types/src/jose/algorithms/signing/ed25519.d.ts +3 -0
- package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -0
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +3 -0
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -0
- package/dist/types/src/jose/jws/general/builder.d.ts +10 -0
- package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -0
- package/dist/types/src/jose/jws/general/verifier.d.ts +32 -0
- package/dist/types/src/jose/jws/general/verifier.d.ts.map +1 -0
- package/dist/types/src/protocols/permission-grant.d.ts +50 -0
- package/dist/types/src/protocols/permission-grant.d.ts.map +1 -0
- package/dist/types/src/protocols/permission-request.d.ts +35 -0
- package/dist/types/src/protocols/permission-request.d.ts.map +1 -0
- package/dist/types/src/protocols/permissions.d.ts +150 -0
- package/dist/types/src/protocols/permissions.d.ts.map +1 -0
- package/dist/types/src/schema-validator.d.ts +8 -0
- package/dist/types/src/schema-validator.d.ts.map +1 -0
- package/dist/types/src/store/blockstore-level.d.ts +34 -0
- package/dist/types/src/store/blockstore-level.d.ts.map +1 -0
- package/dist/types/src/store/blockstore-mock.d.ts +27 -0
- package/dist/types/src/store/blockstore-mock.d.ts.map +1 -0
- package/dist/types/src/store/data-store-level.d.ts +34 -0
- package/dist/types/src/store/data-store-level.d.ts.map +1 -0
- package/dist/types/src/store/index-level.d.ts +171 -0
- package/dist/types/src/store/index-level.d.ts.map +1 -0
- package/dist/types/src/store/level-wrapper.d.ts +48 -0
- package/dist/types/src/store/level-wrapper.d.ts.map +1 -0
- package/dist/types/src/store/message-store-level.d.ts +46 -0
- package/dist/types/src/store/message-store-level.d.ts.map +1 -0
- package/dist/types/src/store/resumable-task-store-level.d.ts +28 -0
- package/dist/types/src/store/resumable-task-store-level.d.ts.map +1 -0
- package/dist/types/src/store/storage-controller.d.ts +46 -0
- package/dist/types/src/store/storage-controller.d.ts.map +1 -0
- package/dist/types/src/types/cache.d.ts +16 -0
- package/dist/types/src/types/cache.d.ts.map +1 -0
- package/dist/types/src/types/data-store.d.ts +57 -0
- package/dist/types/src/types/data-store.d.ts.map +1 -0
- package/dist/types/src/types/event-log.d.ts +52 -0
- package/dist/types/src/types/event-log.d.ts.map +1 -0
- package/dist/types/src/types/jose-types.d.ts +75 -0
- package/dist/types/src/types/jose-types.d.ts.map +1 -0
- package/dist/types/src/types/jws-types.d.ts +27 -0
- package/dist/types/src/types/jws-types.d.ts.map +1 -0
- package/dist/types/src/types/message-interface.d.ts +27 -0
- package/dist/types/src/types/message-interface.d.ts.map +1 -0
- package/dist/types/src/types/message-store.d.ts +42 -0
- package/dist/types/src/types/message-store.d.ts.map +1 -0
- package/dist/types/src/types/message-types.d.ts +116 -0
- package/dist/types/src/types/message-types.d.ts.map +1 -0
- package/dist/types/src/types/messages-types.d.ts +65 -0
- package/dist/types/src/types/messages-types.d.ts.map +1 -0
- package/dist/types/src/types/method-handler.d.ts +19 -0
- package/dist/types/src/types/method-handler.d.ts.map +1 -0
- package/dist/types/src/types/permission-types.d.ts +93 -0
- package/dist/types/src/types/permission-types.d.ts.map +1 -0
- package/dist/types/src/types/protocols-types.d.ts +154 -0
- package/dist/types/src/types/protocols-types.d.ts.map +1 -0
- package/dist/types/src/types/query-types.d.ts +66 -0
- package/dist/types/src/types/query-types.d.ts.map +1 -0
- package/dist/types/src/types/records-types.d.ts +230 -0
- package/dist/types/src/types/records-types.d.ts.map +1 -0
- package/dist/types/src/types/resumable-task-store.d.ts +89 -0
- package/dist/types/src/types/resumable-task-store.d.ts.map +1 -0
- package/dist/types/src/types/signer.d.ts +26 -0
- package/dist/types/src/types/signer.d.ts.map +1 -0
- package/dist/types/src/types/subscriptions.d.ts +30 -0
- package/dist/types/src/types/subscriptions.d.ts.map +1 -0
- package/dist/types/src/utils/abort.d.ts +5 -0
- package/dist/types/src/utils/abort.d.ts.map +1 -0
- package/dist/types/src/utils/array.d.ts +18 -0
- package/dist/types/src/utils/array.d.ts.map +1 -0
- package/dist/types/src/utils/cid.d.ts +30 -0
- package/dist/types/src/utils/cid.d.ts.map +1 -0
- package/dist/types/src/utils/data-stream.d.ts +31 -0
- package/dist/types/src/utils/data-stream.d.ts.map +1 -0
- package/dist/types/src/utils/encoder.d.ts +14 -0
- package/dist/types/src/utils/encoder.d.ts.map +1 -0
- package/dist/types/src/utils/encryption.d.ts +44 -0
- package/dist/types/src/utils/encryption.d.ts.map +1 -0
- package/dist/types/src/utils/filter.d.ts +60 -0
- package/dist/types/src/utils/filter.d.ts.map +1 -0
- package/dist/types/src/utils/hd-key.d.ts +54 -0
- package/dist/types/src/utils/hd-key.d.ts.map +1 -0
- package/dist/types/src/utils/jws.d.ts +39 -0
- package/dist/types/src/utils/jws.d.ts.map +1 -0
- package/dist/types/src/utils/memory-cache.d.ts +15 -0
- package/dist/types/src/utils/memory-cache.d.ts.map +1 -0
- package/dist/types/src/utils/messages.d.ts +27 -0
- package/dist/types/src/utils/messages.d.ts.map +1 -0
- package/dist/types/src/utils/object.d.ts +13 -0
- package/dist/types/src/utils/object.d.ts.map +1 -0
- package/dist/types/src/utils/private-key-signer.d.ts +34 -0
- package/dist/types/src/utils/private-key-signer.d.ts.map +1 -0
- package/dist/types/src/utils/protocols.d.ts +14 -0
- package/dist/types/src/utils/protocols.d.ts.map +1 -0
- package/dist/types/src/utils/records.d.ts +122 -0
- package/dist/types/src/utils/records.d.ts.map +1 -0
- package/dist/types/src/utils/secp256k1.d.ts +59 -0
- package/dist/types/src/utils/secp256k1.d.ts.map +1 -0
- package/dist/types/src/utils/secp256r1.d.ts +39 -0
- package/dist/types/src/utils/secp256r1.d.ts.map +1 -0
- package/dist/types/src/utils/string.d.ts +6 -0
- package/dist/types/src/utils/string.d.ts.map +1 -0
- package/dist/types/src/utils/time.d.ts +50 -0
- package/dist/types/src/utils/time.d.ts.map +1 -0
- package/dist/types/src/utils/url.d.ts +5 -0
- package/dist/types/src/utils/url.d.ts.map +1 -0
- package/dist/types/tests/core/auth.spec.d.ts +2 -0
- package/dist/types/tests/core/auth.spec.d.ts.map +1 -0
- package/dist/types/tests/core/message-reply.spec.d.ts +2 -0
- package/dist/types/tests/core/message-reply.spec.d.ts.map +1 -0
- package/dist/types/tests/core/message.spec.d.ts +2 -0
- package/dist/types/tests/core/message.spec.d.ts.map +1 -0
- package/dist/types/tests/core/protocol-authorization.spec.d.ts +2 -0
- package/dist/types/tests/core/protocol-authorization.spec.d.ts.map +1 -0
- package/dist/types/tests/dwn.spec.d.ts +2 -0
- package/dist/types/tests/dwn.spec.d.ts.map +1 -0
- package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts +2 -0
- package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/event-log/event-log-level.spec.d.ts +2 -0
- package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +1 -0
- package/dist/types/tests/event-log/event-log.spec.d.ts +2 -0
- package/dist/types/tests/event-log/event-log.spec.d.ts.map +1 -0
- package/dist/types/tests/event-log/event-stream.spec.d.ts +2 -0
- package/dist/types/tests/event-log/event-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/features/author-delegated-grant.spec.d.ts +2 -0
- package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -0
- package/dist/types/tests/features/owner-delegated-grant.spec.d.ts +2 -0
- package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -0
- package/dist/types/tests/features/owner-signature.spec.d.ts +2 -0
- package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -0
- package/dist/types/tests/features/permissions.spec.d.ts +2 -0
- package/dist/types/tests/features/permissions.spec.d.ts.map +1 -0
- package/dist/types/tests/features/protocol-create-action.spec.d.ts +2 -0
- package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -0
- package/dist/types/tests/features/protocol-delete-action.spec.d.ts +2 -0
- package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -0
- package/dist/types/tests/features/protocol-update-action.spec.d.ts +2 -0
- package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -0
- package/dist/types/tests/features/records-prune.spec.d.ts +2 -0
- package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -0
- package/dist/types/tests/features/records-tags.spec.d.ts +2 -0
- package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -0
- package/dist/types/tests/features/resumable-tasks.spec.d.ts +2 -0
- package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/messages-query.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-query.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/messages-read.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/messages-subscribe.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/protocols-configure.spec.d.ts +2 -0
- package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/protocols-query.spec.d.ts +2 -0
- package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-delete.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-query.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-read.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-subscribe.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-write.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/messages-get.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/messages-get.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/messages-subscribe.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/messages-subscribe.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/protocols-configure.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/protocols-configure.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/protocols-query.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/protocols-query.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/records-delete.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/records-delete.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/records-query.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/records-query.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/records-read.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/records-read.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/records-subscribe.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/records-subscribe.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/records-write.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/records-write.spec.d.ts.map +1 -0
- package/dist/types/tests/jose/jws/general.spec.d.ts +2 -0
- package/dist/types/tests/jose/jws/general.spec.d.ts.map +1 -0
- package/dist/types/tests/protocols/permission-request.spec.d.ts +2 -0
- package/dist/types/tests/protocols/permission-request.spec.d.ts.map +1 -0
- package/dist/types/tests/protocols/permissions.spec.d.ts +2 -0
- package/dist/types/tests/protocols/permissions.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/aggregator.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/aggregator.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/deleted-record.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/messages-query.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/messages-query.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/nested-roles.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/subscriptions.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/subscriptions.spec.d.ts.map +1 -0
- package/dist/types/tests/store/blockstore-mock.spec.d.ts +2 -0
- package/dist/types/tests/store/blockstore-mock.spec.d.ts.map +1 -0
- package/dist/types/tests/store/data-store-level.spec.d.ts +2 -0
- package/dist/types/tests/store/data-store-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/index-level.spec.d.ts +2 -0
- package/dist/types/tests/store/index-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/message-store-level.spec.d.ts +2 -0
- package/dist/types/tests/store/message-store-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/message-store.spec.d.ts +2 -0
- package/dist/types/tests/store/message-store.spec.d.ts.map +1 -0
- package/dist/types/tests/store-dependent-tests.spec.d.ts +2 -0
- package/dist/types/tests/store-dependent-tests.spec.d.ts.map +1 -0
- package/dist/types/tests/test-event-stream.d.ts +22 -0
- package/dist/types/tests/test-event-stream.d.ts.map +1 -0
- package/dist/types/tests/test-stores.d.ts +33 -0
- package/dist/types/tests/test-stores.d.ts.map +1 -0
- package/dist/types/tests/test-suite.d.ts +18 -0
- package/dist/types/tests/test-suite.d.ts.map +1 -0
- package/dist/types/tests/utils/cid.spec.d.ts +2 -0
- package/dist/types/tests/utils/cid.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/data-stream.spec.d.ts +2 -0
- package/dist/types/tests/utils/data-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/encryption.spec.d.ts +2 -0
- package/dist/types/tests/utils/encryption.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/filters.spec.d.ts +2 -0
- package/dist/types/tests/utils/filters.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/hd-key.spec.d.ts +2 -0
- package/dist/types/tests/utils/hd-key.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/jws.spec.d.ts +2 -0
- package/dist/types/tests/utils/jws.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/memory-cache.spec.d.ts +2 -0
- package/dist/types/tests/utils/memory-cache.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/messages.spec.d.ts +2 -0
- package/dist/types/tests/utils/messages.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/object.spec.d.ts +2 -0
- package/dist/types/tests/utils/object.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/poller.d.ts +21 -0
- package/dist/types/tests/utils/poller.d.ts.map +1 -0
- package/dist/types/tests/utils/private-key-signer.spec.d.ts +2 -0
- package/dist/types/tests/utils/private-key-signer.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/records.spec.d.ts +2 -0
- package/dist/types/tests/utils/records.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/secp256k1.spec.d.ts +2 -0
- package/dist/types/tests/utils/secp256k1.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/secp256r1.spec.d.ts +2 -0
- package/dist/types/tests/utils/secp256r1.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/test-data-generator.d.ts +342 -0
- package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -0
- package/dist/types/tests/utils/test-stub-generator.d.ts +16 -0
- package/dist/types/tests/utils/test-stub-generator.d.ts.map +1 -0
- package/dist/types/tests/utils/time.spec.d.ts +2 -0
- package/dist/types/tests/utils/time.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/url.spec.d.ts +2 -0
- package/dist/types/tests/utils/url.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/definitions.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/definitions.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/jwk/general-jwk.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/jwk/general-jwk.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/jwk/public-jwk.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/jwk/public-jwk.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/jwk-verification-method.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/jwk-verification-method.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/protocols/protocols-configure.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/protocols/protocols-configure.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/records/records-query.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/records/records-query.spec.d.ts.map +1 -0
- package/dist/types/tests/validation/json-schemas/records/records-write.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/records/records-write.spec.d.ts.map +1 -0
- package/package.json +167 -0
- package/src/core/abstract-message.ts +62 -0
- package/src/core/auth.ts +36 -0
- package/src/core/dwn-constant.ts +9 -0
- package/src/core/dwn-error.ts +167 -0
- package/src/core/grant-authorization.ts +148 -0
- package/src/core/message-reply.ts +41 -0
- package/src/core/message.ts +259 -0
- package/src/core/messages-grant-authorization.ts +134 -0
- package/src/core/protocol-authorization.ts +903 -0
- package/src/core/protocols-grant-authorization.ts +88 -0
- package/src/core/records-grant-authorization.ts +197 -0
- package/src/core/resumable-task-manager.ts +114 -0
- package/src/core/tenant-gate.ts +33 -0
- package/src/dwn.ts +264 -0
- package/src/enums/dwn-interface-method.ts +14 -0
- package/src/event-log/event-emitter-stream.ts +69 -0
- package/src/event-log/event-log-level.ts +72 -0
- package/src/handlers/messages-query.ts +67 -0
- package/src/handlers/messages-read.ts +103 -0
- package/src/handlers/messages-subscribe.ts +89 -0
- package/src/handlers/protocols-configure.ts +137 -0
- package/src/handlers/protocols-query.ts +82 -0
- package/src/handlers/records-delete.ts +124 -0
- package/src/handlers/records-query.ts +262 -0
- package/src/handlers/records-read.ts +187 -0
- package/src/handlers/records-subscribe.ts +218 -0
- package/src/handlers/records-write.ts +404 -0
- package/src/index.ts +67 -0
- package/src/interfaces/messages-query.ts +60 -0
- package/src/interfaces/messages-read.ts +63 -0
- package/src/interfaces/messages-subscribe.ts +64 -0
- package/src/interfaces/protocols-configure.ts +340 -0
- package/src/interfaces/protocols-query.ts +96 -0
- package/src/interfaces/records-delete.ts +117 -0
- package/src/interfaces/records-query.ts +131 -0
- package/src/interfaces/records-read.ts +100 -0
- package/src/interfaces/records-subscribe.ts +104 -0
- package/src/interfaces/records-write.ts +1072 -0
- package/src/jose/algorithms/signing/ed25519.ts +58 -0
- package/src/jose/algorithms/signing/signature-algorithms.ts +22 -0
- package/src/jose/jws/general/builder.ts +48 -0
- package/src/jose/jws/general/verifier.ts +112 -0
- package/src/protocols/permission-grant.ts +86 -0
- package/src/protocols/permission-request.ts +63 -0
- package/src/protocols/permissions.ts +508 -0
- package/src/schema-validator.ts +46 -0
- package/src/store/blockstore-level.ts +113 -0
- package/src/store/blockstore-mock.ts +80 -0
- package/src/store/data-store-level.ts +120 -0
- package/src/store/index-level.ts +691 -0
- package/src/store/level-wrapper.ts +272 -0
- package/src/store/message-store-level.ts +195 -0
- package/src/store/resumable-task-store-level.ts +120 -0
- package/src/store/storage-controller.ts +240 -0
- package/src/types/cache.ts +16 -0
- package/src/types/data-store.ts +64 -0
- package/src/types/event-log.ts +52 -0
- package/src/types/jose-types.ts +76 -0
- package/src/types/jws-types.ts +28 -0
- package/src/types/message-interface.ts +30 -0
- package/src/types/message-store.ts +57 -0
- package/src/types/message-types.ts +132 -0
- package/src/types/messages-types.ts +77 -0
- package/src/types/method-handler.ts +19 -0
- package/src/types/permission-types.ts +110 -0
- package/src/types/protocols-types.ts +177 -0
- package/src/types/query-types.ts +61 -0
- package/src/types/records-types.ts +263 -0
- package/src/types/resumable-task-store.ts +96 -0
- package/src/types/signer.ts +27 -0
- package/src/types/subscriptions.ts +34 -0
- package/src/utils/abort.ts +31 -0
- package/src/utils/array.ts +39 -0
- package/src/utils/cid.ts +101 -0
- package/src/utils/data-stream.ts +99 -0
- package/src/utils/encoder.ts +54 -0
- package/src/utils/encryption.ts +145 -0
- package/src/utils/filter.ts +245 -0
- package/src/utils/hd-key.ts +126 -0
- package/src/utils/jws.ts +95 -0
- package/src/utils/memory-cache.ts +31 -0
- package/src/utils/messages.ts +109 -0
- package/src/utils/object.ts +43 -0
- package/src/utils/private-key-signer.ts +72 -0
- package/src/utils/protocols.ts +50 -0
- package/src/utils/records.ts +559 -0
- package/src/utils/secp256k1.ts +157 -0
- package/src/utils/secp256r1.ts +142 -0
- package/src/utils/string.ts +13 -0
- package/src/utils/time.ts +78 -0
- package/src/utils/url.ts +65 -0
|
@@ -0,0 +1,660 @@
|
|
|
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
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
|
11
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
12
|
+
var m = o[Symbol.asyncIterator], i;
|
|
13
|
+
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
|
|
14
|
+
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
|
|
15
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
|
16
|
+
};
|
|
17
|
+
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
18
|
+
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
19
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
20
|
+
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
21
|
+
return i = {}, verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
22
|
+
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
|
|
23
|
+
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
|
|
24
|
+
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
25
|
+
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
26
|
+
function fulfill(value) { resume("next", value); }
|
|
27
|
+
function reject(value) { resume("throw", value); }
|
|
28
|
+
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
29
|
+
};
|
|
30
|
+
import { isEmptyObject } from '../utils/object.js';
|
|
31
|
+
import { lexicographicalCompare } from '../utils/string.js';
|
|
32
|
+
import { SortDirection } from '../types/query-types.js';
|
|
33
|
+
import { createLevelDatabase, LevelWrapper } from './level-wrapper.js';
|
|
34
|
+
import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
|
|
35
|
+
import { FilterSelector, FilterUtility } from '../utils/filter.js';
|
|
36
|
+
const INDEX_SUBLEVEL_NAME = 'index';
|
|
37
|
+
/**
|
|
38
|
+
* A LevelDB implementation for indexing the messages and events stored in the DWN.
|
|
39
|
+
*/
|
|
40
|
+
export class IndexLevel {
|
|
41
|
+
constructor(config) {
|
|
42
|
+
this.config = Object.assign({ createLevelDatabase }, config);
|
|
43
|
+
this.db = new LevelWrapper({
|
|
44
|
+
location: this.config.location,
|
|
45
|
+
createLevelDatabase: this.config.createLevelDatabase,
|
|
46
|
+
keyEncoding: 'utf8'
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
open() {
|
|
50
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
yield this.db.open();
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
close() {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
yield this.db.close();
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* deletes everything in the underlying index db.
|
|
61
|
+
*/
|
|
62
|
+
clear() {
|
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
yield this.db.clear();
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Put an item into the index using information that will allow it to be queried for.
|
|
69
|
+
*
|
|
70
|
+
* @param tenant
|
|
71
|
+
* @param messageCid a unique ID that represents the item being indexed, this is also used as the cursor value in a query.
|
|
72
|
+
* @param indexes - (key-value pairs) to be included as part of indexing this item. Must include at least one indexing property.
|
|
73
|
+
* @param options IndexLevelOptions that include an AbortSignal.
|
|
74
|
+
*/
|
|
75
|
+
put(tenant, messageCid, indexes, options) {
|
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
77
|
+
// ensure we have something valid to index
|
|
78
|
+
if (isEmptyObject(indexes)) {
|
|
79
|
+
throw new DwnError(DwnErrorCode.IndexMissingIndexableProperty, 'Index must include at least one valid indexable property');
|
|
80
|
+
}
|
|
81
|
+
const item = { messageCid, indexes };
|
|
82
|
+
const opCreationPromises = [];
|
|
83
|
+
// create an index entry for each property index
|
|
84
|
+
// these indexes are all sortable lexicographically.
|
|
85
|
+
for (const indexName in indexes) {
|
|
86
|
+
const indexValue = indexes[indexName];
|
|
87
|
+
if (Array.isArray(indexValue)) {
|
|
88
|
+
for (const indexValueItem of indexValue) {
|
|
89
|
+
const partitionOperationPromise = this.createPutIndexedItemOperation(tenant, item, indexName, indexValueItem);
|
|
90
|
+
opCreationPromises.push(partitionOperationPromise);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const partitionOperationPromise = this.createPutIndexedItemOperation(tenant, item, indexName, indexValue);
|
|
95
|
+
opCreationPromises.push(partitionOperationPromise);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// create a reverse lookup for the sortedIndex values. This is used during deletion and cursor starting point lookup.
|
|
99
|
+
const partitionOperationPromise = this.createOperationForIndexesLookupPartition(tenant, { type: 'put', key: messageCid, value: JSON.stringify(indexes) });
|
|
100
|
+
opCreationPromises.push(partitionOperationPromise);
|
|
101
|
+
const indexOps = yield Promise.all(opCreationPromises);
|
|
102
|
+
const tenantPartition = yield this.db.partition(tenant);
|
|
103
|
+
yield tenantPartition.batch(indexOps, options);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Deletes all of the index data associated with the item.
|
|
108
|
+
*/
|
|
109
|
+
delete(tenant, messageCid, options) {
|
|
110
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
+
const opCreationPromises = [];
|
|
112
|
+
const indexes = yield this.getIndexes(tenant, messageCid);
|
|
113
|
+
if (indexes === undefined) {
|
|
114
|
+
// invalid messageCid
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
// delete the reverse lookup
|
|
118
|
+
const partitionOperationPromise = this.createOperationForIndexesLookupPartition(tenant, { type: 'del', key: messageCid });
|
|
119
|
+
opCreationPromises.push(partitionOperationPromise);
|
|
120
|
+
// delete the keys for each index
|
|
121
|
+
for (const indexName in indexes) {
|
|
122
|
+
const indexValue = indexes[indexName];
|
|
123
|
+
if (Array.isArray(indexValue)) {
|
|
124
|
+
for (const indexValueItem of indexValue) {
|
|
125
|
+
const partitionOperationPromise = this.createDeleteIndexedItemOperation(tenant, messageCid, indexName, indexValueItem);
|
|
126
|
+
opCreationPromises.push(partitionOperationPromise);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
const partitionOperationPromise = this.createDeleteIndexedItemOperation(tenant, messageCid, indexName, indexValue);
|
|
131
|
+
opCreationPromises.push(partitionOperationPromise);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const indexOps = yield Promise.all(opCreationPromises);
|
|
135
|
+
const tenantPartition = yield this.db.partition(tenant);
|
|
136
|
+
yield tenantPartition.batch(indexOps, options);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Creates an IndexLevel `put` operation for indexing an item, creating a partition by `tenant` and by `indexName`
|
|
141
|
+
*/
|
|
142
|
+
createPutIndexedItemOperation(tenant, item, indexName, indexValue) {
|
|
143
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
144
|
+
const { messageCid } = item;
|
|
145
|
+
// The key is the indexValue followed by the messageCid as a tie-breaker.
|
|
146
|
+
// for example if the property is messageTimestamp the key would look like:
|
|
147
|
+
// '"2023-05-25T18:23:29.425008Z"\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'
|
|
148
|
+
const key = IndexLevel.keySegmentJoin(IndexLevel.encodeValue(indexValue), messageCid);
|
|
149
|
+
return this.createOperationForIndexPartition(tenant, indexName, { type: 'put', key, value: JSON.stringify(item) });
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Creates an IndexLevel `del` operation for deleting an item, creating a partition by `tenant` and by `indexName`
|
|
154
|
+
*/
|
|
155
|
+
createDeleteIndexedItemOperation(tenant, messageCid, indexName, indexValue) {
|
|
156
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
// The key is the indexValue followed by the messageCid as a tie-breaker.
|
|
158
|
+
// for example if the property is messageTimestamp the key would look like:
|
|
159
|
+
// '"2023-05-25T18:23:29.425008Z"\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'
|
|
160
|
+
const key = IndexLevel.keySegmentJoin(IndexLevel.encodeValue(indexValue), messageCid);
|
|
161
|
+
return this.createOperationForIndexPartition(tenant, indexName, { type: 'del', key });
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Wraps the given operation as an operation for the specified index partition.
|
|
166
|
+
*/
|
|
167
|
+
createOperationForIndexPartition(tenant, indexName, operation) {
|
|
168
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
169
|
+
// we write the index entry into a sublevel-partition of tenantPartition.
|
|
170
|
+
// putting each index entry within a sublevel allows the levelDB system to calculate a gt minKey and lt maxKey for each of the properties
|
|
171
|
+
// this prevents them from clashing, especially when iterating in reverse without iterating through other properties.
|
|
172
|
+
const tenantPartition = yield this.db.partition(tenant);
|
|
173
|
+
const indexPartitionName = IndexLevel.getIndexPartitionName(indexName);
|
|
174
|
+
const partitionOperation = tenantPartition.createPartitionOperation(indexPartitionName, operation);
|
|
175
|
+
return partitionOperation;
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Wraps the given operation as an operation for the messageCid to indexes lookup partition.
|
|
180
|
+
*/
|
|
181
|
+
createOperationForIndexesLookupPartition(tenant, operation) {
|
|
182
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
+
const tenantPartition = yield this.db.partition(tenant);
|
|
184
|
+
const partitionOperation = tenantPartition.createPartitionOperation(INDEX_SUBLEVEL_NAME, operation);
|
|
185
|
+
return partitionOperation;
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
static getIndexPartitionName(indexName) {
|
|
189
|
+
// we create index partition names in __${indexName}__ wrapping so they do not clash with other sublevels that are created for other purposes.
|
|
190
|
+
return `__${indexName}__`;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Gets the index partition of the given indexName.
|
|
194
|
+
*/
|
|
195
|
+
getIndexPartition(tenant, indexName) {
|
|
196
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
197
|
+
const indexPartitionName = IndexLevel.getIndexPartitionName(indexName);
|
|
198
|
+
return (yield this.db.partition(tenant)).partition(indexPartitionName);
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Gets the messageCid to indexes lookup partition.
|
|
203
|
+
*/
|
|
204
|
+
getIndexesLookupPartition(tenant) {
|
|
205
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
206
|
+
return (yield this.db.partition(tenant)).partition(INDEX_SUBLEVEL_NAME);
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Queries the index for items that match the filters. If no filters are provided, all items are returned.
|
|
211
|
+
*
|
|
212
|
+
* @param filters Array of filters that are treated as an OR query.
|
|
213
|
+
* @param queryOptions query options for sort and pagination, requires at least `sortProperty`. The default sort direction is ascending.
|
|
214
|
+
* @param options IndexLevelOptions that include an AbortSignal.
|
|
215
|
+
* @returns {IndexedItem[]} an array of `IndexedItem` that match the given filters.
|
|
216
|
+
*/
|
|
217
|
+
query(tenant, filters, queryOptions, options) {
|
|
218
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
219
|
+
// check if we should query using in-memory paging or iterator paging
|
|
220
|
+
if (IndexLevel.shouldQueryWithInMemoryPaging(filters, queryOptions)) {
|
|
221
|
+
return this.queryWithInMemoryPaging(tenant, filters, queryOptions, options);
|
|
222
|
+
}
|
|
223
|
+
return this.queryWithIteratorPaging(tenant, filters, queryOptions, options);
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Queries the sort property index for items that match the filters. If no filters are provided, all items are returned.
|
|
228
|
+
* This query is a linear iterator over the sorted index, checking each item for a match.
|
|
229
|
+
* If a cursor is provided it starts the iteration from the cursor point.
|
|
230
|
+
*/
|
|
231
|
+
queryWithIteratorPaging(tenant, filters, queryOptions, options) {
|
|
232
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
233
|
+
var _a, e_1, _b, _c;
|
|
234
|
+
const { cursor: queryCursor, limit } = queryOptions;
|
|
235
|
+
// if there is a cursor we fetch the starting key given the sort property, otherwise we start from the beginning of the index.
|
|
236
|
+
const startKey = queryCursor ? this.createStartingKeyFromCursor(queryCursor) : '';
|
|
237
|
+
const matches = [];
|
|
238
|
+
try {
|
|
239
|
+
for (var _d = true, _e = __asyncValues(this.getIndexIterator(tenant, startKey, queryOptions, options)), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
|
|
240
|
+
_c = _f.value;
|
|
241
|
+
_d = false;
|
|
242
|
+
const item = _c;
|
|
243
|
+
if (limit !== undefined && limit === matches.length) {
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
const { indexes } = item;
|
|
247
|
+
if (FilterUtility.matchAnyFilter(indexes, filters)) {
|
|
248
|
+
matches.push(item);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
253
|
+
finally {
|
|
254
|
+
try {
|
|
255
|
+
if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
|
|
256
|
+
}
|
|
257
|
+
finally { if (e_1) throw e_1.error; }
|
|
258
|
+
}
|
|
259
|
+
return matches;
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Creates an AsyncGenerator that returns each sorted index item given a specific sortProperty.
|
|
264
|
+
* If a cursor is passed, the starting value (gt or lt) is derived from that.
|
|
265
|
+
*/
|
|
266
|
+
getIndexIterator(tenant, startKey, queryOptions, options) {
|
|
267
|
+
return __asyncGenerator(this, arguments, function* getIndexIterator_1() {
|
|
268
|
+
var _a, e_2, _b, _c;
|
|
269
|
+
const { sortProperty, sortDirection = SortDirection.Ascending, cursor } = queryOptions;
|
|
270
|
+
const iteratorOptions = {
|
|
271
|
+
gt: startKey
|
|
272
|
+
};
|
|
273
|
+
// if we are sorting in descending order we can iterate in reverse.
|
|
274
|
+
if (sortDirection === SortDirection.Descending) {
|
|
275
|
+
iteratorOptions.reverse = true;
|
|
276
|
+
// if a cursor is provided and we are sorting in descending order, the startKey should be the upper bound.
|
|
277
|
+
if (cursor !== undefined) {
|
|
278
|
+
iteratorOptions.lt = startKey;
|
|
279
|
+
delete iteratorOptions.gt;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
const sortPartition = yield __await(this.getIndexPartition(tenant, sortProperty));
|
|
283
|
+
try {
|
|
284
|
+
for (var _d = true, _e = __asyncValues(sortPartition.iterator(iteratorOptions, options)), _f; _f = yield __await(_e.next()), _a = _f.done, !_a; _d = true) {
|
|
285
|
+
_c = _f.value;
|
|
286
|
+
_d = false;
|
|
287
|
+
const [_, val] = _c;
|
|
288
|
+
const { indexes, messageCid } = JSON.parse(val);
|
|
289
|
+
yield yield __await({ indexes, messageCid });
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
293
|
+
finally {
|
|
294
|
+
try {
|
|
295
|
+
if (!_d && !_a && (_b = _e.return)) yield __await(_b.call(_e));
|
|
296
|
+
}
|
|
297
|
+
finally { if (e_2) throw e_2.error; }
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Creates the starting point for a LevelDB query given an messageCid as a cursor and the indexed property.
|
|
303
|
+
* Used as (gt) for ascending queries, or (lt) for descending queries.
|
|
304
|
+
*/
|
|
305
|
+
createStartingKeyFromCursor(cursor) {
|
|
306
|
+
const { messageCid, value } = cursor;
|
|
307
|
+
return IndexLevel.keySegmentJoin(IndexLevel.encodeValue(value), messageCid);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Returns a PaginationCursor using the last item of a given array of IndexedItems.
|
|
311
|
+
* If the given array is empty, undefined is returned.
|
|
312
|
+
*
|
|
313
|
+
* @throws {DwnError} if the sort property or cursor value is invalid.
|
|
314
|
+
*/
|
|
315
|
+
static createCursorFromLastArrayItem(items, sortProperty) {
|
|
316
|
+
if (items.length > 0) {
|
|
317
|
+
return this.createCursorFromItem(items.at(-1), sortProperty);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Creates a PaginationCursor from a given IndexedItem and sortProperty.
|
|
322
|
+
*
|
|
323
|
+
* @throws {DwnError} if the sort property or cursor value is invalid.
|
|
324
|
+
*/
|
|
325
|
+
static createCursorFromItem(item, sortProperty) {
|
|
326
|
+
const { messageCid, indexes } = item;
|
|
327
|
+
const value = indexes[sortProperty];
|
|
328
|
+
if (value === undefined) {
|
|
329
|
+
throw new DwnError(DwnErrorCode.IndexInvalidCursorSortProperty, `the sort property '${sortProperty}' is not defined within the given item.`);
|
|
330
|
+
}
|
|
331
|
+
// we only support cursors for string or number types
|
|
332
|
+
if (typeof value === 'boolean' || Array.isArray(value)) {
|
|
333
|
+
throw new DwnError(DwnErrorCode.IndexInvalidCursorValueType, `only string or number values are supported for cursors, a(n) ${typeof value} was given.`);
|
|
334
|
+
}
|
|
335
|
+
return { messageCid, value };
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Queries the provided searchFilters asynchronously, returning results that match the matchFilters.
|
|
339
|
+
*
|
|
340
|
+
* @param filters the filters passed to the parent query.
|
|
341
|
+
* @param searchFilters the modified filters used for the LevelDB query to search for a subset of items to match against.
|
|
342
|
+
*
|
|
343
|
+
* @throws {DwnErrorCode.IndexLevelInMemoryInvalidSortProperty} if an invalid sort property is provided.
|
|
344
|
+
*/
|
|
345
|
+
queryWithInMemoryPaging(tenant, filters, queryOptions, options) {
|
|
346
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
347
|
+
const { sortProperty, sortDirection = SortDirection.Ascending, cursor: queryCursor, limit } = queryOptions;
|
|
348
|
+
// we get the cursor start key here so that we match the failing behavior of `queryWithIteratorPaging`
|
|
349
|
+
const cursorStartingKey = queryCursor ? this.createStartingKeyFromCursor(queryCursor) : undefined;
|
|
350
|
+
// we create a matches map so that we can short-circuit matched items within the async single query below.
|
|
351
|
+
const matches = new Map();
|
|
352
|
+
// If the filter is empty, we just give it an empty filter so that we can iterate over all the items later in executeSingleFilterQuery().
|
|
353
|
+
// We could do the iteration here, but it would be duplicating the same logic, so decided to just setup the data structure here.
|
|
354
|
+
if (filters.length === 0) {
|
|
355
|
+
filters = [{}];
|
|
356
|
+
}
|
|
357
|
+
try {
|
|
358
|
+
yield Promise.all(filters.map(filter => {
|
|
359
|
+
return this.executeSingleFilterQuery(tenant, filter, sortProperty, matches, options);
|
|
360
|
+
}));
|
|
361
|
+
}
|
|
362
|
+
catch (error) {
|
|
363
|
+
if (error.code === DwnErrorCode.IndexInvalidSortPropertyInMemory) {
|
|
364
|
+
// return empty results if the sort property is invalid.
|
|
365
|
+
return [];
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
const sortedValues = [...matches.values()].sort((a, b) => this.sortItems(a, b, sortProperty, sortDirection));
|
|
369
|
+
const start = cursorStartingKey !== undefined ? this.findCursorStartingIndex(sortedValues, sortDirection, sortProperty, cursorStartingKey) : 0;
|
|
370
|
+
if (start < 0) {
|
|
371
|
+
// if the provided cursor does not come before any of the results, we return no results
|
|
372
|
+
return [];
|
|
373
|
+
}
|
|
374
|
+
const end = limit !== undefined ? start + limit : undefined;
|
|
375
|
+
return sortedValues.slice(start, end);
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Execute a filtered query against a single filter and return all results.
|
|
380
|
+
*/
|
|
381
|
+
executeSingleFilterQuery(tenant, filter, sortProperty, matches, levelOptions) {
|
|
382
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
383
|
+
// Note: We have an array of Promises in order to support OR (anyOf) matches when given a list of accepted values for a property
|
|
384
|
+
const filterPromises = [];
|
|
385
|
+
// If the filter is empty, then we just iterate over one of the indexes that contains all the records and return all items.
|
|
386
|
+
if (isEmptyObject(filter)) {
|
|
387
|
+
const getAllItemsPromise = this.getAllItems(tenant, sortProperty);
|
|
388
|
+
filterPromises.push(getAllItemsPromise);
|
|
389
|
+
}
|
|
390
|
+
// else the filter is not empty
|
|
391
|
+
const searchFilter = FilterSelector.reduceFilter(filter);
|
|
392
|
+
for (const propertyName in searchFilter) {
|
|
393
|
+
const propertyFilter = searchFilter[propertyName];
|
|
394
|
+
// We will find the union of these many individual queries later.
|
|
395
|
+
if (FilterUtility.isEqualFilter(propertyFilter)) {
|
|
396
|
+
// propertyFilter is an EqualFilter, meaning it is a non-object primitive type
|
|
397
|
+
const exactMatchesPromise = this.filterExactMatches(tenant, propertyName, propertyFilter, levelOptions);
|
|
398
|
+
filterPromises.push(exactMatchesPromise);
|
|
399
|
+
}
|
|
400
|
+
else if (FilterUtility.isOneOfFilter(propertyFilter)) {
|
|
401
|
+
// `propertyFilter` is a OneOfFilter
|
|
402
|
+
// Support OR matches by querying for each values separately, then adding them to the promises array.
|
|
403
|
+
for (const propertyValue of new Set(propertyFilter)) {
|
|
404
|
+
const exactMatchesPromise = this.filterExactMatches(tenant, propertyName, propertyValue, levelOptions);
|
|
405
|
+
filterPromises.push(exactMatchesPromise);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
else if (FilterUtility.isRangeFilter(propertyFilter)) {
|
|
409
|
+
// `propertyFilter` is a `RangeFilter`
|
|
410
|
+
const rangeMatchesPromise = this.filterRangeMatches(tenant, propertyName, propertyFilter, levelOptions);
|
|
411
|
+
filterPromises.push(rangeMatchesPromise);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// acting as an OR match for the property, any of the promises returning a match will be treated as a property match
|
|
415
|
+
for (const promise of filterPromises) {
|
|
416
|
+
const indexItems = yield promise;
|
|
417
|
+
// reminder: the promise returns a list of IndexedItem satisfying a particular property match
|
|
418
|
+
for (const indexedItem of indexItems) {
|
|
419
|
+
// short circuit: if a data is already included to the final matched key set (by a different `Filter`),
|
|
420
|
+
// no need to evaluate if the data satisfies this current filter being evaluated
|
|
421
|
+
// otherwise check that the item is a match.
|
|
422
|
+
if (matches.has(indexedItem.messageCid) || !FilterUtility.matchFilter(indexedItem.indexes, filter)) {
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
// ensure that each matched item has the sortProperty, otherwise fail the entire query.
|
|
426
|
+
if (indexedItem.indexes[sortProperty] === undefined) {
|
|
427
|
+
throw new DwnError(DwnErrorCode.IndexInvalidSortPropertyInMemory, `invalid sort property ${sortProperty}`);
|
|
428
|
+
}
|
|
429
|
+
matches.set(indexedItem.messageCid, indexedItem);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
getAllItems(tenant, sortProperty) {
|
|
435
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
436
|
+
var _a, e_3, _b, _c;
|
|
437
|
+
const filterPartition = yield this.getIndexPartition(tenant, sortProperty);
|
|
438
|
+
const items = [];
|
|
439
|
+
try {
|
|
440
|
+
for (var _d = true, _e = __asyncValues(filterPartition.iterator()), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
|
|
441
|
+
_c = _f.value;
|
|
442
|
+
_d = false;
|
|
443
|
+
const [_key, value] = _c;
|
|
444
|
+
items.push(JSON.parse(value));
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
448
|
+
finally {
|
|
449
|
+
try {
|
|
450
|
+
if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
|
|
451
|
+
}
|
|
452
|
+
finally { if (e_3) throw e_3.error; }
|
|
453
|
+
}
|
|
454
|
+
return items;
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Returns items that match the exact property and value.
|
|
459
|
+
*/
|
|
460
|
+
filterExactMatches(tenant, propertyName, propertyValue, options) {
|
|
461
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
462
|
+
var _a, e_4, _b, _c;
|
|
463
|
+
const matchPrefix = IndexLevel.keySegmentJoin(IndexLevel.encodeValue(propertyValue));
|
|
464
|
+
const iteratorOptions = {
|
|
465
|
+
gt: matchPrefix
|
|
466
|
+
};
|
|
467
|
+
const filterPartition = yield this.getIndexPartition(tenant, propertyName);
|
|
468
|
+
const matches = [];
|
|
469
|
+
try {
|
|
470
|
+
for (var _d = true, _e = __asyncValues(filterPartition.iterator(iteratorOptions, options)), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
|
|
471
|
+
_c = _f.value;
|
|
472
|
+
_d = false;
|
|
473
|
+
const [key, value] = _c;
|
|
474
|
+
// immediately stop if we arrive at an index that contains a different property value
|
|
475
|
+
if (!key.startsWith(matchPrefix)) {
|
|
476
|
+
break;
|
|
477
|
+
}
|
|
478
|
+
matches.push(JSON.parse(value));
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
482
|
+
finally {
|
|
483
|
+
try {
|
|
484
|
+
if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
|
|
485
|
+
}
|
|
486
|
+
finally { if (e_4) throw e_4.error; }
|
|
487
|
+
}
|
|
488
|
+
return matches;
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Returns items that match the range filter.
|
|
493
|
+
*/
|
|
494
|
+
filterRangeMatches(tenant, propertyName, rangeFilter, options) {
|
|
495
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
496
|
+
var _a, e_5, _b, _c;
|
|
497
|
+
const iteratorOptions = {};
|
|
498
|
+
for (const comparator in rangeFilter) {
|
|
499
|
+
const comparatorName = comparator;
|
|
500
|
+
iteratorOptions[comparatorName] = IndexLevel.encodeValue(rangeFilter[comparatorName]);
|
|
501
|
+
}
|
|
502
|
+
// if there is no lower bound specified (`gt` or `gte`), we need to iterate from the upper bound,
|
|
503
|
+
// so that we will iterate over all the matches before hitting mismatches.
|
|
504
|
+
if (iteratorOptions.gt === undefined && iteratorOptions.gte === undefined) {
|
|
505
|
+
iteratorOptions.reverse = true;
|
|
506
|
+
}
|
|
507
|
+
const matches = [];
|
|
508
|
+
const filterPartition = yield this.getIndexPartition(tenant, propertyName);
|
|
509
|
+
try {
|
|
510
|
+
for (var _d = true, _e = __asyncValues(filterPartition.iterator(iteratorOptions, options)), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) {
|
|
511
|
+
_c = _f.value;
|
|
512
|
+
_d = false;
|
|
513
|
+
const [key, value] = _c;
|
|
514
|
+
// if "greater-than" is specified, skip all keys that contains the exact value given in the "greater-than" condition
|
|
515
|
+
if ('gt' in rangeFilter && this.extractIndexValueFromKey(key) === IndexLevel.encodeValue(rangeFilter.gt)) {
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
518
|
+
matches.push(JSON.parse(value));
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
522
|
+
finally {
|
|
523
|
+
try {
|
|
524
|
+
if (!_d && !_a && (_b = _e.return)) yield _b.call(_e);
|
|
525
|
+
}
|
|
526
|
+
finally { if (e_5) throw e_5.error; }
|
|
527
|
+
}
|
|
528
|
+
if ('lte' in rangeFilter) {
|
|
529
|
+
// When `lte` is used, we must also query the exact match explicitly because the exact match will not be included in the iterator above.
|
|
530
|
+
// This is due to the extra data appended to the (property + value) key prefix, e.g.
|
|
531
|
+
// the key '"2023-05-25T11:22:33.000000Z"\u0000bayfreigu....'
|
|
532
|
+
// would be considered greater than `lte` value in { lte: '"2023-05-25T11:22:33.000000Z"' } iterator options,
|
|
533
|
+
// thus would not be included in the iterator even though we'd like it to be.
|
|
534
|
+
for (const item of yield this.filterExactMatches(tenant, propertyName, rangeFilter.lte, options)) {
|
|
535
|
+
matches.push(item);
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
return matches;
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Sorts Items lexicographically in ascending or descending order given a specific indexName, using the messageCid as a tie breaker.
|
|
543
|
+
* We know the indexes include the indexName and they are only of string or number type and not Arrays or booleans.
|
|
544
|
+
* because they have already been checked within executeSingleFilterQuery.
|
|
545
|
+
*/
|
|
546
|
+
sortItems(itemA, itemB, indexName, direction) {
|
|
547
|
+
const itemAValue = itemA.indexes[indexName];
|
|
548
|
+
const itemBValue = itemB.indexes[indexName];
|
|
549
|
+
const aCompareValue = IndexLevel.encodeValue(itemAValue) + itemA.messageCid;
|
|
550
|
+
const bCompareValue = IndexLevel.encodeValue(itemBValue) + itemB.messageCid;
|
|
551
|
+
return direction === SortDirection.Ascending ?
|
|
552
|
+
lexicographicalCompare(aCompareValue, bCompareValue) :
|
|
553
|
+
lexicographicalCompare(bCompareValue, aCompareValue);
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Find the starting position for pagination within the IndexedItem array.
|
|
557
|
+
* Returns the index of the first item found which is either greater than or less than the given cursor, depending on sort order.
|
|
558
|
+
*/
|
|
559
|
+
findCursorStartingIndex(items, sortDirection, sortProperty, cursorStartingKey) {
|
|
560
|
+
const firstItemAfterCursor = (item) => {
|
|
561
|
+
const { messageCid, indexes } = item;
|
|
562
|
+
const sortValue = indexes[sortProperty];
|
|
563
|
+
const itemCompareValue = IndexLevel.keySegmentJoin(IndexLevel.encodeValue(sortValue), messageCid);
|
|
564
|
+
return sortDirection === SortDirection.Ascending ?
|
|
565
|
+
itemCompareValue > cursorStartingKey :
|
|
566
|
+
itemCompareValue < cursorStartingKey;
|
|
567
|
+
};
|
|
568
|
+
return items.findIndex(firstItemAfterCursor);
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* Gets the indexes given an messageCid. This is a reverse lookup to construct starting keys, as well as deleting indexed items.
|
|
572
|
+
*/
|
|
573
|
+
getIndexes(tenant, messageCid) {
|
|
574
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
575
|
+
const indexesLookupPartition = yield this.getIndexesLookupPartition(tenant);
|
|
576
|
+
const serializedIndexes = yield indexesLookupPartition.get(messageCid);
|
|
577
|
+
if (serializedIndexes === undefined) {
|
|
578
|
+
// invalid messageCid
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
return JSON.parse(serializedIndexes);
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* Given a key from an indexed partitioned property key.
|
|
586
|
+
* ex:
|
|
587
|
+
* key: '"2023-05-25T11:22:33.000000Z"\u0000bayfreigu....'
|
|
588
|
+
* returns "2023-05-25T11:22:33.000000Z"
|
|
589
|
+
*/
|
|
590
|
+
extractIndexValueFromKey(key) {
|
|
591
|
+
const [value] = key.split(IndexLevel.delimiter);
|
|
592
|
+
return value;
|
|
593
|
+
}
|
|
594
|
+
static keySegmentJoin(...values) {
|
|
595
|
+
return values.join(IndexLevel.delimiter);
|
|
596
|
+
}
|
|
597
|
+
/**
|
|
598
|
+
* Encodes a numerical value as a string for lexicographical comparison.
|
|
599
|
+
* If the number is positive it simply pads it with leading zeros.
|
|
600
|
+
* ex.: input: 1024 => "0000000000001024"
|
|
601
|
+
* input: -1024 => "!9007199254739967"
|
|
602
|
+
*
|
|
603
|
+
* @param value the number to encode.
|
|
604
|
+
* @returns a string representation of the number.
|
|
605
|
+
*/
|
|
606
|
+
static encodeNumberValue(value) {
|
|
607
|
+
const NEGATIVE_OFFSET = Number.MAX_SAFE_INTEGER;
|
|
608
|
+
const NEGATIVE_PREFIX = '!'; // this will be sorted below positive numbers lexicographically
|
|
609
|
+
const PADDING_LENGTH = String(Number.MAX_SAFE_INTEGER).length;
|
|
610
|
+
const prefix = value < 0 ? NEGATIVE_PREFIX : '';
|
|
611
|
+
const offset = value < 0 ? NEGATIVE_OFFSET : 0;
|
|
612
|
+
return prefix + String(value + offset).padStart(PADDING_LENGTH, '0');
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Encodes an indexed value to a string
|
|
616
|
+
*
|
|
617
|
+
* NOTE: we currently only use this for strings, numbers and booleans.
|
|
618
|
+
*/
|
|
619
|
+
static encodeValue(value) {
|
|
620
|
+
switch (typeof value) {
|
|
621
|
+
case 'number':
|
|
622
|
+
return this.encodeNumberValue(value);
|
|
623
|
+
default:
|
|
624
|
+
return JSON.stringify(value);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
static shouldQueryWithInMemoryPaging(filters, queryOptions) {
|
|
628
|
+
for (const filter of filters) {
|
|
629
|
+
if (!IndexLevel.isFilterConcise(filter, queryOptions)) {
|
|
630
|
+
return false;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
// only use in-memory paging if all filters are concise
|
|
634
|
+
return true;
|
|
635
|
+
}
|
|
636
|
+
static isFilterConcise(filter, queryOptions) {
|
|
637
|
+
// if there is a specific recordId in the filter, return true immediately.
|
|
638
|
+
if (filter.recordId !== undefined) {
|
|
639
|
+
return true;
|
|
640
|
+
}
|
|
641
|
+
// unless a recordId is present, if there is a cursor we never use in memory paging
|
|
642
|
+
if (queryOptions.cursor !== undefined) {
|
|
643
|
+
return false;
|
|
644
|
+
}
|
|
645
|
+
// NOTE: remaining conditions will not have cursor
|
|
646
|
+
if (filter.protocolPath !== undefined ||
|
|
647
|
+
filter.contextId !== undefined ||
|
|
648
|
+
filter.parentId !== undefined ||
|
|
649
|
+
filter.schema !== undefined) {
|
|
650
|
+
return true;
|
|
651
|
+
}
|
|
652
|
+
// all else
|
|
653
|
+
return false;
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
/**
|
|
657
|
+
* Joins the given values using the `\x00` (\u0000) character.
|
|
658
|
+
*/
|
|
659
|
+
IndexLevel.delimiter = `\x00`;
|
|
660
|
+
//# sourceMappingURL=index-level.js.map
|