@powerhousedao/reactor 6.0.0-dev.7 → 6.0.0-dev.78
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/dist/src/cache/collection-membership-cache.d.ts +13 -0
- package/dist/src/cache/collection-membership-cache.d.ts.map +1 -0
- package/dist/src/cache/document-meta-cache.d.ts.map +1 -1
- package/dist/src/cache/kysely-operation-index.d.ts +6 -1
- package/dist/src/cache/kysely-operation-index.d.ts.map +1 -1
- package/dist/src/cache/kysely-write-cache.d.ts +9 -2
- package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
- package/dist/src/cache/operation-index-types.d.ts +16 -2
- package/dist/src/cache/operation-index-types.d.ts.map +1 -1
- package/dist/src/cache/write/interfaces.d.ts +7 -2
- package/dist/src/cache/write/interfaces.d.ts.map +1 -1
- package/dist/src/client/reactor-client.d.ts +13 -10
- package/dist/src/client/reactor-client.d.ts.map +1 -1
- package/dist/src/client/types.d.ts +25 -6
- package/dist/src/client/types.d.ts.map +1 -1
- package/dist/src/core/reactor-builder.d.ts +23 -10
- package/dist/src/core/reactor-builder.d.ts.map +1 -1
- package/dist/src/core/reactor-client-builder.d.ts +5 -4
- package/dist/src/core/reactor-client-builder.d.ts.map +1 -1
- package/dist/src/core/reactor.d.ts +20 -80
- package/dist/src/core/reactor.d.ts.map +1 -1
- package/dist/src/core/types.d.ts +64 -28
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/utils.d.ts +39 -3
- package/dist/src/core/utils.d.ts.map +1 -1
- package/dist/src/events/types.d.ts +35 -10
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/executor/document-action-handler.d.ts +37 -0
- package/dist/src/executor/document-action-handler.d.ts.map +1 -0
- package/dist/src/executor/signature-verifier.d.ts +9 -0
- package/dist/src/executor/signature-verifier.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor-manager.d.ts +6 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts +6 -46
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/types.d.ts +1 -3
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/executor/util.d.ts +12 -2
- package/dist/src/executor/util.d.ts.map +1 -1
- package/dist/src/index.d.ts +11 -9
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +20208 -61
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts +4 -3
- package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -1
- package/dist/src/job-tracker/interfaces.d.ts +3 -1
- package/dist/src/job-tracker/interfaces.d.ts.map +1 -1
- package/dist/src/logging/console.d.ts +1 -22
- package/dist/src/logging/console.d.ts.map +1 -1
- package/dist/src/logging/types.d.ts +1 -11
- package/dist/src/logging/types.d.ts.map +1 -1
- package/dist/src/processors/index.d.ts +1 -1
- package/dist/src/processors/index.d.ts.map +1 -1
- package/dist/src/processors/processor-manager.d.ts +19 -6
- package/dist/src/processors/processor-manager.d.ts.map +1 -1
- package/dist/src/processors/relational/types.d.ts +2 -0
- package/dist/src/processors/relational/types.d.ts.map +1 -0
- package/dist/src/processors/relational/utils.d.ts +2 -0
- package/dist/src/processors/relational/utils.d.ts.map +1 -0
- package/dist/src/processors/utils.d.ts +3 -2
- package/dist/src/processors/utils.d.ts.map +1 -1
- package/dist/src/queue/job-execution-handle.d.ts +3 -0
- package/dist/src/queue/job-execution-handle.d.ts.map +1 -1
- package/dist/src/queue/queue.d.ts +30 -1
- package/dist/src/queue/queue.d.ts.map +1 -1
- package/dist/src/queue/types.d.ts +4 -3
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/read-models/base-read-model.d.ts +11 -9
- package/dist/src/read-models/base-read-model.d.ts.map +1 -1
- package/dist/src/read-models/coordinator.d.ts +2 -2
- package/dist/src/read-models/coordinator.d.ts.map +1 -1
- package/dist/src/read-models/document-view.d.ts +7 -4
- package/dist/src/read-models/document-view.d.ts.map +1 -1
- package/dist/src/read-models/interfaces.d.ts +1 -1
- package/dist/src/read-models/interfaces.d.ts.map +1 -1
- package/dist/src/read-models/types.d.ts +16 -0
- package/dist/src/read-models/types.d.ts.map +1 -1
- package/dist/src/registry/document-model-resolver.d.ts +29 -0
- package/dist/src/registry/document-model-resolver.d.ts.map +1 -0
- package/dist/src/registry/implementation.d.ts +4 -0
- package/dist/src/registry/implementation.d.ts.map +1 -1
- package/dist/src/registry/index.d.ts +3 -1
- package/dist/src/registry/index.d.ts.map +1 -1
- package/dist/src/registry/interfaces.d.ts +8 -0
- package/dist/src/registry/interfaces.d.ts.map +1 -1
- package/dist/src/shared/awaiter.d.ts +2 -2
- package/dist/src/shared/awaiter.d.ts.map +1 -1
- package/dist/src/shared/collect-all-pages.d.ts +7 -0
- package/dist/src/shared/collect-all-pages.d.ts.map +1 -0
- package/dist/src/shared/drive-url.d.ts +15 -0
- package/dist/src/shared/drive-url.d.ts.map +1 -0
- package/dist/src/shared/errors.d.ts +9 -0
- package/dist/src/shared/errors.d.ts.map +1 -1
- package/dist/src/shared/factories.d.ts +6 -2
- package/dist/src/shared/factories.d.ts.map +1 -1
- package/dist/src/shared/types.d.ts +32 -6
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/signer/passthrough-signer.d.ts +1 -1
- package/dist/src/signer/passthrough-signer.d.ts.map +1 -1
- package/dist/src/storage/interfaces.d.ts +238 -124
- package/dist/src/storage/interfaces.d.ts.map +1 -1
- package/dist/src/storage/kysely/document-indexer.d.ts +17 -18
- package/dist/src/storage/kysely/document-indexer.d.ts.map +1 -1
- package/dist/src/storage/kysely/store.d.ts +5 -4
- package/dist/src/storage/kysely/store.d.ts.map +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts.map +1 -1
- package/dist/src/storage/kysely/sync-dead-letter-storage.d.ts +17 -0
- package/dist/src/storage/kysely/sync-dead-letter-storage.d.ts.map +1 -0
- package/dist/src/storage/kysely/types.d.ts +22 -0
- package/dist/src/storage/kysely/types.d.ts.map +1 -1
- package/dist/src/storage/migrations/011_add_cursor_type_column.d.ts +3 -0
- package/dist/src/storage/migrations/011_add_cursor_type_column.d.ts.map +1 -0
- package/dist/src/storage/migrations/012_add_source_remote_column.d.ts +3 -0
- package/dist/src/storage/migrations/012_add_source_remote_column.d.ts.map +1 -0
- package/dist/src/storage/migrations/013_create_sync_dead_letters_table.d.ts +3 -0
- package/dist/src/storage/migrations/013_create_sync_dead_letters_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/014_create_processor_cursor_table.d.ts +3 -0
- package/dist/src/storage/migrations/014_create_processor_cursor_table.d.ts.map +1 -0
- package/dist/src/storage/migrations/migrator.d.ts.map +1 -1
- package/dist/src/subs/default-error-handler.d.ts.map +1 -1
- package/dist/src/subs/subscription-notification-read-model.d.ts +3 -2
- package/dist/src/subs/subscription-notification-read-model.d.ts.map +1 -1
- package/dist/src/sync/batch-aggregator.d.ts +25 -0
- package/dist/src/sync/batch-aggregator.d.ts.map +1 -0
- package/dist/src/sync/buffered-mailbox.d.ts +36 -0
- package/dist/src/sync/buffered-mailbox.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-req-channel.d.ts +121 -0
- package/dist/src/sync/channels/gql-req-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-request-channel-factory.d.ts +32 -0
- package/dist/src/sync/channels/gql-request-channel-factory.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-res-channel.d.ts +31 -0
- package/dist/src/sync/channels/gql-res-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-response-channel-factory.d.ts +13 -0
- package/dist/src/sync/channels/gql-response-channel-factory.d.ts.map +1 -0
- package/dist/src/sync/channels/index.d.ts +6 -4
- package/dist/src/sync/channels/index.d.ts.map +1 -1
- package/dist/src/sync/channels/interval-poll-timer.d.ts +40 -0
- package/dist/src/sync/channels/interval-poll-timer.d.ts.map +1 -0
- package/dist/src/sync/channels/poll-timer.d.ts +14 -0
- package/dist/src/sync/channels/poll-timer.d.ts.map +1 -0
- package/dist/src/sync/channels/utils.d.ts +15 -1
- package/dist/src/sync/channels/utils.d.ts.map +1 -1
- package/dist/src/sync/index.d.ts +11 -7
- package/dist/src/sync/index.d.ts.map +1 -1
- package/dist/src/sync/interfaces.d.ts +42 -19
- package/dist/src/sync/interfaces.d.ts.map +1 -1
- package/dist/src/sync/mailbox.d.ts +51 -12
- package/dist/src/sync/mailbox.d.ts.map +1 -1
- package/dist/src/sync/sync-awaiter.d.ts +34 -0
- package/dist/src/sync/sync-awaiter.d.ts.map +1 -0
- package/dist/src/sync/sync-builder.d.ts +5 -1
- package/dist/src/sync/sync-builder.d.ts.map +1 -1
- package/dist/src/sync/sync-manager.d.ts +22 -8
- package/dist/src/sync/sync-manager.d.ts.map +1 -1
- package/dist/src/sync/sync-operation.d.ts +4 -2
- package/dist/src/sync/sync-operation.d.ts.map +1 -1
- package/dist/src/sync/sync-status-tracker.d.ts +31 -0
- package/dist/src/sync/sync-status-tracker.d.ts.map +1 -0
- package/dist/src/sync/types.d.ts +107 -2
- package/dist/src/sync/types.d.ts.map +1 -1
- package/dist/src/sync/utils.d.ts +37 -2
- package/dist/src/sync/utils.d.ts.map +1 -1
- package/dist/src/utils/reshuffle.d.ts +22 -5
- package/dist/src/utils/reshuffle.d.ts.map +1 -1
- package/package.json +24 -20
- package/dist/src/actions/index.js +0 -76
- package/dist/src/actions/index.js.map +0 -1
- package/dist/src/cache/buffer/ring-buffer.js +0 -69
- package/dist/src/cache/buffer/ring-buffer.js.map +0 -1
- package/dist/src/cache/document-meta-cache-types.js +0 -2
- package/dist/src/cache/document-meta-cache-types.js.map +0 -1
- package/dist/src/cache/document-meta-cache.js +0 -128
- package/dist/src/cache/document-meta-cache.js.map +0 -1
- package/dist/src/cache/index.js +0 -2
- package/dist/src/cache/index.js.map +0 -1
- package/dist/src/cache/kysely-operation-index.js +0 -250
- package/dist/src/cache/kysely-operation-index.js.map +0 -1
- package/dist/src/cache/kysely-write-cache.js +0 -388
- package/dist/src/cache/kysely-write-cache.js.map +0 -1
- package/dist/src/cache/lru/lru-tracker.js +0 -96
- package/dist/src/cache/lru/lru-tracker.js.map +0 -1
- package/dist/src/cache/operation-index-types.js +0 -4
- package/dist/src/cache/operation-index-types.js.map +0 -1
- package/dist/src/cache/write/interfaces.js +0 -2
- package/dist/src/cache/write/interfaces.js.map +0 -1
- package/dist/src/cache/write-cache-types.js +0 -2
- package/dist/src/cache/write-cache-types.js.map +0 -1
- package/dist/src/client/reactor-client.js +0 -406
- package/dist/src/client/reactor-client.js.map +0 -1
- package/dist/src/client/types.js +0 -14
- package/dist/src/client/types.js.map +0 -1
- package/dist/src/core/reactor-builder.js +0 -231
- package/dist/src/core/reactor-builder.js.map +0 -1
- package/dist/src/core/reactor-client-builder.js +0 -123
- package/dist/src/core/reactor-client-builder.js.map +0 -1
- package/dist/src/core/reactor.js +0 -981
- package/dist/src/core/reactor.js.map +0 -1
- package/dist/src/core/types.js +0 -2
- package/dist/src/core/types.js.map +0 -1
- package/dist/src/core/utils.js +0 -171
- package/dist/src/core/utils.js.map +0 -1
- package/dist/src/events/event-bus.js +0 -53
- package/dist/src/events/event-bus.js.map +0 -1
- package/dist/src/events/interfaces.js +0 -2
- package/dist/src/events/interfaces.js.map +0 -1
- package/dist/src/events/types.js +0 -28
- package/dist/src/events/types.js.map +0 -1
- package/dist/src/executor/interfaces.js +0 -2
- package/dist/src/executor/interfaces.js.map +0 -1
- package/dist/src/executor/simple-job-executor-manager.js +0 -233
- package/dist/src/executor/simple-job-executor-manager.js.map +0 -1
- package/dist/src/executor/simple-job-executor.js +0 -898
- package/dist/src/executor/simple-job-executor.js.map +0 -1
- package/dist/src/executor/types.js +0 -11
- package/dist/src/executor/types.js.map +0 -1
- package/dist/src/executor/util.js +0 -184
- package/dist/src/executor/util.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/job-tracker/in-memory-job-tracker.js +0 -112
- package/dist/src/job-tracker/in-memory-job-tracker.js.map +0 -1
- package/dist/src/job-tracker/index.js +0 -2
- package/dist/src/job-tracker/index.js.map +0 -1
- package/dist/src/job-tracker/interfaces.js +0 -2
- package/dist/src/job-tracker/interfaces.js.map +0 -1
- package/dist/src/logging/console.js +0 -108
- package/dist/src/logging/console.js.map +0 -1
- package/dist/src/logging/types.js +0 -2
- package/dist/src/logging/types.js.map +0 -1
- package/dist/src/processors/index.js +0 -2
- package/dist/src/processors/index.js.map +0 -1
- package/dist/src/processors/processor-manager.js +0 -165
- package/dist/src/processors/processor-manager.js.map +0 -1
- package/dist/src/processors/types.d.ts +0 -63
- package/dist/src/processors/types.d.ts.map +0 -1
- package/dist/src/processors/types.js +0 -2
- package/dist/src/processors/types.js.map +0 -1
- package/dist/src/processors/utils.js +0 -58
- package/dist/src/processors/utils.js.map +0 -1
- package/dist/src/queue/interfaces.js +0 -2
- package/dist/src/queue/interfaces.js.map +0 -1
- package/dist/src/queue/job-execution-handle.js +0 -62
- package/dist/src/queue/job-execution-handle.js.map +0 -1
- package/dist/src/queue/queue.js +0 -384
- package/dist/src/queue/queue.js.map +0 -1
- package/dist/src/queue/types.js +0 -19
- package/dist/src/queue/types.js.map +0 -1
- package/dist/src/read-models/base-read-model.js +0 -143
- package/dist/src/read-models/base-read-model.js.map +0 -1
- package/dist/src/read-models/coordinator.js +0 -72
- package/dist/src/read-models/coordinator.js.map +0 -1
- package/dist/src/read-models/document-view.js +0 -375
- package/dist/src/read-models/document-view.js.map +0 -1
- package/dist/src/read-models/interfaces.js +0 -2
- package/dist/src/read-models/interfaces.js.map +0 -1
- package/dist/src/read-models/types.js +0 -2
- package/dist/src/read-models/types.js.map +0 -1
- package/dist/src/registry/implementation.js +0 -216
- package/dist/src/registry/implementation.js.map +0 -1
- package/dist/src/registry/index.js +0 -2
- package/dist/src/registry/index.js.map +0 -1
- package/dist/src/registry/interfaces.js +0 -2
- package/dist/src/registry/interfaces.js.map +0 -1
- package/dist/src/shared/awaiter.js +0 -123
- package/dist/src/shared/awaiter.js.map +0 -1
- package/dist/src/shared/consistency-tracker.js +0 -123
- package/dist/src/shared/consistency-tracker.js.map +0 -1
- package/dist/src/shared/errors.js +0 -75
- package/dist/src/shared/errors.js.map +0 -1
- package/dist/src/shared/factories.js +0 -33
- package/dist/src/shared/factories.js.map +0 -1
- package/dist/src/shared/types.js +0 -38
- package/dist/src/shared/types.js.map +0 -1
- package/dist/src/shared/utils.js +0 -8
- package/dist/src/shared/utils.js.map +0 -1
- package/dist/src/signer/passthrough-signer.js +0 -19
- package/dist/src/signer/passthrough-signer.js.map +0 -1
- package/dist/src/signer/types.js +0 -2
- package/dist/src/signer/types.js.map +0 -1
- package/dist/src/storage/consistency-aware-legacy-storage.d.ts +0 -33
- package/dist/src/storage/consistency-aware-legacy-storage.d.ts.map +0 -1
- package/dist/src/storage/consistency-aware-legacy-storage.js +0 -65
- package/dist/src/storage/consistency-aware-legacy-storage.js.map +0 -1
- package/dist/src/storage/index.js +0 -3
- package/dist/src/storage/index.js.map +0 -1
- package/dist/src/storage/interfaces.js +0 -19
- package/dist/src/storage/interfaces.js.map +0 -1
- package/dist/src/storage/kysely/document-indexer.js +0 -350
- package/dist/src/storage/kysely/document-indexer.js.map +0 -1
- package/dist/src/storage/kysely/keyframe-store.js +0 -64
- package/dist/src/storage/kysely/keyframe-store.js.map +0 -1
- package/dist/src/storage/kysely/store.js +0 -233
- package/dist/src/storage/kysely/store.js.map +0 -1
- package/dist/src/storage/kysely/sync-cursor-storage.js +0 -93
- package/dist/src/storage/kysely/sync-cursor-storage.js.map +0 -1
- package/dist/src/storage/kysely/sync-remote-storage.js +0 -133
- package/dist/src/storage/kysely/sync-remote-storage.js.map +0 -1
- package/dist/src/storage/kysely/types.js +0 -2
- package/dist/src/storage/kysely/types.js.map +0 -1
- package/dist/src/storage/migrations/001_create_operation_table.js +0 -41
- package/dist/src/storage/migrations/001_create_operation_table.js.map +0 -1
- package/dist/src/storage/migrations/002_create_keyframe_table.js +0 -27
- package/dist/src/storage/migrations/002_create_keyframe_table.js.map +0 -1
- package/dist/src/storage/migrations/003_create_document_table.js +0 -10
- package/dist/src/storage/migrations/003_create_document_table.js.map +0 -1
- package/dist/src/storage/migrations/004_create_document_relationship_table.js +0 -35
- package/dist/src/storage/migrations/004_create_document_relationship_table.js.map +0 -1
- package/dist/src/storage/migrations/005_create_indexer_state_table.js +0 -10
- package/dist/src/storage/migrations/005_create_indexer_state_table.js.map +0 -1
- package/dist/src/storage/migrations/006_create_document_snapshot_table.js +0 -49
- package/dist/src/storage/migrations/006_create_document_snapshot_table.js.map +0 -1
- package/dist/src/storage/migrations/007_create_slug_mapping_table.js +0 -24
- package/dist/src/storage/migrations/007_create_slug_mapping_table.js.map +0 -1
- package/dist/src/storage/migrations/008_create_view_state_table.js +0 -10
- package/dist/src/storage/migrations/008_create_view_state_table.js.map +0 -1
- package/dist/src/storage/migrations/009_create_operation_index_tables.js +0 -50
- package/dist/src/storage/migrations/009_create_operation_index_tables.js.map +0 -1
- package/dist/src/storage/migrations/010_create_sync_tables.js +0 -43
- package/dist/src/storage/migrations/010_create_sync_tables.js.map +0 -1
- package/dist/src/storage/migrations/index.js +0 -3
- package/dist/src/storage/migrations/index.js.map +0 -1
- package/dist/src/storage/migrations/migrator.js +0 -78
- package/dist/src/storage/migrations/migrator.js.map +0 -1
- package/dist/src/storage/migrations/run-migrations.js +0 -58
- package/dist/src/storage/migrations/run-migrations.js.map +0 -1
- package/dist/src/storage/migrations/types.js +0 -2
- package/dist/src/storage/migrations/types.js.map +0 -1
- package/dist/src/storage/txn.js +0 -42
- package/dist/src/storage/txn.js.map +0 -1
- package/dist/src/subs/default-error-handler.js +0 -27
- package/dist/src/subs/default-error-handler.js.map +0 -1
- package/dist/src/subs/react-subscription-manager.js +0 -185
- package/dist/src/subs/react-subscription-manager.js.map +0 -1
- package/dist/src/subs/subscription-notification-read-model.js +0 -62
- package/dist/src/subs/subscription-notification-read-model.js.map +0 -1
- package/dist/src/subs/types.js +0 -2
- package/dist/src/subs/types.js.map +0 -1
- package/dist/src/sync/channels/composite-channel-factory.d.ts +0 -30
- package/dist/src/sync/channels/composite-channel-factory.d.ts.map +0 -1
- package/dist/src/sync/channels/composite-channel-factory.js +0 -87
- package/dist/src/sync/channels/composite-channel-factory.js.map +0 -1
- package/dist/src/sync/channels/gql-channel-factory.d.ts +0 -25
- package/dist/src/sync/channels/gql-channel-factory.d.ts.map +0 -1
- package/dist/src/sync/channels/gql-channel-factory.js +0 -76
- package/dist/src/sync/channels/gql-channel-factory.js.map +0 -1
- package/dist/src/sync/channels/gql-channel.d.ts +0 -118
- package/dist/src/sync/channels/gql-channel.d.ts.map +0 -1
- package/dist/src/sync/channels/gql-channel.js +0 -423
- package/dist/src/sync/channels/gql-channel.js.map +0 -1
- package/dist/src/sync/channels/index.js +0 -6
- package/dist/src/sync/channels/index.js.map +0 -1
- package/dist/src/sync/channels/polling-channel.d.ts +0 -39
- package/dist/src/sync/channels/polling-channel.d.ts.map +0 -1
- package/dist/src/sync/channels/polling-channel.js +0 -72
- package/dist/src/sync/channels/polling-channel.js.map +0 -1
- package/dist/src/sync/channels/utils.js +0 -96
- package/dist/src/sync/channels/utils.js.map +0 -1
- package/dist/src/sync/errors.js +0 -17
- package/dist/src/sync/errors.js.map +0 -1
- package/dist/src/sync/index.js +0 -9
- package/dist/src/sync/index.js.map +0 -1
- package/dist/src/sync/interfaces.js +0 -2
- package/dist/src/sync/interfaces.js.map +0 -1
- package/dist/src/sync/mailbox.js +0 -59
- package/dist/src/sync/mailbox.js.map +0 -1
- package/dist/src/sync/sync-builder.js +0 -39
- package/dist/src/sync/sync-builder.js.map +0 -1
- package/dist/src/sync/sync-manager.js +0 -266
- package/dist/src/sync/sync-manager.js.map +0 -1
- package/dist/src/sync/sync-operation.js +0 -63
- package/dist/src/sync/sync-operation.js.map +0 -1
- package/dist/src/sync/types.js +0 -16
- package/dist/src/sync/types.js.map +0 -1
- package/dist/src/sync/utils.js +0 -78
- package/dist/src/sync/utils.js.map +0 -1
- package/dist/src/utils/reshuffle.js +0 -47
- package/dist/src/utils/reshuffle.js.map +0 -1
|
@@ -1,423 +0,0 @@
|
|
|
1
|
-
import { ChannelError } from "../errors.js";
|
|
2
|
-
import { Mailbox } from "../mailbox.js";
|
|
3
|
-
import { ChannelErrorSource } from "../types.js";
|
|
4
|
-
import { envelopesToSyncOperations } from "./utils.js";
|
|
5
|
-
/**
|
|
6
|
-
* GraphQL-based synchronization channel for network communication between reactors.
|
|
7
|
-
*/
|
|
8
|
-
export class GqlChannel {
|
|
9
|
-
logger;
|
|
10
|
-
inbox;
|
|
11
|
-
outbox;
|
|
12
|
-
deadLetter;
|
|
13
|
-
channelId;
|
|
14
|
-
remoteName;
|
|
15
|
-
cursorStorage;
|
|
16
|
-
config;
|
|
17
|
-
isShutdown;
|
|
18
|
-
pollTimer;
|
|
19
|
-
failureCount;
|
|
20
|
-
lastSuccessUtcMs;
|
|
21
|
-
lastFailureUtcMs;
|
|
22
|
-
constructor(logger, channelId, remoteName, cursorStorage, config) {
|
|
23
|
-
this.logger = logger;
|
|
24
|
-
this.channelId = channelId;
|
|
25
|
-
this.remoteName = remoteName;
|
|
26
|
-
this.cursorStorage = cursorStorage;
|
|
27
|
-
this.config = {
|
|
28
|
-
url: config.url,
|
|
29
|
-
authToken: config.authToken,
|
|
30
|
-
pollIntervalMs: config.pollIntervalMs ?? 2000,
|
|
31
|
-
retryBaseDelayMs: config.retryBaseDelayMs ?? 1000,
|
|
32
|
-
retryMaxDelayMs: config.retryMaxDelayMs ?? 300000,
|
|
33
|
-
maxFailures: config.maxFailures ?? 5,
|
|
34
|
-
fetchFn: config.fetchFn,
|
|
35
|
-
collectionId: config.collectionId,
|
|
36
|
-
filter: config.filter,
|
|
37
|
-
};
|
|
38
|
-
this.isShutdown = false;
|
|
39
|
-
this.failureCount = 0;
|
|
40
|
-
this.inbox = new Mailbox();
|
|
41
|
-
this.outbox = new Mailbox();
|
|
42
|
-
this.deadLetter = new Mailbox();
|
|
43
|
-
this.outbox.onAdded((syncOp) => {
|
|
44
|
-
this.handleOutboxAdded(syncOp);
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Shuts down the channel and prevents further operations.
|
|
49
|
-
*/
|
|
50
|
-
shutdown() {
|
|
51
|
-
this.isShutdown = true;
|
|
52
|
-
if (this.pollTimer) {
|
|
53
|
-
clearTimeout(this.pollTimer);
|
|
54
|
-
this.pollTimer = undefined;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Initializes the channel by registering it on the remote server and starting polling.
|
|
59
|
-
*/
|
|
60
|
-
async init() {
|
|
61
|
-
await this.touchRemoteChannel();
|
|
62
|
-
this.startPolling();
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Starts the polling loop to fetch operations from the remote.
|
|
66
|
-
*/
|
|
67
|
-
startPolling() {
|
|
68
|
-
if (this.isShutdown) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
void this.poll().then(() => {
|
|
72
|
-
this.pollTimer = setTimeout(() => {
|
|
73
|
-
this.startPolling(); // Schedule next poll
|
|
74
|
-
}, this.config.pollIntervalMs);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Polls the remote for new sync envelopes.
|
|
79
|
-
*/
|
|
80
|
-
async poll() {
|
|
81
|
-
if (this.isShutdown) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
if (this.failureCount >= this.config.maxFailures) {
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
let cursor;
|
|
88
|
-
try {
|
|
89
|
-
cursor = await this.cursorStorage.get(this.remoteName);
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
this.handlePollError(error);
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const cursorOrdinal = cursor.cursorOrdinal;
|
|
96
|
-
let envelopes;
|
|
97
|
-
try {
|
|
98
|
-
envelopes = await this.pollSyncEnvelopes(cursorOrdinal);
|
|
99
|
-
}
|
|
100
|
-
catch (error) {
|
|
101
|
-
this.handlePollError(error);
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
let maxCursorOrdinal = cursorOrdinal;
|
|
105
|
-
for (const envelope of envelopes) {
|
|
106
|
-
if (envelope.type.toLowerCase() === "operations" && envelope.operations) {
|
|
107
|
-
const syncOps = envelopesToSyncOperations(envelope, this.remoteName);
|
|
108
|
-
for (const syncOp of syncOps) {
|
|
109
|
-
syncOp.transported();
|
|
110
|
-
this.inbox.add(syncOp);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
if (envelope.cursor && envelope.cursor.cursorOrdinal > maxCursorOrdinal) {
|
|
114
|
-
maxCursorOrdinal = envelope.cursor.cursorOrdinal;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
if (maxCursorOrdinal > cursorOrdinal) {
|
|
118
|
-
try {
|
|
119
|
-
await this.updateCursor(maxCursorOrdinal);
|
|
120
|
-
}
|
|
121
|
-
catch (error) {
|
|
122
|
-
this.handlePollError(error);
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
this.lastSuccessUtcMs = Date.now();
|
|
127
|
-
this.failureCount = 0;
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Handles polling errors with exponential backoff.
|
|
131
|
-
*/
|
|
132
|
-
handlePollError(error) {
|
|
133
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
134
|
-
if (err.message.includes("Channel not found")) {
|
|
135
|
-
this.recoverFromChannelNotFound();
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
this.failureCount++;
|
|
139
|
-
this.lastFailureUtcMs = Date.now();
|
|
140
|
-
const channelError = new ChannelError(ChannelErrorSource.Inbox, err);
|
|
141
|
-
this.logger.error("GqlChannel poll error (@FailureCount/@MaxFailures): @Error", this.failureCount, this.config.maxFailures, channelError);
|
|
142
|
-
if (this.failureCount >= this.config.maxFailures) {
|
|
143
|
-
this.logger.error("GqlChannel @ChannelId exceeded failure threshold, stopping polls", this.channelId);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Recovers from a "Channel not found" error by re-registering and restarting polling.
|
|
148
|
-
*/
|
|
149
|
-
recoverFromChannelNotFound() {
|
|
150
|
-
this.logger.info("GqlChannel @ChannelId not found on remote, re-registering...", this.channelId);
|
|
151
|
-
if (this.pollTimer) {
|
|
152
|
-
clearTimeout(this.pollTimer);
|
|
153
|
-
this.pollTimer = undefined;
|
|
154
|
-
}
|
|
155
|
-
void this.touchRemoteChannel()
|
|
156
|
-
.then(() => {
|
|
157
|
-
this.logger.info("GqlChannel @ChannelId re-registered successfully", this.channelId);
|
|
158
|
-
this.failureCount = 0;
|
|
159
|
-
this.startPolling();
|
|
160
|
-
})
|
|
161
|
-
.catch((recoveryError) => {
|
|
162
|
-
this.logger.error("GqlChannel @ChannelId failed to re-register: @Error", this.channelId, recoveryError);
|
|
163
|
-
this.failureCount++;
|
|
164
|
-
this.lastFailureUtcMs = Date.now();
|
|
165
|
-
this.pollTimer = setTimeout(() => {
|
|
166
|
-
this.startPolling();
|
|
167
|
-
}, this.config.pollIntervalMs);
|
|
168
|
-
});
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Queries the remote GraphQL endpoint for sync envelopes.
|
|
172
|
-
*/
|
|
173
|
-
async pollSyncEnvelopes(cursorOrdinal) {
|
|
174
|
-
const query = `
|
|
175
|
-
query PollSyncEnvelopes($channelId: String!, $cursorOrdinal: Int!) {
|
|
176
|
-
pollSyncEnvelopes(channelId: $channelId, cursorOrdinal: $cursorOrdinal) {
|
|
177
|
-
type
|
|
178
|
-
channelMeta {
|
|
179
|
-
id
|
|
180
|
-
}
|
|
181
|
-
operations {
|
|
182
|
-
operation {
|
|
183
|
-
index
|
|
184
|
-
timestampUtcMs
|
|
185
|
-
hash
|
|
186
|
-
skip
|
|
187
|
-
error
|
|
188
|
-
id
|
|
189
|
-
action {
|
|
190
|
-
id
|
|
191
|
-
type
|
|
192
|
-
timestampUtcMs
|
|
193
|
-
input
|
|
194
|
-
scope
|
|
195
|
-
attachments {
|
|
196
|
-
data
|
|
197
|
-
mimeType
|
|
198
|
-
hash
|
|
199
|
-
extension
|
|
200
|
-
fileName
|
|
201
|
-
}
|
|
202
|
-
context {
|
|
203
|
-
signer {
|
|
204
|
-
user {
|
|
205
|
-
address
|
|
206
|
-
networkId
|
|
207
|
-
chainId
|
|
208
|
-
}
|
|
209
|
-
app {
|
|
210
|
-
name
|
|
211
|
-
key
|
|
212
|
-
}
|
|
213
|
-
signatures
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
context {
|
|
219
|
-
documentId
|
|
220
|
-
documentType
|
|
221
|
-
scope
|
|
222
|
-
branch
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
cursor {
|
|
226
|
-
remoteName
|
|
227
|
-
cursorOrdinal
|
|
228
|
-
lastSyncedAtUtcMs
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
`;
|
|
233
|
-
const variables = {
|
|
234
|
-
channelId: this.channelId,
|
|
235
|
-
cursorOrdinal,
|
|
236
|
-
};
|
|
237
|
-
const response = await this.executeGraphQL(query, variables);
|
|
238
|
-
return response.pollSyncEnvelopes;
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Registers or updates this channel on the remote server via GraphQL mutation.
|
|
242
|
-
*/
|
|
243
|
-
async touchRemoteChannel() {
|
|
244
|
-
const mutation = `
|
|
245
|
-
mutation TouchChannel($input: TouchChannelInput!) {
|
|
246
|
-
touchChannel(input: $input)
|
|
247
|
-
}
|
|
248
|
-
`;
|
|
249
|
-
const variables = {
|
|
250
|
-
input: {
|
|
251
|
-
id: this.channelId,
|
|
252
|
-
name: this.channelId,
|
|
253
|
-
collectionId: this.config.collectionId,
|
|
254
|
-
filter: {
|
|
255
|
-
documentId: this.config.filter.documentId,
|
|
256
|
-
scope: this.config.filter.scope,
|
|
257
|
-
branch: this.config.filter.branch,
|
|
258
|
-
},
|
|
259
|
-
},
|
|
260
|
-
};
|
|
261
|
-
await this.executeGraphQL(mutation, variables);
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Handles sync operations added to the outbox by sending them to the remote.
|
|
265
|
-
*/
|
|
266
|
-
handleOutboxAdded(syncOp) {
|
|
267
|
-
if (this.isShutdown) {
|
|
268
|
-
return;
|
|
269
|
-
}
|
|
270
|
-
// Execute async but don't await (fire and forget with error handling)
|
|
271
|
-
this.pushSyncOperation(syncOp).catch((error) => {
|
|
272
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
273
|
-
const channelError = new ChannelError(ChannelErrorSource.Outbox, err);
|
|
274
|
-
syncOp.failed(channelError);
|
|
275
|
-
this.deadLetter.add(syncOp);
|
|
276
|
-
this.outbox.remove(syncOp);
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Pushes a sync operation to the remote via GraphQL mutation.
|
|
281
|
-
*/
|
|
282
|
-
async pushSyncOperation(syncOp) {
|
|
283
|
-
syncOp.started();
|
|
284
|
-
this.logger.debug("[PUSH]: @Operations", syncOp.operations.map((op) => `(${op.context.documentId}, ${op.context.branch}, ${op.context.scope}, ${op.operation.index})`));
|
|
285
|
-
const envelope = {
|
|
286
|
-
type: "operations",
|
|
287
|
-
channelMeta: { id: this.channelId },
|
|
288
|
-
operations: syncOp.operations,
|
|
289
|
-
};
|
|
290
|
-
const mutation = `
|
|
291
|
-
mutation PushSyncEnvelope($envelope: SyncEnvelopeInput!) {
|
|
292
|
-
pushSyncEnvelope(envelope: $envelope)
|
|
293
|
-
}
|
|
294
|
-
`;
|
|
295
|
-
const variables = {
|
|
296
|
-
envelope: this.serializeEnvelope(envelope),
|
|
297
|
-
};
|
|
298
|
-
await this.executeGraphQL(mutation, variables);
|
|
299
|
-
// Successfully sent - the outbox will be cleared when we receive ACK
|
|
300
|
-
// For now, we optimistically remove from outbox
|
|
301
|
-
this.outbox.remove(syncOp);
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Serializes a SyncEnvelope for GraphQL transport.
|
|
305
|
-
*
|
|
306
|
-
* Signatures are serialized as comma-separated strings since GraphQL schema
|
|
307
|
-
* defines them as [String!]!. Extra context fields (resultingState, ordinal)
|
|
308
|
-
* are stripped since they are not defined in OperationContextInput.
|
|
309
|
-
*/
|
|
310
|
-
serializeEnvelope(envelope) {
|
|
311
|
-
return {
|
|
312
|
-
type: envelope.type.toUpperCase(),
|
|
313
|
-
channelMeta: envelope.channelMeta,
|
|
314
|
-
operations: envelope.operations?.map((opWithContext) => ({
|
|
315
|
-
operation: {
|
|
316
|
-
index: opWithContext.operation.index,
|
|
317
|
-
timestampUtcMs: opWithContext.operation.timestampUtcMs,
|
|
318
|
-
hash: opWithContext.operation.hash,
|
|
319
|
-
skip: opWithContext.operation.skip,
|
|
320
|
-
error: opWithContext.operation.error,
|
|
321
|
-
id: opWithContext.operation.id,
|
|
322
|
-
action: this.serializeAction(opWithContext.operation.action),
|
|
323
|
-
},
|
|
324
|
-
context: {
|
|
325
|
-
documentId: opWithContext.context.documentId,
|
|
326
|
-
documentType: opWithContext.context.documentType,
|
|
327
|
-
scope: opWithContext.context.scope,
|
|
328
|
-
branch: opWithContext.context.branch,
|
|
329
|
-
},
|
|
330
|
-
})),
|
|
331
|
-
cursor: envelope.cursor,
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
/**
|
|
335
|
-
* Serializes an action for GraphQL transport, converting signature tuples to strings.
|
|
336
|
-
*/
|
|
337
|
-
serializeAction(action) {
|
|
338
|
-
const signer = action.context?.signer;
|
|
339
|
-
if (!signer?.signatures) {
|
|
340
|
-
return action;
|
|
341
|
-
}
|
|
342
|
-
return {
|
|
343
|
-
...action,
|
|
344
|
-
context: {
|
|
345
|
-
...action.context,
|
|
346
|
-
signer: {
|
|
347
|
-
...signer,
|
|
348
|
-
signatures: signer.signatures.map((sig) => Array.isArray(sig) ? sig.join(", ") : sig),
|
|
349
|
-
},
|
|
350
|
-
},
|
|
351
|
-
};
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Executes a GraphQL query or mutation against the remote endpoint.
|
|
355
|
-
*/
|
|
356
|
-
async executeGraphQL(query, variables) {
|
|
357
|
-
const headers = {
|
|
358
|
-
"Content-Type": "application/json",
|
|
359
|
-
};
|
|
360
|
-
if (this.config.authToken) {
|
|
361
|
-
headers["Authorization"] = `Bearer ${this.config.authToken}`;
|
|
362
|
-
}
|
|
363
|
-
const fetchFn = this.config.fetchFn ?? fetch;
|
|
364
|
-
let response;
|
|
365
|
-
try {
|
|
366
|
-
response = await fetchFn(this.config.url, {
|
|
367
|
-
method: "POST",
|
|
368
|
-
headers,
|
|
369
|
-
body: JSON.stringify({
|
|
370
|
-
query,
|
|
371
|
-
variables,
|
|
372
|
-
}),
|
|
373
|
-
});
|
|
374
|
-
}
|
|
375
|
-
catch (error) {
|
|
376
|
-
throw new Error(`GraphQL request failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
377
|
-
}
|
|
378
|
-
if (!response.ok) {
|
|
379
|
-
throw new Error(`GraphQL request failed: ${response.status} ${response.statusText}`);
|
|
380
|
-
}
|
|
381
|
-
let result;
|
|
382
|
-
try {
|
|
383
|
-
result = (await response.json());
|
|
384
|
-
}
|
|
385
|
-
catch (error) {
|
|
386
|
-
throw new Error(`Failed to parse GraphQL response: ${error instanceof Error ? error.message : String(error)}`);
|
|
387
|
-
}
|
|
388
|
-
if (result.errors) {
|
|
389
|
-
throw new Error(`GraphQL errors: ${JSON.stringify(result.errors, null, 2)}`);
|
|
390
|
-
}
|
|
391
|
-
if (!result.data) {
|
|
392
|
-
throw new Error("GraphQL response missing data field");
|
|
393
|
-
}
|
|
394
|
-
return result.data;
|
|
395
|
-
}
|
|
396
|
-
/**
|
|
397
|
-
* Updates the synchronization cursor for this channel's remote.
|
|
398
|
-
*/
|
|
399
|
-
async updateCursor(cursorOrdinal) {
|
|
400
|
-
const cursor = {
|
|
401
|
-
remoteName: this.remoteName,
|
|
402
|
-
cursorOrdinal,
|
|
403
|
-
lastSyncedAtUtcMs: Date.now(),
|
|
404
|
-
};
|
|
405
|
-
await this.cursorStorage.upsert(cursor);
|
|
406
|
-
}
|
|
407
|
-
/**
|
|
408
|
-
* Gets the current health status of the channel.
|
|
409
|
-
*/
|
|
410
|
-
getHealth() {
|
|
411
|
-
return {
|
|
412
|
-
state: this.failureCount >= this.config.maxFailures
|
|
413
|
-
? "error"
|
|
414
|
-
: this.failureCount > 0
|
|
415
|
-
? "running"
|
|
416
|
-
: "idle",
|
|
417
|
-
lastSuccessUtcMs: this.lastSuccessUtcMs,
|
|
418
|
-
lastFailureUtcMs: this.lastFailureUtcMs,
|
|
419
|
-
failureCount: this.failureCount,
|
|
420
|
-
};
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
//# sourceMappingURL=gql-channel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gql-channel.js","sourceRoot":"","sources":["../../../../src/sync/channels/gql-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export { PollingChannel } from "./polling-channel.js";
|
|
2
|
-
export { GqlChannel } from "./gql-channel.js";
|
|
3
|
-
export { GqlChannelFactory } from "./gql-channel-factory.js";
|
|
4
|
-
export { CompositeChannelFactory } from "./composite-channel-factory.js";
|
|
5
|
-
export { envelopeToSyncOperation } from "./utils.js";
|
|
6
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sync/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import type { ISyncCursorStorage } from "../../storage/interfaces.js";
|
|
2
|
-
import type { IChannel } from "../interfaces.js";
|
|
3
|
-
import type { SyncOperation } from "../sync-operation.js";
|
|
4
|
-
import { Mailbox } from "../mailbox.js";
|
|
5
|
-
import type { SyncEnvelope } from "../types.js";
|
|
6
|
-
/**
|
|
7
|
-
* Channel for cursor-based polling by external clients.
|
|
8
|
-
*
|
|
9
|
-
* PollingChannel does NOT auto-remove operations from the outbox.
|
|
10
|
-
* Operations remain until explicitly acknowledged via cursor
|
|
11
|
-
* advancement through updateCursor().
|
|
12
|
-
*/
|
|
13
|
-
export declare class PollingChannel implements IChannel {
|
|
14
|
-
readonly inbox: Mailbox<SyncOperation>;
|
|
15
|
-
readonly outbox: Mailbox<SyncOperation>;
|
|
16
|
-
readonly deadLetter: Mailbox<SyncOperation>;
|
|
17
|
-
private readonly channelId;
|
|
18
|
-
private readonly remoteName;
|
|
19
|
-
private readonly cursorStorage;
|
|
20
|
-
private isShutdown;
|
|
21
|
-
constructor(channelId: string, remoteName: string, cursorStorage: ISyncCursorStorage);
|
|
22
|
-
shutdown(): void;
|
|
23
|
-
init(): Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* Receives a sync envelope from a peer channel.
|
|
26
|
-
*
|
|
27
|
-
* @param envelope - The sync envelope to receive
|
|
28
|
-
* @throws {PollingChannelError} If channel is shutdown
|
|
29
|
-
*/
|
|
30
|
-
receive(envelope: SyncEnvelope): void;
|
|
31
|
-
/**
|
|
32
|
-
* Advances the cursor and removes acknowledged operations from outbox.
|
|
33
|
-
* Operations with ordinal <= cursorOrdinal are considered acknowledged.
|
|
34
|
-
*
|
|
35
|
-
* @param cursorOrdinal - The last processed ordinal (exclusive)
|
|
36
|
-
*/
|
|
37
|
-
updateCursor(cursorOrdinal: number): Promise<void>;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=polling-channel.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"polling-channel.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/polling-channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,aAAa,CAAC;AAG9D;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,UAAU,CAAU;gBAG1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,kBAAkB;IAYnC,QAAQ,IAAI,IAAI;IAIV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAE3B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAgBrC;;;;;OAKG;IACG,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBzD"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { PollingChannelError } from "../errors.js";
|
|
2
|
-
import { Mailbox } from "../mailbox.js";
|
|
3
|
-
import { envelopesToSyncOperations } from "./utils.js";
|
|
4
|
-
/**
|
|
5
|
-
* Channel for cursor-based polling by external clients.
|
|
6
|
-
*
|
|
7
|
-
* PollingChannel does NOT auto-remove operations from the outbox.
|
|
8
|
-
* Operations remain until explicitly acknowledged via cursor
|
|
9
|
-
* advancement through updateCursor().
|
|
10
|
-
*/
|
|
11
|
-
export class PollingChannel {
|
|
12
|
-
inbox;
|
|
13
|
-
outbox;
|
|
14
|
-
deadLetter;
|
|
15
|
-
channelId;
|
|
16
|
-
remoteName;
|
|
17
|
-
cursorStorage;
|
|
18
|
-
isShutdown;
|
|
19
|
-
constructor(channelId, remoteName, cursorStorage) {
|
|
20
|
-
this.channelId = channelId;
|
|
21
|
-
this.remoteName = remoteName;
|
|
22
|
-
this.cursorStorage = cursorStorage;
|
|
23
|
-
this.isShutdown = false;
|
|
24
|
-
this.inbox = new Mailbox();
|
|
25
|
-
this.outbox = new Mailbox();
|
|
26
|
-
this.deadLetter = new Mailbox();
|
|
27
|
-
}
|
|
28
|
-
shutdown() {
|
|
29
|
-
this.isShutdown = true;
|
|
30
|
-
}
|
|
31
|
-
async init() { }
|
|
32
|
-
/**
|
|
33
|
-
* Receives a sync envelope from a peer channel.
|
|
34
|
-
*
|
|
35
|
-
* @param envelope - The sync envelope to receive
|
|
36
|
-
* @throws {PollingChannelError} If channel is shutdown
|
|
37
|
-
*/
|
|
38
|
-
receive(envelope) {
|
|
39
|
-
if (this.isShutdown) {
|
|
40
|
-
throw new PollingChannelError(`Channel ${this.channelId} is shutdown and cannot receive envelopes`);
|
|
41
|
-
}
|
|
42
|
-
if (envelope.type === "operations" && envelope.operations) {
|
|
43
|
-
const syncOps = envelopesToSyncOperations(envelope, this.remoteName);
|
|
44
|
-
for (const syncOp of syncOps) {
|
|
45
|
-
syncOp.transported();
|
|
46
|
-
this.inbox.add(syncOp);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Advances the cursor and removes acknowledged operations from outbox.
|
|
52
|
-
* Operations with ordinal <= cursorOrdinal are considered acknowledged.
|
|
53
|
-
*
|
|
54
|
-
* @param cursorOrdinal - The last processed ordinal (exclusive)
|
|
55
|
-
*/
|
|
56
|
-
async updateCursor(cursorOrdinal) {
|
|
57
|
-
const cursor = {
|
|
58
|
-
remoteName: this.remoteName,
|
|
59
|
-
cursorOrdinal,
|
|
60
|
-
lastSyncedAtUtcMs: Date.now(),
|
|
61
|
-
};
|
|
62
|
-
await this.cursorStorage.upsert(cursor);
|
|
63
|
-
for (const op of this.outbox.items) {
|
|
64
|
-
const maxOrdinal = Math.max(...op.operations.map((o) => o.context.ordinal));
|
|
65
|
-
if (maxOrdinal <= cursorOrdinal) {
|
|
66
|
-
op.executed();
|
|
67
|
-
this.outbox.remove(op);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=polling-channel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"polling-channel.js","sourceRoot":"","sources":["../../../../src/sync/channels/polling-channel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IAChB,KAAK,CAAyB;IAC9B,MAAM,CAAyB;IAC/B,UAAU,CAAyB;IAE3B,SAAS,CAAS;IAClB,UAAU,CAAS;IACnB,aAAa,CAAqB;IAC3C,UAAU,CAAU;IAE5B,YACE,SAAiB,EACjB,UAAkB,EAClB,aAAiC;QAEjC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,EAAiB,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,EAAiB,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,OAAO,EAAiB,CAAC;IACjD,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,KAAmB,CAAC;IAE9B;;;;;OAKG;IACH,OAAO,CAAC,QAAsB;QAC5B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,mBAAmB,CAC3B,WAAW,IAAI,CAAC,SAAS,2CAA2C,CACrE,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACrE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,aAAqB;QACtC,MAAM,MAAM,GAAiB;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa;YACb,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE;SAC9B,CAAC;QAEF,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAExC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAC/C,CAAC;YACF,IAAI,UAAU,IAAI,aAAa,EAAE,CAAC;gBAChC,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { SyncOperation } from "../sync-operation.js";
|
|
2
|
-
import { batchOperationsByDocument } from "../utils.js";
|
|
3
|
-
let syncOpCounter = 0;
|
|
4
|
-
/**
|
|
5
|
-
* Deserializes a signature from a comma-separated string back to a tuple.
|
|
6
|
-
*
|
|
7
|
-
* GraphQL serializes Signature tuples as comma-separated strings for transport.
|
|
8
|
-
* This function converts them back to the expected [string, string, string, string, string] format.
|
|
9
|
-
*/
|
|
10
|
-
function deserializeSignature(sig) {
|
|
11
|
-
if (Array.isArray(sig)) {
|
|
12
|
-
return sig;
|
|
13
|
-
}
|
|
14
|
-
return sig.split(", ");
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Deserializes signatures in an operation's signer context from strings back to tuples.
|
|
18
|
-
*
|
|
19
|
-
* When operations are transported via GraphQL, signatures are serialized as comma-separated
|
|
20
|
-
* strings. This function restores them to the Signature tuple format required for verification.
|
|
21
|
-
*/
|
|
22
|
-
function deserializeOperationSignatures(opWithContext) {
|
|
23
|
-
const signer = opWithContext.operation.action.context?.signer;
|
|
24
|
-
if (!signer?.signatures || signer.signatures.length === 0) {
|
|
25
|
-
return opWithContext;
|
|
26
|
-
}
|
|
27
|
-
const deserializedSignatures = signer.signatures.map(deserializeSignature);
|
|
28
|
-
const deserializedOperation = {
|
|
29
|
-
...opWithContext.operation,
|
|
30
|
-
action: {
|
|
31
|
-
...opWithContext.operation.action,
|
|
32
|
-
context: {
|
|
33
|
-
...opWithContext.operation.action.context,
|
|
34
|
-
signer: {
|
|
35
|
-
...signer,
|
|
36
|
-
signatures: deserializedSignatures,
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
};
|
|
41
|
-
return {
|
|
42
|
-
...opWithContext,
|
|
43
|
-
operation: deserializedOperation,
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Converts a SyncEnvelope containing operations into a SyncOperation.
|
|
48
|
-
*
|
|
49
|
-
* Extracts the necessary metadata from the envelope's operations to create
|
|
50
|
-
* a sync operation that can be processed by the receiving channel. Also
|
|
51
|
-
* deserializes any signatures from comma-separated strings back to tuples,
|
|
52
|
-
* as GraphQL transport serializes Signature tuples for compatibility.
|
|
53
|
-
*
|
|
54
|
-
* @param envelope - The sync envelope containing operations
|
|
55
|
-
* @param remoteName - The name of the remote this sync operation is associated with
|
|
56
|
-
* @returns A new SyncOperation containing the envelope's operations with deserialized signatures
|
|
57
|
-
* @throws Error if envelope has no operations or operations array is empty
|
|
58
|
-
*/
|
|
59
|
-
export function envelopeToSyncOperation(envelope, remoteName) {
|
|
60
|
-
if (!envelope.operations || envelope.operations.length === 0) {
|
|
61
|
-
throw new Error("Cannot create SyncOperation from envelope without operations");
|
|
62
|
-
}
|
|
63
|
-
const deserializedOperations = envelope.operations.map(deserializeOperationSignatures);
|
|
64
|
-
const firstOp = deserializedOperations[0];
|
|
65
|
-
const documentId = firstOp.context.documentId;
|
|
66
|
-
const branch = firstOp.context.branch;
|
|
67
|
-
const scopes = [
|
|
68
|
-
...new Set(deserializedOperations.map((op) => op.context.scope)),
|
|
69
|
-
];
|
|
70
|
-
const syncOpId = `syncop-${envelope.channelMeta.id}-${Date.now()}-${syncOpCounter++}`;
|
|
71
|
-
return new SyncOperation(syncOpId, remoteName, documentId, scopes, branch, deserializedOperations);
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Converts a SyncEnvelope containing operations into multiple SyncOperations.
|
|
75
|
-
*
|
|
76
|
-
* This function batches operations by documentId, preserving cross-document ordering.
|
|
77
|
-
* For operations [a1, a2, a3, b1, b2, a4], it returns:
|
|
78
|
-
* - SyncOperation 1: [a1, a2, a3] for doc-a
|
|
79
|
-
* - SyncOperation 2: [b1, b2] for doc-b
|
|
80
|
-
* - SyncOperation 3: [a4] for doc-a
|
|
81
|
-
*
|
|
82
|
-
* This ensures operations are grouped for efficient processing while maintaining
|
|
83
|
-
* causality across documents.
|
|
84
|
-
*/
|
|
85
|
-
export function envelopesToSyncOperations(envelope, remoteName) {
|
|
86
|
-
if (!envelope.operations || envelope.operations.length === 0) {
|
|
87
|
-
return [];
|
|
88
|
-
}
|
|
89
|
-
const deserializedOps = envelope.operations.map(deserializeOperationSignatures);
|
|
90
|
-
const batches = batchOperationsByDocument(deserializedOps);
|
|
91
|
-
return batches.map((batch) => {
|
|
92
|
-
const syncOpId = `syncop-${envelope.channelMeta.id}-${Date.now()}-${syncOpCounter++}`;
|
|
93
|
-
return new SyncOperation(syncOpId, remoteName, batch.documentId, [batch.scope], batch.branch, batch.operations);
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/sync/channels/utils.ts"],"names":[],"mappings":"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"}
|