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.
Files changed (139) hide show
  1. package/README.md +4 -0
  2. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts +23 -11
  3. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.d.ts.map +1 -1
  4. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js +26 -18
  5. package/dist/adapter/sheets/providers/google-sheets-api/GoogleSheetsApiSyncProvider.js.map +1 -1
  6. package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts +24 -5
  7. package/dist/adapter/sheets/providers/google-sheets-api/constants.d.ts.map +1 -1
  8. package/dist/adapter/sheets/providers/google-sheets-api/constants.js +24 -5
  9. package/dist/adapter/sheets/providers/google-sheets-api/constants.js.map +1 -1
  10. package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts +8 -0
  11. package/dist/adapter/sheets/providers/google-sheets-api/errors.d.ts.map +1 -1
  12. package/dist/adapter/sheets/providers/google-sheets-api/errors.js +20 -0
  13. package/dist/adapter/sheets/providers/google-sheets-api/errors.js.map +1 -1
  14. package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts +1 -1
  15. package/dist/adapter/sheets/providers/google-sheets-api/index.d.ts.map +1 -1
  16. package/dist/adapter/sheets/providers/google-sheets-api/index.js +1 -1
  17. package/dist/adapter/sheets/providers/google-sheets-api/index.js.map +1 -1
  18. package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.d.ts.map +1 -1
  19. package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.js +11 -29
  20. package/dist/adapter/sheets/providers/google-sheets-api/model/preflightParsing.js.map +1 -1
  21. package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.d.ts +20 -0
  22. package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.d.ts.map +1 -0
  23. package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.js +26 -0
  24. package/dist/adapter/sheets/providers/google-sheets-api/model/rawResponseSchemas.js.map +1 -0
  25. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts +11 -1
  26. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.d.ts.map +1 -1
  27. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js +12 -2
  28. package/dist/adapter/sheets/providers/google-sheets-api/model/valueNormalization.js.map +1 -1
  29. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.d.ts +19 -6
  30. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.d.ts.map +1 -1
  31. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.js +61 -14
  32. package/dist/adapter/sheets/providers/google-sheets-api/operations/shared.js.map +1 -1
  33. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts +13 -0
  34. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.d.ts.map +1 -1
  35. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js +60 -29
  36. package/dist/adapter/sheets/providers/google-sheets-api/transport/googleSheetsApiTransport.js.map +1 -1
  37. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts +40 -4
  38. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.d.ts.map +1 -1
  39. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js +26 -20
  40. package/dist/adapter/sheets/providers/google-sheets-api/transport/rateLimiter.js.map +1 -1
  41. package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.d.ts +7 -0
  42. package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.d.ts.map +1 -0
  43. package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.js +24 -0
  44. package/dist/adapter/sheets/providers/google-sheets-api/transport/rawErrorSchemas.js.map +1 -0
  45. package/dist/api/Hikoutei.d.ts.map +1 -1
  46. package/dist/api/Hikoutei.js +244 -30
  47. package/dist/api/Hikoutei.js.map +1 -1
  48. package/dist/api/internalEntityManager.d.ts.map +1 -1
  49. package/dist/api/internalEntityManager.js +152 -53
  50. package/dist/api/internalEntityManager.js.map +1 -1
  51. package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts +41 -0
  52. package/dist/application/sync/outbound/SheetsEffectDispatcher.d.ts.map +1 -1
  53. package/dist/application/sync/outbound/SheetsEffectDispatcher.js +85 -3
  54. package/dist/application/sync/outbound/SheetsEffectDispatcher.js.map +1 -1
  55. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
  56. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js +39 -5
  57. package/dist/application/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
  58. package/dist/application/sync/outbound/reconciliation/diff.d.ts +19 -1
  59. package/dist/application/sync/outbound/reconciliation/diff.d.ts.map +1 -1
  60. package/dist/application/sync/outbound/reconciliation/diff.js +60 -17
  61. package/dist/application/sync/outbound/reconciliation/diff.js.map +1 -1
  62. package/dist/application/sync/outbound/reconciliation/repair.d.ts +34 -3
  63. package/dist/application/sync/outbound/reconciliation/repair.d.ts.map +1 -1
  64. package/dist/application/sync/outbound/reconciliation/repair.js +120 -47
  65. package/dist/application/sync/outbound/reconciliation/repair.js.map +1 -1
  66. package/dist/application/sync/outbound/reconciliation/shared.d.ts +20 -0
  67. package/dist/application/sync/outbound/reconciliation/shared.d.ts.map +1 -1
  68. package/dist/application/sync/outbound/reconciliation/shared.js +35 -0
  69. package/dist/application/sync/outbound/reconciliation/shared.js.map +1 -1
  70. package/dist/application/sync/service/SyncPollingSupervisor.d.ts +16 -0
  71. package/dist/application/sync/service/SyncPollingSupervisor.d.ts.map +1 -1
  72. package/dist/application/sync/service/SyncPollingSupervisor.js +24 -0
  73. package/dist/application/sync/service/SyncPollingSupervisor.js.map +1 -1
  74. package/dist/application/sync/service/SyncServiceBootstrap.d.ts.map +1 -1
  75. package/dist/application/sync/service/SyncServiceBootstrap.js +26 -1
  76. package/dist/application/sync/service/SyncServiceBootstrap.js.map +1 -1
  77. package/dist/application/sync/service/configSchemas.d.ts +10 -0
  78. package/dist/application/sync/service/configSchemas.d.ts.map +1 -0
  79. package/dist/application/sync/service/configSchemas.js +13 -0
  80. package/dist/application/sync/service/configSchemas.js.map +1 -0
  81. package/dist/application/sync/service/effectSupervisor.d.ts.map +1 -1
  82. package/dist/application/sync/service/effectSupervisor.js +114 -9
  83. package/dist/application/sync/service/effectSupervisor.js.map +1 -1
  84. package/dist/application/sync/service/pollingSupervisor.d.ts +17 -0
  85. package/dist/application/sync/service/pollingSupervisor.d.ts.map +1 -1
  86. package/dist/application/sync/service/pollingSupervisor.js +103 -3
  87. package/dist/application/sync/service/pollingSupervisor.js.map +1 -1
  88. package/dist/application/sync/service/serviceOptionSchemas.d.ts +11 -0
  89. package/dist/application/sync/service/serviceOptionSchemas.d.ts.map +1 -0
  90. package/dist/application/sync/service/serviceOptionSchemas.js +11 -0
  91. package/dist/application/sync/service/serviceOptionSchemas.js.map +1 -0
  92. package/dist/application/sync/service/serviceOptions.d.ts.map +1 -1
  93. package/dist/application/sync/service/serviceOptions.js +20 -6
  94. package/dist/application/sync/service/serviceOptions.js.map +1 -1
  95. package/dist/application/sync/service/shutdown.d.ts.map +1 -1
  96. package/dist/application/sync/service/shutdown.js +6 -2
  97. package/dist/application/sync/service/shutdown.js.map +1 -1
  98. package/dist/application/sync/service/syncAutoStart.d.ts +71 -6
  99. package/dist/application/sync/service/syncAutoStart.d.ts.map +1 -1
  100. package/dist/application/sync/service/syncAutoStart.js +175 -12
  101. package/dist/application/sync/service/syncAutoStart.js.map +1 -1
  102. package/dist/application/sync/service/systemStateReadiness.d.ts +35 -0
  103. package/dist/application/sync/service/systemStateReadiness.d.ts.map +1 -0
  104. package/dist/application/sync/service/systemStateReadiness.js +51 -0
  105. package/dist/application/sync/service/systemStateReadiness.js.map +1 -0
  106. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts +37 -1
  107. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.d.ts.map +1 -1
  108. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js +57 -3
  109. package/dist/application/sync/sheetsContract/mutationCoordinator/CoordinatedSheetsProvider.js.map +1 -1
  110. package/dist/application/sync/sheetsContract/payloadSchemas.d.ts +14 -0
  111. package/dist/application/sync/sheetsContract/payloadSchemas.d.ts.map +1 -0
  112. package/dist/application/sync/sheetsContract/payloadSchemas.js +18 -0
  113. package/dist/application/sync/sheetsContract/payloadSchemas.js.map +1 -0
  114. package/dist/application/sync/sheetsContract/syncSheets.d.ts.map +1 -1
  115. package/dist/application/sync/sheetsContract/syncSheets.js +12 -31
  116. package/dist/application/sync/sheetsContract/syncSheets.js.map +1 -1
  117. package/dist/application/sync/sheetsContract/transportOutcome.d.ts +32 -5
  118. package/dist/application/sync/sheetsContract/transportOutcome.d.ts.map +1 -1
  119. package/dist/application/sync/sheetsContract/transportOutcome.js +101 -7
  120. package/dist/application/sync/sheetsContract/transportOutcome.js.map +1 -1
  121. package/dist/internal/syncStatus.js +33 -2
  122. package/dist/internal/syncStatus.js.map +1 -1
  123. package/dist/shared/observability/index.d.ts +9 -0
  124. package/dist/shared/observability/index.d.ts.map +1 -0
  125. package/dist/shared/observability/index.js +9 -0
  126. package/dist/shared/observability/index.js.map +1 -0
  127. package/dist/shared/observability/internalLog.d.ts +175 -0
  128. package/dist/shared/observability/internalLog.d.ts.map +1 -0
  129. package/dist/shared/observability/internalLog.js +471 -0
  130. package/dist/shared/observability/internalLog.js.map +1 -0
  131. package/dist/shared/observability/logEvents.d.ts +96 -0
  132. package/dist/shared/observability/logEvents.d.ts.map +1 -0
  133. package/dist/shared/observability/logEvents.js +247 -0
  134. package/dist/shared/observability/logEvents.js.map +1 -0
  135. package/dist/shared/validation/zodBoundary.d.ts +10 -0
  136. package/dist/shared/validation/zodBoundary.d.ts.map +1 -0
  137. package/dist/shared/validation/zodBoundary.js +24 -0
  138. package/dist/shared/validation/zodBoundary.js.map +1 -0
  139. 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
