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,100 @@
1
+ /** Quarantine persistence for invalid or unresolvable observed rows. */
2
+ import { stableHash, } from "../../../../domain/index.js";
3
+ import { QUARANTINE_ID_PREFIX, QUARANTINE_REPAIR_STATUSES, ROW_OUTCOMES, } from "../../../../domain/evaluate/constants.js";
4
+ import { QUARANTINE_REASONS, ROW_OPERATIONS } from "../../../../domain/model/constants.js";
5
+ import { toSqlNullable } from "../../sqlite/sqlState.js";
6
+ import { auditJson } from "./observationAudit.js";
7
+ const INSERT_QUARANTINE_RECORD_SQL = `
8
+ INSERT INTO quarantine_record (
9
+ quarantine_id, event_id, observation_id, logical_sheet_id, row_binding_id,
10
+ reason, before_row_json, after_row_json, fields_json, repair_fields_json,
11
+ repair_state, candidate_payload_json, created_at, updated_at
12
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
13
+ ON CONFLICT(quarantine_id) DO NOTHING
14
+ `;
15
+ /** Persists a deterministic quarantine for incompatible receipt or event identity. */
16
+ export function persistIntegrityQuarantine(db, input, row, eventId, discriminator) {
17
+ const quarantine = makeIntegrityQuarantine(input, row, discriminator);
18
+ return persistQuarantine(db, input, quarantine, eventId);
19
+ }
20
+ /** Persists an integrity quarantine through the active async SQL transaction. */
21
+ export async function persistIntegrityQuarantineWithSql(sql, input, row, eventId, discriminator) {
22
+ const quarantine = makeIntegrityQuarantine(input, row, discriminator);
23
+ return persistQuarantineWithSql(sql, input, quarantine, eventId);
24
+ }
25
+ /** Inserts a core-provided quarantine plan once and retains its raw evidence. */
26
+ export function persistQuarantine(db, input, quarantine, eventId) {
27
+ const beforeRow = quarantine.operation === ROW_OPERATIONS.INSERT
28
+ ? null
29
+ : quarantine.beforeRow;
30
+ const afterRow = quarantine.operation === ROW_OPERATIONS.DELETE
31
+ ? null
32
+ : quarantine.afterRow;
33
+ const repairState = input.evaluation.outcome === ROW_OUTCOMES.QUARANTINE &&
34
+ input.evaluation.repair.status === QUARANTINE_REPAIR_STATUSES.PLANNED
35
+ ? "pending"
36
+ : null;
37
+ db.prepare(INSERT_QUARANTINE_RECORD_SQL).run(quarantine.quarantineId, toSqlNullable(eventId), input.observation.observationId, input.batch.sheetId, quarantine.rowBindingId, quarantine.reason, auditJson(beforeRow), auditJson(afterRow), auditJson(quarantine.fields), auditJson(quarantine.repairFields), repairState, input.observation.payloadJson, input.observation.receivedAt, input.observation.receivedAt);
38
+ return quarantine.quarantineId;
39
+ }
40
+ /** Inserts a core-provided quarantine plan through the active async SQL transaction. */
41
+ export async function persistQuarantineWithSql(sql, input, quarantine, eventId) {
42
+ const beforeRow = quarantine.operation === ROW_OPERATIONS.INSERT
43
+ ? null
44
+ : quarantine.beforeRow;
45
+ const afterRow = quarantine.operation === ROW_OPERATIONS.DELETE
46
+ ? null
47
+ : quarantine.afterRow;
48
+ const repairState = input.evaluation.outcome === ROW_OUTCOMES.QUARANTINE &&
49
+ input.evaluation.repair.status === QUARANTINE_REPAIR_STATUSES.PLANNED
50
+ ? "pending"
51
+ : null;
52
+ await sql.run(INSERT_QUARANTINE_RECORD_SQL, [
53
+ quarantine.quarantineId,
54
+ toSqlNullable(eventId),
55
+ input.observation.observationId,
56
+ input.batch.sheetId,
57
+ quarantine.rowBindingId,
58
+ quarantine.reason,
59
+ auditJson(beforeRow),
60
+ auditJson(afterRow),
61
+ auditJson(quarantine.fields),
62
+ auditJson(quarantine.repairFields),
63
+ repairState,
64
+ input.observation.payloadJson,
65
+ input.observation.receivedAt,
66
+ input.observation.receivedAt,
67
+ ]);
68
+ return quarantine.quarantineId;
69
+ }
70
+ /** Builds an operation-specific quarantine plan for an identity collision. */
71
+ function makeIntegrityQuarantine(input, row, discriminator) {
72
+ const common = {
73
+ quarantineId: `${QUARANTINE_ID_PREFIX}${stableHash({
74
+ logicalSheetId: input.batch.sheetId,
75
+ observationKey: input.observation.observationKey,
76
+ representative: discriminator,
77
+ payloadHash: input.observation.payloadHash,
78
+ rowBindingId: row.rowBindingId,
79
+ })}`,
80
+ reason: QUARANTINE_REASONS.INVALID_EVENT,
81
+ rowBindingId: row.rowBindingId,
82
+ fields: row.fields,
83
+ repairFields: [],
84
+ };
85
+ switch (row.operation) {
86
+ case ROW_OPERATIONS.INSERT:
87
+ return { ...common, operation: row.operation, afterRow: row.afterRow };
88
+ case ROW_OPERATIONS.UPDATE:
89
+ case ROW_OPERATIONS.RENAME:
90
+ return {
91
+ ...common,
92
+ operation: row.operation,
93
+ beforeRow: row.beforeRow,
94
+ afterRow: row.afterRow,
95
+ };
96
+ case ROW_OPERATIONS.DELETE:
97
+ return { ...common, operation: row.operation, beforeRow: row.beforeRow };
98
+ }
99
+ }
100
+ //# sourceMappingURL=observationQuarantine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observationQuarantine.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/observation/observationQuarantine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Contracts shared by the durable observation writer modules.
3
+ *
4
+ * The input is already normalized and evaluated by pure core. Storage owns
5
+ * only idempotent receipts, canonical commits, conflict records, and effects.
6
+ */
7
+ import type { EditorActorSource, FieldConflict, ObservedEditBatch, ObservedRowChange, Applicability, Presence, QuarantinePlan, RowBindingState, RowEvaluationResult, ConflictStatus, RowOutcome } from "../../../../domain/index.js";
8
+ import { ROW_OUTCOMES } from "../../../../domain/evaluate/constants.js";
9
+ import { CANONICAL_COMMIT_RESULT_KINDS } from "../canonical/canonicalCommit.js";
10
+ import type { CanonicalCommitInput, CanonicalCommitResult } from "../canonical/canonicalCommit.js";
11
+ import type { NewEffect } from "../../sync/outbound/effectOutbox.js";
12
+ import { OBSERVATION_WRITE_RESULT_KINDS } from "./observationConstants.js";
13
+ import type { ObservationDuplicateReason, ObservationAppendResultKind, ObservationReceiptState } from "./observationConstants.js";
14
+ /** One append-only occurrence captured by a gateway or polling adapter. */
15
+ export interface ObservationAttemptInput {
16
+ readonly observationId: string;
17
+ readonly observationKey: string;
18
+ readonly payloadJson: string;
19
+ readonly payloadHash: string;
20
+ readonly detectedAt: number;
21
+ readonly receivedAt: number;
22
+ readonly ingressActorId: string;
23
+ /** Editor identity is absent when the gateway cannot verify one. */
24
+ readonly editorActorId: Presence<string>;
25
+ readonly editorActorSource: EditorActorSource;
26
+ }
27
+ /** Event identity computed after observation identity resolution. */
28
+ export interface EventIdentityInput {
29
+ readonly eventKey: string;
30
+ readonly payloadHash: string;
31
+ }
32
+ /** One active unique-key change that must commit with canonical state. */
33
+ export interface BusinessKeyChange {
34
+ readonly fieldName: string;
35
+ readonly previousNormalizedKey: Presence<string>;
36
+ readonly nextNormalizedKey: Presence<string>;
37
+ }
38
+ /** Canonical mutation and key claims committed in the same writer transaction. */
39
+ export interface CanonicalRowMutation {
40
+ readonly commitId: string;
41
+ readonly commit: CanonicalCommitInput;
42
+ readonly businessKeyChanges: readonly BusinessKeyChange[];
43
+ }
44
+ /** Input for exactly one row of an observed batch. */
45
+ export interface PersistObservedRowInput {
46
+ readonly physicalSheetId: string;
47
+ readonly batch: ObservedEditBatch;
48
+ readonly rowIndex: number;
49
+ readonly observation: ObservationAttemptInput;
50
+ readonly event: Presence<EventIdentityInput>;
51
+ readonly evaluation: RowEvaluationResult;
52
+ readonly canonical: Presence<CanonicalRowMutation>;
53
+ readonly effects: readonly NewEffect[];
54
+ }
55
+ /** Durable outcome for one row-independent observation submission. */
56
+ export type PersistObservedRowResult = {
57
+ readonly kind: typeof OBSERVATION_WRITE_RESULT_KINDS.FENCED_OUT;
58
+ } | {
59
+ readonly kind: typeof OBSERVATION_WRITE_RESULT_KINDS.STALE;
60
+ } | {
61
+ readonly kind: typeof OBSERVATION_WRITE_RESULT_KINDS.DUPLICATE;
62
+ readonly observationId: string;
63
+ readonly eventId: Presence<string>;
64
+ readonly reason: ObservationDuplicateReason;
65
+ } | {
66
+ readonly kind: typeof OBSERVATION_WRITE_RESULT_KINDS.QUARANTINED;
67
+ readonly observationId: string;
68
+ readonly eventId: Presence<string>;
69
+ readonly quarantineId: string;
70
+ } | {
71
+ readonly kind: typeof OBSERVATION_WRITE_RESULT_KINDS.PERSISTED;
72
+ readonly observationId: string;
73
+ readonly eventId: string;
74
+ readonly eventSequence: number;
75
+ readonly outcome: Exclude<RowOutcome, typeof ROW_OUTCOMES.QUARANTINE>;
76
+ readonly entityRevision: Applicability<number>;
77
+ readonly conflictIds: readonly string[];
78
+ };
79
+ export interface ReceiptRow {
80
+ readonly representative_payload_hash: string;
81
+ readonly event_id: string | null;
82
+ readonly state: ObservationReceiptState;
83
+ }
84
+ export interface EventRow {
85
+ readonly event_id: string;
86
+ readonly payload_hash: string;
87
+ readonly event_sequence: number;
88
+ }
89
+ export interface RowBindingRow {
90
+ readonly entity_id: Presence<string>;
91
+ readonly state: RowBindingState;
92
+ }
93
+ export interface ActiveCandidateRow {
94
+ readonly active_candidate_conflict_id: string;
95
+ readonly active_candidate_hash: string;
96
+ readonly candidate_epoch: number;
97
+ readonly event_id: string;
98
+ readonly status: ConflictStatus;
99
+ }
100
+ export interface CreatedEvent {
101
+ readonly eventId: string;
102
+ readonly eventSequence: number;
103
+ }
104
+ export interface ObservationAppendResult {
105
+ readonly kind: ObservationAppendResultKind;
106
+ readonly eventId: Presence<string>;
107
+ }
108
+ /** Signals that the writer lease changed inside an outer transaction. */
109
+ export declare class FenceLostError extends Error {
110
+ }
111
+ /** Signals that a canonical CAS/binding transition became stale. */
112
+ export declare class CanonicalStaleError extends Error {
113
+ }
114
+ /** Input type retained here for conflict-ledger helpers. */
115
+ export type ObservationConflict = FieldConflict;
116
+ /** Input type retained here for quarantine-ledger helpers. */
117
+ export type ObservationQuarantine = QuarantinePlan;
118
+ /** Applied canonical result used by canonical/conflict composition. */
119
+ export type AppliedCanonicalCommit = Extract<CanonicalCommitResult, {
120
+ readonly kind: typeof CANONICAL_COMMIT_RESULT_KINDS.APPLIED;
121
+ }>;
122
+ /** The observed row type is re-exported for storage-private helper signatures. */
123
+ export type ObservationRow = ObservedRowChange;
124
+ //# sourceMappingURL=observationTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observationTypes.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/observation/observationTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Contracts shared by the durable observation writer modules.
3
+ *
4
+ * The input is already normalized and evaluated by pure core. Storage owns
5
+ * only idempotent receipts, canonical commits, conflict records, and effects.
6
+ */
7
+ /** Signals that the writer lease changed inside an outer transaction. */
8
+ export class FenceLostError extends Error {
9
+ }
10
+ /** Signals that a canonical CAS/binding transition became stale. */
11
+ export class CanonicalStaleError extends Error {
12
+ }
13
+ //# sourceMappingURL=observationTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observationTypes.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/observation/observationTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqIH,yEAAyE;AACzE,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAG;AAE5C,oEAAoE;AACpE,MAAM,OAAO,mBAAoB,SAAQ,KAAK;CAAG"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Input and registry validation for the observation writer.
3
+ *
4
+ * Validation happens before the writer opens its transaction so malformed
5
+ * adapter input never creates a partial receipt or event occurrence.
6
+ */
7
+ import type { ObservedEditBatch } from "../../../../domain/index.js";
8
+ import type { NewEffect } from "../../sync/outbound/effectOutbox.js";
9
+ import type { DatabaseSyncLike } from "../../sqlite/sqliteBridge.js";
10
+ import type { SqlExecutor } from "../../../../adapter/persistence/contracts/sql.js";
11
+ import type { PersistObservedRowInput } from "./observationTypes.js";
12
+ /** Validates one complete writer submission before durable mutation begins. */
13
+ export declare function validatePersistObservedRowInput(input: PersistObservedRowInput): void;
14
+ /** Requires a valid row index and returns its observed row. */
15
+ export declare function requireBatchRow(batch: ObservedEditBatch, rowIndex: number): import("../../../../domain/index.js").ObservedRowChange;
16
+ /** Ensures the observed physical projection is an enabled registry member. */
17
+ export declare function ensureRegisteredProjection(db: DatabaseSyncLike, batch: ObservedEditBatch, physicalSheetId: string): void;
18
+ /**
19
+ * Ensures the observed projection is enabled through the active async SQL
20
+ * context. This keeps registry validation in the same transaction as the
21
+ * observation receipt it protects.
22
+ */
23
+ export declare function ensureRegisteredProjectionWithSql(sql: SqlExecutor, batch: ObservedEditBatch, physicalSheetId: string): Promise<void>;
24
+ /** Ensures every generated effect targets an enabled registered projection. */
25
+ export declare function ensureEffectsTargetRegistered(db: DatabaseSyncLike, logicalSheetId: string, effects: readonly NewEffect[]): void;
26
+ /** Validates every generated effect target through the active async SQL context. */
27
+ export declare function ensureEffectsTargetRegisteredWithSql(sql: SqlExecutor, logicalSheetId: string, effects: readonly NewEffect[]): Promise<void>;
28
+ //# sourceMappingURL=observationValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observationValidation.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/observation/observationValidation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAUrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kDAAkD,CAAC;AACpF,OAAO,KAAK,EAGV,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAwB/B,+EAA+E;AAC/E,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI,CA8DpF;AAED,+DAA+D;AAC/D,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,2DAezE;AAED,8EAA8E;AAC9E,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE,iBAAiB,EACxB,eAAe,EAAE,MAAM,GACtB,IAAI,CAuBN;AAED;;;;GAIG;AACH,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,iBAAiB,EACxB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,+EAA+E;AAC/E,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,gBAAgB,EACpB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,SAAS,SAAS,EAAE,GAC5B,IAAI,CAgBN;AAED,oFAAoF;AACpF,wBAAsB,oCAAoC,CACxD,GAAG,EAAE,WAAW,EAChB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,SAAS,SAAS,EAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Input and registry validation for the observation writer.
3
+ *
4
+ * Validation happens before the writer opens its transaction so malformed
5
+ * adapter input never creates a partial receipt or event occurrence.
6
+ */
7
+ import { stableHash } from "../../../../domain/index.js";
8
+ import { APPLICABILITY_KINDS, PRESENCE_KINDS, } from "../../../../shared/state/constants.js";
9
+ import { ROW_OUTCOMES } from "../../../../domain/evaluate/constants.js";
10
+ import { ROW_OPERATIONS } from "../../../../domain/model/constants.js";
11
+ import { EMPTY_STRING_LENGTH_ZERO } from "../../constants.js";
12
+ import { STORAGE_ERROR_CODES, StorageError } from "../../errors.js";
13
+ const READ_REGISTERED_PROJECTION_SQL = `
14
+ SELECT logical_sheet_id, projection, enabled
15
+ FROM physical_sheet_registry
16
+ WHERE physical_sheet_id = ?
17
+ `;
18
+ const READ_LOGICAL_SHEET_ENABLED_SQL = `
19
+ SELECT enabled
20
+ FROM sheet_registry
21
+ WHERE sheet_id = ?
22
+ `;
23
+ /** Validates one complete writer submission before durable mutation begins. */
24
+ export function validatePersistObservedRowInput(input) {
25
+ const row = requireBatchRow(input.batch, input.rowIndex);
26
+ if (input.physicalSheetId.length === EMPTY_STRING_LENGTH_ZERO) {
27
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "physical sheet ID is required");
28
+ }
29
+ if (input.batch.sheetId.length === EMPTY_STRING_LENGTH_ZERO ||
30
+ input.batch.batchId.length === EMPTY_STRING_LENGTH_ZERO) {
31
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "logical sheet ID and batch ID are required");
32
+ }
33
+ if (input.evaluation.rowBindingId !== row.rowBindingId) {
34
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "evaluation row binding does not match the observed row");
35
+ }
36
+ validateObservation(input.observation);
37
+ if (input.event.kind === PRESENCE_KINDS.PRESENT &&
38
+ (input.event.value.eventKey.length === EMPTY_STRING_LENGTH_ZERO ||
39
+ input.event.value.payloadHash.length === EMPTY_STRING_LENGTH_ZERO)) {
40
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "event key and payload hash are required when an event is present");
41
+ }
42
+ if (input.event.kind === PRESENCE_KINDS.ABSENT &&
43
+ input.evaluation.outcome !== ROW_OUTCOMES.QUARANTINE) {
44
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "only quarantined rows may omit an event identity");
45
+ }
46
+ if (input.evaluation.outcome === ROW_OUTCOMES.QUARANTINE &&
47
+ input.canonical.kind === PRESENCE_KINDS.PRESENT) {
48
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "a quarantined row cannot carry a canonical mutation");
49
+ }
50
+ const needsCanonical = input.evaluation.acceptedFields.length > 0 ||
51
+ (row.operation === ROW_OPERATIONS.DELETE &&
52
+ input.evaluation.outcome === ROW_OUTCOMES.ACCEPTED);
53
+ const hasCanonical = input.canonical.kind === PRESENCE_KINDS.PRESENT;
54
+ if (needsCanonical !== hasCanonical) {
55
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "accepted canonical work must have exactly one canonical mutation");
56
+ }
57
+ if (hasCanonical) {
58
+ validateCanonicalMutation(input.canonical.value, row.operation, input.evaluation);
59
+ }
60
+ validateEffects(input.effects, input.batch);
61
+ if (hasCanonical)
62
+ validateEffects(input.canonical.value.commit.effects, input.batch);
63
+ }
64
+ /** Requires a valid row index and returns its observed row. */
65
+ export function requireBatchRow(batch, rowIndex) {
66
+ if (!Number.isSafeInteger(rowIndex) || rowIndex < 0) {
67
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "row index must be a non-negative safe integer");
68
+ }
69
+ const row = batch.rows[rowIndex];
70
+ if (row === undefined) {
71
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "row index is outside the observed batch");
72
+ }
73
+ return row;
74
+ }
75
+ /** Ensures the observed physical projection is an enabled registry member. */
76
+ export function ensureRegisteredProjection(db, batch, physicalSheetId) {
77
+ const row = db.prepare(READ_REGISTERED_PROJECTION_SQL)
78
+ .get(physicalSheetId);
79
+ if (row === undefined ||
80
+ row.logical_sheet_id !== batch.sheetId ||
81
+ row.projection !== batch.projection ||
82
+ row.enabled !== 1) {
83
+ throw new StorageError(STORAGE_ERROR_CODES.SYNC_REGISTRY_TARGET_UNAVAILABLE, "physical sheet is not an enabled projection of the observed logical sheet");
84
+ }
85
+ const logical = db.prepare(READ_LOGICAL_SHEET_ENABLED_SQL)
86
+ .get(batch.sheetId);
87
+ if (logical === undefined || logical.enabled !== 1) {
88
+ throw new StorageError(STORAGE_ERROR_CODES.SYNC_REGISTRY_TARGET_UNAVAILABLE, "logical sheet is not enabled");
89
+ }
90
+ }
91
+ /**
92
+ * Ensures the observed projection is enabled through the active async SQL
93
+ * context. This keeps registry validation in the same transaction as the
94
+ * observation receipt it protects.
95
+ */
96
+ export async function ensureRegisteredProjectionWithSql(sql, batch, physicalSheetId) {
97
+ const row = await sql.get(READ_REGISTERED_PROJECTION_SQL, [
98
+ physicalSheetId,
99
+ ]);
100
+ if (row === undefined ||
101
+ row.logical_sheet_id !== batch.sheetId ||
102
+ row.projection !== batch.projection ||
103
+ row.enabled !== 1) {
104
+ throw new StorageError(STORAGE_ERROR_CODES.SYNC_REGISTRY_TARGET_UNAVAILABLE, "physical sheet is not an enabled projection of the observed logical sheet");
105
+ }
106
+ const logical = await sql.get(READ_LOGICAL_SHEET_ENABLED_SQL, [
107
+ batch.sheetId,
108
+ ]);
109
+ if (logical === undefined || logical.enabled !== 1) {
110
+ throw new StorageError(STORAGE_ERROR_CODES.SYNC_REGISTRY_TARGET_UNAVAILABLE, "logical sheet is not enabled");
111
+ }
112
+ }
113
+ /** Ensures every generated effect targets an enabled registered projection. */
114
+ export function ensureEffectsTargetRegistered(db, logicalSheetId, effects) {
115
+ for (const effect of effects) {
116
+ const target = db.prepare(READ_REGISTERED_PROJECTION_SQL)
117
+ .get(effect.physicalSheetId);
118
+ if (target === undefined ||
119
+ target.logical_sheet_id !== logicalSheetId ||
120
+ target.projection !== effect.projection ||
121
+ target.enabled !== 1) {
122
+ throw new StorageError(STORAGE_ERROR_CODES.SYNC_REGISTRY_TARGET_UNAVAILABLE, "effect targets an unregistered physical projection");
123
+ }
124
+ }
125
+ }
126
+ /** Validates every generated effect target through the active async SQL context. */
127
+ export async function ensureEffectsTargetRegisteredWithSql(sql, logicalSheetId, effects) {
128
+ for (const effect of effects) {
129
+ const target = await sql.get(READ_REGISTERED_PROJECTION_SQL, [
130
+ effect.physicalSheetId,
131
+ ]);
132
+ if (target === undefined ||
133
+ target.logical_sheet_id !== logicalSheetId ||
134
+ target.projection !== effect.projection ||
135
+ target.enabled !== 1) {
136
+ throw new StorageError(STORAGE_ERROR_CODES.SYNC_REGISTRY_TARGET_UNAVAILABLE, "effect targets an unregistered physical projection");
137
+ }
138
+ }
139
+ }
140
+ function validateObservation(observation) {
141
+ if (observation.observationId.length === EMPTY_STRING_LENGTH_ZERO ||
142
+ observation.observationKey.length === EMPTY_STRING_LENGTH_ZERO ||
143
+ observation.payloadJson.length === EMPTY_STRING_LENGTH_ZERO ||
144
+ observation.payloadHash.length === EMPTY_STRING_LENGTH_ZERO ||
145
+ observation.ingressActorId.length === EMPTY_STRING_LENGTH_ZERO) {
146
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "observation identity, payload, and ingress actor are required");
147
+ }
148
+ for (const [name, value] of [["detectedAt", observation.detectedAt], ["receivedAt", observation.receivedAt]]) {
149
+ if (!Number.isSafeInteger(value) || value < 0) {
150
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, `${name} must be a non-negative safe integer`);
151
+ }
152
+ }
153
+ if (observation.editorActorSource === "google_active_user" &&
154
+ observation.editorActorId.kind === PRESENCE_KINDS.ABSENT) {
155
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "a verified editor source requires an editor actor ID");
156
+ }
157
+ if (observation.editorActorSource === "unavailable" &&
158
+ observation.editorActorId.kind === PRESENCE_KINDS.PRESENT) {
159
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "an unavailable editor source cannot claim an editor actor ID");
160
+ }
161
+ }
162
+ function validateCanonicalMutation(mutation, operation, evaluation) {
163
+ if (mutation.commitId.length === EMPTY_STRING_LENGTH_ZERO) {
164
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "canonical commit ID is required");
165
+ }
166
+ const expectedKind = operation === ROW_OPERATIONS.INSERT
167
+ ? ROW_OPERATIONS.INSERT
168
+ : operation === ROW_OPERATIONS.DELETE
169
+ ? ROW_OPERATIONS.DELETE
170
+ : ROW_OPERATIONS.UPDATE;
171
+ if (mutation.commit.kind !== expectedKind) {
172
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, `observed ${operation} requires a ${expectedKind} canonical mutation`);
173
+ }
174
+ if (mutation.commit.kind !== ROW_OPERATIONS.DELETE) {
175
+ const acceptedByName = new Map(evaluation.acceptedFields.map((field) => [field.fieldName, field]));
176
+ if (acceptedByName.size !== mutation.commit.fields.length) {
177
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "canonical fields must exactly match accepted fields");
178
+ }
179
+ for (const field of mutation.commit.fields) {
180
+ const accepted = acceptedByName.get(field.fieldName);
181
+ if (accepted === undefined || stableHash(field.value) !== stableHash(accepted.nextValue)) {
182
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, `canonical field ${field.fieldName} does not match the core result`);
183
+ }
184
+ const expectedRevision = mutation.commit.kind === ROW_OPERATIONS.INSERT
185
+ ? { kind: APPLICABILITY_KINDS.NOT_APPLICABLE }
186
+ : { kind: APPLICABILITY_KINDS.APPLICABLE, value: accepted.nextFieldRevision - 1 };
187
+ if (!sameApplicability(field.expectedFieldRevision, expectedRevision)) {
188
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, `canonical field ${field.fieldName} has an unexpected base revision`);
189
+ }
190
+ }
191
+ }
192
+ const keyNames = new Set();
193
+ for (const change of mutation.businessKeyChanges) {
194
+ if (change.fieldName.length === EMPTY_STRING_LENGTH_ZERO ||
195
+ keyNames.has(change.fieldName)) {
196
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "business key changes must have unique non-empty field names");
197
+ }
198
+ keyNames.add(change.fieldName);
199
+ if ((change.previousNormalizedKey.kind === PRESENCE_KINDS.PRESENT &&
200
+ change.previousNormalizedKey.value.length === EMPTY_STRING_LENGTH_ZERO) ||
201
+ (change.nextNormalizedKey.kind === PRESENCE_KINDS.PRESENT &&
202
+ change.nextNormalizedKey.value.length === EMPTY_STRING_LENGTH_ZERO)) {
203
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "business key hashes cannot be empty strings");
204
+ }
205
+ }
206
+ }
207
+ function sameApplicability(left, right) {
208
+ if (left.kind !== right.kind)
209
+ return false;
210
+ if (left.kind === APPLICABILITY_KINDS.NOT_APPLICABLE)
211
+ return true;
212
+ return right.kind === APPLICABILITY_KINDS.APPLICABLE && left.value === right.value;
213
+ }
214
+ function validateEffects(effects, batch) {
215
+ for (const effect of effects) {
216
+ if (effect.logicalSheetId !== batch.sheetId ||
217
+ effect.physicalSheetId.length === EMPTY_STRING_LENGTH_ZERO ||
218
+ effect.projection.length === EMPTY_STRING_LENGTH_ZERO) {
219
+ throw new StorageError(STORAGE_ERROR_CODES.INVALID_OBSERVATION_INPUT, "effect must target a registered physical projection of the logical sheet");
220
+ }
221
+ }
222
+ }
223
+ //# sourceMappingURL=observationValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observationValidation.js","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/observation/observationValidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
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 { type DatabaseSyncLike } from "../../sqlite/sqliteBridge.js";
9
+ import { type FencingContext } from "../../sync/shared/writerLease.js";
10
+ import { type PersistObservedRowInput, type PersistObservedRowResult } from "./observationTypes.js";
11
+ import type { SqlExecutor, SqlStorageAdapter } from "../../../../adapter/persistence/contracts/sql.js";
12
+ export type { ObservationAttemptInput, EventIdentityInput, BusinessKeyChange, CanonicalRowMutation, PersistObservedRowInput, PersistObservedRowResult, } from "./observationTypes.js";
13
+ /**
14
+ * Persists one normalized row outcome at the writer-RPC boundary.
15
+ *
16
+ * No Sheet call is made here. A stale fence or canonical CAS rolls back the
17
+ * whole transaction so the adapter can re-read and submit again.
18
+ */
19
+ export declare function persistObservedRow(db: DatabaseSyncLike, fence: FencingContext, input: PersistObservedRowInput): PersistObservedRowResult;
20
+ /**
21
+ * Persists one normalized row outcome inside an already-active async SQL
22
+ * transaction. It mirrors the legacy writer semantics while allowing the
23
+ * caller to keep a user entity mutation and its sync records atomic.
24
+ */
25
+ export declare function persistObservedRowWithSql(sql: SqlExecutor, fence: FencingContext, input: PersistObservedRowInput): Promise<PersistObservedRowResult>;
26
+ /** Persists one observed row in an adapter-owned transaction. */
27
+ export declare function persistObservedRowWithAdapter(storage: SqlStorageAdapter, fence: FencingContext, input: PersistObservedRowInput): Promise<PersistObservedRowResult>;
28
+ //# sourceMappingURL=observationWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observationWriter.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/storage/state/observation/observationWriter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EAA4B,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE/F,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,kCAAkC,CAAC;AAqC1C,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC9B,MAAM,uBAAuB,CAAC;AAS/B,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAUvG,YAAY,EACV,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAE/B;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,uBAAuB,GAC7B,wBAAwB,CAmM1B;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAwNnC;AAED,iEAAiE;AACjE,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAEnC"}