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,223 +1,37 @@
1
- /** Typed fast-append operation executed by the current thin `Code.gs`. */
2
- import { SYNC_GATEWAY_FAST_APPEND_STATUSES } from "../../../../../../application/sync/gateway/constants.js";
3
- import { decodeOptionalSyncGatewayTiming } from "../../protocol/timing.js";
4
- import { invalidOperationRequest, invalidOperationResponse, } from "../../errors.js";
1
+ /** Compatibility name for the idempotent built-in Apps Script append operation. */
2
+ import { stableHash } from "../../../../../../domain/index.js";
5
3
  import { isNormalizedCell } from "../../../../../../shared/encoding/normalizedCell.js";
6
- import { isRecord } from "../../../../../../shared/encoding/typeGuards.js";
4
+ import { invalidOperationRequest } from "../../errors.js";
5
+ import { createBatchAppendRowsOperation, } from "./batchAppendOperation.js";
7
6
  /**
8
- * Builds one operation that appends all supplied rows with one `setValues()`.
7
+ * Builds the current idempotent built-in Apps Script append operation.
8
+ * The old name remains internal compatibility only; transport callers now use
9
+ * createBatchAppendRowsOperation directly.
9
10
  *
10
- * The remote function intentionally does not read or write Developer Metadata,
11
- * receipts, snapshots, or CAS state. `Code.gs` performs one final `flush()` for
12
- * the whole request; reconciliation remains responsible for later drift repair.
11
+ * The registered identityField is required: the built-in append path never
12
+ * materializes anchor metadata, so replay locates the target row through the
13
+ * identity column and fails closed when it is missing.
13
14
  */
