@enbox/dwn-sdk-js 0.0.2 → 0.0.4
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/README.md +52 -301
- package/dist/bundles/dwn.js +19 -21
- package/dist/esm/generated/precompiled-validators.js +2764 -1773
- package/dist/esm/generated/precompiled-validators.js.map +1 -1
- package/dist/esm/src/core/dwn-error.js +27 -3
- package/dist/esm/src/core/dwn-error.js.map +1 -1
- package/dist/esm/src/core/message.js.map +1 -1
- package/dist/esm/src/core/messages-grant-authorization.js +17 -6
- package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
- package/dist/esm/src/core/protocol-authorization.js +245 -69
- package/dist/esm/src/core/protocol-authorization.js.map +1 -1
- package/dist/esm/src/core/resumable-task-manager.js +4 -4
- package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
- package/dist/esm/src/dwn.js +10 -8
- package/dist/esm/src/dwn.js.map +1 -1
- package/dist/esm/src/enums/dwn-interface-method.js +4 -2
- package/dist/esm/src/enums/dwn-interface-method.js.map +1 -1
- package/dist/esm/src/event-stream/event-emitter-stream.js.map +1 -0
- package/dist/esm/src/handlers/messages-subscribe.js +1 -1
- package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
- package/dist/esm/src/handlers/messages-sync.js +116 -0
- package/dist/esm/src/handlers/messages-sync.js.map +1 -0
- package/dist/esm/src/handlers/protocols-configure.js +149 -16
- package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
- package/dist/esm/src/handlers/protocols-query.js +2 -2
- package/dist/esm/src/handlers/protocols-query.js.map +1 -1
- package/dist/esm/src/handlers/records-count.js +143 -0
- package/dist/esm/src/handlers/records-count.js.map +1 -0
- package/dist/esm/src/handlers/records-query.js +4 -0
- package/dist/esm/src/handlers/records-query.js.map +1 -1
- package/dist/esm/src/handlers/records-read.js +4 -6
- package/dist/esm/src/handlers/records-read.js.map +1 -1
- package/dist/esm/src/handlers/records-write.js +17 -18
- package/dist/esm/src/handlers/records-write.js.map +1 -1
- package/dist/esm/src/index.js +9 -5
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/interfaces/messages-read.js +2 -7
- package/dist/esm/src/interfaces/messages-read.js.map +1 -1
- package/dist/esm/src/interfaces/messages-subscribe.js +1 -0
- package/dist/esm/src/interfaces/messages-subscribe.js.map +1 -1
- package/dist/esm/src/interfaces/{messages-query.js → messages-sync.js} +11 -12
- package/dist/esm/src/interfaces/messages-sync.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-configure.js +153 -30
- package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
- package/dist/esm/src/interfaces/protocols-query.js +1 -0
- package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
- package/dist/esm/src/interfaces/records-count.js +91 -0
- package/dist/esm/src/interfaces/records-count.js.map +1 -0
- package/dist/esm/src/interfaces/records-read.js +15 -1
- package/dist/esm/src/interfaces/records-read.js.map +1 -1
- package/dist/esm/src/interfaces/records-write.js +64 -15
- package/dist/esm/src/interfaces/records-write.js.map +1 -1
- package/dist/esm/src/jose/algorithms/signing/ed25519.js.map +1 -1
- package/dist/esm/src/jose/algorithms/signing/signature-algorithms.js.map +1 -1
- package/dist/esm/src/jose/jws/general/builder.js.map +1 -1
- package/dist/esm/src/jose/jws/general/verifier.js.map +1 -1
- package/dist/esm/src/protocols/permission-grant.js +30 -0
- package/dist/esm/src/protocols/permission-grant.js.map +1 -1
- package/dist/esm/src/protocols/permission-request.js +24 -0
- package/dist/esm/src/protocols/permission-request.js.map +1 -1
- package/dist/esm/src/protocols/permissions.js +1 -1
- package/dist/esm/src/protocols/permissions.js.map +1 -1
- package/dist/esm/src/schema-validator.js +0 -1
- package/dist/esm/src/schema-validator.js.map +1 -1
- package/dist/esm/src/smt/smt-store-level.js +125 -0
- package/dist/esm/src/smt/smt-store-level.js.map +1 -0
- package/dist/esm/src/smt/smt-store-memory.js +67 -0
- package/dist/esm/src/smt/smt-store-memory.js.map +1 -0
- package/dist/esm/src/smt/smt-utils.js +146 -0
- package/dist/esm/src/smt/smt-utils.js.map +1 -0
- package/dist/esm/src/smt/sparse-merkle-tree.js +622 -0
- package/dist/esm/src/smt/sparse-merkle-tree.js.map +1 -0
- package/dist/esm/src/state-index/state-index-level.js +228 -0
- package/dist/esm/src/state-index/state-index-level.js.map +1 -0
- package/dist/esm/src/store/data-store-level.js +6 -6
- package/dist/esm/src/store/data-store-level.js.map +1 -1
- package/dist/esm/src/store/index-level.js +375 -17
- package/dist/esm/src/store/index-level.js.map +1 -1
- package/dist/esm/src/store/message-store-level.js +56 -0
- package/dist/esm/src/store/message-store-level.js.map +1 -1
- package/dist/esm/src/store/storage-controller.js +19 -16
- package/dist/esm/src/store/storage-controller.js.map +1 -1
- package/dist/esm/src/types/encryption-types.js +2 -0
- package/dist/esm/src/types/encryption-types.js.map +1 -0
- package/dist/esm/src/types/message-types.js.map +1 -1
- package/dist/esm/src/types/protocols-types.js +0 -2
- package/dist/esm/src/types/protocols-types.js.map +1 -1
- package/dist/esm/src/types/records-types.js +2 -0
- package/dist/esm/src/types/records-types.js.map +1 -1
- package/dist/esm/src/types/smt-types.js +5 -0
- package/dist/esm/src/types/smt-types.js.map +1 -0
- package/dist/esm/src/types/state-index.js +2 -0
- package/dist/esm/src/types/state-index.js.map +1 -0
- package/dist/esm/src/utils/cid.js +2 -1
- package/dist/esm/src/utils/cid.js.map +1 -1
- package/dist/esm/src/utils/data-stream.js +84 -29
- package/dist/esm/src/utils/data-stream.js.map +1 -1
- package/dist/esm/src/utils/encryption.js +22 -31
- package/dist/esm/src/utils/encryption.js.map +1 -1
- package/dist/esm/src/utils/hd-key.js +3 -3
- package/dist/esm/src/utils/hd-key.js.map +1 -1
- package/dist/esm/src/utils/jws.js +4 -4
- package/dist/esm/src/utils/jws.js.map +1 -1
- package/dist/esm/src/utils/private-key-signer.js +4 -3
- package/dist/esm/src/utils/private-key-signer.js.map +1 -1
- package/dist/esm/src/utils/protocols.js +82 -9
- package/dist/esm/src/utils/protocols.js.map +1 -1
- package/dist/esm/src/utils/records.js +82 -26
- package/dist/esm/src/utils/records.js.map +1 -1
- package/dist/esm/src/utils/secp256k1.js +4 -3
- package/dist/esm/src/utils/secp256k1.js.map +1 -1
- package/dist/esm/src/utils/secp256r1.js +3 -2
- package/dist/esm/src/utils/secp256r1.js.map +1 -1
- package/dist/esm/src/utils/time.js +1 -1
- package/dist/esm/src/utils/url.js +1 -1
- package/dist/esm/src/utils/url.js.map +1 -1
- package/dist/esm/tests/core/auth.spec.js +2 -2
- package/dist/esm/tests/core/auth.spec.js.map +1 -1
- package/dist/esm/tests/core/message-reply.spec.js +3 -3
- package/dist/esm/tests/core/message-reply.spec.js.map +1 -1
- package/dist/esm/tests/core/message.spec.js +13 -13
- package/dist/esm/tests/core/message.spec.js.map +1 -1
- package/dist/esm/tests/core/protocol-authorization.spec.js +3 -3
- package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
- package/dist/esm/tests/dwn.spec.js +27 -37
- package/dist/esm/tests/dwn.spec.js.map +1 -1
- package/dist/esm/tests/{event-log → event-stream}/event-emitter-stream.spec.js +14 -15
- package/dist/esm/tests/event-stream/event-emitter-stream.spec.js.map +1 -0
- package/dist/esm/tests/{event-log → event-stream}/event-stream.spec.js +13 -15
- package/dist/esm/tests/event-stream/event-stream.spec.js.map +1 -0
- package/dist/esm/tests/features/author-delegated-grant.spec.js +281 -135
- package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-delegated-grant.spec.js +57 -59
- package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-signature.spec.js +32 -34
- package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
- package/dist/esm/tests/features/permissions.spec.js +73 -95
- package/dist/esm/tests/features/permissions.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-composition.spec.js +1645 -0
- package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -0
- package/dist/esm/tests/features/protocol-create-action.spec.js +25 -27
- package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-delete-action.spec.js +42 -44
- package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-update-action.spec.js +53 -55
- package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
- package/dist/esm/tests/features/records-prune.spec.js +126 -100
- package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
- package/dist/esm/tests/features/records-tags.spec.js +272 -272
- package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
- package/dist/esm/tests/features/resumable-tasks.spec.js +35 -37
- package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-read.spec.js +112 -112
- package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-subscribe.spec.js +78 -76
- package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-sync.spec.js +528 -0
- package/dist/esm/tests/handlers/messages-sync.spec.js.map +1 -0
- package/dist/esm/tests/handlers/protocols-configure.spec.js +545 -152
- package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/handlers/protocols-query.spec.js +70 -72
- package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-count.spec.js +313 -0
- package/dist/esm/tests/handlers/records-count.spec.js.map +1 -0
- package/dist/esm/tests/handlers/records-delete.spec.js +106 -109
- package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-query.spec.js +863 -463
- package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-read.spec.js +439 -209
- package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-subscribe.spec.js +292 -97
- package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-write.spec.js +481 -483
- package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/messages-get.spec.js +31 -11
- package/dist/esm/tests/interfaces/messages-get.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js +5 -5
- package/dist/esm/tests/interfaces/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-configure.spec.js +64 -134
- package/dist/esm/tests/interfaces/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/protocols-query.spec.js +4 -6
- package/dist/esm/tests/interfaces/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-delete.spec.js +3 -5
- package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-query.spec.js +9 -11
- package/dist/esm/tests/interfaces/records-query.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-read.spec.js +76 -7
- package/dist/esm/tests/interfaces/records-read.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-subscribe.spec.js +7 -9
- package/dist/esm/tests/interfaces/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-write.spec.js +244 -48
- package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
- package/dist/esm/tests/jose/jws/general.spec.js +15 -18
- package/dist/esm/tests/jose/jws/general.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permission-grant.spec.js +114 -0
- package/dist/esm/tests/protocols/permission-grant.spec.js.map +1 -0
- package/dist/esm/tests/protocols/permission-request.spec.js +43 -7
- package/dist/esm/tests/protocols/permission-request.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permissions.spec.js +9 -11
- package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/aggregator.spec.js +90 -92
- package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/deleted-record.spec.js +17 -19
- package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +27 -29
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/nested-roles.spec.js +37 -39
- package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/subscriptions.spec.js +163 -163
- package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
- package/dist/esm/tests/smt/smt-store-level.spec.js +143 -0
- package/dist/esm/tests/smt/smt-store-level.spec.js.map +1 -0
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +741 -0
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +1 -0
- package/dist/esm/tests/state-index/state-index-level.spec.js +254 -0
- package/dist/esm/tests/state-index/state-index-level.spec.js.map +1 -0
- package/dist/esm/tests/store/blockstore-level.spec.js +136 -0
- package/dist/esm/tests/store/blockstore-level.spec.js.map +1 -0
- package/dist/esm/tests/store/blockstore-mock.spec.js +29 -28
- package/dist/esm/tests/store/blockstore-mock.spec.js.map +1 -1
- package/dist/esm/tests/store/data-store-level.spec.js +23 -25
- package/dist/esm/tests/store/data-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/index-level.spec.js +544 -194
- package/dist/esm/tests/store/index-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store-level.spec.js +4 -4
- package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store.spec.js +147 -73
- package/dist/esm/tests/store/message-store.spec.js.map +1 -1
- package/dist/esm/tests/store-dependent-tests.spec.js +1 -0
- package/dist/esm/tests/store-dependent-tests.spec.js.map +1 -1
- package/dist/esm/tests/test-stores.js +5 -5
- package/dist/esm/tests/test-stores.js.map +1 -1
- package/dist/esm/tests/test-suite.js +9 -8
- package/dist/esm/tests/test-suite.js.map +1 -1
- package/dist/esm/tests/utils/cid.spec.js +8 -11
- package/dist/esm/tests/utils/cid.spec.js.map +1 -1
- package/dist/esm/tests/utils/data-stream.spec.js +167 -13
- package/dist/esm/tests/utils/data-stream.spec.js.map +1 -1
- package/dist/esm/tests/utils/encryption-callbacks.spec.js +233 -0
- package/dist/esm/tests/utils/encryption-callbacks.spec.js.map +1 -0
- package/dist/esm/tests/utils/encryption.spec.js +34 -85
- package/dist/esm/tests/utils/encryption.spec.js.map +1 -1
- package/dist/esm/tests/utils/filters.spec.js +67 -69
- package/dist/esm/tests/utils/filters.spec.js.map +1 -1
- package/dist/esm/tests/utils/hd-key.spec.js +3 -3
- package/dist/esm/tests/utils/hd-key.spec.js.map +1 -1
- package/dist/esm/tests/utils/jws.spec.js +54 -3
- package/dist/esm/tests/utils/jws.spec.js.map +1 -1
- package/dist/esm/tests/utils/memory-cache.spec.js +6 -9
- package/dist/esm/tests/utils/memory-cache.spec.js.map +1 -1
- package/dist/esm/tests/utils/messages.spec.js +63 -29
- package/dist/esm/tests/utils/messages.spec.js.map +1 -1
- package/dist/esm/tests/utils/object.spec.js +3 -3
- package/dist/esm/tests/utils/object.spec.js.map +1 -1
- package/dist/esm/tests/utils/poller.js +1 -1
- package/dist/esm/tests/utils/poller.js.map +1 -1
- package/dist/esm/tests/utils/private-key-signer.spec.js +6 -6
- package/dist/esm/tests/utils/private-key-signer.spec.js.map +1 -1
- package/dist/esm/tests/utils/records.spec.js +37 -5
- package/dist/esm/tests/utils/records.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256k1.spec.js +7 -7
- package/dist/esm/tests/utils/secp256k1.spec.js.map +1 -1
- package/dist/esm/tests/utils/secp256r1.spec.js +7 -7
- package/dist/esm/tests/utils/secp256r1.spec.js.map +1 -1
- package/dist/esm/tests/utils/test-data-generator.js +47 -28
- package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
- package/dist/esm/tests/utils/time.spec.js +7 -7
- package/dist/esm/tests/utils/time.spec.js.map +1 -1
- package/dist/esm/tests/utils/url.spec.js +25 -27
- package/dist/esm/tests/utils/url.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js +4 -4
- package/dist/esm/tests/validation/json-schemas/definitions.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js +15 -3
- package/dist/esm/tests/validation/json-schemas/jwk/general-jwk.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js +8 -8
- package/dist/esm/tests/validation/json-schemas/jwk/public-jwk.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js +8 -18
- package/dist/esm/tests/validation/json-schemas/jwk-verification-method.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js +3 -3
- package/dist/esm/tests/validation/json-schemas/protocols/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js +9 -9
- package/dist/esm/tests/validation/json-schemas/records/records-query.spec.js.map +1 -1
- package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js +106 -0
- package/dist/esm/tests/validation/json-schemas/records/records-read.spec.js.map +1 -0
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js +18 -18
- package/dist/esm/tests/validation/json-schemas/records/records-write.spec.js.map +1 -1
- package/dist/esm/tests/vectors/protocol-definitions/email.json +1 -1
- package/dist/esm/tests/vectors/protocol-definitions/friend-role.json +2 -4
- package/dist/esm/tests/vectors/protocol-definitions/slack.json +2 -6
- package/dist/esm/tests/vectors/protocol-definitions/thread-role.json +2 -6
- package/dist/types/generated/precompiled-validators.d.ts +82 -64
- package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
- package/dist/types/src/core/dwn-error.d.ts +27 -3
- package/dist/types/src/core/dwn-error.d.ts.map +1 -1
- package/dist/types/src/core/message-reply.d.ts +1 -1
- package/dist/types/src/core/message.d.ts +3 -3
- package/dist/types/src/core/message.d.ts.map +1 -1
- package/dist/types/src/core/messages-grant-authorization.d.ts +4 -4
- package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/protocol-authorization.d.ts +43 -2
- package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
- package/dist/types/src/core/records-grant-authorization.d.ts +2 -2
- package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/resumable-task-manager.d.ts +1 -0
- package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -1
- package/dist/types/src/dwn.d.ts +8 -8
- package/dist/types/src/dwn.d.ts.map +1 -1
- package/dist/types/src/enums/dwn-interface-method.d.ts +5 -3
- package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -1
- package/dist/types/src/event-stream/event-emitter-stream.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-sync.d.ts +21 -0
- package/dist/types/src/handlers/messages-sync.d.ts.map +1 -0
- package/dist/types/src/handlers/protocols-configure.d.ts +24 -4
- package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
- package/dist/types/src/handlers/protocols-query.d.ts.map +1 -1
- package/dist/types/src/handlers/records-count.d.ts +43 -0
- package/dist/types/src/handlers/records-count.d.ts.map +1 -0
- package/dist/types/src/handlers/records-query.d.ts.map +1 -1
- package/dist/types/src/handlers/records-read.d.ts.map +1 -1
- package/dist/types/src/handlers/records-write.d.ts +5 -5
- package/dist/types/src/handlers/records-write.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +72 -37
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-read.d.ts +2 -2
- package/dist/types/src/interfaces/messages-read.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-subscribe.d.ts +2 -2
- package/dist/types/src/interfaces/messages-subscribe.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-sync.d.ts +16 -0
- package/dist/types/src/interfaces/messages-sync.d.ts.map +1 -0
- package/dist/types/src/interfaces/protocols-configure.d.ts +22 -2
- package/dist/types/src/interfaces/protocols-configure.d.ts.map +1 -1
- package/dist/types/src/interfaces/protocols-query.d.ts +2 -2
- package/dist/types/src/interfaces/protocols-query.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-count.d.ts +27 -0
- package/dist/types/src/interfaces/records-count.d.ts.map +1 -0
- package/dist/types/src/interfaces/records-delete.d.ts +2 -2
- package/dist/types/src/interfaces/records-delete.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-query.d.ts +2 -2
- package/dist/types/src/interfaces/records-query.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-read.d.ts +4 -2
- package/dist/types/src/interfaces/records-read.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-subscribe.d.ts +2 -2
- package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-write.d.ts +37 -15
- package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
- package/dist/types/src/jose/algorithms/signing/ed25519.d.ts.map +1 -1
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts +5 -1
- package/dist/types/src/jose/algorithms/signing/signature-algorithms.d.ts.map +1 -1
- package/dist/types/src/jose/jws/general/builder.d.ts +3 -3
- package/dist/types/src/jose/jws/general/builder.d.ts.map +1 -1
- package/dist/types/src/protocols/permission-grant.d.ts +11 -0
- package/dist/types/src/protocols/permission-grant.d.ts.map +1 -1
- package/dist/types/src/protocols/permission-request.d.ts +11 -0
- package/dist/types/src/protocols/permission-request.d.ts.map +1 -1
- package/dist/types/src/protocols/permissions.d.ts +4 -4
- package/dist/types/src/protocols/permissions.d.ts.map +1 -1
- package/dist/types/src/schema-validator.d.ts +1 -1
- package/dist/types/src/schema-validator.d.ts.map +1 -1
- package/dist/types/src/smt/smt-store-level.d.ts +32 -0
- package/dist/types/src/smt/smt-store-level.d.ts.map +1 -0
- package/dist/types/src/smt/smt-store-memory.d.ts +22 -0
- package/dist/types/src/smt/smt-store-memory.d.ts.map +1 -0
- package/dist/types/src/smt/smt-utils.d.ts +58 -0
- package/dist/types/src/smt/smt-utils.d.ts.map +1 -0
- package/dist/types/src/smt/sparse-merkle-tree.d.ts +124 -0
- package/dist/types/src/smt/sparse-merkle-tree.d.ts.map +1 -0
- package/dist/types/src/state-index/state-index-level.d.ts +83 -0
- package/dist/types/src/state-index/state-index-level.d.ts.map +1 -0
- package/dist/types/src/store/data-store-level.d.ts +1 -2
- package/dist/types/src/store/data-store-level.d.ts.map +1 -1
- package/dist/types/src/store/index-level.d.ts +98 -2
- package/dist/types/src/store/index-level.d.ts.map +1 -1
- package/dist/types/src/store/level-wrapper.d.ts.map +1 -1
- package/dist/types/src/store/message-store-level.d.ts +5 -0
- package/dist/types/src/store/message-store-level.d.ts.map +1 -1
- package/dist/types/src/store/storage-controller.d.ts +7 -7
- package/dist/types/src/store/storage-controller.d.ts.map +1 -1
- package/dist/types/src/types/data-store.d.ts +2 -3
- package/dist/types/src/types/data-store.d.ts.map +1 -1
- package/dist/types/src/types/encryption-types.d.ts +48 -0
- package/dist/types/src/types/encryption-types.d.ts.map +1 -0
- package/dist/types/src/types/jose-types.d.ts +9 -40
- package/dist/types/src/types/jose-types.d.ts.map +1 -1
- package/dist/types/src/types/message-store.d.ts +5 -0
- package/dist/types/src/types/message-store.d.ts.map +1 -1
- package/dist/types/src/types/message-types.d.ts +19 -0
- package/dist/types/src/types/message-types.d.ts.map +1 -1
- package/dist/types/src/types/messages-types.d.ts +16 -11
- package/dist/types/src/types/messages-types.d.ts.map +1 -1
- package/dist/types/src/types/method-handler.d.ts +1 -2
- package/dist/types/src/types/method-handler.d.ts.map +1 -1
- package/dist/types/src/types/permission-types.d.ts +2 -2
- package/dist/types/src/types/permission-types.d.ts.map +1 -1
- package/dist/types/src/types/protocols-types.d.ts +49 -5
- package/dist/types/src/types/protocols-types.d.ts.map +1 -1
- package/dist/types/src/types/records-types.d.ts +23 -7
- package/dist/types/src/types/records-types.d.ts.map +1 -1
- package/dist/types/src/types/signer.d.ts +1 -1
- package/dist/types/src/types/signer.d.ts.map +1 -1
- package/dist/types/src/types/smt-types.d.ts +81 -0
- package/dist/types/src/types/smt-types.d.ts.map +1 -0
- package/dist/types/src/types/state-index.d.ts +90 -0
- package/dist/types/src/types/state-index.d.ts.map +1 -0
- package/dist/types/src/utils/cid.d.ts +1 -2
- package/dist/types/src/utils/cid.d.ts.map +1 -1
- package/dist/types/src/utils/data-stream.d.ts +14 -7
- package/dist/types/src/utils/data-stream.d.ts.map +1 -1
- package/dist/types/src/utils/encryption.d.ts +2 -3
- package/dist/types/src/utils/encryption.d.ts.map +1 -1
- package/dist/types/src/utils/hd-key.d.ts +4 -4
- package/dist/types/src/utils/hd-key.d.ts.map +1 -1
- package/dist/types/src/utils/jws.d.ts +7 -7
- package/dist/types/src/utils/jws.d.ts.map +1 -1
- package/dist/types/src/utils/private-key-signer.d.ts +4 -4
- package/dist/types/src/utils/private-key-signer.d.ts.map +1 -1
- package/dist/types/src/utils/protocols.d.ts +46 -3
- package/dist/types/src/utils/protocols.d.ts.map +1 -1
- package/dist/types/src/utils/records.d.ts +33 -6
- package/dist/types/src/utils/records.d.ts.map +1 -1
- package/dist/types/src/utils/secp256k1.d.ts +11 -11
- package/dist/types/src/utils/secp256k1.d.ts.map +1 -1
- package/dist/types/src/utils/secp256r1.d.ts +8 -8
- package/dist/types/src/utils/secp256r1.d.ts.map +1 -1
- package/dist/types/src/utils/time.d.ts +1 -1
- package/dist/types/tests/dwn.spec.d.ts.map +1 -1
- package/dist/types/tests/event-stream/event-emitter-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/event-stream/event-stream.spec.d.ts.map +1 -0
- package/dist/types/tests/features/author-delegated-grant.spec.d.ts.map +1 -1
- package/dist/types/tests/features/owner-delegated-grant.spec.d.ts.map +1 -1
- package/dist/types/tests/features/owner-signature.spec.d.ts.map +1 -1
- package/dist/types/tests/features/permissions.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-composition.spec.d.ts +5 -0
- package/dist/types/tests/features/protocol-composition.spec.d.ts.map +1 -0
- package/dist/types/tests/features/protocol-create-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-delete-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/protocol-update-action.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-prune.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-tags.spec.d.ts.map +1 -1
- package/dist/types/tests/features/resumable-tasks.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-read.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-subscribe.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/messages-sync.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/protocols-configure.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/protocols-query.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-count.spec.d.ts +2 -0
- package/dist/types/tests/handlers/records-count.spec.d.ts.map +1 -0
- package/dist/types/tests/handlers/records-delete.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-query.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-read.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-subscribe.spec.d.ts.map +1 -1
- package/dist/types/tests/handlers/records-write.spec.d.ts.map +1 -1
- package/dist/types/tests/protocols/permission-grant.spec.d.ts +2 -0
- package/dist/types/tests/protocols/permission-grant.spec.d.ts.map +1 -0
- package/dist/types/tests/scenarios/deleted-record.spec.d.ts.map +1 -1
- package/dist/types/tests/scenarios/end-to-end-tests.spec.d.ts.map +1 -1
- package/dist/types/tests/scenarios/nested-roles.spec.d.ts.map +1 -1
- package/dist/types/tests/smt/smt-store-level.spec.d.ts +2 -0
- package/dist/types/tests/smt/smt-store-level.spec.d.ts.map +1 -0
- package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts +2 -0
- package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts.map +1 -0
- package/dist/types/tests/state-index/state-index-level.spec.d.ts +2 -0
- package/dist/types/tests/state-index/state-index-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/blockstore-level.spec.d.ts +2 -0
- package/dist/types/tests/store/blockstore-level.spec.d.ts.map +1 -0
- package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
- package/dist/types/tests/test-stores.d.ts +4 -4
- package/dist/types/tests/test-stores.d.ts.map +1 -1
- package/dist/types/tests/test-suite.d.ts +2 -2
- package/dist/types/tests/test-suite.d.ts.map +1 -1
- package/dist/types/tests/utils/encryption-callbacks.spec.d.ts +2 -0
- package/dist/types/tests/utils/encryption-callbacks.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/test-data-generator.d.ts +31 -28
- package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
- package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts +2 -0
- package/dist/types/tests/validation/json-schemas/records/records-read.spec.d.ts.map +1 -0
- package/package.json +27 -46
- package/src/core/dwn-error.ts +27 -3
- package/src/core/message-reply.ts +1 -1
- package/src/core/message.ts +5 -5
- package/src/core/messages-grant-authorization.ts +22 -8
- package/src/core/protocol-authorization.ts +345 -68
- package/src/core/records-grant-authorization.ts +2 -2
- package/src/core/resumable-task-manager.ts +4 -5
- package/src/dwn.ts +25 -20
- package/src/enums/dwn-interface-method.ts +5 -3
- package/src/handlers/messages-subscribe.ts +1 -1
- package/src/handlers/messages-sync.ts +129 -0
- package/src/handlers/protocols-configure.ts +195 -17
- package/src/handlers/protocols-query.ts +7 -5
- package/src/handlers/records-count.ts +184 -0
- package/src/handlers/records-query.ts +4 -0
- package/src/handlers/records-read.ts +4 -8
- package/src/handlers/records-write.ts +20 -21
- package/src/index.ts +74 -37
- package/src/interfaces/messages-read.ts +6 -5
- package/src/interfaces/messages-subscribe.ts +7 -6
- package/src/interfaces/messages-sync.ts +59 -0
- package/src/interfaces/protocols-configure.ts +211 -33
- package/src/interfaces/protocols-query.ts +7 -6
- package/src/interfaces/records-count.ts +106 -0
- package/src/interfaces/records-delete.ts +2 -2
- package/src/interfaces/records-query.ts +2 -2
- package/src/interfaces/records-read.ts +26 -3
- package/src/interfaces/records-subscribe.ts +2 -2
- package/src/interfaces/records-write.ts +115 -46
- package/src/jose/algorithms/signing/ed25519.ts +13 -12
- package/src/jose/algorithms/signing/signature-algorithms.ts +6 -1
- package/src/jose/jws/general/builder.ts +3 -3
- package/src/jose/jws/general/verifier.ts +3 -3
- package/src/protocols/permission-grant.ts +51 -0
- package/src/protocols/permission-request.ts +37 -0
- package/src/protocols/permissions.ts +5 -5
- package/src/schema-validator.ts +11 -3
- package/src/smt/smt-store-level.ts +143 -0
- package/src/smt/smt-store-memory.ts +53 -0
- package/src/smt/smt-utils.ts +149 -0
- package/src/smt/sparse-merkle-tree.ts +698 -0
- package/src/state-index/state-index-level.ts +241 -0
- package/src/store/data-store-level.ts +8 -7
- package/src/store/index-level.ts +415 -19
- package/src/store/level-wrapper.ts +1 -1
- package/src/store/message-store-level.ts +62 -0
- package/src/store/storage-controller.ts +21 -19
- package/src/types/data-store.ts +2 -4
- package/src/types/encryption-types.ts +52 -0
- package/src/types/jose-types.ts +10 -42
- package/src/types/message-store.ts +11 -0
- package/src/types/message-types.ts +21 -0
- package/src/types/messages-types.ts +21 -15
- package/src/types/method-handler.ts +1 -2
- package/src/types/permission-types.ts +2 -2
- package/src/types/protocols-types.ts +55 -6
- package/src/types/records-types.ts +26 -7
- package/src/types/signer.ts +1 -1
- package/src/types/smt-types.ts +95 -0
- package/src/types/state-index.ts +100 -0
- package/src/utils/cid.ts +3 -4
- package/src/utils/data-stream.ts +75 -38
- package/src/utils/encryption.ts +24 -39
- package/src/utils/hd-key.ts +6 -6
- package/src/utils/jws.ts +9 -9
- package/src/utils/private-key-signer.ts +9 -8
- package/src/utils/protocols.ts +132 -6
- package/src/utils/records.ts +118 -29
- package/src/utils/secp256k1.ts +23 -21
- package/src/utils/secp256r1.ts +17 -15
- package/src/utils/time.ts +1 -1
- package/src/utils/url.ts +1 -1
- package/dist/cjs/index.js +0 -36749
- package/dist/cjs/package.json +0 -1
- package/dist/esm/src/event-log/event-emitter-stream.js.map +0 -1
- package/dist/esm/src/event-log/event-log-level.js +0 -63
- package/dist/esm/src/event-log/event-log-level.js.map +0 -1
- package/dist/esm/src/handlers/messages-query.js +0 -71
- package/dist/esm/src/handlers/messages-query.js.map +0 -1
- package/dist/esm/src/interfaces/messages-query.js.map +0 -1
- package/dist/esm/src/types/event-log.js +0 -2
- package/dist/esm/src/types/event-log.js.map +0 -1
- package/dist/esm/tests/event-log/event-emitter-stream.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-log-level.spec.js +0 -44
- package/dist/esm/tests/event-log/event-log-level.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-log.spec.js +0 -236
- package/dist/esm/tests/event-log/event-log.spec.js.map +0 -1
- package/dist/esm/tests/event-log/event-stream.spec.js.map +0 -1
- package/dist/esm/tests/handlers/messages-query.spec.js +0 -349
- package/dist/esm/tests/handlers/messages-query.spec.js.map +0 -1
- package/dist/esm/tests/interfaces/messagess-query.spec.js +0 -127
- package/dist/esm/tests/interfaces/messagess-query.spec.js.map +0 -1
- package/dist/esm/tests/scenarios/messages-query.spec.js +0 -395
- package/dist/esm/tests/scenarios/messages-query.spec.js.map +0 -1
- package/dist/types/src/event-log/event-emitter-stream.d.ts.map +0 -1
- package/dist/types/src/event-log/event-log-level.d.ts +0 -35
- package/dist/types/src/event-log/event-log-level.d.ts.map +0 -1
- package/dist/types/src/handlers/messages-query.d.ts +0 -17
- package/dist/types/src/handlers/messages-query.d.ts.map +0 -1
- package/dist/types/src/interfaces/messages-query.d.ts +0 -16
- package/dist/types/src/interfaces/messages-query.d.ts.map +0 -1
- package/dist/types/src/types/event-log.d.ts +0 -52
- package/dist/types/src/types/event-log.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-emitter-stream.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-log-level.spec.d.ts +0 -2
- package/dist/types/tests/event-log/event-log-level.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-log.spec.d.ts +0 -2
- package/dist/types/tests/event-log/event-log.spec.d.ts.map +0 -1
- package/dist/types/tests/event-log/event-stream.spec.d.ts.map +0 -1
- package/dist/types/tests/handlers/messages-query.spec.d.ts +0 -2
- package/dist/types/tests/handlers/messages-query.spec.d.ts.map +0 -1
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts +0 -2
- package/dist/types/tests/interfaces/messagess-query.spec.d.ts.map +0 -1
- package/dist/types/tests/scenarios/messages-query.spec.d.ts +0 -2
- package/dist/types/tests/scenarios/messages-query.spec.d.ts.map +0 -1
- package/src/event-log/event-log-level.ts +0 -72
- package/src/handlers/messages-query.ts +0 -67
- package/src/interfaces/messages-query.ts +0 -60
- package/src/types/event-log.ts +0 -52
- /package/dist/esm/src/{event-log → event-stream}/event-emitter-stream.js +0 -0
- /package/dist/types/src/{event-log → event-stream}/event-emitter-stream.d.ts +0 -0
- /package/dist/types/tests/{event-log → event-stream}/event-emitter-stream.spec.d.ts +0 -0
- /package/dist/types/tests/{event-log → event-stream}/event-stream.spec.d.ts +0 -0
- /package/src/{event-log → event-stream}/event-emitter-stream.ts +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the Sparse Merkle Tree implementation.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A 32-byte hash (SHA-256 output).
|
|
7
|
+
*/
|
|
8
|
+
export type Hash = Uint8Array;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Represents the path through the tree as a sequence of bits derived from the key hash.
|
|
12
|
+
* Each bit determines whether to go left (0) or right (1) at each depth level.
|
|
13
|
+
*/
|
|
14
|
+
export type BitPath = boolean[];
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* A node in the Sparse Merkle Tree.
|
|
18
|
+
*
|
|
19
|
+
* - `internal`: has left and right child hashes but no leaf data
|
|
20
|
+
* - `leaf`: has a key hash and value (the messageCid) but no children
|
|
21
|
+
* - empty subtrees are represented implicitly via precomputed default hashes
|
|
22
|
+
*/
|
|
23
|
+
export type SMTNode =
|
|
24
|
+
| SMTInternalNode
|
|
25
|
+
| SMTLeafNode;
|
|
26
|
+
|
|
27
|
+
export type SMTInternalNode = {
|
|
28
|
+
type : 'internal';
|
|
29
|
+
leftHash : Hash;
|
|
30
|
+
rightHash : Hash;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export type SMTLeafNode = {
|
|
34
|
+
type : 'leaf';
|
|
35
|
+
keyHash : Hash;
|
|
36
|
+
valueCid : string;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* An inclusion or non-inclusion proof for a key in the SMT.
|
|
41
|
+
*
|
|
42
|
+
* - `siblings`: the sibling hashes along the path from leaf to root
|
|
43
|
+
* - `leafNode`: the leaf node at the path (undefined if non-inclusion proof for an empty slot)
|
|
44
|
+
* - `depth`: the depth at which the proof terminates
|
|
45
|
+
*/
|
|
46
|
+
export type SMTProof = {
|
|
47
|
+
siblings : Hash[];
|
|
48
|
+
leafNode : SMTLeafNode | undefined;
|
|
49
|
+
depth : number;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Result of diffing two SMT roots.
|
|
54
|
+
*/
|
|
55
|
+
export type SMTDiffResult = {
|
|
56
|
+
/** messageCids present in the local tree but not the remote tree */
|
|
57
|
+
onlyLocal : string[];
|
|
58
|
+
/** messageCids present in the remote tree but not the local tree */
|
|
59
|
+
onlyRemote : string[];
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Interface for persisting SMT nodes. Implementations can use LevelDB, SQL, or in-memory maps.
|
|
64
|
+
* Nodes are keyed by their hash. The root hash is stored separately.
|
|
65
|
+
*/
|
|
66
|
+
export interface SMTNodeStore {
|
|
67
|
+
open(): Promise<void>;
|
|
68
|
+
close(): Promise<void>;
|
|
69
|
+
clear(): Promise<void>;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Get a node by its hash. Returns undefined if not found.
|
|
73
|
+
*/
|
|
74
|
+
getNode(hash: Hash): Promise<SMTNode | undefined>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Store a node, keyed by its hash.
|
|
78
|
+
*/
|
|
79
|
+
putNode(hash: Hash, node: SMTNode): Promise<void>;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Delete a node by its hash.
|
|
83
|
+
*/
|
|
84
|
+
deleteNode(hash: Hash): Promise<void>;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Get the current root hash. Returns undefined if no root has been set.
|
|
88
|
+
*/
|
|
89
|
+
getRoot(): Promise<Hash | undefined>;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Set the root hash.
|
|
93
|
+
*/
|
|
94
|
+
setRoot(hash: Hash): Promise<void>;
|
|
95
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { Hash } from './smt-types.js';
|
|
2
|
+
import type { KeyValues } from './query-types.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A Sparse Merkle Tree-backed state index that tracks the set of messageCids
|
|
6
|
+
* for each tenant. Replaces the EventLog as the mechanism for sync state tracking.
|
|
7
|
+
*
|
|
8
|
+
* Key differences from EventLog:
|
|
9
|
+
* - No watermark ordering — the SMT is a set, not a log
|
|
10
|
+
* - Root hash provides O(1) "are we in sync?" comparison
|
|
11
|
+
* - Supports subtree hashing for O(log n) set reconciliation
|
|
12
|
+
* - Per-protocol sub-trees for scoped sync
|
|
13
|
+
*/
|
|
14
|
+
export interface StateIndex {
|
|
15
|
+
/**
|
|
16
|
+
* Opens a connection to the underlying store.
|
|
17
|
+
*/
|
|
18
|
+
open(): Promise<void>;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Closes the connection to the underlying store.
|
|
22
|
+
*/
|
|
23
|
+
close(): Promise<void>;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Clears all data. Mainly used for cleaning up in test environments.
|
|
27
|
+
*/
|
|
28
|
+
clear(): Promise<void>;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Insert a message into the state index.
|
|
32
|
+
*
|
|
33
|
+
* @param tenant - the tenant's DID
|
|
34
|
+
* @param messageCid - the CID of the message
|
|
35
|
+
* @param indexes - key-value pairs from the message (used to extract `protocol` for
|
|
36
|
+
* per-protocol sub-tree maintenance, and stored for reverse lookup during deletion)
|
|
37
|
+
*/
|
|
38
|
+
insert(tenant: string, messageCid: string, indexes: KeyValues): Promise<void>;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Delete messages from the state index.
|
|
42
|
+
*
|
|
43
|
+
* @param tenant - the tenant's DID
|
|
44
|
+
* @param messageCids - the CIDs of the messages to remove
|
|
45
|
+
*/
|
|
46
|
+
delete(tenant: string, messageCids: string[]): Promise<void>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Get the SMT root hash for a tenant's global state (all protocols).
|
|
50
|
+
*
|
|
51
|
+
* @param tenant - the tenant's DID
|
|
52
|
+
* @returns the root hash. Returns the default empty root if no messages exist.
|
|
53
|
+
*/
|
|
54
|
+
getRoot(tenant: string): Promise<Hash>;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Get the SMT root hash for a specific protocol's state within a tenant.
|
|
58
|
+
*
|
|
59
|
+
* @param tenant - the tenant's DID
|
|
60
|
+
* @param protocol - the protocol URI
|
|
61
|
+
* @returns the root hash. Returns the default empty root if no messages exist for this protocol.
|
|
62
|
+
*/
|
|
63
|
+
getProtocolRoot(tenant: string, protocol: string): Promise<Hash>;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Get the hash of a subtree at a given bit prefix within a tenant's global tree.
|
|
67
|
+
* Used by the sync protocol for tree walking during set reconciliation.
|
|
68
|
+
*
|
|
69
|
+
* @param tenant - the tenant's DID
|
|
70
|
+
* @param prefix - array of booleans representing the path (false=left, true=right)
|
|
71
|
+
*/
|
|
72
|
+
getSubtreeHash(tenant: string, prefix: boolean[]): Promise<Hash>;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Get the hash of a subtree at a given bit prefix within a protocol-scoped tree.
|
|
76
|
+
*
|
|
77
|
+
* @param tenant - the tenant's DID
|
|
78
|
+
* @param protocol - the protocol URI
|
|
79
|
+
* @param prefix - array of booleans representing the path (false=left, true=right)
|
|
80
|
+
*/
|
|
81
|
+
getProtocolSubtreeHash(tenant: string, protocol: string, prefix: boolean[]): Promise<Hash>;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Get all leaf messageCids under a given prefix in the tenant's global tree.
|
|
85
|
+
* Used by the sync protocol to enumerate leaves in a divergent subtree.
|
|
86
|
+
*
|
|
87
|
+
* @param tenant - the tenant's DID
|
|
88
|
+
* @param prefix - array of booleans representing the path
|
|
89
|
+
*/
|
|
90
|
+
getLeaves(tenant: string, prefix: boolean[]): Promise<string[]>;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Get all leaf messageCids under a given prefix in a protocol-scoped tree.
|
|
94
|
+
*
|
|
95
|
+
* @param tenant - the tenant's DID
|
|
96
|
+
* @param protocol - the protocol URI
|
|
97
|
+
* @param prefix - array of booleans representing the path
|
|
98
|
+
*/
|
|
99
|
+
getProtocolLeaves(tenant: string, protocol: string, prefix: boolean[]): Promise<string[]>;
|
|
100
|
+
}
|
package/src/utils/cid.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as cbor from '@ipld/dag-cbor';
|
|
2
2
|
|
|
3
|
-
import type { Readable } from 'readable-stream';
|
|
4
|
-
|
|
5
3
|
import { BlockstoreMock } from '../store/blockstore-mock.js';
|
|
6
4
|
import { CID } from 'multiformats/cid';
|
|
5
|
+
import { DataStream } from './data-stream.js';
|
|
7
6
|
import { importer } from 'ipfs-unixfs-importer';
|
|
8
7
|
import { sha256 } from 'multiformats/hashes/sha2';
|
|
9
8
|
import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
|
|
@@ -89,8 +88,8 @@ export class Cid {
|
|
|
89
88
|
/**
|
|
90
89
|
* @returns V1 CID of the DAG comprised by chunking data into unixfs DAG-PB encoded blocks
|
|
91
90
|
*/
|
|
92
|
-
public static async computeDagPbCidFromStream(dataStream:
|
|
93
|
-
const asyncDataBlocks = importer([{ content: dataStream }], new BlockstoreMock(), { cidVersion: 1 });
|
|
91
|
+
public static async computeDagPbCidFromStream(dataStream: ReadableStream<Uint8Array>): Promise<string> {
|
|
92
|
+
const asyncDataBlocks = importer([{ content: DataStream.asAsyncIterable(dataStream) }], new BlockstoreMock(), { cidVersion: 1 });
|
|
94
93
|
|
|
95
94
|
// NOTE: the last block contains the root CID
|
|
96
95
|
let block;
|
package/src/utils/data-stream.ts
CHANGED
|
@@ -1,33 +1,38 @@
|
|
|
1
1
|
import { Encoder } from './encoder.js';
|
|
2
|
-
import { PassThrough, Readable } from 'readable-stream';
|
|
3
2
|
|
|
4
3
|
/**
|
|
5
|
-
* Utility class for readable data stream
|
|
4
|
+
* Utility class for readable data stream using Web ReadableStream API.
|
|
6
5
|
*/
|
|
7
6
|
export class DataStream {
|
|
8
7
|
/**
|
|
9
8
|
* Reads the entire readable stream given into array of bytes.
|
|
9
|
+
* @throws TypeError if `readableStream` is null or undefined.
|
|
10
10
|
*/
|
|
11
|
-
public static async toBytes(readableStream:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
11
|
+
public static async toBytes(readableStream: ReadableStream<Uint8Array>): Promise<Uint8Array> {
|
|
12
|
+
if (readableStream == null) {
|
|
13
|
+
throw new TypeError('DataStream.toBytes(): expected a ReadableStream but received ' + readableStream);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const reader = readableStream.getReader();
|
|
17
|
+
const chunks: Uint8Array[] = [];
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
while (true) {
|
|
21
|
+
const { done, value } = await reader.read();
|
|
22
|
+
if (done) { break; }
|
|
23
|
+
chunks.push(value);
|
|
24
|
+
}
|
|
25
|
+
} finally {
|
|
26
|
+
reader.releaseLock();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return DataStream.concatenateArrayOfBytes(chunks);
|
|
25
30
|
}
|
|
26
31
|
|
|
27
32
|
/**
|
|
28
33
|
* Reads the entire readable stream and JSON parses it into an object.
|
|
29
34
|
*/
|
|
30
|
-
public static async toObject(readableStream:
|
|
35
|
+
public static async toObject(readableStream: ReadableStream<Uint8Array>): Promise<object> {
|
|
31
36
|
const contentBytes = await DataStream.toBytes(readableStream);
|
|
32
37
|
const contentObject = Encoder.bytesToObject(contentBytes);
|
|
33
38
|
return contentObject;
|
|
@@ -54,45 +59,77 @@ export class DataStream {
|
|
|
54
59
|
/**
|
|
55
60
|
* Creates a readable stream from the bytes given.
|
|
56
61
|
*/
|
|
57
|
-
public static fromBytes(bytes: Uint8Array):
|
|
62
|
+
public static fromBytes(bytes: Uint8Array): ReadableStream<Uint8Array> {
|
|
58
63
|
// chunk up the bytes to simulate a more real-world like behavior
|
|
59
64
|
const chunkLength = 100_000;
|
|
60
|
-
let
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
this.push(null);
|
|
67
|
-
} else {
|
|
68
|
-
this.push(bytes.subarray(currentIndex, currentIndex + chunkLength));
|
|
69
|
-
|
|
70
|
-
currentIndex = currentIndex + chunkLength;
|
|
65
|
+
let offset = 0;
|
|
66
|
+
return new ReadableStream({
|
|
67
|
+
pull(controller): void {
|
|
68
|
+
if (offset >= bytes.length) {
|
|
69
|
+
controller.close();
|
|
70
|
+
return;
|
|
71
71
|
}
|
|
72
|
+
const end = Math.min(offset + chunkLength, bytes.length);
|
|
73
|
+
controller.enqueue(bytes.subarray(offset, end));
|
|
74
|
+
offset = end;
|
|
72
75
|
}
|
|
73
76
|
});
|
|
74
|
-
|
|
75
|
-
return readableStream;
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
/**
|
|
79
80
|
* Creates a readable stream from the object given.
|
|
80
81
|
*/
|
|
81
|
-
public static fromObject(object: Record<string, any>):
|
|
82
|
+
public static fromObject(object: Record<string, any>): ReadableStream<Uint8Array> {
|
|
82
83
|
const bytes = Encoder.objectToBytes(object);
|
|
83
84
|
return DataStream.fromBytes(bytes);
|
|
84
85
|
}
|
|
85
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Adapts a Web ReadableStream into an AsyncIterable for compatibility with libraries
|
|
89
|
+
* like `ipfs-unixfs-importer` that expect `AsyncIterable<Uint8Array>`.
|
|
90
|
+
* @throws TypeError if `stream` is null or undefined.
|
|
91
|
+
*/
|
|
92
|
+
public static async * asAsyncIterable(stream: ReadableStream<Uint8Array>): AsyncIterable<Uint8Array> {
|
|
93
|
+
if (stream == null) {
|
|
94
|
+
throw new TypeError('DataStream.asAsyncIterable(): expected a ReadableStream but received ' + stream);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const reader = stream.getReader();
|
|
98
|
+
try {
|
|
99
|
+
while (true) {
|
|
100
|
+
const { done, value } = await reader.read();
|
|
101
|
+
if (done) { break; }
|
|
102
|
+
yield value;
|
|
103
|
+
}
|
|
104
|
+
} finally {
|
|
105
|
+
reader.releaseLock();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
86
109
|
/**
|
|
87
110
|
* Duplicates the given data stream into the number of streams specified so that multiple handlers can consume the same data stream.
|
|
111
|
+
* Uses the native `ReadableStream.tee()` method for 2 copies, or a custom fan-out for N copies.
|
|
88
112
|
*/
|
|
89
|
-
public static duplicateDataStream(dataStream:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
113
|
+
public static duplicateDataStream(dataStream: ReadableStream<Uint8Array>, count: number): ReadableStream<Uint8Array>[] {
|
|
114
|
+
if (count < 1) {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
if (count === 1) {
|
|
118
|
+
return [dataStream];
|
|
119
|
+
}
|
|
120
|
+
if (count === 2) {
|
|
121
|
+
return dataStream.tee();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// For N > 2, recursively tee: tee the stream, keep one copy, and tee the other (count - 1) times
|
|
125
|
+
const streams: ReadableStream<Uint8Array>[] = [];
|
|
126
|
+
let remaining: ReadableStream<Uint8Array> = dataStream;
|
|
127
|
+
for (let i = 0; i < count - 1; i++) {
|
|
128
|
+
const [copy, rest] = remaining.tee();
|
|
129
|
+
streams.push(copy);
|
|
130
|
+
remaining = rest;
|
|
95
131
|
}
|
|
132
|
+
streams.push(remaining);
|
|
96
133
|
|
|
97
134
|
return streams;
|
|
98
135
|
}
|
package/src/utils/encryption.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as crypto from 'crypto';
|
|
2
2
|
import * as eciesjs from 'eciesjs';
|
|
3
|
-
import { Readable } from 'readable-stream';
|
|
4
3
|
|
|
5
4
|
// compress publicKey for message encryption
|
|
6
5
|
eciesjs.ECIES_CONFIG.isEphemeralKeyCompressed = true;
|
|
@@ -12,57 +11,43 @@ export class Encryption {
|
|
|
12
11
|
/**
|
|
13
12
|
* Encrypts the given plaintext stream using AES-256-CTR algorithm.
|
|
14
13
|
*/
|
|
15
|
-
public static async aes256CtrEncrypt(
|
|
14
|
+
public static async aes256CtrEncrypt(
|
|
15
|
+
key: Uint8Array, initializationVector: Uint8Array, plaintextStream: ReadableStream<Uint8Array>
|
|
16
|
+
): Promise<ReadableStream<Uint8Array>> {
|
|
16
17
|
const cipher = crypto.createCipheriv('aes-256-ctr', key, initializationVector);
|
|
17
18
|
|
|
18
|
-
const
|
|
19
|
-
|
|
19
|
+
const transform = new TransformStream<Uint8Array, Uint8Array>({
|
|
20
|
+
transform(chunk, controller): void {
|
|
21
|
+
controller.enqueue(new Uint8Array(cipher.update(chunk)));
|
|
22
|
+
},
|
|
23
|
+
flush(controller): void {
|
|
24
|
+
const finalChunk = cipher.final();
|
|
25
|
+
if (finalChunk.length > 0) { controller.enqueue(new Uint8Array(finalChunk)); }
|
|
26
|
+
}
|
|
20
27
|
});
|
|
21
28
|
|
|
22
|
-
plaintextStream.
|
|
23
|
-
const encryptedChunk = cipher.update(chunk);
|
|
24
|
-
cipherStream.push(encryptedChunk);
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
plaintextStream.on('end', () => {
|
|
28
|
-
const finalChunk = cipher.final();
|
|
29
|
-
cipherStream.push(finalChunk);
|
|
30
|
-
cipherStream.push(null);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
plaintextStream.on('error', (err) => {
|
|
34
|
-
cipherStream.emit('error', err);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
return cipherStream;
|
|
29
|
+
return plaintextStream.pipeThrough(transform);
|
|
38
30
|
}
|
|
39
31
|
|
|
40
32
|
/**
|
|
41
33
|
* Decrypts the given cipher stream using AES-256-CTR algorithm.
|
|
42
34
|
*/
|
|
43
|
-
public static async aes256CtrDecrypt(
|
|
35
|
+
public static async aes256CtrDecrypt(
|
|
36
|
+
key: Uint8Array, initializationVector: Uint8Array, cipherStream: ReadableStream<Uint8Array>
|
|
37
|
+
): Promise<ReadableStream<Uint8Array>> {
|
|
44
38
|
const decipher = crypto.createDecipheriv('aes-256-ctr', key, initializationVector);
|
|
45
39
|
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
cipherStream.on('end', () => {
|
|
56
|
-
const finalChunk = decipher.final();
|
|
57
|
-
plaintextStream.push(finalChunk);
|
|
58
|
-
plaintextStream.push(null);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
cipherStream.on('error', (err) => {
|
|
62
|
-
plaintextStream.emit('error', err);
|
|
40
|
+
const transform = new TransformStream<Uint8Array, Uint8Array>({
|
|
41
|
+
transform(chunk, controller): void {
|
|
42
|
+
controller.enqueue(new Uint8Array(decipher.update(chunk)));
|
|
43
|
+
},
|
|
44
|
+
flush(controller): void {
|
|
45
|
+
const finalChunk = decipher.final();
|
|
46
|
+
if (finalChunk.length > 0) { controller.enqueue(new Uint8Array(finalChunk)); }
|
|
47
|
+
}
|
|
63
48
|
});
|
|
64
49
|
|
|
65
|
-
return
|
|
50
|
+
return cipherStream.pipeThrough(transform);
|
|
66
51
|
}
|
|
67
52
|
|
|
68
53
|
/**
|
package/src/utils/hd-key.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PrivateKeyJwk, PublicKeyJwk } from '../types/jose-types.js';
|
|
2
2
|
|
|
3
3
|
import { Encoder } from './encoder.js';
|
|
4
4
|
import { getWebcryptoSubtle } from '@noble/ciphers/webcrypto';
|
|
@@ -23,7 +23,7 @@ export type DerivedPrivateJwk = {
|
|
|
23
23
|
rootKeyId: string,
|
|
24
24
|
derivationScheme: KeyDerivationScheme;
|
|
25
25
|
derivationPath?: string[];
|
|
26
|
-
derivedPrivateKey:
|
|
26
|
+
derivedPrivateKey: PrivateKeyJwk,
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
/**
|
|
@@ -38,12 +38,12 @@ export class HdKey {
|
|
|
38
38
|
const ancestorPrivateKey = Secp256k1.privateJwkToBytes(ancestorKey.derivedPrivateKey);
|
|
39
39
|
const ancestorPrivateKeyDerivationPath = ancestorKey.derivationPath ?? [];
|
|
40
40
|
const derivedPrivateKeyBytes = await HdKey.derivePrivateKeyBytes(ancestorPrivateKey, subDerivationPath);
|
|
41
|
-
const
|
|
41
|
+
const derivedPrivateKeyJwk = await Secp256k1.privateKeyToJwk(derivedPrivateKeyBytes);
|
|
42
42
|
const derivedDescendantPrivateKey: DerivedPrivateJwk = {
|
|
43
43
|
rootKeyId : ancestorKey.rootKeyId,
|
|
44
44
|
derivationScheme : ancestorKey.derivationScheme,
|
|
45
45
|
derivationPath : [...ancestorPrivateKeyDerivationPath, ...subDerivationPath],
|
|
46
|
-
derivedPrivateKey :
|
|
46
|
+
derivedPrivateKey : derivedPrivateKeyJwk
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
return derivedDescendantPrivateKey;
|
|
@@ -53,7 +53,7 @@ export class HdKey {
|
|
|
53
53
|
* Derives a descendant public key from an ancestor private key.
|
|
54
54
|
* NOTE: currently only supports SECP256K1 keys.
|
|
55
55
|
*/
|
|
56
|
-
public static async derivePublicKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<
|
|
56
|
+
public static async derivePublicKey(ancestorKey: DerivedPrivateJwk, subDerivationPath: string[]): Promise<PublicKeyJwk> {
|
|
57
57
|
const derivedDescendantPrivateKey = await HdKey.derivePrivateKey(ancestorKey, subDerivationPath);
|
|
58
58
|
const derivedDescendantPublicKey = await Secp256k1.getPublicJwk(derivedDescendantPrivateKey.derivedPrivateKey);
|
|
59
59
|
|
|
@@ -82,7 +82,7 @@ export class HdKey {
|
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
84
|
* Derives a key using HMAC-based Extract-and-Expand Key Derivation Function (HKDF) as defined in RFC 5869.
|
|
85
|
-
* TODO: Consolidate HKDF implementation and usage with web5-js - https://github.com/
|
|
85
|
+
* TODO: Consolidate HKDF implementation and usage with web5-js - https://github.com/enboxorg/enbox/issues/742
|
|
86
86
|
*/
|
|
87
87
|
public static async deriveKeyUsingHkdf(params: {
|
|
88
88
|
hashAlgorithm: 'SHA-256' | 'SHA-384' | 'SHA-512',
|
package/src/utils/jws.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import type { GeneralJws } from '../types/jws-types.js';
|
|
2
|
+
import type { MessageSigner } from '../types/signer.js';
|
|
2
3
|
import type { SignatureEntry } from '../types/jws-types.js';
|
|
3
|
-
import type {
|
|
4
|
-
import type { KeyMaterial, PublicJwk } from '../types/jose-types.js';
|
|
4
|
+
import type { KeyMaterial, PublicKeyJwk } from '../types/jose-types.js';
|
|
5
5
|
|
|
6
6
|
import isPlainObject from 'lodash/isPlainObject.js';
|
|
7
7
|
|
|
8
8
|
import { Encoder } from './encoder.js';
|
|
9
9
|
import { PrivateKeySigner } from './private-key-signer.js';
|
|
10
|
-
import { signatureAlgorithms } from '../jose/algorithms/signing/signature-algorithms.js';
|
|
11
10
|
import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
|
|
11
|
+
import { signatureAlgorithms, type SupportedCurve } from '../jose/algorithms/signing/signature-algorithms.js';
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
/**
|
|
@@ -36,8 +36,8 @@ export class Jws {
|
|
|
36
36
|
* Verifies the signature against the given payload.
|
|
37
37
|
* @returns `true` if signature is valid; `false` otherwise
|
|
38
38
|
*/
|
|
39
|
-
public static async verifySignature(base64UrlPayload: string, signatureEntry: SignatureEntry, jwkPublic:
|
|
40
|
-
const signatureAlgorithm = signatureAlgorithms[jwkPublic.crv];
|
|
39
|
+
public static async verifySignature(base64UrlPayload: string, signatureEntry: SignatureEntry, jwkPublic: PublicKeyJwk): Promise<boolean> {
|
|
40
|
+
const signatureAlgorithm = signatureAlgorithms[('crv' in jwkPublic ? jwkPublic.crv : undefined) as SupportedCurve];
|
|
41
41
|
|
|
42
42
|
if (!signatureAlgorithm) {
|
|
43
43
|
throw new DwnError(DwnErrorCode.JwsVerifySignatureUnsupportedCrv, `unsupported crv. crv must be one of ${Object.keys(signatureAlgorithms)}`);
|
|
@@ -76,17 +76,17 @@ export class Jws {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
|
-
* Creates a
|
|
79
|
+
* Creates a MessageSigner[] from the given Personas.
|
|
80
80
|
*/
|
|
81
|
-
public static createSigners(keyMaterials: KeyMaterial[]):
|
|
81
|
+
public static createSigners(keyMaterials: KeyMaterial[]): MessageSigner[] {
|
|
82
82
|
const signers = keyMaterials.map((keyMaterial) => Jws.createSigner(keyMaterial));
|
|
83
83
|
return signers;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/**
|
|
87
|
-
* Creates a
|
|
87
|
+
* Creates a MessageSigner from the given Persona.
|
|
88
88
|
*/
|
|
89
|
-
public static createSigner(keyMaterial: KeyMaterial):
|
|
89
|
+
public static createSigner(keyMaterial: KeyMaterial): MessageSigner {
|
|
90
90
|
const privateJwk = keyMaterial.keyPair.privateJwk;
|
|
91
91
|
const keyId = keyMaterial.keyId;
|
|
92
92
|
const signer = new PrivateKeySigner({ privateJwk, keyId });
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { MessageSigner } from '../types/signer.js';
|
|
2
|
+
import type { PrivateKeyJwk } from '../types/jose-types.js';
|
|
3
3
|
|
|
4
|
-
import { signatureAlgorithms } from '../jose/algorithms/signing/signature-algorithms.js';
|
|
5
4
|
import { DwnError, DwnErrorCode } from '../core/dwn-error.js';
|
|
5
|
+
import { signatureAlgorithms, type SupportedCurve } from '../jose/algorithms/signing/signature-algorithms.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Input to `PrivateKeySigner` constructor.
|
|
@@ -11,7 +11,7 @@ export type PrivateKeySignerOptions = {
|
|
|
11
11
|
/**
|
|
12
12
|
* Private JWK to create the signer from.
|
|
13
13
|
*/
|
|
14
|
-
privateJwk:
|
|
14
|
+
privateJwk: PrivateKeyJwk;
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* If not specified, the constructor will attempt to default/fall back to the `kid` value in the given `privateJwk`.
|
|
@@ -27,10 +27,10 @@ export type PrivateKeySignerOptions = {
|
|
|
27
27
|
/**
|
|
28
28
|
* A signer that signs using a private key.
|
|
29
29
|
*/
|
|
30
|
-
export class PrivateKeySigner implements
|
|
30
|
+
export class PrivateKeySigner implements MessageSigner {
|
|
31
31
|
public keyId;
|
|
32
32
|
public algorithm;
|
|
33
|
-
private privateJwk:
|
|
33
|
+
private privateJwk: PrivateKeyJwk;
|
|
34
34
|
private signatureAlgorithm;
|
|
35
35
|
|
|
36
36
|
public constructor(options: PrivateKeySignerOptions) {
|
|
@@ -52,12 +52,13 @@ export class PrivateKeySigner implements Signer {
|
|
|
52
52
|
this.keyId = options.keyId ?? options.privateJwk.kid!;
|
|
53
53
|
this.algorithm = options.algorithm ?? options.privateJwk.alg!;
|
|
54
54
|
this.privateJwk = options.privateJwk;
|
|
55
|
-
|
|
55
|
+
const crv = 'crv' in options.privateJwk ? options.privateJwk.crv : undefined;
|
|
56
|
+
this.signatureAlgorithm = signatureAlgorithms[crv as SupportedCurve];
|
|
56
57
|
|
|
57
58
|
if (!this.signatureAlgorithm) {
|
|
58
59
|
throw new DwnError(
|
|
59
60
|
DwnErrorCode.PrivateKeySignerUnsupportedCurve,
|
|
60
|
-
`Unsupported crv ${
|
|
61
|
+
`Unsupported crv ${crv}, crv must be one of ${Object.keys(signatureAlgorithms)}`
|
|
61
62
|
);
|
|
62
63
|
}
|
|
63
64
|
}
|