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