14
15
  export function createFastAppendRowsOperation(request) {
15
- validateFastAppendRequest(request);
16
- return {
17
- fn: FAST_APPEND_OPERATION_SOURCE,
18
- args: request,
19
- decode: (value) => decodeFastAppendResult(value, request.rows),
20
- };
21
- }
22
- /** Self-contained V8 function source restored by `Code.gs` with `eval`. */
23
- const FAST_APPEND_OPERATION_SOURCE = `function (spreadsheet, args) {
24
- var startedAt = Date.now();
25
- var phases = [];
26
- var validationStartedAt = Date.now();
27
- if (!args || typeof args.sheetName !== "string" || args.sheetName.length === 0) {
28
- throw new Error("fast append sheetName is required");
29
- }
30
- if (typeof args.registeredRange !== "string" || !/^[A-Z]+:[A-Z]+$/.test(args.registeredRange)) {
31
- throw new Error("fast append registeredRange must be an uppercase whole-column range");
32
- }
33
- if (!Array.isArray(args.headers) || args.headers.length === 0) {
34
- throw new Error("fast append headers are required");
35
- }
36
- if (!Array.isArray(args.rows)) {
37
- throw new Error("fast append rows must be an array");
38
- }
39
- var range = parseRange_(args.registeredRange);
40
- if (range.columnCount !== args.headers.length) {
41
- throw new Error("fast append headers do not match registeredRange");
42
- }
43
- phase_("validate_input", validationStartedAt);
44
-
45
- var sheetLookupStartedAt = Date.now();
46
- var sheet = spreadsheet.getSheetByName(args.sheetName);
47
- if (sheet === null) throw new Error("fast append sheet was not found: " + args.sheetName);
48
- phase_("sheet_lookup", sheetLookupStartedAt);
49
- if (args.rows.length === 0) return result_([], false);
50
-
51
- var encodeStartedAt = Date.now();
52
- var values = args.rows.map(function (row) {
53
- if (!row || typeof row.effectId !== "string" || row.effectId.length === 0) {
54
- throw new Error("fast append effectId is required");
55
- }
56
- if (!row.fields || typeof row.fields !== "object") {
57
- throw new Error("fast append fields are required");
58
- }
59
- var fieldNames = Object.keys(row.fields).sort();
60
- var expectedFieldNames = args.headers.slice().sort();
61
- if (fieldNames.length !== expectedFieldNames.length || fieldNames.some(function (field, index) {
62
- return field !== expectedFieldNames[index];
63
- })) {
64
- throw new Error("fast append row fields do not match headers");
65
- }
66
- return args.headers.map(function (header) {
67
- return toSheetValue_(row.fields[header]);
16
+ // Only the historical builder supplies this compatibility fallback. The
17
+ // worker transport uses createBatchAppendRowsOperation directly and always
18
+ // carries the durable outbox payload hash. Legacy direct callers still get
19
+ // a content-derived hash so changing fields cannot replay an effect ID as
20
+ // if it had the same payload.
21
+ return createBatchAppendRowsOperation({
22
+ ...request,
23
+ rows: request.rows.map((row) => ({
24
+ ...row,
25
+ payloadHash: row.payloadHash ?? legacyPayloadHash(row.fields),
26
+ })),
68
27
  });
69
- });
70
- phase_("encode_values", encodeStartedAt);
71
-
72
- var rangeStartedAt = Date.now();
73
- var startRow = Math.max(sheet.getLastRow() + 1, 2);
74
- phase_("append_range_lookup", rangeStartedAt);
75
- var writeStartedAt = Date.now();
76
- sheet.getRange(startRow, range.startColumn, values.length, range.columnCount).setValues(values);
77
- phase_("set_values", writeStartedAt);
78
- return result_(args.rows.map(function (row) {
79
- return { effectId: row.effectId, status: "applied" };
80
- }), false, startRow);
81
-
82
- function result_(results, hasMore, startRowValue) {
83
- var result = {
84
- results: results,
85
- hasMore: hasMore,
86
- timing: {
87
- operationKinds: ["append"],
88
- operationCounts: { append: results.length, update: 0, delete: 0 },
89
- durationMs: Date.now() - startedAt,
90
- phases: phases,
91
- },
92
- };
93
- if (startRowValue !== undefined) result.startRow = startRowValue;
94
- return result;
95
- }
96
-
97
- function parseRange_(value) {
98
- var parts = value.split(":");
99
- var startColumn = columnNumber_(parts[0]);
100
- var endColumn = columnNumber_(parts[1]);
101
- if (endColumn < startColumn) throw new Error("fast append range end precedes start");
102
- return { startColumn: startColumn, columnCount: endColumn - startColumn + 1 };
103
- }
104
-
105
- function columnNumber_(letters) {
106
- var value = 0;
107
- for (var index = 0; index < letters.length; index += 1) value = value * 26 + letters.charCodeAt(index) - 64;
108
- return value;
109
- }
110
-
111
- function isCanonicalDate_(value) {
112
- if (typeof value !== "string" || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value)) return false;
113
- var parsed = new Date(value);
114
- return !isNaN(parsed.getTime()) && parsed.toISOString() === value;
115
- }
116
-
117
- function phase_(name, phaseStartedAt) {
118
- phases.push({ phase: name, durationMs: Date.now() - phaseStartedAt });
119
- }
120
-
121
- function toSheetValue_(cell) {
122
- if (cell === null || cell === undefined) return "";
123
- if (typeof cell !== "object" || typeof cell.kind !== "string") {
124
- throw new Error("fast append cell is invalid");
125
- }
126
- if (cell.kind === "string") {
127
- if (typeof cell.value !== "string") throw new Error("fast append text cell is invalid");
128
- return cell.value;
129
- }
130
- if (cell.kind === "date") {
131
- if (!isCanonicalDate_(cell.value)) throw new Error("fast append date cell is invalid");
132
- return new Date(cell.value);
133
- }
134
- if (cell.kind === "number") {
135
- if (typeof cell.value !== "number" || !isFinite(cell.value)) {
136
- throw new Error("fast append number cell is invalid");
137
- }
138
- return cell.value;
139
- }
140
- if (cell.kind === "boolean") {
141
- if (typeof cell.value !== "boolean") throw new Error("fast append boolean cell is invalid");
142
- return cell.value;
143
- }
144
- throw new Error("fast append cell kind is unsupported");
145
- }
146
- }`;
147
- function validateFastAppendRequest(request) {
148
- if (request.sheetName.trim().length === 0) {
149
- invalidOperationRequest("fast append operation", "sheetName is required");
150
- }
151
- if (!/^[A-Z]+:[A-Z]+$/.test(request.registeredRange)) {
152
- invalidOperationRequest("fast append operation", "registeredRange must be an uppercase whole-column range");
153
- }
154
- if (request.headers.length === 0 || request.headers.some((header) => header.trim().length === 0)) {
155
- invalidOperationRequest("fast append operation", "headers must contain non-empty names");
156
- }
157
- if (new Set(request.headers).size !== request.headers.length) {
158
- invalidOperationRequest("fast append operation", "headers must not contain duplicates");
159
- }
160
- const [start, end] = request.registeredRange.split(":");
161
- if (columnNumber(end) < columnNumber(start) || columnNumber(end) - columnNumber(start) + 1 !== request.headers.length) {
162
- invalidOperationRequest("fast append operation", "headers must match registeredRange");
163
- }
164
- const effectIds = new Set();
165
- for (const row of request.rows) {
166
- if (row.effectId.trim().length === 0) {
167
- invalidOperationRequest("fast append operation", "every row needs an effectId");
168
- }
169
- if (effectIds.has(row.effectId)) {
170
- invalidOperationRequest("fast append operation", "row effectIds must be unique");
171
- }
172
- effectIds.add(row.effectId);
173
- const fieldNames = Object.keys(row.fields).sort();
174
- const expectedFieldNames = [...request.headers].sort();
175
- if (fieldNames.length !== expectedFieldNames.length || fieldNames.some((field, index) => field !== expectedFieldNames[index])) {
176
- invalidOperationRequest("fast append operation", "every row must contain exactly the registered headers");
177
- }
178
- for (const cell of Object.values(row.fields)) {
179
- if (!isNormalizedCell(cell)) {
180
- invalidOperationRequest("fast append operation", "rows contain an unsupported normalized cell");
181
- }
182
- }
183
- }
184
- }
185
- function columnNumber(value) {
186
- if (value === undefined || value.length === 0)
187
- return 0;
188
- let result = 0;
189
- for (const letter of value)
190
- result = result * 26 + letter.charCodeAt(0) - 64;
191
- return result;
192
- }
193
- function decodeFastAppendResult(value, expectedRows) {
194
- if (!isRecord(value) ||
195
- !Array.isArray(value.results) ||
196
- value.results.length !== expectedRows.length ||
197
- value.hasMore !== false) {
198
- invalidOperationResponse("fast append operation", "result must contain results and hasMore=false");
199
- }
200
- const timing = decodeOptionalSyncGatewayTiming(value.timing, "fast append timing");
201
- const results = value.results.map(decodeFastAppendRowResult);
202
- const expectedEffectIds = new Set(expectedRows.map((row) => row.effectId));
203
- const actualEffectIds = new Set(results.map((row) => row.effectId));
204
- if (actualEffectIds.size !== results.length ||
205
- actualEffectIds.size !== expectedEffectIds.size ||
206
- results.some((row) => !expectedEffectIds.has(row.effectId))) {
207
- return invalidOperationResponse("fast append operation", "result effectIds do not match the submitted rows");
208
- }
209
- const result = { results, hasMore: false };
210
- return timing === undefined ? result : { ...result, timing };
211
28
  }
