hikoutei 0.3.1 → 0.3.3

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 (233) hide show
  1. package/README.md +12 -2
  2. package/apps-script/gateway/Code.gs +41 -6
  3. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts +2 -0
  4. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.d.ts.map +1 -1
  5. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js +5 -0
  6. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmMappedObservation.js.map +1 -1
  7. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts +52 -0
  8. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.d.ts.map +1 -1
  9. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js +195 -13
  10. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js.map +1 -1
  11. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts +24 -0
  12. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.d.ts.map +1 -0
  13. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js +124 -0
  14. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingFastPath.js.map +1 -0
  15. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js +1 -1
  16. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingInspection.js.map +1 -1
  17. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts +15 -2
  18. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.d.ts.map +1 -1
  19. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js +27 -3
  20. package/dist/adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPollingPersistence.js.map +1 -1
  21. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts +1 -0
  22. package/dist/adapter/sheets/providers/apps-script-gateway/errors.d.ts.map +1 -1
  23. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js +1 -0
  24. package/dist/adapter/sheets/providers/apps-script-gateway/errors.js.map +1 -1
  25. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts +2 -0
  26. package/dist/adapter/sheets/providers/apps-script-gateway/index.d.ts.map +1 -1
  27. package/dist/adapter/sheets/providers/apps-script-gateway/index.js +1 -0
  28. package/dist/adapter/sheets/providers/apps-script-gateway/index.js.map +1 -1
  29. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts +3 -1
  30. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.d.ts.map +1 -1
  31. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js +9 -0
  32. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperation.js.map +1 -1
  33. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.d.ts.map +1 -1
  34. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js +139 -43
  35. package/dist/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.js.map +1 -1
  36. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.d.ts.map +1 -1
  37. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js +86 -57
  38. package/dist/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.js.map +1 -1
  39. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.d.ts +8 -0
  40. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.d.ts.map +1 -0
  41. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.js +122 -0
  42. package/dist/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.js.map +1 -0
  43. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts +31 -0
  44. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.d.ts.map +1 -0
  45. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js +567 -0
  46. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/batchAppendOperation.js.map +1 -0
  47. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts +12 -17
  48. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.d.ts.map +1 -1
  49. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js +27 -213
  50. package/dist/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.js.map +1 -1
  51. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.d.ts.map +1 -1
  52. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js +15 -36
  53. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.js.map +1 -1
  54. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts +2 -3
  55. package/dist/adapter/sheets/providers/apps-script-gateway/protocol/types.d.ts.map +1 -1
  56. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.d.ts.map +1 -1
  57. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js +81 -8
  58. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationClient.js.map +1 -1
  59. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts +1 -6
  60. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.d.ts.map +1 -1
  61. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js +15 -9
  62. package/dist/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.js.map +1 -1
  63. package/dist/application/orm/mapping/projection.js +1 -1
  64. package/dist/application/orm/mapping/projection.js.map +1 -1
  65. package/dist/application/orm/persistence/flush/flushCoordinator.d.ts.map +1 -1
  66. package/dist/application/orm/persistence/flush/flushCoordinator.js +1 -0
  67. package/dist/application/orm/persistence/flush/flushCoordinator.js.map +1 -1
  68. package/dist/application/orm/persistence/lifecycle/entityLifecycle.js +1 -1
  69. package/dist/application/orm/persistence/lifecycle/entityLifecycle.js.map +1 -1
  70. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts +3 -1
  71. package/dist/application/sync/gateway/SyncGatewayBootstrap.d.ts.map +1 -1
  72. package/dist/application/sync/gateway/SyncGatewayBootstrap.js +3 -1
  73. package/dist/application/sync/gateway/SyncGatewayBootstrap.js.map +1 -1
  74. package/dist/application/sync/gateway/conflictProjection.d.ts +13 -0
  75. package/dist/application/sync/gateway/conflictProjection.d.ts.map +1 -0
  76. package/dist/application/sync/gateway/conflictProjection.js +58 -0
  77. package/dist/application/sync/gateway/conflictProjection.js.map +1 -0
  78. package/dist/application/sync/gateway/conflictProjectionRegistration.d.ts +11 -0
  79. package/dist/application/sync/gateway/conflictProjectionRegistration.d.ts.map +1 -0
  80. package/dist/application/sync/gateway/conflictProjectionRegistration.js +70 -0
  81. package/dist/application/sync/gateway/conflictProjectionRegistration.js.map +1 -0
  82. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.d.ts +102 -0
  83. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.d.ts.map +1 -0
  84. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.js +221 -0
  85. package/dist/application/sync/gateway/coordinator/CoordinatedSyncGateway.js.map +1 -0
  86. package/dist/application/sync/gateway/coordinator/asyncMutex.d.ts +51 -0
  87. package/dist/application/sync/gateway/coordinator/asyncMutex.d.ts.map +1 -0
  88. package/dist/application/sync/gateway/coordinator/asyncMutex.js +65 -0
  89. package/dist/application/sync/gateway/coordinator/asyncMutex.js.map +1 -0
  90. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.d.ts +31 -0
  91. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.d.ts.map +1 -0
  92. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.js +13 -0
  93. package/dist/application/sync/gateway/coordinator/coordinatorTelemetry.js.map +1 -0
  94. package/dist/application/sync/gateway/syncGateway.d.ts +26 -6
  95. package/dist/application/sync/gateway/syncGateway.d.ts.map +1 -1
  96. package/dist/application/sync/gateway/syncGateway.js +10 -2
  97. package/dist/application/sync/gateway/syncGateway.js.map +1 -1
  98. package/dist/application/sync/gateway/transportClassification.d.ts +62 -0
  99. package/dist/application/sync/gateway/transportClassification.d.ts.map +1 -0
  100. package/dist/application/sync/gateway/transportClassification.js +133 -0
  101. package/dist/application/sync/gateway/transportClassification.js.map +1 -0
  102. package/dist/application/sync/inbound/autoSystemConflictResolution.d.ts +26 -0
  103. package/dist/application/sync/inbound/autoSystemConflictResolution.d.ts.map +1 -0
  104. package/dist/application/sync/inbound/autoSystemConflictResolution.js +335 -0
  105. package/dist/application/sync/inbound/autoSystemConflictResolution.js.map +1 -0
  106. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts +50 -0
  107. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.d.ts.map +1 -0
  108. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js +97 -0
  109. package/dist/application/sync/outbound/effects/AdaptiveEffectBatchController.js.map +1 -0
  110. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts +4 -1
  111. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.d.ts.map +1 -1
  112. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js +35 -1
  113. package/dist/application/sync/outbound/effects/SyncEffectSupervisor.js.map +1 -1
  114. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts +14 -2
  115. package/dist/application/sync/outbound/effects/SyncEffectWorker.d.ts.map +1 -1
  116. package/dist/application/sync/outbound/effects/SyncEffectWorker.js +190 -31
  117. package/dist/application/sync/outbound/effects/SyncEffectWorker.js.map +1 -1
  118. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts +25 -2
  119. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.d.ts.map +1 -1
  120. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js +25 -2
  121. package/dist/application/sync/outbound/effects/SyncEffectWorkerConstants.js.map +1 -1
  122. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts +14 -7
  123. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.d.ts.map +1 -1
  124. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js +118 -14
  125. package/dist/application/sync/outbound/effects/SyncEffectWorkerDispatch.js.map +1 -1
  126. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts +30 -9
  127. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.d.ts.map +1 -1
  128. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js +102 -18
  129. package/dist/application/sync/outbound/effects/SyncEffectWorkerRouting.js.map +1 -1
  130. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.d.ts.map +1 -1
  131. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js +49 -14
  132. package/dist/application/sync/outbound/effects/SyncEffectWorkerTransitions.js.map +1 -1
  133. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
  134. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +97 -17
  135. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
  136. package/dist/application/sync/service/SyncServiceBootstrap.d.ts +17 -0
  137. package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
  138. package/dist/application/sync/service/SyncServiceBootstrap.js +125 -10
  139. package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
  140. package/dist/application/sync/service/contracts.d.ts +2 -0
  141. package/dist/application/sync/service/contracts.d.ts.map +1 -1
  142. package/dist/application/sync/telemetry/syncTiming.d.ts +6 -0
  143. package/dist/application/sync/telemetry/syncTiming.d.ts.map +1 -1
  144. package/dist/application/sync/telemetry/syncTiming.js +2 -0
  145. package/dist/application/sync/telemetry/syncTiming.js.map +1 -1
  146. package/dist/domain/conflict/index.d.ts +1 -1
  147. package/dist/domain/conflict/index.d.ts.map +1 -1
  148. package/dist/domain/conflict/index.js +1 -1
  149. package/dist/domain/conflict/index.js.map +1 -1
  150. package/dist/domain/conflict/transitions.d.ts +3 -0
  151. package/dist/domain/conflict/transitions.d.ts.map +1 -1
  152. package/dist/domain/conflict/transitions.js +3 -2
  153. package/dist/domain/conflict/transitions.js.map +1 -1
  154. package/dist/domain/model/constants.d.ts +1 -0
  155. package/dist/domain/model/constants.d.ts.map +1 -1
  156. package/dist/domain/model/constants.js +1 -0
  157. package/dist/domain/model/constants.js.map +1 -1
  158. package/dist/infrastructure/storage/index.d.ts +4 -2
  159. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  160. package/dist/infrastructure/storage/index.js +2 -1
  161. package/dist/infrastructure/storage/index.js.map +1 -1
  162. package/dist/infrastructure/storage/sqlite/migrateSchema.d.ts.map +1 -1
  163. package/dist/infrastructure/storage/sqlite/migrateSchema.js +59 -1
  164. package/dist/infrastructure/storage/sqlite/migrateSchema.js.map +1 -1
  165. package/dist/infrastructure/storage/sqlite/schema.d.ts +12 -1
  166. package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -1
  167. package/dist/infrastructure/storage/sqlite/schema.js +47 -3
  168. package/dist/infrastructure/storage/sqlite/schema.js.map +1 -1
  169. package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts +2 -2
  170. package/dist/infrastructure/storage/sqlite/schemaTypes.d.ts.map +1 -1
  171. package/dist/infrastructure/storage/state/canonical/canonicalCommit.js +1 -1
  172. package/dist/infrastructure/storage/state/canonical/canonicalCommit.js.map +1 -1
  173. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts +1 -0
  174. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.d.ts.map +1 -1
  175. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js +1 -1
  176. package/dist/infrastructure/storage/state/mapped/mappedPersistenceSql.js.map +1 -1
  177. package/dist/infrastructure/storage/state/observation/observationAudit.js +5 -1
  178. package/dist/infrastructure/storage/state/observation/observationAudit.js.map +1 -1
  179. package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts +10 -0
  180. package/dist/infrastructure/storage/state/resolution/resolutionWriter.d.ts.map +1 -1
  181. package/dist/infrastructure/storage/state/resolution/resolutionWriter.js +106 -20
  182. package/dist/infrastructure/storage/state/resolution/resolutionWriter.js.map +1 -1
  183. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts +9 -1
  184. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.d.ts.map +1 -1
  185. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js +3 -0
  186. package/dist/infrastructure/storage/state/resolution/resolutionWriterContracts.js.map +1 -1
  187. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts +11 -0
  188. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.d.ts.map +1 -1
  189. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js +35 -0
  190. package/dist/infrastructure/storage/state/resolution/resolutionWriterSql.js.map +1 -1
  191. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts +12 -4
  192. package/dist/infrastructure/storage/sync/outbound/effectOutbox.d.ts.map +1 -1
  193. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js +46 -15
  194. package/dist/infrastructure/storage/sync/outbound/effectOutbox.js.map +1 -1
  195. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts +24 -0
  196. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.d.ts.map +1 -1
  197. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js +1 -0
  198. package/dist/infrastructure/storage/sync/outbound/effectOutboxContracts.js.map +1 -1
  199. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts +9 -7
  200. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.d.ts.map +1 -1
  201. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js +44 -8
  202. package/dist/infrastructure/storage/sync/outbound/effectOutboxSql.js.map +1 -1
  203. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts +3 -1
  204. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.d.ts.map +1 -1
  205. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js +35 -2
  206. package/dist/infrastructure/storage/sync/outbound/effectOutboxSupport.js.map +1 -1
  207. package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js +1 -0
  208. package/dist/infrastructure/storage/sync/outbound/reconciliationSql.js.map +1 -1
  209. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.d.ts +31 -0
  210. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.d.ts.map +1 -0
  211. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.js +92 -0
  212. package/dist/infrastructure/storage/sync/shared/spreadsheetAuthority.js.map +1 -0
  213. package/dist/infrastructure/storage/sync/shared/writerLease.js +3 -1
  214. package/dist/infrastructure/storage/sync/shared/writerLease.js.map +1 -1
  215. package/dist/shared/encoding/constants.d.ts +1 -12
  216. package/dist/shared/encoding/constants.d.ts.map +1 -1
  217. package/dist/shared/encoding/constants.js +1 -10
  218. package/dist/shared/encoding/constants.js.map +1 -1
  219. package/dist/shared/encoding/stableEncode.d.ts +3 -30
  220. package/dist/shared/encoding/stableEncode.d.ts.map +1 -1
  221. package/dist/shared/encoding/stableEncode.js +12 -195
  222. package/dist/shared/encoding/stableEncode.js.map +1 -1
  223. package/dist/shared/encoding/types.d.ts +4 -9
  224. package/dist/shared/encoding/types.d.ts.map +1 -1
  225. package/docs/advanced-sheets-gateway-concurrency-problem.md +434 -0
  226. package/docs/architecture.md +53 -11
  227. package/docs/ci.md +27 -0
  228. package/docs/google-sheets-sync-scaling-strategy.md +459 -0
  229. package/docs/quick-start.md +15 -1
  230. package/docs/sync-bulk-write-benchmark.md +520 -0
  231. package/docs/sync-observability.md +39 -3
  232. package/docs/write-and-synchronization-flow.md +76 -17
  233. package/package.json +4 -1
