@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,58 @@
|
|
|
1
|
+
import type { PrivateJwk, PublicJwk } from '../types/jose-types.js';
|
|
2
|
+
|
|
3
|
+
import { Secp256k1 } from './secp256k1.js';
|
|
4
|
+
|
|
5
|
+
export enum KeyDerivationScheme {
|
|
6
|
+
/**
|
|
7
|
+
* Key derivation using the `dataFormat` value for Flat-space records.
|
|
8
|
+
*/
|
|
9
|
+
DataFormats = 'dataFormats',
|
|
10
|
+
ProtocolContext = 'protocolContext',
|
|
11
|
+
ProtocolPath = 'protocolPath',
|
|
12
|
+
/**
|
|
13
|
+
* Key derivation using the `schema` value for Flat-space records.
|
|
14
|
+
*/
|
|
15
|
+
Schemas = 'schemas'
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type DerivedPrivateJwk = {
|
|
19
|
+
rootKeyId: string,
|
|
20
|
+
derivationScheme: KeyDerivationScheme;
|
|
21
|
+
derivationPath?: string[];
|
|
22
|
+
derivedPrivateKey: PrivateJwk,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Class containing hierarchical deterministic key related utility methods used by the DWN.
|
|
27
|
+
*/
|
|
28
|
+
export class HdKey {
|
|
29
|
+
/**
|
|
30
|
+
* Derives a descendant private key.
|
|
31
|
+
* NOTE: currently only supports SECP256K1 keys.
|
|
32
|
+
*/
|
|
33
|
+
public static async derivePrivateKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<DerivedPrivateJwk> {
|
|
34
|
+
const ancestorPrivateKey = Secp256k1.privateJwkToBytes(ancestorKey.derivedPrivateKey);
|
|
35
|
+
const ancestorPrivateKeyDerivationPath = ancestorKey.derivationPath ?? [];
|
|
36
|
+
const derivedPrivateKeyBytes = await Secp256k1.derivePrivateKey(ancestorPrivateKey, subDerivationPath);
|
|
37
|
+
const derivedPrivateJwk = await Secp256k1.privateKeyToJwk(derivedPrivateKeyBytes);
|
|
38
|
+
const derivedDescendantPrivateKey: DerivedPrivateJwk = {
|
|
39
|
+
rootKeyId : ancestorKey.rootKeyId,
|
|
40
|
+
derivationScheme : ancestorKey.derivationScheme,
|
|
41
|
+
derivationPath : [...ancestorPrivateKeyDerivationPath, ...subDerivationPath],
|
|
42
|
+
derivedPrivateKey : derivedPrivateJwk
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
return derivedDescendantPrivateKey;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Derives a descendant public key from an ancestor private key.
|
|
50
|
+
* NOTE: currently only supports SECP256K1 keys.
|
|
51
|
+
*/
|
|
52
|
+
public static async derivePublicKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<PublicJwk> {
|
|
53
|
+
const derivedDescendantPrivateKey = await HdKey.derivePrivateKey(ancestorKey, subDerivationPath);
|
|
54
|
+
const derivedDescendantPublicKey = await Secp256k1.getPublicJwk(derivedDescendantPrivateKey.derivedPrivateKey);
|
|
55
|
+
|
|
56
|
+
return derivedDescendantPublicKey;
|
|
57
|
+
}
|
|
58
|
+
}
|
package/src/utils/jws.ts
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { GeneralJws } from '../types/jws-types.js';
|
|
2
|
+
import type { SignatureEntry } from '../types/jws-types.js';
|
|
3
|
+
import type { Signer } from '../types/signer.js';
|
|
4
|
+
import type { KeyMaterial, PublicJwk } from '../types/jose-types.js';
|
|
5
|
+
|
|
6
|
+
import isPlainObject from 'lodash/isPlainObject.js';
|
|
7
|
+
|
|
8
|
+
import { Encoder } from './encoder.js';
|
|
9
|
+
import { PrivateKeySigner } from './private-key-signer.js';
|
|
10
|
+
import { signatureAlgorithms } from '../jose/algorithms/signing/signature-algorithms.js';
|
|
11
|
+
import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Utility class for JWS related operations.
|
|
16
|
+
*/
|
|
17
|
+
export class Jws {
|
|
18
|
+
/**
|
|
19
|
+
* Gets the `kid` from a general JWS signature entry.
|
|
20
|
+
*/
|
|
21
|
+
public static getKid(signatureEntry: SignatureEntry): string {
|
|
22
|
+
const { kid } = Encoder.base64UrlToObject(signatureEntry.protected);
|
|
23
|
+
return kid;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Gets the signer DID from a general JWS signature entry.
|
|
28
|
+
*/
|
|
29
|
+
public static getSignerDid(signatureEntry: SignatureEntry): string {
|
|
30
|
+
const kid = Jws.getKid(signatureEntry);
|
|
31
|
+
const did = Jws.extractDid(kid);
|
|
32
|
+
return did;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Verifies the signature against the given payload.
|
|
37
|
+
* @returns `true` if signature is valid; `false` otherwise
|
|
38
|
+
*/
|
|
39
|
+
public static async verifySignature(base64UrlPayload: string, signatureEntry: SignatureEntry, jwkPublic: PublicJwk): Promise<boolean> {
|
|
40
|
+
const signatureAlgorithm = signatureAlgorithms[jwkPublic.crv];
|
|
41
|
+
|
|
42
|
+
if (!signatureAlgorithm) {
|
|
43
|
+
throw new DwnError(DwnErrorCode.JwsVerifySignatureUnsupportedCrv, `unsupported crv. crv must be one of ${Object.keys(signatureAlgorithms)}`);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const payload = Encoder.stringToBytes(`${signatureEntry.protected}.${base64UrlPayload}`);
|
|
47
|
+
const signatureBytes = Encoder.base64UrlToBytes(signatureEntry.signature);
|
|
48
|
+
|
|
49
|
+
return await signatureAlgorithm.verify(payload, signatureBytes, jwkPublic);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Decodes the payload of the given JWS object as a plain object.
|
|
54
|
+
*/
|
|
55
|
+
public static decodePlainObjectPayload(jws: GeneralJws): any {
|
|
56
|
+
let payloadJson;
|
|
57
|
+
try {
|
|
58
|
+
payloadJson = Encoder.base64UrlToObject(jws.payload);
|
|
59
|
+
} catch {
|
|
60
|
+
throw new DwnError(DwnErrorCode.JwsDecodePlainObjectPayloadInvalid, 'payload is not a JSON object');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (!isPlainObject(payloadJson)) {
|
|
64
|
+
throw new DwnError(DwnErrorCode.JwsDecodePlainObjectPayloadInvalid, 'signed payload must be a plain object');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return payloadJson;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Extracts the DID from the given `kid` string.
|
|
72
|
+
*/
|
|
73
|
+
public static extractDid(kid: string): string {
|
|
74
|
+
const [ did ] = kid.split('#');
|
|
75
|
+
return did;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Creates a Signer[] from the given Personas.
|
|
80
|
+
*/
|
|
81
|
+
public static createSigners(keyMaterials: KeyMaterial[]): Signer[] {
|
|
82
|
+
const signers = keyMaterials.map((keyMaterial) => Jws.createSigner(keyMaterial));
|
|
83
|
+
return signers;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Creates a Signer from the given Persona.
|
|
88
|
+
*/
|
|
89
|
+
public static createSigner(keyMaterial: KeyMaterial): Signer {
|
|
90
|
+
const privateJwk = keyMaterial.keyPair.privateJwk;
|
|
91
|
+
const keyId = keyMaterial.keyId;
|
|
92
|
+
const signer = new PrivateKeySigner({ privateJwk, keyId });
|
|
93
|
+
return signer;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Cache } from '../types/cache.js';
|
|
2
|
+
import { LRUCache } from 'lru-cache';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A cache using local memory.
|
|
6
|
+
*/
|
|
7
|
+
export class MemoryCache implements Cache {
|
|
8
|
+
private cache: LRUCache<string, any>;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @param timeToLiveInSeconds time-to-live for every key-value pair set in the cache
|
|
12
|
+
*/
|
|
13
|
+
public constructor (private timeToLiveInSeconds: number) {
|
|
14
|
+
this.cache = new LRUCache({
|
|
15
|
+
max : 100_000,
|
|
16
|
+
ttl : timeToLiveInSeconds * 1000
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async set(key: string, value: any): Promise<void> {
|
|
21
|
+
try {
|
|
22
|
+
this.cache.set(key, value);
|
|
23
|
+
} catch {
|
|
24
|
+
// let the code continue as this is a non-fatal error
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async get(key: string): Promise<any | undefined> {
|
|
29
|
+
return this.cache.get(key);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import flat from 'flat';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Flattens the given object.
|
|
5
|
+
* e.g. `{ a: { b: { c: 42 } } }` becomes `{ 'a.b.c': 42 }`
|
|
6
|
+
*/
|
|
7
|
+
export function flatten(obj: unknown): Record<string, unknown> {
|
|
8
|
+
const flattened = flat.flatten<unknown, Record<string, unknown>>(obj);
|
|
9
|
+
removeEmptyObjects(flattened);
|
|
10
|
+
return flattened;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Checks whether the given object has any properties.
|
|
15
|
+
*/
|
|
16
|
+
export function isEmptyObject(obj: unknown): boolean {
|
|
17
|
+
if (typeof(obj) !== 'object') {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
for (const _ in obj) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Recursively removes all properties with an empty object or array as its value from the given object.
|
|
30
|
+
*/
|
|
31
|
+
export function removeEmptyObjects(obj: Record<string, unknown>): void {
|
|
32
|
+
Object.keys(obj).forEach(key => {
|
|
33
|
+
if (typeof(obj[key]) === 'object') {
|
|
34
|
+
// recursive remove empty object or array properties in nested objects
|
|
35
|
+
removeEmptyObjects(obj[key] as Record<string, unknown>);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (isEmptyObject(obj[key])) {
|
|
39
|
+
delete obj[key];
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Recursively removes all properties with `undefined` as its value from the given object.
|
|
46
|
+
*/
|
|
47
|
+
export function removeUndefinedProperties(obj: Record<string, unknown>): void {
|
|
48
|
+
Object.keys(obj).forEach(key => {
|
|
49
|
+
if (obj[key] === undefined) {
|
|
50
|
+
delete obj[key];
|
|
51
|
+
} else if (typeof(obj[key]) === 'object') {
|
|
52
|
+
removeUndefinedProperties(obj[key] as Record<string, unknown>); // recursive remove `undefined` properties in nested objects
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { PrivateJwk } from '../types/jose-types.js';
|
|
2
|
+
import type { Signer } from '../types/signer.js';
|
|
3
|
+
|
|
4
|
+
import { signatureAlgorithms } from '../jose/algorithms/signing/signature-algorithms.js';
|
|
5
|
+
import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Input to `PrivateKeySigner` constructor.
|
|
9
|
+
*/
|
|
10
|
+
export type PrivateKeySignerOptions = {
|
|
11
|
+
/**
|
|
12
|
+
* Private JWK to create the signer from.
|
|
13
|
+
*/
|
|
14
|
+
privateJwk: PrivateJwk;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* If not specified, the constructor will attempt to default/fall back to the `kid` value in the given `privateJwk`.
|
|
18
|
+
*/
|
|
19
|
+
keyId?: string;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* If not specified, the constructor will attempt to default/fall back to the `alg` value in the given `privateJwk`.
|
|
23
|
+
*/
|
|
24
|
+
algorithm?: string;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* A signer that signs using a private key.
|
|
29
|
+
*/
|
|
30
|
+
export class PrivateKeySigner implements Signer {
|
|
31
|
+
public keyId;
|
|
32
|
+
public algorithm;
|
|
33
|
+
private privateJwk: PrivateJwk;
|
|
34
|
+
private signatureAlgorithm;
|
|
35
|
+
|
|
36
|
+
public constructor(options: PrivateKeySignerOptions) {
|
|
37
|
+
if (options.keyId === undefined && options.privateJwk.kid === undefined) {
|
|
38
|
+
throw new DwnError(
|
|
39
|
+
DwnErrorCode.PrivateKeySignerUnableToDeduceKeyId,
|
|
40
|
+
`Unable to deduce the key ID`
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// NOTE: `alg` is optional for a JWK as specified in https://datatracker.ietf.org/doc/html/rfc7517#section-4.4
|
|
45
|
+
if (options.algorithm === undefined && options.privateJwk.alg === undefined) {
|
|
46
|
+
throw new DwnError(
|
|
47
|
+
DwnErrorCode.PrivateKeySignerUnableToDeduceAlgorithm,
|
|
48
|
+
`Unable to deduce the signature algorithm`
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
this.keyId = options.keyId ?? options.privateJwk.kid!;
|
|
53
|
+
this.algorithm = options.algorithm ?? options.privateJwk.alg!;
|
|
54
|
+
this.privateJwk = options.privateJwk;
|
|
55
|
+
this.signatureAlgorithm = signatureAlgorithms[options.privateJwk.crv];
|
|
56
|
+
|
|
57
|
+
if (!this.signatureAlgorithm) {
|
|
58
|
+
throw new DwnError(
|
|
59
|
+
DwnErrorCode.PrivateKeySignerUnsupportedCurve,
|
|
60
|
+
`Unsupported crv ${options.privateJwk.crv}, crv must be one of ${Object.keys(signatureAlgorithms)}`
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Signs the given content and returns the signature as bytes.
|
|
67
|
+
*/
|
|
68
|
+
public async sign (content: Uint8Array): Promise<Uint8Array> {
|
|
69
|
+
const signatureBytes = await this.signatureAlgorithm.sign(content, this.privateJwk);
|
|
70
|
+
return signatureBytes;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { DerivedPrivateJwk } from '../utils/hd-key.js';
|
|
2
|
+
import type { PrivateJwk } from '../types/jose-types.js';
|
|
3
|
+
import type { ProtocolDefinition, ProtocolRuleSet } from '../types/protocols-types.js';
|
|
4
|
+
|
|
5
|
+
import { Secp256k1 } from './secp256k1.js';
|
|
6
|
+
import { HdKey, KeyDerivationScheme } from '../utils/hd-key.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Class containing Protocol related utility methods.
|
|
10
|
+
*/
|
|
11
|
+
export class Protocols {
|
|
12
|
+
/**
|
|
13
|
+
* Derives public encryptions keys and inject it in the `$encryption` property for each protocol path segment of the given Protocol definition,
|
|
14
|
+
* then returns the final encryption-enabled protocol definition.
|
|
15
|
+
* NOTE: The original definition passed in is unmodified.
|
|
16
|
+
*/
|
|
17
|
+
public static async deriveAndInjectPublicEncryptionKeys(
|
|
18
|
+
protocolDefinition: ProtocolDefinition,
|
|
19
|
+
rootKeyId: string,
|
|
20
|
+
privateJwk: PrivateJwk
|
|
21
|
+
): Promise<ProtocolDefinition> {
|
|
22
|
+
// clone before modify
|
|
23
|
+
const encryptionEnabledProtocolDefinition = JSON.parse(JSON.stringify(protocolDefinition)) as ProtocolDefinition;
|
|
24
|
+
|
|
25
|
+
// a function that recursively creates and adds `$encryption` property to every rule set
|
|
26
|
+
async function addEncryptionProperty(ruleSet: ProtocolRuleSet, parentKey: DerivedPrivateJwk): Promise<void> {
|
|
27
|
+
for (const key in ruleSet) {
|
|
28
|
+
// if we encounter a nested rule set (a property name that doesn't begin with '$'), recursively inject the `$encryption` property
|
|
29
|
+
if (!key.startsWith('$')) {
|
|
30
|
+
const derivedPrivateKey = await HdKey.derivePrivateKey(parentKey, [key]);
|
|
31
|
+
const publicKeyJwk = await Secp256k1.getPublicJwk(derivedPrivateKey.derivedPrivateKey);
|
|
32
|
+
|
|
33
|
+
ruleSet[key].$encryption = { rootKeyId, publicKeyJwk };
|
|
34
|
+
await addEncryptionProperty(ruleSet[key], derivedPrivateKey);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// inject encryption property starting from each root level record type
|
|
40
|
+
const rootKey: DerivedPrivateJwk = {
|
|
41
|
+
derivationScheme : KeyDerivationScheme.ProtocolPath,
|
|
42
|
+
derivedPrivateKey : privateJwk,
|
|
43
|
+
rootKeyId
|
|
44
|
+
};
|
|
45
|
+
const protocolLevelDerivedKey = await HdKey.derivePrivateKey(rootKey, [KeyDerivationScheme.ProtocolPath, protocolDefinition.protocol]);
|
|
46
|
+
await addEncryptionProperty(encryptionEnabledProtocolDefinition.structure, protocolLevelDerivedKey);
|
|
47
|
+
|
|
48
|
+
return encryptionEnabledProtocolDefinition;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import type { DerivedPrivateJwk } from './hd-key.js';
|
|
2
|
+
import type { Readable } from 'readable-stream';
|
|
3
|
+
import type { Filter, GenericSignaturePayload, RangeFilter } from '../types/message-types.js';
|
|
4
|
+
import type { RangeCriterion, RecordsDeleteMessage, RecordsFilter, RecordsQueryMessage, RecordsReadMessage, RecordsWriteDescriptor, RecordsWriteMessage } from '../types/records-types.js';
|
|
5
|
+
|
|
6
|
+
import { Encoder } from './encoder.js';
|
|
7
|
+
import { Encryption } from './encryption.js';
|
|
8
|
+
import { KeyDerivationScheme } from './hd-key.js';
|
|
9
|
+
import { Message } from '../core/message.js';
|
|
10
|
+
import { Secp256k1 } from './secp256k1.js';
|
|
11
|
+
import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
|
|
12
|
+
import { normalizeProtocolUrl, normalizeSchemaUrl } from './url.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Class containing useful utilities related to the Records interface.
|
|
16
|
+
*/
|
|
17
|
+
export class Records {
|
|
18
|
+
/**
|
|
19
|
+
* Decrypts the encrypted data in a message reply using the given ancestor private key.
|
|
20
|
+
* @param ancestorPrivateKey Any ancestor private key in the key derivation path.
|
|
21
|
+
*/
|
|
22
|
+
public static async decrypt(
|
|
23
|
+
recordsWrite: RecordsWriteMessage,
|
|
24
|
+
ancestorPrivateKey: DerivedPrivateJwk,
|
|
25
|
+
cipherStream: Readable
|
|
26
|
+
): Promise<Readable> {
|
|
27
|
+
const { encryption } = recordsWrite;
|
|
28
|
+
|
|
29
|
+
// look for an encrypted symmetric key that is encrypted by the public key corresponding to the given private key
|
|
30
|
+
const matchingEncryptedKey = encryption!.keyEncryption.find(key =>
|
|
31
|
+
key.rootKeyId === ancestorPrivateKey.rootKeyId &&
|
|
32
|
+
key.derivationScheme === ancestorPrivateKey.derivationScheme
|
|
33
|
+
);
|
|
34
|
+
if (matchingEncryptedKey === undefined) {
|
|
35
|
+
throw new DwnError(
|
|
36
|
+
DwnErrorCode.RecordsDecryptNoMatchingKeyEncryptedFound,
|
|
37
|
+
`Unable to find a symmetric key encrypted using key \
|
|
38
|
+
with ID '${ancestorPrivateKey.rootKeyId}' and '${ancestorPrivateKey.derivationScheme}' derivation scheme.`
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const fullDerivationPath = Records.constructKeyDerivationPath(matchingEncryptedKey.derivationScheme, recordsWrite);
|
|
43
|
+
|
|
44
|
+
// NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,
|
|
45
|
+
// so we will assume that's the algorithm without additional switch/if statements
|
|
46
|
+
const leafPrivateKey = await Records.derivePrivateKey(ancestorPrivateKey, fullDerivationPath);
|
|
47
|
+
const encryptedKeyBytes = Encoder.base64UrlToBytes(matchingEncryptedKey.encryptedKey);
|
|
48
|
+
const ephemeralPublicKey = Secp256k1.publicJwkToBytes(matchingEncryptedKey.ephemeralPublicKey);
|
|
49
|
+
const keyEncryptionInitializationVector = Encoder.base64UrlToBytes(matchingEncryptedKey.initializationVector);
|
|
50
|
+
const messageAuthenticationCode = Encoder.base64UrlToBytes(matchingEncryptedKey.messageAuthenticationCode);
|
|
51
|
+
const dataEncryptionKey = await Encryption.eciesSecp256k1Decrypt({
|
|
52
|
+
ciphertext : encryptedKeyBytes,
|
|
53
|
+
ephemeralPublicKey,
|
|
54
|
+
initializationVector : keyEncryptionInitializationVector,
|
|
55
|
+
messageAuthenticationCode,
|
|
56
|
+
privateKey : leafPrivateKey
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
// NOTE: right now only `A256CTR` algorithm is supported for symmetric encryption,
|
|
61
|
+
// so we will assume that's the algorithm without additional switch/if statements
|
|
62
|
+
const dataEncryptionInitializationVector = Encoder.base64UrlToBytes(encryption!.initializationVector);
|
|
63
|
+
const plaintextStream = await Encryption.aes256CtrDecrypt(dataEncryptionKey, dataEncryptionInitializationVector, cipherStream);
|
|
64
|
+
|
|
65
|
+
return plaintextStream;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Constructs full key derivation path using the specified scheme.
|
|
70
|
+
*/
|
|
71
|
+
public static constructKeyDerivationPath(
|
|
72
|
+
keyDerivationScheme: KeyDerivationScheme,
|
|
73
|
+
recordsWriteMessage: RecordsWriteMessage
|
|
74
|
+
): string[] {
|
|
75
|
+
|
|
76
|
+
const descriptor = recordsWriteMessage.descriptor;
|
|
77
|
+
const contextId = recordsWriteMessage.contextId;
|
|
78
|
+
|
|
79
|
+
let fullDerivationPath;
|
|
80
|
+
if (keyDerivationScheme === KeyDerivationScheme.DataFormats) {
|
|
81
|
+
fullDerivationPath = Records.constructKeyDerivationPathUsingDataFormatsScheme(descriptor.schema, descriptor.dataFormat);
|
|
82
|
+
} else if (keyDerivationScheme === KeyDerivationScheme.ProtocolPath) {
|
|
83
|
+
fullDerivationPath = Records.constructKeyDerivationPathUsingProtocolPathScheme(descriptor);
|
|
84
|
+
} else if (keyDerivationScheme === KeyDerivationScheme.ProtocolContext) {
|
|
85
|
+
fullDerivationPath = Records.constructKeyDerivationPathUsingProtocolContextScheme(contextId);
|
|
86
|
+
} else {
|
|
87
|
+
// `schemas` scheme
|
|
88
|
+
fullDerivationPath = Records.constructKeyDerivationPathUsingSchemasScheme(descriptor.schema);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return fullDerivationPath;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Constructs the full key derivation path using `dataFormats` scheme.
|
|
96
|
+
*/
|
|
97
|
+
public static constructKeyDerivationPathUsingDataFormatsScheme(schema: string | undefined, dataFormat: string ): string[] {
|
|
98
|
+
if (schema !== undefined) {
|
|
99
|
+
return [
|
|
100
|
+
KeyDerivationScheme.DataFormats,
|
|
101
|
+
schema, // this is as spec-ed on TP27, the intent is to support sharing the key for just a specific data type under a schema
|
|
102
|
+
dataFormat
|
|
103
|
+
];
|
|
104
|
+
} else {
|
|
105
|
+
return [
|
|
106
|
+
KeyDerivationScheme.DataFormats,
|
|
107
|
+
dataFormat
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Constructs the full key derivation path using `protocolPath` scheme.
|
|
114
|
+
*/
|
|
115
|
+
public static constructKeyDerivationPathUsingProtocolPathScheme(descriptor: RecordsWriteDescriptor): string[] {
|
|
116
|
+
// ensure `protocol` is defined
|
|
117
|
+
// NOTE: no need to check `protocolPath` and `contextId` because earlier code ensures that if `protocol` is defined, those are defined also
|
|
118
|
+
if (descriptor.protocol === undefined) {
|
|
119
|
+
throw new DwnError(
|
|
120
|
+
DwnErrorCode.RecordsProtocolPathDerivationSchemeMissingProtocol,
|
|
121
|
+
'Unable to construct key derivation path using `protocols` scheme because `protocol` is missing.'
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const protocolPathSegments = descriptor.protocolPath!.split('/');
|
|
126
|
+
const fullDerivationPath = [
|
|
127
|
+
KeyDerivationScheme.ProtocolPath,
|
|
128
|
+
descriptor.protocol,
|
|
129
|
+
...protocolPathSegments
|
|
130
|
+
];
|
|
131
|
+
|
|
132
|
+
return fullDerivationPath;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Constructs the full key derivation path using `protocolContext` scheme.
|
|
137
|
+
*/
|
|
138
|
+
public static constructKeyDerivationPathUsingProtocolContextScheme(contextId: string | undefined): string[] {
|
|
139
|
+
if (contextId === undefined) {
|
|
140
|
+
throw new DwnError(
|
|
141
|
+
DwnErrorCode.RecordsProtocolContextDerivationSchemeMissingContextId,
|
|
142
|
+
'Unable to construct key derivation path using `protocolContext` scheme because `contextId` is missing.'
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const fullDerivationPath = [
|
|
147
|
+
KeyDerivationScheme.ProtocolContext,
|
|
148
|
+
contextId
|
|
149
|
+
];
|
|
150
|
+
|
|
151
|
+
return fullDerivationPath;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Constructs the full key derivation path using `schemas` scheme.
|
|
156
|
+
*/
|
|
157
|
+
public static constructKeyDerivationPathUsingSchemasScheme( schema: string | undefined ): string[] {
|
|
158
|
+
if (schema === undefined) {
|
|
159
|
+
throw new DwnError(
|
|
160
|
+
DwnErrorCode.RecordsSchemasDerivationSchemeMissingSchema,
|
|
161
|
+
'Unable to construct key derivation path using `schemas` scheme because `schema` is missing.'
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
const fullDerivationPath = [
|
|
166
|
+
KeyDerivationScheme.Schemas,
|
|
167
|
+
schema
|
|
168
|
+
];
|
|
169
|
+
|
|
170
|
+
return fullDerivationPath;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Derives a descendant private key given an ancestor private key and the full absolute derivation path.
|
|
175
|
+
* NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,
|
|
176
|
+
* so we will only derive SECP256K1 key without additional conditional checks
|
|
177
|
+
*/
|
|
178
|
+
public static async derivePrivateKey(ancestorPrivateKey: DerivedPrivateJwk, fullDescendantDerivationPath: string[]): Promise<Uint8Array> {
|
|
179
|
+
if (ancestorPrivateKey.derivedPrivateKey.crv !== 'secp256k1') {
|
|
180
|
+
throw new DwnError(
|
|
181
|
+
DwnErrorCode.RecordsDerivePrivateKeyUnSupportedCurve,
|
|
182
|
+
`Curve ${ancestorPrivateKey.derivedPrivateKey.crv} is not supported.`
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const ancestorPrivateKeyDerivationPath = ancestorPrivateKey.derivationPath ?? [];
|
|
187
|
+
|
|
188
|
+
Records.validateAncestorKeyAndDescentKeyDerivationPathsMatch(ancestorPrivateKeyDerivationPath, fullDescendantDerivationPath);
|
|
189
|
+
|
|
190
|
+
const subDerivationPath = fullDescendantDerivationPath.slice(ancestorPrivateKeyDerivationPath.length);
|
|
191
|
+
const ancestorPrivateKeyBytes = Secp256k1.privateJwkToBytes(ancestorPrivateKey.derivedPrivateKey);
|
|
192
|
+
const leafPrivateKey = await Secp256k1.derivePrivateKey(ancestorPrivateKeyBytes, subDerivationPath);
|
|
193
|
+
|
|
194
|
+
return leafPrivateKey;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Validates that ancestor derivation path matches the descendant derivation path completely.
|
|
199
|
+
* @throws {DwnError} with `DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment` if fails validation.
|
|
200
|
+
*/
|
|
201
|
+
public static validateAncestorKeyAndDescentKeyDerivationPathsMatch(
|
|
202
|
+
ancestorKeyDerivationPath: string[],
|
|
203
|
+
descendantKeyDerivationPath: string[]
|
|
204
|
+
): void {
|
|
205
|
+
for (let i = 0; i < ancestorKeyDerivationPath.length; i++) {
|
|
206
|
+
const ancestorSegment = ancestorKeyDerivationPath[i];
|
|
207
|
+
const descendantSegment = descendantKeyDerivationPath[i];
|
|
208
|
+
if (ancestorSegment !== descendantSegment) {
|
|
209
|
+
throw new DwnError(
|
|
210
|
+
DwnErrorCode.RecordsInvalidAncestorKeyDerivationSegment,
|
|
211
|
+
`Ancestor key derivation segment '${ancestorSegment}' mismatches against the descendant key derivation segment '${descendantSegment}'.`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Normalizes the protocol and schema URLs within a provided RecordsFilter and returns a copy of RecordsFilter with the modified values.
|
|
218
|
+
*
|
|
219
|
+
* @param filter incoming RecordsFilter to normalize.
|
|
220
|
+
* @returns {RecordsFilter} a copy of the incoming RecordsFilter with the normalized properties.
|
|
221
|
+
*/
|
|
222
|
+
public static normalizeFilter(filter: RecordsFilter): RecordsFilter {
|
|
223
|
+
let protocol;
|
|
224
|
+
if (filter.protocol === undefined) {
|
|
225
|
+
protocol = undefined;
|
|
226
|
+
} else {
|
|
227
|
+
protocol = normalizeProtocolUrl(filter.protocol);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
let schema;
|
|
231
|
+
if (filter.schema === undefined) {
|
|
232
|
+
schema = undefined;
|
|
233
|
+
} else {
|
|
234
|
+
schema = normalizeSchemaUrl(filter.schema);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return {
|
|
238
|
+
...filter,
|
|
239
|
+
protocol,
|
|
240
|
+
schema,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Converts an incoming RecordsFilter into a Filter usable by MessageStore.
|
|
246
|
+
*
|
|
247
|
+
* @param filter A RecordsFilter
|
|
248
|
+
* @returns {Filter} a generic Filter able to be used with MessageStore.
|
|
249
|
+
*/
|
|
250
|
+
public static convertFilter(filter: RecordsFilter): Filter {
|
|
251
|
+
const filterCopy = { ...filter } as Filter;
|
|
252
|
+
|
|
253
|
+
const { dateCreated, datePublished, dateUpdated } = filter;
|
|
254
|
+
const dateCreatedFilter = dateCreated ? this.convertRangeCriterion(dateCreated) : undefined;
|
|
255
|
+
if (dateCreatedFilter) {
|
|
256
|
+
filterCopy.dateCreated = dateCreatedFilter;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const datePublishedFilter = datePublished ? this.convertRangeCriterion(datePublished): undefined;
|
|
260
|
+
if (datePublishedFilter) {
|
|
261
|
+
// only return published records when filtering with a datePublished range.
|
|
262
|
+
filterCopy.published = true;
|
|
263
|
+
filterCopy.datePublished = datePublishedFilter;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const messageTimestampFilter = dateUpdated ? this.convertRangeCriterion(dateUpdated) : undefined;
|
|
267
|
+
if (messageTimestampFilter) {
|
|
268
|
+
filterCopy.messageTimestamp = messageTimestampFilter;
|
|
269
|
+
delete filterCopy.dateUpdated;
|
|
270
|
+
}
|
|
271
|
+
return filterCopy as Filter;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
private static convertRangeCriterion(inputFilter: RangeCriterion): RangeFilter | undefined {
|
|
275
|
+
let rangeFilter: RangeFilter | undefined;
|
|
276
|
+
if (inputFilter.to !== undefined && inputFilter.from !== undefined) {
|
|
277
|
+
rangeFilter = {
|
|
278
|
+
gte : inputFilter.from,
|
|
279
|
+
lt : inputFilter.to,
|
|
280
|
+
};
|
|
281
|
+
} else if (inputFilter.to !== undefined) {
|
|
282
|
+
rangeFilter = {
|
|
283
|
+
lt: inputFilter.to,
|
|
284
|
+
};
|
|
285
|
+
} else if (inputFilter.from !== undefined) {
|
|
286
|
+
rangeFilter = {
|
|
287
|
+
gte: inputFilter.from,
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
return rangeFilter;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Validates the referential integrity regarding delegated grant.
|
|
295
|
+
* @param signaturePayload Decoded payload of the signature of the message. `undefined` if message is not signed.
|
|
296
|
+
* Usage of this property is purely for performance optimization so we don't have to decode the signature payload again.
|
|
297
|
+
*/
|
|
298
|
+
public static validateDelegatedGrantReferentialIntegrity(
|
|
299
|
+
message: RecordsReadMessage | RecordsQueryMessage | RecordsWriteMessage | RecordsDeleteMessage,
|
|
300
|
+
signaturePayload: GenericSignaturePayload | undefined
|
|
301
|
+
): void {
|
|
302
|
+
// `deletedGrantId` in the payload of the message signature and `authorDelegatedGrant` in `authorization` must both exist or be both undefined
|
|
303
|
+
const delegatedGrantIdDefined = signaturePayload?.delegatedGrantId !== undefined;
|
|
304
|
+
const authorDelegatedGrantDefined = message.authorization?.authorDelegatedGrant !== undefined;
|
|
305
|
+
if (delegatedGrantIdDefined !== authorDelegatedGrantDefined) {
|
|
306
|
+
throw new DwnError(
|
|
307
|
+
DwnErrorCode.RecordsValidateIntegrityDelegatedGrantAndIdExistenceMismatch,
|
|
308
|
+
`delegatedGrantId and authorDelegatedGrant must both exist or be undefined. \
|
|
309
|
+
delegatedGrantId defined: ${delegatedGrantIdDefined}, authorDelegatedGrant defined: ${authorDelegatedGrantDefined}`
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// when delegated grant exists, the grantee (grantedTo) must be the same as the signer of the message
|
|
314
|
+
if (authorDelegatedGrantDefined) {
|
|
315
|
+
const delegatedGrant = message.authorization!.authorDelegatedGrant!;
|
|
316
|
+
const grantedTo = delegatedGrant.descriptor.grantedTo;
|
|
317
|
+
const signer = Message.getSigner(message);
|
|
318
|
+
if (grantedTo !== signer) {
|
|
319
|
+
throw new DwnError(
|
|
320
|
+
DwnErrorCode.RecordsValidateIntegrityGrantedToAndSignerMismatch,
|
|
321
|
+
`grantedTo ${grantedTo} must be the same as the signer ${signer} of the message`
|
|
322
|
+
);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|