@enbox/dwn-sdk-js 0.4.0 → 0.4.2
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 +4 -4
- package/dist/browser.mjs +3 -10
- package/dist/browser.mjs.map +4 -4
- package/dist/esm/generated/precompiled-validators.js +799 -885
- package/dist/esm/generated/precompiled-validators.js.map +1 -1
- package/dist/esm/src/core/dwn-constant.js +5 -0
- package/dist/esm/src/core/dwn-constant.js.map +1 -1
- package/dist/esm/src/core/dwn-error.js +12 -4
- package/dist/esm/src/core/dwn-error.js.map +1 -1
- package/dist/esm/src/core/grant-authorization.js +9 -18
- package/dist/esm/src/core/grant-authorization.js.map +1 -1
- package/dist/esm/src/core/message-reply.js.map +1 -1
- package/dist/esm/src/core/messages-grant-authorization.js +28 -45
- package/dist/esm/src/core/messages-grant-authorization.js.map +1 -1
- package/dist/esm/src/core/protocol-authorization-action.js +25 -27
- package/dist/esm/src/core/protocol-authorization-action.js.map +1 -1
- package/dist/esm/src/core/protocol-authorization-validation.js +34 -89
- package/dist/esm/src/core/protocol-authorization-validation.js.map +1 -1
- package/dist/esm/src/core/protocol-authorization.js +44 -118
- package/dist/esm/src/core/protocol-authorization.js.map +1 -1
- package/dist/esm/src/core/protocols-grant-authorization.js +5 -5
- package/dist/esm/src/core/protocols-grant-authorization.js.map +1 -1
- package/dist/esm/src/core/recording-validation-state-reader.js +84 -0
- package/dist/esm/src/core/recording-validation-state-reader.js.map +1 -0
- package/dist/esm/src/core/records-grant-authorization.js +11 -11
- package/dist/esm/src/core/records-grant-authorization.js.map +1 -1
- package/dist/esm/src/core/replication-apply.js +123 -28
- package/dist/esm/src/core/replication-apply.js.map +1 -1
- package/dist/esm/src/core/resumable-task-manager.js +5 -4
- package/dist/esm/src/core/resumable-task-manager.js.map +1 -1
- package/dist/esm/src/core/validation-state-reader.js +237 -0
- package/dist/esm/src/core/validation-state-reader.js.map +1 -0
- package/dist/esm/src/dwn.js +165 -132
- package/dist/esm/src/dwn.js.map +1 -1
- package/dist/esm/src/enums/dwn-interface-method.js +0 -1
- package/dist/esm/src/enums/dwn-interface-method.js.map +1 -1
- package/dist/esm/src/event-stream/durable-event-log.js +365 -0
- package/dist/esm/src/event-stream/durable-event-log.js.map +1 -0
- package/dist/esm/src/event-stream/event-emitter-wake-publisher.js +25 -0
- package/dist/esm/src/event-stream/event-emitter-wake-publisher.js.map +1 -0
- package/dist/esm/src/handlers/messages-query.js +159 -0
- package/dist/esm/src/handlers/messages-query.js.map +1 -0
- package/dist/esm/src/handlers/messages-read.js +5 -5
- package/dist/esm/src/handlers/messages-read.js.map +1 -1
- package/dist/esm/src/handlers/messages-subscribe.js +8 -8
- package/dist/esm/src/handlers/messages-subscribe.js.map +1 -1
- package/dist/esm/src/handlers/protocols-configure.js +30 -49
- package/dist/esm/src/handlers/protocols-configure.js.map +1 -1
- package/dist/esm/src/handlers/protocols-query.js +1 -1
- package/dist/esm/src/handlers/protocols-query.js.map +1 -1
- package/dist/esm/src/handlers/records-count.js +20 -11
- package/dist/esm/src/handlers/records-count.js.map +1 -1
- package/dist/esm/src/handlers/records-delete.js +20 -16
- package/dist/esm/src/handlers/records-delete.js.map +1 -1
- package/dist/esm/src/handlers/records-query.js +35 -11
- package/dist/esm/src/handlers/records-query.js.map +1 -1
- package/dist/esm/src/handlers/records-read.js +52 -42
- package/dist/esm/src/handlers/records-read.js.map +1 -1
- package/dist/esm/src/handlers/records-subscribe.js +107 -11
- package/dist/esm/src/handlers/records-subscribe.js.map +1 -1
- package/dist/esm/src/handlers/records-write.js +62 -116
- package/dist/esm/src/handlers/records-write.js.map +1 -1
- package/dist/esm/src/index.js +6 -7
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/interfaces/{messages-sync.js → messages-query.js} +21 -15
- package/dist/esm/src/interfaces/messages-query.js.map +1 -0
- package/dist/esm/src/interfaces/protocols-configure.js +12 -9
- package/dist/esm/src/interfaces/protocols-configure.js.map +1 -1
- package/dist/esm/src/interfaces/protocols-query.js +3 -4
- package/dist/esm/src/interfaces/protocols-query.js.map +1 -1
- package/dist/esm/src/interfaces/records-count.js +4 -3
- package/dist/esm/src/interfaces/records-count.js.map +1 -1
- package/dist/esm/src/interfaces/records-delete.js +21 -4
- package/dist/esm/src/interfaces/records-delete.js.map +1 -1
- package/dist/esm/src/interfaces/records-query.js +4 -3
- package/dist/esm/src/interfaces/records-query.js.map +1 -1
- package/dist/esm/src/interfaces/records-read.js +3 -3
- package/dist/esm/src/interfaces/records-read.js.map +1 -1
- package/dist/esm/src/interfaces/records-subscribe.js +4 -3
- package/dist/esm/src/interfaces/records-subscribe.js.map +1 -1
- package/dist/esm/src/interfaces/records-write.js +27 -13
- package/dist/esm/src/interfaces/records-write.js.map +1 -1
- package/dist/esm/src/protocols/permissions.js +27 -34
- package/dist/esm/src/protocols/permissions.js.map +1 -1
- package/dist/esm/src/store/index-level.js +24 -9
- package/dist/esm/src/store/index-level.js.map +1 -1
- package/dist/esm/src/store/level-wrapper.js +7 -0
- package/dist/esm/src/store/level-wrapper.js.map +1 -1
- package/dist/esm/src/store/message-store-level.js +536 -42
- package/dist/esm/src/store/message-store-level.js.map +1 -1
- package/dist/esm/src/store/storage-controller.js +58 -49
- package/dist/esm/src/store/storage-controller.js.map +1 -1
- package/dist/esm/src/types/message-types.js.map +1 -1
- package/dist/esm/src/types/validation-state-reader.js +2 -0
- package/dist/esm/src/types/validation-state-reader.js.map +1 -0
- package/dist/esm/src/utils/messages.js +17 -0
- package/dist/esm/src/utils/messages.js.map +1 -1
- package/dist/esm/src/utils/protocol-tags.js +262 -0
- package/dist/esm/src/utils/protocol-tags.js.map +1 -0
- package/dist/esm/src/utils/record-limit-occupancy.js +244 -0
- package/dist/esm/src/utils/record-limit-occupancy.js.map +1 -0
- package/dist/esm/src/utils/records.js +50 -14
- package/dist/esm/src/utils/records.js.map +1 -1
- package/dist/esm/src/utils/replication.js +85 -0
- package/dist/esm/src/utils/replication.js.map +1 -0
- package/dist/esm/tests/core/grant-authorization.spec.js +4 -4
- package/dist/esm/tests/core/grant-authorization.spec.js.map +1 -1
- package/dist/esm/tests/core/process-message-parity.spec.js +222 -0
- package/dist/esm/tests/core/process-message-parity.spec.js.map +1 -0
- package/dist/esm/tests/core/protocol-authorization.spec.js +5 -2
- package/dist/esm/tests/core/protocol-authorization.spec.js.map +1 -1
- package/dist/esm/tests/core/records-grant-authorization.spec.js +5 -5
- package/dist/esm/tests/core/records-grant-authorization.spec.js.map +1 -1
- package/dist/esm/tests/core/replication-apply.spec.js +55 -1
- package/dist/esm/tests/core/replication-apply.spec.js.map +1 -1
- package/dist/esm/tests/core/replication-replay-property.spec.js +350 -0
- package/dist/esm/tests/core/replication-replay-property.spec.js.map +1 -0
- package/dist/esm/tests/core/validation-read-closure.spec.js +469 -0
- package/dist/esm/tests/core/validation-read-closure.spec.js.map +1 -0
- package/dist/esm/tests/core/validation-state-reader.spec.js +716 -0
- package/dist/esm/tests/core/validation-state-reader.spec.js.map +1 -0
- package/dist/esm/tests/durable-event-log.spec.js +373 -0
- package/dist/esm/tests/durable-event-log.spec.js.map +1 -0
- package/dist/esm/tests/dwn.spec.js +504 -35
- package/dist/esm/tests/dwn.spec.js.map +1 -1
- package/dist/esm/tests/features/author-delegated-grant.spec.js +9 -6
- package/dist/esm/tests/features/author-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-delegated-grant.spec.js +1 -4
- package/dist/esm/tests/features/owner-delegated-grant.spec.js.map +1 -1
- package/dist/esm/tests/features/owner-signature.spec.js +1 -4
- package/dist/esm/tests/features/owner-signature.spec.js.map +1 -1
- package/dist/esm/tests/features/permissions.spec.js +165 -4
- package/dist/esm/tests/features/permissions.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-composition.spec.js +8 -11
- package/dist/esm/tests/features/protocol-composition.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-create-action.spec.js +1 -4
- package/dist/esm/tests/features/protocol-create-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-delete-action.spec.js +3 -5
- package/dist/esm/tests/features/protocol-delete-action.spec.js.map +1 -1
- package/dist/esm/tests/features/protocol-update-action.spec.js +3 -6
- package/dist/esm/tests/features/protocol-update-action.spec.js.map +1 -1
- package/dist/esm/tests/features/records-delivery.spec.js +1 -4
- package/dist/esm/tests/features/records-delivery.spec.js.map +1 -1
- package/dist/esm/tests/features/records-immutable.spec.js +1 -4
- package/dist/esm/tests/features/records-immutable.spec.js.map +1 -1
- package/dist/esm/tests/features/records-nested-query-scope.spec.js +281 -0
- package/dist/esm/tests/features/records-nested-query-scope.spec.js.map +1 -0
- package/dist/esm/tests/features/records-prune-cross-protocol.spec.js +3 -7
- package/dist/esm/tests/features/records-prune-cross-protocol.spec.js.map +1 -1
- package/dist/esm/tests/features/records-prune.spec.js +11 -22
- package/dist/esm/tests/features/records-prune.spec.js.map +1 -1
- package/dist/esm/tests/features/records-record-limit.spec.js +441 -231
- package/dist/esm/tests/features/records-record-limit.spec.js.map +1 -1
- package/dist/esm/tests/features/records-squash.spec.js +6 -4
- package/dist/esm/tests/features/records-squash.spec.js.map +1 -1
- package/dist/esm/tests/features/records-tags.spec.js +1 -4
- package/dist/esm/tests/features/records-tags.spec.js.map +1 -1
- package/dist/esm/tests/features/resumable-tasks.spec.js +3 -5
- package/dist/esm/tests/features/resumable-tasks.spec.js.map +1 -1
- package/dist/esm/tests/fuzz/message-store.fuzz.spec.js +1 -2
- package/dist/esm/tests/fuzz/message-store.fuzz.spec.js.map +1 -1
- package/dist/esm/tests/fuzz/process-message.fuzz.spec.js +2 -4
- package/dist/esm/tests/fuzz/process-message.fuzz.spec.js.map +1 -1
- package/dist/esm/tests/fuzz/schema-validation.fuzz.spec.js +1 -1
- package/dist/esm/tests/fuzz/schema-validation.fuzz.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-query.spec.js +246 -0
- package/dist/esm/tests/handlers/messages-query.spec.js.map +1 -0
- package/dist/esm/tests/handlers/messages-read.spec.js +2 -5
- package/dist/esm/tests/handlers/messages-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/messages-subscribe.spec.js +3 -14
- package/dist/esm/tests/handlers/messages-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/protocols-configure.spec.js +27 -26
- package/dist/esm/tests/handlers/protocols-configure.spec.js.map +1 -1
- package/dist/esm/tests/handlers/protocols-query.spec.js +1 -4
- package/dist/esm/tests/handlers/protocols-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-count.spec.js +1 -4
- package/dist/esm/tests/handlers/records-count.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-delete.spec.js +312 -30
- package/dist/esm/tests/handlers/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-query.spec.js +32 -9
- package/dist/esm/tests/handlers/records-query.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-read.spec.js +4 -4
- package/dist/esm/tests/handlers/records-read.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-subscribe.spec.js +33 -14
- package/dist/esm/tests/handlers/records-subscribe.spec.js.map +1 -1
- package/dist/esm/tests/handlers/records-write.spec.js +82 -36
- package/dist/esm/tests/handlers/records-write.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-delete.spec.js +69 -2
- package/dist/esm/tests/interfaces/records-delete.spec.js.map +1 -1
- package/dist/esm/tests/interfaces/records-write.spec.js +4 -3
- package/dist/esm/tests/interfaces/records-write.spec.js.map +1 -1
- package/dist/esm/tests/protocols/permissions.spec.js +55 -6
- package/dist/esm/tests/protocols/permissions.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/aggregator.spec.js +1 -4
- package/dist/esm/tests/scenarios/aggregator.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/deleted-record.spec.js +1 -4
- package/dist/esm/tests/scenarios/deleted-record.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js +1 -4
- package/dist/esm/tests/scenarios/end-to-end-tests.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/nested-roles.spec.js +1 -4
- package/dist/esm/tests/scenarios/nested-roles.spec.js.map +1 -1
- package/dist/esm/tests/scenarios/subscriptions.spec.js +1 -4
- package/dist/esm/tests/scenarios/subscriptions.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store-level.spec.js +361 -5
- package/dist/esm/tests/store/message-store-level.spec.js.map +1 -1
- package/dist/esm/tests/store/message-store.spec.js +60 -0
- package/dist/esm/tests/store/message-store.spec.js.map +1 -1
- package/dist/esm/tests/test-event-stream.js +7 -3
- package/dist/esm/tests/test-event-stream.js.map +1 -1
- package/dist/esm/tests/test-stores.js +19 -9
- package/dist/esm/tests/test-stores.js.map +1 -1
- package/dist/esm/tests/test-suite.js +4 -2
- package/dist/esm/tests/test-suite.js.map +1 -1
- package/dist/esm/tests/utils/protocol-tags.spec.js +96 -0
- package/dist/esm/tests/utils/protocol-tags.spec.js.map +1 -0
- package/dist/esm/tests/utils/test-data-generator.js +25 -0
- package/dist/esm/tests/utils/test-data-generator.js.map +1 -1
- package/dist/esm/tests/utils/test-stub-generator.js.map +1 -1
- package/dist/esm/tests/utils/test-validation-state-reader.js +16 -0
- package/dist/esm/tests/utils/test-validation-state-reader.js.map +1 -0
- package/dist/types/generated/precompiled-validators.d.ts +6 -6
- package/dist/types/generated/precompiled-validators.d.ts.map +1 -1
- package/dist/types/src/core/core-protocol.d.ts +3 -3
- package/dist/types/src/core/core-protocol.d.ts.map +1 -1
- package/dist/types/src/core/dwn-constant.d.ts +5 -0
- package/dist/types/src/core/dwn-constant.d.ts.map +1 -1
- package/dist/types/src/core/dwn-error.d.ts +12 -4
- package/dist/types/src/core/dwn-error.d.ts.map +1 -1
- package/dist/types/src/core/grant-authorization.d.ts +5 -5
- package/dist/types/src/core/grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/message-reply.d.ts +5 -4
- package/dist/types/src/core/message-reply.d.ts.map +1 -1
- package/dist/types/src/core/messages-grant-authorization.d.ts +12 -14
- package/dist/types/src/core/messages-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/protocol-authorization-action.d.ts +4 -5
- package/dist/types/src/core/protocol-authorization-action.d.ts.map +1 -1
- package/dist/types/src/core/protocol-authorization-validation.d.ts +14 -17
- package/dist/types/src/core/protocol-authorization-validation.d.ts.map +1 -1
- package/dist/types/src/core/protocol-authorization.d.ts +8 -33
- package/dist/types/src/core/protocol-authorization.d.ts.map +1 -1
- package/dist/types/src/core/protocols-grant-authorization.d.ts +4 -4
- package/dist/types/src/core/protocols-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/recording-validation-state-reader.d.ts +75 -0
- package/dist/types/src/core/recording-validation-state-reader.d.ts.map +1 -0
- package/dist/types/src/core/records-grant-authorization.d.ts +8 -8
- package/dist/types/src/core/records-grant-authorization.d.ts.map +1 -1
- package/dist/types/src/core/replication-apply.d.ts +36 -0
- package/dist/types/src/core/replication-apply.d.ts.map +1 -1
- package/dist/types/src/core/resumable-task-manager.d.ts +1 -1
- package/dist/types/src/core/resumable-task-manager.d.ts.map +1 -1
- package/dist/types/src/core/validation-state-reader.d.ts +79 -0
- package/dist/types/src/core/validation-state-reader.d.ts.map +1 -0
- package/dist/types/src/dwn.d.ts +33 -20
- package/dist/types/src/dwn.d.ts.map +1 -1
- package/dist/types/src/enums/dwn-interface-method.d.ts +0 -1
- package/dist/types/src/enums/dwn-interface-method.d.ts.map +1 -1
- package/dist/types/src/event-stream/durable-event-log.d.ts +69 -0
- package/dist/types/src/event-stream/durable-event-log.d.ts.map +1 -0
- package/dist/types/src/event-stream/event-emitter-wake-publisher.d.ts +13 -0
- package/dist/types/src/event-stream/event-emitter-wake-publisher.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-query.d.ts +20 -0
- package/dist/types/src/handlers/messages-query.d.ts.map +1 -0
- package/dist/types/src/handlers/messages-read.d.ts +1 -1
- package/dist/types/src/handlers/messages-read.d.ts.map +1 -1
- package/dist/types/src/handlers/messages-subscribe.d.ts.map +1 -1
- package/dist/types/src/handlers/protocols-configure.d.ts +0 -5
- package/dist/types/src/handlers/protocols-configure.d.ts.map +1 -1
- package/dist/types/src/handlers/records-count.d.ts +2 -1
- package/dist/types/src/handlers/records-count.d.ts.map +1 -1
- package/dist/types/src/handlers/records-delete.d.ts +2 -2
- package/dist/types/src/handlers/records-delete.d.ts.map +1 -1
- package/dist/types/src/handlers/records-query.d.ts +1 -1
- package/dist/types/src/handlers/records-query.d.ts.map +1 -1
- package/dist/types/src/handlers/records-read.d.ts +2 -1
- package/dist/types/src/handlers/records-read.d.ts.map +1 -1
- package/dist/types/src/handlers/records-subscribe.d.ts +4 -5
- package/dist/types/src/handlers/records-subscribe.d.ts.map +1 -1
- package/dist/types/src/handlers/records-write.d.ts +3 -11
- package/dist/types/src/handlers/records-write.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +14 -16
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/interfaces/messages-query.d.ts +23 -0
- package/dist/types/src/interfaces/messages-query.d.ts.map +1 -0
- package/dist/types/src/interfaces/protocols-configure.d.ts +3 -3
- 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 +3 -3
- package/dist/types/src/interfaces/records-count.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-delete.d.ts +11 -3
- package/dist/types/src/interfaces/records-delete.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-query.d.ts +3 -3
- package/dist/types/src/interfaces/records-query.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-read.d.ts +3 -3
- package/dist/types/src/interfaces/records-read.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-subscribe.d.ts +3 -3
- package/dist/types/src/interfaces/records-subscribe.d.ts.map +1 -1
- package/dist/types/src/interfaces/records-write.d.ts +15 -7
- package/dist/types/src/interfaces/records-write.d.ts.map +1 -1
- package/dist/types/src/protocols/permissions.d.ts +9 -12
- package/dist/types/src/protocols/permissions.d.ts.map +1 -1
- package/dist/types/src/store/index-level.d.ts +10 -1
- package/dist/types/src/store/index-level.d.ts.map +1 -1
- package/dist/types/src/store/level-wrapper.d.ts +5 -0
- package/dist/types/src/store/level-wrapper.d.ts.map +1 -1
- package/dist/types/src/store/message-store-level.d.ts +94 -14
- package/dist/types/src/store/message-store-level.d.ts.map +1 -1
- package/dist/types/src/store/storage-controller.d.ts +17 -14
- package/dist/types/src/store/storage-controller.d.ts.map +1 -1
- package/dist/types/src/types/message-store.d.ts +29 -1
- package/dist/types/src/types/message-store.d.ts.map +1 -1
- package/dist/types/src/types/message-types.d.ts +2 -0
- package/dist/types/src/types/message-types.d.ts.map +1 -1
- package/dist/types/src/types/messages-types.d.ts +21 -37
- package/dist/types/src/types/messages-types.d.ts.map +1 -1
- package/dist/types/src/types/method-handler.d.ts +2 -2
- package/dist/types/src/types/method-handler.d.ts.map +1 -1
- package/dist/types/src/types/permission-types.d.ts +1 -1
- package/dist/types/src/types/subscriptions.d.ts +50 -39
- package/dist/types/src/types/subscriptions.d.ts.map +1 -1
- package/dist/types/src/types/validation-state-reader.d.ts +116 -0
- package/dist/types/src/types/validation-state-reader.d.ts.map +1 -0
- package/dist/types/src/utils/messages.d.ts +10 -0
- package/dist/types/src/utils/messages.d.ts.map +1 -1
- package/dist/types/src/utils/protocol-tags.d.ts +15 -0
- package/dist/types/src/utils/protocol-tags.d.ts.map +1 -0
- package/dist/types/src/utils/record-limit-occupancy.d.ts +40 -0
- package/dist/types/src/utils/record-limit-occupancy.d.ts.map +1 -0
- package/dist/types/src/utils/records.d.ts +25 -3
- package/dist/types/src/utils/records.d.ts.map +1 -1
- package/dist/types/src/utils/replication.d.ts +22 -0
- package/dist/types/src/utils/replication.d.ts.map +1 -0
- package/dist/types/tests/core/process-message-parity.spec.d.ts +2 -0
- package/dist/types/tests/core/process-message-parity.spec.d.ts.map +1 -0
- package/dist/types/tests/core/replication-replay-property.spec.d.ts +2 -0
- package/dist/types/tests/core/replication-replay-property.spec.d.ts.map +1 -0
- package/dist/types/tests/core/validation-read-closure.spec.d.ts +2 -0
- package/dist/types/tests/core/validation-read-closure.spec.d.ts.map +1 -0
- package/dist/types/tests/core/validation-state-reader.spec.d.ts +2 -0
- package/dist/types/tests/core/validation-state-reader.spec.d.ts.map +1 -0
- package/dist/types/tests/durable-event-log.spec.d.ts +2 -0
- package/dist/types/tests/durable-event-log.spec.d.ts.map +1 -0
- package/dist/types/tests/dwn.spec.d.ts.map +1 -1
- 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.map +1 -1
- 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-delivery.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-immutable.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-nested-query-scope.spec.d.ts +2 -0
- package/dist/types/tests/features/records-nested-query-scope.spec.d.ts.map +1 -0
- package/dist/types/tests/features/records-prune-cross-protocol.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-record-limit.spec.d.ts.map +1 -1
- package/dist/types/tests/features/records-squash.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-query.spec.d.ts +2 -0
- package/dist/types/tests/handlers/messages-query.spec.d.ts.map +1 -0
- 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/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.map +1 -1
- 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/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/scenarios/subscriptions.spec.d.ts.map +1 -1
- package/dist/types/tests/store/message-store.spec.d.ts.map +1 -1
- package/dist/types/tests/test-event-stream.d.ts +1 -1
- package/dist/types/tests/test-event-stream.d.ts.map +1 -1
- package/dist/types/tests/test-stores.d.ts +5 -4
- package/dist/types/tests/test-stores.d.ts.map +1 -1
- package/dist/types/tests/test-suite.d.ts +1 -2
- package/dist/types/tests/test-suite.d.ts.map +1 -1
- package/dist/types/tests/utils/protocol-tags.spec.d.ts +2 -0
- package/dist/types/tests/utils/protocol-tags.spec.d.ts.map +1 -0
- package/dist/types/tests/utils/test-data-generator.d.ts +20 -1
- package/dist/types/tests/utils/test-data-generator.d.ts.map +1 -1
- package/dist/types/tests/utils/test-validation-state-reader.d.ts +15 -0
- package/dist/types/tests/utils/test-validation-state-reader.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/core/core-protocol.ts +3 -3
- package/src/core/dwn-constant.ts +7 -1
- package/src/core/dwn-error.ts +12 -4
- package/src/core/grant-authorization.ts +11 -20
- package/src/core/message-reply.ts +6 -5
- package/src/core/messages-grant-authorization.ts +37 -70
- package/src/core/protocol-authorization-action.ts +29 -38
- package/src/core/protocol-authorization-validation.ts +47 -121
- package/src/core/protocol-authorization.ts +56 -202
- package/src/core/protocols-grant-authorization.ts +9 -9
- package/src/core/recording-validation-state-reader.ts +130 -0
- package/src/core/records-grant-authorization.ts +16 -16
- package/src/core/replication-apply.ts +172 -32
- package/src/core/resumable-task-manager.ts +10 -8
- package/src/core/validation-state-reader.ts +350 -0
- package/src/dwn.ts +285 -192
- package/src/enums/dwn-interface-method.ts +0 -1
- package/src/event-stream/durable-event-log.ts +509 -0
- package/src/event-stream/event-emitter-wake-publisher.ts +34 -0
- package/src/handlers/messages-query.ts +203 -0
- package/src/handlers/messages-read.ts +9 -10
- package/src/handlers/messages-subscribe.ts +12 -13
- package/src/handlers/protocols-configure.ts +37 -58
- package/src/handlers/protocols-query.ts +1 -1
- package/src/handlers/records-count.ts +24 -17
- package/src/handlers/records-delete.ts +29 -27
- package/src/handlers/records-query.ts +38 -17
- package/src/handlers/records-read.ts +63 -50
- package/src/handlers/records-subscribe.ts +132 -19
- package/src/handlers/records-write.ts +77 -168
- package/src/index.ts +14 -17
- package/src/interfaces/messages-query.ts +70 -0
- package/src/interfaces/protocols-configure.ts +20 -10
- package/src/interfaces/protocols-query.ts +4 -5
- package/src/interfaces/records-count.ts +9 -4
- package/src/interfaces/records-delete.ts +25 -5
- package/src/interfaces/records-query.ts +9 -4
- package/src/interfaces/records-read.ts +4 -4
- package/src/interfaces/records-subscribe.ts +9 -4
- package/src/interfaces/records-write.ts +41 -13
- package/src/protocols/permissions.ts +32 -52
- package/src/store/index-level.ts +30 -9
- package/src/store/level-wrapper.ts +9 -1
- package/src/store/message-store-level.ts +757 -47
- package/src/store/storage-controller.ts +74 -63
- package/src/types/message-store.ts +45 -2
- package/src/types/message-types.ts +3 -1
- package/src/types/messages-types.ts +26 -45
- package/src/types/method-handler.ts +3 -3
- package/src/types/permission-types.ts +1 -1
- package/src/types/subscriptions.ts +53 -42
- package/src/types/validation-state-reader.ts +127 -0
- package/src/utils/messages.ts +25 -1
- package/src/utils/protocol-tags.ts +366 -0
- package/src/utils/record-limit-occupancy.ts +377 -0
- package/src/utils/records.ts +69 -13
- package/src/utils/replication.ts +122 -0
- package/dist/esm/src/core/record-chain.js +0 -64
- package/dist/esm/src/core/record-chain.js.map +0 -1
- package/dist/esm/src/event-stream/event-emitter-event-log.js +0 -334
- package/dist/esm/src/event-stream/event-emitter-event-log.js.map +0 -1
- package/dist/esm/src/handlers/messages-sync.js +0 -278
- package/dist/esm/src/handlers/messages-sync.js.map +0 -1
- package/dist/esm/src/interfaces/messages-sync.js.map +0 -1
- package/dist/esm/src/smt/smt-store-level.js +0 -103
- package/dist/esm/src/smt/smt-store-level.js.map +0 -1
- package/dist/esm/src/smt/smt-store-memory.js +0 -41
- package/dist/esm/src/smt/smt-store-memory.js.map +0 -1
- package/dist/esm/src/smt/smt-utils.js +0 -129
- package/dist/esm/src/smt/smt-utils.js.map +0 -1
- package/dist/esm/src/smt/sparse-merkle-tree.js +0 -577
- package/dist/esm/src/smt/sparse-merkle-tree.js.map +0 -1
- package/dist/esm/src/state-index/state-index-level.js +0 -191
- package/dist/esm/src/state-index/state-index-level.js.map +0 -1
- package/dist/esm/src/types/smt-types.js +0 -5
- package/dist/esm/src/types/smt-types.js.map +0 -1
- package/dist/esm/src/types/state-index.js +0 -2
- package/dist/esm/src/types/state-index.js.map +0 -1
- package/dist/esm/tests/event-emitter-event-log.spec.js +0 -499
- package/dist/esm/tests/event-emitter-event-log.spec.js.map +0 -1
- package/dist/esm/tests/handlers/messages-sync.spec.js +0 -1088
- package/dist/esm/tests/handlers/messages-sync.spec.js.map +0 -1
- package/dist/esm/tests/smt/smt-store-level.spec.js +0 -132
- package/dist/esm/tests/smt/smt-store-level.spec.js.map +0 -1
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js +0 -732
- package/dist/esm/tests/smt/sparse-merkle-tree.spec.js.map +0 -1
- package/dist/esm/tests/state-index/state-index-level.spec.js +0 -245
- package/dist/esm/tests/state-index/state-index-level.spec.js.map +0 -1
- package/dist/types/src/core/record-chain.d.ts +0 -24
- package/dist/types/src/core/record-chain.d.ts.map +0 -1
- package/dist/types/src/event-stream/event-emitter-event-log.d.ts +0 -80
- package/dist/types/src/event-stream/event-emitter-event-log.d.ts.map +0 -1
- package/dist/types/src/handlers/messages-sync.d.ts +0 -39
- package/dist/types/src/handlers/messages-sync.d.ts.map +0 -1
- package/dist/types/src/interfaces/messages-sync.d.ts +0 -20
- package/dist/types/src/interfaces/messages-sync.d.ts.map +0 -1
- package/dist/types/src/smt/smt-store-level.d.ts +0 -32
- package/dist/types/src/smt/smt-store-level.d.ts.map +0 -1
- package/dist/types/src/smt/smt-store-memory.d.ts +0 -22
- package/dist/types/src/smt/smt-store-memory.d.ts.map +0 -1
- package/dist/types/src/smt/smt-utils.d.ts +0 -58
- package/dist/types/src/smt/smt-utils.d.ts.map +0 -1
- package/dist/types/src/smt/sparse-merkle-tree.d.ts +0 -124
- package/dist/types/src/smt/sparse-merkle-tree.d.ts.map +0 -1
- package/dist/types/src/state-index/state-index-level.d.ts +0 -83
- package/dist/types/src/state-index/state-index-level.d.ts.map +0 -1
- package/dist/types/src/types/smt-types.d.ts +0 -81
- package/dist/types/src/types/smt-types.d.ts.map +0 -1
- package/dist/types/src/types/state-index.d.ts +0 -90
- package/dist/types/src/types/state-index.d.ts.map +0 -1
- package/dist/types/tests/event-emitter-event-log.spec.d.ts +0 -2
- package/dist/types/tests/event-emitter-event-log.spec.d.ts.map +0 -1
- package/dist/types/tests/handlers/messages-sync.spec.d.ts +0 -2
- package/dist/types/tests/handlers/messages-sync.spec.d.ts.map +0 -1
- package/dist/types/tests/smt/smt-store-level.spec.d.ts +0 -2
- package/dist/types/tests/smt/smt-store-level.spec.d.ts.map +0 -1
- package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts +0 -2
- package/dist/types/tests/smt/sparse-merkle-tree.spec.d.ts.map +0 -1
- package/dist/types/tests/state-index/state-index-level.spec.d.ts +0 -2
- package/dist/types/tests/state-index/state-index-level.spec.d.ts.map +0 -1
- package/src/core/record-chain.ts +0 -99
- package/src/event-stream/event-emitter-event-log.ts +0 -430
- package/src/handlers/messages-sync.ts +0 -403
- package/src/interfaces/messages-sync.ts +0 -69
- package/src/smt/smt-store-level.ts +0 -143
- package/src/smt/smt-store-memory.ts +0 -53
- package/src/smt/smt-utils.ts +0 -149
- package/src/smt/sparse-merkle-tree.ts +0 -698
- package/src/state-index/state-index-level.ts +0 -239
- package/src/types/smt-types.ts +0 -95
- package/src/types/state-index.ts +0 -100
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replication-apply.spec.js","sourceRoot":"","sources":["../../../../tests/core/replication-apply.spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAEnF,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,oBAAoB,EAAE,CAAC;QAEnE,MAAM,CAAC,+BAA+B,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;aACxE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,+BAA+B,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;aACxE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"replication-apply.spec.js","sourceRoot":"","sources":["../../../../tests/core/replication-apply.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import fc from 'fast-check';
|
|
2
|
+
import { rm } from 'node:fs/promises';
|
|
3
|
+
import { TestDataGenerator } from '../utils/test-data-generator.js';
|
|
4
|
+
import { afterAll, describe, expect, it } from 'bun:test';
|
|
5
|
+
import { DataStoreLevel, DataStream, Dwn, DwnInterfaceName, DwnMethodName, Encoder, Jws, Message, MessageStoreLevel, Records, RecordsDelete, Replication, ResumableTaskStoreLevel, Time, } from '../../src/index.js';
|
|
6
|
+
import { DidKey, UniversalResolver } from '@enbox/dids';
|
|
7
|
+
// Keep CI deterministic and cheap; set FAST_CHECK_NUM_RUNS for deeper local or nightly sweeps.
|
|
8
|
+
const numRuns = Math.min(Number(process.env.FAST_CHECK_NUM_RUNS) || 5, 20);
|
|
9
|
+
const replayOperations = [
|
|
10
|
+
'config-churn',
|
|
11
|
+
'create-note',
|
|
12
|
+
'create-pin',
|
|
13
|
+
'create-profile',
|
|
14
|
+
'create-thread-reply',
|
|
15
|
+
'delete-note',
|
|
16
|
+
'prune-thread',
|
|
17
|
+
'squash-patch',
|
|
18
|
+
'update-note',
|
|
19
|
+
];
|
|
20
|
+
describe('replication replay property', () => {
|
|
21
|
+
const didResolver = new UniversalResolver({ didResolvers: [DidKey] });
|
|
22
|
+
const harnesses = [];
|
|
23
|
+
afterAll(async () => {
|
|
24
|
+
for (const harness of harnesses) {
|
|
25
|
+
await harness.dwn.close();
|
|
26
|
+
await rm(harness.dataPath, { force: true, recursive: true });
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
it('should replay the retained feed into a fresh DWN with equal live records, fingerprints, and data bytes', async () => {
|
|
30
|
+
await fc.assert(fc.asyncProperty(fc.record({
|
|
31
|
+
operations: fc.array(fc.constantFrom(...replayOperations), { minLength: 8, maxLength: 14 }),
|
|
32
|
+
replayOrderSeed: fc.integer({ min: 0, max: 0xffffffff }),
|
|
33
|
+
runId: fc.uuid(),
|
|
34
|
+
}), async ({ operations, replayOrderSeed, runId }) => {
|
|
35
|
+
const source = await createHarness(`${runId}-source`);
|
|
36
|
+
const replica = await createHarness(`${runId}-replica`);
|
|
37
|
+
harnesses.push(source, replica);
|
|
38
|
+
const alice = await TestDataGenerator.generateDidKeyPersona();
|
|
39
|
+
const protocol = `https://replay-property.example/${runId}`;
|
|
40
|
+
await driveSourceMutationPlan(source.dwn, alice, protocol, operations);
|
|
41
|
+
await replayFeed(source.dwn, replica.dwn, alice, replayOrderSeed);
|
|
42
|
+
await expectFingerprintsEqual(source.messageStore, replica.messageStore, alice.did, protocol);
|
|
43
|
+
await expectLiveRecordsEqual(source.dwn, replica.dwn, alice, protocol);
|
|
44
|
+
await expectOccupantsEqual(source.dwn, replica.dwn, alice, protocol, 'profile', 1);
|
|
45
|
+
await expectOccupantsEqual(source.dwn, replica.dwn, alice, protocol, 'pin', 2);
|
|
46
|
+
}), { numRuns, seed: 1046 });
|
|
47
|
+
});
|
|
48
|
+
async function createHarness(path) {
|
|
49
|
+
const dataPath = `__TESTDATA__/replication-replay-property/${path}`;
|
|
50
|
+
await rm(dataPath, { force: true, recursive: true });
|
|
51
|
+
const messageStore = new MessageStoreLevel({ location: `${dataPath}/messages` });
|
|
52
|
+
const dataStore = new DataStoreLevel({ blockstoreLocation: `${dataPath}/data` });
|
|
53
|
+
const resumableTaskStore = new ResumableTaskStoreLevel({ location: `${dataPath}/resumable-tasks` });
|
|
54
|
+
const dwn = await Dwn.create({ dataStore, didResolver, messageStore, resumableTaskStore });
|
|
55
|
+
return { dataPath, dwn, messageStore };
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
async function driveSourceMutationPlan(dwn, alice, protocol, operations) {
|
|
59
|
+
let sequence = 1;
|
|
60
|
+
let configRevision = 1;
|
|
61
|
+
const nextTimestamp = () => Time.createOffsetTimestamp({ seconds: sequence++ }, Time.createTimestamp({ year: 2025, month: 1, day: 1 }));
|
|
62
|
+
const notes = [];
|
|
63
|
+
const threads = [];
|
|
64
|
+
await installProtocol(dwn, alice, protocolDefinition(protocol, configRevision), nextTimestamp());
|
|
65
|
+
const firstNote = await writeRecord(dwn, alice, protocol, 'note', 'initial-note-a', nextTimestamp());
|
|
66
|
+
const secondNote = await writeRecord(dwn, alice, protocol, 'note', 'initial-note-b', nextTimestamp());
|
|
67
|
+
notes.push({ deleted: false, latest: firstNote.recordsWrite, recordId: firstNote.message.recordId }, { deleted: false, latest: secondNote.recordsWrite, recordId: secondNote.message.recordId });
|
|
68
|
+
await writeRecord(dwn, alice, protocol, 'profile', 'profile-a', nextTimestamp());
|
|
69
|
+
await writeRecord(dwn, alice, protocol, 'profile', 'profile-b', nextTimestamp());
|
|
70
|
+
await writeRecord(dwn, alice, protocol, 'pin', 'pin-a', nextTimestamp());
|
|
71
|
+
await writeRecord(dwn, alice, protocol, 'pin', 'pin-b', nextTimestamp());
|
|
72
|
+
await writeRecord(dwn, alice, protocol, 'pin', 'pin-c', nextTimestamp());
|
|
73
|
+
const thread = await writeRecord(dwn, alice, protocol, 'thread', 'thread-a', nextTimestamp());
|
|
74
|
+
await writeRecord(dwn, alice, protocol, 'thread/reply', 'reply-a', nextTimestamp(), thread.message.contextId);
|
|
75
|
+
threads.push({ deleted: false, recordId: thread.message.recordId });
|
|
76
|
+
await writeRecord(dwn, alice, protocol, 'patch', 'patch-before-squash', nextTimestamp());
|
|
77
|
+
for (const operation of operations) {
|
|
78
|
+
if (operation === 'config-churn') {
|
|
79
|
+
configRevision++;
|
|
80
|
+
await installProtocol(dwn, alice, protocolDefinition(protocol, configRevision), nextTimestamp());
|
|
81
|
+
}
|
|
82
|
+
else if (operation === 'create-note') {
|
|
83
|
+
const note = await writeRecord(dwn, alice, protocol, 'note', `${operation}-${sequence}`, nextTimestamp());
|
|
84
|
+
notes.push({ deleted: false, latest: note.recordsWrite, recordId: note.message.recordId });
|
|
85
|
+
}
|
|
86
|
+
else if (operation === 'create-pin') {
|
|
87
|
+
await writeRecord(dwn, alice, protocol, 'pin', `${operation}-${sequence}`, nextTimestamp());
|
|
88
|
+
}
|
|
89
|
+
else if (operation === 'create-profile') {
|
|
90
|
+
await writeRecord(dwn, alice, protocol, 'profile', `${operation}-${sequence}`, nextTimestamp());
|
|
91
|
+
}
|
|
92
|
+
else if (operation === 'create-thread-reply') {
|
|
93
|
+
const createdThread = await writeRecord(dwn, alice, protocol, 'thread', `${operation}-thread-${sequence}`, nextTimestamp());
|
|
94
|
+
await writeRecord(dwn, alice, protocol, 'thread/reply', `${operation}-reply-${sequence}`, nextTimestamp(), createdThread.message.contextId);
|
|
95
|
+
threads.push({ deleted: false, recordId: createdThread.message.recordId });
|
|
96
|
+
}
|
|
97
|
+
else if (operation === 'delete-note') {
|
|
98
|
+
const note = notes.find(candidate => !candidate.deleted);
|
|
99
|
+
if (note !== undefined) {
|
|
100
|
+
await deleteRecord(dwn, alice, note.recordId);
|
|
101
|
+
note.deleted = true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else if (operation === 'prune-thread') {
|
|
105
|
+
const activeThread = threads.find(candidate => !candidate.deleted);
|
|
106
|
+
if (activeThread !== undefined) {
|
|
107
|
+
await deleteRecord(dwn, alice, activeThread.recordId, true);
|
|
108
|
+
activeThread.deleted = true;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else if (operation === 'squash-patch') {
|
|
112
|
+
await writeRecord(dwn, alice, protocol, 'patch', `${operation}-${sequence}`, nextTimestamp(), undefined, true);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const note = notes.find(candidate => !candidate.deleted);
|
|
116
|
+
if (note !== undefined) {
|
|
117
|
+
const update = await TestDataGenerator.generateFromRecordsWrite({
|
|
118
|
+
author: alice,
|
|
119
|
+
data: Encoder.stringToBytes(`${operation}-${sequence}`),
|
|
120
|
+
existingWrite: note.latest,
|
|
121
|
+
messageTimestamp: nextTimestamp(),
|
|
122
|
+
});
|
|
123
|
+
const reply = await dwn.processMessage(alice.did, update.message, { dataStream: update.dataStream });
|
|
124
|
+
expect(reply.status.code).toBe(202);
|
|
125
|
+
note.latest = update.recordsWrite;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function protocolDefinition(protocol, revision) {
|
|
131
|
+
const extraType = `extra${revision}`;
|
|
132
|
+
return {
|
|
133
|
+
protocol,
|
|
134
|
+
published: false,
|
|
135
|
+
types: {
|
|
136
|
+
[extraType]: {},
|
|
137
|
+
note: {},
|
|
138
|
+
patch: {},
|
|
139
|
+
pin: {},
|
|
140
|
+
profile: {},
|
|
141
|
+
reply: {},
|
|
142
|
+
thread: {},
|
|
143
|
+
},
|
|
144
|
+
structure: {
|
|
145
|
+
[extraType]: {},
|
|
146
|
+
note: {},
|
|
147
|
+
patch: { $squash: true },
|
|
148
|
+
pin: { $recordLimit: { max: 2, strategy: 'reject' } },
|
|
149
|
+
profile: { $recordLimit: { max: 1, strategy: 'reject' } },
|
|
150
|
+
thread: { reply: {} },
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
async function installProtocol(dwn, alice, definition, timestamp) {
|
|
155
|
+
const configure = await TestDataGenerator.generateProtocolsConfigure({
|
|
156
|
+
author: alice,
|
|
157
|
+
messageTimestamp: timestamp,
|
|
158
|
+
protocolDefinition: definition,
|
|
159
|
+
});
|
|
160
|
+
const reply = await dwn.processMessage(alice.did, configure.message);
|
|
161
|
+
expect(reply.status.code).toBe(202);
|
|
162
|
+
}
|
|
163
|
+
async function writeRecord(dwn, alice, protocol, protocolPath, data, timestamp, parentContextId, squash) {
|
|
164
|
+
const record = await TestDataGenerator.generateRecordsWrite({
|
|
165
|
+
author: alice,
|
|
166
|
+
data: Encoder.stringToBytes(data),
|
|
167
|
+
dataFormat: 'text/plain',
|
|
168
|
+
dateCreated: timestamp,
|
|
169
|
+
messageTimestamp: timestamp,
|
|
170
|
+
parentContextId,
|
|
171
|
+
protocol,
|
|
172
|
+
protocolPath,
|
|
173
|
+
schema: `${protocol}/schema/${protocolPath.split('/').at(-1)}`,
|
|
174
|
+
squash,
|
|
175
|
+
});
|
|
176
|
+
const reply = await dwn.processMessage(alice.did, record.message, { dataStream: record.dataStream });
|
|
177
|
+
expect(reply.status.code).toBe(202);
|
|
178
|
+
return record;
|
|
179
|
+
}
|
|
180
|
+
async function deleteRecord(dwn, alice, recordId, prune) {
|
|
181
|
+
const recordsDelete = await RecordsDelete.create({
|
|
182
|
+
prune,
|
|
183
|
+
recordId,
|
|
184
|
+
signer: Jws.createSigner(alice),
|
|
185
|
+
});
|
|
186
|
+
const reply = await dwn.processMessage(alice.did, recordsDelete.message);
|
|
187
|
+
expect(reply.status.code).toBe(202);
|
|
188
|
+
}
|
|
189
|
+
async function replayFeed(source, replica, alice, replayOrderSeed) {
|
|
190
|
+
const entries = permuteReplayEntries(await queryAllReplayEntries(source, alice), replayOrderSeed);
|
|
191
|
+
let pending = entries;
|
|
192
|
+
let incompleteDeferrals = 0;
|
|
193
|
+
for (let attempt = 0; attempt < entries.length + 1 && pending.length > 0; attempt++) {
|
|
194
|
+
const nextPending = [];
|
|
195
|
+
for (const replayEntry of pending) {
|
|
196
|
+
const { dataBytes, entry } = replayEntry;
|
|
197
|
+
expect(entry.message).toBeDefined();
|
|
198
|
+
const result = await replica.applyReplicatedMessage(alice.did, entry.message, {
|
|
199
|
+
...(dataBytes === undefined ? {} : { dataStream: DataStream.fromBytes(dataBytes) }),
|
|
200
|
+
});
|
|
201
|
+
if (result.kind === 'Incomplete') {
|
|
202
|
+
incompleteDeferrals++;
|
|
203
|
+
nextPending.push(replayEntry);
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if (result.kind === 'Deferred') {
|
|
207
|
+
throw new Error(`replay unexpectedly deferred CID ${entry.messageCid}: ${result.reason}`);
|
|
208
|
+
}
|
|
209
|
+
expect(['Applied', 'Duplicate', 'Superseded']).toContain(result.kind);
|
|
210
|
+
}
|
|
211
|
+
if (nextPending.length === pending.length) {
|
|
212
|
+
throw new Error(`replay made no progress; unresolved CIDs: ${nextPending.map(item => item.entry.messageCid).join(', ')}`);
|
|
213
|
+
}
|
|
214
|
+
pending = nextPending;
|
|
215
|
+
}
|
|
216
|
+
expect(pending).toHaveLength(0);
|
|
217
|
+
expect(incompleteDeferrals).toBeGreaterThan(0);
|
|
218
|
+
}
|
|
219
|
+
// Shuffling puts records before protocol configs, forcing dependency Incomplete outcomes before retry convergence.
|
|
220
|
+
function permuteReplayEntries(entries, replayOrderSeed) {
|
|
221
|
+
return entries
|
|
222
|
+
.map((entry, index) => ({
|
|
223
|
+
entry,
|
|
224
|
+
group: replayDependencyGroup(entry),
|
|
225
|
+
index,
|
|
226
|
+
sortKey: replaySortKey(replayOrderSeed, entry.entry.messageCid, index),
|
|
227
|
+
}))
|
|
228
|
+
.sort((left, right) => {
|
|
229
|
+
const groupComparison = left.group - right.group;
|
|
230
|
+
if (groupComparison !== 0) {
|
|
231
|
+
return groupComparison;
|
|
232
|
+
}
|
|
233
|
+
const sortKeyComparison = left.sortKey - right.sortKey;
|
|
234
|
+
if (sortKeyComparison !== 0) {
|
|
235
|
+
return sortKeyComparison;
|
|
236
|
+
}
|
|
237
|
+
return left.index - right.index;
|
|
238
|
+
})
|
|
239
|
+
.map(item => item.entry);
|
|
240
|
+
}
|
|
241
|
+
function replayDependencyGroup(replayEntry) {
|
|
242
|
+
const descriptor = replayEntry.entry.message?.descriptor;
|
|
243
|
+
return descriptor?.interface === DwnInterfaceName.Protocols && descriptor.method === DwnMethodName.Configure ? 1 : 0;
|
|
244
|
+
}
|
|
245
|
+
function replaySortKey(replayOrderSeed, messageCid, index) {
|
|
246
|
+
let hash = replayOrderSeed >>> 0;
|
|
247
|
+
const input = `${messageCid}:${index}`;
|
|
248
|
+
for (let i = 0; i < input.length; i++) {
|
|
249
|
+
hash = Math.imul(hash ^ input.charCodeAt(i), 16777619) >>> 0;
|
|
250
|
+
}
|
|
251
|
+
return hash;
|
|
252
|
+
}
|
|
253
|
+
async function queryAllReplayEntries(source, alice) {
|
|
254
|
+
const entries = [];
|
|
255
|
+
let cursor;
|
|
256
|
+
while (true) {
|
|
257
|
+
const query = await TestDataGenerator.generateMessagesQuery({
|
|
258
|
+
author: alice,
|
|
259
|
+
cursor,
|
|
260
|
+
limit: 3,
|
|
261
|
+
});
|
|
262
|
+
const reply = await source.processMessage(alice.did, query.message);
|
|
263
|
+
expect(reply.status.code).toBe(200);
|
|
264
|
+
for (const entry of reply.entries ?? []) {
|
|
265
|
+
entries.push({
|
|
266
|
+
dataBytes: await dataBytesForEntry(source, alice, entry),
|
|
267
|
+
entry: entry,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
if (reply.drained === true) {
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
cursor = reply.cursor;
|
|
274
|
+
}
|
|
275
|
+
return entries;
|
|
276
|
+
}
|
|
277
|
+
async function dataBytesForEntry(source, alice, entry) {
|
|
278
|
+
if (!isRecordsWriteMessage(entry.message)) {
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
if (entry.encodedData !== undefined) {
|
|
282
|
+
return Encoder.base64UrlToBytes(entry.encodedData);
|
|
283
|
+
}
|
|
284
|
+
const read = await TestDataGenerator.generateMessagesRead({
|
|
285
|
+
author: alice,
|
|
286
|
+
messageCid: entry.messageCid,
|
|
287
|
+
});
|
|
288
|
+
const reply = await source.processMessage(alice.did, read.message);
|
|
289
|
+
if (reply.status.code !== 200) {
|
|
290
|
+
return undefined;
|
|
291
|
+
}
|
|
292
|
+
const data = reply.entry?.data;
|
|
293
|
+
return data === undefined ? undefined : await DataStream.toBytes(data);
|
|
294
|
+
}
|
|
295
|
+
function isRecordsWriteMessage(message) {
|
|
296
|
+
return typeof message === 'object' && message !== null && Records.isRecordsWrite(message);
|
|
297
|
+
}
|
|
298
|
+
async function expectFingerprintsEqual(source, replica, tenant, protocol) {
|
|
299
|
+
const scopes = [Replication.globalDomain];
|
|
300
|
+
expect(await replica.fingerprint(tenant, scopes)).toBe(await source.fingerprint(tenant, scopes));
|
|
301
|
+
const protocolScopes = [
|
|
302
|
+
Replication.protocolDomain(protocol),
|
|
303
|
+
Replication.permissionDomain(protocol),
|
|
304
|
+
];
|
|
305
|
+
expect(await replica.fingerprint(tenant, protocolScopes)).toBe(await source.fingerprint(tenant, protocolScopes));
|
|
306
|
+
}
|
|
307
|
+
async function expectLiveRecordsEqual(source, replica, alice, protocol) {
|
|
308
|
+
expect(await liveRecordSnapshot(replica, alice, protocol)).toEqual(await liveRecordSnapshot(source, alice, protocol));
|
|
309
|
+
}
|
|
310
|
+
async function liveRecordSnapshot(dwn, alice, protocol) {
|
|
311
|
+
const query = await TestDataGenerator.generateRecordsQuery({
|
|
312
|
+
author: alice,
|
|
313
|
+
filter: { protocol },
|
|
314
|
+
});
|
|
315
|
+
const reply = await dwn.processMessage(alice.did, query.message);
|
|
316
|
+
expect(reply.status.code).toBe(200);
|
|
317
|
+
const snapshot = [];
|
|
318
|
+
for (const entry of reply.entries ?? []) {
|
|
319
|
+
const { encodedData, initialWrite, ...recordsWrite } = entry;
|
|
320
|
+
snapshot.push({
|
|
321
|
+
data: encodedData ?? '',
|
|
322
|
+
initialCid: initialWrite === undefined ? undefined : await Message.getCid(initialWrite),
|
|
323
|
+
latestCid: await Message.getCid(recordsWrite),
|
|
324
|
+
protocolPath: recordsWrite.descriptor.protocolPath,
|
|
325
|
+
recordId: recordsWrite.recordId,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
return snapshot.sort(compareLiveRecords);
|
|
329
|
+
}
|
|
330
|
+
function compareLiveRecords(left, right) {
|
|
331
|
+
const leftKey = `${left.protocolPath}:${left.recordId}`;
|
|
332
|
+
const rightKey = `${right.protocolPath}:${right.recordId}`;
|
|
333
|
+
return leftKey < rightKey ? -1 : leftKey > rightKey ? 1 : 0;
|
|
334
|
+
}
|
|
335
|
+
async function expectOccupantsEqual(source, replica, alice, protocol, protocolPath, expectedMax) {
|
|
336
|
+
const sourceOccupants = await queryRecordIds(source, alice, protocol, protocolPath);
|
|
337
|
+
const replicaOccupants = await queryRecordIds(replica, alice, protocol, protocolPath);
|
|
338
|
+
expect(replicaOccupants).toEqual(sourceOccupants);
|
|
339
|
+
expect(sourceOccupants.length).toBeLessThanOrEqual(expectedMax);
|
|
340
|
+
}
|
|
341
|
+
async function queryRecordIds(dwn, alice, protocol, protocolPath) {
|
|
342
|
+
const query = await TestDataGenerator.generateRecordsQuery({
|
|
343
|
+
author: alice,
|
|
344
|
+
filter: { protocol, protocolPath },
|
|
345
|
+
});
|
|
346
|
+
const reply = await dwn.processMessage(alice.did, query.message);
|
|
347
|
+
expect(reply.status.code).toBe(200);
|
|
348
|
+
return (reply.entries ?? []).map(entry => entry.recordId).sort();
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=replication-replay-property.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-replay-property.spec.js","sourceRoot":"","sources":["../../../../tests/core/replication-replay-property.spec.ts"],"names":[],"mappings":"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"}
|