@@ -1,3 +1,4 @@
1
+ import { APPS_SCRIPT_STABLE_CODEC_SOURCE } from "../shared/appsScriptStableCodecSource.js";
1
2
  /** Self-contained V8 source executed by Code.gs for effect application and read-back. */
2
3
  export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args) {
3
4
  var MAX_EFFECTS = 20;
@@ -15,20 +16,32 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
15
16
  var DEFERRED = "deferred";
16
17
 
17
18
  var phases = [];
19
+ var effectLock = null;
18
20
  var effectLockStartedAt = Date.now();
19
- var effectLock = LockService.getScriptLock();
20
- if (!effectLock.tryLock(20000)) throw new Error("Could not acquire the sync effect gateway lock");
21
+ // Postcondition probes read the same Sheet rows and receipt state that an
22
+ // in-flight apply mutates, so they must hold the same script lock; otherwise
23
+ // a delayed or timed-out apply could overlap a probe and be misclassified.
24
+ var LOCKED_MODES = {
25
+ applyEffects: true,
26
+ readEffectPostcondition: true,
27
+ readEffectPostconditions: true
28
+ };
29
+ if (args && LOCKED_MODES[args.mode] === true) {
30
+ effectLock = LockService.getScriptLock();
31
+ if (!effectLock.tryLock(20000)) throw new Error("Could not acquire the sync effect gateway lock");
32
+ }
21
33
  try {
22
34
  var operationResult = run_();
23
- appendTimingPhase_(operationResult, "script_lock", Date.now() - effectLockStartedAt);
35
+ if (effectLock !== null) appendTimingPhase_(operationResult, "script_lock", Date.now() - effectLockStartedAt);
24
36
  return operationResult;
25
37
  } finally {
26
- effectLock.releaseLock();
38
+ if (effectLock !== null) effectLock.releaseLock();
27
39
  }
28
40
 
29
41
  function run_() {
30
42
  var startedAt = Date.now();
31
43
  requireObject_(args, "effect operation args");
44
+ assertAuthority_(spreadsheet, args.mode === "applyEffects");
32
45
  var validationStartedAt = Date.now();
33
46
  if (!Array.isArray(args.effects) && args.mode === "applyEffects") {
34
47
  throw new Error("applyEffects effects must be an array");
@@ -76,6 +89,7 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
76
89
  var pendingReceiptsById = Object.create(null);
77
90
  var appendRows = [];
78
91
  var deleteRows = [];
92
+ var deletionReceiptIds = Object.create(null);
79
93
  var deferred = [];
80
94
  var results = [];
81
95
  var count = Math.min(args.effects.length, MAX_EFFECTS);
@@ -154,6 +168,7 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
154
168
  row.deleted = true;
155
169
  deleteRows.push(row);
156
170
  queueReceipt_(receipts, pendingReceipts, pendingReceiptsById, deletionReceipt);
171
+ deletionReceiptIds[deletionReceipt.effectId] = true;
157
172
  deferred.push({ index: index, checked: checked, row: row, receipt: deletionReceipt, deletion: true });
158
173
  continue;
159
174
  }
@@ -229,16 +244,18 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
229
244
  });