212
- function decodeFastAppendRowResult(value) {
213
- if (!isRecord(value) ||
214
- typeof value.effectId !== "string" ||
215
- value.status !== SYNC_GATEWAY_FAST_APPEND_STATUSES.APPLIED) {
216
- invalidOperationResponse("fast append operation", "result contains an invalid fast-append row");
29
+ function legacyPayloadHash(fields) {
30
+ for (const cell of Object.values(fields)) {
31
+ if (!isNormalizedCell(cell)) {
32
+ invalidOperationRequest("batch append operation", "rows contain an invalid normalized cell");
33
+ }
217
34
  }
218
- return {
219
- effectId: value.effectId,
220
- status: SYNC_GATEWAY_FAST_APPEND_STATUSES.APPLIED,
221
- };
35
+ return stableHash({ fields });
222
36
  }
223
37
  //# sourceMappingURL=fastAppendOperation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fastAppendOperation.js","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fastAppendOperation.js","sourceRoot":"","sources":["../../../../../../../src/adapter/sheets/providers/apps-script-gateway/operations/write/fastAppendOperation.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAMnF,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AACvF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EACL,8BAA8B,GAE/B,MAAM,2BAA2B,CAAC;AAUnC;;;;;;;;GAQG;AACH,MAAM,UAAU,6BAA6B,CAC3C,OAA6C;IAE7C,wEAAwE;IACxE,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,8BAA8B;IAC9B,OAAO,8BAA8B,CAAC;QACpC,GAAG,OAAO;QACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,GAAG;YACN,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;SAC9D,CAAC,CAAC;KACJ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAuD;IAChF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,uBAAuB,CAAC,wBAAwB,EAAE,yCAAyC,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"syncProtocol.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAchF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAKtE;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAQlE;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiBxD;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAInD"}
1
+ {"version":3,"file":"syncProtocol.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAiBhF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAQlE;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMxD;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAInD"}
@@ -1,18 +1,11 @@
1
1
  /** Canonical JSON and hashing helpers shared by the thin operation protocol. */
2
2
  import { createHash } from "node:crypto";
3
- import { JAVASCRIPT_TYPE_NAMES } from "../../../../../shared/encoding/constants.js";
4
- import { isJavaScriptType, isRecord } from "../../../../../shared/encoding/typeGuards.js";
5
- import { SYNC_GATEWAY_ENCODINGS, SYNC_GATEWAY_HASH_ALGORITHMS, SYNC_JSON_LITERAL_TOKENS, } from "./constants.js";
3
+ import { canonicalJson, isCanonicalJsonValue, CANONICAL_CODEC_ERROR_CODES, CanonicalCodecError, } from "@hikoutei/kohkai";
4
+ import { SYNC_GATEWAY_ENCODINGS, SYNC_GATEWAY_HASH_ALGORITHMS, } from "./constants.js";
6
5
  import { SYNC_GATEWAY_PROTOCOL_ERROR_CODES, SyncGatewayProtocolError, } from "../errors.js";
7
6
  /** Checks whether an unknown value is safe to send through the signed JSON boundary. */
8
7
  export function isSyncJsonValue(value) {
9
- if (value === null || typeof value === "boolean" || typeof value === "string")
10
- return true;
11
- if (typeof value === "number")
12
- return Number.isFinite(value);
13
- if (Array.isArray(value))
14
- return value.every(isSyncJsonValue);
15
- return isRecord(value) && isPlainObject(value) && Object.values(value).every(isSyncJsonValue);
8
+ return isCanonicalJsonValue(value);
16
9
  }
17
10
  /** Promotes a JSON-compatible value or throws the protocol error used by signing. */
18
11
  export function requireSyncJsonValue(value) {
@@ -23,25 +16,12 @@ export function requireSyncJsonValue(value) {
23
16
  }
24
17
  /** Canonical JSON used for payload hashes and cross-runtime HMAC inputs. */
25
18
  export function canonicalSyncJson(value) {
26
- if (value === null)
27
- return SYNC_JSON_LITERAL_TOKENS.NULL;
28
- if (value === true)
29
- return SYNC_JSON_LITERAL_TOKENS.TRUE;
30
- if (value === false)
31
- return SYNC_JSON_LITERAL_TOKENS.FALSE;
32
- if (isJavaScriptType(value, JAVASCRIPT_TYPE_NAMES.STRING))
33
- return JSON.stringify(value);
34
- if (isJavaScriptType(value, JAVASCRIPT_TYPE_NAMES.NUMBER))
35
- return canonicalNumber(value);
36
- if (Array.isArray(value))
37
- return `[${value.map((item) => canonicalSyncJson(item)).join(",")}]`;
38
- if (isRecord(value) && isPlainObject(value)) {
39
- const entries = Object.keys(value)
40
- .sort()
41
- .map((key) => `${JSON.stringify(key)}:${canonicalSyncJson(value[key])}`);
42
- return `{${entries.join(",")}}`;
19
+ try {
20
+ return canonicalJson(value);
21
+ }
22
+ catch (error) {
23
+ throwProtocolCodecError(error);
43
24
  }
44
- throw new SyncGatewayProtocolError(SYNC_GATEWAY_PROTOCOL_ERROR_CODES.INVALID_JSON_VALUE, "sync gateway payload must contain JSON values only");
45
25
  }
46
26
  /** SHA-256 helper shared by envelope and effect payload verification. */
47
27
  export function syncSha256Hex(value) {
@@ -49,14 +29,13 @@ export function syncSha256Hex(value) {
49
29
  .update(value, SYNC_GATEWAY_ENCODINGS.UTF8)
50
30
  .digest("hex");
51
31
  }
52
- function canonicalNumber(value) {
53
- if (!Number.isFinite(value)) {
54
- throw new SyncGatewayProtocolError(SYNC_GATEWAY_PROTOCOL_ERROR_CODES.NON_FINITE_NUMBER, "sync gateway payload numbers must be finite");
32
+ function throwProtocolCodecError(error) {
33
+ if (error instanceof CanonicalCodecError) {
34
+ const code = error.code === CANONICAL_CODEC_ERROR_CODES.NON_FINITE_NUMBER
35
+ ? SYNC_GATEWAY_PROTOCOL_ERROR_CODES.NON_FINITE_NUMBER
36
+ : SYNC_GATEWAY_PROTOCOL_ERROR_CODES.INVALID_JSON_VALUE;
37
+ throw new SyncGatewayProtocolError(code, error.message);
55
38
  }
56
- return (value === 0 ? "0" : value.toString()).replace(/e\+/, "e").replace(/e(-?)0+(\d+)/, "e$1$2");
57
- }
58
- function isPlainObject(value) {
59
- const prototype = Object.getPrototypeOf(value);
60
- return prototype === Object.prototype || prototype === null;
39
+ throw error;
61
40
  }
62
41
  //# sourceMappingURL=syncProtocol.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"syncProtocol.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"syncProtocol.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/protocol/syncProtocol.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iCAAiC,EACjC,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAItB,wFAAwF;AACxF,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,wBAAwB,CAChC,iCAAiC,CAAC,kBAAkB,EACpD,oDAAoD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,UAAU,CAAC,4BAA4B,CAAC,MAAM,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,IAAI,CAAC;SAC1C,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,2BAA2B,CAAC,iBAAiB;YACvE,CAAC,CAAC,iCAAiC,CAAC,iBAAiB;YACrD,CAAC,CAAC,iCAAiC,CAAC,kBAAkB,CAAC;QACzD,MAAM,IAAI,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,KAAK,CAAC;AACd,CAAC"}
@@ -1,5 +1,4 @@
1
+ import type { CanonicalJsonValue } from "@hikoutei/kohkai";
1
2
  /** JSON values allowed in signed gateway payloads. */
2
- export type SyncJsonValue = null | boolean | number | string | readonly SyncJsonValue[] | {
3
- readonly [key: string]: SyncJsonValue;
4
- };
3
+ export type SyncJsonValue = CanonicalJsonValue;
5
4
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/protocol/types.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,MAAM,MAAM,aAAa,GACrB,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,aAAa,EAAE,GACxB;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/protocol/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,sDAAsD;AACtD,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"operationClient.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/transport/operationClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operationClient.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/transport/operationClient.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,0BAA0B,CAAC;AAclC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAM1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAEjF,iEAAiE;AACjE,MAAM,WAAW,6BAA6B,CAC5C,IAAI,GAAG,aAAa,EACpB,MAAM,GAAG,OAAO;IAEhB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CAC9C;AAED,iFAAiF;AACjF,MAAM,MAAM,gCAAgC,GAAG,6BAA6B,CAC1E,OAAO,EACP,OAAO,CACR,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,yBAAyB,CAAC,SAAS,IAC7C,SAAS,SAAS;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,MAAM,CAAA;CAAE,GACpE,MAAM,GACN,OAAO,CAAC;AAEd,yEAAyE;AACzE,MAAM,MAAM,0BAA0B,CACpC,UAAU,SAAS,SAAS,gCAAgC,EAAE,IAC5D;IACF,QAAQ,EAAE,KAAK,IAAI,MAAM,UAAU,GAAG,yBAAyB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;CACnF,CAAC;AAEF,2EAA2E;AAC3E,MAAM,WAAW,0BAA0B;IACzC,eAAe,CAAC,UAAU,SAAS,SAAS,gCAAgC,EAAE,EAC5E,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC;CACpD;AAED,gFAAgF;AAChF,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,IAAI,CAAC;CACvE;AAED,oEAAoE;AACpE,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,uBAAuB,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,iGAAiG;AACjG,qBAAa,yBAA0B,YAAW,0BAA0B;IAC1E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiE;gBAExE,OAAO,EAAE,gCAAgC;IAkC5D,+EAA+E;IAClE,eAAe,CAC1B,UAAU,SAAS,SAAS,gCAAgC,EAAE,EAE9D,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC;YAsBpC,IAAI;IAuHlB,2EAA2E;IAC3E,OAAO,CAAC,aAAa;CAOtB"}
@@ -64,15 +64,50 @@ export class AppsScriptOperationClient {
64
64
  const timer = setTimeout(() => controller.abort(), this.requestTimeoutMs);
65
65
  let httpStatus = null;
66
66
  let responseBytes = 0;
67
+ let requestUrl = this.url;
68
+ let requestMethod = "POST";
69
+ let redirectCount = 0;
67
70
  try {
68
- const response = await fetch(this.url, {
69
- method: "POST",
70
- headers: { "content-type": "application/json" },
71
- body: requestBody,
72
- signal: controller.signal,
73
- redirect: "follow",
74
- });
75
- httpStatus = response.status;
71
+ let response;
72
+ while (true) {
73
+ const requestInit = {
74
+ method: requestMethod,
75
+ signal: controller.signal,
76
+ // Validate the target ourselves. Apps Script commonly returns a
77
+ // 302 after executing the POST and exposes the result through a
78
+ // googleusercontent GET; 307/308 are the redirects that preserve
79
+ // the original method and body.
80
+ redirect: "manual",
81
+ ...(requestMethod === "POST"
82
+ ? {
83
+ headers: { "content-type": "application/json" },
84
+ body: requestBody,
85
+ }
86
+ : {}),
87
+ };
88
+ response = await fetch(requestUrl, requestInit);
89
+ httpStatus = response.status;
90
+ if (!isRedirectStatus(response.status))
91
+ break;
92
+ const location = response.headers.get("location");
93
+ // Release the manual redirect response before opening the next request;
94
+ // a redirect body is never part of the signed gateway protocol.
95
+ try {
96
+ await response.body?.cancel();
97
+ }
98
+ catch {
99
+ // The redirect target is still validated below; a failed body cancel
100
+ // must not turn a malformed Location into an unrelated network error.
101
+ }
102
+ if (redirectCount >= MAX_REDIRECTS) {
103
+ throw invalidRedirectError(`Code.gs redirect limit of ${MAX_REDIRECTS} was exceeded`, httpStatus);
104
+ }
105
+ requestUrl = resolveRedirectUrl(requestUrl, location, httpStatus);
106
+ if (REDIRECT_REWRITE_TO_GET_STATUS_CODES.has(response.status)) {
107
+ requestMethod = "GET";
108
+ }
109
+ redirectCount += 1;
110
+ }
76
111
  const responseText = await response.text();
77
112
  responseBytes = Buffer.byteLength(responseText, "utf8");
78
113
  const decoded = parseCodeGsResponse(responseText, presentValue(httpStatus));
@@ -191,6 +226,44 @@ function requireRequestTimeout(value) {
191
226
  }
192
227
  return value;
193
228
  }
229
+ const MAX_REDIRECTS = 3;
230
+ const REDIRECT_STATUS_CODES = new Set([301, 302, 303, 307, 308]);
231
+ const REDIRECT_REWRITE_TO_GET_STATUS_CODES = new Set([301, 302, 303]);
232
+ const TRUSTED_REDIRECT_HOSTS = new Set([
233
+ "script.google.com",
234
+ "script.googleusercontent.com",
235
+ ]);
236
+ function isRedirectStatus(status) {
237
+ return REDIRECT_STATUS_CODES.has(status);
238
+ }
239
+ function resolveRedirectUrl(currentUrl, location, status) {
240
+ if (location === null || location.trim().length === 0) {
241
+ throw invalidRedirectError("Code.gs redirect did not contain a Location header", status);
242
+ }
243
+ let redirected;
244
+ try {
245
+ redirected = new URL(location, currentUrl);
246
+ }
247
+ catch {
248
+ throw invalidRedirectError("Code.gs redirect Location was not a valid URL", status);
249
+ }
250
+ if (redirected.protocol !== "https:" ||
251
+ redirected.username.length > 0 ||
252
+ redirected.password.length > 0 ||
253
+ redirected.hash.length > 0) {
254
+ throw invalidRedirectError("Code.gs redirect must target an HTTPS URL without credentials or a fragment", status);
255
+ }
256
+ const current = new URL(currentUrl);
257
+ const sameHost = redirected.hostname === current.hostname;
258
+ const trustedGoogleHost = TRUSTED_REDIRECT_HOSTS.has(redirected.hostname);
259
+ if (!sameHost && !trustedGoogleHost) {
260
+ throw invalidRedirectError("Code.gs redirect target is not the configured gateway or a trusted Apps Script host", status);
261
+ }
262
+ return redirected.toString();
263
+ }
264
+ function invalidRedirectError(statusMessage, status) {
265
+ return new AppsScriptSyncGatewayError(SYNC_GATEWAY_CLIENT_ERROR_CODES.INVALID_REDIRECT, statusMessage, presentValue(status));
266
+ }
194
267
  function presentOrAbsent(value) {
195
268
  return value === null ? absentValue() : presentValue(value);
196
269
  }
@@ -1 +1 @@
1
- {"version":3,"file":"operationClient.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/transport/operationClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operationClient.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/transport/operationClient.ts"],"names":[],"mappings":"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"}
@@ -40,12 +40,7 @@ export declare class AppsScriptOperationSyncGateway implements SyncSheetGateway,
40
40
  readonly createdSheets: readonly string[];
41
41
  readonly initializedHeaders: readonly string[];
42
42
  }>;
43
- /**
44
- * Appends new System_State rows with one remote setValues operation.
45
- *
46
- * No row metadata, receipt, snapshot, CAS, or postcondition work is
47
- * performed here. Reconciliation owns drift detection after this write.
48
- */
43
+ /** Appends route rows through an idempotent built-in-services operation. */
49
44
  fastAppendRows(request: FastAppendRowsRequest): Promise<FastAppendRowsResult>;
50
45
  /** Reads one registered table with values only; no metadata, lock, or CAS work is performed. */
51
46
  readRows(request: ReadSyncTableRowsRequest): Promise<SyncTableRowsResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"operationSyncGateway.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operationSyncGateway.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/apps-script-gateway/transport/operationSyncGateway.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { SYNC_GATEWAY_ERROR_CODES, SyncGatewayContractError, } from "../../../../../application/sync/gateway/errors.js";
9
9
  import { requireSyncGatewayNonEmptyList, requireSyncGatewayNonNegativeSafeInteger, requireSyncGatewayPositiveSafeInteger, requireSyncGatewayProjection, requireSyncGatewayText, } from "../../../../../application/sync/gateway/validation.js";
10
- import { createFastAppendRowsOperation } from "../operations/write/fastAppendOperation.js";
10
+ import { createBatchAppendRowsOperation } from "../operations/write/batchAppendOperation.js";
11
11
  import { createReadTableRowsOperation } from "../operations/read/tableReadOperation.js";
12
12
  import { createApplyEffectsOperation, createReadEffectPostconditionOperation, createReadEffectPostconditionsOperation, } from "../operations/effect/effectOperation.js";
13
13
  import { createEnsureRowAnchorsOperation, createObserveSnapshotOperation, createReadSnapshotOperation, } from "../operations/observation/observationOperation.js";
@@ -44,19 +44,23 @@ export class AppsScriptOperationSyncGateway {
44
44
  };
45
45
  return applyOneOperation(this.operationGateway, operation);
46
46
  }
47
- /**
48
- * Appends new System_State rows with one remote setValues operation.
49
- *
50
- * No row metadata, receipt, snapshot, CAS, or postcondition work is
51
- * performed here. Reconciliation owns drift detection after this write.
52
- */
47
+ /** Appends route rows through an idempotent built-in-services operation. */
53
48
  async fastAppendRows(request) {
54
49
  const definition = this.definitionForPhysicalSheet(request.physicalSheetId);
55
50
  validateRoute(request, definition);
56
- const operation = createFastAppendRowsOperation({
51
+ const routeOptions = effectRouteOptions(definition);
52
+ if (routeOptions.identityField === undefined) {
53
+ // The built-in append path never materializes anchor metadata, so a
54
+ // route without a registered identity cannot locate or guard its rows
55
+ // on replay. Fail closed instead of inventing an unsafe locator.
56
+ throw new SyncGatewayContractError(SYNC_GATEWAY_ERROR_CODES.INVALID_EFFECT_PAYLOAD, "fast append requires a registered identityField for route " + request.physicalSheetId);
57
+ }
58
+ const operation = createBatchAppendRowsOperation({
59
+ ...(request.authority === undefined ? {} : { authority: request.authority }),
57
60
  sheetName: request.sheetName,
58
61
  registeredRange: request.registeredRange,
59
62
  headers: definition.headers,
63
+ identityField: routeOptions.identityField,
60
64
  rows: request.rows,
61
65
  });
62
66
  return applyOneOperation(this.operationGateway, operation);
@@ -268,7 +272,9 @@ function effectRouteOptions(definition) {
268
272
  return {
269
273
  ...(definition.sheet.projection === "system_state"
270
274
  ? { identityField: definition.sheet.businessKeyField }
271
- : {}),
275
+ : definition.sheet.projection === "sync_conflicts"
276
+ ? { identityField: "Conflict_ID" }
277
+ : {}),
272
278
  ...(definition.checkboxHeaders === undefined
273
279
  ? {}
274
280
  : { checkboxHeaders: definition.checkboxHeaders }),