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.
Files changed (535) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +135 -0
  3. package/README.ko.md +138 -0
  4. package/README.md +143 -0
  5. package/apps-script/gateway/Code.gs +412 -0
  6. package/dist/adapter/persistence/contracts/index.d.ts +3 -0
  7. package/dist/adapter/persistence/contracts/index.d.ts.map +1 -0
  8. package/dist/adapter/persistence/contracts/index.js +3 -0
  9. package/dist/adapter/persistence/contracts/index.js.map +1 -0
  10. package/dist/adapter/persistence/contracts/sql.d.ts +50 -0
  11. package/dist/adapter/persistence/contracts/sql.d.ts.map +1 -0
  12. package/dist/adapter/persistence/contracts/sql.js +9 -0
  13. package/dist/adapter/persistence/contracts/sql.js.map +1 -0
  14. package/dist/adapter/persistence/index.d.ts +2 -0
  15. package/dist/adapter/persistence/index.d.ts.map +1 -0
  16. package/dist/adapter/persistence/index.js +2 -0
  17. package/dist/adapter/persistence/index.js.map +1 -0
  18. package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts +53 -0
  19. package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.d.ts.map +1 -0
  20. package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js +105 -0
  21. package/dist/adapter/persistence/providers/mikro-orm/api/MikroOrmTypedSheetsEntityManager.js.map +1 -0
  22. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts +39 -0
  23. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.d.ts.map +1 -0
  24. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js +54 -0
  25. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmMappedTypedSheets.js.map +1 -0
  26. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.d.ts +38 -0
  27. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.d.ts.map +1 -0
  28. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js +55 -0
  29. package/dist/adapter/persistence/providers/mikro-orm/engine/MikroOrmTypedSheetsEngine.js.map +1 -0
  30. package/dist/adapter/persistence/providers/mikro-orm/index.d.ts +16 -0
  31. package/dist/adapter/persistence/providers/mikro-orm/index.d.ts.map +1 -0
  32. package/dist/adapter/persistence/providers/mikro-orm/index.js +9 -0
  33. package/dist/adapter/persistence/providers/mikro-orm/index.js.map +1 -0
  34. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts +27 -0
  35. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts.map +1 -0
  36. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +67 -0
  37. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -0
  38. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.d.ts +19 -0
  39. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.d.ts.map +1 -0
  40. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.js +67 -0
  41. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmFlushChanges.js.map +1 -0
  42. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts +78 -0
  43. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.d.ts.map +1 -0
  44. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js +121 -0
  45. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js.map +1 -0
  46. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.d.ts +20 -0
  47. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.d.ts.map +1 -0
  48. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.js +125 -0
  49. package/dist/adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteSchema.js.map +1 -0
  50. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts +42 -0
  51. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts.map +1 -0
  52. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js +51 -0
  53. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js.map +1 -0
  54. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts +22 -0
  55. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts.map +1 -0
  56. package/dist/adapter/sheets/providers/apps-script-gateway/index.js +12 -0
  57. package/dist/adapter/sheets/providers/apps-script-gateway/index.js.map +1 -0
  58. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts +42 -0
  59. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +1 -0
  60. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +161 -0
  61. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +1 -0
  62. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts +3 -0
  63. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +1 -0
  64. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +692 -0
  65. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +1 -0
  66. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts +29 -0
  67. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts.map +1 -0
  68. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +538 -0
  69. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +1 -0
  70. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts +12 -0
  71. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.d.ts.map +1 -0
  72. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js +190 -0
  73. package/dist/adapter/sheets/providers/apps-script-gateway/operations/read/tableReadOperation.js.map +1 -0
  74. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +23 -0
  75. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +1 -0
  76. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +166 -0
  77. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +1 -0
  78. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts +50 -0
  79. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.d.ts.map +1 -0
  80. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js +60 -0
  81. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/codeGsProtocol.js.map +1 -0
  82. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts +44 -0
  83. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.d.ts.map +1 -0
  84. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js +40 -0
  85. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/constants.js.map +1 -0
  86. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts +7 -0
  87. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts.map +1 -0
  88. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js +47 -0
  89. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js.map +1 -0
  90. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts +5 -0
  91. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.d.ts.map +1 -0
  92. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js +54 -0
  93. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/timing.js.map +1 -0
  94. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts +5 -0
  95. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts.map +1 -0
  96. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js +2 -0
  97. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.js.map +1 -0
  98. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts +10 -0
  99. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.d.ts.map +1 -0
  100. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js +35 -0
  101. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/validation.js.map +1 -0
  102. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts +67 -0
  103. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +1 -0
  104. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +204 -0
  105. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +1 -0
  106. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts +78 -0
  107. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +1 -0
  108. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +343 -0
  109. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +1 -0
  110. package/dist/application/index.d.ts +4 -0
  111. package/dist/application/index.d.ts.map +1 -0
  112. package/dist/application/index.js +4 -0
  113. package/dist/application/index.js.map +1 -0
  114. package/dist/application/orm/api/TypedSheetsOrm.d.ts +71 -0
  115. package/dist/application/orm/api/TypedSheetsOrm.d.ts.map +1 -0
  116. package/dist/application/orm/api/TypedSheetsOrm.js +116 -0
  117. package/dist/application/orm/api/TypedSheetsOrm.js.map +1 -0
  118. package/dist/application/orm/api/contracts.d.ts +118 -0
  119. package/dist/application/orm/api/contracts.d.ts.map +1 -0
  120. package/dist/application/orm/api/contracts.js +21 -0
  121. package/dist/application/orm/api/contracts.js.map +1 -0
  122. package/dist/application/orm/errors.d.ts +35 -0
  123. package/dist/application/orm/errors.d.ts.map +1 -0
  124. package/dist/application/orm/errors.js +35 -0
  125. package/dist/application/orm/errors.js.map +1 -0
  126. package/dist/application/orm/index.d.ts +13 -0
  127. package/dist/application/orm/index.d.ts.map +1 -0
  128. package/dist/application/orm/index.js +7 -0
  129. package/dist/application/orm/index.js.map +1 -0
  130. package/dist/application/orm/mapping/contracts.d.ts +113 -0
  131. package/dist/application/orm/mapping/contracts.d.ts.map +1 -0
  132. package/dist/application/orm/mapping/contracts.js +8 -0
  133. package/dist/application/orm/mapping/contracts.js.map +1 -0
  134. package/dist/application/orm/mapping/definition.d.ts +16 -0
  135. package/dist/application/orm/mapping/definition.d.ts.map +1 -0
  136. package/dist/application/orm/mapping/definition.js +145 -0
  137. package/dist/application/orm/mapping/definition.js.map +1 -0
  138. package/dist/application/orm/mapping/entityMapping.d.ts +13 -0
  139. package/dist/application/orm/mapping/entityMapping.d.ts.map +1 -0
  140. package/dist/application/orm/mapping/entityMapping.js +13 -0
  141. package/dist/application/orm/mapping/entityMapping.js.map +1 -0
  142. package/dist/application/orm/mapping/identity.d.ts +14 -0
  143. package/dist/application/orm/mapping/identity.d.ts.map +1 -0
  144. package/dist/application/orm/mapping/identity.js +37 -0
  145. package/dist/application/orm/mapping/identity.js.map +1 -0
  146. package/dist/application/orm/mapping/observationMapping.d.ts +42 -0
  147. package/dist/application/orm/mapping/observationMapping.d.ts.map +1 -0
  148. package/dist/application/orm/mapping/observationMapping.js +65 -0
  149. package/dist/application/orm/mapping/observationMapping.js.map +1 -0
  150. package/dist/application/orm/mapping/projection.d.ts +22 -0
  151. package/dist/application/orm/mapping/projection.d.ts.map +1 -0
  152. package/dist/application/orm/mapping/projection.js +74 -0
  153. package/dist/application/orm/mapping/projection.js.map +1 -0
  154. package/dist/application/orm/mapping/registry.d.ts +15 -0
  155. package/dist/application/orm/mapping/registry.d.ts.map +1 -0
  156. package/dist/application/orm/mapping/registry.js +38 -0
  157. package/dist/application/orm/mapping/registry.js.map +1 -0
  158. package/dist/application/orm/mapping/values.d.ts +17 -0
  159. package/dist/application/orm/mapping/values.d.ts.map +1 -0
  160. package/dist/application/orm/mapping/values.js +141 -0
  161. package/dist/application/orm/mapping/values.js.map +1 -0
  162. package/dist/application/orm/persistence/flush/flushCoordinator.d.ts +28 -0
  163. package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -0
  164. package/dist/application/orm/persistence/flush/flushCoordinator.js +170 -0
  165. package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -0
  166. package/dist/application/orm/persistence/flush/mappedFlushCoordinator.d.ts +9 -0
  167. package/dist/application/orm/persistence/flush/mappedFlushCoordinator.d.ts.map +1 -0
  168. package/dist/application/orm/persistence/flush/mappedFlushCoordinator.js +8 -0
  169. package/dist/application/orm/persistence/flush/mappedFlushCoordinator.js.map +1 -0
  170. package/dist/application/orm/persistence/lifecycle/entityLifecycle.d.ts +12 -0
  171. package/dist/application/orm/persistence/lifecycle/entityLifecycle.d.ts.map +1 -0
  172. package/dist/application/orm/persistence/lifecycle/entityLifecycle.js +134 -0
  173. package/dist/application/orm/persistence/lifecycle/entityLifecycle.js.map +1 -0
  174. package/dist/application/orm/persistence/projection/projectionEffects.d.ts +21 -0
  175. package/dist/application/orm/persistence/projection/projectionEffects.d.ts.map +1 -0
  176. package/dist/application/orm/persistence/projection/projectionEffects.js +203 -0
  177. package/dist/application/orm/persistence/projection/projectionEffects.js.map +1 -0
  178. package/dist/application/orm/persistence/support/businessKeys.d.ts +17 -0
  179. package/dist/application/orm/persistence/support/businessKeys.d.ts.map +1 -0
  180. package/dist/application/orm/persistence/support/businessKeys.js +72 -0
  181. package/dist/application/orm/persistence/support/businessKeys.js.map +1 -0
  182. package/dist/application/orm/persistence/support/canonicalState.d.ts +22 -0
  183. package/dist/application/orm/persistence/support/canonicalState.d.ts.map +1 -0
  184. package/dist/application/orm/persistence/support/canonicalState.js +88 -0
  185. package/dist/application/orm/persistence/support/canonicalState.js.map +1 -0
  186. package/dist/application/orm/persistence/support/contracts.d.ts +139 -0
  187. package/dist/application/orm/persistence/support/contracts.d.ts.map +1 -0
  188. package/dist/application/orm/persistence/support/contracts.js +93 -0
  189. package/dist/application/orm/persistence/support/contracts.js.map +1 -0
  190. package/dist/application/orm/persistence/support/helpers.d.ts +32 -0
  191. package/dist/application/orm/persistence/support/helpers.d.ts.map +1 -0
  192. package/dist/application/orm/persistence/support/helpers.js +66 -0
  193. package/dist/application/orm/persistence/support/helpers.js.map +1 -0
  194. package/dist/application/orm/persistence/support/timing.d.ts +20 -0
  195. package/dist/application/orm/persistence/support/timing.d.ts.map +1 -0
  196. package/dist/application/orm/persistence/support/timing.js +55 -0
  197. package/dist/application/orm/persistence/support/timing.js.map +1 -0
  198. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts +46 -0
  199. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts.map +1 -0
  200. package/dist/application/sync/gateway/SyncGatewayBootstrap.js +93 -0
  201. package/dist/application/sync/gateway/SyncGatewayBootstrap.js.map +1 -0
  202. package/dist/application/sync/gateway/constants.d.ts +65 -0
  203. package/dist/application/sync/gateway/constants.d.ts.map +1 -0
  204. package/dist/application/sync/gateway/constants.js +57 -0
  205. package/dist/application/sync/gateway/constants.js.map +1 -0
  206. package/dist/application/sync/gateway/errors.d.ts +15 -0
  207. package/dist/application/sync/gateway/errors.d.ts.map +1 -0
  208. package/dist/application/sync/gateway/errors.js +16 -0
  209. package/dist/application/sync/gateway/errors.js.map +1 -0
  210. package/dist/application/sync/gateway/syncGateway.d.ts +313 -0
  211. package/dist/application/sync/gateway/syncGateway.d.ts.map +1 -0
  212. package/dist/application/sync/gateway/syncGateway.js +202 -0
  213. package/dist/application/sync/gateway/syncGateway.js.map +1 -0
  214. package/dist/application/sync/gateway/validation.d.ts +17 -0
  215. package/dist/application/sync/gateway/validation.d.ts.map +1 -0
  216. package/dist/application/sync/gateway/validation.js +60 -0
  217. package/dist/application/sync/gateway/validation.js.map +1 -0
  218. package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts +72 -0
  219. package/dist/application/sync/inbound/polling/SimpleSheetPolling.d.ts.map +1 -0
  220. package/dist/application/sync/inbound/polling/SimpleSheetPolling.js +272 -0
  221. package/dist/application/sync/inbound/polling/SimpleSheetPolling.js.map +1 -0
  222. package/dist/application/sync/index.d.ts +16 -0
  223. package/dist/application/sync/index.d.ts.map +1 -0
  224. package/dist/application/sync/index.js +9 -0
  225. package/dist/application/sync/index.js.map +1 -0
  226. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +106 -0
  227. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -0
  228. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +297 -0
  229. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -0
  230. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +100 -0
  231. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -0
  232. package/dist/application/sync/outbound/effects/SyncEffectWorker.js +345 -0
  233. package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -0
  234. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +46 -0
  235. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -0
  236. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +63 -0
  237. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -0
  238. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +20 -0
  239. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -0
  240. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +102 -0
  241. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -0
  242. package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts +19 -0
  243. package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.d.ts.map +1 -0
  244. package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js +32 -0
  245. package/dist/application/sync/outbound/effects/SyncEffectWorkerHelpers.js.map +1 -0
  246. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +30 -0
  247. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -0
  248. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +202 -0
  249. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -0
  250. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts +17 -0
  251. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.d.ts.map +1 -0
  252. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js +80 -0
  253. package/dist/application/sync/outbound/effects/SyncEffectWorkerTiming.js.map +1 -0
  254. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts +13 -0
  255. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -0
  256. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +205 -0
  257. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -0
  258. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts +81 -0
  259. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.d.ts.map +1 -0
  260. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js +245 -0
  261. package/dist/application/sync/outbound/projection/ProjectionEffectFactory.js.map +1 -0
  262. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts +77 -0
  263. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -0
  264. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +518 -0
  265. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -0
  266. package/dist/application/sync/telemetry/syncTiming.d.ts +50 -0
  267. package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -0
  268. package/dist/application/sync/telemetry/syncTiming.js +22 -0
  269. package/dist/application/sync/telemetry/syncTiming.js.map +1 -0
  270. package/dist/domain/conflict/errors.d.ts +42 -0
  271. package/dist/domain/conflict/errors.d.ts.map +1 -0
  272. package/dist/domain/conflict/errors.js +36 -0
  273. package/dist/domain/conflict/errors.js.map +1 -0
  274. package/dist/domain/conflict/index.d.ts +5 -0
  275. package/dist/domain/conflict/index.d.ts.map +1 -0
  276. package/dist/domain/conflict/index.js +3 -0
  277. package/dist/domain/conflict/index.js.map +1 -0
  278. package/dist/domain/conflict/transitions.d.ts +52 -0
  279. package/dist/domain/conflict/transitions.d.ts.map +1 -0
  280. package/dist/domain/conflict/transitions.js +115 -0
  281. package/dist/domain/conflict/transitions.js.map +1 -0
  282. package/dist/domain/errors/evaluation.d.ts +13 -0
  283. package/dist/domain/errors/evaluation.d.ts.map +1 -0
  284. package/dist/domain/errors/evaluation.js +14 -0
  285. package/dist/domain/errors/evaluation.js.map +1 -0
  286. package/dist/domain/errors/identity.d.ts +12 -0
  287. package/dist/domain/errors/identity.d.ts.map +1 -0
  288. package/dist/domain/errors/identity.js +15 -0
  289. package/dist/domain/errors/identity.js.map +1 -0
  290. package/dist/domain/errors/index.d.ts +7 -0
  291. package/dist/domain/errors/index.d.ts.map +1 -0
  292. package/dist/domain/errors/index.js +5 -0
  293. package/dist/domain/errors/index.js.map +1 -0
  294. package/dist/domain/errors/stableEncoding.d.ts +7 -0
  295. package/dist/domain/errors/stableEncoding.d.ts.map +1 -0
  296. package/dist/domain/errors/stableEncoding.js +8 -0
  297. package/dist/domain/errors/stableEncoding.js.map +1 -0
  298. package/dist/domain/errors/types.d.ts +20 -0
  299. package/dist/domain/errors/types.d.ts.map +1 -0
  300. package/dist/domain/errors/types.js +18 -0
  301. package/dist/domain/errors/types.js.map +1 -0
  302. package/dist/domain/evaluate/constants.d.ts +55 -0
  303. package/dist/domain/evaluate/constants.d.ts.map +1 -0
  304. package/dist/domain/evaluate/constants.js +41 -0
  305. package/dist/domain/evaluate/constants.js.map +1 -0
  306. package/dist/domain/evaluate/contracts.d.ts +125 -0
  307. package/dist/domain/evaluate/contracts.d.ts.map +1 -0
  308. package/dist/domain/evaluate/contracts.js +8 -0
  309. package/dist/domain/evaluate/contracts.js.map +1 -0
  310. package/dist/domain/evaluate/evaluateBatch.d.ts +11 -0
  311. package/dist/domain/evaluate/evaluateBatch.d.ts.map +1 -0
  312. package/dist/domain/evaluate/evaluateBatch.js +91 -0
  313. package/dist/domain/evaluate/evaluateBatch.js.map +1 -0
  314. package/dist/domain/evaluate/fieldEvaluation.d.ts +14 -0
  315. package/dist/domain/evaluate/fieldEvaluation.d.ts.map +1 -0
  316. package/dist/domain/evaluate/fieldEvaluation.js +133 -0
  317. package/dist/domain/evaluate/fieldEvaluation.js.map +1 -0
  318. package/dist/domain/evaluate/identity.d.ts +21 -0
  319. package/dist/domain/evaluate/identity.d.ts.map +1 -0
  320. package/dist/domain/evaluate/identity.js +72 -0
  321. package/dist/domain/evaluate/identity.js.map +1 -0
  322. package/dist/domain/evaluate/index.d.ts +4 -0
  323. package/dist/domain/evaluate/index.d.ts.map +1 -0
  324. package/dist/domain/evaluate/index.js +3 -0
  325. package/dist/domain/evaluate/index.js.map +1 -0
  326. package/dist/domain/evaluate/preconditions.d.ts +30 -0
  327. package/dist/domain/evaluate/preconditions.d.ts.map +1 -0
  328. package/dist/domain/evaluate/preconditions.js +389 -0
  329. package/dist/domain/evaluate/preconditions.js.map +1 -0
  330. package/dist/domain/evaluate/quarantine.d.ts +15 -0
  331. package/dist/domain/evaluate/quarantine.d.ts.map +1 -0
  332. package/dist/domain/evaluate/quarantine.js +185 -0
  333. package/dist/domain/evaluate/quarantine.js.map +1 -0
  334. package/dist/domain/index.d.ts +7 -0
  335. package/dist/domain/index.d.ts.map +1 -0
  336. package/dist/domain/index.js +7 -0
  337. package/dist/domain/index.js.map +1 -0
  338. package/dist/domain/model/constants.d.ts +73 -0
  339. package/dist/domain/model/constants.d.ts.map +1 -0
  340. package/dist/domain/model/constants.js +59 -0
  341. package/dist/domain/model/constants.js.map +1 -0
  342. package/dist/domain/model/index.d.ts +3 -0
  343. package/dist/domain/model/index.d.ts.map +1 -0
  344. package/dist/domain/model/index.js +2 -0
  345. package/dist/domain/model/index.js.map +1 -0
  346. package/dist/domain/model/types.d.ts +330 -0
  347. package/dist/domain/model/types.d.ts.map +1 -0
  348. package/dist/domain/model/types.js +8 -0
  349. package/dist/domain/model/types.js.map +1 -0
  350. package/dist/index.d.ts +17 -0
  351. package/dist/index.d.ts.map +1 -0
  352. package/dist/index.js +11 -0
  353. package/dist/index.js.map +1 -0
  354. package/dist/infrastructure/index.d.ts +3 -0
  355. package/dist/infrastructure/index.d.ts.map +1 -0
  356. package/dist/infrastructure/index.js +3 -0
  357. package/dist/infrastructure/index.js.map +1 -0
  358. package/dist/infrastructure/storage/constants.d.ts +4 -0
  359. package/dist/infrastructure/storage/constants.d.ts.map +1 -0
  360. package/dist/infrastructure/storage/constants.js +4 -0
  361. package/dist/infrastructure/storage/constants.js.map +1 -0
  362. package/dist/infrastructure/storage/errors.d.ts +55 -0
  363. package/dist/infrastructure/storage/errors.d.ts.map +1 -0
  364. package/dist/infrastructure/storage/errors.js +58 -0
  365. package/dist/infrastructure/storage/errors.js.map +1 -0
  366. package/dist/infrastructure/storage/index.d.ts +23 -0
  367. package/dist/infrastructure/storage/index.d.ts.map +1 -0
  368. package/dist/infrastructure/storage/index.js +13 -0
  369. package/dist/infrastructure/storage/index.js.map +1 -0
  370. package/dist/infrastructure/storage/recovery/restoreRecovery.d.ts +64 -0
  371. package/dist/infrastructure/storage/recovery/restoreRecovery.d.ts.map +1 -0
  372. package/dist/infrastructure/storage/recovery/restoreRecovery.js +148 -0
  373. package/dist/infrastructure/storage/recovery/restoreRecovery.js.map +1 -0
  374. package/dist/infrastructure/storage/sqlite/schema.d.ts +49 -0
  375. package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -0
  376. package/dist/infrastructure/storage/sqlite/schema.js +529 -0
  377. package/dist/infrastructure/storage/sqlite/schema.js.map +1 -0
  378. package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts +5 -0
  379. package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts.map +1 -0
  380. package/dist/infrastructure/storage/sqlite/schemaTypes.js +2 -0
  381. package/dist/infrastructure/storage/sqlite/schemaTypes.js.map +1 -0
  382. package/dist/infrastructure/storage/sqlite/sqlScript.d.ts +9 -0
  383. package/dist/infrastructure/storage/sqlite/sqlScript.d.ts.map +1 -0
  384. package/dist/infrastructure/storage/sqlite/sqlScript.js +122 -0
  385. package/dist/infrastructure/storage/sqlite/sqlScript.js.map +1 -0
  386. package/dist/infrastructure/storage/sqlite/sqlState.d.ts +6 -0
  387. package/dist/infrastructure/storage/sqlite/sqlState.d.ts.map +1 -0
  388. package/dist/infrastructure/storage/sqlite/sqlState.js +14 -0
  389. package/dist/infrastructure/storage/sqlite/sqlState.js.map +1 -0
  390. package/dist/infrastructure/storage/sqlite/sqlTransaction.d.ts +6 -0
  391. package/dist/infrastructure/storage/sqlite/sqlTransaction.d.ts.map +1 -0
  392. package/dist/infrastructure/storage/sqlite/sqlTransaction.js +24 -0
  393. package/dist/infrastructure/storage/sqlite/sqlTransaction.js.map +1 -0
  394. package/dist/infrastructure/storage/sqlite/sqliteBridge.d.ts +44 -0
  395. package/dist/infrastructure/storage/sqlite/sqliteBridge.d.ts.map +1 -0
  396. package/dist/infrastructure/storage/sqlite/sqliteBridge.js +66 -0
  397. package/dist/infrastructure/storage/sqlite/sqliteBridge.js.map +1 -0
  398. package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts +101 -0
  399. package/dist/infrastructure/storage/state/canonical/canonicalCommit.d.ts.map +1 -0
  400. package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +417 -0
  401. package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -0
  402. package/dist/infrastructure/storage/state/observation/observationAudit.d.ts +16 -0
  403. package/dist/infrastructure/storage/state/observation/observationAudit.d.ts.map +1 -0
  404. package/dist/infrastructure/storage/state/observation/observationAudit.js +85 -0
  405. package/dist/infrastructure/storage/state/observation/observationAudit.js.map +1 -0
  406. package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts +31 -0
  407. package/dist/infrastructure/storage/state/observation/observationCanonical.d.ts.map +1 -0
  408. package/dist/infrastructure/storage/state/observation/observationCanonical.js +439 -0
  409. package/dist/infrastructure/storage/state/observation/observationCanonical.js.map +1 -0
  410. package/dist/infrastructure/storage/state/observation/observationConstants.d.ts +53 -0
  411. package/dist/infrastructure/storage/state/observation/observationConstants.d.ts.map +1 -0
  412. package/dist/infrastructure/storage/state/observation/observationConstants.js +41 -0
  413. package/dist/infrastructure/storage/state/observation/observationConstants.js.map +1 -0
  414. package/dist/infrastructure/storage/state/observation/observationLedger.d.ts +49 -0
  415. package/dist/infrastructure/storage/state/observation/observationLedger.d.ts.map +1 -0
  416. package/dist/infrastructure/storage/state/observation/observationLedger.js +537 -0
  417. package/dist/infrastructure/storage/state/observation/observationLedger.js.map +1 -0
  418. package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts +15 -0
  419. package/dist/infrastructure/storage/state/observation/observationQuarantine.d.ts.map +1 -0
  420. package/dist/infrastructure/storage/state/observation/observationQuarantine.js +100 -0
  421. package/dist/infrastructure/storage/state/observation/observationQuarantine.js.map +1 -0
  422. package/dist/infrastructure/storage/state/observation/observationTypes.d.ts +124 -0
  423. package/dist/infrastructure/storage/state/observation/observationTypes.d.ts.map +1 -0
  424. package/dist/infrastructure/storage/state/observation/observationTypes.js +13 -0
  425. package/dist/infrastructure/storage/state/observation/observationTypes.js.map +1 -0
  426. package/dist/infrastructure/storage/state/observation/observationValidation.d.ts +28 -0
  427. package/dist/infrastructure/storage/state/observation/observationValidation.d.ts.map +1 -0
  428. package/dist/infrastructure/storage/state/observation/observationValidation.js +223 -0
  429. package/dist/infrastructure/storage/state/observation/observationValidation.js.map +1 -0
  430. package/dist/infrastructure/storage/state/observation/observationWriter.d.ts +28 -0
  431. package/dist/infrastructure/storage/state/observation/observationWriter.d.ts.map +1 -0
  432. package/dist/infrastructure/storage/state/observation/observationWriter.js +293 -0
  433. package/dist/infrastructure/storage/state/observation/observationWriter.js.map +1 -0
  434. package/dist/infrastructure/storage/state/readonly/readOnlyObservation.d.ts +58 -0
  435. package/dist/infrastructure/storage/state/readonly/readOnlyObservation.d.ts.map +1 -0
  436. package/dist/infrastructure/storage/state/readonly/readOnlyObservation.js +195 -0
  437. package/dist/infrastructure/storage/state/readonly/readOnlyObservation.js.map +1 -0
  438. package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts +31 -0
  439. package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -0
  440. package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +563 -0
  441. package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -0
  442. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts +118 -0
  443. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts.map +1 -0
  444. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js +18 -0
  445. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js.map +1 -0
  446. package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts +23 -0
  447. package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.d.ts.map +1 -0
  448. package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js +84 -0
  449. package/dist/infrastructure/storage/state/resolution/resolutionWriterHelpers.js.map +1 -0
  450. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +16 -0
  451. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -0
  452. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +97 -0
  453. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -0
  454. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +137 -0
  455. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -0
  456. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +396 -0
  457. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -0
  458. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +101 -0
  459. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -0
  460. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +9 -0
  461. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -0
  462. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +21 -0
  463. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -0
  464. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +184 -0
  465. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -0
  466. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +25 -0
  467. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +1 -0
  468. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +158 -0
  469. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +1 -0
  470. package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts +69 -0
  471. package/dist/infrastructure/storage/sync/shared/syncRegistry.d.ts.map +1 -0
  472. package/dist/infrastructure/storage/sync/shared/syncRegistry.js +272 -0
  473. package/dist/infrastructure/storage/sync/shared/syncRegistry.js.map +1 -0
  474. package/dist/infrastructure/storage/sync/shared/writerLease.d.ts +90 -0
  475. package/dist/infrastructure/storage/sync/shared/writerLease.d.ts.map +1 -0
  476. package/dist/infrastructure/storage/sync/shared/writerLease.js +282 -0
  477. package/dist/infrastructure/storage/sync/shared/writerLease.js.map +1 -0
  478. package/dist/shared/constants.d.ts +8 -0
  479. package/dist/shared/constants.d.ts.map +1 -0
  480. package/dist/shared/constants.js +8 -0
  481. package/dist/shared/constants.js.map +1 -0
  482. package/dist/shared/encoding/constants.d.ts +45 -0
  483. package/dist/shared/encoding/constants.d.ts.map +1 -0
  484. package/dist/shared/encoding/constants.js +37 -0
  485. package/dist/shared/encoding/constants.js.map +1 -0
  486. package/dist/shared/encoding/index.d.ts +6 -0
  487. package/dist/shared/encoding/index.d.ts.map +1 -0
  488. package/dist/shared/encoding/index.js +4 -0
  489. package/dist/shared/encoding/index.js.map +1 -0
  490. package/dist/shared/encoding/stableEncode.d.ts +34 -0
  491. package/dist/shared/encoding/stableEncode.d.ts.map +1 -0
  492. package/dist/shared/encoding/stableEncode.js +210 -0
  493. package/dist/shared/encoding/stableEncode.js.map +1 -0
  494. package/dist/shared/encoding/typeGuards.d.ts +15 -0
  495. package/dist/shared/encoding/typeGuards.d.ts.map +1 -0
  496. package/dist/shared/encoding/typeGuards.js +11 -0
  497. package/dist/shared/encoding/typeGuards.js.map +1 -0
  498. package/dist/shared/encoding/types.d.ts +52 -0
  499. package/dist/shared/encoding/types.d.ts.map +1 -0
  500. package/dist/shared/encoding/types.js +8 -0
  501. package/dist/shared/encoding/types.js.map +1 -0
  502. package/dist/shared/index.d.ts +6 -0
  503. package/dist/shared/index.d.ts.map +1 -0
  504. package/dist/shared/index.js +6 -0
  505. package/dist/shared/index.js.map +1 -0
  506. package/dist/shared/state/constants.d.ts +16 -0
  507. package/dist/shared/state/constants.d.ts.map +1 -0
  508. package/dist/shared/state/constants.js +16 -0
  509. package/dist/shared/state/constants.js.map +1 -0
  510. package/dist/shared/state/index.d.ts +3 -0
  511. package/dist/shared/state/index.d.ts.map +1 -0
  512. package/dist/shared/state/index.js +2 -0
  513. package/dist/shared/state/index.js.map +1 -0
  514. package/dist/shared/state/types.d.ts +23 -0
  515. package/dist/shared/state/types.d.ts.map +1 -0
  516. package/dist/shared/state/types.js +2 -0
  517. package/dist/shared/state/types.js.map +1 -0
  518. package/dist/shared/validation.d.ts +9 -0
  519. package/dist/shared/validation.d.ts.map +1 -0
  520. package/dist/shared/validation.js +25 -0
  521. package/dist/shared/validation.js.map +1 -0
  522. package/docs/architecture.md +72 -0
  523. package/docs/code-guidelines.md +256 -0
  524. package/docs/development.md +48 -0
  525. package/docs/git-workflow.md +224 -0
  526. package/docs/mikro-orm-adapter-spike.md +248 -0
  527. package/docs/quick-start.md +102 -0
  528. package/docs/sql-layer-plan.md +59 -0
  529. package/docs/sync-bulk-write-benchmark.md +1036 -0
  530. package/docs/sync-observability.md +71 -0
  531. package/docs/task-queue-write-model.md +640 -0
  532. package/docs/typed-sheets-mvp-scope-2026-06-29.md +490 -0
  533. package/docs/typed-sheets-plan.md +417 -0
  534. package/docs/write-and-synchronization-flow.md +71 -0
  535. package/package.json +68 -0
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Fenced observation-to-storage composer for the SQLite-authoritative phase.
3
+ *
4
+ * It persists one already-normalized, already-evaluated row per immediate
5
+ * transaction. The focused modules it calls own validation, receipt/event
6
+ * ledgering, canonical state, conflicts, and quarantine evidence.
7
+ */
8
+ import { APPLICABILITY_KINDS, LOOKUP_RESULT_KINDS, PRESENCE_KINDS, } from "../../../../domain/index.js";
9
+ import { ROW_OUTCOMES } from "../../../../domain/evaluate/constants.js";
10
+ import { EMPTY_ARRAY_LENGTH_ZERO, EXPECTED_SINGLE_ROW_CHANGE_COUNT } from "../../constants.js";
11
+ import { STORAGE_ERROR_CODES, StorageError } from "../../errors.js";
12
+ import { appendPendingEffects, appendPendingEffectsWithSql, } from "../../sync/outbound/effectOutbox.js";
13
+ import { withImmediateTransaction } from "../../sqlite/sqliteBridge.js";
14
+ import { withSqlSavepoint } from "../../sqlite/sqlTransaction.js";
15
+ import { isFencingValid, isFencingValidWithSql, } from "../../sync/shared/writerLease.js";
16
+ import { applyCanonicalMutation, applyCanonicalMutationWithSql, persistConflictAttempts, persistConflictAttemptsWithSql, requirePersistedOutcome, } from "./observationCanonical.js";
17
+ import { appendObservation, appendObservationWithSql, completeObservation, completeObservationWithSql, createEvent, createEventWithSql, findEventByKey, findEventByKeyWithSql, findMatchingCandidateEventId, findMatchingCandidateEventIdWithSql, persistObservedHashes, persistObservedHashesWithSql, requireKnownBinding, requireKnownBindingWithSql, } from "./observationLedger.js";
18
+ import { persistIntegrityQuarantine, persistIntegrityQuarantineWithSql, persistQuarantine, persistQuarantineWithSql, } from "./observationQuarantine.js";
19
+ import { OBSERVATION_APPEND_RESULT_KINDS, OBSERVATION_COMPLETION_STATES, OBSERVATION_DUPLICATE_REASONS, OBSERVATION_INTEGRITY_DISCRIMINATORS, OBSERVATION_WRITE_RESULT_KINDS, } from "./observationConstants.js";
20
+ import { CanonicalStaleError, FenceLostError, } from "./observationTypes.js";
21
+ import { ensureEffectsTargetRegistered, ensureEffectsTargetRegisteredWithSql, ensureRegisteredProjection, ensureRegisteredProjectionWithSql, requireBatchRow, validatePersistObservedRowInput, } from "./observationValidation.js";
22
+ const UPDATE_EVENT_STATUS_SQL = `
23
+ UPDATE event_log
24
+ SET status = ?
25
+ WHERE event_id = ?
26
+ `;
27
+ const ABSENT_EVENT_ID = { kind: PRESENCE_KINDS.ABSENT };
28
+ /**
29
+ * Persists one normalized row outcome at the writer-RPC boundary.
30
+ *
31
+ * No Sheet call is made here. A stale fence or canonical CAS rolls back the
32
+ * whole transaction so the adapter can re-read and submit again.
33
+ */
34
+ export function persistObservedRow(db, fence, input) {
35
+ validatePersistObservedRowInput(input);
36
+ if (!isFencingValid(db, fence)) {
37
+ return { kind: OBSERVATION_WRITE_RESULT_KINDS.FENCED_OUT };
38
+ }
39
+ try {
40
+ return withImmediateTransaction(db, () => {
41
+ assertCurrentFence(db, fence);
42
+ const row = requireBatchRow(input.batch, input.rowIndex);
43
+ ensureRegisteredProjection(db, input.batch, input.physicalSheetId);
44
+ ensureEffectsTargetRegistered(db, input.batch.sheetId, input.effects);
45
+ if (input.canonical.kind === PRESENCE_KINDS.PRESENT) {
46
+ ensureEffectsTargetRegistered(db, input.batch.sheetId, input.canonical.value.commit.effects);
47
+ }
48
+ const observation = appendObservation(db, input.batch, input.physicalSheetId, input.observation);
49
+ if (observation.kind === OBSERVATION_APPEND_RESULT_KINDS.DUPLICATE) {
50
+ return {
51
+ kind: OBSERVATION_WRITE_RESULT_KINDS.DUPLICATE,
52
+ observationId: input.observation.observationId,
53
+ eventId: observation.eventId,
54
+ reason: OBSERVATION_DUPLICATE_REASONS.OBSERVATION,
55
+ };
56
+ }
57
+ if (observation.kind === OBSERVATION_APPEND_RESULT_KINDS.INTEGRITY_COLLISION) {
58
+ const quarantineId = persistIntegrityQuarantine(db, input, row, ABSENT_EVENT_ID, OBSERVATION_INTEGRITY_DISCRIMINATORS.OBSERVATION_KEY_PAYLOAD_MISMATCH);
59
+ return completeQuarantine(db, fence, input, quarantineId, ABSENT_EVENT_ID, []);
60
+ }
61
+ if (input.event.kind === PRESENCE_KINDS.ABSENT) {
62
+ if (input.evaluation.outcome !== ROW_OUTCOMES.QUARANTINE) {
63
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "an unresolved observation must have a core quarantine plan");
64
+ }
65
+ const quarantineId = persistQuarantine(db, input, input.evaluation.quarantine, ABSENT_EVENT_ID);
66
+ return completeQuarantine(db, fence, input, quarantineId, ABSENT_EVENT_ID, input.effects);
67
+ }
68
+ const binding = requireKnownBinding(db, input.batch.sheetId, row.rowBindingId);
69
+ const matchingCandidateEventId = findMatchingCandidateEventId(db, input, row, binding);
70
+ if (matchingCandidateEventId.kind === LOOKUP_RESULT_KINDS.FOUND) {
71
+ completeObservation(db, input.batch.sheetId, input.observation, presentEventId(matchingCandidateEventId.value), OBSERVATION_COMPLETION_STATES.DUPLICATE);
72
+ return {
73
+ kind: OBSERVATION_WRITE_RESULT_KINDS.DUPLICATE,
74
+ observationId: input.observation.observationId,
75
+ eventId: presentEventId(matchingCandidateEventId.value),
76
+ reason: OBSERVATION_DUPLICATE_REASONS.CANDIDATE,
77
+ };
78
+ }
79
+ const eventIdentity = input.event.value;
80
+ const existingEvent = findEventByKey(db, input.batch.sheetId, eventIdentity.eventKey);
81
+ if (existingEvent.kind === LOOKUP_RESULT_KINDS.FOUND) {
82
+ if (existingEvent.value.payload_hash === eventIdentity.payloadHash) {
83
+ completeObservation(db, input.batch.sheetId, input.observation, presentEventId(existingEvent.value.event_id), OBSERVATION_COMPLETION_STATES.DUPLICATE);
84
+ return {
85
+ kind: OBSERVATION_WRITE_RESULT_KINDS.DUPLICATE,
86
+ observationId: input.observation.observationId,
87
+ eventId: presentEventId(existingEvent.value.event_id),
88
+ reason: OBSERVATION_DUPLICATE_REASONS.EVENT,
89
+ };
90
+ }
91
+ const quarantineId = persistIntegrityQuarantine(db, input, row, ABSENT_EVENT_ID, OBSERVATION_INTEGRITY_DISCRIMINATORS.EVENT_KEY_PAYLOAD_MISMATCH);
92
+ return completeQuarantine(db, fence, input, quarantineId, ABSENT_EVENT_ID, []);
93
+ }
94
+ const createdEvent = createEvent(db, input, row);
95
+ persistObservedHashes(db, input, row);
96
+ if (input.evaluation.outcome === ROW_OUTCOMES.QUARANTINE) {
97
+ const quarantineId = persistQuarantine(db, input, input.evaluation.quarantine, presentEventId(createdEvent.eventId));
98
+ return completeQuarantine(db, fence, input, quarantineId, presentEventId(createdEvent.eventId), input.effects);
99
+ }
100
+ const canonicalResult = applyCanonicalMutation(db, fence, input, row, binding);
101
+ const conflictIds = persistConflictAttempts(db, input, row, binding, createdEvent.eventId);
102
+ appendAdditionalEffectsOrThrow(db, fence, input.effects);
103
+ const eventStatus = input.evaluation.conflicts.length === EMPTY_ARRAY_LENGTH_ZERO
104
+ ? ROW_OUTCOMES.ACCEPTED
105
+ : ROW_OUTCOMES.CONFLICT;
106
+ const statusResult = db.prepare(UPDATE_EVENT_STATUS_SQL)
107
+ .run(eventStatus, createdEvent.eventId);
108
+ if (statusResult.changes !== EXPECTED_SINGLE_ROW_CHANGE_COUNT) {
109
+ throw new StorageError(STORAGE_ERROR_CODES.OBSERVATION_STORAGE_INCONSISTENT, `could not complete event ${createdEvent.eventId}`);
110
+ }
111
+ completeObservation(db, input.batch.sheetId, input.observation, presentEventId(createdEvent.eventId), OBSERVATION_COMPLETION_STATES.EVALUATED);
112
+ const entityRevision = canonicalResult.kind === PRESENCE_KINDS.PRESENT
113
+ ? { kind: APPLICABILITY_KINDS.APPLICABLE, value: canonicalResult.value.entityRevision }
114
+ : { kind: APPLICABILITY_KINDS.NOT_APPLICABLE };
115
+ return {
116
+ kind: OBSERVATION_WRITE_RESULT_KINDS.PERSISTED,
117
+ observationId: input.observation.observationId,
118
+ eventId: createdEvent.eventId,
119
+ eventSequence: createdEvent.eventSequence,
120
+ outcome: requirePersistedOutcome(input.evaluation),
121
+ entityRevision,
122
+ conflictIds,
123
+ };
124
+ });
125
+ }
126
+ catch (error) {
127
+ if (error instanceof FenceLostError) {
128
+ return { kind: OBSERVATION_WRITE_RESULT_KINDS.FENCED_OUT };
129
+ }
130
+ if (error instanceof CanonicalStaleError) {
131
+ return { kind: OBSERVATION_WRITE_RESULT_KINDS.STALE };
132
+ }
133
+ throw error;
134
+ }
135
+ }
136
+ /**
137
+ * Persists one normalized row outcome inside an already-active async SQL
138
+ * transaction. It mirrors the legacy writer semantics while allowing the
139
+ * caller to keep a user entity mutation and its sync records atomic.
140
+ */
141
+ export async function persistObservedRowWithSql(sql, fence, input) {
142
+ validatePersistObservedRowInput(input);
143
+ if (!(await isFencingValidWithSql(sql, fence))) {
144
+ return { kind: OBSERVATION_WRITE_RESULT_KINDS.FENCED_OUT };
145
+ }
146
+ try {
147
+ return await withSqlSavepoint(sql, "persist_observed_row", async () => {
148
+ await assertCurrentFenceWithSql(sql, fence);
149
+ const row = requireBatchRow(input.batch, input.rowIndex);
150
+ await ensureRegisteredProjectionWithSql(sql, input.batch, input.physicalSheetId);
151
+ await ensureEffectsTargetRegisteredWithSql(sql, input.batch.sheetId, input.effects);
152
+ if (input.canonical.kind === PRESENCE_KINDS.PRESENT) {
153
+ await ensureEffectsTargetRegisteredWithSql(sql, input.batch.sheetId, input.canonical.value.commit.effects);
154
+ }
155
+ const observation = await appendObservationWithSql(sql, input.batch, input.physicalSheetId, input.observation);
156
+ if (observation.kind === OBSERVATION_APPEND_RESULT_KINDS.DUPLICATE) {
157
+ return {
158
+ kind: OBSERVATION_WRITE_RESULT_KINDS.DUPLICATE,
159
+ observationId: input.observation.observationId,
160
+ eventId: observation.eventId,
161
+ reason: OBSERVATION_DUPLICATE_REASONS.OBSERVATION,
162
+ };
163
+ }
164
+ if (observation.kind === OBSERVATION_APPEND_RESULT_KINDS.INTEGRITY_COLLISION) {
165
+ const quarantineId = await persistIntegrityQuarantineWithSql(sql, input, row, ABSENT_EVENT_ID, OBSERVATION_INTEGRITY_DISCRIMINATORS.OBSERVATION_KEY_PAYLOAD_MISMATCH);
166
+ return completeQuarantineWithSql(sql, fence, input, quarantineId, ABSENT_EVENT_ID, []);
167
+ }
168
+ if (input.event.kind === PRESENCE_KINDS.ABSENT) {
169
+ if (input.evaluation.outcome !== ROW_OUTCOMES.QUARANTINE) {
170
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "an unresolved observation must have a core quarantine plan");
171
+ }
172
+ const quarantineId = await persistQuarantineWithSql(sql, input, input.evaluation.quarantine, ABSENT_EVENT_ID);
173
+ return completeQuarantineWithSql(sql, fence, input, quarantineId, ABSENT_EVENT_ID, input.effects);
174
+ }
175
+ const binding = await requireKnownBindingWithSql(sql, input.batch.sheetId, row.rowBindingId);
176
+ const matchingCandidateEventId = await findMatchingCandidateEventIdWithSql(sql, input, row, binding);
177
+ if (matchingCandidateEventId.kind === LOOKUP_RESULT_KINDS.FOUND) {
178
+ await completeObservationWithSql(sql, input.batch.sheetId, input.observation, presentEventId(matchingCandidateEventId.value), OBSERVATION_COMPLETION_STATES.DUPLICATE);
179
+ return {
180
+ kind: OBSERVATION_WRITE_RESULT_KINDS.DUPLICATE,
181
+ observationId: input.observation.observationId,
182
+ eventId: presentEventId(matchingCandidateEventId.value),
183
+ reason: OBSERVATION_DUPLICATE_REASONS.CANDIDATE,
184
+ };
185
+ }
186
+ const eventIdentity = input.event.value;
187
+ const existingEvent = await findEventByKeyWithSql(sql, input.batch.sheetId, eventIdentity.eventKey);
188
+ if (existingEvent.kind === LOOKUP_RESULT_KINDS.FOUND) {
189
+ if (existingEvent.value.payload_hash === eventIdentity.payloadHash) {
190
+ await completeObservationWithSql(sql, input.batch.sheetId, input.observation, presentEventId(existingEvent.value.event_id), OBSERVATION_COMPLETION_STATES.DUPLICATE);
191
+ return {
192
+ kind: OBSERVATION_WRITE_RESULT_KINDS.DUPLICATE,
193
+ observationId: input.observation.observationId,
194
+ eventId: presentEventId(existingEvent.value.event_id),
195
+ reason: OBSERVATION_DUPLICATE_REASONS.EVENT,
196
+ };
197
+ }
198
+ const quarantineId = await persistIntegrityQuarantineWithSql(sql, input, row, ABSENT_EVENT_ID, OBSERVATION_INTEGRITY_DISCRIMINATORS.EVENT_KEY_PAYLOAD_MISMATCH);
199
+ return completeQuarantineWithSql(sql, fence, input, quarantineId, ABSENT_EVENT_ID, []);
200
+ }
201
+ const createdEvent = await createEventWithSql(sql, input, row);
202
+ await persistObservedHashesWithSql(sql, input, row);
203
+ if (input.evaluation.outcome === ROW_OUTCOMES.QUARANTINE) {
204
+ const quarantineId = await persistQuarantineWithSql(sql, input, input.evaluation.quarantine, presentEventId(createdEvent.eventId));
205
+ return completeQuarantineWithSql(sql, fence, input, quarantineId, presentEventId(createdEvent.eventId), input.effects);
206
+ }
207
+ const canonicalResult = await applyCanonicalMutationWithSql(sql, fence, input, row, binding);
208
+ const conflictIds = await persistConflictAttemptsWithSql(sql, input, row, binding, createdEvent.eventId);
209
+ await appendAdditionalEffectsOrThrowWithSql(sql, fence, input.effects);
210
+ const eventStatus = input.evaluation.conflicts.length === EMPTY_ARRAY_LENGTH_ZERO
211
+ ? ROW_OUTCOMES.ACCEPTED
212
+ : ROW_OUTCOMES.CONFLICT;
213
+ const statusResult = await sql.run(UPDATE_EVENT_STATUS_SQL, [
214
+ eventStatus,
215
+ createdEvent.eventId,
216
+ ]);
217
+ if (statusResult.changes !== EXPECTED_SINGLE_ROW_CHANGE_COUNT) {
218
+ throw new StorageError(STORAGE_ERROR_CODES.OBSERVATION_STORAGE_INCONSISTENT, `could not complete event ${createdEvent.eventId}`);
219
+ }
220
+ await completeObservationWithSql(sql, input.batch.sheetId, input.observation, presentEventId(createdEvent.eventId), OBSERVATION_COMPLETION_STATES.EVALUATED);
221
+ const entityRevision = canonicalResult.kind === PRESENCE_KINDS.PRESENT
222
+ ? { kind: APPLICABILITY_KINDS.APPLICABLE, value: canonicalResult.value.entityRevision }
223
+ : { kind: APPLICABILITY_KINDS.NOT_APPLICABLE };
224
+ return {
225
+ kind: OBSERVATION_WRITE_RESULT_KINDS.PERSISTED,
226
+ observationId: input.observation.observationId,
227
+ eventId: createdEvent.eventId,
228
+ eventSequence: createdEvent.eventSequence,
229
+ outcome: requirePersistedOutcome(input.evaluation),
230
+ entityRevision,
231
+ conflictIds,
232
+ };
233
+ });
234
+ }
235
+ catch (error) {
236
+ if (error instanceof FenceLostError) {
237
+ return { kind: OBSERVATION_WRITE_RESULT_KINDS.FENCED_OUT };
238
+ }
239
+ if (error instanceof CanonicalStaleError) {
240
+ return { kind: OBSERVATION_WRITE_RESULT_KINDS.STALE };
241
+ }
242
+ throw error;
243
+ }
244
+ }
245
+ /** Persists one observed row in an adapter-owned transaction. */
246
+ export async function persistObservedRowWithAdapter(storage, fence, input) {
247
+ return storage.transaction(({ sql }) => persistObservedRowWithSql(sql, fence, input));
248
+ }
249
+ /** Persists the remaining effects and closes a quarantined observation receipt. */
250
+ function completeQuarantine(db, fence, input, quarantineId, eventId, effects) {
251
+ appendAdditionalEffectsOrThrow(db, fence, effects);
252
+ completeObservation(db, input.batch.sheetId, input.observation, eventId, OBSERVATION_COMPLETION_STATES.QUARANTINED);
253
+ return {
254
+ kind: OBSERVATION_WRITE_RESULT_KINDS.QUARANTINED,
255
+ observationId: input.observation.observationId,
256
+ eventId,
257
+ quarantineId,
258
+ };
259
+ }
260
+ /** Appends quarantine effects and closes the receipt through active async SQL. */
261
+ async function completeQuarantineWithSql(sql, fence, input, quarantineId, eventId, effects) {
262
+ await appendAdditionalEffectsOrThrowWithSql(sql, fence, effects);
263
+ await completeObservationWithSql(sql, input.batch.sheetId, input.observation, eventId, OBSERVATION_COMPLETION_STATES.QUARANTINED);
264
+ return {
265
+ kind: OBSERVATION_WRITE_RESULT_KINDS.QUARANTINED,
266
+ observationId: input.observation.observationId,
267
+ eventId,
268
+ quarantineId,
269
+ };
270
+ }
271
+ function appendAdditionalEffectsOrThrow(db, fence, effects) {
272
+ if (!appendPendingEffects(db, fence, effects))
273
+ throw new FenceLostError();
274
+ }
275
+ /** Appends additional effects through active async SQL or signals a lost fence. */
276
+ async function appendAdditionalEffectsOrThrowWithSql(sql, fence, effects) {
277
+ if (!(await appendPendingEffectsWithSql(sql, fence, effects)))
278
+ throw new FenceLostError();
279
+ }
280
+ /** Wraps a newly created event ID in the storage presence contract. */
281
+ function presentEventId(eventId) {
282
+ return { kind: PRESENCE_KINDS.PRESENT, value: eventId };
283
+ }
284
+ function assertCurrentFence(db, fence) {
285
+ if (!isFencingValid(db, fence))
286
+ throw new FenceLostError();
287
+ }
288
+ /** Requires the writer fence to remain current within the active async transaction. */
289
+ async function assertCurrentFenceWithSql(sql, fence) {
290
+ if (!(await isFencingValidWithSql(sql, fence)))
291
+ throw new FenceLostError();
292
+ }
293
+ //# sourceMappingURL=observationWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observationWriter.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/observation/observationWriter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Raw snapshot-ingestion ledger for the read-only Sheet integration phase.
3
+ *
4
+ * It persists authenticated snapshot evidence without creating a canonical
5
+ * event or a Sheet effect. Later evaluator work can consume the pending
6
+ * observation receipt; a no-write shadow pass therefore never becomes a
7
+ * hidden projection writer.
8
+ */
9
+ import { type DatabaseSyncLike } from "../../sqlite/sqliteBridge.js";
10
+ import { type FencingContext } from "../../sync/shared/writerLease.js";
11
+ import type { Presence } from "../../../../shared/state/types.js";
12
+ import type { SqlExecutor, SqlStorageAdapter } from "../../../../adapter/persistence/contracts/sql.js";
13
+ /** One normalized snapshot evidence record captured from a registered projection. */
14
+ export interface ReadOnlySnapshotObservationInput {
15
+ readonly observationId: string;
16
+ readonly physicalSheetId: string;
17
+ readonly logicalSheetId: string;
18
+ readonly observationKey: string;
19
+ readonly payloadJson: string;
20
+ readonly payloadHash: string;
21
+ readonly source: "polling" | "onEdit";
22
+ readonly detectedAt: number;
23
+ readonly receivedAt: number;
24
+ readonly ingressActorId: string;
25
+ readonly editorActorId: Presence<string>;
26
+ readonly editorActorSource: "google_active_user" | "unavailable";
27
+ }
28
+ /** Durable outcome of appending raw, not-yet-evaluated snapshot evidence. */
29
+ export type ReadOnlySnapshotObservationResult = {
30
+ readonly kind: "fenced_out";
31
+ } | {
32
+ readonly kind: "captured";
33
+ readonly observationId: string;
34
+ } | {
35
+ readonly kind: "duplicate";
36
+ readonly observationId: string;
37
+ } | {
38
+ readonly kind: "integrity_collision";
39
+ readonly observationId: string;
40
+ };
41
+ /**
42
+ * Appends a snapshot occurrence and maintains its representative receipt.
43
+ *
44
+ * The same observation key/payload is retained as another occurrence for
45
+ * audit; a different payload under the same key is never silently deduped.
46
+ */
47
+ export declare function persistReadOnlySnapshotObservation(db: DatabaseSyncLike, fence: FencingContext, input: ReadOnlySnapshotObservationInput): ReadOnlySnapshotObservationResult;
48
+ /**
49
+ * Persists raw Sheet observation evidence through the active async adapter.
50
+ *
51
+ * This keeps the observation receipt and event-evidence insert in the same
52
+ * adapter transaction used by the MikroORM-backed runtime. It does not
53
+ * evaluate a user edit or create a projection effect.
54
+ */
55
+ export declare function persistReadOnlySnapshotObservationWithAdapter(storage: SqlStorageAdapter, fence: FencingContext, input: ReadOnlySnapshotObservationInput): Promise<ReadOnlySnapshotObservationResult>;
56
+ /** Persists one raw observation occurrence inside an existing SQL transaction. */
57
+ export declare function persistReadOnlySnapshotObservationWithSql(sql: SqlExecutor, fence: FencingContext, input: ReadOnlySnapshotObservationInput): Promise<ReadOnlySnapshotObservationResult>;
58
+ //# sourceMappingURL=readOnlyObservation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readOnlyObservation.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/readonly/readOnlyObservation.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE/F,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAqCvG,qFAAqF;AACrF,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,iBAAiB,EAAE,oBAAoB,GAAG,aAAa,CAAC;CAClE;AAED,6EAA6E;AAC7E,MAAM,MAAM,iCAAiC,GACzC;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAChD,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,gCAAgC,GACtC,iCAAiC,CA8CnC;AAED;;;;;;GAMG;AACH,wBAAsB,6CAA6C,CACjE,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,iCAAiC,CAAC,CAK5C;AAED,kFAAkF;AAClF,wBAAsB,yCAAyC,CAC7D,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,gCAAgC,GACtC,OAAO,CAAC,iCAAiC,CAAC,CAoD5C"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Raw snapshot-ingestion ledger for the read-only Sheet integration phase.
3
+ *
4
+ * It persists authenticated snapshot evidence without creating a canonical
5
+ * event or a Sheet effect. Later evaluator work can consume the pending
6
+ * observation receipt; a no-write shadow pass therefore never becomes a
7
+ * hidden projection writer.
8
+ */
9
+ import { withImmediateTransaction } from "../../sqlite/sqliteBridge.js";
10
+ import { STORAGE_ERROR_CODES, StorageError } from "../../errors.js";
11
+ import { isFencingValid, isFencingValidWithAdapter, isFencingValidWithSql, } from "../../sync/shared/writerLease.js";
12
+ import { withSqlSavepoint } from "../../sqlite/sqlTransaction.js";
13
+ import { PRESENCE_KINDS } from "../../../../shared/state/constants.js";
14
+ const READ_OBSERVATION_RECEIPT_SQL = `
15
+ SELECT representative_payload_hash, event_id
16
+ FROM observation_receipt
17
+ WHERE logical_sheet_id = ? AND observation_key = ?
18
+ `;
19
+ const INSERT_EVENT_OBSERVATION_SQL = `
20
+ INSERT INTO event_observation (
21
+ observation_id, logical_sheet_id, physical_sheet_id, observation_key, event_id,
22
+ source, payload_json, payload_hash, detected_at, received_at, ingress_actor_id,
23
+ editor_actor_id, editor_actor_source
24
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
25
+ `;
26
+ const INSERT_OBSERVATION_RECEIPT_SQL = `
27
+ INSERT INTO observation_receipt (
28
+ logical_sheet_id, observation_key, representative_payload_hash,
29
+ first_observation_id, last_observation_id, event_id, state,
30
+ first_seen_at, last_seen_at
31
+ ) VALUES (?, ?, ?, ?, ?, NULL, 'pending', ?, ?)
32
+ `;
33
+ const UPDATE_OBSERVATION_RECEIPT_SQL = `
34
+ UPDATE observation_receipt SET last_observation_id = ?, last_seen_at = ?
35
+ WHERE logical_sheet_id = ? AND observation_key = ?
36
+ `;
37
+ const READ_REGISTERED_OBSERVATION_TARGET_SQL = `
38
+ SELECT physical.enabled AS physical_enabled, physical.logical_sheet_id,
39
+ logical.enabled AS logical_enabled
40
+ FROM physical_sheet_registry AS physical
41
+ JOIN sheet_registry AS logical ON logical.sheet_id = physical.logical_sheet_id
42
+ WHERE physical.physical_sheet_id = ?
43
+ `;
44
+ /**
45
+ * Appends a snapshot occurrence and maintains its representative receipt.
46
+ *
47
+ * The same observation key/payload is retained as another occurrence for
48
+ * audit; a different payload under the same key is never silently deduped.
49
+ */
50
+ export function persistReadOnlySnapshotObservation(db, fence, input) {
51
+ validateInput(input);
52
+ if (!isFencingValid(db, fence))
53
+ return { kind: "fenced_out" };
54
+ return withImmediateTransaction(db, () => {
55
+ if (!isFencingValid(db, fence))
56
+ return { kind: "fenced_out" };
57
+ ensureRegisteredTarget(db, input);
58
+ const receipt = db.prepare(READ_OBSERVATION_RECEIPT_SQL)
59
+ .get(input.logicalSheetId, input.observationKey);
60
+ const kind = receipt === undefined
61
+ ? "captured"
62
+ : receipt.representative_payload_hash === input.payloadHash
63
+ ? "duplicate"
64
+ : "integrity_collision";
65
+ db.prepare(INSERT_EVENT_OBSERVATION_SQL).run(input.observationId, input.logicalSheetId, input.physicalSheetId, input.observationKey, receipt?.event_id ?? null, input.source, input.payloadJson, input.payloadHash, input.detectedAt, input.receivedAt, input.ingressActorId, input.editorActorId.kind === PRESENCE_KINDS.PRESENT
66
+ ? input.editorActorId.value
67
+ : null, input.editorActorSource);
68
+ if (receipt === undefined) {
69
+ db.prepare(INSERT_OBSERVATION_RECEIPT_SQL).run(input.logicalSheetId, input.observationKey, input.payloadHash, input.observationId, input.observationId, input.receivedAt, input.receivedAt);
70
+ }
71
+ else {
72
+ db.prepare(UPDATE_OBSERVATION_RECEIPT_SQL)
73
+ .run(input.observationId, input.receivedAt, input.logicalSheetId, input.observationKey);
74
+ }
75
+ return { kind, observationId: input.observationId };
76
+ });
77
+ }
78
+ /**
79
+ * Persists raw Sheet observation evidence through the active async adapter.
80
+ *
81
+ * This keeps the observation receipt and event-evidence insert in the same
82
+ * adapter transaction used by the MikroORM-backed runtime. It does not
83
+ * evaluate a user edit or create a projection effect.
84
+ */
85
+ export async function persistReadOnlySnapshotObservationWithAdapter(storage, fence, input) {
86
+ validateInput(input);
87
+ if (!(await isFencingValidWithAdapter(storage, fence)))
88
+ return { kind: "fenced_out" };
89
+ return storage.transaction(({ sql }) => persistReadOnlySnapshotObservationWithSql(sql, fence, input));
90
+ }
91
+ /** Persists one raw observation occurrence inside an existing SQL transaction. */
92
+ export async function persistReadOnlySnapshotObservationWithSql(sql, fence, input) {
93
+ validateInput(input);
94
+ if (!(await isFencingValidWithSql(sql, fence)))
95
+ return { kind: "fenced_out" };
96
+ return withSqlSavepoint(sql, "persist_read_only_observation", async () => {
97
+ if (!(await isFencingValidWithSql(sql, fence)))
98
+ return { kind: "fenced_out" };
99
+ await ensureRegisteredTargetWithSql(sql, input);
100
+ const receipt = await sql.get(READ_OBSERVATION_RECEIPT_SQL, [
101
+ input.logicalSheetId,
102
+ input.observationKey,
103
+ ]);
104
+ const kind = receipt === undefined
105
+ ? "captured"
106
+ : receipt.representative_payload_hash === input.payloadHash
107
+ ? "duplicate"
108
+ : "integrity_collision";
109
+ await sql.run(INSERT_EVENT_OBSERVATION_SQL, [
110
+ input.observationId,
111
+ input.logicalSheetId,
112
+ input.physicalSheetId,
113
+ input.observationKey,
114
+ receipt?.event_id ?? null,
115
+ input.source,
116
+ input.payloadJson,
117
+ input.payloadHash,
118
+ input.detectedAt,
119
+ input.receivedAt,
120
+ input.ingressActorId,
121
+ input.editorActorId.kind === PRESENCE_KINDS.PRESENT
122
+ ? input.editorActorId.value
123
+ : null,
124
+ input.editorActorSource,
125
+ ]);
126
+ if (receipt === undefined) {
127
+ await sql.run(INSERT_OBSERVATION_RECEIPT_SQL, [
128
+ input.logicalSheetId,
129
+ input.observationKey,
130
+ input.payloadHash,
131
+ input.observationId,
132
+ input.observationId,
133
+ input.receivedAt,
134
+ input.receivedAt,
135
+ ]);
136
+ }
137
+ else {
138
+ await sql.run(UPDATE_OBSERVATION_RECEIPT_SQL, [
139
+ input.observationId,
140
+ input.receivedAt,
141
+ input.logicalSheetId,
142
+ input.observationKey,
143
+ ]);
144
+ }
145
+ return { kind, observationId: input.observationId };
146
+ });
147
+ }
148
+ function ensureRegisteredTarget(db, input) {
149
+ const row = db.prepare(READ_REGISTERED_OBSERVATION_TARGET_SQL)
150
+ .get(input.physicalSheetId);
151
+ if (row === undefined || row.physical_enabled !== 1 || row.logical_enabled !== 1 ||
152
+ row.logical_sheet_id !== input.logicalSheetId) {
153
+ throw new StorageError(STORAGE_ERROR_CODES.SYNC_REGISTRY_TARGET_UNAVAILABLE, "read-only snapshot target is not an enabled registered projection");
154
+ }
155
+ }
156
+ async function ensureRegisteredTargetWithSql(sql, input) {
157
+ const row = await sql.get(READ_REGISTERED_OBSERVATION_TARGET_SQL, [input.physicalSheetId]);
158
+ if (row === undefined || row.physical_enabled !== 1 || row.logical_enabled !== 1 ||
159
+ row.logical_sheet_id !== input.logicalSheetId) {
160
+ throw new StorageError(STORAGE_ERROR_CODES.SYNC_REGISTRY_TARGET_UNAVAILABLE, "read-only snapshot target is not an enabled registered projection");
161
+ }
162
+ }
163
+ function validateInput(input) {
164
+ for (const [label, value] of [
165
+ ["observation ID", input.observationId],
166
+ ["physical sheet ID", input.physicalSheetId],
167
+ ["logical sheet ID", input.logicalSheetId],
168
+ ["observation key", input.observationKey],
169
+ ["payload JSON", input.payloadJson],
170
+ ["payload hash", input.payloadHash],
171
+ ["ingress actor ID", input.ingressActorId],
172
+ ]) {
173
+ if (value.length === 0) {
174
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_READ_ONLY_OBSERVATION, label + " is required");
175
+ }
176
+ }
177
+ if (input.source !== "polling" && input.source !== "onEdit") {
178
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_READ_ONLY_OBSERVATION, "invalid observation source");
179
+ }
180
+ for (const [label, value] of [["detectedAt", input.detectedAt], ["receivedAt", input.receivedAt]]) {
181
+ if (!Number.isSafeInteger(value) || value < 0) {
182
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_READ_ONLY_OBSERVATION, label + " must be a non-negative safe integer");
183
+ }
184
+ }
185
+ if (input.editorActorSource === "google_active_user" &&
186
+ (input.editorActorId.kind !== PRESENCE_KINDS.PRESENT ||
187
+ input.editorActorId.value.length === 0)) {
188
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_READ_ONLY_OBSERVATION, "verified editor source requires an editor actor ID");
189
+ }
190
+ if (input.editorActorSource === "unavailable" &&
191
+ input.editorActorId.kind === PRESENCE_KINDS.PRESENT) {
192
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_READ_ONLY_OBSERVATION, "unavailable editor source cannot include an editor actor ID");
193
+ }
194
+ }
195
+ //# sourceMappingURL=readOnlyObservation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readOnlyObservation.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/readonly/readOnlyObservation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Durable, fenced storage mapping for trusted conflict-resolution commands.
3
+ *
4
+ * The pure core decides whether an acknowledgement is resolved, stale, or
5
+ * rejected. This module records that decision with the command receipt,
6
+ * clears only the currently active candidate pointer, and queues any
7
+ * resolution projection effect in one SQLite transaction.
8
+ */
9
+ import { type DatabaseSyncLike } from "../../sqlite/sqliteBridge.js";
10
+ import { type FencingContext } from "../../sync/shared/writerLease.js";
11
+ import type { SqlExecutor, SqlStorageAdapter } from "../../../../adapter/persistence/contracts/sql.js";
12
+ import type { PersistResolutionCommandInput, PersistResolutionCommandResult } from "./resolutionWriterContracts.js";
13
+ export { PERSIST_RESOLUTION_RESULT_KINDS, RESOLUTION_COMMAND_STATUSES, } from "./resolutionWriterContracts.js";
14
+ export type { PersistResolutionCommandInput, PersistResolutionCommandResult, } from "./resolutionWriterContracts.js";
15
+ /**
16
+ * Persists a resolution command at the writer-RPC boundary.
17
+ *
18
+ * An old command is stale unless the target conflict is still the active
19
+ * candidate pointer for its field. That extra pointer check closes the
20
+ * storage-level ABA gap that a historical conflict row alone cannot detect.
21
+ */
22
+ export declare function persistResolutionCommand(db: DatabaseSyncLike, fence: FencingContext, input: PersistResolutionCommandInput): PersistResolutionCommandResult;
23
+ /**
24
+ * Persists one trusted resolution command through an already-active async SQL
25
+ * transaction. A command receipt, its conflict transition, and any effects
26
+ * remain atomic with an ORM-managed user-entity mutation.
27
+ */
28
+ export declare function persistResolutionCommandWithSql(sql: SqlExecutor, fence: FencingContext, input: PersistResolutionCommandInput): Promise<PersistResolutionCommandResult>;
29
+ /** Persists one resolution command in an adapter-owned transaction. */
30
+ export declare function persistResolutionCommandWithAdapter(storage: SqlStorageAdapter, fence: FencingContext, input: PersistResolutionCommandInput): Promise<PersistResolutionCommandResult>;
31
+ //# sourceMappingURL=resolutionWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolutionWriter.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/resolution/resolutionWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE/F,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAKvG,OAAO,KAAK,EAKV,6BAA6B,EAC7B,8BAA8B,EAE/B,MAAM,gCAAgC,CAAC;AA0BxC,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,gCAAgC,CAAC;AAIxC;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,6BAA6B,GACnC,8BAA8B,CA0EhC;AAED;;;;GAIG;AACH,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,8BAA8B,CAAC,CA8EzC;AAED,uEAAuE;AACvE,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,8BAA8B,CAAC,CAEzC"}