@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,677 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { Cid } from '../utils/cid.js';
|
|
11
|
+
import { Encoder } from '../utils/encoder.js';
|
|
12
|
+
import { Encryption } from '../utils/encryption.js';
|
|
13
|
+
import { EncryptionAlgorithm } from '../utils/encryption.js';
|
|
14
|
+
import { GeneralJwsBuilder } from '../jose/jws/general/builder.js';
|
|
15
|
+
import { Jws } from '../utils/jws.js';
|
|
16
|
+
import { KeyDerivationScheme } from '../utils/hd-key.js';
|
|
17
|
+
import { Message } from '../core/message.js';
|
|
18
|
+
import { Records } from '../utils/records.js';
|
|
19
|
+
import { RecordsGrantAuthorization } from '../core/records-grant-authorization.js';
|
|
20
|
+
import { removeUndefinedProperties } from '../utils/object.js';
|
|
21
|
+
import { Secp256k1 } from '../utils/secp256k1.js';
|
|
22
|
+
import { Time } from '../utils/time.js';
|
|
23
|
+
import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
|
|
24
|
+
import { DwnInterfaceName, DwnMethodName } from '../enums/dwn-interface-method.js';
|
|
25
|
+
import { normalizeProtocolUrl, normalizeSchemaUrl, validateProtocolUrlNormalized, validateSchemaUrlNormalized } from '../utils/url.js';
|
|
26
|
+
/**
|
|
27
|
+
* A class representing a RecordsWrite DWN message.
|
|
28
|
+
* NOTE: Unable to extend `AbstractMessage` directly because the incompatible `_message` type, which is not just a generic `<M>` type.
|
|
29
|
+
*/
|
|
30
|
+
export class RecordsWrite {
|
|
31
|
+
/**
|
|
32
|
+
* Valid JSON message representing this RecordsWrite.
|
|
33
|
+
* @throws `DwnErrorCode.RecordsWriteMissingSigner` if the message is not signed yet.
|
|
34
|
+
*/
|
|
35
|
+
get message() {
|
|
36
|
+
if (this._message.authorization === undefined) {
|
|
37
|
+
throw new DwnError(DwnErrorCode.RecordsWriteMissingSigner, 'This RecordsWrite is not yet signed, JSON message cannot be generated from an incomplete state.');
|
|
38
|
+
}
|
|
39
|
+
return this._message;
|
|
40
|
+
}
|
|
41
|
+
get author() {
|
|
42
|
+
return this._author;
|
|
43
|
+
}
|
|
44
|
+
get signaturePayload() {
|
|
45
|
+
return this._signaturePayload;
|
|
46
|
+
}
|
|
47
|
+
get owner() {
|
|
48
|
+
return this._owner;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Decoded owner signature payload.
|
|
52
|
+
*/
|
|
53
|
+
get ownerSignaturePayload() {
|
|
54
|
+
return this._ownerSignaturePayload;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* If this message is signed by a delegated entity.
|
|
58
|
+
*/
|
|
59
|
+
get isSignedByDelegatee() {
|
|
60
|
+
var _a;
|
|
61
|
+
return ((_a = this._message.authorization) === null || _a === void 0 ? void 0 : _a.authorDelegatedGrant) !== undefined;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Gets the signer of this message.
|
|
65
|
+
* This is not to be confused with the logical author of the message.
|
|
66
|
+
*/
|
|
67
|
+
get signer() {
|
|
68
|
+
return Message.getSigner(this._message);
|
|
69
|
+
}
|
|
70
|
+
constructor(message) {
|
|
71
|
+
this._message = message;
|
|
72
|
+
if (message.authorization !== undefined) {
|
|
73
|
+
// if the message authorization contains author delegated grant, the author would be the grantor of the grant
|
|
74
|
+
// else the author would be the signer of the message
|
|
75
|
+
if (message.authorization.authorDelegatedGrant !== undefined) {
|
|
76
|
+
this._author = Message.getSigner(message.authorization.authorDelegatedGrant);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this._author = Message.getSigner(message);
|
|
80
|
+
}
|
|
81
|
+
this._signaturePayload = Jws.decodePlainObjectPayload(message.authorization.signature);
|
|
82
|
+
if (message.authorization.ownerSignature !== undefined) {
|
|
83
|
+
this._owner = Jws.getSignerDid(message.authorization.ownerSignature.signatures[0]);
|
|
84
|
+
this._ownerSignaturePayload = Jws.decodePlainObjectPayload(message.authorization.ownerSignature);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
this.attesters = RecordsWrite.getAttesters(message);
|
|
88
|
+
// consider converting isInitialWrite() & getEntryId() into properties for performance and convenience
|
|
89
|
+
}
|
|
90
|
+
static parse(message) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
// asynchronous checks that are required by the constructor to initialize members properly
|
|
93
|
+
yield Message.validateMessageSignatureIntegrity(message.authorization.signature, message.descriptor, 'RecordsWriteSignaturePayload');
|
|
94
|
+
if (message.authorization.ownerSignature !== undefined) {
|
|
95
|
+
yield Message.validateMessageSignatureIntegrity(message.authorization.ownerSignature, message.descriptor);
|
|
96
|
+
}
|
|
97
|
+
yield RecordsWrite.validateAttestationIntegrity(message);
|
|
98
|
+
const recordsWrite = new RecordsWrite(message);
|
|
99
|
+
yield recordsWrite.validateIntegrity(); // RecordsWrite specific data integrity check
|
|
100
|
+
return recordsWrite;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Creates a RecordsWrite message.
|
|
105
|
+
* @param options.recordId If `undefined`, will be auto-filled as a originating message as convenience for developer.
|
|
106
|
+
* @param options.data Data used to compute the `dataCid`, must be the encrypted data bytes if `options.encryptionInput` is given.
|
|
107
|
+
* Must specify `options.dataCid` if `undefined`.
|
|
108
|
+
* @param options.dataCid CID of the data that is already stored in the DWN. Must specify `options.data` if `undefined`.
|
|
109
|
+
* @param options.dataSize Size of data in number of bytes. Must be defined if `options.dataCid` is defined; must be `undefined` otherwise.
|
|
110
|
+
* @param options.dateCreated If `undefined`, it will be auto-filled with current time.
|
|
111
|
+
* @param options.messageTimestamp If `undefined`, it will be auto-filled with current time.
|
|
112
|
+
*/
|
|
113
|
+
static create(options) {
|
|
114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
+
var _a, _b, _c, _d;
|
|
116
|
+
if ((options.protocol === undefined && options.protocolPath !== undefined) ||
|
|
117
|
+
(options.protocol !== undefined && options.protocolPath === undefined)) {
|
|
118
|
+
throw new DwnError(DwnErrorCode.RecordsWriteCreateProtocolAndProtocolPathMutuallyInclusive, '`protocol` and `protocolPath` must both be defined or undefined at the same time');
|
|
119
|
+
}
|
|
120
|
+
if ((options.data === undefined && options.dataCid === undefined) ||
|
|
121
|
+
(options.data !== undefined && options.dataCid !== undefined)) {
|
|
122
|
+
throw new DwnError(DwnErrorCode.RecordsWriteCreateDataAndDataCidMutuallyExclusive, 'one and only one parameter between `data` and `dataCid` is allowed');
|
|
123
|
+
}
|
|
124
|
+
if ((options.dataCid === undefined && options.dataSize !== undefined) ||
|
|
125
|
+
(options.dataCid !== undefined && options.dataSize === undefined)) {
|
|
126
|
+
throw new DwnError(DwnErrorCode.RecordsWriteCreateDataCidAndDataSizeMutuallyInclusive, '`dataCid` and `dataSize` must both be defined or undefined at the same time');
|
|
127
|
+
}
|
|
128
|
+
if (options.parentId !== undefined && options.contextId === undefined) {
|
|
129
|
+
throw new DwnError(DwnErrorCode.RecordsWriteCreateContextIdAndParentIdMutuallyInclusive, '`contextId` must also be given when `parentId` is specified');
|
|
130
|
+
}
|
|
131
|
+
if (options.signer === undefined && options.delegatedGrant !== undefined) {
|
|
132
|
+
throw new DwnError(DwnErrorCode.RecordsWriteCreateMissingSigner, '`signer` must be given when `delegatedGrant` is given');
|
|
133
|
+
}
|
|
134
|
+
const dataCid = (_a = options.dataCid) !== null && _a !== void 0 ? _a : yield Cid.computeDagPbCidFromBytes(options.data);
|
|
135
|
+
const dataSize = (_b = options.dataSize) !== null && _b !== void 0 ? _b : options.data.length;
|
|
136
|
+
const currentTime = Time.getCurrentTimestamp();
|
|
137
|
+
const descriptor = {
|
|
138
|
+
interface: DwnInterfaceName.Records,
|
|
139
|
+
method: DwnMethodName.Write,
|
|
140
|
+
protocol: options.protocol !== undefined ? normalizeProtocolUrl(options.protocol) : undefined,
|
|
141
|
+
protocolPath: options.protocolPath,
|
|
142
|
+
recipient: options.recipient,
|
|
143
|
+
schema: options.schema !== undefined ? normalizeSchemaUrl(options.schema) : undefined,
|
|
144
|
+
parentId: options.parentId,
|
|
145
|
+
dataCid,
|
|
146
|
+
dataSize,
|
|
147
|
+
dateCreated: (_c = options.dateCreated) !== null && _c !== void 0 ? _c : currentTime,
|
|
148
|
+
messageTimestamp: (_d = options.messageTimestamp) !== null && _d !== void 0 ? _d : currentTime,
|
|
149
|
+
published: options.published,
|
|
150
|
+
datePublished: options.datePublished,
|
|
151
|
+
dataFormat: options.dataFormat
|
|
152
|
+
};
|
|
153
|
+
// generate `datePublished` if the message is to be published but `datePublished` is not given
|
|
154
|
+
if (options.published === true &&
|
|
155
|
+
options.datePublished === undefined) {
|
|
156
|
+
descriptor.datePublished = currentTime;
|
|
157
|
+
}
|
|
158
|
+
// delete all descriptor properties that are `undefined` else the code will encounter the following IPLD issue when attempting to generate CID:
|
|
159
|
+
// Error: `undefined` is not supported by the IPLD Data Model and cannot be encoded
|
|
160
|
+
removeUndefinedProperties(descriptor);
|
|
161
|
+
// `recordId` computation
|
|
162
|
+
const recordId = options.recordId;
|
|
163
|
+
// `contextId` computation
|
|
164
|
+
const contextId = options.contextId;
|
|
165
|
+
// `attestation` generation
|
|
166
|
+
const descriptorCid = yield Cid.computeCid(descriptor);
|
|
167
|
+
const attestation = yield RecordsWrite.createAttestation(descriptorCid, options.attestationSigners);
|
|
168
|
+
// `encryption` generation
|
|
169
|
+
const encryption = yield RecordsWrite.createEncryptionProperty(descriptor, options.encryptionInput);
|
|
170
|
+
const message = {
|
|
171
|
+
recordId,
|
|
172
|
+
descriptor
|
|
173
|
+
};
|
|
174
|
+
// assign optional properties only if they exist
|
|
175
|
+
if (contextId !== undefined) {
|
|
176
|
+
message.contextId = contextId;
|
|
177
|
+
}
|
|
178
|
+
if (attestation !== undefined) {
|
|
179
|
+
message.attestation = attestation;
|
|
180
|
+
}
|
|
181
|
+
if (encryption !== undefined) {
|
|
182
|
+
message.encryption = encryption;
|
|
183
|
+
}
|
|
184
|
+
const recordsWrite = new RecordsWrite(message);
|
|
185
|
+
if (options.signer !== undefined) {
|
|
186
|
+
yield recordsWrite.sign({
|
|
187
|
+
signer: options.signer,
|
|
188
|
+
delegatedGrant: options.delegatedGrant,
|
|
189
|
+
permissionsGrantId: options.permissionsGrantId,
|
|
190
|
+
protocolRole: options.protocolRole
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return recordsWrite;
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Convenience method that creates a message by:
|
|
198
|
+
* 1. Copying over immutable properties from the given source message
|
|
199
|
+
* 2. Copying over mutable properties that are not overwritten from the given source message
|
|
200
|
+
* 3. Replace the mutable properties that are given new value
|
|
201
|
+
* @param options.recordsWriteMessage Message that the new RecordsWrite will be based from.
|
|
202
|
+
* @param options.messageTimestamp The new date the record is modified. If not given, current time will be used .
|
|
203
|
+
* @param options.data The new data or the record. If not given, data from given message will be used.
|
|
204
|
+
* @param options.published The new published state. If not given, then will be set to `true` if {options.messageTimestamp} is given;
|
|
205
|
+
* else the state from given message will be used.
|
|
206
|
+
* @param options.publishedDate The new date the record is modified. If not given, then:
|
|
207
|
+
* - will not be set if the record will be unpublished as the result of this RecordsWrite; else
|
|
208
|
+
* - will be set to the same published date as the given message if it wss already published; else
|
|
209
|
+
* - will be set to current time (because this is a toggle from unpublished to published)
|
|
210
|
+
*/
|
|
211
|
+
static createFrom(options) {
|
|
212
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
213
|
+
var _a, _b;
|
|
214
|
+
const sourceMessage = options.recordsWriteMessage;
|
|
215
|
+
const currentTime = Time.getCurrentTimestamp();
|
|
216
|
+
// inherit published value from parent if neither published nor datePublished is specified
|
|
217
|
+
const published = (_a = options.published) !== null && _a !== void 0 ? _a : (options.datePublished ? true : sourceMessage.descriptor.published);
|
|
218
|
+
// use current time if published but no explicit time given
|
|
219
|
+
let datePublished = undefined;
|
|
220
|
+
// if given explicitly published dated
|
|
221
|
+
if (options.datePublished) {
|
|
222
|
+
datePublished = options.datePublished;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// if this RecordsWrite will publish the record
|
|
226
|
+
if (published) {
|
|
227
|
+
// the parent was already published, inherit the same published date
|
|
228
|
+
if (sourceMessage.descriptor.published) {
|
|
229
|
+
datePublished = sourceMessage.descriptor.datePublished;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// this is a toggle from unpublished to published, use current time
|
|
233
|
+
datePublished = currentTime;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const createOptions = {
|
|
238
|
+
// immutable properties below, just inherit from the message given
|
|
239
|
+
recipient: sourceMessage.descriptor.recipient,
|
|
240
|
+
recordId: sourceMessage.recordId,
|
|
241
|
+
dateCreated: sourceMessage.descriptor.dateCreated,
|
|
242
|
+
contextId: sourceMessage.contextId,
|
|
243
|
+
protocol: sourceMessage.descriptor.protocol,
|
|
244
|
+
protocolPath: sourceMessage.descriptor.protocolPath,
|
|
245
|
+
parentId: sourceMessage.descriptor.parentId,
|
|
246
|
+
schema: sourceMessage.descriptor.schema,
|
|
247
|
+
dataFormat: sourceMessage.descriptor.dataFormat,
|
|
248
|
+
// mutable properties below
|
|
249
|
+
messageTimestamp: (_b = options.messageTimestamp) !== null && _b !== void 0 ? _b : currentTime,
|
|
250
|
+
published,
|
|
251
|
+
datePublished,
|
|
252
|
+
data: options.data,
|
|
253
|
+
dataCid: options.data ? undefined : sourceMessage.descriptor.dataCid, // if data not given, use base message dataCid
|
|
254
|
+
dataSize: options.data ? undefined : sourceMessage.descriptor.dataSize, // if data not given, use base message dataSize
|
|
255
|
+
protocolRole: options.protocolRole,
|
|
256
|
+
delegatedGrant: options.delegatedGrant,
|
|
257
|
+
// finally still need signers
|
|
258
|
+
signer: options.signer,
|
|
259
|
+
attestationSigners: options.attestationSigners
|
|
260
|
+
};
|
|
261
|
+
const recordsWrite = yield RecordsWrite.create(createOptions);
|
|
262
|
+
return recordsWrite;
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Called by `JSON.stringify(...)` automatically.
|
|
267
|
+
*/
|
|
268
|
+
toJSON() {
|
|
269
|
+
return this.message;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Encrypts the symmetric encryption key using the public keys given and attach the resulting `encryption` property to the RecordsWrite.
|
|
273
|
+
*/
|
|
274
|
+
encryptSymmetricEncryptionKey(encryptionInput) {
|
|
275
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
276
|
+
this._message.encryption = yield RecordsWrite.createEncryptionProperty(this._message.descriptor, encryptionInput);
|
|
277
|
+
// opportunity here to re-sign instead of remove
|
|
278
|
+
delete this._message.authorization;
|
|
279
|
+
this._signaturePayload = undefined;
|
|
280
|
+
this._author = undefined;
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Signs the RecordsWrite, commonly as author, but can also be a delegate.
|
|
285
|
+
*/
|
|
286
|
+
sign(options) {
|
|
287
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
288
|
+
var _a;
|
|
289
|
+
const { signer, delegatedGrant, permissionsGrantId, protocolRole } = options;
|
|
290
|
+
// compute delegated grant ID and author if delegated grant is given
|
|
291
|
+
let delegatedGrantId;
|
|
292
|
+
let authorDid;
|
|
293
|
+
if (delegatedGrant !== undefined) {
|
|
294
|
+
delegatedGrantId = yield Message.getCid(delegatedGrant);
|
|
295
|
+
authorDid = Jws.getSignerDid(delegatedGrant.authorization.signature.signatures[0]);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
authorDid = Jws.extractDid(signer.keyId);
|
|
299
|
+
}
|
|
300
|
+
const descriptor = this._message.descriptor;
|
|
301
|
+
const descriptorCid = yield Cid.computeCid(descriptor);
|
|
302
|
+
// `recordId` computation if not given at construction time
|
|
303
|
+
this._message.recordId = (_a = this._message.recordId) !== null && _a !== void 0 ? _a : yield RecordsWrite.getEntryId(authorDid, descriptor);
|
|
304
|
+
// `contextId` computation if not given at construction time and this is a protocol-space record
|
|
305
|
+
if (this._message.contextId === undefined && this._message.descriptor.protocol !== undefined) {
|
|
306
|
+
this._message.contextId = yield RecordsWrite.getEntryId(authorDid, descriptor);
|
|
307
|
+
}
|
|
308
|
+
// `signature` generation
|
|
309
|
+
const signature = yield RecordsWrite.createSignerSignature({
|
|
310
|
+
recordId: this._message.recordId,
|
|
311
|
+
contextId: this._message.contextId,
|
|
312
|
+
descriptorCid,
|
|
313
|
+
attestation: this._message.attestation,
|
|
314
|
+
encryption: this._message.encryption,
|
|
315
|
+
signer,
|
|
316
|
+
delegatedGrantId,
|
|
317
|
+
permissionsGrantId,
|
|
318
|
+
protocolRole
|
|
319
|
+
});
|
|
320
|
+
this._message.authorization = { signature };
|
|
321
|
+
if (delegatedGrant !== undefined) {
|
|
322
|
+
this._message.authorization.authorDelegatedGrant = delegatedGrant;
|
|
323
|
+
}
|
|
324
|
+
// there is opportunity to optimize here as the payload is constructed within `createAuthorization(...)`
|
|
325
|
+
this._signaturePayload = Jws.decodePlainObjectPayload(signature);
|
|
326
|
+
this._author = authorDid;
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Signs the `RecordsWrite` as the DWN owner.
|
|
331
|
+
* This is used when the DWN owner wants to retain a copy of a message that the owner did not author.
|
|
332
|
+
* NOTE: requires the `RecordsWrite` to already have the author's signature already.
|
|
333
|
+
*/
|
|
334
|
+
signAsOwner(signer, permissionsGrantId) {
|
|
335
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
336
|
+
if (this._author === undefined) {
|
|
337
|
+
throw new DwnError(DwnErrorCode.RecordsWriteSignAsOwnerUnknownAuthor, 'Unable to sign as owner if without message signature because owner needs to sign over `recordId` which depends on author DID.');
|
|
338
|
+
}
|
|
339
|
+
const descriptor = this._message.descriptor;
|
|
340
|
+
const ownerSignature = yield Message.createSignature(descriptor, signer, { permissionsGrantId });
|
|
341
|
+
this._message.authorization.ownerSignature = ownerSignature;
|
|
342
|
+
this._ownerSignaturePayload = Jws.decodePlainObjectPayload(ownerSignature);
|
|
343
|
+
this._owner = Jws.extractDid(signer.keyId);
|
|
344
|
+
;
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Validates the integrity of the RecordsWrite message assuming the message passed basic schema validation.
|
|
349
|
+
* There is opportunity to integrate better with `validateSchema(...)`
|
|
350
|
+
*/
|
|
351
|
+
validateIntegrity() {
|
|
352
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
353
|
+
// if the new message is the initial write
|
|
354
|
+
const isInitialWrite = yield this.isInitialWrite();
|
|
355
|
+
if (isInitialWrite) {
|
|
356
|
+
// `messageTimestamp` and `dateCreated` equality check
|
|
357
|
+
const dateRecordCreated = this.message.descriptor.dateCreated;
|
|
358
|
+
const messageTimestamp = this.message.descriptor.messageTimestamp;
|
|
359
|
+
if (messageTimestamp !== dateRecordCreated) {
|
|
360
|
+
throw new DwnError(DwnErrorCode.RecordsWriteValidateIntegrityDateCreatedMismatch, `messageTimestamp ${messageTimestamp} must match dateCreated ${dateRecordCreated} for the initial write`);
|
|
361
|
+
}
|
|
362
|
+
// if the message is also a protocol context root, the `contextId` must match the expected deterministic value
|
|
363
|
+
if (this.message.descriptor.protocol !== undefined &&
|
|
364
|
+
this.message.descriptor.parentId === undefined) {
|
|
365
|
+
const expectedContextId = yield this.getEntryId();
|
|
366
|
+
if (this.message.contextId !== expectedContextId) {
|
|
367
|
+
throw new DwnError(DwnErrorCode.RecordsWriteValidateIntegrityContextIdMismatch, `contextId in message: ${this.message.contextId} does not match deterministic contextId: ${expectedContextId}`);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
// NOTE: validateMessageSignatureIntegrity() call earlier enforces the presence of `authorization` and thus `signature` in RecordsWrite
|
|
372
|
+
const signaturePayload = this.signaturePayload;
|
|
373
|
+
// make sure the `recordId` in message is the same as the `recordId` in the payload of the message signature
|
|
374
|
+
if (this.message.recordId !== signaturePayload.recordId) {
|
|
375
|
+
throw new DwnError(DwnErrorCode.RecordsWriteValidateIntegrityRecordIdUnauthorized, `recordId in message ${this.message.recordId} does not match recordId in authorization: ${signaturePayload.recordId}`);
|
|
376
|
+
}
|
|
377
|
+
// if `contextId` is given in message, make sure the same `contextId` is in the the payload of the message signature
|
|
378
|
+
if (this.message.contextId !== signaturePayload.contextId) {
|
|
379
|
+
throw new DwnError(DwnErrorCode.RecordsWriteValidateIntegrityContextIdNotInSignerSignaturePayload, `contextId in message ${this.message.contextId} does not match contextId in authorization: ${signaturePayload.contextId}`);
|
|
380
|
+
}
|
|
381
|
+
Records.validateDelegatedGrantReferentialIntegrity(this.message, signaturePayload);
|
|
382
|
+
// if `attestation` is given in message, make sure the correct `attestationCid` is in the payload of the message signature
|
|
383
|
+
if (signaturePayload.attestationCid !== undefined) {
|
|
384
|
+
const expectedAttestationCid = yield Cid.computeCid(this.message.attestation);
|
|
385
|
+
const actualAttestationCid = signaturePayload.attestationCid;
|
|
386
|
+
if (actualAttestationCid !== expectedAttestationCid) {
|
|
387
|
+
throw new DwnError(DwnErrorCode.RecordsWriteValidateIntegrityAttestationMismatch, `CID ${expectedAttestationCid} of attestation property in message does not match attestationCid in authorization: ${actualAttestationCid}`);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// if `encryption` is given in message, make sure the correct `encryptionCid` is in the payload of the message signature
|
|
391
|
+
if (signaturePayload.encryptionCid !== undefined) {
|
|
392
|
+
const expectedEncryptionCid = yield Cid.computeCid(this.message.encryption);
|
|
393
|
+
const actualEncryptionCid = signaturePayload.encryptionCid;
|
|
394
|
+
if (actualEncryptionCid !== expectedEncryptionCid) {
|
|
395
|
+
throw new DwnError(DwnErrorCode.RecordsWriteValidateIntegrityEncryptionCidMismatch, `CID ${expectedEncryptionCid} of encryption property in message does not match encryptionCid in authorization: ${actualEncryptionCid}`);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
if (this.message.descriptor.protocol !== undefined) {
|
|
399
|
+
validateProtocolUrlNormalized(this.message.descriptor.protocol);
|
|
400
|
+
}
|
|
401
|
+
if (this.message.descriptor.schema !== undefined) {
|
|
402
|
+
validateSchemaUrlNormalized(this.message.descriptor.schema);
|
|
403
|
+
}
|
|
404
|
+
Time.validateTimestamp(this.message.descriptor.messageTimestamp);
|
|
405
|
+
Time.validateTimestamp(this.message.descriptor.dateCreated);
|
|
406
|
+
if (this.message.descriptor.datePublished) {
|
|
407
|
+
Time.validateTimestamp(this.message.descriptor.datePublished);
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Validates the structural integrity of the `attestation` property.
|
|
413
|
+
* NOTE: signature is not verified.
|
|
414
|
+
*/
|
|
415
|
+
static validateAttestationIntegrity(message) {
|
|
416
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
417
|
+
if (message.attestation === undefined) {
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
if (message.attestation.signatures.length !== 1) {
|
|
421
|
+
throw new DwnError(DwnErrorCode.RecordsWriteAttestationIntegrityMoreThanOneSignature, `Currently implementation only supports 1 attester, but got ${message.attestation.signatures.length}`);
|
|
422
|
+
}
|
|
423
|
+
const payloadJson = Jws.decodePlainObjectPayload(message.attestation);
|
|
424
|
+
const { descriptorCid } = payloadJson;
|
|
425
|
+
// `descriptorCid` validation - ensure that the provided descriptorCid matches the CID of the actual message
|
|
426
|
+
const expectedDescriptorCid = yield Cid.computeCid(message.descriptor);
|
|
427
|
+
if (descriptorCid !== expectedDescriptorCid) {
|
|
428
|
+
throw new DwnError(DwnErrorCode.RecordsWriteAttestationIntegrityDescriptorCidMismatch, `descriptorCid ${descriptorCid} does not match expected descriptorCid ${expectedDescriptorCid}`);
|
|
429
|
+
}
|
|
430
|
+
// check to ensure that no other unexpected properties exist in payload.
|
|
431
|
+
const propertyCount = Object.keys(payloadJson).length;
|
|
432
|
+
if (propertyCount > 1) {
|
|
433
|
+
throw new DwnError(DwnErrorCode.RecordsWriteAttestationIntegrityInvalidPayloadProperty, `Only 'descriptorCid' is allowed in attestation payload, but got ${propertyCount} properties.`);
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
;
|
|
438
|
+
/**
|
|
439
|
+
* Computes the deterministic Entry ID of this message.
|
|
440
|
+
*/
|
|
441
|
+
getEntryId() {
|
|
442
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
443
|
+
const entryId = yield RecordsWrite.getEntryId(this.author, this.message.descriptor);
|
|
444
|
+
return entryId;
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
;
|
|
448
|
+
/**
|
|
449
|
+
* Computes the deterministic Entry ID of this message.
|
|
450
|
+
*/
|
|
451
|
+
static getEntryId(author, descriptor) {
|
|
452
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
453
|
+
if (author === undefined) {
|
|
454
|
+
throw new DwnError(DwnErrorCode.RecordsWriteGetEntryIdUndefinedAuthor, 'Property `author` is needed to compute entry ID.');
|
|
455
|
+
}
|
|
456
|
+
const entryIdInput = Object.assign({}, descriptor);
|
|
457
|
+
entryIdInput.author = author;
|
|
458
|
+
const cid = yield Cid.computeCid(entryIdInput);
|
|
459
|
+
return cid;
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
;
|
|
463
|
+
/**
|
|
464
|
+
* Checks if the given message is the initial entry of a record.
|
|
465
|
+
*/
|
|
466
|
+
isInitialWrite() {
|
|
467
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
468
|
+
const entryId = yield this.getEntryId();
|
|
469
|
+
return (entryId === this.message.recordId);
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Checks if the author of the RecordsWrite is the same as the author of the initial RecordsWrite for the record.
|
|
474
|
+
* Returns true if `this` is the initial RecordsWrite.
|
|
475
|
+
*/
|
|
476
|
+
isAuthoredByInitialRecordAuthor(tenant, messageStore) {
|
|
477
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
478
|
+
// fetch the initialWrite
|
|
479
|
+
const query = {
|
|
480
|
+
entryId: this.message.recordId
|
|
481
|
+
};
|
|
482
|
+
const { messages: result } = yield messageStore.query(tenant, [query]);
|
|
483
|
+
const initialRecordsWrite = yield RecordsWrite.parse(result[0]);
|
|
484
|
+
return initialRecordsWrite.author === this.author;
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
constructRecordsWriteIndexes(isLatestBaseState) {
|
|
488
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
489
|
+
const message = this.message;
|
|
490
|
+
const descriptor = Object.assign({}, message.descriptor);
|
|
491
|
+
delete descriptor.published; // handle `published` specifically further down
|
|
492
|
+
const indexes = Object.assign(Object.assign({}, descriptor), { isLatestBaseState, published: !!message.descriptor.published, author: this.author, recordId: message.recordId, entryId: yield RecordsWrite.getEntryId(this.author, this.message.descriptor) });
|
|
493
|
+
// add additional indexes to optional values if given
|
|
494
|
+
if (this.attesters.length > 0) {
|
|
495
|
+
indexes.attester = this.attesters[0];
|
|
496
|
+
}
|
|
497
|
+
if (message.contextId !== undefined) {
|
|
498
|
+
indexes.contextId = message.contextId;
|
|
499
|
+
}
|
|
500
|
+
return indexes;
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
authorizeDelegatee(messageStore) {
|
|
504
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
505
|
+
const grantedTo = this.signer;
|
|
506
|
+
const grantedFor = this.author;
|
|
507
|
+
const delegatedGrant = this.message.authorization.authorDelegatedGrant;
|
|
508
|
+
yield RecordsGrantAuthorization.authorizeWrite(grantedFor, this.message, grantedTo, delegatedGrant, messageStore);
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Checks if the given message is the initial entry of a record.
|
|
513
|
+
*/
|
|
514
|
+
static isInitialWrite(message) {
|
|
515
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
516
|
+
// can't be the initial write if the message is not a Records Write
|
|
517
|
+
if (message.descriptor.interface !== DwnInterfaceName.Records ||
|
|
518
|
+
message.descriptor.method !== DwnMethodName.Write) {
|
|
519
|
+
return false;
|
|
520
|
+
}
|
|
521
|
+
const recordsWriteMessage = message;
|
|
522
|
+
const author = RecordsWrite.getAuthor(recordsWriteMessage);
|
|
523
|
+
const entryId = yield RecordsWrite.getEntryId(author, recordsWriteMessage.descriptor);
|
|
524
|
+
return (entryId === recordsWriteMessage.recordId);
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Gets the DID of the author of the given message.
|
|
529
|
+
*/
|
|
530
|
+
static getAuthor(message) {
|
|
531
|
+
let author;
|
|
532
|
+
if (message.authorization.authorDelegatedGrant !== undefined) {
|
|
533
|
+
author = Message.getSigner(message.authorization.authorDelegatedGrant);
|
|
534
|
+
}
|
|
535
|
+
else {
|
|
536
|
+
author = Message.getSigner(message);
|
|
537
|
+
}
|
|
538
|
+
return author;
|
|
539
|
+
}
|
|
540
|
+
/**
|
|
541
|
+
* Creates the `encryption` property if encryption input is given. Else `undefined` is returned.
|
|
542
|
+
*/
|
|
543
|
+
static createEncryptionProperty(descriptor, encryptionInput) {
|
|
544
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
545
|
+
var _a, _b;
|
|
546
|
+
if (encryptionInput === undefined) {
|
|
547
|
+
return undefined;
|
|
548
|
+
}
|
|
549
|
+
// encrypt the data encryption key once per encryption input
|
|
550
|
+
const keyEncryption = [];
|
|
551
|
+
for (const keyEncryptionInput of encryptionInput.keyEncryptionInputs) {
|
|
552
|
+
if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.ProtocolPath && descriptor.protocol === undefined) {
|
|
553
|
+
throw new DwnError(DwnErrorCode.RecordsWriteMissingProtocol, '`protocols` encryption scheme cannot be applied to record without the `protocol` property.');
|
|
554
|
+
}
|
|
555
|
+
if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.Schemas && descriptor.schema === undefined) {
|
|
556
|
+
throw new DwnError(DwnErrorCode.RecordsWriteMissingSchema, '`schemas` encryption scheme cannot be applied to record without the `schema` property.');
|
|
557
|
+
}
|
|
558
|
+
// NOTE: right now only `ECIES-ES256K` algorithm is supported for asymmetric encryption,
|
|
559
|
+
// so we will assume that's the algorithm without additional switch/if statements
|
|
560
|
+
const publicKeyBytes = Secp256k1.publicJwkToBytes(keyEncryptionInput.publicKey);
|
|
561
|
+
const keyEncryptionOutput = yield Encryption.eciesSecp256k1Encrypt(publicKeyBytes, encryptionInput.key);
|
|
562
|
+
const encryptedKey = Encoder.bytesToBase64Url(keyEncryptionOutput.ciphertext);
|
|
563
|
+
const ephemeralPublicKey = yield Secp256k1.publicKeyToJwk(keyEncryptionOutput.ephemeralPublicKey);
|
|
564
|
+
const keyEncryptionInitializationVector = Encoder.bytesToBase64Url(keyEncryptionOutput.initializationVector);
|
|
565
|
+
const messageAuthenticationCode = Encoder.bytesToBase64Url(keyEncryptionOutput.messageAuthenticationCode);
|
|
566
|
+
const encryptedKeyData = {
|
|
567
|
+
rootKeyId: keyEncryptionInput.publicKeyId,
|
|
568
|
+
algorithm: (_a = keyEncryptionInput.algorithm) !== null && _a !== void 0 ? _a : EncryptionAlgorithm.EciesSecp256k1,
|
|
569
|
+
derivationScheme: keyEncryptionInput.derivationScheme,
|
|
570
|
+
ephemeralPublicKey,
|
|
571
|
+
initializationVector: keyEncryptionInitializationVector,
|
|
572
|
+
messageAuthenticationCode,
|
|
573
|
+
encryptedKey
|
|
574
|
+
};
|
|
575
|
+
// we need to attach the actual public key if derivation scheme is protocol-context,
|
|
576
|
+
// so that the responder to this message is able to encrypt the message/symmetric key using the same protocol-context derived public key,
|
|
577
|
+
// without needing the knowledge of the corresponding private key
|
|
578
|
+
if (keyEncryptionInput.derivationScheme === KeyDerivationScheme.ProtocolContext) {
|
|
579
|
+
encryptedKeyData.derivedPublicKey = keyEncryptionInput.publicKey;
|
|
580
|
+
}
|
|
581
|
+
keyEncryption.push(encryptedKeyData);
|
|
582
|
+
}
|
|
583
|
+
const encryption = {
|
|
584
|
+
algorithm: (_b = encryptionInput.algorithm) !== null && _b !== void 0 ? _b : EncryptionAlgorithm.Aes256Ctr,
|
|
585
|
+
initializationVector: Encoder.bytesToBase64Url(encryptionInput.initializationVector),
|
|
586
|
+
keyEncryption
|
|
587
|
+
};
|
|
588
|
+
return encryption;
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* Creates the `attestation` property of a RecordsWrite message if given signature inputs; returns `undefined` otherwise.
|
|
593
|
+
*/
|
|
594
|
+
static createAttestation(descriptorCid, signers) {
|
|
595
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
596
|
+
if (signers === undefined || signers.length === 0) {
|
|
597
|
+
return undefined;
|
|
598
|
+
}
|
|
599
|
+
const attestationPayload = { descriptorCid };
|
|
600
|
+
const attestationPayloadBytes = Encoder.objectToBytes(attestationPayload);
|
|
601
|
+
const builder = yield GeneralJwsBuilder.create(attestationPayloadBytes, signers);
|
|
602
|
+
return builder.getJws();
|
|
603
|
+
});
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* Creates the `signature` property in the `authorization` of a `RecordsWrite` message.
|
|
607
|
+
*/
|
|
608
|
+
static createSignerSignature(input) {
|
|
609
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
610
|
+
const { recordId, contextId, descriptorCid, attestation, encryption, signer, delegatedGrantId, permissionsGrantId, protocolRole } = input;
|
|
611
|
+
const attestationCid = attestation ? yield Cid.computeCid(attestation) : undefined;
|
|
612
|
+
const encryptionCid = encryption ? yield Cid.computeCid(encryption) : undefined;
|
|
613
|
+
const signaturePayload = {
|
|
614
|
+
recordId,
|
|
615
|
+
descriptorCid,
|
|
616
|
+
contextId,
|
|
617
|
+
attestationCid,
|
|
618
|
+
encryptionCid,
|
|
619
|
+
delegatedGrantId,
|
|
620
|
+
permissionsGrantId,
|
|
621
|
+
protocolRole
|
|
622
|
+
};
|
|
623
|
+
removeUndefinedProperties(signaturePayload);
|
|
624
|
+
const signaturePayloadBytes = Encoder.objectToBytes(signaturePayload);
|
|
625
|
+
const builder = yield GeneralJwsBuilder.create(signaturePayloadBytes, [signer]);
|
|
626
|
+
const signature = builder.getJws();
|
|
627
|
+
return signature;
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
/**
|
|
631
|
+
* Gets the initial write from the given list or record write.
|
|
632
|
+
*/
|
|
633
|
+
static getInitialWrite(messages) {
|
|
634
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
635
|
+
for (const message of messages) {
|
|
636
|
+
if (yield RecordsWrite.isInitialWrite(message)) {
|
|
637
|
+
return message;
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
throw new DwnError(DwnErrorCode.RecordsWriteGetInitialWriteNotFound, `initial write is not found`);
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
/**
|
|
644
|
+
* Verifies that immutable properties of the two given messages are identical.
|
|
645
|
+
* @throws {Error} if immutable properties between two RecordsWrite message
|
|
646
|
+
*/
|
|
647
|
+
static verifyEqualityOfImmutableProperties(existingWriteMessage, newMessage) {
|
|
648
|
+
const mutableDescriptorProperties = ['dataCid', 'dataSize', 'datePublished', 'published', 'messageTimestamp'];
|
|
649
|
+
// get distinct property names that exist in either the existing message given or new message
|
|
650
|
+
let descriptorPropertyNames = [];
|
|
651
|
+
descriptorPropertyNames.push(...Object.keys(existingWriteMessage.descriptor));
|
|
652
|
+
descriptorPropertyNames.push(...Object.keys(newMessage.descriptor));
|
|
653
|
+
descriptorPropertyNames = [...new Set(descriptorPropertyNames)]; // step to remove duplicates
|
|
654
|
+
// ensure all immutable properties are not modified
|
|
655
|
+
for (const descriptorPropertyName of descriptorPropertyNames) {
|
|
656
|
+
// if property is supposed to be immutable
|
|
657
|
+
if (mutableDescriptorProperties.indexOf(descriptorPropertyName) === -1) {
|
|
658
|
+
const valueInExistingWrite = existingWriteMessage.descriptor[descriptorPropertyName];
|
|
659
|
+
const valueInNewMessage = newMessage.descriptor[descriptorPropertyName];
|
|
660
|
+
if (valueInNewMessage !== valueInExistingWrite) {
|
|
661
|
+
throw new DwnError(DwnErrorCode.RecordsWriteImmutablePropertyChanged, `${descriptorPropertyName} is an immutable property: cannot change '${valueInExistingWrite}' to '${valueInNewMessage}'`);
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
return true;
|
|
666
|
+
}
|
|
667
|
+
/**
|
|
668
|
+
* Gets the DID of the author of the given message.
|
|
669
|
+
*/
|
|
670
|
+
static getAttesters(message) {
|
|
671
|
+
var _a, _b;
|
|
672
|
+
const attestationSignatures = (_b = (_a = message.attestation) === null || _a === void 0 ? void 0 : _a.signatures) !== null && _b !== void 0 ? _b : [];
|
|
673
|
+
const attesters = attestationSignatures.map((signature) => Jws.getSignerDid(signature));
|
|
674
|
+
return attesters;
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
//# sourceMappingURL=records-write.js.map
|