- return new SyncPollingSupervisor({
57
+ let supervisor;
58
+ supervisor = new SyncPollingSupervisor({
47
59
  runPass: runPollingPass,
48
60
  ...(options.pollingIntervalMs === undefined ? {} : { intervalMs: options.pollingIntervalMs }),
49
- onReport: (report) => options.onPollingReport?.(report),
50
- ...(options.onPollingError === undefined ? {} : { onError: options.onPollingError }),
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;AAEnE,MAAM,qCAAqC,GAAG,MAAM,CAAC;AAWrD,MAAM,UAAU,uBAAuB,CACrC,KAAmC;IAEnC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC/D,MAAM,yBAAyB,GAAG,OAAO,CAAC,yBAAyB;WAC9D,qCAAqC,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACtC,IAAI,wBAA4C,CAAC;IACjD,MAAM,cAAc,GAAG,KAAK,IAA2C,EAAE;QACvE,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;QACpB,MAAM,cAAc,GAAG,wBAAwB,KAAK,SAAS;YAC3D,GAAG,GAAG,wBAAwB,IAAI,yBAAyB,CAAC;QAC9D,4EAA4E;QAC5E,4EAA4E;QAC5E,uEAAuE;QACvE,MAAM,eAAe,GAAG,cAAc,IAAI,wBAAwB,KAAK,SAAS;YAC9E,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,wBAAwB,GAAG,yBAAyB,CAAC;YACzE,CAAC,CAAC,CAAC,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC;YACnD,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,MAAM;YACN,IAAI,EAAE,4BAA4B,CAAC,QAAQ;YAC3C,SAAS,EAAE,cAAc;YACzB,eAAe;YACf,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;SAC1E,CAAC,CAAC;QACH,4EAA4E;QAC5E,+EAA+E;QAC/E,IAAI,MAAM,CAAC,cAAc;YAAE,wBAAwB,GAAG,KAAK,EAAE,CAAC;QAC9D,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,OAAO,IAAI,qBAAqB,CAAC;QAC/B,OAAO,EAAE,cAAc;QACvB,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC7F,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;QACvD,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;KACrF,CAAC,CAAC;AACL,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 own timeout;
96
- // the lease must cover the whole sequence, so the headroom check sums
97
- // the write timeout and two read timeouts. Defaults: 60 + 2x10 + 30 =
98
- // 110 s, inside the 120 s default effect lease.
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
- if (effectLeaseDurationMs <= requestTimeoutMs + 2 * readTimeoutMs +
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 read timeouts by 30 seconds before supervisors start.");
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":"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"}
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,EAML,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAE3B,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,CA6Cf;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"}
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, safeErrorMessage, } from "@hikoutei/ikisaki";
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
- console.warn(`[sync-service] writer lease release failed for role "${role}": ${safeErrorMessage(error)}`);
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":"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"}
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, projection auto-generation from
7
- * entity descriptors, and fail-closed startup failure classification. It is
8
- * never re-exported from `src/index.ts`; the public factory calls it only when
9
- * `HIKOUTEI_SYNC_SPREADSHEET_URL` is set, so local-only users never load the
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. Never receives secrets or full URLs. */
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;AAU7G,OAAO,KAAK,EAEV,4BAA4B,EAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,2BAA2B,CAAC;AAEnC,uDAAuD;AACvD,eAAO,MAAM,aAAa;IACxB,sEAAsE;;IAEtE,0DAA0D;;IAE1D,yEAAyE;;IAEzE,gFAAgF;;CAExE,CAAC;AAEX,6EAA6E;AAC7E,eAAO,MAAM,gCAAgC,QAAS,CAAC;AACvD,sFAAsF;AACtF,eAAO,MAAM,kCAAkC,QAAS,CAAC;AAEzD,8DAA8D;AAC9D,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnD,iFAAiF;AACjF,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEnF,mFAAmF;AACnF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,uEAAuE;IACvE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC5D,oFAAoF;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAC9C,iEAAiE;IACjE,QAAQ,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC;CACxC;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,gFAAgF;AAChF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC;AAED,MAAM,MAAM,yBAAyB,GAAG,sBAAsB,GAAG,wBAAwB,CAAC;AAQ1F;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAczE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,yBAAyB,CAAC,CA6DpC;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,OAAO,CAAC;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAgD3C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,aAAa,EAAE,MAAM,GACpB,4BAA4B,CAuB9B;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,aAAa,CA8Cf"}
1
+ {"version":3,"file":"syncAutoStart.d.ts","sourceRoot":"","sources":["../../../../src/application/sync/service/syncAutoStart.ts"],"names":[],"mappings":"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"}