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
|
@@ -10,7 +10,18 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { MAPPED_USER_INPUT_POLL_MODES, pollMappedUserInputWithMikroOrm, } from "../../../adapter/persistence/providers/mikro-orm/observation/MikroOrmUserInputPolling.js";
|
|
12
12
|
import { SyncPollingSupervisor } from "./SyncPollingSupervisor.js";
|
|
13
|
+
import { readSystemStateDrainReadinessWithAdapter } from "@hikoutei/ikisaki";
|
|
14
|
+
import { describeErrorForInternalLog, logHikouteiInternalEvent, } from "../../../shared/observability/internalLog.js";
|
|
15
|
+
import { HIKOUTEI_LOG_COMPONENTS, HIKOUTEI_LOG_EVENTS, } from "../../../shared/observability/logEvents.js";
|
|
13
16
|
const DEFAULT_POLLING_FULL_SCAN_INTERVAL_MS = 60_000;
|
|
17
|
+
/**
|
|
18
|
+
* SQLite poll cadence for the first-pass System_State drain gate.
|
|
19
|
+
*
|
|
20
|
+
* While the gate is pending the loop performs one cheap outbox read per
|
|
21
|
+
* tick and nothing else; 250 ms keeps the first polling pass starting
|
|
22
|
+
* promptly after the drain without hammering SQLite.
|
|
23
|
+
*/
|
|
24
|
+
const FIRST_POLLING_PASS_READINESS_POLL_MS = 250;
|
|
14
25
|
export function createPollingSupervisor(input) {
|
|
15
26
|
const { storage, provider, mappings, writer, options } = input;
|
|
16
27
|
const pollingFullScanIntervalMs = options.pollingFullScanIntervalMs
|
|
@@ -43,11 +54,100 @@ export function createPollingSupervisor(input) {
|
|
|
43
54
|
lastSuccessfulFullScanAt = clock();
|
|
44
55
|
return report;
|
|
45
56
|
};
|
|
46
|
-
|
|
57
|
+
let supervisor;
|
|
58
|
+
supervisor = new SyncPollingSupervisor({
|
|
47
59
|
runPass: runPollingPass,
|
|
48
60
|
...(options.pollingIntervalMs === undefined ? {} : { intervalMs: options.pollingIntervalMs }),
|
|
49
|
-
|
|
50
|
-
|
|
61
|
+
// First-polling-pass gate: on a cold start the effect worker drains the
|
|
62
|
+
// initial System_State backlog while the first polling pass would
|
|
63
|
+
// otherwise compete with it on the shared request limiter. The loop's
|
|
64
|
+
// FIRST pass therefore waits (SQLite-only checks, stop-interruptible)
|
|
65
|
+
// until no claimable System_State drain work is left; terminal failed
|
|
66
|
+
// or conflict rows — and the pending followers they block — never
|
|
67
|
+
// defer, so a stuck stream cannot stall polling forever. After the
|
|
68
|
+
// first pass the gate is no longer consulted and the normal cadence
|
|
69
|
+
// (interval + safety full scans) is preserved. Manual runOnce() calls
|
|
70
|
+
// are caller-driven and bypass the gate.
|
|
71
|
+
waitForFirstPass: async () => {
|
|
72
|
+
await waitForSystemStateDrainReadiness({
|
|
73
|
+
storage,
|
|
74
|
+
isStopping: () => supervisor.isStopping(),
|
|
75
|
+
pollIntervalMs: FIRST_POLLING_PASS_READINESS_POLL_MS,
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
onReport: (report) => {
|
|
79
|
+
// Only passes that observed or changed something emit a summary line;
|
|
80
|
+
// idle scans stay silent so long soak runs do not accumulate noise.
|
|
81
|
+
if (isNotablePollingReport(report)) {
|
|
82
|
+
logHikouteiInternalEvent({
|
|
83
|
+
event: HIKOUTEI_LOG_EVENTS.POLLING_PASS_SUMMARY,
|
|
84
|
+
level: "info",
|
|
85
|
+
component: HIKOUTEI_LOG_COMPONENTS.POLLING,
|
|
86
|
+
durationMs: Math.round(report.elapsedMs),
|
|
87
|
+
counts: {
|
|
88
|
+
rowsScanned: report.rowsScanned,
|
|
89
|
+
changedRows: report.changedRows,
|
|
90
|
+
appliedRows: report.appliedRows,
|
|
91
|
+
conflictRows: report.conflictRows,
|
|
92
|
+
quarantinedRows: report.quarantinedRows,
|
|
93
|
+
duplicateRows: report.duplicateRows,
|
|
94
|
+
staleRows: report.staleRows,
|
|
95
|
+
fencedRows: report.fencedRows,
|
|
96
|
+
invalidRows: report.invalidRows,
|
|
97
|
+
unknownBusinessKeyRows: report.unknownBusinessKeyRows,
|
|
98
|
+
duplicateBusinessKeyRows: report.duplicateBusinessKeyRows,
|
|
99
|
+
},
|
|
100
|
+
retryable: true,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
options.onPollingReport?.(report);
|
|
104
|
+
},
|
|
105
|
+
onError: (error) => {
|
|
106
|
+
// Polling failures back off and retry inside the supervisor; the log
|
|
107
|
+
// line is the durable record of the pass failure.
|
|
108
|
+
logHikouteiInternalEvent({
|
|
109
|
+
event: HIKOUTEI_LOG_EVENTS.POLLING_PASS_FAILED,
|
|
110
|
+
level: "error",
|
|
111
|
+
component: HIKOUTEI_LOG_COMPONENTS.POLLING,
|
|
112
|
+
...describeErrorForInternalLog(error),
|
|
113
|
+
retryable: true,
|
|
114
|
+
});
|
|
115
|
+
options.onPollingError?.(error);
|
|
116
|
+
},
|
|
51
117
|
});
|
|
118
|
+
return supervisor;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Waits (SQLite-only) until no claimable System_State drain work remains.
|
|
122
|
+
*
|
|
123
|
+
* Polls the kernel's System_State drain classification through the shared
|
|
124
|
+
* storage adapter — never the remote provider — until it reports `ready`
|
|
125
|
+
* or until `isStopping()` turns true (the loop's stop() is honored within
|
|
126
|
+
* one poll tick, so shutdown never waits for the drain). Only genuinely
|
|
127
|
+
* claimable System_State work (processing/delivery_uncertain effects and
|
|
128
|
+
* pending claimable heads) defers; terminal failed/conflict rows and the
|
|
129
|
+
* pending followers they block never defer, so a permanently stuck stream
|
|
130
|
+
* cannot stall the first polling pass forever.
|
|
131
|
+
*/
|
|
132
|
+
export async function waitForSystemStateDrainReadiness(options) {
|
|
133
|
+
const pollIntervalMs = options.pollIntervalMs ?? FIRST_POLLING_PASS_READINESS_POLL_MS;
|
|
134
|
+
while (!options.isStopping()) {
|
|
135
|
+
const readiness = await readSystemStateDrainReadinessWithAdapter(options.storage);
|
|
136
|
+
if (readiness.status === "ready")
|
|
137
|
+
return;
|
|
138
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** True when a polling pass observed or applied something worth logging. */
|
|
142
|
+
function isNotablePollingReport(report) {
|
|
143
|
+
return report.appliedRows > 0 ||
|
|
144
|
+
report.conflictRows > 0 ||
|
|
145
|
+
report.quarantinedRows > 0 ||
|
|
146
|
+
report.duplicateRows > 0 ||
|
|
147
|
+
report.staleRows > 0 ||
|
|
148
|
+
report.fencedRows > 0 ||
|
|
149
|
+
report.invalidRows > 0 ||
|
|
150
|
+
report.unknownBusinessKeyRows > 0 ||
|
|
151
|
+
report.duplicateBusinessKeyRows > 0;
|
|
52
152
|
}
|
|
53
153
|
//# sourceMappingURL=pollingSupervisor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pollingSupervisor.js","sourceRoot":"","sources":["../../../../src/application/sync/service/pollingSupervisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,EACL,4BAA4B,EAC5B,+BAA+B,GAEhC,MAAM,0FAA0F,CAAC;AAClG,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"pollingSupervisor.js","sourceRoot":"","sources":["../../../../src/application/sync/service/pollingSupervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Non-empty text accepted by internal sync service options. */
|
|
3
|
+
export declare const internalSyncTextSchema: z.ZodString;
|
|
4
|
+
/** Positive safe integer accepted by internal sync service timing options. */
|
|
5
|
+
export declare const internalPositiveSafeIntegerSchema: z.ZodNumber;
|
|
6
|
+
/** Structural shape of one generated or configured projection route. */
|
|
7
|
+
export declare const internalSyncRouteSchema: z.ZodObject<{
|
|
8
|
+
tabName: z.ZodString;
|
|
9
|
+
registeredRange: z.ZodString;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
//# sourceMappingURL=serviceOptionSchemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceOptionSchemas.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/service/serviceOptionSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,aAGlC,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,iCAAiC,aAG7C,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,uBAAuB;;;iBAG1B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Non-empty text accepted by internal sync service options. */
|
|
3
|
+
export const internalSyncTextSchema = z.string().refine((value) => value.trim().length > 0, { message: "must be a non-empty string" });
|
|
4
|
+
/** Positive safe integer accepted by internal sync service timing options. */
|
|
5
|
+
export const internalPositiveSafeIntegerSchema = z.number().refine((value) => Number.isSafeInteger(value) && value >= 1, { message: "must be a positive safe integer" });
|
|
6
|
+
/** Structural shape of one generated or configured projection route. */
|
|
7
|
+
export const internalSyncRouteSchema = z.object({
|
|
8
|
+
tabName: internalSyncTextSchema,
|
|
9
|
+
registeredRange: internalSyncTextSchema,
|
|
10
|
+
}).strip();
|
|
11
|
+
//# sourceMappingURL=serviceOptionSchemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceOptionSchemas.js","sourceRoot":"","sources":["../../../../src/application/sync/service/serviceOptionSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gEAAgE;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CACrD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAClC,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAC1C,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAChE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EACpD,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAC/C,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,OAAO,EAAE,sBAAsB;IAC/B,eAAe,EAAE,sBAAsB;CACxC,CAAC,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceOptions.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/service/serviceOptions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"serviceOptions.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/service/serviceOptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,10 +92,17 @@ function validateEffectLeaseHeadroom(options) {
|
|
|
92
92
|
throw new SyncServiceError(SYNC_SERVICE_ERROR_CODES.INVALID_OPTIONS, "sync service googleSheetsApi requestTimeoutMs must be between 1 second and 120 seconds.");
|
|
93
93
|
}
|
|
94
94
|
// A direct-mode dispatch performs up to THREE sequential paced transport
|
|
95
|
-
// calls (two preflight reads plus one write), each with its
|
|
96
|
-
// the lease must cover the whole sequence
|
|
97
|
-
//
|
|
98
|
-
//
|
|
95
|
+
// calls (two preflight/postcondition reads plus one write), each with its
|
|
96
|
+
// own timeout; the lease must cover the whole sequence. The request-start
|
|
97
|
+
// limiter keeps consecutive starts at least `intervalMs` apart, and a
|
|
98
|
+
// dispatch can wait up to one FULL interval for its first slot because
|
|
99
|
+
// the shared limiter may hold a prior reservation, so the paced worst
|
|
100
|
+
// case is the write timeout plus ONE interval (the first-slot wait) plus
|
|
101
|
+
// TWO more slots of the LARGER of the read timeout and the interval (a
|
|
102
|
+
// read duration covers its own interval wait when it is the larger term,
|
|
103
|
+
// and the interval covers it when it is not; the two never add on top of
|
|
104
|
+
// each other). Defaults with the 2,500 ms interval: 60 + 2.5 + 2x10 + 30
|
|
105
|
+
// = 112.5 s, inside the 120 s default effect lease.
|
|
99
106
|
const readTimeoutMs = options.googleSheetsApi.readTimeoutMs
|
|
100
107
|
?? GOOGLE_SHEETS_API_DEFAULTS.READ_TIMEOUT_MS;
|
|
101
108
|
if (!Number.isSafeInteger(readTimeoutMs) ||
|
|
@@ -103,9 +110,16 @@ function validateEffectLeaseHeadroom(options) {
|
|
|
103
110
|
readTimeoutMs > GOOGLE_SHEETS_API_DEFAULTS.MAX_READ_TIMEOUT_MS) {
|
|
104
111
|
throw new SyncServiceError(SYNC_SERVICE_ERROR_CODES.INVALID_OPTIONS, "sync service googleSheetsApi readTimeoutMs must be between 1 second and 60 seconds.");
|
|
105
112
|
}
|
|
106
|
-
|
|
113
|
+
const intervalMs = options.googleSheetsApi.rateLimitIntervalMs
|
|
114
|
+
?? GOOGLE_SHEETS_API_DEFAULTS.REQUEST_START_INTERVAL_MS;
|
|
115
|
+
if (!Number.isSafeInteger(intervalMs) || intervalMs < 0) {
|
|
116
|
+
throw new SyncServiceError(SYNC_SERVICE_ERROR_CODES.INVALID_OPTIONS, "sync service googleSheetsApi rateLimitIntervalMs must be a non-negative safe integer.");
|
|
117
|
+
}
|
|
118
|
+
if (effectLeaseDurationMs <= requestTimeoutMs +
|
|
119
|
+
intervalMs +
|
|
120
|
+
2 * Math.max(readTimeoutMs, intervalMs) +
|
|
107
121
|
EFFECT_LEASE_PROVIDER_HEADROOM_MS) {
|
|
108
|
-
throw new SyncServiceError(SYNC_SERVICE_ERROR_CODES.INVALID_OPTIONS, "sync service effectLeaseDurationMs must exceed Google Sheets API requestTimeoutMs plus two
|
|
122
|
+
throw new SyncServiceError(SYNC_SERVICE_ERROR_CODES.INVALID_OPTIONS, "sync service effectLeaseDurationMs must exceed Google Sheets API requestTimeoutMs plus the request-start interval and two paced request slots (the larger of readTimeoutMs and the request-start interval) by 30 seconds before supervisors start.");
|
|
109
123
|
}
|
|
110
124
|
}
|
|
111
125
|
function validateEntityConfig(entityName, descriptor, config, routes, spreadsheetId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceOptions.js","sourceRoot":"","sources":["../../../../src/application/sync/service/serviceOptions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiBzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,kEAAkE,CAAC;AAC9G,OAAO,EACL,gCAAgC,EAChC,gCAAgC,EAChC,iCAAiC,GAGlC,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EACL,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAmErB;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAA0C;IAE1C,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,eAAe;YAClB,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,6EAA6E,CAC9E,CAAC;QACJ,KAAK,gBAAgB;YACnB,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,wBAAwB,OAAO,CAAC,UAAU,iCAAiC,CAC5E,CAAC;QACJ,KAAK,iBAAiB;YACpB,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,uBAAuB,OAAO,CAAC,SAAS,mBAAmB,OAAO,CAAC,eAAe,UAAU,OAAO,CAAC,gBAAgB,IAAI,CACzH,CAAC;IACN,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAmC,EACnC,WAAkE;IAElE,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjC,MAAM,IAAI,gBAAgB,CAAC,wBAAwB,CAAC,eAAe,EAAE,kCAAkC,CAAC,CAAC;IAC3G,CAAC;IACD,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACrC,IACE,OAAO,CAAC,yBAAyB,KAAK,SAAS;QAC/C,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,OAAO,CAAC,yBAAyB,GAAG,CAAC,CAAC,EACnG,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IACD,IACE,OAAO,CAAC,wBAAwB,KAAK,SAAS;QAC9C,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,OAAO,CAAC,wBAAwB,GAAG,CAAC,CAAC,EACjG,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,4BAA4B,CAAC,CAAC;IAC7E,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,4CAA4C,CAC7C,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,sBAAsB,CAAC,yCAAyC,UAAU,IAAI,CAAC,CAAC;QAClF,CAAC;QACD,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACxG,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,sBAAsB,CAAC,+CAA+C,UAAU,IAAI,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5E,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACxE,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,yDAAyD,CAC1D,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC5E,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,oBAAoB,EAC7C,gFAAgF,CACjF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,OAAmC;IACtE,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,gCAAgC,CAAC;IAChG,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC;QAC5C,qBAAqB,GAAG,CAAC,EACzB,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,qEAAqE,CACtE,CAAC;IACJ,CAAC;IACD,IAAI,qBAAqB,IAAI,gCAAgC,EAAE,CAAC;QAC9D,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,sFAAsF,CACvF,CAAC;IACJ,CAAC;IACD,oEAAoE;IACpE,sEAAsE;IACtE,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;QAAE,OAAO;IAElD,yEAAyE;IACzE,oEAAoE;IACpE,MAAM,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,gBAAgB;WAC5D,0BAA0B,CAAC,kBAAkB,CAAC;IACnD,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;QACvC,gBAAgB,GAAG,0BAA0B,CAAC,sBAAsB;QACpE,gBAAgB,GAAG,0BAA0B,CAAC,sBAAsB,EACpE,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,wBAAwB,CAAC,eAAe,EACxC,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IACD,yEAAyE;IACzE,
|
|
1
|
+
{"version":3,"file":"serviceOptions.js","sourceRoot":"","sources":["../../../../src/application/sync/service/serviceOptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/service/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mFAAmF,CAAC;AAC/H,OAAO,
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/service/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mFAAmF,CAAC;AAC/H,OAAO,EAKL,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0FAA0F,CAAC;AAC7I,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,8BAA8B,EACtC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED,6DAA6D;AAC7D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,4BAA4B,CAAC,CAAC;IAChF,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;CACnD;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAqCpF"}
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* releases mirrored from every claim site wired into the bootstrap.
|
|
8
8
|
*/
|
|
9
9
|
import { DEFAULT_MAPPED_WRITER_ROLE, } from "../../orm/persistence/support/contracts.js";
|
|
10
|
-
import { DEFAULT_WORKER_ROLE, LOOKUP_RESULT_KINDS, readWriterLeaseWithAdapter, releaseWriterLeaseWithAdapter,
|
|
10
|
+
import { DEFAULT_WORKER_ROLE, LOOKUP_RESULT_KINDS, readWriterLeaseWithAdapter, releaseWriterLeaseWithAdapter, } from "@hikoutei/ikisaki";
|
|
11
11
|
import { RECONCILIATION_DEFAULTS } from "../outbound/reconciliation/ReconciliationScanner.js";
|
|
12
|
+
import { stableConsoleErrorTag } from "../../../shared/observability/internalLog.js";
|
|
12
13
|
/**
|
|
13
14
|
* Expires this runtime's own writer leases on graceful shutdown.
|
|
14
15
|
*
|
|
@@ -58,7 +59,10 @@ export async function expireRuntimeWriterLeases(storage, writer, effectWorkerId)
|
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
catch (error) {
|
|
61
|
-
|
|
62
|
+
// Default console diagnostics emit only the stable allowlisted
|
|
63
|
+
// class/code tag — never the raw message, which can embed provider
|
|
64
|
+
// payload fragments, spreadsheet IDs, emails, or paths.
|
|
65
|
+
console.warn(`[sync-service] writer lease release failed for role "${role}": ${stableConsoleErrorTag(error)}`);
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../../../src/application/sync/service/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,0BAA0B,GAE3B,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,6BAA6B,
|
|
1
|
+
{"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../../../src/application/sync/service/shutdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
@@ -35,14 +35,46 @@ export declare const SYNC_ENV_KEYS: {
|
|
|
35
35
|
readonly POLLING_INTERVAL_MS: "HIKOUTEI_SYNC_POLLING_INTERVAL_MS";
|
|
36
36
|
/** Optional metadata safety full-scan cadence in ms; defaults to 60 seconds. */
|
|
37
37
|
readonly FULL_SCAN_INTERVAL_MS: "HIKOUTEI_SYNC_FULL_SCAN_INTERVAL_MS";
|
|
38
|
+
/**
|
|
39
|
+
* Optional request-start pacing in ms for the direct provider's ONE shared
|
|
40
|
+
* read+write limiter; absent uses the safe default (2,500 ms). Internal
|
|
41
|
+
* only — never part of the root public API.
|
|
42
|
+
*/
|
|
43
|
+
readonly RATE_LIMIT_INTERVAL_MS: "HIKOUTEI_SYNC_RATE_LIMIT_INTERVAL_MS";
|
|
38
44
|
};
|
|
39
45
|
/** Default polling cadence applied when the interval env vars are absent. */
|
|
40
46
|
export declare const DEFAULT_SYNC_POLLING_INTERVAL_MS = 60000;
|
|
41
47
|
/** Default safety full-scan cadence applied when the interval env vars are absent. */
|
|
42
48
|
export declare const DEFAULT_SYNC_FULL_SCAN_INTERVAL_MS = 60000;
|
|
49
|
+
/** Lower bound for the sync request-start pacing env override (1 second). */
|
|
50
|
+
export declare const MIN_SYNC_RATE_LIMIT_INTERVAL_MS = 1000;
|
|
51
|
+
/**
|
|
52
|
+
* Upper bound for the sync request-start pacing env override.
|
|
53
|
+
*
|
|
54
|
+
* A worst-case effect dispatch performs THREE sequential paced transport
|
|
55
|
+
* calls (two preflight/postcondition reads plus one batch write). The effect
|
|
56
|
+
* lease must still cover the whole sequence with the 30-second provider
|
|
57
|
+
* headroom, and a dispatch can wait up to one FULL interval for its first
|
|
58
|
+
* slot because the shared limiter may hold a prior reservation — admission
|
|
59
|
+
* is BOUNDED to one interval, so a request whose slot lies further out is
|
|
60
|
+
* refused before any SDK call (delivery-uncertain, requeued durably)
|
|
61
|
+
* instead of waiting past the lease. With the DEFAULT lease, write timeout,
|
|
62
|
+
* and read timeout the interval must satisfy
|
|
63
|
+
* `120s > 60s + I + 2 * max(10s, I) + 30s`, i.e. `I < 10s`. Below
|
|
64
|
+
* the 10 s read timeout the two read slots cost 2 x 10 s and the interval
|
|
65
|
+
* adds once, so the bound is `I < 120 - 60 - 2x10 - 30 = 10 s`; at or
|
|
66
|
+
* above the read timeout the interval dominates (`3I < 30s` has no
|
|
67
|
+
* solution at or above 10 s), so the below-read-slot branch is binding.
|
|
68
|
+
* The ceiling below is derived from those defaults (10,000 - 1 = 9,999 ms)
|
|
69
|
+
* and the service-level lease-headroom validation applies the same math to
|
|
70
|
+
* the ACTIVE lease and timeouts, so an override that could let pacing push
|
|
71
|
+
* a dispatch past the lease is rejected with a stable startup failure
|
|
72
|
+
* instead of risking lease expiry and duplicate remote delivery.
|
|
73
|
+
*/
|
|
74
|
+
export declare const MAX_SYNC_RATE_LIMIT_INTERVAL_MS: number;
|
|
43
75
|
/** Diagnostic log levels emitted by the auto-start bridge. */
|
|
44
76
|
export type SyncDiagnosticLevel = "info" | "error";
|
|
45
|
-
/** Diagnostic sink; defaults to console.
|
|
77
|
+
/** Diagnostic sink; defaults to console. Receives only stable class/code summaries, never full failure messages. */
|
|
46
78
|
export type SyncDiagnostic = (level: SyncDiagnosticLevel, message: string) => void;
|
|
47
79
|
/** Internal auto-start options; none are part of the root application contract. */
|
|
48
80
|
export interface SyncAutoStartOptions {
|
|
@@ -125,4 +157,37 @@ export declare function buildSyncProjections(entities: readonly HikouteiEntity[]
|
|
|
125
157
|
* else (timeout, network, invalid options) maps to the generic startup code.
|
|
126
158
|
*/
|
|
127
159
|
export declare function classifySyncStartupFailure(error: unknown, spreadsheetId: string, clientEmail: string): HikouteiError;
|
|
160
|
+
/**
|
|
161
|
+
* Resolves the sync request-start pacing env override, or undefined.
|
|
162
|
+
*
|
|
163
|
+
* `HIKOUTEI_SYNC_RATE_LIMIT_INTERVAL_MS` is the internal override for the
|
|
164
|
+
* direct provider's ONE shared read+write request-start limiter. Absent or
|
|
165
|
+
* blank means the provider's safe default (2,500 ms) applies; a present
|
|
166
|
+
* value must be a plain decimal integer between 1,000 ms and
|
|
167
|
+
* `MAX_SYNC_RATE_LIMIT_INTERVAL_MS` (~10 s). The ceiling is the largest
|
|
168
|
+
* interval whose worst-case three-request paced dispatch still finishes
|
|
169
|
+
* inside the default effect lease (120 s) with the default write timeout
|
|
170
|
+
* (60 s), read timeout (10 s), and provider headroom (30 s): a dispatch
|
|
171
|
+
* can wait up to one full interval for its first slot because the shared
|
|
172
|
+
* limiter may hold a prior reservation, so the strict default-safe bound
|
|
173
|
+
* is `120s > 60s + I + 2 * max(10s, I) + 30s` and a larger interval could
|
|
174
|
+
* let pacing push the dispatch past the lease and risk duplicate remote
|
|
175
|
+
* delivery. Values outside those bounds (including hex,
|
|
176
|
+
* exponent, signed, padded, fractional, and non-numeric forms) fail closed
|
|
177
|
+
* with the stable startup code so a mistyped override can never silently
|
|
178
|
+
* drop pacing to a burst or outlive the effect lease. The key stays internal
|
|
179
|
+
* and is never part of the root public API.
|
|
180
|
+
*/
|
|
181
|
+
export declare function resolveSyncRateLimitIntervalMs(env: Readonly<Record<string, string | undefined>>): number | undefined;
|
|
182
|
+
/**
|
|
183
|
+
* Stable redacted startup summary for diagnostic sinks: class and code
|
|
184
|
+
* only, each checked against the shared stable allowlists.
|
|
185
|
+
*
|
|
186
|
+
* `failure.name` and `failure.code` are runtime strings that could carry
|
|
187
|
+
* secret-like text (paths, emails, tokens) if an unexpected error shape
|
|
188
|
+
* ever reached the sink path, so unknown or malformed values collapse to
|
|
189
|
+
* the fixed `unknown` class/code. The full public message is carried by
|
|
190
|
+
* the thrown HikouteiError alone and never reaches any sink.
|
|
191
|
+
*/
|
|
192
|
+
export declare function stableStartupDiagnostic(failure: HikouteiError): string;
|
|
128
193
|
//# sourceMappingURL=syncAutoStart.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncAutoStart.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/service/syncAutoStart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8DAA8D,CAAC;
|
|
1
|
+
{"version":3,"file":"syncAutoStart.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/service/syncAutoStart.ts"],"names":[],"mappings":"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"}
|