@abaxxtech/id 0.0.0
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 +31 -0
- package/README.npm.md +31 -0
- package/dist/bundles/dwn.js +83 -0
- package/dist/cjs/index.js +31250 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/generated/precompiled-validators.js +7820 -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 +37 -0
- package/dist/esm/src/core/abstract-message.js.map +1 -0
- package/dist/esm/src/core/auth.js +97 -0
- package/dist/esm/src/core/auth.js.map +1 -0
- package/dist/esm/src/core/dwn-constant.js +8 -0
- package/dist/esm/src/core/dwn-constant.js.map +1 -0
- package/dist/esm/src/core/dwn-error.js +138 -0
- package/dist/esm/src/core/dwn-error.js.map +1 -0
- package/dist/esm/src/core/grant-authorization.js +108 -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 +200 -0
- package/dist/esm/src/core/message.js.map +1 -0
- package/dist/esm/src/core/protocol-authorization.js +449 -0
- package/dist/esm/src/core/protocol-authorization.js.map +1 -0
- package/dist/esm/src/core/records-grant-authorization.js +106 -0
- package/dist/esm/src/core/records-grant-authorization.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/did/did-dht-resolver.js +241 -0
- package/dist/esm/src/did/did-dht-resolver.js.map +1 -0
- package/dist/esm/src/did/did-ion-resolver.js +53 -0
- package/dist/esm/src/did/did-ion-resolver.js.map +1 -0
- package/dist/esm/src/did/did-key-resolver.js +135 -0
- package/dist/esm/src/did/did-key-resolver.js.map +1 -0
- package/dist/esm/src/did/did-resolver.js +70 -0
- package/dist/esm/src/did/did-resolver.js.map +1 -0
- package/dist/esm/src/did/did.js +36 -0
- package/dist/esm/src/did/did.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 +22 -0
- package/dist/esm/src/enums/dwn-interface-method.js.map +1 -0
- package/dist/esm/src/event-log/event-log-level.js +112 -0
- package/dist/esm/src/event-log/event-log-level.js.map +1 -0
- package/dist/esm/src/handlers/events-get.js +48 -0
- package/dist/esm/src/handlers/events-get.js.map +1 -0
- package/dist/esm/src/handlers/messages-get.js +76 -0
- package/dist/esm/src/handlers/messages-get.js.map +1 -0
- package/dist/esm/src/handlers/permissions-grant.js +62 -0
- package/dist/esm/src/handlers/permissions-grant.js.map +1 -0
- package/dist/esm/src/handlers/permissions-request.js +63 -0
- package/dist/esm/src/handlers/permissions-request.js.map +1 -0
- package/dist/esm/src/handlers/permissions-revoke.js +114 -0
- package/dist/esm/src/handlers/permissions-revoke.js.map +1 -0
- package/dist/esm/src/handlers/protocols-configure.js +102 -0
- package/dist/esm/src/handlers/protocols-configure.js.map +1 -0
- package/dist/esm/src/handlers/protocols-query.js +72 -0
- package/dist/esm/src/handlers/protocols-query.js.map +1 -0
- package/dist/esm/src/handlers/records-delete.js +119 -0
- package/dist/esm/src/handlers/records-delete.js.map +1 -0
- package/dist/esm/src/handlers/records-query.js +206 -0
- package/dist/esm/src/handlers/records-query.js.map +1 -0
- package/dist/esm/src/handlers/records-read.js +118 -0
- package/dist/esm/src/handlers/records-read.js.map +1 -0
- package/dist/esm/src/handlers/records-write.js +252 -0
- package/dist/esm/src/handlers/records-write.js.map +1 -0
- package/dist/esm/src/index.js +43 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/interfaces/events-get.js +41 -0
- package/dist/esm/src/interfaces/events-get.js.map +1 -0
- package/dist/esm/src/interfaces/messages-get.js +58 -0
- package/dist/esm/src/interfaces/messages-get.js.map +1 -0
- package/dist/esm/src/interfaces/permissions-grant.js +130 -0
- package/dist/esm/src/interfaces/permissions-grant.js.map +1 -0
- package/dist/esm/src/interfaces/permissions-request.js +47 -0
- package/dist/esm/src/interfaces/permissions-request.js.map +1 -0
- package/dist/esm/src/interfaces/permissions-revoke.js +47 -0
- package/dist/esm/src/interfaces/permissions-revoke.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-configure.js +149 -0
- package/dist/esm/src/interfaces/protocols-configure.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-query.js +80 -0
- package/dist/esm/src/interfaces/protocols-query.js.map +1 -0
- package/dist/esm/src/interfaces/records-delete.js +56 -0
- package/dist/esm/src/interfaces/records-delete.js.map +1 -0
- package/dist/esm/src/interfaces/records-query.js +81 -0
- package/dist/esm/src/interfaces/records-query.js.map +1 -0
- package/dist/esm/src/interfaces/records-read.js +65 -0
- package/dist/esm/src/interfaces/records-read.js.map +1 -0
- package/dist/esm/src/interfaces/records-write.js +677 -0
- package/dist/esm/src/interfaces/records-write.js.map +1 -0
- package/dist/esm/src/jose/algorithms/signing/ed25519.js +54 -0
- package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -0
- package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js +13 -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/signer.js +36 -0
- package/dist/esm/src/jose/jws/general/signer.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/schema-validator.js +28 -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/data-store-level.js +192 -0
- package/dist/esm/src/store/data-store-level.js.map +1 -0
- package/dist/esm/src/store/index-level.js +302 -0
- package/dist/esm/src/store/index-level.js.map +1 -0
- package/dist/esm/src/store/level-wrapper.js +296 -0
- package/dist/esm/src/store/level-wrapper.js.map +1 -0
- package/dist/esm/src/store/message-store-level.js +236 -0
- package/dist/esm/src/store/message-store-level.js.map +1 -0
- package/dist/esm/src/store/storage-controller.js +69 -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/delegated-grant-message.js +2 -0
- package/dist/esm/src/types/delegated-grant-message.js.map +1 -0
- package/dist/esm/src/types/did-types.js +2 -0
- package/dist/esm/src/types/did-types.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/event-types.js +2 -0
- package/dist/esm/src/types/event-types.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 +6 -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/permissions-grant-descriptor.js +6 -0
- package/dist/esm/src/types/permissions-grant-descriptor.js.map +1 -0
- package/dist/esm/src/types/permissions-types.js +2 -0
- package/dist/esm/src/types/permissions-types.js.map +1 -0
- package/dist/esm/src/types/protocols-types.js +15 -0
- package/dist/esm/src/types/protocols-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/signer.js +2 -0
- package/dist/esm/src/types/signer.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 +88 -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/hd-key.js +60 -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/object.js +50 -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 +267 -0
- package/dist/esm/src/utils/records.js.map +1 -0
- package/dist/esm/src/utils/secp256k1.js +219 -0
- package/dist/esm/src/utils/secp256k1.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 +84 -0
- package/dist/esm/src/utils/time.js.map +1 -0
- package/dist/esm/src/utils/url.js +63 -0
- package/dist/esm/src/utils/url.js.map +1 -0
- package/dist/esm/tests/core/auth.spec.js +25 -0
- package/dist/esm/tests/core/auth.spec.js.map +1 -0
- package/dist/esm/tests/core/message-reply.spec.js +19 -0
- package/dist/esm/tests/core/message-reply.spec.js.map +1 -0
- package/dist/esm/tests/core/message.spec.js +85 -0
- package/dist/esm/tests/core/message.spec.js.map +1 -0
- package/dist/esm/tests/did/did-ion-resolver.spec.js +82 -0
- package/dist/esm/tests/did/did-ion-resolver.spec.js.map +1 -0
- package/dist/esm/tests/did/did-key-resolver.spec.js +74 -0
- package/dist/esm/tests/did/did-key-resolver.spec.js.map +1 -0
- package/dist/esm/tests/did/did-resolver.spec.js +84 -0
- package/dist/esm/tests/did/did-resolver.spec.js.map +1 -0
- package/dist/esm/tests/did/did.spec.js +22 -0
- package/dist/esm/tests/did/did.spec.js.map +1 -0
- package/dist/esm/tests/dwn.spec.js +252 -0
- package/dist/esm/tests/dwn.spec.js.map +1 -0
- package/dist/esm/tests/end-to-end-tests.spec.js +218 -0
- package/dist/esm/tests/end-to-end-tests.spec.js.map +1 -0
- package/dist/esm/tests/event-log/event-log-level.spec.js +137 -0
- package/dist/esm/tests/event-log/event-log-level.spec.js.map +1 -0
- package/dist/esm/tests/handlers/events-get.spec.js +108 -0
- package/dist/esm/tests/handlers/events-get.spec.js.map +1 -0
- package/dist/esm/tests/handlers/messages-get.spec.js +209 -0
- package/dist/esm/tests/handlers/messages-get.spec.js.map +1 -0
- package/dist/esm/tests/handlers/permissions-grant.spec.js +249 -0
- package/dist/esm/tests/handlers/permissions-grant.spec.js.map +1 -0
- package/dist/esm/tests/handlers/permissions-request.spec.js +132 -0
- package/dist/esm/tests/handlers/permissions-request.spec.js.map +1 -0
- package/dist/esm/tests/handlers/permissions-revoke.spec.js +311 -0
- package/dist/esm/tests/handlers/permissions-revoke.spec.js.map +1 -0
- package/dist/esm/tests/handlers/protocols-configure.spec.js +254 -0
- package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -0
- package/dist/esm/tests/handlers/protocols-query.spec.js +373 -0
- package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-delete.spec.js +630 -0
- package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-query.spec.js +1937 -0
- package/dist/esm/tests/handlers/records-query.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-read.spec.js +1729 -0
- package/dist/esm/tests/handlers/records-read.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-write.spec.js +3381 -0
- package/dist/esm/tests/handlers/records-write.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/events-get.spec.js +73 -0
- package/dist/esm/tests/interfaces/events-get.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/messages-get.spec.js +93 -0
- package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/permissions-grant.spec.js +216 -0
- package/dist/esm/tests/interfaces/permissions-grant.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/permissions-request.spec.js +45 -0
- package/dist/esm/tests/interfaces/permissions-request.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/protocols-configure.spec.js +334 -0
- package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/protocols-query.spec.js +49 -0
- package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-delete.spec.js +42 -0
- package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-query.spec.js +75 -0
- package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-read.spec.js +65 -0
- package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -0
- package/dist/esm/tests/interfaces/records-write.spec.js +369 -0
- package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -0
- package/dist/esm/tests/jose/jws/general.spec.js +185 -0
- package/dist/esm/tests/jose/jws/general.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/delegated-grant.spec.js +490 -0
- package/dist/esm/tests/scenarios/delegated-grant.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +218 -0
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -0
- package/dist/esm/tests/store/data-store-level.spec.js +192 -0
- package/dist/esm/tests/store/data-store-level.spec.js.map +1 -0
- package/dist/esm/tests/store/index-level.spec.js +428 -0
- package/dist/esm/tests/store/index-level.spec.js.map +1 -0
- package/dist/esm/tests/store/message-store-level.spec.js +51 -0
- package/dist/esm/tests/store/message-store-level.spec.js.map +1 -0
- package/dist/esm/tests/store/message-store.spec.js +395 -0
- package/dist/esm/tests/store/message-store.spec.js.map +1 -0
- package/dist/esm/tests/store-dependent-tests.spec.js +8 -0
- package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -0
- package/dist/esm/tests/test-stores.js +40 -0
- package/dist/esm/tests/test-stores.js.map +1 -0
- package/dist/esm/tests/test-suite.js +51 -0
- package/dist/esm/tests/test-suite.js.map +1 -0
- package/dist/esm/tests/utils/cid.spec.js +83 -0
- package/dist/esm/tests/utils/cid.spec.js.map +1 -0
- package/dist/esm/tests/utils/data-stream.spec.js +30 -0
- package/dist/esm/tests/utils/data-stream.spec.js.map +1 -0
- package/dist/esm/tests/utils/encryption.spec.js +151 -0
- package/dist/esm/tests/utils/encryption.spec.js.map +1 -0
- package/dist/esm/tests/utils/jws.spec.js +11 -0
- package/dist/esm/tests/utils/jws.spec.js.map +1 -0
- package/dist/esm/tests/utils/memory-cache.spec.js +38 -0
- package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -0
- package/dist/esm/tests/utils/object.spec.js +39 -0
- package/dist/esm/tests/utils/object.spec.js.map +1 -0
- package/dist/esm/tests/utils/private-key-signer.spec.js +47 -0
- package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -0
- package/dist/esm/tests/utils/records.spec.js +56 -0
- package/dist/esm/tests/utils/records.spec.js.map +1 -0
- package/dist/esm/tests/utils/secp256k1.spec.js +77 -0
- package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -0
- package/dist/esm/tests/utils/test-data-generator.js +570 -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 +67 -0
- package/dist/esm/tests/utils/time.spec.js.map +1 -0
- package/dist/esm/tests/utils/url.spec.js +46 -0
- package/dist/esm/tests/utils/url.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js +36 -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 +53 -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 +39 -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 +76 -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 +74 -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 +151 -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 +389 -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 +25 -0
- package/dist/esm/tests/vectors/protocol-definitions/author-can.json +32 -0
- package/dist/esm/tests/vectors/protocol-definitions/chat.json +56 -0
- package/dist/esm/tests/vectors/protocol-definitions/credential-issuance.json +37 -0
- package/dist/esm/tests/vectors/protocol-definitions/dex.json +52 -0
- package/dist/esm/tests/vectors/protocol-definitions/email.json +50 -0
- package/dist/esm/tests/vectors/protocol-definitions/free-for-all.json +30 -0
- package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +48 -0
- package/dist/esm/tests/vectors/protocol-definitions/message.json +20 -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 +13 -0
- package/dist/esm/tests/vectors/protocol-definitions/recipient-can.json +36 -0
- package/dist/esm/tests/vectors/protocol-definitions/social-media.json +88 -0
- package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +68 -0
- package/dist/types/generated/precompiled-validators.d.ts +113 -0
- package/dist/types/generated/precompiled-validators.d.ts.map +1 -0
- package/dist/types/src/core/abstract-message.d.ts +19 -0
- package/dist/types/src/core/abstract-message.d.ts.map +1 -0
- package/dist/types/src/core/auth.d.ts +30 -0
- package/dist/types/src/core/auth.d.ts.map +1 -0
- package/dist/types/src/core/dwn-constant.d.ts +8 -0
- package/dist/types/src/core/dwn-constant.d.ts.map +1 -0
- package/dist/types/src/core/dwn-error.d.ts +133 -0
- package/dist/types/src/core/dwn-error.d.ts.map +1 -0
- package/dist/types/src/core/grant-authorization.d.ts +35 -0
- package/dist/types/src/core/grant-authorization.d.ts.map +1 -0
- package/dist/types/src/core/message-reply.d.ts +33 -0
- package/dist/types/src/core/message-reply.d.ts.map +1 -0
- package/dist/types/src/core/message.d.ts +79 -0
- package/dist/types/src/core/message.d.ts.map +1 -0
- package/dist/types/src/core/protocol-authorization.d.ts +85 -0
- package/dist/types/src/core/protocol-authorization.d.ts.map +1 -0
- package/dist/types/src/core/records-grant-authorization.d.ts +38 -0
- package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -0
- package/dist/types/src/core/tenant-gate.d.ts +16 -0
- package/dist/types/src/core/tenant-gate.d.ts.map +1 -0
- package/dist/types/src/did/did-dht-resolver.d.ts +26 -0
- package/dist/types/src/did/did-dht-resolver.d.ts.map +1 -0
- package/dist/types/src/did/did-ion-resolver.d.ts +20 -0
- package/dist/types/src/did/did-ion-resolver.d.ts.map +1 -0
- package/dist/types/src/did/did-key-resolver.d.ts +32 -0
- package/dist/types/src/did/did-key-resolver.d.ts.map +1 -0
- package/dist/types/src/did/did-resolver.d.ts +20 -0
- package/dist/types/src/did/did-resolver.d.ts.map +1 -0
- package/dist/types/src/did/did.d.ts +15 -0
- package/dist/types/src/did/did.d.ts.map +1 -0
- package/dist/types/src/dwn.d.ts +74 -0
- package/dist/types/src/dwn.d.ts.map +1 -0
- package/dist/types/src/enums/dwn-interface-method.d.ts +20 -0
- package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -0
- package/dist/types/src/event-log/event-log-level.d.ts +26 -0
- package/dist/types/src/event-log/event-log-level.d.ts.map +1 -0
- package/dist/types/src/handlers/events-get.d.ts +16 -0
- package/dist/types/src/handlers/events-get.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-get.d.ts +18 -0
- package/dist/types/src/handlers/messages-get.d.ts.map +1 -0
- package/dist/types/src/handlers/permissions-grant.d.ts +17 -0
- package/dist/types/src/handlers/permissions-grant.d.ts.map +1 -0
- package/dist/types/src/handlers/permissions-request.d.ts +17 -0
- package/dist/types/src/handlers/permissions-request.d.ts.map +1 -0
- package/dist/types/src/handlers/permissions-revoke.d.ts +17 -0
- package/dist/types/src/handlers/permissions-revoke.d.ts.map +1 -0
- package/dist/types/src/handlers/protocols-configure.d.ts +21 -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 +22 -0
- package/dist/types/src/handlers/records-delete.d.ts.map +1 -0
- package/dist/types/src/handlers/records-query.d.ts +78 -0
- package/dist/types/src/handlers/records-query.d.ts.map +1 -0
- package/dist/types/src/handlers/records-read.d.ts +17 -0
- package/dist/types/src/handlers/records-read.d.ts.map +1 -0
- package/dist/types/src/handlers/records-write.d.ts +61 -0
- package/dist/types/src/handlers/records-write.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +72 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/interfaces/events-get.d.ts +13 -0
- package/dist/types/src/interfaces/events-get.d.ts.map +1 -0
- package/dist/types/src/interfaces/messages-get.d.ts +19 -0
- package/dist/types/src/interfaces/messages-get.d.ts.map +1 -0
- package/dist/types/src/interfaces/permissions-grant.d.ts +59 -0
- package/dist/types/src/interfaces/permissions-grant.d.ts.map +1 -0
- package/dist/types/src/interfaces/permissions-request.d.ts +19 -0
- package/dist/types/src/interfaces/permissions-request.d.ts.map +1 -0
- package/dist/types/src/interfaces/permissions-revoke.d.ts +14 -0
- package/dist/types/src/interfaces/permissions-revoke.d.ts.map +1 -0
- package/dist/types/src/interfaces/protocols-configure.d.ts +21 -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 +24 -0
- package/dist/types/src/interfaces/records-delete.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-query.d.ts +29 -0
- package/dist/types/src/interfaces/records-query.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-read.d.ts +31 -0
- package/dist/types/src/interfaces/records-read.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-write.d.ts +259 -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/signer.d.ts +8 -0
- package/dist/types/src/jose/jws/general/signer.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/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 +35 -0
- package/dist/types/src/store/blockstore-level.d.ts.map +1 -0
- package/dist/types/src/store/data-store-level.d.ts +44 -0
- package/dist/types/src/store/data-store-level.d.ts.map +1 -0
- package/dist/types/src/store/index-level.d.ts +69 -0
- package/dist/types/src/store/index-level.d.ts.map +1 -0
- package/dist/types/src/store/level-wrapper.d.ts +44 -0
- package/dist/types/src/store/level-wrapper.d.ts.map +1 -0
- package/dist/types/src/store/message-store-level.d.ts +70 -0
- package/dist/types/src/store/message-store-level.d.ts.map +1 -0
- package/dist/types/src/store/storage-controller.d.ts +19 -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 +69 -0
- package/dist/types/src/types/data-store.d.ts.map +1 -0
- package/dist/types/src/types/delegated-grant-message.d.ts +14 -0
- package/dist/types/src/types/delegated-grant-message.d.ts.map +1 -0
- package/dist/types/src/types/did-types.d.ts +68 -0
- package/dist/types/src/types/did-types.d.ts.map +1 -0
- package/dist/types/src/types/event-log.d.ts +39 -0
- package/dist/types/src/types/event-log.d.ts.map +1 -0
- package/dist/types/src/types/event-types.d.ts +18 -0
- package/dist/types/src/types/event-types.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 +22 -0
- package/dist/types/src/types/message-interface.d.ts.map +1 -0
- package/dist/types/src/types/message-store.d.ts +43 -0
- package/dist/types/src/types/message-store.d.ts.map +1 -0
- package/dist/types/src/types/message-types.d.ts +113 -0
- package/dist/types/src/types/message-types.d.ts.map +1 -0
- package/dist/types/src/types/messages-types.d.ts +23 -0
- package/dist/types/src/types/messages-types.d.ts.map +1 -0
- package/dist/types/src/types/method-handler.d.ts +17 -0
- package/dist/types/src/types/method-handler.d.ts.map +1 -0
- package/dist/types/src/types/permissions-grant-descriptor.d.ts +65 -0
- package/dist/types/src/types/permissions-grant-descriptor.d.ts.map +1 -0
- package/dist/types/src/types/permissions-types.d.ts +33 -0
- package/dist/types/src/types/permissions-types.d.ts.map +1 -0
- package/dist/types/src/types/protocols-types.d.ts +138 -0
- package/dist/types/src/types/protocols-types.d.ts.map +1 -0
- package/dist/types/src/types/records-types.d.ts +164 -0
- package/dist/types/src/types/records-types.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/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 +27 -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/hd-key.d.ts +35 -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/object.d.ts +18 -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 +68 -0
- package/dist/types/src/utils/records.d.ts.map +1 -0
- package/dist/types/src/utils/secp256k1.d.ts +78 -0
- package/dist/types/src/utils/secp256k1.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 +49 -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/did/did-ion-resolver.spec.d.ts +2 -0
- package/dist/types/tests/did/did-ion-resolver.spec.d.ts.map +1 -0
- package/dist/types/tests/did/did-key-resolver.spec.d.ts +2 -0
- package/dist/types/tests/did/did-key-resolver.spec.d.ts.map +1 -0
- package/dist/types/tests/did/did-resolver.spec.d.ts +2 -0
- package/dist/types/tests/did/did-resolver.spec.d.ts.map +1 -0
- package/dist/types/tests/did/did.spec.d.ts +2 -0
- package/dist/types/tests/did/did.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/end-to-end-tests.spec.d.ts +2 -0
- package/dist/types/tests/end-to-end-tests.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/handlers/events-get.spec.d.ts +2 -0
- package/dist/types/tests/handlers/events-get.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/messages-get.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-get.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/permissions-grant.spec.d.ts +2 -0
- package/dist/types/tests/handlers/permissions-grant.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/permissions-request.spec.d.ts +2 -0
- package/dist/types/tests/handlers/permissions-request.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/permissions-revoke.spec.d.ts +2 -0
- package/dist/types/tests/handlers/permissions-revoke.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-write.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/events-get.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/events-get.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/permissions-grant.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/permissions-grant.spec.d.ts.map +1 -0
- package/dist/types/tests/interfaces/permissions-request.spec.d.ts +2 -0
- package/dist/types/tests/interfaces/permissions-request.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-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/scenarios/delegated-grant.spec.d.ts +2 -0
- package/dist/types/tests/scenarios/delegated-grant.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/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-stores.d.ts +30 -0
- package/dist/types/tests/test-stores.d.ts.map +1 -0
- package/dist/types/tests/test-suite.d.ts +16 -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/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/object.spec.d.ts +2 -0
- package/dist/types/tests/utils/object.spec.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/test-data-generator.d.ts +323 -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 +156 -0
- package/src/core/abstract-message.ts +48 -0
- package/src/core/auth.ts +108 -0
- package/src/core/dwn-constant.ts +7 -0
- package/src/core/dwn-error.ts +136 -0
- package/src/core/grant-authorization.ts +163 -0
- package/src/core/message-reply.ts +42 -0
- package/src/core/message.ts +224 -0
- package/src/core/protocol-authorization.ts +691 -0
- package/src/core/records-grant-authorization.ts +167 -0
- package/src/core/tenant-gate.ts +18 -0
- package/src/did/did-dht-resolver.ts +241 -0
- package/src/did/did-ion-resolver.ts +52 -0
- package/src/did/did-key-resolver.ts +137 -0
- package/src/did/did-resolver.ts +77 -0
- package/src/did/did.ts +39 -0
- package/src/dwn.ts +213 -0
- package/src/enums/dwn-interface-method.ts +20 -0
- package/src/event-log/event-log-level.ts +116 -0
- package/src/handlers/events-get.ts +46 -0
- package/src/handlers/messages-get.ts +80 -0
- package/src/handlers/permissions-grant.ts +52 -0
- package/src/handlers/permissions-request.ts +54 -0
- package/src/handlers/permissions-revoke.ts +121 -0
- package/src/handlers/protocols-configure.ts +104 -0
- package/src/handlers/protocols-query.ts +81 -0
- package/src/handlers/records-delete.ts +139 -0
- package/src/handlers/records-query.ts +253 -0
- package/src/handlers/records-read.ts +127 -0
- package/src/handlers/records-write.ts +296 -0
- package/src/index.ts +81 -0
- package/src/interfaces/events-get.ts +43 -0
- package/src/interfaces/messages-get.ts +59 -0
- package/src/interfaces/permissions-grant.ts +175 -0
- package/src/interfaces/permissions-request.ts +55 -0
- package/src/interfaces/permissions-revoke.ts +46 -0
- package/src/interfaces/protocols-configure.ts +188 -0
- package/src/interfaces/protocols-query.ts +99 -0
- package/src/interfaces/records-delete.ts +67 -0
- package/src/interfaces/records-query.ts +100 -0
- package/src/interfaces/records-read.ts +82 -0
- package/src/interfaces/records-write.ts +924 -0
- package/src/jose/algorithms/signing/ed25519.ts +61 -0
- package/src/jose/algorithms/signing/signature-algorithms.ts +15 -0
- package/src/jose/jws/general/builder.ts +48 -0
- package/src/jose/jws/general/signer.ts +29 -0
- package/src/jose/jws/general/verifier.ts +113 -0
- package/src/schema-validator.ts +34 -0
- package/src/store/blockstore-level.ts +113 -0
- package/src/store/data-store-level.ts +188 -0
- package/src/store/index-level.ts +306 -0
- package/src/store/level-wrapper.ts +262 -0
- package/src/store/message-store-level.ts +284 -0
- package/src/store/storage-controller.ts +80 -0
- package/src/types/cache.ts +16 -0
- package/src/types/data-store.ts +78 -0
- package/src/types/delegated-grant-message.ts +15 -0
- package/src/types/did-types.ts +95 -0
- package/src/types/event-log.ts +46 -0
- package/src/types/event-types.ts +20 -0
- package/src/types/jose-types.ts +76 -0
- package/src/types/jws-types.ts +28 -0
- package/src/types/message-interface.ts +24 -0
- package/src/types/message-store.ts +56 -0
- package/src/types/message-types.ts +115 -0
- package/src/types/messages-types.ts +26 -0
- package/src/types/method-handler.ts +17 -0
- package/src/types/permissions-grant-descriptor.ts +79 -0
- package/src/types/permissions-types.ts +42 -0
- package/src/types/protocols-types.ts +154 -0
- package/src/types/records-types.ts +184 -0
- package/src/types/signer.ts +27 -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 +85 -0
- package/src/utils/encoder.ts +54 -0
- package/src/utils/encryption.ts +145 -0
- package/src/utils/hd-key.ts +58 -0
- package/src/utils/jws.ts +95 -0
- package/src/utils/memory-cache.ts +31 -0
- package/src/utils/object.ts +55 -0
- package/src/utils/private-key-signer.ts +72 -0
- package/src/utils/protocols.ts +50 -0
- package/src/utils/records.ts +326 -0
- package/src/utils/secp256k1.ts +209 -0
- package/src/utils/string.ts +13 -0
- package/src/utils/time.ts +77 -0
- package/src/utils/url.ts +66 -0
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import type { Filter, RangeFilter } from '../types/message-types.js';
|
|
2
|
+
import type { LevelWrapperBatchOperation, LevelWrapperIteratorOptions } from './level-wrapper.js';
|
|
3
|
+
|
|
4
|
+
import { executeUnlessAborted } from '../utils/abort.js';
|
|
5
|
+
import { flatten } from '../utils/object.js';
|
|
6
|
+
import { createLevelDatabase, LevelWrapper } from './level-wrapper.js';
|
|
7
|
+
|
|
8
|
+
export interface IndexLevelOptions {
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A LevelDB implementation for indexing the messages stored in the DWN.
|
|
14
|
+
*/
|
|
15
|
+
export class IndexLevel {
|
|
16
|
+
config: IndexLevelConfig;
|
|
17
|
+
|
|
18
|
+
db: LevelWrapper<string>;
|
|
19
|
+
|
|
20
|
+
constructor(config: IndexLevelConfig) {
|
|
21
|
+
this.config = {
|
|
22
|
+
createLevelDatabase,
|
|
23
|
+
...config
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
this.db = new LevelWrapper<string>({ ...this.config, valueEncoding: 'utf8' });
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async open(): Promise<void> {
|
|
30
|
+
return this.db.open();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async close(): Promise<void> {
|
|
34
|
+
return this.db.close();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Adds indexes for a specific data/object/content.
|
|
39
|
+
* @param dataId ID of the data/object/content being indexed.
|
|
40
|
+
*/
|
|
41
|
+
async put(
|
|
42
|
+
tenant: string,
|
|
43
|
+
dataId: string,
|
|
44
|
+
indexes: { [property: string]: unknown },
|
|
45
|
+
options?: IndexLevelOptions
|
|
46
|
+
): Promise<void> {
|
|
47
|
+
const partition = await executeUnlessAborted(this.db.partition(tenant), options?.signal);
|
|
48
|
+
indexes = flatten(indexes);
|
|
49
|
+
|
|
50
|
+
const operations: LevelWrapperBatchOperation<string>[] = [ ];
|
|
51
|
+
|
|
52
|
+
// create an index entry for each property in the `indexes`
|
|
53
|
+
for (const propertyName in indexes) {
|
|
54
|
+
const propertyValue = indexes[propertyName];
|
|
55
|
+
|
|
56
|
+
// NOTE: appending data ID after (property + value) serves two purposes:
|
|
57
|
+
// 1. creates a unique entry of the property-value pair per data/object
|
|
58
|
+
// 2. when we need to delete all indexes of a given data ID (`delete()`), we can reconstruct the index keys and remove the indexes efficiently
|
|
59
|
+
//
|
|
60
|
+
// example keys (\u0000 is just shown for illustration purpose because it is the delimiter used to join the string segments below):
|
|
61
|
+
// 'interface\u0000"Records"\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'
|
|
62
|
+
// 'method\u0000"Write"\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'
|
|
63
|
+
// 'schema\u0000"http://ud4kyzon6ugxn64boz7v"\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'
|
|
64
|
+
// 'dataCid\u0000"bafkreic3ie3cxsblp46vn3ofumdnwiqqk4d5ah7uqgpcn6xps4skfvagze"\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'
|
|
65
|
+
// 'dateCreated\u0000"2023-05-25T18:23:29.425008Z"\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'
|
|
66
|
+
const key = this.join(propertyName, this.encodeValue(propertyValue), dataId);
|
|
67
|
+
operations.push({ type: 'put', key, value: dataId });
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// create a reverse lookup entry for data ID -> its indexes
|
|
71
|
+
// this is for indexes deletion (`delete()`): so that given the data ID, we are able to delete all its indexes
|
|
72
|
+
// we can consider putting this info in a different data partition if this ever becomes more complex/confusing
|
|
73
|
+
operations.push({ type: 'put', key: `__${dataId}__indexes`, value: JSON.stringify(indexes) });
|
|
74
|
+
|
|
75
|
+
await partition.batch(operations, options);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Executes the given single filter query and appends the results without duplicate into `matchedIDs`.
|
|
80
|
+
*/
|
|
81
|
+
private async executeSingleFilterQuery(tenant: string, filter: Filter, matchedIDs: Set<string>, options?: IndexLevelOptions): Promise<void> {
|
|
82
|
+
// Note: We have an array of Promises in order to support OR (anyOf) matches when given a list of accepted values for a property
|
|
83
|
+
const propertyNameToPromises: { [key: string]: Promise<string[]>[] } = {};
|
|
84
|
+
|
|
85
|
+
// Do a separate DB query for each property in `filter`
|
|
86
|
+
// We will find the union of these many individual queries later.
|
|
87
|
+
for (const propertyName in filter) {
|
|
88
|
+
const propertyFilter = filter[propertyName];
|
|
89
|
+
|
|
90
|
+
if (typeof propertyFilter === 'object') {
|
|
91
|
+
if (Array.isArray(propertyFilter)) {
|
|
92
|
+
// `propertyFilter` is a AnyOfFilter
|
|
93
|
+
|
|
94
|
+
// Support OR matches by querying for each values separately,
|
|
95
|
+
// then adding them to the promises associated with `propertyName`
|
|
96
|
+
propertyNameToPromises[propertyName] = [];
|
|
97
|
+
for (const propertyValue of new Set(propertyFilter)) {
|
|
98
|
+
const exactMatchesPromise = this.findExactMatches(tenant, propertyName, propertyValue, options);
|
|
99
|
+
propertyNameToPromises[propertyName].push(exactMatchesPromise);
|
|
100
|
+
}
|
|
101
|
+
} else {
|
|
102
|
+
// `propertyFilter` is a `RangeFilter`
|
|
103
|
+
const rangeMatchesPromise = this.findRangeMatches(tenant, propertyName, propertyFilter, options);
|
|
104
|
+
propertyNameToPromises[propertyName] = [rangeMatchesPromise];
|
|
105
|
+
}
|
|
106
|
+
} else {
|
|
107
|
+
// propertyFilter is an EqualFilter, meaning it is a non-object primitive type
|
|
108
|
+
const exactMatchesPromise = this.findExactMatches(tenant, propertyName, propertyFilter, options);
|
|
109
|
+
propertyNameToPromises[propertyName] = [exactMatchesPromise];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// map of ID of all data/object -> list of missing property matches
|
|
114
|
+
// if count of missing property matches is 0, it means the data/object fully matches the filter
|
|
115
|
+
const missingPropertyMatchesForId: { [dataId: string]: Set<string> } = { };
|
|
116
|
+
|
|
117
|
+
// resolve promises for each property match and
|
|
118
|
+
// eliminate matched property from `missingPropertyMatchesForId` iteratively to work out complete matches
|
|
119
|
+
for (const [propertyName, promises] of Object.entries(propertyNameToPromises)) {
|
|
120
|
+
// acting as an OR match for the property, any of the promises returning a match will be treated as a property match
|
|
121
|
+
for (const promise of promises) {
|
|
122
|
+
// reminder: the promise returns a list of IDs of data satisfying a particular match
|
|
123
|
+
for (const dataId of await promise) {
|
|
124
|
+
// short circuit: if a data is already included to the final matched ID set (by a different `Filter`),
|
|
125
|
+
// no need to evaluate if the data satisfies this current filter being evaluated
|
|
126
|
+
if (matchedIDs.has(dataId)) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// if first time seeing a property matching for the data/object, record all properties needing a match to track progress
|
|
131
|
+
missingPropertyMatchesForId[dataId] ??= new Set<string>([ ...Object.keys(filter) ]);
|
|
132
|
+
|
|
133
|
+
missingPropertyMatchesForId[dataId].delete(propertyName);
|
|
134
|
+
if (missingPropertyMatchesForId[dataId].size === 0) {
|
|
135
|
+
// full filter match, add it to return list
|
|
136
|
+
matchedIDs.add(dataId);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async query(tenant: string, filters: Filter[], options?: IndexLevelOptions): Promise<Array<string>> {
|
|
144
|
+
const matchedIDs: Set<string> = new Set();
|
|
145
|
+
|
|
146
|
+
for (const filter of filters) {
|
|
147
|
+
await this.executeSingleFilterQuery(tenant, filter, matchedIDs, options);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return [...matchedIDs];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
async delete(tenant: string, dataId: string, options?: IndexLevelOptions): Promise<void> {
|
|
154
|
+
const partition = await executeUnlessAborted(this.db.partition(tenant), options?.signal);
|
|
155
|
+
const serializedIndexes = await partition.get(`__${dataId}__indexes`, options);
|
|
156
|
+
if (!serializedIndexes) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const indexes = JSON.parse(serializedIndexes);
|
|
161
|
+
|
|
162
|
+
// delete all indexes associated with the data of the given ID
|
|
163
|
+
const ops: LevelWrapperBatchOperation<string>[] = [ ];
|
|
164
|
+
for (const propertyName in indexes) {
|
|
165
|
+
const propertyValue = indexes[propertyName];
|
|
166
|
+
const key = this.join(propertyName, this.encodeValue(propertyValue), dataId);
|
|
167
|
+
ops.push({ type: 'del', key });
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
ops.push({ type: 'del', key: `__${dataId}__indexes` });
|
|
171
|
+
|
|
172
|
+
await partition.batch(ops, options);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
async clear(): Promise<void> {
|
|
176
|
+
return this.db.clear();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* @returns IDs of data that matches the exact property and value.
|
|
181
|
+
*/
|
|
182
|
+
private async findExactMatches(tenant: string, propertyName: string, propertyValue: unknown, options?: IndexLevelOptions): Promise<string[]> {
|
|
183
|
+
const partition = await executeUnlessAborted(this.db.partition(tenant), options?.signal);
|
|
184
|
+
const propertyValuePrefix = this.join(propertyName, this.encodeValue(propertyValue), '');
|
|
185
|
+
|
|
186
|
+
const iteratorOptions: LevelWrapperIteratorOptions<string> = {
|
|
187
|
+
gt: propertyValuePrefix
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
const matches: string[] = [];
|
|
191
|
+
for await (const [ key, dataId ] of partition.iterator(iteratorOptions, options)) {
|
|
192
|
+
if (!key.startsWith(propertyValuePrefix)) {
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
matches.push(dataId);
|
|
197
|
+
}
|
|
198
|
+
return matches;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @returns IDs of data that matches the range filter.
|
|
203
|
+
*/
|
|
204
|
+
private async findRangeMatches(tenant: string, propertyName: string, rangeFilter: RangeFilter, options?: IndexLevelOptions): Promise<string[]> {
|
|
205
|
+
const partition = await executeUnlessAborted(this.db.partition(tenant), options?.signal);
|
|
206
|
+
const iteratorOptions: LevelWrapperIteratorOptions<string> = {};
|
|
207
|
+
|
|
208
|
+
for (const comparator in rangeFilter) {
|
|
209
|
+
const comparatorName = comparator as keyof RangeFilter;
|
|
210
|
+
iteratorOptions[comparatorName] = this.join(propertyName, this.encodeValue(rangeFilter[comparatorName]));
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// if there is no lower bound specified (`gt` or `gte`), we need to iterate from the upper bound,
|
|
214
|
+
// so that we will iterate over all the matches before hitting mismatches.
|
|
215
|
+
if (iteratorOptions.gt === undefined && iteratorOptions.gte === undefined) {
|
|
216
|
+
iteratorOptions.reverse = true;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const matches: string[] = [];
|
|
220
|
+
for await (const [ key, dataId ] of partition.iterator(iteratorOptions, options)) {
|
|
221
|
+
// if "greater-than" is specified, skip all keys that contains the exact value given in the "greater-than" condition
|
|
222
|
+
if ('gt' in rangeFilter && IndexLevel.extractValueFromKey(key) === this.encodeValue(rangeFilter.gt)) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// immediately stop if we arrive at an index entry for a different property
|
|
227
|
+
if (!key.startsWith(propertyName)) {
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
matches.push(dataId);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
if ('lte' in rangeFilter) {
|
|
235
|
+
// When `lte` is used, we must also query the exact match explicitly because the exact match will not be included in the iterator above.
|
|
236
|
+
// This is due to the extra data (CID) appended to the (property + value) key prefix, e.g.
|
|
237
|
+
// key = 'dateCreated\u0000"2023-05-25T11:22:33.000000Z"\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'
|
|
238
|
+
// the value would be considered greater than { lte: `dateCreated\u0000"2023-05-25T11:22:33.000000Z"` } used in the iterator options,
|
|
239
|
+
// thus would not be included in the iterator even though we'd like it to be.
|
|
240
|
+
for (const dataId of await this.findExactMatches(tenant, propertyName, rangeFilter.lte, options)) {
|
|
241
|
+
matches.push(dataId);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return matches;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
private encodeValue(value: unknown): string {
|
|
249
|
+
switch (typeof value) {
|
|
250
|
+
case 'string':
|
|
251
|
+
// We can't just `JSON.stringify` as that'll affect the sort order of strings.
|
|
252
|
+
// For example, `'\x00'` becomes `'\\u0000'`.
|
|
253
|
+
return `"${value}"`;
|
|
254
|
+
case 'number':
|
|
255
|
+
return IndexLevel.encodeNumberValue(value);
|
|
256
|
+
default:
|
|
257
|
+
return String(value);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Encodes a numerical value as a string for lexicographical comparison.
|
|
263
|
+
* If the number is positive it simply pads it with leading zeros.
|
|
264
|
+
* ex.: input: 1024 => "0000000000001024"
|
|
265
|
+
* input: -1024 => "!9007199254739967"
|
|
266
|
+
*
|
|
267
|
+
* @param value the number to encode.
|
|
268
|
+
* @returns a string representation of the number.
|
|
269
|
+
*/
|
|
270
|
+
static encodeNumberValue(value: number): string {
|
|
271
|
+
const NEGATIVE_OFFSET = Number.MAX_SAFE_INTEGER;
|
|
272
|
+
const NEGATIVE_PREFIX = '!'; // this will be sorted below positive numbers lexicographically
|
|
273
|
+
const PADDING_LENGTH = String(Number.MAX_SAFE_INTEGER).length;
|
|
274
|
+
|
|
275
|
+
const prefix: string = value < 0 ? NEGATIVE_PREFIX : '';
|
|
276
|
+
const offset: number = value < 0 ? NEGATIVE_OFFSET : 0;
|
|
277
|
+
return prefix + String(value + offset).padStart(PADDING_LENGTH, '0');
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Extracts the value encoded within the indexed key when a record is inserted.
|
|
282
|
+
*
|
|
283
|
+
* ex. key: 'dateCreated\u0000"2023-05-25T18:23:29.425008Z"\u0000bafyreigs3em7lrclhntzhgvkrf75j2muk6e7ypq3lrw3ffgcpyazyw6pry'
|
|
284
|
+
* extracted value: "2023-05-25T18:23:29.425008Z"
|
|
285
|
+
*
|
|
286
|
+
* @param key an IndexLevel db key.
|
|
287
|
+
* @returns the extracted encodedValue from the key.
|
|
288
|
+
*/
|
|
289
|
+
static extractValueFromKey(key: string): string {
|
|
290
|
+
const [, value] = key.split(this.delimiter);
|
|
291
|
+
return value;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Joins the given values using the `\x00` (\u0000) character.
|
|
296
|
+
*/
|
|
297
|
+
private static delimiter = `\x00`;
|
|
298
|
+
private join(...values: unknown[]): string {
|
|
299
|
+
return values.join(IndexLevel.delimiter);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
type IndexLevelConfig = {
|
|
304
|
+
location: string,
|
|
305
|
+
createLevelDatabase?: typeof createLevelDatabase,
|
|
306
|
+
};
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import type { AbstractBatchOperation, AbstractDatabaseOptions, AbstractIteratorOptions, AbstractLevel } from 'abstract-level';
|
|
2
|
+
|
|
3
|
+
import { executeUnlessAborted } from '../utils/abort.js';
|
|
4
|
+
import { Level } from 'level';
|
|
5
|
+
|
|
6
|
+
export type CreateLevelDatabaseOptions<V> = AbstractDatabaseOptions<string, V>;
|
|
7
|
+
|
|
8
|
+
export type LevelDatabase<V> = AbstractLevel<string | Buffer | Uint8Array, string, V>;
|
|
9
|
+
|
|
10
|
+
export async function createLevelDatabase<V>(location: string, options?: CreateLevelDatabaseOptions<V>): Promise<LevelDatabase<V>> {
|
|
11
|
+
// Only import `'level'` when it's actually necessary (i.e. only when the default `createLevelDatabase` is used).
|
|
12
|
+
// Overriding `createLevelDatabase` will prevent this from happening.
|
|
13
|
+
return new Level(location, { ...options, keyEncoding: 'utf8' }) as unknown as LevelDatabase<V>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface LevelWrapperOptions {
|
|
17
|
+
signal?: AbortSignal;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type LevelWrapperBatchOperation<V> = AbstractBatchOperation<LevelDatabase<V>, string, V>;
|
|
21
|
+
|
|
22
|
+
export type LevelWrapperIteratorOptions<V> = AbstractIteratorOptions<string, V>;
|
|
23
|
+
|
|
24
|
+
// `Level` works in Node.js 12+ and Electron 5+ on Linux, Mac OS, Windows and FreeBSD, including any
|
|
25
|
+
// future Node.js and Electron release thanks to Node-API, including ARM platforms like Raspberry Pi
|
|
26
|
+
// and Android, as well as in Chrome, Firefox, Edge, Safari, iOS Safari and Chrome for Android.
|
|
27
|
+
export class LevelWrapper<V> {
|
|
28
|
+
config: LevelWrapperConfig<V>;
|
|
29
|
+
|
|
30
|
+
db: LevelDatabase<V>;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @param config.location - must be a directory path (relative or absolute) where `Level`` will
|
|
34
|
+
* store its files, or in browsers, the name of the {@link https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase `IDBDatabase`}
|
|
35
|
+
* to be opened.
|
|
36
|
+
*/
|
|
37
|
+
constructor(config: LevelWrapperConfig<V>, db?: LevelDatabase<V>) {
|
|
38
|
+
this.config = {
|
|
39
|
+
createLevelDatabase,
|
|
40
|
+
...config
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
this.db = db!;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async open(): Promise<void> {
|
|
47
|
+
await this.createLevelDatabase();
|
|
48
|
+
|
|
49
|
+
// `db.open()` is automatically called by the database constructor. We may need to call it explicitly
|
|
50
|
+
// in order to explicitly catch an error that would otherwise not surface until another method
|
|
51
|
+
// like `db.get()` is called. Once `db.open()` has then been called, any read & write
|
|
52
|
+
// operations will again be queued internally until opening has finished.
|
|
53
|
+
|
|
54
|
+
switch (this.db.status) {
|
|
55
|
+
// If db is open, we are done.
|
|
56
|
+
case 'open':
|
|
57
|
+
return;
|
|
58
|
+
|
|
59
|
+
// If db is still opening, wait until the 'open' event is emitted
|
|
60
|
+
case 'opening':
|
|
61
|
+
return new Promise((resolve) => {
|
|
62
|
+
this.db.once('open', resolve);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// If db is closing, wait until it is closed then await `db.open()`
|
|
66
|
+
case 'closing':
|
|
67
|
+
return new Promise((resolve, reject) => {
|
|
68
|
+
const onClosed = (): void => {
|
|
69
|
+
// Make sure that errors from `db.open()` propogate up
|
|
70
|
+
this.db.open().then(resolve).catch(reject);;
|
|
71
|
+
};
|
|
72
|
+
this.db.once('closed', onClosed);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// If db is closed, `db.open`
|
|
76
|
+
case 'closed':
|
|
77
|
+
return this.db.open();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async close(): Promise<void> {
|
|
82
|
+
if (!this.db) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
switch (this.db.status) {
|
|
87
|
+
// If db is open, we `db.close`.
|
|
88
|
+
case 'open':
|
|
89
|
+
return this.db.close();
|
|
90
|
+
|
|
91
|
+
// If db is still opening, wait until it is open then await `db.close()`
|
|
92
|
+
case 'opening':
|
|
93
|
+
return new Promise((resolve, reject) => {
|
|
94
|
+
const onOpen = (): void => {
|
|
95
|
+
// Make sure that errors from `db.open()` propogate up
|
|
96
|
+
this.db.close().then(resolve).catch(reject);;
|
|
97
|
+
};
|
|
98
|
+
this.db.once('open', onOpen);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
// If db is closing, wait until the 'closed' event is emitted
|
|
102
|
+
case 'closing':
|
|
103
|
+
return new Promise((resolve) => {
|
|
104
|
+
this.db.once('closed', resolve);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// If db is closed, we are done
|
|
108
|
+
case 'closed':
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
async partition(name: string): Promise<LevelWrapper<V>> {
|
|
114
|
+
await this.createLevelDatabase();
|
|
115
|
+
|
|
116
|
+
return new LevelWrapper(this.config, this.db.sublevel(name, {
|
|
117
|
+
keyEncoding : 'utf8',
|
|
118
|
+
valueEncoding : this.config.valueEncoding
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
async get(key: string, options?: LevelWrapperOptions): Promise<V|undefined>{
|
|
123
|
+
options?.signal?.throwIfAborted();
|
|
124
|
+
|
|
125
|
+
await executeUnlessAborted(this.createLevelDatabase(), options?.signal);
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
const value = await executeUnlessAborted(this.db.get(String(key)), options?.signal);
|
|
129
|
+
return value;
|
|
130
|
+
} catch (error) {
|
|
131
|
+
const e = error as { code: string };
|
|
132
|
+
// `Level`` throws an error if the key is not present. Return `undefined` in this case.
|
|
133
|
+
if (e.code === 'LEVEL_NOT_FOUND') {
|
|
134
|
+
return undefined;
|
|
135
|
+
} else {
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
async has(key: string, options?: LevelWrapperOptions): Promise<boolean> {
|
|
142
|
+
return !! await this.get(key, options);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
async * keys(options?: LevelWrapperOptions): AsyncGenerator<string> {
|
|
146
|
+
options?.signal?.throwIfAborted();
|
|
147
|
+
|
|
148
|
+
await executeUnlessAborted(this.createLevelDatabase(), options?.signal);
|
|
149
|
+
|
|
150
|
+
for await (const key of this.db.keys()) {
|
|
151
|
+
options?.signal?.throwIfAborted();
|
|
152
|
+
|
|
153
|
+
yield key;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
async * iterator(iteratorOptions?: LevelWrapperIteratorOptions<V>, options?: LevelWrapperOptions): AsyncGenerator<[string, V]> {
|
|
158
|
+
options?.signal?.throwIfAborted();
|
|
159
|
+
|
|
160
|
+
await executeUnlessAborted(this.createLevelDatabase(), options?.signal);
|
|
161
|
+
|
|
162
|
+
for await (const entry of this.db.iterator(iteratorOptions!)) {
|
|
163
|
+
options?.signal?.throwIfAborted();
|
|
164
|
+
|
|
165
|
+
yield entry;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
async put(key: string, value: V, options?: LevelWrapperOptions): Promise<void> {
|
|
170
|
+
options?.signal?.throwIfAborted();
|
|
171
|
+
|
|
172
|
+
await executeUnlessAborted(this.createLevelDatabase(), options?.signal);
|
|
173
|
+
|
|
174
|
+
return executeUnlessAborted(this.db.put(String(key), value), options?.signal);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
async delete(key: string, options?: LevelWrapperOptions): Promise<void> {
|
|
178
|
+
options?.signal?.throwIfAborted();
|
|
179
|
+
|
|
180
|
+
await executeUnlessAborted(this.createLevelDatabase(), options?.signal);
|
|
181
|
+
|
|
182
|
+
return executeUnlessAborted(this.db.del(String(key)), options?.signal);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
async isEmpty(options?: LevelWrapperOptions): Promise<boolean> {
|
|
186
|
+
for await (const _key of this.keys(options)) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
async clear(): Promise<void> {
|
|
193
|
+
await this.createLevelDatabase();
|
|
194
|
+
|
|
195
|
+
await this.db.clear();
|
|
196
|
+
|
|
197
|
+
await this.compactUnderlyingStorage();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
async batch(operations: Array<LevelWrapperBatchOperation<V>>, options?: LevelWrapperOptions): Promise<void> {
|
|
201
|
+
options?.signal?.throwIfAborted();
|
|
202
|
+
|
|
203
|
+
await executeUnlessAborted(this.createLevelDatabase(), options?.signal);
|
|
204
|
+
|
|
205
|
+
return executeUnlessAborted(this.db.batch(operations), options?.signal);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
private async compactUnderlyingStorage(options?: LevelWrapperOptions): Promise<void> {
|
|
209
|
+
options?.signal?.throwIfAborted();
|
|
210
|
+
|
|
211
|
+
await executeUnlessAborted(this.createLevelDatabase(), options?.signal);
|
|
212
|
+
|
|
213
|
+
const range = this.sublevelRange;
|
|
214
|
+
if (!range) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// additional methods are only available on the root API instance
|
|
219
|
+
const root = this.root;
|
|
220
|
+
|
|
221
|
+
if (root.db.supports.additionalMethods.compactRange) {
|
|
222
|
+
return executeUnlessAborted((root.db as any).compactRange?.(...range), options?.signal);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Gets the min and max key value of this partition.
|
|
228
|
+
*/
|
|
229
|
+
private get sublevelRange(): [ string, string ] | undefined {
|
|
230
|
+
const prefix = (this.db as any).prefix as string;
|
|
231
|
+
if (!prefix) {
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// derive an exclusive `maxKey` by changing the last prefix character to the immediate succeeding character in unicode
|
|
236
|
+
// (which matches how `abstract-level` creates a `boundary`)
|
|
237
|
+
const maxKey = prefix.slice(0, -1) + String.fromCharCode(prefix.charCodeAt(prefix.length - 1) + 1);
|
|
238
|
+
const minKey = prefix;
|
|
239
|
+
|
|
240
|
+
return [minKey, maxKey];
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
private get root(): LevelWrapper<V> {
|
|
244
|
+
let db = this.db;
|
|
245
|
+
for (const parent = (db as any).db; parent && parent !== db; ) {
|
|
246
|
+
db = parent;
|
|
247
|
+
}
|
|
248
|
+
return new LevelWrapper(this.config, db);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private async createLevelDatabase(): Promise<void> {
|
|
252
|
+
this.db ??= await this.config.createLevelDatabase!<V>(this.config.location, {
|
|
253
|
+
keyEncoding : 'utf8',
|
|
254
|
+
valueEncoding : this.config.valueEncoding
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
type LevelWrapperConfig<V> = CreateLevelDatabaseOptions<V> & {
|
|
260
|
+
location: string,
|
|
261
|
+
createLevelDatabase?: typeof createLevelDatabase,
|
|
262
|
+
};
|