@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,61 @@
|
|
|
1
|
+
import * as Ed25519 from '@noble/ed25519';
|
|
2
|
+
import type { PrivateJwk, PublicJwk, SignatureAlgorithm } from '../../../types/jose-types.js';
|
|
3
|
+
|
|
4
|
+
import { Encoder } from '../../../utils/encoder.js';
|
|
5
|
+
import { DwnError, DwnErrorCode } from '../../../core/dwn-error.js';
|
|
6
|
+
|
|
7
|
+
function validateKey(jwk: PrivateJwk | PublicJwk): void {
|
|
8
|
+
if (jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519') {
|
|
9
|
+
throw new DwnError(DwnErrorCode.Ed25519InvalidJwk, 'invalid jwk. kty MUST be OKP. crv MUST be Ed25519');
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function publicKeyToJwk(publicKeyBytes: Uint8Array): PublicJwk {
|
|
14
|
+
const x = Encoder.bytesToBase64Url(publicKeyBytes);
|
|
15
|
+
|
|
16
|
+
const publicJwk: PublicJwk = {
|
|
17
|
+
alg : 'EdDSA',
|
|
18
|
+
kty : 'OKP',
|
|
19
|
+
crv : 'Ed25519',
|
|
20
|
+
x
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
return publicJwk;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const ed25519: SignatureAlgorithm = {
|
|
27
|
+
sign: async (content: Uint8Array, privateJwk: PrivateJwk): Promise<Uint8Array> => {
|
|
28
|
+
validateKey(privateJwk);
|
|
29
|
+
|
|
30
|
+
const contentHex = Ed25519.etc.bytesToHex(content);
|
|
31
|
+
const privateKeyBytes = Encoder.base64UrlToBytes(privateJwk.d);
|
|
32
|
+
const privateKeyHex = Ed25519.etc.bytesToHex(privateKeyBytes);
|
|
33
|
+
|
|
34
|
+
return Ed25519.signAsync(contentHex, privateKeyHex);
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
verify: async (content: Uint8Array, signature: Uint8Array, publicJwk: PublicJwk): Promise<boolean> => {
|
|
38
|
+
validateKey(publicJwk);
|
|
39
|
+
|
|
40
|
+
const publicKeyBytes = Encoder.base64UrlToBytes(publicJwk.x);
|
|
41
|
+
|
|
42
|
+
return Ed25519.verifyAsync(signature, content, publicKeyBytes);
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
generateKeyPair: async (): Promise<{publicJwk: PublicJwk, privateJwk: PrivateJwk}> => {
|
|
46
|
+
const privateKeyBytes = Ed25519.utils.randomPrivateKey();
|
|
47
|
+
const privateKeyHex = Ed25519.etc.bytesToHex(privateKeyBytes);
|
|
48
|
+
const publicKeyBytes = await Ed25519.getPublicKeyAsync(privateKeyHex);
|
|
49
|
+
|
|
50
|
+
const d = Encoder.bytesToBase64Url(privateKeyBytes);
|
|
51
|
+
|
|
52
|
+
const publicJwk = publicKeyToJwk(publicKeyBytes);
|
|
53
|
+
const privateJwk: PrivateJwk = { ...publicJwk, d };
|
|
54
|
+
|
|
55
|
+
return { publicJwk, privateJwk };
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
publicKeyToJwk: async (publicKeyBytes: Uint8Array): Promise<PublicJwk> => {
|
|
59
|
+
return publicKeyToJwk(publicKeyBytes);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SignatureAlgorithm } from '../../../types/jose-types.js';
|
|
2
|
+
|
|
3
|
+
import { ed25519 } from './ed25519.js';
|
|
4
|
+
import { Secp256k1 } from '../../../utils/secp256k1.js';
|
|
5
|
+
|
|
6
|
+
// the key should be the appropriate `crv` value
|
|
7
|
+
export const signatureAlgorithms: Record<string, SignatureAlgorithm> = {
|
|
8
|
+
'Ed25519' : ed25519,
|
|
9
|
+
'secp256k1' : {
|
|
10
|
+
sign : Secp256k1.sign,
|
|
11
|
+
verify : Secp256k1.verify,
|
|
12
|
+
generateKeyPair : Secp256k1.generateKeyPair,
|
|
13
|
+
publicKeyToJwk : Secp256k1.publicKeyToJwk
|
|
14
|
+
},
|
|
15
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { GeneralJws } from '../../../types/jws-types.js';
|
|
2
|
+
import type { Signer } from '../../../types/signer.js';
|
|
3
|
+
|
|
4
|
+
import { Encoder } from '../../../utils/encoder.js';
|
|
5
|
+
|
|
6
|
+
export class GeneralJwsBuilder {
|
|
7
|
+
private jws: GeneralJws;
|
|
8
|
+
|
|
9
|
+
private constructor(jws: GeneralJws) {
|
|
10
|
+
this.jws = jws;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
static async create(payload: Uint8Array, signers: Signer[] = []): Promise<GeneralJwsBuilder> {
|
|
14
|
+
const jws: GeneralJws = {
|
|
15
|
+
payload : Encoder.bytesToBase64Url(payload),
|
|
16
|
+
signatures : []
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const builder = new GeneralJwsBuilder(jws);
|
|
20
|
+
|
|
21
|
+
for (const signer of signers) {
|
|
22
|
+
await builder.addSignature(signer);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return builder;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async addSignature(signer: Signer): Promise<void> {
|
|
29
|
+
const protectedHeader = {
|
|
30
|
+
kid : signer.keyId,
|
|
31
|
+
alg : signer.algorithm
|
|
32
|
+
};
|
|
33
|
+
const protectedHeaderString = JSON.stringify(protectedHeader);
|
|
34
|
+
const protectedHeaderBase64UrlString = Encoder.stringToBase64Url(protectedHeaderString);
|
|
35
|
+
|
|
36
|
+
const signingInputString = `${protectedHeaderBase64UrlString}.${this.jws.payload}`;
|
|
37
|
+
const signingInputBytes = Encoder.stringToBytes(signingInputString);
|
|
38
|
+
|
|
39
|
+
const signatureBytes = await signer.sign(signingInputBytes);
|
|
40
|
+
const signature = Encoder.bytesToBase64Url(signatureBytes);
|
|
41
|
+
|
|
42
|
+
this.jws.signatures.push({ protected: protectedHeaderBase64UrlString, signature });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
getJws(): GeneralJws {
|
|
46
|
+
return this.jws;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as jose from 'jose';
|
|
2
|
+
import type { GeneralJws } from '../../../types/jws-types.js';
|
|
3
|
+
|
|
4
|
+
export class GeneralJwsSigner {
|
|
5
|
+
private jws: GeneralJws;
|
|
6
|
+
|
|
7
|
+
constructor(jws: GeneralJws) {
|
|
8
|
+
this.jws = jws;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
static async signJWT(payload: any): Promise<any> {
|
|
12
|
+
const s = new TextEncoder().encode('XaA6JrXR1G0');
|
|
13
|
+
const alg = 'HS256';
|
|
14
|
+
return await new jose.SignJWT(payload)
|
|
15
|
+
.setProtectedHeader({ alg })
|
|
16
|
+
.setIssuedAt()
|
|
17
|
+
.setIssuer(payload.iss)
|
|
18
|
+
.setSubject(payload.sub)
|
|
19
|
+
.setAudience(payload.aud || 'verifier')
|
|
20
|
+
.setExpirationTime('24h')
|
|
21
|
+
.sign(s);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
static async verifyJWT(token: string): Promise<any> {
|
|
25
|
+
const s = new TextEncoder().encode('XaA6JrXR1G0');
|
|
26
|
+
return jose.jwtVerify(token, s);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { Cache } from '../../../types/cache.js';
|
|
2
|
+
import type { DidResolver } from '../../../did/did-resolver.js';
|
|
3
|
+
import type { GeneralJws } from '../../../types/jws-types.js';
|
|
4
|
+
import type { PublicJwk } from '../../../types/jose-types.js';
|
|
5
|
+
import type { VerificationMethod } from '../../../types/did-types.js';
|
|
6
|
+
|
|
7
|
+
import { Jws } from '../../../utils/jws.js';
|
|
8
|
+
import { MemoryCache } from '../../../utils/memory-cache.js';
|
|
9
|
+
import { validateJsonSchema } from '../../../schema-validator.js';
|
|
10
|
+
import { DwnError, DwnErrorCode } from '../../../core/dwn-error.js';
|
|
11
|
+
|
|
12
|
+
type VerificationResult = {
|
|
13
|
+
/** DIDs of all signers */
|
|
14
|
+
signers: string[];
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Verifies the signature(s) of a General JWS.
|
|
19
|
+
*/
|
|
20
|
+
export class GeneralJwsVerifier {
|
|
21
|
+
|
|
22
|
+
private static _singleton: GeneralJwsVerifier;
|
|
23
|
+
|
|
24
|
+
cache: Cache;
|
|
25
|
+
|
|
26
|
+
private constructor(cache?: Cache) {
|
|
27
|
+
this.cache = cache || new MemoryCache(600);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
private static get singleton(): GeneralJwsVerifier {
|
|
31
|
+
if (GeneralJwsVerifier._singleton === undefined) {
|
|
32
|
+
GeneralJwsVerifier._singleton = new GeneralJwsVerifier();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return GeneralJwsVerifier._singleton;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Verifies the signatures of the given General JWS.
|
|
40
|
+
* @returns the list of signers that have valid signatures.
|
|
41
|
+
*/
|
|
42
|
+
public static async verifySignatures(jws: GeneralJws, didResolver: DidResolver): Promise<VerificationResult> {
|
|
43
|
+
return await GeneralJwsVerifier.singleton.verifySignatures(jws, didResolver);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Verifies the signatures of the given General JWS.
|
|
48
|
+
* @returns the list of signers that have valid signatures.
|
|
49
|
+
*/
|
|
50
|
+
public async verifySignatures(jws: GeneralJws, didResolver: DidResolver): Promise<VerificationResult> {
|
|
51
|
+
const signers: string[] = [];
|
|
52
|
+
|
|
53
|
+
for (const signatureEntry of jws.signatures) {
|
|
54
|
+
let isVerified: boolean;
|
|
55
|
+
const kid = Jws.getKid(signatureEntry);
|
|
56
|
+
|
|
57
|
+
const cacheKey = `${signatureEntry.protected}.${jws.payload}.${signatureEntry.signature}`;
|
|
58
|
+
const cachedValue = await this.cache.get(cacheKey);
|
|
59
|
+
|
|
60
|
+
// explicit `undefined` check to differentiate `false`
|
|
61
|
+
if (cachedValue === undefined) {
|
|
62
|
+
const publicJwk = await GeneralJwsVerifier.getPublicKey(kid, didResolver);
|
|
63
|
+
isVerified = await Jws.verifySignature(jws.payload, signatureEntry, publicJwk);
|
|
64
|
+
await this.cache.set(cacheKey, isVerified);
|
|
65
|
+
} else {
|
|
66
|
+
isVerified = cachedValue;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const did = Jws.extractDid(kid);
|
|
70
|
+
|
|
71
|
+
if (isVerified) {
|
|
72
|
+
signers.push(did);
|
|
73
|
+
} else {
|
|
74
|
+
throw new DwnError(DwnErrorCode.GeneralJwsVerifierInvalidSignature, `Signature verification failed for ${did}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return { signers };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Gets the public key given a fully qualified key ID (`kid`) by resolving the DID to its DID Document.
|
|
83
|
+
*/
|
|
84
|
+
private static async getPublicKey(kid: string, didResolver: DidResolver): Promise<PublicJwk> {
|
|
85
|
+
// `resolve` throws exception if DID is invalid, DID method is not supported,
|
|
86
|
+
// or resolving DID fails
|
|
87
|
+
const did = Jws.extractDid(kid);
|
|
88
|
+
const { didDocument } = await didResolver.resolve(did);
|
|
89
|
+
const { verificationMethod: verificationMethods = [] } = didDocument || {};
|
|
90
|
+
|
|
91
|
+
let verificationMethod: VerificationMethod | undefined;
|
|
92
|
+
|
|
93
|
+
for (const method of verificationMethods) {
|
|
94
|
+
// consider optimizing using a set for O(1) lookups if needed
|
|
95
|
+
// key ID in DID Document may or may not be fully qualified. e.g.
|
|
96
|
+
// `did:ion:alice#key1` or `#key1`
|
|
97
|
+
if (kid.endsWith(method.id)) {
|
|
98
|
+
verificationMethod = method;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (!verificationMethod) {
|
|
104
|
+
throw new DwnError(DwnErrorCode.GeneralJwsVerifierGetPublicKeyNotFound, 'public key needed to verify signature not found in DID Document');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
validateJsonSchema('JwkVerificationMethod', verificationMethod);
|
|
108
|
+
|
|
109
|
+
const { publicKeyJwk: publicJwk } = verificationMethod;
|
|
110
|
+
|
|
111
|
+
return publicJwk as PublicJwk;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as precompiledValidators from '../generated/precompiled-validators.js';
|
|
2
|
+
import { DwnError, DwnErrorCode } from './core/dwn-error.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Validates the given payload using JSON schema keyed by the given schema name. Throws if the given payload fails validation.
|
|
6
|
+
* @param schemaName the schema name use to look up the JSON schema to be used for schema validation.
|
|
7
|
+
* The list of schema names can be found in compile-validators.js
|
|
8
|
+
* @param payload javascript object to be validated
|
|
9
|
+
*/
|
|
10
|
+
export function validateJsonSchema(schemaName: string, payload: any): void {
|
|
11
|
+
// const validateFn = validator.getSchema(schemaName);
|
|
12
|
+
const validateFn = (precompiledValidators as any)[schemaName];
|
|
13
|
+
|
|
14
|
+
if (!validateFn) {
|
|
15
|
+
throw new DwnError(DwnErrorCode.SchemaValidatorSchemaNotFound, `schema for ${schemaName} not found.`);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
validateFn(payload);
|
|
19
|
+
|
|
20
|
+
if (!validateFn.errors) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// AJV is configured by default to stop validating after the 1st error is encountered which means
|
|
25
|
+
// there will only ever be one error;
|
|
26
|
+
const [ errorObj ] = validateFn.errors;
|
|
27
|
+
let { instancePath, message } = errorObj;
|
|
28
|
+
|
|
29
|
+
if (!instancePath) {
|
|
30
|
+
instancePath = schemaName;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
throw new DwnError(DwnErrorCode.SchemaValidationFailure, `${instancePath}: ${message}`);
|
|
34
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { CID } from 'multiformats';
|
|
2
|
+
import type { AbortOptions, AwaitIterable } from 'interface-store';
|
|
3
|
+
import type { Blockstore, Pair } from 'interface-blockstore';
|
|
4
|
+
|
|
5
|
+
import { createLevelDatabase, LevelWrapper } from './level-wrapper.js';
|
|
6
|
+
|
|
7
|
+
// `level` works in Node.js 12+ and Electron 5+ on Linux, Mac OS, Windows and
|
|
8
|
+
// FreeBSD, including any future Node.js and Electron release thanks to Node-API, including ARM
|
|
9
|
+
// platforms like Raspberry Pi and Android, as well as in Chrome, Firefox, Edge, Safari, iOS Safari
|
|
10
|
+
// and Chrome for Android.
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Blockstore implementation using LevelDB for storing the actual messages (in the case of MessageStore)
|
|
14
|
+
* or the data associated with messages (in the case of a DataStore).
|
|
15
|
+
*/
|
|
16
|
+
export class BlockstoreLevel implements Blockstore {
|
|
17
|
+
config: BlockstoreLevelConfig;
|
|
18
|
+
|
|
19
|
+
db: LevelWrapper<Uint8Array>;
|
|
20
|
+
|
|
21
|
+
constructor(config: BlockstoreLevelConfig, db?: LevelWrapper<Uint8Array>) {
|
|
22
|
+
this.config = {
|
|
23
|
+
createLevelDatabase,
|
|
24
|
+
...config
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
this.db = db ?? new LevelWrapper<Uint8Array>({ ...this.config, valueEncoding: 'binary' });
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async open(): Promise<void> {
|
|
31
|
+
return this.db.open();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async close(): Promise<void> {
|
|
35
|
+
return this.db.close();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async partition(name: string): Promise<BlockstoreLevel> {
|
|
39
|
+
const db = await this.db.partition(name);
|
|
40
|
+
return new BlockstoreLevel({ ...this.config, location: '' }, db);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async put(key: CID | string, val: Uint8Array, options?: AbortOptions): Promise<CID> {
|
|
44
|
+
await this.db.put(String(key), val, options);
|
|
45
|
+
return CID.parse(key.toString());
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async get(key: CID | string, options?: AbortOptions): Promise<Uint8Array> {
|
|
49
|
+
const result = await this.db.get(String(key), options);
|
|
50
|
+
return result!;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async has(key: CID | string, options?: AbortOptions): Promise<boolean> {
|
|
54
|
+
return this.db.has(String(key), options);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async delete(key: CID | string, options?: AbortOptions): Promise<void> {
|
|
58
|
+
return this.db.delete(String(key), options);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async isEmpty(options?: AbortOptions): Promise<boolean> {
|
|
62
|
+
return this.db.isEmpty(options);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async * putMany(source: AwaitIterable<Pair>, options?: AbortOptions): AsyncIterable<CID> {
|
|
66
|
+
for await (const entry of source) {
|
|
67
|
+
await this.put(entry.cid, entry.block, options);
|
|
68
|
+
|
|
69
|
+
yield entry.cid;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async * getMany(source: AwaitIterable<CID>, options?: AbortOptions): AsyncIterable<Pair> {
|
|
74
|
+
for await (const key of source) {
|
|
75
|
+
yield {
|
|
76
|
+
cid : key,
|
|
77
|
+
block : await this.get(key, options)
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async * getAll(options?: AbortOptions): AsyncIterable<Pair> {
|
|
83
|
+
// @ts-expect-error keyEncoding is 'buffer' but types for db.iterator always return the key type as 'string'
|
|
84
|
+
const li: AsyncGenerator<[Uint8Array, Uint8Array]> = this.db.iterator({
|
|
85
|
+
keys : true,
|
|
86
|
+
keyEncoding : 'buffer'
|
|
87
|
+
}, options);
|
|
88
|
+
|
|
89
|
+
for await (const [key, value] of li) {
|
|
90
|
+
yield { cid: CID.decode(key), block: value };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async * deleteMany(source: AwaitIterable<CID>, options?: AbortOptions): AsyncIterable<CID> {
|
|
95
|
+
for await (const key of source) {
|
|
96
|
+
await this.delete(key, options);
|
|
97
|
+
|
|
98
|
+
yield key;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* deletes all entries
|
|
104
|
+
*/
|
|
105
|
+
async clear(): Promise<void> {
|
|
106
|
+
return this.db.clear();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
type BlockstoreLevelConfig = {
|
|
111
|
+
location: string,
|
|
112
|
+
createLevelDatabase?: typeof createLevelDatabase,
|
|
113
|
+
};
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import type { ImportResult } from 'ipfs-unixfs-importer';
|
|
2
|
+
import type { AssociateResult, DataStore, GetResult, PutResult } from '../types/data-store.js';
|
|
3
|
+
|
|
4
|
+
import { BlockstoreLevel } from './blockstore-level.js';
|
|
5
|
+
import { createLevelDatabase } from './level-wrapper.js';
|
|
6
|
+
import { exporter } from 'ipfs-unixfs-exporter';
|
|
7
|
+
import { importer } from 'ipfs-unixfs-importer';
|
|
8
|
+
import { Readable } from 'readable-stream';
|
|
9
|
+
|
|
10
|
+
// `BlockstoreLevel` doesn't support being a `Set` (i.e. it always requires a value), so use a placeholder instead.
|
|
11
|
+
const PLACEHOLDER_VALUE = new Uint8Array();
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A simple implementation of {@link DataStore} that works in both the browser and server-side.
|
|
15
|
+
* Leverages LevelDB under the hood.
|
|
16
|
+
*
|
|
17
|
+
* It has the following structure (`+` represents a sublevel and `->` represents a key->value pair):
|
|
18
|
+
* 'data' + <tenant> + <dataCid> -> <data>
|
|
19
|
+
* 'references' + <tenant> + <dataCid> + <messageCid> -> PLACEHOLDER_VALUE
|
|
20
|
+
*
|
|
21
|
+
* This allows for the <data> to be shared for everything that uses the same <dataCid> while also making
|
|
22
|
+
* sure that the <data> can only be deleted if there are no <messageCid> for any <tenant> still using it.
|
|
23
|
+
*/
|
|
24
|
+
export class DataStoreLevel implements DataStore {
|
|
25
|
+
config: DataStoreLevelConfig;
|
|
26
|
+
|
|
27
|
+
blockstore: BlockstoreLevel;
|
|
28
|
+
|
|
29
|
+
constructor(config: DataStoreLevelConfig = {}) {
|
|
30
|
+
this.config = {
|
|
31
|
+
blockstoreLocation: 'data/DATASTORE',
|
|
32
|
+
createLevelDatabase,
|
|
33
|
+
...config
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
this.blockstore = new BlockstoreLevel({
|
|
37
|
+
location : this.config.blockstoreLocation!,
|
|
38
|
+
createLevelDatabase : this.config.createLevelDatabase,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public async open(): Promise<void> {
|
|
43
|
+
await this.blockstore.open();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async close(): Promise<void> {
|
|
47
|
+
await this.blockstore.close();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async put(tenant: string, messageCid: string, dataCid: string, dataStream: Readable): Promise<PutResult> {
|
|
51
|
+
const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);
|
|
52
|
+
await blockstoreForReferenceCounting.put(messageCid, PLACEHOLDER_VALUE);
|
|
53
|
+
|
|
54
|
+
const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);
|
|
55
|
+
|
|
56
|
+
const asyncDataBlocks = importer([{ content: dataStream }], blockstoreForData, { cidVersion: 1 });
|
|
57
|
+
|
|
58
|
+
// NOTE: the last block contains the root CID as well as info to derive the data size
|
|
59
|
+
let dataDagRoot!: ImportResult;
|
|
60
|
+
for await (dataDagRoot of asyncDataBlocks) { ; }
|
|
61
|
+
|
|
62
|
+
return {
|
|
63
|
+
dataCid : String(dataDagRoot.cid),
|
|
64
|
+
dataSize : Number(dataDagRoot.unixfs?.fileSize() ?? dataDagRoot.size)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public async get(tenant: string, messageCid: string, dataCid: string): Promise<GetResult | undefined> {
|
|
69
|
+
const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);
|
|
70
|
+
|
|
71
|
+
const allowed = await blockstoreForReferenceCounting.has(messageCid);
|
|
72
|
+
if (!allowed) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);
|
|
77
|
+
|
|
78
|
+
const exists = await blockstoreForData.has(dataCid);
|
|
79
|
+
if (!exists) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// data is chunked into dag-pb unixfs blocks. re-inflate the chunks.
|
|
84
|
+
const dataDagRoot = await exporter(dataCid, blockstoreForData);
|
|
85
|
+
const contentIterator = dataDagRoot.content();
|
|
86
|
+
|
|
87
|
+
const dataStream = new Readable({
|
|
88
|
+
async read(): Promise<void> {
|
|
89
|
+
const result = await contentIterator.next();
|
|
90
|
+
if (result.done) {
|
|
91
|
+
this.push(null); // end the stream
|
|
92
|
+
} else {
|
|
93
|
+
this.push(result.value);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
let dataSize = dataDagRoot.size;
|
|
99
|
+
|
|
100
|
+
if (dataDagRoot.type === 'file' || dataDagRoot.type === 'directory') {
|
|
101
|
+
dataSize = dataDagRoot.unixfs.fileSize();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return {
|
|
105
|
+
dataCid : String(dataDagRoot.cid),
|
|
106
|
+
dataSize : Number(dataSize),
|
|
107
|
+
dataStream,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
public async associate(tenant: string, messageCid: string, dataCid: string): Promise<AssociateResult | undefined> {
|
|
112
|
+
const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);
|
|
113
|
+
|
|
114
|
+
const noExistingReference = await blockstoreForReferenceCounting.isEmpty();
|
|
115
|
+
if (noExistingReference) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);
|
|
120
|
+
|
|
121
|
+
const dataExists = await blockstoreForData.has(dataCid);
|
|
122
|
+
if (!dataExists) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
await blockstoreForReferenceCounting.put(messageCid, PLACEHOLDER_VALUE);
|
|
127
|
+
|
|
128
|
+
const dataDagRoot = await exporter(dataCid, blockstoreForData);
|
|
129
|
+
|
|
130
|
+
let dataSize = dataDagRoot.size;
|
|
131
|
+
|
|
132
|
+
if (dataDagRoot.type === 'file' || dataDagRoot.type === 'directory') {
|
|
133
|
+
dataSize = dataDagRoot.unixfs.fileSize();
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
dataCid : String(dataDagRoot.cid),
|
|
138
|
+
dataSize : Number(dataSize)
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
public async delete(tenant: string, messageCid: string, dataCid: string): Promise<void> {
|
|
143
|
+
const blockstoreForReferenceCounting = await this.getBlockstoreForReferenceCounting(tenant, dataCid);
|
|
144
|
+
await blockstoreForReferenceCounting.delete(messageCid);
|
|
145
|
+
|
|
146
|
+
const wasLastReference = await blockstoreForReferenceCounting.isEmpty();
|
|
147
|
+
if (!wasLastReference) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const blockstoreForData = await this.getBlockstoreForStoringData(tenant, dataCid);
|
|
152
|
+
await blockstoreForData.clear();
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Deletes everything in the store. Mainly used in tests.
|
|
157
|
+
*/
|
|
158
|
+
public async clear(): Promise<void> {
|
|
159
|
+
await this.blockstore.clear();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Gets the blockstore used for reference counting purposes for the given `dataCid` in the given `tenant`.
|
|
164
|
+
*/
|
|
165
|
+
private async getBlockstoreForReferenceCounting(tenant: string, dataCid: string): Promise<BlockstoreLevel> {
|
|
166
|
+
const referenceCountingPartitionName = 'references';
|
|
167
|
+
const blockstoreForReferenceCounting = await this.blockstore.partition(referenceCountingPartitionName);
|
|
168
|
+
const blockstoreForReferenceCountingByTenant = await blockstoreForReferenceCounting.partition(tenant);
|
|
169
|
+
const blockstoreForReferenceCountingDataCid = await blockstoreForReferenceCountingByTenant.partition(dataCid);
|
|
170
|
+
return blockstoreForReferenceCountingDataCid;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Gets the blockstore used for storing data for the given `dataCid` in the given `tenant`.
|
|
175
|
+
*/
|
|
176
|
+
private async getBlockstoreForStoringData(tenant: string, dataCid: string): Promise<BlockstoreLevel> {
|
|
177
|
+
const dataPartitionName = 'data';
|
|
178
|
+
const blockstoreForData = await this.blockstore.partition(dataPartitionName);
|
|
179
|
+
const blockstoreOfGivenTenant = await blockstoreForData.partition(tenant);
|
|
180
|
+
const blockstoreOfGivenDataCid = await blockstoreOfGivenTenant.partition(dataCid);
|
|
181
|
+
return blockstoreOfGivenDataCid;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
type DataStoreLevelConfig = {
|
|
186
|
+
blockstoreLocation?: string,
|
|
187
|
+
createLevelDatabase?: typeof createLevelDatabase,
|
|
188
|
+
};
|