hikoutei 0.8.0 → 0.8.2
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.
- package/README.md +4 -0
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts +23 -11
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js +26 -18
- package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts +24 -5
- package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/constants.js +24 -5
- package/dist/adapter/sheets/providers/google-sheets-api/constants.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts +8 -0
- package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/errors.js +20 -0
- package/dist/adapter/sheets/providers/google-sheets-api/errors.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/index.js +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/index.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.js +11 -29
- package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.d.ts +20 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.js +26 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.js.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts +11 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js +12 -2
- package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.d.ts +19 -6
- package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.js +61 -14
- package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts +13 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js +60 -29
- package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts +40 -4
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js +26 -20
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js.map +1 -1
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.d.ts +7 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.d.ts.map +1 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.js +24 -0
- package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.js.map +1 -0
- package/dist/api/Hikoutei.d.ts.map +1 -1
- package/dist/api/Hikoutei.js +244 -30
- package/dist/api/Hikoutei.js.map +1 -1
- package/dist/api/internalEntityManager.d.ts.map +1 -1
- package/dist/api/internalEntityManager.js +152 -53
- package/dist/api/internalEntityManager.js.map +1 -1
- package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts +41 -0
- package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts.map +1 -1
- package/dist/application/sync/outbound/SheetsEffectDispatcher.js +85 -3
- package/dist/application/sync/outbound/SheetsEffectDispatcher.js.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +39 -5
- package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
- package/dist/application/sync/outbound/reconciliation/diff.d.ts +19 -1
- package/dist/application/sync/outbound/reconciliation/diff.d.ts.map +1 -1
- package/dist/application/sync/outbound/reconciliation/diff.js +60 -17
- package/dist/application/sync/outbound/reconciliation/diff.js.map +1 -1
- package/dist/application/sync/outbound/reconciliation/repair.d.ts +34 -3
- package/dist/application/sync/outbound/reconciliation/repair.d.ts.map +1 -1
- package/dist/application/sync/outbound/reconciliation/repair.js +120 -47
- package/dist/application/sync/outbound/reconciliation/repair.js.map +1 -1
- package/dist/application/sync/outbound/reconciliation/shared.d.ts +20 -0
- package/dist/application/sync/outbound/reconciliation/shared.d.ts.map +1 -1
- package/dist/application/sync/outbound/reconciliation/shared.js +35 -0
- package/dist/application/sync/outbound/reconciliation/shared.js.map +1 -1
- package/dist/application/sync/service/SyncPollingSupervisor.d.ts +16 -0
- package/dist/application/sync/service/SyncPollingSupervisor.d.ts.map +1 -1
- package/dist/application/sync/service/SyncPollingSupervisor.js +24 -0
- package/dist/application/sync/service/SyncPollingSupervisor.js.map +1 -1
- package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
- package/dist/application/sync/service/SyncServiceBootstrap.js +26 -1
- package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
- package/dist/application/sync/service/configSchemas.d.ts +10 -0
- package/dist/application/sync/service/configSchemas.d.ts.map +1 -0
- package/dist/application/sync/service/configSchemas.js +13 -0
- package/dist/application/sync/service/configSchemas.js.map +1 -0
- package/dist/application/sync/service/effectSupervisor.d.ts.map +1 -1
- package/dist/application/sync/service/effectSupervisor.js +114 -9
- package/dist/application/sync/service/effectSupervisor.js.map +1 -1
- package/dist/application/sync/service/pollingSupervisor.d.ts +17 -0
- package/dist/application/sync/service/pollingSupervisor.d.ts.map +1 -1
- package/dist/application/sync/service/pollingSupervisor.js +103 -3
- package/dist/application/sync/service/pollingSupervisor.js.map +1 -1
- package/dist/application/sync/service/serviceOptionSchemas.d.ts +11 -0
- package/dist/application/sync/service/serviceOptionSchemas.d.ts.map +1 -0
- package/dist/application/sync/service/serviceOptionSchemas.js +11 -0
- package/dist/application/sync/service/serviceOptionSchemas.js.map +1 -0
- package/dist/application/sync/service/serviceOptions.d.ts.map +1 -1
- package/dist/application/sync/service/serviceOptions.js +20 -6
- package/dist/application/sync/service/serviceOptions.js.map +1 -1
- package/dist/application/sync/service/shutdown.d.ts.map +1 -1
- package/dist/application/sync/service/shutdown.js +6 -2
- package/dist/application/sync/service/shutdown.js.map +1 -1
- package/dist/application/sync/service/syncAutoStart.d.ts +71 -6
- package/dist/application/sync/service/syncAutoStart.d.ts.map +1 -1
- package/dist/application/sync/service/syncAutoStart.js +175 -12
- package/dist/application/sync/service/syncAutoStart.js.map +1 -1
- package/dist/application/sync/service/systemStateReadiness.d.ts +35 -0
- package/dist/application/sync/service/systemStateReadiness.d.ts.map +1 -0
- package/dist/application/sync/service/systemStateReadiness.js +51 -0
- package/dist/application/sync/service/systemStateReadiness.js.map +1 -0
- package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts +37 -1
- package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts.map +1 -1
- package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js +57 -3
- package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js.map +1 -1
- package/dist/application/sync/sheetsContract/payloadSchemas.d.ts +14 -0
- package/dist/application/sync/sheetsContract/payloadSchemas.d.ts.map +1 -0
- package/dist/application/sync/sheetsContract/payloadSchemas.js +18 -0
- package/dist/application/sync/sheetsContract/payloadSchemas.js.map +1 -0
- package/dist/application/sync/sheetsContract/syncSheets.d.ts.map +1 -1
- package/dist/application/sync/sheetsContract/syncSheets.js +12 -31
- package/dist/application/sync/sheetsContract/syncSheets.js.map +1 -1
- package/dist/application/sync/sheetsContract/transportOutcome.d.ts +32 -5
- package/dist/application/sync/sheetsContract/transportOutcome.d.ts.map +1 -1
- package/dist/application/sync/sheetsContract/transportOutcome.js +101 -7
- package/dist/application/sync/sheetsContract/transportOutcome.js.map +1 -1
- package/dist/internal/syncStatus.js +33 -2
- package/dist/internal/syncStatus.js.map +1 -1
- package/dist/shared/observability/index.d.ts +9 -0
- package/dist/shared/observability/index.d.ts.map +1 -0
- package/dist/shared/observability/index.js +9 -0
- package/dist/shared/observability/index.js.map +1 -0
- package/dist/shared/observability/internalLog.d.ts +175 -0
- package/dist/shared/observability/internalLog.d.ts.map +1 -0
- package/dist/shared/observability/internalLog.js +471 -0
- package/dist/shared/observability/internalLog.js.map +1 -0
- package/dist/shared/observability/logEvents.d.ts +96 -0
- package/dist/shared/observability/logEvents.d.ts.map +1 -0
- package/dist/shared/observability/logEvents.js +247 -0
- package/dist/shared/observability/logEvents.js.map +1 -0
- package/dist/shared/validation/zodBoundary.d.ts +10 -0
- package/dist/shared/validation/zodBoundary.d.ts.map +1 -0
- package/dist/shared/validation/zodBoundary.js +24 -0
- package/dist/shared/validation/zodBoundary.js.map +1 -0
- package/package.json +7 -5
package/README.md
CHANGED
|
@@ -290,6 +290,10 @@ entity API.
|
|
|
290
290
|
durable outbox, idempotent delivery, and conflict-aware updates.
|
|
291
291
|
- [Contributing](website/guide/contributing.md) — local development and test
|
|
292
292
|
commands.
|
|
293
|
+
- [Soak testing](website/guide/soak-testing.md) — the long-duration soak
|
|
294
|
+
runner: source build, six scalar tables, 6h preflight and 24h direct-live
|
|
295
|
+
runs, log envs, redaction contract, resume/cleanup, and acceptance
|
|
296
|
+
criteria.
|
|
293
297
|
- [Benchmark notes](website/guide/benchmarks.md) — dated measurements and
|
|
294
298
|
their limitations.
|
|
295
299
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Full sync provider over the Google Sheets REST API.
|
|
3
3
|
*
|
|
4
4
|
* Implements every provider capability the sync runtime needs with ONE
|
|
5
|
-
* provider instance (one transport, one
|
|
5
|
+
* provider instance (one transport, one shared request-start limiter, one
|
|
6
6
|
* telemetry sink): the outbound effect worker (fast append, applyEffects,
|
|
7
7
|
* postcondition recovery), projection provisioning, values-only table reads,
|
|
8
8
|
* row-anchor assignment, and full metadata snapshots. The service-account
|
|
@@ -20,8 +20,14 @@
|
|
|
20
20
|
*
|
|
21
21
|
* Request pacing is per transport call: every `getSpreadsheet` (preflight
|
|
22
22
|
* enumeration, preflight data, observation reads, post-reads, table reads,
|
|
23
|
-
* provisioning reads) and every `batchUpdate` acquires
|
|
24
|
-
* emits one redacted telemetry event.
|
|
23
|
+
* provisioning reads) and every `batchUpdate` acquires the ONE shared
|
|
24
|
+
* request-start limiter and emits one redacted telemetry event. Reads and
|
|
25
|
+
* writes serialize against each other, so a combined read+write burst can
|
|
26
|
+
* never outpace the interval. Admission is BOUNDED: a request whose slot
|
|
27
|
+
* lies more than one interval out is refused before any SDK call with the
|
|
28
|
+
* stable delivery-uncertain `google_sheets_api_request_start_refused`
|
|
29
|
+
* error, so an arbitrarily long limiter queue can never make a request
|
|
30
|
+
* wait past its effect lease — the durable worker requeues instead.
|
|
25
31
|
*/
|
|
26
32
|
import type { ApplySyncEffectsRequest, ApplySyncEffectsResult, EnsureSyncRowAnchorsRequest, EnsureSyncRowAnchorsResult, FastAppendRowsRequest, FastAppendRowsResult, ReadSyncEffectPostconditionsRequest, ReadSyncSnapshotRequest, ReadSyncTableRowsRequest, SyncEffectPostcondition, SyncEffectPostconditionResult, SyncEffectWorkerProvider, SyncObservedSnapshot, SyncSheetsObservationBatchProvider, SyncSheetsObservationProvider, SyncSheetsSnapshot, SyncSheetsTableReader, SyncProjectionEffect, SyncTableRowsResult } from "../../../../application/sync/sheetsContract/syncSheets.js";
|
|
27
33
|
import type { RegisteredSyncProjectionDefinition, SyncSheetsProvisioner, SyncSheetsProvisionRoute } from "../../../../application/sync/sheetsContract/sheetsProvisioning.js";
|
|
@@ -50,7 +56,11 @@ export interface GoogleSheetsApiProviderOptions {
|
|
|
50
56
|
* lease.
|
|
51
57
|
*/
|
|
52
58
|
readonly readTimeoutMs?: number;
|
|
53
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Minimum interval between request starts; defaults to 2,500 ms. Also the
|
|
61
|
+
* admission bound: a request whose slot lies more than one interval out is
|
|
62
|
+
* refused before any SDK call (delivery-uncertain, requeued durably).
|
|
63
|
+
*/
|
|
54
64
|
readonly rateLimitIntervalMs?: number;
|
|
55
65
|
/** Serialized batchUpdate byte budget; defaults to ~2 MB. */
|
|
56
66
|
readonly maxBatchBytes?: number;
|
|
@@ -70,11 +80,12 @@ export interface GoogleSheetsApiSyncProviderOptions extends GoogleSheetsApiProvi
|
|
|
70
80
|
* Full sync provider over the Sheets REST API: outbound effects, provisioning,
|
|
71
81
|
* table reads, anchors, and snapshots behind the shared provider contracts.
|
|
72
82
|
*
|
|
73
|
-
* All reads
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
83
|
+
* All reads and writes share ONE request-start limiter, so combined
|
|
84
|
+
* read+write starts are serialized (at most one transport call per
|
|
85
|
+
* interval); the worker-level append throttle stays enabled on top in
|
|
86
|
+
* service mode via the bootstrap's bulk worker options. Provisioning runs
|
|
87
|
+
* at startup before the worker, and observation anchors are the only
|
|
88
|
+
* metadata mutations outside effect batches.
|
|
78
89
|
*
|
|
79
90
|
* The class is a thin facade: every method body lives in an operation module
|
|
80
91
|
* under `operations/` and receives the immutable wiring from `this.deps`.
|
|
@@ -86,8 +97,9 @@ export declare class GoogleSheetsApiSyncProvider implements SyncEffectWorkerProv
|
|
|
86
97
|
private readonly transportTimeoutMs;
|
|
87
98
|
private readonly readTimeoutMs;
|
|
88
99
|
private readonly maxBatchBytes;
|
|
89
|
-
private readonly
|
|
90
|
-
|
|
100
|
+
private readonly requestLimiter;
|
|
101
|
+
/** Bounded admission: at most one interval of wait per request start. */
|
|
102
|
+
private readonly maxRequestStartWaitMs;
|
|
91
103
|
private readonly now;
|
|
92
104
|
private readonly onRequest;
|
|
93
105
|
private readonly deps;
|
package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoogleSheetsApiSyncProvider.d.ts","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"GoogleSheetsApiSyncProvider.d.ts","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Full sync provider over the Google Sheets REST API.
|
|
3
3
|
*
|
|
4
4
|
* Implements every provider capability the sync runtime needs with ONE
|
|
5
|
-
* provider instance (one transport, one
|
|
5
|
+
* provider instance (one transport, one shared request-start limiter, one
|
|
6
6
|
* telemetry sink): the outbound effect worker (fast append, applyEffects,
|
|
7
7
|
* postcondition recovery), projection provisioning, values-only table reads,
|
|
8
8
|
* row-anchor assignment, and full metadata snapshots. The service-account
|
|
@@ -20,8 +20,14 @@
|
|
|
20
20
|
*
|
|
21
21
|
* Request pacing is per transport call: every `getSpreadsheet` (preflight
|
|
22
22
|
* enumeration, preflight data, observation reads, post-reads, table reads,
|
|
23
|
-
* provisioning reads) and every `batchUpdate` acquires
|
|
24
|
-
* emits one redacted telemetry event.
|
|
23
|
+
* provisioning reads) and every `batchUpdate` acquires the ONE shared
|
|
24
|
+
* request-start limiter and emits one redacted telemetry event. Reads and
|
|
25
|
+
* writes serialize against each other, so a combined read+write burst can
|
|
26
|
+
* never outpace the interval. Admission is BOUNDED: a request whose slot
|
|
27
|
+
* lies more than one interval out is refused before any SDK call with the
|
|
28
|
+
* stable delivery-uncertain `google_sheets_api_request_start_refused`
|
|
29
|
+
* error, so an arbitrarily long limiter queue can never make a request
|
|
30
|
+
* wait past its effect lease — the durable worker requeues instead.
|
|
25
31
|
*/
|
|
26
32
|
import { SYNC_SHEETS_ERROR_CODES, SyncSheetsContractError, } from "../../../../application/sync/sheetsContract/errors.js";
|
|
27
33
|
import { GOOGLE_SHEETS_API_DEFAULTS, } from "./constants.js";
|
|
@@ -37,11 +43,12 @@ import { provisionRegistry, } from "./operations/provisioning.js";
|
|
|
37
43
|
* Full sync provider over the Sheets REST API: outbound effects, provisioning,
|
|
38
44
|
* table reads, anchors, and snapshots behind the shared provider contracts.
|
|
39
45
|
*
|
|
40
|
-
* All reads
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
46
|
+
* All reads and writes share ONE request-start limiter, so combined
|
|
47
|
+
* read+write starts are serialized (at most one transport call per
|
|
48
|
+
* interval); the worker-level append throttle stays enabled on top in
|
|
49
|
+
* service mode via the bootstrap's bulk worker options. Provisioning runs
|
|
50
|
+
* at startup before the worker, and observation anchors are the only
|
|
51
|
+
* metadata mutations outside effect batches.
|
|
45
52
|
*
|
|
46
53
|
* The class is a thin facade: every method body lives in an operation module
|
|
47
54
|
* under `operations/` and receives the immutable wiring from `this.deps`.
|
|
@@ -53,8 +60,9 @@ export class GoogleSheetsApiSyncProvider {
|
|
|
53
60
|
transportTimeoutMs;
|
|
54
61
|
readTimeoutMs;
|
|
55
62
|
maxBatchBytes;
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
requestLimiter;
|
|
64
|
+
/** Bounded admission: at most one interval of wait per request start. */
|
|
65
|
+
maxRequestStartWaitMs;
|
|
58
66
|
now;
|
|
59
67
|
onRequest;
|
|
60
68
|
deps;
|
|
@@ -91,16 +99,16 @@ export class GoogleSheetsApiSyncProvider {
|
|
|
91
99
|
this.readTimeoutMs = readTimeoutMs;
|
|
92
100
|
this.maxBatchBytes = maxBatchBytes;
|
|
93
101
|
this.now = options.now ?? Date.now;
|
|
94
|
-
this.
|
|
95
|
-
intervalMs,
|
|
96
|
-
now: this.now,
|
|
97
|
-
...(options.sleep === undefined ? {} : { sleep: options.sleep }),
|
|
98
|
-
});
|
|
99
|
-
this.writeLimiter = new RequestStartLimiter({
|
|
102
|
+
this.requestLimiter = new RequestStartLimiter({
|
|
100
103
|
intervalMs,
|
|
101
104
|
now: this.now,
|
|
102
105
|
...(options.sleep === undefined ? {} : { sleep: options.sleep }),
|
|
103
106
|
});
|
|
107
|
+
// Admission bound equals the pacing interval: the immediate slot and the
|
|
108
|
+
// slot exactly one interval out are admitted, every deeper reservation is
|
|
109
|
+
// refused before any SDK call (delivery-uncertain, requeued by the
|
|
110
|
+
// durable worker) instead of waiting out an unbounded queue.
|
|
111
|
+
this.maxRequestStartWaitMs = intervalMs;
|
|
104
112
|
this.onRequest = options.onRequest;
|
|
105
113
|
this.deps = {
|
|
106
114
|
spreadsheetId: this.spreadsheetId,
|
|
@@ -108,8 +116,8 @@ export class GoogleSheetsApiSyncProvider {
|
|
|
108
116
|
transport: this.transport,
|
|
109
117
|
readTimeoutMs: this.readTimeoutMs,
|
|
110
118
|
maxBatchBytes: this.maxBatchBytes,
|
|
111
|
-
|
|
112
|
-
|
|
119
|
+
requestLimiter: this.requestLimiter,
|
|
120
|
+
maxRequestStartWaitMs: this.maxRequestStartWaitMs,
|
|
113
121
|
now: this.now,
|
|
114
122
|
onRequest: this.onRequest,
|
|
115
123
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoogleSheetsApiSyncProvider.js","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"GoogleSheetsApiSyncProvider.js","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,12 +30,31 @@ export declare const GOOGLE_SHEETS_API_DEFAULTS: {
|
|
|
30
30
|
/** Upper bound for read timeouts; reads must stay well under the lease. */
|
|
31
31
|
readonly MAX_READ_TIMEOUT_MS: 60000;
|
|
32
32
|
/**
|
|
33
|
-
* Minimum interval between request starts of
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
33
|
+
* Minimum interval between request starts of the WHOLE provider: reads and
|
|
34
|
+
* writes share ONE request-start limiter, so at most one Sheets API
|
|
35
|
+
* request can start per interval regardless of class. Google Sheets quota
|
|
36
|
+
* is enforced per 100-second windows; the 2,500 ms default serializes
|
|
37
|
+
* combined read+write starts to about 40 starts per 100 s, leaving
|
|
38
|
+
* headroom inside the default per-user/per-project 100-second quotas for
|
|
39
|
+
* the observation and provisioning reads that run beside the worker. The
|
|
40
|
+
* exact quota stays provider and environment dependent, so operators can
|
|
41
|
+
* override the interval through the internal sync env key
|
|
42
|
+
* (HIKOUTEI_SYNC_RATE_LIMIT_INTERVAL_MS) or the internal provider option;
|
|
43
|
+
* the safe default is intentionally conservative. The interval is part of
|
|
44
|
+
* the effect-lease headroom contract: a worst-case dispatch (two
|
|
45
|
+
* preflight/postcondition reads plus one write, each paced and timed out,
|
|
46
|
+
* with up to one full interval of first-slot wait) must finish inside the
|
|
47
|
+
* lease with the 30-second provider headroom, and the internal service
|
|
48
|
+
* validation rejects an override that would let pacing outlive the lease
|
|
49
|
+
* (the env override is bounded to the largest default-safe interval,
|
|
50
|
+
* ~10 s). Admission is BOUNDED to one interval per request start: a call
|
|
51
|
+
* whose slot lies more than one interval out is refused before any SDK
|
|
52
|
+
* call with the stable delivery-uncertain
|
|
53
|
+
* `google_sheets_api_request_start_refused` error (the durable worker
|
|
54
|
+
* requeues), so an arbitrarily long queue of concurrent lock-free polling
|
|
55
|
+
* reads can never make a write wait past its lease.
|
|
37
56
|
*/
|
|
38
|
-
readonly REQUEST_START_INTERVAL_MS:
|
|
57
|
+
readonly REQUEST_START_INTERVAL_MS: 2500;
|
|
39
58
|
/**
|
|
40
59
|
* The provider stops adding effects to one batchUpdate once the serialized
|
|
41
60
|
* body would exceed this budget and returns `hasMore` for the suffix. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,2DAE3B,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,0BAA0B;IACrC,gFAAgF;;;;IAIhF;;;;;OAKG;;IAEH,2EAA2E;;IAE3E
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,2DAE3B,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,0BAA0B;IACrC,gFAAgF;;;;IAIhF;;;;;OAKG;;IAEH,2EAA2E;;IAE3E;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;;IAEH;;;;;OAKG;;IAEH,+EAA+E;;IAE/E,2EAA2E;;CAEnE,CAAC;AAEX,wEAAwE;AACxE,eAAO,MAAM,oCAAoC,4CACN,CAAC;AAE5C,4EAA4E;AAC5E,eAAO,MAAM,iCAAiC,+FAOpC,CAAC;AAEX;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,sBAAsB,CAAC;AAEnE;;;;;;GAMG;AACH,eAAO,MAAM,qCAAqC,iBAAiB,CAAC;AAEpE;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,6CACb,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,2CAA2C;;;CAG9C,CAAC;AAEX,qEAAqE;AACrE,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;CAanC,CAAC;AAEX,MAAM,MAAM,2BAA2B,GACrC,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,OAAO,gCAAgC,CAAC,CAAC;AAE3F,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEhE"}
|
|
@@ -32,12 +32,31 @@ export const GOOGLE_SHEETS_API_DEFAULTS = {
|
|
|
32
32
|
/** Upper bound for read timeouts; reads must stay well under the lease. */
|
|
33
33
|
MAX_READ_TIMEOUT_MS: 60_000,
|
|
34
34
|
/**
|
|
35
|
-
* Minimum interval between request starts of
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
35
|
+
* Minimum interval between request starts of the WHOLE provider: reads and
|
|
36
|
+
* writes share ONE request-start limiter, so at most one Sheets API
|
|
37
|
+
* request can start per interval regardless of class. Google Sheets quota
|
|
38
|
+
* is enforced per 100-second windows; the 2,500 ms default serializes
|
|
39
|
+
* combined read+write starts to about 40 starts per 100 s, leaving
|
|
40
|
+
* headroom inside the default per-user/per-project 100-second quotas for
|
|
41
|
+
* the observation and provisioning reads that run beside the worker. The
|
|
42
|
+
* exact quota stays provider and environment dependent, so operators can
|
|
43
|
+
* override the interval through the internal sync env key
|
|
44
|
+
* (HIKOUTEI_SYNC_RATE_LIMIT_INTERVAL_MS) or the internal provider option;
|
|
45
|
+
* the safe default is intentionally conservative. The interval is part of
|
|
46
|
+
* the effect-lease headroom contract: a worst-case dispatch (two
|
|
47
|
+
* preflight/postcondition reads plus one write, each paced and timed out,
|
|
48
|
+
* with up to one full interval of first-slot wait) must finish inside the
|
|
49
|
+
* lease with the 30-second provider headroom, and the internal service
|
|
50
|
+
* validation rejects an override that would let pacing outlive the lease
|
|
51
|
+
* (the env override is bounded to the largest default-safe interval,
|
|
52
|
+
* ~10 s). Admission is BOUNDED to one interval per request start: a call
|
|
53
|
+
* whose slot lies more than one interval out is refused before any SDK
|
|
54
|
+
* call with the stable delivery-uncertain
|
|
55
|
+
* `google_sheets_api_request_start_refused` error (the durable worker
|
|
56
|
+
* requeues), so an arbitrarily long queue of concurrent lock-free polling
|
|
57
|
+
* reads can never make a write wait past its lease.
|
|
39
58
|
*/
|
|
40
|
-
REQUEST_START_INTERVAL_MS:
|
|
59
|
+
REQUEST_START_INTERVAL_MS: 2_500,
|
|
41
60
|
/**
|
|
42
61
|
* The provider stops adding effects to one batchUpdate once the serialized
|
|
43
62
|
* body would exceed this budget and returns `hasMore` for the suffix. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,8CAA8C;CACtC,CAAC;AAEX,wEAAwE;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,gFAAgF;IAChF,kBAAkB,EAAE,MAAM;IAC1B,sBAAsB,EAAE,KAAK;IAC7B,sBAAsB,EAAE,OAAO;IAC/B;;;;;OAKG;IACH,eAAe,EAAE,MAAM;IACvB,2EAA2E;IAC3E,mBAAmB,EAAE,MAAM;IAC3B
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,8CAA8C;CACtC,CAAC;AAEX,wEAAwE;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,gFAAgF;IAChF,kBAAkB,EAAE,MAAM;IAC1B,sBAAsB,EAAE,KAAK;IAC7B,sBAAsB,EAAE,OAAO;IAC/B;;;;;OAKG;IACH,eAAe,EAAE,MAAM;IACvB,2EAA2E;IAC3E,mBAAmB,EAAE,MAAM;IAC3B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,yBAAyB,EAAE,KAAK;IAChC;;;;;OAKG;IACH,uBAAuB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IACxC,+EAA+E;IAC/E,uBAAuB,EAAE,EAAE;IAC3B,2EAA2E;IAC3E,2BAA2B,EAAE,KAAK;CAC1B,CAAC;AAEX,wEAAwE;AACxE,MAAM,CAAC,MAAM,oCAAoC,GAC/C,yCAAyC,CAAC;AAE5C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,UAAU;IACV,aAAa;IACb,QAAQ;IACR,aAAa;IACb,iBAAiB;IACjB,WAAW;CACH,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,mBAAmB,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG,cAAc,CAAC;AAEpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAC/C,kCAAkC,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,MAAM,2CAA2C,GAAG;IACzD,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,oCAAoC;CACrC,CAAC;AAEX,qEAAqE;AACrE,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,uCAAuC,EAAE,yCAAyC;IAClF,sBAAsB,EAAE,wBAAwB;IAChD,6BAA6B,EAAE,+BAA+B;IAC9D,yBAAyB,EAAE,2BAA2B;IACtD,qBAAqB,EAAE,uBAAuB;IAC9C,sCAAsC,EAAE,wCAAwC;IAChF,sBAAsB,EAAE,wBAAwB;IAChD,wBAAwB,EAAE,0BAA0B;IACpD,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,2BAA2B,EAAE,6BAA6B;IAC1D,wBAAwB,EAAE,0BAA0B;CAC5C,CAAC;AAKX,+EAA+E;AAC/E,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,OAAO,GAAG,UAAU,oBAAoB,CAAC;AAC3C,CAAC"}
|
|
@@ -19,6 +19,14 @@ export declare const GOOGLE_SHEETS_API_TRANSPORT_ERROR_CODES: {
|
|
|
19
19
|
readonly HTTP_ERROR: "google_sheets_api_http_error";
|
|
20
20
|
/** A 2xx response whose structure cannot prove what was applied. */
|
|
21
21
|
readonly INVALID_RESPONSE: "google_sheets_api_invalid_response";
|
|
22
|
+
/**
|
|
23
|
+
* The shared request-start limiter refused the admission BEFORE any SDK
|
|
24
|
+
* call: the predicted wait exceeded the bounded queue horizon. No remote
|
|
25
|
+
* request was sent, and the limiter horizon was not advanced, so the
|
|
26
|
+
* durable worker requeues through the CAS/recovery path and a later pass
|
|
27
|
+
* can be admitted again.
|
|
28
|
+
*/
|
|
29
|
+
readonly REQUEST_START_REFUSED: "google_sheets_api_request_start_refused";
|
|
22
30
|
};
|
|
23
31
|
export type GoogleSheetsApiTransportErrorCode = (typeof GOOGLE_SHEETS_API_TRANSPORT_ERROR_CODES)[keyof typeof GOOGLE_SHEETS_API_TRANSPORT_ERROR_CODES];
|
|
24
32
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAWlE,wEAAwE;AACxE,eAAO,MAAM,uCAAuC;IAClD,6EAA6E;;IAE7E,0DAA0D;;IAE1D,8CAA8C;;IAE9C,oEAAoE;;IAEpE;;;;;;OAMG;;CAEK,CAAC;AAEX,MAAM,MAAM,iCAAiC,GAC3C,CAAC,OAAO,uCAAuC,CAAC,CAAC,MAAM,OAAO,uCAAuC,CAAC,CAAC;AAEzG;;;;;;GAMG;AACH,qBAAa,6BAA8B,SAAQ,kBAAkB,CACnE,2BAA2B,EAC3B,iCAAiC,CAClC;IACC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAGpC,IAAI,EAAE,iCAAiC,EACvC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EACxB,UAAU,GAAE,QAAQ,CAAC,MAAM,CAAmC;CAMjE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAK5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAe3D"}
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
import { CoreErrorException } from "../../../../domain/errors/index.js";
|
|
11
11
|
import { PRESENCE_KINDS } from "../../../../shared/state/index.js";
|
|
12
12
|
import { SYNC_SHEETS_ERROR_CODES, SyncSheetsContractError, } from "../../../../application/sync/sheetsContract/errors.js";
|
|
13
|
+
import { logHikouteiInternalEvent } from "../../../../shared/observability/internalLog.js";
|
|
14
|
+
import { HIKOUTEI_LOG_COMPONENTS, HIKOUTEI_LOG_EVENTS, } from "../../../../shared/observability/logEvents.js";
|
|
13
15
|
/** Stable transport error categories emitted by the direct provider. */
|
|
14
16
|
export const GOOGLE_SHEETS_API_TRANSPORT_ERROR_CODES = {
|
|
15
17
|
/** The request exceeded its timeout; the remote may still have committed. */
|
|
@@ -20,6 +22,14 @@ export const GOOGLE_SHEETS_API_TRANSPORT_ERROR_CODES = {
|
|
|
20
22
|
HTTP_ERROR: "google_sheets_api_http_error",
|
|
21
23
|
/** A 2xx response whose structure cannot prove what was applied. */
|
|
22
24
|
INVALID_RESPONSE: "google_sheets_api_invalid_response",
|
|
25
|
+
/**
|
|
26
|
+
* The shared request-start limiter refused the admission BEFORE any SDK
|
|
27
|
+
* call: the predicted wait exceeded the bounded queue horizon. No remote
|
|
28
|
+
* request was sent, and the limiter horizon was not advanced, so the
|
|
29
|
+
* durable worker requeues through the CAS/recovery path and a later pass
|
|
30
|
+
* can be admitted again.
|
|
31
|
+
*/
|
|
32
|
+
REQUEST_START_REFUSED: "google_sheets_api_request_start_refused",
|
|
23
33
|
};
|
|
24
34
|
/**
|
|
25
35
|
* Provider-neutral transport error with explicit status/code presence.
|
|
@@ -56,6 +66,16 @@ export function invalidProviderRequest(label, message) {
|
|
|
56
66
|
* unverified evidence.
|
|
57
67
|
*/
|
|
58
68
|
export function invalidProviderState(message) {
|
|
69
|
+
// Boundary record for malformed 2xx payloads: only the stable code is
|
|
70
|
+
// logged, never the message (it can echo remote payload fragments).
|
|
71
|
+
logHikouteiInternalEvent({
|
|
72
|
+
event: HIKOUTEI_LOG_EVENTS.TRANSPORT_RESPONSE_INVALID,
|
|
73
|
+
level: "warn",
|
|
74
|
+
component: HIKOUTEI_LOG_COMPONENTS.TRANSPORT,
|
|
75
|
+
code: SYNC_SHEETS_ERROR_CODES.INVALID_PROVIDER_RESPONSE,
|
|
76
|
+
errorClass: "SyncSheetsContractError",
|
|
77
|
+
retryable: true,
|
|
78
|
+
});
|
|
59
79
|
throw new SyncSheetsContractError(SYNC_SHEETS_ERROR_CODES.INVALID_PROVIDER_RESPONSE, `Google Sheets API provider: ${message}`);
|
|
60
80
|
}
|
|
61
81
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,uDAAuD,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,+CAA+C,CAAC;AAEvD,wEAAwE;AACxE,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACrD,6EAA6E;IAC7E,OAAO,EAAE,2BAA2B;IACpC,0DAA0D;IAC1D,aAAa,EAAE,iCAAiC;IAChD,8CAA8C;IAC9C,UAAU,EAAE,8BAA8B;IAC1C,oEAAoE;IACpE,gBAAgB,EAAE,oCAAoC;IACtD;;;;;;OAMG;IACH,qBAAqB,EAAE,yCAAyC;CACxD,CAAC;AAKX;;;;;;GAMG;AACH,MAAM,OAAO,6BAA8B,SAAQ,kBAGlD;IACU,MAAM,CAAmB;IACzB,UAAU,CAAmB;IAEtC,YACE,IAAuC,EACvC,OAAe,EACf,MAAwB,EACxB,aAA+B,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE;QAE9D,KAAK,CAAC,2BAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa,EAAE,OAAe;IACnE,MAAM,IAAI,uBAAuB,CAC/B,uBAAuB,CAAC,sBAAsB,EAC9C,GAAG,KAAK,wBAAwB,OAAO,EAAE,CAC1C,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,sEAAsE;IACtE,oEAAoE;IACpE,wBAAwB,CAAC;QACvB,KAAK,EAAE,mBAAmB,CAAC,0BAA0B;QACrD,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,uBAAuB,CAAC,SAAS;QAC5C,IAAI,EAAE,uBAAuB,CAAC,yBAAyB;QACvD,UAAU,EAAE,yBAAyB;QACrC,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,MAAM,IAAI,uBAAuB,CAC/B,uBAAuB,CAAC,yBAAyB,EACjD,+BAA+B,OAAO,EAAE,CACzC,CAAC;AACJ,CAAC"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export { GoogleSheetsApiSyncProvider } from "./GoogleSheetsApiSyncProvider.js";
|
|
9
9
|
export type { GoogleSheetsApiSyncProviderOptions, GoogleSheetsApiProviderOptions, GoogleSheetsApiRequestEvent, } from "./GoogleSheetsApiSyncProvider.js";
|
|
10
|
-
export { GoogleSheetsApiHttpTransport, classifyGoogleSheetsApiError, } from "./transport/googleSheetsApiTransport.js";
|
|
10
|
+
export { GoogleSheetsApiHttpTransport, classifyGoogleSheetsApiError, isRetryableTransportStatus, } from "./transport/googleSheetsApiTransport.js";
|
|
11
11
|
export type { GoogleSheetsApiTransport, GoogleSheetsApiGetSpreadsheetRequest, GoogleSheetsApiBatchUpdateRequest, GoogleSheetsApiWriteRequest, GoogleSheetsApiCell, GoogleSheetsApiCellRow, GoogleSheetsApiHttpTransportOptions, } from "./transport/googleSheetsApiTransport.js";
|
|
12
12
|
export { RequestStartLimiter } from "./transport/rateLimiter.js";
|
|
13
13
|
export { GOOGLE_SHEETS_API_DEFAULTS, GOOGLE_SHEETS_API_SCOPES, } from "./constants.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,YAAY,EACV,kCAAkC,EAClC,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,YAAY,EACV,kCAAkC,EAClC,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,yCAAyC,CAAC;AACjD,YAAY,EACV,wBAAwB,EACxB,oCAAoC,EACpC,iCAAiC,EACjC,2BAA2B,EAC3B,mBAAmB,EACnB,sBAAsB,EACtB,mCAAmC,GACpC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uCAAuC,EACvC,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* application API.
|
|
7
7
|
*/
|
|
8
8
|
export { GoogleSheetsApiSyncProvider } from "./GoogleSheetsApiSyncProvider.js";
|
|
9
|
-
export { GoogleSheetsApiHttpTransport, classifyGoogleSheetsApiError, } from "./transport/googleSheetsApiTransport.js";
|
|
9
|
+
export { GoogleSheetsApiHttpTransport, classifyGoogleSheetsApiError, isRetryableTransportStatus, } from "./transport/googleSheetsApiTransport.js";
|
|
10
10
|
export { RequestStartLimiter } from "./transport/rateLimiter.js";
|
|
11
11
|
export { GOOGLE_SHEETS_API_DEFAULTS, GOOGLE_SHEETS_API_SCOPES, } from "./constants.js";
|
|
12
12
|
export { GOOGLE_SHEETS_API_TRANSPORT_ERROR_CODES, GoogleSheetsApiTransportError, } from "./errors.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAM/E,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/adapter/sheets/providers/google-sheets-api/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAM/E,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,yCAAyC,CAAC;AAUjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uCAAuC,EACvC,6BAA6B,GAC9B,MAAM,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflightParsing.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/model/preflightParsing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"preflightParsing.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/model/preflightParsing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,KAAK,EAIV,WAAW,EACX,yBAAyB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B,yEAAyE;AACzE,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,yBAAyB,CAwB3B;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACZ,SAAS,WAAW,EAAE,CASxB;AAsKD,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOjE;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOjE"}
|
|
@@ -9,15 +9,10 @@
|
|
|
9
9
|
* are shared by the header and receipt readers.
|
|
10
10
|
*/
|
|
11
11
|
import { invalidProviderState } from "../errors.js";
|
|
12
|
+
import { parseProviderResponseShape, sheetEntryShapeSchema, spreadsheetDocumentShapeSchema, unknownArraySchema, } from "./rawResponseSchemas.js";
|
|
12
13
|
/** Promotes an untrusted `spreadsheets.get` body with runtime guards. */
|
|
13
14
|
export function parseSpreadsheetDocument(value, label) {
|
|
14
|
-
|
|
15
|
-
invalidProviderState(`${label} response must be an object`);
|
|
16
|
-
}
|
|
17
|
-
const record = value;
|
|
18
|
-
if (!Array.isArray(record.sheets)) {
|
|
19
|
-
invalidProviderState(`${label} response must contain a sheets array`);
|
|
20
|
-
}
|
|
15
|
+
const record = parseProviderResponseShape(spreadsheetDocumentShapeSchema, value, `${label} response must contain a sheets array`);
|
|
21
16
|
const grids = new Map();
|
|
22
17
|
const sheets = record.sheets.map((entry, index) => {
|
|
23
18
|
const sheet = parseSheetEntry(entry, `${label} sheets[${index}]`);
|
|
@@ -37,23 +32,14 @@ export function parseSpreadsheetDocument(value, label) {
|
|
|
37
32
|
* no grid data) with runtime guards.
|
|
38
33
|
*/
|
|
39
34
|
export function parseSheetPropertiesDocument(value, label) {
|
|
40
|
-
|
|
41
|
-
invalidProviderState(`${label} response must be an object`);
|
|
42
|
-
}
|
|
43
|
-
const record = value;
|
|
44
|
-
if (!Array.isArray(record.sheets)) {
|
|
45
|
-
invalidProviderState(`${label} response must contain a sheets array`);
|
|
46
|
-
}
|
|
35
|
+
const record = parseProviderResponseShape(spreadsheetDocumentShapeSchema, value, `${label} response must contain a sheets array`);
|
|
47
36
|
return record.sheets.map((entry, index) => parseSheetEntry(entry, `${label} sheets[${index}]`));
|
|
48
37
|
}
|
|
49
38
|
/** Validates one REST sheet entry's properties (sheetId, title, hidden). */
|
|
50
39
|
function parseSheetEntry(value, label) {
|
|
51
|
-
|
|
52
|
-
invalidProviderState(`${label} must be an object`);
|
|
53
|
-
}
|
|
54
|
-
const sheet = value;
|
|
40
|
+
const sheet = parseProviderResponseShape(sheetEntryShapeSchema, value, `${label} must be an object`);
|
|
55
41
|
const properties = sheet.properties;
|
|
56
|
-
if (properties === null || typeof properties !== "object" || Array.isArray(properties)) {
|
|
42
|
+
if (properties === undefined || properties === null || typeof properties !== "object" || Array.isArray(properties)) {
|
|
57
43
|
invalidProviderState(`${label}.properties must be an object`);
|
|
58
44
|
}
|
|
59
45
|
const propertyRecord = properties;
|
|
@@ -101,13 +87,11 @@ function optionalPositiveInteger(value, label) {
|
|
|
101
87
|
return value;
|
|
102
88
|
}
|
|
103
89
|
function parseGridDataArray(value, sheetId, label, grids) {
|
|
104
|
-
|
|
105
|
-
invalidProviderState(`${label} must be an array`);
|
|
106
|
-
}
|
|
90
|
+
const entries = parseProviderResponseShape(unknownArraySchema, value, `${label} must be an array`);
|
|
107
91
|
if (grids.has(sheetId)) {
|
|
108
92
|
invalidProviderState(`${label} contains a duplicate grid for one sheet`);
|
|
109
93
|
}
|
|
110
|
-
|
|
94
|
+
entries.forEach((entry, index) => {
|
|
111
95
|
if (entry === null || typeof entry !== "object" || Array.isArray(entry)) {
|
|
112
96
|
invalidProviderState(`${label}[${index}] must be an object`);
|
|
113
97
|
}
|
|
@@ -122,9 +106,8 @@ function parseGridDataArray(value, sheetId, label, grids) {
|
|
|
122
106
|
function parseMergedCells(value, label) {
|
|
123
107
|
if (value === undefined)
|
|
124
108
|
return undefined;
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return value.map((entry, index) => {
|
|
109
|
+
const entries = parseProviderResponseShape(unknownArraySchema, value, `${label} must be an array`);
|
|
110
|
+
return entries.map((entry, index) => {
|
|
128
111
|
if (entry === null || typeof entry !== "object" || Array.isArray(entry)) {
|
|
129
112
|
invalidProviderState(`${label}[${index}] must be an object`);
|
|
130
113
|
}
|
|
@@ -153,9 +136,8 @@ function parseMergedCells(value, label) {
|
|
|
153
136
|
function parseRowData(value, label) {
|
|
154
137
|
if (value === undefined)
|
|
155
138
|
return [];
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
return value.map((entry, index) => {
|
|
139
|
+
const entries = parseProviderResponseShape(unknownArraySchema, value, `${label} must be an array`);
|
|
140
|
+
return entries.map((entry, index) => {
|
|
159
141
|
if (entry === null || typeof entry !== "object" || Array.isArray(entry)) {
|
|
160
142
|
invalidProviderState(`${label}[${index}] must be an object`);
|
|
161
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflightParsing.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/model/preflightParsing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"preflightParsing.js","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/model/preflightParsing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Structural shape shared by spreadsheet enumeration and grid responses. */
|
|
3
|
+
export declare const spreadsheetDocumentShapeSchema: z.ZodObject<{
|
|
4
|
+
sheets: z.ZodArray<z.ZodUnknown>;
|
|
5
|
+
}, z.core.$loose>;
|
|
6
|
+
/** Structural shape of one REST sheet entry before semantic promotion. */
|
|
7
|
+
export declare const sheetEntryShapeSchema: z.ZodObject<{
|
|
8
|
+
properties: z.ZodOptional<z.ZodUnknown>;
|
|
9
|
+
data: z.ZodOptional<z.ZodUnknown>;
|
|
10
|
+
merges: z.ZodOptional<z.ZodUnknown>;
|
|
11
|
+
}, z.core.$loose>;
|
|
12
|
+
/** Generic array shape used by nested Google response parsers. */
|
|
13
|
+
export declare const unknownArraySchema: z.ZodArray<z.ZodUnknown>;
|
|
14
|
+
/** Structural shape of a batchUpdate response before reply semantics. */
|
|
15
|
+
export declare const batchUpdateResponseShapeSchema: z.ZodObject<{
|
|
16
|
+
replies: z.ZodArray<z.ZodUnknown>;
|
|
17
|
+
}, z.core.$loose>;
|
|
18
|
+
/** Parses one raw provider shape while retaining the provider error boundary. */
|
|
19
|
+
export declare function parseProviderResponseShape<T>(schema: z.ZodType<T>, value: unknown, message: string): T;
|
|
20
|
+
//# sourceMappingURL=rawResponseSchemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rawResponseSchemas.d.ts","sourceRoot":"","sources":["../../../../../../src/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,6EAA6E;AAC7E,eAAO,MAAM,8BAA8B;;iBAE3B,CAAC;AAEjB,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB;;;;iBAIlB,CAAC;AAEjB,kEAAkE;AAClE,eAAO,MAAM,kBAAkB,0BAAuB,CAAC;AAEvD,yEAAyE;AACzE,eAAO,MAAM,8BAA8B;;iBAE3B,CAAC;AAEjB,iFAAiF;AACjF,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EACpB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,GACd,CAAC,CAIH"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { invalidProviderState } from "../errors.js";
|
|
3
|
+
/** Structural shape shared by spreadsheet enumeration and grid responses. */
|
|
4
|
+
export const spreadsheetDocumentShapeSchema = z.object({
|
|
5
|
+
sheets: z.array(z.unknown()),
|
|
6
|
+
}).passthrough();
|
|
7
|
+
/** Structural shape of one REST sheet entry before semantic promotion. */
|
|
8
|
+
export const sheetEntryShapeSchema = z.object({
|
|
9
|
+
properties: z.unknown().optional(),
|
|
10
|
+
data: z.unknown().optional(),
|
|
11
|
+
merges: z.unknown().optional(),
|
|
12
|
+
}).passthrough();
|
|
13
|
+
/** Generic array shape used by nested Google response parsers. */
|
|
14
|
+
export const unknownArraySchema = z.array(z.unknown());
|
|
15
|
+
/** Structural shape of a batchUpdate response before reply semantics. */
|
|
16
|
+
export const batchUpdateResponseShapeSchema = z.object({
|
|
17
|
+
replies: z.array(z.unknown()),
|
|
18
|
+
}).passthrough();
|
|
19
|
+
/** Parses one raw provider shape while retaining the provider error boundary. */
|
|
20
|
+
export function parseProviderResponseShape(schema, value, message) {
|
|
21
|
+
const parsed = schema.safeParse(value);
|
|
22
|
+
if (!parsed.success)
|
|
23
|
+
invalidProviderState(message);
|
|
24
|
+
return parsed.data;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=rawResponseSchemas.js.map
|