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
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This internal module owns the mapping from environment variables to the
|
|
5
5
|
* sync service bootstrap: spreadsheet URL parsing, service-account credentials
|
|
6
|
-
* file validation, polling interval parsing,
|
|
7
|
-
* entity descriptors, and fail-closed
|
|
8
|
-
* never re-exported from `src/index.ts`;
|
|
9
|
-
*
|
|
10
|
-
* sync module graph.
|
|
6
|
+
* file validation, polling interval parsing, request-start pacing override
|
|
7
|
+
* parsing, projection auto-generation from entity descriptors, and fail-closed
|
|
8
|
+
* startup failure classification. It is never re-exported from `src/index.ts`;
|
|
9
|
+
* the public factory calls it only when `HIKOUTEI_SYNC_SPREADSHEET_URL` is
|
|
10
|
+
* set, so local-only users never load the sync module graph.
|
|
11
11
|
*
|
|
12
12
|
* The env reader, transport, and diagnostic sink are injectable so tests can
|
|
13
13
|
* exercise every startup branch with a stub transport, a fake env, and a
|
|
@@ -25,9 +25,13 @@ import { createLocalTypedSheetsRuntime, validateTypedSheetsOptions, } from "../.
|
|
|
25
25
|
import { HIKOUTEI_ERROR_CODES, HikouteiError, } from "../../../api/errors.js";
|
|
26
26
|
import { GoogleSheetsApiTransportError, } from "../../../adapter/sheets/providers/google-sheets-api/errors.js";
|
|
27
27
|
import { columnLetters } from "../../../adapter/sheets/providers/google-sheets-api/model/valueNormalization.js";
|
|
28
|
+
import { GOOGLE_SHEETS_API_DEFAULTS, } from "../../../adapter/sheets/providers/google-sheets-api/constants.js";
|
|
28
29
|
import { PRESENCE_KINDS } from "../../../shared/state/index.js";
|
|
30
|
+
import { DEFAULT_EFFECT_LEASE_DURATION_MS, EFFECT_LEASE_PROVIDER_HEADROOM_MS, } from "@hikoutei/ikisaki";
|
|
29
31
|
import { SYNC_CONFLICT_PROJECTION_REGISTERED_RANGE, } from "../sheetsContract/conflictProjection.js";
|
|
30
32
|
import { SyncSheetsContractError } from "../sheetsContract/errors.js";
|
|
33
|
+
import { describeErrorForInternalLog, logHikouteiInternalEvent, } from "../../../shared/observability/internalLog.js";
|
|
34
|
+
import { HIKOUTEI_LOG_COMPONENTS, HIKOUTEI_LOG_EVENTS, HIKOUTEI_LOG_STABLE_CLASSES, HIKOUTEI_LOG_STABLE_CODES, } from "../../../shared/observability/logEvents.js";
|
|
31
35
|
import { createInternalSyncService, } from "./SyncServiceBootstrap.js";
|
|
32
36
|
/** Env keys consumed by the sync auto-start bridge. */
|
|
33
37
|
export const SYNC_ENV_KEYS = {
|
|
@@ -39,11 +43,46 @@ export const SYNC_ENV_KEYS = {
|
|
|
39
43
|
POLLING_INTERVAL_MS: "HIKOUTEI_SYNC_POLLING_INTERVAL_MS",
|
|
40
44
|
/** Optional metadata safety full-scan cadence in ms; defaults to 60 seconds. */
|
|
41
45
|
FULL_SCAN_INTERVAL_MS: "HIKOUTEI_SYNC_FULL_SCAN_INTERVAL_MS",
|
|
46
|
+
/**
|
|
47
|
+
* Optional request-start pacing in ms for the direct provider's ONE shared
|
|
48
|
+
* read+write limiter; absent uses the safe default (2,500 ms). Internal
|
|
49
|
+
* only — never part of the root public API.
|
|
50
|
+
*/
|
|
51
|
+
RATE_LIMIT_INTERVAL_MS: "HIKOUTEI_SYNC_RATE_LIMIT_INTERVAL_MS",
|
|
42
52
|
};
|
|
43
53
|
/** Default polling cadence applied when the interval env vars are absent. */
|
|
44
54
|
export const DEFAULT_SYNC_POLLING_INTERVAL_MS = 60_000;
|
|
45
55
|
/** Default safety full-scan cadence applied when the interval env vars are absent. */
|
|
46
56
|
export const DEFAULT_SYNC_FULL_SCAN_INTERVAL_MS = 60_000;
|
|
57
|
+
/** Lower bound for the sync request-start pacing env override (1 second). */
|
|
58
|
+
export const MIN_SYNC_RATE_LIMIT_INTERVAL_MS = 1_000;
|
|
59
|
+
/**
|
|
60
|
+
* Upper bound for the sync request-start pacing env override.
|
|
61
|
+
*
|
|
62
|
+
* A worst-case effect dispatch performs THREE sequential paced transport
|
|
63
|
+
* calls (two preflight/postcondition reads plus one batch write). The effect
|
|
64
|
+
* lease must still cover the whole sequence with the 30-second provider
|
|
65
|
+
* headroom, and a dispatch can wait up to one FULL interval for its first
|
|
66
|
+
* slot because the shared limiter may hold a prior reservation — admission
|
|
67
|
+
* is BOUNDED to one interval, so a request whose slot lies further out is
|
|
68
|
+
* refused before any SDK call (delivery-uncertain, requeued durably)
|
|
69
|
+
* instead of waiting past the lease. With the DEFAULT lease, write timeout,
|
|
70
|
+
* and read timeout the interval must satisfy
|
|
71
|
+
* `120s > 60s + I + 2 * max(10s, I) + 30s`, i.e. `I < 10s`. Below
|
|
72
|
+
* the 10 s read timeout the two read slots cost 2 x 10 s and the interval
|
|
73
|
+
* adds once, so the bound is `I < 120 - 60 - 2x10 - 30 = 10 s`; at or
|
|
74
|
+
* above the read timeout the interval dominates (`3I < 30s` has no
|
|
75
|
+
* solution at or above 10 s), so the below-read-slot branch is binding.
|
|
76
|
+
* The ceiling below is derived from those defaults (10,000 - 1 = 9,999 ms)
|
|
77
|
+
* and the service-level lease-headroom validation applies the same math to
|
|
78
|
+
* the ACTIVE lease and timeouts, so an override that could let pacing push
|
|
79
|
+
* a dispatch past the lease is rejected with a stable startup failure
|
|
80
|
+
* instead of risking lease expiry and duplicate remote delivery.
|
|
81
|
+
*/
|
|
82
|
+
export const MAX_SYNC_RATE_LIMIT_INTERVAL_MS = Math.max(MIN_SYNC_RATE_LIMIT_INTERVAL_MS, Math.floor(DEFAULT_EFFECT_LEASE_DURATION_MS -
|
|
83
|
+
GOOGLE_SHEETS_API_DEFAULTS.REQUEST_TIMEOUT_MS -
|
|
84
|
+
EFFECT_LEASE_PROVIDER_HEADROOM_MS -
|
|
85
|
+
2 * GOOGLE_SHEETS_API_DEFAULTS.READ_TIMEOUT_MS) - 1);
|
|
47
86
|
/** Required service-account fields validated before any remote contact. */
|
|
48
87
|
const REQUIRED_CREDENTIAL_FIELDS = ["type", "client_email", "private_key"];
|
|
49
88
|
const SPREADSHEET_PATH_SEGMENT = "d";
|
|
@@ -110,20 +149,42 @@ export async function createTypedSheetsWithSync(options) {
|
|
|
110
149
|
({ clientEmail } = await validateSyncCredentialsFile(env[SYNC_ENV_KEYS.CREDENTIALS_FILE]));
|
|
111
150
|
const pollingIntervalMs = parseIntervalEnv(env, SYNC_ENV_KEYS.POLLING_INTERVAL_MS, DEFAULT_SYNC_POLLING_INTERVAL_MS);
|
|
112
151
|
const pollingFullScanIntervalMs = parseIntervalEnv(env, SYNC_ENV_KEYS.FULL_SCAN_INTERVAL_MS, DEFAULT_SYNC_FULL_SCAN_INTERVAL_MS);
|
|
152
|
+
// The pacing env override applies ONLY to the real Google Sheets
|
|
153
|
+
// provider: it is resolved and validated only when no fake transport is
|
|
154
|
+
// injected, so local/fake suites stay immune to a misconfigured or
|
|
155
|
+
// invalid override in the host env.
|
|
156
|
+
const rateLimitIntervalMs = options.transport === undefined
|
|
157
|
+
? resolveSyncRateLimitIntervalMs(env)
|
|
158
|
+
: undefined;
|
|
113
159
|
const projections = buildSyncProjections(options.entities, spreadsheetId);
|
|
114
160
|
const service = await createInternalSyncService({
|
|
115
161
|
dbName: options.dbName,
|
|
116
162
|
entities: [...options.entities],
|
|
117
163
|
projections,
|
|
118
|
-
// Injected transports are a test-only affordance;
|
|
119
|
-
// stub-based suites wall-clock cheap
|
|
120
|
-
//
|
|
164
|
+
// Injected transports are a test-only affordance; ZERO pacing keeps
|
|
165
|
+
// stub-based suites wall-clock cheap AND immune to the bounded
|
|
166
|
+
// admission (interval 0 never waits and never refuses). The pacing env
|
|
167
|
+
// override applies ONLY to the real Google Sheets provider (no injected
|
|
168
|
+
// transport): a valid override is plumbed through, and the production
|
|
169
|
+
// path builds the real ADC-backed transport with the provider's safe
|
|
170
|
+
// default (2,500 ms) when the override is absent. Fake transports never
|
|
171
|
+
// consult HIKOUTEI_SYNC_RATE_LIMIT_INTERVAL_MS, so local/fake suites
|
|
172
|
+
// stay immune to a misconfigured or invalid override in the host env.
|
|
121
173
|
googleSheetsApi: options.transport === undefined
|
|
122
|
-
? {}
|
|
123
|
-
: {
|
|
174
|
+
? (rateLimitIntervalMs === undefined ? {} : { rateLimitIntervalMs })
|
|
175
|
+
: {
|
|
176
|
+
transport: options.transport,
|
|
177
|
+
rateLimitIntervalMs: 0,
|
|
178
|
+
},
|
|
124
179
|
pollingIntervalMs,
|
|
125
180
|
pollingFullScanIntervalMs,
|
|
126
181
|
});
|
|
182
|
+
logHikouteiInternalEvent({
|
|
183
|
+
event: HIKOUTEI_LOG_EVENTS.SYNC_AUTOSTART_STARTED,
|
|
184
|
+
level: "info",
|
|
185
|
+
component: HIKOUTEI_LOG_COMPONENTS.SYNC_AUTOSTART,
|
|
186
|
+
counts: { entities: options.entities.length },
|
|
187
|
+
});
|
|
127
188
|
return { kind: "sync", hikoutei: service.hikoutei, service };
|
|
128
189
|
}
|
|
129
190
|
catch (error) {
|
|
@@ -262,17 +323,119 @@ function parseIntervalEnv(env, key, fallback) {
|
|
|
262
323
|
}
|
|
263
324
|
return value;
|
|
264
325
|
}
|
|
326
|
+
/**
|
|
327
|
+
* Resolves the sync request-start pacing env override, or undefined.
|
|
328
|
+
*
|
|
329
|
+
* `HIKOUTEI_SYNC_RATE_LIMIT_INTERVAL_MS` is the internal override for the
|
|
330
|
+
* direct provider's ONE shared read+write request-start limiter. Absent or
|
|
331
|
+
* blank means the provider's safe default (2,500 ms) applies; a present
|
|
332
|
+
* value must be a plain decimal integer between 1,000 ms and
|
|
333
|
+
* `MAX_SYNC_RATE_LIMIT_INTERVAL_MS` (~10 s). The ceiling is the largest
|
|
334
|
+
* interval whose worst-case three-request paced dispatch still finishes
|
|
335
|
+
* inside the default effect lease (120 s) with the default write timeout
|
|
336
|
+
* (60 s), read timeout (10 s), and provider headroom (30 s): a dispatch
|
|
337
|
+
* can wait up to one full interval for its first slot because the shared
|
|
338
|
+
* limiter may hold a prior reservation, so the strict default-safe bound
|
|
339
|
+
* is `120s > 60s + I + 2 * max(10s, I) + 30s` and a larger interval could
|
|
340
|
+
* let pacing push the dispatch past the lease and risk duplicate remote
|
|
341
|
+
* delivery. Values outside those bounds (including hex,
|
|
342
|
+
* exponent, signed, padded, fractional, and non-numeric forms) fail closed
|
|
343
|
+
* with the stable startup code so a mistyped override can never silently
|
|
344
|
+
* drop pacing to a burst or outlive the effect lease. The key stays internal
|
|
345
|
+
* and is never part of the root public API.
|
|
346
|
+
*/
|
|
347
|
+
export function resolveSyncRateLimitIntervalMs(env) {
|
|
348
|
+
const raw = env[SYNC_ENV_KEYS.RATE_LIMIT_INTERVAL_MS];
|
|
349
|
+
if (raw === undefined || raw.trim() === "")
|
|
350
|
+
return undefined;
|
|
351
|
+
if (!/^\d+$/.test(raw)) {
|
|
352
|
+
throw new HikouteiError(HIKOUTEI_ERROR_CODES.SYNC_STARTUP_FAILED, `Sync start failed: ${SYNC_ENV_KEYS.RATE_LIMIT_INTERVAL_MS} must be an integer between ` +
|
|
353
|
+
`${MIN_SYNC_RATE_LIMIT_INTERVAL_MS} and ${MAX_SYNC_RATE_LIMIT_INTERVAL_MS} ms — current value: ${raw}`);
|
|
354
|
+
}
|
|
355
|
+
const value = Number(raw);
|
|
356
|
+
if (!Number.isSafeInteger(value) ||
|
|
357
|
+
value < MIN_SYNC_RATE_LIMIT_INTERVAL_MS ||
|
|
358
|
+
value > MAX_SYNC_RATE_LIMIT_INTERVAL_MS) {
|
|
359
|
+
throw new HikouteiError(HIKOUTEI_ERROR_CODES.SYNC_STARTUP_FAILED, `Sync start failed: ${SYNC_ENV_KEYS.RATE_LIMIT_INTERVAL_MS} must be an integer between ` +
|
|
360
|
+
`${MIN_SYNC_RATE_LIMIT_INTERVAL_MS} and ${MAX_SYNC_RATE_LIMIT_INTERVAL_MS} ms — current value: ${raw}`);
|
|
361
|
+
}
|
|
362
|
+
return value;
|
|
363
|
+
}
|
|
265
364
|
function raiseDiagnosed(diagnostic, failure) {
|
|
266
|
-
|
|
365
|
+
logHikouteiInternalEvent({
|
|
366
|
+
event: HIKOUTEI_LOG_EVENTS.SYNC_AUTOSTART_FAILED,
|
|
367
|
+
level: "error",
|
|
368
|
+
component: HIKOUTEI_LOG_COMPONENTS.SYNC_AUTOSTART,
|
|
369
|
+
...describeErrorForInternalLog(failure),
|
|
370
|
+
});
|
|
371
|
+
// EVERY diagnostic sink — injected or default — receives only the
|
|
372
|
+
// stable class/code summary. Full failure messages can embed the
|
|
373
|
+
// service-account email, spreadsheet ID, credential path, or raw
|
|
374
|
+
// provider text and must never reach a sink; the thrown HikouteiError
|
|
375
|
+
// always carries the full public message regardless of the sink.
|
|
376
|
+
try {
|
|
377
|
+
diagnostic("error", stableStartupDiagnostic(failure));
|
|
378
|
+
}
|
|
379
|
+
catch {
|
|
380
|
+
// Fail-open: a throwing diagnostic sink (injected or default) can
|
|
381
|
+
// never replace the classified startup failure. The original
|
|
382
|
+
// HikouteiError — with its stable class and machine-readable code —
|
|
383
|
+
// is preserved and rethrown unchanged, exactly as if the sink had
|
|
384
|
+
// succeeded.
|
|
385
|
+
}
|
|
267
386
|
throw failure;
|
|
268
387
|
}
|
|
388
|
+
/** Stable error-class allowlist backing sink diagnostics (see logEvents.ts). */
|
|
389
|
+
const STABLE_CLASS_ALLOWLIST = new Set(HIKOUTEI_LOG_STABLE_CLASSES);
|
|
390
|
+
/** Stable error-code allowlist backing sink diagnostics (see logEvents.ts). */
|
|
391
|
+
const STABLE_CODE_ALLOWLIST = new Set(HIKOUTEI_LOG_STABLE_CODES);
|
|
392
|
+
/**
|
|
393
|
+
* Stable redacted startup summary for diagnostic sinks: class and code
|
|
394
|
+
* only, each checked against the shared stable allowlists.
|
|
395
|
+
*
|
|
396
|
+
* `failure.name` and `failure.code` are runtime strings that could carry
|
|
397
|
+
* secret-like text (paths, emails, tokens) if an unexpected error shape
|
|
398
|
+
* ever reached the sink path, so unknown or malformed values collapse to
|
|
399
|
+
* the fixed `unknown` class/code. The full public message is carried by
|
|
400
|
+
* the thrown HikouteiError alone and never reaches any sink.
|
|
401
|
+
*/
|
|
402
|
+
export function stableStartupDiagnostic(failure) {
|
|
403
|
+
const described = describeErrorForInternalLog(failure);
|
|
404
|
+
const errorClass = STABLE_CLASS_ALLOWLIST.has(described.errorClass)
|
|
405
|
+
? described.errorClass
|
|
406
|
+
: "unknown";
|
|
407
|
+
const code = described.code !== undefined && STABLE_CODE_ALLOWLIST.has(described.code)
|
|
408
|
+
? described.code
|
|
409
|
+
: "unknown";
|
|
410
|
+
return `Hikoutei sync autostart failed (class=${errorClass}, code=${code})`;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Shape gate for the default sink's error line (defense in depth).
|
|
414
|
+
*
|
|
415
|
+
* The error path receives only the stable class/code summary built by
|
|
416
|
+
* `stableStartupDiagnostic`, but the gate re-validates the exact summary
|
|
417
|
+
* shape before printing: an unexpected raw message (which could embed a
|
|
418
|
+
* path, email, spreadsheet ID, or provider text) collapses to the
|
|
419
|
+
* level-only fallback and never reaches the console.
|
|
420
|
+
*/
|
|
421
|
+
const STABLE_SUMMARY_SHAPE = /^Hikoutei sync autostart failed \(class=(unknown|[A-Za-z][A-Za-z0-9]*), code=(unknown|[A-Za-z][A-Za-z0-9_]*)\)$/;
|
|
269
422
|
function defaultDiagnostic(level, message) {
|
|
270
423
|
if (level === "info") {
|
|
424
|
+
// The info path emits only the static local-mode notice.
|
|
271
425
|
console.info(message);
|
|
426
|
+
return;
|
|
272
427
|
}
|
|
273
|
-
|
|
428
|
+
// The error path emits the already-redacted stable class/code summary
|
|
429
|
+
// (never the full failure message — that stays on the thrown
|
|
430
|
+
// HikouteiError). The shape gate above keeps the defense in depth:
|
|
431
|
+
// anything that is not the exact stable summary shape falls back to the
|
|
432
|
+
// level-only notice.
|
|
433
|
+
if (STABLE_SUMMARY_SHAPE.test(message)) {
|
|
274
434
|
console.error(message);
|
|
275
435
|
}
|
|
436
|
+
else {
|
|
437
|
+
console.error(`[hikoutei] sync autostart failed (level=${level})`);
|
|
438
|
+
}
|
|
276
439
|
}
|
|
277
440
|
function isNodeErrorWithCode(error, code) {
|
|
278
441
|
return error !== null &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncAutoStart.js","sourceRoot":"","sources":["../../../../src/application/sync/service/syncAutoStart.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"syncAutoStart.js","sourceRoot":"","sources":["../../../../src/application/sync/service/syncAutoStart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal System_State readiness controller for external convergence
|
|
3
|
+
* barriers.
|
|
4
|
+
*
|
|
5
|
+
* External tooling (for example the local multi-table soak runner's live
|
|
6
|
+
* convergence phase) needs to know when a runtime's System_State outbox
|
|
7
|
+
* drain has finished so its own batched sheet reads do not compete with
|
|
8
|
+
* the initial drain on the shared request limiter. The sync service
|
|
9
|
+
* registers every runtime it bootstraps here and unregisters it when the
|
|
10
|
+
* runtime closes; a runtime that was never registered (plain local-only
|
|
11
|
+
* mode, or an already-closed runtime) reports ready immediately.
|
|
12
|
+
*
|
|
13
|
+
* This module is deliberately internal: it is never re-exported from
|
|
14
|
+
* `src/index.ts`, and applications observe readiness only through the
|
|
15
|
+
* library's own behavior.
|
|
16
|
+
*/
|
|
17
|
+
import type { Hikoutei } from "../../../api/Hikoutei.js";
|
|
18
|
+
import type { MikroOrmSqliteAdapter } from "../../../adapter/persistence/providers/mikro-orm/storage/MikroOrmSqliteAdapter.js";
|
|
19
|
+
import { type SystemStateDrainReadiness } from "@hikoutei/ikisaki";
|
|
20
|
+
/** Registers one bootstrapped runtime for readiness queries. */
|
|
21
|
+
export declare function registerSystemStateReadiness(runtime: Hikoutei, storage: MikroOrmSqliteAdapter): void;
|
|
22
|
+
/** Unregisters one runtime (called on close, before storage is released). */
|
|
23
|
+
export declare function unregisterSystemStateReadiness(runtime: Hikoutei): void;
|
|
24
|
+
/**
|
|
25
|
+
* Reports the CURRENT System_State drain readiness of one runtime.
|
|
26
|
+
*
|
|
27
|
+
* Only the System_State projection's claimable in-flight effects are
|
|
28
|
+
* considered — never the whole-outbox idle state. A pending follower behind
|
|
29
|
+
* a conflict/blocked_candidate/failed predecessor is not claimable drain
|
|
30
|
+
* work and never defers, so an open conflict cannot stall the barrier. A
|
|
31
|
+
* runtime without a registered sync service (local-only mode, or already
|
|
32
|
+
* closed) has no outbox to drain and is ready immediately.
|
|
33
|
+
*/
|
|
34
|
+
export declare function readRuntimeSystemStateReadiness(runtime: Hikoutei): Promise<SystemStateDrainReadiness>;
|
|
35
|
+
//# sourceMappingURL=systemStateReadiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemStateReadiness.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/service/systemStateReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mFAAmF,CAAC;AAC/H,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,mBAAmB,CAAC;AAiB3B,gEAAgE;AAChE,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,qBAAqB,GAC7B,IAAI,CAEN;AAED,6EAA6E;AAC7E,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAEtE;AAED;;;;;;;;;GASG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,yBAAyB,CAAC,CAIpC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal System_State readiness controller for external convergence
|
|
3
|
+
* barriers.
|
|
4
|
+
*
|
|
5
|
+
* External tooling (for example the local multi-table soak runner's live
|
|
6
|
+
* convergence phase) needs to know when a runtime's System_State outbox
|
|
7
|
+
* drain has finished so its own batched sheet reads do not compete with
|
|
8
|
+
* the initial drain on the shared request limiter. The sync service
|
|
9
|
+
* registers every runtime it bootstraps here and unregisters it when the
|
|
10
|
+
* runtime closes; a runtime that was never registered (plain local-only
|
|
11
|
+
* mode, or an already-closed runtime) reports ready immediately.
|
|
12
|
+
*
|
|
13
|
+
* This module is deliberately internal: it is never re-exported from
|
|
14
|
+
* `src/index.ts`, and applications observe readiness only through the
|
|
15
|
+
* library's own behavior.
|
|
16
|
+
*/
|
|
17
|
+
import { readSystemStateDrainReadinessWithAdapter, } from "@hikoutei/ikisaki";
|
|
18
|
+
/**
|
|
19
|
+
* Registry of bootstrapped runtimes keyed by the runtime object itself.
|
|
20
|
+
*
|
|
21
|
+
* A WeakMap keeps the registry inert: a runtime that is garbage-collected
|
|
22
|
+
* without closing (or whose registration leaked) never pins its storage
|
|
23
|
+
* or SQLite file open, and the key is the exact public `Hikoutei` object
|
|
24
|
+
* the caller holds.
|
|
25
|
+
*/
|
|
26
|
+
const registeredRuntimes = new WeakMap();
|
|
27
|
+
/** Registers one bootstrapped runtime for readiness queries. */
|
|
28
|
+
export function registerSystemStateReadiness(runtime, storage) {
|
|
29
|
+
registeredRuntimes.set(runtime, { storage });
|
|
30
|
+
}
|
|
31
|
+
/** Unregisters one runtime (called on close, before storage is released). */
|
|
32
|
+
export function unregisterSystemStateReadiness(runtime) {
|
|
33
|
+
registeredRuntimes.delete(runtime);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Reports the CURRENT System_State drain readiness of one runtime.
|
|
37
|
+
*
|
|
38
|
+
* Only the System_State projection's claimable in-flight effects are
|
|
39
|
+
* considered — never the whole-outbox idle state. A pending follower behind
|
|
40
|
+
* a conflict/blocked_candidate/failed predecessor is not claimable drain
|
|
41
|
+
* work and never defers, so an open conflict cannot stall the barrier. A
|
|
42
|
+
* runtime without a registered sync service (local-only mode, or already
|
|
43
|
+
* closed) has no outbox to drain and is ready immediately.
|
|
44
|
+
*/
|
|
45
|
+
export async function readRuntimeSystemStateReadiness(runtime) {
|
|
46
|
+
const entry = registeredRuntimes.get(runtime);
|
|
47
|
+
if (entry === undefined)
|
|
48
|
+
return { status: "ready" };
|
|
49
|
+
return readSystemStateDrainReadinessWithAdapter(entry.storage);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=systemStateReadiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemStateReadiness.js","sourceRoot":"","sources":["../../../../src/application/sync/service/systemStateReadiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EACL,wCAAwC,GAEzC,MAAM,mBAAmB,CAAC;AAO3B;;;;;;;GAOG;AACH,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAA+B,CAAC;AAEtE,gEAAgE;AAChE,MAAM,UAAU,4BAA4B,CAC1C,OAAiB,EACjB,OAA8B;IAE9B,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,8BAA8B,CAAC,OAAiB;IAC9D,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,OAAiB;IAEjB,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACpD,OAAO,wCAAwC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACjE,CAAC"}
|
package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts
CHANGED
|
@@ -29,12 +29,22 @@
|
|
|
29
29
|
* stable sorted order, so it cannot deadlock with single-sheet mutations.
|
|
30
30
|
* - Provisioning uses a dedicated lane so setup never races an append/write.
|
|
31
31
|
* - A failing or throwing mutation releases the lane, so it never deadlocks.
|
|
32
|
+
* - `runSerializedInner` runs an optional in-lane precondition (the effect
|
|
33
|
+
* lease renewal) after the lane is acquired and before the inner provider
|
|
34
|
+
* call, so queue time plus limiter waits cannot outlive the lease.
|
|
32
35
|
*/
|
|
33
|
-
import type { ApplySyncEffectsRequest, ApplySyncEffectsResult, EnsureSyncRowAnchorsRequest, EnsureSyncRowAnchorsResult, FastAppendRowsRequest, FastAppendRowsResult, ReadSyncEffectPostconditionsRequest, ReadSyncSnapshotRequest, ReadSyncTableRowsRequest, SyncEffectPostcondition, SyncProjectionEffect, SyncEffectPostconditionResult, SyncSheetsSnapshot, SyncObservedSnapshot, SyncSheetsProvider, SyncSheetsObservationBatchProvider, SyncSheetsTableReader, SyncTableRowsResult } from "../syncSheets.js";
|
|
36
|
+
import type { ApplySyncEffectsRequest, ApplySyncEffectsResult, EnsureSyncRowAnchorsRequest, EnsureSyncRowAnchorsResult, FastAppendRowsRequest, FastAppendRowsResult, ReadSyncEffectPostconditionsRequest, ReadSyncSnapshotRequest, ReadSyncTableRowsRequest, SyncEffectPostcondition, SyncProjectionEffect, SyncEffectPostconditionResult, SyncSheetsSnapshot, SyncObservedSnapshot, SyncSheetsProvider, SyncSheetsObservationBatchProvider, SyncSheetsTableReader, SyncTableRowsResult, SyncEffectWorkerProvider } from "../syncSheets.js";
|
|
34
37
|
import { AsyncMutex } from "./asyncMutex.js";
|
|
35
38
|
import { type CoordinatorLaneEvent } from "./laneTelemetry.js";
|
|
36
39
|
/** Provider boundary the coordinator wraps (effect + observation + table read). */
|
|
37
40
|
export type CoordinatedSheetsInner = SyncSheetsProvider & SyncSheetsTableReader;
|
|
41
|
+
/**
|
|
42
|
+
* Thrown when an in-lane precondition callback rejects before the remote
|
|
43
|
+
* call. Carries only the static redacted message above.
|
|
44
|
+
*/
|
|
45
|
+
export declare class CoordinatedLanePreconditionError extends Error {
|
|
46
|
+
constructor();
|
|
47
|
+
}
|
|
38
48
|
/** Options for constructing a per-spreadsheet coordinator. */
|
|
39
49
|
export interface CoordinatedSheetsProviderOptions<TInner extends CoordinatedSheetsInner> {
|
|
40
50
|
readonly inner: TInner;
|
|
@@ -73,6 +83,21 @@ export declare class CoordinatedSheetsProvider<TInner extends CoordinatedSheetsI
|
|
|
73
83
|
* competing provider request outside the coordinator.
|
|
74
84
|
*/
|
|
75
85
|
runSerializedControl<T>(physicalSheetId: string, operation: string, task: () => Promise<T>): Promise<T>;
|
|
86
|
+
/**
|
|
87
|
+
* Runs one internal remote task on the mutation lane with an optional
|
|
88
|
+
* in-lane precondition hook.
|
|
89
|
+
*
|
|
90
|
+
* The effect dispatcher uses this so the worker's lease-renewal callback
|
|
91
|
+
* runs AFTER the lane is acquired (covering queue wait time) but BEFORE the
|
|
92
|
+
* inner provider's remote call (covering shared limiter waits and the call
|
|
93
|
+
* itself). The `remote` closure receives the INNER provider and must call
|
|
94
|
+
* it directly, so the call never re-enters this coordinator's lane and
|
|
95
|
+
* cannot deadlock. When `beforeRemote` resolves false (or throws), a
|
|
96
|
+
* `CoordinatedLanePreconditionError` is raised before any remote request
|
|
97
|
+
* and the lane is released normally; lane telemetry still records the
|
|
98
|
+
* aborted dispatch with a delivery-uncertain outcome.
|
|
99
|
+
*/
|
|
100
|
+
runSerializedInner<T>(physicalSheetId: string, operation: string, remote: (inner: TInner) => Promise<T>, beforeRemote?: () => Promise<boolean>): Promise<T>;
|
|
76
101
|
fastAppendRows(request: FastAppendRowsRequest): Promise<FastAppendRowsResult>;
|
|
77
102
|
applyEffects(request: ApplySyncEffectsRequest): Promise<ApplySyncEffectsResult>;
|
|
78
103
|
readEffectPostcondition(effect: SyncProjectionEffect): Promise<SyncEffectPostcondition>;
|
|
@@ -100,4 +125,15 @@ export declare class CoordinatedSheetsProvider<TInner extends CoordinatedSheetsI
|
|
|
100
125
|
private emitFailure;
|
|
101
126
|
private emit;
|
|
102
127
|
}
|
|
128
|
+
/** The in-lane dispatch capability the effect dispatcher detects on a provider. */
|
|
129
|
+
export type CoordinatedSerializedInnerProvider = Pick<CoordinatedSheetsProvider<CoordinatedSheetsInner>, "runSerializedInner">;
|
|
130
|
+
/**
|
|
131
|
+
* Returns whether a provider exposes the coordinator's in-lane dispatch hook.
|
|
132
|
+
*
|
|
133
|
+
* The effect dispatcher uses this to route its `beforeRemoteDispatch` lease
|
|
134
|
+
* renewal through the acquired mutation lane; providers without the hook
|
|
135
|
+
* (bare fakes and test doubles) keep the direct call path and simply ignore
|
|
136
|
+
* the hook.
|
|
137
|
+
*/
|
|
138
|
+
export declare function hasCoordinatedSerializedInner(provider: SyncEffectWorkerProvider): provider is SyncEffectWorkerProvider & CoordinatedSerializedInnerProvider;
|
|
103
139
|
//# sourceMappingURL=CoordinatedSheetsProvider.d.ts.map
|
package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoordinatedSheetsProvider.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"CoordinatedSheetsProvider.d.ts","sourceRoot":"","sources":["../../../../../src/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js
CHANGED
|
@@ -29,11 +29,31 @@
|
|
|
29
29
|
* stable sorted order, so it cannot deadlock with single-sheet mutations.
|
|
30
30
|
* - Provisioning uses a dedicated lane so setup never races an append/write.
|
|
31
31
|
* - A failing or throwing mutation releases the lane, so it never deadlocks.
|
|
32
|
+
* - `runSerializedInner` runs an optional in-lane precondition (the effect
|
|
33
|
+
* lease renewal) after the lane is acquired and before the inner provider
|
|
34
|
+
* call, so queue time plus limiter waits cannot outlive the lease.
|
|
32
35
|
*/
|
|
33
36
|
import { isSyncSheetsObservationBatchProvider, } from "../syncSheets.js";
|
|
34
37
|
import { AsyncMutex } from "./asyncMutex.js";
|
|
35
38
|
import { TRANSPORT_OUTCOME_KINDS, } from "./laneTelemetry.js";
|
|
36
39
|
import { classifyTransportOutcome } from "../transportOutcome.js";
|
|
40
|
+
/**
|
|
41
|
+
* Redacted, stable diagnostic for an aborted in-lane precondition.
|
|
42
|
+
*
|
|
43
|
+
* Static by design: it never embeds effect IDs, payloads, sheet names, or
|
|
44
|
+
* provider errors, so it is safe to persist on outbox rows and logs.
|
|
45
|
+
*/
|
|
46
|
+
const COORDINATED_LANE_PRECONDITION_MESSAGE = "Mutation lane precondition failed before the remote call; the request was not sent.";
|
|
47
|
+
/**
|
|
48
|
+
* Thrown when an in-lane precondition callback rejects before the remote
|
|
49
|
+
* call. Carries only the static redacted message above.
|
|
50
|
+
*/
|
|
51
|
+
export class CoordinatedLanePreconditionError extends Error {
|
|
52
|
+
constructor() {
|
|
53
|
+
super(COORDINATED_LANE_PRECONDITION_MESSAGE);
|
|
54
|
+
this.name = "CoordinatedLanePreconditionError";
|
|
55
|
+
}
|
|
56
|
+
}
|
|
37
57
|
/**
|
|
38
58
|
* Serializes provider mutations per lane while keeping value reads lock-free.
|
|
39
59
|
*
|
|
@@ -69,6 +89,23 @@ export class CoordinatedSheetsProvider {
|
|
|
69
89
|
runSerializedControl(physicalSheetId, operation, task) {
|
|
70
90
|
return this.runMutation(physicalSheetId, operation, task);
|
|
71
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Runs one internal remote task on the mutation lane with an optional
|
|
94
|
+
* in-lane precondition hook.
|
|
95
|
+
*
|
|
96
|
+
* The effect dispatcher uses this so the worker's lease-renewal callback
|
|
97
|
+
* runs AFTER the lane is acquired (covering queue wait time) but BEFORE the
|
|
98
|
+
* inner provider's remote call (covering shared limiter waits and the call
|
|
99
|
+
* itself). The `remote` closure receives the INNER provider and must call
|
|
100
|
+
* it directly, so the call never re-enters this coordinator's lane and
|
|
101
|
+
* cannot deadlock. When `beforeRemote` resolves false (or throws), a
|
|
102
|
+
* `CoordinatedLanePreconditionError` is raised before any remote request
|
|
103
|
+
* and the lane is released normally; lane telemetry still records the
|
|
104
|
+
* aborted dispatch with a delivery-uncertain outcome.
|
|
105
|
+
*/
|
|
106
|
+
runSerializedInner(physicalSheetId, operation, remote, beforeRemote) {
|
|
107
|
+
return this.runMutation(physicalSheetId, operation, () => remote(this.inner), beforeRemote);
|
|
108
|
+
}
|
|
72
109
|
async fastAppendRows(request) {
|
|
73
110
|
return this.runMutation(request.physicalSheetId, "fastAppendRows", () => this.inner.fastAppendRows(request));
|
|
74
111
|
}
|
|
@@ -142,11 +179,11 @@ export class CoordinatedSheetsProvider {
|
|
|
142
179
|
}
|
|
143
180
|
return lane;
|
|
144
181
|
}
|
|
145
|
-
async runMutation(physicalSheetId, operation, task) {
|
|
182
|
+
async runMutation(physicalSheetId, operation, task, beforeRemote) {
|
|
146
183
|
const key = this.resolveKey(physicalSheetId);
|
|
147
|
-
return this.runInLanes([key], operation, task);
|
|
184
|
+
return this.runInLanes([key], operation, task, beforeRemote);
|
|
148
185
|
}
|
|
149
|
-
async runInLanes(keys, operation, task) {
|
|
186
|
+
async runInLanes(keys, operation, task, beforeRemote) {
|
|
150
187
|
// Acquire lanes in stable sorted order so concurrent batch mutations cannot
|
|
151
188
|
// deadlock with each other regardless of input order. Each release token is
|
|
152
189
|
// held until the task settles so the lane stays locked for the whole call.
|
|
@@ -163,6 +200,12 @@ export class CoordinatedSheetsProvider {
|
|
|
163
200
|
const queueWaitMs = this.now() - queueStartedAt;
|
|
164
201
|
const remoteStartedAt = this.now();
|
|
165
202
|
try {
|
|
203
|
+
// The in-lane precondition runs after the queue wait but before any
|
|
204
|
+
// remote request; a false result aborts the dispatch with a redacted
|
|
205
|
+
// classified error instead of sending a write with an expired lease.
|
|
206
|
+
if (beforeRemote !== undefined && !(await beforeRemote())) {
|
|
207
|
+
throw new CoordinatedLanePreconditionError();
|
|
208
|
+
}
|
|
166
209
|
const result = await task();
|
|
167
210
|
this.emitSuccess(operation, ordered.join(","), queueWaitMs, remoteStartedAt);
|
|
168
211
|
return result;
|
|
@@ -215,6 +258,17 @@ export class CoordinatedSheetsProvider {
|
|
|
215
258
|
}
|
|
216
259
|
}
|
|
217
260
|
const DEFAULT_LANE_KEY = "default";
|
|
261
|
+
/**
|
|
262
|
+
* Returns whether a provider exposes the coordinator's in-lane dispatch hook.
|
|
263
|
+
*
|
|
264
|
+
* The effect dispatcher uses this to route its `beforeRemoteDispatch` lease
|
|
265
|
+
* renewal through the acquired mutation lane; providers without the hook
|
|
266
|
+
* (bare fakes and test doubles) keep the direct call path and simply ignore
|
|
267
|
+
* the hook.
|
|
268
|
+
*/
|
|
269
|
+
export function hasCoordinatedSerializedInner(provider) {
|
|
270
|
+
return typeof provider.runSerializedInner === "function";
|
|
271
|
+
}
|
|
218
272
|
/** Returns the distinct, sorted lane keys for one batch mutation. */
|
|
219
273
|
function distinctLaneKeys(keys) {
|
|
220
274
|
return [...new Set(keys)].sort();
|
package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoordinatedSheetsProvider.js","sourceRoot":"","sources":["../../../../../src/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"CoordinatedSheetsProvider.js","sourceRoot":"","sources":["../../../../../src/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type NormalizedCell } from "../../../shared/encoding/index.js";
|
|
3
|
+
/** Wire shape for one persisted projection effect before semantic promotion. */
|
|
4
|
+
export declare const syncProjectionEffectPayloadSchema: z.ZodObject<{
|
|
5
|
+
sheetName: z.ZodString;
|
|
6
|
+
registeredRange: z.ZodString;
|
|
7
|
+
schemaVersion: z.ZodNumber;
|
|
8
|
+
targetAnchor: z.ZodString;
|
|
9
|
+
fields: z.ZodRecord<z.ZodString, z.ZodCustom<NormalizedCell, NormalizedCell>>;
|
|
10
|
+
targetVisibleHash: z.ZodString;
|
|
11
|
+
createIfMissing: z.ZodBoolean;
|
|
12
|
+
expectedCandidateHash: z.ZodNullable<z.ZodString>;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
//# sourceMappingURL=payloadSchemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payloadSchemas.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/sheetsContract/payloadSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAW3C,gFAAgF;AAChF,eAAO,MAAM,iCAAiC;;;;;;;;;iBASpC,CAAC"}
|