hikoutei 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.ja.md +135 -0
- package/README.ko.md +138 -0
- package/README.md +143 -0
- package/apps-script/gateway/Code.gs +412 -0
- package/dist/adapter/persistence/contracts/index.d.ts +3 -0
- package/dist/adapter/persistence/contracts/index.d.ts.map +1 -0
- package/dist/adapter/persistence/contracts/index.js +3 -0
- package/dist/adapter/persistence/contracts/index.js.map +1 -0
- package/dist/adapter/persistence/contracts/sql.d.ts +50 -0
- package/dist/adapter/persistence/contracts/sql.d.ts.map +1 -0
- package/dist/adapter/persistence/contracts/sql.js +9 -0
- package/dist/adapter/persistence/contracts/sql.js.map +1 -0
- package/dist/adapter/persistence/index.d.ts +2 -0
- package/dist/adapter/persistence/index.d.ts.map +1 -0
- package/dist/adapter/persistence/index.js +2 -0
- package/dist/adapter/persistence/index.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts +53 -0
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js +105 -0
- package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts +39 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js +54 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.d.ts +38 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js +55 -0
- package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/index.d.ts +16 -0
- package/dist/adapter/persistence/providers/mikro-orm/index.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/index.js +9 -0
- package/dist/adapter/persistence/providers/mikro-orm/index.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts +27 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +67 -0
- package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.d.ts +19 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.js +67 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts +78 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js +121 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.d.ts +20 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.d.ts.map +1 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.js +125 -0
- package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts +42 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.js +51 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/errors.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts +22 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/index.js +12 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/index.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts +42 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +161 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts +3 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +692 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts +29 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +538 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts +12 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js +190 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +23 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +166 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts +50 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js +60 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts +44 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js +40 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts +7 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js +47 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts +5 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js +54 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts +5 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js +2 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts +10 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js +35 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts +67 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +204 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts +78 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +343 -0
- package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +1 -0
- package/dist/application/index.d.ts +4 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +4 -0
- package/dist/application/index.js.map +1 -0
- package/dist/application/orm/api/TypedSheetsOrm.d.ts +71 -0
- package/dist/application/orm/api/TypedSheetsOrm.d.ts.map +1 -0
- package/dist/application/orm/api/TypedSheetsOrm.js +116 -0
- package/dist/application/orm/api/TypedSheetsOrm.js.map +1 -0
- package/dist/application/orm/api/contracts.d.ts +118 -0
- package/dist/application/orm/api/contracts.d.ts.map +1 -0
- package/dist/application/orm/api/contracts.js +21 -0
- package/dist/application/orm/api/contracts.js.map +1 -0
- package/dist/application/orm/errors.d.ts +35 -0
- package/dist/application/orm/errors.d.ts.map +1 -0
- package/dist/application/orm/errors.js +35 -0
- package/dist/application/orm/errors.js.map +1 -0
- package/dist/application/orm/index.d.ts +13 -0
- package/dist/application/orm/index.d.ts.map +1 -0
- package/dist/application/orm/index.js +7 -0
- package/dist/application/orm/index.js.map +1 -0
- package/dist/application/orm/mapping/contracts.d.ts +113 -0
- package/dist/application/orm/mapping/contracts.d.ts.map +1 -0
- package/dist/application/orm/mapping/contracts.js +8 -0
- package/dist/application/orm/mapping/contracts.js.map +1 -0
- package/dist/application/orm/mapping/definition.d.ts +16 -0
- package/dist/application/orm/mapping/definition.d.ts.map +1 -0
- package/dist/application/orm/mapping/definition.js +145 -0
- package/dist/application/orm/mapping/definition.js.map +1 -0
- package/dist/application/orm/mapping/entityMapping.d.ts +13 -0
- package/dist/application/orm/mapping/entityMapping.d.ts.map +1 -0
- package/dist/application/orm/mapping/entityMapping.js +13 -0
- package/dist/application/orm/mapping/entityMapping.js.map +1 -0
- package/dist/application/orm/mapping/identity.d.ts +14 -0
- package/dist/application/orm/mapping/identity.d.ts.map +1 -0
- package/dist/application/orm/mapping/identity.js +37 -0
- package/dist/application/orm/mapping/identity.js.map +1 -0
- package/dist/application/orm/mapping/observationMapping.d.ts +42 -0
- package/dist/application/orm/mapping/observationMapping.d.ts.map +1 -0
- package/dist/application/orm/mapping/observationMapping.js +65 -0
- package/dist/application/orm/mapping/observationMapping.js.map +1 -0
- package/dist/application/orm/mapping/projection.d.ts +22 -0
- package/dist/application/orm/mapping/projection.d.ts.map +1 -0
- package/dist/application/orm/mapping/projection.js +74 -0
- package/dist/application/orm/mapping/projection.js.map +1 -0
- package/dist/application/orm/mapping/registry.d.ts +15 -0
- package/dist/application/orm/mapping/registry.d.ts.map +1 -0
- package/dist/application/orm/mapping/registry.js +38 -0
- package/dist/application/orm/mapping/registry.js.map +1 -0
- package/dist/application/orm/mapping/values.d.ts +17 -0
- package/dist/application/orm/mapping/values.d.ts.map +1 -0
- package/dist/application/orm/mapping/values.js +141 -0
- package/dist/application/orm/mapping/values.js.map +1 -0
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts +28 -0
- package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -0
- package/dist/application/orm/persistence/flush/flushCoordinator.js +170 -0
- package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -0
- package/dist/application/orm/persistence/flush/mappedFlushCoordinator.d.ts +9 -0
- package/dist/application/orm/persistence/flush/mappedFlushCoordinator.d.ts.map +1 -0
- package/dist/application/orm/persistence/flush/mappedFlushCoordinator.js +8 -0
- package/dist/application/orm/persistence/flush/mappedFlushCoordinator.js.map +1 -0
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.d.ts +12 -0
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.d.ts.map +1 -0
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.js +134 -0
- package/dist/application/orm/persistence/lifecycle/entityLifecycle.js.map +1 -0
- package/dist/application/orm/persistence/projection/projectionEffects.d.ts +21 -0
- package/dist/application/orm/persistence/projection/projectionEffects.d.ts.map +1 -0
- package/dist/application/orm/persistence/projection/projectionEffects.js +203 -0
- package/dist/application/orm/persistence/projection/projectionEffects.js.map +1 -0
- package/dist/application/orm/persistence/support/businessKeys.d.ts +17 -0
- package/dist/application/orm/persistence/support/businessKeys.d.ts.map +1 -0
- package/dist/application/orm/persistence/support/businessKeys.js +72 -0
- package/dist/application/orm/persistence/support/businessKeys.js.map +1 -0
- package/dist/application/orm/persistence/support/canonicalState.d.ts +22 -0
- package/dist/application/orm/persistence/support/canonicalState.d.ts.map +1 -0
- package/dist/application/orm/persistence/support/canonicalState.js +88 -0
- package/dist/application/orm/persistence/support/canonicalState.js.map +1 -0
- package/dist/application/orm/persistence/support/contracts.d.ts +139 -0
- package/dist/application/orm/persistence/support/contracts.d.ts.map +1 -0
- package/dist/application/orm/persistence/support/contracts.js +93 -0
- package/dist/application/orm/persistence/support/contracts.js.map +1 -0
- package/dist/application/orm/persistence/support/helpers.d.ts +32 -0
- package/dist/application/orm/persistence/support/helpers.d.ts.map +1 -0
- package/dist/application/orm/persistence/support/helpers.js +66 -0
- package/dist/application/orm/persistence/support/helpers.js.map +1 -0
- package/dist/application/orm/persistence/support/timing.d.ts +20 -0
- package/dist/application/orm/persistence/support/timing.d.ts.map +1 -0
- package/dist/application/orm/persistence/support/timing.js +55 -0
- package/dist/application/orm/persistence/support/timing.js.map +1 -0
- package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts +46 -0
- package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts.map +1 -0
- package/dist/application/sync/gateway/SyncGatewayBootstrap.js +93 -0
- package/dist/application/sync/gateway/SyncGatewayBootstrap.js.map +1 -0
- package/dist/application/sync/gateway/constants.d.ts +65 -0
- package/dist/application/sync/gateway/constants.d.ts.map +1 -0
- package/dist/application/sync/gateway/constants.js +57 -0
- package/dist/application/sync/gateway/constants.js.map +1 -0
- package/dist/application/sync/gateway/errors.d.ts +15 -0
- package/dist/application/sync/gateway/errors.d.ts.map +1 -0
- package/dist/application/sync/gateway/errors.js +16 -0
- package/dist/application/sync/gateway/errors.js.map +1 -0
- package/dist/application/sync/gateway/syncGateway.d.ts +313 -0
- package/dist/application/sync/gateway/syncGateway.d.ts.map +1 -0
- package/dist/application/sync/gateway/syncGateway.js +202 -0
- package/dist/application/sync/gateway/syncGateway.js.map +1 -0
- package/dist/application/sync/gateway/validation.d.ts +17 -0
- package/dist/application/sync/gateway/validation.d.ts.map +1 -0
- package/dist/application/sync/gateway/validation.js +60 -0
- package/dist/application/sync/gateway/validation.js.map +1 -0
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts +72 -0
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts.map +1 -0
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.js +272 -0
- package/dist/application/sync/inbound/polling/SimpleSheetPolling.js.map +1 -0
- package/dist/application/sync/index.d.ts +16 -0
- package/dist/application/sync/index.d.ts.map +1 -0
- package/dist/application/sync/index.js +9 -0
- package/dist/application/sync/index.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +106 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +297 -0
- package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +100 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js +345 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +46 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +63 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +20 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +102 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts +19 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js +32 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +30 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +202 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts +17 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js +80 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts +13 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +205 -0
- package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -0
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts +81 -0
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts.map +1 -0
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js +245 -0
- package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js.map +1 -0
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts +77 -0
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -0
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +518 -0
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -0
- package/dist/application/sync/telemetry/syncTiming.d.ts +50 -0
- package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -0
- package/dist/application/sync/telemetry/syncTiming.js +22 -0
- package/dist/application/sync/telemetry/syncTiming.js.map +1 -0
- package/dist/domain/conflict/errors.d.ts +42 -0
- package/dist/domain/conflict/errors.d.ts.map +1 -0
- package/dist/domain/conflict/errors.js +36 -0
- package/dist/domain/conflict/errors.js.map +1 -0
- package/dist/domain/conflict/index.d.ts +5 -0
- package/dist/domain/conflict/index.d.ts.map +1 -0
- package/dist/domain/conflict/index.js +3 -0
- package/dist/domain/conflict/index.js.map +1 -0
- package/dist/domain/conflict/transitions.d.ts +52 -0
- package/dist/domain/conflict/transitions.d.ts.map +1 -0
- package/dist/domain/conflict/transitions.js +115 -0
- package/dist/domain/conflict/transitions.js.map +1 -0
- package/dist/domain/errors/evaluation.d.ts +13 -0
- package/dist/domain/errors/evaluation.d.ts.map +1 -0
- package/dist/domain/errors/evaluation.js +14 -0
- package/dist/domain/errors/evaluation.js.map +1 -0
- package/dist/domain/errors/identity.d.ts +12 -0
- package/dist/domain/errors/identity.d.ts.map +1 -0
- package/dist/domain/errors/identity.js +15 -0
- package/dist/domain/errors/identity.js.map +1 -0
- package/dist/domain/errors/index.d.ts +7 -0
- package/dist/domain/errors/index.d.ts.map +1 -0
- package/dist/domain/errors/index.js +5 -0
- package/dist/domain/errors/index.js.map +1 -0
- package/dist/domain/errors/stableEncoding.d.ts +7 -0
- package/dist/domain/errors/stableEncoding.d.ts.map +1 -0
- package/dist/domain/errors/stableEncoding.js +8 -0
- package/dist/domain/errors/stableEncoding.js.map +1 -0
- package/dist/domain/errors/types.d.ts +20 -0
- package/dist/domain/errors/types.d.ts.map +1 -0
- package/dist/domain/errors/types.js +18 -0
- package/dist/domain/errors/types.js.map +1 -0
- package/dist/domain/evaluate/constants.d.ts +55 -0
- package/dist/domain/evaluate/constants.d.ts.map +1 -0
- package/dist/domain/evaluate/constants.js +41 -0
- package/dist/domain/evaluate/constants.js.map +1 -0
- package/dist/domain/evaluate/contracts.d.ts +125 -0
- package/dist/domain/evaluate/contracts.d.ts.map +1 -0
- package/dist/domain/evaluate/contracts.js +8 -0
- package/dist/domain/evaluate/contracts.js.map +1 -0
- package/dist/domain/evaluate/evaluateBatch.d.ts +11 -0
- package/dist/domain/evaluate/evaluateBatch.d.ts.map +1 -0
- package/dist/domain/evaluate/evaluateBatch.js +91 -0
- package/dist/domain/evaluate/evaluateBatch.js.map +1 -0
- package/dist/domain/evaluate/fieldEvaluation.d.ts +14 -0
- package/dist/domain/evaluate/fieldEvaluation.d.ts.map +1 -0
- package/dist/domain/evaluate/fieldEvaluation.js +133 -0
- package/dist/domain/evaluate/fieldEvaluation.js.map +1 -0
- package/dist/domain/evaluate/identity.d.ts +21 -0
- package/dist/domain/evaluate/identity.d.ts.map +1 -0
- package/dist/domain/evaluate/identity.js +72 -0
- package/dist/domain/evaluate/identity.js.map +1 -0
- package/dist/domain/evaluate/index.d.ts +4 -0
- package/dist/domain/evaluate/index.d.ts.map +1 -0
- package/dist/domain/evaluate/index.js +3 -0
- package/dist/domain/evaluate/index.js.map +1 -0
- package/dist/domain/evaluate/preconditions.d.ts +30 -0
- package/dist/domain/evaluate/preconditions.d.ts.map +1 -0
- package/dist/domain/evaluate/preconditions.js +389 -0
- package/dist/domain/evaluate/preconditions.js.map +1 -0
- package/dist/domain/evaluate/quarantine.d.ts +15 -0
- package/dist/domain/evaluate/quarantine.d.ts.map +1 -0
- package/dist/domain/evaluate/quarantine.js +185 -0
- package/dist/domain/evaluate/quarantine.js.map +1 -0
- package/dist/domain/index.d.ts +7 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +7 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/model/constants.d.ts +73 -0
- package/dist/domain/model/constants.d.ts.map +1 -0
- package/dist/domain/model/constants.js +59 -0
- package/dist/domain/model/constants.js.map +1 -0
- package/dist/domain/model/index.d.ts +3 -0
- package/dist/domain/model/index.d.ts.map +1 -0
- package/dist/domain/model/index.js +2 -0
- package/dist/domain/model/index.js.map +1 -0
- package/dist/domain/model/types.d.ts +330 -0
- package/dist/domain/model/types.d.ts.map +1 -0
- package/dist/domain/model/types.js +8 -0
- package/dist/domain/model/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +3 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +3 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/storage/constants.d.ts +4 -0
- package/dist/infrastructure/storage/constants.d.ts.map +1 -0
- package/dist/infrastructure/storage/constants.js +4 -0
- package/dist/infrastructure/storage/constants.js.map +1 -0
- package/dist/infrastructure/storage/errors.d.ts +55 -0
- package/dist/infrastructure/storage/errors.d.ts.map +1 -0
- package/dist/infrastructure/storage/errors.js +58 -0
- package/dist/infrastructure/storage/errors.js.map +1 -0
- package/dist/infrastructure/storage/index.d.ts +23 -0
- package/dist/infrastructure/storage/index.d.ts.map +1 -0
- package/dist/infrastructure/storage/index.js +13 -0
- package/dist/infrastructure/storage/index.js.map +1 -0
- package/dist/infrastructure/storage/recovery/restoreRecovery.d.ts +64 -0
- package/dist/infrastructure/storage/recovery/restoreRecovery.d.ts.map +1 -0
- package/dist/infrastructure/storage/recovery/restoreRecovery.js +148 -0
- package/dist/infrastructure/storage/recovery/restoreRecovery.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/schema.d.ts +49 -0
- package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/schema.js +529 -0
- package/dist/infrastructure/storage/sqlite/schema.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts +5 -0
- package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/schemaTypes.js +2 -0
- package/dist/infrastructure/storage/sqlite/schemaTypes.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlScript.d.ts +9 -0
- package/dist/infrastructure/storage/sqlite/sqlScript.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlScript.js +122 -0
- package/dist/infrastructure/storage/sqlite/sqlScript.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlState.d.ts +6 -0
- package/dist/infrastructure/storage/sqlite/sqlState.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlState.js +14 -0
- package/dist/infrastructure/storage/sqlite/sqlState.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlTransaction.d.ts +6 -0
- package/dist/infrastructure/storage/sqlite/sqlTransaction.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqlTransaction.js +24 -0
- package/dist/infrastructure/storage/sqlite/sqlTransaction.js.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqliteBridge.d.ts +44 -0
- package/dist/infrastructure/storage/sqlite/sqliteBridge.d.ts.map +1 -0
- package/dist/infrastructure/storage/sqlite/sqliteBridge.js +66 -0
- package/dist/infrastructure/storage/sqlite/sqliteBridge.js.map +1 -0
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts +101 -0
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +417 -0
- package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationAudit.d.ts +16 -0
- package/dist/infrastructure/storage/state/observation/observationAudit.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationAudit.js +85 -0
- package/dist/infrastructure/storage/state/observation/observationAudit.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts +31 -0
- package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationCanonical.js +439 -0
- package/dist/infrastructure/storage/state/observation/observationCanonical.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationConstants.d.ts +53 -0
- package/dist/infrastructure/storage/state/observation/observationConstants.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationConstants.js +41 -0
- package/dist/infrastructure/storage/state/observation/observationConstants.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationLedger.d.ts +49 -0
- package/dist/infrastructure/storage/state/observation/observationLedger.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationLedger.js +537 -0
- package/dist/infrastructure/storage/state/observation/observationLedger.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts +15 -0
- package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationQuarantine.js +100 -0
- package/dist/infrastructure/storage/state/observation/observationQuarantine.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts +124 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.js +13 -0
- package/dist/infrastructure/storage/state/observation/observationTypes.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationValidation.d.ts +28 -0
- package/dist/infrastructure/storage/state/observation/observationValidation.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationValidation.js +223 -0
- package/dist/infrastructure/storage/state/observation/observationValidation.js.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationWriter.d.ts +28 -0
- package/dist/infrastructure/storage/state/observation/observationWriter.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/observation/observationWriter.js +293 -0
- package/dist/infrastructure/storage/state/observation/observationWriter.js.map +1 -0
- package/dist/infrastructure/storage/state/readonly/readOnlyObservation.d.ts +58 -0
- package/dist/infrastructure/storage/state/readonly/readOnlyObservation.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/readonly/readOnlyObservation.js +195 -0
- package/dist/infrastructure/storage/state/readonly/readOnlyObservation.js.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts +31 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +563 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts +118 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js +18 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts +23 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js +84 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +16 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +97 -0
- package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +137 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +396 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +101 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +9 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +21 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +184 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +25 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +158 -0
- package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +1 -0
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts +69 -0
- package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js +272 -0
- package/dist/infrastructure/storage/sync/shared/syncRegistry.js.map +1 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.d.ts +90 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.d.ts.map +1 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.js +282 -0
- package/dist/infrastructure/storage/sync/shared/writerLease.js.map +1 -0
- package/dist/shared/constants.d.ts +8 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +8 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/encoding/constants.d.ts +45 -0
- package/dist/shared/encoding/constants.d.ts.map +1 -0
- package/dist/shared/encoding/constants.js +37 -0
- package/dist/shared/encoding/constants.js.map +1 -0
- package/dist/shared/encoding/index.d.ts +6 -0
- package/dist/shared/encoding/index.d.ts.map +1 -0
- package/dist/shared/encoding/index.js +4 -0
- package/dist/shared/encoding/index.js.map +1 -0
- package/dist/shared/encoding/stableEncode.d.ts +34 -0
- package/dist/shared/encoding/stableEncode.d.ts.map +1 -0
- package/dist/shared/encoding/stableEncode.js +210 -0
- package/dist/shared/encoding/stableEncode.js.map +1 -0
- package/dist/shared/encoding/typeGuards.d.ts +15 -0
- package/dist/shared/encoding/typeGuards.d.ts.map +1 -0
- package/dist/shared/encoding/typeGuards.js +11 -0
- package/dist/shared/encoding/typeGuards.js.map +1 -0
- package/dist/shared/encoding/types.d.ts +52 -0
- package/dist/shared/encoding/types.d.ts.map +1 -0
- package/dist/shared/encoding/types.js +8 -0
- package/dist/shared/encoding/types.js.map +1 -0
- package/dist/shared/index.d.ts +6 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +6 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/state/constants.d.ts +16 -0
- package/dist/shared/state/constants.d.ts.map +1 -0
- package/dist/shared/state/constants.js +16 -0
- package/dist/shared/state/constants.js.map +1 -0
- package/dist/shared/state/index.d.ts +3 -0
- package/dist/shared/state/index.d.ts.map +1 -0
- package/dist/shared/state/index.js +2 -0
- package/dist/shared/state/index.js.map +1 -0
- package/dist/shared/state/types.d.ts +23 -0
- package/dist/shared/state/types.d.ts.map +1 -0
- package/dist/shared/state/types.js +2 -0
- package/dist/shared/state/types.js.map +1 -0
- package/dist/shared/validation.d.ts +9 -0
- package/dist/shared/validation.d.ts.map +1 -0
- package/dist/shared/validation.js +25 -0
- package/dist/shared/validation.js.map +1 -0
- package/docs/architecture.md +72 -0
- package/docs/code-guidelines.md +256 -0
- package/docs/development.md +48 -0
- package/docs/git-workflow.md +224 -0
- package/docs/mikro-orm-adapter-spike.md +248 -0
- package/docs/quick-start.md +102 -0
- package/docs/sql-layer-plan.md +59 -0
- package/docs/sync-bulk-write-benchmark.md +1036 -0
- package/docs/sync-observability.md +71 -0
- package/docs/task-queue-write-model.md +640 -0
- package/docs/typed-sheets-mvp-scope-2026-06-29.md +490 -0
- package/docs/typed-sheets-plan.md +417 -0
- package/docs/write-and-synchronization-flow.md +71 -0
- package/package.json +68 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/** SQL statements used by the effect outbox state machine. */
|
|
2
|
+
import { SYNC_EFFECT_RECOVERY_ERROR_CODES } from "./effectOutboxContracts.js";
|
|
3
|
+
export const RECOVERABLE_EFFECT_ERROR_CODE_SQL = [
|
|
4
|
+
SYNC_EFFECT_RECOVERY_ERROR_CODES.LEASE_EXPIRED_REQUIRES_POSTCONDITION,
|
|
5
|
+
SYNC_EFFECT_RECOVERY_ERROR_CODES.GATEWAY_RETRYABLE_ERROR,
|
|
6
|
+
SYNC_EFFECT_RECOVERY_ERROR_CODES.POSTCONDITION_READ_FAILED,
|
|
7
|
+
SYNC_EFFECT_RECOVERY_ERROR_CODES.POSTCONDITION_UNAVAILABLE,
|
|
8
|
+
SYNC_EFFECT_RECOVERY_ERROR_CODES.POSTCONDITION_UNAPPLIED_REQUIRES_REDRIVE,
|
|
9
|
+
].map((code) => `'${code}'`)
|
|
10
|
+
.join(", ");
|
|
11
|
+
export const FENCE_EXISTS_SQL = `
|
|
12
|
+
SELECT 1 FROM writer_lease
|
|
13
|
+
WHERE role = ? AND writer_epoch = ? AND fencing_token = ? AND lease_until > ?
|
|
14
|
+
`;
|
|
15
|
+
export const CLAIM_EFFECT_SQL = `
|
|
16
|
+
UPDATE sheet_effect_outbox AS candidate
|
|
17
|
+
SET status = 'processing', claim_token = ?, writer_epoch = ?, lease_until = ?,
|
|
18
|
+
attempts = attempts + 1
|
|
19
|
+
WHERE candidate.effect_id = ?
|
|
20
|
+
AND candidate.status IN ('pending', 'failed')
|
|
21
|
+
AND EXISTS (${FENCE_EXISTS_SQL})
|
|
22
|
+
AND NOT EXISTS (
|
|
23
|
+
SELECT 1
|
|
24
|
+
FROM sheet_effect_outbox AS predecessor
|
|
25
|
+
WHERE predecessor.logical_sheet_id = candidate.logical_sheet_id
|
|
26
|
+
AND predecessor.target_kind = candidate.target_kind
|
|
27
|
+
AND predecessor.target_id = candidate.target_id
|
|
28
|
+
AND predecessor.stream_sequence < candidate.stream_sequence
|
|
29
|
+
AND predecessor.status NOT IN ('applied', 'superseded')
|
|
30
|
+
)
|
|
31
|
+
`;
|
|
32
|
+
export const INSERT_PENDING_EFFECT_SQL = `
|
|
33
|
+
INSERT INTO sheet_effect_outbox (
|
|
34
|
+
effect_id, effect_kind, commit_id, logical_sheet_id, physical_sheet_id,
|
|
35
|
+
projection, row_binding_id, conflict_id, target_kind, target_id,
|
|
36
|
+
target_entity_revision, target_field_revision_hash, target_canonical_commit_id,
|
|
37
|
+
expected_visible_revision, expected_visible_hash, repair_guard_hash,
|
|
38
|
+
source_quarantine_id, payload_json, payload_hash, effect_dedupe_key,
|
|
39
|
+
stream_sequence, created_at, status
|
|
40
|
+
)
|
|
41
|
+
SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending'
|
|
42
|
+
WHERE EXISTS (${FENCE_EXISTS_SQL})
|
|
43
|
+
`;
|
|
44
|
+
export const APPLY_EFFECT_RESULT_SQL = `
|
|
45
|
+
UPDATE sheet_effect_outbox
|
|
46
|
+
SET status = ?, last_error_code = ?, last_error_message = ?,
|
|
47
|
+
claim_token = NULL, lease_until = NULL
|
|
48
|
+
WHERE effect_id = ?
|
|
49
|
+
AND status = 'processing'
|
|
50
|
+
AND claim_token = ?
|
|
51
|
+
AND writer_epoch = ?
|
|
52
|
+
AND lease_until IS NOT NULL
|
|
53
|
+
AND lease_until > ?
|
|
54
|
+
AND EXISTS (${FENCE_EXISTS_SQL})
|
|
55
|
+
`;
|
|
56
|
+
export const SUPERSEDE_EFFECT_SQL = `
|
|
57
|
+
UPDATE sheet_effect_outbox
|
|
58
|
+
SET status = 'superseded', supersedes_effect_id = ?
|
|
59
|
+
WHERE effect_id = ?
|
|
60
|
+
AND status IN ('pending', 'processing', 'blocked_candidate', 'conflict', 'failed')
|
|
61
|
+
AND EXISTS (${FENCE_EXISTS_SQL})
|
|
62
|
+
`;
|
|
63
|
+
export const INSERT_REPLANNED_EFFECT_SQL = `
|
|
64
|
+
INSERT INTO sheet_effect_outbox (
|
|
65
|
+
effect_id, effect_kind, commit_id, logical_sheet_id, physical_sheet_id,
|
|
66
|
+
projection, row_binding_id, conflict_id, target_kind, target_id,
|
|
67
|
+
target_entity_revision, target_field_revision_hash, target_canonical_commit_id,
|
|
68
|
+
expected_visible_revision, expected_visible_hash, repair_guard_hash,
|
|
69
|
+
source_quarantine_id, payload_json, payload_hash, effect_dedupe_key,
|
|
70
|
+
stream_sequence, predecessor_effect_id, created_at, status
|
|
71
|
+
)
|
|
72
|
+
SELECT ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending'
|
|
73
|
+
WHERE EXISTS (${FENCE_EXISTS_SQL})
|
|
74
|
+
`;
|
|
75
|
+
export const RECOVER_EXPIRED_LEASES_SQL = `
|
|
76
|
+
UPDATE sheet_effect_outbox
|
|
77
|
+
SET status = 'failed', claim_token = NULL, lease_until = NULL,
|
|
78
|
+
last_error_code = '${SYNC_EFFECT_RECOVERY_ERROR_CODES.LEASE_EXPIRED_REQUIRES_POSTCONDITION}',
|
|
79
|
+
last_error_message = 'Read the remote postcondition before retrying this effect.'
|
|
80
|
+
WHERE status = 'processing' AND lease_until IS NOT NULL AND lease_until <= ?
|
|
81
|
+
AND EXISTS (${FENCE_EXISTS_SQL})
|
|
82
|
+
`;
|
|
83
|
+
export const REQUEUE_CLAIMED_EFFECT_SQL = `
|
|
84
|
+
UPDATE sheet_effect_outbox
|
|
85
|
+
SET status = 'pending', claim_token = NULL, lease_until = NULL,
|
|
86
|
+
last_error_code = ?, last_error_message = ?
|
|
87
|
+
WHERE effect_id = ? AND status = 'processing' AND claim_token = ?
|
|
88
|
+
AND writer_epoch = ? AND lease_until IS NOT NULL AND lease_until > ?
|
|
89
|
+
AND EXISTS (${FENCE_EXISTS_SQL})
|
|
90
|
+
`;
|
|
91
|
+
export const RELEASE_UNPROCESSED_EFFECT_SQL = `
|
|
92
|
+
UPDATE sheet_effect_outbox
|
|
93
|
+
SET status = 'pending', claim_token = NULL, lease_until = NULL,
|
|
94
|
+
last_error_code = 'gateway_batch_deferred',
|
|
95
|
+
last_error_message = 'Gateway acknowledged a bounded batch before this effect.'
|
|
96
|
+
WHERE effect_id = ? AND status = 'processing' AND claim_token = ?
|
|
97
|
+
AND writer_epoch = ? AND lease_until IS NOT NULL AND lease_until > ?
|
|
98
|
+
AND EXISTS (${FENCE_EXISTS_SQL})
|
|
99
|
+
`;
|
|
100
|
+
export const SELECT_PENDING_EFFECTS_BY_TARGET_SQL = `
|
|
101
|
+
SELECT effect_id, effect_kind, commit_id, logical_sheet_id, physical_sheet_id,
|
|
102
|
+
projection, row_binding_id, conflict_id, target_kind, target_id,
|
|
103
|
+
target_entity_revision, target_field_revision_hash, target_canonical_commit_id,
|
|
104
|
+
expected_visible_revision, expected_visible_hash, repair_guard_hash,
|
|
105
|
+
source_quarantine_id, payload_json, payload_hash, effect_dedupe_key,
|
|
106
|
+
stream_sequence, created_at, status
|
|
107
|
+
FROM sheet_effect_outbox
|
|
108
|
+
WHERE logical_sheet_id = ? AND target_kind = ? AND target_id = ?
|
|
109
|
+
AND status = 'pending'
|
|
110
|
+
AND NOT EXISTS (
|
|
111
|
+
SELECT 1
|
|
112
|
+
FROM sheet_effect_outbox AS predecessor
|
|
113
|
+
WHERE predecessor.logical_sheet_id = sheet_effect_outbox.logical_sheet_id
|
|
114
|
+
AND predecessor.target_kind = sheet_effect_outbox.target_kind
|
|
115
|
+
AND predecessor.target_id = sheet_effect_outbox.target_id
|
|
116
|
+
AND predecessor.stream_sequence < sheet_effect_outbox.stream_sequence
|
|
117
|
+
AND predecessor.status NOT IN ('applied', 'superseded')
|
|
118
|
+
)
|
|
119
|
+
ORDER BY stream_sequence
|
|
120
|
+
`;
|
|
121
|
+
export const SELECT_READY_EFFECTS_SQL = `
|
|
122
|
+
SELECT effect_id, effect_kind, commit_id, logical_sheet_id, physical_sheet_id,
|
|
123
|
+
projection, row_binding_id, conflict_id, target_kind, target_id,
|
|
124
|
+
target_entity_revision, target_field_revision_hash, target_canonical_commit_id,
|
|
125
|
+
expected_visible_revision, expected_visible_hash, repair_guard_hash,
|
|
126
|
+
source_quarantine_id, payload_json, payload_hash, effect_dedupe_key,
|
|
127
|
+
stream_sequence, created_at, status
|
|
128
|
+
FROM sheet_effect_outbox AS candidate
|
|
129
|
+
WHERE (
|
|
130
|
+
candidate.status = 'pending'
|
|
131
|
+
OR (
|
|
132
|
+
candidate.status = 'failed'
|
|
133
|
+
AND candidate.last_error_code IN (${RECOVERABLE_EFFECT_ERROR_CODE_SQL})
|
|
134
|
+
)
|
|
135
|
+
)
|
|
136
|
+
AND NOT EXISTS (
|
|
137
|
+
SELECT 1
|
|
138
|
+
FROM sheet_effect_outbox AS predecessor
|
|
139
|
+
WHERE predecessor.logical_sheet_id = candidate.logical_sheet_id
|
|
140
|
+
AND predecessor.target_kind = candidate.target_kind
|
|
141
|
+
AND predecessor.target_id = candidate.target_id
|
|
142
|
+
AND predecessor.stream_sequence < candidate.stream_sequence
|
|
143
|
+
AND predecessor.status NOT IN ('applied', 'superseded')
|
|
144
|
+
)
|
|
145
|
+
ORDER BY candidate.logical_sheet_id, candidate.physical_sheet_id,
|
|
146
|
+
candidate.target_kind, candidate.target_id, candidate.stream_sequence
|
|
147
|
+
LIMIT ?
|
|
148
|
+
`;
|
|
149
|
+
export const COUNT_PENDING_OR_PROCESSING_EFFECTS_SQL = `
|
|
150
|
+
SELECT COUNT(*) AS count
|
|
151
|
+
FROM sheet_effect_outbox
|
|
152
|
+
WHERE status IN ('pending', 'processing')
|
|
153
|
+
`;
|
|
154
|
+
export const UPSERT_VISIBLE_STATE_SQL = `
|
|
155
|
+
INSERT INTO sheet_visible_state (
|
|
156
|
+
physical_sheet_id, projection, row_binding_id, confirmed_snapshot_hash,
|
|
157
|
+
confirmed_visible_revision, confirmed_entity_revision, last_observed_hash
|
|
158
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
159
|
+
ON CONFLICT(physical_sheet_id, projection, row_binding_id)
|
|
160
|
+
DO UPDATE SET
|
|
161
|
+
confirmed_snapshot_hash = excluded.confirmed_snapshot_hash,
|
|
162
|
+
confirmed_visible_revision = excluded.confirmed_visible_revision,
|
|
163
|
+
confirmed_entity_revision = excluded.confirmed_entity_revision,
|
|
164
|
+
last_observed_hash = excluded.last_observed_hash
|
|
165
|
+
WHERE sheet_visible_state.confirmed_visible_revision <= excluded.confirmed_visible_revision
|
|
166
|
+
`;
|
|
167
|
+
export const UPSERT_VISIBLE_FIELD_STATE_SQL = `
|
|
168
|
+
INSERT INTO sheet_visible_field_state (
|
|
169
|
+
physical_sheet_id, projection, row_binding_id, field_name,
|
|
170
|
+
confirmed_field_hash, confirmed_visible_revision, candidate_epoch,
|
|
171
|
+
last_observed_field_hash
|
|
172
|
+
) VALUES (?, ?, ?, ?, ?, ?, 0, ?)
|
|
173
|
+
ON CONFLICT(physical_sheet_id, projection, row_binding_id, field_name)
|
|
174
|
+
DO UPDATE SET
|
|
175
|
+
confirmed_field_hash = excluded.confirmed_field_hash,
|
|
176
|
+
confirmed_visible_revision = excluded.confirmed_visible_revision,
|
|
177
|
+
last_observed_field_hash = excluded.last_observed_field_hash
|
|
178
|
+
WHERE sheet_visible_field_state.confirmed_visible_revision <= excluded.confirmed_visible_revision
|
|
179
|
+
`;
|
|
180
|
+
/**
|
|
181
|
+
* Claims a pending effect for processing.
|
|
182
|
+
* Uses CAS on status to ensure only one worker wins.
|
|
183
|
+
*/
|
|
184
|
+
//# sourceMappingURL=effectOutboxSql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effectOutboxSql.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/sync/outbound/effectOutboxSql.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAE9D,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAE9E,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,gCAAgC,CAAC,oCAAoC;IACrE,gCAAgC,CAAC,uBAAuB;IACxD,gCAAgC,CAAC,yBAAyB;IAC1D,gCAAgC,CAAC,yBAAyB;IAC1D,gCAAgC,CAAC,wCAAwC;CAC1E,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC;KACzB,IAAI,CAAC,IAAI,CAAC,CAAC;AAEd,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;CAG/B,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;kBAMd,gBAAgB;;;;;;;;;;CAUjC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;kBAUvB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;kBAUrB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;kBAKlB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;kBAUzB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;2BAGf,gCAAgC,CAAC,oCAAoC;;;kBAG9E,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;kBAMxB,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;;;;kBAO5B,gBAAgB;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,oCAAoC,GAAG;;;;;;;;;;;;;;;;;;;;CAoBnD,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;0CAYE,iCAAiC;;;;;;;;;;;;;;;CAe1E,CAAC;AAEF,MAAM,CAAC,MAAM,uCAAuC,GAAG;;;;CAItD,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;CAYvC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG;;;;;;;;;;;;CAY7C,CAAC;AAGF;;;GAGG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Validation, projection confirmation, fencing, and SQL parameter helpers. */
|
|
2
|
+
import type { DatabaseSyncLike } from "../../sqlite/sqliteBridge.js";
|
|
3
|
+
import type { FencingContext } from "../shared/writerLease.js";
|
|
4
|
+
import type { ApplyResultOptions, ClaimEffectOptions, EffectProjectionConfirmation, NewEffect } from "./effectOutboxContracts.js";
|
|
5
|
+
import type { SqlExecutor, SqlParameter } from "../../../../adapter/persistence/contracts/sql.js";
|
|
6
|
+
export declare function validateProjectionConfirmation(confirmation: EffectProjectionConfirmation): void;
|
|
7
|
+
export declare function validateApplyResultOptions(options: ApplyResultOptions): void;
|
|
8
|
+
export declare function validateEffectLeaseDuration(leaseDurationMs: number): void;
|
|
9
|
+
export declare function validateReadyEffectLimit(limit: number): void;
|
|
10
|
+
/** Writes row and field confirmation only after the outbox effect has won its claim CAS. */
|
|
11
|
+
export declare function writeProjectionConfirmation(db: DatabaseSyncLike, confirmation: EffectProjectionConfirmation): void;
|
|
12
|
+
/** Writes confirmed row and field state through the active async SQL context. */
|
|
13
|
+
export declare function writeProjectionConfirmationWithSql(sql: SqlExecutor, confirmation: EffectProjectionConfirmation): Promise<void>;
|
|
14
|
+
export declare function requireCurrentFence(db: DatabaseSyncLike, fence: FencingContext): void;
|
|
15
|
+
export declare function requireCurrentFenceWithSql(sql: SqlExecutor, fence: FencingContext): Promise<void>;
|
|
16
|
+
export declare function fenceParameters(fence: FencingContext): readonly [string, number, string, number];
|
|
17
|
+
export declare function claimEffectParameters(options: ClaimEffectOptions): readonly SqlParameter[];
|
|
18
|
+
export declare function applyEffectResultParameters(options: ApplyResultOptions): readonly SqlParameter[];
|
|
19
|
+
export declare function effectInsertParameters(effect: NewEffect): readonly SqlParameter[];
|
|
20
|
+
export declare function pendingEffectParameters(effect: NewEffect, fence: FencingContext): readonly SqlParameter[];
|
|
21
|
+
export declare function replannedEffectParameters(effect: NewEffect, oldEffectId: string, fence: FencingContext): readonly SqlParameter[];
|
|
22
|
+
/** Internal control-flow signal that forces the enclosing async savepoint to roll back. */
|
|
23
|
+
export declare class AsyncFenceLostError extends Error {
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=effectOutboxSupport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effectOutboxSupport.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/sync/outbound/effectOutboxSupport.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAG/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAKrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAM/D,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,SAAS,EACV,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACb,MAAM,kDAAkD,CAAC;AAE1D,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,4BAA4B,GAAG,IAAI,CAsB/F;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAU5E;AAED,wBAAgB,2BAA2B,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAOzE;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAO5D;AAED,4FAA4F;AAC5F,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,gBAAgB,EACpB,YAAY,EAAE,4BAA4B,GACzC,IAAI,CAkCN;AAED,iFAAiF;AACjF,wBAAsB,kCAAkC,CACtD,GAAG,EAAE,WAAW,EAChB,YAAY,EAAE,4BAA4B,GACzC,OAAO,CAAC,IAAI,CAAC,CAkCf;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAOrF;AAED,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAEhG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,YAAY,EAAE,CAQ1F;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,YAAY,EAAE,CAWhG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,YAAY,EAAE,CAwBjF;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,cAAc,GACpB,SAAS,YAAY,EAAE,CAMzB;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,cAAc,GACpB,SAAS,YAAY,EAAE,CAOzB;AAED,2FAA2F;AAC3F,qBAAa,mBAAoB,SAAQ,KAAK;CAAG"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/** Validation, projection confirmation, fencing, and SQL parameter helpers. */
|
|
2
|
+
import { STORAGE_ERROR_CODES, StorageError } from "../../errors.js";
|
|
3
|
+
import { isFencingValid, isFencingValidWithSql, } from "../shared/writerLease.js";
|
|
4
|
+
import { toSqlNullable } from "../../sqlite/sqlState.js";
|
|
5
|
+
import { UPSERT_VISIBLE_FIELD_STATE_SQL, UPSERT_VISIBLE_STATE_SQL, } from "./effectOutboxSql.js";
|
|
6
|
+
export function validateProjectionConfirmation(confirmation) {
|
|
7
|
+
if (confirmation.physicalSheetId.length === 0 ||
|
|
8
|
+
confirmation.projection.length === 0 ||
|
|
9
|
+
confirmation.rowBindingId.length === 0 ||
|
|
10
|
+
confirmation.visibleHash.length === 0 ||
|
|
11
|
+
!Number.isSafeInteger(confirmation.visibleRevision) ||
|
|
12
|
+
confirmation.visibleRevision < 1) {
|
|
13
|
+
throw new StorageError(STORAGE_ERROR_CODES.INVALID_PROJECTION_CONFIRMATION, "projection confirmation has an invalid identity or visible revision");
|
|
14
|
+
}
|
|
15
|
+
for (const [fieldName, hash] of Object.entries(confirmation.fieldHashes)) {
|
|
16
|
+
if (fieldName.length === 0 || hash.length === 0) {
|
|
17
|
+
throw new StorageError(STORAGE_ERROR_CODES.INVALID_PROJECTION_CONFIRMATION, "projection confirmation contains an invalid field hash");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function validateApplyResultOptions(options) {
|
|
22
|
+
if (options.status !== "applied" && options.projectionConfirmation !== undefined) {
|
|
23
|
+
throw new StorageError(STORAGE_ERROR_CODES.INVALID_EFFECT_RESULT, "only an applied effect may advance confirmed projection state");
|
|
24
|
+
}
|
|
25
|
+
if (options.projectionConfirmation !== undefined) {
|
|
26
|
+
validateProjectionConfirmation(options.projectionConfirmation);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function validateEffectLeaseDuration(leaseDurationMs) {
|
|
30
|
+
if (!Number.isSafeInteger(leaseDurationMs) || leaseDurationMs <= 0) {
|
|
31
|
+
throw new StorageError(STORAGE_ERROR_CODES.INVALID_EFFECT_OPTIONS, "effect lease duration must be a positive safe integer");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function validateReadyEffectLimit(limit) {
|
|
35
|
+
if (!Number.isSafeInteger(limit) || limit < 1) {
|
|
36
|
+
throw new StorageError(STORAGE_ERROR_CODES.INVALID_EFFECT_OPTIONS, "ready effect limit must be a positive safe integer");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** Writes row and field confirmation only after the outbox effect has won its claim CAS. */
|
|
40
|
+
export function writeProjectionConfirmation(db, confirmation) {
|
|
41
|
+
const row = db.prepare(UPSERT_VISIBLE_STATE_SQL).run(confirmation.physicalSheetId, confirmation.projection, confirmation.rowBindingId, confirmation.visibleHash, confirmation.visibleRevision, toSqlNullable(confirmation.entityRevision), confirmation.visibleHash);
|
|
42
|
+
if (row.changes !== 1) {
|
|
43
|
+
throw new StorageError(STORAGE_ERROR_CODES.PROJECTION_CONFIRMATION_REGRESSION, "projection confirmation would move visible state backwards");
|
|
44
|
+
}
|
|
45
|
+
for (const [fieldName, hash] of Object.entries(confirmation.fieldHashes)) {
|
|
46
|
+
const field = db.prepare(UPSERT_VISIBLE_FIELD_STATE_SQL).run(confirmation.physicalSheetId, confirmation.projection, confirmation.rowBindingId, fieldName, hash, confirmation.visibleRevision, hash);
|
|
47
|
+
if (field.changes !== 1) {
|
|
48
|
+
throw new StorageError(STORAGE_ERROR_CODES.PROJECTION_CONFIRMATION_REGRESSION, "projection confirmation would move a field visible state backwards");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Writes confirmed row and field state through the active async SQL context. */
|
|
53
|
+
export async function writeProjectionConfirmationWithSql(sql, confirmation) {
|
|
54
|
+
const row = await sql.run(UPSERT_VISIBLE_STATE_SQL, [
|
|
55
|
+
confirmation.physicalSheetId,
|
|
56
|
+
confirmation.projection,
|
|
57
|
+
confirmation.rowBindingId,
|
|
58
|
+
confirmation.visibleHash,
|
|
59
|
+
confirmation.visibleRevision,
|
|
60
|
+
toSqlNullable(confirmation.entityRevision),
|
|
61
|
+
confirmation.visibleHash,
|
|
62
|
+
]);
|
|
63
|
+
if (row.changes !== 1) {
|
|
64
|
+
throw new StorageError(STORAGE_ERROR_CODES.PROJECTION_CONFIRMATION_REGRESSION, "projection confirmation would move visible state backwards");
|
|
65
|
+
}
|
|
66
|
+
for (const [fieldName, hash] of Object.entries(confirmation.fieldHashes)) {
|
|
67
|
+
const field = await sql.run(UPSERT_VISIBLE_FIELD_STATE_SQL, [
|
|
68
|
+
confirmation.physicalSheetId,
|
|
69
|
+
confirmation.projection,
|
|
70
|
+
confirmation.rowBindingId,
|
|
71
|
+
fieldName,
|
|
72
|
+
hash,
|
|
73
|
+
confirmation.visibleRevision,
|
|
74
|
+
hash,
|
|
75
|
+
]);
|
|
76
|
+
if (field.changes !== 1) {
|
|
77
|
+
throw new StorageError(STORAGE_ERROR_CODES.PROJECTION_CONFIRMATION_REGRESSION, "projection confirmation would move a field visible state backwards");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export function requireCurrentFence(db, fence) {
|
|
82
|
+
if (!isFencingValid(db, fence)) {
|
|
83
|
+
throw new StorageError(STORAGE_ERROR_CODES.STALE_WRITER_FENCE, "writer fencing is stale or expired");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export async function requireCurrentFenceWithSql(sql, fence) {
|
|
87
|
+
if (!(await isFencingValidWithSql(sql, fence))) {
|
|
88
|
+
throw new StorageError(STORAGE_ERROR_CODES.STALE_WRITER_FENCE, "writer fencing is stale or expired");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export function fenceParameters(fence) {
|
|
92
|
+
return [fence.role, fence.writerEpoch, fence.fencingToken, fence.now];
|
|
93
|
+
}
|
|
94
|
+
export function claimEffectParameters(options) {
|
|
95
|
+
return [
|
|
96
|
+
options.claimToken,
|
|
97
|
+
options.writerEpoch,
|
|
98
|
+
options.now + options.leaseDurationMs,
|
|
99
|
+
options.effectId,
|
|
100
|
+
...fenceParameters(options),
|
|
101
|
+
];
|
|
102
|
+
}
|
|
103
|
+
export function applyEffectResultParameters(options) {
|
|
104
|
+
return [
|
|
105
|
+
options.status,
|
|
106
|
+
toSqlNullable(options.lastErrorCode),
|
|
107
|
+
toSqlNullable(options.lastErrorMessage),
|
|
108
|
+
options.effectId,
|
|
109
|
+
options.claimToken,
|
|
110
|
+
options.writerEpoch,
|
|
111
|
+
options.now,
|
|
112
|
+
...fenceParameters(options),
|
|
113
|
+
];
|
|
114
|
+
}
|
|
115
|
+
export function effectInsertParameters(effect) {
|
|
116
|
+
return [
|
|
117
|
+
effect.effectId,
|
|
118
|
+
effect.effectKind,
|
|
119
|
+
effect.commitId,
|
|
120
|
+
effect.logicalSheetId,
|
|
121
|
+
effect.physicalSheetId,
|
|
122
|
+
effect.projection,
|
|
123
|
+
toSqlNullable(effect.rowBindingId),
|
|
124
|
+
toSqlNullable(effect.conflictId),
|
|
125
|
+
effect.targetKind,
|
|
126
|
+
effect.targetId,
|
|
127
|
+
toSqlNullable(effect.targetEntityRevision),
|
|
128
|
+
toSqlNullable(effect.targetFieldRevisionHash),
|
|
129
|
+
toSqlNullable(effect.targetCanonicalCommitId),
|
|
130
|
+
effect.expectedVisibleRevision,
|
|
131
|
+
effect.expectedVisibleHash,
|
|
132
|
+
toSqlNullable(effect.repairGuardHash),
|
|
133
|
+
toSqlNullable(effect.sourceQuarantineId),
|
|
134
|
+
effect.payloadJson,
|
|
135
|
+
effect.payloadHash,
|
|
136
|
+
effect.effectDedupeKey,
|
|
137
|
+
effect.streamSequence,
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
export function pendingEffectParameters(effect, fence) {
|
|
141
|
+
return [
|
|
142
|
+
...effectInsertParameters(effect),
|
|
143
|
+
fence.now,
|
|
144
|
+
...fenceParameters(fence),
|
|
145
|
+
];
|
|
146
|
+
}
|
|
147
|
+
export function replannedEffectParameters(effect, oldEffectId, fence) {
|
|
148
|
+
return [
|
|
149
|
+
...effectInsertParameters(effect),
|
|
150
|
+
oldEffectId,
|
|
151
|
+
fence.now,
|
|
152
|
+
...fenceParameters(fence),
|
|
153
|
+
];
|
|
154
|
+
}
|
|
155
|
+
/** Internal control-flow signal that forces the enclosing async savepoint to roll back. */
|
|
156
|
+
export class AsyncFenceLostError extends Error {
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=effectOutboxSupport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effectOutboxSupport.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/sync/outbound/effectOutboxSupport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite registry/allowlist operations for the sync gateway.
|
|
3
|
+
*
|
|
4
|
+
* The local registry is the source of truth used to choose a gateway range.
|
|
5
|
+
* A caller cannot turn an arbitrary tab name into a sync target by merely
|
|
6
|
+
* passing it to the gateway client.
|
|
7
|
+
*/
|
|
8
|
+
import { type DatabaseSyncLike } from "../../sqlite/sqliteBridge.js";
|
|
9
|
+
import type { SqlExecutor, SqlStorageAdapter } from "../../../../adapter/persistence/contracts/sql.js";
|
|
10
|
+
import { type FencingContext } from "./writerLease.js";
|
|
11
|
+
/** The only projection labels accepted by the v1 runtime registry. */
|
|
12
|
+
export type RegisteredProjection = "user_input" | "system_state" | "sync_conflicts";
|
|
13
|
+
/** Immutable logical/physical registration supplied by deployment setup. */
|
|
14
|
+
export interface RegisterSyncSheetInput {
|
|
15
|
+
readonly logicalSheetId: string;
|
|
16
|
+
readonly physicalSheetId: string;
|
|
17
|
+
readonly spreadsheetId: string;
|
|
18
|
+
readonly tabName: string;
|
|
19
|
+
readonly registeredRange: string;
|
|
20
|
+
readonly projection: RegisteredProjection;
|
|
21
|
+
readonly schemaVersion: number;
|
|
22
|
+
readonly ownershipManifestJson: string;
|
|
23
|
+
readonly businessKeyField: string;
|
|
24
|
+
readonly anchorMode?: "developer_metadata";
|
|
25
|
+
}
|
|
26
|
+
/** Registry row used for all gateway requests. */
|
|
27
|
+
export interface RegisteredSyncSheet {
|
|
28
|
+
readonly logicalSheetId: string;
|
|
29
|
+
readonly physicalSheetId: string;
|
|
30
|
+
readonly spreadsheetId: string;
|
|
31
|
+
readonly tabName: string;
|
|
32
|
+
readonly registeredRange: string;
|
|
33
|
+
readonly projection: RegisteredProjection;
|
|
34
|
+
readonly schemaVersion: number;
|
|
35
|
+
readonly ownershipManifestJson: string;
|
|
36
|
+
readonly businessKeyField: string;
|
|
37
|
+
readonly anchorMode: "developer_metadata";
|
|
38
|
+
}
|
|
39
|
+
/** Records whether a fenced registry request won the writer ownership check. */
|
|
40
|
+
export type RegisterSyncSheetResult = {
|
|
41
|
+
readonly kind: "registered";
|
|
42
|
+
readonly sheet: RegisteredSyncSheet;
|
|
43
|
+
} | {
|
|
44
|
+
readonly kind: "fenced_out";
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Registers one logical sheet/projection pair under the current writer fence.
|
|
48
|
+
*
|
|
49
|
+
* Repeating an identical registration is idempotent. Any attempt to reuse a
|
|
50
|
+
* logical or physical ID with different immutable routing data fails closed.
|
|
51
|
+
*/
|
|
52
|
+
export declare function registerSyncSheet(db: DatabaseSyncLike, fence: FencingContext, input: RegisterSyncSheetInput): RegisterSyncSheetResult;
|
|
53
|
+
/**
|
|
54
|
+
* Registers one logical sheet/projection pair through an active async SQL context.
|
|
55
|
+
*
|
|
56
|
+
* Call this from the same MikroORM transaction as any related setup state. The
|
|
57
|
+
* registration and its writer-fence check then use the ORM-owned connection
|
|
58
|
+
* instead of opening a second SQLite connection.
|
|
59
|
+
*/
|
|
60
|
+
export declare function registerSyncSheetWithSql(sql: SqlExecutor, fence: FencingContext, input: RegisterSyncSheetInput): Promise<RegisterSyncSheetResult>;
|
|
61
|
+
/** Registers one projection in an adapter-owned MikroORM transaction. */
|
|
62
|
+
export declare function registerSyncSheetWithAdapter(storage: SqlStorageAdapter, fence: FencingContext, input: RegisterSyncSheetInput): Promise<RegisterSyncSheetResult>;
|
|
63
|
+
/** Reads one enabled physical registry entry or rejects any unregistered target. */
|
|
64
|
+
export declare function requireRegisteredSyncSheet(db: DatabaseSyncLike, physicalSheetId: string): RegisteredSyncSheet;
|
|
65
|
+
/** Reads one enabled physical registry entry through an active async SQL context. */
|
|
66
|
+
export declare function requireRegisteredSyncSheetWithSql(sql: SqlExecutor, physicalSheetId: string): Promise<RegisteredSyncSheet>;
|
|
67
|
+
/** Reads one enabled physical registry entry through a fresh adapter read context. */
|
|
68
|
+
export declare function requireRegisteredSyncSheetWithAdapter(storage: SqlStorageAdapter, physicalSheetId: string): Promise<RegisteredSyncSheet>;
|
|
69
|
+
//# sourceMappingURL=syncRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncRegistry.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/sync/shared/syncRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAG/F,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AACvG,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAsC1B,sEAAsE;AACtE,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAEpF,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;CAC5C;AAED,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;CAC3C;AAED,gFAAgF;AAChF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAA;CAAE,GACpE;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAEpC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,sBAAsB,GAC5B,uBAAuB,CA2DzB;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CA+DlC;AAED,yEAAyE;AACzE,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAElC;AAED,oFAAoF;AACpF,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,gBAAgB,EACpB,eAAe,EAAE,MAAM,GACtB,mBAAmB,CAUrB;AAED,qFAAqF;AACrF,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,WAAW,EAChB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,mBAAmB,CAAC,CAS9B;AAED,sFAAsF;AACtF,wBAAsB,qCAAqC,CACzD,OAAO,EAAE,iBAAiB,EAC1B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,mBAAmB,CAAC,CAE9B"}
|