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,412 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin Sheet I/O dispatcher for the typed-sheets sync runtime.
|
|
3
|
+
*
|
|
4
|
+
* This is the v2 data plane. It deliberately contains no business logic, no
|
|
5
|
+
* compare-and-set, no receipts, and no outbox awareness. The Node worker is
|
|
6
|
+
* the sole decision maker; this gateway only executes signed, range-constrained
|
|
7
|
+
* Sheet operations that the worker already planned.
|
|
8
|
+
*
|
|
9
|
+
* This is the only supported Apps Script gateway source. The former full
|
|
10
|
+
* gateway implementation is no longer shipped with the package.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
var GATEWAY_SHEET_ID_PROPERTY_ = "TYPED_SHEETS_GATEWAY_SHEET_ID";
|
|
14
|
+
var GATEWAY_SHARED_SECRET_PROPERTY_ = "TYPED_SHEETS_GATEWAY_SHARED_SECRET";
|
|
15
|
+
var LEGACY_GATEWAY_SHEET_ID_PROPERTY_ = "TYPED_SHEETS_MVP_SHEET_ID";
|
|
16
|
+
var LEGACY_GATEWAY_SHARED_SECRET_PROPERTY_ = "TYPED_SHEETS_MVP_SHARED_SECRET";
|
|
17
|
+
var GATEWAY_MAX_CLOCK_SKEW_MS_ = 60 * 1000;
|
|
18
|
+
var GATEWAY_MAX_REQUEST_LIFETIME_MS_ = 10 * 60 * 1000;
|
|
19
|
+
var GATEWAY_LOCK_TIMEOUT_MS_ = 20 * 1000;
|
|
20
|
+
|
|
21
|
+
var SYNC_PROTOCOL_VERSION_ = "typed-sheets-sync-v1";
|
|
22
|
+
|
|
23
|
+
// Operations accepted by the v2 data plane. Each operation carries its own
|
|
24
|
+
// serialised function body plus the args that function needs. Adding a new
|
|
25
|
+
// operation requires only that the Node worker send a recognised opKind and a
|
|
26
|
+
// self-contained function string; this list is the allowlist of opKind values.
|
|
27
|
+
var SYNC_OPERATIONS_ = {
|
|
28
|
+
applyOperations: true,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** Web-app entry point. Every useful operation must be a signed POST. */
|
|
32
|
+
function doPost(event) {
|
|
33
|
+
try {
|
|
34
|
+
return jsonOutput_(handlePost_(event));
|
|
35
|
+
} catch (error) {
|
|
36
|
+
return jsonOutput_(failure_("internal_error", safeErrorMessage_(error)));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Rejects unauthenticated GET calls instead of exposing spreadsheet metadata. */
|
|
41
|
+
function doGet() {
|
|
42
|
+
return jsonOutput_(failure_("method_not_allowed", "Use a signed POST request."));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Paste the deployed /exec URL here, then run setupSyncGateway() from the
|
|
46
|
+
// Apps Script editor. It is never reachable through doPost().
|
|
47
|
+
var TYPED_SHEETS_GATEWAY_URL = "";
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Configures this bound spreadsheet for the sync gateway.
|
|
51
|
+
*
|
|
52
|
+
* Run this manually from the Apps Script editor after deploying the web app.
|
|
53
|
+
* It reads the deployed `/exec` URL from TYPED_SHEETS_GATEWAY_URL above,
|
|
54
|
+
* generates a shared secret only when one is absent, and logs a copyable local
|
|
55
|
+
* `.env` block. It is never reachable through doPost(), so the secret is not
|
|
56
|
+
* exposed by the public gateway.
|
|
57
|
+
*
|
|
58
|
+
* @returns {object} Local runner config.
|
|
59
|
+
*/
|
|
60
|
+
function setupSyncGateway() {
|
|
61
|
+
var config = configureSyncGateway_(TYPED_SHEETS_GATEWAY_URL);
|
|
62
|
+
Logger.log(config.localEnv);
|
|
63
|
+
return config;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Saves the allowlisted sheet ID and shared secret under a script lock so two
|
|
68
|
+
* manual setup executions cannot accidentally rotate the generated secret.
|
|
69
|
+
*/
|
|
70
|
+
function configureSyncGateway_(gatewayUrl) {
|
|
71
|
+
var normalizedGatewayUrl = requireSyncGatewayUrl_(gatewayUrl);
|
|
72
|
+
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
|
|
73
|
+
if (spreadsheet === null) {
|
|
74
|
+
throw new Error("setupSyncGateway() must run from the bound spreadsheet's Apps Script project.");
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var sheetId = spreadsheet.getId();
|
|
78
|
+
if (!isNonEmptyString_(sheetId)) {
|
|
79
|
+
throw new Error("Could not resolve the bound disposable spreadsheet ID.");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
var lock = LockService.getScriptLock();
|
|
83
|
+
if (!lock.tryLock(GATEWAY_LOCK_TIMEOUT_MS_)) {
|
|
84
|
+
throw new Error("Could not acquire the sync gateway setup lock.");
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
var properties = PropertiesService.getScriptProperties();
|
|
89
|
+
var existingSecret = properties.getProperty(GATEWAY_SHARED_SECRET_PROPERTY_) ||
|
|
90
|
+
properties.getProperty(LEGACY_GATEWAY_SHARED_SECRET_PROPERTY_);
|
|
91
|
+
var sharedSecret = isNonEmptyString_(existingSecret) ? existingSecret : createSyncGatewaySharedSecret_();
|
|
92
|
+
|
|
93
|
+
properties.setProperty(GATEWAY_SHEET_ID_PROPERTY_, sheetId);
|
|
94
|
+
properties.setProperty(GATEWAY_SHARED_SECRET_PROPERTY_, sharedSecret);
|
|
95
|
+
|
|
96
|
+
return {
|
|
97
|
+
gatewayUrl: normalizedGatewayUrl,
|
|
98
|
+
sheetId: sheetId,
|
|
99
|
+
sharedSecret: sharedSecret,
|
|
100
|
+
localEnv: formatSyncGatewayLocalEnv_(normalizedGatewayUrl, sharedSecret, sheetId),
|
|
101
|
+
};
|
|
102
|
+
} finally {
|
|
103
|
+
lock.releaseLock();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** Validates a deployed Apps Script Web App URL before it is copied locally. */
|
|
108
|
+
function requireSyncGatewayUrl_(value) {
|
|
109
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
110
|
+
throw new Error("Paste a deployed Apps Script Web App URL ending in /exec before running setupSyncGateway().");
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
var gatewayUrl = value.trim();
|
|
114
|
+
if (!/^https:\/\/script\.google\.com\/macros\/s\/[^/?#]+\/exec$/.test(gatewayUrl)) {
|
|
115
|
+
throw new Error("Sync gateway URL must be a deployed Apps Script Web App URL ending in /exec.");
|
|
116
|
+
}
|
|
117
|
+
return gatewayUrl;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Generates a long URL-safe secret only for the trusted editor setup path. */
|
|
121
|
+
function createSyncGatewaySharedSecret_() {
|
|
122
|
+
return Utilities.getUuid().replace(/-/g, "") + Utilities.getUuid().replace(/-/g, "");
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Formats the exact local environment values consumed by the Node sync runners. */
|
|
126
|
+
function formatSyncGatewayLocalEnv_(gatewayUrl, sharedSecret, sheetId) {
|
|
127
|
+
return [
|
|
128
|
+
"# Keep this untracked. The shared secret grants gateway access.",
|
|
129
|
+
"TYPED_SHEETS_GATEWAY_URL=" + JSON.stringify(gatewayUrl),
|
|
130
|
+
"TYPED_SHEETS_GATEWAY_SHARED_SECRET=" + JSON.stringify(sharedSecret),
|
|
131
|
+
"TYPED_SHEETS_GATEWAY_SHEET_ID=" + JSON.stringify(sheetId),
|
|
132
|
+
].join("\n");
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
function handlePost_(event) {
|
|
137
|
+
if (!event || !event.postData || typeof event.postData.contents !== "string") {
|
|
138
|
+
return failure_("invalid_request", "Expected a JSON POST body.");
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
var envelope;
|
|
142
|
+
try {
|
|
143
|
+
envelope = JSON.parse(event.postData.contents);
|
|
144
|
+
} catch (error) {
|
|
145
|
+
return failure_("invalid_json", "Request body is not valid JSON.");
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (!isPlainObject_(envelope) || envelope.protocolVersion !== SYNC_PROTOCOL_VERSION_) {
|
|
149
|
+
return failure_("unsupported_protocol", "Unsupported sync protocol version.");
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
var validation = validateSyncEnvelope_(envelope);
|
|
153
|
+
if (validation.failure !== null) return validation.failure;
|
|
154
|
+
|
|
155
|
+
if (envelope.operation === "applyOperations") {
|
|
156
|
+
return applyOperations_(envelope);
|
|
157
|
+
}
|
|
158
|
+
return failure_("unsupported_operation", "Sync operation is not implemented.");
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Executes one signed batch of Sheet operations.
|
|
163
|
+
*
|
|
164
|
+
* Each operation carries:
|
|
165
|
+
* - opKind: an allowlisted label (currently unused for dispatch, reserved for
|
|
166
|
+
* future per-op validation), and
|
|
167
|
+
* - fn: the function body as a string, of the form
|
|
168
|
+
* (spreadsheet, args) => result, and
|
|
169
|
+
* - args: a JSON-serialisable payload passed as the second argument.
|
|
170
|
+
*
|
|
171
|
+
* The function is evaluated in this request's global context, so it may call
|
|
172
|
+
* SpreadsheetApp/Utilities just like any other Apps Script code. It must not
|
|
173
|
+
* rely on any external closure, because only the body text crosses the wire.
|
|
174
|
+
*
|
|
175
|
+
* A single SpreadsheetApp.flush() is issued after all operations have run, so
|
|
176
|
+
* a multi-operation request applies atomically from the Sheet's perspective.
|
|
177
|
+
*/
|
|
178
|
+
function applyOperations_(envelope) {
|
|
179
|
+
var payload = envelope.payload;
|
|
180
|
+
if (!isPlainObject_(payload) || !Array.isArray(payload.operations)) {
|
|
181
|
+
return failure_("invalid_payload", "applyOperations payload must contain an operations array.");
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
var spreadsheet;
|
|
185
|
+
try {
|
|
186
|
+
spreadsheet = SpreadsheetApp.openById(envelope.sheetId);
|
|
187
|
+
} catch (error) {
|
|
188
|
+
return failure_("sheet_open_failed", "Configured sync spreadsheet could not be opened.");
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
var results = [];
|
|
192
|
+
for (var index = 0; index < payload.operations.length; index += 1) {
|
|
193
|
+
var operation = payload.operations[index];
|
|
194
|
+
try {
|
|
195
|
+
var operationStartedAt = Date.now();
|
|
196
|
+
var operationResult = runOneOperation_(spreadsheet, operation);
|
|
197
|
+
appendGatewayTimingPhase_(operationResult, "dispatcher_eval", Date.now() - operationStartedAt);
|
|
198
|
+
results.push(operationResult);
|
|
199
|
+
} catch (error) {
|
|
200
|
+
// Stop at the first failing operation so the worker can retry the whole
|
|
201
|
+
// signed batch idempotently. Partial results are returned for diagnosis.
|
|
202
|
+
return failure_("operation_failed", "Operation " + index + " failed: " + safeErrorMessage_(error));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
var flushStartedAt = Date.now();
|
|
207
|
+
SpreadsheetApp.flush();
|
|
208
|
+
var flushDurationMs = Date.now() - flushStartedAt;
|
|
209
|
+
results.forEach(function (result) {
|
|
210
|
+
appendGatewayTimingPhase_(result, "dispatcher_flush", flushDurationMs);
|
|
211
|
+
});
|
|
212
|
+
return success_({ results: results });
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** Adds dispatcher timing without requiring older dynamic operations to know the contract. */
|
|
216
|
+
function appendGatewayTimingPhase_(result, phase, durationMs) {
|
|
217
|
+
if (!isPlainObject_(result)) return;
|
|
218
|
+
if (!isPlainObject_(result.timing)) {
|
|
219
|
+
result.timing = {
|
|
220
|
+
operationKinds: [],
|
|
221
|
+
operationCounts: { append: 0, update: 0, delete: 0 },
|
|
222
|
+
durationMs: 0,
|
|
223
|
+
phases: [],
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
if (!Array.isArray(result.timing.phases)) result.timing.phases = [];
|
|
227
|
+
result.timing.phases.push({ phase: phase, durationMs: durationMs });
|
|
228
|
+
result.timing.durationMs = Number(result.timing.durationMs) + durationMs;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/** Restores one operation function from its serialised body and runs it. */
|
|
232
|
+
function runOneOperation_(spreadsheet, operation) {
|
|
233
|
+
if (!isPlainObject_(operation) || typeof operation.fn !== "string" || operation.fn.length === 0) {
|
|
234
|
+
throw new Error("operation must be an object with a non-empty fn string");
|
|
235
|
+
}
|
|
236
|
+
// The function body is restored in this request scope. Eval is safe here
|
|
237
|
+
// because the enclosing envelope was HMAC-signed; an attacker who cannot
|
|
238
|
+
// sign requests cannot inject code.
|
|
239
|
+
var fn;
|
|
240
|
+
try {
|
|
241
|
+
fn = eval("(" + operation.fn + ")");
|
|
242
|
+
} catch (error) {
|
|
243
|
+
throw new Error("operation fn could not be restored: " + safeErrorMessage_(error));
|
|
244
|
+
}
|
|
245
|
+
if (typeof fn !== "function") {
|
|
246
|
+
throw new Error("operation fn did not evaluate to a function");
|
|
247
|
+
}
|
|
248
|
+
return fn(spreadsheet, operation.args);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// ---------------------------------------------------------------------------
|
|
252
|
+
// Envelope validation (preserved from v1 so the trust boundary is unchanged)
|
|
253
|
+
// ---------------------------------------------------------------------------
|
|
254
|
+
|
|
255
|
+
/** Validates the sync envelope and resolves the configured spreadsheet id. */
|
|
256
|
+
function validateSyncEnvelope_(envelope) {
|
|
257
|
+
if (!isPlainObject_(envelope)) {
|
|
258
|
+
return { failure: failure_("invalid_envelope", "Envelope must be a JSON object.") };
|
|
259
|
+
}
|
|
260
|
+
if (envelope.protocolVersion !== SYNC_PROTOCOL_VERSION_) {
|
|
261
|
+
return { failure: failure_("unsupported_protocol", "Unsupported sync protocol version.") };
|
|
262
|
+
}
|
|
263
|
+
if (!isNonEmptyString_(envelope.requestId) || !/^[A-Za-z0-9._:-]{8,128}$/.test(envelope.requestId)) {
|
|
264
|
+
return { failure: failure_("invalid_request_id", "Request ID must be 8-128 URL-safe characters.") };
|
|
265
|
+
}
|
|
266
|
+
if (!isNonEmptyString_(envelope.operation) || !SYNC_OPERATIONS_[envelope.operation]) {
|
|
267
|
+
return { failure: failure_("unsupported_operation", "Operation is not allowlisted.") };
|
|
268
|
+
}
|
|
269
|
+
if (!isNonEmptyString_(envelope.keyId) || !isNonEmptyString_(envelope.sheetId) ||
|
|
270
|
+
!isNonEmptyString_(envelope.actorId) || !isNonEmptyString_(envelope.bodyHash) ||
|
|
271
|
+
!isNonEmptyString_(envelope.signature)) {
|
|
272
|
+
return { failure: failure_("invalid_envelope", "Sync envelope is missing an authenticated field.") };
|
|
273
|
+
}
|
|
274
|
+
if (!isPositiveSafeInteger_(envelope.issuedAt) || !isPositiveSafeInteger_(envelope.expiresAt)) {
|
|
275
|
+
return { failure: failure_("invalid_time", "issuedAt and expiresAt must be positive epoch milliseconds.") };
|
|
276
|
+
}
|
|
277
|
+
var now = Date.now();
|
|
278
|
+
if (envelope.issuedAt > now + GATEWAY_MAX_CLOCK_SKEW_MS_ || envelope.expiresAt < now ||
|
|
279
|
+
envelope.expiresAt <= envelope.issuedAt ||
|
|
280
|
+
envelope.expiresAt - envelope.issuedAt > GATEWAY_MAX_REQUEST_LIFETIME_MS_) {
|
|
281
|
+
return { failure: failure_("invalid_expiry", "Sync envelope is expired or outside the allowed lifetime.") };
|
|
282
|
+
}
|
|
283
|
+
var gateway = readGatewayConfiguration_();
|
|
284
|
+
if (gateway === null) {
|
|
285
|
+
return { failure: failure_("gateway_not_configured", "Required Script Properties are not configured.") };
|
|
286
|
+
}
|
|
287
|
+
if (gateway.sheetId !== envelope.sheetId) {
|
|
288
|
+
return { failure: failure_("sheet_not_allowlisted", "Envelope sheetId is not the configured spreadsheet.") };
|
|
289
|
+
}
|
|
290
|
+
if (envelope.keyId !== "typed-sheets-shared-secret-v1") {
|
|
291
|
+
return { failure: failure_("unknown_key", "Sync keyId is not configured.") };
|
|
292
|
+
}
|
|
293
|
+
var actualBodyHash;
|
|
294
|
+
try {
|
|
295
|
+
actualBodyHash = sha256Hex_(canonicalJson_(envelope.payload));
|
|
296
|
+
} catch (error) {
|
|
297
|
+
return { failure: failure_("invalid_payload", safeErrorMessage_(error)) };
|
|
298
|
+
}
|
|
299
|
+
if (!constantTimeEquals_(actualBodyHash, envelope.bodyHash)) {
|
|
300
|
+
return { failure: failure_("body_hash_mismatch", "Payload does not match the signed body hash.") };
|
|
301
|
+
}
|
|
302
|
+
if (!constantTimeEquals_(
|
|
303
|
+
hmacSha256Base64Url_(syncSigningInput_(envelope), gateway.sharedSecret),
|
|
304
|
+
envelope.signature,
|
|
305
|
+
)) {
|
|
306
|
+
return { failure: failure_("invalid_signature", "Sync envelope signature could not be verified.") };
|
|
307
|
+
}
|
|
308
|
+
return { failure: null };
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/** HMAC material for typed-sheets-sync-v1; actor/sheet/key are authenticated too. */
|
|
312
|
+
function syncSigningInput_(envelope) {
|
|
313
|
+
return [
|
|
314
|
+
envelope.protocolVersion,
|
|
315
|
+
envelope.requestId,
|
|
316
|
+
envelope.operation,
|
|
317
|
+
envelope.keyId,
|
|
318
|
+
String(envelope.issuedAt),
|
|
319
|
+
String(envelope.expiresAt),
|
|
320
|
+
envelope.sheetId,
|
|
321
|
+
envelope.actorId,
|
|
322
|
+
envelope.bodyHash,
|
|
323
|
+
].join("\n");
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/** Reads the configured gateway identity, accepting one prior property namespace during migration. */
|
|
327
|
+
function readGatewayConfiguration_() {
|
|
328
|
+
var properties = PropertiesService.getScriptProperties();
|
|
329
|
+
var sheetId = properties.getProperty(GATEWAY_SHEET_ID_PROPERTY_) ||
|
|
330
|
+
properties.getProperty(LEGACY_GATEWAY_SHEET_ID_PROPERTY_);
|
|
331
|
+
var sharedSecret = properties.getProperty(GATEWAY_SHARED_SECRET_PROPERTY_) ||
|
|
332
|
+
properties.getProperty(LEGACY_GATEWAY_SHARED_SECRET_PROPERTY_);
|
|
333
|
+
if (!isNonEmptyString_(sheetId) || !isNonEmptyString_(sharedSecret)) return null;
|
|
334
|
+
return { sheetId: sheetId, sharedSecret: sharedSecret };
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// ---------------------------------------------------------------------------
|
|
338
|
+
// Shared encoding / hashing helpers (preserved from v1)
|
|
339
|
+
// ---------------------------------------------------------------------------
|
|
340
|
+
|
|
341
|
+
function canonicalJson_(value) {
|
|
342
|
+
if (value === null) return "null";
|
|
343
|
+
if (value === true) return "true";
|
|
344
|
+
if (value === false) return "false";
|
|
345
|
+
if (typeof value === "string") return JSON.stringify(value);
|
|
346
|
+
if (typeof value === "number") {
|
|
347
|
+
if (!isFinite(value)) throw new Error("Sync payload numbers must be finite");
|
|
348
|
+
return (value === 0 ? "0" : String(value)).replace(/e\+/, "e").replace(/e(-?)0+(\d+)/, "e$1$2");
|
|
349
|
+
}
|
|
350
|
+
if (Array.isArray(value)) {
|
|
351
|
+
return "[" + value.map(canonicalJson_).join(",") + "]";
|
|
352
|
+
}
|
|
353
|
+
if (isPlainObject_(value)) {
|
|
354
|
+
return "{" + Object.keys(value).sort().map(function (key) {
|
|
355
|
+
return JSON.stringify(key) + ":" + canonicalJson_(value[key]);
|
|
356
|
+
}).join(",") + "}";
|
|
357
|
+
}
|
|
358
|
+
throw new Error("Sync payload has unsupported value type");
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
function sha256Hex_(value) {
|
|
362
|
+
return Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, value, Utilities.Charset.UTF_8)
|
|
363
|
+
.map(function (byte) {
|
|
364
|
+
var unsigned = byte < 0 ? byte + 256 : byte;
|
|
365
|
+
return ("0" + unsigned.toString(16)).slice(-2);
|
|
366
|
+
})
|
|
367
|
+
.join("");
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
function hmacSha256Base64Url_(value, secret) {
|
|
371
|
+
return Utilities.base64EncodeWebSafe(Utilities.computeHmacSha256Signature(value, secret)).replace(/=+$/, "");
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
function constantTimeEquals_(left, right) {
|
|
375
|
+
if (typeof left !== "string" || typeof right !== "string") return false;
|
|
376
|
+
var maxLength = Math.max(left.length, right.length);
|
|
377
|
+
var difference = left.length ^ right.length;
|
|
378
|
+
for (var index = 0; index < maxLength; index += 1) {
|
|
379
|
+
difference |= (left.charCodeAt(index) || 0) ^ (right.charCodeAt(index) || 0);
|
|
380
|
+
}
|
|
381
|
+
return difference === 0;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
function isPlainObject_(value) {
|
|
385
|
+
return value !== null && !Array.isArray(value) && Object.prototype.toString.call(value) === "[object Object]";
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
function isNonEmptyString_(value) {
|
|
389
|
+
return typeof value === "string" && value.length > 0;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
function isPositiveSafeInteger_(value) {
|
|
393
|
+
return typeof value === "number" && isFinite(value) && Math.floor(value) === value &&
|
|
394
|
+
value > 0 && value <= Number.MAX_SAFE_INTEGER;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
function success_(result) {
|
|
398
|
+
return { ok: true, result: result };
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
function failure_(code, message) {
|
|
402
|
+
return { ok: false, error: { code: code, message: message } };
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
function jsonOutput_(value) {
|
|
406
|
+
return ContentService.createTextOutput(JSON.stringify(value)).setMimeType(ContentService.MimeType.JSON);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
function safeErrorMessage_(error) {
|
|
410
|
+
var message = error && error.message ? String(error.message) : "Unexpected gateway failure.";
|
|
411
|
+
return message.replace(/[\r\n]+/g, " ").slice(0, 500);
|
|
412
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapter/persistence/contracts/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,YAAY,EACV,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapter/persistence/contracts/index.ts"],"names":[],"mappings":"AAAA,2EAA2E"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter-neutral asynchronous SQL primitives used by the sync storage layer.
|
|
3
|
+
*
|
|
4
|
+
* The core and storage packages depend on these contracts instead of a
|
|
5
|
+
* particular ORM. An adapter may implement them with MikroORM today and a
|
|
6
|
+
* different persistence library later without changing sync semantics.
|
|
7
|
+
*/
|
|
8
|
+
/** Values accepted as bound parameters by the SQLite-backed adapters. */
|
|
9
|
+
export type SqlParameter = string | number | bigint | boolean | Uint8Array | null;
|
|
10
|
+
/** A generated identifier returned by a database mutation when one exists. */
|
|
11
|
+
export type SqlGeneratedId = string | number | bigint;
|
|
12
|
+
/** Observable outcome of one SQL data-definition or data-mutation statement. */
|
|
13
|
+
export interface SqlMutationResult {
|
|
14
|
+
/** Number of rows changed by the statement. */
|
|
15
|
+
readonly changes: number;
|
|
16
|
+
/** Present only when the database reports a generated primary-key value. */
|
|
17
|
+
readonly lastInsertId?: SqlGeneratedId;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Executes SQL through the active persistence context.
|
|
21
|
+
*
|
|
22
|
+
* Callers must pass parameters separately from SQL text. The implementation
|
|
23
|
+
* keeps this executor bound to the current transaction when one exists.
|
|
24
|
+
*/
|
|
25
|
+
export interface SqlExecutor {
|
|
26
|
+
/** Returns every row produced by a query. */
|
|
27
|
+
all<Row extends object>(sql: string, parameters?: readonly SqlParameter[]): Promise<readonly Row[]>;
|
|
28
|
+
/** Returns the first query row, or undefined when no row matches. */
|
|
29
|
+
get<Row extends object>(sql: string, parameters?: readonly SqlParameter[]): Promise<Row | undefined>;
|
|
30
|
+
/** Runs a statement that changes schema or persisted state. */
|
|
31
|
+
run(sql: string, parameters?: readonly SqlParameter[]): Promise<SqlMutationResult>;
|
|
32
|
+
}
|
|
33
|
+
/** The adapter-neutral context available to one storage operation. */
|
|
34
|
+
export interface SqlStorageContext {
|
|
35
|
+
readonly sql: SqlExecutor;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Owns SQL execution contexts for one SQLite-backed typed-sheets runtime.
|
|
39
|
+
*
|
|
40
|
+
* `transaction()` is the only outer write boundary. Every user-entity write,
|
|
41
|
+
* canonical-state mutation, and outbox append that belongs together must use
|
|
42
|
+
* the `sql` executor supplied to the callback.
|
|
43
|
+
*/
|
|
44
|
+
export interface SqlStorageAdapter {
|
|
45
|
+
/** Runs a read using a fresh persistence context with no reused identity map. */
|
|
46
|
+
read<T>(operation: (context: SqlStorageContext) => Promise<T>): Promise<T>;
|
|
47
|
+
/** Runs one atomic write transaction and rolls all callback work back on failure. */
|
|
48
|
+
transaction<T>(operation: (context: SqlStorageContext) => Promise<T>): Promise<T>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../../../../src/adapter/persistence/contracts/sql.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yEAAyE;AACzE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC;AAElF,8EAA8E;AAC9E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEtD,gFAAgF;AAChF,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,GAAG,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAEpG,qEAAqE;IACrE,GAAG,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IAErG,+DAA+D;IAC/D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpF;AAED,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3E,qFAAqF;IACrF,WAAW,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACnF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter-neutral asynchronous SQL primitives used by the sync storage layer.
|
|
3
|
+
*
|
|
4
|
+
* The core and storage packages depend on these contracts instead of a
|
|
5
|
+
* particular ORM. An adapter may implement them with MikroORM today and a
|
|
6
|
+
* different persistence library later without changing sync semantics.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql.js","sourceRoot":"","sources":["../../../../src/adapter/persistence/contracts/sql.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapter/persistence/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapter/persistence/index.ts"],"names":[],"mappings":""}
|
package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MikroORM EntityManager bridge for the adapter-neutral typed-sheets engine.
|
|
3
|
+
*
|
|
4
|
+
* Stateful delegation stays in this class. Changeset normalization is kept in
|
|
5
|
+
* `MikroOrmFlushChanges.ts` so the lifecycle contract can be tested separately
|
|
6
|
+
* from transaction and identity-map behavior.
|
|
7
|
+
*/
|
|
8
|
+
import type { TypedSheetsEntityData, TypedSheetsEntityEngineManager, TypedSheetsEntityFilter, TypedSheetsEntityFlushListener, TypedSheetsEntityReference, TypedSheetsFindOptions, TypedSheetsForkOptions } from "../../../../../application/orm/api/contracts.js";
|
|
9
|
+
import type { MikroOrmSqliteAdapter, MikroOrmSqliteEntityManager } from "../storage/MikroOrmSqliteAdapter.js";
|
|
10
|
+
/**
|
|
11
|
+
* Adapts one forked MikroORM manager to the typed-sheets engine contract.
|
|
12
|
+
*
|
|
13
|
+
* The subscriber is scoped to this manager instance and ignores events from
|
|
14
|
+
* other forks, preventing a request-local flush plan from leaking across
|
|
15
|
+
* identity maps or transactions.
|
|
16
|
+
*/
|
|
17
|
+
export declare class MikroOrmSqliteTypedSheetsEntityManager implements TypedSheetsEntityEngineManager {
|
|
18
|
+
private readonly storage;
|
|
19
|
+
private readonly entityManager;
|
|
20
|
+
private flushListener;
|
|
21
|
+
constructor(storage: MikroOrmSqliteAdapter, entityManager: MikroOrmSqliteEntityManager);
|
|
22
|
+
/** Creates a manager with an independent MikroORM identity map. */
|
|
23
|
+
fork(options?: TypedSheetsForkOptions): TypedSheetsEntityEngineManager;
|
|
24
|
+
/** Delegates entity construction while keeping MikroORM types inside the adapter. */
|
|
25
|
+
create<Entity extends object>(entityName: TypedSheetsEntityReference<Entity>, data: TypedSheetsEntityData<Entity>): Entity;
|
|
26
|
+
/** Reads a filtered entity collection through the local SQLite manager. */
|
|
27
|
+
find<Entity extends object>(entityName: TypedSheetsEntityReference<Entity>, where: TypedSheetsEntityFilter<Entity>, options?: TypedSheetsFindOptions): Promise<readonly Entity[]>;
|
|
28
|
+
/** Reads one filtered entity through the local SQLite manager. */
|
|
29
|
+
findOne<Entity extends object>(entityName: TypedSheetsEntityReference<Entity>, where: TypedSheetsEntityFilter<Entity>, options?: TypedSheetsFindOptions): Promise<Entity | null>;
|
|
30
|
+
/** Marks one or more entities for MikroORM insertion or update. */
|
|
31
|
+
persist<Entity extends object>(entity: Entity | Iterable<Entity>): void;
|
|
32
|
+
/** Marks one or more entities for MikroORM removal. */
|
|
33
|
+
remove<Entity extends object>(entity: Entity | Iterable<Entity>): void;
|
|
34
|
+
/** Flushes the current MikroORM unit of work. */
|
|
35
|
+
flush(): Promise<void>;
|
|
36
|
+
/** Runs work through MikroORM's transaction boundary. */
|
|
37
|
+
transactional<Result>(operation: (entityManager: TypedSheetsEntityEngineManager) => Promise<Result>): Promise<Result>;
|
|
38
|
+
/** Clears MikroORM's request-local identity map. */
|
|
39
|
+
clear(): void;
|
|
40
|
+
/** Reports whether this manager already owns a SQLite transaction. */
|
|
41
|
+
isInTransaction(): boolean;
|
|
42
|
+
/** Opens the explicit SQLite transaction used by the public facade. */
|
|
43
|
+
begin(): Promise<void>;
|
|
44
|
+
/** Commits the explicit SQLite transaction used by the public facade. */
|
|
45
|
+
commit(): Promise<void>;
|
|
46
|
+
/** Rolls back the explicit SQLite transaction used by the public facade. */
|
|
47
|
+
rollback(): Promise<void>;
|
|
48
|
+
/** Stores the planner that must share this manager's flush transaction. */
|
|
49
|
+
onFlush(listener: TypedSheetsEntityFlushListener): void;
|
|
50
|
+
/** Converts a MikroORM flush event into one typed-sheets planning callback. */
|
|
51
|
+
private coordinateFlush;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=MikroOrmTypedSheetsEntityManager.d.ts.map
|
package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MikroOrmTypedSheetsEntityManager.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,qBAAqB,EACrB,8BAA8B,EAC9B,uBAAuB,EACvB,8BAA8B,EAC9B,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,iDAAiD,CAAC;AAEzD,OAAO,KAAK,EACV,qBAAqB,EACrB,2BAA2B,EAC5B,MAAM,qCAAqC,CAAC;AAE7C;;;;;;GAMG;AACH,qBAAa,sCACX,YAAW,8BAA8B;IAIvC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAJhC,OAAO,CAAC,aAAa,CAA6C;gBAG/C,OAAO,EAAE,qBAAqB,EAC9B,aAAa,EAAE,2BAA2B;IAO7D,mEAAmE;IACnE,IAAI,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,8BAA8B;IAKtE,qFAAqF;IACrF,MAAM,CAAC,MAAM,SAAS,MAAM,EAC1B,UAAU,EAAE,0BAA0B,CAAC,MAAM,CAAC,EAC9C,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAClC,MAAM;IAKT,2EAA2E;IACrE,IAAI,CAAC,MAAM,SAAS,MAAM,EAC9B,UAAU,EAAE,0BAA0B,CAAC,MAAM,CAAC,EAC9C,KAAK,EAAE,uBAAuB,CAAC,MAAM,CAAC,EACtC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAK7B,kEAAkE;IAC5D,OAAO,CAAC,MAAM,SAAS,MAAM,EACjC,UAAU,EAAE,0BAA0B,CAAC,MAAM,CAAC,EAC9C,KAAK,EAAE,uBAAuB,CAAC,MAAM,CAAC,EACtC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKzB,mEAAmE;IACnE,OAAO,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAIvE,uDAAuD;IACvD,MAAM,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAItE,iDAAiD;IAC3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,yDAAyD;IACnD,aAAa,CAAC,MAAM,EACxB,SAAS,EAAE,CAAC,aAAa,EAAE,8BAA8B,KAAK,OAAO,CAAC,MAAM,CAAC,GAC5E,OAAO,CAAC,MAAM,CAAC;IAQlB,oDAAoD;IACpD,KAAK,IAAI,IAAI;IAIb,sEAAsE;IACtE,eAAe,IAAI,OAAO;IAI1B,uEAAuE;IACjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,yEAAyE;IACnE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B,4EAA4E;IACtE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,EAAE,8BAA8B,GAAG,IAAI;IAIvD,+EAA+E;YACjE,eAAe;CAW9B"}
|