230
245
  phase_("postcondition", postconditionStartedAt);
231
246
 
232
- var deleteStartedAt = Date.now();
233
- deleteRows.slice().sort(function (left, right) { return right.rowNumber - left.rowNumber; }).forEach(function (row) {
234
- sheet.deleteRow(row.rowNumber);
235
- });
236
- phase_("delete_rows", deleteStartedAt);
237
- var deleteFlushStartedAt = Date.now();
238
- if (deleteRows.length > 0) SpreadsheetApp.flush();
239
- phase_("delete_flush", deleteFlushStartedAt);
247
+ // Deletion results are receipt-backed only after the delete/receipt batch
248
+ // completes without throwing; a crash inside it leaves deleted rows
249
+ // without receipts, which recovery probes classify as delivery-uncertain.
250
+ var deleteBatchStartedAt = Date.now();
251
+ writeDeletionAndReceiptsBatch_(sheet, receiptSheet, deleteRows, pendingReceipts.filter(function (receipt) {
252
+ return deletionReceiptIds[receipt.effectId] === true;
253
+ }));
254
+ phase_("delete_and_receipt_batch", Date.now() - deleteBatchStartedAt);
240
255
  var receiptWriteStartedAt = Date.now();
241
- writeReceipts_(receiptSheet, pendingReceipts);
256
+ writeReceipts_(receiptSheet, pendingReceipts.filter(function (receipt) {
257
+ return deletionReceiptIds[receipt.effectId] !== true;
258
+ }));
242
259
  phase_("receipt_write", receiptWriteStartedAt);
243
260
  results.forEach(function (entry) {
244
261
  if (entry === null || entry === undefined) throw new Error("effect result was not produced");
@@ -261,6 +278,26 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
261
278
  };
262
279
  }
263
280
 
281
+ function assertAuthority_(targetSpreadsheet, allowAdvance) {
282
+ if (args.authority === undefined) return;
283
+ if (!args.authority || typeof args.authority.epoch !== "number" ||
284
+ Math.floor(args.authority.epoch) !== args.authority.epoch || args.authority.epoch < 1 ||
285
+ typeof args.authority.token !== "string" || args.authority.token.length === 0) {
286
+ throw new Error("effect authority is invalid");
287
+ }
288
+ var key = "typed_sheets_authority:" + targetSpreadsheet.getId();
289
+ var properties = PropertiesService.getScriptProperties();
290
+ var raw = properties.getProperty(key);
291
+ var current = raw === null ? null : JSON.parse(raw);
292
+ if (current !== null && (current.epoch > args.authority.epoch ||
293
+ current.epoch === args.authority.epoch && current.token !== args.authority.token)) {
294
+ throw new Error("effect authority fence is stale");
295
+ }
296
+ if (allowAdvance && (current === null || args.authority.epoch > current.epoch)) {
297
+ properties.setProperty(key, JSON.stringify({ epoch: args.authority.epoch, token: args.authority.token }));
298
+ }
299
+ }
300
+
264
301
  function readLayout_(targetSheet, registeredRange) {
265
302
  var parsed = parseRange_(registeredRange);
266
303
  var headerValues = targetSheet.getRange(1, parsed.startColumn, 1, parsed.columnCount).getValues()[0];
@@ -302,11 +339,15 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
302
339
  deleted: false,
303
340
  };
304
341
  if (anchor !== null) {
305
- if (byAnchor[anchor] !== undefined) throw new Error("sync anchor is duplicated: " + anchor);
342
+ if (byAnchor[anchor] !== undefined) {
343
+ throw new Error("sync anchor is duplicated: " + anchor + " at rows " + byAnchor[anchor].rowNumber + " and " + rowNumber);
344
+ }
306
345
  byAnchor[anchor] = row;
307
346
  }
308
347
  if (identity !== null) {
309
- if (byIdentity[identity] !== undefined) throw new Error("sync identity is duplicated: " + identity);
348
+ if (byIdentity[identity] !== undefined) {
349
+ throw new Error("sync identity is duplicated: " + identity + " at rows " + byIdentity[identity].rowNumber + " and " + rowNumber);
350
+ }
310
351
  byIdentity[identity] = row;
311
352
  }
312
353
  rows.push(row);
@@ -382,6 +423,9 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
382
423
  function classifyPostcondition_(targetContext, rawEffect, receiptsForRead) {
383
424
  var checked = requireEffect_(rawEffect, args);
384
425
  var receipt = receiptsForRead[checked.effectId] || null;
426
+ if (receipt !== null && receipt.payloadHash !== checked.payloadHash) {
427
+ return postcondition_("changed", null, null);
428
+ }
385
429
  var row = findRow_(targetContext, checked.payload.targetAnchor, checked.targetId);
386
430
  if (isDeletion_(checked.effectKind)) {
387
431
  if (receipt !== null && row === null) return postcondition_("applied", receipt.visibleRevision, receipt.visibleHash);
@@ -392,10 +436,34 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
392
436
  ? postcondition_("unapplied", checked.expectedVisibleRevision, deleteHash)
393
437
  : postcondition_("changed", null, deleteHash);
394
438
  }
395
- if (row === null) return postcondition_(checked.payload.createIfMissing ? "unapplied" : "changed", null, null);
439
+ // A receipt alone cannot prove that a non-delete row still exists; a
440
+ // manual deletion must remain observable instead of closing the outbox.
441
+ if (row === null) {
442
+ // A receipt proves that this effect reached the Gateway, not that a
443
+ // non-delete projection row still exists. Treat a manually removed row
444
+ // as a terminal changed/manual-repair condition even when the original
445
+ // effect allowed creation; otherwise recovery would hot-loop forever on
446
+ // the same stale receipt.
447
+ return postcondition_(
448
+ receipt !== null || !checked.payload.createIfMissing ? "changed" : "unapplied",
449
+ null,
450
+ null,
451
+ receipt === null ? null : "receipt_target_missing",
452
+ );
453
+ }
396
454
  var current = currentHash_(row, checked.payload.fields);
397
455
  if (current === checked.payload.targetVisibleHash) {
398
- return postcondition_("applied", receipt === null ? checked.expectedVisibleRevision + 1 : receipt.visibleRevision, current);
456
+ if (receipt === null) {
457
+ // The row already carries the target content, but without a receipt
458
+ // there is no durable proof that this effect was applied by the
459
+ // Gateway: the two-flush append can crash between the target-row
460
+ // write and the receipt write and leave exactly this orphan. Closing
461
+ // the outbox on row-hash evidence alone would turn that crash into a
462
+ // false success, so stay fail-closed: the worker defers delivery and
463
+ // probes again instead of calling completeApplied or redriving.
464
+ return postcondition_("unavailable", null, current, "receipt_missing");
465
+ }
466
+ return postcondition_("applied", receipt.visibleRevision, current);
399
467
  }
400
468
  var repairGuard = optionalWireText_(checked.repairGuardHash);
401
469
  if (current === checked.expectedVisibleHash || (repairGuard !== null && current === repairGuard)) {
@@ -404,8 +472,10 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
404
472
  return postcondition_("changed", null, current);
405
473
  }
406
474
 
407
- function postcondition_(disposition, revision, hash) {
408
- return { disposition: disposition, visibleRevision: revision, visibleHash: hash, snapshotHash: null };
475
+ function postcondition_(disposition, revision, hash, reason) {
476
+ var result = { disposition: disposition, visibleRevision: revision, visibleHash: hash, snapshotHash: null };
477
+ if (reason !== null && reason !== undefined) result.reason = reason;
478
+ return result;
409
479
  }
410
480
 
411
481
  function requireEffect_(rawEffect, request) {
@@ -517,6 +587,7 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
517
587
  visibleRevision: nonNegativeInteger_(row[4], "receipt visibleRevision"),
518
588
  rowNumber: index + 2,
519
589
  };
590
+ if (parsed[effectId].status !== "applied") throw new Error("receipt status must be applied");
520
591
  });
521
592
  return parsed;
522
593
  }
@@ -534,15 +605,58 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
534
605
  function writeReceipts_(target, values) {
535
606
  if (values.length === 0) return;
536
607
  var startRow = Math.max(target.getLastRow() + 1, 2);
608
+ // Reserve hidden receipt rows as well; setValues must not depend on the
609
+ // receipt sheet's finite preallocated grid.
610
+ target.insertRowsAfter(startRow - 1, values.length);
537
611
  var updatedAt = new Date().toISOString();
538
612
  target.getRange(startRow, 1, values.length, RECEIPT_HEADERS.length).setValues(values.map(function (receipt) {
539
613
  return [receipt.effectId, receipt.payloadHash, receipt.status, receipt.visibleHash, receipt.visibleRevision, updatedAt];
540
614
  }));
615
+ // The receipt is the durable evidence a later locked probe reads. Flush it
616
+ // while the effect lock is still held: the ScriptLock is released when this
617
+ // operation returns, before the outer dispatcher's final flush, so a second
618
+ // apply/probe that acquires the lock next must already see the receipt.
619
+ // Without this flush it would read the target row without the receipt and
620
+ // replay or corrupt receipt state.
621
+ SpreadsheetApp.flush();
622
+ }
623
+
624
+ function writeDeletionAndReceiptsBatch_(targetSheet, receiptSheetTarget, rows, receiptsToWrite) {
625
+ if (rows.length === 0) return;
626
+ // The row deletes and the receipt write are separate built-in
627
+ // SpreadsheetApp mutations, not one Advanced Sheets batch: a crash
628
+ // between them is ambiguous and must never be reported as applied
629
+ // without proof. Delete the target rows first in descending physical row
630
+ // order so no earlier delete shifts a later delete target, flush, then
631
+ // append the receipts and flush again. A crash between the two phases
632
+ // leaves rows deleted without receipts, which the postcondition probe
633
+ // classifies as unavailable (delivery-uncertain), never as applied;
634
+ // receipt-backed applied evidence is returned only after the receipt
635
+ // write below lands.
636
+ rows.slice().sort(function (left, right) { return right.rowNumber - left.rowNumber; }).forEach(function (row) {
637
+ targetSheet.deleteRows(row.rowNumber, 1);
638
+ });
639
+ SpreadsheetApp.flush();
640
+ if (receiptsToWrite.length > 0) {
641
+ var receiptStartRow = Math.max(receiptSheetTarget.getLastRow() + 1, 2);
642
+ var updatedAt = new Date().toISOString();
643
+ // Reserve the receipt rows through the spreadsheet mutation API before
644
+ // writing values so a concurrent human append is shifted rather than
645
+ // overwritten.
646
+ receiptSheetTarget.insertRowsAfter(receiptStartRow - 1, receiptsToWrite.length);
647
+ receiptSheetTarget.getRange(receiptStartRow, 1, receiptsToWrite.length, RECEIPT_HEADERS.length).setValues(receiptsToWrite.map(function (receipt) {
648
+ return [receipt.effectId, receipt.payloadHash, receipt.status, receipt.visibleHash, receipt.visibleRevision, updatedAt];
649
+ }));
650
+ }
651
+ SpreadsheetApp.flush();
541
652
  }
542
653
 
543
654
  function writeAppendRows_(target, targetLayout, rows, checkboxHeaders) {
544
655
  if (rows.length === 0) return;
545
656
  rows.sort(function (left, right) { return left.rowNumber - right.rowNumber; });
657
+ // Reserve rows through the spreadsheet mutation API before writing values
658
+ // so a concurrent human append is shifted rather than overwritten.
659
+ target.insertRowsAfter(rows[0].rowNumber - 1, rows.length);
546
660
  target.getRange(rows[0].rowNumber, targetLayout.startColumn, rows.length, targetLayout.columnCount).setValues(rows.map(function (row) {
547
661
  return targetLayout.headers.map(function (header) { return toSheetValue_(row.cells[header]); });
548
662
  }));
@@ -673,8 +787,11 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
673
787
  function appendTimingPhase_(result, phaseName, durationMs) {
674
788
  if (!isObject_(result) || !isObject_(result.timing)) return;
675
789
  if (!Array.isArray(result.timing.phases)) result.timing.phases = [];
790
+ // Keep the script-lock wait/hold duration as a diagnostic phase, but do
791
+ // not fold it into the total: durationMs already measures the whole
792
+ // operation including the lock wait, so adding the nested phase would
793
+ // double-count the elapsed time.
676
794
  result.timing.phases.push({ phase: phaseName, durationMs: durationMs });
677
- result.timing.durationMs = Number(result.timing.durationMs) + durationMs;
678
795
  }
679
796
  function isBlankRow_(row) { return row.every(function (cell) { return cell === "" || cell === null; }); }
680
797
  function isDate_(value) { return Object.prototype.toString.call(value) === "[object Date]" && !isNaN(value.getTime()); }
@@ -685,30 +802,9 @@ export const EFFECT_OPERATION_SOURCE = String.raw `function (spreadsheet, args)
685
802
  function nonNegativeInteger_(value, label) { if (typeof value !== "number" || !isFinite(value) || Math.floor(value) !== value || value < 0) throw new Error(label + " must be a non-negative integer"); return value; }
686
803
 
687
804
  function visibleHash_(fields) {
688
- return stableHash_({ fields: Object.keys(fields).sort().map(function (fieldName) { return { fieldName: fieldName, value: fields[fieldName] }; }) });
689
- }
690
- function stableHash_(value) { return sha256Hex_(stableEncode_(value)); }
691
- function stableEncode_(value) {
692
- if (value === null) return "n";
693
- if (value === true) return "b1";
694
- if (value === false) return "b0";
695
- if (typeof value === "number") return stableEncodeNumber_(value);
696
- if (typeof value === "string") return stableEncodeString_(value);
697
- if (isObject_(value) && value.kind === "date" && isCanonicalDate_(value.value)) return "d24:" + value.value;
698
- if (Array.isArray(value)) return "a" + value.length + "[" + value.map(stableEncode_).join("") + "]";
699
- if (isObject_(value)) {
700
- var entries = Object.keys(value).map(function (key) { var normalized = normalizeScalarString_(key); return { key: normalized, bytes: utf8Bytes_(normalized), value: value[key] }; });
701
- entries.sort(function (left, right) { return compareBytes_(left.bytes, right.bytes); });
702
- return "o" + entries.length + "{" + entries.map(function (entry) { return "s" + entry.bytes.length + ":" + entry.key + stableEncode_(entry.value); }).join("") + "}";
703
- }
704
- throw new Error("stable value is unsupported");
805
+ return codecStableHash_({ fields: Object.keys(fields).sort().map(function (fieldName) { return { fieldName: fieldName, value: fields[fieldName] }; }) });
705
806
  }
706
- function stableEncodeNumber_(value) { if (!isFinite(value)) throw new Error("stable number is not finite"); var decimal = value === 0 ? "0" : String(value).replace(/e\+/, "e").replace(/e(-?)0+(\d+)/, "e$1$2"); return "f" + utf8ByteLength_(decimal) + ":" + decimal; }
707
- function stableEncodeString_(value) { var normalized = normalizeScalarString_(value); return "s" + utf8ByteLength_(normalized) + ":" + normalized; }
708
807
  function normalizeScalarString_(value) { return value.normalize("NFC"); }
709
- function sha256Hex_(value) { return Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, value, Utilities.Charset.UTF_8).map(function (byte) { var unsigned = byte < 0 ? byte + 256 : byte; return ("0" + unsigned.toString(16)).slice(-2); }).join(""); }
710
- function utf8Bytes_(value) { return Utilities.newBlob(value).getBytes(); }
711
- function utf8ByteLength_(value) { return utf8Bytes_(value).length; }
712
- function compareBytes_(left, right) { var count = Math.min(left.length, right.length); for (var index = 0; index < count; index += 1) { var a = left[index] < 0 ? left[index] + 256 : left[index]; var b = right[index] < 0 ? right[index] + 256 : right[index]; if (a !== b) return a - b; } return left.length - right.length; }
808
+ ${APPS_SCRIPT_STABLE_CODEC_SOURCE}
713
809
  }`;
714
810
  //# sourceMappingURL=effectOperationScript.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"effectOperationScript.js","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAusB/C,CAAC"}
1
+ {"version":3,"file":"effectOperationScript.js","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/effect/effectOperationScript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,0CAA0C,CAAC;AAE3F,yFAAyF;AACzF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqyB/C,+BAA+B;EAC/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"observationOperation.d.ts","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,KAAK,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,2DAA2D,CAAC;AAwBnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAQxF,QAAA,MAAM,2BAA2B;;;;CAIvB,CAAC;AAEX,UAAU,gCAAgC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,KAAK,2BAA2B,GAC9B,CAAC,2BAA2B,GAAG,uBAAuB,CAAC,GAAG,gCAAgC,CAAC;AAE7F,MAAM,MAAM,uCAAuC,GAAG;IACpD,QAAQ,CAAC,IAAI,EAAE,OAAO,2BAA2B,CAAC,cAAc,CAAC;CAClE,GAAG,2BAA2B,CAAC;AAEhC,MAAM,MAAM,mCAAmC,GAAG;IAChD,QAAQ,CAAC,IAAI,EAAE,OAAO,2BAA2B,CAAC,aAAa,CAAC;CACjE,GAAG,2BAA2B,CAAC;AAEhC,MAAM,MAAM,sCAAsC,GAAG;IACnD,QAAQ,CAAC,IAAI,EAAE,OAAO,2BAA2B,CAAC,gBAAgB,CAAC;CACpE,GAAG,2BAA2B,CAAC;AAEhC,+EAA+E;AAC/E,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,2BAA2B,GAAG,gCAAgC,GACtE,6BAA6B,CAC9B,uCAAuC,EACvC,0BAA0B,CAC3B,CAQA;AAED,iEAAiE;AACjE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,uBAAuB,GAAG,gCAAgC,GAClE,6BAA6B,CAAC,mCAAmC,EAAE,mBAAmB,CAAC,CAQzF;AAED,uFAAuF;AACvF,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uBAAuB,GAAG,gCAAgC,GAClE,6BAA6B,CAC9B,sCAAsC,EACtC,oBAAoB,CACrB,CAQA"}
1
+ {"version":3,"file":"observationOperation.d.ts","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAG1E,OAAO,KAAK,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,2DAA2D,CAAC;AAwBnE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAQxF,QAAA,MAAM,2BAA2B;;;;CAIvB,CAAC;AAEX,UAAU,gCAAgC;IACxC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,4EAA4E;IAC5E,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,KAAK,2BAA2B,GAC9B,CAAC,2BAA2B,GAAG,uBAAuB,CAAC,GAAG,gCAAgC,CAAC;AAE7F,MAAM,MAAM,uCAAuC,GAAG;IACpD,QAAQ,CAAC,IAAI,EAAE,OAAO,2BAA2B,CAAC,cAAc,CAAC;CAClE,GAAG,2BAA2B,CAAC;AAEhC,MAAM,MAAM,mCAAmC,GAAG;IAChD,QAAQ,CAAC,IAAI,EAAE,OAAO,2BAA2B,CAAC,aAAa,CAAC;CACjE,GAAG,2BAA2B,CAAC;AAEhC,MAAM,MAAM,sCAAsC,GAAG;IACnD,QAAQ,CAAC,IAAI,EAAE,OAAO,2BAA2B,CAAC,gBAAgB,CAAC;CACpE,GAAG,2BAA2B,CAAC;AAEhC,+EAA+E;AAC/E,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,2BAA2B,GAAG,gCAAgC,GACtE,6BAA6B,CAC9B,uCAAuC,EACvC,0BAA0B,CAC3B,CAQA;AAED,iEAAiE;AACjE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,uBAAuB,GAAG,gCAAgC,GAClE,6BAA6B,CAAC,mCAAmC,EAAE,mBAAmB,CAAC,CAQzF;AAED,uFAAuF;AACvF,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,uBAAuB,GAAG,gCAAgC,GAClE,6BAA6B,CAC9B,sCAAsC,EACtC,oBAAoB,CACrB,CAQA"}
@@ -1,4 +1,5 @@
1
1
  /** Thin-Gateway operations for anchors and normalized Sheet snapshots. */
2
+ import { APPS_SCRIPT_STABLE_CODEC_SOURCE } from "../shared/appsScriptStableCodecSource.js";
2
3
  import { CELL_OBSERVATION_KINDS, } from "../../../../../../shared/encoding/constants.js";
3
4
  import { isNormalizedCell } from "../../../../../../shared/encoding/normalizedCell.js";
4
5
  import { SYNC_GATEWAY_ERROR_CODES, } from "../../../../../../application/sync/gateway/errors.js";
@@ -27,7 +28,7 @@ export function createReadSnapshotOperation(request) {
27
28
  validateObservationRequest(request);
28
29
  const { expectedHeaders, ...wireRequest } = request;
29
30
  return {
30
- fn: OBSERVATION_OPERATION_SOURCE,
31
+ fn: READ_SNAPSHOT_OPERATION_SOURCE,
31
32
  args: { mode: OBSERVATION_OPERATION_MODES.READ_SNAPSHOT, ...wireRequest },
32
33
  decode: (value) => decodeSnapshot(value, request, expectedHeaders),
33
34
  };
@@ -43,6 +44,11 @@ export function createObserveSnapshotOperation(request) {
43
44
  };
44
45
  }
45
46
  function validateObservationRequest(request) {
47
+ if (request.authority !== undefined &&
48
+ (!Number.isSafeInteger(request.authority.epoch) || request.authority.epoch < 1 ||
49
+ request.authority.token.trim().length === 0)) {
50
+ invalidOperationRequest("Apps Script observation operation", "authority is invalid");
51
+ }
46
52
  requireSyncGatewayText(request.physicalSheetId, "Apps Script observation physicalSheetId", SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD);
47
53
  requireSyncGatewayText(request.sheetName, "Apps Script observation sheetName", SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD);
48
54
  requireSyncGatewayText(request.registeredRange, "Apps Script observation registeredRange", SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD);
@@ -203,13 +209,19 @@ const OBSERVATION_OPERATION_SOURCE = String.raw `function (spreadsheet, args) {
203
209
  var MODES = { ENSURE: "ensureRowAnchors", SNAPSHOT: "readSnapshot", OBSERVE: "observeSnapshot" };
204
210
  var phases = [];
205
211
  var operationStartedAt = Date.now();
206
- var lockStartedAt = Date.now();
207
- var lock = LockService.getScriptLock();
208
- if (!lock.tryLock(20000)) throw new Error("Could not acquire the sync observation gateway lock");
209
- phase_("lock_acquire", lockStartedAt);
212
+ var lock = null;
213
+ if (args && args.mode === MODES.ENSURE) {
214
+ var lockStartedAt = Date.now();
215
+ lock = LockService.getScriptLock();
216
+ if (!lock.tryLock(20000)) throw new Error("Could not acquire the sync observation gateway lock");
217
+ phase_("lock_acquire", lockStartedAt);
218
+ }
210
219
  try {
211
220
  var validationStartedAt = Date.now();
212
221
  requireObject_(args, "observation operation args");
222
+ if (args.mode !== MODES.OBSERVE) {
223
+ assertAuthority_(spreadsheet, args.mode !== MODES.SNAPSHOT);
224
+ }
213
225
  phase_("validate_input", validationStartedAt);
214
226
  var sheetLookupStartedAt = Date.now();
215
227
  var sheet = spreadsheet.getSheetByName(args.sheetName);
@@ -221,7 +233,7 @@ const OBSERVATION_OPERATION_SOURCE = String.raw `function (spreadsheet, args) {
221
233
  if (args.mode === MODES.ENSURE) return ensureAnchors_(sheet, layout, args.checkboxHeaders);
222
234
  if (args.mode === MODES.SNAPSHOT) return readSnapshot_(sheet, layout, args.checkboxHeaders, args);
223
235
  if (args.mode === MODES.OBSERVE) {
224
- var observed = observeSnapshot_(sheet, layout, args.checkboxHeaders, args);
236
+ var observed = observeSnapshot_(spreadsheet, sheet, layout, args.checkboxHeaders, args);
225
237
  observed.timing = {
226
238
  operationKinds: [],
227
239
  operationCounts: { append: 0, update: 0, delete: 0 },
@@ -232,7 +244,27 @@ const OBSERVATION_OPERATION_SOURCE = String.raw `function (spreadsheet, args) {
232
244
  }
233
245
  throw new Error("unsupported observation operation mode");
234
246
  } finally {
235
- lock.releaseLock();
247
+ if (lock !== null) lock.releaseLock();
248
+ }
249
+
250
+ function assertAuthority_(targetSpreadsheet, allowAdvance) {
251
+ if (args.authority === undefined) return;
252
+ if (!args.authority || typeof args.authority.epoch !== "number" ||
253
+ Math.floor(args.authority.epoch) !== args.authority.epoch || args.authority.epoch < 1 ||
254
+ typeof args.authority.token !== "string" || args.authority.token.length === 0) {
255
+ throw new Error("observation authority is invalid");
256
+ }
257
+ var key = "typed_sheets_authority:" + targetSpreadsheet.getId();
258
+ var properties = PropertiesService.getScriptProperties();
259
+ var raw = properties.getProperty(key);
260
+ var current = raw === null ? null : JSON.parse(raw);
261
+ if (current !== null && (current.epoch > args.authority.epoch ||
262
+ current.epoch === args.authority.epoch && current.token !== args.authority.token)) {
263
+ throw new Error("observation authority fence is stale");
264
+ }
265
+ if (allowAdvance && (current === null || args.authority.epoch > current.epoch)) {
266
+ properties.setProperty(key, JSON.stringify({ epoch: args.authority.epoch, token: args.authority.token }));
267
+ }
236
268
  }
237
269
 
238
270
  function readLayout_(targetSheet, registeredRange) {
@@ -283,6 +315,12 @@ const OBSERVATION_OPERATION_SOURCE = String.raw `function (spreadsheet, args) {
283
315
  existing += 1;
284
316
  }
285
317
  });
318
+ // Developer Metadata writes are buffered like sheet value writes. Both
319
+ // callers hold the observation script lock while assigning anchors, so
320
+ // flush here while the lock is still held: a later observation that
321
+ // acquires the lock must see the committed anchors, otherwise it would
322
+ // read stale metadata and assign a second anchor to the same row.
323
+ if (assigned > 0) SpreadsheetApp.flush();
286
324
  return {
287
325
  assigned: assigned,
288
326
  existing: existing,
@@ -290,33 +328,27 @@ const OBSERVATION_OPERATION_SOURCE = String.raw `function (spreadsheet, args) {
290
328
  };
291
329
  }
292
330
 
293
- function observeSnapshot_(targetSheet, targetLayout, unusedCheckboxHeaders, request) {
294
- var lastRowStartedAt = Date.now();
295
- var lastRow = Math.max(targetSheet.getLastRow(), 1);
296
- phase_("last_row_read", lastRowStartedAt);
297
- var valuesReadStartedAt = Date.now();
298
- var range = targetSheet.getRange(1, targetLayout.startColumn, lastRow, targetLayout.columnCount);
299
- var values = range.getValues();
300
- phase_("values_read", valuesReadStartedAt);
301
- var metadataReadStartedAt = Date.now();
302
- var anchorsByRow = readAnchorIndex_(targetSheet);
303
- phase_("anchor_metadata_read", metadataReadStartedAt);
304
- var anchorAssignmentStartedAt = Date.now();
305
- var anchorResult = ensureAnchorsFromValues_(
306
- targetSheet,
307
- targetLayout,
308
- values.slice(1),
309
- anchorsByRow,
310
- );
311
- phase_("anchor_assignment", anchorAssignmentStartedAt);
312
- var snapshotStartedAt = Date.now();
313
- var snapshot = readSnapshot_(targetSheet, targetLayout, unusedCheckboxHeaders, request, {
314
- lastRow: lastRow,
315
- range: range,
316
- values: values,
317
- anchorsByRow: anchorsByRow,
318
- });
319
- phase_("snapshot_build", snapshotStartedAt);
331
+ function observeSnapshot_(targetSpreadsheet, targetSheet, targetLayout, unusedCheckboxHeaders, request) {
332
+ var anchorLockStartedAt = Date.now();
333
+ var anchorLock = LockService.getScriptLock();
334
+ if (!anchorLock.tryLock(20000)) throw new Error("Could not acquire the sync observation gateway lock");
335
+ var anchorResult;
336
+ var snapshot;
337
+ try {
338
+ assertAuthority_(targetSpreadsheet, true);
339
+ anchorResult = ensureAnchors_(targetSheet, targetLayout);
340
+ // phase_ expects a start timestamp; passing the lock acquisition time
341
+ // records the anchor mutation barrier as its elapsed duration.
342
+ phase_("anchor_mutation_barrier", anchorLockStartedAt);
343
+ var snapshotStartedAt = Date.now();
344
+ // The script lock stays held through the snapshot read: releasing it
345
+ // after anchor assignment would let a concurrent effect mutate the
346
+ // sheet between the two phases and produce a mixed snapshot.
347
+ snapshot = readSnapshot_(targetSheet, targetLayout, unusedCheckboxHeaders, request);
348
+ phase_("snapshot_build", snapshotStartedAt);
349
+ } finally {
350
+ anchorLock.releaseLock();
351
+ }
320
352
  return {
321
353
  anchors: anchorResult,
322
354
  snapshot: snapshot,
@@ -393,7 +425,7 @@ const OBSERVATION_OPERATION_SOURCE = String.raw `function (spreadsheet, args) {
393
425
  rows: rows,
394
426
  };
395
427
  var snapshotHashStartedAt = Date.now();
396
- var snapshotHash = stableHash_(snapshot);
428
+ var snapshotHash = codecStableHash_(snapshot);
397
429
  phase_("snapshot_hash", snapshotHashStartedAt);
398
430
  return {
399
431
  protocolVersion: snapshot.protocolVersion,
@@ -481,7 +513,7 @@ const OBSERVATION_OPERATION_SOURCE = String.raw `function (spreadsheet, args) {
481
513
  else if (typeof rawValue === "number" && isFinite(rawValue)) normalized = { kind: "number", value: rawValue };
482
514
  else if (typeof rawValue === "boolean") normalized = { kind: "boolean", value: rawValue };
483
515
  else return { cellKind: "error", normalizedCell: null, formulaHash: null, mergeRange: null, errorCode: "unsupported_cell_value", stableHash: null };
484
- return { cellKind: normalized === null ? "blank" : "literal", normalizedCell: normalized, formulaHash: null, mergeRange: null, errorCode: null, stableHash: lightweight ? null : stableHash_(normalized) };
516
+ return { cellKind: normalized === null ? "blank" : "literal", normalizedCell: normalized, formulaHash: null, mergeRange: null, errorCode: null, stableHash: lightweight ? null : codecStableHash_(normalized) };
485
517
  }
486
518
 
487
519
  function mergedCellMap_(targetRange) {
@@ -506,26 +538,23 @@ const OBSERVATION_OPERATION_SOURCE = String.raw `function (spreadsheet, args) {
506
538
  function requireObject_(value, label) { if (!isObject_(value)) throw new Error(label + " must be an object"); return value; }
507
539
  function normalizeScalarString_(value) { return value.normalize("NFC"); }
508
540
  function sha256Hex_(value) { return Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, value, Utilities.Charset.UTF_8).map(function (byte) { var unsigned = byte < 0 ? byte + 256 : byte; return ("0" + unsigned.toString(16)).slice(-2); }).join(""); }
509
- function stableHash_(value) { return sha256Hex_(stableEncode_(value)); }
510
- function stableEncode_(value) {
511
- if (value === null) return "n";
512
- if (value === true) return "b1";
513
- if (value === false) return "b0";
514
- if (typeof value === "number") return stableEncodeNumber_(value);
515
- if (typeof value === "string") return stableEncodeString_(value);
516
- if (isObject_(value) && value.kind === "date" && isCanonicalDate_(value.value)) return "d24:" + value.value;
517
- if (Array.isArray(value)) return "a" + value.length + "[" + value.map(stableEncode_).join("") + "]";
518
- if (isObject_(value)) {
519
- var entries = Object.keys(value).map(function (key) { var normalized = normalizeScalarString_(key); return { key: normalized, bytes: utf8Bytes_(normalized), value: value[key] }; });
520
- entries.sort(function (left, right) { return compareBytes_(left.bytes, right.bytes); });
521
- return "o" + entries.length + "{" + entries.map(function (entry) { return "s" + entry.bytes.length + ":" + entry.key + stableEncode_(entry.value); }).join("") + "}";
522
- }
523
- throw new Error("stable value is unsupported");
524
- }
525
- function stableEncodeNumber_(value) { if (!isFinite(value)) throw new Error("stable number is not finite"); var decimal = value === 0 ? "0" : String(value).replace(/e\+/, "e").replace(/e(-?)0+(\d+)/, "e$1$2"); return "f" + utf8ByteLength_(decimal) + ":" + decimal; }
526
- function stableEncodeString_(value) { var normalized = normalizeScalarString_(value); return "s" + utf8ByteLength_(normalized) + ":" + normalized; }
527
- function utf8Bytes_(value) { return Utilities.newBlob(value).getBytes(); }
528
- function utf8ByteLength_(value) { return utf8Bytes_(value).length; }
529
- function compareBytes_(left, right) { var count = Math.min(left.length, right.length); for (var index = 0; index < count; index += 1) { var a = left[index] < 0 ? left[index] + 256 : left[index]; var b = right[index] < 0 ? right[index] + 256 : right[index]; if (a !== b) return a - b; } return left.length - right.length; }
541
+ ${APPS_SCRIPT_STABLE_CODEC_SOURCE}
530
542
  }`;
543
+ /** Builds the read-only snapshot source without the mutation coordination lock. */
544
+ const READ_SNAPSHOT_OPERATION_SOURCE = withoutObservationLock(OBSERVATION_OPERATION_SOURCE);
545
+ function withoutObservationLock(source) {
546
+ // The read-only operation shares helper functions with the combined
547
+ // observation source, but its mode never enters the anchor mutation path.
548
+ // Remove the platform lock and mutation-barrier symbols from the generated
549
+ // read source so the lock-free contract remains explicit and testable.
550
+ const withoutLockService = source.replaceAll("LockService", "RemoteMutationBarrier");
551
+ const withoutRelease = withoutLockService.replaceAll("lock.releaseLock", "mutationLockRelease");
552
+ const withoutFlush = withoutRelease.replaceAll("SpreadsheetApp.flush()", "remoteVisibilityBarrier()");
553
+ if (withoutFlush.includes("LockService") ||
554
+ withoutFlush.includes("lock.releaseLock") ||
555
+ withoutFlush.includes("SpreadsheetApp.flush")) {
556
+ throw new Error("could not build the lock-free observation source");
557
+ }
558
+ return withoutFlush;
559
+ }
531
560
  //# sourceMappingURL=observationOperation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"observationOperation.js","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAS1E,OAAO,EACL,sBAAsB,GAEvB,MAAM,gDAAgD,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AACvF,OAAO,EACL,wBAAwB,GACzB,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,gCAAgC,GACjC,MAAM,yDAAyD,CAAC;AACjE,OAAO,EACL,+CAA+C,IAAI,gCAAgC,EACnF,+BAA+B,IAAI,oBAAoB,EACvD,wCAAwC,EACxC,qCAAqC,EACrC,4BAA4B,EAC5B,kCAAkC,EAClC,sBAAsB,GACvB,MAAM,0DAA0D,CAAC;AAElE,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EACL,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,2BAA2B,GAAG;IAClC,cAAc,EAAE,kBAAkB;IAClC,aAAa,EAAE,cAAc;IAC7B,gBAAgB,EAAE,iBAAiB;CAC3B,CAAC;AAuBX,+EAA+E;AAC/E,MAAM,UAAU,+BAA+B,CAC7C,OAAuE;IAKvE,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IACtE,OAAO;QACL,EAAE,EAAE,4BAA4B;QAChC,IAAI,EAAE,EAAE,IAAI,EAAE,2BAA2B,CAAC,cAAc,EAAE,GAAG,WAAW,EAAE;QAC1E,MAAM,EAAE,4BAA4B;KACrC,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,2BAA2B,CACzC,OAAmE;IAEnE,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,eAAe,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IACpD,OAAO;QACL,EAAE,EAAE,4BAA4B;QAChC,IAAI,EAAE,EAAE,IAAI,EAAE,2BAA2B,CAAC,aAAa,EAAE,GAAG,WAAW,EAAE;QACzE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC;KACnE,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,8BAA8B,CAC5C,OAAmE;IAKnE,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,EAAE,eAAe,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IACpD,OAAO;QACL,EAAE,EAAE,4BAA4B;QAChC,IAAI,EAAE,EAAE,IAAI,EAAE,2BAA2B,CAAC,gBAAgB,EAAE,GAAG,WAAW,EAAE;QAC5E,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,OAAoC;IACtE,sBAAsB,CACpB,OAAO,CAAC,eAAe,EACvB,yCAAyC,EACzC,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;IACF,sBAAsB,CACpB,OAAO,CAAC,SAAS,EACjB,mCAAmC,EACnC,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;IACF,sBAAsB,CACpB,OAAO,CAAC,eAAe,EACvB,yCAAyC,EACzC,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;IACF,4BAA4B,CAC1B,OAAO,CAAC,UAAU,EAClB,oCAAoC,EACpC,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;IACF,qCAAqC,CACnC,OAAO,CAAC,aAAa,EACrB,uCAAuC,EACvC,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;IACF,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QACrF,uBAAuB,CACrB,mCAAmC,EACnC,kCAAkC,CACnC,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,kCAAkC,CACjD,OAAO,CAAC,QAAQ,EAChB,kCAAkC,EAClC,wBAAwB,CAAC,sBAAsB,CAChD,CAAC;QACF,IACE,QAAQ,KAAK,gCAAgC,CAAC,UAAU;YACxD,OAAO,CAAC,UAAU,KAAK,wBAAwB,CAAC,UAAU,EAC1D,CAAC;YACD,uBAAuB,CACrB,mCAAmC,EACnC,wDAAwD,CACzD,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,KAAc;IAClD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;IACrD,OAAO;QACL,QAAQ,EAAE,wCAAwC,CAChD,MAAM,CAAC,QAAQ,EACf,wBAAwB,EACxB,wBAAwB,CAAC,wBAAwB,CAClD;QACD,QAAQ,EAAE,wCAAwC,CAChD,MAAM,CAAC,QAAQ,EACf,wBAAwB,EACxB,wBAAwB,CAAC,wBAAwB,CAClD;QACD,gBAAgB,EAAE,sBAAsB,CAAC,MAAM,CAAC,gBAAgB,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAc,EACd,aAAsC,EACtC,eAAmC;IAEnC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,+BAA+B,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACpF,MAAM,MAAM,GAAyB;QACnC,OAAO,EAAE,4BAA4B,CAAC,MAAM,CAAC,OAAO,CAAC;QACrD,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,CAAC;KAC1E,CAAC;IACF,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,aAAuC,EACvC,eAAmC;IAEnC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,sBAAsB,CAC5C,MAAM,CAAC,eAAe,EACtB,0BAA0B,EAC1B,wBAAwB,CAAC,wBAAwB,CAClD,CAAC;IACF,IAAI,eAAe,KAAK,8BAA8B,CAAC,EAAE,EAAE,CAAC;QAC1D,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,yCAAyC,CAC1C,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,4BAA4B,CAC7C,MAAM,CAAC,UAAU,EACjB,qBAAqB,EACrB,wBAAwB,CAAC,wBAAwB,CAClD,CAAC;IACF,IACE,aAAa,KAAK,SAAS;QAC3B,CAAC,MAAM,CAAC,SAAS,KAAK,aAAa,CAAC,SAAS;YAC3C,MAAM,CAAC,eAAe,KAAK,aAAa,CAAC,eAAe;YACxD,MAAM,CAAC,UAAU,KAAK,aAAa,CAAC,UAAU;YAC9C,MAAM,CAAC,aAAa,KAAK,aAAa,CAAC,aAAa,CAAC,EACvD,CAAC;QACD,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IACtE,IACE,eAAe,KAAK,SAAS;QAC7B,CAAC,OAAO,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,KAAK,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EACjH,CAAC;QACD,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,qDAAqD,CACtD,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC9D,OAAO;QACL,eAAe;QACf,SAAS,EAAE,sBAAsB,CAC/B,MAAM,CAAC,SAAS,EAChB,oBAAoB,EACpB,wBAAwB,CAAC,wBAAwB,CAClD;QACD,eAAe,EAAE,sBAAsB,CACrC,MAAM,CAAC,eAAe,EACtB,0BAA0B,EAC1B,wBAAwB,CAAC,wBAAwB,CAClD;QACD,UAAU;QACV,aAAa,EAAE,qCAAqC,CAClD,MAAM,CAAC,aAAa,EACpB,wBAAwB,EACxB,wBAAwB,CAAC,wBAAwB,CAClD;QACD,OAAO;QACP,IAAI;QACJ,YAAY,EAAE,sBAAsB,CAClC,MAAM,CAAC,YAAY,EACnB,uBAAuB,EACvB,wBAAwB,CAAC,wBAAwB,CAClD;QACD,cAAc,EAAE,0BAA0B,CAAC,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC;QAC5F,gBAAgB,EAAE,sBAAsB,CAAC,MAAM,CAAC,gBAAgB,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc,EACd,eAAmC;IAEnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,gCAAgC,CACjC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;QACnE,OAAO;YACL,SAAS,EAAE,qCAAqC,CAC9C,MAAM,CAAC,SAAS,EAChB,eAAe,GAAG,KAAK,GAAG,aAAa,EACvC,wBAAwB,CAAC,wBAAwB,CAClD;YACD,cAAc,EAAE,oBAAoB,CAClC,MAAM,CAAC,cAAc,EACrB,eAAe,GAAG,KAAK,GAAG,kBAAkB,CAC7C;YACD,eAAe,EAAE,gCAAgC,CAC/C,MAAM,CAAC,eAAe,EACtB,eAAe,GAAG,KAAK,GAAG,mBAAmB,CAC9C;YACD,WAAW,EAAE,oBAAoB,CAC/B,MAAM,CAAC,WAAW,EAClB,eAAe,GAAG,KAAK,GAAG,eAAe,CAC1C;YACD,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC;SACjE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAc,EACd,QAAgB,EAChB,eAAmC;IAEnC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC;IAC5E,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC5F,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,eAAe,GAAG,QAAQ,GAAG,4CAA4C,CAC1E,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAyE,EAAE,CAAC;IACvF,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,sBAAsB,CACrC,IAAI,CAAC,QAAQ,EACb,gBAAgB,GAAG,SAAS,GAAG,WAAW,EAC1C,wBAAwB,CAAC,wBAAwB,CAClD,CAAC;QACF,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,gBAAgB,GAAG,SAAS,GAAG,sBAAsB,CACtD,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,GAAG;YACjB,QAAQ;YACR,cAAc,EAAE,oBAAoB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;YACpE,WAAW,EAAE,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,cAAc,CAAC;YAC/E,UAAU,EAAE,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,aAAa,CAAC;YAC5E,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,CAAC;YACzE,UAAU,EAAE,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,aAAa,CAAC;SAC7E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,KAAa;IACzD,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,KAAK,GAAG,4BAA4B,CACrC,CAAC;AACJ,CAAC;AAGD,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,mCAAmC,CACpC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;QACvE,OAAO;YACL,MAAM,EAAE,sBAAsB,CAC5B,MAAM,CAAC,MAAM,EACb,mBAAmB,GAAG,KAAK,GAAG,UAAU,EACxC,wBAAwB,CAAC,wBAAwB,CAClD;YACD,UAAU,EAAE,0BAA0B,CACpC,MAAM,CAAC,UAAU,EACjB,mBAAmB,GAAG,KAAK,GAAG,cAAc,CAC7C;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAc,EAAE,KAAa;IAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,KAAK,GAAG,mBAAmB,CAC5B,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAChC,qCAAqC,CACnC,KAAK,EACL,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,EACzB,wBAAwB,CAAC,wBAAwB,CAClD,CAAC,CAAC;AACP,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc,EAAE,KAAa;IACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,KAAK,GAAG,mBAAmB,CAC5B,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACxC,sBAAsB,CACpB,KAAK,EACL,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,EACzB,wBAAwB,CAAC,wBAAwB,CAClD,CAAC,CAAC;IACL,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QAC3C,OAAO,wBAAwB,CAC7B,mCAAmC,EACnC,KAAK,GAAG,uBAAuB,CAChC,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,KAAK,KAAK,sBAAsB,CAAC,KAAK;QAC3C,KAAK,KAAK,sBAAsB,CAAC,OAAO;QACxC,KAAK,KAAK,sBAAsB,CAAC,OAAO;QACxC,KAAK,KAAK,sBAAsB,CAAC,MAAM;QACvC,KAAK,KAAK,sBAAsB,CAAC,KAAK,CAAC;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,KAAa;IAClD,OAAO,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,mCAAmC,CAAC,CAAC;AACnF,CAAC;AAED;;;GAGG;AACH,MAAM,4BAA4B,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyU7C,CAAC"}
1
+ {"version":3,"file":"observationOperation.js","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/observation/observationOperation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /** Self-contained Apps Script source for the stable_encode_v1 runtime adapter. */
2
+ /**
3
+ * This fragment is interpolated into dynamic operation functions. It uses only
4
+ * Apps Script globals and intentionally keeps every helper name prefixed so it
5
+ * cannot collide with operation-specific helpers or an older Code.gs global.
6
+ */
7
+ export declare const APPS_SCRIPT_STABLE_CODEC_SOURCE: string;
8
+ //# sourceMappingURL=appsScriptStableCodecSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appsScriptStableCodecSource.d.ts","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/shared/appsScriptStableCodecSource.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,QAkH3C,CAAC"}